{"version":3,"file":"tableau-ui-angular-button-toggle.mjs","sources":["../../../projects/component-library/button-toggle/src/button-toggle.component.ts","../../../projects/component-library/button-toggle/src/button-toggle.component.html","../../../projects/component-library/button-toggle/src/tableau-ui-button-toggle.module.ts","../../../projects/component-library/button-toggle/src/tableau-ui-angular-button-toggle.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, contentChildren, effect, HostListener, input, model, untracked } from '@angular/core';\nimport type { IOptionLineContext } from 'tableau-ui-angular/common';\nimport { OptionComponent } from 'tableau-ui-angular/common';\nimport type { Primitive } from 'tableau-ui-angular/types';\n\n@Component({\n  selector: 'tab-button-toggle',\n  standalone: false,\n  templateUrl: './button-toggle.component.html',\n  styleUrl: './button-toggle.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class.disabled]': '$disabled()',\n    '[attr.disabled]': '$disabled() ? true : null',\n    '[tabindex]': '$disabled() ? -1: 0',\n  },\n})\nexport class ButtonToggleComponent<T extends Primitive> {\n  /**\n   * Disables the button toggle component.\n   * This will prevent any interaction with the component\n   * @default false\n   */\n  readonly $disabled = input(false, {\n    alias: 'disabled',\n  });\n  /**\n   * The value of the button toggle component.\n   * This is the value that will be emitted when an option is selected.\n   * If no value is selected, it will be undefined.\n   * @default undefined\n   */\n  readonly $selectedValue = model<T | undefined>(undefined, {\n    alias: 'selectedValue',\n  });\n\n  protected readonly $options = contentChildren(OptionComponent<T>);\n\n  readonly selectedValueChange = effect(() => {\n    const val = this.$selectedValue();\n    const option = untracked(() => this.$options()).find(opt => opt.$value() === val);\n    if (!option || this.$disabled() || option.$disabled()) {\n      this.$selectedValue.set(undefined);\n    }\n  });\n\n  protected readonly $optionRenderContext = computed<IOptionLineContext>(() => {\n    return {\n      renderIcon: true,\n      renderText: true,\n      renderAsDisabled: this.$disabled(),\n    };\n  });\n\n  optionClicked(option: OptionComponent<T>): void {\n    if (this.$disabled() || option.$disabled()) {\n      return;\n    }\n    this.$selectedValue.set(option.$value());\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent): void {\n    if (event.key === 'ArrowLeft') {\n      const curIndex = this.$options().findIndex(opt => opt.$value() === this.$selectedValue());\n      if (curIndex === -1) {\n        // find the last enabled option\n        const lastEnabledOption = this.$options()\n          .slice()\n          .reverse()\n          .find(opt => !opt.$disabled());\n        if (lastEnabledOption) {\n          this.$selectedValue.set(lastEnabledOption.$value());\n        }\n      } else {\n        // find the previous enabled option\n        const prevEnabledOption = this.$options()\n          .slice(0, curIndex)\n          .reverse()\n          .find(opt => !opt.$disabled());\n        if (prevEnabledOption) {\n          this.$selectedValue.set(prevEnabledOption.$value());\n        } else {\n          const prevEnabledFromEndOption = this.$options()\n            .slice(curIndex + 1)\n            .reverse()\n            .find(opt => !opt.$disabled());\n          if (prevEnabledFromEndOption) {\n            this.$selectedValue.set(prevEnabledFromEndOption.$value());\n          }\n        }\n      }\n    } else if (event.key === 'ArrowRight') {\n      const curIndex = this.$options().findIndex(opt => opt.$value() === this.$selectedValue());\n      if (curIndex === -1) {\n        // find the first enabled option\n        const firstEnabledOption = this.$options().find(opt => !opt.$disabled());\n        if (firstEnabledOption) {\n          this.$selectedValue.set(firstEnabledOption.$value());\n        }\n      } else {\n        // find the next enabled option\n        const nextEnabledOption = this.$options()\n          .slice(curIndex + 1)\n          .find(opt => !opt.$disabled());\n        if (nextEnabledOption) {\n          this.$selectedValue.set(nextEnabledOption.$value());\n        } else {\n          const nextEnabledFromStartOption = this.$options()\n            .slice(0, curIndex)\n            .find(opt => !opt.$disabled());\n          if (nextEnabledFromStartOption) {\n            this.$selectedValue.set(nextEnabledFromStartOption.$value());\n          }\n        }\n      }\n    }\n  }\n}\n","@for (option of $options(); track option.$value()) {\n  <!--eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus-->\n  <div\n    class=\"option\"\n    [class.disabled]=\"$disabled() || option.$disabled()\"\n    [tooltip]=\"option.$hint() ? tooltipTemplate : undefined\"\n    [tooltipContext]=\"{\n      hint: option.$hint() ? option.$hint() : undefined,\n    }\"\n    [class.selected]=\"$selectedValue() === option.$value()\"\n    (click)=\"optionClicked(option)\"\n  >\n    <ng-container [ngTemplateOutlet]=\"option.$template()\" [ngTemplateOutletContext]=\"$optionRenderContext()\" />\n  </div>\n\n  <ng-template #tooltipTemplate let-hint=\"hint\">\n    @if (hint) {\n      <tab-hint class=\"hint\">{{ hint }}</tab-hint>\n    }\n  </ng-template>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TableauUiCommonModule } from 'tableau-ui-angular/common';\nimport { TableauUiTooltipModule } from 'tableau-ui-angular/tooltip';\nimport { ButtonToggleComponent } from './button-toggle.component';\n\n@NgModule({\n  imports: [TableauUiCommonModule, CommonModule, TableauUiTooltipModule],\n  declarations: [ButtonToggleComponent],\n  exports: [ButtonToggleComponent],\n})\nexport class TableauUiButtonToggleModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}