"use client"; import { type TreeNode, getIcon } from "./tree"; interface TreeCallbacks { selectedPath: string | null; onSelect: (path: string) => void; onDelete: (path: string) => void; expandedDirs: Set; onToggleDir: (path: string) => void; loadingDir: string | null; } export function FileTree({ nodes, selectedPath, onSelect, onDelete, expandedDirs, onToggleDir, loadingDir, depth = 0, }: TreeCallbacks & { nodes: TreeNode[]; depth?: number }) { return (
{nodes.map((node) => ( ))}
); } function TreeItem({ node, selectedPath, onSelect, onDelete, expandedDirs, onToggleDir, loadingDir, depth, }: TreeCallbacks & { node: TreeNode; depth: number }) { const isSelected = selectedPath === node.path; const expanded = expandedDirs.has(node.path); const isLoading = loadingDir === node.path; if (node.isDir) { return (
onToggleDir(node.path)} > {isLoading ? "…" : expanded ? "▼" : "▶"} 📁 {node.name}
{expanded && ( )}
); } return (
onSelect(node.path)} > {getIcon(node.name, false)} {node.name}
); }