{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "headless-accordion", "type": "registry:ui", "title": "Headless Accordion", "description": "A vertically stacked set of interactive headings that each reveal an associated section of content built with Headless UI.", "dependencies": [ "lucide-react", "motion" ], "registryDependencies": [ "https://animate-ui.com/r/headless-disclosure" ], "files": [ { "path": "registry/headless/accordion/index.tsx", "content": "'use client';\n\nimport * as React from 'react';\nimport { motion, type Transition } from 'motion/react';\nimport { ChevronDown } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\nimport {\n Disclosure,\n DisclosureButton,\n DisclosurePanel,\n type DisclosureProps,\n type DisclosureButtonProps,\n type DisclosurePanelProps,\n} from '@/components/animate-ui/headless/disclosure';\n\ntype AccordionProps =\n React.ComponentProps & {\n children: React.ReactNode;\n as?: TTag;\n };\n\nfunction Accordion({\n as: Component = 'div',\n ...props\n}: AccordionProps) {\n return ;\n}\n\ntype AccordionItemProps =\n DisclosureProps & {\n className?: string;\n as?: TTag;\n };\n\nfunction AccordionItem(\n props: AccordionItemProps,\n) {\n const { className, as = 'div', ...rest } = props;\n\n return (\n \n );\n}\n\ntype AccordionButtonProps =\n DisclosureButtonProps & {\n transition?: Transition;\n chevron?: boolean;\n className?: string;\n as?: TTag;\n };\n\nfunction AccordionButton(\n props: AccordionButtonProps,\n) {\n const {\n children,\n className,\n transition = { type: 'spring', stiffness: 150, damping: 17 },\n chevron = true,\n ...rest\n } = props;\n\n return (\n \n {(bag) => (\n <>\n {typeof children === 'function' ? children(bag) : children}\n\n {chevron && (\n \n \n \n )}\n \n )}\n \n );\n}\n\ntype AccordionPanelProps =\n DisclosurePanelProps & {\n as?: TTag;\n };\n\nfunction AccordionPanel(\n props: AccordionPanelProps,\n) {\n const { children, className, as = 'div', ...rest } = props;\n\n return (\n \n {(bag) => (\n
\n {typeof children === 'function' ? children(bag) : children}\n
\n )}\n \n );\n}\n\nexport {\n Accordion,\n AccordionItem,\n AccordionButton,\n AccordionPanel,\n type AccordionProps,\n type AccordionItemProps,\n type AccordionButtonProps,\n type AccordionPanelProps,\n};\n", "type": "registry:ui", "target": "components/animate-ui/headless/accordion.tsx" } ] }