{"version":3,"file":"chunk-dzitfe0y.js","sources":["packages/design-system/ui/tabsgroup/src/tabs.directives.ts","packages/design-system/ui/tabsgroup/src/tab.component.ts","packages/design-system/ui/tabsgroup/src/tabs-arrow.component.ts","packages/design-system/ui/tabsgroup/src/tabs-arrows.ts","packages/design-system/ui/tabsgroup/src/tabs.token.ts","packages/design-system/ui/tabsgroup/src/tabsgroup.component.html","packages/design-system/ui/tabsgroup/src/tabsgroup.component.ts","packages/design-system/ui/tabsgroup/src/index.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\nimport { DsTabContext } from './tabs-context';\n\n@Directive({\n selector: 'ng-template[dsTabHeader]',\n standalone: true,\n})\nexport class DsTabHeader {\n static ngTemplateContextGuard(directive: DsTabHeader, context: unknown): context is DsTabContext {\n return true;\n }\n}\n\n@Directive({\n selector: 'ng-template[dsTabContent]',\n standalone: true,\n})\nexport class DsTabContent {}\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n OnDestroy,\n TemplateRef,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n input,\n signal,\n} from '@angular/core';\n\nimport { DsTabContext } from './tabs-context';\nimport { DsTabContent, DsTabHeader } from './tabs.directives';\n\nlet _tabNameIndex = 0;\n/** Generates a random name for a tab. */\nfunction getRandomName() {\n ++_tabNameIndex; // increment the index for each tab name\n return `tab-${_tabNameIndex}`;\n}\n\n// eslint-disable-next-line @nx/workspace-component-tests-present, @nx/workspace-component-default-story\n@Component({\n selector: 'ds-tab',\n template: `\n @if (selected() && lazyContent) {\n \n }\n\n
\n \n
\n `,\n imports: [NgTemplateOutlet],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTab implements OnDestroy {\n /**\n * The name of the tab. Must be unique within the tab.\n * If not provided, a random name is generated.\n * It will be used as the id of the tab, and can be used to select the tab.\n *\n * NOTE: This is different from the `title` property, which is the text that is displayed in the tab header.\n */\n name = input(getRandomName());\n\n /**\n * The title of the tab.\n * The title is displayed in the tab header.\n */\n title = input();\n\n /**\n * Whether the tab is disabled.\n * If the tab is disabled, it cannot be selected.\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * `TemplateRef` for the tab header.\n *\n * @example\n * ```html\n * \n *
Tab header
\n *
\n * ```\n * or\n * ```html\n * \n * \n * \t
Tab header
\n *
\n *
\n * ```\n */\n @ContentChild(DsTabHeader, { read: TemplateRef })\n customHeader?: TemplateRef | null = null;\n\n /**\n * `TemplateRef` for the tab content.\n *\n * @example\n\n * ```html\n * \n *
Tab content
\n *
\n * ```\n * or\n * ```html\n * \n * \n * \t
Tab content
\n *
\n *
\n * ```\n */\n @ContentChild(DsTabContent, { read: TemplateRef }) lazyContent?: TemplateRef | null = null;\n\n selected = signal(false);\n\n public focused = signal(false);\n\n private _focusMonitor = inject(FocusMonitor);\n private _elementRef = inject(ElementRef);\n\n setFocused(focused: boolean) {\n this.focused.set(focused);\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n// eslint-disable-next-line @nx/workspace-component-default-story, @nx/workspace-component-tests-present\n@Component({\n selector: 'ds-tabs-arrow',\n standalone: true,\n template: `\n \n \n \n `,\n host: {\n '[class.ds-left-arrow]': \"direction() === 'left'\",\n },\n styles: [\n `\n :host {\n display: inline-flex;\n justify-items: center;\n align-items: center;\n height: 100%;\n max-width: 100%;\n\n &.ds-left-arrow {\n transform: rotate(180deg);\n }\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTabsScrollArrow {\n direction = input<'right' | 'left'>('right');\n}\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { AfterContentInit, DestroyRef, Directive, ElementRef, Injector, Signal, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { Observable, auditTime, debounceTime, map, of, switchMap } from 'rxjs';\n\nimport { DsTab } from './tab.component';\n\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst INITIAL_SCROLL_DELAY = 650; // ms\n\n/**\n * For selected tab item the font weight is more text than the default state and there by in some cases\n * the right arrow is showing even when we scroll to last tab items due to increase of tab items width\n *\n * A small threshold (10px in this case) is introduced to detect minor changes\n * in the maxScrollLeft value. If the change is small enough (between 1px and 10px),\n * we assume that any last tab item is selected and there by we return true to hide right arrow.\n */\nconst SCROLL_THRESHOLD = 10;\n\n@Directive()\nexport abstract class DsTabsArrows implements AfterContentInit {\n protected _injector = inject(Injector);\n protected _destroyRef = inject(DestroyRef);\n protected _breakpointObserver = inject(BreakpointObserver);\n\n abstract _id: number;\n\n abstract _scrollable: Signal;\n abstract _activeTab: Signal;\n\n protected abstract _tabs: Signal;\n abstract _tabHeaderItemsContainer: ElementRef;\n abstract _tabHeaderItemsList: ElementRef;\n\n isSmallScreen = toSignal(\n this._breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.HandsetLandscape, Breakpoints.TabletPortrait])\n .pipe(map((res) => res.matches)),\n );\n\n /** The distance in pixels that the tab labels should be translated to the left. */\n private _scrollDistanceToLeft = signal(0);\n abstract _scrollDistance: Signal;\n abstract _scrollSpeed: Signal;\n\n private _containerWidth = signal(0);\n private _listScrollWidth = signal(0);\n\n _maxScrollDistance = computed(() => this._listScrollWidth() - this._containerWidth() || 0);\n\n // Whether the tab list can be scrolled to the left.\n showNavigationArrows = computed(() => {\n if (!this._scrollable()) {\n return false;\n }\n if (this.isSmallScreen()) {\n return false;\n }\n if (this._containerWidth() === 0) {\n return false;\n }\n if (!this.initialScrollHappened()) {\n return false; // don't show arrows until the initial scroll is fired\n }\n return this._listScrollWidth() > this._containerWidth();\n });\n\n addMobileNavScrollClass = computed(() => {\n if (!this._scrollable()) {\n return false;\n }\n return this.isSmallScreen();\n });\n\n // If the header is at the beginning of the list (scroll distance is equal to 0) then disable the prev button.\n prevBtnHidden = computed(() => this._scrollDistanceToLeft() === 0);\n\n // If the header is at the end of the list (scroll distance is equal to the maximum distance we can scroll),\n // then disable the after button.\n nextBtnHidden = computed(() => {\n if (Math.abs(this._scrollDistanceToLeft() - this._maxScrollDistance()) <= SCROLL_THRESHOLD) {\n return true;\n }\n return Math.ceil(this._scrollDistanceToLeft()) === Math.ceil(this._maxScrollDistance());\n });\n\n initialScrollHappened = signal(false);\n\n ngAfterContentInit() {\n toObservable(this._activeTab, { injector: this._injector })\n .pipe(\n switchMap((activeTab) => {\n if (this.initialScrollHappened()) {\n return of(activeTab);\n }\n return of(activeTab).pipe(auditTime(INITIAL_SCROLL_DELAY));\n }),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe((activeTab) => {\n this.initialScrollHappened.set(true);\n this._updateScrollDistanceBasedOnName(activeTab);\n });\n\n const containerWidthSub = listenToResizeObserver([this._tabHeaderItemsContainer.nativeElement], this._injector).subscribe((res) => {\n this._containerWidth.set(res.length > 0 ? res[0].contentRect.width : 0);\n });\n\n const listItemsWidthSub = listenToResizeObserver([this._tabHeaderItemsList.nativeElement], this._injector).subscribe((res) => {\n if (this._scrollable()) {\n this._listScrollWidth.set(res.length > 0 ? res[0].contentRect.width : 0);\n } else {\n this._listScrollWidth.set(0);\n }\n });\n\n this._destroyRef.onDestroy(() => {\n containerWidthSub.unsubscribe();\n listItemsWidthSub.unsubscribe();\n });\n }\n\n /**\n * Handles click events on the tab list. Moves the header to the clicked tab.\n * @param event\n * @param direction\n */\n handleArrowClick(event: MouseEvent, direction: 'prev' | 'next') {\n const scrollAmount = (direction === 'prev' ? -1 : 1) * this._scrollDistance();\n\n return this._scrollTo(this._scrollDistanceToLeft() + scrollAmount);\n }\n\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n private _scrollTo(position: number) {\n const distance = Math.max(0, Math.min(this._maxScrollDistance(), position));\n this._scrollDistanceToLeft.set(distance);\n this._updateTabScrollPosition(distance);\n }\n\n /**\n * Updates the scroll distance of the tab list based on the selected name.\n * @param name\n */\n _updateScrollDistanceBasedOnName(name: string) {\n if (!this._scrollable()) {\n return;\n }\n\n const tabs = this._tabs();\n\n const selectedTab = tabs.find((x) => x.name() === name);\n\n if (tabs.length === 0 || !selectedTab) {\n return;\n }\n\n const tabHeaderItem = this._getTabElementByName(name);\n\n if (!tabHeaderItem) {\n return;\n }\n // calculate the scroll distance\n const scrollDistance = _calculateScrollDistance(this._tabHeaderItemsContainer.nativeElement, tabHeaderItem);\n if (this.showNavigationArrows()) {\n if (name === tabs[0].name()) {\n this._scrollTo(0);\n return;\n }\n\n // eslint-disable-next-line unicorn/prefer-at\n if (tabs[tabs.length - 1].name() === name) {\n this._scrollTo(this._maxScrollDistance());\n return;\n }\n\n if (tabHeaderItem && scrollDistance) {\n this._scrollTo(scrollDistance);\n }\n } else if (tabHeaderItem && this._tabHeaderItemsContainer.nativeElement.scrollTo) {\n /**\n * offsetRectLeft: This gives the left position of the tabElement relative to the viewport\n */\n const { left: offsetRectLeft } = tabHeaderItem.getBoundingClientRect();\n\n /**\n * This gets the position of the container (the scrollable area where the tabs are displayed) from the left side of the viewport.\n * Example: If the container is 30px from the left side of the viewport, this would be 30.\n */\n const { left: containerOffsetRectLeft } = this._tabHeaderItemsContainer.nativeElement.getBoundingClientRect();\n\n /**\n * _tabHeaderItemsContainer scrollLeft: This gets the current horizontal scroll position of the container.\n * It helps to ensure that we calculate the new scroll position relative to the current one.\n * Example: If the container has been scrolled 100px to the right, container.scrollLeft would return 100.\n */\n const containerScrollLeft = this._tabHeaderItemsContainer.nativeElement.scrollLeft;\n\n /**\n * container.clientWidth gives the total width of the container's visible area.\n * tabElement.clientWidth gives the width of the tab element.\n * The difference between the two (container.clientWidth - tabElement.clientWidth) gives the remaining space on either side of the tab. Dividing this by 2 distributes the extra space equally on both sides to center the tab.\n * Example: If the container's width is 600px and the tab's width is 100px, the result is (600 - 100) / 2 = 250px.\n * This value ensures the tab is positioned in the center of the container.\n */\n const targetScroll =\n containerScrollLeft +\n offsetRectLeft -\n containerOffsetRectLeft -\n (this._tabHeaderItemsContainer.nativeElement.clientWidth - tabHeaderItem.clientWidth) / 2;\n\n // Scroll into view centered\n this._tabHeaderItemsContainer.nativeElement.scrollTo({ left: targetScroll, behavior: 'smooth' });\n }\n }\n\n _getTabElementByName(name: string): HTMLElement | null {\n // [id]=\"'ds-tab-id-' + id + '-' + $name\"\n const id = `#ds-tab-id-${this._id}-${name}`;\n return this._tabHeaderItemsList.nativeElement.querySelector(id);\n }\n\n /**\n * Updates the tab list scroll position to move the active tab into view.\n * @param scrollDistance\n */\n _updateTabScrollPosition(scrollDistance: number) {\n let distance = 0;\n\n if (this.showNavigationArrows()) {\n if (!this._tabHeaderItemsContainer || !this._tabHeaderItemsList) {\n return;\n }\n distance = -scrollDistance;\n } else {\n distance = 0;\n }\n\n // if we show the navigation arrows we want to scroll it based on the distance provided otherwise keep it at 0;\n this._tabHeaderItemsList.nativeElement.style.transform = `translateX(${Math.round(distance)}px)`;\n }\n}\n\n/**\n * Calculates the scroll distance based on a selected element.\n */\nfunction _calculateScrollDistance(containerElement: HTMLElement, tabHeaderItem: HTMLElement): number | undefined {\n const { left: offsetRectLeft, right: offsetRectRight } = tabHeaderItem.getBoundingClientRect();\n // TODO: Make this faster, cache containerElement.getBoundingClientRect()\n const { left: containerOffsetRectLeft, right: containerOffsetRectRight } = containerElement.getBoundingClientRect();\n const { offsetLeft, offsetWidth } = tabHeaderItem;\n const { offsetLeft: containerOffsetLeft, offsetWidth: containerWidth } = containerElement;\n\n let containerCenterPosition;\n // calculate target center position\n const targetCenterPosition = offsetLeft + offsetWidth / 2;\n // arrowSize size is taken by addition of arrow button width and max 8px padding to right and left\n const arrowSize = 32;\n if (offsetRectLeft < containerOffsetRectLeft + arrowSize || offsetRectRight > containerOffsetRectRight - arrowSize) {\n // calculate center of the container viewport\n return (containerCenterPosition = targetCenterPosition - (containerOffsetLeft + containerWidth / 2));\n }\n return containerCenterPosition;\n}\n\n/**\n * Listen to resize observer on a list of elements\n * @param elements\n * @param injector\n */\nfunction listenToResizeObserver(elements: HTMLElement[], injector: Injector): Observable {\n const destroyRef = injector.get(DestroyRef);\n\n const resizeObservable = new Observable((observer) => {\n const resizeObserver = new ResizeObserver((res) => {\n observer.next(res);\n });\n\n for (const el of elements) {\n resizeObserver.observe(el);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n\n // We need to debounce resize events because the alignment logic is expensive.\n // If someone animates the width of tabs, we don't want to realign on every animation frame.\n // Once we haven't seen any more resize events in the last 32ms (~2 animation frames) we can\n // re-align.\n return resizeObservable.pipe(debounceTime(32), takeUntilDestroyed(destroyRef));\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\nexport type TabsOptions = {\n /*\n * Whether the tabs should take up the full width of the container.\n */\n fullWidthTabs: boolean;\n defaultScrollDistance: number;\n defaultScrollSpeed: string;\n};\n\nconst scrollDistance = 200;\n\nconst DEFAULT_TAB_OPTIONS: TabsOptions = {\n fullWidthTabs: false,\n defaultScrollDistance: scrollDistance,\n defaultScrollSpeed: 'faster',\n};\n\nexport const DS_TAB_OPTIONS = new InjectionToken('TAB_OPTIONS', {\n providedIn: 'root',\n factory: () => DEFAULT_TAB_OPTIONS,\n});\n\nexport const provideTabOptions = (options: Partial) =>\n ({\n provide: DS_TAB_OPTIONS,\n useValue: { ...DEFAULT_TAB_OPTIONS, ...options },\n }) satisfies Provider;\n","
\n \n
    \n @for (tab of _tabs(); track tab.name()) {\n \n
    \n @if (tab.customHeader) {\n \n } @else if (tab.title()) {\n {{ tab.title() }}\n }\n
    \n \n }\n
\n
\n\n \n\n @if (showNavigationArrows()) {\n \n @if (dsTabsLeftArrowTpl) {\n \n } @else {\n \n }\n \n \n @if (dsTabsRightArrowTpl) {\n \n } @else {\n \n }\n \n }\n\n\n
\n \n
\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { DsTab } from './tab.component';\nimport { DsTabsScrollArrow } from './tabs-arrow.component';\nimport { DsTabsArrows } from './tabs-arrows';\nimport { DS_TAB_OPTIONS } from './tabs.token';\nimport { TabsGroupIndicatorType, TabsGroupSizesType, TabsGroupVariantsType } from './tabsgroup.types';\n\nlet uniqueTabId = 0;\nfunction getTabId() {\n return ++uniqueTabId;\n}\n\n@Component({\n selector: 'ds-tabs-group',\n templateUrl: 'tabsgroup.component.html',\n host: {\n '[class]': `hostClass`,\n '[class.ds-tabs-inverse]': 'inverse',\n },\n imports: [NgTemplateOutlet, DsTabsScrollArrow],\n styleUrl: './tabsgroup.component.scss',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DsTabsGroup extends DsTabsArrows implements AfterViewInit, AfterContentInit, OnDestroy {\n private tabOptions = inject(DS_TAB_OPTIONS);\n private _focusMonitor = inject(FocusMonitor);\n\n // Define scrollDistance as signal inputs with default values\n _scrollDistance = signal(this.tabOptions.defaultScrollDistance);\n\n // Default scroll speed, can be adjusted as needed\n _scrollSpeed = signal(this.tabOptions.defaultScrollSpeed);\n\n @Input() set scrollDistance(value: number) {\n this._scrollDistance.set(value);\n }\n\n @Input() set scrollSpeed(value: string) {\n this._scrollSpeed.set(value);\n }\n\n /**\n * The active tab.\n * This is the tab that is currently selected.\n * We use a signal to make sure that the active tab is updated when the tab is selected.\n *\n * @internal\n */\n _activeTab = signal('');\n\n /**\n * The name of the active tab.\n * If not provided, the first tab will be selected.\n *\n * This will be the name of the tab that is selected.\n */\n @Input() set activeTab(value: string | number) {\n // TODO: convert to signal inputs when available on Storybook\n this._activeTab.set(value.toString());\n this.selectTab(value.toString());\n }\n\n /**\n * Event emitted when the active tab is changed.\n * The event payload is the name of the active tab.\n */\n @Output() activeTabChanged = new EventEmitter();\n\n /**\n * Event emitted when a tab is clicked.\n * The event payload is an object with the name of the tab and the event that triggered the click.\n */\n @Output() tabChanged = new EventEmitter<{ name: string; event: MouseEvent }>();\n\n /** The size of the tabs. (small or large) */\n @Input() size: TabsGroupSizesType = 'large';\n\n /** The variant of the tabs. (vertical or horizontal) */\n @Input() variant: TabsGroupVariantsType = 'vertical';\n\n /** The indicator of the tabs. (underline or fill) */\n @Input() indicator: TabsGroupIndicatorType = 'underline';\n\n /**\n * Use inverse style for tabs when set to true.\n */\n @Input({ transform: booleanAttribute }) inverse = false;\n\n /**\n * The aria label for the previous navigation arrow.\n * This is used by screen readers to announce the navigation arrow.\n */\n @Input() ariaLabelNavigationArrowPrev = 'prev';\n\n /**\n * The aria label for the next navigation arrow.\n * This is used by screen readers to announce the navigation arrow.\n */\n @Input() ariaLabelNavigationArrowNext = 'next';\n\n /**\n * The id of the tabs group.\n * This is used to generate unique ids for the tabs.\n *\n * @internal\n */\n _id = getTabId();\n\n /**\n * Whether the tabs should be scrollable.\n * This is used to enable or disable the navigation arrows.\n * @internal\n */\n _scrollable = signal(true);\n\n /*\n * We want to have navigation arrows enabled by default, and disable them only when needed.\n */\n @Input({ transform: booleanAttribute }) set scrollable(value: boolean) {\n // TODO: convert to signal inputs when available on Storybook\n this._scrollable.set(value);\n }\n\n /*\n * Whether the tabs should take up the full width of the container.\n *\n * The default value is based on the tab options which can be configured using the `provideTabOptions` function.\n */\n @Input({ transform: booleanAttribute }) fullWidthTabs: boolean = this.tabOptions.fullWidthTabs;\n\n /**\n * The tabs.\n * This is a list of tabs that are used to render the tabs.\n * Each tab is a `DsTab` component.\n * Example:\n * ```html\n * \n * Tab 1\n * Tab 2\n * \n * ```\n */\n @ContentChildren(DsTab) tabs: QueryList | undefined;\n\n protected _tabs = signal([]);\n\n /**\n * `TemplateRef` for the left arrow.\n *\n * @example\n * ```html\n * \n * ...\n * <- \n * \n * ```\n */\n @ContentChild('dsTabsLeftArrow') dsTabsLeftArrowTpl?: TemplateRef;\n\n /**\n * `TemplateRef` for the right arrow.\n *\n * @example\n * ```html\n * \n * ...\n * -> \n * \n * ```\n */\n @ContentChild('dsTabsRightArrow') dsTabsRightArrowTpl?: TemplateRef;\n\n /**\n * The tab header items container.\n * This is the container that holds the tab header list.\n *\n * @internal\n */\n @ViewChild('tabHeaderItemsContainer', { static: true })\n _tabHeaderItemsContainer!: ElementRef;\n\n /**\n * The tab header items list.\n * This is the list that holds the tab header items.\n *\n * @internal\n */\n @ViewChild('tabHeaderItemsList', { static: true })\n _tabHeaderItemsList!: ElementRef;\n\n @ViewChildren('tabItem') tabItems?: QueryList;\n\n ngAfterViewInit(): void {\n if (this.tabItems) {\n this.tabItems.forEach((option, index) => {\n this._focusMonitor.monitor(option.nativeElement, true).subscribe((focusOrigin) => {\n if (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n this._tabs()[index].setFocused(true);\n } else if (!focusOrigin) {\n this._tabs()[index].setFocused(false);\n }\n });\n });\n }\n }\n\n override ngAfterContentInit() {\n if (this.tabs) {\n this.tabs.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n const tabs = this.tabs?.toArray() ?? [];\n this._tabs.set(tabs);\n\n // if there are no tabs, do nothing\n if (tabs.length === 0) {\n return;\n }\n\n // check if the selected tab still exists\n const selectedTab = this.selectedTab();\n if (!selectedTab) {\n // try to select the previously selected tab name if it exists\n if (this._activeTab()) {\n this.selectTab(this._activeTab());\n } else {\n // select the first tab if the selected tab does not exist\n this.selectTab(tabs[0].name());\n }\n }\n });\n\n this._tabs.set(this.tabs.toArray() ?? []);\n\n this.selectTab(this._activeTab() || this.tabs.first.name());\n\n super.ngAfterContentInit();\n }\n }\n\n /**\n * Selects a tab by name.\n * This will set the `selected` property of the tab to `true` and emit the `activeTabChanged` event.\n *\n * @param name - The name of the tab to select.\n * @param event - The event that triggered the selection.\n */\n selectTab(name: string, event?: MouseEvent) {\n this._activeTab.set(name);\n\n this.tabs?.forEach((tab) => {\n tab.selected.set(tab.name() === name);\n });\n\n this.activeTabChanged.emit(name);\n\n if (event) {\n this.tabChanged.emit({ name, event });\n }\n }\n\n /**\n * Returns the selected tab.\n * This will return the first tab that is selected.\n *\n * @returns The selected tab.\n * @internal\n */\n private selectedTab(): DsTab | undefined {\n return this.tabs?.find((tab) => tab.selected());\n }\n\n /**\n * Returns the host class based on the size and indicator.\n *\n * @returns The host class.\n * @internal\n */\n get hostClass() {\n const sizeClass = this.size === 'small' ? 'ds-tabs-small' : 'ds-tabs-large';\n const indicatorClass = this.indicator === 'underline' ? 'ds-tab-underline' : 'ds-tab-fill';\n\n return `ds-tabs-group ${sizeClass} ${indicatorClass}`;\n }\n\n get tabHeaderItemsClass() {\n return `ds-tab-header-items ds-tab-items-scroll-speed-${this._scrollSpeed()}`;\n }\n\n focusOption(tab: DsTab, index: number) {\n const focusOption = this.tabItems?.get(index);\n if (focusOption) {\n this._tabs().forEach((tabOptionObj) => {\n tabOptionObj.setFocused(false);\n });\n tab.setFocused(true);\n this._focusMonitor.focusVia(focusOption.nativeElement, 'keyboard');\n }\n }\n\n onKeydown(event: KeyboardEvent) {\n const { key } = event;\n const tabsList = this._tabs();\n const currentIndex = tabsList.findIndex((tab) => tab.focused());\n let newIndex: number | undefined;\n const nextFocusTabIndex = this.getNextFocusTabIndex(key, currentIndex);\n if (key === 'ArrowRight') {\n newIndex = (currentIndex + nextFocusTabIndex) % tabsList.length;\n } else if (key === 'ArrowLeft') {\n newIndex = (currentIndex - nextFocusTabIndex + tabsList.length) % tabsList.length;\n } else if ((key === ' ' || key === 'Enter') && currentIndex !== -1) {\n this.selectTab(tabsList[currentIndex].name());\n }\n\n if (newIndex !== undefined) {\n event.preventDefault();\n const newTab = tabsList[newIndex];\n if (newTab) {\n this.focusOption(newTab, newIndex);\n }\n }\n }\n\n getNextFocusTabIndex(key: string, currentIndex: number): number {\n if (key === 'ArrowRight' && this._tabs()[currentIndex + 1]) {\n return this._tabs()[currentIndex + 1].disabled() ? 2 : 1;\n } else if (key === 'ArrowLeft' && this._tabs()[currentIndex - 1]) {\n return this._tabs()[currentIndex - 1].disabled() ? 2 : 1;\n }\n return 1;\n }\n\n ngOnDestroy() {\n if (this.tabItems) {\n this.tabItems.forEach((option) => this._focusMonitor.stopMonitoring(option));\n }\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { DsTab } from './tab.component';\nimport { DsTabsScrollArrow } from './tabs-arrow.component';\nimport { DsTabContent, DsTabHeader } from './tabs.directives';\nimport { DsTabsGroup } from './tabsgroup.component';\n\nexport { DsTabsGroup } from './tabsgroup.component';\nexport { DsTab } from './tab.component';\n\nexport { DsTabsScrollArrow } from './tabs-arrow.component';\n\nexport { DsTabContent, DsTabHeader } from './tabs.directives';\nexport { DS_TAB_OPTIONS, TabsOptions, provideTabOptions } from './tabs.token';\n\nexport * from './tabsgroup.types';\n\n@NgModule({\n imports: [DsTab, DsTabsGroup, DsTabContent, DsTabHeader, DsTabsScrollArrow],\n exports: [DsTab, DsTabsGroup, DsTabContent, DsTabHeader, DsTabsScrollArrow],\n})\nexport class DsTabsModule {}\n"],"names":["DsTabHeader","ngTemplateContextGuard","directive","context","L","selectors","standalone","_DsTabHeader","DsTabContent","_DsTabContent","ɵɵelementContainer","ɵɵtemplate","DsTab_Conditional_0_ng_container_0_Template","ɵɵproperty","ctx_r0","lazyContent","_tabNameIndex","getRandomName","DsTab","constructor","name","input","title","disabled","transform","booleanAttribute","customHeader","selected","signal","focused","_focusMonitor","inject","FocusMonitor","_elementRef","ElementRef","setFocused","set","ngOnDestroy","stopMonitoring","nativeElement","contentQueries","rf","ctx","dirIndex","TemplateRef","v","g","D","B","DsTab_Conditional_0_Template","ɵɵelementStart","ɵɵprojection","ɵɵelementEnd","ɵɵconditional","ɵɵadvance","ɵɵclassProp","NgTemplateOutlet","encapsulation","changeDetection","_DsTab","DsTabsScrollArrow","direction","hostVars","hostBindings","ɵɵelement","_DsTabsScrollArrow","INITIAL_SCROLL_DELAY","SCROLL_THRESHOLD","DsTabsArrows","_injector","Injector","_destroyRef","DestroyRef","_breakpointObserver","BreakpointObserver","isSmallScreen","toSignal","observe","Breakpoints","XSmall","Small","HandsetLandscape","TabletPortrait","pipe","map","res","matches","_scrollDistanceToLeft","_containerWidth","_listScrollWidth","_maxScrollDistance","computed","showNavigationArrows","_scrollable","initialScrollHappened","addMobileNavScrollClass","prevBtnHidden","nextBtnHidden","Math","abs","ceil","ngAfterContentInit","toObservable","_activeTab","injector","switchMap","activeTab","of","auditTime","takeUntilDestroyed","subscribe","_updateScrollDistanceBasedOnName","containerWidthSub","listenToResizeObserver","_tabHeaderItemsContainer","length","contentRect","width","listItemsWidthSub","_tabHeaderItemsList","onDestroy","unsubscribe","handleArrowClick","event","scrollAmount","_scrollDistance","_scrollTo","position","distance","max","min","_updateTabScrollPosition","tabs","_tabs","selectedTab","find","x","tabHeaderItem","_getTabElementByName","scrollDistance","_calculateScrollDistance","scrollTo","left","offsetRectLeft","getBoundingClientRect","containerOffsetRectLeft","targetScroll","scrollLeft","clientWidth","behavior","id","_id","querySelector","style","round","_DsTabsArrows","containerElement","right","offsetRectRight","containerOffsetRectRight","offsetLeft","offsetWidth","containerOffsetLeft","containerWidth","containerCenterPosition","targetCenterPosition","arrowSize","elements","destroyRef","get","Observable","observer","resizeObserver","ResizeObserver","next","el","disconnect","debounceTime","DEFAULT_TAB_OPTIONS","fullWidthTabs","defaultScrollDistance","defaultScrollSpeed","DS_TAB_OPTIONS","InjectionToken","providedIn","factory","$item","DsTabsGroup_For_6_Conditional_3_ng_container_0_Template","d","tab_r3","ɵɵpureFunction2","_c7","ɵɵtext","ɵɵtextInterpolate1","ɵɵlistener","$event","ɵɵrestoreView","_r2","$implicit","ctx_r3","ɵɵnextContext","ɵɵresetView","selectTab","DsTabsGroup_For_6_Conditional_3_Template","DsTabsGroup_For_6_Conditional_4_Template","variant","M","DsTabsGroup_Conditional_8_Conditional_1_ng_container_0_Template","dsTabsLeftArrowTpl","DsTabsGroup_Conditional_8_Conditional_4_ng_container_0_Template","dsTabsRightArrowTpl","W","_r5","DsTabsGroup_Conditional_8_Conditional_1_Template","DsTabsGroup_Conditional_8_Conditional_2_Template","DsTabsGroup_Conditional_8_Conditional_4_Template","DsTabsGroup_Conditional_8_Conditional_5_Template","inverse","uniqueTabId","getTabId","DsTabsGroup","tabOptions","_scrollSpeed","activeTabChanged","EventEmitter","tabChanged","size","indicator","ariaLabelNavigationArrowPrev","ariaLabelNavigationArrowNext","value","scrollSpeed","toString","scrollable","ngAfterViewInit","tabItems","forEach","option","index","monitor","focusOrigin","changes","toArray","first","tab","emit","hostClass","sizeClass","indicatorClass","tabHeaderItemsClass","focusOption","tabOptionObj","focusVia","onKeydown","key","tabsList","currentIndex","findIndex","newIndex","nextFocusTabIndex","getNextFocusTabIndex","undefined","preventDefault","newTab","oe","__ngFactoryType__","ɵɵclassMap","outputs","features","ɵɵInputTransformsFeature","ɵɵInheritDefinitionFeature","ɵɵStandaloneFeature","ngContentSelectors","_c6","decls","vars","consts","template","i0","_r1","ɵɵrepeaterCreate","DsTabsGroup_For_6_Template","_forTrack0","DsTabsGroup_Conditional_8_Template","ɵɵrepeater","styles","_DsTabsGroup","DsTabsModule","re","se","_DsTabsModule"],"mappings":"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"}