feat(renderer): Sidebar, FileTree, Outline components wired into AppShell

This commit is contained in:
2026-06-05 14:59:15 +05:30
parent 77c8e05fa5
commit 05bbb9f86b
9 changed files with 1240 additions and 2 deletions
@@ -0,0 +1,50 @@
import { ChevronRight } from 'lucide-react';
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@/components/ui/collapsible';
import { ScrollArea } from '@/components/ui/scroll-area';
import { useFileStore } from '@/stores/file-store';
import { FileTree } from './FileTree';
import { Outline } from './Outline';
export function Sidebar() {
const rootPath = useFileStore((s) => s.rootPath);
return (
<div className="flex h-full flex-col gap-3">
{/* Files section */}
<Collapsible defaultOpen>
<CollapsibleTrigger asChild>
<button className="flex w-full items-center gap-1.5 px-1 py-1.5 text-xs font-medium hover:bg-accent rounded">
<ChevronRight size={12} className="rotate-90" />
Files
</button>
</CollapsibleTrigger>
<CollapsibleContent>
<ScrollArea className="h-[calc(100vh-240px)]">
{!rootPath ? (
<div className="flex flex-col items-center justify-center gap-2 py-8 text-xs text-muted-foreground">
<span>No folder opened</span>
</div>
) : (
<FileTree />
)}
</ScrollArea>
</CollapsibleContent>
</Collapsible>
{/* Outline section */}
<Collapsible defaultOpen>
<CollapsibleTrigger asChild>
<button className="flex w-full items-center gap-1.5 px-1 py-1.5 text-xs font-medium hover:bg-accent rounded">
<ChevronRight size={12} className="rotate-90" />
Outline
</button>
</CollapsibleTrigger>
<CollapsibleContent>
<ScrollArea className="h-[calc(100vh-240px)]">
<Outline />
</ScrollArea>
</CollapsibleContent>
</Collapsible>
</div>
);
}