{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "tree-node-tooltip", "type": "registry:ui", "title": "Tree Node Tooltip", "description": "A file tree component with tooltip support for each node.", "dependencies": [ "motion", "lucide-react" ], "registryDependencies": [ "tooltip" ], "files": [ { "path": "registry/ruixenui/tree-node-tooltip.tsx", "content": "\"use client\";\n\nimport React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"motion/react\";\nimport { cn } from \"@/lib/utils\";\nimport { Folder, File } from \"lucide-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\n\nexport type TreeNode = {\n id: string;\n name: string;\n tooltip?: string;\n type: \"folder\" | \"file\";\n children?: TreeNode[];\n};\n\nconst demoData: TreeNode[] = [\n {\n id: \"1\",\n name: \"src\",\n tooltip: \"src\",\n type: \"folder\",\n children: [\n {\n id: \"2\",\n name: \"components\",\n tooltip: \"components\",\n type: \"folder\",\n children: [\n {\n id: \"3\",\n name: \"Button.tsx\",\n tooltip: \"Button's tooltip\",\n type: \"file\",\n },\n {\n id: \"4\",\n name: \"Card.tsx\",\n tooltip: \"Card's tooltip\",\n type: \"file\",\n },\n ],\n },\n {\n id: \"5\",\n name: \"lib\",\n tooltip: \"lib\",\n type: \"folder\",\n children: [\n {\n id: \"6\",\n name: \"utils.ts\",\n tooltip: \"utils's tooltip\",\n type: \"file\",\n },\n ],\n },\n ],\n },\n];\n\nexport default function TreeNodeTooltip({ node }: { node: TreeNode }) {\n const [expanded, setExpanded] = useState(false);\n\n const isFolder = node.type === \"folder\";\n\n const toggle = () => {\n if (isFolder) setExpanded((prev) => !prev);\n };\n\n return (\n
\n \n \n \n \n {isFolder ? (\n \n ) : (\n \n )}\n {node.name}\n \n \n {node.tooltip}\n \n \n\n {/* Animate children */}\n {isFolder && (\n \n {expanded && (\n \n {node.children?.map((child) => (\n \n ))}\n \n )}\n \n )}\n
\n );\n}\n", "type": "registry:ui", "target": "components/ruixen/tree-node-tooltip.tsx" } ] }