{
"$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"
}