{"version":3,"file":"tableau-ui-angular-select.mjs","sources":["../../../projects/component-library/select/src/select-base.component.ts","../../../projects/component-library/select/src/pipes/is-selected-value.pipe.ts","../../../projects/component-library/select/src/pipes/multiple-template.pipe.ts","../../../projects/component-library/select/src/single-select.component.ts","../../../projects/component-library/select/src/select.component.html","../../../projects/component-library/select/src/multi-select.component.ts","../../../projects/component-library/select/src/tableau-ui-select.module.ts","../../../projects/component-library/select/src/tableau-ui-angular-select.ts"],"sourcesContent":["import type { AfterViewInit, InputSignal, OnDestroy, Signal, TemplateRef, WritableSignal } from '@angular/core';\nimport { computed, contentChild, contentChildren, Directive, effect, ElementRef, inject, input, model, signal, viewChild } from '@angular/core';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport type { Subscription } from 'rxjs';\nimport { fromEvent, map } from 'rxjs';\nimport type { Primitive } from 'tableau-ui-angular/types';\nimport type { IOptionGridContext, IOptionLineContext } from 'tableau-ui-angular/common';\nimport { OptionComponent, PrefixComponent, SuffixComponent } from 'tableau-ui-angular/common';\nimport type { DialogRef } from 'tableau-ui-angular/dialog';\nimport { DialogService, LocalStackOptions } from 'tableau-ui-angular/dialog';\nimport { generateRandomString } from 'tableau-ui-angular/utils';\nimport type { MultiSelectComponent } from './multi-select.component';\n\nexport const SELECT_COMPONENT_HOST = {\n  class: 'tab-input',\n  '[attr.wrapping-mode]': '$selectedValueWrapMode()',\n  '[tabindex]': '$disabled() ? -1 : 0',\n  '(click)': 'openDropdown()',\n  '(keydown)': 'onKeyDown($event)',\n  '[attr.disabled]': '$disabled() ? true : null',\n  '[aria-disabled]': '$disabled() ? true : null',\n  '[aria-hidden]': '$disabled() ? true : null',\n  '[id]': 'selectId',\n};\n@Directive()\nexport abstract class SelectBaseComponent<TOption extends Primitive, TValue extends TOption | TOption[]> implements ControlValueAccessor, AfterViewInit, OnDestroy {\n  protected readonly selectId: string;\n  protected readonly dropdownId: string;\n  protected readonly $options = contentChildren<OptionComponent<TOption>>(OptionComponent<TOption>);\n\n  protected $isMultiSelect(): this is MultiSelectComponent<TOption> {\n    return false;\n  }\n\n  private readonly optionsChanged = effect(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const options = this.$options();\n    // for (const op of options) {\n    //     if (typeof op.$value() != typeof this.$selectedValue()) {\n    //         console.warn(`ButtonToggleComponent: The type of an option '${typeof op.$value()}' (value: ${op.$value()}) does not match the expected type: '${typeof this.$selectedValue()}'. This may lead to unexpected behavior.`);\n    //     }\n    // }\n    this.$highlightedOption.set(undefined);\n  });\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  protected readonly $dropdownPrefix: Signal<PrefixComponent | undefined> = contentChild<PrefixComponent>(PrefixComponent);\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  protected readonly $dropdownSuffix: Signal<SuffixComponent | undefined> = contentChild<SuffixComponent>(SuffixComponent);\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  private readonly $dropdownTemplate: Signal<TemplateRef<unknown> | undefined> = viewChild<TemplateRef<unknown>>('dropdownTemplate');\n\n  // #region Imports\n  private readonly dialogService = inject(DialogService);\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  // #endregion\n  // #region Inputs\n  /**\n   * Whether the select is disabled\n   * @remarks\n   * Set this using the FormControl if you are using reactive forms.\n   * Only set this manually if you are not using reactive forms.\n   *\n   * @default false\n   */\n  readonly $disabled = model(false, {\n    alias: 'disabled',\n  });\n  /**\n   * Placeholder text to display when no value is selected\n   * // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n   */\n  readonly $placeholder: InputSignal<string | undefined> = input<string>(undefined, {\n    alias: 'placeholder',\n  });\n  /**\n   * The currently selected value.\n   * @remarks\n   * If allowMultiple is true, this should be an array of values.\n   * If allowMultiple is false, this should be a single value.\n   */\n  readonly $value = model<TValue | undefined>(undefined, {\n    alias: 'value',\n  });\n\n  /**\n   * The CSS text to apply to the dropdown container\n   * @remarks\n   * Use this to apply height, maxHeight, etc. to the dropdown container\n   * @default '{}'\n   */\n  readonly $dropdownContainerCss = input<Record<string, string>>(\n    {},\n    {\n      alias: 'dropdownContainerCss',\n    },\n  );\n  /**\n   * The CSS text to apply to the options container in the dropdown\n   * @remarks\n   * Use this to apply height, maxHeight, etc. to the dropdown\n   * This is applied to the options container, excluding the prefix & suffix\n   *\n   * @default \"{ maxHeight: '300px', height: 'fit-content'}\"\n   */\n  readonly $dropdownOptionsContainerCss = input<Record<string, string>>(\n    {\n      maxHeight: '300px',\n      height: 'fit-content',\n    },\n    {\n      alias: 'dropdownOptionsContainerCss',\n    },\n  );\n  /**\n   * Whether to show the chevron icon on the right side of the select\n   */\n  readonly $showChevron = input<boolean>(true, {\n    alias: 'showChevron',\n  });\n  /**\n   * The location of the check icon in dropdown option if an option is selected\n   * @default 'none'\n   */\n  readonly $selectedCheckIconLocation = input<'left' | 'none' | 'right'>('none', {\n    alias: 'selectedCheckIconLocation',\n  });\n\n  /**\n   * Highlight the selected item(s) with a primary back color\n   * @default true\n   */\n  readonly $selectedItemHighlight = input<boolean>(true, {\n    alias: 'selectedItemHighlight',\n  });\n  /**\n   * Whether the clear button should be displayed\n   * @remarks\n   * It is only displayed if there are any values selected even if this is true\n   * @default false\n   */\n  readonly $allowClear = input<boolean>(false, {\n    alias: 'allowClear',\n  });\n  /**\n   * The wrapping mode for the selected value field\n   * @remarks\n   * If set to 'wrap', the text will wrap to the next line if it is too long to fit on one line. This will increase the height of the control\n   * If set to 'truncate', the text will be truncated with an ellipsis if it is too long to fit on one line. This will keep the height of the control the same\n   * @default 'wrap'\n   */\n  readonly $selectedValueWrapMode = input<'truncate' | 'wrap'>('wrap', {\n    alias: 'selectedValueWrapMode',\n  });\n  /**\n   * The template context to use for the selected value field\n   * @remarks\n   * Use this to display the 'icon' and 'text' properties of the selected value conditionally\n   */\n  readonly $selectedValueTemplateContext = input<IOptionLineContext>(\n    {\n      renderIcon: true,\n      renderText: true,\n    },\n    {\n      alias: 'selectedValueTemplateContext',\n    },\n  );\n  /**\n   * The template context to use for the dropdown options\n   * @remarks\n   * Use this to display the 'icon', 'text', and 'hint' properties of the options conditionally\n   */\n  readonly $dropdownValueTemplateContext = input<IOptionGridContext>(\n    {\n      renderIcon: true,\n      renderText: true,\n      renderHint: true,\n    },\n    {\n      alias: 'dropdownValueTemplateContext',\n    },\n  );\n\n  // #endregion\n  // #region Constructor + Init + Destroy\n  constructor() {\n    const id = generateRandomString();\n    this.selectId = `select-${id}`;\n    this.dropdownId = `dropdown-${id}`;\n  }\n  ngAfterViewInit() {\n    this.registerFocusChange();\n  }\n\n  ngOnDestroy() {\n    this.unregisterFocusChange();\n  }\n  // #endregion\n  // #region Computed\n  abstract readonly $hasValue: Signal<boolean>;\n\n  protected readonly $selectedValueTemplates = computed(() => {\n    if (!this.$hasValue()) {\n      return [];\n    }\n    let val: Primitive[] = [];\n    const value = this.$value();\n    if (Array.isArray(value)) {\n      val = value;\n    } else if (value !== undefined) {\n      val = [value];\n    }\n    const ret = val.map(v => ({\n      value: v,\n      template: this.$options()\n        .find(o => o.$value() === v)\n        ?.$lineTemplate(),\n    }));\n\n    return ret.filter(e => e.template !== undefined) as {\n      value: Primitive;\n      template: TemplateRef<IOptionLineContext>;\n    }[];\n  });\n\n  protected readonly $displayClearButton = computed(() => {\n    if (!this.$allowClear()) {\n      return false;\n    }\n    if (!this.$hasValue()) {\n      return false;\n    }\n    return true;\n  });\n  // #endregion\n  // #region ControlValueAccessor\n  // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\n  onChange = (value: TValue | undefined) => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: TValue | undefined): void {\n    this.$value.set(value);\n  }\n  registerOnChange(fn: (value: TValue | undefined) => void) {\n    this.onChange = fn;\n  }\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n  setDisabledState(isDisabled: boolean): void {\n    this.$disabled.set(isDisabled);\n  }\n  // #endregion\n  // #region Value selection\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  protected readonly $highlightedOption: WritableSignal<OptionComponent<TOption> | undefined> = signal<OptionComponent<TOption> | undefined>(undefined);\n  optionMouseDown(event: MouseEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n  }\n  selectValue(option: OptionComponent<TOption>) {\n    if (!this.$disabled() && !option.$disabled()) {\n      const value = this.$value();\n      const optionValue = option.$value();\n\n      this.selectValueInternal(value, optionValue);\n\n      this.onChange(this.$value());\n      this.onTouched();\n      if (!this.$isMultiSelect()) {\n        this.$dropdownReference()?.close();\n      }\n    }\n  }\n  protected abstract readonly selectValueInternal: (currentValue: TValue | undefined, selectedValue: TOption) => void;\n\n  clearValue(e: Event) {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.$disabled()) {\n      return;\n    }\n    // if (this.isMultiSelect) {\n    //     this.$value.set([]);\n    // } else {\n    //     this.$value.set(undefined);\n    // }\n    this.clearValueInternal();\n    this.onChange(this.$value());\n    this.onTouched();\n  }\n\n  protected abstract readonly clearValueInternal: () => void;\n  // isValueSelected(option: OptionComponent<TOption>) {\n  //     const value = this.$value();\n  //     const optionValue = option.$value();\n  //     if (this.$allowMultiple()) {\n  //         if (!Array.isArray(value)) {\n  //             return false;\n  //         }\n  //         return value.includes(optionValue);\n  //     } else {\n  //         return value === optionValue;\n  //     }\n  // }\n  // #endregion\n  // #region Dropdown\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  private readonly $dropdownReference: WritableSignal<DialogRef | undefined> = signal<DialogRef | undefined>(undefined);\n  protected readonly $dropdownOpen = computed(() => this.$dropdownReference() !== undefined);\n\n  openDropdown() {\n    if (this.$disabled()) {\n      return;\n    }\n    this.$highlightedOption.set(undefined);\n    const elRect = this.elementRef.nativeElement.getBoundingClientRect();\n    const ref = this.dialogService.openTemplateDialog(\n      this.$dropdownTemplate()!,\n      {\n        top(actualWidth, actualHeight) {\n          if (elRect.bottom + actualHeight > window.innerHeight && elRect.top - actualHeight > 0) {\n            return elRect.top - actualHeight + 'px';\n          }\n          return elRect.bottom + 'px';\n        },\n        left: elRect.left + 'px',\n        width: elRect.width + 'px',\n        closeOnEscape: true,\n        closeOnBackdropClick: true,\n      },\n      null,\n      new LocalStackOptions(this.elementRef.nativeElement),\n    );\n\n    this.registerOptionKeyNavigation();\n    ref.closed$.subscribe(() => {\n      this.unregisterOptionKeyNavigation();\n      if (this.$dropdownReference() === ref) {\n        this.$dropdownReference.set(undefined);\n      }\n    });\n    this.$dropdownReference.set(ref);\n  }\n  // #endregion\n  // #region Keyboard navigation\n\n  /**\n   *\n   * @param e Handles KeyDown event for:\n   * - host element\n   * - global keydown event when dropdown is open\n   * @returns\n   */\n  onKeyDown(e: KeyboardEvent) {\n    if (e.key === 'Enter' || e.key === ' ') {\n      const ref = this.$dropdownReference();\n      // if dropdown is not open\n      if (!ref) {\n        this.openDropdown();\n      } else {\n        // if dropdown is open\n        // if an option is highlighted, select it\n        if (this.$highlightedOption()) {\n          this.selectValue(this.$highlightedOption()!);\n        } else {\n          // if an option is not highlighted, close the dropdown\n          ref.close();\n        }\n      }\n      e.preventDefault();\n      e.stopPropagation();\n    }\n    if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n      // if dropdown is open:\n      // - we find the currently HIGHLIGHTED option\n      // - we find the next option to highlight\n      // - if no option is found, we highlight the first/last option\n      // if dropdown is NOT open:\n      // - if this is a multiselect, ignore\n      // - if this is a single select, find the next item to select\n      // - if no item is selected, highlight the first/last item\n      const open = this.$dropdownOpen();\n      if (this.$isMultiSelect() && !open) {\n        return;\n      }\n\n      let currentIndex = -1;\n      if (open) {\n        // find already highlighted option\n        if (this.$highlightedOption()) {\n          currentIndex = this.$options().findIndex(o => o.$value() === this.$highlightedOption()!.$value());\n        }\n      } else {\n        // find already selected option\n        currentIndex = this.$options().findIndex(\n          // we can be sure that at this point, this is a single select dropdown, so this.value() can be safely used\n          o => o.$value() === this.$value(),\n        );\n      }\n      let nextIndex: number;\n      // find the next index to highlight/select\n      if (e.key === 'ArrowDown') {\n        if (currentIndex === -1) {\n          // find the first non disabled option\n          nextIndex = this.$options().findIndex(o => !o.$disabled());\n        } else {\n          // find the next option that is not disabled\n          nextIndex = this.$options().findIndex((o, i) => i > currentIndex && !o.$disabled());\n          // if no option is found, find the next option that is not disabled before the current item\n          if (nextIndex === -1) {\n            nextIndex = this.$options().findIndex((o, i) => i < currentIndex && !o.$disabled());\n          }\n        }\n      } else if (e.key === 'ArrowUp') {\n        if (currentIndex === -1) {\n          // find the last non disabled option\n          nextIndex = this.$options()\n            .slice()\n            .reverse()\n            .findIndex(o => !o.$disabled());\n          if (nextIndex !== -1) {\n            nextIndex = this.$options().length - nextIndex - 1;\n          }\n        } else {\n          const flippedCurrentIndex = this.$options().length - currentIndex - 1;\n          // find the next option that is not disabled\n          nextIndex = [...this.$options()].reverse().findIndex((o, i) => i > flippedCurrentIndex && !o.$disabled());\n          // if no option is found, find the next option that is not disabled before the current item\n          if (nextIndex === -1) {\n            nextIndex = [...this.$options()].reverse().findIndex((o, i) => i < flippedCurrentIndex && !o.$disabled());\n          }\n          if (nextIndex !== -1) {\n            nextIndex = this.$options().length - nextIndex - 1;\n          }\n        }\n      } else {\n        nextIndex = -1;\n      }\n\n      if (nextIndex !== -1) {\n        if (open) {\n          this.$highlightedOption.set(this.$options()[nextIndex]);\n          setTimeout(\n            () =>\n              document.querySelector(`#${this.dropdownId} .option-wrapper.highlight`)?.scrollIntoView({\n                block: 'nearest',\n              }),\n            10,\n          );\n        } else {\n          this.selectValue(this.$options()[nextIndex]);\n        }\n      }\n\n      e.preventDefault();\n      e.stopPropagation();\n    }\n  }\n  clearKeyDown(e: KeyboardEvent) {\n    if (e.key === 'Enter' || e.key === ' ') {\n      this.clearValue(e);\n      e.preventDefault();\n    }\n  }\n  optionKeyNavSubscription: Subscription | undefined;\n  private registerOptionKeyNavigation() {\n    this.unregisterOptionKeyNavigation();\n    this.optionKeyNavSubscription = fromEvent(document, 'keydown')\n      .pipe(map(e => e as KeyboardEvent))\n      .subscribe((e: KeyboardEvent) => {\n        this.onKeyDown(e);\n      });\n  }\n  private unregisterOptionKeyNavigation() {\n    if (this.optionKeyNavSubscription) {\n      this.optionKeyNavSubscription.unsubscribe();\n      this.optionKeyNavSubscription = undefined;\n    }\n  }\n  // #endregion\n  // #region Focus management\n  focusChangeFn: ((event: FocusEvent) => void) | undefined;\n  registerFocusChange() {\n    this.focusChangeFn = this.checkFocus.bind(this);\n    document.addEventListener('focusout', this.focusChangeFn);\n  }\n  unregisterFocusChange() {\n    document.removeEventListener('focusout', this.focusChangeFn!);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  checkFocus(event: FocusEvent) {\n    setTimeout(() => {\n      const dropdownContainer = document.getElementById(this.dropdownId);\n\n      if (!this.elementRef.nativeElement.contains(document.activeElement) && dropdownContainer?.contains(document.activeElement) !== true) {\n        const ref = this.$dropdownReference();\n        if (ref) {\n          ref.close();\n        }\n      }\n    }, 100);\n  }\n\n  // #endregion\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\nimport type { OptionComponent } from 'tableau-ui-angular/common';\nimport type { Primitive } from 'tableau-ui-angular/types';\n\n@Pipe({\n  name: 'isSelectedValue',\n  standalone: false,\n})\nexport class IsSelectedValuePipe<T extends Primitive> implements PipeTransform {\n  transform(option: OptionComponent<T>, allowMultiple: boolean, value: T | T[] | undefined): boolean {\n    if (allowMultiple) {\n      return value instanceof Array && value.includes(option.$value());\n    }\n    return option.$value() === value;\n  }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\n\n@Pipe({\n  name: 'multipleTemplate',\n  standalone: false,\n})\nexport class MultipleTemplatePipe implements PipeTransform {\n  transform(template: string, number: number): unknown {\n    return template.replace('{number}', number.toString());\n  }\n}\n","import type { Primitive } from 'tableau-ui-angular/types';\nimport { SELECT_COMPONENT_HOST, SelectBaseComponent } from './select-base.component';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, computed, forwardRef, input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'tab-single-select',\n  standalone: false,\n  templateUrl: './select.component.html',\n  styleUrl: './select.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => SingleSelectComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: SELECT_COMPONENT_HOST,\n})\nexport class SingleSelectComponent<T extends Primitive> extends SelectBaseComponent<T, T> {\n  protected readonly $multipleSelectionMaxItemsListed: InputSignal<number> = input(2);\n\n  override readonly $hasValue: Signal<boolean> = computed(() => {\n    const value = this.$value();\n    return value !== undefined;\n  });\n  protected override selectValueInternal: (currentValue: T | undefined, selectedValue: T) => void = (currentValue, selectedValue) => {\n    this.$value.set(selectedValue);\n  };\n  protected override clearValueInternal: () => void = () => {\n    this.$value.set(undefined);\n  };\n}\n","<div class=\"content-display\">\n  @if ($selectedValueTemplates().length === 0) {\n    <span class=\"placeholder\">{{ $placeholder() }}</span>\n  } @else {\n    <span class=\"value\">\n      @if ($isMultiSelect() && $selectedValueTemplates().length > $multipleSelectionMaxItemsListed()) {\n        <ng-container>{{ $multipleSelectionNumberSelectedTemplate() | multipleTemplate: $selectedValueTemplates().length }}</ng-container>\n      } @else {\n        @for (v of $selectedValueTemplates(); track v.value; let last = $last) {\n          <ng-container [ngTemplateOutlet]=\"v.template\" [ngTemplateOutletContext]=\"$selectedValueTemplateContext()\" />\n          @if (!last) {\n            <span>,</span>\n          }\n        }\n      }\n    </span>\n  }\n</div>\n@if ($displayClearButton()) {\n  <button layout=\"icon\" color=\"plain\" tabindex=\"0\" [disabled]=\"$disabled()\" (click)=\"clearValue($event)\" (keydown)=\"clearKeyDown($event)\">\n    <tab-icon value=\"clear\" />\n  </button>\n}\n@if ($showChevron()) {\n  <tab-icon class=\"dropdown\" icon-button [value]=\"$dropdownOpen() ? 'keyboard_arrow_up' : 'keyboard_arrow_down'\" />\n}\n\n<ng-template #dropdownTemplate>\n  <div class=\"dropdown-container\" [id]=\"dropdownId\" [ngStyle]=\"$dropdownContainerCss()\">\n    @if ($dropdownPrefix()) {\n      <div class=\"options-prefix\">\n        <ng-content select=\"tab-prefix\" />\n      </div>\n    }\n    <div class=\"option-values\" [ngStyle]=\"$dropdownOptionsContainerCss()\">\n      @for (option of $options(); track option.$value()) {\n        <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus, @angular-eslint/template/click-events-have-key-events -->\n        <div\n          class=\"option-wrapper\"\n          [class.disabled]=\"option.$disabled()\"\n          [class.highlight]=\"!!$highlightedOption() && $highlightedOption()!.$value() === option.$value()\"\n          [class.selected]=\"(option | isSelectedValue: $isMultiSelect : $value()) && $selectedItemHighlight()\"\n          (click)=\"selectValue(option)\"\n          (mousedown)=\"optionMouseDown($event)\"\n          (mouseenter)=\"$highlightedOption.set(option)\"\n        >\n          <div class=\"check\" [ngClass]=\"$selectedCheckIconLocation()\">\n            @if (option | isSelectedValue: $isMultiSelect : $value()) {\n              <tab-icon value=\"check\" />\n            }\n          </div>\n          <div class=\"option-content\">\n            <ng-container [ngTemplateOutlet]=\"option.$template()\" [ngTemplateOutletContext]=\"$dropdownValueTemplateContext()\" />\n          </div>\n        </div>\n      }\n    </div>\n    @if ($dropdownSuffix()) {\n      <div class=\"options-suffix\">\n        <ng-content select=\"tab-suffix\" />\n      </div>\n    }\n  </div>\n</ng-template>\n","import type { Signal } from '@angular/core';\nimport { Component, forwardRef, ChangeDetectionStrategy, computed, input } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport type { Primitive } from 'tableau-ui-angular/types';\nimport { SELECT_COMPONENT_HOST, SelectBaseComponent } from './select-base.component';\n\n@Component({\n  selector: 'tab-multi-select',\n  standalone: false,\n  templateUrl: './select.component.html',\n  styleUrl: './select.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => MultiSelectComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: SELECT_COMPONENT_HOST,\n})\nexport class MultiSelectComponent<T extends Primitive> extends SelectBaseComponent<T, T[]> {\n  protected override $isMultiSelect(): this is MultiSelectComponent<T> {\n    return true;\n  }\n  /**\n   * The maximum number of items to display in the selected value field when multiple items are selected\n   * @default 2\n   */\n  readonly $multipleSelectionMaxItemsListed = input<number>(2, {\n    alias: 'multipleSelectionMaxItemsListed',\n  });\n  /**\n   * The display template to use when more than the maximum number of items selected\n   * @remarks\n   * Use {number} as a placeholder for the number of items selected\n   */\n  readonly $multipleSelectionNumberSelectedTemplate = input<string>('{number} items selected', {\n    alias: 'multipleSelectionNumberSelectedTemplate',\n  });\n\n  override readonly $hasValue: Signal<boolean> = computed(() => {\n    const value = this.$value();\n    if (value === undefined) {\n      return false;\n    }\n    if (!Array.isArray(value)) {\n      return false;\n    }\n    return value.length > 0;\n  });\n\n  protected override selectValueInternal: (currentValue: T[] | undefined, selectedValue: T) => void = (currentValue, selectedValue) => {\n    if (currentValue === undefined || !Array.isArray(currentValue)) {\n      this.$value.set([selectedValue]);\n    } else if (!currentValue.includes(selectedValue)) {\n      this.$value.set([...currentValue, selectedValue]);\n    } else {\n      this.$value.set(currentValue.filter(e => e !== selectedValue));\n    }\n  };\n\n  protected override clearValueInternal: () => void = () => {\n    this.$value.set([]);\n  };\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IsSelectedValuePipe } from './pipes/is-selected-value.pipe';\nimport { MultipleTemplatePipe } from './pipes/multiple-template.pipe';\nimport { TableauUiCommonModule } from 'tableau-ui-angular/common';\nimport { TableauUiIconModule } from 'tableau-ui-angular/icon';\nimport { TableauUiButtonModule } from 'tableau-ui-angular/button';\nimport { TableauUiDialogModule } from 'tableau-ui-angular/dialog';\nimport { SingleSelectComponent } from './single-select.component';\nimport { MultiSelectComponent } from './multi-select.component';\n\n@NgModule({\n  imports: [CommonModule, TableauUiCommonModule, TableauUiIconModule, TableauUiButtonModule, TableauUiDialogModule],\n  declarations: [IsSelectedValuePipe, MultipleTemplatePipe, SingleSelectComponent, MultiSelectComponent],\n  exports: [SingleSelectComponent, MultiSelectComponent],\n})\nexport class TableauUiSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i4.IsSelectedValuePipe","i5.MultipleTemplatePipe"],"mappings":"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"}