@skyux/tabs 14.19.0 → 14.20.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.
@@ -44,6 +44,22 @@ const RESOURCES = {
44
44
  message: 'Step {0} of {1}, unavailable: {2}',
45
45
  },
46
46
  },
47
+ ES: {
48
+ skyux_tab_add: { message: 'Agregar pestaña' },
49
+ skyux_tab_close: { message: 'Cerrar pestaña {0}' },
50
+ skyux_tabs_navigator_finish: { message: 'Finalizar' },
51
+ skyux_tabs_navigator_next: { message: 'Siguiente' },
52
+ skyux_tabs_navigator_previous: { message: 'Anterior' },
53
+ skyux_tab_open: { message: 'Abrir pestaña' },
54
+ skyux_vertical_tabs_show_tabs_text: { message: 'Lista de pestañas' },
55
+ skyux_wizard_sr_step_current: { message: 'Paso {0} de {1}, actual: {2}' },
56
+ skyux_wizard_sr_step_completed: {
57
+ message: 'Paso {0} de {1}, completado: {2}',
58
+ },
59
+ skyux_wizard_sr_step_unavailable: {
60
+ message: 'Paso {0} de {1}, no disponible: {2}',
61
+ },
62
+ },
47
63
  'FR-CA': {
48
64
  skyux_tab_add: { message: 'Ajouter un onglet' },
49
65
  skyux_tab_close: { message: 'Fermer l’onglet {0}' },
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-tabs.mjs","sources":["../../../../../libs/components/tabs/src/lib/modules/shared/sky-tabs-resources.module.ts","../../../../../libs/components/tabs/src/lib/modules/shared/tab-id.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-adapter.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-group.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tab.component.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tab.component.html","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-group.component.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-group.component.html","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.component.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.component.html","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.module.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.service.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form-section.component.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form-section.component.html","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/types/sectioned-form-message-type.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.component.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.component.html","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.module.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab-button-adapter.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab-button.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab-button.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-permalink.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-nav-button-disabled.pipe.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-nav-button.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-nav-button.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-adapter.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabs.module.ts","../../../../../libs/components/tabs/src/skyux-tabs.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-tabs' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_tab_add: { message: 'Add tab' },\n skyux_tab_close: { message: 'Close {0} tab' },\n skyux_tabs_navigator_finish: { message: 'Finish' },\n skyux_tabs_navigator_next: { message: 'Next' },\n skyux_tabs_navigator_previous: { message: 'Previous' },\n skyux_tab_open: { message: 'Open tab' },\n skyux_vertical_tabs_show_tabs_text: { message: 'Tab list' },\n skyux_wizard_sr_step_current: { message: 'Step {0} of {1}, current: {2}' },\n skyux_wizard_sr_step_completed: {\n message: 'Step {0} of {1}, completed: {2}',\n },\n skyux_wizard_sr_step_unavailable: {\n message: 'Step {0} of {1}, unavailable: {2}',\n },\n },\n 'FR-CA': {\n skyux_tab_add: { message: 'Ajouter un onglet' },\n skyux_tab_close: { message: 'Fermer l’onglet {0}' },\n skyux_tabs_navigator_finish: { message: 'Terminer' },\n skyux_tabs_navigator_next: { message: 'Suivant' },\n skyux_tabs_navigator_previous: { message: 'Précédent' },\n skyux_tab_open: { message: 'Ouvrir l’onglet' },\n skyux_vertical_tabs_show_tabs_text: { message: 'Liste des onglets' },\n skyux_wizard_sr_step_current: {\n message: 'Étape {0} de {1}, en cours : {2}',\n },\n skyux_wizard_sr_step_completed: {\n message: 'Étape {0} de {1}, terminée : {2}',\n },\n skyux_wizard_sr_step_unavailable: {\n message: 'Étape {0} de {1}, non disponible : {2}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyTabsResourcesModule {}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Tracks the element IDs for all tabs within a tablist.\n * @internal\n */\n@Injectable()\nexport class SkyTabIdService {\n public get ids(): Observable<string[]> {\n return this.#idsObs;\n }\n\n #ids: Map<string, string>;\n #ids$: BehaviorSubject<string[]>;\n #idsObs: Observable<string[]>;\n\n constructor() {\n this.#ids = new Map();\n this.#ids$ = new BehaviorSubject<string[]>([]);\n this.#idsObs = this.#ids$.asObservable();\n }\n\n /**\n * Associates a tab's ID with its parent tablist.\n * @param {string} id A unique ID for the tab's registration.\n * @param {string} elementId The ID applied to the tab's element.\n */\n public register(id: string, elementId: string): void {\n if (!this.#ids.has(id) || this.#ids.get(id) !== elementId) {\n this.#ids.set(id, elementId);\n this.#emitIds();\n }\n }\n\n /**\n * Disassociates a tab's ID with its parent tablist.\n * @param {string} id The ID used to register the tab.\n */\n public unregister(id: string): void {\n if (this.#ids.has(id)) {\n this.#ids.delete(id);\n this.#emitIds();\n }\n }\n\n #emitIds(): void {\n this.#ids$.next(Array.from(this.#ids.values()));\n }\n}\n","import { DOCUMENT, ElementRef, Injectable, inject } from '@angular/core';\n\nconst VERTICAL_TABSET_BUTTON_SELECTOR = '.sky-vertical-tabset-button';\nconst VERTICAL_TABSET_BUTTON_DISABLED_SELECTOR = `${VERTICAL_TABSET_BUTTON_SELECTOR}-disabled`;\n\n@Injectable()\nexport class SkyVerticalTabsetAdapterService {\n #document = inject(DOCUMENT);\n\n public scrollToContentTop(element: ElementRef): void {\n element.nativeElement.scrollTop = 0;\n }\n\n public focusButton(elRef: ElementRef<HTMLElement> | undefined): boolean {\n return this.#focusButtonEl(elRef?.nativeElement);\n }\n\n public focusFirstButton(\n tabGroups: ElementRef<HTMLElement> | undefined,\n ): void {\n const tabGroupsEl = tabGroups?.nativeElement;\n\n if (tabGroupsEl) {\n const firstButtonEl = tabGroupsEl.querySelector(\n VERTICAL_TABSET_BUTTON_SELECTOR,\n ) as HTMLElement | null;\n\n if (firstButtonEl) {\n firstButtonEl.focus();\n }\n }\n }\n\n public focusNextButton(tabGroups: ElementRef | undefined): void {\n this.#focusSiblingButton(tabGroups);\n }\n\n public focusPreviousButton(tabGroups: ElementRef | undefined): void {\n this.#focusSiblingButton(tabGroups, true);\n }\n\n #focusSiblingButton(\n tabGroups: ElementRef<HTMLElement> | undefined,\n previous?: boolean,\n ): void {\n if (tabGroups) {\n const focusedEl = this.#document.activeElement as HTMLElement | null;\n\n if (focusedEl?.matches(VERTICAL_TABSET_BUTTON_SELECTOR)) {\n const tabGroupsEl = tabGroups.nativeElement;\n\n const buttonEls = Array.from(\n tabGroupsEl.querySelectorAll(VERTICAL_TABSET_BUTTON_SELECTOR),\n ) as HTMLElement[];\n\n if (previous) {\n buttonEls.reverse();\n }\n\n const focusedIndex = buttonEls.indexOf(focusedEl);\n\n for (let i = 1, n = buttonEls.length; i < n; i++) {\n // Offset the index of the next button from the index of the\n // currently focused button, circling back to the first button\n // when the end of the list is reached.\n const offset = (i + focusedIndex) % n;\n\n if (this.#focusButtonEl(buttonEls[offset])) {\n break;\n }\n }\n }\n }\n }\n\n #focusButtonEl(el: HTMLElement | null | undefined): boolean {\n if (el && !el.matches(VERTICAL_TABSET_BUTTON_DISABLED_SELECTOR)) {\n el.focus();\n return this.#elHasFocus(el);\n }\n\n return false;\n }\n\n #elHasFocus(el: HTMLElement | null | undefined): boolean {\n return !!el && el === this.#document.activeElement;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyVerticalTabsetGroupMessage } from './vertical-tabset-group-message';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyVerticalTabsetGroupService {\n public messageStream = new Subject<SkyVerticalTabsetGroupMessage>();\n}\n","import { ElementRef, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SkyMediaQueryService } from '@skyux/core';\n\nimport { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\n\nimport { SkyVerticalTabComponent } from './vertical-tab.component';\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupComponent } from './vertical-tabset-group.component';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyVerticalTabsetService {\n public activeIndex: number | undefined = undefined;\n\n public content: ElementRef | undefined;\n\n public hidingTabs = new BehaviorSubject(false);\n\n public indexChanged = new ReplaySubject<number | undefined>(1);\n\n public maintainTabContent: boolean | undefined = false;\n\n public showingTabs = new BehaviorSubject(false);\n\n public switchingMobile = new Subject<boolean>();\n\n public tabs: SkyVerticalTabComponent[] = [];\n\n public tabAdded = new Subject<SkyVerticalTabComponent>();\n\n public tabClicked = new ReplaySubject<boolean>(1);\n\n #groups: SkyVerticalTabsetGroupComponent[] = [];\n\n #contentAdded = false;\n\n #tabsVisible = false;\n\n #isMobile = false;\n\n #adapterSvc = inject(SkyVerticalTabsetAdapterService);\n\n constructor() {\n inject(SkyMediaQueryService)\n .breakpointChange.pipe(takeUntilDestroyed())\n .subscribe((breakpoint) => {\n const nowMobile = breakpoint === 'xs';\n\n if (nowMobile && !this.#isMobile) {\n // switching to mobile\n this.switchingMobile.next(true);\n\n if (!this.#tabsVisible) {\n this.hidingTabs.next(true);\n }\n } else if (!nowMobile && this.#isMobile) {\n // switching to widescreen\n this.switchingMobile.next(false);\n\n if (!this.#tabsVisible) {\n this.showingTabs.next(true);\n }\n }\n\n this.#isMobile = nowMobile;\n });\n }\n\n public addTab(tab: SkyVerticalTabComponent): void {\n const index = this.tabs.length;\n tab.index = index;\n\n this.tabs.push(tab);\n\n if (tab.active) {\n this.activateTab(tab);\n }\n\n this.tabAdded.next(tab);\n }\n\n public destroyTab(tab: SkyVerticalTabComponent): void {\n const tabIndex = this.tabs.indexOf(tab);\n if (tabIndex === -1) {\n return;\n }\n\n if (\n this.maintainTabContent &&\n tab.contentRendered &&\n /* istanbul ignore next */\n this.content?.nativeElement.contains(tab.tabContent?.nativeElement)\n ) {\n this.content?.nativeElement.removeChild(tab.tabContent?.nativeElement);\n }\n\n this.tabs.splice(tabIndex, 1);\n // update tab indices\n this.tabs.forEach((tabItem, index) => (tabItem.index = index));\n\n if (tab.active) {\n if (!this.maintainTabContent) {\n this.#destroyContent();\n }\n // Try selecting the next tab first, and if there's no next tab then\n // try selecting the previous one.\n const newActiveTab = this.tabs[tabIndex] || this.tabs[tabIndex - 1];\n /*istanbul ignore else */\n if (newActiveTab) {\n newActiveTab.activateTab();\n }\n }\n }\n\n public addGroup(group: SkyVerticalTabsetGroupComponent): void {\n this.#groups.push(group);\n }\n\n public destroyGroup(group: SkyVerticalTabsetGroupComponent): void {\n const groupIndex = this.#groups.indexOf(group);\n\n if (groupIndex >= 0) {\n this.#groups.splice(groupIndex, 1);\n }\n }\n\n public activateTab(tab: SkyVerticalTabComponent): void {\n // deactivate active tab\n const activeTab = this.tabs.find((t) => t.index === this.activeIndex);\n if (activeTab && activeTab.index !== tab.index) {\n activeTab.active = false;\n activeTab.tabDeactivated();\n }\n\n this.activeIndex = tab.index;\n this.tabClicked.next(true);\n this.#updateTabClicked();\n }\n\n public activeTab(): SkyVerticalTabComponent | undefined {\n return this.tabs.find((t) => t.index === this.activeIndex);\n }\n\n public isMobile(): boolean {\n return this.#isMobile;\n }\n\n public updateContent(): void {\n if (!this.maintainTabContent) {\n if (!this.#contentAdded && this.contentVisible()) {\n // content needs to be moved\n this.#moveContent();\n } else if (this.#contentAdded && !this.contentVisible()) {\n // content hidden\n this.#contentAdded = false;\n }\n } else {\n this.tabs.forEach((tab) => {\n if (!tab.contentRendered) {\n this.content?.nativeElement.appendChild(\n tab.tabContent?.nativeElement,\n );\n tab.contentRendered = true;\n }\n });\n }\n }\n\n public tabsVisible(): boolean {\n return !this.isMobile() || this.#tabsVisible;\n }\n\n public contentVisible(): boolean {\n return !this.isMobile() || !this.#tabsVisible;\n }\n\n public showTabs(): void {\n this.#tabsVisible = true;\n this.#contentAdded = false;\n this.showingTabs.next(true);\n }\n\n public focusActiveTab(tabGroups: ElementRef | undefined): void {\n let focused = false;\n\n const activeTab = this.tabs.find((tab) => tab.active);\n\n if (activeTab) {\n const parentGroup = this.#findParentGroup(activeTab);\n\n const buttonToFocus =\n parentGroup && !parentGroup.open\n ? parentGroup.groupHeadingButton\n : activeTab.tabButton;\n\n focused = this.#adapterSvc.focusButton(buttonToFocus);\n }\n\n if (!focused) {\n this.#adapterSvc.focusFirstButton(tabGroups);\n }\n }\n\n #findParentGroup(\n tab: SkyVerticalTabComponent,\n ): SkyVerticalTabsetGroupComponent | undefined {\n return this.#groups.find((group) =>\n group.tabs?.some((groupTab) => tab === groupTab),\n );\n }\n\n #destroyContent(): void {\n if (this.content) {\n this.content.nativeElement.innerHTML = '';\n }\n this.content = undefined;\n }\n\n #moveContent(): void {\n /* istanbul ignore else */\n if (this.content && !this.#contentAdded) {\n const activeTab = this.activeTab();\n const activeContent = activeTab ? activeTab.tabContent : undefined;\n\n if (activeContent && activeTab && activeContent.nativeElement) {\n this.content.nativeElement.appendChild(activeContent.nativeElement);\n activeTab.contentRendered = true;\n this.#contentAdded = true;\n }\n }\n }\n\n #updateTabClicked(): void {\n this.#contentAdded = false;\n\n if (this.isMobile()) {\n this.#tabsVisible = false;\n this.hidingTabs.next(true);\n }\n\n this.indexChanged.next(this.activeIndex);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n inject,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupService } from './vertical-tabset-group.service';\nimport { SkyVerticalTabsetService } from './vertical-tabset.service';\n\nlet nextId = 0;\n\n@Component({\n selector: 'sky-vertical-tab',\n templateUrl: './vertical-tab.component.html',\n styleUrls: ['./vertical-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyVerticalTabComponent implements OnInit, OnDestroy {\n /**\n * Whether the tab is active when the tabset loads.\n * @default false\n */\n @Input()\n public set active(value: boolean | undefined) {\n if (value !== this.#_active) {\n this.#_active = value ?? false;\n\n if (this.#_active) {\n this.#tabsetService.activateTab(this);\n }\n }\n }\n\n public get active(): boolean {\n return this.#_active;\n }\n\n #_active = false;\n\n /**\n * The HTML element ID of the element that contains\n * the content that the vertical tab displays, which corresponds to the `tabId`. This property\n * [supports accessibility rules for disclosures](https://www.w3.org/TR/wai-aria-practices-1.1/#disclosure).\n * For more information about the `aria-controls` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-controls).\n * @deprecated Now that the vertical tabs provide aria labels automatically, this input is no longer necessary.\n */\n @Input()\n public ariaControls: string | undefined;\n\n /**\n * The ARIA role for the vertical tab\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)\n * by indicating how the tab functions and what it controls. For information about how\n * an ARIA role indicates what an item represents on a web page, see the\n * [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/#roles).\n * @default \"tab\"\n * @deprecated Any other value than `tab` could lead to a poor user experience for users with assistive technology.\n * In the next major version, this property will be automatically set to `tab`.\n */\n @Input()\n public get ariaRole(): string {\n return this.#_ariaRole;\n }\n public set ariaRole(value: string | undefined) {\n this.#_ariaRole = value ?? 'tab';\n }\n\n /**\n * Whether to disable the tab.\n */\n @Input()\n public disabled: boolean | undefined = false;\n\n /**\n * Whether to indicate that the tab has an error.\n * @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.\n */\n @Input()\n public errorIndicator: boolean | undefined = false;\n\n /**\n * Whether to indicate that the tab has required content.\n * @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.\n */\n @Input()\n public requiredIndicator: boolean | undefined = false;\n\n /**\n * Displays an item count alongside the tab header to indicate how many list items the tab contains.\n */\n @Input()\n public tabHeaderCount: number | undefined;\n\n /**\n * The tab header.\n * @required\n */\n @Input()\n public tabHeading: string | undefined;\n\n /**\n * Whether to display a chevron-right icon on the right hand side of the tab.\n * @internal\n */\n @Input()\n public showTabRightArrow: boolean | undefined;\n\n /**\n * The ID for the tab.\n * @deprecated Now that the vertical tabs provide aria labels automatically, this input is no longer necessary.\n */\n @Input()\n public set tabId(value: string | undefined) {\n this.#tabIdOrDefault = value || this.#defaultTabId;\n this.#tabIdSvc?.register(this.#defaultTabId, this.#tabIdOrDefault);\n }\n\n public get tabId(): string {\n return this.#tabIdOrDefault;\n }\n\n public set contentRendered(value: boolean) {\n this.#_contentRendered = value;\n\n /* istanbul ignore else */\n if (this.#_contentRendered) {\n // NOTE: Trigger another change detection cycle when the service marks\n // this tab as \"rendered\".\n setTimeout(() => {\n if (this.tabContent) {\n this.#changeRef.markForCheck();\n }\n });\n }\n }\n\n public get contentRendered(): boolean {\n return this.#_contentRendered;\n }\n\n public index: number | undefined;\n\n public isMobile = false;\n\n @ViewChild('tabButton')\n public tabButton: ElementRef | undefined;\n\n @ViewChild('tabContentWrapper')\n public tabContent: ElementRef | undefined;\n\n public groupService = inject(SkyVerticalTabsetGroupService, {\n optional: true,\n });\n\n #_ariaRole = 'tab';\n\n #_contentRendered = false;\n\n #tabIdOrDefault: string;\n\n #defaultTabId: string;\n\n #mobileSubscription = new Subject();\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #adapterService = inject(SkyVerticalTabsetAdapterService);\n readonly #changeRef = inject(ChangeDetectorRef);\n readonly #tabsetService = inject(SkyVerticalTabsetService);\n readonly #tabIdSvc = inject(SkyTabIdService, { optional: true });\n\n constructor() {\n this.#tabIdOrDefault = this.#defaultTabId = `sky-vertical-tab-${++nextId}`;\n this.tabId = this.#defaultTabId;\n }\n\n public ngOnInit(): void {\n this.isMobile = this.#tabsetService.isMobile();\n this.#changeRef.markForCheck();\n\n this.#tabsetService.switchingMobile.subscribe((mobile: boolean) => {\n this.isMobile = mobile;\n this.#changeRef.markForCheck();\n });\n\n this.#tabsetService.addTab(this);\n }\n\n public ngOnDestroy(): void {\n this.#tabIdSvc?.unregister(this.#defaultTabId);\n this.#mobileSubscription.unsubscribe();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#tabsetService.destroyTab(this);\n }\n\n public activateTab(): void {\n if (!this.disabled) {\n this.active = true;\n this.#tabsetService.activateTab(this);\n\n this.#changeRef.markForCheck();\n }\n }\n\n public focusButton(): void {\n this.#adapterService.focusButton(this.tabButton);\n }\n\n public tabButtonActivate(event: Event): void {\n this.activateTab();\n event.stopPropagation();\n }\n\n public tabButtonArrowLeft(event: Event): void {\n if (this.groupService) {\n this.groupService.messageStream.next({\n messageType: 'focus',\n });\n\n event.preventDefault();\n }\n }\n\n public tabDeactivated(): void {\n this.#changeRef.markForCheck();\n }\n}\n","<a\n #tabButton\n class=\"sky-vertical-tab sky-vertical-tabset-button\"\n [attr.aria-controls]=\"\n isMobile ? undefined : ariaControls || tabContentPane.id\n \"\n [attr.aria-disabled]=\"isMobile ? undefined : disabled || undefined\"\n [attr.aria-selected]=\"isMobile ? undefined : active\"\n [attr.id]=\"tabId\"\n [attr.role]=\"isMobile ? undefined : ariaRole\"\n [ngClass]=\"{\n 'sky-vertical-tab-active': active,\n 'sky-vertical-tabset-button-disabled': disabled,\n 'sky-font-deemphasized': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"activateTab()\"\n (keyup.arrowleft)=\"tabButtonArrowLeft($event)\"\n (keyup.enter)=\"tabButtonActivate($event)\"\n (keyup.space)=\"tabButtonActivate($event)\"\n>\n <div class=\"sky-vertical-tab-display\">\n <div\n class=\"sky-vertical-tab-heading\"\n [ngClass]=\"{ 'sky-control-label-required': requiredIndicator }\"\n >\n <span class=\"sky-vertical-tab-heading-value\">{{ tabHeading }}</span>\n @if (tabHeaderCount || tabHeaderCount === 0) {\n <span class=\"sky-vertical-tab-count\"> ({{ tabHeaderCount }}) </span>\n }\n </div>\n @if (errorIndicator) {\n <sky-status-indicator\n class=\"sky-vertical-tab-heading-error\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n />\n }\n @if (isMobile && showTabRightArrow) {\n <sky-icon class=\"sky-vertical-tab-right-arrow\" iconName=\"chevron-right\" />\n }\n </div>\n</a>\n\n<div #tabContentWrapper skyResponsiveHost>\n <div\n #tabContentPane\n class=\"sky-vertical-tab-content-pane\"\n role=\"tabpanel\"\n tabindex=\"0\"\n skyId\n [attr.aria-labelledby]=\"tabId\"\n [ngClass]=\"{ 'sky-vertical-tab-hidden': !active }\"\n >\n <ng-content />\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { SkyIdService } from '@skyux/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabComponent } from './vertical-tab.component';\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupService } from './vertical-tabset-group.service';\nimport { SkyVerticalTabsetService } from './vertical-tabset.service';\n\n@Component({\n selector: 'sky-vertical-tabset-group',\n templateUrl: './vertical-tabset-group.component.html',\n styleUrls: ['./vertical-tabset-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [SkyVerticalTabsetGroupService],\n standalone: false,\n})\nexport class SkyVerticalTabsetGroupComponent implements OnInit, OnDestroy {\n /**\n * Whether to disable the ability to expand and collapse the group.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n this.#updateSlideDirection();\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n /**\n * The header for the collapsible group of tabs.\n */\n @Input()\n public groupHeading: string | undefined;\n\n /**\n * Whether the collapsible group is expanded.\n * @default false\n */\n @Input()\n public set open(value: boolean | undefined) {\n this.#_open = value;\n this.#updateSlideDirection();\n }\n\n public get open(): boolean | undefined {\n return this.#_open;\n }\n\n @ContentChildren(SkyVerticalTabComponent)\n public tabs: QueryList<SkyVerticalTabComponent> | undefined;\n\n @ViewChild('groupHeadingButton')\n public groupHeadingButton: ElementRef | undefined;\n public slideDirection: 'down' | 'up' = 'up';\n\n protected groupId: string;\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #tabService = inject(SkyVerticalTabsetService);\n readonly #changeRef = inject(ChangeDetectorRef);\n #adapterService = inject(SkyVerticalTabsetAdapterService);\n #idService = inject(SkyIdService);\n #tabIdService = inject(SkyTabIdService);\n #groupService = inject(SkyVerticalTabsetGroupService);\n\n #_disabled: boolean | undefined;\n #_open: boolean | undefined = false;\n\n constructor() {\n this.groupId = this.#idService.generateId();\n\n this.#groupService.messageStream.subscribe((message) => {\n switch (message.messageType) {\n case 'focus':\n this.#focusButton();\n }\n });\n }\n\n public ngOnInit(): void {\n this.#tabIdService.register(this.groupId, this.groupId);\n\n this.#tabService.addGroup(this);\n\n this.#tabService.hidingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => this.#tabsHidden());\n\n this.#tabService.showingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => this.#tabsShown());\n\n this.#tabService.tabClicked\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => this.#tabClicked());\n }\n\n public ngOnDestroy(): void {\n this.#tabService.destroyGroup(this);\n\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n\n this.#tabIdService.unregister(this.groupId);\n }\n\n public toggleMenuOpen(): void {\n if (!this.disabled) {\n this.open = !this.open;\n }\n\n this.#updateSlideDirection();\n this.#changeRef.markForCheck();\n }\n\n protected groupButtonArrowLeft(event: Event): void {\n if (this.open) {\n this.toggleMenuOpen();\n }\n\n event.preventDefault();\n }\n\n protected groupButtonArrowRight(event: Event): void {\n if (this.open) {\n this.tabs?.get(0)?.focusButton();\n } else {\n this.toggleMenuOpen();\n }\n\n event.preventDefault();\n }\n\n public isActive(): boolean {\n return !!this.tabs && this.tabs.find((t) => !!t.active) !== undefined;\n }\n\n #tabClicked(): void {\n this.#changeRef.markForCheck();\n }\n\n #tabsHidden(): void {\n this.#updateSlideDirection();\n this.#changeRef.markForCheck();\n }\n\n #tabsShown(): void {\n this.#updateSlideDirection();\n this.#changeRef.markForCheck();\n }\n\n #updateSlideDirection(): void {\n this.slideDirection = this.open && !this.disabled ? 'down' : 'up';\n }\n\n #focusButton(): void {\n this.#adapterService.focusButton(this.groupHeadingButton);\n }\n}\n","<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-active': isActive(),\n 'sky-vertical-tabset-group-header-sub-open': open,\n 'sky-font-deemphasized': disabled\n }\"\n >\n <button\n #groupHeadingButton\n class=\"sky-vertical-tabset-button\"\n role=\"tab\"\n type=\"button\"\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-disabled]=\"disabled || undefined\"\n [attr.aria-expanded]=\"!disabled && open\"\n [id]=\"groupId\"\n [ngClass]=\"{\n 'sky-vertical-tabset-button-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"toggleMenuOpen()\"\n (keyup.arrowleft)=\"groupButtonArrowLeft($event)\"\n (keyup.arrowright)=\"groupButtonArrowRight($event)\"\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"!disabled && open ? 'up' : 'down'\"\n />\n </button>\n </div>\n <sky-animation-slide [opened]=\"slideDirection === 'down'\">\n <div\n #groupContent\n class=\"sky-vertical-tabset-group-content\"\n skyId\n [attr.labelledby]=\"groupId\"\n >\n <ng-content />\n </div>\n </sky-animation-slide>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetService } from './vertical-tabset.service';\n\n/**\n * The default width of the tabs pane. Also serves as the maximum width of the\n * pane for any `tabWidth` value.\n */\nconst DEFAULT_TAB_WIDTH = '25%';\n\n@Component({\n selector: 'sky-vertical-tabset',\n templateUrl: './vertical-tabset.component.html',\n styleUrls: ['./vertical-tabset.component.scss'],\n providers: [SkyTabIdService, SkyVerticalTabsetService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyVerticalTabsetComponent\n implements OnInit, AfterViewChecked, OnDestroy\n{\n /**\n * The text to display on the show tabs button on mobile devices.\n */\n @Input()\n public showTabsText: string | undefined;\n\n /**\n * The ARIA label for the tabset. This sets the tabset's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the tabset. This sets the tabset's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * The ARIA role for the vertical tabset\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)\n * by indicating how the tabset functions and what it controls. For information about how\n * an ARIA role indicates what an item represents on a web page, see the\n * [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/#roles).\n * @default \"tablist\"\n * @deprecated Any other value than `tablist` could lead to a poor user experience for users with assistive technology.\n * In the next major version, this property will be automatically set to `tablist`.\n */\n @Input()\n public get ariaRole(): string {\n return this.#_ariaRole;\n }\n\n public set ariaRole(value: string | undefined) {\n this.#_ariaRole = value ?? 'tablist';\n }\n\n /**\n * Whether the vertical tabset loads tab content during initialization so that it\n * displays content without moving around elements in the content container.\n * @default false\n */\n @Input()\n public maintainTabContent: boolean | undefined = false;\n\n /**\n * The width of the tabs pane as a CSS width value (such as `200px`, `15rem`,\n * or `20%`). Set to `\"auto\"` to size based on tab label content. Maximum\n * width is 25%.\n * @default \"25%\"\n */\n public readonly tabWidth = input(DEFAULT_TAB_WIDTH, {\n transform: (value: string | undefined): string =>\n value?.trim() || DEFAULT_TAB_WIDTH,\n });\n\n /**\n * Fires when the active tab changes. Emits the index of the active tab. The\n * index is based on the tab's position when it loads.\n */\n @Output()\n public activeChange = new EventEmitter<number>();\n\n @ViewChild('groupContainerWrapper')\n public tabGroups: ElementRef | undefined;\n\n @ViewChild('skySideContent')\n public content: ElementRef | undefined;\n\n @ViewChild('contentContainerWrapper')\n public contentWrapper: ElementRef | undefined;\n\n public ariaOwns: string | undefined;\n\n public readonly isMobile = signal(false);\n\n protected tablistHasFocus = false;\n\n #ngUnsubscribe = new Subject<void>();\n #_ariaRole = 'tablist';\n\n readonly #resources = inject(SkyLibResourcesService);\n readonly #changeRef = inject(ChangeDetectorRef);\n\n public readonly adapterService = inject(SkyVerticalTabsetAdapterService);\n public readonly tabService = inject(SkyVerticalTabsetService);\n public readonly tabIdSvc = inject(SkyTabIdService);\n\n public ngOnInit(): void {\n this.tabService.maintainTabContent = this.maintainTabContent;\n\n this.tabService.indexChanged\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((index) => {\n this.activeChange.emit(index);\n if (this.contentWrapper) {\n this.adapterService.scrollToContentTop(this.contentWrapper);\n }\n this.#changeRef.markForCheck();\n });\n\n this.tabService.switchingMobile\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((mobile: boolean) => {\n this.isMobile.set(mobile);\n });\n\n if (this.tabService.isMobile()) {\n this.isMobile.set(true);\n }\n if (!this.showTabsText) {\n this.#resources\n .getString('skyux_vertical_tabs_show_tabs_text')\n .pipe(take(1))\n .subscribe((resource) => {\n /* sanity check */\n /* istanbul ignore else */\n if (!this.showTabsText) {\n this.showTabsText = resource;\n }\n });\n }\n }\n\n public ngAfterViewChecked(): void {\n this.tabService.content = this.content;\n this.tabService.updateContent();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n protected tabsetFocus(): void {\n this.tabService.focusActiveTab(this.tabGroups);\n }\n\n protected trapFocusInTablist(): void {\n // This will set the tab index of the the vertical tabset element to -1\n // while focus is inside the tab list, allowing Shift+Tab to move\n // to the next element above the tab list element. Otherwise focus would\n // be trapped on the currently focused tab.\n this.tablistHasFocus = true;\n }\n\n protected resetTabIndex(): void {\n this.tablistHasFocus = false;\n }\n\n protected tabGroupsArrowDown(): void {\n this.adapterService.focusNextButton(this.tabGroups);\n }\n\n protected tabGroupsArrowUp(): void {\n this.adapterService.focusPreviousButton(this.tabGroups);\n }\n\n protected readonly tabGroupContainerFlexBasis = computed<string | undefined>(\n () => (this.isMobile() ? undefined : this.tabWidth()),\n );\n\n protected readonly tabGroupContainerMaxWidth = computed<string | undefined>(\n () => (this.isMobile() ? undefined : DEFAULT_TAB_WIDTH),\n );\n}\n","<div\n class=\"sky-vertical-tabset\"\n [tabIndex]=\"tablistHasFocus ? -1 : 0\"\n (focus)=\"tabsetFocus()\"\n>\n <!--\n ARIA rules do not allow tabpanel elements to be children of a tablist element.\n However, the markup for each sky-vertical-tab component includes both the tab button\n and its panel, making the panel element a child of its tablist. Moreover, our\n sky-vertical-tab components can be grouped within collapsible containers, which also\n violates accessibility rules because only tab buttons can be children of a tablist.\n To address this, we create an empty tablist element with an aria-owns attribute,\n pointing to each tab element individually. That way, we don't have to worry about the\n structure for each sky-vertical-tab component in order to satisfy accessibility\n guidelines.\n -->\n <span\n class=\"sky-vertical-tabset-tablist\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-orientation]=\"isMobile() ? undefined : 'vertical'\"\n [attr.aria-owns]=\"\n isMobile() ? undefined : (tabIdSvc.ids | async)?.join(' ') || undefined\n \"\n [attr.role]=\"isMobile() ? undefined : ariaRole\"\n ></span>\n <div\n #groupContainerWrapper\n class=\"sky-vertical-tabset-group-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"transform\"\n [style.flex-basis]=\"tabGroupContainerFlexBasis()\"\n [style.max-width]=\"tabGroupContainerMaxWidth()\"\n [class.sky-animation-slide-enter-left]=\"tabService.isMobile()\"\n [ngClass]=\"{ 'sky-vertical-tabset-hidden': !tabService.tabsVisible() }\"\n [tabIndex]=\"tablistHasFocus ? -1 : 0\"\n [transitionTrigger]=\"tabService.tabsVisible()\"\n (keydown.arrowDown)=\"tabGroupsArrowDown(); $event.preventDefault()\"\n (keydown.arrowUp)=\"tabGroupsArrowUp(); $event.preventDefault()\"\n (focusin)=\"trapFocusInTablist()\"\n (focusout)=\"resetTabIndex()\"\n (transitionEnd)=\"tabsetFocus()\"\n >\n <ng-content />\n </div>\n @if (maintainTabContent || tabService.contentVisible()) {\n <div\n #contentContainerWrapper\n class=\"sky-vertical-tabset-content\"\n [class.sky-animation-slide-enter-right]=\"tabService.isMobile()\"\n [ngClass]=\"{\n 'sky-vertical-tabset-content-hidden': !tabService.contentVisible()\n }\"\n (focusin)=\"resetTabIndex()\"\n >\n <div #skySideContent></div>\n @if (!tabService.tabsVisible()) {\n <button\n class=\"sky-btn sky-btn-primary sky-vertical-tabset-show-tabs-btn\"\n type=\"button\"\n (click)=\"tabService.showTabs()\"\n >\n <sky-icon iconName=\"chevron-left\" />\n {{ showTabsText }}\n </button>\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n SkyIdModule,\n SkyResponsiveHostDirective,\n _SkyAnimationSlideComponent,\n _SkyTransitionEndHandlerDirective,\n} from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport {\n SkyExpansionIndicatorModule,\n SkyStatusIndicatorModule,\n} from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyTabsResourcesModule } from '../shared/sky-tabs-resources.module';\n\nimport { SkyVerticalTabComponent } from './vertical-tab.component';\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupComponent } from './vertical-tabset-group.component';\nimport { SkyVerticalTabsetComponent } from './vertical-tabset.component';\n\n@NgModule({\n declarations: [\n SkyVerticalTabsetComponent,\n SkyVerticalTabsetGroupComponent,\n SkyVerticalTabComponent,\n ],\n imports: [\n CommonModule,\n SkyIconModule,\n SkyIdModule,\n SkyExpansionIndicatorModule,\n SkyResponsiveHostDirective,\n SkyStatusIndicatorModule,\n SkyTabsResourcesModule,\n SkyThemeModule,\n _SkyAnimationSlideComponent,\n _SkyTransitionEndHandlerDirective,\n ],\n providers: [SkyVerticalTabsetAdapterService],\n exports: [\n SkyVerticalTabsetComponent,\n SkyVerticalTabsetGroupComponent,\n SkyVerticalTabComponent,\n ],\n})\nexport class SkyVerticalTabsetModule {}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class SkySectionedFormService {\n /**\n * @internal\n */\n public invalidChange: BehaviorSubject<boolean | undefined> =\n new BehaviorSubject<boolean | undefined>(undefined);\n /**\n * @internal\n */\n public requiredChange: BehaviorSubject<boolean | undefined> =\n new BehaviorSubject<boolean | undefined>(undefined);\n\n /**\n * Sets the current section's invalid state based on the `isInvalid` parameter.\n * This method is used within a `sky-sectioned-form-section` element.\n */\n public invalidFieldChanged(isInvalid: boolean | undefined): void {\n this.invalidChange.next(isInvalid);\n }\n\n /**\n * Sets the current section's required state based on the `isRequired` parameter.\n * This method is used within a `sky-sectioned-form-section` element.\n */\n public requiredFieldChanged(isRequired: boolean | undefined): void {\n this.requiredChange.next(isRequired);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n inject,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyVerticalTabsetService } from '../vertical-tabset/vertical-tabset.service';\n\nimport { SkyVerticalTabComponent } from './../vertical-tabset/vertical-tab.component';\nimport { SkySectionedFormService } from './sectioned-form.service';\n\nlet nextId = 0;\n\n/**\n * Creates an individual form to display as a section within the sectioned form.\n */\n@Component({\n selector: 'sky-sectioned-form-section',\n templateUrl: './sectioned-form-section.component.html',\n providers: [SkySectionedFormService],\n standalone: false,\n})\nexport class SkySectionedFormSectionComponent implements OnInit, OnDestroy {\n public sectionTabId = `sky-sectioned-form-tab-${++nextId}`;\n public sectionContentId = `sky-sectioned-form-section-${++nextId}`;\n\n /**\n * The section header.\n * @required\n */\n @Input()\n public heading: string | undefined;\n\n /**\n * The number of items within the section. A counter appears beside the section header.\n */\n @Input()\n public itemCount: number | undefined;\n\n /**\n * Whether the section is active when the form loads.\n * @default false\n */\n @Input()\n public active: boolean | undefined = false;\n\n public fieldRequired: boolean | undefined;\n public fieldInvalid: boolean | undefined;\n\n @ViewChild(SkyVerticalTabComponent)\n public tab: SkyVerticalTabComponent | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #sectionedFormService = inject(SkySectionedFormService);\n readonly #tabsetService = inject(SkyVerticalTabsetService);\n readonly #changeRef = inject(ChangeDetectorRef);\n\n public ngOnInit(): void {\n this.#changeRef.detectChanges();\n\n this.#tabsetService.switchingMobile.subscribe((mobile: boolean) => {\n this.#changeRef.detectChanges();\n });\n\n this.#sectionedFormService.requiredChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(\n (required: boolean | undefined) => (this.fieldRequired = required),\n );\n\n this.#sectionedFormService.invalidChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(\n (invalid: boolean | undefined) => (this.fieldInvalid = invalid),\n );\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n}\n","<sky-vertical-tab\n [active]=\"active\"\n [errorIndicator]=\"fieldInvalid\"\n [requiredIndicator]=\"fieldRequired\"\n [showTabRightArrow]=\"true\"\n [tabHeaderCount]=\"itemCount\"\n [tabHeading]=\"heading\"\n [tabId]=\"sectionTabId\"\n>\n <ng-content />\n</sky-vertical-tab>\n","export enum SkySectionedFormMessageType {\n ShowTabs = 1,\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n afterNextRender,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabsetService } from './../vertical-tabset/vertical-tabset.service';\nimport { SkySectionedFormMessage } from './types/sectioned-form-message';\nimport { SkySectionedFormMessageType } from './types/sectioned-form-message-type';\n\n/**\n * The default width of the tabs pane. Also serves as the maximum width of the\n * pane for any `tabWidth` value.\n */\nconst DEFAULT_TAB_WIDTH = '30%';\n\n/**\n * Creates a container for the sectioned forms.\n */\n@Component({\n selector: 'sky-sectioned-form',\n templateUrl: './sectioned-form.component.html',\n styleUrls: ['./sectioned-form.component.scss'],\n providers: [SkyTabIdService, SkyVerticalTabsetService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkySectionedFormComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n /**\n * Whether the sectioned form loads section content during initialization so that it\n * displays content without moving around elements in the content container.\n * @default false\n */\n @Input()\n public maintainSectionContent: boolean | undefined = false;\n\n /**\n * The width of the tabs pane as a CSS width value (such as `200px`, `15rem`,\n * or `20%`). Set to `\"auto\"` to size based on tab label content. Maximum\n * width is 30%.\n * @default \"30%\"\n */\n public readonly tabWidth = input(DEFAULT_TAB_WIDTH, {\n transform: (value: string | undefined): string =>\n value?.trim() || DEFAULT_TAB_WIDTH,\n });\n\n @Input()\n public set messageStream(\n value: Subject<SkySectionedFormMessage> | undefined,\n ) {\n this.#_messageStream = value || new Subject<SkySectionedFormMessage>();\n this.#initMessageStream();\n }\n\n public get messageStream(): Subject<SkySectionedFormMessage> {\n return this.#_messageStream;\n }\n\n /**\n * Fires when the active tab changes and emits the index of the active\n * section. The index is based on the section's position when the form loads.\n */\n @Output()\n public indexChanged = new EventEmitter<number>();\n\n /**\n * Fires when the sectioned form tabs are shown or hidden.\n */\n @Output()\n public tabsVisibleChanged = new EventEmitter<boolean>();\n\n public ariaOwns: string | undefined;\n\n public ariaRole: string | undefined = 'tablist';\n\n @ViewChild('skySectionSideContent')\n public content: ElementRef | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #messageStreamSub: Subscription | undefined;\n readonly #changeRef = inject(ChangeDetectorRef);\n readonly #tabIdSvc = inject(SkyTabIdService);\n readonly #logger = inject(SkyLogService);\n\n #_messageStream = new Subject<SkySectionedFormMessage>();\n\n protected animationEnabled = signal(false);\n\n protected readonly isMobile = signal(false);\n\n public readonly tabService = inject(SkyVerticalTabsetService);\n\n constructor() {\n // Enable animations after the first render.\n afterNextRender(() => {\n this.animationEnabled.set(true);\n });\n\n this.#initMessageStream();\n\n this.#tabIdSvc.ids.pipe(takeUntil(this.#ngUnsubscribe)).subscribe((ids) => {\n this.ariaOwns = ids.join(' ') || undefined;\n this.#changeRef.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n this.tabService.maintainTabContent = this.maintainSectionContent;\n\n this.tabService.indexChanged\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((index) => {\n this.indexChanged.emit(index);\n this.#changeRef.markForCheck();\n });\n\n this.tabService.switchingMobile\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((mobile: boolean) => {\n if (!mobile) {\n this.ariaRole = 'tablist';\n } else {\n this.ariaRole = undefined;\n }\n\n this.isMobile.set(mobile);\n this.#changeRef.markForCheck();\n });\n\n this.tabService.hidingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.tabsVisibleChanged.emit(false);\n });\n\n this.tabService.showingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.tabsVisibleChanged.emit(true);\n });\n\n if (this.tabService.isMobile()) {\n this.ariaRole = undefined;\n this.isMobile.set(true);\n this.#changeRef.markForCheck();\n }\n }\n\n public ngAfterViewChecked(): void {\n this.tabService.content = this.content;\n this.tabService.updateContent();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * @deprecated Use the `tabsVisibleChanged` output to listen for tab visibility changes.\n */\n /* istanbul ignore next */\n public tabsVisible(): boolean {\n this.#logger.deprecated('SectionedFormComponent.tabsVisible()', {\n deprecationMajorVersion: 8,\n moreInfoUrl:\n 'https://developer.blackbaud.com/skyux/components/sectioned-form',\n replacementRecommendation:\n 'Use the `tabsVisibleChanged` output to listen for tab visibility changes.',\n });\n\n this.#changeRef.markForCheck();\n return this.tabService.tabsVisible();\n }\n\n /**\n * @deprecated Use the `messageStream` input and push a `ShowTabs` message to the message stream instead.\n */\n public showTabs(): void {\n this.#logger.deprecated('SectionedFormComponent.showTabs()', {\n deprecationMajorVersion: 8,\n moreInfoUrl:\n 'https://developer.blackbaud.com/skyux/components/sectioned-form',\n replacementRecommendation:\n 'Use the `messageStream` input and push a `ShowTabs` message to the message stream instead.',\n });\n\n this.#showTabs();\n }\n\n #showTabs(): void {\n this.tabService.showTabs();\n this.#changeRef.markForCheck();\n }\n\n #initMessageStream(): void {\n if (this.#messageStreamSub) {\n this.#messageStreamSub.unsubscribe();\n }\n\n this.#messageStreamSub = this.messageStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((message) => {\n switch (message.type) {\n case SkySectionedFormMessageType.ShowTabs:\n this.#showTabs();\n break;\n }\n });\n }\n\n protected readonly tabsFlexBasis = computed<string | undefined>(() =>\n this.isMobile() ? undefined : this.tabWidth(),\n );\n\n protected readonly tabsMaxWidth = computed<string | undefined>(() =>\n this.isMobile() ? undefined : DEFAULT_TAB_WIDTH,\n );\n}\n","<div class=\"sky-sectioned-form\" (window:resize)=\"tabService.updateContent()\">\n <!--\n ARIA rules do not allow tabpanel elements to be children of a tablist element.\n However, the markup for each sky-vertical-tab component includes both the tab button\n and its panel, making the panel element a child of its tablist. Moreover, our\n sky-vertical-tab components can be grouped within collapsible containers, which also\n violates accessibility rules because only tab buttons can be children of a tablist.\n To address this, we create an empty tablist element with an aria-owns attribute,\n pointing to each tab element individually. That way, we don't have to worry about the\n structure for each sky-vertical-tab component in order to satisfy accessibility\n guidelines.\n -->\n <span\n [attr.aria-orientation]=\"ariaRole ? 'vertical' : undefined\"\n [attr.aria-owns]=\"ariaRole ? ariaOwns : undefined\"\n [attr.role]=\"ariaRole\"\n ></span>\n @if (maintainSectionContent || tabService.tabsVisible()) {\n <div\n class=\"sky-sectioned-form-tabs\"\n [style.flex-basis]=\"tabsFlexBasis()\"\n [style.max-width]=\"tabsMaxWidth()\"\n [class.sky-animation-slide-enter-left]=\"animationEnabled()\"\n [ngClass]=\"{\n 'sky-sectioned-form-tabs-hidden': !tabService.tabsVisible(),\n 'sky-sectioned-form-tabs-only': !tabService.contentVisible()\n }\"\n >\n <ng-content />\n </div>\n }\n @if (maintainSectionContent || tabService.contentVisible()) {\n <div\n #skySectionSideContent\n class=\"sky-sectioned-form-content\"\n [class.sky-animation-slide-enter-right]=\"animationEnabled()\"\n [ngClass]=\"{\n 'sky-sectioned-form-content-hidden': !tabService.contentVisible()\n }\"\n ></div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyVerticalTabsetModule } from '../vertical-tabset/vertical-tabset.module';\n\nimport { SkySectionedFormSectionComponent } from './sectioned-form-section.component';\nimport { SkySectionedFormComponent } from './sectioned-form.component';\n\n@NgModule({\n declarations: [SkySectionedFormComponent, SkySectionedFormSectionComponent],\n imports: [\n CommonModule,\n SkyCheckboxModule,\n SkyThemeModule,\n SkyVerticalTabsetModule,\n ],\n exports: [SkySectionedFormComponent, SkySectionedFormSectionComponent],\n})\nexport class SkySectionedFormModule {}\n","import { ElementRef, Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabButtonAdapterService {\n public focusButtonLink(buttonEl: ElementRef): void {\n buttonEl.nativeElement.querySelector('a').focus();\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { TabButtonViewModel } from './tab-button-view-model';\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabLayoutType } from './tab-layout-type';\nimport { SkyTabsetActiveTabChangeArgs } from './tabset-active-tab-change-args';\nimport { SkyTabsetActiveTabUnregisteredArgs } from './tabset-active-tab-unregistered-args';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabsetService implements OnDestroy {\n public readonly activeTabUnregistered: Observable<SkyTabsetActiveTabUnregisteredArgs>;\n\n public readonly activeTabChange: Observable<SkyTabsetActiveTabChangeArgs>;\n\n public readonly focusedTabBtnIndex: Observable<SkyTabIndex>;\n\n public readonly activeTabLayout: Observable<SkyTabLayoutType>;\n\n public currentActiveTabIndex: SkyTabIndex | undefined = 0;\n\n public currentFocusedTabBtnIndex: SkyTabIndex = 0;\n\n #activeTabChange: BehaviorSubject<SkyTabsetActiveTabChangeArgs>;\n\n #focusedTabBtnIndex: Subject<SkyTabIndex>;\n\n #activeTabUnregistered: Subject<SkyTabsetActiveTabUnregisteredArgs>;\n\n #activeTabLayout: Subject<SkyTabLayoutType>;\n\n #tabs: {\n tabIndex: SkyTabIndex | undefined;\n }[] = [];\n\n #tabCounter = 0;\n\n constructor() {\n this.#activeTabChange = new BehaviorSubject<SkyTabsetActiveTabChangeArgs>({\n initial: true,\n tabIndex: 0,\n });\n\n this.#activeTabLayout = new Subject();\n\n this.#activeTabUnregistered = new Subject();\n\n this.#focusedTabBtnIndex = new Subject();\n\n this.activeTabChange = this.#activeTabChange.asObservable();\n this.activeTabLayout = this.#activeTabLayout.asObservable();\n this.activeTabUnregistered = this.#activeTabUnregistered.asObservable();\n this.focusedTabBtnIndex = this.#focusedTabBtnIndex.asObservable();\n }\n\n public ngOnDestroy(): void {\n this.#activeTabChange.complete();\n this.#activeTabUnregistered.complete();\n this.#focusedTabBtnIndex.complete();\n this.#activeTabLayout.complete();\n }\n\n /**\n * Sets the active tab by its unique `tabIndex` property.\n */\n public setActiveTabIndex(\n value: SkyTabsetActiveTabChangeArgs,\n config = {\n emitChange: true,\n },\n ): void {\n if (\n value.tabIndex !== undefined &&\n !this.tabIndexesEqual(value.tabIndex, this.currentActiveTabIndex)\n ) {\n this.currentActiveTabIndex = value.tabIndex;\n\n /* istanbul ignore else */\n if (config.emitChange) {\n this.#activeTabChange.next(value);\n }\n\n this.setFocusedTabBtnIndex(value.tabIndex);\n }\n }\n\n public focusNextTabBtn(tabButtons: TabButtonViewModel[]): void {\n const currentTabArrayIndex = this.#tabs.findIndex((tab) =>\n this.tabIndexesEqual(tab.tabIndex, this.currentFocusedTabBtnIndex),\n );\n\n for (\n let i = this.#getNextTabArrayIndex(currentTabArrayIndex);\n i !== currentTabArrayIndex;\n i = this.#getNextTabArrayIndex(i)\n ) {\n const tabBtn = tabButtons[i];\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public focusPrevTabBtn(tabButtons: TabButtonViewModel[]): void {\n const currentTabArrayIndex = this.#tabs.findIndex((tab) =>\n this.tabIndexesEqual(tab.tabIndex, this.currentFocusedTabBtnIndex),\n );\n\n for (\n let i = this.#getPrevTabArrayIndex(currentTabArrayIndex);\n i !== currentTabArrayIndex;\n i = this.#getPrevTabArrayIndex(i)\n ) {\n const tabBtn = tabButtons[i];\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public focusFirstOrNearestTabBtn(tabButtons: TabButtonViewModel[]): void {\n for (const tabBtn of tabButtons) {\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public focusLastOrNearestTabBtn(tabButtons: TabButtonViewModel[]): void {\n for (let i = tabButtons.length - 1; i >= 0; i--) {\n const tabBtn = tabButtons[i];\n\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public setFocusedTabBtnIndex(tabIndex: SkyTabIndex): void {\n this.currentFocusedTabBtnIndex = tabIndex;\n this.#focusedTabBtnIndex.next(tabIndex);\n }\n\n /**\n * Registers a tab component.\n */\n public registerTab(tabIndex?: SkyTabIndex): SkyTabIndex {\n if (tabIndex === undefined) {\n tabIndex = this.#tabCounter;\n this.#tabCounter++;\n }\n\n this.#tabs.push({ tabIndex });\n\n return tabIndex;\n }\n\n public updateTabIndex(\n currentTabIndex: SkyTabIndex,\n newTabIndex: SkyTabIndex,\n ): void {\n const found = this.#tabs.find((tab) =>\n this.tabIndexesEqual(tab.tabIndex, currentTabIndex),\n );\n if (found) {\n found.tabIndex = newTabIndex;\n }\n }\n\n public updateActiveTabLayout(layout: SkyTabLayoutType): void {\n this.#activeTabLayout.next(layout);\n }\n\n /**\n * Unregisters a tab component.\n */\n public unregisterTab(tabIndex: SkyTabIndex): void {\n const index = this.#tabs.findIndex((tab) =>\n this.tabIndexesEqual(tab.tabIndex, tabIndex),\n );\n\n // Notify the tabset component when an active tab is unregistered.\n if (this.#isTabIndexActive(this.#tabs[index]?.tabIndex)) {\n this.#activeTabUnregistered.next({\n arrayIndex: index,\n });\n }\n\n this.#tabs.splice(index, 1);\n }\n\n /**\n * Unregisters all tab components at once.\n */\n public unregisterAll(): void {\n this.#tabs = [];\n }\n\n /**\n * Compares two tab indexes and returns `true` if they are equal.\n */\n public tabIndexesEqual(\n tabIndex1: SkyTabIndex | undefined,\n tabIndex2: SkyTabIndex | undefined,\n ): boolean {\n return (\n tabIndex1 === tabIndex2 ||\n (tabIndex1 !== undefined &&\n tabIndex2 !== undefined &&\n +tabIndex1 === +tabIndex2)\n );\n }\n\n /**\n * Verifies if a provided tab index is registered.\n */\n public isValidTabIndex(tabIndex: SkyTabIndex): boolean {\n return this.#tabs.some((tab) =>\n this.tabIndexesEqual(tab.tabIndex, tabIndex),\n );\n }\n\n /**\n * Activates the first registered tab.\n */\n public activateFirstTab(): SkyTabIndex | undefined {\n const firstTabIndex = this.#tabs[0] && this.#tabs[0].tabIndex;\n if (firstTabIndex !== undefined) {\n this.setActiveTabIndex({\n tabIndex: firstTabIndex,\n });\n return firstTabIndex;\n }\n return undefined;\n }\n\n /**\n * Activates the next registered tab, or the previous one based on a provided array index.\n */\n public activateNearestTab(arrayIndex: number): void {\n const newActiveTab = this.#tabs[arrayIndex] || this.#tabs[arrayIndex - 1];\n if (newActiveTab) {\n this.currentActiveTabIndex = newActiveTab.tabIndex;\n }\n }\n\n #isTabIndexActive(tabIndex: SkyTabIndex | undefined): boolean {\n return this.tabIndexesEqual(tabIndex, this.currentActiveTabIndex);\n }\n\n #getNextTabArrayIndex(currentIndex: number): number {\n let nextIndex = currentIndex + 1;\n\n if (nextIndex === this.#tabs.length) {\n nextIndex = 0;\n }\n\n return nextIndex;\n }\n\n #getPrevTabArrayIndex(currentIndex: number): number {\n let prevIndex = currentIndex - 1;\n\n if (prevIndex < 0) {\n prevIndex = this.#tabs.length - 1;\n }\n\n return prevIndex;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabButtonAdapterService } from './tab-button-adapter.service';\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabsetStyle } from './tabset-style';\nimport { SkyTabsetService } from './tabset.service';\n\nconst DEFAULT_DISABLED = false;\n\ntype SkyWizardStepState = 'completed' | 'current' | 'unavailable';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-tab-button',\n templateUrl: './tab-button.component.html',\n styleUrls: ['./tab-button.component.scss'],\n providers: [SkyTabButtonAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyTabButtonComponent implements AfterViewInit, OnDestroy {\n @Input()\n public get active(): boolean | undefined {\n return this.#_isActive;\n }\n public set active(value: boolean | undefined) {\n this.#_isActive = value;\n this.#updateWizardStepState();\n }\n\n @Input()\n public ariaControls: string | undefined;\n\n @Input()\n public buttonHref: string | undefined;\n\n @Input()\n public buttonId: string | undefined;\n\n @Input()\n public buttonText: string | undefined;\n\n @Input()\n public buttonTextCount: string | undefined;\n\n @Input()\n public closeable: boolean | undefined;\n\n @Input()\n public get disabled(): boolean {\n return this.#_isDisabled;\n }\n\n public set disabled(value: boolean | undefined) {\n this.#_isDisabled = value ?? DEFAULT_DISABLED;\n this.#updateWizardStepState();\n }\n\n @Input()\n public tabIndex: SkyTabIndex | undefined;\n\n @Input()\n public tabNumber: number | undefined;\n\n @Input()\n public totalTabsCount: number | undefined;\n\n @Input()\n public get tabStyle(): SkyTabsetStyle | undefined {\n return this.#_tabStyle;\n }\n\n public set tabStyle(style: SkyTabsetStyle | undefined) {\n this.#_tabStyle = style;\n this.#updateWizardStepState();\n }\n\n @Output()\n public buttonClick = new EventEmitter<void>();\n\n @Output()\n public closeClick = new EventEmitter<void>();\n\n public closeBtnTabIndex = '-1';\n public wizardStepState: SkyWizardStepState | undefined;\n #_isActive: boolean | undefined = false;\n #_isDisabled = DEFAULT_DISABLED;\n #_tabStyle: SkyTabsetStyle | undefined;\n readonly #adapterService = inject(SkyTabButtonAdapterService);\n readonly #changeDetectorRef = inject(ChangeDetectorRef);\n readonly #elementRef = inject(ElementRef);\n readonly #tabsetService = inject(SkyTabsetService);\n #ngUnsubscribe = new Subject<void>();\n\n public ngAfterViewInit(): void {\n this.#tabsetService.focusedTabBtnIndex\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((focusedIndex) => {\n if (this.tabIndex !== undefined && focusedIndex === this.tabIndex) {\n this.closeBtnTabIndex = '0';\n this.focusBtn();\n } else {\n this.closeBtnTabIndex = '-1';\n }\n this.#changeDetectorRef.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public onButtonClick(event: any): void {\n if (!this.disabled) {\n this.buttonClick.emit();\n event.preventDefault();\n }\n }\n\n public onTabButtonKeyDown(event: KeyboardEvent): void {\n /*istanbul ignore else */\n if (event.key) {\n switch (event.key.toUpperCase()) {\n case ' ':\n case 'ENTER':\n this.onButtonClick(event);\n break;\n /* istanbul ignore next */\n default:\n break;\n }\n }\n }\n\n public onCloseClick(event: any): void {\n this.closeClick.emit();\n\n // Prevent the click event from bubbling up to the anchor tag;\n // otherwise it will trigger a page refresh.\n event.stopPropagation();\n event.preventDefault();\n }\n\n public focusBtn(): void {\n this.#adapterService.focusButtonLink(this.#elementRef);\n }\n\n public onFocus(): void {\n if (this.tabIndex !== undefined) {\n this.#tabsetService.setFocusedTabBtnIndex(this.tabIndex);\n }\n }\n\n #updateWizardStepState(): void {\n if (this.tabStyle === 'tabs') {\n this.wizardStepState = undefined;\n } else {\n if (this.active) {\n this.wizardStepState = 'current';\n } else if (!this.disabled) {\n this.wizardStepState = 'completed';\n } else {\n this.wizardStepState = 'unavailable';\n }\n }\n\n this.#changeDetectorRef.markForCheck();\n }\n}\n","<div\n class=\"sky-btn-tab-wrapper\"\n [ngClass]=\"{\n 'sky-btn-tab-wrapper-selected': active,\n 'sky-btn-tab-wrapper-disabled': disabled\n }\"\n>\n <a\n #tabButtonEl\n class=\"sky-btn-tab\"\n role=\"tab\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-selected]=\"active\"\n [attr.href]=\"buttonHref\"\n [attr.aria-label]=\"\n tabStyle === 'wizard'\n ? ('skyux_wizard_sr_step_' + wizardStepState\n | skyLibResources: tabNumber : totalTabsCount : buttonText)\n : null\n \"\n [attr.aria-labelledby]=\"tabStyle === 'wizard' ? null : tabHeading.id\"\n [id]=\"buttonId\"\n [ngClass]=\"{\n 'sky-btn-tab-wizard': tabStyle === 'wizard',\n 'sky-btn-tab-selected': active,\n 'sky-btn-tab-disabled': disabled,\n 'sky-tab-btn-closeable': closeable\n }\"\n [tabindex]=\"active ? '0' : '-1'\"\n (click)=\"onButtonClick($event)\"\n (keydown)=\"onTabButtonKeyDown($event)\"\n (focus)=\"onFocus()\"\n >\n <span class=\"sky-tab-heading\" [attr.aria-hidden]=\"true\">\n <span #tabHeading=\"skyId\" skyId>\n {{ buttonText }}\n @if (buttonTextCount !== undefined) {\n <span class=\"sky-tab-header-count\">\n {{ buttonTextCount }}\n </span>\n }\n </span>\n @if (closeable) {\n <span\n class=\"sky-btn-tab-close\"\n [tabindex]=\"closeBtnTabIndex\"\n [attr.aria-label]=\"'skyux_tab_close' | skyLibResources: buttonText\"\n [ngClass]=\"{\n 'sky-btn-tab-close-disabled': disabled\n }\"\n [skyThemeClass]=\"{\n 'sky-btn sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"onCloseClick($event)\"\n (keydown.enter)=\"onCloseClick($event)\"\n >\n <sky-icon iconName=\"close\" />\n </span>\n }\n </span>\n </a>\n</div>\n","import { Location } from '@angular/common';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\n\nimport { Observable, Subject, SubscriptionLike } from 'rxjs';\n\n/**\n * @internal\n */\ntype PermalinkParams = Record<string, string>;\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabsetPermalinkService implements OnDestroy {\n public get popStateChange(): Observable<void> {\n return this.#popStateChange;\n }\n\n #popStateChange = new Subject<void>();\n\n #subscription: SubscriptionLike | undefined;\n\n readonly #activatedRoute = inject(ActivatedRoute);\n readonly #location = inject(Location);\n readonly #router = inject(Router);\n\n public ngOnDestroy(): void {\n this.#subscription?.unsubscribe();\n this.#popStateChange.complete();\n }\n\n public init(): void {\n this.#subscription = this.#location.subscribe(() => {\n this.#popStateChange.next();\n });\n }\n\n /**\n * Returns the value of a URL query param.\n */\n public getParam(name: string): string {\n return this.#getParams()[name];\n }\n\n /**\n * Sets the value of a URL query param.\n */\n public setParam(name: string, value: string | null, initial?: boolean): void {\n const params: Params = this.#getParams();\n params[name] = value ?? undefined;\n\n // Uses merge so other query params are not lost. Deleted query params\n // are set to `undefined` so they are removed from the URL.\n const url = this.#router\n .createUrlTree([], {\n relativeTo: this.#activatedRoute,\n queryParams: params,\n queryParamsHandling: 'merge',\n })\n .toString();\n\n // Abort redirect if the current URL is equal to the new URL.\n if (this.#location.isCurrentPathEqualTo(url)) {\n return;\n }\n\n // Navigate via the Angular router to update the URL and broadcast the\n // change. Use `replaceUrl` on the initial navigation so an extra history\n // item isn't added to the browser's back stack.\n void this.#router.navigate([], {\n relativeTo: this.#activatedRoute,\n queryParams: params,\n queryParamsHandling: 'merge',\n replaceUrl: initial,\n });\n }\n\n /**\n * Removes the provided query param from the URL.\n */\n public clearParam(name: string): void {\n // Don't overwrite the URL while the Angular router is in the process\n // of navigating (e.g. when the tabset is destroyed due to navigating\n // away from the current page).\n if (!this.#router.currentNavigation()) {\n this.setParam(name, null);\n }\n }\n\n /**\n * Returns a relative URL that includes the provided query parameter. The value is intended to be\n * used by an HTML anchor element.\n */\n public getParamHref(name: string | undefined, value: string): string | null {\n if (!name) {\n return null;\n }\n\n const params = this.#getParams();\n params[name] = value;\n\n const baseUrl = this.#location.path().split('?')[0];\n const paramString = Object.keys(params)\n .map((k) => `${k}=${params[k]}`)\n .join('&');\n\n return this.#location.prepareExternalUrl(`${baseUrl}?${paramString}`);\n }\n\n /**\n * Converts the provided string into a value that can be safely used in a URL.\n */\n public urlify(value: string | undefined): string {\n if (!value) {\n return '';\n }\n\n const sanitized = value\n .toLowerCase()\n\n // Remove special characters.\n .replace(/[_~`@!#$%^&*()[\\]{};:'/\\\\<>,.?=+|\"]/g, '')\n\n // Replace space characters with a dash.\n .replace(/\\s/g, '-')\n\n // Remove any double-dashes.\n .replace(/--/g, '-');\n\n return sanitized;\n }\n\n /**\n * Returns all query params that exist in the current URL.\n */\n #getParams(): PermalinkParams {\n const params: PermalinkParams = {};\n\n const path = this.#location.path();\n if (path.indexOf('?') === -1) {\n return params;\n }\n\n const existingParamPairs = path.split('?')[1].split('&');\n existingParamPairs.forEach((pair) => {\n const fragments = pair.split('=');\n params[fragments[0]] = decodeURIComponent(fragments[1]);\n });\n\n return params;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { SkyResponsiveHostDirective } from '@skyux/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabLayoutType } from './tab-layout-type';\nimport { SkyTabsetPermalinkService } from './tabset-permalink.service';\nimport { SkyTabsetService } from './tabset.service';\n\nconst LAYOUT_CLASS_PREFIX = 'sky-layout-host-';\nconst LAYOUT_DEFAULT: SkyTabLayoutType = 'none';\n\nlet nextId = 0;\n\n@Component({\n hostDirectives: [SkyResponsiveHostDirective],\n selector: 'sky-tab',\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyTabComponent implements OnChanges, OnDestroy {\n /**\n * Whether the tab is active when the tabset loads. After initialization, the `active`\n * property on the tabset component should be used to set the active tab.\n * @default false\n */\n @Input()\n public set active(value: boolean | undefined) {\n if (value !== undefined && !!value !== this.#_active) {\n this.#_active = value;\n this.#activeChange.next();\n }\n }\n\n public get active(): boolean {\n return this.#_active;\n }\n\n public get activeChange(): Observable<void> {\n return this.#activeChange;\n }\n\n /**\n * Whether to disable the tab.\n * @default false\n */\n @Input()\n public disabled: boolean | undefined;\n\n /**\n * The custom query parameter value for the tab.\n * This works in conjunction with the tabset's `permalinkId` to distinguish\n * the tab's unique state in the URL by generating a query parameter that is\n * written as `?<queryParam>-active-tab=<sanitized-tab-heading`.\n * By default, the query parameter's value is parsed automatically from the tab's heading text.\n * This input only applies when the tabset's `tabStyle` is `\"tabs\"`.\n */\n @Input()\n public set permalinkValue(value: string | undefined) {\n this.#_permalinkValue = value;\n this.#setPermalinkValueOrDefault();\n }\n\n public get permalinkValue(): string | undefined {\n return this.#_permalinkValue;\n }\n\n /**\n * Displays a counter beside the tab header.\n * This input only applies when the tabset's `tabStyle` is `\"tabs\"`.\n * @deprecated SKY UX no longer recommends adding counts to tabs.\n */\n @Input()\n public tabHeaderCount: string | undefined;\n\n /**\n * The tab header.\n * When using tabs as the main navigation on a page,\n * use [the Angular `Title` service](https://angular.dev/api/platform-browser/Title)\n * and [the SKY UX page title guidelines](https://developer.blackbaud.com/skyux/design/guidelines/content#page-titles)\n * to reflect the tab header in the page title.\n * @required\n */\n @Input()\n public set tabHeading(value: string | undefined) {\n this.#_tabHeading = value;\n\n this.#setPermalinkValueOrDefault();\n }\n\n public get tabHeading(): string | undefined {\n return this.#_tabHeading;\n }\n\n /**\n * The unique identifier for the tab.\n * If not defined, the identifier is set to the position of the tab on load, starting with `0`.\n */\n @Input()\n public set tabIndexValue(value: SkyTabIndex | undefined) {\n if (\n value !== this.#_tabIndexValue &&\n value !== undefined &&\n this.#_tabIndexValue !== undefined\n ) {\n this.#tabsetService.updateTabIndex(this.#_tabIndexValue, value);\n this.#tabIndexChange.next(value);\n }\n\n this.#_tabIndexValue = value;\n }\n\n public get tabIndexValue(): SkyTabIndex | undefined {\n return this.#_tabIndexValue;\n }\n\n /**\n * The tab layout that applies spacing to the tab container element. Use the layout\n * that corresponds with the top-level component type used within the tab, or use `fit` to\n * constrain the tab contents to the available viewport.\n * Use `none` for custom content that does not adhere to predefined spacing or constraints.\n * @default \"none\"\n */\n @Input()\n public set layout(value: SkyTabLayoutType | undefined) {\n const layout = value || LAYOUT_DEFAULT;\n\n this.#_layout = layout;\n this.cssClass = `${LAYOUT_CLASS_PREFIX}${layout}`;\n\n if (this.active) {\n this.#tabsetService.updateActiveTabLayout(layout);\n }\n }\n\n public get layout(): SkyTabLayoutType {\n return this.#_layout;\n }\n\n @HostBinding('class')\n public cssClass = `${LAYOUT_CLASS_PREFIX}${LAYOUT_DEFAULT}`;\n\n /**\n * Fires when users click the button to close the tab.\n * The close button is added to the tab when you specify a listener for this event.\n * This event only applies when the tabset's `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public close = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /**\n * Alerts the tabset component when this component has changes that need to be reflected in the UI.\n */\n public get stateChange(): Observable<void> {\n return this.#stateChange;\n }\n\n public get tabIndexChange(): Observable<SkyTabIndex | undefined> {\n return this.#tabIndexChange;\n }\n\n public permalinkValueOrDefault = '';\n\n public showContent = false;\n\n public tabButtonId: string;\n\n public tabPanelId: string;\n\n #_active = false;\n\n #activeChange: BehaviorSubject<void | undefined>;\n\n #_permalinkValue: string | undefined;\n\n #stateChange: BehaviorSubject<void>;\n\n #_tabHeading: string | undefined;\n\n #_tabIndexValue: SkyTabIndex | undefined;\n\n #_layout: SkyTabLayoutType = LAYOUT_DEFAULT;\n\n #tabIndexChange: BehaviorSubject<SkyTabIndex | undefined>;\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #permalinkService = inject(SkyTabsetPermalinkService);\n readonly #tabsetService = inject(SkyTabsetService);\n\n constructor() {\n const id = nextId++;\n this.tabPanelId = `sky-tab-${id}`;\n this.tabButtonId = `${this.tabPanelId}-nav-btn`;\n\n this.#activeChange = new BehaviorSubject<void | undefined>(undefined);\n this.#stateChange = new BehaviorSubject<void>(undefined);\n this.#tabIndexChange = new BehaviorSubject<SkyTabIndex | undefined>(\n undefined,\n );\n\n this.#setPermalinkValueOrDefault();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes['disabled'] && !changes['disabled'].firstChange) ||\n (changes['tabHeading'] && !changes['tabHeading'].firstChange) ||\n (changes['tabHeaderCount'] && !changes['tabHeaderCount'].firstChange) ||\n (changes['permalinkValue'] && !changes['permalinkValue'].firstChange)\n ) {\n this.#stateChange.next();\n }\n }\n\n public ngOnDestroy(): void {\n this.#activeChange.complete();\n this.#stateChange.complete();\n this.#tabIndexChange.complete();\n if (this.tabIndexValue !== undefined) {\n this.#tabsetService.unregisterTab(this.tabIndexValue);\n }\n }\n\n public init(): void {\n this.#_tabIndexValue = this.#tabsetService.registerTab(this.tabIndexValue);\n }\n\n public activate(): void {\n this.#_active = true;\n this.showContent = true;\n this.#changeDetector.markForCheck();\n }\n\n public deactivate(): void {\n this.#_active = false;\n this.showContent = false;\n this.#changeDetector.markForCheck();\n }\n\n public isCloseable(): boolean {\n return this.close.observers.length > 0;\n }\n\n #setPermalinkValueOrDefault(): void {\n this.permalinkValueOrDefault =\n this.#permalinkService.urlify(this.permalinkValue) ||\n this.#permalinkService.urlify(this.tabHeading);\n }\n}\n","<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content />\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyTabsetNavButtonType } from './tabset-nav-button-type';\n\n@Pipe({\n name: 'skyTabsetNavButtonDisabled',\n standalone: false,\n})\nexport class SkyTabsetNavButtonDisabledPipe implements PipeTransform {\n public transform(\n disabled: boolean | undefined,\n buttonType?: SkyTabsetNavButtonType | string,\n tabToSelectExists?: boolean,\n tabToSelectIsDisabled?: boolean,\n ): boolean {\n if (disabled !== undefined) {\n return disabled;\n } else if (buttonType === 'finish') {\n return false;\n }\n\n return !tabToSelectExists || !!tabToSelectIsDisabled;\n }\n}\n","import {\n Component,\n HostBinding,\n Input,\n OnDestroy,\n inject,\n} from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabComponent } from './tab.component';\nimport { SkyTabsetNavButtonType } from './tabset-nav-button-type';\nimport { SkyTabsetComponent } from './tabset.component';\n\nconst buttonTypeNext = 'next';\nconst buttonTypePrevious = 'previous';\nconst buttonTypeFinish = 'finish';\n\n/**\n * Creates a button to navigate between tabs in a tabset when `tabStyle` is `\"wizard\"`.\n */\n@Component({\n selector: 'sky-tabset-nav-button',\n templateUrl: './tabset-nav-button.component.html',\n standalone: false,\n})\nexport class SkyTabsetNavButtonComponent implements OnDestroy {\n /**\n * The tabset wizard component to associate with the nav button.\n * @required\n */\n @Input()\n public get tabset(): SkyTabsetComponent | undefined {\n return this.#_tabset;\n }\n\n public set tabset(value: SkyTabsetComponent | undefined) {\n this.#_tabset = value;\n\n if (this.#currentTabsetSub) {\n this.#currentTabsetSub.unsubscribe();\n }\n\n if (value) {\n this.#currentTabsetSub = value.activeChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((index: SkyTabIndex) => {\n this.#activeSkyTabIndex = index;\n this.#tabCount = this.#_tabset?.tabs?.length;\n this.#updateTabToSelect();\n this.#updateButtonVisibility();\n this.#updateButtonProperties();\n });\n } else {\n this.#logger.error(\n 'The SkyTabsetNavButtonComponent requires a reference to the SkyTabsetComponent it controls.',\n );\n }\n }\n\n /**\n * The type of nav button to include.\n * @required\n */\n @Input()\n public get buttonType(): SkyTabsetNavButtonType | undefined {\n return this.#_buttonType;\n }\n\n public set buttonType(value: SkyTabsetNavButtonType | undefined) {\n this.#_buttonType = value;\n this.#updateTabToSelect();\n this.#updateButtonProperties();\n this.#updateButtonVisibility();\n\n if (value === buttonTypeFinish) {\n this.type = 'submit';\n } else {\n this.type = 'button';\n }\n }\n\n @HostBinding('attr.data-button-type')\n public get buttonTypeData(): SkyTabsetNavButtonType | undefined {\n return this.buttonType;\n }\n\n /**\n * The label to display on the nav button. The following are the defaults for each `buttonType`:\n * `next` = \"Next\", `previous` = \"Previous\", `finish` = \"Finish\"\n */\n @Input()\n public buttonText?: string | undefined;\n\n /**\n * Whether to disable the nav button.\n * Defaults to the disabled state of the next tab for `next`, the existence of a previous tab for `previous`,\n * and false for `finish`.\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n public buttonClassName: string | undefined;\n public isVisible = false;\n public type: 'submit' | 'button' = 'submit';\n public ariaControls: string | undefined;\n\n protected tabToSelect: SkyTabComponent | undefined;\n\n #_buttonType: SkyTabsetNavButtonType | undefined;\n #_disabled: boolean | undefined;\n #_tabset: SkyTabsetComponent | undefined;\n #activeIndexNumber: number | undefined;\n #activeSkyTabIndex: SkyTabIndex | undefined;\n #currentTabsetSub: Subscription | undefined;\n readonly #logger = inject(SkyLogService);\n #tabCount: number | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public buttonClick(): void {\n /* istanbul ignore else */\n if (this.tabToSelect && !this.tabToSelect.disabled && this.tabset) {\n this.tabset.active = this.tabToSelect.tabIndexValue;\n }\n }\n\n #updateButtonVisibility(): void {\n const isLastStep =\n !!this.#tabCount && this.#activeIndexNumber === this.#tabCount - 1;\n\n if (this.buttonType === buttonTypeFinish) {\n this.isVisible = isLastStep;\n } else if (this.buttonType === buttonTypeNext) {\n this.isVisible = !isLastStep;\n } else {\n this.isVisible = true;\n }\n }\n\n #updateButtonProperties(): void {\n if (\n this.buttonType === buttonTypeNext ||\n this.buttonType === buttonTypeFinish\n ) {\n this.buttonClassName = 'sky-btn-primary';\n } else {\n this.buttonClassName = 'sky-btn-default';\n }\n\n this.ariaControls = this.tabToSelect?.tabPanelId;\n }\n\n #updateTabToSelect(): void {\n if (this.tabset?.tabs) {\n const tabs = this.tabset.tabs.toArray();\n this.tabToSelect = undefined;\n\n // tab index can be a number or a string, but we need the actual number index\n this.#activeIndexNumber = tabs.findIndex(\n (tab) => tab.tabIndexValue === this.#activeSkyTabIndex,\n );\n\n /* istanbul ignore else */\n if (this.#activeIndexNumber !== undefined) {\n if (this.buttonType === buttonTypeNext) {\n this.tabToSelect = tabs[this.#activeIndexNumber + 1];\n } else if (this.buttonType === buttonTypePrevious) {\n this.tabToSelect = tabs[this.#activeIndexNumber - 1];\n }\n }\n }\n }\n}\n","@if (isVisible) {\n <button\n class=\"sky-btn sky-margin-inline-sm\"\n [attr.aria-controls]=\"ariaControls\"\n [disabled]=\"\n disabled\n | skyTabsetNavButtonDisabled\n : buttonType\n : !!tabToSelect\n : tabToSelect?.disabled\n \"\n [ngClass]=\"buttonClassName\"\n [type]=\"type\"\n (click)=\"buttonType === 'finish' ? null : buttonClick()\"\n >\n {{ buttonText || ('skyux_tabs_navigator_' + buttonType | skyLibResources) }}\n </button>\n}\n","import { ElementRef, Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabsetAdapterService implements OnDestroy {\n public get overflowChange(): Observable<boolean> {\n return this.#overflowChange;\n }\n\n #currentOverflow = false;\n\n #tabsetRef: ElementRef | undefined;\n\n #tabsOffsetLeft: number | undefined;\n\n #overflowChange: BehaviorSubject<boolean>;\n\n constructor() {\n this.#overflowChange = new BehaviorSubject<boolean>(false);\n }\n\n public ngOnDestroy(): void {\n this.#overflowChange.complete();\n }\n\n public registerTabset(tabsetRef: ElementRef): void {\n this.#tabsetRef = tabsetRef;\n this.#tabsOffsetLeft = this.#getTabsOffsetLeft(tabsetRef.nativeElement);\n }\n\n /**\n * Detects if the tab buttons are wider than the tabset container.\n */\n public detectOverflow(): void {\n const nativeElement = this.#tabsetRef?.nativeElement;\n\n const tabsetRect = nativeElement\n .querySelector('.sky-tabset')\n .getBoundingClientRect();\n\n const tabButtonsRect = nativeElement\n .querySelector('.sky-tabset-tabs')\n .getBoundingClientRect();\n\n const tabExtraButtonsRect = nativeElement\n .querySelector('.sky-tabset-btns')\n .getBoundingClientRect();\n\n const tabButtonsWidth =\n tabButtonsRect.width + tabExtraButtonsRect.width + this.#tabsOffsetLeft;\n\n const newOverflow = tabButtonsWidth > tabsetRect.width;\n if (this.#currentOverflow !== newOverflow) {\n this.#currentOverflow = newOverflow;\n this.#overflowChange.next(this.#currentOverflow);\n }\n }\n\n /**\n * Returns the number of pixels to the left of the first tab.\n */\n #getTabsOffsetLeft(tabsetEl: HTMLElement): number {\n const tabsetRect = tabsetEl.getBoundingClientRect();\n\n // The dropdown element is the first \"tab\" and always exists in the DOM, even when hidden.\n const firstTabRect = tabsetEl\n .querySelector('.sky-tabset-dropdown')\n ?.getBoundingClientRect();\n\n // Safety check\n /* istanbul ignore next */\n if (!firstTabRect) {\n return 0;\n }\n\n return firstTabRect.left - tabsetRect.left;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { SkyLayoutHostService } from '@skyux/core';\n\nimport { Subject, combineLatest, race } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { TabButtonViewModel } from './tab-button-view-model';\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabLayoutType } from './tab-layout-type';\nimport { SkyTabComponent } from './tab.component';\nimport { SkyTabsetAdapterService } from './tabset-adapter.service';\nimport { SkyTabsetButtonsDisplayMode } from './tabset-buttons-display-mode';\nimport { SkyTabsetPermalinkService } from './tabset-permalink.service';\nimport { SkyTabsetStyle } from './tabset-style';\nimport { SkyTabsetTabIndexesChange } from './tabset-tab-indexes-change';\nimport { SkyTabsetService } from './tabset.service';\n\n@Component({\n selector: 'sky-tabset',\n styleUrls: ['./tabset.component.scss'],\n templateUrl: './tabset.component.html',\n providers: [\n SkyTabsetAdapterService,\n SkyTabsetPermalinkService,\n SkyTabsetService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyTabsetComponent implements AfterViewInit, OnDestroy {\n /**\n * Activates a tab by its `tabIndex` property.\n */\n @Input()\n public set active(value: SkyTabIndex | undefined) {\n if (\n value === undefined ||\n this.#tabsetService.tabIndexesEqual(value, this.#_active)\n ) {\n return;\n }\n\n this.#_active = value;\n\n if (this.tabs) {\n this.#tabsetService.setActiveTabIndex({ tabIndex: value });\n } else {\n // On init, wait for children tabs to render before broadcasting the active tab index.\n setTimeout(() => {\n if (this.#tabsetService.isValidTabIndex(value)) {\n // On init, yield to the permalink ID, if it exists.\n if (this.#getActiveTabIndexByPermalinkId() === undefined) {\n this.#tabsetService.setActiveTabIndex({ tabIndex: value });\n }\n } else {\n // Activate the first tab if the new tab index is invalid.\n this.#_active = this.#tabsetService.activateFirstTab();\n }\n });\n }\n }\n\n public get active(): SkyTabIndex | undefined {\n return this.#_active;\n }\n\n /**\n * The ARIA label for the tabset. This sets the tabset's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the tabset. This sets the tabset's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * Distinguishes a tabset's unique state in the URL by generating a query parameter\n * that is written as `?<queryParam>-active-tab=<sanitized-tab-heading>`.\n * The query parameter's value is parsed automatically from the selected tab's heading text,\n * but you can supply a custom query parameter value for each tab with its `permalinkValue`.\n * This input only applies when `tabStyle` is `\"tabs\"`\n */\n @Input()\n public set permalinkId(value: string | undefined) {\n if (!value) {\n this.#_permalinkId = '';\n } else {\n const sanitized = this.#permalinkService.urlify(value);\n this.#_permalinkId = `${sanitized}-active-tab`;\n }\n }\n\n public get permalinkId(): string {\n return this.#_permalinkId;\n }\n\n /**\n * The behavior for a series of tabs.\n * @default \"tabs\"\n */\n @Input()\n public set tabStyle(value: SkyTabsetStyle | undefined) {\n this.#_tabStyle = value || 'tabs';\n }\n\n public get tabStyle(): SkyTabsetStyle {\n return this.#_tabStyle;\n }\n\n @HostBinding('attr.data-tab-style') public get dataTabStyle(): string {\n return this.tabStyle;\n }\n\n /**\n * Fires when the active tab changes. This event emits the index of the active tab.\n */\n @Output()\n public activeChange = new EventEmitter<SkyTabIndex>();\n\n /**\n * Fires when users click the button to add a new tab.\n * The new tab button is added to the tab area when you specify a listener for this event.\n * This event only applies when `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public newTab = new EventEmitter<void>();\n\n /**\n * Fires when users click the button to open a tab.\n * The open tab button is added to the tab area when you specify a listener for this event.\n * This event only applies when `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public openTab = new EventEmitter<void>();\n\n /**\n * Fires when any tab's `tabIndex` value changes.\n * This event only applies when `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public tabIndexesChange = new EventEmitter<SkyTabsetTabIndexesChange>();\n\n public set tabDisplayMode(value: SkyTabsetButtonsDisplayMode) {\n this.#_tabDisplayMode = value;\n this.#changeDetector.markForCheck();\n }\n\n public get tabDisplayMode(): SkyTabsetButtonsDisplayMode {\n return this.#_tabDisplayMode;\n }\n\n @ContentChildren(SkyTabComponent)\n public set tabs(value: QueryList<SkyTabComponent> | undefined) {\n this.#_tabs = value;\n this.#tabComponentsChangeUnsubscribe.next();\n\n value?.changes\n .pipe(takeUntil(this.#tabComponentsChangeUnsubscribe))\n .subscribe(() => {\n this.#resetTabComponents();\n });\n }\n\n public get tabs(): QueryList<SkyTabComponent> | undefined {\n return this.#_tabs;\n }\n\n @HostBinding('class')\n public cssClass = 'sky-tabset-layout-none';\n\n public dropdownTriggerButtonText = '';\n\n /**\n * This property is used by the deprecated tabset-nav-button component.\n * @internal\n */\n public lastActiveTabIndex: SkyTabIndex | undefined;\n\n public tabButtons: TabButtonViewModel[] = [];\n\n #ngUnsubscribe = new Subject<void>();\n\n #tabComponentsChangeUnsubscribe = new Subject<void>();\n #tabComponentsStateChangeUnsubscribe = new Subject<void>();\n\n #_active: SkyTabIndex | undefined;\n\n #_permalinkId = '';\n\n #_tabs: QueryList<SkyTabComponent> | undefined;\n\n #_tabDisplayMode: SkyTabsetButtonsDisplayMode = 'tabs';\n\n #_tabStyle: SkyTabsetStyle = 'tabs';\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #elementRef = inject(ElementRef);\n readonly #adapterService = inject(SkyTabsetAdapterService);\n readonly #permalinkService = inject(SkyTabsetPermalinkService);\n readonly #tabsetService = inject(SkyTabsetService);\n\n #layoutHostSvc = inject(SkyLayoutHostService, { optional: true });\n\n public ngAfterViewInit(): void {\n this.#initTabComponents();\n\n const initialTabIndex = this.#getInitialTabIndex();\n this.#tabsetService.setActiveTabIndex({\n tabIndex: initialTabIndex,\n initial: true,\n });\n\n this.#listenTabButtonsOverflowChange();\n this.#listenLocationPopStateChange();\n\n // If the currently active tab is getting unregistered, activate the next one.\n this.#tabsetService.activeTabUnregistered\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((tab) => {\n // Wait for the new tabs to render before activating.\n setTimeout(() => {\n this.#tabsetService.activateNearestTab(tab.arrayIndex);\n });\n });\n\n this.#tabsetService.activeTabLayout\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((layout) => {\n this.#updateLayout(layout);\n });\n\n // Let the tabset render the initial active index before listening for changes.\n setTimeout(() => {\n this.#listenTabComponentsStateChange();\n this.#listenActiveIndexChange();\n this.#permalinkService.init();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#tabComponentsChangeUnsubscribe.next();\n this.#tabComponentsChangeUnsubscribe.complete();\n this.#unsubscribeTabComponentsStateChange();\n if (this.permalinkId) {\n this.#permalinkService.clearParam(this.permalinkId);\n }\n }\n\n public onWindowResize(): void {\n this.#adapterService.detectOverflow();\n }\n\n public onTabCloseClick(tabButton: TabButtonViewModel): void {\n const tabComponent = this.tabs?.find((tab) =>\n this.#tabsetService.tabIndexesEqual(\n tab.tabIndexValue,\n tabButton.tabIndex,\n ),\n );\n\n tabComponent?.close.emit();\n }\n\n public onTabButtonClick(tabButton: TabButtonViewModel): void {\n this.#tabsetService.setActiveTabIndex({ tabIndex: tabButton.tabIndex });\n }\n\n public onNewTabClick(): void {\n this.newTab.emit();\n }\n\n public onOpenTabClick(): void {\n this.openTab.emit();\n }\n\n public onRightKeyDown(): void {\n this.#tabsetService.focusNextTabBtn(this.tabButtons);\n }\n\n public onLeftKeyDown(): void {\n this.#tabsetService.focusPrevTabBtn(this.tabButtons);\n }\n\n public onHomeKeyDown(): void {\n this.#tabsetService.focusFirstOrNearestTabBtn(this.tabButtons);\n }\n\n public onEndKeyDown(): void {\n this.#tabsetService.focusLastOrNearestTabBtn(this.tabButtons);\n }\n\n /**\n * Sets the initial active tab index based on the following criteria.\n * 1. Does the URL include a query param that reflects this tabset's active tab?\n * 2. Does one of the tab components have their `active` property set to `true`?\n * 3. Is the tabset component's `active` property set to a specific tab index?\n */\n #getInitialTabIndex(): SkyTabIndex | undefined {\n let activeIndex: SkyTabIndex | undefined =\n this.#getActiveTabIndexByPermalinkId();\n if (activeIndex === undefined) {\n activeIndex = this.#getActiveTabComponent()?.tabIndexValue;\n if (activeIndex === undefined) {\n activeIndex = this.active;\n }\n }\n\n return activeIndex;\n }\n\n #listenActiveIndexChange(): void {\n this.#tabsetService.activeTabChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((tabChange) => {\n this.#updateTabsetComponent(\n tabChange.tabIndex,\n false,\n tabChange.initial,\n );\n const activeTab = this.#getActiveTabComponent();\n\n this.#updateLayout(activeTab?.layout);\n });\n }\n\n #updateLayout(layout?: SkyTabLayoutType): void {\n if (this.#layoutHostSvc && layout) {\n this.#layoutHostSvc.setHostLayoutForChild({\n layout,\n });\n\n this.cssClass = `sky-tabset-layout-${layout}`;\n }\n }\n\n #listenTabComponentsStateChange(): void {\n if (this.tabs) {\n combineLatest(this.tabs.map((tab) => tab.activeChange))\n .pipe(\n takeUntil(\n race(\n this.#tabComponentsStateChangeUnsubscribe,\n this.#ngUnsubscribe,\n ),\n ),\n )\n .subscribe(() => {\n // Wait for the tab components to render changes before finding the active one.\n setTimeout(() => {\n const tabIndex = this.#getActiveTabComponent()?.tabIndexValue;\n this.#tabsetService.setActiveTabIndex({ tabIndex });\n });\n });\n\n combineLatest(this.tabs.map((tab) => tab.tabIndexChange))\n .pipe(\n takeUntil(\n race(\n this.#tabComponentsStateChangeUnsubscribe,\n this.#ngUnsubscribe,\n ),\n ),\n )\n .subscribe(() => {\n // Don't emit the first change.\n if (this.lastActiveTabIndex !== undefined) {\n // Wait for the tab components to render changes before updating the view.\n setTimeout(() => {\n this.#updateTabsetComponent(\n this.#tabsetService.currentActiveTabIndex,\n true,\n );\n this.#emitTabIndexChange();\n });\n }\n });\n\n combineLatest(this.tabs.map((tab) => tab.stateChange))\n .pipe(\n takeUntil(\n race(\n this.#tabComponentsStateChangeUnsubscribe,\n this.#ngUnsubscribe,\n ),\n ),\n )\n .subscribe(() => {\n // Wait for the tab components to render changes before finding the active one.\n setTimeout(() => {\n this.#updateTabsetComponent(\n this.#tabsetService.currentActiveTabIndex,\n true,\n );\n });\n });\n }\n }\n\n #initTabComponents(): void {\n this.tabs?.forEach((tab) => tab.init());\n }\n\n #resetTabComponents(): void {\n this.#unsubscribeTabComponentsStateChange();\n this.#tabsetService.unregisterAll();\n\n // If there are no tab components, do a hard reset of the view.\n if (this.tabs?.length === 0) {\n this.#updateTabsetComponent(0, true);\n return;\n }\n\n this.#initTabComponents();\n const activeIndex = this.#getActiveTabComponent()?.tabIndexValue;\n this.#tabsetService.setActiveTabIndex(\n {\n tabIndex: activeIndex,\n },\n {\n emitChange: false,\n },\n );\n this.#listenTabComponentsStateChange();\n }\n\n #emitTabIndexChange(): void {\n this.tabIndexesChange.emit({\n tabs: this.tabs?.map((tab) => ({\n tabHeading: tab.tabHeading,\n tabIndex: tab.tabIndexValue,\n })),\n });\n }\n\n #unsubscribeTabComponentsStateChange(): void {\n this.#tabComponentsStateChangeUnsubscribe.next();\n this.#tabComponentsStateChangeUnsubscribe.complete();\n this.#tabComponentsStateChangeUnsubscribe = new Subject<void>();\n }\n\n #listenTabButtonsOverflowChange(): void {\n this.#adapterService.registerTabset(this.#elementRef);\n this.#adapterService.overflowChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((isOverflowing) => {\n this.tabDisplayMode = isOverflowing ? 'dropdown' : 'tabs';\n this.#changeDetector.markForCheck();\n });\n }\n\n /**\n * Listen for back/forward history button presses to detect query param changes in the URL.\n */\n #listenLocationPopStateChange(): void {\n this.#permalinkService.popStateChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#setActiveTabIndexByPermalinkId();\n });\n }\n\n #setActiveTabIndexByPermalinkId(): void {\n const activeIndex = this.#getActiveTabIndexByPermalinkId();\n this.#tabsetService.setActiveTabIndex({\n tabIndex: activeIndex,\n });\n }\n\n #getActiveTabIndexByPermalinkId(): SkyTabIndex | undefined {\n if (this.permalinkId) {\n const paramValue = this.#permalinkService.getParam(this.permalinkId);\n if (paramValue) {\n return this.tabs?.find(\n (tab) => tab.permalinkValueOrDefault === paramValue,\n )?.tabIndexValue;\n }\n return undefined;\n }\n return undefined;\n }\n\n #getActiveTabComponent(): SkyTabComponent | undefined {\n return this.tabs\n ?.toArray()\n .reverse()\n .find((tab) => tab.active === true);\n }\n\n #createTabButtons(\n activeIndex: SkyTabIndex | undefined,\n ): TabButtonViewModel[] {\n // Safety check\n /* istanbul ignore next */\n if (!this.tabs) {\n return [];\n }\n\n return this.tabs.map((tab, index) => ({\n active: this.#tabsetService.tabIndexesEqual(\n tab.tabIndexValue,\n activeIndex,\n ),\n closeable: tab.isCloseable(),\n ariaControls: tab.tabPanelId,\n disabled: tab.disabled,\n buttonHref: tab.disabled\n ? null\n : this.#permalinkService.getParamHref(\n this.permalinkId,\n tab.permalinkValueOrDefault,\n ),\n buttonId: tab.tabButtonId,\n buttonTextCount: tab.tabHeaderCount,\n buttonText: tab.tabHeading,\n tabIndex: tab.tabIndexValue,\n tabNumber: index + 1,\n totalTabsCount: this.tabs!.length,\n }));\n }\n\n #updateTabButtons(activeIndex: SkyTabIndex | undefined): void {\n this.tabButtons.forEach((button) => {\n button.active = this.#tabsetService.tabIndexesEqual(\n button.tabIndex,\n activeIndex,\n );\n });\n }\n\n /**\n * Updates the UI and state of the tabset component after the tab index or\n * tab components have changed.\n * @param activeIndex The currently active tab index.\n * @param regenerateTabButtons Indicates if tab button view models should be regenerated.\n * Setting this value to `false` will simply update the existing tab buttons. Setting this value\n * to `true` is only necessary when the underlying tab components have changed and the tab\n * buttons must reflect those changes.\n * @param initial Indicates whether tabs are being updated during initialization of the tabset\n * component. This is passed through to the permalink service where it prevents adding an extra\n * item to browser history when the URL is updated with the selected tab's permalink value.\n */\n #updateTabsetComponent(\n activeIndex: SkyTabIndex | undefined,\n regenerateTabButtons: boolean,\n initial?: boolean,\n ): void {\n // Activate/deactivate tab components.\n this.tabs?.forEach((tab) => {\n if (this.#tabsetService.tabIndexesEqual(tab.tabIndexValue, activeIndex)) {\n tab.activate();\n } else {\n tab.deactivate();\n }\n });\n\n // Update the tab button models.\n if (regenerateTabButtons || !this.tabButtons.length) {\n this.tabButtons = this.#createTabButtons(activeIndex);\n } else {\n this.#updateTabButtons(activeIndex);\n }\n\n // Update the dropdown trigger button text.\n this.dropdownTriggerButtonText =\n this.tabButtons.find((b) => {\n return this.#tabsetService.tabIndexesEqual(b.tabIndex, activeIndex);\n })?.buttonText ?? '';\n\n // Set the query params based on active tab.\n if (this.permalinkId) {\n const activeTabComponent = this.tabs?.find((tab) => {\n return this.#tabsetService.tabIndexesEqual(\n tab.tabIndexValue,\n activeIndex,\n );\n });\n if (activeTabComponent) {\n this.#permalinkService.setParam(\n this.permalinkId,\n activeTabComponent.permalinkValueOrDefault,\n initial,\n );\n }\n }\n\n // Wait for tab button view models to render before gauging dimensions.\n setTimeout(() => {\n this.#adapterService.detectOverflow();\n });\n\n this.#changeDetector.markForCheck();\n\n // Emit the new active index value to consumers.\n if (this.lastActiveTabIndex !== activeIndex) {\n this.lastActiveTabIndex = activeIndex;\n this.activeChange.emit(activeIndex);\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<div\n class=\"sky-tabset\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngClass]=\"\n 'sky-tabset-mode-' + tabDisplayMode + ' sky-tabset-style-' + tabStyle\n \"\n (window:resize)=\"onWindowResize()\"\n (keydown.arrowright)=\"onRightKeyDown()\"\n (keydown.arrowleft)=\"onLeftKeyDown()\"\n (keydown.home)=\"onHomeKeyDown()\"\n (keydown.end)=\"onEndKeyDown()\"\n>\n <span class=\"sky-tabset-dropdown\">\n @if (tabDisplayMode === 'dropdown') {\n <sky-dropdown buttonType=\"tab\">\n <sky-dropdown-button>\n {{ dropdownTriggerButtonText }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n @for (tabButton of tabButtons; track tabButton.buttonId) {\n <sky-dropdown-item class=\"sky-tab-dropdown-menu-item\">\n <div\n class=\"sky-tab-dropdown-item\"\n [ngClass]=\"{\n 'sky-tab-dropdown-item-selected': tabButton.active\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n tabButtonTemplate;\n context: {\n $implicit: tabButton\n }\n \"\n />\n </div>\n </sky-dropdown-item>\n }\n </sky-dropdown-menu>\n </sky-dropdown>\n }\n </span>\n <span class=\"sky-tabset-tabs\">\n @for (tabButton of tabButtons; track tabButton.buttonId) {\n <ng-container\n *ngTemplateOutlet=\"\n tabButtonTemplate;\n context: {\n $implicit: tabButton\n }\n \"\n />\n }\n </span>\n <span class=\"sky-tabset-btns\">\n @if (newTab.observers.length > 0) {\n <button\n class=\"sky-btn sky-btn-icon sky-tabset-btn-new\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_add' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"onNewTabClick()\"\n >\n <sky-icon iconName=\"add\" />\n </button>\n }\n @if (openTab.observers.length > 0) {\n <button\n class=\"sky-btn sky-btn-icon sky-tabset-btn-open\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_open' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"onOpenTabClick()\"\n >\n <sky-icon iconName=\"folder-open\" />\n </button>\n }\n </span>\n</div>\n<ng-content />\n\n<ng-template #tabButtonTemplate let-tabButton>\n <sky-tab-button\n [active]=\"tabButton.active\"\n [ariaControls]=\"tabButton.ariaControls\"\n [buttonHref]=\"tabButton.buttonHref\"\n [buttonId]=\"tabButton.buttonId\"\n [buttonText]=\"tabButton.buttonText\"\n [buttonTextCount]=\"tabButton.buttonTextCount\"\n [closeable]=\"tabButton.closeable\"\n [disabled]=\"tabButton.disabled\"\n [tabIndex]=\"tabButton.tabIndex\"\n [tabStyle]=\"tabStyle\"\n [tabNumber]=\"tabButton.tabNumber\"\n [totalTabsCount]=\"tabButton.totalTabsCount\"\n (buttonClick)=\"onTabButtonClick(tabButton)\"\n (closeClick)=\"onTabCloseClick(tabButton)\"\n />\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyIdModule, SkyResponsiveHostDirective } from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyDropdownModule } from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyTabsResourcesModule } from '../shared/sky-tabs-resources.module';\n\nimport { SkyTabButtonComponent } from './tab-button.component';\nimport { SkyTabComponent } from './tab.component';\nimport { SkyTabsetNavButtonDisabledPipe } from './tabset-nav-button-disabled.pipe';\nimport { SkyTabsetNavButtonComponent } from './tabset-nav-button.component';\nimport { SkyTabsetComponent } from './tabset.component';\n\n@NgModule({\n declarations: [\n SkyTabButtonComponent,\n SkyTabComponent,\n SkyTabsetComponent,\n SkyTabsetNavButtonComponent,\n SkyTabsetNavButtonDisabledPipe,\n ],\n imports: [\n CommonModule,\n SkyResponsiveHostDirective,\n SkyDropdownModule,\n SkyIconModule,\n SkyIdModule,\n SkyTabsResourcesModule,\n SkyThemeModule,\n ],\n exports: [SkyTabComponent, SkyTabsetComponent, SkyTabsetNavButtonComponent],\n})\nexport class SkyTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId","i2","i3","DEFAULT_TAB_WIDTH","i1.SkyVerticalTabComponent","i4","i3.SkyTabsetNavButtonDisabledPipe","i5.SkyTabButtonComponent","i6"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-tabs.mjs","sources":["../../../../../libs/components/tabs/src/lib/modules/shared/sky-tabs-resources.module.ts","../../../../../libs/components/tabs/src/lib/modules/shared/tab-id.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-adapter.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-group.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.service.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tab.component.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tab.component.html","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-group.component.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset-group.component.html","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.component.ts","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.component.html","../../../../../libs/components/tabs/src/lib/modules/vertical-tabset/vertical-tabset.module.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.service.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form-section.component.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form-section.component.html","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/types/sectioned-form-message-type.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.component.ts","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.component.html","../../../../../libs/components/tabs/src/lib/modules/sectioned-form/sectioned-form.module.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab-button-adapter.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab-button.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab-button.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-permalink.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tab.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-nav-button-disabled.pipe.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-nav-button.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-nav-button.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset-adapter.service.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset.component.ts","../../../../../libs/components/tabs/src/lib/modules/tabs/tabset.component.html","../../../../../libs/components/tabs/src/lib/modules/tabs/tabs.module.ts","../../../../../libs/components/tabs/src/skyux-tabs.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-tabs' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport {\n SkyI18nModule,\n SkyLibResources,\n SkyLibResourcesService,\n} from '@skyux/i18n';\n\nconst RESOURCES: Record<string, SkyLibResources> = {\n 'EN-US': {\n skyux_tab_add: { message: 'Add tab' },\n skyux_tab_close: { message: 'Close {0} tab' },\n skyux_tabs_navigator_finish: { message: 'Finish' },\n skyux_tabs_navigator_next: { message: 'Next' },\n skyux_tabs_navigator_previous: { message: 'Previous' },\n skyux_tab_open: { message: 'Open tab' },\n skyux_vertical_tabs_show_tabs_text: { message: 'Tab list' },\n skyux_wizard_sr_step_current: { message: 'Step {0} of {1}, current: {2}' },\n skyux_wizard_sr_step_completed: {\n message: 'Step {0} of {1}, completed: {2}',\n },\n skyux_wizard_sr_step_unavailable: {\n message: 'Step {0} of {1}, unavailable: {2}',\n },\n },\n ES: {\n skyux_tab_add: { message: 'Agregar pestaña' },\n skyux_tab_close: { message: 'Cerrar pestaña {0}' },\n skyux_tabs_navigator_finish: { message: 'Finalizar' },\n skyux_tabs_navigator_next: { message: 'Siguiente' },\n skyux_tabs_navigator_previous: { message: 'Anterior' },\n skyux_tab_open: { message: 'Abrir pestaña' },\n skyux_vertical_tabs_show_tabs_text: { message: 'Lista de pestañas' },\n skyux_wizard_sr_step_current: { message: 'Paso {0} de {1}, actual: {2}' },\n skyux_wizard_sr_step_completed: {\n message: 'Paso {0} de {1}, completado: {2}',\n },\n skyux_wizard_sr_step_unavailable: {\n message: 'Paso {0} de {1}, no disponible: {2}',\n },\n },\n 'FR-CA': {\n skyux_tab_add: { message: 'Ajouter un onglet' },\n skyux_tab_close: { message: 'Fermer l’onglet {0}' },\n skyux_tabs_navigator_finish: { message: 'Terminer' },\n skyux_tabs_navigator_next: { message: 'Suivant' },\n skyux_tabs_navigator_previous: { message: 'Précédent' },\n skyux_tab_open: { message: 'Ouvrir l’onglet' },\n skyux_vertical_tabs_show_tabs_text: { message: 'Liste des onglets' },\n skyux_wizard_sr_step_current: {\n message: 'Étape {0} de {1}, en cours : {2}',\n },\n skyux_wizard_sr_step_completed: {\n message: 'Étape {0} de {1}, terminée : {2}',\n },\n skyux_wizard_sr_step_unavailable: {\n message: 'Étape {0} de {1}, non disponible : {2}',\n },\n },\n};\n\nSkyLibResourcesService.addResources(RESOURCES);\n\n/**\n * Import into any component library module that needs to use resource strings.\n */\n@NgModule({\n exports: [SkyI18nModule],\n})\nexport class SkyTabsResourcesModule {}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Tracks the element IDs for all tabs within a tablist.\n * @internal\n */\n@Injectable()\nexport class SkyTabIdService {\n public get ids(): Observable<string[]> {\n return this.#idsObs;\n }\n\n #ids: Map<string, string>;\n #ids$: BehaviorSubject<string[]>;\n #idsObs: Observable<string[]>;\n\n constructor() {\n this.#ids = new Map();\n this.#ids$ = new BehaviorSubject<string[]>([]);\n this.#idsObs = this.#ids$.asObservable();\n }\n\n /**\n * Associates a tab's ID with its parent tablist.\n * @param {string} id A unique ID for the tab's registration.\n * @param {string} elementId The ID applied to the tab's element.\n */\n public register(id: string, elementId: string): void {\n if (!this.#ids.has(id) || this.#ids.get(id) !== elementId) {\n this.#ids.set(id, elementId);\n this.#emitIds();\n }\n }\n\n /**\n * Disassociates a tab's ID with its parent tablist.\n * @param {string} id The ID used to register the tab.\n */\n public unregister(id: string): void {\n if (this.#ids.has(id)) {\n this.#ids.delete(id);\n this.#emitIds();\n }\n }\n\n #emitIds(): void {\n this.#ids$.next(Array.from(this.#ids.values()));\n }\n}\n","import { DOCUMENT, ElementRef, Injectable, inject } from '@angular/core';\n\nconst VERTICAL_TABSET_BUTTON_SELECTOR = '.sky-vertical-tabset-button';\nconst VERTICAL_TABSET_BUTTON_DISABLED_SELECTOR = `${VERTICAL_TABSET_BUTTON_SELECTOR}-disabled`;\n\n@Injectable()\nexport class SkyVerticalTabsetAdapterService {\n #document = inject(DOCUMENT);\n\n public scrollToContentTop(element: ElementRef): void {\n element.nativeElement.scrollTop = 0;\n }\n\n public focusButton(elRef: ElementRef<HTMLElement> | undefined): boolean {\n return this.#focusButtonEl(elRef?.nativeElement);\n }\n\n public focusFirstButton(\n tabGroups: ElementRef<HTMLElement> | undefined,\n ): void {\n const tabGroupsEl = tabGroups?.nativeElement;\n\n if (tabGroupsEl) {\n const firstButtonEl = tabGroupsEl.querySelector(\n VERTICAL_TABSET_BUTTON_SELECTOR,\n ) as HTMLElement | null;\n\n if (firstButtonEl) {\n firstButtonEl.focus();\n }\n }\n }\n\n public focusNextButton(tabGroups: ElementRef | undefined): void {\n this.#focusSiblingButton(tabGroups);\n }\n\n public focusPreviousButton(tabGroups: ElementRef | undefined): void {\n this.#focusSiblingButton(tabGroups, true);\n }\n\n #focusSiblingButton(\n tabGroups: ElementRef<HTMLElement> | undefined,\n previous?: boolean,\n ): void {\n if (tabGroups) {\n const focusedEl = this.#document.activeElement as HTMLElement | null;\n\n if (focusedEl?.matches(VERTICAL_TABSET_BUTTON_SELECTOR)) {\n const tabGroupsEl = tabGroups.nativeElement;\n\n const buttonEls = Array.from(\n tabGroupsEl.querySelectorAll(VERTICAL_TABSET_BUTTON_SELECTOR),\n ) as HTMLElement[];\n\n if (previous) {\n buttonEls.reverse();\n }\n\n const focusedIndex = buttonEls.indexOf(focusedEl);\n\n for (let i = 1, n = buttonEls.length; i < n; i++) {\n // Offset the index of the next button from the index of the\n // currently focused button, circling back to the first button\n // when the end of the list is reached.\n const offset = (i + focusedIndex) % n;\n\n if (this.#focusButtonEl(buttonEls[offset])) {\n break;\n }\n }\n }\n }\n }\n\n #focusButtonEl(el: HTMLElement | null | undefined): boolean {\n if (el && !el.matches(VERTICAL_TABSET_BUTTON_DISABLED_SELECTOR)) {\n el.focus();\n return this.#elHasFocus(el);\n }\n\n return false;\n }\n\n #elHasFocus(el: HTMLElement | null | undefined): boolean {\n return !!el && el === this.#document.activeElement;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyVerticalTabsetGroupMessage } from './vertical-tabset-group-message';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyVerticalTabsetGroupService {\n public messageStream = new Subject<SkyVerticalTabsetGroupMessage>();\n}\n","import { ElementRef, Injectable, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SkyMediaQueryService } from '@skyux/core';\n\nimport { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';\n\nimport { SkyVerticalTabComponent } from './vertical-tab.component';\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupComponent } from './vertical-tabset-group.component';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyVerticalTabsetService {\n public activeIndex: number | undefined = undefined;\n\n public content: ElementRef | undefined;\n\n public hidingTabs = new BehaviorSubject(false);\n\n public indexChanged = new ReplaySubject<number | undefined>(1);\n\n public maintainTabContent: boolean | undefined = false;\n\n public showingTabs = new BehaviorSubject(false);\n\n public switchingMobile = new Subject<boolean>();\n\n public tabs: SkyVerticalTabComponent[] = [];\n\n public tabAdded = new Subject<SkyVerticalTabComponent>();\n\n public tabClicked = new ReplaySubject<boolean>(1);\n\n #groups: SkyVerticalTabsetGroupComponent[] = [];\n\n #contentAdded = false;\n\n #tabsVisible = false;\n\n #isMobile = false;\n\n #adapterSvc = inject(SkyVerticalTabsetAdapterService);\n\n constructor() {\n inject(SkyMediaQueryService)\n .breakpointChange.pipe(takeUntilDestroyed())\n .subscribe((breakpoint) => {\n const nowMobile = breakpoint === 'xs';\n\n if (nowMobile && !this.#isMobile) {\n // switching to mobile\n this.switchingMobile.next(true);\n\n if (!this.#tabsVisible) {\n this.hidingTabs.next(true);\n }\n } else if (!nowMobile && this.#isMobile) {\n // switching to widescreen\n this.switchingMobile.next(false);\n\n if (!this.#tabsVisible) {\n this.showingTabs.next(true);\n }\n }\n\n this.#isMobile = nowMobile;\n });\n }\n\n public addTab(tab: SkyVerticalTabComponent): void {\n const index = this.tabs.length;\n tab.index = index;\n\n this.tabs.push(tab);\n\n if (tab.active) {\n this.activateTab(tab);\n }\n\n this.tabAdded.next(tab);\n }\n\n public destroyTab(tab: SkyVerticalTabComponent): void {\n const tabIndex = this.tabs.indexOf(tab);\n if (tabIndex === -1) {\n return;\n }\n\n if (\n this.maintainTabContent &&\n tab.contentRendered &&\n /* istanbul ignore next */\n this.content?.nativeElement.contains(tab.tabContent?.nativeElement)\n ) {\n this.content?.nativeElement.removeChild(tab.tabContent?.nativeElement);\n }\n\n this.tabs.splice(tabIndex, 1);\n // update tab indices\n this.tabs.forEach((tabItem, index) => (tabItem.index = index));\n\n if (tab.active) {\n if (!this.maintainTabContent) {\n this.#destroyContent();\n }\n // Try selecting the next tab first, and if there's no next tab then\n // try selecting the previous one.\n const newActiveTab = this.tabs[tabIndex] || this.tabs[tabIndex - 1];\n /*istanbul ignore else */\n if (newActiveTab) {\n newActiveTab.activateTab();\n }\n }\n }\n\n public addGroup(group: SkyVerticalTabsetGroupComponent): void {\n this.#groups.push(group);\n }\n\n public destroyGroup(group: SkyVerticalTabsetGroupComponent): void {\n const groupIndex = this.#groups.indexOf(group);\n\n if (groupIndex >= 0) {\n this.#groups.splice(groupIndex, 1);\n }\n }\n\n public activateTab(tab: SkyVerticalTabComponent): void {\n // deactivate active tab\n const activeTab = this.tabs.find((t) => t.index === this.activeIndex);\n if (activeTab && activeTab.index !== tab.index) {\n activeTab.active = false;\n activeTab.tabDeactivated();\n }\n\n this.activeIndex = tab.index;\n this.tabClicked.next(true);\n this.#updateTabClicked();\n }\n\n public activeTab(): SkyVerticalTabComponent | undefined {\n return this.tabs.find((t) => t.index === this.activeIndex);\n }\n\n public isMobile(): boolean {\n return this.#isMobile;\n }\n\n public updateContent(): void {\n if (!this.maintainTabContent) {\n if (!this.#contentAdded && this.contentVisible()) {\n // content needs to be moved\n this.#moveContent();\n } else if (this.#contentAdded && !this.contentVisible()) {\n // content hidden\n this.#contentAdded = false;\n }\n } else {\n this.tabs.forEach((tab) => {\n if (!tab.contentRendered) {\n this.content?.nativeElement.appendChild(\n tab.tabContent?.nativeElement,\n );\n tab.contentRendered = true;\n }\n });\n }\n }\n\n public tabsVisible(): boolean {\n return !this.isMobile() || this.#tabsVisible;\n }\n\n public contentVisible(): boolean {\n return !this.isMobile() || !this.#tabsVisible;\n }\n\n public showTabs(): void {\n this.#tabsVisible = true;\n this.#contentAdded = false;\n this.showingTabs.next(true);\n }\n\n public focusActiveTab(tabGroups: ElementRef | undefined): void {\n let focused = false;\n\n const activeTab = this.tabs.find((tab) => tab.active);\n\n if (activeTab) {\n const parentGroup = this.#findParentGroup(activeTab);\n\n const buttonToFocus =\n parentGroup && !parentGroup.open\n ? parentGroup.groupHeadingButton\n : activeTab.tabButton;\n\n focused = this.#adapterSvc.focusButton(buttonToFocus);\n }\n\n if (!focused) {\n this.#adapterSvc.focusFirstButton(tabGroups);\n }\n }\n\n #findParentGroup(\n tab: SkyVerticalTabComponent,\n ): SkyVerticalTabsetGroupComponent | undefined {\n return this.#groups.find((group) =>\n group.tabs?.some((groupTab) => tab === groupTab),\n );\n }\n\n #destroyContent(): void {\n if (this.content) {\n this.content.nativeElement.innerHTML = '';\n }\n this.content = undefined;\n }\n\n #moveContent(): void {\n /* istanbul ignore else */\n if (this.content && !this.#contentAdded) {\n const activeTab = this.activeTab();\n const activeContent = activeTab ? activeTab.tabContent : undefined;\n\n if (activeContent && activeTab && activeContent.nativeElement) {\n this.content.nativeElement.appendChild(activeContent.nativeElement);\n activeTab.contentRendered = true;\n this.#contentAdded = true;\n }\n }\n }\n\n #updateTabClicked(): void {\n this.#contentAdded = false;\n\n if (this.isMobile()) {\n this.#tabsVisible = false;\n this.hidingTabs.next(true);\n }\n\n this.indexChanged.next(this.activeIndex);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n inject,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupService } from './vertical-tabset-group.service';\nimport { SkyVerticalTabsetService } from './vertical-tabset.service';\n\nlet nextId = 0;\n\n@Component({\n selector: 'sky-vertical-tab',\n templateUrl: './vertical-tab.component.html',\n styleUrls: ['./vertical-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyVerticalTabComponent implements OnInit, OnDestroy {\n /**\n * Whether the tab is active when the tabset loads.\n * @default false\n */\n @Input()\n public set active(value: boolean | undefined) {\n if (value !== this.#_active) {\n this.#_active = value ?? false;\n\n if (this.#_active) {\n this.#tabsetService.activateTab(this);\n }\n }\n }\n\n public get active(): boolean {\n return this.#_active;\n }\n\n #_active = false;\n\n /**\n * The HTML element ID of the element that contains\n * the content that the vertical tab displays, which corresponds to the `tabId`. This property\n * [supports accessibility rules for disclosures](https://www.w3.org/TR/wai-aria-practices-1.1/#disclosure).\n * For more information about the `aria-controls` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-controls).\n * @deprecated Now that the vertical tabs provide aria labels automatically, this input is no longer necessary.\n */\n @Input()\n public ariaControls: string | undefined;\n\n /**\n * The ARIA role for the vertical tab\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)\n * by indicating how the tab functions and what it controls. For information about how\n * an ARIA role indicates what an item represents on a web page, see the\n * [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/#roles).\n * @default \"tab\"\n * @deprecated Any other value than `tab` could lead to a poor user experience for users with assistive technology.\n * In the next major version, this property will be automatically set to `tab`.\n */\n @Input()\n public get ariaRole(): string {\n return this.#_ariaRole;\n }\n public set ariaRole(value: string | undefined) {\n this.#_ariaRole = value ?? 'tab';\n }\n\n /**\n * Whether to disable the tab.\n */\n @Input()\n public disabled: boolean | undefined = false;\n\n /**\n * Whether to indicate that the tab has an error.\n * @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.\n */\n @Input()\n public errorIndicator: boolean | undefined = false;\n\n /**\n * Whether to indicate that the tab has required content.\n * @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.\n */\n @Input()\n public requiredIndicator: boolean | undefined = false;\n\n /**\n * Displays an item count alongside the tab header to indicate how many list items the tab contains.\n */\n @Input()\n public tabHeaderCount: number | undefined;\n\n /**\n * The tab header.\n * @required\n */\n @Input()\n public tabHeading: string | undefined;\n\n /**\n * Whether to display a chevron-right icon on the right hand side of the tab.\n * @internal\n */\n @Input()\n public showTabRightArrow: boolean | undefined;\n\n /**\n * The ID for the tab.\n * @deprecated Now that the vertical tabs provide aria labels automatically, this input is no longer necessary.\n */\n @Input()\n public set tabId(value: string | undefined) {\n this.#tabIdOrDefault = value || this.#defaultTabId;\n this.#tabIdSvc?.register(this.#defaultTabId, this.#tabIdOrDefault);\n }\n\n public get tabId(): string {\n return this.#tabIdOrDefault;\n }\n\n public set contentRendered(value: boolean) {\n this.#_contentRendered = value;\n\n /* istanbul ignore else */\n if (this.#_contentRendered) {\n // NOTE: Trigger another change detection cycle when the service marks\n // this tab as \"rendered\".\n setTimeout(() => {\n if (this.tabContent) {\n this.#changeRef.markForCheck();\n }\n });\n }\n }\n\n public get contentRendered(): boolean {\n return this.#_contentRendered;\n }\n\n public index: number | undefined;\n\n public isMobile = false;\n\n @ViewChild('tabButton')\n public tabButton: ElementRef | undefined;\n\n @ViewChild('tabContentWrapper')\n public tabContent: ElementRef | undefined;\n\n public groupService = inject(SkyVerticalTabsetGroupService, {\n optional: true,\n });\n\n #_ariaRole = 'tab';\n\n #_contentRendered = false;\n\n #tabIdOrDefault: string;\n\n #defaultTabId: string;\n\n #mobileSubscription = new Subject();\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #adapterService = inject(SkyVerticalTabsetAdapterService);\n readonly #changeRef = inject(ChangeDetectorRef);\n readonly #tabsetService = inject(SkyVerticalTabsetService);\n readonly #tabIdSvc = inject(SkyTabIdService, { optional: true });\n\n constructor() {\n this.#tabIdOrDefault = this.#defaultTabId = `sky-vertical-tab-${++nextId}`;\n this.tabId = this.#defaultTabId;\n }\n\n public ngOnInit(): void {\n this.isMobile = this.#tabsetService.isMobile();\n this.#changeRef.markForCheck();\n\n this.#tabsetService.switchingMobile.subscribe((mobile: boolean) => {\n this.isMobile = mobile;\n this.#changeRef.markForCheck();\n });\n\n this.#tabsetService.addTab(this);\n }\n\n public ngOnDestroy(): void {\n this.#tabIdSvc?.unregister(this.#defaultTabId);\n this.#mobileSubscription.unsubscribe();\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#tabsetService.destroyTab(this);\n }\n\n public activateTab(): void {\n if (!this.disabled) {\n this.active = true;\n this.#tabsetService.activateTab(this);\n\n this.#changeRef.markForCheck();\n }\n }\n\n public focusButton(): void {\n this.#adapterService.focusButton(this.tabButton);\n }\n\n public tabButtonActivate(event: Event): void {\n this.activateTab();\n event.stopPropagation();\n }\n\n public tabButtonArrowLeft(event: Event): void {\n if (this.groupService) {\n this.groupService.messageStream.next({\n messageType: 'focus',\n });\n\n event.preventDefault();\n }\n }\n\n public tabDeactivated(): void {\n this.#changeRef.markForCheck();\n }\n}\n","<a\n #tabButton\n class=\"sky-vertical-tab sky-vertical-tabset-button\"\n [attr.aria-controls]=\"\n isMobile ? undefined : ariaControls || tabContentPane.id\n \"\n [attr.aria-disabled]=\"isMobile ? undefined : disabled || undefined\"\n [attr.aria-selected]=\"isMobile ? undefined : active\"\n [attr.id]=\"tabId\"\n [attr.role]=\"isMobile ? undefined : ariaRole\"\n [ngClass]=\"{\n 'sky-vertical-tab-active': active,\n 'sky-vertical-tabset-button-disabled': disabled,\n 'sky-font-deemphasized': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"activateTab()\"\n (keyup.arrowleft)=\"tabButtonArrowLeft($event)\"\n (keyup.enter)=\"tabButtonActivate($event)\"\n (keyup.space)=\"tabButtonActivate($event)\"\n>\n <div class=\"sky-vertical-tab-display\">\n <div\n class=\"sky-vertical-tab-heading\"\n [ngClass]=\"{ 'sky-control-label-required': requiredIndicator }\"\n >\n <span class=\"sky-vertical-tab-heading-value\">{{ tabHeading }}</span>\n @if (tabHeaderCount || tabHeaderCount === 0) {\n <span class=\"sky-vertical-tab-count\"> ({{ tabHeaderCount }}) </span>\n }\n </div>\n @if (errorIndicator) {\n <sky-status-indicator\n class=\"sky-vertical-tab-heading-error\"\n descriptionType=\"error\"\n indicatorType=\"danger\"\n />\n }\n @if (isMobile && showTabRightArrow) {\n <sky-icon class=\"sky-vertical-tab-right-arrow\" iconName=\"chevron-right\" />\n }\n </div>\n</a>\n\n<div #tabContentWrapper skyResponsiveHost>\n <div\n #tabContentPane\n class=\"sky-vertical-tab-content-pane\"\n role=\"tabpanel\"\n tabindex=\"0\"\n skyId\n [attr.aria-labelledby]=\"tabId\"\n [ngClass]=\"{ 'sky-vertical-tab-hidden': !active }\"\n >\n <ng-content />\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { SkyIdService } from '@skyux/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabComponent } from './vertical-tab.component';\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupService } from './vertical-tabset-group.service';\nimport { SkyVerticalTabsetService } from './vertical-tabset.service';\n\n@Component({\n selector: 'sky-vertical-tabset-group',\n templateUrl: './vertical-tabset-group.component.html',\n styleUrls: ['./vertical-tabset-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [SkyVerticalTabsetGroupService],\n standalone: false,\n})\nexport class SkyVerticalTabsetGroupComponent implements OnInit, OnDestroy {\n /**\n * Whether to disable the ability to expand and collapse the group.\n * @default false\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n this.#updateSlideDirection();\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n /**\n * The header for the collapsible group of tabs.\n */\n @Input()\n public groupHeading: string | undefined;\n\n /**\n * Whether the collapsible group is expanded.\n * @default false\n */\n @Input()\n public set open(value: boolean | undefined) {\n this.#_open = value;\n this.#updateSlideDirection();\n }\n\n public get open(): boolean | undefined {\n return this.#_open;\n }\n\n @ContentChildren(SkyVerticalTabComponent)\n public tabs: QueryList<SkyVerticalTabComponent> | undefined;\n\n @ViewChild('groupHeadingButton')\n public groupHeadingButton: ElementRef | undefined;\n public slideDirection: 'down' | 'up' = 'up';\n\n protected groupId: string;\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #tabService = inject(SkyVerticalTabsetService);\n readonly #changeRef = inject(ChangeDetectorRef);\n #adapterService = inject(SkyVerticalTabsetAdapterService);\n #idService = inject(SkyIdService);\n #tabIdService = inject(SkyTabIdService);\n #groupService = inject(SkyVerticalTabsetGroupService);\n\n #_disabled: boolean | undefined;\n #_open: boolean | undefined = false;\n\n constructor() {\n this.groupId = this.#idService.generateId();\n\n this.#groupService.messageStream.subscribe((message) => {\n switch (message.messageType) {\n case 'focus':\n this.#focusButton();\n }\n });\n }\n\n public ngOnInit(): void {\n this.#tabIdService.register(this.groupId, this.groupId);\n\n this.#tabService.addGroup(this);\n\n this.#tabService.hidingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => this.#tabsHidden());\n\n this.#tabService.showingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => this.#tabsShown());\n\n this.#tabService.tabClicked\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => this.#tabClicked());\n }\n\n public ngOnDestroy(): void {\n this.#tabService.destroyGroup(this);\n\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n\n this.#tabIdService.unregister(this.groupId);\n }\n\n public toggleMenuOpen(): void {\n if (!this.disabled) {\n this.open = !this.open;\n }\n\n this.#updateSlideDirection();\n this.#changeRef.markForCheck();\n }\n\n protected groupButtonArrowLeft(event: Event): void {\n if (this.open) {\n this.toggleMenuOpen();\n }\n\n event.preventDefault();\n }\n\n protected groupButtonArrowRight(event: Event): void {\n if (this.open) {\n this.tabs?.get(0)?.focusButton();\n } else {\n this.toggleMenuOpen();\n }\n\n event.preventDefault();\n }\n\n public isActive(): boolean {\n return !!this.tabs && this.tabs.find((t) => !!t.active) !== undefined;\n }\n\n #tabClicked(): void {\n this.#changeRef.markForCheck();\n }\n\n #tabsHidden(): void {\n this.#updateSlideDirection();\n this.#changeRef.markForCheck();\n }\n\n #tabsShown(): void {\n this.#updateSlideDirection();\n this.#changeRef.markForCheck();\n }\n\n #updateSlideDirection(): void {\n this.slideDirection = this.open && !this.disabled ? 'down' : 'up';\n }\n\n #focusButton(): void {\n this.#adapterService.focusButton(this.groupHeadingButton);\n }\n}\n","<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-active': isActive(),\n 'sky-vertical-tabset-group-header-sub-open': open,\n 'sky-font-deemphasized': disabled\n }\"\n >\n <button\n #groupHeadingButton\n class=\"sky-vertical-tabset-button\"\n role=\"tab\"\n type=\"button\"\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-disabled]=\"disabled || undefined\"\n [attr.aria-expanded]=\"!disabled && open\"\n [id]=\"groupId\"\n [ngClass]=\"{\n 'sky-vertical-tabset-button-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n (click)=\"toggleMenuOpen()\"\n (keyup.arrowleft)=\"groupButtonArrowLeft($event)\"\n (keyup.arrowright)=\"groupButtonArrowRight($event)\"\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"!disabled && open ? 'up' : 'down'\"\n />\n </button>\n </div>\n <sky-animation-slide [opened]=\"slideDirection === 'down'\">\n <div\n #groupContent\n class=\"sky-vertical-tabset-group-content\"\n skyId\n [attr.labelledby]=\"groupId\"\n >\n <ng-content />\n </div>\n </sky-animation-slide>\n</div>\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { SkyLibResourcesService } from '@skyux/i18n';\n\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetService } from './vertical-tabset.service';\n\n/**\n * The default width of the tabs pane. Also serves as the maximum width of the\n * pane for any `tabWidth` value.\n */\nconst DEFAULT_TAB_WIDTH = '25%';\n\n@Component({\n selector: 'sky-vertical-tabset',\n templateUrl: './vertical-tabset.component.html',\n styleUrls: ['./vertical-tabset.component.scss'],\n providers: [SkyTabIdService, SkyVerticalTabsetService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyVerticalTabsetComponent\n implements OnInit, AfterViewChecked, OnDestroy\n{\n /**\n * The text to display on the show tabs button on mobile devices.\n */\n @Input()\n public showTabsText: string | undefined;\n\n /**\n * The ARIA label for the tabset. This sets the tabset's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the tabset. This sets the tabset's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * The ARIA role for the vertical tabset\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)\n * by indicating how the tabset functions and what it controls. For information about how\n * an ARIA role indicates what an item represents on a web page, see the\n * [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/#roles).\n * @default \"tablist\"\n * @deprecated Any other value than `tablist` could lead to a poor user experience for users with assistive technology.\n * In the next major version, this property will be automatically set to `tablist`.\n */\n @Input()\n public get ariaRole(): string {\n return this.#_ariaRole;\n }\n\n public set ariaRole(value: string | undefined) {\n this.#_ariaRole = value ?? 'tablist';\n }\n\n /**\n * Whether the vertical tabset loads tab content during initialization so that it\n * displays content without moving around elements in the content container.\n * @default false\n */\n @Input()\n public maintainTabContent: boolean | undefined = false;\n\n /**\n * The width of the tabs pane as a CSS width value (such as `200px`, `15rem`,\n * or `20%`). Set to `\"auto\"` to size based on tab label content. Maximum\n * width is 25%.\n * @default \"25%\"\n */\n public readonly tabWidth = input(DEFAULT_TAB_WIDTH, {\n transform: (value: string | undefined): string =>\n value?.trim() || DEFAULT_TAB_WIDTH,\n });\n\n /**\n * Fires when the active tab changes. Emits the index of the active tab. The\n * index is based on the tab's position when it loads.\n */\n @Output()\n public activeChange = new EventEmitter<number>();\n\n @ViewChild('groupContainerWrapper')\n public tabGroups: ElementRef | undefined;\n\n @ViewChild('skySideContent')\n public content: ElementRef | undefined;\n\n @ViewChild('contentContainerWrapper')\n public contentWrapper: ElementRef | undefined;\n\n public ariaOwns: string | undefined;\n\n public readonly isMobile = signal(false);\n\n protected tablistHasFocus = false;\n\n #ngUnsubscribe = new Subject<void>();\n #_ariaRole = 'tablist';\n\n readonly #resources = inject(SkyLibResourcesService);\n readonly #changeRef = inject(ChangeDetectorRef);\n\n public readonly adapterService = inject(SkyVerticalTabsetAdapterService);\n public readonly tabService = inject(SkyVerticalTabsetService);\n public readonly tabIdSvc = inject(SkyTabIdService);\n\n public ngOnInit(): void {\n this.tabService.maintainTabContent = this.maintainTabContent;\n\n this.tabService.indexChanged\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((index) => {\n this.activeChange.emit(index);\n if (this.contentWrapper) {\n this.adapterService.scrollToContentTop(this.contentWrapper);\n }\n this.#changeRef.markForCheck();\n });\n\n this.tabService.switchingMobile\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((mobile: boolean) => {\n this.isMobile.set(mobile);\n });\n\n if (this.tabService.isMobile()) {\n this.isMobile.set(true);\n }\n if (!this.showTabsText) {\n this.#resources\n .getString('skyux_vertical_tabs_show_tabs_text')\n .pipe(take(1))\n .subscribe((resource) => {\n /* sanity check */\n /* istanbul ignore else */\n if (!this.showTabsText) {\n this.showTabsText = resource;\n }\n });\n }\n }\n\n public ngAfterViewChecked(): void {\n this.tabService.content = this.content;\n this.tabService.updateContent();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n protected tabsetFocus(): void {\n this.tabService.focusActiveTab(this.tabGroups);\n }\n\n protected trapFocusInTablist(): void {\n // This will set the tab index of the the vertical tabset element to -1\n // while focus is inside the tab list, allowing Shift+Tab to move\n // to the next element above the tab list element. Otherwise focus would\n // be trapped on the currently focused tab.\n this.tablistHasFocus = true;\n }\n\n protected resetTabIndex(): void {\n this.tablistHasFocus = false;\n }\n\n protected tabGroupsArrowDown(): void {\n this.adapterService.focusNextButton(this.tabGroups);\n }\n\n protected tabGroupsArrowUp(): void {\n this.adapterService.focusPreviousButton(this.tabGroups);\n }\n\n protected readonly tabGroupContainerFlexBasis = computed<string | undefined>(\n () => (this.isMobile() ? undefined : this.tabWidth()),\n );\n\n protected readonly tabGroupContainerMaxWidth = computed<string | undefined>(\n () => (this.isMobile() ? undefined : DEFAULT_TAB_WIDTH),\n );\n}\n","<div\n class=\"sky-vertical-tabset\"\n [tabIndex]=\"tablistHasFocus ? -1 : 0\"\n (focus)=\"tabsetFocus()\"\n>\n <!--\n ARIA rules do not allow tabpanel elements to be children of a tablist element.\n However, the markup for each sky-vertical-tab component includes both the tab button\n and its panel, making the panel element a child of its tablist. Moreover, our\n sky-vertical-tab components can be grouped within collapsible containers, which also\n violates accessibility rules because only tab buttons can be children of a tablist.\n To address this, we create an empty tablist element with an aria-owns attribute,\n pointing to each tab element individually. That way, we don't have to worry about the\n structure for each sky-vertical-tab component in order to satisfy accessibility\n guidelines.\n -->\n <span\n class=\"sky-vertical-tabset-tablist\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-orientation]=\"isMobile() ? undefined : 'vertical'\"\n [attr.aria-owns]=\"\n isMobile() ? undefined : (tabIdSvc.ids | async)?.join(' ') || undefined\n \"\n [attr.role]=\"isMobile() ? undefined : ariaRole\"\n ></span>\n <div\n #groupContainerWrapper\n class=\"sky-vertical-tabset-group-container\"\n skyTransitionEndHandler\n transitionPropertyToTrack=\"transform\"\n [style.flex-basis]=\"tabGroupContainerFlexBasis()\"\n [style.max-width]=\"tabGroupContainerMaxWidth()\"\n [class.sky-animation-slide-enter-left]=\"tabService.isMobile()\"\n [ngClass]=\"{ 'sky-vertical-tabset-hidden': !tabService.tabsVisible() }\"\n [tabIndex]=\"tablistHasFocus ? -1 : 0\"\n [transitionTrigger]=\"tabService.tabsVisible()\"\n (keydown.arrowDown)=\"tabGroupsArrowDown(); $event.preventDefault()\"\n (keydown.arrowUp)=\"tabGroupsArrowUp(); $event.preventDefault()\"\n (focusin)=\"trapFocusInTablist()\"\n (focusout)=\"resetTabIndex()\"\n (transitionEnd)=\"tabsetFocus()\"\n >\n <ng-content />\n </div>\n @if (maintainTabContent || tabService.contentVisible()) {\n <div\n #contentContainerWrapper\n class=\"sky-vertical-tabset-content\"\n [class.sky-animation-slide-enter-right]=\"tabService.isMobile()\"\n [ngClass]=\"{\n 'sky-vertical-tabset-content-hidden': !tabService.contentVisible()\n }\"\n (focusin)=\"resetTabIndex()\"\n >\n <div #skySideContent></div>\n @if (!tabService.tabsVisible()) {\n <button\n class=\"sky-btn sky-btn-primary sky-vertical-tabset-show-tabs-btn\"\n type=\"button\"\n (click)=\"tabService.showTabs()\"\n >\n <sky-icon iconName=\"chevron-left\" />\n {{ showTabsText }}\n </button>\n }\n </div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport {\n SkyIdModule,\n SkyResponsiveHostDirective,\n _SkyAnimationSlideComponent,\n _SkyTransitionEndHandlerDirective,\n} from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport {\n SkyExpansionIndicatorModule,\n SkyStatusIndicatorModule,\n} from '@skyux/indicators';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyTabsResourcesModule } from '../shared/sky-tabs-resources.module';\n\nimport { SkyVerticalTabComponent } from './vertical-tab.component';\nimport { SkyVerticalTabsetAdapterService } from './vertical-tabset-adapter.service';\nimport { SkyVerticalTabsetGroupComponent } from './vertical-tabset-group.component';\nimport { SkyVerticalTabsetComponent } from './vertical-tabset.component';\n\n@NgModule({\n declarations: [\n SkyVerticalTabsetComponent,\n SkyVerticalTabsetGroupComponent,\n SkyVerticalTabComponent,\n ],\n imports: [\n CommonModule,\n SkyIconModule,\n SkyIdModule,\n SkyExpansionIndicatorModule,\n SkyResponsiveHostDirective,\n SkyStatusIndicatorModule,\n SkyTabsResourcesModule,\n SkyThemeModule,\n _SkyAnimationSlideComponent,\n _SkyTransitionEndHandlerDirective,\n ],\n providers: [SkyVerticalTabsetAdapterService],\n exports: [\n SkyVerticalTabsetComponent,\n SkyVerticalTabsetGroupComponent,\n SkyVerticalTabComponent,\n ],\n})\nexport class SkyVerticalTabsetModule {}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class SkySectionedFormService {\n /**\n * @internal\n */\n public invalidChange: BehaviorSubject<boolean | undefined> =\n new BehaviorSubject<boolean | undefined>(undefined);\n /**\n * @internal\n */\n public requiredChange: BehaviorSubject<boolean | undefined> =\n new BehaviorSubject<boolean | undefined>(undefined);\n\n /**\n * Sets the current section's invalid state based on the `isInvalid` parameter.\n * This method is used within a `sky-sectioned-form-section` element.\n */\n public invalidFieldChanged(isInvalid: boolean | undefined): void {\n this.invalidChange.next(isInvalid);\n }\n\n /**\n * Sets the current section's required state based on the `isRequired` parameter.\n * This method is used within a `sky-sectioned-form-section` element.\n */\n public requiredFieldChanged(isRequired: boolean | undefined): void {\n this.requiredChange.next(isRequired);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n inject,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyVerticalTabsetService } from '../vertical-tabset/vertical-tabset.service';\n\nimport { SkyVerticalTabComponent } from './../vertical-tabset/vertical-tab.component';\nimport { SkySectionedFormService } from './sectioned-form.service';\n\nlet nextId = 0;\n\n/**\n * Creates an individual form to display as a section within the sectioned form.\n */\n@Component({\n selector: 'sky-sectioned-form-section',\n templateUrl: './sectioned-form-section.component.html',\n providers: [SkySectionedFormService],\n standalone: false,\n})\nexport class SkySectionedFormSectionComponent implements OnInit, OnDestroy {\n public sectionTabId = `sky-sectioned-form-tab-${++nextId}`;\n public sectionContentId = `sky-sectioned-form-section-${++nextId}`;\n\n /**\n * The section header.\n * @required\n */\n @Input()\n public heading: string | undefined;\n\n /**\n * The number of items within the section. A counter appears beside the section header.\n */\n @Input()\n public itemCount: number | undefined;\n\n /**\n * Whether the section is active when the form loads.\n * @default false\n */\n @Input()\n public active: boolean | undefined = false;\n\n public fieldRequired: boolean | undefined;\n public fieldInvalid: boolean | undefined;\n\n @ViewChild(SkyVerticalTabComponent)\n public tab: SkyVerticalTabComponent | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n readonly #sectionedFormService = inject(SkySectionedFormService);\n readonly #tabsetService = inject(SkyVerticalTabsetService);\n readonly #changeRef = inject(ChangeDetectorRef);\n\n public ngOnInit(): void {\n this.#changeRef.detectChanges();\n\n this.#tabsetService.switchingMobile.subscribe((mobile: boolean) => {\n this.#changeRef.detectChanges();\n });\n\n this.#sectionedFormService.requiredChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(\n (required: boolean | undefined) => (this.fieldRequired = required),\n );\n\n this.#sectionedFormService.invalidChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(\n (invalid: boolean | undefined) => (this.fieldInvalid = invalid),\n );\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n}\n","<sky-vertical-tab\n [active]=\"active\"\n [errorIndicator]=\"fieldInvalid\"\n [requiredIndicator]=\"fieldRequired\"\n [showTabRightArrow]=\"true\"\n [tabHeaderCount]=\"itemCount\"\n [tabHeading]=\"heading\"\n [tabId]=\"sectionTabId\"\n>\n <ng-content />\n</sky-vertical-tab>\n","export enum SkySectionedFormMessageType {\n ShowTabs = 1,\n}\n","import {\n AfterViewChecked,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n afterNextRender,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIdService } from '../shared/tab-id.service';\n\nimport { SkyVerticalTabsetService } from './../vertical-tabset/vertical-tabset.service';\nimport { SkySectionedFormMessage } from './types/sectioned-form-message';\nimport { SkySectionedFormMessageType } from './types/sectioned-form-message-type';\n\n/**\n * The default width of the tabs pane. Also serves as the maximum width of the\n * pane for any `tabWidth` value.\n */\nconst DEFAULT_TAB_WIDTH = '30%';\n\n/**\n * Creates a container for the sectioned forms.\n */\n@Component({\n selector: 'sky-sectioned-form',\n templateUrl: './sectioned-form.component.html',\n styleUrls: ['./sectioned-form.component.scss'],\n providers: [SkyTabIdService, SkyVerticalTabsetService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkySectionedFormComponent\n implements OnInit, OnDestroy, AfterViewChecked\n{\n /**\n * Whether the sectioned form loads section content during initialization so that it\n * displays content without moving around elements in the content container.\n * @default false\n */\n @Input()\n public maintainSectionContent: boolean | undefined = false;\n\n /**\n * The width of the tabs pane as a CSS width value (such as `200px`, `15rem`,\n * or `20%`). Set to `\"auto\"` to size based on tab label content. Maximum\n * width is 30%.\n * @default \"30%\"\n */\n public readonly tabWidth = input(DEFAULT_TAB_WIDTH, {\n transform: (value: string | undefined): string =>\n value?.trim() || DEFAULT_TAB_WIDTH,\n });\n\n @Input()\n public set messageStream(\n value: Subject<SkySectionedFormMessage> | undefined,\n ) {\n this.#_messageStream = value || new Subject<SkySectionedFormMessage>();\n this.#initMessageStream();\n }\n\n public get messageStream(): Subject<SkySectionedFormMessage> {\n return this.#_messageStream;\n }\n\n /**\n * Fires when the active tab changes and emits the index of the active\n * section. The index is based on the section's position when the form loads.\n */\n @Output()\n public indexChanged = new EventEmitter<number>();\n\n /**\n * Fires when the sectioned form tabs are shown or hidden.\n */\n @Output()\n public tabsVisibleChanged = new EventEmitter<boolean>();\n\n public ariaOwns: string | undefined;\n\n public ariaRole: string | undefined = 'tablist';\n\n @ViewChild('skySectionSideContent')\n public content: ElementRef | undefined;\n\n #ngUnsubscribe = new Subject<void>();\n\n #messageStreamSub: Subscription | undefined;\n readonly #changeRef = inject(ChangeDetectorRef);\n readonly #tabIdSvc = inject(SkyTabIdService);\n readonly #logger = inject(SkyLogService);\n\n #_messageStream = new Subject<SkySectionedFormMessage>();\n\n protected animationEnabled = signal(false);\n\n protected readonly isMobile = signal(false);\n\n public readonly tabService = inject(SkyVerticalTabsetService);\n\n constructor() {\n // Enable animations after the first render.\n afterNextRender(() => {\n this.animationEnabled.set(true);\n });\n\n this.#initMessageStream();\n\n this.#tabIdSvc.ids.pipe(takeUntil(this.#ngUnsubscribe)).subscribe((ids) => {\n this.ariaOwns = ids.join(' ') || undefined;\n this.#changeRef.markForCheck();\n });\n }\n\n public ngOnInit(): void {\n this.tabService.maintainTabContent = this.maintainSectionContent;\n\n this.tabService.indexChanged\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((index) => {\n this.indexChanged.emit(index);\n this.#changeRef.markForCheck();\n });\n\n this.tabService.switchingMobile\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((mobile: boolean) => {\n if (!mobile) {\n this.ariaRole = 'tablist';\n } else {\n this.ariaRole = undefined;\n }\n\n this.isMobile.set(mobile);\n this.#changeRef.markForCheck();\n });\n\n this.tabService.hidingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.tabsVisibleChanged.emit(false);\n });\n\n this.tabService.showingTabs\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.tabsVisibleChanged.emit(true);\n });\n\n if (this.tabService.isMobile()) {\n this.ariaRole = undefined;\n this.isMobile.set(true);\n this.#changeRef.markForCheck();\n }\n }\n\n public ngAfterViewChecked(): void {\n this.tabService.content = this.content;\n this.tabService.updateContent();\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n /**\n * @deprecated Use the `tabsVisibleChanged` output to listen for tab visibility changes.\n */\n /* istanbul ignore next */\n public tabsVisible(): boolean {\n this.#logger.deprecated('SectionedFormComponent.tabsVisible()', {\n deprecationMajorVersion: 8,\n moreInfoUrl:\n 'https://developer.blackbaud.com/skyux/components/sectioned-form',\n replacementRecommendation:\n 'Use the `tabsVisibleChanged` output to listen for tab visibility changes.',\n });\n\n this.#changeRef.markForCheck();\n return this.tabService.tabsVisible();\n }\n\n /**\n * @deprecated Use the `messageStream` input and push a `ShowTabs` message to the message stream instead.\n */\n public showTabs(): void {\n this.#logger.deprecated('SectionedFormComponent.showTabs()', {\n deprecationMajorVersion: 8,\n moreInfoUrl:\n 'https://developer.blackbaud.com/skyux/components/sectioned-form',\n replacementRecommendation:\n 'Use the `messageStream` input and push a `ShowTabs` message to the message stream instead.',\n });\n\n this.#showTabs();\n }\n\n #showTabs(): void {\n this.tabService.showTabs();\n this.#changeRef.markForCheck();\n }\n\n #initMessageStream(): void {\n if (this.#messageStreamSub) {\n this.#messageStreamSub.unsubscribe();\n }\n\n this.#messageStreamSub = this.messageStream\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((message) => {\n switch (message.type) {\n case SkySectionedFormMessageType.ShowTabs:\n this.#showTabs();\n break;\n }\n });\n }\n\n protected readonly tabsFlexBasis = computed<string | undefined>(() =>\n this.isMobile() ? undefined : this.tabWidth(),\n );\n\n protected readonly tabsMaxWidth = computed<string | undefined>(() =>\n this.isMobile() ? undefined : DEFAULT_TAB_WIDTH,\n );\n}\n","<div class=\"sky-sectioned-form\" (window:resize)=\"tabService.updateContent()\">\n <!--\n ARIA rules do not allow tabpanel elements to be children of a tablist element.\n However, the markup for each sky-vertical-tab component includes both the tab button\n and its panel, making the panel element a child of its tablist. Moreover, our\n sky-vertical-tab components can be grouped within collapsible containers, which also\n violates accessibility rules because only tab buttons can be children of a tablist.\n To address this, we create an empty tablist element with an aria-owns attribute,\n pointing to each tab element individually. That way, we don't have to worry about the\n structure for each sky-vertical-tab component in order to satisfy accessibility\n guidelines.\n -->\n <span\n [attr.aria-orientation]=\"ariaRole ? 'vertical' : undefined\"\n [attr.aria-owns]=\"ariaRole ? ariaOwns : undefined\"\n [attr.role]=\"ariaRole\"\n ></span>\n @if (maintainSectionContent || tabService.tabsVisible()) {\n <div\n class=\"sky-sectioned-form-tabs\"\n [style.flex-basis]=\"tabsFlexBasis()\"\n [style.max-width]=\"tabsMaxWidth()\"\n [class.sky-animation-slide-enter-left]=\"animationEnabled()\"\n [ngClass]=\"{\n 'sky-sectioned-form-tabs-hidden': !tabService.tabsVisible(),\n 'sky-sectioned-form-tabs-only': !tabService.contentVisible()\n }\"\n >\n <ng-content />\n </div>\n }\n @if (maintainSectionContent || tabService.contentVisible()) {\n <div\n #skySectionSideContent\n class=\"sky-sectioned-form-content\"\n [class.sky-animation-slide-enter-right]=\"animationEnabled()\"\n [ngClass]=\"{\n 'sky-sectioned-form-content-hidden': !tabService.contentVisible()\n }\"\n ></div>\n }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyVerticalTabsetModule } from '../vertical-tabset/vertical-tabset.module';\n\nimport { SkySectionedFormSectionComponent } from './sectioned-form-section.component';\nimport { SkySectionedFormComponent } from './sectioned-form.component';\n\n@NgModule({\n declarations: [SkySectionedFormComponent, SkySectionedFormSectionComponent],\n imports: [\n CommonModule,\n SkyCheckboxModule,\n SkyThemeModule,\n SkyVerticalTabsetModule,\n ],\n exports: [SkySectionedFormComponent, SkySectionedFormSectionComponent],\n})\nexport class SkySectionedFormModule {}\n","import { ElementRef, Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabButtonAdapterService {\n public focusButtonLink(buttonEl: ElementRef): void {\n buttonEl.nativeElement.querySelector('a').focus();\n }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { TabButtonViewModel } from './tab-button-view-model';\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabLayoutType } from './tab-layout-type';\nimport { SkyTabsetActiveTabChangeArgs } from './tabset-active-tab-change-args';\nimport { SkyTabsetActiveTabUnregisteredArgs } from './tabset-active-tab-unregistered-args';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabsetService implements OnDestroy {\n public readonly activeTabUnregistered: Observable<SkyTabsetActiveTabUnregisteredArgs>;\n\n public readonly activeTabChange: Observable<SkyTabsetActiveTabChangeArgs>;\n\n public readonly focusedTabBtnIndex: Observable<SkyTabIndex>;\n\n public readonly activeTabLayout: Observable<SkyTabLayoutType>;\n\n public currentActiveTabIndex: SkyTabIndex | undefined = 0;\n\n public currentFocusedTabBtnIndex: SkyTabIndex = 0;\n\n #activeTabChange: BehaviorSubject<SkyTabsetActiveTabChangeArgs>;\n\n #focusedTabBtnIndex: Subject<SkyTabIndex>;\n\n #activeTabUnregistered: Subject<SkyTabsetActiveTabUnregisteredArgs>;\n\n #activeTabLayout: Subject<SkyTabLayoutType>;\n\n #tabs: {\n tabIndex: SkyTabIndex | undefined;\n }[] = [];\n\n #tabCounter = 0;\n\n constructor() {\n this.#activeTabChange = new BehaviorSubject<SkyTabsetActiveTabChangeArgs>({\n initial: true,\n tabIndex: 0,\n });\n\n this.#activeTabLayout = new Subject();\n\n this.#activeTabUnregistered = new Subject();\n\n this.#focusedTabBtnIndex = new Subject();\n\n this.activeTabChange = this.#activeTabChange.asObservable();\n this.activeTabLayout = this.#activeTabLayout.asObservable();\n this.activeTabUnregistered = this.#activeTabUnregistered.asObservable();\n this.focusedTabBtnIndex = this.#focusedTabBtnIndex.asObservable();\n }\n\n public ngOnDestroy(): void {\n this.#activeTabChange.complete();\n this.#activeTabUnregistered.complete();\n this.#focusedTabBtnIndex.complete();\n this.#activeTabLayout.complete();\n }\n\n /**\n * Sets the active tab by its unique `tabIndex` property.\n */\n public setActiveTabIndex(\n value: SkyTabsetActiveTabChangeArgs,\n config = {\n emitChange: true,\n },\n ): void {\n if (\n value.tabIndex !== undefined &&\n !this.tabIndexesEqual(value.tabIndex, this.currentActiveTabIndex)\n ) {\n this.currentActiveTabIndex = value.tabIndex;\n\n /* istanbul ignore else */\n if (config.emitChange) {\n this.#activeTabChange.next(value);\n }\n\n this.setFocusedTabBtnIndex(value.tabIndex);\n }\n }\n\n public focusNextTabBtn(tabButtons: TabButtonViewModel[]): void {\n const currentTabArrayIndex = this.#tabs.findIndex((tab) =>\n this.tabIndexesEqual(tab.tabIndex, this.currentFocusedTabBtnIndex),\n );\n\n for (\n let i = this.#getNextTabArrayIndex(currentTabArrayIndex);\n i !== currentTabArrayIndex;\n i = this.#getNextTabArrayIndex(i)\n ) {\n const tabBtn = tabButtons[i];\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public focusPrevTabBtn(tabButtons: TabButtonViewModel[]): void {\n const currentTabArrayIndex = this.#tabs.findIndex((tab) =>\n this.tabIndexesEqual(tab.tabIndex, this.currentFocusedTabBtnIndex),\n );\n\n for (\n let i = this.#getPrevTabArrayIndex(currentTabArrayIndex);\n i !== currentTabArrayIndex;\n i = this.#getPrevTabArrayIndex(i)\n ) {\n const tabBtn = tabButtons[i];\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public focusFirstOrNearestTabBtn(tabButtons: TabButtonViewModel[]): void {\n for (const tabBtn of tabButtons) {\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public focusLastOrNearestTabBtn(tabButtons: TabButtonViewModel[]): void {\n for (let i = tabButtons.length - 1; i >= 0; i--) {\n const tabBtn = tabButtons[i];\n\n if (!tabBtn.disabled && tabBtn.tabIndex !== undefined) {\n this.setFocusedTabBtnIndex(tabBtn.tabIndex);\n return;\n }\n }\n }\n\n public setFocusedTabBtnIndex(tabIndex: SkyTabIndex): void {\n this.currentFocusedTabBtnIndex = tabIndex;\n this.#focusedTabBtnIndex.next(tabIndex);\n }\n\n /**\n * Registers a tab component.\n */\n public registerTab(tabIndex?: SkyTabIndex): SkyTabIndex {\n if (tabIndex === undefined) {\n tabIndex = this.#tabCounter;\n this.#tabCounter++;\n }\n\n this.#tabs.push({ tabIndex });\n\n return tabIndex;\n }\n\n public updateTabIndex(\n currentTabIndex: SkyTabIndex,\n newTabIndex: SkyTabIndex,\n ): void {\n const found = this.#tabs.find((tab) =>\n this.tabIndexesEqual(tab.tabIndex, currentTabIndex),\n );\n if (found) {\n found.tabIndex = newTabIndex;\n }\n }\n\n public updateActiveTabLayout(layout: SkyTabLayoutType): void {\n this.#activeTabLayout.next(layout);\n }\n\n /**\n * Unregisters a tab component.\n */\n public unregisterTab(tabIndex: SkyTabIndex): void {\n const index = this.#tabs.findIndex((tab) =>\n this.tabIndexesEqual(tab.tabIndex, tabIndex),\n );\n\n // Notify the tabset component when an active tab is unregistered.\n if (this.#isTabIndexActive(this.#tabs[index]?.tabIndex)) {\n this.#activeTabUnregistered.next({\n arrayIndex: index,\n });\n }\n\n this.#tabs.splice(index, 1);\n }\n\n /**\n * Unregisters all tab components at once.\n */\n public unregisterAll(): void {\n this.#tabs = [];\n }\n\n /**\n * Compares two tab indexes and returns `true` if they are equal.\n */\n public tabIndexesEqual(\n tabIndex1: SkyTabIndex | undefined,\n tabIndex2: SkyTabIndex | undefined,\n ): boolean {\n return (\n tabIndex1 === tabIndex2 ||\n (tabIndex1 !== undefined &&\n tabIndex2 !== undefined &&\n +tabIndex1 === +tabIndex2)\n );\n }\n\n /**\n * Verifies if a provided tab index is registered.\n */\n public isValidTabIndex(tabIndex: SkyTabIndex): boolean {\n return this.#tabs.some((tab) =>\n this.tabIndexesEqual(tab.tabIndex, tabIndex),\n );\n }\n\n /**\n * Activates the first registered tab.\n */\n public activateFirstTab(): SkyTabIndex | undefined {\n const firstTabIndex = this.#tabs[0] && this.#tabs[0].tabIndex;\n if (firstTabIndex !== undefined) {\n this.setActiveTabIndex({\n tabIndex: firstTabIndex,\n });\n return firstTabIndex;\n }\n return undefined;\n }\n\n /**\n * Activates the next registered tab, or the previous one based on a provided array index.\n */\n public activateNearestTab(arrayIndex: number): void {\n const newActiveTab = this.#tabs[arrayIndex] || this.#tabs[arrayIndex - 1];\n if (newActiveTab) {\n this.currentActiveTabIndex = newActiveTab.tabIndex;\n }\n }\n\n #isTabIndexActive(tabIndex: SkyTabIndex | undefined): boolean {\n return this.tabIndexesEqual(tabIndex, this.currentActiveTabIndex);\n }\n\n #getNextTabArrayIndex(currentIndex: number): number {\n let nextIndex = currentIndex + 1;\n\n if (nextIndex === this.#tabs.length) {\n nextIndex = 0;\n }\n\n return nextIndex;\n }\n\n #getPrevTabArrayIndex(currentIndex: number): number {\n let prevIndex = currentIndex - 1;\n\n if (prevIndex < 0) {\n prevIndex = this.#tabs.length - 1;\n }\n\n return prevIndex;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabButtonAdapterService } from './tab-button-adapter.service';\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabsetStyle } from './tabset-style';\nimport { SkyTabsetService } from './tabset.service';\n\nconst DEFAULT_DISABLED = false;\n\ntype SkyWizardStepState = 'completed' | 'current' | 'unavailable';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-tab-button',\n templateUrl: './tab-button.component.html',\n styleUrls: ['./tab-button.component.scss'],\n providers: [SkyTabButtonAdapterService],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyTabButtonComponent implements AfterViewInit, OnDestroy {\n @Input()\n public get active(): boolean | undefined {\n return this.#_isActive;\n }\n public set active(value: boolean | undefined) {\n this.#_isActive = value;\n this.#updateWizardStepState();\n }\n\n @Input()\n public ariaControls: string | undefined;\n\n @Input()\n public buttonHref: string | undefined;\n\n @Input()\n public buttonId: string | undefined;\n\n @Input()\n public buttonText: string | undefined;\n\n @Input()\n public buttonTextCount: string | undefined;\n\n @Input()\n public closeable: boolean | undefined;\n\n @Input()\n public get disabled(): boolean {\n return this.#_isDisabled;\n }\n\n public set disabled(value: boolean | undefined) {\n this.#_isDisabled = value ?? DEFAULT_DISABLED;\n this.#updateWizardStepState();\n }\n\n @Input()\n public tabIndex: SkyTabIndex | undefined;\n\n @Input()\n public tabNumber: number | undefined;\n\n @Input()\n public totalTabsCount: number | undefined;\n\n @Input()\n public get tabStyle(): SkyTabsetStyle | undefined {\n return this.#_tabStyle;\n }\n\n public set tabStyle(style: SkyTabsetStyle | undefined) {\n this.#_tabStyle = style;\n this.#updateWizardStepState();\n }\n\n @Output()\n public buttonClick = new EventEmitter<void>();\n\n @Output()\n public closeClick = new EventEmitter<void>();\n\n public closeBtnTabIndex = '-1';\n public wizardStepState: SkyWizardStepState | undefined;\n #_isActive: boolean | undefined = false;\n #_isDisabled = DEFAULT_DISABLED;\n #_tabStyle: SkyTabsetStyle | undefined;\n readonly #adapterService = inject(SkyTabButtonAdapterService);\n readonly #changeDetectorRef = inject(ChangeDetectorRef);\n readonly #elementRef = inject(ElementRef);\n readonly #tabsetService = inject(SkyTabsetService);\n #ngUnsubscribe = new Subject<void>();\n\n public ngAfterViewInit(): void {\n this.#tabsetService.focusedTabBtnIndex\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((focusedIndex) => {\n if (this.tabIndex !== undefined && focusedIndex === this.tabIndex) {\n this.closeBtnTabIndex = '0';\n this.focusBtn();\n } else {\n this.closeBtnTabIndex = '-1';\n }\n this.#changeDetectorRef.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public onButtonClick(event: any): void {\n if (!this.disabled) {\n this.buttonClick.emit();\n event.preventDefault();\n }\n }\n\n public onTabButtonKeyDown(event: KeyboardEvent): void {\n /*istanbul ignore else */\n if (event.key) {\n switch (event.key.toUpperCase()) {\n case ' ':\n case 'ENTER':\n this.onButtonClick(event);\n break;\n /* istanbul ignore next */\n default:\n break;\n }\n }\n }\n\n public onCloseClick(event: any): void {\n this.closeClick.emit();\n\n // Prevent the click event from bubbling up to the anchor tag;\n // otherwise it will trigger a page refresh.\n event.stopPropagation();\n event.preventDefault();\n }\n\n public focusBtn(): void {\n this.#adapterService.focusButtonLink(this.#elementRef);\n }\n\n public onFocus(): void {\n if (this.tabIndex !== undefined) {\n this.#tabsetService.setFocusedTabBtnIndex(this.tabIndex);\n }\n }\n\n #updateWizardStepState(): void {\n if (this.tabStyle === 'tabs') {\n this.wizardStepState = undefined;\n } else {\n if (this.active) {\n this.wizardStepState = 'current';\n } else if (!this.disabled) {\n this.wizardStepState = 'completed';\n } else {\n this.wizardStepState = 'unavailable';\n }\n }\n\n this.#changeDetectorRef.markForCheck();\n }\n}\n","<div\n class=\"sky-btn-tab-wrapper\"\n [ngClass]=\"{\n 'sky-btn-tab-wrapper-selected': active,\n 'sky-btn-tab-wrapper-disabled': disabled\n }\"\n>\n <a\n #tabButtonEl\n class=\"sky-btn-tab\"\n role=\"tab\"\n [attr.aria-controls]=\"ariaControls\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-selected]=\"active\"\n [attr.href]=\"buttonHref\"\n [attr.aria-label]=\"\n tabStyle === 'wizard'\n ? ('skyux_wizard_sr_step_' + wizardStepState\n | skyLibResources: tabNumber : totalTabsCount : buttonText)\n : null\n \"\n [attr.aria-labelledby]=\"tabStyle === 'wizard' ? null : tabHeading.id\"\n [id]=\"buttonId\"\n [ngClass]=\"{\n 'sky-btn-tab-wizard': tabStyle === 'wizard',\n 'sky-btn-tab-selected': active,\n 'sky-btn-tab-disabled': disabled,\n 'sky-tab-btn-closeable': closeable\n }\"\n [tabindex]=\"active ? '0' : '-1'\"\n (click)=\"onButtonClick($event)\"\n (keydown)=\"onTabButtonKeyDown($event)\"\n (focus)=\"onFocus()\"\n >\n <span class=\"sky-tab-heading\" [attr.aria-hidden]=\"true\">\n <span #tabHeading=\"skyId\" skyId>\n {{ buttonText }}\n @if (buttonTextCount !== undefined) {\n <span class=\"sky-tab-header-count\">\n {{ buttonTextCount }}\n </span>\n }\n </span>\n @if (closeable) {\n <span\n class=\"sky-btn-tab-close\"\n [tabindex]=\"closeBtnTabIndex\"\n [attr.aria-label]=\"'skyux_tab_close' | skyLibResources: buttonText\"\n [ngClass]=\"{\n 'sky-btn-tab-close-disabled': disabled\n }\"\n [skyThemeClass]=\"{\n 'sky-btn sky-btn-icon-borderless': 'modern'\n }\"\n (click)=\"onCloseClick($event)\"\n (keydown.enter)=\"onCloseClick($event)\"\n >\n <sky-icon iconName=\"close\" />\n </span>\n }\n </span>\n </a>\n</div>\n","import { Location } from '@angular/common';\nimport { Injectable, OnDestroy, inject } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\n\nimport { Observable, Subject, SubscriptionLike } from 'rxjs';\n\n/**\n * @internal\n */\ntype PermalinkParams = Record<string, string>;\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabsetPermalinkService implements OnDestroy {\n public get popStateChange(): Observable<void> {\n return this.#popStateChange;\n }\n\n #popStateChange = new Subject<void>();\n\n #subscription: SubscriptionLike | undefined;\n\n readonly #activatedRoute = inject(ActivatedRoute);\n readonly #location = inject(Location);\n readonly #router = inject(Router);\n\n public ngOnDestroy(): void {\n this.#subscription?.unsubscribe();\n this.#popStateChange.complete();\n }\n\n public init(): void {\n this.#subscription = this.#location.subscribe(() => {\n this.#popStateChange.next();\n });\n }\n\n /**\n * Returns the value of a URL query param.\n */\n public getParam(name: string): string {\n return this.#getParams()[name];\n }\n\n /**\n * Sets the value of a URL query param.\n */\n public setParam(name: string, value: string | null, initial?: boolean): void {\n const params: Params = this.#getParams();\n params[name] = value ?? undefined;\n\n // Uses merge so other query params are not lost. Deleted query params\n // are set to `undefined` so they are removed from the URL.\n const url = this.#router\n .createUrlTree([], {\n relativeTo: this.#activatedRoute,\n queryParams: params,\n queryParamsHandling: 'merge',\n })\n .toString();\n\n // Abort redirect if the current URL is equal to the new URL.\n if (this.#location.isCurrentPathEqualTo(url)) {\n return;\n }\n\n // Navigate via the Angular router to update the URL and broadcast the\n // change. Use `replaceUrl` on the initial navigation so an extra history\n // item isn't added to the browser's back stack.\n void this.#router.navigate([], {\n relativeTo: this.#activatedRoute,\n queryParams: params,\n queryParamsHandling: 'merge',\n replaceUrl: initial,\n });\n }\n\n /**\n * Removes the provided query param from the URL.\n */\n public clearParam(name: string): void {\n // Don't overwrite the URL while the Angular router is in the process\n // of navigating (e.g. when the tabset is destroyed due to navigating\n // away from the current page).\n if (!this.#router.currentNavigation()) {\n this.setParam(name, null);\n }\n }\n\n /**\n * Returns a relative URL that includes the provided query parameter. The value is intended to be\n * used by an HTML anchor element.\n */\n public getParamHref(name: string | undefined, value: string): string | null {\n if (!name) {\n return null;\n }\n\n const params = this.#getParams();\n params[name] = value;\n\n const baseUrl = this.#location.path().split('?')[0];\n const paramString = Object.keys(params)\n .map((k) => `${k}=${params[k]}`)\n .join('&');\n\n return this.#location.prepareExternalUrl(`${baseUrl}?${paramString}`);\n }\n\n /**\n * Converts the provided string into a value that can be safely used in a URL.\n */\n public urlify(value: string | undefined): string {\n if (!value) {\n return '';\n }\n\n const sanitized = value\n .toLowerCase()\n\n // Remove special characters.\n .replace(/[_~`@!#$%^&*()[\\]{};:'/\\\\<>,.?=+|\"]/g, '')\n\n // Replace space characters with a dash.\n .replace(/\\s/g, '-')\n\n // Remove any double-dashes.\n .replace(/--/g, '-');\n\n return sanitized;\n }\n\n /**\n * Returns all query params that exist in the current URL.\n */\n #getParams(): PermalinkParams {\n const params: PermalinkParams = {};\n\n const path = this.#location.path();\n if (path.indexOf('?') === -1) {\n return params;\n }\n\n const existingParamPairs = path.split('?')[1].split('&');\n existingParamPairs.forEach((pair) => {\n const fragments = pair.split('=');\n params[fragments[0]] = decodeURIComponent(fragments[1]);\n });\n\n return params;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { SkyResponsiveHostDirective } from '@skyux/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabLayoutType } from './tab-layout-type';\nimport { SkyTabsetPermalinkService } from './tabset-permalink.service';\nimport { SkyTabsetService } from './tabset.service';\n\nconst LAYOUT_CLASS_PREFIX = 'sky-layout-host-';\nconst LAYOUT_DEFAULT: SkyTabLayoutType = 'none';\n\nlet nextId = 0;\n\n@Component({\n hostDirectives: [SkyResponsiveHostDirective],\n selector: 'sky-tab',\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class SkyTabComponent implements OnChanges, OnDestroy {\n /**\n * Whether the tab is active when the tabset loads. After initialization, the `active`\n * property on the tabset component should be used to set the active tab.\n * @default false\n */\n @Input()\n public set active(value: boolean | undefined) {\n if (value !== undefined && !!value !== this.#_active) {\n this.#_active = value;\n this.#activeChange.next();\n }\n }\n\n public get active(): boolean {\n return this.#_active;\n }\n\n public get activeChange(): Observable<void> {\n return this.#activeChange;\n }\n\n /**\n * Whether to disable the tab.\n * @default false\n */\n @Input()\n public disabled: boolean | undefined;\n\n /**\n * The custom query parameter value for the tab.\n * This works in conjunction with the tabset's `permalinkId` to distinguish\n * the tab's unique state in the URL by generating a query parameter that is\n * written as `?<queryParam>-active-tab=<sanitized-tab-heading`.\n * By default, the query parameter's value is parsed automatically from the tab's heading text.\n * This input only applies when the tabset's `tabStyle` is `\"tabs\"`.\n */\n @Input()\n public set permalinkValue(value: string | undefined) {\n this.#_permalinkValue = value;\n this.#setPermalinkValueOrDefault();\n }\n\n public get permalinkValue(): string | undefined {\n return this.#_permalinkValue;\n }\n\n /**\n * Displays a counter beside the tab header.\n * This input only applies when the tabset's `tabStyle` is `\"tabs\"`.\n * @deprecated SKY UX no longer recommends adding counts to tabs.\n */\n @Input()\n public tabHeaderCount: string | undefined;\n\n /**\n * The tab header.\n * When using tabs as the main navigation on a page,\n * use [the Angular `Title` service](https://angular.dev/api/platform-browser/Title)\n * and [the SKY UX page title guidelines](https://developer.blackbaud.com/skyux/design/guidelines/content#page-titles)\n * to reflect the tab header in the page title.\n * @required\n */\n @Input()\n public set tabHeading(value: string | undefined) {\n this.#_tabHeading = value;\n\n this.#setPermalinkValueOrDefault();\n }\n\n public get tabHeading(): string | undefined {\n return this.#_tabHeading;\n }\n\n /**\n * The unique identifier for the tab.\n * If not defined, the identifier is set to the position of the tab on load, starting with `0`.\n */\n @Input()\n public set tabIndexValue(value: SkyTabIndex | undefined) {\n if (\n value !== this.#_tabIndexValue &&\n value !== undefined &&\n this.#_tabIndexValue !== undefined\n ) {\n this.#tabsetService.updateTabIndex(this.#_tabIndexValue, value);\n this.#tabIndexChange.next(value);\n }\n\n this.#_tabIndexValue = value;\n }\n\n public get tabIndexValue(): SkyTabIndex | undefined {\n return this.#_tabIndexValue;\n }\n\n /**\n * The tab layout that applies spacing to the tab container element. Use the layout\n * that corresponds with the top-level component type used within the tab, or use `fit` to\n * constrain the tab contents to the available viewport.\n * Use `none` for custom content that does not adhere to predefined spacing or constraints.\n * @default \"none\"\n */\n @Input()\n public set layout(value: SkyTabLayoutType | undefined) {\n const layout = value || LAYOUT_DEFAULT;\n\n this.#_layout = layout;\n this.cssClass = `${LAYOUT_CLASS_PREFIX}${layout}`;\n\n if (this.active) {\n this.#tabsetService.updateActiveTabLayout(layout);\n }\n }\n\n public get layout(): SkyTabLayoutType {\n return this.#_layout;\n }\n\n @HostBinding('class')\n public cssClass = `${LAYOUT_CLASS_PREFIX}${LAYOUT_DEFAULT}`;\n\n /**\n * Fires when users click the button to close the tab.\n * The close button is added to the tab when you specify a listener for this event.\n * This event only applies when the tabset's `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public close = new EventEmitter<void>(); // eslint-disable-line @angular-eslint/no-output-native\n\n /**\n * Alerts the tabset component when this component has changes that need to be reflected in the UI.\n */\n public get stateChange(): Observable<void> {\n return this.#stateChange;\n }\n\n public get tabIndexChange(): Observable<SkyTabIndex | undefined> {\n return this.#tabIndexChange;\n }\n\n public permalinkValueOrDefault = '';\n\n public showContent = false;\n\n public tabButtonId: string;\n\n public tabPanelId: string;\n\n #_active = false;\n\n #activeChange: BehaviorSubject<void | undefined>;\n\n #_permalinkValue: string | undefined;\n\n #stateChange: BehaviorSubject<void>;\n\n #_tabHeading: string | undefined;\n\n #_tabIndexValue: SkyTabIndex | undefined;\n\n #_layout: SkyTabLayoutType = LAYOUT_DEFAULT;\n\n #tabIndexChange: BehaviorSubject<SkyTabIndex | undefined>;\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #permalinkService = inject(SkyTabsetPermalinkService);\n readonly #tabsetService = inject(SkyTabsetService);\n\n constructor() {\n const id = nextId++;\n this.tabPanelId = `sky-tab-${id}`;\n this.tabButtonId = `${this.tabPanelId}-nav-btn`;\n\n this.#activeChange = new BehaviorSubject<void | undefined>(undefined);\n this.#stateChange = new BehaviorSubject<void>(undefined);\n this.#tabIndexChange = new BehaviorSubject<SkyTabIndex | undefined>(\n undefined,\n );\n\n this.#setPermalinkValueOrDefault();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\n (changes['disabled'] && !changes['disabled'].firstChange) ||\n (changes['tabHeading'] && !changes['tabHeading'].firstChange) ||\n (changes['tabHeaderCount'] && !changes['tabHeaderCount'].firstChange) ||\n (changes['permalinkValue'] && !changes['permalinkValue'].firstChange)\n ) {\n this.#stateChange.next();\n }\n }\n\n public ngOnDestroy(): void {\n this.#activeChange.complete();\n this.#stateChange.complete();\n this.#tabIndexChange.complete();\n if (this.tabIndexValue !== undefined) {\n this.#tabsetService.unregisterTab(this.tabIndexValue);\n }\n }\n\n public init(): void {\n this.#_tabIndexValue = this.#tabsetService.registerTab(this.tabIndexValue);\n }\n\n public activate(): void {\n this.#_active = true;\n this.showContent = true;\n this.#changeDetector.markForCheck();\n }\n\n public deactivate(): void {\n this.#_active = false;\n this.showContent = false;\n this.#changeDetector.markForCheck();\n }\n\n public isCloseable(): boolean {\n return this.close.observers.length > 0;\n }\n\n #setPermalinkValueOrDefault(): void {\n this.permalinkValueOrDefault =\n this.#permalinkService.urlify(this.permalinkValue) ||\n this.#permalinkService.urlify(this.tabHeading);\n }\n}\n","<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content />\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { SkyTabsetNavButtonType } from './tabset-nav-button-type';\n\n@Pipe({\n name: 'skyTabsetNavButtonDisabled',\n standalone: false,\n})\nexport class SkyTabsetNavButtonDisabledPipe implements PipeTransform {\n public transform(\n disabled: boolean | undefined,\n buttonType?: SkyTabsetNavButtonType | string,\n tabToSelectExists?: boolean,\n tabToSelectIsDisabled?: boolean,\n ): boolean {\n if (disabled !== undefined) {\n return disabled;\n } else if (buttonType === 'finish') {\n return false;\n }\n\n return !tabToSelectExists || !!tabToSelectIsDisabled;\n }\n}\n","import {\n Component,\n HostBinding,\n Input,\n OnDestroy,\n inject,\n} from '@angular/core';\nimport { SkyLogService } from '@skyux/core';\n\nimport { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabComponent } from './tab.component';\nimport { SkyTabsetNavButtonType } from './tabset-nav-button-type';\nimport { SkyTabsetComponent } from './tabset.component';\n\nconst buttonTypeNext = 'next';\nconst buttonTypePrevious = 'previous';\nconst buttonTypeFinish = 'finish';\n\n/**\n * Creates a button to navigate between tabs in a tabset when `tabStyle` is `\"wizard\"`.\n */\n@Component({\n selector: 'sky-tabset-nav-button',\n templateUrl: './tabset-nav-button.component.html',\n standalone: false,\n})\nexport class SkyTabsetNavButtonComponent implements OnDestroy {\n /**\n * The tabset wizard component to associate with the nav button.\n * @required\n */\n @Input()\n public get tabset(): SkyTabsetComponent | undefined {\n return this.#_tabset;\n }\n\n public set tabset(value: SkyTabsetComponent | undefined) {\n this.#_tabset = value;\n\n if (this.#currentTabsetSub) {\n this.#currentTabsetSub.unsubscribe();\n }\n\n if (value) {\n this.#currentTabsetSub = value.activeChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((index: SkyTabIndex) => {\n this.#activeSkyTabIndex = index;\n this.#tabCount = this.#_tabset?.tabs?.length;\n this.#updateTabToSelect();\n this.#updateButtonVisibility();\n this.#updateButtonProperties();\n });\n } else {\n this.#logger.error(\n 'The SkyTabsetNavButtonComponent requires a reference to the SkyTabsetComponent it controls.',\n );\n }\n }\n\n /**\n * The type of nav button to include.\n * @required\n */\n @Input()\n public get buttonType(): SkyTabsetNavButtonType | undefined {\n return this.#_buttonType;\n }\n\n public set buttonType(value: SkyTabsetNavButtonType | undefined) {\n this.#_buttonType = value;\n this.#updateTabToSelect();\n this.#updateButtonProperties();\n this.#updateButtonVisibility();\n\n if (value === buttonTypeFinish) {\n this.type = 'submit';\n } else {\n this.type = 'button';\n }\n }\n\n @HostBinding('attr.data-button-type')\n public get buttonTypeData(): SkyTabsetNavButtonType | undefined {\n return this.buttonType;\n }\n\n /**\n * The label to display on the nav button. The following are the defaults for each `buttonType`:\n * `next` = \"Next\", `previous` = \"Previous\", `finish` = \"Finish\"\n */\n @Input()\n public buttonText?: string | undefined;\n\n /**\n * Whether to disable the nav button.\n * Defaults to the disabled state of the next tab for `next`, the existence of a previous tab for `previous`,\n * and false for `finish`.\n */\n @Input()\n public set disabled(value: boolean | undefined) {\n this.#_disabled = value;\n }\n\n public get disabled(): boolean | undefined {\n return this.#_disabled;\n }\n\n public buttonClassName: string | undefined;\n public isVisible = false;\n public type: 'submit' | 'button' = 'submit';\n public ariaControls: string | undefined;\n\n protected tabToSelect: SkyTabComponent | undefined;\n\n #_buttonType: SkyTabsetNavButtonType | undefined;\n #_disabled: boolean | undefined;\n #_tabset: SkyTabsetComponent | undefined;\n #activeIndexNumber: number | undefined;\n #activeSkyTabIndex: SkyTabIndex | undefined;\n #currentTabsetSub: Subscription | undefined;\n readonly #logger = inject(SkyLogService);\n #tabCount: number | undefined;\n #ngUnsubscribe = new Subject<void>();\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n public buttonClick(): void {\n /* istanbul ignore else */\n if (this.tabToSelect && !this.tabToSelect.disabled && this.tabset) {\n this.tabset.active = this.tabToSelect.tabIndexValue;\n }\n }\n\n #updateButtonVisibility(): void {\n const isLastStep =\n !!this.#tabCount && this.#activeIndexNumber === this.#tabCount - 1;\n\n if (this.buttonType === buttonTypeFinish) {\n this.isVisible = isLastStep;\n } else if (this.buttonType === buttonTypeNext) {\n this.isVisible = !isLastStep;\n } else {\n this.isVisible = true;\n }\n }\n\n #updateButtonProperties(): void {\n if (\n this.buttonType === buttonTypeNext ||\n this.buttonType === buttonTypeFinish\n ) {\n this.buttonClassName = 'sky-btn-primary';\n } else {\n this.buttonClassName = 'sky-btn-default';\n }\n\n this.ariaControls = this.tabToSelect?.tabPanelId;\n }\n\n #updateTabToSelect(): void {\n if (this.tabset?.tabs) {\n const tabs = this.tabset.tabs.toArray();\n this.tabToSelect = undefined;\n\n // tab index can be a number or a string, but we need the actual number index\n this.#activeIndexNumber = tabs.findIndex(\n (tab) => tab.tabIndexValue === this.#activeSkyTabIndex,\n );\n\n /* istanbul ignore else */\n if (this.#activeIndexNumber !== undefined) {\n if (this.buttonType === buttonTypeNext) {\n this.tabToSelect = tabs[this.#activeIndexNumber + 1];\n } else if (this.buttonType === buttonTypePrevious) {\n this.tabToSelect = tabs[this.#activeIndexNumber - 1];\n }\n }\n }\n }\n}\n","@if (isVisible) {\n <button\n class=\"sky-btn sky-margin-inline-sm\"\n [attr.aria-controls]=\"ariaControls\"\n [disabled]=\"\n disabled\n | skyTabsetNavButtonDisabled\n : buttonType\n : !!tabToSelect\n : tabToSelect?.disabled\n \"\n [ngClass]=\"buttonClassName\"\n [type]=\"type\"\n (click)=\"buttonType === 'finish' ? null : buttonClick()\"\n >\n {{ buttonText || ('skyux_tabs_navigator_' + buttonType | skyLibResources) }}\n </button>\n}\n","import { ElementRef, Injectable, OnDestroy } from '@angular/core';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * @internal\n */\n@Injectable()\nexport class SkyTabsetAdapterService implements OnDestroy {\n public get overflowChange(): Observable<boolean> {\n return this.#overflowChange;\n }\n\n #currentOverflow = false;\n\n #tabsetRef: ElementRef | undefined;\n\n #tabsOffsetLeft: number | undefined;\n\n #overflowChange: BehaviorSubject<boolean>;\n\n constructor() {\n this.#overflowChange = new BehaviorSubject<boolean>(false);\n }\n\n public ngOnDestroy(): void {\n this.#overflowChange.complete();\n }\n\n public registerTabset(tabsetRef: ElementRef): void {\n this.#tabsetRef = tabsetRef;\n this.#tabsOffsetLeft = this.#getTabsOffsetLeft(tabsetRef.nativeElement);\n }\n\n /**\n * Detects if the tab buttons are wider than the tabset container.\n */\n public detectOverflow(): void {\n const nativeElement = this.#tabsetRef?.nativeElement;\n\n const tabsetRect = nativeElement\n .querySelector('.sky-tabset')\n .getBoundingClientRect();\n\n const tabButtonsRect = nativeElement\n .querySelector('.sky-tabset-tabs')\n .getBoundingClientRect();\n\n const tabExtraButtonsRect = nativeElement\n .querySelector('.sky-tabset-btns')\n .getBoundingClientRect();\n\n const tabButtonsWidth =\n tabButtonsRect.width + tabExtraButtonsRect.width + this.#tabsOffsetLeft;\n\n const newOverflow = tabButtonsWidth > tabsetRect.width;\n if (this.#currentOverflow !== newOverflow) {\n this.#currentOverflow = newOverflow;\n this.#overflowChange.next(this.#currentOverflow);\n }\n }\n\n /**\n * Returns the number of pixels to the left of the first tab.\n */\n #getTabsOffsetLeft(tabsetEl: HTMLElement): number {\n const tabsetRect = tabsetEl.getBoundingClientRect();\n\n // The dropdown element is the first \"tab\" and always exists in the DOM, even when hidden.\n const firstTabRect = tabsetEl\n .querySelector('.sky-tabset-dropdown')\n ?.getBoundingClientRect();\n\n // Safety check\n /* istanbul ignore next */\n if (!firstTabRect) {\n return 0;\n }\n\n return firstTabRect.left - tabsetRect.left;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { SkyLayoutHostService } from '@skyux/core';\n\nimport { Subject, combineLatest, race } from 'rxjs';\nimport { distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\nimport { TabButtonViewModel } from './tab-button-view-model';\nimport { SkyTabIndex } from './tab-index';\nimport { SkyTabLayoutType } from './tab-layout-type';\nimport { SkyTabComponent } from './tab.component';\nimport { SkyTabsetAdapterService } from './tabset-adapter.service';\nimport { SkyTabsetButtonsDisplayMode } from './tabset-buttons-display-mode';\nimport { SkyTabsetPermalinkService } from './tabset-permalink.service';\nimport { SkyTabsetStyle } from './tabset-style';\nimport { SkyTabsetTabIndexesChange } from './tabset-tab-indexes-change';\nimport { SkyTabsetService } from './tabset.service';\n\n@Component({\n selector: 'sky-tabset',\n styleUrls: ['./tabset.component.scss'],\n templateUrl: './tabset.component.html',\n providers: [\n SkyTabsetAdapterService,\n SkyTabsetPermalinkService,\n SkyTabsetService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class SkyTabsetComponent implements AfterViewInit, OnDestroy {\n /**\n * Activates a tab by its `tabIndex` property.\n */\n @Input()\n public set active(value: SkyTabIndex | undefined) {\n if (\n value === undefined ||\n this.#tabsetService.tabIndexesEqual(value, this.#_active)\n ) {\n return;\n }\n\n this.#_active = value;\n\n if (this.tabs) {\n this.#tabsetService.setActiveTabIndex({ tabIndex: value });\n } else {\n // On init, wait for children tabs to render before broadcasting the active tab index.\n setTimeout(() => {\n if (this.#tabsetService.isValidTabIndex(value)) {\n // On init, yield to the permalink ID, if it exists.\n if (this.#getActiveTabIndexByPermalinkId() === undefined) {\n this.#tabsetService.setActiveTabIndex({ tabIndex: value });\n }\n } else {\n // Activate the first tab if the new tab index is invalid.\n this.#_active = this.#tabsetService.activateFirstTab();\n }\n });\n }\n }\n\n public get active(): SkyTabIndex | undefined {\n return this.#_active;\n }\n\n /**\n * The ARIA label for the tabset. This sets the tabset's `aria-label` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset includes a visible label, use `ariaLabelledBy` instead.\n * For more information about the `aria-label` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-label).\n */\n @Input()\n public ariaLabel: string | undefined;\n\n /**\n * The HTML element ID of the element that labels\n * the tabset. This sets the tabset's `aria-labelledby` attribute to provide a text equivalent for screen readers\n * [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility).\n * If the tabset does not include a visible label, use `ariaLabel` instead.\n * For more information about the `aria-labelledby` attribute, see the [WAI-ARIA definition](https://www.w3.org/TR/wai-aria/#aria-labelledby).\n */\n @Input()\n public ariaLabelledBy: string | undefined;\n\n /**\n * Distinguishes a tabset's unique state in the URL by generating a query parameter\n * that is written as `?<queryParam>-active-tab=<sanitized-tab-heading>`.\n * The query parameter's value is parsed automatically from the selected tab's heading text,\n * but you can supply a custom query parameter value for each tab with its `permalinkValue`.\n * This input only applies when `tabStyle` is `\"tabs\"`\n */\n @Input()\n public set permalinkId(value: string | undefined) {\n if (!value) {\n this.#_permalinkId = '';\n } else {\n const sanitized = this.#permalinkService.urlify(value);\n this.#_permalinkId = `${sanitized}-active-tab`;\n }\n }\n\n public get permalinkId(): string {\n return this.#_permalinkId;\n }\n\n /**\n * The behavior for a series of tabs.\n * @default \"tabs\"\n */\n @Input()\n public set tabStyle(value: SkyTabsetStyle | undefined) {\n this.#_tabStyle = value || 'tabs';\n }\n\n public get tabStyle(): SkyTabsetStyle {\n return this.#_tabStyle;\n }\n\n @HostBinding('attr.data-tab-style') public get dataTabStyle(): string {\n return this.tabStyle;\n }\n\n /**\n * Fires when the active tab changes. This event emits the index of the active tab.\n */\n @Output()\n public activeChange = new EventEmitter<SkyTabIndex>();\n\n /**\n * Fires when users click the button to add a new tab.\n * The new tab button is added to the tab area when you specify a listener for this event.\n * This event only applies when `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public newTab = new EventEmitter<void>();\n\n /**\n * Fires when users click the button to open a tab.\n * The open tab button is added to the tab area when you specify a listener for this event.\n * This event only applies when `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public openTab = new EventEmitter<void>();\n\n /**\n * Fires when any tab's `tabIndex` value changes.\n * This event only applies when `tabStyle` is `\"tabs\"`.\n */\n @Output()\n public tabIndexesChange = new EventEmitter<SkyTabsetTabIndexesChange>();\n\n public set tabDisplayMode(value: SkyTabsetButtonsDisplayMode) {\n this.#_tabDisplayMode = value;\n this.#changeDetector.markForCheck();\n }\n\n public get tabDisplayMode(): SkyTabsetButtonsDisplayMode {\n return this.#_tabDisplayMode;\n }\n\n @ContentChildren(SkyTabComponent)\n public set tabs(value: QueryList<SkyTabComponent> | undefined) {\n this.#_tabs = value;\n this.#tabComponentsChangeUnsubscribe.next();\n\n value?.changes\n .pipe(takeUntil(this.#tabComponentsChangeUnsubscribe))\n .subscribe(() => {\n this.#resetTabComponents();\n });\n }\n\n public get tabs(): QueryList<SkyTabComponent> | undefined {\n return this.#_tabs;\n }\n\n @HostBinding('class')\n public cssClass = 'sky-tabset-layout-none';\n\n public dropdownTriggerButtonText = '';\n\n /**\n * This property is used by the deprecated tabset-nav-button component.\n * @internal\n */\n public lastActiveTabIndex: SkyTabIndex | undefined;\n\n public tabButtons: TabButtonViewModel[] = [];\n\n #ngUnsubscribe = new Subject<void>();\n\n #tabComponentsChangeUnsubscribe = new Subject<void>();\n #tabComponentsStateChangeUnsubscribe = new Subject<void>();\n\n #_active: SkyTabIndex | undefined;\n\n #_permalinkId = '';\n\n #_tabs: QueryList<SkyTabComponent> | undefined;\n\n #_tabDisplayMode: SkyTabsetButtonsDisplayMode = 'tabs';\n\n #_tabStyle: SkyTabsetStyle = 'tabs';\n\n readonly #changeDetector = inject(ChangeDetectorRef);\n readonly #elementRef = inject(ElementRef);\n readonly #adapterService = inject(SkyTabsetAdapterService);\n readonly #permalinkService = inject(SkyTabsetPermalinkService);\n readonly #tabsetService = inject(SkyTabsetService);\n\n #layoutHostSvc = inject(SkyLayoutHostService, { optional: true });\n\n public ngAfterViewInit(): void {\n this.#initTabComponents();\n\n const initialTabIndex = this.#getInitialTabIndex();\n this.#tabsetService.setActiveTabIndex({\n tabIndex: initialTabIndex,\n initial: true,\n });\n\n this.#listenTabButtonsOverflowChange();\n this.#listenLocationPopStateChange();\n\n // If the currently active tab is getting unregistered, activate the next one.\n this.#tabsetService.activeTabUnregistered\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((tab) => {\n // Wait for the new tabs to render before activating.\n setTimeout(() => {\n this.#tabsetService.activateNearestTab(tab.arrayIndex);\n });\n });\n\n this.#tabsetService.activeTabLayout\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((layout) => {\n this.#updateLayout(layout);\n });\n\n // Let the tabset render the initial active index before listening for changes.\n setTimeout(() => {\n this.#listenTabComponentsStateChange();\n this.#listenActiveIndexChange();\n this.#permalinkService.init();\n });\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n this.#tabComponentsChangeUnsubscribe.next();\n this.#tabComponentsChangeUnsubscribe.complete();\n this.#unsubscribeTabComponentsStateChange();\n if (this.permalinkId) {\n this.#permalinkService.clearParam(this.permalinkId);\n }\n }\n\n public onWindowResize(): void {\n this.#adapterService.detectOverflow();\n }\n\n public onTabCloseClick(tabButton: TabButtonViewModel): void {\n const tabComponent = this.tabs?.find((tab) =>\n this.#tabsetService.tabIndexesEqual(\n tab.tabIndexValue,\n tabButton.tabIndex,\n ),\n );\n\n tabComponent?.close.emit();\n }\n\n public onTabButtonClick(tabButton: TabButtonViewModel): void {\n this.#tabsetService.setActiveTabIndex({ tabIndex: tabButton.tabIndex });\n }\n\n public onNewTabClick(): void {\n this.newTab.emit();\n }\n\n public onOpenTabClick(): void {\n this.openTab.emit();\n }\n\n public onRightKeyDown(): void {\n this.#tabsetService.focusNextTabBtn(this.tabButtons);\n }\n\n public onLeftKeyDown(): void {\n this.#tabsetService.focusPrevTabBtn(this.tabButtons);\n }\n\n public onHomeKeyDown(): void {\n this.#tabsetService.focusFirstOrNearestTabBtn(this.tabButtons);\n }\n\n public onEndKeyDown(): void {\n this.#tabsetService.focusLastOrNearestTabBtn(this.tabButtons);\n }\n\n /**\n * Sets the initial active tab index based on the following criteria.\n * 1. Does the URL include a query param that reflects this tabset's active tab?\n * 2. Does one of the tab components have their `active` property set to `true`?\n * 3. Is the tabset component's `active` property set to a specific tab index?\n */\n #getInitialTabIndex(): SkyTabIndex | undefined {\n let activeIndex: SkyTabIndex | undefined =\n this.#getActiveTabIndexByPermalinkId();\n if (activeIndex === undefined) {\n activeIndex = this.#getActiveTabComponent()?.tabIndexValue;\n if (activeIndex === undefined) {\n activeIndex = this.active;\n }\n }\n\n return activeIndex;\n }\n\n #listenActiveIndexChange(): void {\n this.#tabsetService.activeTabChange\n .pipe(distinctUntilChanged(), takeUntil(this.#ngUnsubscribe))\n .subscribe((tabChange) => {\n this.#updateTabsetComponent(\n tabChange.tabIndex,\n false,\n tabChange.initial,\n );\n const activeTab = this.#getActiveTabComponent();\n\n this.#updateLayout(activeTab?.layout);\n });\n }\n\n #updateLayout(layout?: SkyTabLayoutType): void {\n if (this.#layoutHostSvc && layout) {\n this.#layoutHostSvc.setHostLayoutForChild({\n layout,\n });\n\n this.cssClass = `sky-tabset-layout-${layout}`;\n }\n }\n\n #listenTabComponentsStateChange(): void {\n if (this.tabs) {\n combineLatest(this.tabs.map((tab) => tab.activeChange))\n .pipe(\n takeUntil(\n race(\n this.#tabComponentsStateChangeUnsubscribe,\n this.#ngUnsubscribe,\n ),\n ),\n )\n .subscribe(() => {\n // Wait for the tab components to render changes before finding the active one.\n setTimeout(() => {\n const tabIndex = this.#getActiveTabComponent()?.tabIndexValue;\n this.#tabsetService.setActiveTabIndex({ tabIndex });\n });\n });\n\n combineLatest(this.tabs.map((tab) => tab.tabIndexChange))\n .pipe(\n takeUntil(\n race(\n this.#tabComponentsStateChangeUnsubscribe,\n this.#ngUnsubscribe,\n ),\n ),\n )\n .subscribe(() => {\n // Don't emit the first change.\n if (this.lastActiveTabIndex !== undefined) {\n // Wait for the tab components to render changes before updating the view.\n setTimeout(() => {\n this.#updateTabsetComponent(\n this.#tabsetService.currentActiveTabIndex,\n true,\n );\n this.#emitTabIndexChange();\n });\n }\n });\n\n combineLatest(this.tabs.map((tab) => tab.stateChange))\n .pipe(\n takeUntil(\n race(\n this.#tabComponentsStateChangeUnsubscribe,\n this.#ngUnsubscribe,\n ),\n ),\n )\n .subscribe(() => {\n // Wait for the tab components to render changes before finding the active one.\n setTimeout(() => {\n this.#updateTabsetComponent(\n this.#tabsetService.currentActiveTabIndex,\n true,\n );\n });\n });\n }\n }\n\n #initTabComponents(): void {\n this.tabs?.forEach((tab) => tab.init());\n }\n\n #resetTabComponents(): void {\n this.#unsubscribeTabComponentsStateChange();\n this.#tabsetService.unregisterAll();\n\n // If there are no tab components, do a hard reset of the view.\n if (this.tabs?.length === 0) {\n this.#updateTabsetComponent(0, true);\n return;\n }\n\n this.#initTabComponents();\n const activeIndex = this.#getActiveTabComponent()?.tabIndexValue;\n this.#tabsetService.setActiveTabIndex(\n {\n tabIndex: activeIndex,\n },\n {\n emitChange: false,\n },\n );\n this.#listenTabComponentsStateChange();\n }\n\n #emitTabIndexChange(): void {\n this.tabIndexesChange.emit({\n tabs: this.tabs?.map((tab) => ({\n tabHeading: tab.tabHeading,\n tabIndex: tab.tabIndexValue,\n })),\n });\n }\n\n #unsubscribeTabComponentsStateChange(): void {\n this.#tabComponentsStateChangeUnsubscribe.next();\n this.#tabComponentsStateChangeUnsubscribe.complete();\n this.#tabComponentsStateChangeUnsubscribe = new Subject<void>();\n }\n\n #listenTabButtonsOverflowChange(): void {\n this.#adapterService.registerTabset(this.#elementRef);\n this.#adapterService.overflowChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((isOverflowing) => {\n this.tabDisplayMode = isOverflowing ? 'dropdown' : 'tabs';\n this.#changeDetector.markForCheck();\n });\n }\n\n /**\n * Listen for back/forward history button presses to detect query param changes in the URL.\n */\n #listenLocationPopStateChange(): void {\n this.#permalinkService.popStateChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe(() => {\n this.#setActiveTabIndexByPermalinkId();\n });\n }\n\n #setActiveTabIndexByPermalinkId(): void {\n const activeIndex = this.#getActiveTabIndexByPermalinkId();\n this.#tabsetService.setActiveTabIndex({\n tabIndex: activeIndex,\n });\n }\n\n #getActiveTabIndexByPermalinkId(): SkyTabIndex | undefined {\n if (this.permalinkId) {\n const paramValue = this.#permalinkService.getParam(this.permalinkId);\n if (paramValue) {\n return this.tabs?.find(\n (tab) => tab.permalinkValueOrDefault === paramValue,\n )?.tabIndexValue;\n }\n return undefined;\n }\n return undefined;\n }\n\n #getActiveTabComponent(): SkyTabComponent | undefined {\n return this.tabs\n ?.toArray()\n .reverse()\n .find((tab) => tab.active === true);\n }\n\n #createTabButtons(\n activeIndex: SkyTabIndex | undefined,\n ): TabButtonViewModel[] {\n // Safety check\n /* istanbul ignore next */\n if (!this.tabs) {\n return [];\n }\n\n return this.tabs.map((tab, index) => ({\n active: this.#tabsetService.tabIndexesEqual(\n tab.tabIndexValue,\n activeIndex,\n ),\n closeable: tab.isCloseable(),\n ariaControls: tab.tabPanelId,\n disabled: tab.disabled,\n buttonHref: tab.disabled\n ? null\n : this.#permalinkService.getParamHref(\n this.permalinkId,\n tab.permalinkValueOrDefault,\n ),\n buttonId: tab.tabButtonId,\n buttonTextCount: tab.tabHeaderCount,\n buttonText: tab.tabHeading,\n tabIndex: tab.tabIndexValue,\n tabNumber: index + 1,\n totalTabsCount: this.tabs!.length,\n }));\n }\n\n #updateTabButtons(activeIndex: SkyTabIndex | undefined): void {\n this.tabButtons.forEach((button) => {\n button.active = this.#tabsetService.tabIndexesEqual(\n button.tabIndex,\n activeIndex,\n );\n });\n }\n\n /**\n * Updates the UI and state of the tabset component after the tab index or\n * tab components have changed.\n * @param activeIndex The currently active tab index.\n * @param regenerateTabButtons Indicates if tab button view models should be regenerated.\n * Setting this value to `false` will simply update the existing tab buttons. Setting this value\n * to `true` is only necessary when the underlying tab components have changed and the tab\n * buttons must reflect those changes.\n * @param initial Indicates whether tabs are being updated during initialization of the tabset\n * component. This is passed through to the permalink service where it prevents adding an extra\n * item to browser history when the URL is updated with the selected tab's permalink value.\n */\n #updateTabsetComponent(\n activeIndex: SkyTabIndex | undefined,\n regenerateTabButtons: boolean,\n initial?: boolean,\n ): void {\n // Activate/deactivate tab components.\n this.tabs?.forEach((tab) => {\n if (this.#tabsetService.tabIndexesEqual(tab.tabIndexValue, activeIndex)) {\n tab.activate();\n } else {\n tab.deactivate();\n }\n });\n\n // Update the tab button models.\n if (regenerateTabButtons || !this.tabButtons.length) {\n this.tabButtons = this.#createTabButtons(activeIndex);\n } else {\n this.#updateTabButtons(activeIndex);\n }\n\n // Update the dropdown trigger button text.\n this.dropdownTriggerButtonText =\n this.tabButtons.find((b) => {\n return this.#tabsetService.tabIndexesEqual(b.tabIndex, activeIndex);\n })?.buttonText ?? '';\n\n // Set the query params based on active tab.\n if (this.permalinkId) {\n const activeTabComponent = this.tabs?.find((tab) => {\n return this.#tabsetService.tabIndexesEqual(\n tab.tabIndexValue,\n activeIndex,\n );\n });\n if (activeTabComponent) {\n this.#permalinkService.setParam(\n this.permalinkId,\n activeTabComponent.permalinkValueOrDefault,\n initial,\n );\n }\n }\n\n // Wait for tab button view models to render before gauging dimensions.\n setTimeout(() => {\n this.#adapterService.detectOverflow();\n });\n\n this.#changeDetector.markForCheck();\n\n // Emit the new active index value to consumers.\n if (this.lastActiveTabIndex !== activeIndex) {\n this.lastActiveTabIndex = activeIndex;\n this.activeChange.emit(activeIndex);\n }\n }\n}\n","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<div\n class=\"sky-tabset\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngClass]=\"\n 'sky-tabset-mode-' + tabDisplayMode + ' sky-tabset-style-' + tabStyle\n \"\n (window:resize)=\"onWindowResize()\"\n (keydown.arrowright)=\"onRightKeyDown()\"\n (keydown.arrowleft)=\"onLeftKeyDown()\"\n (keydown.home)=\"onHomeKeyDown()\"\n (keydown.end)=\"onEndKeyDown()\"\n>\n <span class=\"sky-tabset-dropdown\">\n @if (tabDisplayMode === 'dropdown') {\n <sky-dropdown buttonType=\"tab\">\n <sky-dropdown-button>\n {{ dropdownTriggerButtonText }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n @for (tabButton of tabButtons; track tabButton.buttonId) {\n <sky-dropdown-item class=\"sky-tab-dropdown-menu-item\">\n <div\n class=\"sky-tab-dropdown-item\"\n [ngClass]=\"{\n 'sky-tab-dropdown-item-selected': tabButton.active\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n tabButtonTemplate;\n context: {\n $implicit: tabButton\n }\n \"\n />\n </div>\n </sky-dropdown-item>\n }\n </sky-dropdown-menu>\n </sky-dropdown>\n }\n </span>\n <span class=\"sky-tabset-tabs\">\n @for (tabButton of tabButtons; track tabButton.buttonId) {\n <ng-container\n *ngTemplateOutlet=\"\n tabButtonTemplate;\n context: {\n $implicit: tabButton\n }\n \"\n />\n }\n </span>\n <span class=\"sky-tabset-btns\">\n @if (newTab.observers.length > 0) {\n <button\n class=\"sky-btn sky-btn-icon sky-tabset-btn-new\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_add' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"onNewTabClick()\"\n >\n <sky-icon iconName=\"add\" />\n </button>\n }\n @if (openTab.observers.length > 0) {\n <button\n class=\"sky-btn sky-btn-icon sky-tabset-btn-open\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_open' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-theme-margin-right-xs': 'default'\n }\"\n (click)=\"onOpenTabClick()\"\n >\n <sky-icon iconName=\"folder-open\" />\n </button>\n }\n </span>\n</div>\n<ng-content />\n\n<ng-template #tabButtonTemplate let-tabButton>\n <sky-tab-button\n [active]=\"tabButton.active\"\n [ariaControls]=\"tabButton.ariaControls\"\n [buttonHref]=\"tabButton.buttonHref\"\n [buttonId]=\"tabButton.buttonId\"\n [buttonText]=\"tabButton.buttonText\"\n [buttonTextCount]=\"tabButton.buttonTextCount\"\n [closeable]=\"tabButton.closeable\"\n [disabled]=\"tabButton.disabled\"\n [tabIndex]=\"tabButton.tabIndex\"\n [tabStyle]=\"tabStyle\"\n [tabNumber]=\"tabButton.tabNumber\"\n [totalTabsCount]=\"tabButton.totalTabsCount\"\n (buttonClick)=\"onTabButtonClick(tabButton)\"\n (closeClick)=\"onTabCloseClick(tabButton)\"\n />\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SkyIdModule, SkyResponsiveHostDirective } from '@skyux/core';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyDropdownModule } from '@skyux/popovers';\nimport { SkyThemeModule } from '@skyux/theme';\n\nimport { SkyTabsResourcesModule } from '../shared/sky-tabs-resources.module';\n\nimport { SkyTabButtonComponent } from './tab-button.component';\nimport { SkyTabComponent } from './tab.component';\nimport { SkyTabsetNavButtonDisabledPipe } from './tabset-nav-button-disabled.pipe';\nimport { SkyTabsetNavButtonComponent } from './tabset-nav-button.component';\nimport { SkyTabsetComponent } from './tabset.component';\n\n@NgModule({\n declarations: [\n SkyTabButtonComponent,\n SkyTabComponent,\n SkyTabsetComponent,\n SkyTabsetNavButtonComponent,\n SkyTabsetNavButtonDisabledPipe,\n ],\n imports: [\n CommonModule,\n SkyResponsiveHostDirective,\n SkyDropdownModule,\n SkyIconModule,\n SkyIdModule,\n SkyTabsResourcesModule,\n SkyThemeModule,\n ],\n exports: [SkyTabComponent, SkyTabsetComponent, SkyTabsetNavButtonComponent],\n})\nexport class SkyTabsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextId","i2","i3","DEFAULT_TAB_WIDTH","i1.SkyVerticalTabComponent","i4","i3.SkyTabsetNavButtonDisabledPipe","i5.SkyTabButtonComponent","i6"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux/tabs",
3
- "version": "14.19.0",
3
+ "version": "14.20.0",
4
4
  "author": "Blackbaud, Inc.",
5
5
  "keywords": [
6
6
  "blackbaud",
@@ -21,14 +21,14 @@
21
21
  "@angular/core": "^21.2.0",
22
22
  "@angular/platform-browser": "^21.2.0",
23
23
  "@angular/router": "^21.2.0",
24
- "@skyux-sdk/testing": "14.19.0",
25
- "@skyux/core": "14.19.0",
26
- "@skyux/forms": "14.19.0",
27
- "@skyux/i18n": "14.19.0",
28
- "@skyux/icon": "14.19.0",
29
- "@skyux/indicators": "14.19.0",
30
- "@skyux/popovers": "14.19.0",
31
- "@skyux/theme": "14.19.0"
24
+ "@skyux-sdk/testing": "14.20.0",
25
+ "@skyux/core": "14.20.0",
26
+ "@skyux/forms": "14.20.0",
27
+ "@skyux/i18n": "14.20.0",
28
+ "@skyux/icon": "14.20.0",
29
+ "@skyux/indicators": "14.20.0",
30
+ "@skyux/popovers": "14.20.0",
31
+ "@skyux/theme": "14.20.0"
32
32
  },
33
33
  "dependencies": {
34
34
  "tslib": "^2.8.1"