{"version":3,"file":"acorex-components-combo-box.mjs","sources":["../../../../packages/components/combo-box/src/lib/combo-box.component.ts","../../../../packages/components/combo-box/src/lib/combo-box.component.html","../../../../packages/components/combo-box/src/lib/combo-box.module.ts","../../../../packages/components/combo-box/src/acorex-components-combo-box.ts"],"sourcesContent":["import {\n  AXClearableComponent,\n  AXClosableComponent,\n  AXComponent,\n  AXEvent,\n  AXFocusEvent,\n  AXHtmlEvent,\n  AXItemClickEvent,\n  AXItemSelectedEvent,\n  AXStyleLookType,\n  AXValuableComponent,\n  AXValueChangedEvent,\n  NXValueComponent,\n} from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXChipsComponent } from '@acorex/components/chips';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { Combobox, ComboboxPopup, ComboboxWidget } from '@angular/aria/combobox';\nimport { Listbox, Option } from '@angular/aria/listbox';\nimport { AsyncPipe, DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  TemplateRef,\n  ViewEncapsulation,\n  afterRenderEffect,\n  computed,\n  effect,\n  inject,\n  input,\n  linkedSignal,\n  model,\n  output,\n  signal,\n  untracked,\n  viewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormValueControl } from '@angular/forms/signals';\nimport { AXComboBoxItem, AXComboBoxValue } from './combo-box.types';\n\n/**\n * A minimal combo box for selecting one or more values from a list of items.\n *\n * Built on top of the `@angular/aria/combobox` directives, it supports two behaviors:\n * - `searchable=\"true\"` (default): an input with typeahead filtering (matches `id`). On small\n *   screens with `adaptivityEnabled`, the trigger is select-like and search moves into the actionsheet.\n * - `searchable=\"false\"`: a select-like, non-editable trigger (same input; typing blocked without\n *   Combobox `readonly`, so Tab focus and keyboard open/select keep working).\n *\n * With `multiple=\"true\"`, selected values are shown as chips in the trigger and the popup stays\n * open while toggling items (same interaction model as `ax-lookup` multi-select).\n *\n * With `adaptivityEnabled` (default `true`), the list opens as a bottom actionsheet on small\n * screens instead of an anchored dropdown — the same alternate presentation as `ax-select-box`.\n *\n * Items use `text` for display, `id` for search/identity, and `value` as the submitted model value.\n * Implements {@link FormValueControl} so `[(ngModel)]` / signal forms work via the `value` model\n * (no `ControlValueAccessor`).\n *\n * @category Components\n */\n@Component({\n  selector: 'ax-combo-box',\n  templateUrl: './combo-box.component.html',\n  styleUrls: ['./combo-box.component.css'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AXButtonComponent,\n    AXCheckBoxComponent,\n    AXChipsComponent,\n    AXDecoratorModule,\n    Combobox,\n    ComboboxPopup,\n    ComboboxWidget,\n    Listbox,\n    Option,\n    AXPopoverComponent,\n    AXSearchBoxComponent,\n    AXTranslatorPipe,\n    AsyncPipe,\n    NgTemplateOutlet,\n  ],\n  providers: [\n    { provide: AXComponent, useExisting: AXComboBoxComponent },\n    { provide: AXClearableComponent, useExisting: AXComboBoxComponent },\n    { provide: AXClosableComponent, useExisting: AXComboBoxComponent },\n    { provide: AXValuableComponent, useExisting: AXComboBoxComponent },\n  ],\n})\nexport class AXComboBoxComponent\n  extends NXValueComponent\n  implements FormValueControl<AXComboBoxValue>\n{\n  readonly #platform = inject(AXPlatform);\n  readonly #destroyRef = inject(DestroyRef);\n\n  /**\n   * The name of the form field, used by validation rules and `ax-form.validate(names)`.\n   */\n  name = input('');\n\n  /**\n   * The list of items the user can select from.\n   * Each item has `id` (search/identity), `text` (display), and `value` (submitted).\n   */\n  items = input<AXComboBoxItem[]>([]);\n\n  /**\n   * Whether the combo box accepts typing and filters the list (`true`),\n   * or is a select-like, non-editable trigger (`false`).\n   * On small screens with `adaptivityEnabled`, search is typed in the actionsheet instead of the trigger.\n   */\n  searchable = input(true);\n\n  /**\n   * When `true`, multiple items can be selected. Selected values are shown as chips and the\n   * popup stays open while toggling. The model value is an array (`[]` when empty).\n   */\n  multiple = input(false);\n\n  /**\n   * When `true` (default), the popup list uses the alternate actionsheet presentation on small\n   * screens (`SM`). Searchable mode then shows a search field inside the sheet. When `false`,\n   * the list always opens as an anchored dropdown.\n   */\n  adaptivityEnabled = input(true);\n\n  /**\n   * Title shown in the actionsheet header on small screens. Falls back to `placeholder`.\n   */\n  caption = input('');\n\n  /**\n   * When `true`, list rows use alternating background colors for easier scanning.\n   */\n  alternate = input(false);\n\n  /**\n   * The placeholder text shown when no value is selected.\n   */\n  placeholder = input('');\n\n  /**\n   * Placeholder for the trigger search input when items are already selected (multi-select),\n   * and for the in-sheet search field on small screens. Falls back to `placeholder` when the\n   * selection is empty on desktop.\n   */\n  searchPlaceholder = input('Search...');\n\n  /**\n   * Custom template rendered when the filtered list has no items.\n   * When omitted, a default \"no result found\" message is shown.\n   */\n  emptyTemplate = input<TemplateRef<unknown> | undefined>(undefined);\n\n  /**\n   * Custom template rendered for each item in the popup list.\n   * Context: `{ $implicit: AXComboBoxItem }`.\n   */\n  itemTemplate = input<TemplateRef<unknown> | undefined>(undefined);\n\n  /**\n   * Custom template rendered for the selected value in the trigger.\n   * Context: `{ $implicit: AXComboBoxItem }`.\n   * When `searchable` is true, the template is shown while the popup is closed and the input\n   * still reflects the selected text; typing/opening falls back to the plain input.\n   * In multi-select mode, the template replaces the chip text for each selected item.\n   */\n  selectedTemplate = input<TemplateRef<unknown> | undefined>(undefined);\n\n  /**\n   * Whether the combo box is disabled.\n   */\n  readonly disabled = input(false);\n\n  /**\n   * Whether the combo box is readonly.\n   */\n  readonly readonly = input(false);\n\n  /**\n   * Predefined look scheme of the editor container. Same looks as other editor components like ax-text-box.\n   */\n  look = model<AXStyleLookType>('solid');\n\n  /**\n   * The selected item `value`(s). Scalar (or `null`) in single mode; an array in multi mode.\n   * Supports `[(value)]`, `[(ngModel)]`, and signal forms via {@link FormValueControl}.\n   */\n  readonly value = model<AXComboBoxValue>(null);\n\n  /**\n   * Emitted when the selected value changes.\n   */\n  onValueChanged = output<AXValueChangedEvent<AXComboBoxValue>>();\n\n  /**\n   * Emitted when the trigger receives focus.\n   */\n  onFocus = output<AXFocusEvent>();\n\n  /**\n   * Emitted when the trigger loses focus.\n   */\n  onBlur = output<AXFocusEvent>();\n\n  /**\n   * Emitted when a list item is clicked.\n   */\n  onItemClick = output<AXItemClickEvent<AXComboBoxItem>>();\n\n  /**\n   * Emitted when a list item is selected (click or keyboard).\n   */\n  onItemSelected = output<AXItemSelectedEvent<AXComboBoxItem>>();\n\n  /**\n   * Emitted when the popup list opens.\n   */\n  onOpened = output<AXEvent>();\n\n  /**\n   * Emitted when the popup list closes.\n   */\n  onClosed = output<AXEvent>();\n\n  /** Whether the popup is expanded. */\n  protected expanded = signal(false);\n\n  /** Whether the list is currently shown as a bottom actionsheet (small screens + adaptivity). */\n  protected isActionsheetStyle = signal(false);\n\n  /** Whether the trigger input is writable and filters as you type (desktop searchable only). */\n  protected isEditableTrigger = computed(() => this.searchable() && !this.isActionsheetStyle());\n\n  /** Whether search is typed in the actionsheet instead of the trigger. */\n  protected isSheetSearchEnabled = computed(() => this.searchable() && this.isActionsheetStyle());\n\n  /** Query typed in the actionsheet search field (independent of the trigger display text). */\n  protected sheetSearchText = signal('');\n\n  /** The current selection normalized to an array of submitted values. */\n  protected selectedValues = computed<(string | number)[]>(() => {\n    const value = this.value();\n    if (value == null) {\n      return [];\n    }\n    return Array.isArray(value) ? value : [value];\n  });\n\n  /** Whether there is at least one selected value. */\n  protected hasSelection = computed(() => this.selectedValues().length > 0);\n\n  /** Resolved selected items for the current model value(s). */\n  protected selectedItems = computed(() => {\n    const values = new Set(this.selectedValues());\n    return this.items().filter((item) => values.has(item.value));\n  });\n\n  /** The item whose `value` matches the current model value (single-select). */\n  protected selectedItem = computed(() => (this.multiple() ? null : (this.selectedItems()[0] ?? null)));\n\n  /** Display text shown in the trigger / used as the searchable input baseline (single-select). */\n  protected displayText = computed(() => this.selectedItem()?.text ?? '');\n\n  /**\n   * The text typed in the searchable input.\n   * Multi-select starts empty; single mode syncs from the selected display text.\n   */\n  protected searchText = linkedSignal(() => (this.multiple() ? '' : this.displayText()));\n\n  /** Whether the trigger should render `selectedTemplate` instead of the plain input text. */\n  protected showSelectedTemplate = computed(() => {\n    if (this.multiple() || !this.selectedTemplate() || !this.selectedItem()) {\n      return false;\n    }\n    if (!this.isEditableTrigger()) {\n      return true;\n    }\n    return !this.expanded() && this.searchText() === this.displayText();\n  });\n\n  /** Placeholder for the editable trigger search input in multi-select. */\n  protected triggerSearchPlaceholder = computed(() => {\n    if (this.isActionsheetStyle()) {\n      return this.multiple() && this.selectedItems().length > 0 ? '' : this.placeholder();\n    }\n    if (this.multiple() && this.selectedItems().length > 0) {\n      return this.searchPlaceholder();\n    }\n    return this.placeholder();\n  });\n\n  /** The listbox selection (item ids), kept in sync with the selected value(s). */\n  protected selection = linkedSignal<string[]>(() => this.selectedItems().map((item) => item.id));\n\n  /** Items filtered by typed query against `id` when the combo box is searchable. */\n  protected filteredItems = computed(() => {\n    const items = this.items();\n    if (!this.searchable()) {\n      return items;\n    }\n\n    const inSheet = this.isActionsheetStyle();\n    const query = (inSheet ? this.sheetSearchText() : this.searchText()).trim().toLowerCase();\n    if (!query) {\n      return items;\n    }\n\n    // Desktop single-select: the trigger shows the selected label, which is not a filter.\n    if (!inSheet && !this.multiple()) {\n      const selectedId = (this.selectedItem()?.id ?? '').toLowerCase();\n      if (query === selectedId || query === this.displayText().trim().toLowerCase()) {\n        return items;\n      }\n    }\n\n    return items.filter((item) => {\n      const idMatch = item.id.toLowerCase().includes(query);\n      return idMatch || (inSheet && (item.text ?? '').toLowerCase().includes(query));\n    });\n  });\n\n  /** Whether the filtered list is empty (empty-state vs hidden listbox). */\n  protected hasNoMatches = computed(() => this.filteredItems().length === 0);\n\n  protected comboboxRef = viewChild(Combobox);\n  protected listboxRef = viewChild(Listbox);\n  protected popoverRef = viewChild(AXPopoverComponent);\n  protected originRef = viewChild<ElementRef<HTMLElement>>('origin');\n  protected popupRef = viewChild<ElementRef<HTMLElement>>('popup');\n  protected sheetSearchRef = viewChild<AXSearchBoxComponent>('sheetSearch');\n\n  readonly #document = inject(DOCUMENT);\n\n  #isUserInteraction = false;\n  #lastValue: AXComboBoxValue | undefined = undefined;\n  #lastExpanded: boolean | undefined = undefined;\n  #sheetSearchFocused = false;\n\n  constructor() {\n    super();\n\n    effect(() => this.#emitValueChanged(this.value()));\n    effect(() => this.#emitOpenedOrClosed(this.expanded()));\n    effect(() => {\n      this.adaptivityEnabled();\n      untracked(() => this.#syncActionsheetStyle());\n    });\n\n    this.#platform.resize.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n      this.#syncActionsheetStyle();\n      // Match dropdown-box: close anchored dropdowns on resize; keep actionsheet open.\n      if (this.expanded() && !this.isActionsheetStyle()) {\n        this.close();\n      }\n    });\n\n    // Seed the actionsheet flag once.\n    this.#syncActionsheetStyle();\n\n    // Keep the popover in sync with the expanded state.\n    effect(() => {\n      const expanded = this.expanded();\n      const popover = this.popoverRef();\n      if (!popover) {\n        return;\n      }\n      untracked(() => {\n        if (expanded && !popover.isOpen) {\n          void popover.open();\n        } else if (!expanded && popover.isOpen) {\n          popover.close();\n        }\n      });\n    });\n\n    afterRenderEffect(() => {\n      if (!this.expanded()) {\n        this.#sheetSearchFocused = false;\n        return;\n      }\n      this.listboxRef()?.scrollActiveItemIntoView();\n      this.#tryFocusSheetSearch();\n    });\n  }\n\n  #syncActionsheetStyle() {\n    this.isActionsheetStyle.set(this.adaptivityEnabled() && this.#platform.is('SM'));\n  }\n\n  /** Stable unique key for `@for` — avoids NG0955 when `id` is missing or duplicated. */\n  protected trackItemKey(index: number, item: AXComboBoxItem): string {\n    const id = item?.id?.trim();\n    return id ? id : `item-${index}`;\n  }\n\n  /** Whether the given item is currently selected. */\n  protected isItemSelected(item: AXComboBoxItem): boolean {\n    return this.selectedValues().some((value) => value === item.value);\n  }\n\n  /** Emits onValueChanged when the value actually changes (skips the initial value). */\n  #emitValueChanged(value: AXComboBoxValue) {\n    const previous = this.#lastValue;\n    this.#lastValue = value;\n\n    if (previous === undefined || this.#valuesEqual(previous, value)) {\n      return;\n    }\n\n    this.onValueChanged.emit({\n      component: this,\n      htmlElement: this.nativeElement,\n      name: 'value',\n      value,\n      oldValue: previous,\n      isUserInteraction: this.#isUserInteraction,\n    });\n    this.#isUserInteraction = false;\n  }\n\n  #valuesEqual(a: AXComboBoxValue, b: AXComboBoxValue): boolean {\n    if (a === b) {\n      return true;\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n      return a.length === b.length && a.every((value, index) => value === b[index]);\n    }\n    return false;\n  }\n\n  /** Emits onOpened/onClosed when the expanded state actually changes (skips the initial state). */\n  #emitOpenedOrClosed(expanded: boolean) {\n    const previous = this.#lastExpanded;\n    this.#lastExpanded = expanded;\n\n    if (previous === undefined || previous === expanded) {\n      return;\n    }\n\n    const event: AXEvent = {\n      component: this,\n      htmlElement: this.nativeElement,\n      isUserInteraction: true,\n    };\n    expanded ? this.onOpened.emit(event) : this.onClosed.emit(event);\n  }\n\n  /**\n   * Opens (searchable) or toggles (non-searchable) the popup on trigger click.\n   */\n  protected onTriggerClick() {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n    if (this.searchable()) {\n      this.expanded.set(true);\n      return;\n    }\n    this.expanded.update((open) => !open);\n  }\n\n  /**\n   * Keyboard handling on the trigger:\n   * - Searchable: Enter never submits the form; with no matches the value is cleared (`null`).\n   * - Non-searchable: open with Enter/Space when collapsed; commit with Space when expanded.\n   * - Multi-select: Backspace removes the last chip when the search input is empty.\n   */\n  protected onTriggerKeydown(event: KeyboardEvent) {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n\n    if (event.key === 'Escape' && this.expanded()) {\n      event.preventDefault();\n      this.close();\n      return;\n    }\n\n    if (this.multiple() && event.key === 'Backspace' && !this.searchText()) {\n      const items = this.selectedItems();\n      if (items.length > 0) {\n        event.preventDefault();\n        this.removeChip(event, items[items.length - 1]);\n      }\n      return;\n    }\n\n    if (event.key === 'Enter') {\n      this.#onSearchEnter(event);\n      return;\n    }\n\n    if (this.searchable()) {\n      return;\n    }\n    if (event.key !== ' ') {\n      return;\n    }\n\n    if (!this.expanded()) {\n      event.preventDefault();\n      this.expanded.set(true);\n      return;\n    }\n\n    event.preventDefault();\n    this.commit();\n  }\n\n  /** Handles Enter in the actionsheet search field (no form submit; clear on no matches). */\n  protected onSheetSearchKeydown(e: AXHtmlEvent<KeyboardEvent>) {\n    const event = e.nativeEvent;\n    if (!event || event.key !== 'Enter') {\n      return;\n    }\n    this.#onSearchEnter(event);\n  }\n\n  /**\n   * Enter in search never submits the surrounding form. When the query has no matches,\n   * single-select value is cleared (`null`). With matches, the highlighted item is committed.\n   */\n  #onSearchEnter(event: KeyboardEvent) {\n    event.preventDefault();\n    event.stopPropagation();\n    event.stopImmediatePropagation();\n\n    if (this.#shouldClearOnEmptyEnter()) {\n      if (!this.multiple()) {\n        this.reset(true);\n      }\n      return;\n    }\n\n    if (this.searchable()) {\n      if (this.expanded()) {\n        this.commit();\n      }\n      return;\n    }\n\n    if (!this.expanded()) {\n      this.expanded.set(true);\n    }\n  }\n\n  #currentSearchQuery(): string {\n    return (this.isSheetSearchEnabled() ? this.sheetSearchText() : this.searchText()).trim();\n  }\n\n  #isTypedFilterQuery(): boolean {\n    const query = this.#currentSearchQuery();\n    if (!query) {\n      return false;\n    }\n    if (!this.isSheetSearchEnabled() && !this.multiple()) {\n      const selectedId = (this.selectedItem()?.id ?? '').toLowerCase();\n      const display = this.displayText().trim().toLowerCase();\n      const normalized = query.toLowerCase();\n      if (normalized === selectedId || normalized === display) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  #shouldClearOnEmptyEnter(): boolean {\n    return this.searchable() && this.#isTypedFilterQuery() && this.hasNoMatches();\n  }\n\n  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */\n  protected onBeforeInput(event: Event) {\n    if (!this.isEditableTrigger() || this.readonly()) {\n      event.preventDefault();\n    }\n  }\n\n  /**\n   * Combobox `expanded` two-way binding. On actionsheet with in-sheet search, ignore collapse\n   * so focusing the search field (Aria combobox blur) does not close the popup. Dismiss is owned\n   * by the header Apply/close button, `commit()`, and Escape. On desktop, outside click also closes.\n   */\n  protected onExpandedChange(open: boolean) {\n    if (!open && this.isSheetSearchEnabled()) {\n      return;\n    }\n    this.expanded.set(open);\n  }\n\n  /** Filters the list from the actionsheet search field (reads the input so delayed ngModel cannot block typing). */\n  protected onSheetSearchInput() {\n    this.sheetSearchText.set(this.#sheetSearchInputValue());\n  }\n\n  #sheetSearchInputValue(): string {\n    return this.sheetSearchRef()?.getHostElement()?.querySelector('input')?.value ?? '';\n  }\n\n  #tryFocusSheetSearch() {\n    if (!this.isSheetSearchEnabled() || this.#sheetSearchFocused) {\n      return;\n    }\n    const search = this.sheetSearchRef();\n    if (!search) {\n      return;\n    }\n    this.#sheetSearchFocused = true;\n    search.focus();\n  }\n\n  #clearSheetSearch() {\n    this.sheetSearchText.set('');\n    this.sheetSearchRef()?.commitValue('', false);\n  }\n\n  /**\n   * Keeps the combobox expanded state in sync when the popover closes (e.g. click outside).\n   */\n  protected onPopoverClosed() {\n    this.#sheetSearchFocused = false;\n    this.expanded.set(false);\n    this.searchText.set(this.multiple() ? '' : this.displayText());\n    this.#clearSheetSearch();\n  }\n\n  /**\n   * Removes a single chip from the multi selection.\n   */\n  protected removeChip(event: Event, item: AXComboBoxItem) {\n    event.stopPropagation();\n    if (this.disabled() || this.readonly() || !this.multiple()) {\n      return;\n    }\n    this.#isUserInteraction = true;\n    this.value.set(this.selectedValues().filter((value) => value !== item.value));\n  }\n\n  /**\n   * Clears the selected value(s) and closes the popup.\n   * Sets `null` in single mode and `[]` in multi mode. Used by projected `ax-clear-button`.\n   *\n   * @param isUserInteraction - Whether the clear was triggered by the user.\n   */\n  reset(isUserInteraction = false): void {\n    if (this.disabled() || this.readonly()) {\n      return;\n    }\n    const next: AXComboBoxValue = this.multiple() ? [] : null;\n    const current = this.value();\n    if (this.multiple()) {\n      if (Array.isArray(current) && current.length === 0) {\n        return;\n      }\n      if (current == null) {\n        return;\n      }\n    } else if (current == null) {\n      return;\n    }\n    this.#isUserInteraction = isUserInteraction;\n    this.value.set(next);\n    this.selection.set([]);\n    this.expanded.set(false);\n  }\n\n  /**\n   * Closes the popup list.\n   */\n  close(): void {\n    this.expanded.set(false);\n  }\n\n  /**\n   * Closes the popup list (alias for {@link close}, required by `AXClosableComponent`).\n   */\n  closeAll(): void {\n    this.close();\n  }\n\n  /**\n   * Commits the highlighted (active) or clicked list item as the component value.\n   *\n   * With `selectionMode=\"explicit\"`, arrow keys only move the active item; Enter/Space must resolve\n   * that option. Clicks resolve from the event target so we do not depend on listener order vs ngListbox.\n   *\n   * In multi-select mode the item is toggled and the popup stays open.\n   * When the user typed a query with no matches, Enter clears single-select to `null`.\n   */\n  protected onListEnter(event: Event) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.commit();\n  }\n\n  protected commit(event?: Event) {\n    if (event?.type !== 'click' && this.#shouldClearOnEmptyEnter()) {\n      if (!this.multiple()) {\n        this.reset(true);\n      }\n      return;\n    }\n\n    const listbox = this.listboxRef();\n    let selectedId: string | undefined;\n\n    if (event?.type === 'click' && event.target instanceof Element) {\n      const optionEl = event.target.closest('[role=\"option\"]');\n      const match = listbox?._pattern.inputs.items().find((item) => item.element() === optionEl);\n      const value = match?.value();\n      selectedId = typeof value === 'string' ? value : undefined;\n    } else {\n      const activeValue = listbox?._pattern.inputs.activeItem()?.value();\n      selectedId = typeof activeValue === 'string' ? activeValue : this.selection()[0];\n    }\n\n    const item = selectedId != null ? this.items().find((i) => i.id === selectedId) : undefined;\n    if (item == null) {\n      if (!this.multiple()) {\n        this.expanded.set(false);\n      }\n      return;\n    }\n\n    this.#commitItem(item, event);\n  }\n\n  #commitItem(item: AXComboBoxItem, event?: Event) {\n    if (event?.type === 'click') {\n      this.onItemClick.emit({\n        component: this,\n        item,\n        htmlElement: this.nativeElement,\n        isUserInteraction: true,\n        nativeEvent: event as MouseEvent,\n      });\n    }\n\n    if (this.multiple()) {\n      const current = this.selectedValues();\n      const exists = current.some((value) => value === item.value);\n      if (!exists) {\n        this.onItemSelected.emit({\n          component: this,\n          item,\n          htmlElement: this.nativeElement,\n          isUserInteraction: true,\n        });\n      }\n      const next = exists ? current.filter((value) => value !== item.value) : [...current, item.value];\n      this.#isUserInteraction = true;\n      this.value.set(next);\n      this.selection.set(next.map((value) => this.items().find((i) => i.value === value)?.id).filter((id): id is string => id != null));\n      if (this.searchable() && this.searchText()) {\n        this.searchText.set('');\n      }\n      if (this.sheetSearchText()) {\n        this.#clearSheetSearch();\n      }\n      return;\n    }\n\n    this.onItemSelected.emit({\n      component: this,\n      item,\n      htmlElement: this.nativeElement,\n      isUserInteraction: true,\n    });\n    if (item.value !== this.value()) {\n      this.#isUserInteraction = true;\n      this.value.set(item.value);\n      this.selection.set([item.id]);\n    }\n    this.expanded.set(false);\n    this.comboboxRef()?.element.focus();\n  }\n\n  /**\n   * Focuses the combo box trigger input.\n   */\n  focus(options?: FocusOptions): void {\n    if (this.disabled()) {\n      return;\n    }\n    this.comboboxRef()?.element.focus(options);\n  }\n\n  /** Forwards native focus from the trigger input. */\n  protected emitOnFocus(e: FocusEvent) {\n    this.onFocus.emit({\n      component: this,\n      htmlElement: this.nativeElement,\n      nativeEvent: e,\n    });\n  }\n\n  /** Forwards native blur from the trigger input. */\n  protected emitOnBlur(e: FocusEvent) {\n    this.onBlur.emit({\n      component: this,\n      htmlElement: this.nativeElement,\n      nativeEvent: e,\n    });\n    this.#scheduleCloseOnTriggerBlur(e);\n  }\n\n  /**\n   * Closes the popup when the trigger input loses focus, unless focus moved into the\n   * popover panel or another part of the trigger (e.g. sheet search or list navigation).\n   */\n  #scheduleCloseOnTriggerBlur(e: FocusEvent) {\n    if (!this.expanded()) {\n      return;\n    }\n\n    const related = e.relatedTarget;\n    if (related instanceof Node && this.#isFocusWithinPopupOrTrigger(related)) {\n      return;\n    }\n\n    queueMicrotask(() => {\n      if (!this.expanded()) {\n        return;\n      }\n      const active = this.#document.activeElement;\n      if (active instanceof Node && this.#isFocusWithinPopupOrTrigger(active)) {\n        return;\n      }\n      this.close();\n    });\n  }\n\n  #isFocusWithinPopupOrTrigger(node: Node): boolean {\n    const popup = this.popupRef()?.nativeElement;\n    if (popup?.contains(node)) {\n      return true;\n    }\n    const origin = this.originRef()?.nativeElement;\n    return Boolean(origin?.contains(node));\n  }\n}\n","<div\n  #origin\n  class=\"ax-editor-container ax-{{ look() }} ax-default\"\n  [class.ax-combo-box-trigger]=\"!isEditableTrigger()\"\n  [class.ax-combo-box-trigger-multiple]=\"multiple()\"\n  [class.ax-state-disabled]=\"disabled()\"\n  [class.ax-state-readonly]=\"readonly()\"\n>\n  <ng-content select=\"ax-prefix\"></ng-content>\n\n  <div class=\"ax-combo-box-value\" [class.ax-combo-box-chips]=\"multiple()\">\n    @if (multiple()) {\n      @for (item of selectedItems(); track item.id) {\n        <ax-chips class=\"ax-sm\" look=\"fill\" [text]=\"selectedTemplate() ? '' : item.text\">\n          @if (selectedTemplate()) {\n            <ax-prefix>\n              <ng-container\n                [ngTemplateOutlet]=\"selectedTemplate()!\"\n                [ngTemplateOutletContext]=\"{ $implicit: item }\"\n              />\n            </ax-prefix>\n          }\n          @if (!disabled() && !readonly()) {\n            <ax-suffix>\n              <button type=\"button\" tabindex=\"-1\" (click)=\"removeChip($event, item)\">\n                <span class=\"ax-icon ax-icon-close\"></span>\n              </button>\n            </ax-suffix>\n          }\n        </ax-chips>\n      }\n    } @else if (showSelectedTemplate()) {\n      <div class=\"ax-combo-box-selected-content\" aria-hidden=\"true\">\n        <ng-container\n          [ngTemplateOutlet]=\"selectedTemplate()!\"\n          [ngTemplateOutletContext]=\"{ $implicit: selectedItem() }\"\n        />\n      </div>\n    }\n\n    <input\n      ngCombobox\n      #combobox=\"ngCombobox\"\n      type=\"text\"\n      class=\"ax-input\"\n      [class.ax-combo-box-trigger-search]=\"multiple()\"\n      [class.ax-combo-box-select-input]=\"!isEditableTrigger()\"\n      [class.ax-combo-box-input-overlay]=\"!multiple() && showSelectedTemplate()\"\n      [placeholder]=\"multiple() ? triggerSearchPlaceholder() : placeholder()\"\n      [disabled]=\"disabled()\"\n      [readonly]=\"readonly() || !isEditableTrigger()\"\n      [attr.inputmode]=\"isEditableTrigger() ? null : 'none'\"\n      [(value)]=\"searchText\"\n      [expanded]=\"expanded()\"\n      (expandedChange)=\"onExpandedChange($event)\"\n      (click)=\"onTriggerClick()\"\n      (keydown)=\"onTriggerKeydown($event)\"\n      (beforeinput)=\"onBeforeInput($event)\"\n      (focus)=\"emitOnFocus($event)\"\n      (blur)=\"emitOnBlur($event)\"\n    />\n  </div>\n\n  @if (hasSelection() && !disabled() && !readonly()) {\n    <ng-content select=\"ax-clear-button\"></ng-content>\n  }\n\n  <button\n    type=\"button\"\n    class=\"ax-general-button-icon\"\n    tabindex=\"-1\"\n    [disabled]=\"disabled() || readonly()\"\n    (click)=\"onTriggerClick()\"\n  >\n    <span class=\"ax-icon\" [class.ax-icon-chevron-down]=\"!expanded()\" [class.ax-icon-chevron-up]=\"expanded()\"></span>\n  </button>\n  <ng-content select=\"ax-suffix\"></ng-content>\n</div>\n\n<ax-popover\n  [target]=\"origin\"\n  [openOn]=\"'manual'\"\n  [closeOn]=\"isActionsheetStyle() ? 'manual' : 'clickOut'\"\n  [closeOnScroll]=\"!isActionsheetStyle()\"\n  [placement]=\"'bottom-start'\"\n  [width]=\"isActionsheetStyle() ? '100%' : origin.offsetWidth + 'px'\"\n  [adaptivityEnabled]=\"isActionsheetStyle()\"\n  [disabled]=\"disabled() || readonly()\"\n  (onClosed)=\"onPopoverClosed()\"\n>\n  <div\n    #popup\n    class=\"ax-combo-box-popup\"\n    [class.ax-is-empty]=\"hasNoMatches()\"\n    [class.ax-is-actionsheet]=\"isActionsheetStyle()\"\n    (keydown.escape)=\"close()\"\n  >\n    @if (isActionsheetStyle()) {\n      <ax-header class=\"ax-solid\">\n        <ax-title>{{ caption() || placeholder() || ('@acorex:selectbox.popover.title' | translate | async) }}</ax-title>\n        @if (multiple()) {\n          <ax-button\n            class=\"ax-sm\"\n            color=\"primary\"\n            look=\"solid\"\n            text=\"@acorex:common.actions.apply\"\n            (onClick)=\"close()\"\n          ></ax-button>\n        } @else {\n          <ax-close-button></ax-close-button>\n        }\n      </ax-header>\n    }\n    @if (isSheetSearchEnabled()) {\n      <div class=\"ax-combo-box-sheet-search\">\n        <ax-search-box\n          #sheetSearch\n          class=\"ax-sm\"\n          look=\"fill\"\n          [autoSearch]=\"false\"\n          [delayTime]=\"0\"\n          [placeholder]=\"searchPlaceholder()\"\n          (onValueChanged)=\"onSheetSearchInput()\"\n          (onKeyUp)=\"onSheetSearchInput()\"\n          (onKeyDown)=\"onSheetSearchKeydown($event)\"\n        >\n          <ax-clear-button></ax-clear-button>\n        </ax-search-box>\n      </div>\n    }\n    <ng-content select=\"ax-header\"></ng-content>\n    @if (expanded()) {\n      @if (hasNoMatches()) {\n        @if (emptyTemplate()) {\n          <ng-container [ngTemplateOutlet]=\"emptyTemplate()!\" />\n        } @else {\n          <div class=\"ax-combo-box-empty\">{{ '@acorex:common.general.no-result-found' | translate | async }}</div>\n        }\n      }\n      @if (isActionsheetStyle()) {\n        <div\n          ngListbox\n          class=\"ax-combo-box-listbox\"\n          [class.ax-hidden]=\"hasNoMatches()\"\n          focusMode=\"activedescendant\"\n          selectionMode=\"explicit\"\n          [multi]=\"multiple()\"\n          [tabindex]=\"-1\"\n          [(value)]=\"selection\"\n          (click)=\"commit($event)\"\n        >\n          @for (item of filteredItems(); track trackItemKey($index, item); let odd = $odd) {\n            <div\n              ngOption\n              class=\"ax-combo-box-option-host\"\n              [class.ax-combo-box-option]=\"!itemTemplate()\"\n              [class.ax-combo-box-option-multiple]=\"multiple()\"\n              [class.ax-state-alternate]=\"alternate() && odd\"\n              [value]=\"item.id\"\n              [label]=\"item.text\"\n            >\n              <ng-container [ngTemplateOutlet]=\"optionContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n            </div>\n          }\n        </div>\n      } @else {\n        <ng-template ngComboboxPopup [combobox]=\"combobox\">\n          <div\n            ngListbox\n            ngComboboxWidget\n            #listbox=\"ngListbox\"\n            class=\"ax-combo-box-listbox\"\n            [class.ax-hidden]=\"hasNoMatches()\"\n            focusMode=\"activedescendant\"\n            selectionMode=\"explicit\"\n            [multi]=\"multiple()\"\n            [tabindex]=\"-1\"\n            [activeDescendant]=\"listbox.activeDescendant()\"\n            [(value)]=\"selection\"\n            (click)=\"commit($event)\"\n            (keydown.enter)=\"onListEnter($event)\"\n            (keydown.space)=\"commit()\"\n          >\n            @for (item of filteredItems(); track trackItemKey($index, item); let odd = $odd) {\n              <div\n                ngOption\n                class=\"ax-combo-box-option-host\"\n                [class.ax-combo-box-option]=\"!itemTemplate()\"\n                [class.ax-combo-box-option-multiple]=\"multiple()\"\n                [class.ax-state-alternate]=\"alternate() && odd\"\n                [value]=\"item.id\"\n                [label]=\"item.text\"\n              >\n                <ng-container [ngTemplateOutlet]=\"optionContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n              </div>\n            }\n          </div>\n        </ng-template>\n      }\n    }\n    <ng-content select=\"ax-footer\"></ng-content>\n  </div>\n</ax-popover>\n<ng-template #optionContent let-item>\n  @if (multiple()) {\n    <ax-check-box\n      class=\"ax-combo-box-checkbox\"\n      [tabIndex]=\"-1\"\n      [value]=\"isItemSelected(item)\"\n    ></ax-check-box>\n  }\n  @if (itemTemplate()) {\n    <ng-container [ngTemplateOutlet]=\"itemTemplate()!\" [ngTemplateOutletContext]=\"{ $implicit: item }\" />\n  } @else {\n    <span class=\"ax-combo-box-option-label\">{{ item.text }}</span>\n    @if (!multiple() && isItemSelected(item)) {\n      <ax-icon class=\"ax-combo-box-option-check ax-icon ax-icon-check\" aria-hidden=\"true\"></ax-icon>\n    }\n  }\n</ng-template>\n<ng-content select=\"ax-validation-rule\"></ng-content>\n","import { NgModule } from '@angular/core';\nimport { AXComboBoxComponent } from './combo-box.component';\n\n@NgModule({\n  imports: [AXComboBoxComponent],\n  exports: [AXComboBoxComponent],\n})\nexport class AXComboBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}