{"version":3,"file":"usitsdasdesign-dds-ng-vertical-tabs.mjs","sources":["../../src/app/dds/vertical-tabs/vertical-tabs/constants.ts","../../src/app/dds/vertical-tabs/vertical-tabs/vertical-tabs.component.ts","../../src/app/dds/vertical-tabs/vertical-tabs/vertical-tabs.component.html","../../src/app/dds/vertical-tabs/vertical-tab/vertical-tab.component.ts","../../src/app/dds/vertical-tabs/vertical-tab/vertical-tab.component.html","../../src/app/dds/vertical-tabs/vertical-tabs.module.ts","../../src/app/dds/vertical-tabs/usitsdasdesign-dds-ng-vertical-tabs.ts"],"sourcesContent":["import { ThemeClassesMap, ThemeMapEnum } from '@usitsdasdesign/dds-ng/core/theme';\nimport { Size, Themes, TabThemeType } from '@usitsdasdesign/dds-ng/shared';\n\nexport const themeClassesMap: ThemeClassesMap = {\n  [ThemeMapEnum.Themes]: {\n    [Themes.green]: 'dds-vertical-tabs__header_green',\n    [Themes.blue]: 'dds-vertical-tabs__header_blue',\n    [Themes.dark]: 'dds-vertical-tabs__header_dark',\n  },\n  [ThemeMapEnum.Size]: {\n    [Size.md]: 'dds-vertical-tabs__header_md',\n  },\n  [ThemeMapEnum.ThemesType]: {\n    [TabThemeType.fill]: 'dds-vertical-tabs__header_filled',\n  },\n};\n\nexport const ARIA_LABEL_DEFAULT = 'Vertical tabs';\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { DestroyCtor, DestroyMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { ThemeClassesMap, ThemeModule } from '@usitsdasdesign/dds-ng/core/theme';\nimport { AdditionalClass, KeyCodes, Size, TabThemeType, Themes } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { ReplaySubject, asyncScheduler } from 'rxjs';\nimport { observeOn, takeUntil } from 'rxjs/operators';\nimport { VerticalTabComponent } from '../vertical-tab/vertical-tab.component';\nimport { ARIA_LABEL_DEFAULT, themeClassesMap } from './constants';\n\nconst VerticalTabsBase: DestroyCtor = DestroyMixin();\n\n@Component({\n  selector: 'dds-vertical-tabs',\n  templateUrl: './vertical-tabs.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, FocusHandlerModule, ThemeModule],\n})\nexport class VerticalTabsComponent extends VerticalTabsBase implements OnInit, AfterContentInit, AfterViewInit, OnChanges, OnDestroy {\n  // Host binding for the disabled class.\n  @HostBinding(`class.${AdditionalClass.disabled}`) @Input() disabled: boolean | undefined;\n\n  // Aria label for accessibility.\n  @Input() ariaLabel: string | undefined = ARIA_LABEL_DEFAULT;\n\n  // Size of the tabs.\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n\n  // Theme of the tabs.\n  @Input() theme: Themes | string | undefined = this.ddsConfig.getConfig().theme;\n\n  // Theme type of the tabs.\n  @Input() themeType: TabThemeType | string | undefined = TabThemeType.border;\n\n  // Custom CSS class for the tabs.\n  @Input() customClass: string | undefined;\n\n  // Index of the active tab.\n  @Input() activeIndex: number | undefined = 0;\n\n  // Indicates if the tabs are in inverse mode.\n  @Input() isInverse: boolean | undefined;\n\n  // Reference to the tabs header element.\n  @ViewChild('tabsHeader') tabsHeader: ElementRef<HTMLElement>;\n\n  // Reference to the active line element.\n  @ViewChild('activeLine') activeLine: ElementRef<HTMLElement>;\n\n  // Query list of tab title elements.\n  @ViewChildren('tabTitle') tabTitle: QueryList<ElementRef>;\n\n  // Query list of tab header item elements.\n  @ViewChildren('tabHeaderItem') tabHeaderItems: QueryList<ElementRef<HTMLButtonElement>>;\n\n  // Theme configuration map.\n  public themeConfig: ThemeClassesMap = themeClassesMap;\n\n  // Indicates if the component has children.\n  public hasChildren: boolean;\n\n  // Indicates if the size is small.\n  public isSmSize: boolean;\n\n  // Indicates if the active line is disabled.\n  public disabledActiveLine: boolean;\n\n  // List of tab items.\n  public tabItems: VerticalTabComponent[] = [];\n\n  // Indicates if the first element is focused.\n  public isFocusedFirstEl: boolean;\n\n  // Scheduler for tasks.\n  private readonly tasksScheduler = new ReplaySubject<() => void>();\n\n  // Indicates if a tab element is focused.\n  private isFocusedTabEl: boolean;\n\n  // Indicates if the focus is due to mouse interaction.\n  private isMouseFocus: boolean;\n\n  constructor(public cdr: ChangeDetectorRef, private renderer: Renderer2, private ddsConfig: DdsConfigService) {\n    super();\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.size) this.checkSize(changes.size);\n    if (changes.activeIndex) this.changeActiveTab(changes.activeIndex.currentValue);\n    if (changes.disabled) this.setDisabledActiveLine(this.activeIndex);\n  }\n\n  public ngOnInit(): void {\n    this.checkSize(this.size);\n  }\n\n  public ngAfterContentInit(): void {\n    this.initialFunc();\n  }\n\n  public ngAfterViewInit(): void {\n    this.changeActiveTab(this.activeIndex);\n    this.setActiveLineStyle(this.activeIndex);\n\n    this.tasksScheduler.pipe(observeOn(asyncScheduler), takeUntil(this.destroy)).subscribe((task) => {\n      task();\n    });\n  }\n\n  // Adds a tab item to the list of tab items.\n  public addTabItem(tabItem: VerticalTabComponent): void {\n    this.tabItems.push(tabItem);\n  }\n\n  // Removes a tab item from the list of tab items.\n  public removeTabItem(tabItem: VerticalTabComponent): void {\n    const index = this.tabItems.indexOf(tabItem);\n\n    if (index !== -1) {\n      this.tabItems.splice(index, 1);\n    }\n  }\n\n  // Selects a tab.\n  public selectTab(tab: VerticalTabComponent, fromInput = false): void {\n    this.tasksScheduler.next(() => {\n      this.setActiveTab(tab);\n      this.setActiveLineStyle();\n      tab.isOpened.emit();\n\n      if (!fromInput) {\n        tab.tabChanged.emit(tab);\n      }\n    });\n  }\n\n  // Sets the active tab.\n  public setActiveTab(tab?: VerticalTabComponent): void {\n    this.tabItems.forEach((tabItem, tabIndex) => {\n      tabItem.isActive = tabItem === tab;\n\n      if (tabItem.isActive) {\n        this.activeIndex = tabIndex;\n      }\n    });\n  }\n\n  // Sets the style of the active line.\n  public setActiveLineStyle(index?: number): void {\n    if (this.activeIndex == null || !this.tabTitle?.length) {\n      return;\n    }\n\n    this.cdr.detectChanges();\n    const tabTitles = this.tabTitle.toArray();\n    const activeIndex = tabTitles[index] ? index : this.activeIndex;\n    const tabItemHeight = tabTitles[activeIndex].nativeElement.getBoundingClientRect().height;\n\n    this.activeLine.nativeElement.style.height = tabItemHeight + 'px';\n    this.setActiveLinePosition(activeIndex);\n    this.setDisabledActiveLine(activeIndex);\n  }\n\n  // Initializes the component.\n  public initialFunc() {\n    this.setActiveTab();\n    this.checkActiveTab();\n  }\n\n  // Sets the disabled state of the active line.\n  public setDisabledActiveLine(activeIndex: number): void {\n    this.disabledActiveLine = this.disabled || this.tabItems[activeIndex]?.disabled;\n    this.cdr.detectChanges();\n  }\n\n  // Handles focus on the header.\n  public headerFocusHandler(): void {\n    if (!this.isFocusedFirstEl && !this.isMouseFocus) {\n      this.setFocus(this.tabHeaderItems.toArray()[0].nativeElement);\n      this.isFocusedFirstEl = true;\n    }\n    this.isMouseFocus = false;\n    this.isFocusedTabEl = false;\n  }\n\n  // Handles mouse interaction on the header.\n  public headerMouseHandler(): void {\n    this.isMouseFocus = true;\n  }\n\n  // Handles blur event on the button.\n  public btnBlurHandler(): void {\n    if (!this.isFocusedTabEl) {\n      this.focusReset();\n    }\n\n    this.isFocusedFirstEl = false;\n    this.isFocusedTabEl = false;\n  }\n\n  // Handles keydown event on the header.\n  public headerKeydownHandler(event: KeyboardEvent): void {\n    const availableItems = this.tabHeaderItems.filter((item) => !item.nativeElement.disabled);\n    const keyCode = event.keyCode;\n    const indexFocusedItem = this.getIndexFocusedItem(availableItems);\n    this.isMouseFocus = false;\n\n    switch (keyCode) {\n      case KeyCodes.TAB:\n        this.focusReset();\n        return;\n\n      case KeyCodes.ARROW_DOWN:\n        const indexNext = indexFocusedItem + 1;\n        event.preventDefault();\n\n        this.focusNextItem(availableItems, indexNext);\n        break;\n\n      case KeyCodes.ARROW_UP:\n        const indexPrev = indexFocusedItem - 1;\n        event.preventDefault();\n        this.focusPrevItem(availableItems, indexPrev);\n        break;\n    }\n  }\n\n  // Resets the focus state.\n  private focusReset(): void {\n    this.tabHeaderItems.forEach((el) => {\n      this.renderer.removeClass(el.nativeElement, AdditionalClass.keyboardFocus);\n    });\n  }\n\n  // Gets the index of the focused item.\n  private getIndexFocusedItem(items: ElementRef<HTMLButtonElement>[]): number {\n    let indexFocusedItem = 0;\n\n    items.forEach((item, index) => {\n      if (item.nativeElement === document.activeElement) {\n        indexFocusedItem = index;\n      }\n    });\n\n    return indexFocusedItem;\n  }\n\n  // Focuses the next item in the list.\n  private focusNextItem(items: ElementRef<HTMLButtonElement>[], elIndex: number): void {\n    if (items[elIndex]) {\n      this.setFocus(items[elIndex].nativeElement);\n    } else {\n      this.setFocus(items[0].nativeElement);\n    }\n  }\n\n  // Focuses the previous item in the list.\n  private focusPrevItem(items: ElementRef<HTMLButtonElement>[], elIndex: number): void {\n    if (items[elIndex]) {\n      this.setFocus(items[elIndex].nativeElement);\n    } else {\n      this.setFocus(items[items.length - 1].nativeElement);\n    }\n  }\n\n  // Sets focus on the specified element.\n  private setFocus(el: HTMLElement): void {\n    if (!(el as HTMLButtonElement).disabled) {\n      this.focusReset();\n      this.renderer.addClass(el, AdditionalClass.keyboardFocus);\n      this.isFocusedTabEl = true;\n      el.focus();\n    }\n  }\n\n  // Changes the active tab.\n  private changeActiveTab(index: number): void {\n    if (this.tabItems[index]) {\n      this.tabItems.forEach((tab) => (tab.isActive = false));\n      this.tabItems[index].isActive = true;\n      this.setActiveLinePosition(index);\n    }\n  }\n\n  // Checks the active tab and sets the first tab as active if none are active.\n  private checkActiveTab(): void {\n    if (this.tabItems && this.tabItems.length) {\n      const activeTab = this.tabItems.filter((item) => item.isActive);\n\n      if (!activeTab.length) {\n        this.tabItems[0].isActive = true;\n      }\n    }\n  }\n\n  // Sets the position of the active line.\n  private setActiveLinePosition(activeIndex: number): void {\n    const activeLineStyle = this.activeLine.nativeElement.style;\n    const titlesHeight = [];\n    let lineHeight = 0;\n\n    this.tabTitle.forEach((titleItem) => {\n      titlesHeight.push(titleItem.nativeElement.getBoundingClientRect().height);\n    });\n\n    for (let i = 0; i < activeIndex; i++) {\n      lineHeight = titlesHeight[i] + lineHeight;\n    }\n\n    activeLineStyle.top = lineHeight + 'px';\n  }\n\n  // Checks the size of the tabs and updates the component state accordingly.\n  private checkSize(size: unknown): void {\n    if (size) {\n      this.isSmSize = this.size === Size.sm;\n      this.cdr.markForCheck();\n    }\n\n    if (size && this.activeLine) {\n      this.setActiveLineStyle(this.activeIndex);\n    }\n  }\n}\n","<div [ngClass]=\"{\n       'dds-vertical-tabs_inverse': isInverse\n     }\"\n     class=\"dds-vertical-tabs {{customClass}}\">\n  <div [ngClass]=\"{\n        'dds-vertical-tabs__header_sm': isSmSize,\n        'dds-vertical-tabs__header_disabled': disabled\n       }\"\n       [size]=\"size\"\n       [themeType]=\"themeType\"\n       [theme]=\"theme\"\n       [ddsTheme]=\"themeConfig\"\n       role=\"tablist\"\n       [attr.aria-label]=\"ariaLabel\"\n       class=\"dds-vertical-tabs__header\"\n       [attr.tabindex]=\"isFocusedFirstEl ? -1 : 0\"\n       (focus)=\"headerFocusHandler()\"\n       (mousedown)=\"headerMouseHandler()\"\n       (keydown)=\"headerKeydownHandler($event)\"\n       #tabsHeader>\n    <span class=\"dds-vertical-tabs__line\"\n          [ngClass]=\"{\n            'dds-vertical-tabs__line_disabled': disabledActiveLine\n          }\"\n          #activeLine></span>\n\n    @for (tab of tabItems; track tab) {\n      <div [ngClass]=\"{\n           'dds-vertical-tabs__item-wrap_active': tab.isActive,\n           'dds-vertical-tabs__item-wrap_disabled': disabled || tab.disabled\n         }\"\n           class=\"dds-vertical-tabs__item-wrap\"\n           #tabTitle>\n        <button [ngClass]=\"{\n                'dds-vertical-tabs__item_active': tab.isActive\n              }\"\n                class=\"dds-vertical-tabs__item\"\n                [disabled]=\"disabled || tab.disabled\"\n                tabindex=\"-1\"\n                role=\"tab\"\n                [attr.aria-selected]=\"tab.isActive\"\n                [attr.aria-disabled]=\"disabled || tab.disabled\"\n                (blur)=\"btnBlurHandler()\"\n                (click)=\"selectTab(tab)\"\n                #tabHeaderItem>\n          <ng-container *ngTemplateOutlet=\"tabHeaderContent; context: { tab: tab }\"></ng-container>\n        </button>\n      </div>\n    }\n\n    <ng-template #tabHeaderContent\n                 let-tab=\"tab\">\n      @if (tab.icon && !isSmSize) {\n        <span class=\"dds-vertical-tabs__item-icon dds-icon {{ tab.icon }}\"></span>\n      }\n\n      @if (tab.label) {\n        <span class=\"dds-vertical-tabs__item-text\">{{ tab.label }} </span>\n      }\n\n      @if (tab.counter) {\n        <span class=\"dds-vertical-tabs__item-counter\">\n          {{ tab.counter }}\n        </span>\n      }\n    </ng-template>\n  </div>\n\n  <div class=\"dds-vertical-tabs__content\"\n       tabindex=\"0\"\n       ddsFocus\n       #tabsContent>\n    <ng-content></ng-content>\n  </div>\n</div>","\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { AdditionalClass } from '@usitsdasdesign/dds-ng/shared';\nimport { VerticalTabsComponent } from '../vertical-tabs/vertical-tabs.component';\n\n@Component({\n  selector: 'dds-vertical-tab',\n  templateUrl: './vertical-tab.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [],\n})\nexport class VerticalTabComponent implements OnInit, OnChanges, OnDestroy {\n  // Bind the disabled class if the disabled input is true\n  @HostBinding(`class.${AdditionalClass.disabled}`) @Input() disabled: boolean | undefined;\n\n  // Input properties for the tab component\n  @Input() label: string | undefined;\n  @Input() icon: string | undefined;\n  @Input() customClass: string | undefined;\n  @Input() counter: number | undefined;\n\n  // Input property to set the active state of the tab\n  @Input()\n  set isActive(value: boolean | undefined) {\n    this.active = value;\n    this.cdr.detectChanges();\n  }\n  get isActive(): boolean | undefined {\n    return this.active;\n  }\n\n  // Output events to notify when the tab is changed or opened\n  @Output() tabChanged = new EventEmitter<VerticalTabComponent>();\n  @Output() isOpened = new EventEmitter<void>();\n\n  // Public properties to track if the tab is a child tab and its active state\n  public childTab: boolean;\n  public active: boolean;\n\n  constructor(public cdr: ChangeDetectorRef, public tabs: VerticalTabsComponent) { }\n\n  // Lifecycle hook that is called after data-bound properties are initialized\n  public ngOnInit(): void {\n    this.tabs.addTabItem(this);\n  }\n\n  // Lifecycle hook that is called when any data-bound property of a directive changes\n  public ngOnChanges(change: SimpleChanges): void {\n    if (change.isActive && change.isActive.currentValue) {\n      this.tabs.selectTab(this, true);\n      this.tabs.setActiveLineStyle();\n    }\n    if (change.disabled) {\n      this.tabs.setDisabledActiveLine(this.tabs.activeIndex);\n    }\n\n    this.tabs.cdr.markForCheck();\n  }\n\n  // Lifecycle hook that is called when the directive is destroyed\n  public ngOnDestroy(): void {\n    this.tabs.removeTabItem(this);\n  }\n}\n","@if (isActive) {\n  <div role=\"tabpanel\"\n       class=\"dds-vertical-tab__content-item {{customClass}}\">\n    <ng-content></ng-content>\n  </div>\n}","import { NgModule } from '@angular/core';\nimport { VerticalTabComponent } from './vertical-tab/vertical-tab.component';\nimport { VerticalTabsComponent } from './vertical-tabs/vertical-tabs.component';\n\n@NgModule({\n  declarations: [],\n  imports: [VerticalTabComponent, VerticalTabsComponent],\n  exports: [VerticalTabComponent, VerticalTabsComponent],\n})\nexport class VerticalTabsModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.VerticalTabsComponent"],"mappings":"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"}