import { AnyNodeId, useScene } from "@pascal-app/core"; import { ChevronDown, ChevronRight } from "lucide-react"; import { cn } from "@/lib/utils"; import { BuildingTreeNode } from "./building-tree-node"; import { CeilingTreeNode } from "./ceiling-tree-node"; import { ItemTreeNode } from "./item-tree-node"; import { LevelTreeNode } from "./level-tree-node"; import { SlabTreeNode } from "./slab-tree-node"; import { WallTreeNode } from "./wall-tree-node"; interface TreeNodeProps { nodeId: AnyNodeId; depth?: number; } export function TreeNode({ nodeId, depth = 0 }: TreeNodeProps) { const node = useScene((state) => state.nodes[nodeId]); if (!node) return null; switch (node.type) { case "building": return ; case "ceiling": return ; case "level": return ; case "slab": return ; case "wall": return ; case "item": return ; default: return null; } } interface TreeNodeWrapperProps { icon: React.ReactNode; label: string; depth: number; hasChildren: boolean; expanded: boolean; onToggle: () => void; onClick: () => void; onMouseEnter?: () => void; onMouseLeave?: () => void; actions?: React.ReactNode; children?: React.ReactNode; isSelected?: boolean; isHovered?: boolean; } export function TreeNodeWrapper({ icon, label, depth, hasChildren, expanded, onToggle, onClick, onMouseEnter, onMouseLeave, actions, children, isSelected, isHovered, }: TreeNodeWrapperProps) { return (
{icon} {label}
{actions && (
{actions}
)}
{expanded && children}
); }