{"version":3,"file":"nw-style-guide-tabs.mjs","sources":["../../../projects/nw-style-guide/tabs/tabs.service.ts","../../../projects/nw-style-guide/tabs/tab.directive.ts","../../../projects/nw-style-guide/tabs/tabs.component.ts","../../../projects/nw-style-guide/tabs/tabs.component.html","../../../projects/nw-style-guide/tabs/public-api.ts","../../../projects/nw-style-guide/tabs/nw-style-guide-tabs.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { TabDirective } from './tab.directive';\n\n@Injectable()\nexport class TabsService {\n    private _activeChange: Subject<TabDirective> = new Subject();\n    public activeChange: Observable<TabDirective> = this._activeChange.asObservable();\n\n    notifyActiveChange(tab: TabDirective) {\n        this._activeChange.next(tab);\n    }\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { AfterContentInit, Directive, ElementRef, effect, input, inject } from '@angular/core';\nimport { TabsService } from './tabs.service';\n\n@Directive({\n    selector: '[nwTab]',\n    host: {\n        '[class.active]': 'isActive()'\n    }\n})\nexport class TabDirective implements AfterContentInit {\n    readonly elRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    private _tabsService = inject(TabsService);\n    private _idGenerator = inject(_IdGenerator);\n\n    isActive = input<boolean>(false);\n\n    /**\n     * The element that is the tab as far as assistive technology is concerned, and that takes focus: the\n     * `nwTabLabel` where there is one, otherwise the host itself.\n     *\n     * With a label, the host `li` is only presentational and the label is the `role=\"tab\"`. That is what lets an\n     * action button sit beside the label rather than inside the tab, as axe fails any focusable descendant of a\n     * `role=\"tab\"` whatever its tabindex\n     */\n    get tabElement(): HTMLElement {\n        return this.elRef.nativeElement.querySelector<HTMLElement>('[nwTabLabel]') ?? this.elRef.nativeElement;\n    }\n\n    /** Whether the tab is a `nwTabLabel` inside this host, as opposed to the host itself */\n    get hasLabelTab(): boolean {\n        return this.tabElement !== this.elRef.nativeElement;\n    }\n\n    /** An id for the tab element, generated if it has none, so that the tablist can own it with `aria-owns` */\n    get tabId(): string {\n        const tab = this.tabElement;\n\n        if (!tab.id) {\n            tab.id = this._idGenerator.getId('nw-tab-');\n        }\n\n        return tab.id;\n    }\n\n    constructor() {\n        effect(() => {\n            this._applyRoles();\n            this._applyTabindex(this.isActive() ? '0' : '-1');\n            if (this.isActive()) {\n                this._tabsService.notifyActiveChange(this);\n            }\n        });\n    }\n\n    ngAfterContentInit() {\n        // A label marked `nwTabLabel` is itself the tab. Without one the `li` is the tab and the inner label is\n        // click-only: a focusable <button> inside role=\"tab\" fails axe's nested-interactive rule even with\n        // tabindex=\"-1\", so the legacy <button> label is only kept click-only here rather than made compliant\n        if (this.tabElement === this.elRef.nativeElement) {\n            this.elRef.nativeElement\n                .querySelector<HTMLButtonElement>('button:not(.btn)')\n                ?.setAttribute('tabindex', '-1');\n        }\n    }\n\n    activate() {\n        this._label()?.click();\n    }\n\n    focus() {\n        this.tabElement.focus();\n    }\n\n    setTabindex(value: string) {\n        this._applyTabindex(value);\n    }\n\n    restoreTabindex() {\n        this._applyTabindex(this.isActive() ? '0' : '-1');\n    }\n\n    private _applyRoles() {\n        const host = this.elRef.nativeElement;\n        const tab = this.tabElement;\n\n        if (tab !== host) {\n            host.setAttribute('role', 'presentation');\n        }\n\n        tab.setAttribute('role', 'tab');\n        tab.setAttribute('aria-selected', String(this.isActive()));\n    }\n\n    private _applyTabindex(value: string) {\n        const tab = this.tabElement;\n\n        tab.setAttribute('tabindex', value);\n        // Beside the tab, the action button is a tab stop for the active tab, so that Tab reaches it and Enter opens\n        // it. Inside the tab (no `nwTabLabel`) it can never be one, as a tabbable descendant of role=\"tab\" fails\n        // axe's nested-interactive rule\n        this._actionButton()?.setAttribute('tabindex', tab === this.elRef.nativeElement ? '-1' : value);\n    }\n\n    private _actionButton(): HTMLButtonElement | null {\n        const btns = this.elRef.nativeElement.querySelectorAll<HTMLButtonElement>('button');\n        if (this._label()?.tagName !== 'BUTTON') {\n            // non-button label: any button present is an action button\n            return btns[0] ?? null;\n        }\n        return btns.length > 1 ? btns[1] : null;\n    }\n\n    private _label(): HTMLElement | null {\n        return this.elRef.nativeElement.querySelector<HTMLElement>('[nwTabLabel], button:not(.btn)');\n    }\n}\n","import {\n    Component,\n    ContentChildren,\n    QueryList,\n    Input,\n    ElementRef,\n    ViewChild,\n    OnInit,\n    ChangeDetectorRef,\n    OnDestroy,\n    ChangeDetectionStrategy,\n    AfterContentInit,\n    inject\n} from '@angular/core';\nimport { TabDirective } from './tab.directive';\nimport { fromEvent, Subscription, merge } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { TabsService } from './tabs.service';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n    selector: 'nw-tabs',\n    templateUrl: './tabs.component.html',\n    providers: [TabsService],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styles: [\n        `\n            :host,\n            ul,\n            .scroll-container {\n                position: relative;\n            }\n        `\n    ],\n    imports: [NgClass, NgStyle, NgTemplateOutlet]\n})\nexport class TabsComponent implements OnInit, AfterContentInit, OnDestroy {\n    private _cdRef = inject(ChangeDetectorRef);\n    private _tabsService = inject(TabsService);\n\n    @Input() size: 'sm' | 'md' | 'lg' = 'md';\n    @Input() maskColor: string = '#373737';\n\n    @ViewChild('scrollContainer', { static: true }) scrollContainer: ElementRef<HTMLElement>;\n    @ViewChild('activeBar', { static: true }) activeBar: ElementRef<HTMLElement>;\n\n    @ContentChildren(TabDirective) tabs: QueryList<TabDirective> = new QueryList();\n\n    /** Whether the tabs are `nwTabLabel` elements, which a tablist has to own by id rather than contain */\n    usesLabelTabs = false;\n    /** The ids of the tab elements, for the tablist's `aria-owns` */\n    ownedTabIds = '';\n\n    private _scrollAndResizeSub: Subscription;\n    private _activeChangeSub: Subscription;\n    private _transitionEndSub: Subscription;\n    private _tabsChangeSub: Subscription;\n    private _paginationTolerance: number = 100;\n\n    ngOnInit() {\n        const scrollStop$ = fromEvent(this.scrollContainer.nativeElement, 'scroll');\n        const windowResizeStop$ = fromEvent(window, 'resize');\n\n        this._scrollAndResizeSub = merge(scrollStop$, windowResizeStop$)\n            .pipe(debounceTime(50))\n            .subscribe(() => this._cdRef.detectChanges());\n\n        this._subscribeToActiveChange();\n        this._subscribeToActiveBarTransitionEnd();\n    }\n\n    ngAfterContentInit() {\n        this._updateOwnedTabs();\n        this._subscribeToTabsChange();\n    }\n\n    getActiveStyles(): Record<string, string> {\n        const tab: TabDirective = this._getActiveTab();\n        if (tab) {\n            const label = tab.elRef.nativeElement.querySelector('[nwTabLabel], button');\n            return {\n                width: (label ?? tab.elRef.nativeElement).getBoundingClientRect().width + 'px',\n                transform: `translateX(${tab.elRef.nativeElement.offsetLeft}px)`\n            };\n        }\n        return {};\n    }\n\n    prev(): void {\n        this._getScrollEl().scrollLeft -= this.clientWidth - this._paginationTolerance;\n    }\n\n    next() {\n        this._getScrollEl().scrollLeft += this.clientWidth - this._paginationTolerance;\n    }\n\n    onKeydown(event: KeyboardEvent) {\n        const tabs = this.tabs.toArray();\n        if (!tabs.length) return;\n\n        const focusedIndex = tabs.findIndex(t => t.elRef.nativeElement.contains(document.activeElement));\n        if (focusedIndex === -1) return;\n\n        let targetIndex: number | null = null;\n\n        switch (event.key) {\n            case 'Enter':\n            case ' ':\n                if (tabs[focusedIndex].tabElement === document.activeElement) {\n                    event.preventDefault();\n                    tabs[focusedIndex].activate();\n                }\n                return;\n            case 'ArrowLeft':\n                targetIndex = focusedIndex === 0 ? tabs.length - 1 : focusedIndex - 1;\n                break;\n            case 'ArrowRight':\n                targetIndex = focusedIndex === tabs.length - 1 ? 0 : focusedIndex + 1;\n                break;\n            case 'Home':\n                targetIndex = 0;\n                break;\n            case 'End':\n                targetIndex = tabs.length - 1;\n                break;\n        }\n\n        if (targetIndex !== null) {\n            event.preventDefault();\n            this.tabs.forEach(t => t.setTabindex('-1'));\n            tabs[targetIndex].setTabindex('0');\n            tabs[targetIndex].focus();\n        }\n    }\n\n    onFocusOut() {\n        setTimeout(() => {\n            if (!this.scrollContainer.nativeElement.contains(document.activeElement)) {\n                this.tabs.forEach(t => t.restoreTabindex());\n            }\n        });\n    }\n\n    get tabSizeClass(): string {\n        return `nav-${this.size}`;\n    }\n\n    get background() {\n        return {\n            background: `linear-gradient(to left, rgba(0,0,0,0), ${this.maskColor})`\n        };\n    }\n\n    get clientWidth(): number {\n        return this._getScrollEl().clientWidth;\n    }\n\n    get shouldShowPagination(): boolean {\n        return +(this._getScrollEl().scrollWidth / this.clientWidth).toFixed(1) >= 1;\n    }\n\n    get shouldShowPrev(): boolean {\n        return this._getScrollEl().scrollLeft >= 1;\n    }\n\n    get shouldShowNext(): boolean {\n        return this._getScrollEl().scrollLeft + this.clientWidth < this._getScrollEl().scrollWidth;\n    }\n\n    private _subscribeToActiveChange() {\n        this._activeChangeSub = this._tabsService.activeChange.subscribe(tab => {\n            this._scrollToTabIfRequired(tab);\n\n            setTimeout(() => {\n                this._cdRef.detectChanges();\n            }, 0);\n        });\n    }\n\n    private _subscribeToTabsChange() {\n        this._tabsChangeSub = this.tabs.changes.subscribe(() => {\n            this._updateOwnedTabs();\n\n            setTimeout(() => {\n                this._cdRef.detectChanges();\n            }, 0);\n        });\n    }\n\n    private _updateOwnedTabs() {\n        const tabs = this.tabs.toArray();\n\n        this.usesLabelTabs = tabs.some(t => t.hasLabelTab);\n        this.ownedTabIds = this.usesLabelTabs ? tabs.map(t => t.tabId).join(' ') : '';\n    }\n\n    private _subscribeToActiveBarTransitionEnd() {\n        this._transitionEndSub = fromEvent(this.activeBar.nativeElement, 'transitionend')\n            .pipe(debounceTime(50))\n            .subscribe(() => this._cdRef.detectChanges());\n    }\n\n    private _getActiveTab(): TabDirective {\n        return this.tabs.filter(t => t.isActive())[0];\n    }\n\n    private _getScrollEl(): HTMLElement {\n        return this.scrollContainer.nativeElement;\n    }\n\n    private _scrollToTabIfRequired(tab: TabDirective) {\n        const offsetLeft = tab.elRef.nativeElement.offsetLeft;\n        const position = {\n            left: offsetLeft,\n            right: offsetLeft + tab.elRef.nativeElement.clientWidth\n        };\n\n        const shouldScrollLeft: boolean = position.left < this._getScrollEl().scrollLeft;\n        const shouldScrollRight: boolean = position.right > this._getScrollEl().scrollLeft + this.clientWidth;\n\n        if (shouldScrollLeft) {\n            this._getScrollEl().scrollLeft = position.left - 30;\n        } else if (shouldScrollRight) {\n            this._getScrollEl().scrollLeft = position.right - this.clientWidth + 12 + 30; // plus 12 for margin\n        }\n    }\n\n    ngOnDestroy() {\n        this._scrollAndResizeSub.unsubscribe();\n        this._activeChangeSub.unsubscribe();\n        this._transitionEndSub.unsubscribe();\n        this._tabsChangeSub.unsubscribe();\n    }\n}\n","<div\n    class=\"scroll-container\"\n    #scrollContainer>\n    <!-- A tablist may only own tabs, so with action buttons beside the tabs it owns them by id instead of containing them -->\n    @if (usesLabelTabs) {\n        <div\n            role=\"tablist\"\n            [attr.aria-owns]=\"ownedTabIds\"></div>\n    }\n    <ul\n        class=\"nav nav-tabs\"\n        [ngClass]=\"tabSizeClass\"\n        [attr.role]=\"usesLabelTabs ? 'presentation' : 'tablist'\"\n        (keydown)=\"onKeydown($event)\"\n        (focusout)=\"onFocusOut()\">\n        <ng-content></ng-content>\n    </ul>\n    <div\n        #activeBar\n        class=\"nav-tabs-active-bar\"\n        aria-hidden=\"true\"\n        [ngStyle]=\"getActiveStyles()\"></div>\n</div>\n\n@if (shouldShowPagination) {\n    <div class=\"pagination-container\">\n        @if (shouldShowPrev) {\n            <div\n                class=\"prev-page\"\n                (click)=\"prev()\"\n                [ngStyle]=\"background\">\n                <ng-container *ngTemplateOutlet=\"paginator\"></ng-container>\n            </div>\n        }\n        @if (shouldShowNext) {\n            <div\n                class=\"next-page\"\n                (click)=\"next()\"\n                [ngStyle]=\"background\">\n                <ng-container *ngTemplateOutlet=\"paginator\"></ng-container>\n            </div>\n        }\n    </div>\n}\n\n<ng-template #paginator>\n    <button class=\"btn btn-md btn-ghost-alt\">\n        <i class=\"fas fa-chevron-left\"></i>\n    </button>\n</ng-template>\n","export { TabDirective } from './tab.directive';\nexport { TabsComponent } from './tabs.component';\n\nimport { TabDirective } from './tab.directive';\nimport { TabsComponent } from './tabs.component';\n\n/**\n * Export cooperating directives\n * https://v17.angular.io/guide/standalone-components#standalone-components-for-library-authors\n */\nexport const TABS_DIRECTIVES = [TabDirective, TabsComponent] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}