{"version":3,"file":"tableau-ui-angular-tab-group.mjs","sources":["../../../projects/component-library/tab-group/src/tab.component.ts","../../../projects/component-library/tab-group/src/tab-group.component.ts","../../../projects/component-library/tab-group/src/tab-group.component.html","../../../projects/component-library/tab-group/src/tableau-ui-tab-group.module.ts","../../../projects/component-library/tab-group/src/tableau-ui-angular-tab-group.ts"],"sourcesContent":["import type { TemplateRef } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, input, output, viewChild } from '@angular/core';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'tab',\n  standalone: false,\n  template: `\n    <ng-template #headerTemplate>\n      <ng-content select=\"[tab-header]\" />\n    </ng-template>\n    <ng-template #contentTemplate>\n      <ng-content />\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TabComponent {\n  readonly $headerTemplate = viewChild.required<TemplateRef<unknown>>('headerTemplate');\n  readonly $contentTemplate = viewChild.required<TemplateRef<unknown>>('contentTemplate');\n\n  readonly $disabled = input<boolean>(false, {\n    alias: 'disabled',\n  });\n\n  /**\n   * Optional key if we want to select this tab with a key instead of index.\n   */\n  readonly $key = input<string | undefined>(undefined, {\n    alias: 'key',\n  });\n\n  readonly afterActivate = output();\n}\n","import type { Signal, ElementRef, AfterViewInit } from '@angular/core';\nimport { Component, contentChildren, signal, computed, ChangeDetectionStrategy, input, viewChildren, output } from '@angular/core';\nimport { TabComponent } from './tab.component';\n\n@Component({\n  selector: 'tab-group',\n  standalone: false,\n  templateUrl: './tab-group.component.html',\n  styleUrl: './tab-group.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {},\n})\nexport class TabGroupComponent implements AfterViewInit {\n  /**\n   * Padding for the tab header, can be adjusted to fit design requirements.\n   * @default '0.25rem 1.5rem'\n   */\n  readonly $headerPadding = input<string>('0.25rem 1.5rem', {\n    alias: 'headerPadding',\n  });\n\n  /**\n   * Size of the scroll arrows icon, can be adjusted to fit design requirements.\n   * @default '1.5rem'\n   */\n  readonly $scrollArrowsIconSize = input<string>('1.5rem', {\n    alias: 'scrollArrowsIconSize',\n  });\n  /**\n   * Whether to automatically select the first non-disabled tab when the component is initialized.\n   * @default true\n   */\n  readonly $autoSelectFirstTab = input<boolean>(true, {\n    alias: 'autoSelectFirstTab',\n  });\n\n  protected readonly $tabs = contentChildren<TabComponent>(TabComponent);\n  protected readonly $tabElements = viewChildren<ElementRef<HTMLDivElement>>('tab');\n  // Signals to manage the selected index\n  private readonly $_selectedIndex = signal(-1);\n\n  get $selectedIndex(): Signal<number> {\n    return this.$_selectedIndex;\n  }\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  readonly $selectedTab: Signal<TabComponent | null> = computed(() => this.$tabs()[this.$selectedIndex()] ?? null);\n\n  readonly tabSelected = output<{ index: number; key: string | undefined; tab: TabComponent }>();\n  selectTabByIndex(index: number) {\n    const tabs = this.$tabs();\n\n    const tab = tabs[index];\n    if (tab.$disabled()) {\n      return;\n    }\n    this.$_selectedIndex.set(index);\n    const tabElement = this.$tabElements()[index];\n    tabElement.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    this.tabSelected.emit({ index, key: tab.$key(), tab });\n    window.requestAnimationFrame(() => {\n      tab.afterActivate.emit();\n    });\n  }\n  selectTabByKey(key: string) {\n    const tabs = this.$tabs();\n    const index = tabs.findIndex(tab => tab.$key() === key);\n    if (index !== -1) {\n      this.selectTabByIndex(index);\n    }\n  }\n\n  ngAfterViewInit() {\n    // Ensure the first tab is selected by default if available\n    if (this.$autoSelectFirstTab()) {\n      const firstNonDisabledTabIndex = this.$tabs().findIndex(tab => !tab.$disabled());\n      if (firstNonDisabledTabIndex !== -1) {\n        this.selectTabByIndex(firstNonDisabledTabIndex);\n      }\n    }\n  }\n\n  onkeydown(index: number, e: KeyboardEvent) {\n    switch (e.key) {\n      case 'Enter':\n      case ' ':\n        this.selectTabByIndex(index);\n        e.preventDefault();\n        break;\n      default:\n        return;\n    }\n  }\n}\n","<tab-arrow-scroll scrollType=\"arrow\" scrollDirection=\"horizontal\" buttonsCssColor=\"var(--twc-color-text-light)\" [iconParams]=\"{ fontSize: $scrollArrowsIconSize() }\">\n  <div class=\"tab-headers-container\">\n    <div class=\"tab-headers\">\n      @for (tab of $tabs(); let i = $index; track i) {\n        <div\n          #tab\n          class=\"tab\"\n          [class.active]=\"$selectedIndex() === i\"\n          [class.disabled]=\"tab.$disabled()\"\n          [tabindex]=\"tab.$disabled() ? -1 : 0\"\n          [style.padding]=\"$headerPadding()\"\n          (click)=\"selectTabByIndex(i)\"\n          (keydown)=\"onkeydown(i, $event)\"\n        >\n          <div class=\"tab-header\">\n            <ng-container *ngTemplateOutlet=\"tab.$headerTemplate()\" />\n          </div>\n        </div>\n      }\n    </div>\n  </div>\n</tab-arrow-scroll>\n<div class=\"tab-headers-underline\"></div>\n@for (tab of $tabs(); let i = $index; track i) {\n  <div class=\"tab-content\" [style.display]=\"$selectedIndex() === i ? 'block' : 'none'\">\n    <ng-container *ngTemplateOutlet=\"tab.$contentTemplate()\" />\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TabComponent } from './tab.component';\nimport { TabGroupComponent } from './tab-group.component';\nimport { TableauUiArrowScrollModule } from 'tableau-ui-angular/arrow-scroll';\nimport { TableauUiIconModule } from 'tableau-ui-angular/icon';\n\n@NgModule({\n  imports: [CommonModule, TableauUiArrowScrollModule, TableauUiIconModule],\n  declarations: [TabComponent, TabGroupComponent],\n  exports: [TabComponent, TabGroupComponent],\n})\nexport class TableauUiTabgroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}