ngx-virtual-select-field-filterable 1.5.12 → 1.5.13

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.
@@ -913,7 +913,10 @@ class NgxVirtualSelectFieldComponent {
913
913
  }
914
914
  setActiveOptionComponentByValue(optionComponents, value) {
915
915
  const optionComponent = optionComponents.find((option) => option.value === value);
916
- this.assertIsDefined(optionComponent, `Option component with value ${value} not found`);
916
+ // Option might not be rendered due to virtual scroll - skip if not found
917
+ if (!optionComponent) {
918
+ return;
919
+ }
917
920
  optionComponent.setActiveStyles();
918
921
  }
919
922
  // #endregion Key manager
@@ -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, 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 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, 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 * 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 this._selectionModel?.setSelection(\n ...this._value.map(\n (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\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._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 /**\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 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 // 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,\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 // 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.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 // 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 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 /**\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)=\"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, 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 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, 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 * 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 this._selectionModel?.setSelection(\n ...this._value.map(\n (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\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._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 /**\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 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 // 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,\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 // 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.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 // 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)=\"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.12",
3
+ "version": "1.5.13",
4
4
  "description": "Virtual Select Field for Angular Material",
5
5
  "keywords": [
6
6
  "angular",