{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "tabs",
  "title": "TIS Tabs",
  "author": "TIS Experience Engineering",
  "description": "Tabs React com composição shadcn e comportamento Base UI, preservando a anatomia, o teclado e os tokens públicos do DS TIS.",
  "dependencies": [
    "@base-ui/react@1.6.0",
    "clsx@2.1.1",
    "tailwind-merge@3.6.0",
    "ds-tis@github:tis-experience/ds-tis#dd4c906943847cb7664a72a0c7637a378b39adcc"
  ],
  "files": [
    {
      "path": "registry/tis/tabs.tsx",
      "content": "import * as React from \"react\"\nimport { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\n\nimport { cn } from \"./tis-utils\"\n\nfunction Tabs({\n  className,\n  orientation = \"horizontal\",\n  ...props\n}: TabsPrimitive.Root.Props) {\n  return (\n    <TabsPrimitive.Root\n      data-slot=\"tabs\"\n      className={cn(\"ds-tabs-root\", className)}\n      orientation={orientation}\n      {...props}\n    />\n  )\n}\n\nfunction TabsList({\n  activateOnFocus = true,\n  className,\n  loopFocus = true,\n  onKeyDownCapture,\n  ...props\n}: TabsPrimitive.List.Props) {\n  const handleKeyDownCapture: NonNullable<\n    TabsPrimitive.List.Props[\"onKeyDownCapture\"]\n  > = (event) => {\n    onKeyDownCapture?.(event)\n    if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) {\n      return\n    }\n\n    const current = (event.target as HTMLElement).closest<HTMLElement>(\n      '[data-slot=\"tabs-trigger\"]',\n    )\n    if (!current || !event.currentTarget.contains(current)) return\n\n    const tabs = Array.from(\n      event.currentTarget.querySelectorAll<HTMLElement>(\n        '[data-slot=\"tabs-trigger\"]:not([aria-disabled=\"true\"])',\n      ),\n    )\n    const currentIndex = tabs.indexOf(current)\n    if (currentIndex < 0 || tabs.length === 0) return\n\n    let targetIndex: number | undefined\n    switch (event.key) {\n      case \"ArrowRight\":\n        targetIndex = (currentIndex + 1) % tabs.length\n        break\n      case \"ArrowLeft\":\n        targetIndex = (currentIndex - 1 + tabs.length) % tabs.length\n        break\n      case \"Home\":\n        targetIndex = 0\n        break\n      case \"End\":\n        targetIndex = tabs.length - 1\n        break\n      default:\n        return\n    }\n\n    event.preventDefault()\n    event.stopPropagation()\n    tabs[targetIndex].focus()\n  }\n\n  return (\n    <TabsPrimitive.List\n      data-slot=\"tabs-list\"\n      activateOnFocus={activateOnFocus}\n      className={cn(\"ds-tabs\", className)}\n      loopFocus={loopFocus}\n      onKeyDownCapture={handleKeyDownCapture}\n      {...props}\n    />\n  )\n}\n\nfunction TabsTrigger({\n  className,\n  disabled = false,\n  ...props\n}: TabsPrimitive.Tab.Props) {\n  return (\n    <TabsPrimitive.Tab\n      data-slot=\"tabs-trigger\"\n      className={(state) =>\n        cn(\n          \"ds-tab\",\n          state.active && \"ds-tab--active\",\n          state.disabled && \"ds-tab--disabled\",\n          typeof className === \"function\" ? className(state) : className,\n        )\n      }\n      disabled={disabled}\n      {...props}\n    />\n  )\n}\n\nfunction TabsContent({\n  className,\n  ...props\n}: TabsPrimitive.Panel.Props) {\n  return (\n    <TabsPrimitive.Panel\n      data-slot=\"tabs-content\"\n      className={cn(\"ds-tab-panel\", className)}\n      {...props}\n    />\n  )\n}\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger }\n",
      "type": "registry:ui",
      "target": "@ui/tabs.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\"": {},
    ".ds-tab--disabled": {
      "color": "var(--ds-tabs-label-color-disabled)",
      "cursor": "not-allowed"
    },
    "[data-slot=\"tabs-list\"]": {
      "overflow-x": "auto",
      "overflow-y": "hidden"
    },
    "[data-slot=\"tabs-trigger\"]": {
      "flex": "0 0 auto",
      "white-space": "nowrap"
    }
  },
  "meta": {
    "provider": "Base UI",
    "providerRole": "output-provider",
    "status": "beta",
    "wave": "navigation"
  },
  "docs": "Use Tabs para painéis relacionados, preserve rótulo acessível no tablist e mantenha @import \"ds-tis/css\" como o primeiro import global.",
  "type": "registry:ui"
}