{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "accordion",
  "title": "TIS Accordion",
  "author": "TIS Experience Engineering",
  "description": "Accordion React com teclado e estado por Base UI, preservando a anatomia pública do DS TIS.",
  "dependencies": [
    "@base-ui/react@1.6.0",
    "clsx@2.1.1",
    "lucide-react@1.28.0",
    "tailwind-merge@3.6.0",
    "ds-tis@github:tis-experience/ds-tis#dd4c906943847cb7664a72a0c7637a378b39adcc"
  ],
  "files": [
    {
      "path": "registry/tis/accordion.tsx",
      "content": "import * as React from \"react\"\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nimport { cn } from \"./tis-utils\"\n\ntype AccordionKeyDownEvent = Parameters<\n  NonNullable<AccordionPrimitive.Root.Props[\"onKeyDown\"]>\n>[0]\n\nfunction Accordion({\n  className,\n  onKeyDown,\n  ...props\n}: AccordionPrimitive.Root.Props) {\n  function handleKeyDown(event: AccordionKeyDownEvent) {\n    onKeyDown?.(event)\n    if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) {\n      return\n    }\n\n    const currentTrigger = (event.target as HTMLElement).closest<HTMLElement>(\n      '[data-slot=\"accordion-trigger\"]',\n    )\n    if (!currentTrigger || !event.currentTarget.contains(currentTrigger)) return\n\n    const triggers = Array.from(\n      event.currentTarget.querySelectorAll<HTMLElement>(\n        '[data-slot=\"accordion-trigger\"]:not(:disabled):not([aria-disabled=\"true\"])',\n      ),\n    )\n    const currentIndex = triggers.indexOf(currentTrigger)\n    if (currentIndex < 0 || triggers.length === 0) return\n\n    let targetIndex: number | undefined\n    switch (event.key) {\n      case \"ArrowDown\":\n      case \"ArrowRight\":\n        targetIndex = (currentIndex + 1) % triggers.length\n        break\n      case \"ArrowUp\":\n      case \"ArrowLeft\":\n        targetIndex = (currentIndex - 1 + triggers.length) % triggers.length\n        break\n      case \"Home\":\n        targetIndex = 0\n        break\n      case \"End\":\n        targetIndex = triggers.length - 1\n        break\n      default:\n        return\n    }\n\n    event.preventDefault()\n    triggers[targetIndex].focus()\n  }\n\n  return (\n    <AccordionPrimitive.Root\n      data-slot=\"accordion\"\n      className={cn(\"ds-accordion\", className)}\n      onKeyDown={handleKeyDown}\n      {...props}\n    />\n  )\n}\n\nfunction AccordionItem({\n  className,\n  disabled,\n  ...props\n}: AccordionPrimitive.Item.Props) {\n  return (\n    <AccordionPrimitive.Item\n      data-slot=\"accordion-item\"\n      className={cn(\n        \"ds-accordion__item\",\n        disabled && \"ds-accordion__item--disabled\",\n        className,\n      )}\n      disabled={disabled}\n      {...props}\n    />\n  )\n}\n\nfunction AccordionTitle({ className, ...props }: React.ComponentProps<\"span\">) {\n  return (\n    <span\n      data-slot=\"accordion-title\"\n      className={cn(\"ds-accordion__title\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction AccordionTrigger({\n  className,\n  children,\n  ...props\n}: AccordionPrimitive.Trigger.Props) {\n  const content =\n    typeof children === \"string\" || typeof children === \"number\" ? (\n      <AccordionTitle>{children}</AccordionTitle>\n    ) : (\n      children\n    )\n\n  return (\n    <AccordionPrimitive.Header data-slot=\"accordion-header\">\n      <AccordionPrimitive.Trigger\n        data-slot=\"accordion-trigger\"\n        className={cn(\"ds-accordion__trigger\", className)}\n        {...props}\n      >\n        {content}\n        <ChevronDownIcon\n          aria-hidden=\"true\"\n          data-slot=\"accordion-trigger-icon\"\n          className=\"ds-accordion__chevron ds-icon\"\n        />\n      </AccordionPrimitive.Trigger>\n    </AccordionPrimitive.Header>\n  )\n}\n\nfunction AccordionContent({\n  className,\n  ...props\n}: AccordionPrimitive.Panel.Props) {\n  return (\n    <AccordionPrimitive.Panel\n      data-slot=\"accordion-content\"\n      className={cn(\"ds-accordion__panel\", className)}\n      {...props}\n    />\n  )\n}\n\nexport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTitle,\n  AccordionTrigger,\n}\n",
      "type": "registry:ui",
      "target": "@ui/accordion.tsx"
    },
    {
      "path": "registry/tis/tis-utils.ts",
      "content": "import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n",
      "type": "registry:lib",
      "target": "@ui/tis-utils.ts"
    }
  ],
  "css": {
    "@import \"ds-tis/css\"": {}
  },
  "meta": {
    "provider": "Base UI",
    "providerRole": "output-provider",
    "status": "beta"
  },
  "docs": "Mantenha @import \"ds-tis/css\" como o primeiro import do CSS global.",
  "type": "registry:ui"
}