{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "files", "type": "registry:ui", "title": "Files", "description": "A component that allows you to display a list of files and folders.", "dependencies": [ "motion", "lucide-react" ], "registryDependencies": [ "https://animate-ui.com/r/motion-highlight", "https://animate-ui.com/r/radix-accordion" ], "files": [ { "path": "registry/components/files/index.tsx", "content": "'use client';\n\nimport * as React from 'react';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { FileIcon, FolderIcon, FolderOpenIcon } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionItemProps,\n AccordionTrigger,\n AccordionTriggerProps,\n useAccordionItem,\n} from '@/components/animate-ui/radix/accordion';\nimport {\n MotionHighlight,\n MotionHighlightItem,\n} from '@/components/animate-ui/effects/motion-highlight';\n\ntype FileButtonProps = React.ComponentProps<'div'> & {\n icons?: {\n close: React.ReactNode;\n open: React.ReactNode;\n };\n icon?: React.ReactNode;\n open?: boolean;\n sideComponent?: React.ReactNode;\n};\n\nfunction FileButton({\n children,\n className,\n icons,\n icon,\n open,\n sideComponent,\n ...props\n}: FileButtonProps) {\n return (\n \n \n \n {icon\n ? typeof icon !== 'string'\n ? icon\n : null\n : icons && (\n \n \n {open\n ? typeof icons.open !== 'string'\n ? icons.open\n : null\n : typeof icons.close !== 'string'\n ? icons.close\n : null}\n \n \n )}\n \n {children}\n \n \n {sideComponent}\n \n \n );\n}\n\ntype FilesProps = React.ComponentProps<'div'> & {\n children: React.ReactNode;\n activeClassName?: string;\n defaultOpen?: string[];\n open?: string[];\n onOpenChange?: (open: string[]) => void;\n};\n\nfunction Files({\n children,\n className,\n activeClassName,\n defaultOpen,\n open,\n onOpenChange,\n ...props\n}: FilesProps) {\n return (\n \n \n \n {children}\n \n \n \n );\n}\n\ntype FolderTriggerProps = AccordionTriggerProps & {\n sideComponent?: React.ReactNode;\n};\n\nfunction FolderTrigger({\n children,\n className,\n sideComponent,\n ...props\n}: FolderTriggerProps) {\n const { isOpen } = useAccordionItem();\n\n return (\n \n , close: }}\n className={className}\n sideComponent={sideComponent}\n >\n {children}\n \n \n );\n}\n\ntype FolderProps = Omit<\n AccordionItemProps,\n 'value' | 'onValueChange' | 'defaultValue' | 'children'\n> & {\n children?: React.ReactNode;\n name: string;\n open?: string[];\n onOpenChange?: (open: string[]) => void;\n defaultOpen?: string[];\n sideComponent?: React.ReactNode;\n};\n\nfunction Folder({\n children,\n className,\n name,\n open,\n defaultOpen,\n onOpenChange,\n sideComponent,\n ...props\n}: FolderProps) {\n return (\n \n \n {name}\n \n {children && (\n \n \n {children}\n \n \n )}\n \n );\n}\n\ntype FileProps = Omit, 'children'> & {\n name: string;\n sideComponent?: React.ReactNode;\n};\n\nfunction File({ name, className, sideComponent, ...props }: FileProps) {\n return (\n }\n className={className}\n sideComponent={sideComponent}\n {...props}\n >\n {name}\n \n );\n}\n\nexport {\n Files,\n Folder,\n File,\n type FilesProps,\n type FolderProps,\n type FileProps,\n};\n", "type": "registry:ui", "target": "components/animate-ui/components/files.tsx" } ] }