"use client" /** * **Tree view** — `ListPageTreePanelShell` + outline tree + read-only details (`FolderDetailsShell`). * Hub wiring (folders, mock sheet) stays in the caller; this module hosts library demo wiring only. */ import * as React from "react" import { Button } from "@/components/ui/button" import { Collapsible, CollapsibleTrigger } from "@/components/ui/collapsible" import { Tip } from "@/components/ui/tip" import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip" import { cn } from "@/lib/utils" import { OutlineTreeCollapsibleContentRail, OutlineTreeLeafButton, OutlineTreeMenu, OutlineTreeMenuItem, OutlineTreeSub, OutlineTreeSubItem, } from "@/components/data-views/outline-tree-menu" import { ListPageTreePanelShell } from "@/components/data-views/list-page-tree-panel-shell" import { LIST_PAGE_SPLIT_MILLER_SCROLL_BODY_CLASS } from "@/components/data-views/list-page-split-hub-tokens" import { ListPageSplitDetailsPlaceholder } from "@/components/data-views/list-page-split-details-placeholder" import { ListPageTreeColumnHeader } from "@/components/data-views/list-page-tree-column-header" import { LibraryNewFolderSheet } from "@/components/library-new-folder-sheet" import type { LibraryItem, } from "@/lib/mock/library" import type { LibraryFolder, LibraryFolderColorKey } from "@/lib/mock/library-folders" import { FolderDetailsShell } from "@/components/folder-details-shell" import { LibraryQuestionDetailBody } from "@/components/library-question-detail" // ============================================================================ // TreeItem — recursive folder/question renderer using Collapsible // ============================================================================ interface TreeItemProps { folder: LibraryFolder folders: LibraryFolder[] questions: LibraryItem[] selectedItemId: string | null onSelectItem: (itemId: string) => void } function TreeItem({ folder, folders, questions, selectedItemId, onSelectItem, }: TreeItemProps) { const childFolders = folders .filter(f => f.parentId === folder.id) .sort((a, b) => a.name.localeCompare(b.name)) const childQuestions = questions .filter(q => q.folderId === folder.id) const hasChildren = childFolders.length > 0 || childQuestions.length > 0 const isFolderSelected = selectedItemId === folder.id return ( {/* Folder row — chevron column + row body (icons align with shadcn tree pattern) */}
{hasChildren ? (