{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "accordion", "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ], "files": [ { "path": "registry/base-nova/ui/accordion.tsx", "content": "import * as React from \"react\"\n\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { ChevronDownIcon, ChevronUpIcon } from \"@/components/icons\"\nimport { cn } from \"@/lib/utils\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n \n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n \n )\n}\n\ntype TriggerIconProps = React.HTMLAttributes & {\n className?: string\n}\n\ntype AccordionTriggerProps = AccordionPrimitive.Trigger.Props & {\n /**\n * Optional icons to render in place of the default chevrons. The\n * closed icon shows when the item is collapsed and the open icon\n * shows when it is expanded. Consumer-passed `className` (e.g.\n * `size-6 text-primary`) wins over the trigger's defaults because\n * the cloned icon is NOT stamped with `data-slot=\"accordion-trigger-icon\"`\n * — only the default chevrons carry that slot, so the trigger's\n * `**:data-[slot=accordion-trigger-icon]:size-4 text-muted-foreground`\n * defaults do not override the consumer's choices.\n */\n triggerIcon?: {\n closed: React.ReactElement\n open: React.ReactElement\n }\n}\n\nfunction AccordionTrigger({\n className,\n children,\n triggerIcon,\n ...props\n}: AccordionTriggerProps) {\n const iconSlot = \"accordion-trigger-icon\"\n\n const closedIcon = triggerIcon ? (\n React.cloneElement(triggerIcon.closed, {\n className: cn(\n \"ms-auto shrink-0 group-aria-expanded/accordion-trigger:hidden\",\n triggerIcon.closed.props.className\n ),\n })\n ) : (\n \n )\n\n const openIcon = triggerIcon ? (\n React.cloneElement(triggerIcon.open, {\n className: cn(\n \"ms-auto hidden shrink-0 group-aria-expanded/accordion-trigger:inline\",\n triggerIcon.open.props.className\n ),\n })\n ) : (\n \n )\n\n return (\n \n \n {closedIcon}\n {openIcon}\n {children}\n \n \n )\n}\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n \n \n {children}\n \n \n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\n", "type": "registry:ui", "target": "@components/accordion.tsx" } ], "categories": [ "disclosure" ], "type": "registry:ui" }