'use client'; import * as React from 'react'; import { AnimatePresence, motion } from 'motion/react'; import { FileIcon, FolderIcon, FolderOpenIcon } from 'lucide-react'; import { cn } from '@workspace/ui/lib/utils'; import { Accordion, AccordionContent, AccordionItem, AccordionItemProps, AccordionTrigger, AccordionTriggerProps, useAccordionItem, } from '@/registry/radix/accordion'; import { MotionHighlight, MotionHighlightItem, } from '@/registry/effects/motion-highlight'; type FileButtonProps = React.ComponentProps<'div'> & { icons?: { close: React.ReactNode; open: React.ReactNode; }; icon?: React.ReactNode; open?: boolean; sideComponent?: React.ReactNode; }; function FileButton({ children, className, icons, icon, open, sideComponent, ...props }: FileButtonProps) { return (
{icon ? typeof icon !== 'string' ? icon : null : icons && ( {open ? typeof icons.open !== 'string' ? icons.open : null : typeof icons.close !== 'string' ? icons.close : null} )} {children} {sideComponent}
); } type FilesProps = React.ComponentProps<'div'> & { children: React.ReactNode; activeClassName?: string; defaultOpen?: string[]; open?: string[]; onOpenChange?: (open: string[]) => void; }; function Files({ children, className, activeClassName, defaultOpen, open, onOpenChange, ...props }: FilesProps) { return (
{children}
); } type FolderTriggerProps = AccordionTriggerProps & { sideComponent?: React.ReactNode; }; function FolderTrigger({ children, className, sideComponent, ...props }: FolderTriggerProps) { const { isOpen } = useAccordionItem(); return ( , close: }} className={className} sideComponent={sideComponent} > {children} ); } type FolderProps = Omit< AccordionItemProps, 'value' | 'onValueChange' | 'defaultValue' | 'children' > & { children?: React.ReactNode; name: string; open?: string[]; onOpenChange?: (open: string[]) => void; defaultOpen?: string[]; sideComponent?: React.ReactNode; }; function Folder({ children, className, name, open, defaultOpen, onOpenChange, sideComponent, ...props }: FolderProps) { return ( {name} {children && ( {children} )} ); } type FileProps = Omit, 'children'> & { name: string; sideComponent?: React.ReactNode; }; function File({ name, className, sideComponent, ...props }: FileProps) { return ( } className={className} sideComponent={sideComponent} {...props} > {name} ); } export { Files, Folder, File, type FilesProps, type FolderProps, type FileProps, };