{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "tabs",
  "dependencies": [
    "@data-slot/tabs"
  ],
  "files": [
    {
      "path": "ui/tabs/Tabs.astro",
      "content": "---\n// Generated from bejamas-juno style registry. Do not edit packages/ui/src/components/tabs/Tabs.astro directly.\n/**\n * @component Tabs\n * @title Tabs\n * @description Organize content into tabbed panels, rendering one panel at a time.\n * @figmaUrl https://www.figma.com/design/koxai7zw5vIuBzuVxe5T2l/bejamas-ui?node-id=2523-6067&t=YFStJ3V8fXEO8QD8-4\n *\n * @preview\n *\n * <Tabs defaultValue=\"overview\" class=\"w-full max-w-[400px]\">\n *   <TabsList>\n *     <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n *     <TabsTrigger value=\"analytics\">Analytics</TabsTrigger>\n *     <TabsTrigger value=\"reports\">Reports</TabsTrigger>\n *     <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"overview\">\n *     <Card>\n *       <CardHeader>\n *         <CardTitle>Overview</CardTitle>\n *         <CardDescription>\n *           View key metrics and recent activity across active projects.\n *         </CardDescription>\n *       </CardHeader>\n *       <CardContent class=\"text-sm text-muted-foreground\">\n *         You have 12 active projects and 3 pending tasks.\n *       </CardContent>\n *     </Card>\n *   </TabsContent>\n *   <TabsContent value=\"analytics\">\n *     <Card>\n *       <CardHeader>\n *         <CardTitle>Analytics</CardTitle>\n *         <CardDescription>\n *           Track engagement trends and performance over time.\n *         </CardDescription>\n *       </CardHeader>\n *       <CardContent class=\"text-sm text-muted-foreground\">\n *         Page views are up 25% compared to last month.\n *       </CardContent>\n *     </Card>\n *   </TabsContent>\n *   <TabsContent value=\"reports\">\n *     <Card>\n *       <CardHeader>\n *         <CardTitle>Reports</CardTitle>\n *         <CardDescription>\n *           Generate detailed exports for sharing and analysis.\n *         </CardDescription>\n *       </CardHeader>\n *       <CardContent class=\"text-sm text-muted-foreground\">\n *         You have 5 reports ready to export.\n *       </CardContent>\n *     </Card>\n *   </TabsContent>\n *   <TabsContent value=\"settings\">\n *     <Card>\n *       <CardHeader>\n *         <CardTitle>Settings</CardTitle>\n *         <CardDescription>\n *           Manage account preferences and personalization options.\n *         </CardDescription>\n *       </CardHeader>\n *       <CardContent class=\"text-sm text-muted-foreground\">\n *         Configure notifications, security, and themes.\n *       </CardContent>\n *     </Card>\n *   </TabsContent>\n * </Tabs>\n *\n * @usage\n *\n * ```astro nocollapse\n * ---\n * import { Tabs, TabsList, TabsTrigger, TabsContent } from '@bejamas/ui/components/tabs';\n * ---\n *\n * <Tabs defaultValue=\"overview\">\n *   <TabsList>\n *     <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n *     <TabsTrigger value=\"analytics\">Analytics</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"overview\">Overview content...</TabsContent>\n *   <TabsContent value=\"analytics\">Analytics content...</TabsContent>\n * </Tabs>\n *\n * ```\n *\n * @examples\n *\n * ### Line Animated\n *\n * <Tabs defaultValue=\"overview\">\n *   <TabsList variant=\"line-animated\" class=\"mb-4\">\n *     <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n *     <TabsTrigger value=\"analytics\">Analytics</TabsTrigger>\n *     <TabsTrigger value=\"reports\">Reports</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"overview\">Line variant content.</TabsContent>\n *   <TabsContent value=\"analytics\">Analytics content.</TabsContent>\n *   <TabsContent value=\"reports\">Reports content.</TabsContent>\n * </Tabs>\n *\n * ### Vertical\n *\n * <Tabs defaultValue=\"profile\" orientation=\"vertical\" class=\"w-full max-w-xl\">\n *   <TabsList class=\"min-w-40\">\n *     <TabsTrigger value=\"profile\" class=\"justify-start px-3\">Profile</TabsTrigger>\n *     <TabsTrigger value=\"billing\" class=\"justify-start px-3\">Billing</TabsTrigger>\n *     <TabsTrigger value=\"notifications\" class=\"justify-start px-3\">Notifications</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"profile\" class=\"rounded-lg border p-4\">\n *     Profile settings content.\n *   </TabsContent>\n *   <TabsContent value=\"billing\" class=\"rounded-lg border p-4\">\n *     Billing settings content.\n *   </TabsContent>\n *   <TabsContent value=\"notifications\" class=\"rounded-lg border p-4\">\n *     Notifications settings content.\n *   </TabsContent>\n * </Tabs>\n *\n * ### Disabled\n *\n * <Tabs defaultValue=\"active\">\n *   <TabsList>\n *     <TabsTrigger value=\"active\">Active</TabsTrigger>\n *     <TabsTrigger value=\"disabled\" disabled>Disabled</TabsTrigger>\n *     <TabsTrigger value=\"secondary\">Secondary</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"active\">Active tab content.</TabsContent>\n *   <TabsContent value=\"disabled\">Disabled tab content.</TabsContent>\n *   <TabsContent value=\"secondary\">Secondary tab content.</TabsContent>\n * </Tabs>\n *\n * ### Overflow\n *\n * <Tabs defaultValue=\"monday\">\n *   <TabsList class=\"w-full max-w-[20rem] justify-start overflow-x-auto whitespace-nowrap\">\n *     <TabsTrigger value=\"monday\" class=\"shrink-0\">Monday</TabsTrigger>\n *     <TabsTrigger value=\"tuesday\" class=\"shrink-0\">Tuesday</TabsTrigger>\n *     <TabsTrigger value=\"wednesday\" class=\"shrink-0\">Wednesday</TabsTrigger>\n *     <TabsTrigger value=\"thursday\" class=\"shrink-0\">Thursday</TabsTrigger>\n *     <TabsTrigger value=\"friday\" class=\"shrink-0\">Friday</TabsTrigger>\n *     <TabsTrigger value=\"saturday\" class=\"shrink-0\">Saturday</TabsTrigger>\n *     <TabsTrigger value=\"sunday\" class=\"shrink-0\">Sunday</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"monday\">Monday content.</TabsContent>\n *   <TabsContent value=\"tuesday\">Tuesday content.</TabsContent>\n *   <TabsContent value=\"wednesday\">Wednesday content.</TabsContent>\n *   <TabsContent value=\"thursday\">Thursday content.</TabsContent>\n *   <TabsContent value=\"friday\">Friday content.</TabsContent>\n *   <TabsContent value=\"saturday\">Saturday content.</TabsContent>\n *   <TabsContent value=\"sunday\">Sunday content.</TabsContent>\n * </Tabs>\n *\n * ### Direction Animation\n *\n * <Tabs defaultValue=\"overview\">\n *   <TabsList>\n *     <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n *     <TabsTrigger value=\"analytics\">Analytics</TabsTrigger>\n *     <TabsTrigger value=\"reports\">Reports</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"overview\" animation=\"direction\">Direction-aware overview.</TabsContent>\n *   <TabsContent value=\"analytics\" animation=\"direction\">Direction-aware analytics.</TabsContent>\n *   <TabsContent value=\"reports\" animation=\"direction\">Direction-aware reports.</TabsContent>\n * </Tabs>\n *\n * ### Sizes\n *\n * <div class=\"space-y-4\">\n *   <Tabs defaultValue=\"sm-account\">\n *     <TabsList size=\"sm\">\n *       <TabsTrigger value=\"sm-account\" class=\"text-xs px-2\">Account</TabsTrigger>\n *       <TabsTrigger value=\"sm-password\" class=\"text-xs px-2\">Password</TabsTrigger>\n *     </TabsList>\n *   </Tabs>\n *\n *   <Tabs defaultValue=\"md-account\">\n *     <TabsList size=\"default\">\n *       <TabsTrigger value=\"md-account\">Account</TabsTrigger>\n *       <TabsTrigger value=\"md-password\">Password</TabsTrigger>\n *     </TabsList>\n *   </Tabs>\n *\n *   <Tabs defaultValue=\"lg-account\">\n *     <TabsList size=\"lg\">\n *       <TabsTrigger value=\"lg-account\" class=\"text-base px-4\">Account</TabsTrigger>\n *       <TabsTrigger value=\"lg-password\" class=\"text-base px-4\">Password</TabsTrigger>\n *     </TabsList>\n *   </Tabs>\n * </div>\n *\n * @api\n *\n * ### Events\n *\n * The tabs component emits custom events that you can listen to:\n *\n * | Event | Detail | Description |\n * |-------|--------|-------------|\n * | `tabs:change` | `{ value: string }` | Fired when the selected tab changes |\n *\n * ```astro nocollapse console\n * <Tabs id=\"my-tabs\" defaultValue=\"tab1\">\n *   <TabsList>\n *     <TabsTrigger value=\"tab1\">Tab 1</TabsTrigger>\n *     <TabsTrigger value=\"tab2\">Tab 2</TabsTrigger>\n *   </TabsList>\n *   <TabsContent value=\"tab1\">Content 1</TabsContent>\n *   <TabsContent value=\"tab2\">Content 2</TabsContent>\n * </Tabs>\n * ```\n *\n * ```js nocollapse\n *   const tabs = document.getElementById('my-tabs');\n *\n *   tabs.addEventListener('tabs:change', (e) => {\n *     console.log('Selected tab:', e.detail.value);\n *   });\n * ```\n *\n * ### Programmatic Control\n *\n * You can control the tabs programmatically by dispatching a `tabs:set` event:\n *\n * ```js nocollapse\n * const tabs = document.getElementById('my-tabs');\n *\n * // Select a tab\n * tabs.dispatchEvent(new CustomEvent('tabs:set', {\n *   detail: { value: 'tab2' }\n * }));\n * ```\n *\n * ### Variants\n *\n * | Prop | Element | Values | Default |\n * |------|---------|--------|---------|\n * | `variant` | tabs-list | `indicator`, `default`, `line`, `line-animated` | `indicator` |\n * | `size` | tabs-list | `sm`, `default`, `lg` | `default` |\n * | `animation` | tabs-content | `none`, `fade`, `slide`, `direction` | `none` |\n *\n * ### Data Attributes\n *\n * The tabs component sets these data attributes that you can use for styling or querying state:\n *\n * | Attribute | Element | Description |\n * |-----------|---------|-------------|\n * | `data-orientation` | tabs | Current orientation (`horizontal` or `vertical`) |\n * | `data-variant` | tabs-list | Current list variant (`indicator`, `default`, `line`, or `line-animated`) |\n * | `data-activation-direction` | tabs-content | Last activation direction after tab change (`left`, `right`, `up`, or `down`, not set on initial mount) |\n * | `data-state` | tabs-trigger | Current state (`active` or `inactive`) |\n *\n * ### CSS Variables\n *\n * The tabs indicator exposes CSS variables for animation:\n *\n * | Variable | Element | Description |\n * |----------|---------|-------------|\n * | `--active-tab-left` | tabs-indicator | Left position of active tab |\n * | `--active-tab-width` | tabs-indicator | Width of active tab |\n * | `--active-tab-top` | tabs-indicator | Top position of active tab |\n * | `--active-tab-height` | tabs-indicator | Height of active tab |\n */\n\nimport type { HTMLAttributes } from \"astro/types\";\nimport { cn } from \"@/lib/utils\";\n\ninterface Props extends HTMLAttributes<\"div\"> {\n  class?: string;\n  orientation?: \"horizontal\" | \"vertical\";\n  defaultValue?: string;\n}\n\nconst {\n  class: className = \"\",\n  orientation = \"horizontal\",\n  defaultValue,\n  ...rest\n} = Astro.props as Props;\n---\n\n<div\n  {...rest}\n  data-slot=\"tabs\"\n  data-orientation={orientation}\n  data-default-value={defaultValue}\n  data-horizontal={orientation === \"horizontal\" ? \"true\" : undefined}\n  data-vertical={orientation === \"vertical\" ? \"true\" : undefined}\n  class={cn(\n    \"gap-2\",\n    \"group/tabs flex gap-2 data-[orientation=horizontal]:flex-col\",\n    className,\n  )}\n>\n  <slot />\n</div>\n\n<script>\n  import { createTabs } from \"@data-slot/tabs\";\n  document\n    .querySelectorAll('[data-slot=\"tabs\"]')\n    .forEach((el) => createTabs(el));\n</script>\n",
      "type": "registry:ui"
    },
    {
      "path": "ui/tabs/TabsContent.astro",
      "content": "---\n// Generated from bejamas-juno style registry. Do not edit packages/ui/src/components/tabs/TabsContent.astro directly.\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\nimport type { HTMLAttributes } from \"astro/types\";\n\nexport const tabsContentVariants = cva(\n  \"flex-1 outline-none hidden data-[state=active]:block\",\n  {\n    variants: {\n      animation: {\n        none: \"\",\n        fade: \"data-[state=active]:animate-in data-[state=active]:fade-in-0 data-[state=active]:duration-200\",\n        slide:\n          \"data-[state=active]:animate-in data-[state=active]:fade-in-0 data-[state=active]:slide-in-from-bottom-2 data-[state=active]:duration-200\",\n        direction:\n          \"data-[state=active]:animate-in data-[state=active]:duration-200 data-[activation-direction=left]:slide-in-from-left-2 data-[activation-direction=right]:slide-in-from-right-2 data-[activation-direction=up]:slide-in-from-top-2 data-[activation-direction=down]:slide-in-from-bottom-2 data-[activation-direction=left]:fade-in-0 data-[activation-direction=right]:fade-in-0 data-[activation-direction=up]:fade-in-0 data-[activation-direction=down]:fade-in-0\",\n      },\n    },\n    defaultVariants: {\n      animation: \"none\",\n    },\n  },\n);\n\ninterface Props extends VariantProps<typeof tabsContentVariants>, HTMLAttributes<\"div\"> {\n  value: string;\n  class?: string;\n}\n\nconst {\n  value,\n  animation = \"none\",\n  class: className = \"\",\n  ...rest\n} = Astro.props as Props;\n---\n\n<div\n  {...rest}\n  role=\"tabpanel\"\n  data-slot=\"tabs-content\"\n  data-value={value}\n  tabindex=\"0\"\n  class={cn(\"text-sm\", tabsContentVariants({ animation }), className)}\n>\n  <slot />\n</div>\n",
      "type": "registry:ui"
    },
    {
      "path": "ui/tabs/TabsList.astro",
      "content": "---\n// Generated from bejamas-juno style registry. Do not edit packages/ui/src/components/tabs/TabsList.astro directly.\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\nimport type { HTMLAttributes } from \"astro/types\";\n\nexport const tabsListVariants = cva(\n  \"group/tabs-list text-muted-foreground relative inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n  {\n    variants: {\n      variant: {\n        indicator: \"rounded-lg bg-muted p-[2px] [--tabs-indicator-radius:calc(var(--radius)_-_2px)]\",\n        default: \"rounded-lg bg-muted p-[3px]\",\n        line: \"rounded-none gap-1 bg-transparent p-0\",\n        \"line-animated\":\n          \"rounded-none gap-1 bg-transparent p-0\",\n      },\n      size: {\n        default: \"group-data-horizontal/tabs:h-9\",\n        sm: \"group-data-horizontal/tabs:h-8\",\n        lg: \"group-data-horizontal/tabs:h-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"indicator\",\n      size: \"default\",\n    },\n  },\n);\n\ninterface Props\n  extends VariantProps<typeof tabsListVariants>, HTMLAttributes<\"div\"> {\n  class?: string;\n}\n\nconst {\n  variant = \"indicator\",\n  size = \"default\",\n  class: className = \"\",\n  ...rest\n} = Astro.props as Props;\n---\n\n<div\n  {...rest}\n  role=\"tablist\"\n  data-slot=\"tabs-list\"\n  data-variant={variant}\n  class={cn(\"\", tabsListVariants({ variant, size }), className)}\n>\n  {\n    variant === \"indicator\" && (\n      <div\n        aria-hidden=\"true\"\n        data-slot=\"tabs-indicator\"\n        class=\"gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 pointer-events-none absolute top-(--active-tab-top) left-(--active-tab-left) z-0 h-(--active-tab-height) w-(--active-tab-width) bg-background shadow-sm transition-all duration-150 ease dark:border-input dark:bg-input/30\"\n      />\n    )\n  }\n  {\n    variant === \"line-animated\" && (\n      <div\n        aria-hidden=\"true\"\n        data-slot=\"tabs-indicator\"\n        class=\"pointer-events-none absolute z-0 rounded-full bg-foreground transition-all duration-150 ease group-data-[orientation=horizontal]/tabs:left-[var(--active-tab-left)] group-data-[orientation=horizontal]/tabs:top-[calc(var(--active-tab-top)+var(--active-tab-height)-2px)] group-data-[orientation=horizontal]/tabs:h-0.5 group-data-[orientation=horizontal]/tabs:w-[var(--active-tab-width)] group-data-[orientation=vertical]/tabs:top-[var(--active-tab-top)] group-data-[orientation=vertical]/tabs:left-[calc(var(--active-tab-left)+var(--active-tab-width)-2px)] group-data-[orientation=vertical]/tabs:h-[var(--active-tab-height)] group-data-[orientation=vertical]/tabs:w-0.5\"\n      />\n    )\n  }\n  <slot />\n</div>\n",
      "type": "registry:ui"
    },
    {
      "path": "ui/tabs/TabsTrigger.astro",
      "content": "---\n// Generated from bejamas-juno style registry. Do not edit packages/ui/src/components/tabs/TabsTrigger.astro directly.\nimport { cn } from \"@/lib/utils\";\nimport type { HTMLAttributes } from \"astro/types\";\n\ninterface Props extends HTMLAttributes<\"button\"> {\n  value: string;\n  disabled?: boolean;\n  class?: string;\n}\n\nconst {\n  value,\n  disabled = false,\n  class: className = \"\",\n  ...rest\n} = Astro.props as Props;\n---\n\n<button\n  {...rest}\n  type=\"button\"\n  disabled={disabled}\n  role=\"tab\"\n  data-slot=\"tabs-trigger\"\n  data-value={value}\n  class={cn(\n    \"gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4\",\n    \"relative z-10 inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap outline-none transition-all disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start\",\n    \"focus-visible:border-ring focus-visible:ring-ring/50 text-foreground/60 hover:text-foreground data-[state=active]:text-foreground focus-visible:ring-[3px] focus-visible:outline-1 focus-visible:outline-ring dark:text-muted-foreground dark:hover:text-foreground\",\n    \"group-data-[variant=default]/tabs-list:data-[state=active]:bg-background dark:group-data-[variant=default]/tabs-list:data-[state=active]:border-input dark:group-data-[variant=default]/tabs-list:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground\",\n    \"group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm\",\n    \"group-data-[variant=indicator]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=indicator]/tabs-list:data-[state=active]:shadow-none\",\n    \"group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none\",\n    \"group-data-[variant=line-animated]/tabs-list:rounded-none group-data-[variant=line-animated]/tabs-list:bg-transparent group-data-[variant=line-animated]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line-animated]/tabs-list:data-[state=active]:shadow-none\",\n    \"after:pointer-events-none after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=default]/tabs-list:after:hidden group-data-[variant=indicator]/tabs-list:after:hidden group-data-[variant=line-animated]/tabs-list:after:hidden group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n    className,\n  )}\n>\n  <slot />\n</button>\n",
      "type": "registry:ui"
    },
    {
      "path": "ui/tabs/index.ts",
      "content": "// Generated from bejamas-juno style registry. Do not edit packages/ui/src/components/tabs/index.ts directly.\nexport { default as Tabs } from \"./Tabs.astro\";\nexport { default as TabsList } from \"./TabsList.astro\";\nexport { default as TabsTrigger } from \"./TabsTrigger.astro\";\nexport { default as TabsContent } from \"./TabsContent.astro\";\nexport { tabsListVariants } from \"./TabsList.astro\";\nexport { tabsContentVariants } from \"./TabsContent.astro\";\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}