import { ComponentNode } from '@/types/project' import { ScrollArea } from '@/components/ui/scroll-area' import { CaretDown, CaretRight, Tree } from '@phosphor-icons/react' interface ComponentTreeViewProps { nodes: ComponentNode[] selectedNodeId: string | null expandedNodes: Set onSelectNode: (nodeId: string) => void onToggleExpand: (nodeId: string) => void } export function ComponentTreeView({ nodes, selectedNodeId, expandedNodes, onSelectNode, onToggleExpand, }: ComponentTreeViewProps) { const renderTreeNode = (node: ComponentNode, level: number = 0) => { const isExpanded = expandedNodes.has(node.id) const isSelected = selectedNodeId === node.id const hasChildren = node.children.length > 0 return (
onSelectNode(node.id)} onKeyDown={(event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault() onSelectNode(node.id) } }} className={`w-full flex items-center gap-2 px-3 py-2 rounded text-sm transition-colors cursor-pointer ${ isSelected ? 'bg-accent text-accent-foreground' : 'hover:bg-muted text-foreground' }`} style={{ paddingLeft: `${level * 20 + 12}px` }} > {hasChildren ? ( ) : (
)} {node.name} {node.type}
{isExpanded && node.children.map((child) => renderTreeNode(child, level + 1))}
) } return (
{nodes.map((node) => renderTreeNode(node))}
) }