@tailng-ui/primitives 0.14.0 → 0.16.0

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.
Files changed (56) hide show
  1. package/package.json +3 -2
  2. package/src/index.d.ts +1 -0
  3. package/src/index.d.ts.map +1 -1
  4. package/src/index.js +1 -0
  5. package/src/index.js.map +1 -1
  6. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts +25 -0
  7. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.d.ts.map +1 -0
  8. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js +105 -0
  9. package/src/lib/form/datepicker/__tests__/tng-datepicker.test-helpers.js.map +1 -0
  10. package/src/lib/form/datepicker/datepicker.adapters.d.ts +5 -0
  11. package/src/lib/form/datepicker/datepicker.adapters.d.ts.map +1 -0
  12. package/src/lib/form/datepicker/datepicker.adapters.js +194 -0
  13. package/src/lib/form/datepicker/datepicker.adapters.js.map +1 -0
  14. package/src/lib/form/datepicker/datepicker.state.d.ts +10 -0
  15. package/src/lib/form/datepicker/datepicker.state.d.ts.map +1 -0
  16. package/src/lib/form/datepicker/datepicker.state.js +97 -0
  17. package/src/lib/form/datepicker/datepicker.state.js.map +1 -0
  18. package/src/lib/form/datepicker/datepicker.types.d.ts +269 -0
  19. package/src/lib/form/datepicker/datepicker.types.d.ts.map +1 -0
  20. package/src/lib/form/datepicker/datepicker.types.js +1 -0
  21. package/src/lib/form/datepicker/datepicker.types.js.map +1 -0
  22. package/src/lib/form/datepicker/datepicker.utils.d.ts +75 -0
  23. package/src/lib/form/datepicker/datepicker.utils.d.ts.map +1 -0
  24. package/src/lib/form/datepicker/datepicker.utils.js +238 -0
  25. package/src/lib/form/datepicker/datepicker.utils.js.map +1 -0
  26. package/src/lib/form/datepicker/index.d.ts +3 -0
  27. package/src/lib/form/datepicker/index.d.ts.map +1 -0
  28. package/src/lib/form/datepicker/index.js +3 -0
  29. package/src/lib/form/datepicker/index.js.map +1 -0
  30. package/src/lib/form/datepicker/tng-datepicker.d.ts +5 -0
  31. package/src/lib/form/datepicker/tng-datepicker.d.ts.map +1 -0
  32. package/src/lib/form/datepicker/tng-datepicker.js +1948 -0
  33. package/src/lib/form/datepicker/tng-datepicker.js.map +1 -0
  34. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts +60 -0
  35. package/src/lib/form/datepicker/tng-datepicker.overlay.d.ts.map +1 -0
  36. package/src/lib/form/datepicker/tng-datepicker.overlay.js +275 -0
  37. package/src/lib/form/datepicker/tng-datepicker.overlay.js.map +1 -0
  38. package/src/lib/form/input/tng-input.d.ts +10 -10
  39. package/src/lib/form/input/tng-input.d.ts.map +1 -1
  40. package/src/lib/form/input/tng-input.js +28 -27
  41. package/src/lib/form/input/tng-input.js.map +1 -1
  42. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts +32 -0
  43. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.d.ts.map +1 -0
  44. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js +312 -0
  45. package/src/lib/layout/grid/__tests__/tng-grid.test-harness.js.map +1 -0
  46. package/src/lib/layout/grid/tng-grid.d.ts +144 -2
  47. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  48. package/src/lib/layout/grid/tng-grid.js +669 -2
  49. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  50. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.d.ts.map +1 -1
  51. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js +0 -1
  52. package/src/lib/layout/tree/__tests__/tng-tree.test-harness.js.map +1 -1
  53. package/src/lib/navigation/tabs/tng-tabs.d.ts +13 -6
  54. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  55. package/src/lib/navigation/tabs/tng-tabs.js +77 -35
  56. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-tabs.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/tabs/tng-tabs.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\n\ntype TngTabsDirection = 'ltr' | 'rtl' | 'auto';\ntype TngTabsOrientation = 'horizontal' | 'vertical';\ntype TngTabsActivationMode = 'auto' | 'manual';\ntype TngTabsScrollButtonsMode = 'auto' | 'off' | 'on';\ntype TngTabsFocusMove = 'next' | 'prev' | 'first' | 'last';\ntype TngTabsFocusTrigger = 'pointer' | 'keyboard' | 'programmatic';\ntype TngTabsSelectionTrigger = 'pointer' | 'keyboard' | 'programmatic';\n\nexport type TngTabsValue = string | number;\n\nexport type TngTabChangeEvent = Readonly<{\n value: TngTabsValue;\n previousValue: TngTabsValue | null;\n trigger: TngTabsSelectionTrigger;\n}>;\n\nexport type TngTabsFocusChangeEvent = Readonly<{\n value: TngTabsValue;\n previousValue: TngTabsValue | null;\n trigger: TngTabsFocusTrigger;\n}>;\n\nconst createTabId = createTngIdFactory('tng-tab');\nconst createPanelId = createTngIdFactory('tng-tab-panel');\nlet nextRegistrationOrder = 0;\n\nfunction normalizeBooleanInput(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === '' || normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n }\n\n return false;\n}\n\nfunction normalizeOptionalBooleanInput(value: unknown): boolean | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return normalizeBooleanInput(value);\n}\n\nfunction normalizeDirectionInput(value: unknown): TngTabsDirection {\n if (value === 'ltr' || value === 'rtl' || value === 'auto') {\n return value;\n }\n\n return 'auto';\n}\n\nfunction normalizeOrientationInput(value: unknown): TngTabsOrientation {\n return value === 'vertical' ? 'vertical' : 'horizontal';\n}\n\nfunction normalizeActivationInput(value: unknown): TngTabsActivationMode {\n return value === 'manual' ? 'manual' : 'auto';\n}\n\nfunction normalizeScrollButtonsInput(value: unknown): TngTabsScrollButtonsMode {\n if (value === 'auto' || value === 'on' || value === 'off') {\n return value;\n }\n\n if (value === '' || value === true || value === 'true') {\n return 'auto';\n }\n\n return 'off';\n}\n\nfunction normalizeOptionalValueInput(value: unknown): TngTabsValue | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n return String(value);\n}\n\nfunction normalizeOptionalStringInput(value: unknown): string | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n return String(value);\n}\n\nfunction valuesEqual(a: TngTabsValue | null, b: TngTabsValue | null): boolean {\n return a === b;\n}\n\nfunction compareByDomPosition(\n aElement: HTMLElement,\n bElement: HTMLElement,\n aOrder: number,\n bOrder: number,\n): number {\n if (aElement === bElement) {\n return 0;\n }\n\n const relativePosition = aElement.compareDocumentPosition(bElement);\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n\n if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n\n return aOrder - bOrder;\n}\n\nfunction isFocusableInteractiveElement(element: Element): boolean {\n return (\n element.matches('a[href]') ||\n element.matches('button') ||\n element.matches('input') ||\n element.matches('select') ||\n element.matches('textarea') ||\n element.matches('[tabindex]') ||\n element.matches('[contenteditable=\"true\"]')\n );\n}\n\n@Directive({\n selector: '[tngTabs]',\n exportAs: 'tngTabs',\n})\nexport class TngTabs {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = new Set<TngTab>();\n private readonly panels = new Set<TngTabPanel>();\n private tabList: TngTabList | null = null;\n private scrollPrevControl: TngTabsScrollButtonPrev | null = null;\n private scrollNextControl: TngTabsScrollButtonNext | null = null;\n private uncontrolledValue: TngTabsValue | null = null;\n private focusedValue: TngTabsValue | null = null;\n private hasUserSelection = false;\n private initialized = false;\n\n readonly value = input<TngTabsValue | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalValueInput,\n });\n readonly defaultValue = input<TngTabsValue | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalValueInput,\n });\n readonly activation = input<TngTabsActivationMode, unknown>('auto', {\n transform: normalizeActivationInput,\n });\n readonly orientation = input<TngTabsOrientation, unknown>('horizontal', {\n transform: normalizeOrientationInput,\n });\n readonly scrollButtons = input<TngTabsScrollButtonsMode, unknown>('off', {\n transform: normalizeScrollButtonsInput,\n });\n readonly loop = input<boolean, unknown>(true, {\n transform: normalizeBooleanInput,\n });\n readonly dir = input<TngTabsDirection, unknown>('auto', {\n transform: normalizeDirectionInput,\n });\n readonly disabled = input<boolean, unknown>(false, {\n transform: normalizeBooleanInput,\n });\n readonly lazy = input<boolean | undefined, unknown>(undefined, {\n transform: normalizeOptionalBooleanInput,\n });\n readonly keepAlive = input<boolean | undefined, unknown>(undefined, {\n transform: normalizeOptionalBooleanInput,\n });\n\n readonly valueChange = output<TngTabsValue | null>();\n readonly tabChange = output<TngTabChangeEvent>();\n readonly focusChange = output<TngTabsFocusChangeEvent>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tabs' as const;\n\n @HostBinding('attr.data-orientation')\n protected get dataOrientation(): TngTabsOrientation {\n return this.orientation();\n }\n\n @HostBinding('attr.data-activation')\n protected get dataActivation(): TngTabsActivationMode {\n return this.activation();\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.disabled() ? 'true' : 'false';\n }\n\n ngDoCheck(): void {\n this.syncStateFromRegistry();\n }\n\n isDisabled(): boolean {\n return this.disabled();\n }\n\n isKeepAliveEnabled(): boolean {\n return this.keepAlive() ?? true;\n }\n\n isLazyEnabled(): boolean {\n return this.lazy() ?? false;\n }\n\n select(value: TngTabsValue): void {\n const targetTab = this.findEnabledTabByValue(value);\n if (targetTab === null) {\n return;\n }\n\n this.requestSelection(targetTab, 'programmatic');\n }\n\n focus(value: TngTabsValue): void {\n const targetTab = this.findEnabledTabByValue(value);\n if (targetTab === null) {\n return;\n }\n\n this.moveFocusToTab(targetTab, 'programmatic');\n if (this.activation() === 'auto') {\n this.requestSelection(targetTab, 'programmatic');\n }\n }\n\n next(): void {\n this.moveFocusFromCurrentTab('next', 'programmatic');\n }\n\n prev(): void {\n this.moveFocusFromCurrentTab('prev', 'programmatic');\n }\n\n registerTab(tab: TngTab): void {\n this.tabs.add(tab);\n }\n\n unregisterTab(tab: TngTab): void {\n const orderedTabs = this.getOrderedTabs();\n const removedIndex = orderedTabs.indexOf(tab);\n const removedValue = tab.getValue();\n const selectedValue = this.getEffectiveSelectedValue();\n const focusedValue = this.resolveCurrentTabStopValue();\n\n this.tabs.delete(tab);\n\n if (selectedValue !== null && valuesEqual(selectedValue, removedValue)) {\n const nextSelectedValue = this.resolveNeighborValueOnRemoval(orderedTabs, removedIndex);\n this.applyLifecycleSelection(nextSelectedValue);\n }\n\n if (focusedValue !== null && valuesEqual(focusedValue, removedValue)) {\n const nextFocusedValue = this.resolveNeighborValueOnRemoval(orderedTabs, removedIndex);\n this.focusedValue = nextFocusedValue;\n }\n\n this.syncStateFromRegistry();\n }\n\n notifyTabMutated(tab: TngTab): void {\n const selectedValue = this.getEffectiveSelectedValue();\n if (selectedValue !== null && valuesEqual(selectedValue, tab.getValue()) && tab.isDisabledInContext()) {\n const replacement = this.resolveNeighborForDisabledTab(tab);\n this.applyLifecycleSelection(replacement);\n }\n\n const focusedValue = this.resolveCurrentTabStopValue();\n if (focusedValue !== null && valuesEqual(focusedValue, tab.getValue()) && tab.isDisabledInContext()) {\n this.focusedValue = this.resolveNeighborForDisabledTab(tab);\n }\n\n this.syncStateFromRegistry();\n }\n\n registerPanel(panel: TngTabPanel): void {\n this.panels.add(panel);\n }\n\n unregisterPanel(panel: TngTabPanel): void {\n this.panels.delete(panel);\n this.syncStateFromRegistry();\n }\n\n notifyPanelMutated(): void {\n this.syncStateFromRegistry();\n }\n\n registerScrollPrevControl(control: TngTabsScrollButtonPrev): void {\n this.scrollPrevControl = control;\n }\n\n unregisterScrollPrevControl(control: TngTabsScrollButtonPrev): void {\n if (this.scrollPrevControl === control) {\n this.scrollPrevControl = null;\n }\n }\n\n registerScrollNextControl(control: TngTabsScrollButtonNext): void {\n this.scrollNextControl = control;\n }\n\n unregisterScrollNextControl(control: TngTabsScrollButtonNext): void {\n if (this.scrollNextControl === control) {\n this.scrollNextControl = null;\n }\n }\n\n registerTabList(tabList: TngTabList): void {\n this.tabList = tabList;\n }\n\n unregisterTabList(tabList: TngTabList): void {\n if (this.tabList !== tabList) {\n return;\n }\n\n this.tabList = null;\n }\n\n onTabListScrolled(): void {}\n\n onTabListFocused(): void {\n if (this.disabled()) {\n return;\n }\n\n const enabledTabs = this.getEnabledTabs();\n if (enabledTabs.length === 0) {\n return;\n }\n\n const currentTabStopValue = this.resolveCurrentTabStopValue(enabledTabs);\n const currentTab =\n this.findEnabledTabByValue(currentTabStopValue, enabledTabs) ??\n enabledTabs[0] ??\n null;\n if (currentTab === null) {\n return;\n }\n\n currentTab.focusSelf();\n }\n\n handleTabListWheel(event: WheelEvent): void {\n if (this.orientation() !== 'horizontal') {\n return;\n }\n\n if (!this.isTabListOverflowing()) {\n return;\n }\n\n const dominantDelta = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY;\n if (dominantDelta === 0) {\n return;\n }\n\n event.preventDefault();\n this.scrollTabListBy(dominantDelta);\n }\n\n isScrollButtonHidden(): boolean {\n return !this.shouldShowScrollButtons();\n }\n\n isScrollButtonDisabled(direction: 'next' | 'prev'): boolean {\n if (this.isScrollButtonHidden()) {\n return true;\n }\n\n const tabListElement = this.getTabListElement();\n if (tabListElement === null) {\n return true;\n }\n\n const maxScrollLeft = Math.max(0, tabListElement.scrollWidth - tabListElement.clientWidth);\n if (direction === 'prev') {\n return tabListElement.scrollLeft <= 0;\n }\n\n return tabListElement.scrollLeft >= maxScrollLeft;\n }\n\n onScrollButtonClick(direction: 'next' | 'prev', event: MouseEvent): void {\n if (this.isScrollButtonDisabled(direction)) {\n event.preventDefault();\n return;\n }\n\n const delta = direction === 'prev' ? -this.resolveTabListScrollStep() : this.resolveTabListScrollStep();\n this.scrollTabListBy(delta);\n event.preventDefault();\n }\n\n getTabIndex(tab: TngTab): string {\n if (this.disabled() || tab.isDisabledInContext()) {\n return '-1';\n }\n\n const tabStop = this.resolveCurrentTabStopValue();\n if (tabStop === null) {\n return '-1';\n }\n\n return valuesEqual(tabStop, tab.getValue()) ? '0' : '-1';\n }\n\n isTabSelected(tab: TngTab): boolean {\n const selectedValue = this.getEffectiveSelectedValue();\n if (selectedValue === null) {\n return false;\n }\n\n return valuesEqual(selectedValue, tab.getValue());\n }\n\n isTabFocused(tab: TngTab): boolean {\n const tabStop = this.resolveCurrentTabStopValue();\n return tabStop !== null && valuesEqual(tabStop, tab.getValue());\n }\n\n getPanelIdForTab(tab: TngTab): string | null {\n const explicitPanelId = tab.getExplicitPanelId();\n if (explicitPanelId !== null) {\n return explicitPanelId;\n }\n\n const matchedPanel = this.findPanelByValue(tab.getValue());\n if (matchedPanel !== null) {\n return matchedPanel.getPanelId();\n }\n\n const tabs = this.getOrderedTabs();\n const panels = this.getOrderedPanels();\n const tabIndex = tabs.indexOf(tab);\n if (tabIndex < 0) {\n return null;\n }\n\n return panels[tabIndex]?.getPanelId() ?? null;\n }\n\n getTabIdForPanel(panel: TngTabPanel): string | null {\n const explicitLabelledById = panel.getExplicitLabelledById();\n if (explicitLabelledById !== null) {\n return explicitLabelledById;\n }\n\n const matchedTab = this.findTabByValue(panel.getValue());\n if (matchedTab !== null) {\n return matchedTab.getItemId();\n }\n\n const tabs = this.getOrderedTabs();\n const panels = this.getOrderedPanels();\n const panelIndex = panels.indexOf(panel);\n if (panelIndex < 0) {\n return null;\n }\n\n return tabs[panelIndex]?.getItemId() ?? null;\n }\n\n isPanelActive(panel: TngTabPanel): boolean {\n const selectedValue = this.getEffectiveSelectedValue();\n if (selectedValue === null) {\n return false;\n }\n\n return valuesEqual(selectedValue, panel.getValue());\n }\n\n isPanelMounted(panel: TngTabPanel): boolean {\n if (this.isPanelActive(panel)) {\n panel.markActivated();\n return true;\n }\n\n const keepAlive = panel.unmountOnExit() ? false : this.isKeepAliveEnabled();\n if (!keepAlive) {\n return false;\n }\n\n if (!this.isLazyEnabled()) {\n return true;\n }\n\n return panel.hasActivated();\n }\n\n onTabFocused(tab: TngTab, trigger: TngTabsFocusTrigger): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n this.setFocusedValue(tab.getValue(), trigger);\n this.scrollTabIntoView(tab);\n }\n\n requestSelection(tab: TngTab, trigger: TngTabsSelectionTrigger): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n const nextValue = tab.getValue();\n const previousValue = this.getEffectiveSelectedValue();\n if (previousValue !== null && valuesEqual(previousValue, nextValue)) {\n return;\n }\n\n if (!this.isControlled()) {\n this.uncontrolledValue = nextValue;\n this.hasUserSelection = true;\n }\n\n this.focusedValue = nextValue;\n this.valueChange.emit(nextValue);\n this.tabChange.emit({\n value: nextValue,\n previousValue,\n trigger,\n });\n\n this.scrollTabIntoView(tab);\n this.syncStateFromRegistry();\n }\n\n handleTabKeydown(tab: TngTab, event: KeyboardEvent): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n const focusMove = this.resolveFocusMove(event.key);\n if (focusMove !== null) {\n event.preventDefault();\n this.moveFocusByAction(tab, focusMove, 'keyboard');\n return;\n }\n\n if (event.key !== 'Enter' && event.key !== ' ' && event.key !== 'Spacebar') {\n return;\n }\n\n if (this.activation() === 'manual' || this.activation() === 'auto') {\n event.preventDefault();\n this.requestSelection(tab, 'keyboard');\n }\n }\n\n private resolveFocusMove(key: string): TngTabsFocusMove | null {\n if (key === 'Home') {\n return 'first';\n }\n\n if (key === 'End') {\n return 'last';\n }\n\n if (this.orientation() === 'vertical') {\n if (key === 'ArrowDown') {\n return 'next';\n }\n\n if (key === 'ArrowUp') {\n return 'prev';\n }\n\n return null;\n }\n\n if (key !== 'ArrowLeft' && key !== 'ArrowRight') {\n return null;\n }\n\n const isRtl = this.resolveDirection() === 'rtl';\n const moveToNext = key === (isRtl ? 'ArrowLeft' : 'ArrowRight');\n return moveToNext ? 'next' : 'prev';\n }\n\n private moveFocusByAction(\n sourceTab: TngTab,\n action: TngTabsFocusMove,\n trigger: TngTabsFocusTrigger,\n ): void {\n const enabledTabs = this.getEnabledTabs();\n if (enabledTabs.length === 0) {\n return;\n }\n\n const currentIndex = enabledTabs.indexOf(sourceTab);\n if (currentIndex < 0) {\n return;\n }\n\n const nextTab = this.resolveFocusTarget(enabledTabs, currentIndex, action);\n if (nextTab === null) {\n return;\n }\n\n this.moveFocusToTab(nextTab, trigger);\n if (this.activation() === 'auto') {\n this.requestSelection(nextTab, trigger === 'programmatic' ? 'programmatic' : 'keyboard');\n }\n }\n\n private moveFocusToTab(tab: TngTab, trigger: TngTabsFocusTrigger): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n this.setFocusedValue(tab.getValue(), trigger);\n tab.focusSelf();\n }\n\n private moveFocusFromCurrentTab(\n direction: 'next' | 'prev',\n trigger: TngTabsFocusTrigger,\n ): void {\n const enabledTabs = this.getEnabledTabs();\n if (enabledTabs.length === 0) {\n return;\n }\n\n const activeElement = this.hostRef.nativeElement.ownerDocument?.activeElement ?? null;\n const activeTab = this.findTabContainingElement(activeElement);\n const currentTab = activeTab ?? this.findEnabledTabByValue(this.resolveCurrentTabStopValue(), enabledTabs);\n if (currentTab === null) {\n return;\n }\n\n const currentIndex = enabledTabs.indexOf(currentTab);\n if (currentIndex < 0) {\n return;\n }\n\n const nextTab = this.resolveFocusTarget(enabledTabs, currentIndex, direction);\n if (nextTab === null) {\n return;\n }\n\n this.moveFocusToTab(nextTab, trigger);\n if (this.activation() === 'auto') {\n this.requestSelection(nextTab, trigger === 'programmatic' ? 'programmatic' : 'keyboard');\n }\n }\n\n private resolveFocusTarget(\n enabledTabs: readonly TngTab[],\n currentIndex: number,\n action: TngTabsFocusMove,\n ): TngTab | null {\n if (enabledTabs.length === 0 || currentIndex < 0) {\n return null;\n }\n\n if (action === 'first') {\n return enabledTabs[0] ?? null;\n }\n\n if (action === 'last') {\n return enabledTabs[enabledTabs.length - 1] ?? null;\n }\n\n if (action === 'next') {\n if (currentIndex + 1 < enabledTabs.length) {\n return enabledTabs[currentIndex + 1] ?? null;\n }\n\n return this.loop() ? (enabledTabs[0] ?? null) : (enabledTabs[currentIndex] ?? null);\n }\n\n if (currentIndex - 1 >= 0) {\n return enabledTabs[currentIndex - 1] ?? null;\n }\n\n return this.loop()\n ? (enabledTabs[enabledTabs.length - 1] ?? null)\n : (enabledTabs[currentIndex] ?? null);\n }\n\n private setFocusedValue(value: TngTabsValue, trigger: TngTabsFocusTrigger): void {\n const previousValue = this.focusedValue;\n if (previousValue !== null && valuesEqual(previousValue, value)) {\n return;\n }\n\n this.focusedValue = value;\n this.focusChange.emit({\n value,\n previousValue,\n trigger,\n });\n }\n\n private applyLifecycleSelection(nextValue: TngTabsValue | null): void {\n if (this.isControlled()) {\n return;\n }\n\n this.uncontrolledValue = nextValue;\n if (nextValue !== null) {\n this.focusedValue = nextValue;\n }\n }\n\n private resolveDirection(): 'ltr' | 'rtl' {\n const configuredDirection = this.dir();\n if (configuredDirection !== 'auto') {\n return configuredDirection;\n }\n\n const host = this.hostRef.nativeElement;\n const nearestDirection =\n host.closest<HTMLElement>('[dir]')?.getAttribute('dir') ??\n host.ownerDocument?.documentElement.getAttribute('dir');\n\n return nearestDirection?.toLowerCase() === 'rtl' ? 'rtl' : 'ltr';\n }\n\n private getSelectedValue(): TngTabsValue | null {\n if (this.isControlled()) {\n return this.value() as TngTabsValue;\n }\n\n return this.uncontrolledValue;\n }\n\n private getEffectiveSelectedValue(enabledTabs = this.getEnabledTabs()): TngTabsValue | null {\n if (enabledTabs.length === 0) {\n return null;\n }\n\n const selectedValue = this.getSelectedValue();\n if (selectedValue !== null && this.findEnabledTabByValue(selectedValue, enabledTabs) !== null) {\n return selectedValue;\n }\n\n return enabledTabs[0]?.getValue() ?? null;\n }\n\n private resolveCurrentTabStopValue(enabledTabs = this.getEnabledTabs()): TngTabsValue | null {\n if (enabledTabs.length === 0) {\n return null;\n }\n\n if (this.focusedValue !== null && this.findEnabledTabByValue(this.focusedValue, enabledTabs) !== null) {\n return this.focusedValue;\n }\n\n const selectedValue = this.getEffectiveSelectedValue(enabledTabs);\n if (selectedValue !== null) {\n return selectedValue;\n }\n\n return enabledTabs[0]?.getValue() ?? null;\n }\n\n private syncStateFromRegistry(): void {\n const enabledTabs = this.getEnabledTabs();\n\n if (!this.initialized) {\n this.initialized = true;\n if (!this.isControlled()) {\n const defaultValue = this.defaultValue();\n if (defaultValue !== undefined && defaultValue !== null) {\n this.uncontrolledValue = this.findEnabledTabByValue(defaultValue, enabledTabs)?.getValue() ?? null;\n } else {\n this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;\n }\n }\n }\n\n if (enabledTabs.length === 0) {\n if (!this.isControlled()) {\n this.uncontrolledValue = null;\n }\n this.focusedValue = null;\n return;\n }\n\n if (!this.isControlled()) {\n const defaultValue = this.defaultValue();\n if (!this.hasUserSelection && defaultValue !== undefined && defaultValue !== null) {\n const defaultTab = this.findEnabledTabByValue(defaultValue, enabledTabs);\n if (defaultTab !== null) {\n this.uncontrolledValue = defaultTab.getValue();\n } else if (this.uncontrolledValue === null) {\n this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;\n }\n } else {\n const current = this.uncontrolledValue;\n if (current === null || this.findEnabledTabByValue(current, enabledTabs) === null) {\n this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;\n }\n }\n }\n\n const selectedValue = this.getEffectiveSelectedValue(enabledTabs);\n if (selectedValue !== null) {\n this.findPanelByValue(selectedValue)?.markActivated();\n }\n\n this.focusedValue = this.resolveCurrentTabStopValue(enabledTabs);\n }\n\n private resolveNeighborValueOnRemoval(\n orderedTabs: readonly TngTab[],\n removedIndex: number,\n ): TngTabsValue | null {\n if (removedIndex < 0) {\n return this.getEnabledTabs()[0]?.getValue() ?? null;\n }\n\n for (let index = removedIndex + 1; index < orderedTabs.length; index += 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n for (let index = removedIndex - 1; index >= 0; index -= 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n return null;\n }\n\n private resolveNeighborForDisabledTab(tab: TngTab): TngTabsValue | null {\n const orderedTabs = this.getOrderedTabs();\n const currentIndex = orderedTabs.indexOf(tab);\n if (currentIndex < 0) {\n return this.getEnabledTabs()[0]?.getValue() ?? null;\n }\n\n for (let index = currentIndex - 1; index >= 0; index -= 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n for (let index = currentIndex + 1; index < orderedTabs.length; index += 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n return null;\n }\n\n private isControlled(): boolean {\n const value = this.value();\n return value !== undefined && value !== null;\n }\n\n private getOrderedTabs(): TngTab[] {\n const tabs = Array.from(this.tabs);\n tabs.sort((a, b) =>\n compareByDomPosition(\n a.getHostElement(),\n b.getHostElement(),\n a.getRegistrationOrder(),\n b.getRegistrationOrder(),\n ),\n );\n return tabs;\n }\n\n private getEnabledTabs(): TngTab[] {\n return this.getOrderedTabs().filter((tab) => !tab.isDisabledInContext());\n }\n\n private getOrderedPanels(): TngTabPanel[] {\n const panels = Array.from(this.panels);\n panels.sort((a, b) =>\n compareByDomPosition(\n a.getHostElement(),\n b.getHostElement(),\n a.getRegistrationOrder(),\n b.getRegistrationOrder(),\n ),\n );\n return panels;\n }\n\n private findTabByValue(value: TngTabsValue | null): TngTab | null {\n if (value === null) {\n return null;\n }\n\n const tabs = this.getOrderedTabs();\n return tabs.find((tab) => valuesEqual(tab.getValue(), value)) ?? null;\n }\n\n private findEnabledTabByValue(\n value: TngTabsValue | null,\n enabledTabs = this.getEnabledTabs(),\n ): TngTab | null {\n if (value === null) {\n return null;\n }\n\n return enabledTabs.find((tab) => valuesEqual(tab.getValue(), value)) ?? null;\n }\n\n private findPanelByValue(value: TngTabsValue | null): TngTabPanel | null {\n if (value === null) {\n return null;\n }\n\n const panels = this.getOrderedPanels();\n return panels.find((panel) => valuesEqual(panel.getValue(), value)) ?? null;\n }\n\n private findTabContainingElement(element: Element | null): TngTab | null {\n if (element === null) {\n return null;\n }\n\n const tabs = this.getOrderedTabs();\n return (\n tabs.find((tab) => {\n const host = tab.getHostElement();\n return host === element || host.contains(element);\n }) ?? null\n );\n }\n\n private getTabListElement(): HTMLElement | null {\n return this.tabList?.getHostElement() ?? null;\n }\n\n private isTabListOverflowing(): boolean {\n const tabListElement = this.getTabListElement();\n if (tabListElement === null) {\n return false;\n }\n\n return tabListElement.scrollWidth > tabListElement.clientWidth;\n }\n\n private shouldShowScrollButtons(): boolean {\n if (this.scrollPrevControl === null && this.scrollNextControl === null) {\n return false;\n }\n\n const mode = this.scrollButtons();\n if (mode === 'on') {\n return true;\n }\n\n if (mode !== 'auto') {\n return false;\n }\n\n return this.isTabListOverflowing();\n }\n\n private resolveTabListScrollStep(): number {\n const tabListElement = this.getTabListElement();\n if (tabListElement === null) {\n return 120;\n }\n\n return Math.max(80, Math.round(tabListElement.clientWidth * 0.7));\n }\n\n private scrollTabListBy(delta: number): void {\n const tabListElement = this.getTabListElement();\n if (tabListElement === null || delta === 0) {\n return;\n }\n\n tabListElement.scrollLeft += delta;\n }\n\n private scrollTabIntoView(tab: TngTab): void {\n if (!this.isTabListOverflowing()) {\n return;\n }\n\n const host = tab.getHostElement();\n const scrollIntoView = host.scrollIntoView as\n | ((options?: ScrollIntoViewOptions) => void)\n | undefined;\n if (typeof scrollIntoView !== 'function') {\n return;\n }\n\n scrollIntoView.call(host, {\n block: 'nearest',\n inline: 'nearest',\n });\n }\n}\n\n@Directive({\n selector: '[tngTabList]',\n exportAs: 'tngTabList',\n})\nexport class TngTabList {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = inject(TngTabs, { host: true });\n\n readonly ariaLabel = input<string | null | undefined, unknown>(undefined, {\n alias: 'ariaLabel',\n transform: normalizeOptionalStringInput,\n });\n readonly ariaLabelledby = input<string | null | undefined, unknown>(undefined, {\n alias: 'ariaLabelledby',\n transform: normalizeOptionalStringInput,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tab-list' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tablist' as const;\n\n @HostBinding('attr.tabindex')\n protected readonly tabIndex = '-1' as const;\n\n @HostBinding('attr.aria-orientation')\n protected get ariaOrientation(): TngTabsOrientation {\n return this.tabs.orientation();\n }\n\n @HostBinding('attr.aria-label')\n protected get hostAriaLabel(): string | null {\n return this.ariaLabel() ?? null;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get hostAriaLabelledby(): string | null {\n return this.ariaLabelledby() ?? null;\n }\n\n constructor() {\n this.tabs.registerTabList(this);\n }\n\n ngOnDestroy(): void {\n this.tabs.unregisterTabList(this);\n }\n\n @HostListener('wheel', ['$event'])\n protected onWheel(event: WheelEvent): void {\n this.tabs.handleTabListWheel(event);\n }\n\n @HostListener('scroll')\n protected onScroll(): void {\n this.tabs.onTabListScrolled();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.tabs.onTabListFocused();\n }\n\n getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n}\n\n@Directive({\n selector: '[tngTabsScrollButtonPrev]',\n exportAs: 'tngTabsScrollButtonPrev',\n})\nexport class TngTabsScrollButtonPrev {\n private readonly tabs = inject(TngTabs, { host: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tabs-scroll-button-prev' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.tabs.isScrollButtonHidden() ? '' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabled(): '' | null {\n return this.tabs.isScrollButtonDisabled('prev') ? '' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.tabs.isScrollButtonDisabled('prev') ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.tabs.isScrollButtonDisabled('prev') ? 'true' : 'false';\n }\n\n constructor() {\n this.tabs.registerScrollPrevControl(this);\n }\n\n ngOnDestroy(): void {\n this.tabs.unregisterScrollPrevControl(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n this.tabs.onScrollButtonClick('prev', event);\n }\n}\n\n@Directive({\n selector: '[tngTabsScrollButtonNext]',\n exportAs: 'tngTabsScrollButtonNext',\n})\nexport class TngTabsScrollButtonNext {\n private readonly tabs = inject(TngTabs, { host: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tabs-scroll-button-next' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.tabs.isScrollButtonHidden() ? '' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabled(): '' | null {\n return this.tabs.isScrollButtonDisabled('next') ? '' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.tabs.isScrollButtonDisabled('next') ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.tabs.isScrollButtonDisabled('next') ? 'true' : 'false';\n }\n\n constructor() {\n this.tabs.registerScrollNextControl(this);\n }\n\n ngOnDestroy(): void {\n this.tabs.unregisterScrollNextControl(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n this.tabs.onScrollButtonClick('next', event);\n }\n}\n\n@Directive({\n selector: '[tngTab]',\n exportAs: 'tngTab',\n})\nexport class TngTab {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = inject(TngTabs, { host: true });\n private resolvedId = createTabId();\n private readonly registrationOrder = nextRegistrationOrder++;\n private lastKnownValue: TngTabsValue | null = null;\n private lastKnownDisabled = false;\n\n readonly valueInput = input<TngTabsValue | null | undefined, unknown>(undefined, {\n alias: 'value',\n transform: normalizeOptionalValueInput,\n });\n readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: normalizeBooleanInput,\n });\n readonly panelId = input<string | null | undefined, unknown>(undefined, {\n alias: 'panelId',\n transform: normalizeOptionalStringInput,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tab' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tab' as const;\n\n @HostBinding('attr.id')\n protected get id(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n return this.tabs.getTabIndex(this);\n }\n\n @HostBinding('attr.aria-selected')\n protected get ariaSelected(): 'true' | 'false' {\n return this.tabs.isTabSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n return this.tabs.getPanelIdForTab(this);\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.isDisabledInContext() ? 'true' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get hostDisabled(): '' | null {\n return this.isDisabledInContext() ? '' : null;\n }\n\n @HostBinding('attr.data-selected')\n protected get dataSelected(): 'true' | 'false' {\n return this.tabs.isTabSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocused(): 'true' | 'false' {\n return this.tabs.isTabFocused(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.isDisabledInContext() ? 'true' : 'false';\n }\n\n constructor() {\n this.tabs.registerTab(this);\n }\n\n ngOnInit(): void {\n this.syncResolvedIdFromHost();\n this.lastKnownValue = this.getValue();\n this.lastKnownDisabled = this.isDisabledInContext();\n }\n\n ngDoCheck(): void {\n const idChanged = this.syncResolvedIdFromHost();\n const currentValue = this.getValue();\n const currentDisabled = this.isDisabledInContext();\n\n if (\n idChanged ||\n !valuesEqual(this.lastKnownValue, currentValue) ||\n this.lastKnownDisabled !== currentDisabled\n ) {\n this.lastKnownValue = currentValue;\n this.lastKnownDisabled = currentDisabled;\n this.tabs.notifyTabMutated(this);\n }\n }\n\n ngOnDestroy(): void {\n this.tabs.unregisterTab(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n if (this.isDisabledInContext()) {\n event.preventDefault();\n return;\n }\n\n const target = event.target;\n if (target instanceof Element && target !== this.hostRef.nativeElement) {\n if (isFocusableInteractiveElement(target) && this.hostRef.nativeElement.contains(target)) {\n return;\n }\n }\n\n this.focusSelf();\n this.tabs.requestSelection(this, 'pointer');\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.isDisabledInContext()) {\n return;\n }\n\n this.tabs.onTabFocused(this, 'pointer');\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.tabs.handleTabKeydown(this, event);\n }\n\n getRegistrationOrder(): number {\n return this.registrationOrder;\n }\n\n getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n getItemId(): string {\n return this.resolvedId;\n }\n\n getValue(): TngTabsValue {\n const explicitValue = this.valueInput();\n if (explicitValue !== undefined && explicitValue !== null) {\n return explicitValue;\n }\n\n const hostValue = this.hostRef.nativeElement.getAttribute('value');\n if (hostValue !== null && hostValue.length > 0) {\n return hostValue;\n }\n\n return this.resolvedId;\n }\n\n getExplicitPanelId(): string | null {\n return this.panelId() ?? null;\n }\n\n isDisabledInContext(): boolean {\n if (this.tabs.isDisabled()) {\n return true;\n }\n\n return this.disabledInput();\n }\n\n focusSelf(): void {\n this.hostRef.nativeElement.focus();\n }\n\n private syncResolvedIdFromHost(): boolean {\n const hostId = this.hostRef.nativeElement.getAttribute('id');\n if (hostId === null || hostId.length === 0 || hostId === this.resolvedId) {\n return false;\n }\n\n this.resolvedId = hostId;\n return true;\n }\n}\n\n@Directive({\n selector: '[tngTabPanel]',\n exportAs: 'tngTabPanel',\n})\nexport class TngTabPanel {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = inject(TngTabs, { host: true });\n private resolvedId = createPanelId();\n private readonly registrationOrder = nextRegistrationOrder++;\n private mounted = true;\n private activated = false;\n private anchor: Comment | null = null;\n private lastKnownValue: TngTabsValue | null = null;\n\n readonly valueInput = input<TngTabsValue | null | undefined, unknown>(undefined, {\n alias: 'value',\n transform: normalizeOptionalValueInput,\n });\n readonly labelledById = input<string | null | undefined, unknown>(undefined, {\n alias: 'labelledById',\n transform: normalizeOptionalStringInput,\n });\n readonly unmountOnExit = input<boolean, unknown>(false, {\n alias: 'unmountOnExit',\n transform: normalizeBooleanInput,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tab-panel' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tabpanel' as const;\n\n @HostBinding('attr.id')\n protected get id(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledby(): string | null {\n return this.getExplicitLabelledById() ?? this.tabs.getTabIdForPanel(this);\n }\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n if (this.tabs.isPanelActive(this)) {\n this.markActivated();\n return null;\n }\n\n return '';\n }\n\n @HostBinding('attr.data-active')\n protected get dataActive(): 'true' | 'false' {\n return this.tabs.isPanelActive(this) ? 'true' : 'false';\n }\n\n constructor() {\n this.tabs.registerPanel(this);\n }\n\n ngOnInit(): void {\n this.syncResolvedIdFromHost();\n this.lastKnownValue = this.getValue();\n this.syncMountState();\n }\n\n ngDoCheck(): void {\n const idChanged = this.syncResolvedIdFromHost();\n const currentValue = this.getValue();\n if (idChanged || !valuesEqual(this.lastKnownValue, currentValue)) {\n this.lastKnownValue = currentValue;\n this.tabs.notifyPanelMutated();\n }\n\n this.syncMountState();\n }\n\n ngOnDestroy(): void {\n this.tabs.unregisterPanel(this);\n this.removeAnchor();\n }\n\n getRegistrationOrder(): number {\n return this.registrationOrder;\n }\n\n getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n getPanelId(): string {\n return this.resolvedId;\n }\n\n getValue(): TngTabsValue {\n const explicitValue = this.valueInput();\n if (explicitValue !== undefined && explicitValue !== null) {\n return explicitValue;\n }\n\n const hostValue = this.hostRef.nativeElement.getAttribute('value');\n if (hostValue !== null && hostValue.length > 0) {\n return hostValue;\n }\n\n return this.resolvedId;\n }\n\n getExplicitLabelledById(): string | null {\n return this.labelledById() ?? null;\n }\n\n hasActivated(): boolean {\n return this.activated;\n }\n\n markActivated(): void {\n this.activated = true;\n }\n\n private syncMountState(): void {\n const shouldMount = this.tabs.isPanelMounted(this);\n if (shouldMount) {\n this.mountHost();\n return;\n }\n\n this.unmountHost();\n }\n\n private mountHost(): void {\n if (this.mounted) {\n return;\n }\n\n const anchor = this.ensureAnchor();\n const parent = anchor.parentNode;\n if (parent === null) {\n return;\n }\n\n parent.insertBefore(this.hostRef.nativeElement, anchor);\n this.mounted = true;\n }\n\n private unmountHost(): void {\n if (!this.mounted) {\n return;\n }\n\n const host = this.hostRef.nativeElement;\n const parent = host.parentNode;\n if (parent === null) {\n return;\n }\n\n const anchor = this.ensureAnchor();\n if (anchor.parentNode !== parent) {\n parent.insertBefore(anchor, host);\n }\n\n parent.removeChild(host);\n this.mounted = false;\n\n if (!this.tabs.isKeepAliveEnabled() || this.unmountOnExit()) {\n this.resetTransientFormState();\n }\n }\n\n private ensureAnchor(): Comment {\n if (this.anchor !== null) {\n return this.anchor;\n }\n\n this.anchor = this.hostRef.nativeElement.ownerDocument.createComment('tng-tab-panel');\n return this.anchor;\n }\n\n private removeAnchor(): void {\n if (this.anchor === null) {\n return;\n }\n\n this.anchor.parentNode?.removeChild(this.anchor);\n this.anchor = null;\n }\n\n private resetTransientFormState(): void {\n const controls = this.hostRef.nativeElement.querySelectorAll<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >('input, textarea, select');\n\n controls.forEach((control) => {\n if (control instanceof HTMLInputElement) {\n if (control.type === 'checkbox' || control.type === 'radio') {\n control.checked = control.defaultChecked;\n } else {\n control.value = '';\n }\n return;\n }\n\n if (control instanceof HTMLTextAreaElement) {\n control.value = '';\n return;\n }\n\n control.selectedIndex = -1;\n });\n }\n\n private syncResolvedIdFromHost(): boolean {\n const hostId = this.hostRef.nativeElement.getAttribute('id');\n if (hostId === null || hostId.length === 0 || hostId === this.resolvedId) {\n return false;\n }\n\n this.resolvedId = hostId;\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-tabs.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/navigation/tabs/tng-tabs.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DoCheck, OnDestroy\n, OnInit\n} from '@angular/core';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n output\n} from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\n\ntype TngTabsDirection = 'ltr' | 'rtl' | 'auto';\ntype TngTabsOrientation = 'horizontal' | 'vertical';\ntype TngTabsActivationMode = 'auto' | 'manual';\ntype TngTabsScrollButtonsMode = 'auto' | 'off' | 'on';\ntype TngTabsFocusMove = 'next' | 'prev' | 'first' | 'last';\ntype TngTabsFocusTrigger = 'pointer' | 'keyboard' | 'programmatic';\ntype TngTabsSelectionTrigger = 'pointer' | 'keyboard' | 'programmatic';\n\nexport type TngTabsValue = string | number;\n\nexport type TngTabChangeEvent = Readonly<{\n value: TngTabsValue;\n previousValue: TngTabsValue | null;\n trigger: TngTabsSelectionTrigger;\n}>;\n\nexport type TngTabsFocusChangeEvent = Readonly<{\n value: TngTabsValue;\n previousValue: TngTabsValue | null;\n trigger: TngTabsFocusTrigger;\n}>;\n\nconst createTabId = createTngIdFactory('tng-tab');\nconst createPanelId = createTngIdFactory('tng-tab-panel');\nlet nextRegistrationOrder = 0;\n\nfunction normalizeBooleanInput(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (normalized === '' || normalized === 'true') {\n return true;\n }\n\n if (normalized === 'false') {\n return false;\n }\n }\n\n return false;\n}\n\nfunction normalizeOptionalBooleanInput(value: unknown): boolean | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return normalizeBooleanInput(value);\n}\n\nfunction normalizeDirectionInput(value: unknown): TngTabsDirection {\n if (value === 'ltr' || value === 'rtl' || value === 'auto') {\n return value;\n }\n\n return 'auto';\n}\n\nfunction normalizeOrientationInput(value: unknown): TngTabsOrientation {\n return value === 'vertical' ? 'vertical' : 'horizontal';\n}\n\nfunction normalizeActivationInput(value: unknown): TngTabsActivationMode {\n return value === 'manual' ? 'manual' : 'auto';\n}\n\nfunction normalizeScrollButtonsInput(value: unknown): TngTabsScrollButtonsMode {\n if (value === 'auto' || value === 'on' || value === 'off') {\n return value;\n }\n\n if (value === '' || value === true || value === 'true') {\n return 'auto';\n }\n\n return 'off';\n}\n\nfunction normalizeOptionalValueInput(value: unknown): TngTabsValue | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'number' || typeof value === 'string') {\n return value;\n }\n\n return undefined;\n}\n\nfunction normalizeOptionalStringInput(value: unknown): string | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') {\n return String(value);\n }\n\n return undefined;\n}\n\nfunction valuesEqual(a: TngTabsValue | null, b: TngTabsValue | null): boolean {\n return a === b;\n}\n\nfunction compareByDomPosition(\n elements:{aElement: HTMLElement,\n bElement: HTMLElement,},\n orders:{aOrder: number,\n bOrder: number,},\n): number {\n const { aElement, bElement } = elements;\n const { aOrder, bOrder } = orders;\n\n if (aElement === bElement) {\n return 0;\n }\n\n const relativePosition = aElement.compareDocumentPosition(bElement);\n if (relativePosition & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n\n if (relativePosition & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n\n return aOrder - bOrder;\n}\n\nfunction isFocusableInteractiveElement(element: Element): boolean {\n return (\n element.matches('a[href]') ||\n element.matches('button') ||\n element.matches('input') ||\n element.matches('select') ||\n element.matches('textarea') ||\n element.matches('[tabindex]') ||\n element.matches('[contenteditable=\"true\"]')\n );\n}\n\n@Directive({\n selector: '[tngTabs]',\n exportAs: 'tngTabs',\n})\nexport class TngTabs implements DoCheck {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = new Set<TngTab>();\n private readonly panels = new Set<TngTabPanel>();\n private tabList: TngTabList | null = null;\n private scrollPrevControl: TngTabsScrollButtonPrev | null = null;\n private scrollNextControl: TngTabsScrollButtonNext | null = null;\n private uncontrolledValue: TngTabsValue | null = null;\n private focusedValue: TngTabsValue | null = null;\n private domFocusedValue: TngTabsValue | null = null;\n private hasUserSelection = false;\n private initialized = false;\n\n public readonly value = input<TngTabsValue | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalValueInput,\n });\n public readonly defaultValue = input<TngTabsValue | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalValueInput,\n });\n public readonly activation = input<TngTabsActivationMode, unknown>('auto', {\n transform: normalizeActivationInput,\n });\n public readonly orientation = input<TngTabsOrientation, unknown>('horizontal', {\n transform: normalizeOrientationInput,\n });\n public readonly scrollButtons = input<TngTabsScrollButtonsMode, unknown>('off', {\n transform: normalizeScrollButtonsInput,\n });\n public readonly loop = input<boolean, unknown>(true, {\n transform: normalizeBooleanInput,\n });\n public readonly dir = input<TngTabsDirection, unknown>('auto', {\n transform: normalizeDirectionInput,\n });\n public readonly disabled = input<boolean, unknown>(false, {\n transform: normalizeBooleanInput,\n });\n public readonly lazy = input<boolean | undefined, unknown>(undefined, {\n transform: normalizeOptionalBooleanInput,\n });\n public readonly keepAlive = input<boolean | undefined, unknown>(undefined, {\n transform: normalizeOptionalBooleanInput,\n });\n\n public readonly valueChange = output<TngTabsValue | null>();\n public readonly tabChange = output<TngTabChangeEvent>();\n public readonly focusChange = output<TngTabsFocusChangeEvent>();\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tabs' as const;\n\n @HostBinding('attr.data-orientation')\n protected get dataOrientation(): TngTabsOrientation {\n return this.orientation();\n }\n\n @HostBinding('attr.data-activation')\n protected get dataActivation(): TngTabsActivationMode {\n return this.activation();\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.disabled() ? 'true' : 'false';\n }\n\n public ngDoCheck(): void {\n this.syncStateFromRegistry();\n }\n\n public isDisabled(): boolean {\n return this.disabled();\n }\n\n public isKeepAliveEnabled(): boolean {\n return this.keepAlive() ?? true;\n }\n\n public isLazyEnabled(): boolean {\n return this.lazy() ?? false;\n }\n\n public select(value: TngTabsValue): void {\n const targetTab = this.findEnabledTabByValue(value);\n if (targetTab === null) {\n return;\n }\n\n this.requestSelection(targetTab, 'programmatic');\n }\n\n public focus(value: TngTabsValue): void {\n const targetTab = this.findEnabledTabByValue(value);\n if (targetTab === null) {\n return;\n }\n\n this.moveFocusToTab(targetTab, 'programmatic');\n if (this.activation() === 'auto') {\n this.requestSelection(targetTab, 'programmatic');\n }\n }\n\n public next(): void {\n this.moveFocusFromCurrentTab('next', 'programmatic');\n }\n\n public prev(): void {\n this.moveFocusFromCurrentTab('prev', 'programmatic');\n }\n\n public registerTab(tab: TngTab): void {\n this.tabs.add(tab);\n }\n\n public unregisterTab(tab: TngTab): void {\n const orderedTabs = this.getOrderedTabs();\n const removedIndex = orderedTabs.indexOf(tab);\n const removedValue = tab.getValue();\n const selectedValue = this.getEffectiveSelectedValue();\n const focusedValue = this.resolveCurrentTabStopValue();\n\n this.tabs.delete(tab);\n\n if (selectedValue !== null && valuesEqual(selectedValue, removedValue)) {\n const nextSelectedValue = this.resolveNeighborValueOnRemoval(orderedTabs, removedIndex);\n this.applyLifecycleSelection(nextSelectedValue);\n }\n\n if (focusedValue !== null && valuesEqual(focusedValue, removedValue)) {\n const nextFocusedValue = this.resolveNeighborValueOnRemoval(orderedTabs, removedIndex);\n this.focusedValue = nextFocusedValue;\n }\n\n if (this.domFocusedValue !== null && valuesEqual(this.domFocusedValue, removedValue)) {\n this.domFocusedValue = null;\n }\n\n this.syncStateFromRegistry();\n }\n\n private notifySelectedValueChanged(tab: TngTab): void {\n const selectedValue = this.getEffectiveSelectedValue();\n if (selectedValue !== null && valuesEqual(selectedValue, tab.getValue()) && tab.isDisabledInContext()) {\n const replacement = this.resolveNeighborForDisabledTab(tab);\n this.applyLifecycleSelection(replacement);\n }\n }\n\n public notifyTabMutated(tab: TngTab): void {\n this.notifySelectedValueChanged(tab);\n\n const focusedValue = this.resolveCurrentTabStopValue();\n if (focusedValue !== null && valuesEqual(focusedValue, tab.getValue()) && tab.isDisabledInContext()) {\n this.focusedValue = this.resolveNeighborForDisabledTab(tab);\n }\n\n if (this.domFocusedValue !== null && valuesEqual(this.domFocusedValue, tab.getValue()) && tab.isDisabledInContext()) {\n this.domFocusedValue = null;\n }\n\n this.syncStateFromRegistry();\n }\n\n public registerPanel(panel: TngTabPanel): void {\n this.panels.add(panel);\n }\n\n public unregisterPanel(panel: TngTabPanel): void {\n this.panels.delete(panel);\n this.syncStateFromRegistry();\n }\n\n public notifyPanelMutated(): void {\n this.syncStateFromRegistry();\n }\n\n public registerScrollPrevControl(control: TngTabsScrollButtonPrev): void {\n this.scrollPrevControl = control;\n }\n\n public unregisterScrollPrevControl(control: TngTabsScrollButtonPrev): void {\n if (this.scrollPrevControl === control) {\n this.scrollPrevControl = null;\n }\n }\n\n public registerScrollNextControl(control: TngTabsScrollButtonNext): void {\n this.scrollNextControl = control;\n }\n\n public unregisterScrollNextControl(control: TngTabsScrollButtonNext): void {\n if (this.scrollNextControl === control) {\n this.scrollNextControl = null;\n }\n }\n\n public registerTabList(tabList: TngTabList): void {\n this.tabList = tabList;\n }\n\n public unregisterTabList(tabList: TngTabList): void {\n if (this.tabList !== tabList) {\n return;\n }\n\n this.tabList = null;\n }\n\n public onTabListScrolled(): void {}\n\n public onTabListFocused(): void {\n if (this.disabled()) {\n return;\n }\n\n const enabledTabs = this.getEnabledTabs();\n if (enabledTabs.length === 0) {\n return;\n }\n\n const currentTabStopValue = this.resolveCurrentTabStopValue(enabledTabs);\n const currentTab =\n this.findEnabledTabByValue(currentTabStopValue, enabledTabs) ??\n enabledTabs[0] ??\n null;\n if (currentTab === null) {\n return;\n }\n\n currentTab.focusSelf();\n }\n\n public handleTabListWheel(event: WheelEvent): void {\n if (this.orientation() !== 'horizontal') {\n return;\n }\n\n if (!this.isTabListOverflowing()) {\n return;\n }\n\n const dominantDelta = Math.abs(event.deltaX) > Math.abs(event.deltaY) ? event.deltaX : event.deltaY;\n if (dominantDelta === 0) {\n return;\n }\n\n event.preventDefault();\n this.scrollTabListBy(dominantDelta);\n }\n\n public isScrollButtonHidden(): boolean {\n return !this.shouldShowScrollButtons();\n }\n\n public isScrollButtonDisabled(direction: 'next' | 'prev'): boolean {\n if (this.isScrollButtonHidden()) {\n return true;\n }\n\n const tabListElement = this.getTabListElement();\n if (tabListElement === null) {\n return true;\n }\n\n const maxScrollLeft = Math.max(0, tabListElement.scrollWidth - tabListElement.clientWidth);\n if (direction === 'prev') {\n return tabListElement.scrollLeft <= 0;\n }\n\n return tabListElement.scrollLeft >= maxScrollLeft;\n }\n\n public onScrollButtonClick(direction: 'next' | 'prev', event: MouseEvent): void {\n if (this.isScrollButtonDisabled(direction)) {\n event.preventDefault();\n return;\n }\n\n const delta = direction === 'prev' ? -this.resolveTabListScrollStep() : this.resolveTabListScrollStep();\n this.scrollTabListBy(delta);\n event.preventDefault();\n }\n\n public getTabIndex(tab: TngTab): string {\n if (this.disabled() || tab.isDisabledInContext()) {\n return '-1';\n }\n\n const tabStop = this.resolveCurrentTabStopValue();\n if (tabStop === null) {\n return '-1';\n }\n\n return valuesEqual(tabStop, tab.getValue()) ? '0' : '-1';\n }\n\n public isTabSelected(tab: TngTab): boolean {\n const selectedValue = this.getEffectiveSelectedValue();\n if (selectedValue === null) {\n return false;\n }\n\n return valuesEqual(selectedValue, tab.getValue());\n }\n\n public isTabFocused(tab: TngTab): boolean {\n return this.domFocusedValue !== null && valuesEqual(this.domFocusedValue, tab.getValue());\n }\n\n public getPanelIdForTab(tab: TngTab): string | null {\n const explicitPanelId = tab.getExplicitPanelId();\n if (explicitPanelId !== null) {\n return explicitPanelId;\n }\n\n const matchedPanel = this.findPanelByValue(tab.getValue());\n if (matchedPanel !== null) {\n return matchedPanel.getPanelId();\n }\n\n const tabs = this.getOrderedTabs();\n const panels = this.getOrderedPanels();\n const tabIndex = tabs.indexOf(tab);\n if (tabIndex < 0) {\n return null;\n }\n\n return panels[tabIndex]?.getPanelId() ?? null;\n }\n\n public getTabIdForPanel(panel: TngTabPanel): string | null {\n const explicitLabelledById = panel.getExplicitLabelledById();\n if (explicitLabelledById !== null) {\n return explicitLabelledById;\n }\n\n const matchedTab = this.findTabByValue(panel.getValue());\n if (matchedTab !== null) {\n return matchedTab.getItemId();\n }\n\n const tabs = this.getOrderedTabs();\n const panels = this.getOrderedPanels();\n const panelIndex = panels.indexOf(panel);\n if (panelIndex < 0) {\n return null;\n }\n\n return tabs[panelIndex]?.getItemId() ?? null;\n }\n\n public isPanelActive(panel: TngTabPanel): boolean {\n const selectedValue = this.getEffectiveSelectedValue();\n if (selectedValue === null) {\n return false;\n }\n\n return valuesEqual(selectedValue, panel.getValue());\n }\n\n public isPanelMounted(panel: TngTabPanel): boolean {\n if (this.isPanelActive(panel)) {\n panel.markActivated();\n return true;\n }\n\n const keepAlive = panel.unmountOnExit() ? false : this.isKeepAliveEnabled();\n if (!keepAlive) {\n return false;\n }\n\n if (!this.isLazyEnabled()) {\n return true;\n }\n\n return panel.hasActivated();\n }\n\n public onTabFocused(tab: TngTab, trigger: TngTabsFocusTrigger): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n this.setFocusedValue(tab.getValue(), trigger);\n this.domFocusedValue = tab.getValue();\n this.scrollTabIntoView(tab);\n }\n\n public onTabListFocusOut(event: FocusEvent): void {\n const nextTarget = event.relatedTarget;\n if (!(nextTarget instanceof Element)) {\n this.domFocusedValue = null;\n return;\n }\n\n const tabListElement = this.getTabListElement();\n if (tabListElement?.contains(nextTarget)) {\n return;\n }\n\n this.domFocusedValue = null;\n }\n\n public requestSelection(tab: TngTab, trigger: TngTabsSelectionTrigger): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n const nextValue = tab.getValue();\n const previousValue = this.getEffectiveSelectedValue();\n if (previousValue !== null && valuesEqual(previousValue, nextValue)) {\n return;\n }\n\n if (!this.isControlled()) {\n this.uncontrolledValue = nextValue;\n this.hasUserSelection = true;\n }\n\n this.focusedValue = nextValue;\n this.valueChange.emit(nextValue);\n this.tabChange.emit({\n value: nextValue,\n previousValue,\n trigger,\n });\n\n this.scrollTabIntoView(tab);\n this.syncStateFromRegistry();\n }\n\n private hanlsFocusMove(tab: TngTab, event: KeyboardEvent): void {\n const focusMove = this.resolveFocusMove(event.key);\n if (focusMove !== null) {\n event.preventDefault();\n this.moveFocusByAction(tab, focusMove, 'keyboard');\n return;\n }\n }\n\n public handleTabKeydown(tab: TngTab, event: KeyboardEvent): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n this.hanlsFocusMove(tab, event);\n\n if (event.key !== 'Enter' && event.key !== ' ' && event.key !== 'Spacebar') {\n return;\n }\n\n if (this.activation() === 'manual' || this.activation() === 'auto') {\n event.preventDefault();\n this.requestSelection(tab, 'keyboard');\n }\n }\n\n private resolveFocusMove(key: string): TngTabsFocusMove | null {\n if (key === 'Home') {\n return 'first';\n }\n\n if (key === 'End') {\n return 'last';\n }\n\n if (this.orientation() === 'vertical') {\n if (key === 'ArrowDown') {\n return 'next';\n }\n\n if (key === 'ArrowUp') {\n return 'prev';\n }\n\n return null;\n }\n\n if (key !== 'ArrowLeft' && key !== 'ArrowRight') {\n return null;\n }\n\n const isRtl = this.resolveDirection() === 'rtl';\n const moveToNext = key === (isRtl ? 'ArrowLeft' : 'ArrowRight');\n return moveToNext ? 'next' : 'prev';\n }\n\n private moveFocusByAction(\n sourceTab: TngTab,\n action: TngTabsFocusMove,\n trigger: TngTabsFocusTrigger,\n ): void {\n const enabledTabs = this.getEnabledTabs();\n if (enabledTabs.length === 0) {\n return;\n }\n\n const currentIndex = enabledTabs.indexOf(sourceTab);\n if (currentIndex < 0) {\n return;\n }\n\n const nextTab = this.resolveFocusTarget(enabledTabs, currentIndex, action);\n if (nextTab === null) {\n return;\n }\n\n this.moveFocusToTab(nextTab, trigger);\n if (this.activation() === 'auto') {\n this.requestSelection(nextTab, trigger === 'programmatic' ? 'programmatic' : 'keyboard');\n }\n }\n\n private moveFocusToTab(tab: TngTab, trigger: TngTabsFocusTrigger): void {\n if (this.disabled() || tab.isDisabledInContext()) {\n return;\n }\n\n this.setFocusedValue(tab.getValue(), trigger);\n tab.focusSelf();\n }\n\n private moveFocusFromCurrentTab(\n direction: 'next' | 'prev',\n trigger: TngTabsFocusTrigger,\n ): void {\n const enabledTabs = this.getEnabledTabs();\n if (enabledTabs.length === 0) {\n return;\n }\n\n const activeElement = this.hostRef.nativeElement.ownerDocument?.activeElement ?? null;\n const activeTab = this.findTabContainingElement(activeElement);\n const currentTab = activeTab ?? this.findEnabledTabByValue(this.resolveCurrentTabStopValue(), enabledTabs);\n if (currentTab === null) {\n return;\n }\n\n const currentIndex = enabledTabs.indexOf(currentTab);\n if (currentIndex < 0) {\n return;\n }\n\n const nextTab = this.resolveFocusTarget(enabledTabs, currentIndex, direction);\n if (nextTab === null) {\n return;\n }\n\n this.moveFocusToTab(nextTab, trigger);\n if (this.activation() === 'auto') {\n this.requestSelection(nextTab, trigger === 'programmatic' ? 'programmatic' : 'keyboard');\n }\n }\n\n private resolveFocusTarget(\n enabledTabs: readonly TngTab[],\n currentIndex: number,\n action: TngTabsFocusMove,\n ): TngTab | null {\n if (enabledTabs.length === 0 || currentIndex < 0) {\n return null;\n }\n\n if (action === 'first') {\n return enabledTabs[0] ?? null;\n }\n\n if (action === 'last') {\n return enabledTabs[enabledTabs.length - 1] ?? null;\n }\n\n if (action === 'next') {\n if (currentIndex + 1 < enabledTabs.length) {\n return enabledTabs[currentIndex + 1] ?? null;\n }\n\n return this.loop() ? (enabledTabs[0] ?? null) : (enabledTabs[currentIndex] ?? null);\n }\n\n if (currentIndex - 1 >= 0) {\n return enabledTabs[currentIndex - 1] ?? null;\n }\n\n return this.loop()\n ? (enabledTabs[enabledTabs.length - 1] ?? null)\n : (enabledTabs[currentIndex] ?? null);\n }\n\n private setFocusedValue(value: TngTabsValue, trigger: TngTabsFocusTrigger): void {\n const previousValue = this.focusedValue;\n if (previousValue !== null && valuesEqual(previousValue, value)) {\n return;\n }\n\n this.focusedValue = value;\n this.focusChange.emit({\n value,\n previousValue,\n trigger,\n });\n }\n\n private applyLifecycleSelection(nextValue: TngTabsValue | null): void {\n if (this.isControlled()) {\n return;\n }\n\n this.uncontrolledValue = nextValue;\n if (nextValue !== null) {\n this.focusedValue = nextValue;\n }\n }\n\n private resolveDirection(): 'ltr' | 'rtl' {\n const configuredDirection = this.dir();\n if (configuredDirection !== 'auto') {\n return configuredDirection;\n }\n\n const host = this.hostRef.nativeElement;\n const nearestDirection =\n host.closest<HTMLElement>('[dir]')?.getAttribute('dir') ??\n host.ownerDocument?.documentElement.getAttribute('dir');\n\n return nearestDirection?.toLowerCase() === 'rtl' ? 'rtl' : 'ltr';\n }\n\n private getSelectedValue(): TngTabsValue | null {\n if (this.isControlled()) {\n return this.value()!;\n }\n\n return this.uncontrolledValue;\n }\n\n private getEffectiveSelectedValue(enabledTabs = this.getEnabledTabs()): TngTabsValue | null {\n if (enabledTabs.length === 0) {\n return null;\n }\n\n const selectedValue = this.getSelectedValue();\n if (selectedValue !== null && this.findEnabledTabByValue(selectedValue, enabledTabs) !== null) {\n return selectedValue;\n }\n\n return enabledTabs[0]?.getValue() ?? null;\n }\n\n private resolveCurrentTabStopValue(enabledTabs = this.getEnabledTabs()): TngTabsValue | null {\n if (enabledTabs.length === 0) {\n return null;\n }\n\n if (this.focusedValue !== null && this.findEnabledTabByValue(this.focusedValue, enabledTabs) !== null) {\n return this.focusedValue;\n }\n\n const selectedValue = this.getEffectiveSelectedValue(enabledTabs);\n if (selectedValue !== null) {\n return selectedValue;\n }\n\n return enabledTabs[0]?.getValue() ?? null;\n }\n\n private syncStateHandleUnInitialized(enabledTabs: TngTab[]): void {\n if (!this.isControlled()) {\n const defaultValue = this.defaultValue();\n if (defaultValue !== undefined && defaultValue !== null) {\n this.uncontrolledValue = this.findEnabledTabByValue(defaultValue, enabledTabs)?.getValue() ?? null;\n } else {\n this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;\n }\n }\n }\n\n private syncStateFromRegistry(): void {\n const enabledTabs = this.getEnabledTabs();\n if (!this.initialized) {\n this.initialized = true;\n this.syncStateHandleUnInitialized(enabledTabs);\n }\n \n\n if (enabledTabs.length === 0) {\n if (!this.isControlled()) {\n this.uncontrolledValue = null;\n }\n this.focusedValue = null;\n this.domFocusedValue = null;\n return;\n }\n\n if (!this.isControlled()) {\n const defaultValue = this.defaultValue();\n \n if (!this.hasUserSelection && defaultValue !== undefined && defaultValue !== null) {\n const defaultTab = this.findEnabledTabByValue(defaultValue, enabledTabs);\n \n if (defaultTab !== null) {\n this.uncontrolledValue = defaultTab.getValue();\n } else {\n this.uncontrolledValue ??= enabledTabs[0]?.getValue() ?? null;\n }\n } else {\n const current = this.uncontrolledValue;\n \n if (current === null || this.findEnabledTabByValue(current, enabledTabs) === null) {\n this.uncontrolledValue = enabledTabs[0]?.getValue() ?? null;\n }\n }\n }\n\n const selectedValue = this.getEffectiveSelectedValue(enabledTabs);\n if (selectedValue !== null) {\n this.findPanelByValue(selectedValue)?.markActivated();\n }\n\n this.focusedValue = this.resolveCurrentTabStopValue(enabledTabs);\n }\n\n private resolveNeighborValueOnRemoval(\n orderedTabs: readonly TngTab[],\n removedIndex: number,\n ): TngTabsValue | null {\n if (removedIndex < 0) {\n return this.getEnabledTabs()[0]?.getValue() ?? null;\n }\n\n for (let index = removedIndex + 1; index < orderedTabs.length; index += 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n for (let index = removedIndex - 1; index >= 0; index -= 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n return null;\n }\n\n private resolveNeighborForDisabledTab(tab: TngTab): TngTabsValue | null {\n const orderedTabs = this.getOrderedTabs();\n const currentIndex = orderedTabs.indexOf(tab);\n if (currentIndex < 0) {\n return this.getEnabledTabs()[0]?.getValue() ?? null;\n }\n\n for (let index = currentIndex - 1; index >= 0; index -= 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n for (let index = currentIndex + 1; index < orderedTabs.length; index += 1) {\n const candidate = orderedTabs[index];\n if (candidate !== undefined && !candidate.isDisabledInContext()) {\n return candidate.getValue();\n }\n }\n\n return null;\n }\n\n private isControlled(): boolean {\n const value = this.value();\n return value !== undefined && value !== null;\n }\n\n private getOrderedTabs(): TngTab[] {\n const tabs = Array.from(this.tabs);\n tabs.sort((a, b) =>\n compareByDomPosition(\n {aElement: a.getHostElement(),\n bElement: b.getHostElement(),},\n {aOrder: a.getRegistrationOrder(),\n bOrder: b.getRegistrationOrder(),},\n ),\n );\n return tabs;\n }\n\n private getEnabledTabs(): TngTab[] {\n return this.getOrderedTabs().filter((tab) => !tab.isDisabledInContext());\n }\n\n private getOrderedPanels(): TngTabPanel[] {\n const panels = Array.from(this.panels);\n panels.sort((a, b) =>\n compareByDomPosition(\n {aElement: a.getHostElement(),\n bElement: b.getHostElement(),},\n {aOrder: a.getRegistrationOrder(),\n bOrder: b.getRegistrationOrder(),},\n ),\n );\n return panels;\n }\n\n private findTabByValue(value: TngTabsValue | null): TngTab | null {\n if (value === null) {\n return null;\n }\n\n const tabs = this.getOrderedTabs();\n return tabs.find((tab) => valuesEqual(tab.getValue(), value)) ?? null;\n }\n\n private findEnabledTabByValue(\n value: TngTabsValue | null,\n enabledTabs = this.getEnabledTabs(),\n ): TngTab | null {\n if (value === null) {\n return null;\n }\n\n return enabledTabs.find((tab) => valuesEqual(tab.getValue(), value)) ?? null;\n }\n\n private findPanelByValue(value: TngTabsValue | null): TngTabPanel | null {\n if (value === null) {\n return null;\n }\n\n const panels = this.getOrderedPanels();\n return panels.find((panel) => valuesEqual(panel.getValue(), value)) ?? null;\n }\n\n private findTabContainingElement(element: Element | null): TngTab | null {\n if (element === null) {\n return null;\n }\n\n const tabs = this.getOrderedTabs();\n return (\n tabs.find((tab) => {\n const host = tab.getHostElement();\n return host === element || host.contains(element);\n }) ?? null\n );\n }\n\n private getTabListElement(): HTMLElement | null {\n return this.tabList?.getHostElement() ?? null;\n }\n\n private isTabListOverflowing(): boolean {\n const tabListElement = this.getTabListElement();\n if (tabListElement === null) {\n return false;\n }\n\n return tabListElement.scrollWidth > tabListElement.clientWidth;\n }\n\n private shouldShowScrollButtons(): boolean {\n if (this.scrollPrevControl === null && this.scrollNextControl === null) {\n return false;\n }\n\n const mode = this.scrollButtons();\n if (mode === 'on') {\n return true;\n }\n\n if (mode !== 'auto') {\n return false;\n }\n\n return this.isTabListOverflowing();\n }\n\n private resolveTabListScrollStep(): number {\n const tabListElement = this.getTabListElement();\n if (tabListElement === null) {\n return 120;\n }\n\n return Math.max(80, Math.round(tabListElement.clientWidth * 0.7));\n }\n\n private scrollTabListBy(delta: number): void {\n const tabListElement = this.getTabListElement();\n if (tabListElement === null || delta === 0) {\n return;\n }\n\n tabListElement.scrollLeft += delta;\n }\n\n private scrollTabIntoView(tab: TngTab): void {\n if (!this.isTabListOverflowing()) {\n return;\n }\n\n const host = tab.getHostElement();\n const scrollIntoView = host.scrollIntoView as\n | ((options?: ScrollIntoViewOptions) => void)\n | undefined;\n if (typeof scrollIntoView !== 'function') {\n return;\n }\n\n scrollIntoView.call(host, {\n block: 'nearest',\n inline: 'nearest',\n });\n }\n}\n\n@Directive({\n selector: '[tngTabList]',\n exportAs: 'tngTabList',\n})\nexport class TngTabList implements OnDestroy {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = inject(TngTabs, { host: true });\n\n public readonly ariaLabel = input<string | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalStringInput,\n });\n public readonly ariaLabelledby = input<string | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalStringInput,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tab-list' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tablist' as const;\n\n @HostBinding('attr.tabindex')\n protected readonly tabIndex = '-1' as const;\n\n @HostBinding('attr.aria-orientation')\n protected get ariaOrientation(): TngTabsOrientation {\n return this.tabs.orientation();\n }\n\n @HostBinding('attr.aria-label')\n protected get hostAriaLabel(): string | null {\n return this.ariaLabel() ?? null;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get hostAriaLabelledby(): string | null {\n return this.ariaLabelledby() ?? null;\n }\n\n public constructor() {\n this.tabs.registerTabList(this);\n }\n\n public ngOnDestroy(): void {\n this.tabs.unregisterTabList(this);\n }\n\n @HostListener('wheel', ['$event'])\n protected onWheel(event: WheelEvent): void {\n this.tabs.handleTabListWheel(event);\n }\n\n @HostListener('scroll')\n protected onScroll(): void {\n this.tabs.onTabListScrolled();\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusout(event: FocusEvent): void {\n this.tabs.onTabListFocusOut(event);\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n this.tabs.onTabListFocused();\n }\n\n public getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n}\n\n@Directive({\n selector: '[tngTabsScrollButtonPrev]',\n exportAs: 'tngTabsScrollButtonPrev',\n})\nexport class TngTabsScrollButtonPrev implements OnDestroy {\n private readonly tabs = inject(TngTabs, { host: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tabs-scroll-button-prev' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.tabs.isScrollButtonHidden() ? '' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabled(): '' | null {\n return this.tabs.isScrollButtonDisabled('prev') ? '' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.tabs.isScrollButtonDisabled('prev') ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.tabs.isScrollButtonDisabled('prev') ? 'true' : 'false';\n }\n\n public constructor() {\n this.tabs.registerScrollPrevControl(this);\n }\n\n public ngOnDestroy(): void {\n this.tabs.unregisterScrollPrevControl(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n this.tabs.onScrollButtonClick('prev', event);\n }\n}\n\n@Directive({\n selector: '[tngTabsScrollButtonNext]',\n exportAs: 'tngTabsScrollButtonNext',\n})\nexport class TngTabsScrollButtonNext implements OnDestroy {\n private readonly tabs = inject(TngTabs, { host: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tabs-scroll-button-next' as const;\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n return this.tabs.isScrollButtonHidden() ? '' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get disabled(): '' | null {\n return this.tabs.isScrollButtonDisabled('next') ? '' : null;\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.tabs.isScrollButtonDisabled('next') ? 'true' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.tabs.isScrollButtonDisabled('next') ? 'true' : 'false';\n }\n\n public constructor() {\n this.tabs.registerScrollNextControl(this);\n }\n\n public ngOnDestroy(): void {\n this.tabs.unregisterScrollNextControl(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n this.tabs.onScrollButtonClick('next', event);\n }\n}\n\n@Directive({\n selector: '[tngTab]',\n exportAs: 'tngTab',\n})\nexport class TngTab implements DoCheck, OnDestroy, OnInit {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = inject(TngTabs, { host: true });\n private resolvedId = createTabId();\n private readonly registrationOrder = nextRegistrationOrder++;\n private lastKnownValue: TngTabsValue | null = null;\n private lastKnownDisabled = false;\n\n public readonly valueInput = input<TngTabsValue | null | undefined, unknown>(undefined, {\n alias: 'value',\n transform: normalizeOptionalValueInput,\n });\n public readonly disabledInput = input<boolean, unknown>(false, {\n alias: 'disabled',\n transform: normalizeBooleanInput,\n });\n public readonly panelId = input<string | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalStringInput,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tab' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tab' as const;\n\n @HostBinding('attr.id')\n protected get id(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.tabindex')\n protected get tabIndex(): string {\n return this.tabs.getTabIndex(this);\n }\n\n @HostBinding('attr.aria-selected')\n protected get ariaSelected(): 'true' | 'false' {\n return this.tabs.isTabSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n return this.tabs.getPanelIdForTab(this);\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.isDisabledInContext() ? 'true' : null;\n }\n\n @HostBinding('attr.disabled')\n protected get hostDisabled(): '' | null {\n return this.isDisabledInContext() ? '' : null;\n }\n\n @HostBinding('attr.data-selected')\n protected get dataSelected(): 'true' | 'false' {\n return this.tabs.isTabSelected(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocused(): 'true' | 'false' {\n return this.tabs.isTabFocused(this) ? 'true' : 'false';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): 'true' | 'false' {\n return this.isDisabledInContext() ? 'true' : 'false';\n }\n\n public constructor() {\n this.tabs.registerTab(this);\n }\n\n public ngOnInit(): void {\n this.syncResolvedIdFromHost();\n this.lastKnownValue = this.getValue();\n this.lastKnownDisabled = this.isDisabledInContext();\n }\n\n public ngDoCheck(): void {\n const idChanged = this.syncResolvedIdFromHost();\n const currentValue = this.getValue();\n const currentDisabled = this.isDisabledInContext();\n\n if (\n idChanged ||\n !valuesEqual(this.lastKnownValue, currentValue) ||\n this.lastKnownDisabled !== currentDisabled\n ) {\n this.lastKnownValue = currentValue;\n this.lastKnownDisabled = currentDisabled;\n this.tabs.notifyTabMutated(this);\n }\n }\n\n public ngOnDestroy(): void {\n this.tabs.unregisterTab(this);\n }\n\n @HostListener('click', ['$event'])\n protected onClick(event: MouseEvent): void {\n if (this.isDisabledInContext()) {\n event.preventDefault();\n return;\n }\n\n const target = event.target;\n if (target instanceof Element && target !== this.hostRef.nativeElement) {\n if (isFocusableInteractiveElement(target) && this.hostRef.nativeElement.contains(target)) {\n return;\n }\n }\n\n this.focusSelf();\n this.tabs.requestSelection(this, 'pointer');\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.isDisabledInContext()) {\n return;\n }\n\n this.tabs.onTabFocused(this, 'pointer');\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n this.tabs.handleTabKeydown(this, event);\n }\n\n public getRegistrationOrder(): number {\n return this.registrationOrder;\n }\n\n public getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n public getItemId(): string {\n return this.resolvedId;\n }\n\n public getValue(): TngTabsValue {\n const explicitValue = this.valueInput();\n if (explicitValue !== undefined && explicitValue !== null) {\n return explicitValue;\n }\n\n const hostValue = this.hostRef.nativeElement.getAttribute('value');\n if (hostValue !== null && hostValue.length > 0) {\n return hostValue;\n }\n\n return this.resolvedId;\n }\n\n public getExplicitPanelId(): string | null {\n return this.panelId() ?? null;\n }\n\n public isDisabledInContext(): boolean {\n if (this.tabs.isDisabled()) {\n return true;\n }\n\n return this.disabledInput();\n }\n\n public focusSelf(): void {\n this.hostRef.nativeElement.focus();\n }\n\n private syncResolvedIdFromHost(): boolean {\n const hostId = this.hostRef.nativeElement.getAttribute('id');\n if (hostId === null || hostId.length === 0 || hostId === this.resolvedId) {\n return false;\n }\n\n this.resolvedId = hostId;\n return true;\n }\n}\n\n@Directive({\n selector: '[tngTabPanel]',\n exportAs: 'tngTabPanel',\n})\nexport class TngTabPanel implements DoCheck, OnDestroy, OnInit {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly tabs = inject(TngTabs, { host: true });\n private resolvedId = createPanelId();\n private readonly registrationOrder = nextRegistrationOrder++;\n private mounted = true;\n private activated = false;\n private anchor: Comment | null = null;\n private lastKnownValue: TngTabsValue | null = null;\n\n public readonly valueInput = input<TngTabsValue | null | undefined, unknown>(undefined, {\n alias: 'value',\n transform: normalizeOptionalValueInput,\n });\n public readonly labelledById = input<string | null | undefined, unknown>(undefined, {\n transform: normalizeOptionalStringInput,\n });\n public readonly unmountOnExit = input<boolean, unknown>(false, {\n transform: normalizeBooleanInput,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'tab-panel' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'tabpanel' as const;\n\n @HostBinding('attr.id')\n protected get id(): string {\n return this.resolvedId;\n }\n\n @HostBinding('attr.aria-labelledby')\n protected get ariaLabelledby(): string | null {\n return this.getExplicitLabelledById() ?? this.tabs.getTabIdForPanel(this);\n }\n\n @HostBinding('attr.hidden')\n protected get hidden(): '' | null {\n if (this.tabs.isPanelActive(this)) {\n this.markActivated();\n return null;\n }\n\n return '';\n }\n\n @HostBinding('attr.data-active')\n protected get dataActive(): 'true' | 'false' {\n return this.tabs.isPanelActive(this) ? 'true' : 'false';\n }\n\n public constructor() {\n this.tabs.registerPanel(this);\n }\n\n public ngOnInit(): void {\n this.syncResolvedIdFromHost();\n this.lastKnownValue = this.getValue();\n this.syncMountState();\n }\n\n public ngDoCheck(): void {\n const idChanged = this.syncResolvedIdFromHost();\n const currentValue = this.getValue();\n if (idChanged || !valuesEqual(this.lastKnownValue, currentValue)) {\n this.lastKnownValue = currentValue;\n this.tabs.notifyPanelMutated();\n }\n\n this.syncMountState();\n }\n\n public ngOnDestroy(): void {\n this.tabs.unregisterPanel(this);\n this.removeAnchor();\n }\n\n public getRegistrationOrder(): number {\n return this.registrationOrder;\n }\n\n public getHostElement(): HTMLElement {\n return this.hostRef.nativeElement;\n }\n\n public getPanelId(): string {\n return this.resolvedId;\n }\n\n public getValue(): TngTabsValue {\n const explicitValue = this.valueInput();\n if (explicitValue !== undefined && explicitValue !== null) {\n return explicitValue;\n }\n\n const hostValue = this.hostRef.nativeElement.getAttribute('value');\n if (hostValue !== null && hostValue.length > 0) {\n return hostValue;\n }\n\n return this.resolvedId;\n }\n\n public getExplicitLabelledById(): string | null {\n return this.labelledById() ?? null;\n }\n\n public hasActivated(): boolean {\n return this.activated;\n }\n\n public markActivated(): void {\n this.activated = true;\n }\n\n private syncMountState(): void {\n const shouldMount = this.tabs.isPanelMounted(this);\n if (shouldMount) {\n this.mountHost();\n return;\n }\n\n this.unmountHost();\n }\n\n private mountHost(): void {\n if (this.mounted) {\n return;\n }\n\n const anchor = this.ensureAnchor();\n const parent = anchor.parentNode;\n if (parent === null) {\n return;\n }\n\n parent.insertBefore(this.hostRef.nativeElement, anchor);\n this.mounted = true;\n }\n\n private unmountHost(): void {\n if (!this.mounted) {\n return;\n }\n\n const host = this.hostRef.nativeElement;\n const parent = host.parentNode;\n if (parent === null) {\n return;\n }\n\n const anchor = this.ensureAnchor();\n if (anchor.parentNode !== parent) {\n parent.insertBefore(anchor, host);\n }\n\n parent.removeChild(host);\n this.mounted = false;\n\n if (!this.tabs.isKeepAliveEnabled() || this.unmountOnExit()) {\n this.resetTransientFormState();\n }\n }\n\n private ensureAnchor(): Comment {\n if (this.anchor !== null) {\n return this.anchor;\n }\n\n this.anchor = this.hostRef.nativeElement.ownerDocument.createComment('tng-tab-panel');\n return this.anchor;\n }\n\n private removeAnchor(): void {\n if (this.anchor === null) {\n return;\n }\n\n this.anchor.parentNode?.removeChild(this.anchor);\n this.anchor = null;\n }\n\n private resetTransientFormState(): void {\n const controls = this.hostRef.nativeElement.querySelectorAll<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >('input, textarea, select');\n\n controls.forEach((control) => {\n if (control instanceof HTMLInputElement) {\n if (control.type === 'checkbox' || control.type === 'radio') {\n control.checked = control.defaultChecked;\n } else {\n control.value = '';\n }\n return;\n }\n\n if (control instanceof HTMLTextAreaElement) {\n control.value = '';\n return;\n }\n\n control.selectedIndex = -1;\n });\n }\n\n private syncResolvedIdFromHost(): boolean {\n const hostId = this.hostRef.nativeElement.getAttribute('id');\n if (hostId === null || hostId.length === 0 || hostId === this.resolvedId) {\n return false;\n }\n\n this.resolvedId = hostId;\n return true;\n }\n}\n"]}