ngx-virtual-select-field-filterable 1.5.5 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -333,6 +333,7 @@ class NgxVirtualSelectFieldComponent {
333
333
  this.POSITIONS = POSITIONS;
334
334
  this.overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';
335
335
  this.isPanelOpened = signal(false, ...(ngDevMode ? [{ debugName: "isPanelOpened" }] : []));
336
+ this._isClosing = signal(false, ...(ngDevMode ? [{ debugName: "_isClosing" }] : []));
336
337
  this.filterText = signal('', ...(ngDevMode ? [{ debugName: "filterText" }] : []));
337
338
  this.options = signal([], ...(ngDevMode ? [{ debugName: "options" }] : []));
338
339
  this.filteredOptions = computed(() => {
@@ -375,8 +376,10 @@ class NgxVirtualSelectFieldComponent {
375
376
  : '';
376
377
  effect(() => {
377
378
  const filtered = this.filteredOptions();
378
- // Only reinitialize key manager when panel is open to avoid issues during close
379
- if (this._keyManager && this.isPanelOpened()) {
379
+ // Only reinitialize key manager when panel is open AND not in the process of closing.
380
+ // This prevents the freeze bug where clearing filterText during close() would
381
+ // trigger recomputation with all items and reinitialize key manager unnecessarily.
382
+ if (this._keyManager && this.isPanelOpened() && !this._isClosing()) {
380
383
  this.initListKeyManager(filtered);
381
384
  }
382
385
  });
@@ -443,10 +446,14 @@ class NgxVirtualSelectFieldComponent {
443
446
  });
444
447
  this.optionsQuery.changes
445
448
  .pipe(startWith(this.optionsQuery), switchMap(() => merge(...this.optionsQuery.map((option) => option.selectedChange))), takeUntilDestroyed(this._destroyRef))
446
- .subscribe((selectionEvent) => this.updateOptionSelection(selectionEvent, this.options()));
449
+ .subscribe((selectionEvent) => {
450
+ this.updateOptionSelection(selectionEvent, this.options());
451
+ });
447
452
  merge(this._scrolledIndexChange, this._selectionModel.changed)
448
453
  .pipe(takeUntilDestroyed(this._destroyRef), debounceTime(20))
449
- .subscribe(() => this.updateRenderedOptionsState(this.options()));
454
+ .subscribe(() => {
455
+ this.updateRenderedOptionsState(this.options());
456
+ });
450
457
  }
451
458
  updateOptionSelection(selectionEvent, options) {
452
459
  this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);
@@ -613,8 +620,14 @@ class NgxVirtualSelectFieldComponent {
613
620
  this.isPanelOpened.set(true);
614
621
  }
615
622
  close() {
623
+ // Set closing flag FIRST to prevent the effect from running during close.
624
+ // This avoids the freeze bug where clearing filterText triggers filteredOptions
625
+ // recomputation back to all items while panel is still technically open.
626
+ this._isClosing.set(true);
616
627
  this.isPanelOpened.set(false);
617
628
  this.filterText.set(''); // Clear filter when closing
629
+ // Reset closing flag after signals are updated
630
+ this._isClosing.set(false);
618
631
  this._onTouched();
619
632
  this._stateChanges.next();
620
633
  }
@@ -786,7 +799,7 @@ class NgxVirtualSelectFieldComponent {
786
799
  }
787
800
  }
788
801
  shouldScrollToActiveItem(targetIndex) {
789
- if (!this.isPanelOpened()) {
802
+ if (!this.isPanelOpened() || !this.cdkVirtualScrollViewport) {
790
803
  return false;
791
804
  }
792
805
  const scrollTop = this.cdkVirtualScrollViewport.elementRef.nativeElement.scrollTop;
@@ -1 +1 @@
1
- {"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 } from '@angular/core';\n\nexport interface NgxVirtualSelectFieldOptionParent {\n multiple?: 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',\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 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) {\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 Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n Signal,\n TrackByFunction,\n ViewChild,\n booleanAttribute,\n computed,\n effect,\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, 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: 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 * 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 this._selectionModel?.setSelection(\n ...this._value.map(\n (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\n ),\n );\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._disabled = value;\n this._stateChanges.next();\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled = 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 readonly ngControl: NgControl | null = inject(NgControl, {\n optional: true,\n });\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 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 if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n this._disabled = this.ngControl.disabled ?? false;\n }\n\n this.overlayWidth = this.createOverlayWidthSignal();\n\n this.inheritedColorTheme = this._parentFormField\n ? `mat-${this._parentFormField.color}`\n : '';\n\n effect(() => {\n const filtered = this.filteredOptions();\n // Only reinitialize key manager when panel is open to avoid issues during close\n if (this._keyManager && this.isPanelOpened()) {\n this.initListKeyManager(filtered);\n }\n });\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,\n );\n }\n\n ngOnInit() {\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(() => this.updateRenderedOptionsState(this.options()));\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 this._selectionModel.toggle(changedOption);\n } else if (changedOption.value === null) {\n this._selectionModel.clear();\n\n this.close();\n } else {\n this._selectionModel.select(changedOption);\n\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.disabled = isDisabled;\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\n protected onFilterClear(): void {\n this.filterText.set('');\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 const enabledOptions = this.options().filter((option) => !option.disabled);\n return (\n enabledOptions.length > 0 &&\n enabledOptions.length === this._selectionModel.selected.length\n );\n }\n\n protected isIndeterminate(): boolean {\n if (!this._selectionModel) {\n return false;\n }\n\n const selectedCount = this._selectionModel.selected.length;\n const enabledOptions = this.options().filter((option) => !option.disabled);\n\n return selectedCount > 0 && selectedCount < enabledOptions.length;\n }\n\n protected onSelectAllChange(): void {\n this.toggleAllOptions(this.options());\n this.emitValue();\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 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 this.toggleAllOptions(allOptions);\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 enabledOptionValues = options.filter((option) => !option.disabled);\n\n const hasDeselectedOptions =\n enabledOptionValues.length > this._selectionModel.selected.length;\n\n if (hasDeselectedOptions) {\n this._selectionModel.select(...enabledOptionValues);\n } else {\n this._selectionModel.clear();\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()) {\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 this.assertIsDefined(\n optionComponent,\n `Option component with value ${value} not found`,\n );\n\n optionComponent.setActiveStyles();\n }\n\n // #endregion Key manager\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 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 this.optionsQuery.forEach((optionComponent) => {\n const { option } = this.findOptionByValue(options, optionComponent.value);\n\n if (this._selectionModel.isSelected(option)) {\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 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)=\"open()\"\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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"}
1
+ {"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 } from '@angular/core';\n\nexport interface NgxVirtualSelectFieldOptionParent {\n multiple?: 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',\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 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) {\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 Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n Signal,\n TrackByFunction,\n ViewChild,\n booleanAttribute,\n computed,\n effect,\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, 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: 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 * 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 this._selectionModel?.setSelection(\n ...this._value.map(\n (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\n ),\n );\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._disabled = value;\n this._stateChanges.next();\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled = 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 readonly ngControl: NgControl | null = inject(NgControl, {\n optional: true,\n });\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 private readonly _isClosing = 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 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 if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n this._disabled = this.ngControl.disabled ?? false;\n }\n\n this.overlayWidth = this.createOverlayWidthSignal();\n\n this.inheritedColorTheme = this._parentFormField\n ? `mat-${this._parentFormField.color}`\n : '';\n\n effect(() => {\n const filtered = this.filteredOptions();\n // Only reinitialize key manager when panel is open AND not in the process of closing.\n // This prevents the freeze bug where clearing filterText during close() would\n // trigger recomputation with all items and reinitialize key manager unnecessarily.\n if (this._keyManager && this.isPanelOpened() && !this._isClosing()) {\n this.initListKeyManager(filtered);\n }\n });\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,\n );\n }\n\n ngOnInit() {\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 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.disabled = isDisabled;\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\n protected onFilterClear(): void {\n this.filterText.set('');\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 const enabledOptions = this.options().filter((option) => !option.disabled);\n return (\n enabledOptions.length > 0 &&\n enabledOptions.length === this._selectionModel.selected.length\n );\n }\n\n protected isIndeterminate(): boolean {\n if (!this._selectionModel) {\n return false;\n }\n\n const selectedCount = this._selectionModel.selected.length;\n const enabledOptions = this.options().filter((option) => !option.disabled);\n\n return selectedCount > 0 && selectedCount < enabledOptions.length;\n }\n\n protected onSelectAllChange(): void {\n this.toggleAllOptions(this.options());\n this.emitValue();\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 // Set closing flag FIRST to prevent the effect from running during close.\n // This avoids the freeze bug where clearing filterText triggers filteredOptions\n // recomputation back to all items while panel is still technically open.\n this._isClosing.set(true);\n\n this.isPanelOpened.set(false);\n this.filterText.set(''); // Clear filter when closing\n\n // Reset closing flag after signals are updated\n this._isClosing.set(false);\n\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 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 this.toggleAllOptions(allOptions);\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 enabledOptionValues = options.filter((option) => !option.disabled);\n\n const hasDeselectedOptions =\n enabledOptionValues.length > this._selectionModel.selected.length;\n\n if (hasDeselectedOptions) {\n this._selectionModel.select(...enabledOptionValues);\n } else {\n this._selectionModel.clear();\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 this.assertIsDefined(\n optionComponent,\n `Option component with value ${value} not found`,\n );\n\n optionComponent.setActiveStyles();\n }\n\n // #endregion Key manager\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 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 this.optionsQuery.forEach((optionComponent) => {\n const { option } = this.findOptionByValue(options, optionComponent.value);\n\n if (this._selectionModel.isSelected(option)) {\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 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)=\"open()\"\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-virtual-select-field-filterable",
3
- "version": "1.5.5",
3
+ "version": "1.5.6",
4
4
  "description": "Virtual Select Field for Angular Material",
5
5
  "keywords": [
6
6
  "angular",
@@ -222,6 +222,7 @@ declare class NgxVirtualSelectFieldComponent<TValue> implements OnInit, OnDestro
222
222
  protected readonly inheritedColorTheme: string;
223
223
  protected readonly overlayWidth: Signal<string | number>;
224
224
  protected readonly isPanelOpened: i0.WritableSignal<boolean>;
225
+ private readonly _isClosing;
225
226
  protected readonly filterText: i0.WritableSignal<string>;
226
227
  protected readonly options: i0.WritableSignal<NgxVirtualSelectFieldOptionModel<TValue>[]>;
227
228
  protected readonly filteredOptions: Signal<NgxVirtualSelectFieldOptionModel<TValue>[]>;