ngx-com 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-com-components-calendar.mjs +5 -5
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-dropdown.mjs +13 -11
- package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-com-components-form-field.mjs +13 -0
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
- package/fesm2022/ngx-com-components-item.mjs +3 -3
- package/fesm2022/ngx-com-components-item.mjs.map +1 -1
- package/fesm2022/ngx-com-components-sort.mjs +4 -4
- package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tabs.mjs +5 -2
- package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngx-com-components-calendar.d.ts +1 -1
- package/types/ngx-com-components-dropdown.d.ts +4 -2
- package/types/ngx-com-components-form-field.d.ts +5 -2
- package/types/ngx-com-components-item.d.ts +1 -1
- package/types/ngx-com-components-tabs.d.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-sort.mjs","sources":["../../../projects/com/components/sort/sort.variants.ts","../../../projects/com/components/sort/sort.directive.ts","../../../projects/com/components/sort/sort-icon.component.ts","../../../projects/com/components/sort/sort-header.component.ts","../../../projects/com/components/sort/index.ts","../../../projects/com/components/sort/ngx-com-components-sort.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n// ─── Type Exports ───\n\n/** Sort direction — three states */\nexport type SortDirection = 'asc' | 'desc' | undefined;\n\n/** Configures the three-state sort cycle */\nexport type SortCycle = SortDirection[];\n\n/** Emitted when sort state changes */\nexport interface SortEvent {\n /** The active column id, or undefined if unsorted */\n active: string | undefined;\n /** The sort direction */\n direction: SortDirection;\n}\n\n// ─── Sort Header Variants ───\n\n/**\n * @tokens `--color-foreground`, `--color-muted-foreground`\n */\nexport const sortHeaderVariants: (props?: {\n sortable?: boolean;\n active?: boolean;\n disabled?: boolean;\n}) => string = cva(\n ['inline-flex items-center gap-1.5', 'select-none', 'transition-colors duration-150'],\n {\n variants: {\n sortable: {\n true: 'cursor-pointer hover:text-foreground',\n false: 'cursor-default',\n },\n active: {\n true: 'text-foreground',\n false: 'text-muted-foreground',\n },\n disabled: {\n true: 'text-disabled-foreground cursor-not-allowed pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n sortable: true,\n active: false,\n disabled: false,\n },\n }\n);\n\n// ─── Sort Icon Variants ───\n\n/**\n * @tokens `--color-foreground`, `--color-muted-foreground`\n */\nexport const sortIconVariants: (props?: {\n size?: 'sm' | 'md' | 'lg';\n state?: 'asc' | 'desc' | 'unsorted' | 'hidden';\n}) => string = cva(\n ['inline-flex items-center justify-center', 'shrink-0', 'transition-all duration-200 ease-out'],\n {\n variants: {\n size: {\n sm: 'size-3',\n md: 'size-3.5',\n lg: 'size-4',\n },\n state: {\n asc: 'opacity-100 rotate-0',\n desc: 'opacity-100 rotate-180',\n unsorted: 'opacity-40 rotate-0',\n hidden: 'opacity-0 scale-75',\n },\n },\n defaultVariants: {\n size: 'md',\n state: 'hidden',\n },\n }\n);\n","import { booleanAttribute, Directive, input, model, output } from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n} from '@angular/core';\nimport type { SortDirection, SortCycle, SortEvent } from './sort.variants';\nimport type { SortHeaderComponent } from './sort-header.component';\n\nconst DEFAULT_SORT_CYCLE: SortCycle = ['asc', 'desc', undefined];\n\n/**\n * Parent directive that manages sort state for a group of sortable headers.\n *\n * Apply to a container element (e.g., `<tr>`, `<div>`) that contains `[uiSortHeader]` children.\n * Children inject this directive via DI and read its signals directly.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`\n *\n * @example Basic usage\n * ```html\n * <tr comSort (sortChange)=\"onSort($event)\">\n * <th comSortHeader=\"name\">Name</th>\n * <th comSortHeader=\"age\">Age</th>\n * </tr>\n * ```\n *\n * @example Two-way binding\n * ```html\n * <tr comSort [(sortActive)]=\"column\" [(sortDirection)]=\"direction\">\n * <th comSortHeader=\"name\">Name</th>\n * </tr>\n * ```\n */\n@Directive({\n selector: '[comSort]',\n exportAs: 'comSort',\n host: {\n class: 'contents',\n },\n})\nexport class SortDirective {\n // ─── Inputs ───\n\n /** Currently active sort column id — two-way via model() */\n readonly sortActive: ModelSignal<string | undefined> = model<string | undefined>(undefined);\n\n /** Current sort direction — two-way via model() */\n readonly sortDirection: ModelSignal<SortDirection> = model<SortDirection>(undefined);\n\n /** Disables all sorting in this container */\n readonly sortDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Customize the click cycle (e.g., ['asc', 'desc'] to skip unsorted) */\n readonly sortCycle: InputSignal<SortCycle> = input<SortCycle>(DEFAULT_SORT_CYCLE);\n\n /** Show a muted arrow on unsorted headers */\n readonly sortShowIndicator: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n // ─── Outputs ───\n\n /** Emitted when active column or direction changes */\n readonly sortChange: OutputEmitterRef<SortEvent> = output<SortEvent>();\n\n // ─── Registration ───\n\n private readonly headers: Map<string, SortHeaderComponent> = new Map<string, SortHeaderComponent>();\n\n /** Register a sort header with this parent */\n register(header: SortHeaderComponent): void {\n this.headers.set(header.id(), header);\n }\n\n /** Deregister a sort header */\n deregister(id: string): void {\n this.headers.delete(id);\n }\n\n // ─── Public API ───\n\n /** Programmatically sort by a column */\n sort(id: string): void {\n if (this.sortDisabled()) return;\n\n const cycle = this.sortCycle();\n\n if (this.sortActive() !== id) {\n // New column — start at first direction in cycle\n this.sortActive.set(id);\n this.sortDirection.set(cycle[0]);\n } else {\n // Same column — advance cycle\n const currentIndex = cycle.indexOf(this.sortDirection());\n const nextIndex = (currentIndex + 1) % cycle.length;\n const nextDir = cycle[nextIndex];\n this.sortDirection.set(nextDir);\n\n // If direction is undefined, clear active\n if (nextDir === undefined) {\n this.sortActive.set(undefined);\n }\n }\n\n this.sortChange.emit({\n active: this.sortActive(),\n direction: this.sortDirection(),\n });\n }\n\n /** Returns the next direction in the cycle for a given column */\n getNextDirection(id: string): SortDirection {\n const cycle = this.sortCycle();\n\n if (this.sortActive() !== id) {\n return cycle[0];\n }\n\n const currentIndex = cycle.indexOf(this.sortDirection());\n const nextIndex = (currentIndex + 1) % cycle.length;\n return cycle[nextIndex];\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { sortIconVariants } from './sort.variants';\nimport type { SortDirection } from './sort.variants';\n\n/**\n * Internal animated SVG arrow indicator for sort headers.\n * Not exported — used only inside SortHeaderComponent.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`\n */\n@Component({\n selector: 'com-sort-icon',\n template: `\n <span [class]=\"iconClasses()\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"size-full\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 19V5\" />\n <path d=\"M5 12l7-7 7 7\" />\n </svg>\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SortIconComponent {\n /** Current sort direction */\n readonly direction: InputSignal<SortDirection> = input<SortDirection>(undefined);\n\n /** Whether the column is actively sorted */\n readonly isSorted: InputSignal<boolean> = input(false);\n\n /** Show a muted indicator when not sorted */\n readonly showWhenUnsorted: InputSignal<boolean> = input(false);\n\n /** Compute the icon state for CVA */\n private readonly iconState: Signal<'asc' | 'desc' | 'unsorted' | 'hidden'> = computed(() => {\n if (this.isSorted()) {\n return this.direction() === 'asc' ? 'asc' : 'desc';\n }\n if (this.showWhenUnsorted()) {\n return 'unsorted';\n }\n return 'hidden';\n });\n\n /** CVA-generated classes for the icon container */\n readonly iconClasses: Signal<string> = computed(() =>\n sortIconVariants({\n size: 'md',\n state: this.iconState(),\n })\n );\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n Signal,\n} from '@angular/core';\nimport { SortDirective } from './sort.directive';\nimport { SortIconComponent } from './sort-icon.component';\nimport { sortHeaderVariants } from './sort.variants';\nimport type { SortDirection } from './sort.variants';\n\n/**\n * Sortable header component — child of [uiSort] directive.\n *\n * Apply to table headers, div columns, or any clickable element that should trigger sorting.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <tr comSort (sortChange)=\"onSort($event)\">\n * <th comSortHeader=\"name\">Name</th>\n * <th comSortHeader=\"age\">Age</th>\n * </tr>\n * ```\n *\n * @example Arrow placement\n * ```html\n * <th comSortHeader=\"name\" comSortHeaderArrowPosition=\"before\">Name</th>\n * ```\n */\n@Component({\n selector: '[comSortHeader]',\n template: `\n @if (sortHeaderArrowPosition() === 'before') {\n <com-sort-icon\n [direction]=\"direction()\"\n [isSorted]=\"isSorted()\"\n [showWhenUnsorted]=\"showUnsortedIndicator()\"\n />\n }\n\n <ng-content />\n\n @if (sortHeaderArrowPosition() === 'after') {\n <com-sort-icon\n [direction]=\"direction()\"\n [isSorted]=\"isSorted()\"\n [showWhenUnsorted]=\"showUnsortedIndicator()\"\n />\n }\n `,\n imports: [SortIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.aria-sort]': 'ariaSort()',\n '[attr.role]': '\"columnheader\"',\n '[attr.tabindex]': 'isDisabled() ? -1 : 0',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onClick()',\n '(keydown.space)': '$event.preventDefault(); onClick()',\n },\n})\nexport class SortHeaderComponent implements OnInit {\n private readonly sort: SortDirective | null = inject(SortDirective, { optional: true });\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n // ─── Inputs ───\n\n /** The column id — aliased from the selector */\n readonly id: InputSignal<string> = input.required<string>({ alias: 'comSortHeader' });\n\n /** Disable sorting for this specific header */\n readonly sortHeaderDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Override parent's sortShowIndicator for this header */\n readonly sortHeaderShowIndicator: InputSignal<boolean | undefined> = input<boolean | undefined>(\n undefined\n );\n\n /** Arrow placement relative to content */\n readonly sortHeaderArrowPosition: InputSignal<'before' | 'after'> = input<'before' | 'after'>(\n 'after',\n { alias: 'comSortHeaderArrowPosition' }\n );\n\n // ─── Computed State (from parent signals) ───\n\n /** Whether this header is the currently active sort column */\n readonly isActive: Signal<boolean> = computed(() => this.sort?.sortActive() === this.id());\n\n /** Current direction if active, undefined otherwise */\n readonly direction: Signal<SortDirection> = computed(() =>\n this.isActive() ? this.sort?.sortDirection() : undefined\n );\n\n /** Whether this header is sorted (active + has direction) */\n readonly isSorted: Signal<boolean> = computed(\n () => this.isActive() && this.sort?.sortDirection() !== undefined\n );\n\n /** Whether to show the muted indicator when unsorted */\n readonly showUnsortedIndicator: Signal<boolean> = computed(\n () => this.sortHeaderShowIndicator() ?? this.sort?.sortShowIndicator() ?? false\n );\n\n /** Whether sorting is disabled for this header */\n readonly isDisabled: Signal<boolean> = computed(\n () => this.sortHeaderDisabled() || this.sort?.sortDisabled() || false\n );\n\n /** aria-sort attribute value */\n readonly ariaSort: Signal<'ascending' | 'descending' | 'none'> = computed(() => {\n if (!this.isSorted()) return 'none';\n return this.direction() === 'asc' ? 'ascending' : 'descending';\n });\n\n /** CVA-generated host classes */\n readonly hostClasses: Signal<string> = computed(() =>\n sortHeaderVariants({\n sortable: !this.isDisabled(),\n active: this.isSorted(),\n disabled: this.isDisabled(),\n })\n );\n\n constructor() {\n if (!this.sort) {\n throw new Error('comSortHeader must be placed inside a [comSort] container.');\n }\n\n this.destroyRef.onDestroy(() => {\n this.sort?.deregister(this.id());\n });\n }\n\n ngOnInit(): void {\n this.sort!.register(this);\n }\n\n // ─── Event Handlers ───\n\n protected onClick(): void {\n if (this.isDisabled()) return;\n this.sort!.sort(this.id());\n }\n}\n","// Public API for the sort component\n\n// Types & Variants\nexport {\n sortHeaderVariants,\n sortIconVariants,\n type SortDirection,\n type SortCycle,\n type SortEvent,\n} from './sort.variants';\n\n// Directives & Components\nexport { SortDirective } from './sort.directive';\nexport { SortHeaderComponent } from './sort-header.component';\n\n// NOT exported: SortIconComponent (internal)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-com-components-sort.mjs","sources":["../../../projects/com/components/sort/sort.variants.ts","../../../projects/com/components/sort/sort.directive.ts","../../../projects/com/components/sort/sort-icon.component.ts","../../../projects/com/components/sort/sort-header.component.ts","../../../projects/com/components/sort/index.ts","../../../projects/com/components/sort/ngx-com-components-sort.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n// ─── Type Exports ───\n\n/** Sort direction — three states */\nexport type SortDirection = 'asc' | 'desc' | undefined;\n\n/** Configures the three-state sort cycle */\nexport type SortCycle = SortDirection[];\n\n/** Emitted when sort state changes */\nexport interface SortEvent {\n /** The active column id, or undefined if unsorted */\n active: string | undefined;\n /** The sort direction */\n direction: SortDirection;\n}\n\n// ─── Sort Header Variants ───\n\n/**\n * @tokens `--color-foreground`, `--color-muted-foreground`\n */\nexport const sortHeaderVariants: (props?: {\n sortable?: boolean;\n active?: boolean;\n disabled?: boolean;\n}) => string = cva(\n ['inline-flex items-center gap-1.5', 'select-none', 'transition-colors duration-150'],\n {\n variants: {\n sortable: {\n true: 'cursor-pointer hover:text-foreground',\n false: 'cursor-default',\n },\n active: {\n true: 'text-foreground',\n false: 'text-muted-foreground',\n },\n disabled: {\n true: 'text-disabled-foreground cursor-not-allowed pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n sortable: true,\n active: false,\n disabled: false,\n },\n }\n);\n\n// ─── Sort Icon Variants ───\n\n/**\n * @tokens `--color-foreground`, `--color-muted-foreground`\n */\nexport const sortIconVariants: (props?: {\n size?: 'sm' | 'md' | 'lg';\n state?: 'asc' | 'desc' | 'unsorted' | 'hidden';\n}) => string = cva(\n ['inline-flex items-center justify-center', 'shrink-0', 'transition-all duration-200 ease-out'],\n {\n variants: {\n size: {\n sm: 'size-3',\n md: 'size-3.5',\n lg: 'size-4',\n },\n state: {\n asc: 'text-foreground rotate-0',\n desc: 'text-foreground rotate-180',\n unsorted: 'text-muted-foreground rotate-0',\n hidden: 'invisible scale-75',\n },\n },\n defaultVariants: {\n size: 'md',\n state: 'hidden',\n },\n }\n);\n","import { booleanAttribute, Directive, input, model, output } from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n} from '@angular/core';\nimport type { SortDirection, SortCycle, SortEvent } from './sort.variants';\nimport type { SortHeaderComponent } from './sort-header.component';\n\nconst DEFAULT_SORT_CYCLE: SortCycle = ['asc', 'desc', undefined];\n\n/**\n * Parent directive that manages sort state for a group of sortable headers.\n *\n * Apply to a container element (e.g., `<tr>`, `<div>`) that contains `[uiSortHeader]` children.\n * Children inject this directive via DI and read its signals directly.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`\n *\n * @example Basic usage\n * ```html\n * <tr comSort (sortChange)=\"onSort($event)\">\n * <th comSortHeader=\"name\">Name</th>\n * <th comSortHeader=\"age\">Age</th>\n * </tr>\n * ```\n *\n * @example Two-way binding\n * ```html\n * <tr comSort [(sortActive)]=\"column\" [(sortDirection)]=\"direction\">\n * <th comSortHeader=\"name\">Name</th>\n * </tr>\n * ```\n */\n@Directive({\n selector: '[comSort]',\n exportAs: 'comSort',\n host: {\n class: 'contents',\n },\n})\nexport class SortDirective {\n // ─── Inputs ───\n\n /** Currently active sort column id — two-way via model() */\n readonly sortActive: ModelSignal<string | undefined> = model<string | undefined>(undefined);\n\n /** Current sort direction — two-way via model() */\n readonly sortDirection: ModelSignal<SortDirection> = model<SortDirection>(undefined);\n\n /** Disables all sorting in this container */\n readonly sortDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Customize the click cycle (e.g., ['asc', 'desc'] to skip unsorted) */\n readonly sortCycle: InputSignal<SortCycle> = input<SortCycle>(DEFAULT_SORT_CYCLE);\n\n /** Show a muted arrow on unsorted headers */\n readonly sortShowIndicator: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n // ─── Outputs ───\n\n /** Emitted when active column or direction changes */\n readonly sortChange: OutputEmitterRef<SortEvent> = output<SortEvent>();\n\n // ─── Registration ───\n\n private readonly headers: Map<string, SortHeaderComponent> = new Map<string, SortHeaderComponent>();\n\n /** Register a sort header with this parent */\n register(header: SortHeaderComponent): void {\n this.headers.set(header.id(), header);\n }\n\n /** Deregister a sort header */\n deregister(id: string): void {\n this.headers.delete(id);\n }\n\n // ─── Public API ───\n\n /** Programmatically sort by a column */\n sort(id: string): void {\n if (this.sortDisabled()) return;\n\n const cycle = this.sortCycle();\n\n if (this.sortActive() !== id) {\n // New column — start at first direction in cycle\n this.sortActive.set(id);\n this.sortDirection.set(cycle[0]);\n } else {\n // Same column — advance cycle\n const currentIndex = cycle.indexOf(this.sortDirection());\n const nextIndex = (currentIndex + 1) % cycle.length;\n const nextDir = cycle[nextIndex];\n this.sortDirection.set(nextDir);\n\n // If direction is undefined, clear active\n if (nextDir === undefined) {\n this.sortActive.set(undefined);\n }\n }\n\n this.sortChange.emit({\n active: this.sortActive(),\n direction: this.sortDirection(),\n });\n }\n\n /** Returns the next direction in the cycle for a given column */\n getNextDirection(id: string): SortDirection {\n const cycle = this.sortCycle();\n\n if (this.sortActive() !== id) {\n return cycle[0];\n }\n\n const currentIndex = cycle.indexOf(this.sortDirection());\n const nextIndex = (currentIndex + 1) % cycle.length;\n return cycle[nextIndex];\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { sortIconVariants } from './sort.variants';\nimport type { SortDirection } from './sort.variants';\n\n/**\n * Internal animated SVG arrow indicator for sort headers.\n * Not exported — used only inside SortHeaderComponent.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`\n */\n@Component({\n selector: 'com-sort-icon',\n template: `\n <span [class]=\"iconClasses()\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"size-full\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 19V5\" />\n <path d=\"M5 12l7-7 7 7\" />\n </svg>\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SortIconComponent {\n /** Current sort direction */\n readonly direction: InputSignal<SortDirection> = input<SortDirection>(undefined);\n\n /** Whether the column is actively sorted */\n readonly isSorted: InputSignal<boolean> = input(false);\n\n /** Show a muted indicator when not sorted */\n readonly showWhenUnsorted: InputSignal<boolean> = input(false);\n\n /** Compute the icon state for CVA */\n private readonly iconState: Signal<'asc' | 'desc' | 'unsorted' | 'hidden'> = computed(() => {\n if (this.isSorted()) {\n return this.direction() === 'asc' ? 'asc' : 'desc';\n }\n if (this.showWhenUnsorted()) {\n return 'unsorted';\n }\n return 'hidden';\n });\n\n /** CVA-generated classes for the icon container */\n readonly iconClasses: Signal<string> = computed(() =>\n sortIconVariants({\n size: 'md',\n state: this.iconState(),\n })\n );\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n OnInit,\n Signal,\n} from '@angular/core';\nimport { SortDirective } from './sort.directive';\nimport { SortIconComponent } from './sort-icon.component';\nimport { sortHeaderVariants } from './sort.variants';\nimport type { SortDirection } from './sort.variants';\n\n/**\n * Sortable header component — child of [uiSort] directive.\n *\n * Apply to table headers, div columns, or any clickable element that should trigger sorting.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <tr comSort (sortChange)=\"onSort($event)\">\n * <th comSortHeader=\"name\">Name</th>\n * <th comSortHeader=\"age\">Age</th>\n * </tr>\n * ```\n *\n * @example Arrow placement\n * ```html\n * <th comSortHeader=\"name\" comSortHeaderArrowPosition=\"before\">Name</th>\n * ```\n */\n@Component({\n selector: '[comSortHeader]',\n template: `\n @if (sortHeaderArrowPosition() === 'before') {\n <com-sort-icon\n [direction]=\"direction()\"\n [isSorted]=\"isSorted()\"\n [showWhenUnsorted]=\"showUnsortedIndicator()\"\n />\n }\n\n <ng-content />\n\n @if (sortHeaderArrowPosition() === 'after') {\n <com-sort-icon\n [direction]=\"direction()\"\n [isSorted]=\"isSorted()\"\n [showWhenUnsorted]=\"showUnsortedIndicator()\"\n />\n }\n `,\n imports: [SortIconComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.aria-sort]': 'ariaSort()',\n '[attr.role]': '\"columnheader\"',\n '[attr.tabindex]': 'isDisabled() ? -1 : 0',\n '[attr.aria-disabled]': 'isDisabled() || null',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onClick()',\n '(keydown.space)': '$event.preventDefault(); onClick()',\n },\n})\nexport class SortHeaderComponent implements OnInit {\n private readonly sort: SortDirective | null = inject(SortDirective, { optional: true });\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n // ─── Inputs ───\n\n /** The column id — aliased from the selector */\n readonly id: InputSignal<string> = input.required<string>({ alias: 'comSortHeader' });\n\n /** Disable sorting for this specific header */\n readonly sortHeaderDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Override parent's sortShowIndicator for this header */\n readonly sortHeaderShowIndicator: InputSignal<boolean | undefined> = input<boolean | undefined>(\n undefined\n );\n\n /** Arrow placement relative to content */\n readonly sortHeaderArrowPosition: InputSignal<'before' | 'after'> = input<'before' | 'after'>(\n 'after',\n { alias: 'comSortHeaderArrowPosition' }\n );\n\n // ─── Computed State (from parent signals) ───\n\n /** Whether this header is the currently active sort column */\n readonly isActive: Signal<boolean> = computed(() => this.sort?.sortActive() === this.id());\n\n /** Current direction if active, undefined otherwise */\n readonly direction: Signal<SortDirection> = computed(() =>\n this.isActive() ? this.sort?.sortDirection() : undefined\n );\n\n /** Whether this header is sorted (active + has direction) */\n readonly isSorted: Signal<boolean> = computed(\n () => this.isActive() && this.sort?.sortDirection() !== undefined\n );\n\n /** Whether to show the muted indicator when unsorted */\n readonly showUnsortedIndicator: Signal<boolean> = computed(\n () => this.sortHeaderShowIndicator() ?? this.sort?.sortShowIndicator() ?? false\n );\n\n /** Whether sorting is disabled for this header */\n readonly isDisabled: Signal<boolean> = computed(\n () => this.sortHeaderDisabled() || this.sort?.sortDisabled() || false\n );\n\n /** aria-sort attribute value */\n readonly ariaSort: Signal<'ascending' | 'descending' | 'none'> = computed(() => {\n if (!this.isSorted()) return 'none';\n return this.direction() === 'asc' ? 'ascending' : 'descending';\n });\n\n /** CVA-generated host classes */\n readonly hostClasses: Signal<string> = computed(() =>\n sortHeaderVariants({\n sortable: !this.isDisabled(),\n active: this.isSorted(),\n disabled: this.isDisabled(),\n })\n );\n\n constructor() {\n if (!this.sort) {\n throw new Error('comSortHeader must be placed inside a [comSort] container.');\n }\n\n this.destroyRef.onDestroy(() => {\n this.sort?.deregister(this.id());\n });\n }\n\n ngOnInit(): void {\n this.sort!.register(this);\n }\n\n // ─── Event Handlers ───\n\n protected onClick(): void {\n if (this.isDisabled()) return;\n this.sort!.sort(this.id());\n }\n}\n","// Public API for the sort component\n\n// Types & Variants\nexport {\n sortHeaderVariants,\n sortIconVariants,\n type SortDirection,\n type SortCycle,\n type SortEvent,\n} from './sort.variants';\n\n// Directives & Components\nexport { SortDirective } from './sort.directive';\nexport { SortHeaderComponent } from './sort-header.component';\n\n// NOT exported: SortIconComponent (internal)\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -192,10 +192,13 @@ const tabScrollButtonVariants = cva([
|
|
|
192
192
|
},
|
|
193
193
|
});
|
|
194
194
|
// ─── Close Button on Closable Tabs ───
|
|
195
|
+
/**
|
|
196
|
+
* @tokens `--color-muted-foreground`, `--color-foreground`, `--color-ring`, `--radius-interactive-sm`
|
|
197
|
+
*/
|
|
195
198
|
const tabCloseButtonVariants = cva([
|
|
196
199
|
'inline-flex items-center justify-center rounded-interactive-sm',
|
|
197
|
-
'text-
|
|
198
|
-
'transition-
|
|
200
|
+
'text-muted-foreground hover:text-foreground',
|
|
201
|
+
'transition-colors duration-100',
|
|
199
202
|
'focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-ring',
|
|
200
203
|
], {
|
|
201
204
|
variants: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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-150',\n 'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:pointer-events-none',\n 'focus-visible:outline-2 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-150',\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\nexport const tabCloseButtonVariants: (props?: {\n size?: TabSize;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center rounded-interactive-sm',\n 'text-current opacity-60 hover:opacity-100',\n 'transition-opacity duration-100',\n 'focus-visible:outline-2 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',\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 `<ui-tab>`.\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 TabLabelDirective {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: TabLabelDirective,\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 * @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 * @defer {\n * <app-report-builder />\n * } @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 TabContentDirective {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: TabContentDirective,\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 { TabLabelDirective } from './tab-label.directive';\nimport { TabContentDirective } 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 `TabGroupComponent`.\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 TabComponent {\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<TabLabelDirective | undefined> = contentChild(TabLabelDirective);\n\n /** Lazy content template (queried from content). */\n readonly lazyContent: Signal<TabContentDirective | undefined> = contentChild(TabContentDirective);\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 TabGroupComponent) ───\n\n /** Whether this tab is currently active. Set by TabGroupComponent. */\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 { TabComponent } 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 * @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 [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 >\n @if (tab.labelTemplate()) {\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate()!\" />\n } @else {\n {{ tab.label() }}\n }\n\n @if (tab.closable()) {\n <span\n role=\"button\"\n [class]=\"closeButtonClasses()\"\n (click)=\"closeTab($event, i)\"\n [attr.aria-label]=\"'Close ' + tab.label()\"\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-200 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 TabHeaderComponent {\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n // ─── Inputs ───\n\n readonly tabs: InputSignal<readonly TabComponent[]> = input.required<readonly TabComponent[]>();\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 // ─── 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 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 { TabComponent } from './tab.component';\nimport { TabHeaderComponent } 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: TabComponent;\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: [TabHeaderComponent, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-tab-group',\n },\n})\nexport class TabGroupComponent {\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 TabComponent children. */\n readonly tabs: Signal<readonly TabComponent[]> = contentChildren(TabComponent);\n\n // ─── Computed ───\n\n /** The currently active tab. */\n readonly activeTab: Signal<TabComponent | 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: TabComponent, 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 * @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 TabLinkDirective {\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 { TabLinkDirective } 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 [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-200 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 TabNavBarComponent {\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 TabLinkDirective children. */\n readonly tabLinks: Signal<readonly TabLinkDirective[]> = contentChildren(TabLinkDirective);\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<TabLinkDirective | 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 { TabLabelDirective } from './tab-label.directive';\nexport { TabContentDirective } from './tab-content.directive';\n\n// Main components\nexport { TabGroupComponent } from './tab-group.component';\nexport { TabComponent } from './tab.component';\nexport { TabNavBarComponent } from './tab-nav-bar.component';\nexport { TabLinkDirective } from './tab-link.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"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-150',\n 'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:pointer-events-none',\n 'focus-visible:outline-2 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-150',\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-100',\n 'focus-visible:outline-2 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',\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 `<ui-tab>`.\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 TabLabelDirective {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: TabLabelDirective,\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 * @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 * @defer {\n * <app-report-builder />\n * } @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 TabContentDirective {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: TabContentDirective,\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 { TabLabelDirective } from './tab-label.directive';\nimport { TabContentDirective } 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 `TabGroupComponent`.\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 TabComponent {\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<TabLabelDirective | undefined> = contentChild(TabLabelDirective);\n\n /** Lazy content template (queried from content). */\n readonly lazyContent: Signal<TabContentDirective | undefined> = contentChild(TabContentDirective);\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 TabGroupComponent) ───\n\n /** Whether this tab is currently active. Set by TabGroupComponent. */\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 { TabComponent } 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 * @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 [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 >\n @if (tab.labelTemplate()) {\n <ng-container [ngTemplateOutlet]=\"tab.labelTemplate()!\" />\n } @else {\n {{ tab.label() }}\n }\n\n @if (tab.closable()) {\n <span\n role=\"button\"\n [class]=\"closeButtonClasses()\"\n (click)=\"closeTab($event, i)\"\n [attr.aria-label]=\"'Close ' + tab.label()\"\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-200 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 TabHeaderComponent {\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n // ─── Inputs ───\n\n readonly tabs: InputSignal<readonly TabComponent[]> = input.required<readonly TabComponent[]>();\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 // ─── 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 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 { TabComponent } from './tab.component';\nimport { TabHeaderComponent } 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: TabComponent;\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: [TabHeaderComponent, NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-tab-group',\n },\n})\nexport class TabGroupComponent {\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 TabComponent children. */\n readonly tabs: Signal<readonly TabComponent[]> = contentChildren(TabComponent);\n\n // ─── Computed ───\n\n /** The currently active tab. */\n readonly activeTab: Signal<TabComponent | 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: TabComponent, 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 * @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 TabLinkDirective {\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 { TabLinkDirective } 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 [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-200 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 TabNavBarComponent {\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 TabLinkDirective children. */\n readonly tabLinks: Signal<readonly TabLinkDirective[]> = contentChildren(TabLinkDirective);\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<TabLinkDirective | 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 { TabLabelDirective } from './tab-label.directive';\nexport { TabContentDirective } from './tab-content.directive';\n\n// Main components\nexport { TabGroupComponent } from './tab-group.component';\nexport { TabComponent } from './tab.component';\nexport { TabNavBarComponent } from './tab-nav-bar.component';\nexport { TabLinkDirective } from './tab-link.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AASA;AAEO,MAAM,eAAe,GAKb,GAAG,CAChB;IACE,wDAAwD;IACxD,2CAA2C;IAC3C,gCAAgC;IAChC,iHAAiH;IACjH,mFAAmF;CACpF,EACD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,SAAS,EAAE,2DAA2D;AACtE,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,OAAO,EAAE,uCAAuC;AAChD,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,0BAA0B;AAC9B,YAAA,EAAE,EAAE,yBAAyB;AAC7B,YAAA,EAAE,EAAE,6BAA6B;AAClC,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACF,KAAA;AACD,IAAA,gBAAgB,EAAE;;;AAGhB,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,+BAA+B;AACvC,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,6BAA6B;AACrC,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,qCAAqC;AAC7C,SAAA;;AAED,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,mEAAmE;AAC3E,SAAA;;AAGD,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,oCAAoC;AAC5C,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,kCAAkC;AAC1C,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,0BAA0B;AAClC,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,MAAM;AACf,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,4DAA4D;AACpE,SAAA;;AAGD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,+CAA+C;AACvD,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,4CAA4C;AACpD,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,wCAAwC;AAChD,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,iEAAiE;AACzE,SAAA;;AAGD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,8CAA8C;AACtD,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,4CAA4C;AACpD,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,KAAK,EAAE,oCAAoC;AAC5C,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,KAAK,EAAE,4DAA4D;AACpE,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,WAAW;AACpB,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,MAAM,EAAE,KAAK;AACd,KAAA;AACF,CAAA;AAKH;AAEO,MAAM,iBAAiB,GAGf,GAAG,CAAC,eAAe,EAAE;AAClC,IAAA,QAAQ,EAAE;AACR,QAAA,SAAS,EAAE;AACT,YAAA,KAAK,EAAE,eAAe;AACtB,YAAA,MAAM,EAAE,gBAAgB;AACxB,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,OAAO,EAAE,cAAc;AACxB,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,SAAS,EAAE,wBAAwB;AACnC,YAAA,IAAI,EAAE,qCAAqC;AAC3C,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,KAAK,EAAE,qCAAqC;AAC7C,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,OAAO,EAAE,WAAW;AACrB,KAAA;AACF,CAAA;AAID;AAEO,MAAM,uBAAuB,GAGrB,GAAG,CAChB;IACE,sDAAsD;IACtD,YAAY;IACZ,6CAA6C;IAC7C,iCAAiC;IACjC,4BAA4B;CAC7B,EACD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,SAAS,EAAE;AACT,YAAA,IAAI,EAAE,wDAAwD;AAC9D,YAAA,KAAK,EAAE,yDAAyD;AACjE,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,KAAK,EAAE,YAAY;AACpB,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,OAAO,EAAE,WAAW;AACrB,KAAA;AACF,CAAA;AAKH;AAEA;;AAEG;AACI,MAAM,sBAAsB,GAEpB,GAAG,CAChB;IACE,gEAAgE;IAChE,6CAA6C;IAC7C,gCAAgC;IAChC,mFAAmF;CACpF,EACD;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,EAAE,EAAE,SAAS;AACd,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAChC,CAAA;AAKH;AAEO,MAAM,gBAAgB,GAEd,GAAG,CAAC,4BAA4B,EAAE;AAC/C,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA;AACF,CAAA;;ACxQD;;;;;;;;;;;;;;;;;AAiBG;MAIU,iBAAiB,CAAA;AACnB,IAAA,WAAW,GAAsB,MAAM,CAAC,WAAW,CAAC;AAE7D,IAAA,OAAO,sBAAsB,CAC3B,IAAuB,EACvB,GAAY,EAAA;AAEZ,QAAA,OAAO,IAAI;IACb;uGARW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACrC,iBAAA;;;ACpBD;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAIU,mBAAmB,CAAA;AACrB,IAAA,WAAW,GAAsB,MAAM,CAAC,WAAW,CAAC;AAE7D,IAAA,OAAO,sBAAsB,CAC3B,IAAyB,EACzB,GAAY,EAAA;AAEZ,QAAA,OAAO,IAAI;IACb;uGARW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACvC,iBAAA;;;ACVD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;MAUU,YAAY,CAAA;;;AAId,IAAA,KAAK,GAAwB,KAAK,CAAS,EAAE,iDAAC;;IAG9C,QAAQ,GAA+C,KAAK,CAAC,KAAK,qDACzE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,QAAQ,GAA+C,KAAK,CAAC,KAAK,qDACzE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;;IAKO,MAAM,GAA2B,MAAM,EAAQ;;;AAK/C,IAAA,WAAW,GAA0C,YAAY,CAAC,iBAAiB,uDAAC;;AAGpF,IAAA,WAAW,GAA4C,YAAY,CAAC,mBAAmB,uDAAC;;AAGxF,IAAA,eAAe,GACtB,SAAS,CAAuB,iBAAiB,2DAAC;;;AAK3C,IAAA,QAAQ,GAA4B,MAAM,CAAC,KAAK,oDAAC;;AAGjD,IAAA,gBAAgB,GAA4B,MAAM,CAAC,KAAK,4DAAC;;AAIlE;;;AAGG;AACM,IAAA,aAAa,GAAqC,QAAQ,CACjE,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,IAAI,IAAI,yDAC9C;AAED;;AAEG;AACM,IAAA,eAAe,GAA6C,QAAQ,CAC3E,MAAM,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE,2DAChE;AAED;;AAEG;AACM,IAAA,MAAM,GAAoB,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,kDAAC;uGA7D5D,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAwBoD,iBAAiB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAGf,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlCtF;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGU,YAAY,EAAA,UAAA,EAAA,CAAA;kBATxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;2aAyB4E,iBAAiB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAGf,mBAAmB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAI9D,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACpGrD,IAAI,YAAY,GAAG,CAAC;AAEpB;;AAEG;SACa,aAAa,GAAA;AAC3B,IAAA,OAAO,CAAA,QAAA,EAAW,EAAE,YAAY,CAAA,CAAE;AACpC;;AC8BA;;;;;;;AAOG;MAqIU,kBAAkB,CAAA;AACZ,IAAA,UAAU,GAAe,MAAM,CAAC,UAAU,CAAC;;AAInD,IAAA,IAAI,GAAyC,KAAK,CAAC,QAAQ,+CAA2B;AACtF,IAAA,aAAa,GAAwB,KAAK,CAAC,QAAQ,wDAAU;AAC7D,IAAA,OAAO,GAA4B,KAAK,CAAa,WAAW,mDAAC;AACjE,IAAA,IAAI,GAAyB,KAAK,CAAU,IAAI,gDAAC;AACjD,IAAA,KAAK,GAA0B,KAAK,CAAW,SAAS,iDAAC;AACzD,IAAA,SAAS,GAA8B,KAAK,CAAe,OAAO,qDAAC;AACnE,IAAA,MAAM,GAAwB,KAAK,CAAC,QAAQ,iDAAU;;IAItD,WAAW,GAA6B,MAAM,EAAU;IACxD,UAAU,GAA6B,MAAM,EAAU;IACvD,SAAS,GAA6B,MAAM,EAAU;;AAItD,IAAA,eAAe,GACtB,SAAS,CAA0B,iBAAiB,2DAAC;AAC9C,IAAA,UAAU,GACjB,YAAY,CAAgC,WAAW,sDAAC;;AAIzC,IAAA,eAAe,GAA2B,MAAM,CAAC,CAAC,2DAAC;AACnD,IAAA,cAAc,GAA2B,MAAM,CAAC,CAAC,0DAAC;AAClD,IAAA,WAAW,GAA2B,MAAM,CAAC,CAAC,uDAAC;AAC7C,IAAA,aAAa,GAA2B,MAAM,CAAC,CAAC,yDAAC;AACjD,IAAA,cAAc,GAA2B,MAAM,CAAC,CAAC,0DAAC;IAE7D,UAAU,GAAoC,IAAI;IAClD,cAAc,GAA0B,IAAI;;AAI3C,IAAA,WAAW,GAAoB,QAAQ,CAC9C,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,uDACjD;AAEQ,IAAA,cAAc,GAAoB,QAAQ,CACjD,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,0DACvD;AAEQ,IAAA,eAAe,GAAoB,QAAQ,CAAC,MAAK;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;QACrF,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,GAAG,CAAC;AAC5C,IAAA,CAAC,2DAAC;IAEO,aAAa,GAAmB,QAAQ,CAAC,MAChD,YAAY,CACV,iBAAiB,CAAC;AAChB,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,EACF,UAAU,CACX,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACF;AAEQ,IAAA,iBAAiB,GAAmB,QAAQ,CAAC,MACpD,uBAAuB,CAAC;AACtB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,6DACH;AAEQ,IAAA,kBAAkB,GAAmB,QAAQ,CAAC,MACrD,uBAAuB,CAAC;AACtB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,8DACH;AAEQ,IAAA,kBAAkB,GAAmB,QAAQ,CAAC,MACrD,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,8DAC9C;AAEQ,IAAA,mBAAmB,GAAmB,QAAQ,CAAC,MAAK;AAC3D,QAAA,MAAM,QAAQ,GAA6B;AACzC,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,KAAK,EAAE,iBAAiB;SACzB;AACD,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/B,IAAA,CAAC,+DAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;;AAIA,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,KAAA,EAAQ,KAAK,EAAE;IACxC;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;QACtB,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,OAAA,EAAU,KAAK,EAAE;IAC1C;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,OAAO,eAAe,CAAC;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,KAAK;AACvC,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAC/B;IACF;IAEA,UAAU,GAAA;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI;YACjD,SAAS,CAAC,QAAQ,CAAC;AACjB,gBAAA,IAAI,EAAE,SAAS,CAAC,UAAU,GAAG,YAAY;AACzC,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;QACJ;IACF;IAEA,WAAW,GAAA;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI;YACjD,SAAS,CAAC,QAAQ,CAAC;AACjB,gBAAA,IAAI,EAAE,SAAS,CAAC,UAAU,GAAG,YAAY;AACzC,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;QACJ;IACF;;IAIU,QAAQ,GAAA;QAChB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEU,IAAA,UAAU,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC/B;IAEU,QAAQ,CAAC,KAAY,EAAE,KAAa,EAAA;QAC5C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AAEtB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;gBACvC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;gBACpC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,GAAG;AACN,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe;gBACnD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,IAAI,CAAC,EAAE;AAC5C,oBAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC7B;gBACA,KAAK,CAAC,cAAc,EAAE;gBACtB;;IAEN;;IAIQ,mBAAmB,GAAA;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;AACvD,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;YAC5C,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC;IAEQ,iBAAiB,GAAA;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;AACvD,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;IAC7C;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE;AAElC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE;AAChE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B;QACF;QAEA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa;QAC5C,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C;IACF;AAEQ,IAAA,iBAAiB,CAAC,KAAa,EAAA;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;AACvD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QAEjC,IAAI,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,OAAO,CAAC,MAAM;YAAE;QAExD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,aAAa;AAC5C,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE;AACvD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;QAEjD,IAAI,UAAU,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE;YACxC,SAAS,CAAC,QAAQ,CAAC;AACjB,gBAAA,IAAI,EAAE,SAAS,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE;AACxE,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;QACJ;aAAO,IAAI,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE;YACjD,SAAS,CAAC,QAAQ,CAAC;AACjB,gBAAA,IAAI,EAAE,SAAS,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE;AAC1E,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;QACJ;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,KAAK;aACxC,yBAAyB,CAAC,KAAK;AAC/B,aAAA,QAAQ;aACR,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEvC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IACrD;IAEQ,qBAAqB,GAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QAExB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,MAAM;YACxC,KAAK,EAAE,MAAM,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE;YAC5C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK;AAC3C,SAAA,CAAC,CAAC;IACL;uGAjSW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlInB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAcS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGf,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBApI9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHT,EAAA,CAAA,EAAA,OAAA,EAcQ,CAAC,gBAAgB,CAAC,EAAA,eAAA,EACV,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,uJAAA,CAAA,EAAA;AAwBV,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,iBAAiB,uEAER,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC5K3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CG;MA4DU,iBAAiB,CAAA;;IAEnB,MAAM,GAAW,aAAa,EAAE;;;AAKhC,IAAA,OAAO,GAA4B,KAAK,CAAa,WAAW,mDAAC;;AAGjE,IAAA,IAAI,GAAyB,KAAK,CAAU,IAAI,gDAAC;;AAGjD,IAAA,KAAK,GAA0B,KAAK,CAAW,SAAS,iDAAC;;AAGzD,IAAA,SAAS,GAA8B,KAAK,CAAe,OAAO,qDAAC;;AAGnE,IAAA,aAAa,GAAwB,KAAK,CAAS,CAAC,yDAAC;;IAGrD,gBAAgB,GAA+C,KAAK,CAAC,IAAI,6DAChF,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,eAAe,GAA+C,KAAK,CAAC,KAAK,4DAChF,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;;IAKO,iBAAiB,GAAqC,MAAM,EAAkB;;IAG9E,WAAW,GAA6B,MAAM,EAAU;;;AAKxD,IAAA,IAAI,GAAoC,eAAe,CAAC,YAAY,gDAAC;;;AAKrE,IAAA,SAAS,GAAqC,QAAQ,CAC7D,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,qDACxC;;AAGQ,IAAA,WAAW,GAAmB,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,uDAAC;;AAGjF,IAAA,aAAa,GAAmB,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,yDAAC;;AAGrF,IAAA,YAAY,GAAmB,QAAQ,CAAC,MAC/C,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,wDACxD;AAED,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;YAE3B,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAC7B,gBAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,YAAY;AACvC,gBAAA,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;;gBAG1B,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE;AACvC,oBAAA,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAChC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAIA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,EAAE;IACtC;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA,OAAA,EAAU,KAAK,EAAE;IACxC;AAEA;;;AAGG;IACH,eAAe,CAAC,GAAiB,EAAE,KAAa,EAAA;;AAE9C,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,OAAO,GAAG,CAAC,gBAAgB,EAAE;IAC/B;;AAIU,IAAA,aAAa,CAAC,KAAa,EAAA;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC7C;IACF;AAEU,IAAA,YAAY,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEU,IAAA,WAAW,CAAC,KAAa,EAAA;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC9B,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QACnB;IACF;uGA3HW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EA0CqC,YAAY,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnGnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAMS,kBAAkB,sMAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMnC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA3D7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,QAAA,EACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CT,EAAA,OAAA,EAMQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAA,eAAA,EAC9B,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,eAAe;AACvB,qBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;s+BA4CgE,YAAY,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACnK/E;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAYU,gBAAgB,CAAA;AACV,IAAA,gBAAgB,GAA4B,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpG,IAAA,UAAU,GAA4B,MAAM,CAAC,UAAU,CAAC;;;IAKhE,MAAM,GAA+C,KAAK,CAAC,KAAK,mDACvE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;IAGO,QAAQ,GAA+C,KAAK,CAAC,KAAK,qDACzE,SAAS,EAAE,gBAAgB,EAAA,CAC3B;;AAGO,IAAA,OAAO,GAA4B,KAAK,CAAa,WAAW,mDAAC;;AAGjE,IAAA,IAAI,GAAyB,KAAK,CAAU,IAAI,gDAAC;;AAGjD,IAAA,KAAK,GAA0B,KAAK,CAAW,SAAS,iDAAC;;IAGzD,SAAS,GAAwB,KAAK,CAAS,EAAE,sDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;;AAI/E;;;AAGG;IACc,qBAAqB,GAA2B,IAAI,CAAC;AACpE,UAAE,QAAQ,CACN,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACpF,EAAE,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;UAElD,IAAI;;AAIR;;AAEG;AACM,IAAA,QAAQ,GAAoB,QAAQ,CAAC,MAAK;AACjD,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,qBAAqB,EAAE;QACrC;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;AACtB,IAAA,CAAC,oDAAC;;IAGO,aAAa,GAAmB,QAAQ,CAAC,MAChD,YAAY,CACV,eAAe,CAAC;AACd,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACjB,QAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACnB,QAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE;AACxB,KAAA,CAAC,EACF,IAAI,CAAC,QAAQ,EAAE,IAAI,qBAAqB,EACxC,IAAI,CAAC,SAAS,EAAE,CACjB,yDACF;;IAGD,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IACvC;uGAtEW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,KAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,wCAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,SAAS,EAAE,iBAAiB;AAC5B,wBAAA,sBAAsB,EAAE,YAAY;AACpC,wBAAA,sBAAsB,EAAE,oBAAoB;AAC5C,wBAAA,mBAAmB,EAAE,oCAAoC;AACzD,wBAAA,YAAY,EAAE,qBAAqB;AACpC,qBAAA;AACF,iBAAA;;;ACxBD;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;MA2FU,kBAAkB,CAAA;AACZ,IAAA,UAAU,GAAe,MAAM,CAAC,UAAU,CAAC;;IAGnD,MAAM,GAAW,aAAa,EAAE;;;AAKhC,IAAA,OAAO,GAA4B,KAAK,CAAa,WAAW,mDAAC;;AAGjE,IAAA,IAAI,GAAyB,KAAK,CAAU,IAAI,gDAAC;;AAGjD,IAAA,KAAK,GAA0B,KAAK,CAAW,SAAS,iDAAC;;AAGzD,IAAA,SAAS,GAA8B,KAAK,CAAe,OAAO,qDAAC;;;AAKnE,IAAA,QAAQ,GAAwC,eAAe,CAAC,gBAAgB,oDAAC;;AAIjF,IAAA,eAAe,GACtB,SAAS,CAA0B,iBAAiB,2DAAC;;AAItC,IAAA,eAAe,GAA2B,MAAM,CAAC,CAAC,2DAAC;AACnD,IAAA,cAAc,GAA2B,MAAM,CAAC,CAAC,0DAAC;AAClD,IAAA,WAAW,GAA2B,MAAM,CAAC,CAAC,uDAAC;AAC7C,IAAA,aAAa,GAA2B,MAAM,CAAC,CAAC,yDAAC;AACjD,IAAA,cAAc,GAA2B,MAAM,CAAC,CAAC,0DAAC;IAE7D,UAAU,GAAuC,IAAI;IACrD,cAAc,GAA0B,IAAI;;;IAK3C,UAAU,GAAyC,QAAQ,CAAC,MACnE,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC9C;AAEQ,IAAA,WAAW,GAAoB,QAAQ,CAC9C,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,uDACjD;AAEQ,IAAA,cAAc,GAAoB,QAAQ,CACjD,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,0DACvD;AAEQ,IAAA,eAAe,GAAoB,QAAQ,CAAC,MAAK;AACxD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;QACrF,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,GAAG,CAAC;AAC5C,IAAA,CAAC,2DAAC;IAEO,aAAa,GAAmB,QAAQ,CAAC,MAChD,YAAY,CACV,iBAAiB,CAAC;AAChB,QAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,EACF,UAAU,CACX,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACF;AAEQ,IAAA,iBAAiB,GAAmB,QAAQ,CAAC,MACpD,uBAAuB,CAAC;AACtB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,6DACH;AAEQ,IAAA,kBAAkB,GAAmB,QAAQ,CAAC,MACrD,uBAAuB,CAAC;AACtB,QAAA,SAAS,EAAE,OAAO;AAClB,QAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACxB,KAAA,CAAC,8DACH;AAEQ,IAAA,mBAAmB,GAAmB,QAAQ,CAAC,MAAK;AAC3D,QAAA,MAAM,QAAQ,GAA6B;AACzC,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,KAAK,EAAE,iBAAiB;SACzB;AACD,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAC/B,IAAA,CAAC,+DAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,eAAe,CAAC,MAAK;YACnB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,eAAe,EAAE;AACxB,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC7B,YAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;;IAIA,UAAU,GAAA;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI;YACjD,SAAS,CAAC,QAAQ,CAAC;AACjB,gBAAA,IAAI,EAAE,SAAS,CAAC,UAAU,GAAG,YAAY;AACzC,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;QACJ;IACF;IAEA,WAAW,GAAA;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;QACvD,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI;YACjD,SAAS,CAAC,QAAQ,CAAC;AACjB,gBAAA,IAAI,EAAE,SAAS,CAAC,UAAU,GAAG,YAAY;AACzC,gBAAA,QAAQ,EAAE,QAAQ;AACnB,aAAA,CAAC;QACJ;IACF;;IAIU,QAAQ,GAAA;QAChB,IAAI,CAAC,iBAAiB,EAAE;IAC1B;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AAEtB,QAAA,QAAQ,KAAK,CAAC,GAAG;AACf,YAAA,KAAK,WAAW;AACd,gBAAA,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE;gBACvC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;gBACpC,KAAK,CAAC,cAAc,EAAE;gBACtB;AACF,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE;gBACnC,KAAK,CAAC,cAAc,EAAE;gBACtB;;IAEN;;IAIQ,mBAAmB,GAAA;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;AACvD,QAAA,IAAI,CAAC,SAAS;YAAE;AAEhB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;YAC5C,IAAI,CAAC,iBAAiB,EAAE;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC;IAEQ,iBAAiB,GAAA;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa;AACvD,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;IAC7C;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,KAAK;aACxC,yBAAyB,CAAC,KAAK;AAC/B,aAAA,QAAQ;aACR,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;IACzC;IAEQ,qBAAqB,GAAA;QAC3B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK;AAClC,YAAA,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1B,SAAA,CAAC,CAAC;IACL;uGApMW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAuB4C,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/G/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uJAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAmBU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA1F9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uCAAuC,EAAA,QAAA,EACvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqET,EAAA,eAAA,EAcgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,iBAAiB;AACzB,qBAAA,EAAA,MAAA,EAAA,CAAA,uJAAA,CAAA,EAAA;AAyBwE,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,gBAAgB,0EAKpD,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AC1KxD;AAKA;;ACLA;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1264,7 +1264,7 @@ type DatepickerIconVariants = VariantProps<typeof datepickerIconVariants>;
|
|
|
1264
1264
|
/**
|
|
1265
1265
|
* CVA variants for the clear button.
|
|
1266
1266
|
*
|
|
1267
|
-
* @tokens `--color-ring`, `--color-muted-foreground`, `--radius-interactive-sm`
|
|
1267
|
+
* @tokens `--color-ring`, `--color-muted-foreground`, `--color-foreground`, `--radius-interactive-sm`
|
|
1268
1268
|
*/
|
|
1269
1269
|
declare const datepickerClearVariants: (props?: {
|
|
1270
1270
|
size?: DatepickerSize;
|