"use client" import * as React from "react" import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/registry/bases/base/ui/collapsible" import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarRail, } from "@/registry/bases/base/ui/sidebar" import { IconPlaceholder } from "@/app/(create)/components/icon-placeholder" // This is sample data. const data = { changes: [ { file: "README.md", state: "M", }, { file: "api/hello/route.ts", state: "U", }, { file: "app/layout.tsx", state: "M", }, ], tree: [ [ "app", [ "api", ["hello", ["route.ts"]], "page.tsx", "layout.tsx", ["blog", ["page.tsx"]], ], ], [ "components", ["ui", "button.tsx", "card.tsx"], "header.tsx", "footer.tsx", ], ["lib", ["util.ts"]], ["public", "favicon.ico", "vercel.svg"], ".eslintrc.json", ".gitignore", "next.config.js", "tailwind.config.js", "package.json", "README.md", ], } export function AppSidebar({ ...props }: React.ComponentProps) { return ( Changes {data.changes.map((item, index) => ( {item.file} {item.state} ))} Files {data.tree.map((item, index) => ( ))} ) } type TreeItem = string | TreeItem[] function Tree({ item }: { item: TreeItem }) { const [name, ...items] = Array.isArray(item) ? item : [item] if (!items.length) { return ( {name} ) } return ( }> {name} {items.map((subItem, index) => ( ))} ) }