ngx-virtual-select-field-filterable 1.4.3 → 1.4.5
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.
package/README.md
CHANGED
|
@@ -32,6 +32,7 @@ Features:
|
|
|
32
32
|
- Multi select
|
|
33
33
|
- Single select
|
|
34
34
|
- Filterable options with search input
|
|
35
|
+
- Clear buttons for filter and selection
|
|
35
36
|
- Integrates with Angular Material Form Field
|
|
36
37
|
- Custom trigger template
|
|
37
38
|
- Custom option template
|
|
@@ -192,6 +193,25 @@ Filterable select with search input
|
|
|
192
193
|
</mat-form-field>
|
|
193
194
|
```
|
|
194
195
|
|
|
196
|
+
Clearable select with clear button
|
|
197
|
+
|
|
198
|
+
```html
|
|
199
|
+
<mat-form-field>
|
|
200
|
+
<mat-label>Clearable Example</mat-label>
|
|
201
|
+
<ngx-virtual-select-field
|
|
202
|
+
[value]="value"
|
|
203
|
+
[clearable]="true"
|
|
204
|
+
multiple
|
|
205
|
+
(valueChange)="onValueChange($event)">
|
|
206
|
+
<ngx-virtual-select-field-option
|
|
207
|
+
*ngxVirtualSelectFieldOptionFor="let option of options"
|
|
208
|
+
[value]="option.value">
|
|
209
|
+
{{ option.label }}
|
|
210
|
+
</ngx-virtual-select-field-option>
|
|
211
|
+
</ngx-virtual-select-field>
|
|
212
|
+
</mat-form-field>
|
|
213
|
+
```
|
|
214
|
+
|
|
195
215
|
## Customization
|
|
196
216
|
|
|
197
217
|
Components supports custom templates for trigger and option elements. You can use `ngx-virtual-select-field-trigger` and `ngx-virtual-select-field-option` components to define custom templates.
|
|
@@ -222,6 +242,8 @@ Component to define select field
|
|
|
222
242
|
| panelClass | `string \| string[] \| null` | `null` | CSS class to be added to the panel element |
|
|
223
243
|
| filterable | `boolean` | `false` | Enable filtering of options with search input |
|
|
224
244
|
| filterPlaceholder | `string` | `'Search...'`| Placeholder text for the filter input |
|
|
245
|
+
| filterClearable | `boolean` | `true` | Show clear button in filter input |
|
|
246
|
+
| clearable | `boolean` | `false` | Show clear button in select trigger to clear all selections |
|
|
225
247
|
| value | `TValue[] \| TValue \| null` | `null` | Value of the select field |
|
|
226
248
|
| placeholder | `string` | none | Placeholder for the select field |
|
|
227
249
|
| required | `boolean` | `false` | Define if fields is required |
|
|
@@ -486,6 +486,12 @@ class NgxVirtualSelectFieldComponent {
|
|
|
486
486
|
this.open();
|
|
487
487
|
}
|
|
488
488
|
onOverlayAttached() {
|
|
489
|
+
// Focus the filter input when overlay is attached
|
|
490
|
+
if (this.filterable) {
|
|
491
|
+
setTimeout(() => {
|
|
492
|
+
this.filterInput?.nativeElement.focus();
|
|
493
|
+
}, 0);
|
|
494
|
+
}
|
|
489
495
|
this.cdkConnectedOverlay.positionChange
|
|
490
496
|
.pipe(take(1), switchMap(() => this._scrolledIndexChange.pipe(take(1))), takeUntilDestroyed(this._destroyRef))
|
|
491
497
|
.subscribe(() => this.navigateToFirstSelectedOption());
|
|
@@ -566,12 +572,6 @@ class NgxVirtualSelectFieldComponent {
|
|
|
566
572
|
this._parentFormField.getConnectedOverlayOrigin();
|
|
567
573
|
}
|
|
568
574
|
this.isPanelOpened.set(true);
|
|
569
|
-
// Focus the filter input when panel opens if filterable is enabled
|
|
570
|
-
if (this.filterable) {
|
|
571
|
-
setTimeout(() => {
|
|
572
|
-
this.filterInput?.nativeElement.focus();
|
|
573
|
-
}, 0);
|
|
574
|
-
}
|
|
575
575
|
}
|
|
576
576
|
close() {
|
|
577
577
|
this.isPanelOpened.set(false);
|
|
@@ -594,8 +594,8 @@ class NgxVirtualSelectFieldComponent {
|
|
|
594
594
|
doPanelOpenedKeydown(event) {
|
|
595
595
|
this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);
|
|
596
596
|
const keyManager = this._keyManager;
|
|
597
|
-
const activeItem = keyManager
|
|
598
|
-
const isTyping = keyManager
|
|
597
|
+
const activeItem = keyManager?.activeItem;
|
|
598
|
+
const isTyping = keyManager?.isTyping();
|
|
599
599
|
const options = this.optionFor.options$.value;
|
|
600
600
|
const isArrowKey = event.key === ARROW_DOWN_KEY || event.key === ARROW_UP_KEY;
|
|
601
601
|
if (isArrowKey && event.altKey) {
|
|
@@ -620,13 +620,13 @@ class NgxVirtualSelectFieldComponent {
|
|
|
620
620
|
this.emitValue();
|
|
621
621
|
}
|
|
622
622
|
else {
|
|
623
|
-
const previouslyFocusedIndex = keyManager
|
|
624
|
-
keyManager
|
|
623
|
+
const previouslyFocusedIndex = keyManager?.activeItemIndex;
|
|
624
|
+
keyManager?.onKeydown(event);
|
|
625
625
|
if (this.multiple &&
|
|
626
626
|
isArrowKey &&
|
|
627
627
|
event.shiftKey &&
|
|
628
|
-
keyManager
|
|
629
|
-
keyManager
|
|
628
|
+
keyManager?.activeItem &&
|
|
629
|
+
keyManager?.activeItemIndex !== previouslyFocusedIndex) {
|
|
630
630
|
this.selectOptionByValue(options, keyManager.activeItem.value);
|
|
631
631
|
}
|
|
632
632
|
}
|
|
@@ -643,7 +643,7 @@ class NgxVirtualSelectFieldComponent {
|
|
|
643
643
|
}
|
|
644
644
|
doPanelClosedKeydown(event) {
|
|
645
645
|
const keyManager = this._keyManager;
|
|
646
|
-
const isTyping = keyManager
|
|
646
|
+
const isTyping = keyManager?.isTyping();
|
|
647
647
|
const isArrowKey = event.key === ARROW_DOWN_KEY ||
|
|
648
648
|
event.key === ARROW_UP_KEY ||
|
|
649
649
|
event.key === ARROW_RIGHT_KEY ||
|
|
@@ -656,13 +656,15 @@ class NgxVirtualSelectFieldComponent {
|
|
|
656
656
|
this.open();
|
|
657
657
|
}
|
|
658
658
|
else if (!this.multiple) {
|
|
659
|
-
const previouslySelectedOptionIndex = keyManager
|
|
660
|
-
keyManager
|
|
661
|
-
const selectedOptionIndex = keyManager
|
|
659
|
+
const previouslySelectedOptionIndex = keyManager?.activeItemIndex;
|
|
660
|
+
keyManager?.onKeydown(event);
|
|
661
|
+
const selectedOptionIndex = keyManager?.activeItemIndex;
|
|
662
662
|
if (selectedOptionIndex &&
|
|
663
663
|
previouslySelectedOptionIndex !== selectedOptionIndex) {
|
|
664
664
|
//TODO: arrow navigation should start from selected options. Currently it starts from the first option
|
|
665
|
-
|
|
665
|
+
if (keyManager.activeItem) {
|
|
666
|
+
this.selectOptionByValue(this.optionFor.options$.value, keyManager.activeItem.value);
|
|
667
|
+
}
|
|
666
668
|
// TODO: Add live announcer
|
|
667
669
|
// We set a duration on the live announcement, because we want the live element to be
|
|
668
670
|
// cleared after a while so that users can't navigate to it using the arrow keys.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-virtual-select-field-filterable.mjs","sources":["../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option-for/virtual-select-field-option-for.directive.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-trigger/virtual-select-field-trigger.directive.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.models.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.component.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.component.html","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.constants.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/keycodes.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.component.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.component.html","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/index.ts","../../../../packages/ngx-virtual-select-field/src/ngx-virtual-select-field-filterable.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport {\n NgxVirtualSelectFieldOptionModel,\n NgxVirtualSelectFieldOptionTemplateContextModel,\n} from './virtual-select-field-option-for.models';\n\n@Directive({\n selector: '[ngxVirtualSelectFieldOptionFor]',\n standalone: true,\n})\nexport class NgxVirtualSelectFieldOptionForDirective<TValue> {\n /**\n * The options collection to render.\n * @required\n */\n @Input({ required: true, alias: 'ngxVirtualSelectFieldOptionForOf' })\n set options(options: NgxVirtualSelectFieldOptionModel<TValue>[]) {\n this.options$.next(options);\n }\n\n options$ = new BehaviorSubject<NgxVirtualSelectFieldOptionModel<TValue>[]>(\n []\n );\n\n constructor(\n public template: TemplateRef<\n NgxVirtualSelectFieldOptionTemplateContextModel<TValue>\n >\n ) {}\n\n static ngTemplateContextGuard<TValue>(\n _dir: NgxVirtualSelectFieldOptionForDirective<TValue>,\n ctx: unknown\n ): ctx is NgxVirtualSelectFieldOptionTemplateContextModel<TValue> {\n return true;\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\n\nexport const NGX_VIRTUAL_SELECT_FIELD_TRIGGER =\n new InjectionToken<NgxVirtualSelectFieldTriggerDirective>(\n 'NGX_VIRTUAL_SELECT_FIELD_TRIGGER'\n );\n\n@Directive({\n selector: 'ngx-virtual-select-field-trigger',\n providers: [\n {\n provide: NGX_VIRTUAL_SELECT_FIELD_TRIGGER,\n useExisting: NgxVirtualSelectFieldTriggerDirective,\n },\n ],\n standalone: true,\n})\nexport class NgxVirtualSelectFieldTriggerDirective {}\n","import { InjectionToken } from '@angular/core';\n\nexport interface NgxVirtualSelectFieldOptionParent {\n multiple?: boolean;\n}\n\nexport const NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT =\n new InjectionToken<NgxVirtualSelectFieldOptionParent>(\n 'NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT'\n );\n","import {\n Component,\n Input,\n Inject,\n ChangeDetectionStrategy,\n EventEmitter,\n Output,\n signal,\n booleanAttribute,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MatPseudoCheckboxModule,\n MatRippleModule,\n} from '@angular/material/core';\n\nimport {\n NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT,\n NgxVirtualSelectFieldOptionParent,\n} from './virtual-select-field-option.models';\nimport { Highlightable } from '@angular/cdk/a11y';\n\n@Component({\n selector: 'ngx-virtual-select-field-option',\n standalone: true,\n imports: [CommonModule, MatPseudoCheckboxModule, MatRippleModule],\n templateUrl: './virtual-select-field-option.component.html',\n styleUrl: './virtual-select-field-option.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'option',\n '(click)': 'onClick()',\n '[class.ngx-virtual-select-field-option--active]': 'active()',\n '[class.ngx-virtual-select-field-option--selected]': 'selected()',\n '[class.ngx-virtual-select-field-option--multiple]': 'multiple',\n '[class.ngx-virtual-select-field-option--disabled]': 'disabled',\n class: 'ngx-virtual-select-field-option',\n },\n})\nexport class NgxVirtualSelectFieldOptionComponent<TValue>\n implements Highlightable\n{\n /**\n * The value of the option.\n * @required\n */\n @Input({ required: true })\n value!: TValue;\n\n /**\n * Whether the option is disabled.\n */\n @Input({ transform: booleanAttribute })\n disabled: boolean = false;\n\n @Output()\n selectedChange = new EventEmitter<\n NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue>\n >();\n\n protected readonly multiple = this._optionParent?.multiple ?? false;\n\n protected readonly active = signal(false);\n\n protected readonly selected = signal(false);\n\n protected readonly hostNativeElement: HTMLElement;\n\n constructor(\n @Inject(NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT)\n private _optionParent: NgxVirtualSelectFieldOptionParent,\n private _elementRef: ElementRef<HTMLElement>\n ) {\n this.hostNativeElement = this._elementRef.nativeElement;\n }\n\n // #region Highlightable\n\n setActiveStyles(): void {\n if (!this.active()) {\n this.active.set(true);\n }\n }\n\n setInactiveStyles(): void {\n if (this.active()) {\n this.active.set(false);\n }\n }\n\n // #endregion Highlightable\n\n deselect() {\n this.selected.set(false);\n }\n\n select() {\n this.selected.set(true);\n }\n\n protected onClick() {\n if (this.disabled) {\n return;\n }\n\n this.selected.set(this.multiple ? !this.selected() : true);\n\n this.selectedChange.emit({\n source: this,\n value: this.value,\n selected: this.selected(),\n });\n }\n}\n\nexport interface NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue> {\n source: NgxVirtualSelectFieldOptionComponent<TValue>;\n value: TValue;\n selected: boolean;\n}\n","@if(multiple){\n<mat-pseudo-checkbox\n [state]=\"selected() ? 'checked' : 'unchecked'\"\n></mat-pseudo-checkbox>\n}\n\n<span class=\"ngx-virtual-select-field-option__label\"\n ><ng-content></ng-content\n></span>\n\n@if (!multiple && selected() ) {\n<mat-pseudo-checkbox state=\"checked\" appearance=\"minimal\"></mat-pseudo-checkbox>\n}\n\n<div\n class=\"ngx-virtual-select-field-option__ripple\"\n matRipple\n [matRippleTrigger]=\"hostNativeElement\"\n [matRippleDisabled]=\"disabled\"\n></div>\n","import { ConnectedPosition } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nimport { NgxVirtualSelectFieldConfig } from './virtual-select-field.models';\n\nexport const POSITIONS: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'ngx-virtual-select-field-overlay--above',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n panelClass: 'ngx-virtual-select-field-overlay--above',\n },\n];\n\nexport const NGX_VIRTUAL_SELECT_FIELD_CONFIG = new InjectionToken<NgxVirtualSelectFieldConfig>(\n 'NGX_VIRTUAL_SELECT_FIELD_CONFIG'\n);\n\nexport const PANEL_WIDTH_AUTO = 'auto';\n\nexport const PANEL_VIEWPORT_PAGE_SIZE = 8;\n\nexport const OPTION_HEIGHT = 48;\n","export const ARROW_DOWN_KEY = 'ArrowDown';\n\nexport const ARROW_UP_KEY = 'ArrowUp';\n\nexport const ARROW_RIGHT_KEY = 'ArrowRight';\n\nexport const ARROW_LEFT_KEY = 'ArrowLeft';\n\nexport const ENTER_CODE = 'Enter';\n\nexport const SPACE_CODE = 'Space';\n\nexport const KEY_A_CODE = 'KeyA';\n","//#region imports\n\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n Signal,\n TrackByFunction,\n ViewChild,\n booleanAttribute,\n computed,\n effect,\n inject,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ListKeyManager } from '@angular/cdk/a11y';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n OverlayModule,\n ViewportRuler,\n} from '@angular/cdk/overlay';\nimport {\n CdkVirtualScrollViewport,\n ScrollingModule,\n} from '@angular/cdk/scrolling';\nimport {\n MAT_FORM_FIELD,\n MatFormField,\n MatFormFieldControl,\n MatFormFieldModule,\n} from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { 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';\n\n//#endregion imports\n\n@Component({\n selector: 'ngx-virtual-select-field',\n exportAs: 'ngxVirtualSelectField',\n standalone: true,\n imports: [CommonModule, OverlayModule, ScrollingModule, MatFormFieldModule, MatInputModule],\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 * Value of the select field\n * @default null\n */\n @Input()\n set value(value: TValue[] | TValue | null) {\n if (this._value === value) {\n return;\n }\n\n value = value || [];\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n this._value = value;\n\n this._selectionModel?.setSelection(\n ...this._value.map(\n (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\n ),\n );\n\n this._stateChanges.next();\n }\n private _value: TValue[] = [];\n\n /**\n * Placeholder for the select field\n * @default none\n */\n @Input()\n set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n this._stateChanges.next();\n }\n\n get placeholder(): string {\n return this._placeholder;\n }\n\n private _placeholder = '';\n\n /**\n * Define if fields is required\n * @default false\n */\n @Input({ transform: booleanAttribute })\n set required(req: boolean) {\n this._required = req;\n this._stateChanges.next();\n }\n\n get required(): boolean {\n return this._required;\n }\n\n private _required = false;\n\n /**\n * Define if field is disabled\n * @default false\n */\n @Input({ transform: booleanAttribute })\n set disabled(value: boolean) {\n this._disabled = value;\n this._stateChanges.next();\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled = false;\n\n /**\n * Value change event\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n valueChange = output<any>();\n\n /**\n * Selection change event\n * Emits after value change and form control update\n */\n selectionChange = output<NgxVirtualSelectFieldChange<TValue>>();\n\n //#endregion Inputs/Outputs\n\n @ViewChild(CdkVirtualScrollViewport, { static: false })\n cdkVirtualScrollViewport!: CdkVirtualScrollViewport;\n\n @ViewChild(CdkConnectedOverlay, { static: false })\n cdkConnectedOverlay!: CdkConnectedOverlay;\n\n @ViewChild('filterInput', { static: false })\n filterInput: ElementRef<HTMLInputElement> | undefined;\n\n @ContentChild(NgxVirtualSelectFieldOptionForDirective)\n optionFor!: NgxVirtualSelectFieldOptionForDirective<TValue>;\n\n @ContentChild(NGX_VIRTUAL_SELECT_FIELD_TRIGGER)\n customTrigger: NgxVirtualSelectFieldTriggerDirective | null = null;\n\n @ContentChildren(NgxVirtualSelectFieldOptionComponent)\n optionsQuery: QueryList<NgxVirtualSelectFieldOptionComponent<TValue>> | null =\n null;\n\n readonly id = `ngx-virtual-select-field-${NgxVirtualSelectFieldComponent.nextId++}`;\n readonly controlType = 'ngx-virtual-select-field';\n readonly ngControl: NgControl | null = inject(NgControl, {\n optional: true,\n });\n autofilled = false;\n\n protected readonly POSITIONS = POSITIONS;\n protected readonly overlayPanelClass: string | string[] =\n this._defaultOptions?.overlayPanelClass || '';\n protected readonly inheritedColorTheme: string;\n protected readonly overlayWidth: Signal<string | number>;\n\n protected readonly isPanelOpened = signal(false);\n protected readonly filterText = signal('');\n protected readonly options = signal<NgxVirtualSelectFieldOptionModel<TValue>[]>([]);\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 triggerValue$: Observable<string> | null = null;\n protected preferredOverlayOrigin: CdkOverlayOrigin | ElementRef | undefined;\n\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _elRef: ElementRef<HTMLElement> = inject(ElementRef);\n private readonly _stateChanges = new Subject<void>();\n private readonly _scrolledIndexChange = new Subject<void>();\n\n private _onChange: (value: TValue[] | TValue) => void = () => void 0;\n private _onTouched: () => void = () => void 0;\n\n private _selectionModel!: SelectionModel<\n NgxVirtualSelectFieldOptionModel<TValue>\n >;\n private _keyManager: ListKeyManager<\n NgxVirtualSelectFieldOptionModel<TValue>\n > | null = null;\n\n constructor(\n @Optional()\n @Inject(MAT_FORM_FIELD)\n private _parentFormField: MatFormField,\n @Optional()\n @Inject(NGX_VIRTUAL_SELECT_FIELD_CONFIG)\n private _defaultOptions?: NgxVirtualSelectFieldConfig,\n ) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n this._disabled = this.ngControl.disabled ?? false;\n }\n\n this.overlayWidth = this.createOverlayWidthSignal();\n\n this.inheritedColorTheme = this._parentFormField\n ? `mat-${this._parentFormField.color}`\n : '';\n\n effect(() => {\n const filtered = this.filteredOptions();\n if (this._keyManager) {\n this.initListKeyManager(filtered);\n }\n });\n }\n\n private createOverlayWidthSignal() {\n const changeDetectorRef = inject(ChangeDetectorRef);\n\n // NOTE: View port ruler change stream runs outside the zone.\n // Need to run change detection manually to trigger computed signal below.\n const viewPortRulerChange = toSignal(\n inject(ViewportRuler)\n .change()\n .pipe(\n takeUntilDestroyed(this._destroyRef),\n tap(() => changeDetectorRef.detectChanges()),\n ),\n );\n\n return computed(() => {\n viewPortRulerChange();\n\n return this.resolveOverlayWidth(this.preferredOverlayOrigin);\n });\n }\n\n private resolveOverlayWidth(\n preferredOrigin: ElementRef<ElementRef> | CdkOverlayOrigin | undefined,\n ): string | number {\n if (!this.isPanelOpened()) {\n return 0;\n }\n\n if (this.panelWidth !== PANEL_WIDTH_AUTO) {\n return this.panelWidth ?? '';\n }\n\n const refToMeasure =\n preferredOrigin instanceof CdkOverlayOrigin\n ? preferredOrigin.elementRef\n : preferredOrigin || this._elRef;\n\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n\n get stateChanges(): Observable<void> {\n return this._stateChanges.asObservable();\n }\n\n get errorState(): boolean {\n return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n }\n\n get focused(): boolean {\n // NOTE: panel open is needed to keep form field in focused state during interaction with options\n return this._focused || this.isPanelOpened();\n }\n private _focused = false;\n\n protected get maxPageSize(): number {\n return Math.min(\n this.panelViewportPageSize,\n this.optionFor.options$.value.length,\n );\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<\n NgxVirtualSelectFieldOptionModel<TValue>\n >(this.multiple, [], true);\n }\n\n ngAfterContentInit() {\n this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n if (!this.customTrigger) {\n this.triggerValue$ = this._selectionModel.changed.pipe(\n startWith(null),\n map((_selected) =>\n this._selectionModel.selected\n .map((option) => option?.label ?? '')\n .join(', '),\n ),\n );\n }\n\n // Subscribe to options$ and update the options signal\n this.optionFor.options$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((options) => {\n this.options.set(options);\n this._selectionModel?.setSelection(\n ...this._value.map((v) => options.find((o) => o.value === v)!),\n );\n });\n\n this.optionsQuery.changes\n .pipe(\n switchMap(() =>\n merge(...this.optionsQuery!.map((option) => option.selectedChange)),\n ),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe((selectionEvent) =>\n this.updateOptionSelection(\n selectionEvent,\n this.options(),\n ),\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, index: selectedIndex } =\n this.findOptionByValue(options, selectionEvent.value);\n\n if (this.multiple) {\n this._selectionModel.toggle(changedOption);\n } else if (changedOption.value === null) {\n this._selectionModel.clear();\n\n this.close();\n } else {\n this._selectionModel.select(changedOption);\n\n this.close();\n }\n\n if (this._selectionModel.isSelected(changedOption)) {\n this._keyManager?.setActiveItem(selectedIndex);\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 this.cdkConnectedOverlay.positionChange\n .pipe(\n take(1),\n switchMap(() => this._scrolledIndexChange.pipe(take(1))),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe(() => this.navigateToFirstSelectedOption());\n }\n\n private navigateToFirstSelectedOption() {\n if (this._selectionModel.isEmpty()) {\n return;\n }\n\n let targetIndex = this.optionFor.options$.value.findIndex(\n (option) => option === this._selectionModel.selected[0],\n );\n\n targetIndex = targetIndex - this.maxPageSize / 2;\n targetIndex = Math.max(0, targetIndex);\n\n this.cdkVirtualScrollViewport.scrollToIndex(targetIndex);\n }\n\n protected onFocusIn() {\n if (!this.focused) {\n this._focused = true;\n this._stateChanges.next();\n }\n }\n\n protected onFocusOut() {\n this._focused = false;\n\n if (!this.isPanelOpened()) {\n this._onTouched();\n this._stateChanges.next();\n }\n }\n\n protected optionTrackBy: TrackByFunction<\n NgxVirtualSelectFieldOptionModel<TValue>\n > = (_index: number, option) => {\n return option.value;\n };\n\n protected onScrolledIndexChange(): void {\n this._scrolledIndexChange.next();\n }\n\n protected onFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filterText.set(input.value);\n }\n\n protected onFilterClear(): void {\n this.filterText.set('');\n // Re-focus the filter input after clearing\n setTimeout(() => {\n this.filterInput?.nativeElement.focus();\n }, 0);\n }\n\n protected onClear(event: Event): void {\n event.stopPropagation(); // Prevent opening the panel\n this._selectionModel.clear();\n this.emitValue();\n }\n\n protected onFilterKeyDown(event: KeyboardEvent): void {\n const isArrowKey =\n event.key === ARROW_DOWN_KEY ||\n event.key === ARROW_UP_KEY ||\n event.key === ARROW_LEFT_KEY ||\n event.key === ARROW_RIGHT_KEY;\n\n // Prevent arrow keys from propagating when there's text in the input\n if (isArrowKey && this.filterText()) {\n if (event.key === ARROW_DOWN_KEY || event.key === ARROW_UP_KEY) {\n // Arrow down/up should move to the options list\n event.preventDefault();\n this.cdkVirtualScrollViewport.elementRef.nativeElement.focus();\n this._keyManager?.onKeydown(event);\n }\n // Left/Right arrows should work normally in the input for cursor movement\n return;\n }\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 this.isPanelOpened.set(true);\n\n // Focus the filter input when panel opens if filterable is enabled\n if (this.filterable) {\n setTimeout(() => {\n this.filterInput?.nativeElement.focus();\n }, 0);\n }\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 const options = this.optionFor.options$.value;\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(options, activeItem.value);\n\n this._selectionModel.toggle(option);\n\n this.emitValue();\n } else if (\n !isTyping &&\n this.multiple &&\n event.code === KEY_A_CODE &&\n event.ctrlKey\n ) {\n event.preventDefault();\n\n this.toggleAllOptions(options);\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 ) {\n this.selectOptionByValue(options, keyManager.activeItem.value);\n }\n }\n }\n\n private toggleAllOptions(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n ) {\n const enabledOptionValues = options.filter((option) => !option.disabled);\n\n const hasDeselectedOptions =\n enabledOptionValues.length > this._selectionModel.selected.length;\n\n if (hasDeselectedOptions) {\n this._selectionModel.select(...enabledOptionValues);\n } else {\n this._selectionModel.clear();\n }\n }\n\n private doPanelClosedKeydown(event: KeyboardEvent): void {\n 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 this.selectOptionByValue(\n this.optionFor.options$.value,\n keyManager.activeItem!.value,\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 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\n private normalizeKeyManagerOptions(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n ) {\n return options.map((option) => ({\n value: option.value,\n label: option.label,\n disabled: option.disabled ?? false,\n getLabel: () => option.getLabel?.() ?? option.label,\n }));\n }\n\n private updateActiveOptionComponent(\n optionComponents: NgxVirtualSelectFieldOptionComponent<TValue>[],\n activeOption: NgxVirtualSelectFieldOptionModel<TValue>,\n index: number,\n ) {\n optionComponents.forEach((option) => option.setInactiveStyles());\n\n const shouldScrollToActiveItem = this.shouldScrollToActiveItem(index);\n if (shouldScrollToActiveItem) {\n this.cdkVirtualScrollViewport.scrolledIndexChange\n .pipe(take(1))\n .subscribe(() => {\n this.assertIsDefined(\n this.optionsQuery,\n `optionsQuery is not defined`,\n );\n\n this.setActiveOptionComponentByValue(\n this.optionsQuery.toArray(),\n activeOption.value,\n );\n });\n\n this.cdkVirtualScrollViewport.scrollToIndex(index);\n } else {\n this.setActiveOptionComponentByValue(\n optionComponents,\n activeOption.value,\n );\n }\n }\n\n private shouldScrollToActiveItem(targetIndex: number): boolean {\n if (!this.isPanelOpened()) {\n return false;\n }\n\n const scrollTop =\n this.cdkVirtualScrollViewport.elementRef.nativeElement.scrollTop;\n\n // NOTE: -1 is needed to prevent scrolling to next item out of the viewport\n const bottomScroll = scrollTop + this.optionHeight * this.maxPageSize - 1;\n const targetScroll = this.optionHeight * targetIndex;\n\n return scrollTop > targetScroll || bottomScroll < targetScroll;\n }\n\n private setActiveOptionComponentByValue(\n optionComponents: NgxVirtualSelectFieldOptionComponent<TValue>[],\n value: TValue,\n ) {\n const optionComponent = optionComponents.find(\n (option) => option.value === value,\n );\n\n this.assertIsDefined(\n optionComponent,\n `Option component with value ${value} not found`,\n );\n\n optionComponent.setActiveStyles();\n }\n\n // #endregion Key manager\n\n private focus() {\n this._elRef.nativeElement.focus();\n }\n\n private selectOptionByValue(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n value: TValue,\n ) {\n const { option } = this.findOptionByValue(options, value);\n\n this._selectionModel.select(option);\n\n this.emitValue();\n }\n\n private updateRenderedOptionsState(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n ) {\n this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n this.optionsQuery.forEach((optionComponent) => {\n const { option } = this.findOptionByValue(options, optionComponent.value);\n\n if (this._selectionModel.isSelected(option)) {\n optionComponent.select();\n } else {\n // NOTE: deselect for all is needed because of virtual scroll and reusing options\n optionComponent.deselect();\n }\n });\n }\n\n private findOptionByValue(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n value: TValue,\n ): { option: NgxVirtualSelectFieldOptionModel<TValue>; index: number } {\n const index = options.findIndex((option) => option.value === value);\n\n const option = options[index];\n\n this.assertIsDefined(option, `Option with value ${value} not found`);\n\n return { option, index };\n }\n\n private emitValue(): void {\n this._value = this._selectionModel.selected.map((option) => option.value);\n\n const outputValue = this.multiple ? this._value : this._value[0];\n\n this.valueChange.emit(outputValue);\n this._onChange(outputValue);\n this.selectionChange.emit(\n new NgxVirtualSelectFieldChange(this, outputValue),\n );\n }\n\n private assertIsDefined<T>(\n value: T,\n message: string,\n ): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(message);\n }\n }\n\n private static nextId = 0;\n}\n\nexport class NgxVirtualSelectFieldChange<TValue> {\n constructor(\n public source: NgxVirtualSelectFieldComponent<TValue>,\n public value: any,\n ) {}\n}\n","<div\n class=\"ngx-virtual-select-field-trigger\"\n cdk-overlay-origin\n (click)=\"open()\"\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n>\n <div class=\"ngx-virtual-select-field-value\">\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 <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 </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) {\n <div class=\"ngx-virtual-select-field-filter-wrapper\">\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 <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 </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":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-virtual-select-field-filterable.mjs","sources":["../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option-for/virtual-select-field-option-for.directive.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-trigger/virtual-select-field-trigger.directive.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.models.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.component.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field-option/virtual-select-field-option.component.html","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.constants.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/keycodes.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.component.ts","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/virtual-select-field.component.html","../../../../packages/ngx-virtual-select-field/src/lib/virtual-select-field/index.ts","../../../../packages/ngx-virtual-select-field/src/ngx-virtual-select-field-filterable.ts"],"sourcesContent":["import { Directive, Input, TemplateRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport {\n NgxVirtualSelectFieldOptionModel,\n NgxVirtualSelectFieldOptionTemplateContextModel,\n} from './virtual-select-field-option-for.models';\n\n@Directive({\n selector: '[ngxVirtualSelectFieldOptionFor]',\n standalone: true,\n})\nexport class NgxVirtualSelectFieldOptionForDirective<TValue> {\n /**\n * The options collection to render.\n * @required\n */\n @Input({ required: true, alias: 'ngxVirtualSelectFieldOptionForOf' })\n set options(options: NgxVirtualSelectFieldOptionModel<TValue>[]) {\n this.options$.next(options);\n }\n\n options$ = new BehaviorSubject<NgxVirtualSelectFieldOptionModel<TValue>[]>(\n []\n );\n\n constructor(\n public template: TemplateRef<\n NgxVirtualSelectFieldOptionTemplateContextModel<TValue>\n >\n ) {}\n\n static ngTemplateContextGuard<TValue>(\n _dir: NgxVirtualSelectFieldOptionForDirective<TValue>,\n ctx: unknown\n ): ctx is NgxVirtualSelectFieldOptionTemplateContextModel<TValue> {\n return true;\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\n\nexport const NGX_VIRTUAL_SELECT_FIELD_TRIGGER =\n new InjectionToken<NgxVirtualSelectFieldTriggerDirective>(\n 'NGX_VIRTUAL_SELECT_FIELD_TRIGGER'\n );\n\n@Directive({\n selector: 'ngx-virtual-select-field-trigger',\n providers: [\n {\n provide: NGX_VIRTUAL_SELECT_FIELD_TRIGGER,\n useExisting: NgxVirtualSelectFieldTriggerDirective,\n },\n ],\n standalone: true,\n})\nexport class NgxVirtualSelectFieldTriggerDirective {}\n","import { InjectionToken } from '@angular/core';\n\nexport interface NgxVirtualSelectFieldOptionParent {\n multiple?: boolean;\n}\n\nexport const NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT =\n new InjectionToken<NgxVirtualSelectFieldOptionParent>(\n 'NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT'\n );\n","import {\n Component,\n Input,\n Inject,\n ChangeDetectionStrategy,\n EventEmitter,\n Output,\n signal,\n booleanAttribute,\n ElementRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n MatPseudoCheckboxModule,\n MatRippleModule,\n} from '@angular/material/core';\n\nimport {\n NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT,\n NgxVirtualSelectFieldOptionParent,\n} from './virtual-select-field-option.models';\nimport { Highlightable } from '@angular/cdk/a11y';\n\n@Component({\n selector: 'ngx-virtual-select-field-option',\n standalone: true,\n imports: [CommonModule, MatPseudoCheckboxModule, MatRippleModule],\n templateUrl: './virtual-select-field-option.component.html',\n styleUrl: './virtual-select-field-option.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'option',\n '(click)': 'onClick()',\n '[class.ngx-virtual-select-field-option--active]': 'active()',\n '[class.ngx-virtual-select-field-option--selected]': 'selected()',\n '[class.ngx-virtual-select-field-option--multiple]': 'multiple',\n '[class.ngx-virtual-select-field-option--disabled]': 'disabled',\n class: 'ngx-virtual-select-field-option',\n },\n})\nexport class NgxVirtualSelectFieldOptionComponent<TValue>\n implements Highlightable\n{\n /**\n * The value of the option.\n * @required\n */\n @Input({ required: true })\n value!: TValue;\n\n /**\n * Whether the option is disabled.\n */\n @Input({ transform: booleanAttribute })\n disabled: boolean = false;\n\n @Output()\n selectedChange = new EventEmitter<\n NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue>\n >();\n\n protected readonly multiple = this._optionParent?.multiple ?? false;\n\n protected readonly active = signal(false);\n\n protected readonly selected = signal(false);\n\n protected readonly hostNativeElement: HTMLElement;\n\n constructor(\n @Inject(NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT)\n private _optionParent: NgxVirtualSelectFieldOptionParent,\n private _elementRef: ElementRef<HTMLElement>\n ) {\n this.hostNativeElement = this._elementRef.nativeElement;\n }\n\n // #region Highlightable\n\n setActiveStyles(): void {\n if (!this.active()) {\n this.active.set(true);\n }\n }\n\n setInactiveStyles(): void {\n if (this.active()) {\n this.active.set(false);\n }\n }\n\n // #endregion Highlightable\n\n deselect() {\n this.selected.set(false);\n }\n\n select() {\n this.selected.set(true);\n }\n\n protected onClick() {\n if (this.disabled) {\n return;\n }\n\n this.selected.set(this.multiple ? !this.selected() : true);\n\n this.selectedChange.emit({\n source: this,\n value: this.value,\n selected: this.selected(),\n });\n }\n}\n\nexport interface NgxVirtualSelectFieldOptionSelectionChangeEvent<TValue> {\n source: NgxVirtualSelectFieldOptionComponent<TValue>;\n value: TValue;\n selected: boolean;\n}\n","@if(multiple){\n<mat-pseudo-checkbox\n [state]=\"selected() ? 'checked' : 'unchecked'\"\n></mat-pseudo-checkbox>\n}\n\n<span class=\"ngx-virtual-select-field-option__label\"\n ><ng-content></ng-content\n></span>\n\n@if (!multiple && selected() ) {\n<mat-pseudo-checkbox state=\"checked\" appearance=\"minimal\"></mat-pseudo-checkbox>\n}\n\n<div\n class=\"ngx-virtual-select-field-option__ripple\"\n matRipple\n [matRippleTrigger]=\"hostNativeElement\"\n [matRippleDisabled]=\"disabled\"\n></div>\n","import { ConnectedPosition } from '@angular/cdk/overlay';\nimport { InjectionToken } from '@angular/core';\n\nimport { NgxVirtualSelectFieldConfig } from './virtual-select-field.models';\n\nexport const POSITIONS: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'ngx-virtual-select-field-overlay--above',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n panelClass: 'ngx-virtual-select-field-overlay--above',\n },\n];\n\nexport const NGX_VIRTUAL_SELECT_FIELD_CONFIG = new InjectionToken<NgxVirtualSelectFieldConfig>(\n 'NGX_VIRTUAL_SELECT_FIELD_CONFIG'\n);\n\nexport const PANEL_WIDTH_AUTO = 'auto';\n\nexport const PANEL_VIEWPORT_PAGE_SIZE = 8;\n\nexport const OPTION_HEIGHT = 48;\n","export const ARROW_DOWN_KEY = 'ArrowDown';\n\nexport const ARROW_UP_KEY = 'ArrowUp';\n\nexport const ARROW_RIGHT_KEY = 'ArrowRight';\n\nexport const ARROW_LEFT_KEY = 'ArrowLeft';\n\nexport const ENTER_CODE = 'Enter';\n\nexport const SPACE_CODE = 'Space';\n\nexport const KEY_A_CODE = 'KeyA';\n","//#region imports\n\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n Signal,\n TrackByFunction,\n ViewChild,\n booleanAttribute,\n computed,\n effect,\n inject,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ListKeyManager } from '@angular/cdk/a11y';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n OverlayModule,\n ViewportRuler,\n} from '@angular/cdk/overlay';\nimport {\n CdkVirtualScrollViewport,\n ScrollingModule,\n} from '@angular/cdk/scrolling';\nimport {\n MAT_FORM_FIELD,\n MatFormField,\n MatFormFieldControl,\n MatFormFieldModule,\n} from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { 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';\n\n//#endregion imports\n\n@Component({\n selector: 'ngx-virtual-select-field',\n exportAs: 'ngxVirtualSelectField',\n standalone: true,\n imports: [CommonModule, OverlayModule, ScrollingModule, MatFormFieldModule, MatInputModule],\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 * Value of the select field\n * @default null\n */\n @Input()\n set value(value: TValue[] | TValue | null) {\n if (this._value === value) {\n return;\n }\n\n value = value || [];\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n this._value = value;\n\n this._selectionModel?.setSelection(\n ...this._value.map(\n (v) => this.optionFor.options$.value.find((o) => o.value === v)!,\n ),\n );\n\n this._stateChanges.next();\n }\n private _value: TValue[] = [];\n\n /**\n * Placeholder for the select field\n * @default none\n */\n @Input()\n set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n this._stateChanges.next();\n }\n\n get placeholder(): string {\n return this._placeholder;\n }\n\n private _placeholder = '';\n\n /**\n * Define if fields is required\n * @default false\n */\n @Input({ transform: booleanAttribute })\n set required(req: boolean) {\n this._required = req;\n this._stateChanges.next();\n }\n\n get required(): boolean {\n return this._required;\n }\n\n private _required = false;\n\n /**\n * Define if field is disabled\n * @default false\n */\n @Input({ transform: booleanAttribute })\n set disabled(value: boolean) {\n this._disabled = value;\n this._stateChanges.next();\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n private _disabled = false;\n\n /**\n * Value change event\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n valueChange = output<any>();\n\n /**\n * Selection change event\n * Emits after value change and form control update\n */\n selectionChange = output<NgxVirtualSelectFieldChange<TValue>>();\n\n //#endregion Inputs/Outputs\n\n @ViewChild(CdkVirtualScrollViewport, { static: false })\n cdkVirtualScrollViewport!: CdkVirtualScrollViewport;\n\n @ViewChild(CdkConnectedOverlay, { static: false })\n cdkConnectedOverlay!: CdkConnectedOverlay;\n\n @ViewChild('filterInput', { static: false })\n filterInput: ElementRef<HTMLInputElement> | undefined;\n\n @ContentChild(NgxVirtualSelectFieldOptionForDirective)\n optionFor!: NgxVirtualSelectFieldOptionForDirective<TValue>;\n\n @ContentChild(NGX_VIRTUAL_SELECT_FIELD_TRIGGER)\n customTrigger: NgxVirtualSelectFieldTriggerDirective | null = null;\n\n @ContentChildren(NgxVirtualSelectFieldOptionComponent)\n optionsQuery: QueryList<NgxVirtualSelectFieldOptionComponent<TValue>> | null =\n null;\n\n readonly id = `ngx-virtual-select-field-${NgxVirtualSelectFieldComponent.nextId++}`;\n readonly controlType = 'ngx-virtual-select-field';\n readonly ngControl: NgControl | null = inject(NgControl, {\n optional: true,\n });\n autofilled = false;\n\n protected readonly POSITIONS = POSITIONS;\n protected readonly overlayPanelClass: string | string[] =\n this._defaultOptions?.overlayPanelClass || '';\n protected readonly inheritedColorTheme: string;\n protected readonly overlayWidth: Signal<string | number>;\n\n protected readonly isPanelOpened = signal(false);\n protected readonly filterText = signal('');\n protected readonly options = signal<NgxVirtualSelectFieldOptionModel<TValue>[]>([]);\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 triggerValue$: Observable<string> | null = null;\n protected preferredOverlayOrigin: CdkOverlayOrigin | ElementRef | undefined;\n\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _elRef: ElementRef<HTMLElement> = inject(ElementRef);\n private readonly _stateChanges = new Subject<void>();\n private readonly _scrolledIndexChange = new Subject<void>();\n\n private _onChange: (value: TValue[] | TValue) => void = () => void 0;\n private _onTouched: () => void = () => void 0;\n\n private _selectionModel!: SelectionModel<\n NgxVirtualSelectFieldOptionModel<TValue>\n >;\n private _keyManager: ListKeyManager<\n NgxVirtualSelectFieldOptionModel<TValue>\n > | null = null;\n\n constructor(\n @Optional()\n @Inject(MAT_FORM_FIELD)\n private _parentFormField: MatFormField,\n @Optional()\n @Inject(NGX_VIRTUAL_SELECT_FIELD_CONFIG)\n private _defaultOptions?: NgxVirtualSelectFieldConfig,\n ) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n this._disabled = this.ngControl.disabled ?? false;\n }\n\n this.overlayWidth = this.createOverlayWidthSignal();\n\n this.inheritedColorTheme = this._parentFormField\n ? `mat-${this._parentFormField.color}`\n : '';\n\n effect(() => {\n const filtered = this.filteredOptions();\n if (this._keyManager) {\n this.initListKeyManager(filtered);\n }\n });\n }\n\n private createOverlayWidthSignal() {\n const changeDetectorRef = inject(ChangeDetectorRef);\n\n // NOTE: View port ruler change stream runs outside the zone.\n // Need to run change detection manually to trigger computed signal below.\n const viewPortRulerChange = toSignal(\n inject(ViewportRuler)\n .change()\n .pipe(\n takeUntilDestroyed(this._destroyRef),\n tap(() => changeDetectorRef.detectChanges()),\n ),\n );\n\n return computed(() => {\n viewPortRulerChange();\n\n return this.resolveOverlayWidth(this.preferredOverlayOrigin);\n });\n }\n\n private resolveOverlayWidth(\n preferredOrigin: ElementRef<ElementRef> | CdkOverlayOrigin | undefined,\n ): string | number {\n if (!this.isPanelOpened()) {\n return 0;\n }\n\n if (this.panelWidth !== PANEL_WIDTH_AUTO) {\n return this.panelWidth ?? '';\n }\n\n const refToMeasure =\n preferredOrigin instanceof CdkOverlayOrigin\n ? preferredOrigin.elementRef\n : preferredOrigin || this._elRef;\n\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n\n get shouldLabelFloat() {\n return this.focused || !this.empty;\n }\n\n get empty() {\n return !this._selectionModel || this._selectionModel.isEmpty();\n }\n\n get stateChanges(): Observable<void> {\n return this._stateChanges.asObservable();\n }\n\n get errorState(): boolean {\n return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n }\n\n get focused(): boolean {\n // NOTE: panel open is needed to keep form field in focused state during interaction with options\n return this._focused || this.isPanelOpened();\n }\n private _focused = false;\n\n protected get maxPageSize(): number {\n return Math.min(\n this.panelViewportPageSize,\n this.optionFor.options$.value.length,\n );\n }\n\n ngOnInit() {\n this._selectionModel = new SelectionModel<\n NgxVirtualSelectFieldOptionModel<TValue>\n >(this.multiple, [], true);\n }\n\n ngAfterContentInit() {\n this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n if (!this.customTrigger) {\n this.triggerValue$ = this._selectionModel.changed.pipe(\n startWith(null),\n map((_selected) =>\n this._selectionModel.selected\n .map((option) => option?.label ?? '')\n .join(', '),\n ),\n );\n }\n\n // Subscribe to options$ and update the options signal\n this.optionFor.options$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((options) => {\n this.options.set(options);\n this._selectionModel?.setSelection(\n ...this._value.map((v) => options.find((o) => o.value === v)!),\n );\n });\n\n this.optionsQuery.changes\n .pipe(\n switchMap(() =>\n merge(...this.optionsQuery!.map((option) => option.selectedChange)),\n ),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe((selectionEvent) =>\n this.updateOptionSelection(\n selectionEvent,\n this.options(),\n ),\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, index: selectedIndex } =\n this.findOptionByValue(options, selectionEvent.value);\n\n if (this.multiple) {\n this._selectionModel.toggle(changedOption);\n } else if (changedOption.value === null) {\n this._selectionModel.clear();\n\n this.close();\n } else {\n this._selectionModel.select(changedOption);\n\n this.close();\n }\n\n if (this._selectionModel.isSelected(changedOption)) {\n this._keyManager?.setActiveItem(selectedIndex);\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) {\n setTimeout(() => {\n this.filterInput?.nativeElement.focus();\n }, 0);\n }\n\n this.cdkConnectedOverlay.positionChange\n .pipe(\n take(1),\n switchMap(() => this._scrolledIndexChange.pipe(take(1))),\n takeUntilDestroyed(this._destroyRef),\n )\n .subscribe(() => this.navigateToFirstSelectedOption());\n }\n\n private navigateToFirstSelectedOption() {\n if (this._selectionModel.isEmpty()) {\n return;\n }\n\n let targetIndex = this.optionFor.options$.value.findIndex(\n (option) => option === this._selectionModel.selected[0],\n );\n\n targetIndex = targetIndex - this.maxPageSize / 2;\n targetIndex = Math.max(0, targetIndex);\n\n this.cdkVirtualScrollViewport.scrollToIndex(targetIndex);\n }\n\n protected onFocusIn() {\n if (!this.focused) {\n this._focused = true;\n this._stateChanges.next();\n }\n }\n\n protected onFocusOut() {\n this._focused = false;\n\n if (!this.isPanelOpened()) {\n this._onTouched();\n this._stateChanges.next();\n }\n }\n\n protected optionTrackBy: TrackByFunction<\n NgxVirtualSelectFieldOptionModel<TValue>\n > = (_index: number, option) => {\n return option.value;\n };\n\n protected onScrolledIndexChange(): void {\n this._scrolledIndexChange.next();\n }\n\n protected onFilterInput(event: Event): void {\n const input = event.target as HTMLInputElement;\n this.filterText.set(input.value);\n }\n\n protected onFilterClear(): void {\n this.filterText.set('');\n // Re-focus the filter input after clearing\n setTimeout(() => {\n this.filterInput?.nativeElement.focus();\n }, 0);\n }\n\n protected onClear(event: Event): void {\n event.stopPropagation(); // Prevent opening the panel\n this._selectionModel.clear();\n this.emitValue();\n }\n\n protected onFilterKeyDown(event: KeyboardEvent): void {\n const isArrowKey =\n event.key === ARROW_DOWN_KEY ||\n event.key === ARROW_UP_KEY ||\n event.key === ARROW_LEFT_KEY ||\n event.key === ARROW_RIGHT_KEY;\n\n // Prevent arrow keys from propagating when there's text in the input\n if (isArrowKey && this.filterText()) {\n if (event.key === ARROW_DOWN_KEY || event.key === ARROW_UP_KEY) {\n // Arrow down/up should move to the options list\n event.preventDefault();\n this.cdkVirtualScrollViewport.elementRef.nativeElement.focus();\n this._keyManager?.onKeydown(event);\n }\n // Left/Right arrows should work normally in the input for cursor movement\n return;\n }\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 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 const options = this.optionFor.options$.value;\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(options, activeItem.value);\n\n this._selectionModel.toggle(option);\n\n this.emitValue();\n } else if (\n !isTyping &&\n this.multiple &&\n event.code === KEY_A_CODE &&\n event.ctrlKey\n ) {\n event.preventDefault();\n\n this.toggleAllOptions(options);\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 ) {\n this.selectOptionByValue(options, keyManager.activeItem.value);\n }\n }\n }\n\n private toggleAllOptions(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n ) {\n const enabledOptionValues = options.filter((option) => !option.disabled);\n\n const hasDeselectedOptions =\n enabledOptionValues.length > this._selectionModel.selected.length;\n\n if (hasDeselectedOptions) {\n this._selectionModel.select(...enabledOptionValues);\n } else {\n this._selectionModel.clear();\n }\n }\n\n private doPanelClosedKeydown(event: KeyboardEvent): void {\n 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 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\n private normalizeKeyManagerOptions(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n ) {\n return options.map((option) => ({\n value: option.value,\n label: option.label,\n disabled: option.disabled ?? false,\n getLabel: () => option.getLabel?.() ?? option.label,\n }));\n }\n\n private updateActiveOptionComponent(\n optionComponents: NgxVirtualSelectFieldOptionComponent<TValue>[],\n activeOption: NgxVirtualSelectFieldOptionModel<TValue>,\n index: number,\n ) {\n optionComponents.forEach((option) => option.setInactiveStyles());\n\n const shouldScrollToActiveItem = this.shouldScrollToActiveItem(index);\n if (shouldScrollToActiveItem) {\n this.cdkVirtualScrollViewport.scrolledIndexChange\n .pipe(take(1))\n .subscribe(() => {\n this.assertIsDefined(\n this.optionsQuery,\n `optionsQuery is not defined`,\n );\n\n this.setActiveOptionComponentByValue(\n this.optionsQuery.toArray(),\n activeOption.value,\n );\n });\n\n this.cdkVirtualScrollViewport.scrollToIndex(index);\n } else {\n this.setActiveOptionComponentByValue(\n optionComponents,\n activeOption.value,\n );\n }\n }\n\n private shouldScrollToActiveItem(targetIndex: number): boolean {\n if (!this.isPanelOpened()) {\n return false;\n }\n\n const scrollTop =\n this.cdkVirtualScrollViewport.elementRef.nativeElement.scrollTop;\n\n // NOTE: -1 is needed to prevent scrolling to next item out of the viewport\n const bottomScroll = scrollTop + this.optionHeight * this.maxPageSize - 1;\n const targetScroll = this.optionHeight * targetIndex;\n\n return scrollTop > targetScroll || bottomScroll < targetScroll;\n }\n\n private setActiveOptionComponentByValue(\n optionComponents: NgxVirtualSelectFieldOptionComponent<TValue>[],\n value: TValue,\n ) {\n const optionComponent = optionComponents.find(\n (option) => option.value === value,\n );\n\n this.assertIsDefined(\n optionComponent,\n `Option component with value ${value} not found`,\n );\n\n optionComponent.setActiveStyles();\n }\n\n // #endregion Key manager\n\n private focus() {\n this._elRef.nativeElement.focus();\n }\n\n private selectOptionByValue(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n value: TValue,\n ) {\n const { option } = this.findOptionByValue(options, value);\n\n this._selectionModel.select(option);\n\n this.emitValue();\n }\n\n private updateRenderedOptionsState(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n ) {\n this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);\n\n this.optionsQuery.forEach((optionComponent) => {\n const { option } = this.findOptionByValue(options, optionComponent.value);\n\n if (this._selectionModel.isSelected(option)) {\n optionComponent.select();\n } else {\n // NOTE: deselect for all is needed because of virtual scroll and reusing options\n optionComponent.deselect();\n }\n });\n }\n\n private findOptionByValue(\n options: NgxVirtualSelectFieldOptionModel<TValue>[],\n value: TValue,\n ): { option: NgxVirtualSelectFieldOptionModel<TValue>; index: number } {\n const index = options.findIndex((option) => option.value === value);\n\n const option = options[index];\n\n this.assertIsDefined(option, `Option with value ${value} not found`);\n\n return { option, index };\n }\n\n private emitValue(): void {\n this._value = this._selectionModel.selected.map((option) => option.value);\n\n const outputValue = this.multiple ? this._value : this._value[0];\n\n this.valueChange.emit(outputValue);\n this._onChange(outputValue);\n this.selectionChange.emit(\n new NgxVirtualSelectFieldChange(this, outputValue),\n );\n }\n\n private assertIsDefined<T>(\n value: T,\n message: string,\n ): asserts value is NonNullable<T> {\n if (value === undefined || value === null) {\n throw new Error(message);\n }\n }\n\n private static nextId = 0;\n}\n\nexport class NgxVirtualSelectFieldChange<TValue> {\n constructor(\n public source: NgxVirtualSelectFieldComponent<TValue>,\n public value: any,\n ) {}\n}\n","<div\n class=\"ngx-virtual-select-field-trigger\"\n cdk-overlay-origin\n (click)=\"open()\"\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n #trigger\n>\n <div class=\"ngx-virtual-select-field-value\">\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 <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 </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) {\n <div class=\"ngx-virtual-select-field-filter-wrapper\">\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 <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 </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":[],"mappings":"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"}
|