ngx-virtual-select-field-filterable 1.4.1 → 1.4.3
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.
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Input, Directive, InjectionToken, EventEmitter, signal, booleanAttribute, Output, Inject, ChangeDetectionStrategy, Component, output, inject, ChangeDetectorRef, DestroyRef, ElementRef,
|
|
3
|
-
import { BehaviorSubject, Subject, tap, startWith, map,
|
|
2
|
+
import { Input, Directive, InjectionToken, EventEmitter, signal, booleanAttribute, Output, Inject, ChangeDetectionStrategy, Component, output, inject, computed, ChangeDetectorRef, DestroyRef, ElementRef, effect, numberAttribute, ContentChildren, ContentChild, ViewChild, Optional } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, Subject, tap, startWith, map, switchMap, merge, debounceTime, take } from 'rxjs';
|
|
4
4
|
import * as i1$1 from '@angular/common';
|
|
5
5
|
import { CommonModule } from '@angular/common';
|
|
6
6
|
import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -287,6 +287,16 @@ class NgxVirtualSelectFieldComponent {
|
|
|
287
287
|
* @default 'Search...'
|
|
288
288
|
*/
|
|
289
289
|
this.filterPlaceholder = 'Search...';
|
|
290
|
+
/**
|
|
291
|
+
* Show clear button in filter input
|
|
292
|
+
* @default true
|
|
293
|
+
*/
|
|
294
|
+
this.filterClearable = true;
|
|
295
|
+
/**
|
|
296
|
+
* Show clear button in select trigger
|
|
297
|
+
* @default false
|
|
298
|
+
*/
|
|
299
|
+
this.clearable = false;
|
|
290
300
|
this._value = [];
|
|
291
301
|
this._placeholder = '';
|
|
292
302
|
this._required = false;
|
|
@@ -313,8 +323,19 @@ class NgxVirtualSelectFieldComponent {
|
|
|
313
323
|
this.overlayPanelClass = this._defaultOptions?.overlayPanelClass || '';
|
|
314
324
|
this.isPanelOpened = signal(false);
|
|
315
325
|
this.filterText = signal('');
|
|
326
|
+
this.options = signal([]);
|
|
327
|
+
this.filteredOptions = computed(() => {
|
|
328
|
+
const searchText = this.filterText().toLowerCase().trim();
|
|
329
|
+
const allOptions = this.options();
|
|
330
|
+
if (!searchText || !this.filterable) {
|
|
331
|
+
return allOptions;
|
|
332
|
+
}
|
|
333
|
+
return allOptions.filter((option) => {
|
|
334
|
+
const label = option.getLabel?.() ?? option.label;
|
|
335
|
+
return label.toLowerCase().includes(searchText);
|
|
336
|
+
});
|
|
337
|
+
});
|
|
316
338
|
this.triggerValue$ = null;
|
|
317
|
-
this.filteredOptions$ = null;
|
|
318
339
|
this._changeDetectorRef = inject(ChangeDetectorRef);
|
|
319
340
|
this._destroyRef = inject(DestroyRef);
|
|
320
341
|
this._elRef = inject(ElementRef);
|
|
@@ -323,7 +344,6 @@ class NgxVirtualSelectFieldComponent {
|
|
|
323
344
|
this._onChange = () => void 0;
|
|
324
345
|
this._onTouched = () => void 0;
|
|
325
346
|
this._keyManager = null;
|
|
326
|
-
this._filterTextSubject = null;
|
|
327
347
|
this._focused = false;
|
|
328
348
|
this.optionTrackBy = (_index, option) => {
|
|
329
349
|
return option.value;
|
|
@@ -336,6 +356,12 @@ class NgxVirtualSelectFieldComponent {
|
|
|
336
356
|
this.inheritedColorTheme = this._parentFormField
|
|
337
357
|
? `mat-${this._parentFormField.color}`
|
|
338
358
|
: '';
|
|
359
|
+
effect(() => {
|
|
360
|
+
const filtered = this.filteredOptions();
|
|
361
|
+
if (this._keyManager) {
|
|
362
|
+
this.initListKeyManager(filtered);
|
|
363
|
+
}
|
|
364
|
+
});
|
|
339
365
|
}
|
|
340
366
|
createOverlayWidthSignal() {
|
|
341
367
|
const changeDetectorRef = inject(ChangeDetectorRef);
|
|
@@ -390,32 +416,19 @@ class NgxVirtualSelectFieldComponent {
|
|
|
390
416
|
.map((option) => option?.label ?? '')
|
|
391
417
|
.join(', ')));
|
|
392
418
|
}
|
|
393
|
-
//
|
|
394
|
-
const filterText$ = new Subject();
|
|
395
|
-
this.filteredOptions$ = merge(this.optionFor.options$, filterText$.pipe(switchMap(() => this.optionFor.options$))).pipe(map((options) => {
|
|
396
|
-
const searchText = this.filterText().toLowerCase().trim();
|
|
397
|
-
if (!searchText || !this.filterable) {
|
|
398
|
-
return options;
|
|
399
|
-
}
|
|
400
|
-
return options.filter((option) => {
|
|
401
|
-
const label = option.getLabel?.() ?? option.label;
|
|
402
|
-
return label.toLowerCase().includes(searchText);
|
|
403
|
-
});
|
|
404
|
-
}));
|
|
405
|
-
// Trigger filter updates when filter text changes
|
|
406
|
-
this._filterTextSubject = filterText$;
|
|
419
|
+
// Subscribe to options$ and update the options signal
|
|
407
420
|
this.optionFor.options$
|
|
408
421
|
.pipe(takeUntilDestroyed(this._destroyRef))
|
|
409
422
|
.subscribe((options) => {
|
|
423
|
+
this.options.set(options);
|
|
410
424
|
this._selectionModel?.setSelection(...this._value.map((v) => options.find((o) => o.value === v)));
|
|
411
|
-
this.initListKeyManager(options);
|
|
412
425
|
});
|
|
413
426
|
this.optionsQuery.changes
|
|
414
427
|
.pipe(switchMap(() => merge(...this.optionsQuery.map((option) => option.selectedChange))), takeUntilDestroyed(this._destroyRef))
|
|
415
|
-
.subscribe((selectionEvent) => this.updateOptionSelection(selectionEvent, this.
|
|
416
|
-
merge(this._scrolledIndexChange, this._selectionModel.changed
|
|
428
|
+
.subscribe((selectionEvent) => this.updateOptionSelection(selectionEvent, this.options()));
|
|
429
|
+
merge(this._scrolledIndexChange, this._selectionModel.changed)
|
|
417
430
|
.pipe(takeUntilDestroyed(this._destroyRef), debounceTime(20))
|
|
418
|
-
.subscribe(() => this.updateRenderedOptionsState(this.
|
|
431
|
+
.subscribe(() => this.updateRenderedOptionsState(this.options()));
|
|
419
432
|
}
|
|
420
433
|
updateOptionSelection(selectionEvent, options) {
|
|
421
434
|
this.assertIsDefined(this.optionsQuery, `optionsQuery is not defined`);
|
|
@@ -505,7 +518,18 @@ class NgxVirtualSelectFieldComponent {
|
|
|
505
518
|
onFilterInput(event) {
|
|
506
519
|
const input = event.target;
|
|
507
520
|
this.filterText.set(input.value);
|
|
508
|
-
|
|
521
|
+
}
|
|
522
|
+
onFilterClear() {
|
|
523
|
+
this.filterText.set('');
|
|
524
|
+
// Re-focus the filter input after clearing
|
|
525
|
+
setTimeout(() => {
|
|
526
|
+
this.filterInput?.nativeElement.focus();
|
|
527
|
+
}, 0);
|
|
528
|
+
}
|
|
529
|
+
onClear(event) {
|
|
530
|
+
event.stopPropagation(); // Prevent opening the panel
|
|
531
|
+
this._selectionModel.clear();
|
|
532
|
+
this.emitValue();
|
|
509
533
|
}
|
|
510
534
|
onFilterKeyDown(event) {
|
|
511
535
|
const isArrowKey = event.key === ARROW_DOWN_KEY ||
|
|
@@ -752,7 +776,7 @@ class NgxVirtualSelectFieldComponent {
|
|
|
752
776
|
}
|
|
753
777
|
static { this.nextId = 0; }
|
|
754
778
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.0", ngImport: i0, type: NgxVirtualSelectFieldComponent, deps: [{ token: MAT_FORM_FIELD, optional: true }, { token: NGX_VIRTUAL_SELECT_FIELD_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
755
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.0", type: NgxVirtualSelectFieldComponent, isStandalone: true, selector: "ngx-virtual-select-field", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], panelWidth: "panelWidth", optionHeight: ["optionHeight", "optionHeight", (value) => numberAttribute(value, OPTION_HEIGHT)], panelViewportPageSize: ["panelViewportPageSize", "panelViewportPageSize", (value) => numberAttribute(value, PANEL_VIEWPORT_PAGE_SIZE)], multiple: ["multiple", "multiple", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", (value) => numberAttribute(value, 0)], typeaheadDebounceInterval: ["typeaheadDebounceInterval", "typeaheadDebounceInterval", numberAttribute], panelClass: "panelClass", filterable: ["filterable", "filterable", booleanAttribute], filterPlaceholder: "filterPlaceholder", value: "value", placeholder: "placeholder", required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { valueChange: "valueChange", selectionChange: "selectionChange" }, host: { listeners: { "focus": "onFocusIn()", "blur": "onFocusOut()", "keydown": "onKeyDown($event)" }, properties: { "attr.tabindex": "this.disabled ? -1 : tabIndex", "class.ngx-virtual-select-field-disabled": "disabled", "class.ngx-virtual-select-field-invalid": "errorState" }, classAttribute: "ngx-virtual-select-field" }, providers: [
|
|
779
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.0", type: NgxVirtualSelectFieldComponent, isStandalone: true, selector: "ngx-virtual-select-field", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], panelWidth: "panelWidth", optionHeight: ["optionHeight", "optionHeight", (value) => numberAttribute(value, OPTION_HEIGHT)], panelViewportPageSize: ["panelViewportPageSize", "panelViewportPageSize", (value) => numberAttribute(value, PANEL_VIEWPORT_PAGE_SIZE)], multiple: ["multiple", "multiple", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", (value) => numberAttribute(value, 0)], typeaheadDebounceInterval: ["typeaheadDebounceInterval", "typeaheadDebounceInterval", numberAttribute], panelClass: "panelClass", filterable: ["filterable", "filterable", booleanAttribute], filterPlaceholder: "filterPlaceholder", filterClearable: ["filterClearable", "filterClearable", booleanAttribute], clearable: ["clearable", "clearable", booleanAttribute], value: "value", placeholder: "placeholder", required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { valueChange: "valueChange", selectionChange: "selectionChange" }, host: { listeners: { "focus": "onFocusIn()", "blur": "onFocusOut()", "keydown": "onKeyDown($event)" }, properties: { "attr.tabindex": "this.disabled ? -1 : tabIndex", "class.ngx-virtual-select-field-disabled": "disabled", "class.ngx-virtual-select-field-invalid": "errorState" }, classAttribute: "ngx-virtual-select-field" }, providers: [
|
|
756
780
|
{
|
|
757
781
|
provide: MatFormFieldControl,
|
|
758
782
|
useExisting: NgxVirtualSelectFieldComponent,
|
|
@@ -761,7 +785,7 @@ class NgxVirtualSelectFieldComponent {
|
|
|
761
785
|
provide: NGX_VIRTUAL_SELECT_FIELD_OPTION_PARENT,
|
|
762
786
|
useExisting: NgxVirtualSelectFieldComponent,
|
|
763
787
|
},
|
|
764
|
-
], queries: [{ propertyName: "optionFor", first: true, predicate: NgxVirtualSelectFieldOptionForDirective, descendants: true }, { propertyName: "customTrigger", first: true, predicate: NGX_VIRTUAL_SELECT_FIELD_TRIGGER, descendants: true }, { propertyName: "optionsQuery", predicate: NgxVirtualSelectFieldOptionComponent }], viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "cdkConnectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], exportAs: ["ngxVirtualSelectField"], ngImport: i0, template: "<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 <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 </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$ | async;\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", styles: [":host{color:var(--ngx-virtual-select-field-trigger-text-color);font-family:var(--ngx-virtual-select-field-trigger-font-family);line-height:var(--ngx-virtual-select-field-trigger-line-height);font-size:var(--ngx-virtual-select-field-trigger-font-size);font-weight:var(--ngx-virtual-select-field-trigger-font-weight);letter-spacing:var(--ngx-virtual-select-field-trigger-letter-spacing);outline:none}.ngx-virtual-select-field-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-trigger{cursor:default;color:var(--ngx-virtual-select-field-trigger-text-color--disabled)}.ngx-virtual-select-field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.ngx-virtual-select-field-placeholder{transition:var(--ngx-virtual-select-field-placeholder-transition);color:var(--ngx-virtual-select-field-placeholder-text-color)}._mat-animation-noopable .ngx-virtual-select-field-placeholder{transition:none}:host-context(.mat-form-field-hide-placeholder) .ngx-virtual-select-field-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}.ngx-virtual-select-field-placeholder:empty:before{content:\" \";white-space:pre;width:1px;display:inline-block}.ngx-virtual-select-field-arrow{width:calc(var(--ngx-virtual-select-field-arrow-size) * 2);height:var(--ngx-virtual-select-field-arrow-size);position:relative;color:var(--ngx-virtual-select-field-arrow-color--enabled)}:host-context(.ngx-virtual-select-field-invalid) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--invalid)}:host-context(.mat-focused):not(.ngx-virtual-select-field-invalid) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--focused)}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--disabled)}.ngx-virtual-select-field-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media(forced-colors:active){.ngx-virtual-select-field-arrow svg{fill:CanvasText}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-arrow svg{fill:GrayText}}.ngx-virtual-select-field-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}:host-context(.mat-form-field-appearance-fill) .ngx-virtual-select-field-arrow-wrapper{transform:translateY(-8px)}:host-context(.mat-form-field-appearance-fill .mdc-text-field--no-label) .ngx-virtual-select-field-arrow-wrapper{transform:none}.ngx-virtual-select-field-panel{width:100%;background:var(--ngx-virtual-select-field-panel-background);box-shadow:var(--ngx-virtual-select-field-panel-box-shadow);display:flex;flex-direction:column}@media(forced-colors:active){.ngx-virtual-select-field-panel{outline:solid 1px}}.ngx-virtual-select-field-filter-wrapper{padding:8px;border-bottom:1px solid var(--ngx-virtual-select-field-divider-color, rgba(0, 0, 0, .12));background:var(--ngx-virtual-select-field-panel-background)}.ngx-virtual-select-field-filter-field{width:100%;display:block}.ngx-virtual-select-field-viewport{width:100%;height:calc(var(--ngx-virtual-select-field__viewport-option-height) * var(--ngx-virtual-select-field__viewport-page-size) + var(--ngx-virtual-select-field-panel-list-wrapper-padding) * 2)}.ngx-virtual-select-field-list-wrapper{display:flex;flex-direction:column;padding-top:var(--ngx-virtual-select-field-panel-list-wrapper-padding);padding-bottom:var(--ngx-virtual-select-field-panel-list-wrapper-padding)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
788
|
+
], queries: [{ propertyName: "optionFor", first: true, predicate: NgxVirtualSelectFieldOptionForDirective, descendants: true }, { propertyName: "customTrigger", first: true, predicate: NGX_VIRTUAL_SELECT_FIELD_TRIGGER, descendants: true }, { propertyName: "optionsQuery", predicate: NgxVirtualSelectFieldOptionComponent }], viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }, { propertyName: "cdkConnectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], exportAs: ["ngxVirtualSelectField"], ngImport: i0, template: "<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", styles: [":host{color:var(--ngx-virtual-select-field-trigger-text-color);font-family:var(--ngx-virtual-select-field-trigger-font-family);line-height:var(--ngx-virtual-select-field-trigger-line-height);font-size:var(--ngx-virtual-select-field-trigger-font-size);font-weight:var(--ngx-virtual-select-field-trigger-font-weight);letter-spacing:var(--ngx-virtual-select-field-trigger-letter-spacing);outline:none}.ngx-virtual-select-field-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-trigger{cursor:default;color:var(--ngx-virtual-select-field-trigger-text-color--disabled)}.ngx-virtual-select-field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.ngx-virtual-select-field-placeholder{transition:var(--ngx-virtual-select-field-placeholder-transition);color:var(--ngx-virtual-select-field-placeholder-text-color)}._mat-animation-noopable .ngx-virtual-select-field-placeholder{transition:none}:host-context(.mat-form-field-hide-placeholder) .ngx-virtual-select-field-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}.ngx-virtual-select-field-placeholder:empty:before{content:\" \";white-space:pre;width:1px;display:inline-block}.ngx-virtual-select-field-arrow{width:calc(var(--ngx-virtual-select-field-arrow-size) * 2);height:var(--ngx-virtual-select-field-arrow-size);position:relative;color:var(--ngx-virtual-select-field-arrow-color--enabled)}:host-context(.ngx-virtual-select-field-invalid) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--invalid)}:host-context(.mat-focused):not(.ngx-virtual-select-field-invalid) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--focused)}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--disabled)}.ngx-virtual-select-field-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media(forced-colors:active){.ngx-virtual-select-field-arrow svg{fill:CanvasText}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-arrow svg{fill:GrayText}}.ngx-virtual-select-field-clear{position:absolute;transform:translateY(-8px);right:20px;border:none;background:transparent;cursor:pointer;padding:4px;margin-right:4px;display:flex;align-items:center;justify-content:center;color:var(--ngx-virtual-select-field-trigger-text-color);opacity:.6;transition:opacity .2s;flex-shrink:0}.ngx-virtual-select-field-clear:hover{opacity:1}.ngx-virtual-select-field-clear svg{fill:currentColor}.ngx-virtual-select-field-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}:host-context(.mat-form-field-appearance-fill) .ngx-virtual-select-field-arrow-wrapper{transform:translateY(-8px)}:host-context(.mat-form-field-appearance-fill .mdc-text-field--no-label) .ngx-virtual-select-field-arrow-wrapper{transform:none}.ngx-virtual-select-field-panel{width:100%;background:var(--ngx-virtual-select-field-panel-background);box-shadow:var(--ngx-virtual-select-field-panel-box-shadow);display:flex;flex-direction:column}@media(forced-colors:active){.ngx-virtual-select-field-panel{outline:solid 1px}}.ngx-virtual-select-field-filter-wrapper{padding:8px;border-bottom:1px solid var(--ngx-virtual-select-field-divider-color, rgba(0, 0, 0, .12));background:var(--ngx-virtual-select-field-panel-background)}.ngx-virtual-select-field-filter-field{width:100%;display:block}.ngx-virtual-select-field-filter-clear{border:none;background:transparent;cursor:pointer;padding:4px 20px 4px 4px;display:flex;align-items:center;justify-content:center;color:var(--ngx-virtual-select-field-trigger-text-color);opacity:.6;transition:opacity .2s}.ngx-virtual-select-field-filter-clear:hover{opacity:1}.ngx-virtual-select-field-filter-clear svg{fill:currentColor}.ngx-virtual-select-field-viewport{width:100%;height:calc(var(--ngx-virtual-select-field__viewport-option-height) * var(--ngx-virtual-select-field__viewport-page-size) + var(--ngx-virtual-select-field-panel-list-wrapper-padding) * 2)}.ngx-virtual-select-field-list-wrapper{display:flex;flex-direction:column;padding-top:var(--ngx-virtual-select-field-panel-list-wrapper-padding);padding-bottom:var(--ngx-virtual-select-field-panel-list-wrapper-padding)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i2.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i2.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
765
789
|
}
|
|
766
790
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.0", ngImport: i0, type: NgxVirtualSelectFieldComponent, decorators: [{
|
|
767
791
|
type: Component,
|
|
@@ -782,7 +806,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.0", ngImpor
|
|
|
782
806
|
class: 'ngx-virtual-select-field',
|
|
783
807
|
'[class.ngx-virtual-select-field-disabled]': 'disabled',
|
|
784
808
|
'[class.ngx-virtual-select-field-invalid]': 'errorState',
|
|
785
|
-
}, template: "<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 <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 </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
|
|
809
|
+
}, template: "<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", styles: [":host{color:var(--ngx-virtual-select-field-trigger-text-color);font-family:var(--ngx-virtual-select-field-trigger-font-family);line-height:var(--ngx-virtual-select-field-trigger-line-height);font-size:var(--ngx-virtual-select-field-trigger-font-size);font-weight:var(--ngx-virtual-select-field-trigger-font-weight);letter-spacing:var(--ngx-virtual-select-field-trigger-letter-spacing);outline:none}.ngx-virtual-select-field-trigger{display:inline-flex;align-items:center;cursor:pointer;position:relative;box-sizing:border-box;width:100%}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-trigger{cursor:default;color:var(--ngx-virtual-select-field-trigger-text-color--disabled)}.ngx-virtual-select-field-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.ngx-virtual-select-field-placeholder{transition:var(--ngx-virtual-select-field-placeholder-transition);color:var(--ngx-virtual-select-field-placeholder-text-color)}._mat-animation-noopable .ngx-virtual-select-field-placeholder{transition:none}:host-context(.mat-form-field-hide-placeholder) .ngx-virtual-select-field-placeholder{color:transparent;-webkit-text-fill-color:transparent;transition:none;display:block}.ngx-virtual-select-field-placeholder:empty:before{content:\" \";white-space:pre;width:1px;display:inline-block}.ngx-virtual-select-field-arrow{width:calc(var(--ngx-virtual-select-field-arrow-size) * 2);height:var(--ngx-virtual-select-field-arrow-size);position:relative;color:var(--ngx-virtual-select-field-arrow-color--enabled)}:host-context(.ngx-virtual-select-field-invalid) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--invalid)}:host-context(.mat-focused):not(.ngx-virtual-select-field-invalid) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--focused)}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-arrow{color:var(--ngx-virtual-select-field-arrow-color--disabled)}.ngx-virtual-select-field-arrow svg{fill:currentColor;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@media(forced-colors:active){.ngx-virtual-select-field-arrow svg{fill:CanvasText}:host-context(.ngx-virtual-select-field-disabled) .ngx-virtual-select-field-arrow svg{fill:GrayText}}.ngx-virtual-select-field-clear{position:absolute;transform:translateY(-8px);right:20px;border:none;background:transparent;cursor:pointer;padding:4px;margin-right:4px;display:flex;align-items:center;justify-content:center;color:var(--ngx-virtual-select-field-trigger-text-color);opacity:.6;transition:opacity .2s;flex-shrink:0}.ngx-virtual-select-field-clear:hover{opacity:1}.ngx-virtual-select-field-clear svg{fill:currentColor}.ngx-virtual-select-field-arrow-wrapper{height:24px;flex-shrink:0;display:inline-flex;align-items:center}:host-context(.mat-form-field-appearance-fill) .ngx-virtual-select-field-arrow-wrapper{transform:translateY(-8px)}:host-context(.mat-form-field-appearance-fill .mdc-text-field--no-label) .ngx-virtual-select-field-arrow-wrapper{transform:none}.ngx-virtual-select-field-panel{width:100%;background:var(--ngx-virtual-select-field-panel-background);box-shadow:var(--ngx-virtual-select-field-panel-box-shadow);display:flex;flex-direction:column}@media(forced-colors:active){.ngx-virtual-select-field-panel{outline:solid 1px}}.ngx-virtual-select-field-filter-wrapper{padding:8px;border-bottom:1px solid var(--ngx-virtual-select-field-divider-color, rgba(0, 0, 0, .12));background:var(--ngx-virtual-select-field-panel-background)}.ngx-virtual-select-field-filter-field{width:100%;display:block}.ngx-virtual-select-field-filter-clear{border:none;background:transparent;cursor:pointer;padding:4px 20px 4px 4px;display:flex;align-items:center;justify-content:center;color:var(--ngx-virtual-select-field-trigger-text-color);opacity:.6;transition:opacity .2s}.ngx-virtual-select-field-filter-clear:hover{opacity:1}.ngx-virtual-select-field-filter-clear svg{fill:currentColor}.ngx-virtual-select-field-viewport{width:100%;height:calc(var(--ngx-virtual-select-field__viewport-option-height) * var(--ngx-virtual-select-field__viewport-page-size) + var(--ngx-virtual-select-field-panel-list-wrapper-padding) * 2)}.ngx-virtual-select-field-list-wrapper{display:flex;flex-direction:column;padding-top:var(--ngx-virtual-select-field-panel-list-wrapper-padding);padding-bottom:var(--ngx-virtual-select-field-panel-list-wrapper-padding)}\n"] }]
|
|
786
810
|
}], ctorParameters: () => [{ type: i4.MatFormField, decorators: [{
|
|
787
811
|
type: Optional
|
|
788
812
|
}, {
|
|
@@ -826,6 +850,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.0", ngImpor
|
|
|
826
850
|
args: [{ transform: booleanAttribute }]
|
|
827
851
|
}], filterPlaceholder: [{
|
|
828
852
|
type: Input
|
|
853
|
+
}], filterClearable: [{
|
|
854
|
+
type: Input,
|
|
855
|
+
args: [{ transform: booleanAttribute }]
|
|
856
|
+
}], clearable: [{
|
|
857
|
+
type: Input,
|
|
858
|
+
args: [{ transform: booleanAttribute }]
|
|
829
859
|
}], value: [{
|
|
830
860
|
type: Input
|
|
831
861
|
}], placeholder: [{
|
|
@@ -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 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 * 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 triggerValue$: Observable<string> | null = null;\n protected filteredOptions$: Observable<NgxVirtualSelectFieldOptionModel<TValue>[]> | 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 private _filterTextSubject: Subject<string> | 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\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 // Create filtered options observable that reacts to filter text changes\n const filterText$ = new Subject<string>();\n\n this.filteredOptions$ = merge(\n this.optionFor.options$,\n filterText$.pipe(switchMap(() => this.optionFor.options$))\n ).pipe(\n map((options) => {\n const searchText = this.filterText().toLowerCase().trim();\n if (!searchText || !this.filterable) {\n return options;\n }\n return options.filter((option) => {\n const label = option.getLabel?.() ?? option.label;\n return label.toLowerCase().includes(searchText);\n });\n }),\n );\n\n // Trigger filter updates when filter text changes\n this._filterTextSubject = filterText$;\n\n this.optionFor.options$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((options) => {\n this._selectionModel?.setSelection(\n ...this._value.map((v) => options.find((o) => o.value === v)!),\n );\n this.initListKeyManager(options);\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.optionFor.options$.value,\n ),\n );\n\n merge(this._scrolledIndexChange, this._selectionModel.changed, this.filteredOptions$)\n .pipe(takeUntilDestroyed(this._destroyRef), debounceTime(20))\n .subscribe(() =>\n this.updateRenderedOptionsState(this.optionFor.options$.value),\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 this._filterTextSubject?.next(input.value);\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 <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 </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$ | async;\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 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":";;;;;;;;;;;;;;;;;;;;;MAYa,uCAAuC,CAAA;AAClD;;;AAGG;IACH,IACI,OAAO,CAAC,OAAmD,EAAA;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B;AAMA,IAAA,WAAA,CACS,QAEN,EAAA;QAFM,IAAA,CAAA,QAAQ,GAAR,QAAQ;AALjB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,eAAe,CAC5B,EAAE,CACH;IAME;AAEH,IAAA,OAAO,sBAAsB,CAC3B,IAAqD,EACrD,GAAY,EAAA;AAEZ,QAAA,OAAO,IAAI;IACb;8GAzBW,uCAAuC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvC,uCAAuC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,CAAA,kCAAA,EAAA,SAAA,CAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvC,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBAJnD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;gFAOK,OAAO,EAAA,CAAA;sBADV,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kCAAkC,EAAE;;;ACf/D,MAAM,gCAAgC,GAC3C,IAAI,cAAc,CAChB,kCAAkC,CACnC;MAYU,qCAAqC,CAAA;8GAArC,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,SAAA,EARrC;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,gCAAgC;AACzC,gBAAA,WAAW,EAAE,qCAAqC;AACnD,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAGU,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAVjD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,gCAAgC;AACzC,4BAAA,WAAW,EAAA,qCAAuC;AACnD,yBAAA;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACVM,MAAM,sCAAsC,GACjD,IAAI,cAAc,CAChB,wCAAwC,CACzC;;MC+BU,oCAAoC,CAAA;IA6B/C,WAAA,CAEU,aAAgD,EAChD,WAAoC,EAAA;QADpC,IAAA,CAAA,aAAa,GAAb,aAAa;QACb,IAAA,CAAA,WAAW,GAAX,WAAW;AAtBrB;;AAEG;QAEH,IAAA,CAAA,QAAQ,GAAY,KAAK;AAGzB,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAE9B;QAEgB,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,IAAI,KAAK;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAEtB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;QASzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;IACzD;;IAIA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;IACF;;IAIA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;QAEA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AAE1D,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvB,YAAA,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC1B,SAAA,CAAC;IACJ;AAzEW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,kBA8BrC,sCAAsC,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGA9BrC,oCAAoC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAa3B,gBAAgB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,+CAAA,EAAA,UAAA,EAAA,iDAAA,EAAA,YAAA,EAAA,iDAAA,EAAA,UAAA,EAAA,iDAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,iCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrDtC,yfAoBA,gwDDMY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAcrD,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAjBhD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,UAAA,EAC/B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,uBAAuB,EAAE,eAAe,CAAC,EAAA,eAAA,EAGhD,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,iDAAiD,EAAE,UAAU;AAC7D,wBAAA,mDAAmD,EAAE,YAAY;AACjE,wBAAA,mDAAmD,EAAE,UAAU;AAC/D,wBAAA,mDAAmD,EAAE,UAAU;AAC/D,wBAAA,KAAK,EAAE,iCAAiC;AACzC,qBAAA,EAAA,QAAA,EAAA,yfAAA,EAAA,MAAA,EAAA,CAAA,ysDAAA,CAAA,EAAA;;0BAgCE,MAAM;2BAAC,sCAAsC;kEAtBhD,KAAK,EAAA,CAAA;sBADJ,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAOzB,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAItC,cAAc,EAAA,CAAA;sBADb;;;AEnDI,MAAM,SAAS,GAAwB;AAC5C,IAAA;AACE,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA;AACD,IAAA;AACE,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,QAAQ;AACjB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,KAAK;AAChB,KAAA;AACD,IAAA;AACE,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,yCAAyC;AACtD,KAAA;AACD,IAAA;AACE,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,UAAU,EAAE,yCAAyC;AACtD,KAAA;CACF;MAEY,+BAA+B,GAAG,IAAI,cAAc,CAC/D,iCAAiC;AAG5B,MAAM,gBAAgB,GAAG,MAAM;AAE/B,MAAM,wBAAwB,GAAG,CAAC;AAElC,MAAM,aAAa,GAAG,EAAE;;AC1CxB,MAAM,cAAc,GAAG,WAAW;AAElC,MAAM,YAAY,GAAG,SAAS;AAE9B,MAAM,eAAe,GAAG,YAAY;AAEpC,MAAM,cAAc,GAAG,WAAW;AAElC,MAAM,UAAU,GAAG,OAAO;AAE1B,MAAM,UAAU,GAAG,OAAO;AAE1B,MAAM,UAAU,GAAG,MAAM;;ACZhC;AAgGA;MA8Ba,8BAA8B,CAAA;AAoGzC;;;AAGG;IACH,IACI,KAAK,CAAC,KAA+B,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;YACzB;QACF;AAEA,QAAA,KAAK,GAAG,KAAK,IAAI,EAAE;QAEnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,KAAK,GAAG,CAAC,KAAK,CAAC;QACjB;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAEnB,QAAA,IAAI,CAAC,eAAe,EAAE,YAAY,CAChC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAChB,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAE,CACjE,CACF;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAGA;;;AAGG;IACH,IACI,WAAW,CAAC,WAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAIA;;;AAGG;IACH,IACI,QAAQ,CAAC,GAAY,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAIA;;;AAGG;IACH,IACI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IAsFA,WAAA,CAGU,gBAA8B,EAG9B,eAA6C,EAAA;QAH7C,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAGhB,IAAA,CAAA,eAAe,GAAf,eAAe;;QA5PzB,IAAA,CAAA,mBAAmB,GAAG,EAAE;AAExB;;;AAGG;QAEH,IAAA,CAAA,UAAU,GACR,IAAI,CAAC,eAAe,EAAE,UAAU,IAAI,gBAAgB;AAEtD;;;AAGG;QAIH,IAAA,CAAA,YAAY,GAAW,IAAI,CAAC,eAAe,EAAE,YAAY,IAAI,aAAa;AAE1E;;;AAGG;QAKH,IAAA,CAAA,qBAAqB,GACnB,IAAI,CAAC,eAAe,EAAE,qBAAqB,IAAI,wBAAwB;AAEzE;;;AAGG;QAEH,IAAA,CAAA,QAAQ,GAAY,KAAK;AAEzB;;;AAGG;QAIH,IAAA,CAAA,QAAQ,GAAW,CAAC;AAEpB;;;AAGG;QAEH,IAAA,CAAA,yBAAyB,GAAW,GAAG;AAEvC;;;AAGG;QAEH,IAAA,CAAA,UAAU,GAA6B,IAAI;AAE3C;;;AAGG;QAEH,IAAA,CAAA,UAAU,GAAY,KAAK;AAE3B;;;AAGG;QAEH,IAAA,CAAA,iBAAiB,GAAW,WAAW;AAEvC;;;AAGG;QAEH,IAAA,CAAA,eAAe,GAAY,IAAI;AAE/B;;;AAGG;QAEH,IAAA,CAAA,SAAS,GAAY,KAAK;QA4BlB,IAAA,CAAA,MAAM,GAAa,EAAE;QAgBrB,IAAA,CAAA,YAAY,GAAG,EAAE;QAgBjB,IAAA,CAAA,SAAS,GAAG,KAAK;QAgBjB,IAAA,CAAA,SAAS,GAAG,KAAK;AAEzB;;AAEG;;QAEH,IAAA,CAAA,WAAW,GAAG,MAAM,EAAO;AAE3B;;;AAGG;QACH,IAAA,CAAA,eAAe,GAAG,MAAM,EAAuC;QAiB/D,IAAA,CAAA,aAAa,GAAiD,IAAI;QAGlE,IAAA,CAAA,YAAY,GACV,IAAI;AAEG,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,yBAAA,EAA4B,8BAA8B,CAAC,MAAM,EAAE,EAAE;QAC1E,IAAA,CAAA,WAAW,GAAG,0BAA0B;AACxC,QAAA,IAAA,CAAA,SAAS,GAAqB,MAAM,CAAC,SAAS,EAAE;AACvD,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC;QACF,IAAA,CAAA,UAAU,GAAG,KAAK;QAEC,IAAA,CAAA,SAAS,GAAG,SAAS;QACrB,IAAA,CAAA,iBAAiB,GAClC,IAAI,CAAC,eAAe,EAAE,iBAAiB,IAAI,EAAE;AAI5B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAA6C,EAAE,CAAC;AAChE,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACjD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AACzD,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE;YAEjC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACnC,gBAAA,OAAO,UAAU;YACnB;AAEA,YAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;gBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,MAAM,CAAC,KAAK;gBACjD,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;AACjD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEQ,IAAA,CAAA,aAAa,GAA8B,IAAI;AAGxC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,QAAA,IAAA,CAAA,MAAM,GAA4B,MAAM,CAAC,UAAU,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;AACnC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ;AAEnD,QAAA,IAAA,CAAA,SAAS,GAAuC,MAAM,KAAK,CAAC;AAC5D,QAAA,IAAA,CAAA,UAAU,GAAe,MAAM,KAAK,CAAC;QAKrC,IAAA,CAAA,WAAW,GAER,IAAI;QAyFP,IAAA,CAAA,QAAQ,GAAG,KAAK;AAiLd,QAAA,IAAA,CAAA,aAAa,GAEnB,CAAC,MAAc,EAAE,MAAM,KAAI;YAC7B,OAAO,MAAM,CAAC,KAAK;AACrB,QAAA,CAAC;AApQC,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK;QACnD;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAEnD,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAC9B,cAAE,CAAA,IAAA,EAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAA;cAClC,EAAE;QAEN,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACnC;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;;;AAInD,QAAA,MAAM,mBAAmB,GAAG,QAAQ,CAClC,MAAM,CAAC,aAAa;AACjB,aAAA,MAAM;aACN,IAAI,CACH,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC,GAAG,CAAC,MAAM,iBAAiB,CAAC,aAAa,EAAE,CAAC,CAC7C,CACJ;QAED,OAAO,QAAQ,CAAC,MAAK;AACnB,YAAA,mBAAmB,EAAE;YAErB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,sBAAsB,CAAC;AAC9D,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,mBAAmB,CACzB,eAAsE,EAAA;AAEtE,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACzB,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,gBAAgB,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE;QAC9B;AAEA,QAAA,MAAM,YAAY,GAChB,eAAe,YAAY;cACvB,eAAe,CAAC;AAClB,cAAE,eAAe,IAAI,IAAI,CAAC,MAAM;QAEpC,OAAO,YAAY,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK;IACjE;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IACpC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;IAChE;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;IAC1C;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO;IAC/D;AAEA,IAAA,IAAI,OAAO,GAAA;;QAET,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAC9C;AAGA,IAAA,IAAc,WAAW,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CACrC;IACH;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAEvC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC;IAC5B;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,2BAAA,CAA6B,CAAC;AAEtE,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CACpD,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,CAAC,SAAS,KACZ,IAAI,CAAC,eAAe,CAAC;iBAClB,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE;AACnC,iBAAA,IAAI,CAAC,IAAI,CAAC,CACd,CACF;QACH;;QAGA,IAAI,CAAC,SAAS,CAAC;AACZ,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,OAAO,KAAI;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,YAAA,IAAI,CAAC,eAAe,EAAE,YAAY,CAChC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAE,CAAC,CAC/D;AACH,QAAA,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC;AACf,aAAA,IAAI,CACH,SAAS,CAAC,MACR,KAAK,CAAC,GAAG,IAAI,CAAC,YAAa,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,cAAc,CAAC,CAAC,CACpE,EACD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAErC,aAAA,SAAS,CAAC,CAAC,cAAc,KACxB,IAAI,CAAC,qBAAqB,CACxB,cAAc,EACd,IAAI,CAAC,OAAO,EAAE,CACf,CACF;QAEH,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO;AAC1D,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;AAC3D,aAAA,SAAS,CAAC,MACT,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAChD;IACL;IAEQ,qBAAqB,CAC3B,cAAuE,EACvE,OAAmD,EAAA;QAEnD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,2BAAA,CAA6B,CAAC;QAEtE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,GACnD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;AAEvD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC;QAC5C;AAAO,aAAA,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;YAE5B,IAAI,CAAC,KAAK,EAAE;QACd;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC;YAE1C,IAAI,CAAC,KAAK,EAAE;QACd;QAEA,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,aAAa,CAAC;QAChD;;QAGA,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;AACpC,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;IAC/B;;AAIA,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;;;AAKlB,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IACxC;AAEA,IAAA,gBAAgB,CAAC,EAAsC,EAAA;AACrD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;IAC5B;;AAIA,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAC7B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;AAEhD,QAAA,cAAc,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;QAEA,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,mBAAmB,CAAC;AACtB,aAAA,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACxD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;aAErC,SAAS,CAAC,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;IAC1D;IAEQ,6BAA6B,GAAA;AACnC,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE;YAClC;QACF;AAEA,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CACvD,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CACxD;QAED,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;QAChD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC;AAEtC,QAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,WAAW,CAAC;IAC1D;IAEU,SAAS,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QAC3B;IACF;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YACzB,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;QAC3B;IACF;IAQU,qBAAqB,GAAA;AAC7B,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE;IAClC;AAEU,IAAA,aAAa,CAAC,KAAY,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAClC;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;;QAEvB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE;QACzC,CAAC,EAAE,CAAC,CAAC;IACP;AAEU,IAAA,OAAO,CAAC,KAAY,EAAA;AAC5B,QAAA,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAC5B,IAAI,CAAC,SAAS,EAAE;IAClB;AAEU,IAAA,eAAe,CAAC,KAAoB,EAAA;AAC5C,QAAA,MAAM,UAAU,GACd,KAAK,CAAC,GAAG,KAAK,cAAc;YAC5B,KAAK,CAAC,GAAG,KAAK,YAAY;YAC1B,KAAK,CAAC,GAAG,KAAK,cAAc;AAC5B,YAAA,KAAK,CAAC,GAAG,KAAK,eAAe;;AAG/B,QAAA,IAAI,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACnC,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,cAAc,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,EAAE;;gBAE9D,KAAK,CAAC,cAAc,EAAE;gBACtB,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;AAC9D,gBAAA,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC;YACpC;;YAEA;QACF;;AAGA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;QACd;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;;YAE9B,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEU,IAAI,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YACxB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,sBAAsB;AACzB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE;QACrD;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;;AAG5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,EAAE;YACzC,CAAC,EAAE,CAAC,CAAC;QACP;IACF;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;;AAIU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAClC;aAAO;AACL,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAClC;IACF;AAEQ,IAAA,oBAAoB,CAAC,KAAoB,EAAA;QAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,2BAAA,CAA6B,CAAC;AAEtE,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAY;AACpC,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU;AACxC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK;AAC7C,QAAA,MAAM,UAAU,GACd,KAAK,CAAC,GAAG,KAAK,cAAc,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY;AAE5D,QAAA,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE;YAC9B,KAAK,CAAC,cAAc,EAAE;YAEtB,IAAI,CAAC,KAAK,EAAE;QACd;AAAO,aAAA,IACL,CAAC,QAAQ;aACR,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;YACxD,UAAU;AACV,YAAA,CAAC,cAAc,CAAC,KAAK,CAAC,EACtB;YACA,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;AAEpE,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;YAEnC,IAAI,CAAC,SAAS,EAAE;QAClB;AAAO,aAAA,IACL,CAAC,QAAQ;AACT,YAAA,IAAI,CAAC,QAAQ;YACb,KAAK,CAAC,IAAI,KAAK,UAAU;YACzB,KAAK,CAAC,OAAO,EACb;YACA,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAE9B,IAAI,CAAC,SAAS,EAAE;QAClB;aAAO;AACL,YAAA,MAAM,sBAAsB,GAAG,UAAU,CAAC,eAAe;AAEzD,YAAA,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;YAE3B,IACE,IAAI,CAAC,QAAQ;gBACb,UAAU;AACV,gBAAA,KAAK,CAAC,QAAQ;AACd,gBAAA,UAAU,CAAC,UAAU;AACrB,gBAAA,UAAU,CAAC,eAAe,KAAK,sBAAsB,EACrD;gBACA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;YAChE;QACF;IACF;AAEQ,IAAA,gBAAgB,CACtB,OAAmD,EAAA;AAEnD,QAAA,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;AAExE,QAAA,MAAM,oBAAoB,GACxB,mBAAmB,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM;QAEnE,IAAI,oBAAoB,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,mBAAmB,CAAC;QACrD;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAC9B;IACF;AAEQ,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAY;AACpC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE;AAEtC,QAAA,MAAM,UAAU,GACd,KAAK,CAAC,GAAG,KAAK,cAAc;YAC5B,KAAK,CAAC,GAAG,KAAK,YAAY;YAC1B,KAAK,CAAC,GAAG,KAAK,eAAe;AAC7B,YAAA,KAAK,CAAC,GAAG,KAAK,cAAc;QAE9B,IACE,CAAC,CAAC,QAAQ;aACP,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACxD,YAAA,CAAC,cAAc,CAAC,KAAK,CAAC;AACxB,aAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,EAC/C;AACA,YAAA,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE;QACb;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,MAAM,6BAA6B,GAAG,UAAU,CAAC,eAAe;AAEhE,YAAA,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3B,YAAA,MAAM,mBAAmB,GAAG,UAAU,CAAC,eAAe;AAEtD,YAAA,IACE,mBAAmB;gBACnB,6BAA6B,KAAK,mBAAmB,EACrD;;AAEA,gBAAA,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAC7B,UAAU,CAAC,UAAW,CAAC,KAAK,CAC7B;;;;;YAMH;QACF;IACF;;;AAMQ,IAAA,kBAAkB,CACxB,OAAmD,EAAA;AAEnD,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;AAE3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAEnC,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;AACvC,aAAA,aAAa,CAAC,IAAI,CAAC,yBAAyB;AAC5C,aAAA,uBAAuB;AACvB,aAAA,cAAc;AACd,aAAA,cAAc;AACd,aAAA,uBAAuB,CAAC,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACrC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBACzB;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE;AAChC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YACtE;YAEA,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,KAAK,EAAE;AACd,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,2BAAA,CAA6B,CAAC;AAEtE,YAAA,IAAI,CAAC,2BAA2B,CAC9B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAC3B,OAAO,CAAC,KAAK,CAAC,EACd,KAAK,CACN;AACH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,0BAA0B,CAChC,OAAmD,EAAA;QAEnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;YAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;AAClC,YAAA,QAAQ,EAAE,MAAM,MAAM,CAAC,QAAQ,IAAI,IAAI,MAAM,CAAC,KAAK;AACpD,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,2BAA2B,CACjC,gBAAgE,EAChE,YAAsD,EACtD,KAAa,EAAA;AAEb,QAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAEhE,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;QACrE,IAAI,wBAAwB,EAAE;YAC5B,IAAI,CAAC,wBAAwB,CAAC;AAC3B,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACZ,SAAS,CAAC,MAAK;gBACd,IAAI,CAAC,eAAe,CAClB,IAAI,CAAC,YAAY,EACjB,CAAA,2BAAA,CAA6B,CAC9B;AAED,gBAAA,IAAI,CAAC,+BAA+B,CAClC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAC3B,YAAY,CAAC,KAAK,CACnB;AACH,YAAA,CAAC,CAAC;AAEJ,YAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC;QACpD;aAAO;YACL,IAAI,CAAC,+BAA+B,CAClC,gBAAgB,EAChB,YAAY,CAAC,KAAK,CACnB;QACH;IACF;AAEQ,IAAA,wBAAwB,CAAC,WAAmB,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACzB,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,SAAS,GACb,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS;;AAGlE,QAAA,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACzE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,WAAW;AAEpD,QAAA,OAAO,SAAS,GAAG,YAAY,IAAI,YAAY,GAAG,YAAY;IAChE;IAEQ,+BAA+B,CACrC,gBAAgE,EAChE,KAAa,EAAA;AAEb,QAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAC3C,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CACnC;QAED,IAAI,CAAC,eAAe,CAClB,eAAe,EACf,CAAA,4BAAA,EAA+B,KAAK,CAAA,UAAA,CAAY,CACjD;QAED,eAAe,CAAC,eAAe,EAAE;IACnC;;IAIQ,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;IACnC;IAEQ,mBAAmB,CACzB,OAAmD,EACnD,KAAa,EAAA;AAEb,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;AAEzD,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QAEnC,IAAI,CAAC,SAAS,EAAE;IAClB;AAEQ,IAAA,0BAA0B,CAChC,OAAmD,EAAA;QAEnD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA,2BAAA,CAA6B,CAAC;QAEtE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,eAAe,KAAI;AAC5C,YAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC;YAEzE,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;gBAC3C,eAAe,CAAC,MAAM,EAAE;YAC1B;iBAAO;;gBAEL,eAAe,CAAC,QAAQ,EAAE;YAC5B;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,CACvB,OAAmD,EACnD,KAAa,EAAA;AAEb,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;AAEnE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAE7B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,KAAK,CAAA,UAAA,CAAY,CAAC;AAEpE,QAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;IAC1B;IAEQ,SAAS,GAAA;QACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;QAEzE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,2BAA2B,CAAC,IAAI,EAAE,WAAW,CAAC,CACnD;IACH;IAEQ,eAAe,CACrB,KAAQ,EACR,OAAe,EAAA;QAEf,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC;QAC1B;IACF;aAEe,IAAA,CAAA,MAAM,GAAG,CAAH,CAAK;8GAr5Bf,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAoQ/B,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAGd,+BAA+B,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAvQ9B,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,CAAA,kBAAA,EAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,CAAA,cAAA,EAAA,cAAA,EA2B5B,CAAC,KAAc,KAAK,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA,EAAA,qBAAA,EAAA,CAAA,uBAAA,EAAA,uBAAA,EASzD,CAAC,KAAc,KACxB,eAAe,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAShC,gBAAgB,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAQvB,CAAC,KAAc,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,yFAQtC,eAAe,CAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAcf,gBAAgB,CAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,CAAA,iBAAA,EAAA,iBAAA,EAchB,gBAAgB,CAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAOhB,gBAAgB,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAmDhB,gBAAgB,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAgBhB,gBAAgB,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,cAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,+BAAA,EAAA,yCAAA,EAAA,UAAA,EAAA,wCAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,EAAA,SAAA,EAxLzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,WAAW,EAAE,8BAA8B;AAC5C,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,sCAAsC;AAC/C,gBAAA,WAAW,EAAE,8BAA8B;AAC5C,aAAA;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAkNa,uCAAuC,gFAGvC,gCAAgC,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAG7B,oCAAoC,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAf1C,wBAAwB,sFAGxB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/ThC,giJA2IA,EAAA,MAAA,EAAA,CAAA,41IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrCY,YAAY,8VAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,kBAAkB,0WAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAwB/E,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBA5B1C,SAAS;+BACE,0BAA0B,EAAA,QAAA,EAC1B,uBAAuB,EAAA,UAAA,EACrB,IAAI,WACP,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,cAAc,CAAC,mBAG1E,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,WAAW,EAAA,8BAAgC;AAC5C,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,sCAAsC;AAC/C,4BAAA,WAAW,EAAA,8BAAgC;AAC5C,yBAAA;qBACF,EAAA,IAAA,EACK;AACJ,wBAAA,iBAAiB,EAAE,+BAA+B;AAClD,wBAAA,SAAS,EAAE,aAAa;AACxB,wBAAA,QAAQ,EAAE,cAAc;AACxB,wBAAA,WAAW,EAAE,mBAAmB;AAChC,wBAAA,KAAK,EAAE,0BAA0B;AACjC,wBAAA,2CAA2C,EAAE,UAAU;AACvD,wBAAA,0CAA0C,EAAE,YAAY;AACzD,qBAAA,EAAA,QAAA,EAAA,giJAAA,EAAA,MAAA,EAAA,CAAA,41IAAA,CAAA,EAAA;;0BAqQE;;0BACA,MAAM;2BAAC,cAAc;;0BAErB;;0BACA,MAAM;2BAAC,+BAA+B;yCA3PzC,mBAAmB,EAAA,CAAA;sBADlB,KAAK;uBAAC,kBAAkB;gBAQzB,UAAU,EAAA,CAAA;sBADT;gBAWD,YAAY,EAAA,CAAA;sBAHX,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA;wBACL,SAAS,EAAE,CAAC,KAAc,KAAK,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC;AACrE,qBAAA;gBAWD,qBAAqB,EAAA,CAAA;sBAJpB,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA;wBACL,SAAS,EAAE,CAAC,KAAc,KACxB,eAAe,CAAC,KAAK,EAAE,wBAAwB,CAAC;AACnD,qBAAA;gBASD,QAAQ,EAAA,CAAA;sBADP,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAUtC,QAAQ,EAAA,CAAA;sBAHP,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA;wBACL,SAAS,EAAE,CAAC,KAAc,KAAK,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;AACzD,qBAAA;gBAQD,yBAAyB,EAAA,CAAA;sBADxB,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAQrC,UAAU,EAAA,CAAA;sBADT;gBAQD,UAAU,EAAA,CAAA;sBADT,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAQtC,iBAAiB,EAAA,CAAA;sBADhB;gBAQD,eAAe,EAAA,CAAA;sBADd,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAQtC,SAAS,EAAA,CAAA;sBADR,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAQlC,KAAK,EAAA,CAAA;sBADR;gBA6BG,WAAW,EAAA,CAAA;sBADd;gBAiBG,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAiBlC,QAAQ,EAAA,CAAA;sBADX,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBA2BtC,wBAAwB,EAAA,CAAA;sBADvB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAItD,mBAAmB,EAAA,CAAA;sBADlB,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAIjD,WAAW,EAAA,CAAA;sBADV,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAI3C,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,uCAAuC;gBAIrD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,gCAAgC;gBAI9C,YAAY,EAAA,CAAA;sBADX,eAAe;uBAAC,oCAAoC;;MA2sB1C,2BAA2B,CAAA;IACtC,WAAA,CACS,MAA8C,EAC9C,KAAU,EAAA;QADV,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;IACX;AACJ;;AEngCM,MAAM,2BAA2B,GAAG;IACzC,8BAA8B;IAC9B,uCAAuC;IACvC,qCAAqC;IACrC,oCAAoC;;;AC5BtC;;AAEG;;;;"}
|
|
@@ -58,6 +58,16 @@ export declare class NgxVirtualSelectFieldComponent<TValue> implements OnInit, O
|
|
|
58
58
|
* @default 'Search...'
|
|
59
59
|
*/
|
|
60
60
|
filterPlaceholder: string;
|
|
61
|
+
/**
|
|
62
|
+
* Show clear button in filter input
|
|
63
|
+
* @default true
|
|
64
|
+
*/
|
|
65
|
+
filterClearable: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Show clear button in select trigger
|
|
68
|
+
* @default false
|
|
69
|
+
*/
|
|
70
|
+
clearable: boolean;
|
|
61
71
|
/**
|
|
62
72
|
* Value of the select field
|
|
63
73
|
* @default null
|
|
@@ -110,8 +120,9 @@ export declare class NgxVirtualSelectFieldComponent<TValue> implements OnInit, O
|
|
|
110
120
|
protected readonly overlayWidth: Signal<string | number>;
|
|
111
121
|
protected readonly isPanelOpened: import("@angular/core").WritableSignal<boolean>;
|
|
112
122
|
protected readonly filterText: import("@angular/core").WritableSignal<string>;
|
|
123
|
+
protected readonly options: import("@angular/core").WritableSignal<NgxVirtualSelectFieldOptionModel<TValue>[]>;
|
|
124
|
+
protected readonly filteredOptions: Signal<NgxVirtualSelectFieldOptionModel<TValue>[]>;
|
|
113
125
|
protected triggerValue$: Observable<string> | null;
|
|
114
|
-
protected filteredOptions$: Observable<NgxVirtualSelectFieldOptionModel<TValue>[]> | null;
|
|
115
126
|
protected preferredOverlayOrigin: CdkOverlayOrigin | ElementRef | undefined;
|
|
116
127
|
private readonly _changeDetectorRef;
|
|
117
128
|
private readonly _destroyRef;
|
|
@@ -122,7 +133,6 @@ export declare class NgxVirtualSelectFieldComponent<TValue> implements OnInit, O
|
|
|
122
133
|
private _onTouched;
|
|
123
134
|
private _selectionModel;
|
|
124
135
|
private _keyManager;
|
|
125
|
-
private _filterTextSubject;
|
|
126
136
|
constructor(_parentFormField: MatFormField, _defaultOptions?: NgxVirtualSelectFieldConfig | undefined);
|
|
127
137
|
private createOverlayWidthSignal;
|
|
128
138
|
private resolveOverlayWidth;
|
|
@@ -150,6 +160,8 @@ export declare class NgxVirtualSelectFieldComponent<TValue> implements OnInit, O
|
|
|
150
160
|
protected optionTrackBy: TrackByFunction<NgxVirtualSelectFieldOptionModel<TValue>>;
|
|
151
161
|
protected onScrolledIndexChange(): void;
|
|
152
162
|
protected onFilterInput(event: Event): void;
|
|
163
|
+
protected onFilterClear(): void;
|
|
164
|
+
protected onClear(event: Event): void;
|
|
153
165
|
protected onFilterKeyDown(event: KeyboardEvent): void;
|
|
154
166
|
protected open(): void;
|
|
155
167
|
protected close(): void;
|
|
@@ -170,13 +182,15 @@ export declare class NgxVirtualSelectFieldComponent<TValue> implements OnInit, O
|
|
|
170
182
|
private assertIsDefined;
|
|
171
183
|
private static nextId;
|
|
172
184
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgxVirtualSelectFieldComponent<any>, [{ optional: true; }, { optional: true; }]>;
|
|
173
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgxVirtualSelectFieldComponent<any>, "ngx-virtual-select-field", ["ngxVirtualSelectField"], { "userAriaDescribedBy": { "alias": "aria-describedby"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "optionHeight": { "alias": "optionHeight"; "required": false; }; "panelViewportPageSize": { "alias": "panelViewportPageSize"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "typeaheadDebounceInterval": { "alias": "typeaheadDebounceInterval"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "filterable": { "alias": "filterable"; "required": false; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; }; "value": { "alias": "value"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; "selectionChange": "selectionChange"; }, ["optionFor", "customTrigger", "optionsQuery"], ["ngx-virtual-select-field-trigger"], true, never>;
|
|
185
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgxVirtualSelectFieldComponent<any>, "ngx-virtual-select-field", ["ngxVirtualSelectField"], { "userAriaDescribedBy": { "alias": "aria-describedby"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "optionHeight": { "alias": "optionHeight"; "required": false; }; "panelViewportPageSize": { "alias": "panelViewportPageSize"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "typeaheadDebounceInterval": { "alias": "typeaheadDebounceInterval"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "filterable": { "alias": "filterable"; "required": false; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; }; "filterClearable": { "alias": "filterClearable"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "value": { "alias": "value"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; "selectionChange": "selectionChange"; }, ["optionFor", "customTrigger", "optionsQuery"], ["ngx-virtual-select-field-trigger"], true, never>;
|
|
174
186
|
static ngAcceptInputType_optionHeight: unknown;
|
|
175
187
|
static ngAcceptInputType_panelViewportPageSize: unknown;
|
|
176
188
|
static ngAcceptInputType_multiple: unknown;
|
|
177
189
|
static ngAcceptInputType_tabIndex: unknown;
|
|
178
190
|
static ngAcceptInputType_typeaheadDebounceInterval: unknown;
|
|
179
191
|
static ngAcceptInputType_filterable: unknown;
|
|
192
|
+
static ngAcceptInputType_filterClearable: unknown;
|
|
193
|
+
static ngAcceptInputType_clearable: unknown;
|
|
180
194
|
static ngAcceptInputType_required: unknown;
|
|
181
195
|
static ngAcceptInputType_disabled: unknown;
|
|
182
196
|
}
|