{"version":3,"file":"ngx-virtual-select-field-filterable.mjs","sources":["../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option-for/virtual-select-field-option-for.directive.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-trigger/virtual-select-field-trigger.directive.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.models.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.component.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.component.html","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.constants.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/keycodes.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.component.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.component.html","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/index.ts","../../../../packages/ngx-virtual-select-field/src/ngx-virtual-select-field-filterable.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport {\n  NgxVirtualSelectFieldOptionModel,\n  NgxVirtualSelectFieldOptionTemplateContextModel,\n} from './virtual-select-field-option-for.models';\n\n@Directive({\n  selector: '[ngxVirtualSelectFieldOptionFor]',\n  standalone: true,\n})\nexport class NgxVirtualSelectFieldOptionForDirective<TValue> {\n  /**\n   * The options collection to render.\n   * @required\n   */\n  @Input({ required: true, alias: 'ngxVirtualSelectFieldOptionForOf' })\n  set options(options: NgxVirtualSelectFieldOptionModel<TValue>[]) {\n    this.options$.next(options);\n  }\n\n  options$ = new BehaviorSubject<NgxVirtualSelectFieldOptionModel<TValue>[]>(\n    []\n  );\n\n  constructor(\n    public template: TemplateRef<\n      NgxVirtualSelectFieldOptionTemplateContextModel<TValue>\n    >\n  ) {}\n\n  static ngTemplateContextGuard<TValue>(\n    _dir: NgxVirtualSelectFieldOptionForDirective<TValue>,\n    ctx: unknown\n  ): ctx is NgxVirtualSelectFieldOptionTemplateContextModel<TValue> {\n    return true;\n  }\n}\n","import { Directive, InjectionToken } from '@angular/core';\n\nexport const NGX_VIRTUAL_SELECT_FIELD_TRIGGER =\n  new InjectionToken<NgxVirtualSelectFieldTriggerDirective>(\n    'NGX_VIRTUAL_SELECT_FIELD_TRIGGER'\n  );\n\n@Directive({\n  selector: 'ngx-virtual-select-field-trigger',\n  providers: [\n    {\n      provide: NGX_VIRTUAL_SELECT_FIELD_TRIGGER,\n      useExisting: NgxVirtualSelectFieldTriggerDirective,\n    },\n  ],\n  standalone: true,\n})\nexport class NgxVirtualSelectFieldTriggerDirective {}\n","import { InjectionToken, Signal } from '@angular/core';\n\nexport interface NgxVirtualSelectFieldOptionParent {\n  multiple?: boolean;\n  maxSelectedItems?: number;\n  isMaxSelected?: Signal<boolean>;\n  isOptionSelected?(value: unknown): boolean;\n}\n\nexport const NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT =\n  new InjectionToken<NgxVirtualSelectFieldOptionParent>(\n    'NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT'\n  );\n","import {\n  Component,\n  Input,\n  Inject,\n  ChangeDetectionStrategy,\n  EventEmitter,\n  Output,\n  signal,\n  booleanAttribute,\n  ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n  MatPseudoCheckboxModule,\n  MatRippleModule,\n} from '@angular/material/core';\n\nimport {\n  NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT,\n  NgxVirtualSelectFieldOptionParent,\n} from './virtual-select-field-option.models';\nimport { Highlightable } from '@angular/cdk/a11y';\n\n@Component({\n  selector: 'ngx-virtual-select-field-option',\n  standalone: true,\n  imports: [CommonModule, MatPseudoCheckboxModule, MatRippleModule],\n  templateUrl: './virtual-select-field-option.component.html',\n  styleUrl: './virtual-select-field-option.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    role: 'option',\n    '(click)': 'onClick()',\n    '[class.ngx-virtual-select-field-option--active]': 'active()',\n    '[class.ngx-virtual-select-field-option--selected]': 'selected()',\n    '[class.ngx-virtual-select-field-option--multiple]': 'multiple',\n    '[class.ngx-virtual-select-field-option--disabled]': 'disabled || isMaxDisabled',\n    class: 'ngx-virtual-select-field-option',\n  },\n})\nexport class NgxVirtualSelectFieldOptionComponent<TValue>\n  implements Highlightable\n{\n  /**\n   * The value of the option.\n   * @required\n   */\n  @Input({ required: true })\n  value!: TValue;\n\n  /**\n   * Whether the option is disabled.\n   */\n  @Input({ transform: booleanAttribute })\n  disabled: boolean = false;\n\n  @Output()\n  selectedChange = new EventEmitter<\n    NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue>\n  >();\n\n  protected readonly multiple = this._optionParent?.multiple ?? false;\n\n  protected readonly active = signal(false);\n\n  protected readonly selected = signal(false);\n\n  /**\n   * Whether this option is disabled because max selection limit is reached\n   * and this option is not currently selected.\n   * Using a getter instead of computed because virtual scroll reuses components\n   * and the value input changes without triggering signal updates.\n   */\n  protected get isMaxDisabled(): boolean {\n    if (!this._optionParent?.isMaxSelected) {\n      return false;\n    }\n    const maxReached = this._optionParent.isMaxSelected();\n    if (!maxReached) {\n      return false;\n    }\n    // If max is reached, disable if this option is NOT selected\n    const isSelected = this._optionParent.isOptionSelected?.(this.value) ?? false;\n    return !isSelected;\n  }\n\n  protected readonly hostNativeElement: HTMLElement;\n\n  constructor(\n    @Inject(NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT)\n    private _optionParent: NgxVirtualSelectFieldOptionParent,\n    private _elementRef: ElementRef<HTMLElement>\n  ) {\n    this.hostNativeElement = this._elementRef.nativeElement;\n  }\n\n  // #region Highlightable\n\n  setActiveStyles(): void {\n    if (!this.active()) {\n      this.active.set(true);\n    }\n  }\n\n  setInactiveStyles(): void {\n    if (this.active()) {\n      this.active.set(false);\n    }\n  }\n\n  // #endregion Highlightable\n\n  deselect() {\n    this.selected.set(false);\n  }\n\n  select() {\n    this.selected.set(true);\n  }\n\n  protected onClick() {\n    if (this.disabled || this.isMaxDisabled) {\n      return;\n    }\n\n    this.selected.set(this.multiple ? !this.selected() : true);\n\n    this.selectedChange.emit({\n      source: this,\n      value: this.value,\n      selected: this.selected(),\n    });\n  }\n}\n\nexport interface NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue> {\n  source: NgxVirtualSelectFieldOptionComponent<TValue>;\n  value: TValue;\n  selected: boolean;\n}\n","@if(multiple){\n<mat-pseudo-checkbox\n  [state]=\"selected() ? 'checked' : 'unchecked'\"\n></mat-pseudo-checkbox>\n}\n\n<span class=\"ngx-virtual-select-field-option__label\"\n  ><ng-content></ng-content\n></span>\n\n@if (!multiple && selected() ) {\n<mat-pseudo-checkbox state=\"checked\" appearance=\"minimal\"></mat-pseudo-checkbox>\n}\n\n<div\n  class=\"ngx-virtual-select-field-option__ripple\"\n  matRipple\n  [matRippleTrigger]=\"hostNativeElement\"\n  [matRippleDisabled]=\"disabled\"\n></div>\n","import { ConnectedPosition } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nimport { NgxVirtualSelectFieldConfig } from './virtual-select-field.models';\n\nexport const POSITIONS: ConnectedPosition[] = [\n  {\n    originX: 'start',\n    originY: 'bottom',\n    overlayX: 'start',\n    overlayY: 'top',\n  },\n  {\n    originX: 'end',\n    originY: 'bottom',\n    overlayX: 'end',\n    overlayY: 'top',\n  },\n  {\n    originX: 'start',\n    originY: 'top',\n    overlayX: 'start',\n    overlayY: 'bottom',\n    panelClass: 'ngx-virtual-select-field-overlay--above',\n  },\n  {\n    originX: 'end',\n    originY: 'top',\n    overlayX: 'end',\n    overlayY: 'bottom',\n    panelClass: 'ngx-virtual-select-field-overlay--above',\n  },\n];\n\nexport const NGX_VIRTUAL_SELECT_FIELD_CONFIG = new InjectionToken<NgxVirtualSelectFieldConfig>(\n  'NGX_VIRTUAL_SELECT_FIELD_CONFIG'\n);\n\nexport const PANEL_WIDTH_AUTO = 'auto';\n\nexport const PANEL_VIEWPORT_PAGE_SIZE = 8;\n\nexport const OPTION_HEIGHT = 48;\n","export const ARROW_DOWN_KEY = 'ArrowDown';\n\nexport const ARROW_UP_KEY = 'ArrowUp';\n\nexport const ARROW_RIGHT_KEY = 'ArrowRight';\n\nexport const ARROW_LEFT_KEY = 'ArrowLeft';\n\nexport const ENTER_CODE = 'Enter';\n\nexport const SPACE_CODE = 'Space';\n\nexport const KEY_A_CODE = 'KeyA';\n","//#region imports\n\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ContentChildren,\n  DestroyRef,\n  ElementRef,\n  Inject,\n  Injector,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  QueryList,\n  Signal,\n  TrackByFunction,\n  ViewChild,\n  booleanAttribute,\n  computed,\n  inject,\n  numberAttribute,\n  output,\n  signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ListKeyManager } from '@angular/cdk/a11y';\nimport {\n  CdkConnectedOverlay,\n  CdkOverlayOrigin,\n  OverlayModule,\n  ViewportRuler,\n} from '@angular/cdk/overlay';\nimport {\n  CdkVirtualScrollViewport,\n  ScrollingModule,\n} from '@angular/cdk/scrolling';\nimport {\n  MAT_FORM_FIELD,\n  MatFormField,\n  MatFormFieldControl,\n  MatFormFieldModule,\n} from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n  Observable,\n  Subject,\n  debounceTime,\n  map,\n  merge,\n  startWith,\n  switchMap,\n  take,\n  tap,\n} from 'rxjs';\n\nimport {\n  NgxVirtualSelectFieldOptionForDirective,\n  NgxVirtualSelectFieldOptionModel,\n} from './virtual-select-field-option-for';\nimport {\n  NGX_VIRTUAL_SELECT_FIELD_TRIGGER,\n  NgxVirtualSelectFieldTriggerDirective,\n} from './virtual-select-field-trigger';\nimport {\n  NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT,\n  NgxVirtualSelectFieldOptionComponent,\n  NgxVirtualSelectFieldOptionParent,\n  NgxVirtualSelectFieldOptionSelectionChangeEvent,\n} from './virtual-select-field-option';\n\nimport {\n  OPTION_HEIGHT,\n  PANEL_WIDTH_AUTO,\n  POSITIONS,\n  PANEL_VIEWPORT_PAGE_SIZE,\n  NGX_VIRTUAL_SELECT_FIELD_CONFIG,\n} from './virtual-select-field.constants';\nimport { NgxVirtualSelectFieldConfig } from './virtual-select-field.models';\nimport {\n  ARROW_DOWN_KEY,\n  ARROW_LEFT_KEY,\n  ARROW_RIGHT_KEY,\n  ARROW_UP_KEY,\n  ENTER_CODE,\n  KEY_A_CODE,\n  SPACE_CODE,\n} from './keycodes';\nimport { MatPseudoCheckboxModule } from '@angular/material/core';\n\n//#endregion imports\n\n@Component({\n  selector: 'ngx-virtual-select-field',\n  exportAs: 'ngxVirtualSelectField',\n  standalone: true,\n  imports: [\n    CommonModule,\n    OverlayModule,\n    ScrollingModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatProgressSpinnerModule,\n    MatPseudoCheckboxModule,\n  ],\n  templateUrl: './virtual-select-field.component.html',\n  styleUrl: './virtual-select-field.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    {\n      provide: MatFormFieldControl,\n      useExisting: NgxVirtualSelectFieldComponent,\n    },\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: NgxVirtualSelectFieldComponent,\n      multi: true,\n    },\n    {\n      provide: NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT,\n      useExisting: NgxVirtualSelectFieldComponent,\n    },\n  ],\n  host: {\n    '[attr.tabindex]': 'this.disabled ? -1 : tabIndex',\n    '(focus)': 'onFocusIn()',\n    '(blur)': 'onFocusOut()',\n    '(keydown)': 'onKeyDown($event)',\n    class: 'ngx-virtual-select-field',\n    '[class.ngx-virtual-select-field-disabled]': 'disabled',\n    '[class.ngx-virtual-select-field-invalid]': 'errorState',\n  },\n})\nexport class NgxVirtualSelectFieldComponent<TValue>\n  implements\n    OnInit,\n    OnDestroy,\n    AfterContentInit,\n    MatFormFieldControl<TValue[] | TValue>,\n    ControlValueAccessor,\n    NgxVirtualSelectFieldOptionParent\n{\n  //#region Inputs/Outputs\n\n  @Input('aria-describedby')\n  userAriaDescribedBy = '';\n\n  /**\n   * Width for overlay panel\n   * @default 'auto'\n   */\n  @Input()\n  panelWidth: string | number | null =\n    this._defaultOptions?.panelWidth ?? PANEL_WIDTH_AUTO;\n\n  /**\n   * Height for an option element\n   * @default 48\n   */\n  @Input({\n    transform: (value: unknown) => numberAttribute(value, OPTION_HEIGHT),\n  })\n  optionHeight: number = this._defaultOptions?.optionHeight ?? OPTION_HEIGHT;\n\n  /**\n   * Amount of visible items in list\n   * @default 8\n   */\n  @Input({\n    transform: (value: unknown) =>\n      numberAttribute(value, PANEL_VIEWPORT_PAGE_SIZE),\n  })\n  panelViewportPageSize: number =\n    this._defaultOptions?.panelViewportPageSize ?? PANEL_VIEWPORT_PAGE_SIZE;\n\n  /**\n   * Enable multiple selection\n   * @default false\n   */\n  @Input({ transform: booleanAttribute })\n  multiple: boolean = false;\n\n  /**\n   * Tab index for keyboard navigation\n   * @default 0\n   */\n  @Input({\n    transform: (value: unknown) => numberAttribute(value, 0),\n  })\n  tabIndex: number = 0;\n\n  /**\n   * Milliseconds to wait before navigating to active element after keyboard search\n   * @default 300\n   */\n  @Input({ transform: numberAttribute })\n  typeaheadDebounceInterval: number = 300;\n\n  /**\n   * CSS class to be added to the panel element\n   * @default none\n   */\n  @Input()\n  panelClass: string | string[] | null = null;\n\n  /**\n   * Enable filtering of options\n   * @default false\n   */\n  @Input({ transform: booleanAttribute })\n  filterable: boolean = false;\n\n  /**\n   * Placeholder text for the filter input\n   * @default 'Search...'\n   */\n  @Input()\n  filterPlaceholder: string = 'Search...';\n\n  /**\n   * Show clear button in filter input\n   * @default true\n   */\n  @Input({ transform: booleanAttribute })\n  filterClearable: boolean = true;\n\n  /**\n   * Show clear button in select trigger\n   * @default false\n   */\n  @Input({ transform: booleanAttribute })\n  clearable: boolean = false;\n\n  /**\n   * Show loading spinner\n   * @default false\n   */\n  @Input({ transform: booleanAttribute })\n  loading: boolean = false;\n\n  /**\n   * Show select all checkbox when multiple selection is enabled and filterable is true\n   * @default true\n   */\n  @Input({ transform: booleanAttribute })\n  showSelectAll: boolean = this._defaultOptions?.showSelectAll ?? true;\n\n  /**\n   * Maximum number of items that can be selected (only applies when multiple is true)\n   * @default null (no limit)\n   */\n  @Input({\n    transform: (value: unknown) => numberAttribute(value, 0),\n  })\n  maxSelectedItems: number = 0;\n\n  /**\n   * Value of the select field\n   * @default null\n   */\n  @Input()\n  set value(value: TValue[] | TValue | null) {\n    if (this._value === value) {\n      return;\n    }\n\n    value = value || [];\n\n    if (!Array.isArray(value)) {\n      value = [value];\n    }\n\n    this._value = value;\n\n    if (this.optionFor) {\n      this._selectionModel?.setSelection(\n        ...this._value.map(\n          (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\n        ),\n      );\n    }\n\n    // Update selection count signal for reactivity\n    this.selectedCount.set(this._value.length);\n\n    this._stateChanges.next();\n  }\n  private _value: TValue[] = [];\n\n  /**\n   * Placeholder for the select field\n   * @default none\n   */\n  @Input()\n  set placeholder(placeholder: string) {\n    this._placeholder = placeholder;\n    this._stateChanges.next();\n  }\n\n  get placeholder(): string {\n    return this._placeholder;\n  }\n\n  private _placeholder = '';\n\n  /**\n   * Define if fields is required\n   * @default false\n   */\n  @Input({ transform: booleanAttribute })\n  set required(req: boolean) {\n    this._required = req;\n    this._stateChanges.next();\n  }\n\n  get required(): boolean {\n    return this._required;\n  }\n\n  private _required = false;\n\n  /**\n   * Define if field is disabled\n   * @default false\n   */\n  @Input({ transform: booleanAttribute })\n  set disabled(value: boolean) {\n    this._inputDisabled = value;\n    this._stateChanges.next();\n  }\n\n  get disabled(): boolean {\n    return this._inputDisabled || this._formDisabled;\n  }\n\n  private _inputDisabled = false;\n  private _formDisabled = false;\n\n  /**\n   * Value change event\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  valueChange = output<any>();\n\n  /**\n   * Selection change event\n   * Emits after value change and form control update\n   */\n  selectionChange = output<NgxVirtualSelectFieldChange<TValue>>();\n\n  //#endregion Inputs/Outputs\n\n  @ViewChild(CdkVirtualScrollViewport, { static: false })\n  cdkVirtualScrollViewport!: CdkVirtualScrollViewport;\n\n  @ViewChild(CdkConnectedOverlay, { static: false })\n  cdkConnectedOverlay!: CdkConnectedOverlay;\n\n  @ViewChild('filterInput', { static: false })\n  filterInput: ElementRef<HTMLInputElement> | undefined;\n\n  @ContentChild(NgxVirtualSelectFieldOptionForDirective)\n  optionFor!: NgxVirtualSelectFieldOptionForDirective<TValue>;\n\n  @ContentChild(NGX_VIRTUAL_SELECT_FIELD_TRIGGER)\n  customTrigger: NgxVirtualSelectFieldTriggerDirective | null = null;\n\n  @ContentChildren(NgxVirtualSelectFieldOptionComponent)\n  optionsQuery: QueryList<NgxVirtualSelectFieldOptionComponent<TValue>> | null =\n    null;\n\n  readonly id = `ngx-virtual-select-field-${NgxVirtualSelectFieldComponent.nextId++}`;\n  readonly controlType = 'ngx-virtual-select-field';\n  ngControl: NgControl | null = null;\n  private readonly _injector = inject(Injector);\n  autofilled = false;\n\n  protected readonly POSITIONS = POSITIONS;\n  protected readonly overlayPanelClass: string | string[] =\n    this._defaultOptions?.overlayPanelClass || '';\n  protected readonly inheritedColorTheme: string;\n  protected readonly overlayWidth: Signal<string | number>;\n\n  protected readonly isPanelOpened = signal(false);\n  protected readonly filterText = signal('');\n  protected readonly options = signal<\n    NgxVirtualSelectFieldOptionModel<TValue>[]\n  >([]);\n  protected readonly filteredOptions = computed(() => {\n    const searchText = this.filterText().toLowerCase().trim();\n    const allOptions = this.options();\n\n    if (!searchText || !this.filterable) {\n      return allOptions;\n    }\n\n    return allOptions.filter((option) => {\n      const label = option.getLabel?.() ?? option.label;\n      return label.toLowerCase().includes(searchText);\n    });\n  });\n\n  protected readonly hasOptionsToFilter = computed(\n    () => this.options().length > 1,\n  );\n  protected readonly hasNoFilteredResults = computed(() => {\n    const filtered = this.filteredOptions();\n    const hasFilter = this.filterText().trim().length > 0;\n    return hasFilter && filtered.length === 0 && this.options().length > 0;\n  });\n\n  /**\n   * Track selection count as a signal so computed properties react to changes\n   */\n  private readonly selectedCount = signal(0);\n\n  /**\n   * Check if max selection limit is reached\n   * Public so option components can access it via the parent interface\n   */\n  readonly isMaxSelected = computed(() => {\n    if (!this.maxSelectedItems) {\n      return false;\n    }\n    return this.selectedCount() >= this.maxSelectedItems;\n  });\n\n  protected triggerValue$: Observable<string> | null = null;\n  protected preferredOverlayOrigin: CdkOverlayOrigin | ElementRef | undefined;\n\n  private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _elRef: ElementRef<HTMLElement> = inject(ElementRef);\n  private readonly _stateChanges = new Subject<void>();\n  private readonly _scrolledIndexChange = new Subject<void>();\n\n  private _onChange: (value: TValue[] | TValue) => void = () => void 0;\n  private _onTouched: () => void = () => void 0;\n\n  private _selectionModel!: SelectionModel<\n    NgxVirtualSelectFieldOptionModel<TValue>\n  >;\n  private _keyManager: ListKeyManager<\n    NgxVirtualSelectFieldOptionModel<TValue>\n  > | null = null;\n\n  constructor(\n    @Optional()\n    @Inject(MAT_FORM_FIELD)\n    private _parentFormField: MatFormField,\n    @Optional()\n    @Inject(NGX_VIRTUAL_SELECT_FIELD_CONFIG)\n    private _defaultOptions?: NgxVirtualSelectFieldConfig,\n  ) {\n    this.overlayWidth = this.createOverlayWidthSignal();\n\n    this.inheritedColorTheme = this._parentFormField\n      ? `mat-${this._parentFormField.color}`\n      : '';\n\n    // NOTE: Key manager is now updated explicitly in onFilterInput() instead of via effect.\n    // The previous effect caused infinite loops because:\n    // 1. open() called initListKeyManager() then isPanelOpened.set(true)\n    // 2. Setting isPanelOpened triggered the effect\n    // 3. Effect called initListKeyManager() again\n    // 4. This created cascading updates that froze the browser\n  }\n\n  private createOverlayWidthSignal() {\n    const changeDetectorRef = inject(ChangeDetectorRef);\n\n    // NOTE: View port ruler change stream runs outside the zone.\n    //       Need to run change detection manually to trigger computed signal below.\n    const viewPortRulerChange = toSignal(\n      inject(ViewportRuler)\n        .change()\n        .pipe(\n          takeUntilDestroyed(this._destroyRef),\n          tap(() => changeDetectorRef.detectChanges()),\n        ),\n    );\n\n    return computed(() => {\n      viewPortRulerChange();\n\n      return this.resolveOverlayWidth(this.preferredOverlayOrigin);\n    });\n  }\n\n  private resolveOverlayWidth(\n    preferredOrigin: ElementRef<ElementRef> | CdkOverlayOrigin | undefined,\n  ): string | number {\n    if (!this.isPanelOpened()) {\n      return 0;\n    }\n\n    if (this.panelWidth !== PANEL_WIDTH_AUTO) {\n      return this.panelWidth ?? '';\n    }\n\n    const refToMeasure =\n      preferredOrigin instanceof CdkOverlayOrigin\n        ? preferredOrigin.elementRef\n        : preferredOrigin || this._elRef;\n\n    return refToMeasure.nativeElement.getBoundingClientRect().width;\n  }\n\n  get shouldLabelFloat() {\n    return this.focused || !this.empty;\n  }\n\n  get empty() {\n    return !this._selectionModel || this._selectionModel.isEmpty();\n  }\n\n  get stateChanges(): Observable<void> {\n    return this._stateChanges.asObservable();\n  }\n\n  get errorState(): boolean {\n    return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n  }\n\n  get focused(): boolean {\n    // NOTE: panel open is needed to keep form field in focused state during interaction with options\n    return this._focused || this.isPanelOpened();\n  }\n  private _focused = false;\n\n  protected get maxPageSize(): number {\n    return Math.min(\n      this.panelViewportPageSize,\n      this.optionFor?.options$.value.length ?? 0,\n    );\n  }\n\n  ngOnInit() {\n    // Resolve NgControl lazily via Injector to avoid NG0200 circular dependency\n    // with NG_VALUE_ACCESSOR provider. See: https://angular.dev/errors/NG0200\n    this.ngControl = this._injector.get(NgControl, null);\n    if (this.ngControl != null) {\n      this._formDisabled = this.ngControl.disabled ?? false;\n    }\n\n    this._selectionModel = new SelectionModel<\n      NgxVirtualSelectFieldOptionModel<TValue>\n    >(this.multiple, [], true);\n  }\n\n  ngAfterContentInit() {\n    this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n    if (!this.customTrigger) {\n      this.triggerValue$ = this._selectionModel.changed.pipe(\n        startWith(null),\n        map((_selected) =>\n          this._selectionModel.selected\n            .map((option) => option?.label ?? '')\n            .join(', '),\n        ),\n      );\n    }\n\n    // Subscribe to options$ and update the options signal\n    this.optionFor.options$\n      .pipe(takeUntilDestroyed(this._destroyRef))\n      .subscribe((options) => {\n        this.options.set(options);\n        this._selectionModel?.setSelection(\n          ...this._value.map((v) => options.find((o) => o.value === v)!),\n        );\n      });\n\n    this.optionsQuery.changes\n      .pipe(\n        startWith(this.optionsQuery),\n        switchMap(() =>\n          merge(...this.optionsQuery!.map((option) => option.selectedChange))\n        ),\n        takeUntilDestroyed(this._destroyRef),\n      )\n      .subscribe((selectionEvent) => {\n        this.updateOptionSelection(selectionEvent, this.options());\n      });\n\n    merge(this._scrolledIndexChange, this._selectionModel.changed)\n      .pipe(takeUntilDestroyed(this._destroyRef), debounceTime(20))\n      .subscribe(() => {\n        this.updateRenderedOptionsState(this.options());\n      });\n  }\n\n  private updateOptionSelection(\n    selectionEvent: NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue>,\n    options: NgxVirtualSelectFieldOptionModel<TValue>[],\n  ) {\n    this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n    const { option: changedOption } =\n      this.findOptionByValue(options, selectionEvent.value);\n\n    if (this.multiple) {\n      // Check max limit - allow deselect but prevent select if at max\n      const isCurrentlySelected = this._selectionModel.isSelected(changedOption);\n      if (!isCurrentlySelected && this.maxSelectedItems > 0 &&\n          this._selectionModel.selected.length >= this.maxSelectedItems) {\n        // Max reached, don't allow selecting more\n        return;\n      }\n      this._selectionModel.toggle(changedOption);\n    } else if (changedOption.value === null) {\n      this._selectionModel.clear();\n      this.close();\n    } else {\n      this._selectionModel.select(changedOption);\n      this.close();\n    }\n\n    // Use filteredOptions index for key manager since it's initialized with filtered list\n    // Only set active item when panel is open (for multiple select after selection)\n    if (this.isPanelOpened() && this._selectionModel.isSelected(changedOption)) {\n      const filteredIndex = this.filteredOptions().findIndex(\n        (o) => o.value === changedOption.value,\n      );\n      if (filteredIndex >= 0) {\n        this._keyManager?.setActiveItem(filteredIndex);\n      }\n    }\n\n    // NOTE: this need to keep form field in focus state\n    this.focus();\n    this.emitValue();\n  }\n\n  ngOnDestroy() {\n    this._scrolledIndexChange.complete();\n    this._keyManager?.destroy();\n    this._stateChanges.complete();\n  }\n\n  // #region ControlValueAccessor\n\n  writeValue(value: TValue[]): void {\n    this.value = value;\n\n    // after settting a value on empty fornControl local `empty` does not update\n    // as result the field continue to show placeholder.\n    // needed to trigger change detection for the empty state and trigger value updates\n    this._changeDetectorRef.markForCheck();\n  }\n\n  registerOnChange(fn: (value: TValue[] | TValue) => void) {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this._formDisabled = isDisabled;\n    this._stateChanges.next();\n  }\n\n  // #endregion ControlValueAccessor\n\n  setDescribedByIds(ids: string[]) {\n    const controlElement = this._elRef.nativeElement;\n\n    controlElement.setAttribute('aria-describedby', ids.join(' '));\n  }\n\n  onContainerClick(): void {\n    if (this.disabled) {\n      return;\n    }\n\n    this.focus();\n    this.open();\n  }\n\n  onOverlayAttached() {\n    // Focus the filter input when overlay is attached\n    if (this.filterable && this.hasOptionsToFilter()) {\n      setTimeout(() => {\n        this.filterInput?.nativeElement.focus();\n      }, 100);\n    }\n\n    this.cdkConnectedOverlay.positionChange\n      .pipe(\n        take(1),\n        switchMap(() => this._scrolledIndexChange.pipe(take(1))),\n        takeUntilDestroyed(this._destroyRef),\n      )\n      .subscribe(() => this.navigateToFirstSelectedOption());\n  }\n\n  private navigateToFirstSelectedOption() {\n    if (this._selectionModel.isEmpty()) {\n      return;\n    }\n\n    let targetIndex = this.optionFor.options$.value.findIndex(\n      (option) => option === this._selectionModel.selected[0],\n    );\n\n    targetIndex = targetIndex - this.maxPageSize / 2;\n    targetIndex = Math.max(0, targetIndex);\n\n    this.cdkVirtualScrollViewport.scrollToIndex(targetIndex);\n  }\n\n  protected onFocusIn() {\n    if (!this.focused) {\n      this._focused = true;\n      this._stateChanges.next();\n    }\n  }\n\n  protected onFocusOut() {\n    this._focused = false;\n\n    if (!this.isPanelOpened()) {\n      this._onTouched();\n      this._stateChanges.next();\n    }\n  }\n\n  protected optionTrackBy: TrackByFunction<\n    NgxVirtualSelectFieldOptionModel<TValue>\n  > = (_index: number, option) => {\n    return option.value;\n  };\n\n  protected onScrolledIndexChange(): void {\n    this._scrolledIndexChange.next();\n  }\n\n  protected onFilterInput(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    this.filterText.set(input.value);\n\n    // Update key manager with new filtered options\n    // This replaces the previous effect-based approach which caused infinite loops\n    if (this._keyManager && this.isPanelOpened()) {\n      this.initListKeyManager(this.filteredOptions());\n    }\n  }\n\n  protected onFilterClear(): void {\n    this.filterText.set('');\n\n    // Update key manager with all options (filter cleared)\n    if (this._keyManager && this.isPanelOpened()) {\n      this.initListKeyManager(this.filteredOptions());\n    }\n\n    // Re-focus the filter input after clearing\n    setTimeout(() => {\n      this.filterInput?.nativeElement.focus();\n    }, 0);\n  }\n\n  protected onClear(event: Event): void {\n    event.stopPropagation(); // Prevent opening the panel\n    this._selectionModel.clear();\n    this.emitValue();\n  }\n\n  protected isAllSelected(): boolean {\n    if (!this._selectionModel) {\n      return false;\n    }\n\n    // When filter is active, check against filtered options\n    const optionsToCheck = this.hasActiveFilter()\n      ? this.filteredOptions()\n      : this.options();\n    const enabledOptions = optionsToCheck.filter((option) => !option.disabled);\n\n    if (enabledOptions.length === 0) {\n      return false;\n    }\n\n    // Use Set for O(1) lookups instead of iterating selected array for each option\n    const selectedValues = this.getSelectedValuesSet();\n    return enabledOptions.every((option) => selectedValues.has(option.value));\n  }\n\n  protected isIndeterminate(): boolean {\n    if (!this._selectionModel) {\n      return false;\n    }\n\n    // When filter is active, check against filtered options\n    const optionsToCheck = this.hasActiveFilter()\n      ? this.filteredOptions()\n      : this.options();\n    const enabledOptions = optionsToCheck.filter((option) => !option.disabled);\n\n    if (enabledOptions.length === 0) {\n      return false;\n    }\n\n    // Use Set for O(1) lookups instead of iterating selected array for each option\n    const selectedValues = this.getSelectedValuesSet();\n    const selectedInView = enabledOptions.filter((option) =>\n      selectedValues.has(option.value),\n    ).length;\n\n    return selectedInView > 0 && selectedInView < enabledOptions.length;\n  }\n\n  protected onSelectAllChange(): void {\n    // When filter is active, toggle only filtered options\n    const optionsToToggle = this.hasActiveFilter()\n      ? this.filteredOptions()\n      : this.options();\n    this.toggleAllOptions(optionsToToggle);\n    this.emitValue();\n  }\n\n  /**\n   * Returns true if there is an active filter text\n   */\n  private hasActiveFilter(): boolean {\n    return this.filterText().trim().length > 0;\n  }\n\n  protected onFilterKeyDown(event: KeyboardEvent): void {\n    const isVerticalArrowKey =\n      event.key === ARROW_DOWN_KEY || event.key === ARROW_UP_KEY;\n\n    // Arrow down/up should always move focus to the options list\n    if (isVerticalArrowKey) {\n      event.preventDefault();\n      this.cdkVirtualScrollViewport.elementRef.nativeElement.focus();\n      this._keyManager?.onKeydown(event);\n      return;\n    }\n\n    // Left/Right arrows work normally in the input for cursor movement\n\n    // Allow other keys like Escape, Enter to work\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      this.close();\n    } else if (event.key === 'Tab') {\n      // Tab should close the panel\n      this.close();\n    }\n  }\n\n  protected open() {\n    if (this.isPanelOpened()) {\n      return;\n    }\n\n    if (this._parentFormField) {\n      this.preferredOverlayOrigin =\n        this._parentFormField.getConnectedOverlayOrigin();\n    }\n\n    // Initialize key manager when panel opens to enable keyboard navigation\n    this.initListKeyManager(this.filteredOptions());\n\n    this.isPanelOpened.set(true);\n  }\n\n  protected close() {\n    this.isPanelOpened.set(false);\n    this.filterText.set(''); // Clear filter when closing\n    this._onTouched();\n    this._stateChanges.next();\n  }\n\n  //#region Keyboard navigation\n\n  protected onKeyDown(event: KeyboardEvent) {\n    if (this.disabled) {\n      return;\n    }\n\n    if (this.isPanelOpened()) {\n      this.doPanelOpenedKeydown(event);\n    } else {\n      this.doPanelClosedKeydown(event);\n    }\n  }\n\n  private doPanelOpenedKeydown(event: KeyboardEvent) {\n    this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n    const keyManager = this._keyManager;\n    const activeItem = keyManager?.activeItem;\n    const isTyping = keyManager?.isTyping();\n    // Use all options for selection operations (values are unique)\n    const allOptions = this.optionFor.options$.value;\n    // Use filtered options for index-based operations (key manager uses filtered list)\n    const keyManagerOptions = this.filteredOptions();\n    const isArrowKey =\n      event.key === ARROW_DOWN_KEY || event.key === ARROW_UP_KEY;\n\n    if (isArrowKey && event.altKey) {\n      event.preventDefault();\n\n      this.close();\n    } else if (\n      !isTyping &&\n      (event.code === ENTER_CODE || event.code === SPACE_CODE) &&\n      activeItem &&\n      !hasModifierKey(event)\n    ) {\n      event.preventDefault();\n\n      const { option } = this.findOptionByValue(allOptions, activeItem.value);\n\n      // Check max limit - allow deselect but prevent select if at max\n      const isCurrentlySelected = this._selectionModel.isSelected(option);\n      if (!isCurrentlySelected && this.maxSelectedItems > 0 &&\n          this._selectionModel.selected.length >= this.maxSelectedItems) {\n        // Max reached, don't allow selecting more\n        return;\n      }\n\n      this._selectionModel.toggle(option);\n\n      this.emitValue();\n    } else if (\n      !isTyping &&\n      this.multiple &&\n      event.code === KEY_A_CODE &&\n      event.ctrlKey\n    ) {\n      event.preventDefault();\n\n      // When filter is active, toggle only filtered options\n      const optionsToToggle = this.hasActiveFilter()\n        ? keyManagerOptions\n        : allOptions;\n      this.toggleAllOptions(optionsToToggle);\n\n      this.emitValue();\n    } else {\n      const previouslyFocusedIndex = keyManager?.activeItemIndex;\n\n      keyManager?.onKeydown(event);\n\n      if (\n        this.multiple &&\n        isArrowKey &&\n        event.shiftKey &&\n        keyManager?.activeItem &&\n        keyManager?.activeItemIndex !== previouslyFocusedIndex &&\n        previouslyFocusedIndex != null\n      ) {\n        // Select the item we navigated FROM (the previously focused item)\n        // Use keyManagerOptions since index is from the key manager (filtered list)\n        const previousOption = keyManagerOptions[previouslyFocusedIndex];\n        if (previousOption) {\n          this.selectOptionByValue(allOptions, previousOption.value);\n        }\n      }\n    }\n  }\n\n  private toggleAllOptions(\n    options: NgxVirtualSelectFieldOptionModel<TValue>[],\n  ) {\n    const enabledOptions = options.filter((option) => !option.disabled);\n\n    // Use Set for O(1) lookups\n    const selectedValues = this.getSelectedValuesSet();\n\n    // Check if all provided options are currently selected\n    const allSelected = enabledOptions.every((option) =>\n      selectedValues.has(option.value),\n    );\n\n    if (allSelected) {\n      // Deselect only the provided options (important for filtered selection)\n      // Find matching options in selection model by value\n      const valuesToDeselect = new Set(enabledOptions.map((o) => o.value));\n      const optionsToDeselect = this._selectionModel.selected.filter((o) =>\n        valuesToDeselect.has(o.value),\n      );\n      this._selectionModel.deselect(...optionsToDeselect);\n    } else {\n      // Select all provided options\n      // Respect max limit when selecting all\n      if (this.maxSelectedItems > 0) {\n        const currentCount = this._selectionModel.selected.length;\n        const remainingSlots = this.maxSelectedItems - currentCount;\n        const notYetSelected = enabledOptions.filter(\n          (option) => !selectedValues.has(option.value),\n        );\n        const toSelect = notYetSelected.slice(0, remainingSlots);\n        this._selectionModel.select(...toSelect);\n      } else {\n        // Filter out already selected to avoid duplicates\n        const notYetSelected = enabledOptions.filter(\n          (option) => !selectedValues.has(option.value),\n        );\n        this._selectionModel.select(...notYetSelected);\n      }\n    }\n  }\n\n  private doPanelClosedKeydown(event: KeyboardEvent): void {\n    // Ensure key manager is initialized for keyboard navigation when panel is closed\n    if (!this._keyManager) {\n      this.initListKeyManager(this.filteredOptions());\n    }\n\n    const keyManager = this._keyManager;\n    const isTyping = keyManager?.isTyping();\n\n    const isArrowKey =\n      event.key === ARROW_DOWN_KEY ||\n      event.key === ARROW_UP_KEY ||\n      event.key === ARROW_RIGHT_KEY ||\n      event.key === ARROW_LEFT_KEY;\n\n    if (\n      (!isTyping &&\n        (event.code === SPACE_CODE || event.code === ENTER_CODE) &&\n        !hasModifierKey(event)) ||\n      ((this.multiple || event.altKey) && isArrowKey)\n    ) {\n      event.preventDefault(); // prevents the page from scrolling down when pressing space\n      this.open();\n    } else if (!this.multiple) {\n      const previouslySelectedOptionIndex = keyManager?.activeItemIndex;\n\n      keyManager?.onKeydown(event);\n      const selectedOptionIndex = keyManager?.activeItemIndex;\n\n      if (\n        selectedOptionIndex &&\n        previouslySelectedOptionIndex !== selectedOptionIndex\n      ) {\n        //TODO: arrow navigation should start from selected options. Currently it starts from the first option\n        if (keyManager.activeItem) {\n          this.selectOptionByValue(\n            this.optionFor.options$.value,\n            keyManager.activeItem.value,\n          );\n        }\n\n        // TODO: Add live announcer\n        // We set a duration on the live announcement, because we want the live element to be\n        // cleared after a while so that users can't navigate to it using the arrow keys.\n        // this._liveAnnouncer.announce((selectedOption as MatOption).viewValue, 10000);\n      }\n    }\n  }\n\n  //#endregion Keyboard navigation\n\n  //#region Key manager\n\n  private initListKeyManager(\n    options: NgxVirtualSelectFieldOptionModel<TValue>[],\n  ) {\n    this._keyManager?.destroy();\n\n    this._keyManager = new ListKeyManager<\n      NgxVirtualSelectFieldOptionModel<TValue>\n    >(this.normalizeKeyManagerOptions(options))\n      .withTypeAhead(this.typeaheadDebounceInterval)\n      .withVerticalOrientation()\n      .withHomeAndEnd()\n      .withPageUpDown()\n      .withAllowedModifierKeys(['shiftKey']);\n\n    this._keyManager.tabOut.subscribe(() => {\n      if (!this.isPanelOpened()) {\n        return;\n      }\n\n      if (this._keyManager?.activeItem) {\n        this.selectOptionByValue(options, this._keyManager.activeItem.value);\n      }\n\n      this.focus();\n      this.close();\n    });\n\n    this._keyManager.change.subscribe((index) => {\n      // Only update option component styles when panel is open and options are rendered\n      if (!this.isPanelOpened()) {\n        return;\n      }\n\n      this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n      this.updateActiveOptionComponent(\n        this.optionsQuery.toArray(),\n        options[index],\n        index,\n      );\n    });\n\n    // Sync key manager with current selection (for arrow key navigation when panel is closed)\n    if (!this._selectionModel.isEmpty()) {\n      const selectedOption = this._selectionModel.selected[0];\n      const selectedIndex = options.findIndex(\n        (o) => o.value === selectedOption?.value,\n      );\n      if (selectedIndex >= 0) {\n        this._keyManager.setActiveItem(selectedIndex);\n      }\n    }\n  }\n\n  private normalizeKeyManagerOptions(\n    options: NgxVirtualSelectFieldOptionModel<TValue>[],\n  ) {\n    return options.map((option) => ({\n      value: option.value,\n      label: option.label,\n      disabled: option.disabled ?? false,\n      getLabel: () => option.getLabel?.() ?? option.label,\n    }));\n  }\n\n  private updateActiveOptionComponent(\n    optionComponents: NgxVirtualSelectFieldOptionComponent<TValue>[],\n    activeOption: NgxVirtualSelectFieldOptionModel<TValue>,\n    index: number,\n  ) {\n    optionComponents.forEach((option) => option.setInactiveStyles());\n\n    const shouldScrollToActiveItem = this.shouldScrollToActiveItem(index);\n    if (shouldScrollToActiveItem) {\n      this.cdkVirtualScrollViewport.scrolledIndexChange\n        .pipe(take(1))\n        .subscribe(() => {\n          this.assertIsDefined(\n            this.optionsQuery,\n            `optionsQuery is not defined`,\n          );\n\n          this.setActiveOptionComponentByValue(\n            this.optionsQuery.toArray(),\n            activeOption.value,\n          );\n        });\n\n      this.cdkVirtualScrollViewport.scrollToIndex(index);\n    } else {\n      this.setActiveOptionComponentByValue(\n        optionComponents,\n        activeOption.value,\n      );\n    }\n  }\n\n  private shouldScrollToActiveItem(targetIndex: number): boolean {\n    if (!this.isPanelOpened() || !this.cdkVirtualScrollViewport) {\n      return false;\n    }\n\n    const scrollTop =\n      this.cdkVirtualScrollViewport.elementRef.nativeElement.scrollTop;\n\n    // NOTE: -1 is needed to prevent scrolling to next item out of the viewport\n    const bottomScroll = scrollTop + this.optionHeight * this.maxPageSize - 1;\n    const targetScroll = this.optionHeight * targetIndex;\n\n    return scrollTop > targetScroll || bottomScroll < targetScroll;\n  }\n\n  private setActiveOptionComponentByValue(\n    optionComponents: NgxVirtualSelectFieldOptionComponent<TValue>[],\n    value: TValue,\n  ) {\n    const optionComponent = optionComponents.find(\n      (option) => option.value === value,\n    );\n\n    // Option might not be rendered due to virtual scroll - skip if not found\n    if (!optionComponent) {\n      return;\n    }\n\n    optionComponent.setActiveStyles();\n  }\n\n  // #endregion Key manager\n\n  /**\n   * Check if a specific option is currently selected\n   * Used by option components to determine their disabled state when max is reached\n   */\n  isOptionSelected(value: TValue): boolean {\n    if (!this._selectionModel) {\n      return false;\n    }\n    return this._selectionModel.selected.some(\n      (opt) => opt != null && opt.value === value,\n    );\n  }\n\n  /**\n   * Get a Set of selected values for O(1) lookup performance\n   * Used internally for bulk selection checks\n   */\n  private getSelectedValuesSet(): Set<TValue> {\n    if (!this._selectionModel) {\n      return new Set();\n    }\n    return new Set(\n      this._selectionModel.selected\n        .filter((opt) => opt != null)\n        .map((opt) => opt.value),\n    );\n  }\n\n  private focus() {\n    this._elRef.nativeElement.focus();\n  }\n\n  private selectOptionByValue(\n    options: NgxVirtualSelectFieldOptionModel<TValue>[],\n    value: TValue,\n  ) {\n    const { option } = this.findOptionByValue(options, value);\n\n    // Check max limit before selecting\n    if (this.maxSelectedItems > 0 &&\n        !this._selectionModel.isSelected(option) &&\n        this._selectionModel.selected.length >= this.maxSelectedItems) {\n      return;\n    }\n\n    this._selectionModel.select(option);\n\n    this.emitValue();\n  }\n\n  private updateRenderedOptionsState(\n    _options: NgxVirtualSelectFieldOptionModel<TValue>[],\n  ) {\n    this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n    // Use Set for O(1) lookups instead of iterating selected array for each option\n    const selectedValues = this.getSelectedValuesSet();\n\n    this.optionsQuery.forEach((optionComponent) => {\n      // Use value-based comparison instead of reference comparison\n      // This fixes issues with virtual scroll where option references may change\n      if (selectedValues.has(optionComponent.value)) {\n        optionComponent.select();\n      } else {\n        // NOTE: deselect for all is needed because of virtual scroll and reusing options\n        optionComponent.deselect();\n      }\n    });\n  }\n\n  private findOptionByValue(\n    options: NgxVirtualSelectFieldOptionModel<TValue>[],\n    value: TValue,\n  ): { option: NgxVirtualSelectFieldOptionModel<TValue>; index: number } {\n    const index = options.findIndex((option) => option.value === value);\n\n    const option = options[index];\n\n    this.assertIsDefined(option, `Option with value ${value} not found`);\n\n    return { option, index };\n  }\n\n  private emitValue(): void {\n    this._value = this._selectionModel.selected.map((option) => option.value);\n\n    // Update selection count signal for reactivity\n    this.selectedCount.set(this._selectionModel.selected.length);\n\n    const outputValue = this.multiple ? this._value : this._value[0];\n\n    this.valueChange.emit(outputValue);\n    this._onChange(outputValue);\n    this.selectionChange.emit(\n      new NgxVirtualSelectFieldChange(this, outputValue),\n    );\n  }\n\n  private assertIsDefined<T>(\n    value: T,\n    message: string,\n  ): asserts value is NonNullable<T> {\n    if (value === undefined || value === null) {\n      throw new Error(message);\n    }\n  }\n\n  private static nextId = 0;\n}\n\nexport class NgxVirtualSelectFieldChange<TValue> {\n  constructor(\n    public source: NgxVirtualSelectFieldComponent<TValue>,\n    public value: any,\n  ) {}\n}\n","<div\n  class=\"ngx-virtual-select-field-trigger\"\n  cdk-overlay-origin\n  (click)=\"onContainerClick()\"\n  #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n  #trigger\n>\n  <div\n    class=\"ngx-virtual-select-field-value\"\n    [class.ngx-virtual-select-field-value--clearable]=\"clearable && !empty && !disabled\"\n  >\n    @if (empty) {\n      <span class=\"ngx-virtual-select-field-placeholder\">{{\n        placeholder\n      }}</span>\n    } @else {\n      <span>\n        @if (customTrigger) {\n          <ng-content select=\"ngx-virtual-select-field-trigger\"></ng-content>\n        } @else {\n          <span>{{ triggerValue$ | async }}</span>\n        }\n      </span>\n    }\n  </div>\n\n  @if (clearable && !empty && !disabled) {\n    <button\n      type=\"button\"\n      class=\"ngx-virtual-select-field-clear\"\n      (click)=\"onClear($event)\"\n      aria-label=\"Clear selection\"\n    >\n      <svg\n        viewBox=\"0 0 24 24\"\n        width=\"18px\"\n        height=\"18px\"\n        focusable=\"false\"\n      >\n        <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n      </svg>\n    </button>\n  }\n\n  <div class=\"ngx-virtual-select-field-arrow-wrapper\">\n    @if (loading) {\n      <div class=\"ngx-virtual-select-field-loading-spinner\">\n        <mat-spinner diameter=\"20\"></mat-spinner>\n      </div>\n    } @else {\n      <div class=\"ngx-virtual-select-field-arrow\">\n        <!-- Use an inline SVG, because it works better than a CSS triangle in high contrast mode. -->\n        <svg\n          viewBox=\"0 0 24 24\"\n          width=\"24px\"\n          height=\"24px\"\n          focusable=\"false\"\n          aria-hidden=\"true\"\n        >\n          <path d=\"M7 10l5 5 5-5z\" />\n        </svg>\n      </div>\n    }\n  </div>\n</div>\n\n<ng-template\n  cdk-connected-overlay\n  cdkConnectedOverlayLockPosition\n  cdkConnectedOverlayHasBackdrop\n  cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n  [cdkConnectedOverlayOpen]=\"isPanelOpened()\"\n  [cdkConnectedOverlayOrigin]=\"preferredOverlayOrigin || fallbackOverlayOrigin\"\n  [cdkConnectedOverlayPositions]=\"POSITIONS\"\n  [cdkConnectedOverlayPanelClass]=\"overlayPanelClass\"\n  [cdkConnectedOverlayWidth]=\"overlayWidth()\"\n  (backdropClick)=\"close()\"\n  (detach)=\"close()\"\n  (attach)=\"onOverlayAttached()\"\n>\n  <!--\n    [attr.aria-multiselectable]=\"multiple\"\n    [attr.aria-label]=\"ariaLabel || null\"\n    [attr.aria-labelledby]=\"_getPanelAriaLabelledby()\"\n    [@transformPanel]=\"'showing'\"\n    (@transformPanel.done)=\"_panelDoneAnimatingStream.next($event.toState)\"\n    -->\n  <div class=\"ngx-virtual-select-field-panel {{ inheritedColorTheme }}\" [ngClass]=\"panelClass\">\n    @if (filterable && hasOptionsToFilter()) {\n      <div class=\"ngx-virtual-select-field-filter-wrapper\">\n        @if (multiple && showSelectAll) {\n          <div class=\"ngx-virtual-select-field-select-all\">\n            <mat-pseudo-checkbox\n              [state]=\"isAllSelected() ? 'checked' : (isIndeterminate() ? 'indeterminate' : 'unchecked')\"\n              (click)=\"onSelectAllChange(); $event.stopPropagation()\"\n              aria-label=\"Select all options\"\n            ></mat-pseudo-checkbox>\n          </div>\n        }\n        <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" class=\"ngx-virtual-select-field-filter-field\">\n          <input\n            matInput\n            #filterInput\n            type=\"text\"\n            [placeholder]=\"filterPlaceholder\"\n            [value]=\"filterText()\"\n            (input)=\"onFilterInput($event)\"\n            (keydown)=\"onFilterKeyDown($event)\"\n          />\n          @if (filterClearable && filterText()) {\n            <button\n              matSuffix\n              type=\"button\"\n              class=\"ngx-virtual-select-field-filter-clear\"\n              (click)=\"onFilterClear()\"\n              aria-label=\"Clear filter\"\n            >\n              <svg\n                viewBox=\"0 0 24 24\"\n                width=\"18px\"\n                height=\"18px\"\n                focusable=\"false\"\n              >\n                <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\"/>\n              </svg>\n            </button>\n          }\n        </mat-form-field>\n      </div>\n    }\n    @if (loading) {\n      <div class=\"ngx-virtual-select-field-loading\">\n        <mat-spinner diameter=\"40\"></mat-spinner>\n      </div>\n    } @else if (hasNoFilteredResults()) {\n      <div class=\"ngx-virtual-select-field-no-results\">\n        No results found. Try adjusting your filter.\n      </div>\n    }\n    @if (!loading) {\n      <cdk-virtual-scroll-viewport\n      role=\"listbox\"\n      tabindex=\"-1\"\n      class=\"ngx-virtual-select-field-viewport\"\n      [style.--ngx-virtual-select-field__viewport-page-size]=\"maxPageSize\"\n      [style.--ngx-virtual-select-field__viewport-option-height.px]=\"optionHeight\"\n      [itemSize]=\"optionHeight\"\n      (scrolledIndexChange)=\"onScrolledIndexChange()\"\n      (keydown)=\"onKeyDown($event)\"\n    >\n      <div class=\"ngx-virtual-select-field-list-wrapper\">\n        <ng-container\n          *cdkVirtualFor=\"\n            let option of filteredOptions();\n            trackBy: optionTrackBy\n          \"\n        >\n          <ng-container\n            [ngTemplateOutlet]=\"optionFor.template\"\n            [ngTemplateOutletContext]=\"{ $implicit: option }\"\n          >\n          </ng-container>\n        </ng-container>\n      </div>\n    </cdk-virtual-scroll-viewport>\n    }\n  </div>\n</ng-template>\n","import { NgxVirtualSelectFieldOptionForDirective } from './virtual-select-field-option-for';\n\nimport { NgxVirtualSelectFieldComponent } from './virtual-select-field.component';\n\nimport { NgxVirtualSelectFieldTriggerDirective } from './virtual-select-field-trigger';\n\nimport { NgxVirtualSelectFieldOptionComponent } from './virtual-select-field-option';\n\nexport {\n  NgxVirtualSelectFieldOptionForDirective,\n  NgxVirtualSelectFieldOptionModel,\n} from './virtual-select-field-option-for';\n\nexport {\n  NgxVirtualSelectFieldComponent,\n  NgxVirtualSelectFieldChange,\n} from './virtual-select-field.component';\n\nexport { NgxVirtualSelectFieldTriggerDirective } from './virtual-select-field-trigger';\n\nexport { NgxVirtualSelectFieldOptionComponent } from './virtual-select-field-option';\n\nexport { NGX_VIRTUAL_SELECT_FIELD_CONFIG } from './virtual-select-field.constants';\n\nexport const NgxVirtualSelectFieldBundle = [\n  NgxVirtualSelectFieldComponent,\n  NgxVirtualSelectFieldOptionForDirective,\n  NgxVirtualSelectFieldTriggerDirective,\n  NgxVirtualSelectFieldOptionComponent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i6"],"mappings":"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"}