{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "Accordion",
  "dependencies": [
    "@base-ui/react",
    "cn",
    "lucide-react",
    "rescript-base-ui"
  ],
  "registryDependencies": [
    "@rescript-shadcn/Icons"
  ],
  "files": [
    {
      "path": "registry/base/ui/Accordion.res",
      "content": "@@directive(\"'use client'\")\n\n@module(\"cn\")\nexternal cn: (string, option<string>) => string = \"cn\"\n\n@react.componentWithProps(BaseUi.Accordion.Root.props)\nlet make = (props: BaseUi.Accordion.Root.props<'value>) =>\n  <BaseUi.Accordion.Root\n    {...props}\n    dataSlot={props.dataSlot->Option.getOr(\"accordion\")}\n    className={cn(\" flex w-full flex-col\", props.className)}\n  />\n\nmodule Multiple = {\n  @react.componentWithProps(BaseUi.Accordion.Root.props)\n  let make = (props: BaseUi.Accordion.Root.props<'value>) =>\n    <BaseUi.Accordion.Root\n      {...props}\n      multiple=true\n      dataSlot={props.dataSlot->Option.getOr(\"accordion\")}\n      className={cn(\" flex w-full flex-col\", props.className)}\n    />\n}\n\nmodule Item = {\n  @react.componentWithProps(BaseUi.Accordion.Item.props)\n  let make = (props: BaseUi.Accordion.Item.props<'value>) =>\n    <BaseUi.Accordion.Item\n      {...props}\n      dataSlot={props.dataSlot->Option.getOr(\"accordion-item\")}\n      className={cn(\"not-last:border-b\", props.className)}\n    />\n}\n\nmodule Trigger = {\n  @react.componentWithProps(BaseUi.Accordion.Trigger.props)\n  let make = (props: BaseUi.Accordion.Trigger.props) =>\n    <BaseUi.Accordion.Header className=\"flex\">\n      <BaseUi.Accordion.Trigger\n        {...props}\n        dataSlot={props.dataSlot->Option.getOr(\"accordion-trigger\")}\n        className={cn(\n          \"focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-lg py-2.5 text-left text-sm font-medium hover:underline focus-visible:ring-3 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 group/accordion-trigger relative flex flex-1 items-start justify-between border border-transparent transition-all outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n          props.className,\n        )}\n      >\n        {props.children->Option.getOr(React.null)}\n        <Icons.ChevronDown\n          dataSlot=\"accordion-trigger-icon\"\n          className=\"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n        />\n        <Icons.ChevronUp\n          dataSlot=\"accordion-trigger-icon\"\n          className=\"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n        />\n      </BaseUi.Accordion.Trigger>\n    </BaseUi.Accordion.Header>\n}\n\nmodule Content = {\n  type props = BaseUi.Types.BaseUIComponentProps.t\n\n  let toBaseUiProps: props => BaseUi.Types.BaseUIComponentProps.t = %raw(`({className, ...props}) => props`)\n\n  @react.componentWithProps(props)\n  let make = (props: props) => {\n    let children = props.children\n    <BaseUi.Accordion.Panel\n      {...props->toBaseUiProps}\n      dataSlot={props.dataSlot->Option.getOr(\"accordion-content\")}\n      className=\"data-open:animate-accordion-down data-closed:animate-accordion-up text-sm overflow-hidden\"\n    >\n      <div\n        className={cn(\n          \"pt-0 pb-2.5 [&_a]:hover:text-foreground h-(--accordion-panel-height) data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4\",\n          props.className,\n        )}\n        ?children\n      />\n    </BaseUi.Accordion.Panel>\n  }\n}\n",
      "type": "registry:file",
      "target": "@ui/Accordion.res"
    }
  ],
  "type": "registry:ui"
}