{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "accordion",
  "title": "Accordion",
  "author": "@fma-ui/ui",
  "description": "A vertically stacked set of headers that expand to reveal or hide associated content. Supports single or multiple items open at once.",
  "dependencies": [
    "cn@^0.4.0",
    "lucide-react@^1.52.0",
    "react-aria-components@^1.21.1"
  ],
  "files": [
    {
      "path": "src/core/accordion/accordion.tsx",
      "content": "import { cn } from \"cn\";\nimport { ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\nimport type * as React from \"react\";\nimport {\n  DisclosurePanel as AccordionContentPrimitive,\n  Heading as AccordionHeaderPrimitive,\n  Disclosure as AccordionItemPrimitive,\n  DisclosureGroup as AccordionPrimitive,\n  Button as AccordionTriggerPrimitive,\n  type ButtonProps,\n  type DisclosureGroupProps,\n  type DisclosurePanelProps,\n  type DisclosureProps,\n} from \"react-aria-components\";\n\nfunction Accordion({ className, ...props }: DisclosureGroupProps) {\n  return (\n    <AccordionPrimitive\n      data-slot=\"accordion\"\n      className={cn(\"flex w-full flex-col\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction AccordionItem({ className, ...props }: DisclosureProps) {\n  return (\n    <AccordionItemPrimitive\n      data-slot=\"accordion-item\"\n      className={cn(\"not-last:border-b\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction AccordionTrigger({\n  className,\n  children,\n  ...props\n}: Omit<ButtonProps, \"children\"> & { children: React.ReactNode }) {\n  return (\n    <AccordionHeaderPrimitive className=\"flex\">\n      <AccordionTriggerPrimitive\n        slot=\"trigger\"\n        data-slot=\"accordion-trigger\"\n        className={cn(\n          \"group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground\",\n          className,\n        )}\n        {...props}\n      >\n        {children}\n        <ChevronDownIcon\n          data-slot=\"accordion-trigger-icon\"\n          className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n        />\n        <ChevronUpIcon\n          data-slot=\"accordion-trigger-icon\"\n          className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n        />\n      </AccordionTriggerPrimitive>\n    </AccordionHeaderPrimitive>\n  );\n}\n\nfunction AccordionContent({ className, children, ...props }: DisclosurePanelProps) {\n  return (\n    <AccordionContentPrimitive\n      data-slot=\"accordion-content\"\n      className=\"h-(--disclosure-panel-height) overflow-clip text-sm transition-[height] data-open:animate-accordion-down data-closed:animate-accordion-up\"\n      {...props}\n    >\n      <div\n        className={cn(\n          \"pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4\",\n          className,\n        )}\n      >\n        {children}\n      </div>\n    </AccordionContentPrimitive>\n  );\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n",
      "type": "registry:component",
      "target": "components/fma-ui/accordion.tsx"
    }
  ],
  "meta": {
    "status": "stable",
    "source": "shadcn",
    "tags": [
      "disclosure",
      "collapsible",
      "react-aria"
    ]
  },
  "categories": [
    "disclosure"
  ],
  "type": "registry:ui"
}