import React, { useState } from 'react'; import { Folder, FolderOpen, FileCode, ChevronRight, ChevronDown, GitBranch } from 'lucide-react'; function TreeNode({ name, node }) { const isDir = node.type === 'directory'; const [open, setOpen] = useState(false); const fmtSize = (b) => { if (!b) return ''; if (b < 1024) return `${b}B`; if (b < 1024 * 1024) return `${(b / 1024).toFixed(1)}KB`; return `${(b / (1024 * 1024)).toFixed(1)}MB`; }; return (
isDir && setOpen(!open)} style={{ paddingLeft: 0 }} > {isDir ? ( <> {open ? : } {open ? : } {name} ) : ( <> {name} {node.size !== undefined && ( {fmtSize(node.size)} )} )}
{isDir && open && node.children && (
{Object.entries(node.children) .sort(([, a], [, b]) => { if (a.type === 'directory' && b.type !== 'directory') return -1; if (a.type !== 'directory' && b.type === 'directory') return 1; return 0; }) .map(([n, c]) => ) }
)}
); } export default function RepoTree({ tree, title }) { if (!tree || Object.keys(tree).length === 0) { return (
No file tree available.
); } return (
{title || 'Repository'}
{Object.entries(tree) .sort(([, a], [, b]) => { if (a.type === 'directory' && b.type !== 'directory') return -1; if (a.type !== 'directory' && b.type === 'directory') return 1; return 0; }) .map(([n, node]) => ) }
); }