{"version":3,"file":"listbox.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/listbox/listbox.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/listbox/listbox-module.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  _IdGenerator,\n  ActiveDescendantKeyManager,\n  Highlightable,\n  ListKeyManagerOption,\n} from '../a11y';\nimport {Directionality} from '../bidi';\nimport {coerceArray} from '../coercion';\nimport {SelectionModel} from '../collections';\nimport {\n  A,\n  DOWN_ARROW,\n  END,\n  ENTER,\n  hasModifierKey,\n  HOME,\n  LEFT_ARROW,\n  RIGHT_ARROW,\n  SPACE,\n  UP_ARROW,\n} from '../keycodes';\nimport {Platform} from '../platform';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  ChangeDetectorRef,\n  ContentChildren,\n  Directive,\n  ElementRef,\n  forwardRef,\n  inject,\n  Input,\n  NgZone,\n  numberAttribute,\n  OnDestroy,\n  Output,\n  QueryList,\n  Renderer2,\n  signal,\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {defer, merge, Observable, Subject} from 'rxjs';\nimport {filter, map, startWith, switchMap, takeUntil} from 'rxjs/operators';\n\n/**\n * An implementation of SelectionModel that internally always represents the selection as a\n * multi-selection. This is necessary so that we can recover the full selection if the user\n * switches the listbox from single-selection to multi-selection after initialization.\n *\n * This selection model may report multiple selected values, even if it is in single-selection\n * mode. It is up to the user (CdkListbox) to check for invalid selections.\n */\nclass ListboxSelectionModel<T> extends SelectionModel<T> {\n  constructor(\n    public multiple = false,\n    initiallySelectedValues?: T[],\n    emitChanges = true,\n    compareWith?: (o1: T, o2: T) => boolean,\n  ) {\n    super(true, initiallySelectedValues, emitChanges, compareWith);\n  }\n\n  override isMultipleSelection(): boolean {\n    return this.multiple;\n  }\n\n  override select(...values: T[]) {\n    // The super class is always in multi-selection mode, so we need to override the behavior if\n    // this selection model actually belongs to a single-selection listbox.\n    if (this.multiple) {\n      return super.select(...values);\n    } else {\n      return super.setSelection(...values);\n    }\n  }\n}\n\n/** A selectable option in a listbox. */\n@Directive({\n  selector: '[cdkOption]',\n  exportAs: 'cdkOption',\n  host: {\n    'role': 'option',\n    'class': 'cdk-option',\n    '[id]': 'id',\n    '[attr.aria-selected]': 'isSelected()',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[attr.aria-disabled]': 'disabled',\n    '[class.cdk-option-active]': 'isActive()',\n    '(click)': '_clicked.next($event)',\n    '(focus)': '_handleFocus()',\n  },\n})\nexport class CdkOption<T = unknown> implements ListKeyManagerOption, Highlightable, OnDestroy {\n  /** The id of the option's host element. */\n  @Input()\n  get id() {\n    return this._id || this._generatedId;\n  }\n  set id(value) {\n    this._id = value;\n  }\n  private _id: string | undefined;\n  private _generatedId = inject(_IdGenerator).getId('cdk-option-');\n\n  /** The value of this option. */\n  @Input('cdkOption') value!: T;\n\n  /**\n   * The text used to locate this item during listbox typeahead. If not specified,\n   * the `textContent` of the item will be used.\n   */\n  @Input('cdkOptionTypeaheadLabel') typeaheadLabel: string | null = null;\n\n  /** Whether this option is disabled. */\n  @Input({alias: 'cdkOptionDisabled', transform: booleanAttribute})\n  get disabled(): boolean {\n    return this.listbox.disabled || this._disabled();\n  }\n  set disabled(value: boolean) {\n    this._disabled.set(value);\n  }\n  private _disabled = signal(false);\n\n  /** The tabindex of the option when it is enabled. */\n  @Input({\n    alias: 'tabindex',\n    transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)),\n  })\n  get enabledTabIndex() {\n    return this._enabledTabIndex() === undefined\n      ? this.listbox.enabledTabIndex\n      : this._enabledTabIndex();\n  }\n  set enabledTabIndex(value) {\n    this._enabledTabIndex.set(value);\n  }\n  private _enabledTabIndex = signal<number | null | undefined>(undefined);\n\n  /** The option's host element */\n  readonly element: HTMLElement = inject(ElementRef).nativeElement;\n\n  /** The parent listbox this option belongs to. */\n  protected readonly listbox: CdkListbox<T> = inject(CdkListbox);\n\n  /** Emits when the option is destroyed. */\n  protected destroyed = new Subject<void>();\n\n  /** Emits when the option is clicked. */\n  readonly _clicked = new Subject<MouseEvent>();\n\n  ngOnDestroy() {\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n\n  /** Whether this option is selected. */\n  isSelected() {\n    return this.listbox.isSelected(this);\n  }\n\n  /** Whether this option is active. */\n  isActive() {\n    return this.listbox.isActive(this);\n  }\n\n  /** Toggle the selected state of this option. */\n  toggle() {\n    this.listbox.toggle(this);\n  }\n\n  /** Select this option if it is not selected. */\n  select() {\n    this.listbox.select(this);\n  }\n\n  /** Deselect this option if it is selected. */\n  deselect() {\n    this.listbox.deselect(this);\n  }\n\n  /** Focus this option. */\n  focus() {\n    this.element.focus();\n  }\n\n  /** Get the label for this element which is required by the FocusableOption interface. */\n  getLabel() {\n    return (this.typeaheadLabel ?? this.element.textContent?.trim()) || '';\n  }\n\n  /**\n   * No-op implemented as a part of `Highlightable`.\n   * @docs-private\n   */\n  setActiveStyles() {\n    // If the listbox is using `aria-activedescendant` the option won't have focus so the\n    // browser won't scroll them into view automatically so we need to do it ourselves.\n    if (this.listbox.useActiveDescendant) {\n      this.element.scrollIntoView({block: 'nearest', inline: 'nearest'});\n    }\n  }\n\n  /**\n   * No-op implemented as a part of `Highlightable`.\n   * @docs-private\n   */\n  setInactiveStyles() {}\n\n  /** Handle focus events on the option. */\n  protected _handleFocus() {\n    // Options can wind up getting focused in active descendant mode if the user clicks on them.\n    // In this case, we push focus back to the parent listbox to prevent an extra tab stop when\n    // the user performs a shift+tab.\n    if (this.listbox.useActiveDescendant) {\n      this.listbox._setActiveOption(this);\n      this.listbox.focus();\n    }\n  }\n\n  /** Get the tabindex for this option. */\n  protected _getTabIndex() {\n    if (this.listbox.useActiveDescendant || this.disabled) {\n      return -1;\n    }\n    return this.isActive() ? this.enabledTabIndex : -1;\n  }\n}\n\n@Directive({\n  selector: '[cdkListbox]',\n  exportAs: 'cdkListbox',\n  host: {\n    'role': 'listbox',\n    'class': 'cdk-listbox',\n    '[id]': 'id',\n    '[attr.tabindex]': '_getTabIndex()',\n    '[attr.aria-disabled]': 'disabled',\n    '[attr.aria-multiselectable]': 'multiple',\n    '[attr.aria-activedescendant]': '_getAriaActiveDescendant()',\n    '[attr.aria-orientation]': 'orientation',\n    '(focus)': '_handleFocus()',\n    '(keydown)': '_handleKeydown($event)',\n    '(focusout)': '_handleFocusOut($event)',\n    '(focusin)': '_handleFocusIn()',\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => CdkListbox),\n      multi: true,\n    },\n  ],\n})\nexport class CdkListbox<T = unknown> implements AfterContentInit, OnDestroy, ControlValueAccessor {\n  private _cleanupWindowBlur: (() => void) | undefined;\n\n  /** The id of the option's host element. */\n  @Input()\n  get id() {\n    return this._id || this._generatedId;\n  }\n  set id(value) {\n    this._id = value;\n  }\n  private _id: string | undefined;\n  private _generatedId = inject(_IdGenerator).getId('cdk-listbox-');\n\n  /** The tabindex to use when the listbox is enabled. */\n  @Input('tabindex')\n  get enabledTabIndex() {\n    return this._enabledTabIndex() === undefined ? 0 : this._enabledTabIndex();\n  }\n  set enabledTabIndex(value) {\n    this._enabledTabIndex.set(value);\n  }\n  private _enabledTabIndex = signal<number | null | undefined>(undefined);\n\n  /** The value selected in the listbox, represented as an array of option values. */\n  @Input('cdkListboxValue')\n  get value(): readonly T[] {\n    return this._invalid ? [] : this.selectionModel.selected;\n  }\n  set value(value: readonly T[]) {\n    this._setSelection(value);\n  }\n\n  /**\n   * Whether the listbox allows multiple options to be selected. If the value switches from `true`\n   * to `false`, and more than one option is selected, all options are deselected.\n   */\n  @Input({alias: 'cdkListboxMultiple', transform: booleanAttribute})\n  get multiple(): boolean {\n    return this.selectionModel.multiple;\n  }\n  set multiple(value: boolean) {\n    this.selectionModel.multiple = value;\n\n    if (this.options) {\n      this._updateInternalValue();\n    }\n  }\n\n  /** Whether the listbox is disabled. */\n  @Input({alias: 'cdkListboxDisabled', transform: booleanAttribute})\n  get disabled() {\n    return this._disabled();\n  }\n  set disabled(value: boolean) {\n    this._disabled.set(value);\n  }\n  private _disabled = signal(false);\n\n  /** Whether the listbox will use active descendant or will move focus onto the options. */\n  @Input({alias: 'cdkListboxUseActiveDescendant', transform: booleanAttribute})\n  get useActiveDescendant() {\n    return this._useActiveDescendant();\n  }\n  set useActiveDescendant(value: boolean) {\n    this._useActiveDescendant.set(value);\n  }\n  private _useActiveDescendant = signal(false);\n\n  /** The orientation of the listbox. Only affects keyboard interaction, not visual layout. */\n  @Input('cdkListboxOrientation')\n  get orientation() {\n    return this._orientation;\n  }\n  set orientation(value: 'horizontal' | 'vertical') {\n    this._orientation = value === 'horizontal' ? 'horizontal' : 'vertical';\n    if (value === 'horizontal') {\n      this.listKeyManager?.withHorizontalOrientation(this._dir?.value || 'ltr');\n    } else {\n      this.listKeyManager?.withVerticalOrientation();\n    }\n  }\n  private _orientation: 'horizontal' | 'vertical' = 'vertical';\n\n  /** The function used to compare option values. */\n  @Input('cdkListboxCompareWith')\n  get compareWith(): undefined | ((o1: T, o2: T) => boolean) {\n    return this.selectionModel.compareWith;\n  }\n  set compareWith(fn: undefined | ((o1: T, o2: T) => boolean)) {\n    this.selectionModel.compareWith = fn;\n  }\n\n  /**\n   * Whether the keyboard navigation should wrap when the user presses arrow down on the last item\n   * or arrow up on the first item.\n   */\n  @Input({alias: 'cdkListboxNavigationWrapDisabled', transform: booleanAttribute})\n  get navigationWrapDisabled() {\n    return this._navigationWrapDisabled;\n  }\n  set navigationWrapDisabled(wrap: boolean) {\n    this._navigationWrapDisabled = wrap;\n    this.listKeyManager?.withWrap(!this._navigationWrapDisabled);\n  }\n  private _navigationWrapDisabled = false;\n\n  /** Whether keyboard navigation should skip over disabled items. */\n  @Input({alias: 'cdkListboxNavigatesDisabledOptions', transform: booleanAttribute})\n  get navigateDisabledOptions() {\n    return this._navigateDisabledOptions;\n  }\n  set navigateDisabledOptions(skip: boolean) {\n    this._navigateDisabledOptions = skip;\n    this.listKeyManager?.skipPredicate(\n      this._navigateDisabledOptions ? this._skipNonePredicate : this._skipDisabledPredicate,\n    );\n  }\n  private _navigateDisabledOptions = false;\n\n  /** Emits when the selected value(s) in the listbox change. */\n  @Output('cdkListboxValueChange') readonly valueChange = new Subject<ListboxValueChangeEvent<T>>();\n\n  /** The child options in this listbox. */\n  @ContentChildren(CdkOption, {descendants: true}) protected options!: QueryList<CdkOption<T>>;\n\n  /** The selection model used by the listbox. */\n  protected selectionModel = new ListboxSelectionModel<T>();\n\n  /** The key manager that manages keyboard navigation for this listbox. */\n  protected listKeyManager!: ActiveDescendantKeyManager<CdkOption<T>>;\n\n  /** Emits when the listbox is destroyed. */\n  protected readonly destroyed = new Subject<void>();\n\n  /** The host element of the listbox. */\n  protected readonly element: HTMLElement = inject(ElementRef).nativeElement;\n\n  /** The Angular zone. */\n  protected readonly ngZone = inject(NgZone);\n\n  /** The change detector for this listbox. */\n  protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n  /** Whether the currently selected value in the selection model is invalid. */\n  private _invalid = false;\n\n  /** The last user-triggered option. */\n  private _lastTriggered: CdkOption<T> | null = null;\n\n  /** Callback called when the listbox has been touched */\n  private _onTouched = () => {};\n\n  /** Callback called when the listbox value changes */\n  private _onChange: (value: readonly T[]) => void = () => {};\n\n  /** Emits when an option has been clicked. */\n  private _optionClicked = defer(() =>\n    (this.options.changes as Observable<CdkOption<T>[]>).pipe(\n      startWith(this.options),\n      switchMap(options =>\n        merge(...options.map(option => option._clicked.pipe(map(event => ({option, event}))))),\n      ),\n    ),\n  );\n\n  /** The directionality of the page. */\n  private readonly _dir = inject(Directionality, {optional: true});\n\n  /** Whether the component is being rendered in the browser. */\n  private readonly _isBrowser: boolean = inject(Platform).isBrowser;\n\n  /** A predicate that skips disabled options. */\n  private readonly _skipDisabledPredicate = (option: CdkOption<T>) => option.disabled;\n\n  /** A predicate that does not skip any options. */\n  private readonly _skipNonePredicate = () => false;\n\n  /** Whether the listbox currently has focus. */\n  private _hasFocus = false;\n\n  /** A reference to the option that was active before the listbox lost focus. */\n  private _previousActiveOption: CdkOption<T> | null = null;\n\n  constructor() {\n    if (this._isBrowser) {\n      const renderer = inject(Renderer2);\n\n      this._cleanupWindowBlur = this.ngZone.runOutsideAngular(() => {\n        return renderer.listen('window', 'blur', () => {\n          if (this.element.contains(document.activeElement) && this._previousActiveOption) {\n            this._setActiveOption(this._previousActiveOption);\n            this._previousActiveOption = null;\n          }\n        });\n      });\n    }\n  }\n\n  ngAfterContentInit() {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      this._verifyNoOptionValueCollisions();\n      this._verifyOptionValues();\n    }\n\n    this._initKeyManager();\n\n    // Update the internal value whenever the options or the model value changes.\n    merge(this.selectionModel.changed, this.options.changes)\n      .pipe(startWith(null), takeUntil(this.destroyed))\n      .subscribe(() => this._updateInternalValue());\n\n    this._optionClicked\n      .pipe(\n        filter(({option}) => !option.disabled),\n        takeUntil(this.destroyed),\n      )\n      .subscribe(({option, event}) => this._handleOptionClicked(option, event));\n  }\n\n  ngOnDestroy() {\n    this._cleanupWindowBlur?.();\n    this.listKeyManager?.destroy();\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n\n  /**\n   * Toggle the selected state of the given option.\n   * @param option The option to toggle\n   */\n  toggle(option: CdkOption<T>) {\n    this.toggleValue(option.value);\n  }\n\n  /**\n   * Toggle the selected state of the given value.\n   * @param value The value to toggle\n   */\n  toggleValue(value: T) {\n    if (this._invalid) {\n      this.selectionModel.clear(false);\n    }\n    this.selectionModel.toggle(value);\n  }\n\n  /**\n   * Select the given option.\n   * @param option The option to select\n   */\n  select(option: CdkOption<T>) {\n    this.selectValue(option.value);\n  }\n\n  /**\n   * Select the given value.\n   * @param value The value to select\n   */\n  selectValue(value: T) {\n    if (this._invalid) {\n      this.selectionModel.clear(false);\n    }\n    this.selectionModel.select(value);\n  }\n\n  /**\n   * Deselect the given option.\n   * @param option The option to deselect\n   */\n  deselect(option: CdkOption<T>) {\n    this.deselectValue(option.value);\n  }\n\n  /**\n   * Deselect the given value.\n   * @param value The value to deselect\n   */\n  deselectValue(value: T) {\n    if (this._invalid) {\n      this.selectionModel.clear(false);\n    }\n    this.selectionModel.deselect(value);\n  }\n\n  /**\n   * Set the selected state of all options.\n   * @param isSelected The new selected state to set\n   */\n  setAllSelected(isSelected: boolean) {\n    if (!isSelected) {\n      this.selectionModel.clear();\n    } else {\n      if (this._invalid) {\n        this.selectionModel.clear(false);\n      }\n      this.selectionModel.select(...this.options.map(option => option.value));\n    }\n  }\n\n  /**\n   * Get whether the given option is selected.\n   * @param option The option to get the selected state of\n   */\n  isSelected(option: CdkOption<T>) {\n    return this.isValueSelected(option.value);\n  }\n\n  /**\n   * Get whether the given option is active.\n   * @param option The option to get the active state of\n   */\n  isActive(option: CdkOption<T>): boolean {\n    return !!(this.listKeyManager?.activeItem === option);\n  }\n\n  /**\n   * Get whether the given value is selected.\n   * @param value The value to get the selected state of\n   */\n  isValueSelected(value: T) {\n    if (this._invalid) {\n      return false;\n    }\n    return this.selectionModel.isSelected(value);\n  }\n\n  /**\n   * Registers a callback to be invoked when the listbox's value changes from user input.\n   * @param fn The callback to register\n   * @docs-private\n   */\n  registerOnChange(fn: (value: readonly T[]) => void): void {\n    this._onChange = fn;\n  }\n\n  /**\n   * Registers a callback to be invoked when the listbox is blurred by the user.\n   * @param fn The callback to register\n   * @docs-private\n   */\n  registerOnTouched(fn: () => {}): void {\n    this._onTouched = fn;\n  }\n\n  /**\n   * Sets the listbox's value.\n   * @param value The new value of the listbox\n   * @docs-private\n   */\n  writeValue(value: readonly T[]): void {\n    this._setSelection(value);\n    this._verifyOptionValues();\n  }\n\n  /**\n   * Sets the disabled state of the listbox.\n   * @param isDisabled The new disabled state\n   * @docs-private\n   */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    this.changeDetectorRef.markForCheck();\n  }\n\n  /** Focus the listbox's host element. */\n  focus() {\n    this.element.focus();\n  }\n\n  /**\n   * Triggers the given option in response to user interaction.\n   * - In single selection mode: selects the option and deselects any other selected option.\n   * - In multi selection mode: toggles the selected state of the option.\n   * @param option The option to trigger\n   */\n  protected triggerOption(option: CdkOption<T> | null) {\n    if (option && !option.disabled) {\n      this._lastTriggered = option;\n      const changed = this.multiple\n        ? this.selectionModel.toggle(option.value)\n        : this.selectionModel.select(option.value);\n      if (changed) {\n        this._onChange(this.value);\n        this.valueChange.next({\n          value: this.value,\n          listbox: this,\n          option: option,\n        });\n      }\n    }\n  }\n\n  /**\n   * Trigger the given range of options in response to user interaction.\n   * Should only be called in multi-selection mode.\n   * @param trigger The option that was triggered\n   * @param from The start index of the options to toggle\n   * @param to The end index of the options to toggle\n   * @param on Whether to toggle the option range on\n   */\n  protected triggerRange(trigger: CdkOption<T> | null, from: number, to: number, on: boolean) {\n    if (this.disabled || (trigger && trigger.disabled)) {\n      return;\n    }\n    this._lastTriggered = trigger;\n    const isEqual = this.compareWith ?? Object.is;\n    const updateValues = [...this.options]\n      .slice(Math.max(0, Math.min(from, to)), Math.min(this.options.length, Math.max(from, to) + 1))\n      .filter(option => !option.disabled)\n      .map(option => option.value);\n    const selected = [...this.value];\n    for (const updateValue of updateValues) {\n      const selectedIndex = selected.findIndex(selectedValue =>\n        isEqual(selectedValue, updateValue),\n      );\n      if (on && selectedIndex === -1) {\n        selected.push(updateValue);\n      } else if (!on && selectedIndex !== -1) {\n        selected.splice(selectedIndex, 1);\n      }\n    }\n    let changed = this.selectionModel.setSelection(...selected);\n    if (changed) {\n      this._onChange(this.value);\n      this.valueChange.next({\n        value: this.value,\n        listbox: this,\n        option: trigger,\n      });\n    }\n  }\n\n  /**\n   * Sets the given option as active.\n   * @param option The option to make active\n   */\n  _setActiveOption(option: CdkOption<T>) {\n    this.listKeyManager.setActiveItem(option);\n  }\n\n  /** Called when the listbox receives focus. */\n  protected _handleFocus() {\n    if (!this.useActiveDescendant) {\n      if (this.selectionModel.selected.length > 0) {\n        this._setNextFocusToSelectedOption();\n      } else {\n        this.listKeyManager.setNextItemActive();\n      }\n\n      this._focusActiveOption();\n    }\n  }\n\n  /** Called when the user presses keydown on the listbox. */\n  protected _handleKeydown(event: KeyboardEvent) {\n    if (this.disabled) {\n      return;\n    }\n\n    const {keyCode} = event;\n    const previousActiveIndex = this.listKeyManager.activeItemIndex;\n    const ctrlKeys = ['ctrlKey', 'metaKey'] as const;\n\n    if (this.multiple && keyCode === A && hasModifierKey(event, ...ctrlKeys)) {\n      // Toggle all options off if they're all selected, otherwise toggle them all on.\n      this.triggerRange(\n        null,\n        0,\n        this.options.length - 1,\n        this.options.length !== this.value.length,\n      );\n      event.preventDefault();\n      return;\n    }\n\n    if (\n      this.multiple &&\n      (keyCode === SPACE || keyCode === ENTER) &&\n      hasModifierKey(event, 'shiftKey')\n    ) {\n      if (this.listKeyManager.activeItem && this.listKeyManager.activeItemIndex != null) {\n        this.triggerRange(\n          this.listKeyManager.activeItem,\n          this._getLastTriggeredIndex() ?? this.listKeyManager.activeItemIndex,\n          this.listKeyManager.activeItemIndex,\n          !this.listKeyManager.activeItem.isSelected(),\n        );\n      }\n      event.preventDefault();\n      return;\n    }\n\n    if (\n      this.multiple &&\n      keyCode === HOME &&\n      hasModifierKey(event, ...ctrlKeys) &&\n      hasModifierKey(event, 'shiftKey')\n    ) {\n      const trigger = this.listKeyManager.activeItem;\n      if (trigger) {\n        const from = this.listKeyManager.activeItemIndex!;\n        this.listKeyManager.setFirstItemActive();\n        this.triggerRange(\n          trigger,\n          from,\n          this.listKeyManager.activeItemIndex!,\n          !trigger.isSelected(),\n        );\n      }\n      event.preventDefault();\n      return;\n    }\n\n    if (\n      this.multiple &&\n      keyCode === END &&\n      hasModifierKey(event, ...ctrlKeys) &&\n      hasModifierKey(event, 'shiftKey')\n    ) {\n      const trigger = this.listKeyManager.activeItem;\n      if (trigger) {\n        const from = this.listKeyManager.activeItemIndex!;\n        this.listKeyManager.setLastItemActive();\n        this.triggerRange(\n          trigger,\n          from,\n          this.listKeyManager.activeItemIndex!,\n          !trigger.isSelected(),\n        );\n      }\n      event.preventDefault();\n      return;\n    }\n\n    if (keyCode === SPACE || keyCode === ENTER) {\n      this.triggerOption(this.listKeyManager.activeItem);\n      event.preventDefault();\n      return;\n    }\n\n    const isNavKey =\n      keyCode === UP_ARROW ||\n      keyCode === DOWN_ARROW ||\n      keyCode === LEFT_ARROW ||\n      keyCode === RIGHT_ARROW ||\n      keyCode === HOME ||\n      keyCode === END;\n    this.listKeyManager.onKeydown(event);\n    // Will select an option if shift was pressed while navigating to the option\n    if (isNavKey && event.shiftKey && previousActiveIndex !== this.listKeyManager.activeItemIndex) {\n      this.triggerOption(this.listKeyManager.activeItem);\n    }\n  }\n\n  /** Called when a focus moves into the listbox. */\n  protected _handleFocusIn() {\n    // Note that we use a `focusin` handler for this instead of the existing `focus` handler,\n    // because focus won't land on the listbox if `useActiveDescendant` is enabled.\n    this._hasFocus = true;\n  }\n\n  /**\n   * Called when the focus leaves an element in the listbox.\n   * @param event The focusout event\n   */\n  protected _handleFocusOut(event: FocusEvent) {\n    // Some browsers (e.g. Chrome and Firefox) trigger the focusout event when the user returns back to the document.\n    // To prevent losing the active option in this case, we store it in `_previousActiveOption` and restore it on the window `blur` event\n    // This ensures that the `activeItem` matches the actual focused element when the user returns to the document.\n    this._previousActiveOption = this.listKeyManager.activeItem;\n\n    const otherElement = event.relatedTarget as Element;\n    if (this.element !== otherElement && !this.element.contains(otherElement)) {\n      this._onTouched();\n      this._hasFocus = false;\n      this._setNextFocusToSelectedOption();\n    }\n  }\n\n  /** Get the id of the active option if active descendant is being used. */\n  protected _getAriaActiveDescendant(): string | null | undefined {\n    return this.useActiveDescendant ? this.listKeyManager?.activeItem?.id : null;\n  }\n\n  /** Get the tabindex for the listbox. */\n  protected _getTabIndex() {\n    if (this.disabled) {\n      return -1;\n    }\n    return this.useActiveDescendant || !this.listKeyManager.activeItem ? this.enabledTabIndex : -1;\n  }\n\n  /** Initialize the key manager. */\n  private _initKeyManager() {\n    this.listKeyManager = new ActiveDescendantKeyManager(this.options)\n      .withWrap(!this._navigationWrapDisabled)\n      .withTypeAhead()\n      .withHomeAndEnd()\n      .withAllowedModifierKeys(['shiftKey'])\n      .skipPredicate(\n        this._navigateDisabledOptions ? this._skipNonePredicate : this._skipDisabledPredicate,\n      );\n\n    if (this.orientation === 'vertical') {\n      this.listKeyManager.withVerticalOrientation();\n    } else {\n      this.listKeyManager.withHorizontalOrientation(this._dir?.value || 'ltr');\n    }\n\n    if (this.selectionModel.selected.length) {\n      Promise.resolve().then(() => this._setNextFocusToSelectedOption());\n    }\n\n    this.listKeyManager.change.subscribe(() => this._focusActiveOption());\n\n    this.options.changes.pipe(takeUntil(this.destroyed)).subscribe(() => {\n      const activeOption = this.listKeyManager.activeItem;\n\n      // If the active option was deleted, we need to reset\n      // the key manager so it can allow focus back in.\n      if (activeOption && !this.options.find(option => option === activeOption)) {\n        this.listKeyManager.setActiveItem(-1);\n        this.changeDetectorRef.markForCheck();\n      }\n    });\n  }\n\n  /** Focus the active option. */\n  private _focusActiveOption() {\n    if (!this.useActiveDescendant) {\n      this.listKeyManager.activeItem?.focus();\n    }\n    this.changeDetectorRef.markForCheck();\n  }\n\n  /**\n   * Set the selected values.\n   * @param value The list of new selected values.\n   */\n  private _setSelection(value: readonly T[]) {\n    if (this._invalid) {\n      this.selectionModel.clear(false);\n    }\n    this.selectionModel.setSelection(...this._coerceValue(value));\n\n    if (!this._hasFocus) {\n      this._setNextFocusToSelectedOption();\n    }\n  }\n\n  /** Sets the first selected option as first in the keyboard focus order. */\n  private _setNextFocusToSelectedOption() {\n    // Null check the options since they only get defined after `ngAfterContentInit`.\n    const selected = this.options?.find(option => option.isSelected());\n\n    if (selected) {\n      this.listKeyManager.updateActiveItem(selected);\n    }\n  }\n\n  /** Update the internal value of the listbox based on the selection model. */\n  private _updateInternalValue() {\n    const indexCache = new Map<T, number>();\n    this.selectionModel.sort((a: T, b: T) => {\n      const aIndex = this._getIndexForValue(indexCache, a);\n      const bIndex = this._getIndexForValue(indexCache, b);\n      return aIndex - bIndex;\n    });\n    const selected = this.selectionModel.selected;\n    this._invalid =\n      (!this.multiple && selected.length > 1) || !!this._getInvalidOptionValues(selected).length;\n    this.changeDetectorRef.markForCheck();\n  }\n\n  /**\n   * Gets the index of the given value in the given list of options.\n   * @param cache The cache of indices found so far\n   * @param value The value to find\n   * @return The index of the value in the options list\n   */\n  private _getIndexForValue(cache: Map<T, number>, value: T) {\n    const isEqual = this.compareWith || Object.is;\n    if (!cache.has(value)) {\n      let index = -1;\n      for (let i = 0; i < this.options.length; i++) {\n        if (isEqual(value, this.options.get(i)!.value)) {\n          index = i;\n          break;\n        }\n      }\n      cache.set(value, index);\n    }\n    return cache.get(value)!;\n  }\n\n  /**\n   * Handle the user clicking an option.\n   * @param option The option that was clicked.\n   */\n  private _handleOptionClicked(option: CdkOption<T>, event: MouseEvent) {\n    event.preventDefault();\n    this.listKeyManager.setActiveItem(option);\n    if (event.shiftKey && this.multiple) {\n      this.triggerRange(\n        option,\n        this._getLastTriggeredIndex() ?? this.listKeyManager.activeItemIndex!,\n        this.listKeyManager.activeItemIndex!,\n        !option.isSelected(),\n      );\n    } else {\n      this.triggerOption(option);\n    }\n  }\n\n  /** Verifies that no two options represent the same value under the compareWith function. */\n  private _verifyNoOptionValueCollisions() {\n    this.options.changes.pipe(startWith(this.options), takeUntil(this.destroyed)).subscribe(() => {\n      const isEqual = this.compareWith ?? Object.is;\n      for (let i = 0; i < this.options.length; i++) {\n        const option = this.options.get(i)!;\n        let duplicate: CdkOption<T> | null = null;\n        for (let j = i + 1; j < this.options.length; j++) {\n          const other = this.options.get(j)!;\n          if (isEqual(option.value, other.value)) {\n            duplicate = other;\n            break;\n          }\n        }\n        if (duplicate) {\n          // TODO(mmalerba): Link to docs about this.\n          if (this.compareWith) {\n            console.warn(\n              `Found multiple CdkOption representing the same value under the given compareWith function`,\n              {\n                option1: option.element,\n                option2: duplicate.element,\n                compareWith: this.compareWith,\n              },\n            );\n          } else {\n            console.warn(`Found multiple CdkOption with the same value`, {\n              option1: option.element,\n              option2: duplicate.element,\n            });\n          }\n          return;\n        }\n      }\n    });\n  }\n\n  /** Verifies that the option values are valid. */\n  private _verifyOptionValues() {\n    if (this.options && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      const selected = this.selectionModel.selected;\n      const invalidValues = this._getInvalidOptionValues(selected);\n\n      if (!this.multiple && selected.length > 1) {\n        throw Error('Listbox cannot have more than one selected value in single selection mode.');\n      }\n\n      if (invalidValues.length) {\n        throw Error('Listbox has selected values that do not match any of its options.');\n      }\n    }\n  }\n\n  /**\n   * Coerces a value into an array representing a listbox selection.\n   * @param value The value to coerce\n   * @return An array\n   */\n  private _coerceValue(value: readonly T[]) {\n    return value == null ? [] : coerceArray(value);\n  }\n\n  /**\n   * Get the sublist of values that do not represent valid option values in this listbox.\n   * @param values The list of values\n   * @return The sublist of values that are not valid option values\n   */\n  private _getInvalidOptionValues(values: readonly T[]) {\n    const isEqual = this.compareWith || Object.is;\n    const validValues = (this.options || []).map(option => option.value);\n    return values.filter(value => !validValues.some(validValue => isEqual(value, validValue)));\n  }\n\n  /** Get the index of the last triggered option. */\n  private _getLastTriggeredIndex() {\n    const index = this.options.toArray().indexOf(this._lastTriggered!);\n    return index === -1 ? null : index;\n  }\n}\n\n/** Change event that is fired whenever the value of the listbox changes. */\nexport interface ListboxValueChangeEvent<T> {\n  /** The new value of the listbox. */\n  readonly value: readonly T[];\n\n  /** Reference to the listbox that emitted the event. */\n  readonly listbox: CdkListbox<T>;\n\n  /** Reference to the option that was triggered. */\n  readonly option: CdkOption<T> | null;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkListbox, CdkOption} from './listbox';\n\nconst EXPORTED_DECLARATIONS = [CdkListbox, CdkOption];\n\n@NgModule({\n  imports: [...EXPORTED_DECLARATIONS],\n  exports: [...EXPORTED_DECLARATIONS],\n})\nexport class CdkListboxModule {}\n"],"names":[],"mappings":"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"}