import { ChevronRightIcon, FileIcon, FolderIcon } from "lucide-react" import { Button } from "@/styles/base-nova/ui/button" import { Card, CardContent, CardHeader } from "@/styles/base-nova/ui/card" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/styles/base-nova/ui/collapsible" import { Tabs, TabsList, TabsTrigger } from "@/styles/base-nova/ui/tabs" type FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] } export function CollapsibleFileTree() { const fileTree: FileTreeItem[] = [ { name: "components", items: [ { name: "ui", items: [ { name: "button.tsx" }, { name: "card.tsx" }, { name: "dialog.tsx" }, { name: "input.tsx" }, { name: "select.tsx" }, { name: "table.tsx" }, ], }, { name: "login-form.tsx" }, { name: "register-form.tsx" }, ], }, { name: "lib", items: [{ name: "utils.ts" }, { name: "cn.ts" }, { name: "api.ts" }], }, { name: "hooks", items: [ { name: "use-media-query.ts" }, { name: "use-debounce.ts" }, { name: "use-local-storage.ts" }, ], }, { name: "types", items: [{ name: "index.d.ts" }, { name: "api.d.ts" }], }, { name: "public", items: [ { name: "favicon.ico" }, { name: "logo.svg" }, { name: "images" }, ], }, { name: "app.tsx" }, { name: "layout.tsx" }, { name: "globals.css" }, { name: "package.json" }, { name: "tsconfig.json" }, { name: "README.md" }, { name: ".gitignore" }, ] const renderItem = (fileItem: FileTreeItem) => { if ("items" in fileItem) { return ( } > {fileItem.name} {fileItem.items.map((child) => renderItem(child))} ) } return ( {fileItem.name} ) } return ( Explorer Outline {fileTree.map((item) => renderItem(item))} ) }