import { useState } from 'react' import { useComponentTreeLoader } from '@/hooks/use-component-tree-loader' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { ScrollArea } from '@/components/ui/scroll-area' import { Separator } from '@/components/ui/separator' import { toast } from 'sonner' import { Cube, TreeStructure, ArrowsClockwise, CheckCircle, Warning, Package, Stack } from '@phosphor-icons/react' export function ComponentTreeViewer() { const { isLoaded, isLoading, error, moleculeTrees, organismTrees, allTrees, reloadFromJSON, } = useComponentTreeLoader() const [selectedTreeId, setSelectedTreeId] = useState(null) const handleReload = async () => { try { await reloadFromJSON() toast.success('Component trees reloaded from JSON') } catch (err) { toast.error('Failed to reload component trees') } } const selectedTree = allTrees.find(tree => tree.id === selectedTreeId) return (

Component Trees

Molecules and organisms loaded from JSON

{isLoaded && ( {allTrees.length} trees loaded )}
{error && (

Error loading component trees

{error.message}

)} Molecules {moleculeTrees.length} Organisms {organismTrees.length} All {allTrees.length}
{moleculeTrees.map(tree => ( setSelectedTreeId(tree.id)} > {tree.name} {tree.description}
{tree.rootNodes.length} root nodes {new Date(tree.updatedAt).toLocaleDateString()}
))}
{selectedTree ? ( ) : (

Select a tree to view details

)}
{organismTrees.map(tree => ( setSelectedTreeId(tree.id)} > {tree.name} {tree.description}
{tree.rootNodes.length} root nodes {new Date(tree.updatedAt).toLocaleDateString()}
))}
{selectedTree ? ( ) : (

Select a tree to view details

)}
{allTrees.map(tree => { const category = (tree as any).category return ( setSelectedTreeId(tree.id)} > {category === 'molecule' ? ( ) : ( )} {tree.name} {category} {tree.description}
{tree.rootNodes.length} root nodes {new Date(tree.updatedAt).toLocaleDateString()}
) })}
{selectedTree ? ( ) : (

Select a tree to view details

)}
) } function TreeDetails({ tree }: { tree: any }) { const renderNode = (node: any, depth = 0) => { return (
{node.name || node.type} {node.type}
{node.props && Object.keys(node.props).length > 0 && (
Props: {Object.keys(node.props).length}
)}
{node.children && node.children.map((child: any) => renderNode(child, depth + 1))}
) } return (

{tree.name}

{tree.description}

{tree.rootNodes.length} root nodes ID: {tree.id}

Component Tree Structure

{tree.rootNodes.map((node: any) => renderNode(node))}
) }