{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "disclosure",
  "dependencies": [
    "react-aria-components",
    "lucide-react",
    "tailwind-variants"
  ],
  "registryDependencies": [
    "https://taki-ui.com/r/utils.json"
  ],
  "files": [
    {
      "path": "registry/new-york/ui/disclosure.tsx",
      "content": "\"use client\"\n\nimport React, { useContext } from \"react\"\nimport { ChevronDownIcon } from \"lucide-react\"\nimport {\n  Disclosure as AriaDisclosure,\n  DisclosureGroup as AriaDisclosureGroup,\n  DisclosureGroupProps as AriaDisclosureGroupProps,\n  DisclosurePanel as AriaDisclosurePanel,\n  DisclosurePanelProps as AriaDisclosurePanelProps,\n  DisclosureProps as AriaDisclosureProps,\n  Button,\n  composeRenderProps,\n  DisclosureGroupStateContext,\n  DisclosureStateContext,\n  Heading,\n} from \"react-aria-components\"\nimport { tv } from \"tailwind-variants\"\n\nimport { cn } from \"../lib/utils\"\n\nconst disclosure = tv({\n  base: \"group\",\n  variants: {\n    isInGroup: {\n      true: \"border-b last:border-b-0\",\n    },\n  },\n})\n\nconst disclosureButton = tv({\n  base: \"focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50\",\n  variants: {\n    isDisabled: {\n      true: \"pointer-events-none opacity-50\",\n    },\n  },\n})\n\nconst chevron = tv({\n  base: \"text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200\",\n  variants: {\n    isExpanded: {\n      true: \"rotate-180\",\n    },\n  },\n})\n\nexport interface DisclosureProps extends AriaDisclosureProps {\n  children: React.ReactNode\n}\n\nexport function Disclosure({ children, ...props }: DisclosureProps) {\n  const isInGroup = useContext(DisclosureGroupStateContext) !== null\n  return (\n    <AriaDisclosure\n      {...props}\n      className={composeRenderProps(props.className, (className, renderProps) =>\n        disclosure({ ...renderProps, isInGroup, className })\n      )}\n    >\n      {children}\n    </AriaDisclosure>\n  )\n}\n\nexport interface DisclosureHeaderProps {\n  children: React.ReactNode\n}\n\nexport function DisclosureHeader({ children }: DisclosureHeaderProps) {\n  const { isExpanded } = useContext(DisclosureStateContext)!\n  return (\n    <Heading className=\"flex\">\n      <Button\n        slot=\"trigger\"\n        className={(renderProps) => disclosureButton({ ...renderProps })}\n      >\n        {children}\n        <ChevronDownIcon aria-hidden className={chevron({ isExpanded })} />\n      </Button>\n    </Heading>\n  )\n}\n\nexport interface DisclosurePanelProps extends AriaDisclosurePanelProps {\n  children: React.ReactNode\n}\n\nexport function DisclosurePanel({ children, ...props }: DisclosurePanelProps) {\n  return (\n    <AriaDisclosurePanel\n      {...props}\n      className={\n        \"h-(--disclosure-panel-height) overflow-hidden text-sm motion-safe:transition-[height]\"\n      }\n    >\n      <div className={cn(\"pt-0 pb-4\", props.className)}>{children}</div>\n    </AriaDisclosurePanel>\n  )\n}\n\nexport interface DisclosureGroupProps extends AriaDisclosureGroupProps {\n  children: React.ReactNode\n}\n\nexport function DisclosureGroup({ children, ...props }: DisclosureGroupProps) {\n  return (\n    <AriaDisclosureGroup {...props} data-slot=\"disclosure-group\">\n      {children}\n    </AriaDisclosureGroup>\n  )\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}