{"version":3,"file":"ngx-com-components-tabs.mjs","sources":["../../../projects/com/components/tabs/tabs.variants.ts","../../../projects/com/components/tabs/tab-label.directive.ts","../../../projects/com/components/tabs/tab-content.directive.ts","../../../projects/com/components/tabs/tab.component.ts","../../../projects/com/components/tabs/tabs.utils.ts","../../../projects/com/components/tabs/tab-header.component.ts","../../../projects/com/components/tabs/tab-group.component.ts","../../../projects/com/components/tabs/tab-link.directive.ts","../../../projects/com/components/tabs/tab-nav-bar.component.ts","../../../projects/com/components/tabs/index.ts","../../../projects/com/components/tabs/ngx-com-components-tabs.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Type Exports ───\n\nexport type TabVariant = 'underline' | 'pill' | 'outline' | 'solid';\nexport type TabSize = 'sm' | 'md' | 'lg';\nexport type TabColor = 'primary' | 'accent' | 'muted';\nexport type TabAlignment = 'start' | 'center' | 'end' | 'stretch';\n\n// ─── Tab Button / Link ───\n\nexport const tabItemVariants: (props?: {\n  variant?: TabVariant;\n  size?: TabSize;\n  color?: TabColor;\n  active?: boolean;\n}) => string = cva(\n  [\n    'relative inline-flex items-center justify-center gap-2',\n    'whitespace-nowrap font-medium select-none',\n    'transition-colors duration-normal',\n    'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:pointer-events-none',\n    'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n  ],\n  {\n    variants: {\n      variant: {\n        underline: 'bg-transparent border-b-2 border-transparent rounded-none',\n        pill: 'rounded-pill',\n        outline: 'border border-transparent rounded-tab',\n        solid: 'rounded-tab',\n      },\n      size: {\n        sm: 'h-8 px-3 text-xs gap-1.5',\n        md: 'h-10 px-4 text-sm gap-2',\n        lg: 'h-12 px-5 text-base gap-2.5',\n      },\n      color: {\n        primary: '',\n        accent: '',\n        muted: '',\n      },\n      active: {\n        true: '',\n        false: '',\n      },\n    },\n    compoundVariants: [\n      // ─── Underline ───\n      // Active\n      {\n        variant: 'underline',\n        color: 'primary',\n        active: true,\n        class: 'border-b-primary text-primary',\n      },\n      {\n        variant: 'underline',\n        color: 'accent',\n        active: true,\n        class: 'border-b-accent text-accent',\n      },\n      {\n        variant: 'underline',\n        color: 'muted',\n        active: true,\n        class: 'border-b-foreground text-foreground',\n      },\n      // Inactive\n      {\n        variant: 'underline',\n        active: false,\n        class: 'text-muted-foreground hover:text-foreground hover:border-b-border',\n      },\n\n      // ─── Pill ───\n      {\n        variant: 'pill',\n        color: 'primary',\n        active: true,\n        class: 'bg-primary text-primary-foreground',\n      },\n      {\n        variant: 'pill',\n        color: 'accent',\n        active: true,\n        class: 'bg-accent text-accent-foreground',\n      },\n      {\n        variant: 'pill',\n        color: 'muted',\n        active: true,\n        class: 'bg-muted text-foreground',\n      },\n      {\n        variant: 'pill',\n        active: false,\n        class: 'text-muted-foreground hover:text-foreground hover:bg-muted',\n      },\n\n      // ─── Outline ───\n      {\n        variant: 'outline',\n        color: 'primary',\n        active: true,\n        class: 'border-primary text-primary bg-primary-subtle',\n      },\n      {\n        variant: 'outline',\n        color: 'accent',\n        active: true,\n        class: 'border-accent text-accent bg-accent-subtle',\n      },\n      {\n        variant: 'outline',\n        color: 'muted',\n        active: true,\n        class: 'border-border text-foreground bg-muted',\n      },\n      {\n        variant: 'outline',\n        active: false,\n        class: 'text-muted-foreground hover:text-foreground hover:border-border',\n      },\n\n      // ─── Solid ───\n      {\n        variant: 'solid',\n        color: 'primary',\n        active: true,\n        class: 'bg-primary text-primary-foreground shadow-sm',\n      },\n      {\n        variant: 'solid',\n        color: 'accent',\n        active: true,\n        class: 'bg-accent text-accent-foreground shadow-sm',\n      },\n      {\n        variant: 'solid',\n        color: 'muted',\n        active: true,\n        class: 'bg-muted text-foreground shadow-sm',\n      },\n      {\n        variant: 'solid',\n        active: false,\n        class: 'text-muted-foreground hover:text-foreground hover:bg-muted',\n      },\n    ],\n    defaultVariants: {\n      variant: 'underline',\n      size: 'md',\n      color: 'primary',\n      active: false,\n    },\n  }\n);\n\nexport type TabItemVariants = VariantProps<typeof tabItemVariants>;\n\n// ─── Tab Header / Nav Bar Container ───\n\nexport const tabHeaderVariants: (props?: {\n  alignment?: TabAlignment;\n  variant?: TabVariant;\n}) => string = cva('relative flex', {\n  variants: {\n    alignment: {\n      start: 'justify-start',\n      center: 'justify-center',\n      end: 'justify-end',\n      stretch: '[&>*]:flex-1',\n    },\n    variant: {\n      underline: 'border-b border-border',\n      pill: 'gap-1 p-1 bg-muted rounded-tab-list',\n      outline: 'gap-1',\n      solid: 'gap-1 p-1 bg-muted rounded-tab-list',\n    },\n  },\n  defaultVariants: {\n    alignment: 'start',\n    variant: 'underline',\n  },\n});\n\nexport type TabHeaderVariants = VariantProps<typeof tabHeaderVariants>;\n\n// ─── Scroll Button ───\n\nexport const tabScrollButtonVariants: (props?: {\n  direction?: 'left' | 'right';\n  variant?: TabVariant;\n}) => string = cva(\n  [\n    'absolute top-0 z-10 flex items-center justify-center',\n    'h-full w-8',\n    'text-muted-foreground hover:text-foreground',\n    'transition-opacity duration-normal',\n    'focus-visible:outline-none',\n  ],\n  {\n    variants: {\n      direction: {\n        left: 'left-0 bg-gradient-to-r from-background to-transparent',\n        right: 'right-0 bg-gradient-to-l from-background to-transparent',\n      },\n      variant: {\n        underline: '',\n        pill: 'from-muted',\n        outline: '',\n        solid: 'from-muted',\n      },\n    },\n    defaultVariants: {\n      direction: 'left',\n      variant: 'underline',\n    },\n  }\n);\n\nexport type TabScrollButtonVariants = VariantProps<typeof tabScrollButtonVariants>;\n\n// ─── Close Button on Closable Tabs ───\n\n/**\n * @tokens `--color-muted-foreground`, `--color-foreground`, `--color-ring`, `--radius-interactive-sm`\n */\nexport const tabCloseButtonVariants: (props?: {\n  size?: TabSize;\n}) => string = cva(\n  [\n    'inline-flex items-center justify-center rounded-interactive-sm',\n    'text-muted-foreground hover:text-foreground',\n    'transition-colors duration-fast',\n    'focus-visible:outline-[1px] focus-visible:outline-offset-1 focus-visible:outline-ring',\n  ],\n  {\n    variants: {\n      size: {\n        sm: 'h-3.5 w-3.5',\n        md: 'h-4 w-4',\n        lg: 'h-5 w-5',\n      },\n    },\n    defaultVariants: { size: 'md' },\n  }\n);\n\nexport type TabCloseButtonVariants = VariantProps<typeof tabCloseButtonVariants>;\n\n// ─── Tab Panel Container ───\n\nexport const tabPanelVariants: (props?: {\n  animated?: boolean;\n}) => string = cva('focus-visible:outline-none', {\n  variants: {\n    animated: {\n      true: 'animate-fade-in motion-reduce:animate-none',\n      false: '',\n    },\n  },\n  defaultVariants: {\n    animated: true,\n  },\n});\n\nexport type TabPanelVariants = VariantProps<typeof tabPanelVariants>;\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Marker directive for custom tab label templates.\n *\n * Provides a custom label template for rich tab headers (icons, badges, counters).\n * Applied to an `<ng-template>` inside `<com-tab>`.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-tab>\n *   <ng-template comTabLabel>\n *     <svg class=\"w-4 h-4\">...</svg>\n *     <span>Settings</span>\n *     <span class=\"bg-warn text-warn-foreground text-xs rounded-pill px-1.5\">3</span>\n *   </ng-template>\n *   <p>Tab content here.</p>\n * </com-tab>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comTabLabel]',\n})\nexport class ComTabLabel {\n  readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n\n  static ngTemplateContextGuard(\n    _dir: ComTabLabel,\n    ctx: unknown\n  ): ctx is void {\n    return true;\n  }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Marker directive for lazy tab content rendering.\n *\n * Content wrapped in `<ng-template comTabContent>` is only instantiated\n * when the tab becomes active for the first time.\n *\n * @tokens none\n *\n * @example Lazy loaded content\n * ```html\n * <com-tab label=\"Analytics\">\n *   <ng-template comTabContent>\n *     <app-analytics-dashboard />\n *   </ng-template>\n * </com-tab>\n * ```\n *\n * @example Combined with @defer\n * ```html\n * <com-tab label=\"Reports\">\n *   <ng-template comTabContent>\n *     &#64;defer {\n *       <app-report-builder />\n *     } &#64;loading {\n *       <p>Loading reports...</p>\n *     }\n *   </ng-template>\n * </com-tab>\n * ```\n */\n@Directive({\n  selector: 'ng-template[comTabContent]',\n})\nexport class ComTabContent {\n  readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n\n  static ngTemplateContextGuard(\n    _dir: ComTabContent,\n    ctx: unknown\n  ): ctx is void {\n    return true;\n  }\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChild,\n  input,\n  output,\n  signal,\n  TemplateRef,\n  viewChild,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  InputSignalWithTransform,\n  OutputEmitterRef,\n  Signal,\n  WritableSignal,\n} from '@angular/core';\nimport { ComTabLabel } from './tab-label.directive';\nimport { ComTabContent } from './tab-content.directive';\n\n/**\n * Individual tab definition component.\n *\n * This is a **definition component** — it doesn't render anything itself.\n * It provides a label and content template to the parent `ComTabGroup`.\n *\n * @tokens none\n *\n * @example Basic usage\n * ```html\n * <com-tab label=\"Overview\">\n *   <p>Overview content.</p>\n * </com-tab>\n * ```\n *\n * @example Custom label with icon\n * ```html\n * <com-tab>\n *   <ng-template comTabLabel>\n *     <svg class=\"w-4 h-4\"><!-- icon --></svg>\n *     <span>Settings</span>\n *   </ng-template>\n *   <p>Settings content.</p>\n * </com-tab>\n * ```\n *\n * @example Lazy loaded content\n * ```html\n * <com-tab label=\"Analytics\">\n *   <ng-template comTabContent>\n *     <app-heavy-dashboard />\n *   </ng-template>\n * </com-tab>\n * ```\n *\n * @example Closable tab\n * ```html\n * <com-tab label=\"Document\" [closable]=\"true\" (closed)=\"onClose()\">\n *   <p>Document content.</p>\n * </com-tab>\n * ```\n */\n@Component({\n  selector: 'com-tab',\n  template: `\n    <ng-template #implicitContent>\n      <ng-content />\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComTab {\n  // ─── Inputs ───\n\n  /** Plain text label; ignored if `[comTabLabel]` template is provided. */\n  readonly label: InputSignal<string> = input<string>('');\n\n  /** Prevents selection when true. */\n  readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Shows a close/remove button on the tab. */\n  readonly closable: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  // ─── Outputs ───\n\n  /** Emitted when the close button is clicked. */\n  readonly closed: OutputEmitterRef<void> = output<void>();\n\n  // ─── Template References ───\n\n  /** Custom label template (queried from content). */\n  readonly customLabel: Signal<ComTabLabel | undefined> = contentChild<ComTabLabel>(ComTabLabel);\n\n  /** Lazy content template (queried from content). */\n  readonly lazyContent: Signal<ComTabContent | undefined> = contentChild<ComTabContent>(ComTabContent);\n\n  /** Implicit content template from ng-content. */\n  readonly implicitContent: Signal<TemplateRef<unknown> | undefined> =\n    viewChild<TemplateRef<unknown>>('implicitContent');\n\n  // ─── State (set by parent ComTabGroup) ───\n\n  /** Whether this tab is currently active. Set by ComTabGroup. */\n  readonly isActive: WritableSignal<boolean> = signal(false);\n\n  /** Whether this tab content has been rendered at least once. */\n  readonly hasBeenActivated: WritableSignal<boolean> = signal(false);\n\n  // ─── Computed ───\n\n  /**\n   * Returns the label template if provided, otherwise null.\n   * Parent uses this to decide between string label or template.\n   */\n  readonly labelTemplate: Signal<TemplateRef<void> | null> = computed(\n    () => this.customLabel()?.templateRef ?? null\n  );\n\n  /**\n   * Returns the content template: lazy template if present, else implicit content.\n   */\n  readonly contentTemplate: Signal<TemplateRef<unknown> | undefined> = computed(\n    () => this.lazyContent()?.templateRef ?? this.implicitContent()\n  );\n\n  /**\n   * Whether this tab uses lazy loading.\n   */\n  readonly isLazy: Signal<boolean> = computed(() => !!this.lazyContent());\n}\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet tabIdCounter = 0;\n\n/**\n * Generates a unique ID for tab components.\n */\nexport function generateTabId(): string {\n  return `com-tab-${++tabIdCounter}`;\n}\n","import {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  output,\n  signal,\n  viewChild,\n  viewChildren,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  OutputEmitterRef,\n  Signal,\n  WritableSignal,\n} from '@angular/core';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { ComTab } from './tab.component';\nimport {\n  tabItemVariants,\n  tabHeaderVariants,\n  tabScrollButtonVariants,\n  tabCloseButtonVariants,\n} from './tabs.variants';\nimport type { TabVariant, TabSize, TabColor, TabAlignment } from './tabs.variants';\nimport { mergeClasses } from './tabs.utils';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/** Internal tab item interface for focus management. */\ninterface TabItem {\n  focus: () => void;\n  disabled: boolean;\n}\n\n/**\n * Internal scrollable tab header component.\n *\n * Handles overflow detection, scroll buttons, keyboard navigation,\n * and the active indicator (for underline variant).\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-foreground`, `--color-muted-foreground`,\n *         `--color-muted`, `--color-border`, `--color-background`, `--color-ring`,\n *         `--color-disabled`, `--color-disabled-foreground`\n *\n * @internal Not exported in public API.\n */\n@Component({\n  selector: 'com-tab-header',\n  template: `\n    <!-- Scroll button left -->\n    @if (showScrollLeft()) {\n      <button\n        type=\"button\"\n        [class]=\"scrollLeftClasses()\"\n        (click)=\"scrollLeft()\"\n        aria-hidden=\"true\"\n        tabindex=\"-1\"\n      >\n        <svg\n          class=\"h-4 w-4\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <polyline points=\"15 18 9 12 15 6\" />\n        </svg>\n      </button>\n    }\n\n    <!-- Tab list -->\n    <div\n      #scrollContainer\n      class=\"flex overflow-x-auto scrollbar-none\"\n      [class]=\"headerClasses()\"\n      role=\"tablist\"\n      tabindex=\"-1\"\n      [attr.aria-orientation]=\"'horizontal'\"\n      (scroll)=\"onScroll()\"\n      (keydown)=\"onKeydown($event)\"\n    >\n      @for (tab of tabs(); track $index; let i = $index) {\n        <button\n          #tabButton\n          type=\"button\"\n          role=\"tab\"\n          [id]=\"getTabId(i)\"\n          [class]=\"getTabClasses(i)\"\n          [attr.aria-selected]=\"selectedIndex() === i\"\n          [attr.aria-controls]=\"getPanelId(i)\"\n          [attr.aria-disabled]=\"tab.disabled() || null\"\n          [attr.data-state]=\"selectedIndex() === i ? 'active' : 'inactive'\"\n          [disabled]=\"tab.disabled()\"\n          [tabindex]=\"selectedIndex() === i ? 0 : -1\"\n          (click)=\"selectTab(i)\"\n          (focus)=\"onTabFocus(i)\"\n          (keydown.delete)=\"tab.closable() && closeTab($event, i)\"\n        >\n          @if (tab.labelTemplate()) {\n            <ng-container [ngTemplateOutlet]=\"tab.labelTemplate()!\" />\n          } @else {\n            {{ tab.label() }}\n          }\n\n          @if (tab.closable()) {\n            <span\n              aria-hidden=\"true\"\n              [class]=\"closeButtonClasses()\"\n              (click)=\"closeTab($event, i)\"\n            >\n              <svg\n                viewBox=\"0 0 24 24\"\n                fill=\"none\"\n                stroke=\"currentColor\"\n                stroke-width=\"2\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n                class=\"h-full w-full\"\n              >\n                <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n                <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n              </svg>\n            </span>\n          }\n        </button>\n      }\n\n      <!-- Active indicator (underline variant only) -->\n      @if (variant() === 'underline') {\n        <div\n          class=\"absolute bottom-0 h-0.5 bg-current transition-all duration-slow ease-out\"\n          [class]=\"indicatorColorClass()\"\n          [style.left.px]=\"indicatorLeft()\"\n          [style.width.px]=\"indicatorWidth()\"\n        ></div>\n      }\n    </div>\n\n    <!-- Scroll button right -->\n    @if (showScrollRight()) {\n      <button\n        type=\"button\"\n        [class]=\"scrollRightClasses()\"\n        (click)=\"scrollRight()\"\n        aria-hidden=\"true\"\n        tabindex=\"-1\"\n      >\n        <svg\n          class=\"h-4 w-4\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <polyline points=\"9 18 15 12 9 6\" />\n        </svg>\n      </button>\n    }\n  `,\n  styles: `\n    :host {\n      display: block;\n      position: relative;\n    }\n    .scrollbar-none {\n      scrollbar-width: none;\n      -ms-overflow-style: none;\n    }\n    .scrollbar-none::-webkit-scrollbar {\n      display: none;\n    }\n  `,\n  imports: [NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComTabHeader {\n  private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n  // ─── Inputs ───\n\n  readonly tabs: InputSignal<readonly ComTab[]> = input.required<readonly ComTab[]>();\n  readonly selectedIndex: InputSignal<number> = input.required<number>();\n  readonly variant: InputSignal<TabVariant> = input<TabVariant>('underline');\n  readonly size: InputSignal<TabSize> = input<TabSize>('md');\n  readonly color: InputSignal<TabColor> = input<TabColor>('primary');\n  readonly alignment: InputSignal<TabAlignment> = input<TabAlignment>('start');\n  readonly baseId: InputSignal<string> = input.required<string>();\n\n  // ─── Outputs ───\n\n  readonly tabSelected: OutputEmitterRef<number> = output<number>();\n  readonly tabFocused: OutputEmitterRef<number> = output<number>();\n  readonly tabClosed: OutputEmitterRef<number> = output<number>();\n\n  // ─── View Children ───\n\n  readonly scrollContainer: Signal<ElementRef<HTMLElement> | undefined> =\n    viewChild<ElementRef<HTMLElement>>('scrollContainer');\n  readonly tabButtons: Signal<readonly ElementRef<HTMLButtonElement>[]> =\n    viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\n\n  // ─── State ───\n\n  private readonly scrollLeftValue: WritableSignal<number> = signal(0);\n  private readonly containerWidth: WritableSignal<number> = signal(0);\n  private readonly scrollWidth: WritableSignal<number> = signal(0);\n  protected readonly indicatorLeft: WritableSignal<number> = signal(0);\n  protected readonly indicatorWidth: WritableSignal<number> = signal(0);\n\n  private keyManager: FocusKeyManager<TabItem> | null = null;\n  private resizeObserver: ResizeObserver | null = null;\n\n  // ─── Computed ───\n\n  readonly hasOverflow: Signal<boolean> = computed(\n    () => this.scrollWidth() > this.containerWidth()\n  );\n\n  readonly showScrollLeft: Signal<boolean> = computed(\n    () => this.hasOverflow() && this.scrollLeftValue() > 0\n  );\n\n  readonly showScrollRight: Signal<boolean> = computed(() => {\n    const remaining = this.scrollWidth() - this.containerWidth() - this.scrollLeftValue();\n    return this.hasOverflow() && remaining > 1;\n  });\n\n  readonly headerClasses: Signal<string> = computed(() =>\n    mergeClasses(\n      tabHeaderVariants({\n        alignment: this.alignment(),\n        variant: this.variant(),\n      }),\n      'relative'\n    )\n  );\n\n  readonly scrollLeftClasses: Signal<string> = computed(() =>\n    tabScrollButtonVariants({\n      direction: 'left',\n      variant: this.variant(),\n    })\n  );\n\n  readonly scrollRightClasses: Signal<string> = computed(() =>\n    tabScrollButtonVariants({\n      direction: 'right',\n      variant: this.variant(),\n    })\n  );\n\n  readonly closeButtonClasses: Signal<string> = computed(() =>\n    tabCloseButtonVariants({ size: this.size() })\n  );\n\n  readonly indicatorColorClass: Signal<string> = computed(() => {\n    const colorMap: Record<TabColor, string> = {\n      primary: 'text-primary',\n      accent: 'text-accent',\n      muted: 'text-foreground',\n    };\n    return colorMap[this.color()];\n  });\n\n  constructor() {\n    // Setup resize observer after render\n    afterNextRender(() => {\n      this.setupResizeObserver();\n      this.updateScrollState();\n      this.updateIndicator();\n      this.setupKeyManager();\n    });\n\n    // Update indicator when selected index changes\n    effect(() => {\n      this.selectedIndex();\n      this.updateIndicator();\n    });\n\n    // Cleanup on destroy\n    this.destroyRef.onDestroy(() => {\n      this.resizeObserver?.disconnect();\n      this.keyManager?.destroy();\n    });\n  }\n\n  // ─── Public Methods ───\n\n  getTabId(index: number): string {\n    return `${this.baseId()}-tab-${index}`;\n  }\n\n  getPanelId(index: number): string {\n    return `${this.baseId()}-panel-${index}`;\n  }\n\n  getTabClasses(index: number): string {\n    return tabItemVariants({\n      variant: this.variant(),\n      size: this.size(),\n      color: this.color(),\n      active: this.selectedIndex() === index,\n    });\n  }\n\n  selectTab(index: number): void {\n    const tab = this.tabs()[index];\n    if (tab && !tab.disabled()) {\n      this.tabSelected.emit(index);\n      this.scrollTabIntoView(index);\n    }\n  }\n\n  scrollLeft(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (container) {\n      const scrollAmount = container.clientWidth * 0.75;\n      container.scrollTo({\n        left: container.scrollLeft - scrollAmount,\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  scrollRight(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (container) {\n      const scrollAmount = container.clientWidth * 0.75;\n      container.scrollTo({\n        left: container.scrollLeft + scrollAmount,\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  // ─── Event Handlers ───\n\n  protected onScroll(): void {\n    this.updateScrollState();\n  }\n\n  protected onTabFocus(index: number): void {\n    this.tabFocused.emit(index);\n    this.scrollTabIntoView(index);\n  }\n\n  protected closeTab(event: Event, index: number): void {\n    event.stopPropagation();\n    this.tabClosed.emit(index);\n  }\n\n  protected onKeydown(event: KeyboardEvent): void {\n    if (!this.keyManager) return;\n\n    switch (event.key) {\n      case 'ArrowLeft':\n        this.keyManager.setPreviousItemActive();\n        event.preventDefault();\n        break;\n      case 'ArrowRight':\n        this.keyManager.setNextItemActive();\n        event.preventDefault();\n        break;\n      case 'Home':\n        this.keyManager.setFirstItemActive();\n        event.preventDefault();\n        break;\n      case 'End':\n        this.keyManager.setLastItemActive();\n        event.preventDefault();\n        break;\n      case 'Enter':\n      case ' ': {\n        const activeIndex = this.keyManager.activeItemIndex;\n        if (activeIndex !== null && activeIndex >= 0) {\n          this.selectTab(activeIndex);\n        }\n        event.preventDefault();\n        break;\n      }\n    }\n  }\n\n  // ─── Private Methods ───\n\n  private setupResizeObserver(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (!container) return;\n\n    this.resizeObserver = new ResizeObserver(() => {\n      this.updateScrollState();\n      this.updateIndicator();\n    });\n    this.resizeObserver.observe(container);\n  }\n\n  private updateScrollState(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (!container) return;\n\n    this.scrollLeftValue.set(container.scrollLeft);\n    this.containerWidth.set(container.clientWidth);\n    this.scrollWidth.set(container.scrollWidth);\n  }\n\n  private updateIndicator(): void {\n    const buttons = this.tabButtons();\n    const index = this.selectedIndex();\n\n    if (buttons.length === 0 || index < 0 || index >= buttons.length) {\n      this.indicatorLeft.set(0);\n      this.indicatorWidth.set(0);\n      return;\n    }\n\n    const button = buttons[index]?.nativeElement;\n    if (button) {\n      this.indicatorLeft.set(button.offsetLeft);\n      this.indicatorWidth.set(button.offsetWidth);\n    }\n  }\n\n  private scrollTabIntoView(index: number): void {\n    const container = this.scrollContainer()?.nativeElement;\n    const buttons = this.tabButtons();\n\n    if (!container || index < 0 || index >= buttons.length) return;\n\n    const button = buttons[index]?.nativeElement;\n    if (!button) return;\n\n    if (!container.getBoundingClientRect || !button.getBoundingClientRect) return;\n\n    const containerRect = container.getBoundingClientRect();\n    const buttonRect = button.getBoundingClientRect();\n\n    if (buttonRect.left < containerRect.left) {\n      container.scrollTo({\n        left: container.scrollLeft - (containerRect.left - buttonRect.left) - 16,\n        behavior: 'smooth',\n      });\n    } else if (buttonRect.right > containerRect.right) {\n      container.scrollTo({\n        left: container.scrollLeft + (buttonRect.right - containerRect.right) + 16,\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  private setupKeyManager(): void {\n    const items = this.createKeyManagerItems();\n    this.keyManager = new FocusKeyManager(items)\n      .withHorizontalOrientation('ltr')\n      .withWrap()\n      .skipPredicate(item => item.disabled);\n\n    this.keyManager.setActiveItem(this.selectedIndex());\n  }\n\n  private createKeyManagerItems(): TabItem[] {\n    const buttons = this.tabButtons();\n    const tabs = this.tabs();\n\n    return buttons.map((buttonRef, index) => ({\n      focus: () => buttonRef.nativeElement.focus(),\n      disabled: tabs[index]?.disabled() ?? false,\n    }));\n  }\n}\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChildren,\n  effect,\n  model,\n  input,\n  output,\n} from '@angular/core';\nimport type {\n  InputSignal,\n  InputSignalWithTransform,\n  ModelSignal,\n  OutputEmitterRef,\n  Signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComTab } from './tab.component';\nimport { ComTabHeader } from './tab-header.component';\nimport { tabPanelVariants } from './tabs.variants';\nimport type { TabVariant, TabSize, TabColor, TabAlignment } from './tabs.variants';\nimport { generateTabId } from './tabs.utils';\n\n/** Event emitted when the selected tab changes. */\nexport interface TabChangeEvent {\n  index: number;\n  tab: ComTab;\n}\n\n/**\n * Tab group component — orchestrates tab state and renders header + panels.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n *         `--color-muted`, `--color-muted-foreground`, `--color-border`, `--color-ring`,\n *         `--color-disabled`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <com-tab-group>\n *   <com-tab label=\"Overview\">\n *     <p>Overview content.</p>\n *   </com-tab>\n *   <com-tab label=\"Settings\">\n *     <p>Settings content.</p>\n *   </com-tab>\n * </com-tab-group>\n * ```\n *\n * @example With variants\n * ```html\n * <com-tab-group variant=\"pill\" color=\"accent\">\n *   <com-tab label=\"Tab 1\"><p>Pill style.</p></com-tab>\n *   <com-tab label=\"Tab 2\"><p>Content.</p></com-tab>\n * </com-tab-group>\n * ```\n *\n * @example Two-way binding\n * ```html\n * <com-tab-group [(selectedIndex)]=\"currentTab\">\n *   <com-tab label=\"One\"><p>First.</p></com-tab>\n *   <com-tab label=\"Two\"><p>Second.</p></com-tab>\n * </com-tab-group>\n * ```\n *\n * @example Lazy loaded content\n * ```html\n * <com-tab-group>\n *   <com-tab label=\"Summary\"><p>Loads immediately.</p></com-tab>\n *   <com-tab label=\"Analytics\">\n *     <ng-template comTabContent>\n *       <app-analytics-dashboard />\n *     </ng-template>\n *   </com-tab>\n * </com-tab-group>\n * ```\n */\n@Component({\n  selector: 'com-tab-group',\n  template: `\n    <com-tab-header\n      [tabs]=\"tabs()\"\n      [selectedIndex]=\"selectedIndex()\"\n      [variant]=\"variant()\"\n      [size]=\"size()\"\n      [color]=\"color()\"\n      [alignment]=\"alignment()\"\n      [baseId]=\"baseId\"\n      (tabSelected)=\"onTabSelected($event)\"\n      (tabFocused)=\"onTabFocused($event)\"\n      (tabClosed)=\"onTabClosed($event)\"\n    />\n\n    <div\n      class=\"mt-2\"\n      role=\"tabpanel\"\n      [id]=\"activePanelId()\"\n      [attr.aria-labelledby]=\"activeTabId()\"\n      tabindex=\"0\"\n    >\n      @if (preserveContent()) {\n        @for (tab of tabs(); track $index; let i = $index) {\n          <div\n            [hidden]=\"selectedIndex() !== i\"\n            [class]=\"panelClasses()\"\n            role=\"tabpanel\"\n            [id]=\"getPanelId(i)\"\n            [attr.aria-labelledby]=\"getTabId(i)\"\n          >\n            @if (shouldRenderTab(tab, i)) {\n              <ng-container [ngTemplateOutlet]=\"tab.contentTemplate()!\" />\n            }\n          </div>\n        }\n      } @else {\n        @if (activeTab(); as tab) {\n          <div [class]=\"panelClasses()\">\n            @if (shouldRenderTab(tab, selectedIndex())) {\n              <ng-container [ngTemplateOutlet]=\"tab.contentTemplate()!\" />\n            }\n          </div>\n        }\n      }\n    </div>\n  `,\n  styles: `\n    :host {\n      display: block;\n    }\n  `,\n  imports: [ComTabHeader, NgTemplateOutlet],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-tab-group',\n  },\n})\nexport class ComTabGroup {\n  /** Unique ID for this tab group instance. */\n  readonly baseId: string = generateTabId();\n\n  // ─── Inputs ───\n\n  /** Visual treatment of tab buttons. */\n  readonly variant: InputSignal<TabVariant> = input<TabVariant>('underline');\n\n  /** Controls tab button padding and font size. */\n  readonly size: InputSignal<TabSize> = input<TabSize>('md');\n\n  /** Active tab color. */\n  readonly color: InputSignal<TabColor> = input<TabColor>('primary');\n\n  /** Tab alignment within the header. */\n  readonly alignment: InputSignal<TabAlignment> = input<TabAlignment>('start');\n\n  /** Two-way bindable selected tab index. */\n  readonly selectedIndex: ModelSignal<number> = model<number>(0);\n\n  /** Enable/disable panel transition animation. */\n  readonly animationEnabled: InputSignalWithTransform<boolean, unknown> = input(true, {\n    transform: booleanAttribute,\n  });\n\n  /** When true, keeps inactive tab DOM alive (hidden); when false, destroys inactive tab content. */\n  readonly preserveContent: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  // ─── Outputs ───\n\n  /** Emits when the selected tab changes with index and tab reference. */\n  readonly selectedTabChange: OutputEmitterRef<TabChangeEvent> = output<TabChangeEvent>();\n\n  /** Emits the index of the focused (not yet selected) tab for keyboard navigation feedback. */\n  readonly focusChange: OutputEmitterRef<number> = output<number>();\n\n  // ─── Content Children ───\n\n  /** All ComTab children. */\n  readonly tabs: Signal<readonly ComTab[]> = contentChildren<ComTab>(ComTab);\n\n  // ─── Computed ───\n\n  /** The currently active tab. */\n  readonly activeTab: Signal<ComTab | undefined> = computed(\n    () => this.tabs()[this.selectedIndex()]\n  );\n\n  /** ID of the active tab button. */\n  readonly activeTabId: Signal<string> = computed(() => this.getTabId(this.selectedIndex()));\n\n  /** ID of the active panel. */\n  readonly activePanelId: Signal<string> = computed(() => this.getPanelId(this.selectedIndex()));\n\n  /** Classes for panel container. */\n  readonly panelClasses: Signal<string> = computed(() =>\n    tabPanelVariants({ animated: this.animationEnabled() })\n  );\n\n  constructor() {\n    // Update isActive state on tabs when selection changes\n    effect(() => {\n      const currentIndex = this.selectedIndex();\n      const allTabs = this.tabs();\n\n      allTabs.forEach((tab, index) => {\n        const isActive = index === currentIndex;\n        tab.isActive.set(isActive);\n\n        // Mark as activated for lazy loading\n        if (isActive && !tab.hasBeenActivated()) {\n          tab.hasBeenActivated.set(true);\n        }\n      });\n    });\n  }\n\n  // ─── Public Methods ───\n\n  getTabId(index: number): string {\n    return `${this.baseId}-tab-${index}`;\n  }\n\n  getPanelId(index: number): string {\n    return `${this.baseId}-panel-${index}`;\n  }\n\n  /**\n   * Determines whether a tab's content should be rendered.\n   * For lazy tabs, content is only rendered after first activation.\n   */\n  shouldRenderTab(tab: ComTab, _index: number): boolean {\n    // Non-lazy tabs always render their content\n    if (!tab.isLazy()) {\n      return true;\n    }\n\n    // Lazy tabs render only if they've been activated at least once\n    return tab.hasBeenActivated();\n  }\n\n  // ─── Event Handlers ───\n\n  protected onTabSelected(index: number): void {\n    const tab = this.tabs()[index];\n    if (tab && !tab.disabled()) {\n      this.selectedIndex.set(index);\n      this.selectedTabChange.emit({ index, tab });\n    }\n  }\n\n  protected onTabFocused(index: number): void {\n    this.focusChange.emit(index);\n  }\n\n  protected onTabClosed(index: number): void {\n    const tab = this.tabs()[index];\n    if (tab) {\n      tab.closed.emit();\n    }\n  }\n}\n","import {\n  booleanAttribute,\n  computed,\n  Directive,\n  ElementRef,\n  inject,\n  input,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { RouterLinkActive } from '@angular/router';\nimport { startWith } from 'rxjs';\nimport { tabItemVariants } from './tabs.variants';\nimport type { TabVariant, TabSize, TabColor } from './tabs.variants';\nimport { mergeClasses } from './tabs.utils';\n\n/**\n * Tab link directive for route-driven navigation tabs.\n *\n * Applied to anchor or button elements inside `com-tab-nav-bar`.\n * Automatically detects active state from `routerLinkActive` if present.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-primary-subtle`,\n *         `--color-accent`, `--color-accent-foreground`, `--color-accent-subtle`,\n *         `--color-foreground`, `--color-muted-foreground`, `--color-muted`,\n *         `--color-border`, `--color-ring`,\n *         `--color-disabled`, `--color-disabled-foreground`\n *\n * @example Basic usage with router\n * ```html\n * <nav com-tab-nav-bar>\n *   <a comTabLink routerLink=\"overview\" routerLinkActive>Overview</a>\n *   <a comTabLink routerLink=\"settings\" routerLinkActive>Settings</a>\n * </nav>\n * ```\n *\n * @example Manual active state control\n * ```html\n * <a comTabLink [active]=\"isOverviewActive\">Overview</a>\n * ```\n *\n * @example Disabled link\n * ```html\n * <a comTabLink [disabled]=\"true\">Coming Soon</a>\n * ```\n */\n@Directive({\n  selector: 'a[comTabLink], button[comTabLink]',\n  host: {\n    role: 'tab',\n    '[class]': 'computedClass()',\n    '[attr.aria-selected]': 'isActive()',\n    '[attr.aria-disabled]': 'disabled() || null',\n    '[attr.data-state]': 'isActive() ? \"active\" : \"inactive\"',\n    '[tabindex]': 'isActive() ? 0 : -1',\n  },\n})\nexport class ComTabLink {\n  private readonly routerLinkActive: RouterLinkActive | null = inject(RouterLinkActive, { optional: true, self: true });\n  private readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n\n  // ─── Inputs ───\n\n  /** Manual active state control. */\n  readonly active: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Prevents interaction when true. */\n  readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n  });\n\n  /** Visual variant (inherited from parent nav bar or set directly). */\n  readonly variant: InputSignal<TabVariant> = input<TabVariant>('underline');\n\n  /** Size (inherited from parent nav bar or set directly). */\n  readonly size: InputSignal<TabSize> = input<TabSize>('md');\n\n  /** Color (inherited from parent nav bar or set directly). */\n  readonly color: InputSignal<TabColor> = input<TabColor>('primary');\n\n  /** Additional CSS classes. */\n  readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n  // ─── Private ───\n\n  /**\n   * Reactive signal from RouterLinkActive.isActiveChange.\n   * Converts the EventEmitter to a signal for proper reactivity.\n   */\n  private readonly routerLinkActiveState: Signal<boolean> | null = this.routerLinkActive\n    ? toSignal(\n        this.routerLinkActive.isActiveChange.pipe(startWith(this.routerLinkActive.isActive)),\n        { initialValue: this.routerLinkActive.isActive }\n      )\n    : null;\n\n  // ─── Computed ───\n\n  /**\n   * Resolved active state — uses routerLinkActive if available, otherwise input.\n   */\n  readonly isActive: Signal<boolean> = computed(() => {\n    if (this.routerLinkActiveState) {\n      return this.routerLinkActiveState();\n    }\n    return this.active();\n  });\n\n  /** Computed host class from CVA + consumer overrides. */\n  readonly computedClass: Signal<string> = computed(() =>\n    mergeClasses(\n      tabItemVariants({\n        variant: this.variant(),\n        size: this.size(),\n        color: this.color(),\n        active: this.isActive(),\n      }),\n      this.disabled() && 'pointer-events-none',\n      this.userClass()\n    )\n  );\n\n  /** Focus this tab link element. */\n  focus(): void {\n    this.elementRef.nativeElement.focus();\n  }\n}\n","import {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  contentChildren,\n  DestroyRef,\n  inject,\n  input,\n  signal,\n  viewChild,\n  ElementRef,\n} from '@angular/core';\nimport type { InputSignal, Signal, WritableSignal } from '@angular/core';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { ComTabLink } from './tab-link.directive';\nimport { tabHeaderVariants, tabScrollButtonVariants } from './tabs.variants';\nimport type { TabVariant, TabSize, TabColor, TabAlignment } from './tabs.variants';\nimport { mergeClasses, generateTabId } from './tabs.utils';\n\n/** Internal item interface for focus management. */\ninterface NavTabItem {\n  focus: () => void;\n  disabled: boolean;\n}\n\n/**\n * Tab navigation bar component for route-driven tabs.\n *\n * Renders a styled, scrollable row of links that map to routes.\n * Content is handled by `<router-outlet>`.\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-muted`, `--color-muted-foreground`,\n *         `--color-border`, `--color-ring`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <nav com-tab-nav-bar>\n *   <a comTabLink routerLink=\"overview\" routerLinkActive>Overview</a>\n *   <a comTabLink routerLink=\"settings\" routerLinkActive>Settings</a>\n * </nav>\n * <router-outlet />\n * ```\n *\n * @example With variants\n * ```html\n * <nav com-tab-nav-bar variant=\"pill\" color=\"accent\" size=\"sm\">\n *   <a comTabLink routerLink=\"grid\" routerLinkActive>Grid</a>\n *   <a comTabLink routerLink=\"list\" routerLinkActive>List</a>\n * </nav>\n * ```\n */\n@Component({\n  selector: 'com-tab-nav-bar, nav[com-tab-nav-bar]',\n  template: `\n    <!-- Scroll button left -->\n    @if (showScrollLeft()) {\n      <button\n        type=\"button\"\n        [class]=\"scrollLeftClasses()\"\n        (click)=\"scrollLeft()\"\n        aria-hidden=\"true\"\n        tabindex=\"-1\"\n      >\n        <svg\n          class=\"h-4 w-4\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <polyline points=\"15 18 9 12 15 6\" />\n        </svg>\n      </button>\n    }\n\n    <!-- Tab link container -->\n    <div\n      #scrollContainer\n      class=\"flex overflow-x-auto scrollbar-none\"\n      [class]=\"headerClasses()\"\n      role=\"tablist\"\n      tabindex=\"-1\"\n      [attr.aria-orientation]=\"'horizontal'\"\n      (scroll)=\"onScroll()\"\n      (keydown)=\"onKeydown($event)\"\n    >\n      <ng-content />\n\n      <!-- Active indicator (underline variant only) -->\n      @if (variant() === 'underline' && activeLink()) {\n        <div\n          class=\"absolute bottom-0 h-0.5 bg-current transition-all duration-slow ease-out\"\n          [class]=\"indicatorColorClass()\"\n          [style.left.px]=\"indicatorLeft()\"\n          [style.width.px]=\"indicatorWidth()\"\n        ></div>\n      }\n    </div>\n\n    <!-- Scroll button right -->\n    @if (showScrollRight()) {\n      <button\n        type=\"button\"\n        [class]=\"scrollRightClasses()\"\n        (click)=\"scrollRight()\"\n        aria-hidden=\"true\"\n        tabindex=\"-1\"\n      >\n        <svg\n          class=\"h-4 w-4\"\n          viewBox=\"0 0 24 24\"\n          fill=\"none\"\n          stroke=\"currentColor\"\n          stroke-width=\"2\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        >\n          <polyline points=\"9 18 15 12 9 6\" />\n        </svg>\n      </button>\n    }\n  `,\n  styles: `\n    :host {\n      display: block;\n      position: relative;\n    }\n    .scrollbar-none {\n      scrollbar-width: none;\n      -ms-overflow-style: none;\n    }\n    .scrollbar-none::-webkit-scrollbar {\n      display: none;\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'com-tab-nav-bar',\n  },\n})\nexport class ComTabNavBar {\n  private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n  /** Unique ID for this nav bar instance. */\n  readonly baseId: string = generateTabId();\n\n  // ─── Inputs ───\n\n  /** Visual treatment of tab links. */\n  readonly variant: InputSignal<TabVariant> = input<TabVariant>('underline');\n\n  /** Controls tab link padding and font size. */\n  readonly size: InputSignal<TabSize> = input<TabSize>('md');\n\n  /** Active tab color. */\n  readonly color: InputSignal<TabColor> = input<TabColor>('primary');\n\n  /** Tab alignment within the bar. */\n  readonly alignment: InputSignal<TabAlignment> = input<TabAlignment>('start');\n\n  // ─── Content Children ───\n\n  /** All ComTabLink children. */\n  readonly tabLinks: Signal<readonly ComTabLink[]> = contentChildren<ComTabLink>(ComTabLink);\n\n  // ─── View Children ───\n\n  readonly scrollContainer: Signal<ElementRef<HTMLElement> | undefined> =\n    viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n  // ─── State ───\n\n  private readonly scrollLeftValue: WritableSignal<number> = signal(0);\n  private readonly containerWidth: WritableSignal<number> = signal(0);\n  private readonly scrollWidth: WritableSignal<number> = signal(0);\n  protected readonly indicatorLeft: WritableSignal<number> = signal(0);\n  protected readonly indicatorWidth: WritableSignal<number> = signal(0);\n\n  private keyManager: FocusKeyManager<NavTabItem> | null = null;\n  private resizeObserver: ResizeObserver | null = null;\n\n  // ─── Computed ───\n\n  /** The currently active link. */\n  readonly activeLink: Signal<ComTabLink | undefined> = computed(() =>\n    this.tabLinks().find(link => link.isActive())\n  );\n\n  readonly hasOverflow: Signal<boolean> = computed(\n    () => this.scrollWidth() > this.containerWidth()\n  );\n\n  readonly showScrollLeft: Signal<boolean> = computed(\n    () => this.hasOverflow() && this.scrollLeftValue() > 0\n  );\n\n  readonly showScrollRight: Signal<boolean> = computed(() => {\n    const remaining = this.scrollWidth() - this.containerWidth() - this.scrollLeftValue();\n    return this.hasOverflow() && remaining > 1;\n  });\n\n  readonly headerClasses: Signal<string> = computed(() =>\n    mergeClasses(\n      tabHeaderVariants({\n        alignment: this.alignment(),\n        variant: this.variant(),\n      }),\n      'relative'\n    )\n  );\n\n  readonly scrollLeftClasses: Signal<string> = computed(() =>\n    tabScrollButtonVariants({\n      direction: 'left',\n      variant: this.variant(),\n    })\n  );\n\n  readonly scrollRightClasses: Signal<string> = computed(() =>\n    tabScrollButtonVariants({\n      direction: 'right',\n      variant: this.variant(),\n    })\n  );\n\n  readonly indicatorColorClass: Signal<string> = computed(() => {\n    const colorMap: Record<TabColor, string> = {\n      primary: 'text-primary',\n      accent: 'text-accent',\n      muted: 'text-foreground',\n    };\n    return colorMap[this.color()];\n  });\n\n  constructor() {\n    // Setup resize observer after render\n    afterNextRender(() => {\n      this.setupResizeObserver();\n      this.updateScrollState();\n      this.setupKeyManager();\n    });\n\n    // Cleanup on destroy\n    this.destroyRef.onDestroy(() => {\n      this.resizeObserver?.disconnect();\n      this.keyManager?.destroy();\n    });\n  }\n\n  // ─── Public Methods ───\n\n  scrollLeft(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (container) {\n      const scrollAmount = container.clientWidth * 0.75;\n      container.scrollTo({\n        left: container.scrollLeft - scrollAmount,\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  scrollRight(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (container) {\n      const scrollAmount = container.clientWidth * 0.75;\n      container.scrollTo({\n        left: container.scrollLeft + scrollAmount,\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  // ─── Event Handlers ───\n\n  protected onScroll(): void {\n    this.updateScrollState();\n  }\n\n  protected onKeydown(event: KeyboardEvent): void {\n    if (!this.keyManager) return;\n\n    switch (event.key) {\n      case 'ArrowLeft':\n        this.keyManager.setPreviousItemActive();\n        event.preventDefault();\n        break;\n      case 'ArrowRight':\n        this.keyManager.setNextItemActive();\n        event.preventDefault();\n        break;\n      case 'Home':\n        this.keyManager.setFirstItemActive();\n        event.preventDefault();\n        break;\n      case 'End':\n        this.keyManager.setLastItemActive();\n        event.preventDefault();\n        break;\n    }\n  }\n\n  // ─── Private Methods ───\n\n  private setupResizeObserver(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (!container) return;\n\n    this.resizeObserver = new ResizeObserver(() => {\n      this.updateScrollState();\n    });\n    this.resizeObserver.observe(container);\n  }\n\n  private updateScrollState(): void {\n    const container = this.scrollContainer()?.nativeElement;\n    if (!container) return;\n\n    this.scrollLeftValue.set(container.scrollLeft);\n    this.containerWidth.set(container.clientWidth);\n    this.scrollWidth.set(container.scrollWidth);\n  }\n\n  private setupKeyManager(): void {\n    const items = this.createKeyManagerItems();\n    this.keyManager = new FocusKeyManager(items)\n      .withHorizontalOrientation('ltr')\n      .withWrap()\n      .skipPredicate(item => item.disabled);\n  }\n\n  private createKeyManagerItems(): NavTabItem[] {\n    return this.tabLinks().map(link => ({\n      focus: () => link.focus(),\n      disabled: link.disabled(),\n    }));\n  }\n}\n","// Public API for the tabs component\n\n// Types\nexport type { TabChangeEvent } from './tab-group.component';\n\n// Variants (for advanced customization)\nexport {\n  tabItemVariants,\n  tabHeaderVariants,\n  tabScrollButtonVariants,\n  tabCloseButtonVariants,\n  tabPanelVariants,\n} from './tabs.variants';\nexport type {\n  TabVariant,\n  TabSize,\n  TabColor,\n  TabAlignment,\n  TabItemVariants,\n  TabHeaderVariants,\n  TabScrollButtonVariants,\n  TabCloseButtonVariants,\n  TabPanelVariants,\n} from './tabs.variants';\n\n// Template directives\nexport { ComTabLabel } from './tab-label.directive';\nexport { ComTabContent } from './tab-content.directive';\n\n// Main components\nexport { ComTabGroup } from './tab-group.component';\nexport { ComTab } from './tab.component';\nexport { ComTabNavBar } from './tab-nav-bar.component';\nexport { ComTabLink } from './tab-link.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}