@recursyve/ngx-material-components 19.0.0-beta.21 → 19.0.0-beta.22

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,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, DestroyRef, signal, computed, Injectable, Component, input, output, viewChild, ElementRef, ChangeDetectorRef, effect, ViewChildren, Directive, booleanAttribute, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
2
+ import { InjectionToken, inject, DestroyRef, signal, computed, Injectable, Component, input, output, viewChild, ElementRef, ChangeDetectorRef, effect, ViewChildren, Directive, booleanAttribute, untracked, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { Subject, switchMap, EMPTY, defer, map, catchError, finalize, tap, startWith, merge, debounceTime, distinctUntilChanged, take, takeUntil } from 'rxjs';
5
5
  import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
@@ -31,7 +31,7 @@ class NiceTypeaheadService {
31
31
  _request = signal(null);
32
32
  _nextRequest = signal(null);
33
33
  _preloaded = signal(false);
34
- _autoSelectFirstValue = signal(false);
34
+ _autoSelectMode = signal("none");
35
35
  _loading = signal(true);
36
36
  items = this._items.asReadonly();
37
37
  active = this._active.asReadonly();
@@ -45,13 +45,23 @@ class NiceTypeaheadService {
45
45
  throw new Error("No provider found for resource " + resource);
46
46
  }
47
47
  this.resourceProvider = provider;
48
- if (options?.autoSelectFirstValue) {
49
- this._autoSelectFirstValue.set(options.autoSelectFirstValue);
48
+ if (options?.autoSelectMode) {
49
+ this._autoSelectMode.set(options.autoSelectMode);
50
50
  }
51
51
  if (options?.searchOptions) {
52
52
  this._searchOptions.set(options.searchOptions);
53
53
  }
54
54
  }
55
+ autoSelect(items) {
56
+ if (this._autoSelectMode() === "first_result" && !this._preloaded()) {
57
+ this._preloaded.set(true);
58
+ this._active.set(items[0]);
59
+ }
60
+ if (this._autoSelectMode() === "single_result" && items.length === 1) {
61
+ this._preloaded.set(true);
62
+ this._active.set(items[0]);
63
+ }
64
+ }
55
65
  setSearchOptions(options) {
56
66
  this._searchOptions.set(options);
57
67
  }
@@ -154,10 +164,6 @@ class NiceTypeaheadService {
154
164
  else {
155
165
  this._nextRequest.set(null);
156
166
  }
157
- if (this._autoSelectFirstValue() && !this._preloaded()) {
158
- this._preloaded.set(true);
159
- this._active.set(result.items[0]);
160
- }
161
167
  }), tap({
162
168
  next: () => {
163
169
  if (request.onFinish) {
@@ -686,9 +692,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
686
692
  class NiceAsyncTypeahead extends NiceTypeaheadBase {
687
693
  resource = input.required();
688
694
  searchOptions = input(null);
695
+ autoSelectMode = input("none");
696
+ /**
697
+ * @deprecated Use autoSelectMode instead
698
+ */
689
699
  autoSelectFirstValue = input(false, { transform: booleanAttribute });
690
700
  filteredValues = computed(() => this.service.items());
691
701
  optionsContainer = viewChild("optionsContainer");
702
+ prefilled = signal(false);
692
703
  service = inject(NiceTypeaheadService);
693
704
  _compareWith = (o1, o2) => {
694
705
  if (!(typeof o1 === "object" && o1 && typeof o2 === "object" && o2)) {
@@ -718,12 +729,20 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
718
729
  effect(() => {
719
730
  this.value = this.service.active();
720
731
  });
732
+ effect(() => {
733
+ if (this.focused) {
734
+ return;
735
+ }
736
+ const items = this.service.items();
737
+ untracked(() => this.service.autoSelect(items));
738
+ });
721
739
  }
722
740
  ngOnInit() {
723
741
  super.ngOnInit();
742
+ const autoSelectMode = this.autoSelectMode() ?? (this.autoSelectFirstValue() ? "first_result" : "none");
724
743
  const searchOptions = this.optionsContainer();
725
744
  this.service.init(this.resource(), {
726
- autoSelectFirstValue: this.autoSelectFirstValue(),
745
+ autoSelectMode: autoSelectMode,
727
746
  ...(searchOptions && { searchOptions: searchOptions })
728
747
  });
729
748
  }
@@ -737,9 +756,14 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
737
756
  }
738
757
  onFocusChanged(isFocused) {
739
758
  super.onFocusChanged(isFocused);
740
- if (isFocused) {
741
- this._searchControl.patchValue("");
759
+ if (!isFocused) {
760
+ return;
742
761
  }
762
+ if (this.prefilled()) {
763
+ this.prefilled.set(false);
764
+ return;
765
+ }
766
+ this._searchControl.patchValue("");
743
767
  }
744
768
  formatLabel(item) {
745
769
  return this.service.formatLabel(item);
@@ -754,6 +778,13 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
754
778
  this._selectOptionByValue(option.value);
755
779
  this.stateChanges.next();
756
780
  }
781
+ prefill(searchQuery) {
782
+ this.prefilled.set(true);
783
+ this._searchControl.patchValue(searchQuery);
784
+ }
785
+ search(searchQuery) {
786
+ this.service.search(searchQuery);
787
+ }
757
788
  setSearchOptions(options) {
758
789
  this.service.setSearchOptions(options);
759
790
  }
@@ -782,7 +813,7 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
782
813
  }
783
814
  }
784
815
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NiceAsyncTypeahead, deps: [], target: i0.ɵɵFactoryTarget.Component });
785
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NiceAsyncTypeahead, isStandalone: true, selector: "nice-async-typeahead", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null }, searchOptions: { classPropertyName: "searchOptions", publicName: "searchOptions", isSignal: true, isRequired: false, transformFunction: null }, autoSelectFirstValue: { classPropertyName: "autoSelectFirstValue", publicName: "autoSelectFirstValue", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "combobox", "aria-haspopup": "listbox" }, listeners: { "keydown": "_handleKeydown($event)", "focus": "onFocusChanged(true)", "blur": "onFocusChanged(false)" }, properties: { "attr.id": "id", "attr.aria-controls": "panelOpen ? id + \"-panel\" : null", "attr.aria-expanded": "panelOpen", "attr.aria-required": "required.toString()", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "class.nice-typeahead-disabled": "disabled", "class.nice-typeahead-invalid": "errorState", "class.nice-typeahead-required": "required", "class.nice-typeahead-empty": "empty" }, classAttribute: "nice-typeahead" }, providers: [
816
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: NiceAsyncTypeahead, isStandalone: true, selector: "nice-async-typeahead", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null }, searchOptions: { classPropertyName: "searchOptions", publicName: "searchOptions", isSignal: true, isRequired: false, transformFunction: null }, autoSelectMode: { classPropertyName: "autoSelectMode", publicName: "autoSelectMode", isSignal: true, isRequired: false, transformFunction: null }, autoSelectFirstValue: { classPropertyName: "autoSelectFirstValue", publicName: "autoSelectFirstValue", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "combobox", "aria-haspopup": "listbox" }, listeners: { "keydown": "_handleKeydown($event)", "focus": "onFocusChanged(true)", "blur": "onFocusChanged(false)" }, properties: { "attr.id": "id", "attr.aria-controls": "panelOpen ? id + \"-panel\" : null", "attr.aria-expanded": "panelOpen", "attr.aria-required": "required.toString()", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "class.nice-typeahead-disabled": "disabled", "class.nice-typeahead-invalid": "errorState", "class.nice-typeahead-required": "required", "class.nice-typeahead-empty": "empty" }, classAttribute: "nice-typeahead" }, providers: [
786
817
  { provide: MatFormFieldControl, useExisting: NiceAsyncTypeahead },
787
818
  NiceTypeaheadService
788
819
  ], viewQueries: [{ propertyName: "optionsContainer", first: true, predicate: ["optionsContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n class=\"nice-typeahead\"\n cdk-overlay-origin\n>\n <div class=\"nice-typeahead-value\">\n @if (_empty()) {\n <span class=\"nice-typeahead-placeholder mat-mdc-select-min-line\">{{ _placeholder() }}</span>\n } @else {\n <span class=\"nice-typeahead-value-text\">\n <span class=\"mat-mdc-select-min-line\">\n @if (_value(); as activeValue) {\n {{ formatLabel(activeValue) }}\n }\n </span>\n </span>\n }\n </div>\n\n <div class=\"nice-typeahead-suffix\">\n @if (_empty()) {\n <div class=\"mat-mdc-select-arrow\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5z\"></path>\n </svg>\n </div>\n } @else if (canRemoveValue()) {\n <button class=\"nice-typeahead-remove\" mat-icon-button (click)=\"$event.stopPropagation(); removeActiveValue()\">\n <svg viewBox=\"0 -960 960 960\">\n <path d=\"m291-240-51-51 189-189-189-189 51-51 189 189 189-189 51 51-189 189 189 189-51 51-189-189-189 189Z\"/>\n </svg>\n </button>\n }\n </div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayWidth]=\"_overlayWidth\"\n [cdkConnectedOverlayOrigin]=\"_preferredOverlayOrigin || fallbackOverlayOrigin\"\n (attach)=\"_onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"nice-typeahead-panel nice-typeahead--open nice-typehead-animations-enabled\"\n [ngClass]=\"panelClass()\"\n [attr.id]=\"id + '-panel'\"\n (keydown)=\"_handleKeydown($event)\"\n (scrollend)=\"_handleScrollEnd()\"\n >\n <div class=\"nice-typeahead-search-input\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n #input\n class=\"nice-typeahead__input\"\n matInput\n [formControl]=\"_searchControl\"\n >\n\n <nice-typeahead-search-icon matIconPrefix />\n </mat-form-field>\n </div>\n\n <div #optionsContainer class=\"nice-typeahead-options\" role=\"presentation\">\n @for (item of filteredValues(); track item) {\n <mat-option [value]=\"item\">\n @if (optionTemplate(); as optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n {{ formatLabel(item) }}\n }\n </mat-option>\n } @empty {\n <mat-option disabled>\n <span class=\"nice-typeahead__no-items\">\n {{ noItemsFoundLabel() }}\n </span>\n </mat-option>\n }\n </div>\n </div>\n</ng-template>\n", styles: ["nice-typeahead,nice-async-typeahead{display:inline-block;width:100%;outline:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:var(--mat-select-enabled-trigger-text-color, var(--mat-app-on-surface));font-family:var(--mat-select-trigger-text-font, var(--mat-app-body-large-font));line-height:var(--mat-select-trigger-text-line-height, var(--mat-app-body-large-line-height));font-size:var(--mat-select-trigger-text-size, var(--mat-app-body-large-size));font-weight:var(--mat-select-trigger-text-weight, var(--mat-app-body-large-weight));letter-spacing:var(--mat-select-trigger-text-tracking, var(--mat-app-body-large-tracking))}nice-typeahead.nice-typeahead-disabled,nice-async-typeahead.nice-typeahead-disabled{color:var(--mat-select-disabled-trigger-text-color)}nice-typeahead.nice-typeahead-disabled .mat-mdc-select-arrow,nice-typeahead.nice-typeahead-disabled .nice-typeahead-remove,nice-async-typeahead.nice-typeahead-disabled .mat-mdc-select-arrow,nice-async-typeahead.nice-typeahead-disabled .nice-typeahead-remove{color:var(--mat-select-disabled-trigger-text-color)}nice-typeahead.nice-typeahead-invalid .mat-mdc-select-arrow,nice-async-typeahead.nice-typeahead-invalid .mat-mdc-select-arrow{color:var(--mat-select-invalid-arrow-color)}nice-typeahead .nice-typeahead,nice-async-typeahead .nice-typeahead{width:100%;display:inline-flex;align-items:center;justify-content:space-between;cursor:pointer;position:relative;box-sizing:border-box}nice-typeahead .nice-typeahead-suffix,nice-async-typeahead .nice-typeahead-suffix{height:24px;flex-shrink:0;display:inline-flex;align-items:center;--mdc-icon-button-state-layer-size: 24px}nice-typeahead .nice-typeahead-suffix .nice-typeahead-remove,nice-async-typeahead .nice-typeahead-suffix .nice-typeahead-remove{margin-right:-6px}nice-typeahead .nice-typeahead-value,nice-async-typeahead .nice-typeahead-value{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}nice-typeahead .nice-typeahead-value-text,nice-async-typeahead .nice-typeahead-value-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}nice-typeahead .mat-mdc-select-min-line:empty:before,nice-async-typeahead .mat-mdc-select-min-line:empty:before{content:\" \";white-space:pre;width:1px;display:inline-block;visibility:hidden}nice-typeahead .nice-typeahead__input,nice-async-typeahead .nice-typeahead__input{border:none;outline:none;box-shadow:none;background:none;padding:0;margin:0;color:inherit}.mat-mdc-form-field-type-nice-typeahead:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{cursor:pointer}.mat-mdc-form-field-type-nice-typeahead.mat-form-field-appearance-outline .mdc-notched-outline__notch{max-width:calc(100% - 60px)}@keyframes _nice-typeahead-enter{0%{opacity:0;transform:scaleY(.8)}to{opacity:1;transform:none}}@keyframes _nice-typeahead-exit{0%{opacity:1}to{opacity:0}}div.nice-typeahead-panel{width:100%;outline:0;padding:8px 0;border-radius:4px;box-sizing:border-box;position:static;background-color:var(--mat-select-panel-background-color, var(--mat-app-surface-container))}div.nice-typeahead-panel nice-typeahead-search-icon{width:16px;height:16px;margin-right:8px;margin-left:16px}div.nice-typeahead-panel nice-typeahead-search-icon svg{width:16px;height:16px}div.nice-typeahead-panel .nice-typeahead-search-input{padding-left:8px;padding-right:8px;padding-bottom:8px}div.nice-typeahead-panel .nice-typeahead-search-input .mat-mdc-form-field,div.nice-typeahead-panel .nice-typeahead-search-input .mat-mdc-form-field-infix{width:100%}div.nice-typeahead-panel .nice-typeahead-options{overflow:auto;max-height:384px}div.nice-typeahead-panel{box-shadow:var(--mat-select-container-elevation-shadow)}.nice-typehead-animations-enabled{animation:_nice-typeahead-enter .12s cubic-bezier(0,0,.2,1)}.nice-typehead-animations-enabled.mat-select-panel-exit{animation:_nice-typeahead-exit .1s linear}\n"], dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: 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"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NiceTypeaheadSearchIcon, selector: "nice-typeahead-search-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
@@ -1 +1 @@
1
- {"version":3,"file":"recursyve-ngx-material-components-typeahead.mjs","sources":["../../../src/material-components/typeahead/providers/async-typeahead.provider.ts","../../../src/material-components/typeahead/constants.ts","../../../src/material-components/typeahead/providers/async-typeahead.service.ts","../../../src/material-components/typeahead/provider.ts","../../../src/material-components/typeahead/icons/search/typeahead-search-icon.ts","../../../src/material-components/typeahead/icons/search/typeahead-search-icon.svg","../../../src/material-components/typeahead/typeahead-base.ts","../../../src/material-components/typeahead/async-typeahead.ts","../../../src/material-components/typeahead/typeahead.html","../../../src/material-components/typeahead/typeahead.ts","../../../src/material-components/typeahead/recursyve-ngx-material-components-typeahead.ts"],"sourcesContent":["import { Observable } from \"rxjs\";\n\nexport type NiceAsyncTypeaheadSearchResult<T> = {\n items: T[];\n nextPage: number | null;\n}\n\nexport abstract class NiceAsyncTypeaheadResourceProvider<T, ID = number, Options = object> {\n public abstract resource: string;\n\n public abstract search(\n searchQuery: string,\n page: number,\n options?: Options\n ): Observable<NiceAsyncTypeaheadSearchResult<T>>;\n\n public abstract getById(id: ID, options?: Options): Observable<T>;\n\n public abstract format(item: T): string;\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER = new InjectionToken(\"nice_async_typeahead_provider\");\n","import { computed, DestroyRef, inject, Injectable, signal } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { catchError, defer, EMPTY, finalize, map, Observable, Subject, switchMap, tap } from \"rxjs\";\nimport { NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER } from \"../constants\";\nimport { NiceAsyncTypeaheadResourceProvider } from \"./async-typeahead.provider\";\n\nexport type AsyncTypeaheadRequests = {\n page: number;\n searchQuery?: string;\n onFinish: Subject<void> | null;\n};\n\nexport type FetchActiveRequest = {\n id: number | string;\n};\n\nexport type NiceTypeaheadInitOptions = {\n autoSelectFirstValue?: boolean;\n searchOptions?: object;\n};\n\n@Injectable()\nexport class NiceTypeaheadService<T extends object> {\n private readonly resources = inject<NiceAsyncTypeaheadResourceProvider<unknown>[]>(\n NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER, { optional: true }\n ) ?? [];\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly fetchResources$ = new Subject<AsyncTypeaheadRequests>();\n private readonly fetchActive$ = new Subject<FetchActiveRequest>();\n private resourceProvider: NiceAsyncTypeaheadResourceProvider<T, string | number> | null = null;\n\n private readonly _items = signal<T[]>([]);\n private readonly _active = signal<T | null>(null);\n private readonly _searchOptions = signal<object | null>(null);\n private readonly _request = signal<AsyncTypeaheadRequests | null>(null);\n private readonly _nextRequest = signal<AsyncTypeaheadRequests | null>(null);\n\n private readonly _preloaded = signal(false);\n private readonly _autoSelectFirstValue = signal(false);\n private readonly _loading = signal(true);\n\n public readonly items = this._items.asReadonly();\n public readonly active = this._active.asReadonly();\n public readonly loading = this._loading.asReadonly();\n public readonly isLastPage = computed(() => !this._nextRequest());\n\n public init(resource: string, options?: NiceTypeaheadInitOptions): void {\n this.fetchResources$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(\n switchMap((request) => this.fetchResources(request))\n ).subscribe();\n\n this.fetchActive$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(\n switchMap((request) => this.fetchActive(request))\n ).subscribe();\n\n const provider = this.resources.find((resources) => resources.resource === resource);\n if (!provider) {\n throw new Error(\"No provider found for resource \" + resource);\n }\n\n this.resourceProvider = provider as NiceAsyncTypeaheadResourceProvider<T>;\n\n if (options?.autoSelectFirstValue) {\n this._autoSelectFirstValue.set(options.autoSelectFirstValue);\n }\n\n if (options?.searchOptions) {\n this._searchOptions.set(options.searchOptions);\n }\n }\n\n public setSearchOptions(options: object | null): void {\n this._searchOptions.set(options);\n }\n\n public patchSearchOptions(options: object | null): void {\n const currentOptions = this._searchOptions();\n this._searchOptions.set({ ...currentOptions, ...options });\n }\n\n public setActive(active: T | null): void {\n this._active.set(active);\n }\n\n public setActiveFromId(id: number | string): void {\n this.fetchActive$.next({ id });\n }\n\n public reload(): Observable<void> {\n const onFinish = new Subject<void>();\n this.fetchResources$.next({\n page: 0,\n searchQuery: this._request()?.searchQuery ?? \"\",\n onFinish\n });\n return onFinish.asObservable();\n }\n\n public reloadActive(): void {\n const active = this._active();\n if (!active || !(\"id\" in active)) {\n return;\n }\n\n if (!(typeof active.id === \"number\" || typeof active.id === \"string\")) {\n return;\n }\n\n this.setActiveFromId(active.id);\n }\n\n public setItems(items: T[]): void {\n this._items.set(items);\n }\n\n public search(searchQuery: string): Observable<void> {\n const onFinish = new Subject<void>();\n this.fetchResources$.next({ searchQuery, page: 0, onFinish });\n return onFinish.asObservable();\n }\n\n public loadMore(): Observable<void> {\n const nextRequest = this._nextRequest();\n if (!nextRequest || this._loading()) {\n return EMPTY;\n }\n\n const onFinish = new Subject<void>();\n this.fetchResources$.next({ ...nextRequest, onFinish });\n return onFinish.asObservable();\n }\n\n public fetchActive(request: FetchActiveRequest): Observable<void> {\n return defer(() => {\n if (!this.resourceProvider) {\n return EMPTY;\n }\n\n this._loading.set(true);\n\n const localItem = this._items().find((item) => \"id\" in item && item.id === request.id);\n if (localItem) {\n this._loading.set(false);\n this._items.set([localItem]);\n this._active.set(localItem);\n return EMPTY;\n }\n\n return this.resourceProvider.getById(request.id)\n }).pipe(\n map((item) => {\n this._items.set([item]);\n this._active.set(item);\n }),\n catchError(() => EMPTY),\n finalize(() => {\n this._loading.set(false);\n })\n );\n }\n\n public fetchResources(request: AsyncTypeaheadRequests): Observable<void> {\n return defer(() => {\n if (!this.resourceProvider) {\n const error = new Error(\"Resource provider not initialized\");\n if (request.onFinish) {\n request.onFinish.error(error);\n request.onFinish.complete();\n }\n\n return EMPTY;\n }\n\n this._loading.set(true);\n this._request.set(request);\n\n return this.resourceProvider.search(request.searchQuery ?? \"\", request.page, this._searchOptions() ?? {});\n }).pipe(\n map((result) => {\n if (request.page === 0) {\n this._items.set(result.items as T[]);\n } else {\n this._items.set([\n ...this._items(),\n ...(result.items as T[])\n ]);\n }\n\n if (result.nextPage) {\n this._nextRequest.set({\n ...request,\n page: result.nextPage\n });\n } else {\n this._nextRequest.set(null);\n }\n\n if (this._autoSelectFirstValue() && !this._preloaded()) {\n this._preloaded.set(true);\n this._active.set(result.items[0]);\n }\n }),\n tap({\n next: () => {\n if (request.onFinish) {\n request.onFinish.next();\n request.onFinish.complete();\n }\n },\n error: (error) => {\n if (request.onFinish) {\n request.onFinish.error(error);\n request.onFinish.complete();\n }\n },\n finalize: () => {\n if (request.onFinish && !request.onFinish.closed) {\n request.onFinish.complete();\n }\n }\n }),\n catchError(() => EMPTY),\n finalize(() => {\n this._loading.set(false);\n })\n );\n }\n\n public formatLabel(item: T): string {\n if (!this.resourceProvider) {\n return \"\";\n }\n\n return this.resourceProvider.format(item);\n }\n}\n","import { Provider, Type } from \"@angular/core\";\nimport { NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER } from \"./constants\";\nimport { NiceAsyncTypeaheadResourceProvider } from \"./providers/async-typeahead.provider\";\n\nexport function provideAsyncTypeaheadResources(\n providers: Type<NiceAsyncTypeaheadResourceProvider<unknown, unknown>>[]\n): Provider[] {\n return providers.map((provider) => ({\n provide: NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER,\n useClass: provider,\n multi: true\n }));\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-typeahead-search-icon\",\n templateUrl: \"typeahead-search-icon.svg\"\n})\nexport class NiceTypeaheadSearchIcon {}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M1.4720451262 13.356970375A9.063 9.063 0 1 0 18.154024235 6.267298379a9.063 9.063 0 1 0 -16.6819791088 7.089671996Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path>\n <path d=\"m16.221 16.22 7.029 7.03\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path>\n</svg>\n","import { ActiveDescendantKeyManager } from \"@angular/cdk/a11y\";\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { DOWN_ARROW, ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from \"@angular/cdk/keycodes\";\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from \"@angular/cdk/overlay\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n computed,\n DestroyRef,\n Directive, DoCheck,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit, output,\n QueryList,\n signal,\n TemplateRef,\n viewChild,\n ViewChildren\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { ControlValueAccessor, FormBuilder, FormGroupDirective, NgControl, NgForm, Validators } from \"@angular/forms\";\nimport {\n _ErrorStateTracker,\n _getOptionScrollPosition, ErrorStateMatcher,\n MatOption,\n MatOptionSelectionChange\n} from \"@angular/material/core\";\nimport { MAT_FORM_FIELD, MatFormField, MatFormFieldControl } from \"@angular/material/form-field\";\nimport {\n debounceTime,\n defer,\n distinctUntilChanged,\n merge,\n Observable,\n startWith,\n Subject,\n switchMap,\n take,\n takeUntil\n} from \"rxjs\";\n\n/**\n * Implementation of the same panel and overlay logic as the official Angular MatSelect.\n * This used some of the logic from MatSelect to make this component look and feel like a MatSelect.\n */\n@Directive()\nexport class NiceTypeaheadBase<T>\n implements\n MatFormFieldControl<T>,\n ControlValueAccessor,\n OnInit,\n AfterViewInit,\n DoCheck,\n OnDestroy\n{\n @ViewChildren(MatOption)\n private readonly options!: QueryList<MatOption>;\n\n public readonly noItemsFoundLabel = input<string>(\"No items found\");\n public readonly labelProperty = input<string>();\n public readonly formatLabelFn = input<((value: T) => string)>();\n public readonly optionTemplate = input<TemplateRef<{ $implicit: T }>>();\n public readonly panelClass = input<string | string[]>([]);\n public readonly canRemoveValue = input<boolean>(true);\n\n public readonly selected = output<T | null>();\n\n private static nextId = 0;\n\n protected readonly _input = viewChild<ElementRef<HTMLInputElement>>(\"input\");\n protected readonly _panel = viewChild<ElementRef<HTMLElement>>(\"panel\");\n protected readonly _overlayDir = viewChild(CdkConnectedOverlay);\n\n protected _errorStateTracker?: _ErrorStateTracker;\n\n protected _required: boolean | null = null;\n protected _focused = false;\n protected _disabled = false;\n protected _panelOpen = false;\n protected _compareWith = (o1: T, o2: T) => o1 === o2;\n\n protected readonly _value = signal<T | null>(null);\n protected readonly _empty = computed(() => !this._value());\n protected readonly _placeholder = signal(\"\");\n protected readonly _searchValue = signal(\"\");\n\n protected readonly _elementRef = inject(ElementRef);\n protected readonly _destroyRef = inject(DestroyRef);\n protected readonly _changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly _fb = inject(FormBuilder);\n\n protected readonly _searchControl = this._fb.nonNullable.control(\"\");\n protected readonly _initialized = new Subject<void>();\n\n protected readonly _parentFormField = inject<MatFormField>(MAT_FORM_FIELD, { optional: true });\n\n public readonly id: string = `nice-typeahead-${NiceTypeaheadBase.nextId++}`;\n public readonly controlType: string = \"nice-typeahead\";\n public readonly stateChanges = new Subject<void>();\n public readonly optionSelectionChanges: Observable<MatOptionSelectionChange> = defer(() => {\n const options = this.options;\n\n if (options) {\n return options.changes.pipe(\n startWith(options),\n switchMap(() => merge(...options.map(option => option.onSelectionChange))),\n );\n }\n\n return this._initialized.pipe(switchMap(() => this.optionSelectionChanges));\n });\n\n public readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n public readonly _panelDoneAnimatingStream = new Subject<string>();\n\n public _keyManager!: ActiveDescendantKeyManager<MatOption>;\n public _preferredOverlayOrigin?: CdkOverlayOrigin | ElementRef;\n public _overlayWidth!: string | number;\n public _selectionModel!: SelectionModel<MatOption>;\n public _onChange?: (value: T | null) => void;\n public _onTouched?: () => void;\n\n public get placeholder(): string {\n return this._placeholder();\n }\n\n public set placeholder(placeholder) {\n this._placeholder.set(placeholder);\n this.stateChanges.next();\n }\n\n public get focused(): boolean {\n return this._focused;\n }\n\n public set focused(isFocused: boolean) {\n this._focused = isFocused;\n this.stateChanges.next();\n }\n\n public get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n\n public set required(isRequired: boolean) {\n this._required = isRequired;\n this.stateChanges.next();\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = value;\n this.stateChanges.next();\n }\n\n public get value(): T | null {\n return this._value();\n }\n\n public set value(value: T | null) {\n const hasAssigned = this._assignValue(value);\n\n if (hasAssigned) {\n this._onChange?.(value);\n this.selected.emit(value);\n }\n }\n\n public get empty(): boolean {\n return !this._value();\n }\n\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n public get errorState(): boolean {\n return this._errorStateTracker?.errorState ?? false;\n }\n\n public set errorState(value: boolean) {\n if (!this._errorStateTracker) {\n return;\n }\n\n this._errorStateTracker.errorState = value;\n }\n\n public get panelOpen(): boolean {\n return this._panelOpen;\n }\n\n constructor() {\n effect(() => this._input()?.nativeElement.focus());\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n const defaultErrorStateMatcher = inject(ErrorStateMatcher);\n const ngControl = inject(NgControl, { optional: true, self: true });\n const parentFormGroup = inject(FormGroupDirective, { optional: true });\n const parentForm = inject(NgForm, { optional: true });\n this._errorStateTracker = new _ErrorStateTracker(\n defaultErrorStateMatcher,\n ngControl,\n parentFormGroup,\n parentForm,\n this.stateChanges,\n );\n }\n\n public ngOnInit(): void {\n this._selectionModel = new SelectionModel<MatOption>();\n\n this._searchControl.valueChanges.pipe(\n takeUntilDestroyed(this._destroyRef),\n debounceTime(250),\n distinctUntilChanged()\n ).subscribe((value) => this._searchValue.set(value));\n }\n\n public ngAfterViewInit(): void {\n this._initialized.next();\n this._initialized.complete();\n\n this._initKeyManager();\n\n this.options.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n public onContainerClick(event: MouseEvent): void {\n if (this.disabled) {\n return;\n }\n\n this.stateChanges.next();\n if ((event.target as Element).tagName.toLowerCase() !== \"input\") {\n this.onFocusChanged(true);\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n const controlElement = this._elementRef.nativeElement.querySelector(\".nice-typeahead\");\n if (!controlElement) {\n return;\n }\n\n controlElement.setAttribute(\"aria-describedby\", ids.join(\" \"));\n }\n\n public onFocusChanged(isFocused: boolean): void {\n this.focused = isFocused;\n this.stateChanges.next();\n\n if (isFocused) {\n this.open();\n }\n }\n\n public writeValue(value: T): void {\n this._assignValue(value);\n }\n\n public registerOnChange(fn: (value: T | null) => void) {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n public formatLabel(item: T): string {\n if (typeof item === \"string\") {\n return item;\n }\n\n const fn = this.formatLabelFn();\n if (fn) {\n return fn(item);\n }\n\n const property = this.labelProperty();\n if (!property) {\n return item?.toString() ?? \"\";\n }\n\n if (!(typeof item === \"object\") || item === null) {\n return item?.toString() ?? \"\";\n }\n\n if (property in item) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return item[property];\n }\n\n return item.toString();\n }\n\n public removeActiveValue(): void {\n this.value = null;\n this._selectionModel.clear();\n this._keyManager.setActiveItem(-1);\n this._changeDetectorRef.markForCheck();\n }\n\n public updateErrorState(): void {\n this._errorStateTracker?.updateErrorState();\n }\n\n public open(): void {\n if (!this._canOpen()) {\n return;\n }\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this._parentFormField) {\n this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n }\n\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._changeDetectorRef.markForCheck();\n\n // Required for the MDC form field to pick up when the overlay has been opened.\n this.stateChanges.next();\n }\n\n public close(): void {\n if (!this._panelOpen) {\n return;\n }\n\n this._focused = false;\n this._panelOpen = false;\n this._changeDetectorRef.markForCheck();\n\n this._searchValue.set(\"\");\n\n this._onTouched?.();\n\n // Required for the MDC form field to pick up when the overlay has been closed.\n this.stateChanges.next();\n }\n\n public focus(options?: FocusOptions): void {\n this._elementRef.nativeElement.focus(options);\n }\n\n public _handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n if (this.panelOpen) {\n this._handleOpenKeydown(event);\n } else {\n this._handleClosedKeydown(event);\n }\n }\n\n public _handleScrollEnd(): void {}\n\n protected _canOpen(): boolean {\n return !this._panelOpen && !this.disabled;\n }\n\n protected _onAttached(): void {\n this._overlayDir()?.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n }\n\n protected _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<MatOption>(this.options)\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withPageUpDown()\n .withAllowedModifierKeys([\"shiftKey\"])\n .skipPredicate(this._skipPredicate);\n\n this._keyManager.tabOut.subscribe(() => {\n if (this.panelOpen) {\n if (this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n\n this.focus();\n this.close();\n }\n });\n\n this._keyManager.change.subscribe(() => {\n if (this._panelOpen && this._panel()) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n } else if (!this._panelOpen && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n protected _getOverlayWidth(preferredOrigin?: ElementRef<ElementRef> | CdkOverlayOrigin): string | number {\n const refToMeasure =\n preferredOrigin instanceof CdkOverlayOrigin\n ? preferredOrigin.elementRef\n : preferredOrigin || this._elementRef;\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n\n protected _skipPredicate = (option: MatOption) => {\n if (this.panelOpen) {\n return false;\n }\n\n return option.disabled;\n };\n\n protected _positioningSettled() {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n\n protected _scrollOptionIntoView(index: number): void {\n const option = this.options.toArray()[index];\n if (!option) {\n return;\n }\n\n const panel = this._panel()?.nativeElement;\n if (!panel) {\n return;\n }\n\n const element = option._getHostElement();\n if (index === 0) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n panel.scrollTop = 0;\n } else {\n panel.scrollTop = _getOptionScrollPosition(\n element.offsetTop,\n element.offsetHeight,\n panel.scrollTop,\n panel.offsetHeight,\n );\n }\n }\n\n protected _resetOptions(): void {\n this.optionSelectionChanges.pipe(\n takeUntil(this.options.changes),\n takeUntilDestroyed(this._destroyRef)\n ).subscribe((event) => {\n this._onSelect(event.source);\n\n if (event.isUserInput && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n }\n\n protected _onSelect(option: MatOption): void {\n this.value = option.value;\n this._setSelectionByValue(option.value);\n this._selectOptionByValue(option.value);\n\n this.stateChanges.next();\n }\n\n protected _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl && this.ngControl.valueAccessor === this) {\n this._value.set(this.ngControl.value);\n }\n\n const _value = this.value;\n if (_value) {\n this._selectOptionByValue(_value);\n }\n this._setSelectionByValue(_value);\n\n this._highlightCorrectOption();\n this.stateChanges.next();\n });\n }\n\n protected _setSelectionByValue(value: T | null): void {\n this.options.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n\n const correspondingOption = value ? this._selectOptionByValue(value) : null;\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n correspondingOption.select(false);\n this._keyManager.updateActiveItem(correspondingOption);\n } else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n\n protected _selectOptionByValue(value: T): MatOption | undefined {\n const correspondingOption = this.options.find((option: MatOption) => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n if (this._selectionModel.isSelected(option)) {\n return false;\n }\n\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n protected _highlightCorrectOption(): void {\n if (!this._keyManager) {\n return;\n }\n\n if (this.empty) {\n // Find the index of the first *enabled* option. Avoid calling `_keyManager.setActiveItem`\n // because it activates the first option that passes the skip predicate, rather than the\n // first *enabled* option.\n let firstEnabledOptionIndex = -1;\n for (let index = 0; index < this.options.length; index++) {\n const option = this.options.get(index)!;\n if (!option.disabled) {\n firstEnabledOptionIndex = index;\n break;\n }\n }\n\n this._keyManager.setActiveItem(firstEnabledOptionIndex);\n } else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n\n\n protected _handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey =\n keyCode === DOWN_ARROW ||\n keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW ||\n keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (\n (!manager.isTyping() && isOpenKey && !hasModifierKey(event)) ||\n (event.altKey && isArrowKey)\n ) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n }\n }\n\n protected _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n const isTyping = manager.isTyping();\n\n if (isArrowKey && event.altKey) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (\n !isTyping &&\n keyCode === ENTER &&\n manager.activeItem &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n } else {\n manager.onKeydown(event);\n }\n }\n\n protected _assignValue(newValue: T | null): boolean {\n // Always re-assign an array, because it might have been mutated.\n if (newValue !== this.value) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n\n this._value.set(newValue);\n return true;\n }\n return false;\n }\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from \"@angular/cdk/overlay\";\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n viewChild,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatFormFieldControl, MatPrefix } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { Observable } from \"rxjs\";\nimport { NiceTypeaheadSearchIcon } from \"./icons/search/typeahead-search-icon\";\nimport { NiceTypeaheadService } from \"./providers\";\nimport { NiceTypeaheadBase } from \"./typeahead-base\";\n\n@Component({\n selector: \"nice-async-typeahead\",\n imports: [\n CdkOverlayOrigin,\n CdkConnectedOverlay,\n ReactiveFormsModule,\n MatOption,\n MatFormField,\n MatInput,\n MatIconButton,\n MatPrefix,\n NgClass,\n NgTemplateOutlet,\n NiceTypeaheadSearchIcon\n ],\n templateUrl: \"./typeahead.html\",\n styleUrl: \"./typeahead.scss\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: MatFormFieldControl, useExisting: NiceAsyncTypeahead },\n NiceTypeaheadService\n ],\n host: {\n \"role\": \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"class\": \"nice-typeahead\",\n \"[attr.id]\": \"id\",\n \"[attr.aria-controls]\": \"panelOpen ? id + \\\"-panel\\\" : null\",\n \"[attr.aria-expanded]\": \"panelOpen\",\n \"[attr.aria-required]\": \"required.toString()\",\n \"[attr.aria-disabled]\": \"disabled.toString()\",\n \"[attr.aria-invalid]\": \"errorState\",\n \"[class.nice-typeahead-disabled]\": \"disabled\",\n \"[class.nice-typeahead-invalid]\": \"errorState\",\n \"[class.nice-typeahead-required]\": \"required\",\n \"[class.nice-typeahead-empty]\": \"empty\",\n \"(keydown)\": \"_handleKeydown($event)\",\n \"(focus)\": \"onFocusChanged(true)\",\n \"(blur)\": \"onFocusChanged(false)\"\n }\n})\nexport class NiceAsyncTypeahead<T, S extends object = object> extends NiceTypeaheadBase<T> implements OnInit {\n public readonly resource = input.required<string>();\n public readonly searchOptions = input<S | null>(null);\n public readonly autoSelectFirstValue = input(false, { transform: booleanAttribute });\n\n public readonly filteredValues = computed(() => this.service.items());\n\n protected readonly optionsContainer = viewChild<ElementRef<HTMLElement>>(\"optionsContainer\");\n\n private readonly service = inject(NiceTypeaheadService);\n\n protected override _compareWith = (o1: T, o2: T) => {\n if (!(typeof o1 === \"object\" && o1 && typeof o2 === \"object\" && o2)) {\n return o1 === o2;\n }\n\n if (!(\"id\" in o1) || !(\"id\" in o2)) {\n return o1 === o2;\n }\n\n return o1.id === o2.id;\n };\n\n /**\n * Infinite scroll internal state\n */\n private readonly scrollThresholdPercent = 0.99;\n private lastScrollHeight = 0;\n\n constructor() {\n super();\n\n effect(() => this.service.setSearchOptions(this.searchOptions()));\n\n effect(() => this.service.search(this._searchValue()));\n\n effect(() => {\n const container = this.optionsContainer();\n if (!container) {\n return;\n }\n\n container.nativeElement.addEventListener(\"scroll\", this.onScroll.bind(this));\n });\n\n effect(() => {\n this.value = this.service.active();\n });\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n const searchOptions = this.optionsContainer();\n this.service.init(this.resource(), {\n autoSelectFirstValue: this.autoSelectFirstValue(),\n ...(searchOptions && { searchOptions: searchOptions })\n });\n }\n\n public override writeValue(value: T | string | number): void {\n if (typeof value === \"string\" || typeof value === \"number\") {\n this.service.setActiveFromId(value);\n return;\n }\n\n super.writeValue(value);\n this.service.setActive(value);\n }\n\n public override onFocusChanged(isFocused: boolean): void {\n super.onFocusChanged(isFocused);\n\n if (isFocused) {\n this._searchControl.patchValue(\"\");\n }\n }\n\n public override formatLabel(item: T): string {\n return this.service.formatLabel(item);\n }\n\n public override removeActiveValue() {\n super.removeActiveValue();\n\n this.service.setActive(null);\n }\n\n protected override _onSelect(option: MatOption): void {\n this.service.setActive(option.value);\n\n this._setSelectionByValue(option.value);\n this._selectOptionByValue(option.value);\n\n this.stateChanges.next();\n }\n\n public setSearchOptions(options: S | null): void {\n this.service.setSearchOptions(options);\n }\n\n public setActive(active: T | null): void {\n this.service.setActive(active);\n }\n\n public patchSearchOptions(options: S | null): void {\n this.service.patchSearchOptions(options);\n }\n\n public reload(): Observable<void> {\n return this.service.reload();\n }\n\n public reloadActive(): void {\n this.service.reloadActive();\n }\n\n protected onScroll(event: Event): void {\n const target = event.target as HTMLElement;\n const threshold = (this.scrollThresholdPercent * 100 * target.scrollHeight) / 100;\n const current = target.scrollTop + target.clientHeight;\n\n if (this.lastScrollHeight > target.scrollHeight) {\n this.lastScrollHeight = 0;\n }\n\n if (current > threshold && this.lastScrollHeight < target.scrollHeight) {\n this.service.loadMore();\n this.lastScrollHeight = target.scrollHeight;\n }\n }\n}\n","<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n class=\"nice-typeahead\"\n cdk-overlay-origin\n>\n <div class=\"nice-typeahead-value\">\n @if (_empty()) {\n <span class=\"nice-typeahead-placeholder mat-mdc-select-min-line\">{{ _placeholder() }}</span>\n } @else {\n <span class=\"nice-typeahead-value-text\">\n <span class=\"mat-mdc-select-min-line\">\n @if (_value(); as activeValue) {\n {{ formatLabel(activeValue) }}\n }\n </span>\n </span>\n }\n </div>\n\n <div class=\"nice-typeahead-suffix\">\n @if (_empty()) {\n <div class=\"mat-mdc-select-arrow\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5z\"></path>\n </svg>\n </div>\n } @else if (canRemoveValue()) {\n <button class=\"nice-typeahead-remove\" mat-icon-button (click)=\"$event.stopPropagation(); removeActiveValue()\">\n <svg viewBox=\"0 -960 960 960\">\n <path d=\"m291-240-51-51 189-189-189-189 51-51 189 189 189-189 51 51-189 189 189 189-51 51-189-189-189 189Z\"/>\n </svg>\n </button>\n }\n </div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayWidth]=\"_overlayWidth\"\n [cdkConnectedOverlayOrigin]=\"_preferredOverlayOrigin || fallbackOverlayOrigin\"\n (attach)=\"_onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"nice-typeahead-panel nice-typeahead--open nice-typehead-animations-enabled\"\n [ngClass]=\"panelClass()\"\n [attr.id]=\"id + '-panel'\"\n (keydown)=\"_handleKeydown($event)\"\n (scrollend)=\"_handleScrollEnd()\"\n >\n <div class=\"nice-typeahead-search-input\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n #input\n class=\"nice-typeahead__input\"\n matInput\n [formControl]=\"_searchControl\"\n >\n\n <nice-typeahead-search-icon matIconPrefix />\n </mat-form-field>\n </div>\n\n <div #optionsContainer class=\"nice-typeahead-options\" role=\"presentation\">\n @for (item of filteredValues(); track item) {\n <mat-option [value]=\"item\">\n @if (optionTemplate(); as optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n {{ formatLabel(item) }}\n }\n </mat-option>\n } @empty {\n <mat-option disabled>\n <span class=\"nice-typeahead__no-items\">\n {{ noItemsFoundLabel() }}\n </span>\n </mat-option>\n }\n </div>\n </div>\n</ng-template>\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from \"@angular/cdk/overlay\";\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatFormFieldControl, MatPrefix } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { NiceTypeaheadSearchIcon } from \"./icons/search/typeahead-search-icon\";\nimport { NiceTypeaheadBase } from \"./typeahead-base\";\n\nexport type SearchFunction<T> = (search: string, item: T) => boolean;\n\n@Component({\n selector: \"nice-typeahead\",\n imports: [\n CdkOverlayOrigin,\n CdkConnectedOverlay,\n ReactiveFormsModule,\n MatOption,\n MatFormField,\n MatInput,\n MatIconButton,\n MatPrefix,\n NgClass,\n NgTemplateOutlet,\n NiceTypeaheadSearchIcon\n ],\n templateUrl: \"./typeahead.html\",\n styleUrl: \"./typeahead.scss\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: MatFormFieldControl, useExisting: NiceTypeahead }],\n host: {\n \"role\": \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"class\": \"nice-typeahead\",\n \"[attr.id]\": \"id\",\n \"[attr.aria-controls]\": \"panelOpen ? id + \\\"-panel\\\" : null\",\n \"[attr.aria-expanded]\": \"panelOpen\",\n \"[attr.aria-required]\": \"required.toString()\",\n \"[attr.aria-disabled]\": \"disabled.toString()\",\n \"[attr.aria-invalid]\": \"errorState\",\n \"[class.nice-typeahead-disabled]\": \"disabled\",\n \"[class.nice-typeahead-invalid]\": \"errorState\",\n \"[class.nice-typeahead-required]\": \"required\",\n \"[class.nice-typeahead-empty]\": \"empty\",\n \"(keydown)\": \"_handleKeydown($event)\",\n \"(focus)\": \"onFocusChanged(true)\",\n \"(blur)\": \"onFocusChanged(false)\"\n }\n})\nexport class NiceTypeahead<T> extends NiceTypeaheadBase<T> {\n public readonly values = input.required<T[]>();\n public readonly searchFn = input<SearchFunction<T>>();\n\n public readonly filteredValues = computed(() => this.filterValuesFromSearch(this._searchValue(), this.values()));\n\n public override onFocusChanged(isFocused: boolean): void {\n super.onFocusChanged(isFocused);\n\n if (isFocused) {\n this._searchControl.patchValue(\"\");\n }\n }\n\n public filterValuesFromSearch(searchValue: string, values: T[]): T[] {\n if (!searchValue) {\n return values;\n }\n\n const _searchValue = searchValue.toLowerCase();\n const fn = this.searchFn();\n if (fn) {\n return values.filter((v) => fn(_searchValue, v));\n }\n\n return values.filter((v) => {\n if (typeof v === \"string\") {\n return v.toLowerCase().includes(_searchValue);\n }\n\n const property = this.labelProperty();\n if (!property) {\n return false;\n }\n\n if (typeof v === \"object\" && v && property in v) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return v[property].toString().toLowerCase().includes(_searchValue);\n }\n\n return false;\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recursyve-ngx-material-components-typeahead.mjs","sources":["../../../src/material-components/typeahead/providers/async-typeahead.provider.ts","../../../src/material-components/typeahead/constants.ts","../../../src/material-components/typeahead/providers/async-typeahead.service.ts","../../../src/material-components/typeahead/provider.ts","../../../src/material-components/typeahead/icons/search/typeahead-search-icon.ts","../../../src/material-components/typeahead/icons/search/typeahead-search-icon.svg","../../../src/material-components/typeahead/typeahead-base.ts","../../../src/material-components/typeahead/async-typeahead.ts","../../../src/material-components/typeahead/typeahead.html","../../../src/material-components/typeahead/typeahead.ts","../../../src/material-components/typeahead/recursyve-ngx-material-components-typeahead.ts"],"sourcesContent":["import { Observable } from \"rxjs\";\n\nexport type NiceAsyncTypeaheadSearchResult<T> = {\n items: T[];\n nextPage: number | null;\n}\n\nexport abstract class NiceAsyncTypeaheadResourceProvider<T, ID = number, Options = object> {\n public abstract resource: string;\n\n public abstract search(\n searchQuery: string,\n page: number,\n options?: Options\n ): Observable<NiceAsyncTypeaheadSearchResult<T>>;\n\n public abstract getById(id: ID, options?: Options): Observable<T>;\n\n public abstract format(item: T): string;\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER = new InjectionToken(\"nice_async_typeahead_provider\");\n","import { computed, DestroyRef, inject, Injectable, signal } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { catchError, defer, EMPTY, finalize, map, Observable, Subject, switchMap, tap } from \"rxjs\";\nimport { NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER } from \"../constants\";\nimport { NiceAsyncTypeaheadResourceProvider } from \"./async-typeahead.provider\";\n\nexport type NiceTypeaheadAutoSelectMode = \"first_result\" | \"single_result\" | \"none\";\n\nexport type AsyncTypeaheadRequests = {\n page: number;\n searchQuery?: string;\n onFinish: Subject<void> | null;\n};\n\nexport type FetchActiveRequest = {\n id: number | string;\n};\n\nexport type NiceTypeaheadInitOptions = {\n autoSelectMode?: NiceTypeaheadAutoSelectMode;\n searchOptions?: object;\n};\n\n@Injectable()\nexport class NiceTypeaheadService<T extends object> {\n private readonly resources = inject<NiceAsyncTypeaheadResourceProvider<unknown>[]>(\n NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER, { optional: true }\n ) ?? [];\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly fetchResources$ = new Subject<AsyncTypeaheadRequests>();\n private readonly fetchActive$ = new Subject<FetchActiveRequest>();\n private resourceProvider: NiceAsyncTypeaheadResourceProvider<T, string | number> | null = null;\n\n private readonly _items = signal<T[]>([]);\n private readonly _active = signal<T | null>(null);\n private readonly _searchOptions = signal<object | null>(null);\n private readonly _request = signal<AsyncTypeaheadRequests | null>(null);\n private readonly _nextRequest = signal<AsyncTypeaheadRequests | null>(null);\n\n private readonly _preloaded = signal(false);\n private readonly _autoSelectMode = signal<NiceTypeaheadAutoSelectMode>(\"none\");\n private readonly _loading = signal(true);\n\n public readonly items = this._items.asReadonly();\n public readonly active = this._active.asReadonly();\n public readonly loading = this._loading.asReadonly();\n public readonly isLastPage = computed(() => !this._nextRequest());\n\n public init(resource: string, options?: NiceTypeaheadInitOptions): void {\n this.fetchResources$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(\n switchMap((request) => this.fetchResources(request))\n ).subscribe();\n\n this.fetchActive$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(\n switchMap((request) => this.fetchActive(request))\n ).subscribe();\n\n const provider = this.resources.find((resources) => resources.resource === resource);\n if (!provider) {\n throw new Error(\"No provider found for resource \" + resource);\n }\n\n this.resourceProvider = provider as NiceAsyncTypeaheadResourceProvider<T>;\n\n if (options?.autoSelectMode) {\n this._autoSelectMode.set(options.autoSelectMode);\n }\n\n if (options?.searchOptions) {\n this._searchOptions.set(options.searchOptions);\n }\n }\n\n public autoSelect(items: T[]): void {\n if (this._autoSelectMode() === \"first_result\" && !this._preloaded()) {\n this._preloaded.set(true);\n this._active.set(items[0]);\n }\n \n if (this._autoSelectMode() === \"single_result\" && items.length === 1) {\n this._preloaded.set(true);\n this._active.set(items[0]);\n }\n }\n\n public setSearchOptions(options: object | null): void {\n this._searchOptions.set(options);\n }\n\n public patchSearchOptions(options: object | null): void {\n const currentOptions = this._searchOptions();\n this._searchOptions.set({ ...currentOptions, ...options });\n }\n\n public setActive(active: T | null): void {\n this._active.set(active);\n }\n\n public setActiveFromId(id: number | string): void {\n this.fetchActive$.next({ id });\n }\n\n public reload(): Observable<void> {\n const onFinish = new Subject<void>();\n this.fetchResources$.next({\n page: 0,\n searchQuery: this._request()?.searchQuery ?? \"\",\n onFinish\n });\n return onFinish.asObservable();\n }\n\n public reloadActive(): void {\n const active = this._active();\n if (!active || !(\"id\" in active)) {\n return;\n }\n\n if (!(typeof active.id === \"number\" || typeof active.id === \"string\")) {\n return;\n }\n\n this.setActiveFromId(active.id);\n }\n\n public setItems(items: T[]): void {\n this._items.set(items);\n }\n\n public search(searchQuery: string): Observable<void> {\n const onFinish = new Subject<void>();\n this.fetchResources$.next({ searchQuery, page: 0, onFinish });\n return onFinish.asObservable();\n }\n\n public loadMore(): Observable<void> {\n const nextRequest = this._nextRequest();\n if (!nextRequest || this._loading()) {\n return EMPTY;\n }\n\n const onFinish = new Subject<void>();\n this.fetchResources$.next({ ...nextRequest, onFinish });\n return onFinish.asObservable();\n }\n\n public fetchActive(request: FetchActiveRequest): Observable<void> {\n return defer(() => {\n if (!this.resourceProvider) {\n return EMPTY;\n }\n\n this._loading.set(true);\n\n const localItem = this._items().find((item) => \"id\" in item && item.id === request.id);\n if (localItem) {\n this._loading.set(false);\n this._items.set([localItem]);\n this._active.set(localItem);\n return EMPTY;\n }\n\n return this.resourceProvider.getById(request.id)\n }).pipe(\n map((item) => {\n this._items.set([item]);\n this._active.set(item);\n }),\n catchError(() => EMPTY),\n finalize(() => {\n this._loading.set(false);\n })\n );\n }\n\n public fetchResources(request: AsyncTypeaheadRequests): Observable<void> {\n return defer(() => {\n if (!this.resourceProvider) {\n const error = new Error(\"Resource provider not initialized\");\n if (request.onFinish) {\n request.onFinish.error(error);\n request.onFinish.complete();\n }\n\n return EMPTY;\n }\n\n this._loading.set(true);\n this._request.set(request);\n\n return this.resourceProvider.search(request.searchQuery ?? \"\", request.page, this._searchOptions() ?? {});\n }).pipe(\n map((result) => {\n if (request.page === 0) {\n this._items.set(result.items as T[]);\n } else {\n this._items.set([\n ...this._items(),\n ...(result.items as T[])\n ]);\n }\n\n if (result.nextPage) {\n this._nextRequest.set({\n ...request,\n page: result.nextPage\n });\n } else {\n this._nextRequest.set(null);\n }\n }),\n tap({\n next: () => {\n if (request.onFinish) {\n request.onFinish.next();\n request.onFinish.complete();\n }\n },\n error: (error) => {\n if (request.onFinish) {\n request.onFinish.error(error);\n request.onFinish.complete();\n }\n },\n finalize: () => {\n if (request.onFinish && !request.onFinish.closed) {\n request.onFinish.complete();\n }\n }\n }),\n catchError(() => EMPTY),\n finalize(() => {\n this._loading.set(false);\n })\n );\n }\n\n public formatLabel(item: T): string {\n if (!this.resourceProvider) {\n return \"\";\n }\n\n return this.resourceProvider.format(item);\n }\n}\n","import { Provider, Type } from \"@angular/core\";\nimport { NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER } from \"./constants\";\nimport { NiceAsyncTypeaheadResourceProvider } from \"./providers/async-typeahead.provider\";\n\nexport function provideAsyncTypeaheadResources(\n providers: Type<NiceAsyncTypeaheadResourceProvider<unknown, unknown>>[]\n): Provider[] {\n return providers.map((provider) => ({\n provide: NICE_ASYNC_TYPEAHEAD_RESOURCES_PROVIDER,\n useClass: provider,\n multi: true\n }));\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-typeahead-search-icon\",\n templateUrl: \"typeahead-search-icon.svg\"\n})\nexport class NiceTypeaheadSearchIcon {}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M1.4720451262 13.356970375A9.063 9.063 0 1 0 18.154024235 6.267298379a9.063 9.063 0 1 0 -16.6819791088 7.089671996Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path>\n <path d=\"m16.221 16.22 7.029 7.03\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path>\n</svg>\n","import { ActiveDescendantKeyManager } from \"@angular/cdk/a11y\";\nimport { SelectionModel } from \"@angular/cdk/collections\";\nimport { DOWN_ARROW, ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from \"@angular/cdk/keycodes\";\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from \"@angular/cdk/overlay\";\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n computed,\n DestroyRef,\n Directive, DoCheck,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit, output,\n QueryList,\n signal,\n TemplateRef,\n viewChild,\n ViewChildren\n} from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { ControlValueAccessor, FormBuilder, FormGroupDirective, NgControl, NgForm, Validators } from \"@angular/forms\";\nimport {\n _ErrorStateTracker,\n _getOptionScrollPosition, ErrorStateMatcher,\n MatOption,\n MatOptionSelectionChange\n} from \"@angular/material/core\";\nimport { MAT_FORM_FIELD, MatFormField, MatFormFieldControl } from \"@angular/material/form-field\";\nimport {\n debounceTime,\n defer,\n distinctUntilChanged,\n merge,\n Observable,\n startWith,\n Subject,\n switchMap,\n take,\n takeUntil\n} from \"rxjs\";\n\n/**\n * Implementation of the same panel and overlay logic as the official Angular MatSelect.\n * This used some of the logic from MatSelect to make this component look and feel like a MatSelect.\n */\n@Directive()\nexport class NiceTypeaheadBase<T>\n implements\n MatFormFieldControl<T>,\n ControlValueAccessor,\n OnInit,\n AfterViewInit,\n DoCheck,\n OnDestroy\n{\n @ViewChildren(MatOption)\n private readonly options!: QueryList<MatOption>;\n\n public readonly noItemsFoundLabel = input<string>(\"No items found\");\n public readonly labelProperty = input<string>();\n public readonly formatLabelFn = input<((value: T) => string)>();\n public readonly optionTemplate = input<TemplateRef<{ $implicit: T }>>();\n public readonly panelClass = input<string | string[]>([]);\n public readonly canRemoveValue = input<boolean>(true);\n\n public readonly selected = output<T | null>();\n\n private static nextId = 0;\n\n protected readonly _input = viewChild<ElementRef<HTMLInputElement>>(\"input\");\n protected readonly _panel = viewChild<ElementRef<HTMLElement>>(\"panel\");\n protected readonly _overlayDir = viewChild(CdkConnectedOverlay);\n\n protected _errorStateTracker?: _ErrorStateTracker;\n\n protected _required: boolean | null = null;\n protected _focused = false;\n protected _disabled = false;\n protected _panelOpen = false;\n protected _compareWith = (o1: T, o2: T) => o1 === o2;\n\n protected readonly _value = signal<T | null>(null);\n protected readonly _empty = computed(() => !this._value());\n protected readonly _placeholder = signal(\"\");\n protected readonly _searchValue = signal(\"\");\n\n protected readonly _elementRef = inject(ElementRef);\n protected readonly _destroyRef = inject(DestroyRef);\n protected readonly _changeDetectorRef = inject(ChangeDetectorRef);\n protected readonly _fb = inject(FormBuilder);\n\n protected readonly _searchControl = this._fb.nonNullable.control(\"\");\n protected readonly _initialized = new Subject<void>();\n\n protected readonly _parentFormField = inject<MatFormField>(MAT_FORM_FIELD, { optional: true });\n\n public readonly id: string = `nice-typeahead-${NiceTypeaheadBase.nextId++}`;\n public readonly controlType: string = \"nice-typeahead\";\n public readonly stateChanges = new Subject<void>();\n public readonly optionSelectionChanges: Observable<MatOptionSelectionChange> = defer(() => {\n const options = this.options;\n\n if (options) {\n return options.changes.pipe(\n startWith(options),\n switchMap(() => merge(...options.map(option => option.onSelectionChange))),\n );\n }\n\n return this._initialized.pipe(switchMap(() => this.optionSelectionChanges));\n });\n\n public readonly ngControl = inject(NgControl, { optional: true, self: true });\n\n public readonly _panelDoneAnimatingStream = new Subject<string>();\n\n public _keyManager!: ActiveDescendantKeyManager<MatOption>;\n public _preferredOverlayOrigin?: CdkOverlayOrigin | ElementRef;\n public _overlayWidth!: string | number;\n public _selectionModel!: SelectionModel<MatOption>;\n public _onChange?: (value: T | null) => void;\n public _onTouched?: () => void;\n\n public get placeholder(): string {\n return this._placeholder();\n }\n\n public set placeholder(placeholder) {\n this._placeholder.set(placeholder);\n this.stateChanges.next();\n }\n\n public get focused(): boolean {\n return this._focused;\n }\n\n public set focused(isFocused: boolean) {\n this._focused = isFocused;\n this.stateChanges.next();\n }\n\n public get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n\n public set required(isRequired: boolean) {\n this._required = isRequired;\n this.stateChanges.next();\n }\n\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = value;\n this.stateChanges.next();\n }\n\n public get value(): T | null {\n return this._value();\n }\n\n public set value(value: T | null) {\n const hasAssigned = this._assignValue(value);\n\n if (hasAssigned) {\n this._onChange?.(value);\n this.selected.emit(value);\n }\n }\n\n public get empty(): boolean {\n return !this._value();\n }\n\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n public get errorState(): boolean {\n return this._errorStateTracker?.errorState ?? false;\n }\n\n public set errorState(value: boolean) {\n if (!this._errorStateTracker) {\n return;\n }\n\n this._errorStateTracker.errorState = value;\n }\n\n public get panelOpen(): boolean {\n return this._panelOpen;\n }\n\n constructor() {\n effect(() => this._input()?.nativeElement.focus());\n\n if (this.ngControl) {\n // Note: we provide the value accessor through here, instead of\n // the `providers` to avoid running into a circular import.\n this.ngControl.valueAccessor = this;\n }\n\n const defaultErrorStateMatcher = inject(ErrorStateMatcher);\n const ngControl = inject(NgControl, { optional: true, self: true });\n const parentFormGroup = inject(FormGroupDirective, { optional: true });\n const parentForm = inject(NgForm, { optional: true });\n this._errorStateTracker = new _ErrorStateTracker(\n defaultErrorStateMatcher,\n ngControl,\n parentFormGroup,\n parentForm,\n this.stateChanges,\n );\n }\n\n public ngOnInit(): void {\n this._selectionModel = new SelectionModel<MatOption>();\n\n this._searchControl.valueChanges.pipe(\n takeUntilDestroyed(this._destroyRef),\n debounceTime(250),\n distinctUntilChanged()\n ).subscribe((value) => this._searchValue.set(value));\n }\n\n public ngAfterViewInit(): void {\n this._initialized.next();\n this._initialized.complete();\n\n this._initKeyManager();\n\n this.options.changes.pipe(startWith(null), takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n public onContainerClick(event: MouseEvent): void {\n if (this.disabled) {\n return;\n }\n\n this.stateChanges.next();\n if ((event.target as Element).tagName.toLowerCase() !== \"input\") {\n this.onFocusChanged(true);\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n const controlElement = this._elementRef.nativeElement.querySelector(\".nice-typeahead\");\n if (!controlElement) {\n return;\n }\n\n controlElement.setAttribute(\"aria-describedby\", ids.join(\" \"));\n }\n\n public onFocusChanged(isFocused: boolean): void {\n this.focused = isFocused;\n this.stateChanges.next();\n\n if (isFocused) {\n this.open();\n }\n }\n\n public writeValue(value: T): void {\n this._assignValue(value);\n }\n\n public registerOnChange(fn: (value: T | null) => void) {\n this._onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n this.stateChanges.next();\n }\n\n public formatLabel(item: T): string {\n if (typeof item === \"string\") {\n return item;\n }\n\n const fn = this.formatLabelFn();\n if (fn) {\n return fn(item);\n }\n\n const property = this.labelProperty();\n if (!property) {\n return item?.toString() ?? \"\";\n }\n\n if (!(typeof item === \"object\") || item === null) {\n return item?.toString() ?? \"\";\n }\n\n if (property in item) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return item[property];\n }\n\n return item.toString();\n }\n\n public removeActiveValue(): void {\n this.value = null;\n this._selectionModel.clear();\n this._keyManager.setActiveItem(-1);\n this._changeDetectorRef.markForCheck();\n }\n\n public updateErrorState(): void {\n this._errorStateTracker?.updateErrorState();\n }\n\n public open(): void {\n if (!this._canOpen()) {\n return;\n }\n\n // It's important that we read this as late as possible, because doing so earlier will\n // return a different element since it's based on queries in the form field which may\n // not have run yet. Also this needs to be assigned before we measure the overlay width.\n if (this._parentFormField) {\n this._preferredOverlayOrigin = this._parentFormField.getConnectedOverlayOrigin();\n }\n\n this._overlayWidth = this._getOverlayWidth(this._preferredOverlayOrigin);\n this._panelOpen = true;\n this._keyManager.withHorizontalOrientation(null);\n this._changeDetectorRef.markForCheck();\n\n // Required for the MDC form field to pick up when the overlay has been opened.\n this.stateChanges.next();\n }\n\n public close(): void {\n if (!this._panelOpen) {\n return;\n }\n\n this._focused = false;\n this._panelOpen = false;\n this._changeDetectorRef.markForCheck();\n\n this._searchValue.set(\"\");\n\n this._onTouched?.();\n\n // Required for the MDC form field to pick up when the overlay has been closed.\n this.stateChanges.next();\n }\n\n public focus(options?: FocusOptions): void {\n this._elementRef.nativeElement.focus(options);\n }\n\n public _handleKeydown(event: KeyboardEvent): void {\n if (this.disabled) {\n return;\n }\n\n if (this.panelOpen) {\n this._handleOpenKeydown(event);\n } else {\n this._handleClosedKeydown(event);\n }\n }\n\n public _handleScrollEnd(): void {}\n\n protected _canOpen(): boolean {\n return !this._panelOpen && !this.disabled;\n }\n\n protected _onAttached(): void {\n this._overlayDir()?.positionChange.pipe(take(1)).subscribe(() => {\n this._changeDetectorRef.detectChanges();\n this._positioningSettled();\n });\n }\n\n protected _initKeyManager() {\n this._keyManager = new ActiveDescendantKeyManager<MatOption>(this.options)\n .withVerticalOrientation()\n .withHomeAndEnd()\n .withPageUpDown()\n .withAllowedModifierKeys([\"shiftKey\"])\n .skipPredicate(this._skipPredicate);\n\n this._keyManager.tabOut.subscribe(() => {\n if (this.panelOpen) {\n if (this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n\n this.focus();\n this.close();\n }\n });\n\n this._keyManager.change.subscribe(() => {\n if (this._panelOpen && this._panel()) {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n } else if (!this._panelOpen && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n protected _getOverlayWidth(preferredOrigin?: ElementRef<ElementRef> | CdkOverlayOrigin): string | number {\n const refToMeasure =\n preferredOrigin instanceof CdkOverlayOrigin\n ? preferredOrigin.elementRef\n : preferredOrigin || this._elementRef;\n return refToMeasure.nativeElement.getBoundingClientRect().width;\n }\n\n protected _skipPredicate = (option: MatOption) => {\n if (this.panelOpen) {\n return false;\n }\n\n return option.disabled;\n };\n\n protected _positioningSettled() {\n this._scrollOptionIntoView(this._keyManager.activeItemIndex || 0);\n }\n\n protected _scrollOptionIntoView(index: number): void {\n const option = this.options.toArray()[index];\n if (!option) {\n return;\n }\n\n const panel = this._panel()?.nativeElement;\n if (!panel) {\n return;\n }\n\n const element = option._getHostElement();\n if (index === 0) {\n // If we've got one group label before the option and we're at the top option,\n // scroll the list to the top. This is better UX than scrolling the list to the\n // top of the option, because it allows the user to read the top group's label.\n panel.scrollTop = 0;\n } else {\n panel.scrollTop = _getOptionScrollPosition(\n element.offsetTop,\n element.offsetHeight,\n panel.scrollTop,\n panel.offsetHeight,\n );\n }\n }\n\n protected _resetOptions(): void {\n this.optionSelectionChanges.pipe(\n takeUntil(this.options.changes),\n takeUntilDestroyed(this._destroyRef)\n ).subscribe((event) => {\n this._onSelect(event.source);\n\n if (event.isUserInput && this._panelOpen) {\n this.close();\n this.focus();\n }\n });\n }\n\n protected _onSelect(option: MatOption): void {\n this.value = option.value;\n this._setSelectionByValue(option.value);\n this._selectOptionByValue(option.value);\n\n this.stateChanges.next();\n }\n\n protected _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n if (this.ngControl && this.ngControl.valueAccessor === this) {\n this._value.set(this.ngControl.value);\n }\n\n const _value = this.value;\n if (_value) {\n this._selectOptionByValue(_value);\n }\n this._setSelectionByValue(_value);\n\n this._highlightCorrectOption();\n this.stateChanges.next();\n });\n }\n\n protected _setSelectionByValue(value: T | null): void {\n this.options.forEach(option => option.setInactiveStyles());\n this._selectionModel.clear();\n\n const correspondingOption = value ? this._selectOptionByValue(value) : null;\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n correspondingOption.select(false);\n this._keyManager.updateActiveItem(correspondingOption);\n } else if (!this.panelOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManager.updateActiveItem(-1);\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n\n protected _selectOptionByValue(value: T): MatOption | undefined {\n const correspondingOption = this.options.find((option: MatOption) => {\n // Skip options that are already in the model. This allows us to handle cases\n // where the same primitive value is selected multiple times.\n if (this._selectionModel.isSelected(option)) {\n return false;\n }\n\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n protected _highlightCorrectOption(): void {\n if (!this._keyManager) {\n return;\n }\n\n if (this.empty) {\n // Find the index of the first *enabled* option. Avoid calling `_keyManager.setActiveItem`\n // because it activates the first option that passes the skip predicate, rather than the\n // first *enabled* option.\n let firstEnabledOptionIndex = -1;\n for (let index = 0; index < this.options.length; index++) {\n const option = this.options.get(index)!;\n if (!option.disabled) {\n firstEnabledOptionIndex = index;\n break;\n }\n }\n\n this._keyManager.setActiveItem(firstEnabledOptionIndex);\n } else {\n this._keyManager.setActiveItem(this._selectionModel.selected[0]);\n }\n }\n\n\n protected _handleClosedKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n const isArrowKey =\n keyCode === DOWN_ARROW ||\n keyCode === UP_ARROW ||\n keyCode === LEFT_ARROW ||\n keyCode === RIGHT_ARROW;\n const isOpenKey = keyCode === ENTER || keyCode === SPACE;\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (\n (!manager.isTyping() && isOpenKey && !hasModifierKey(event)) ||\n (event.altKey && isArrowKey)\n ) {\n event.preventDefault(); // prevents the page from scrolling down when pressing space\n this.open();\n }\n }\n\n protected _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const keyCode = event.keyCode;\n const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;\n const isTyping = manager.isTyping();\n\n if (isArrowKey && event.altKey) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this.close();\n // Don't do anything in this case if the user is typing,\n // because the typing sequence can include the space key.\n } else if (\n !isTyping &&\n keyCode === ENTER &&\n manager.activeItem &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n } else {\n manager.onKeydown(event);\n }\n }\n\n protected _assignValue(newValue: T | null): boolean {\n // Always re-assign an array, because it might have been mutated.\n if (newValue !== this.value) {\n if (this.options) {\n this._setSelectionByValue(newValue);\n }\n\n this._value.set(newValue);\n return true;\n }\n return false;\n }\n}\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from \"@angular/cdk/overlay\";\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatFormFieldControl, MatPrefix } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { Observable } from \"rxjs\";\nimport { NiceTypeaheadSearchIcon } from \"./icons/search/typeahead-search-icon\";\nimport { NiceTypeaheadAutoSelectMode, NiceTypeaheadService } from \"./providers\";\nimport { NiceTypeaheadBase } from \"./typeahead-base\";\n\n@Component({\n selector: \"nice-async-typeahead\",\n imports: [\n CdkOverlayOrigin,\n CdkConnectedOverlay,\n ReactiveFormsModule,\n MatOption,\n MatFormField,\n MatInput,\n MatIconButton,\n MatPrefix,\n NgClass,\n NgTemplateOutlet,\n NiceTypeaheadSearchIcon\n ],\n templateUrl: \"./typeahead.html\",\n styleUrl: \"./typeahead.scss\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: MatFormFieldControl, useExisting: NiceAsyncTypeahead },\n NiceTypeaheadService\n ],\n host: {\n \"role\": \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"class\": \"nice-typeahead\",\n \"[attr.id]\": \"id\",\n \"[attr.aria-controls]\": \"panelOpen ? id + \\\"-panel\\\" : null\",\n \"[attr.aria-expanded]\": \"panelOpen\",\n \"[attr.aria-required]\": \"required.toString()\",\n \"[attr.aria-disabled]\": \"disabled.toString()\",\n \"[attr.aria-invalid]\": \"errorState\",\n \"[class.nice-typeahead-disabled]\": \"disabled\",\n \"[class.nice-typeahead-invalid]\": \"errorState\",\n \"[class.nice-typeahead-required]\": \"required\",\n \"[class.nice-typeahead-empty]\": \"empty\",\n \"(keydown)\": \"_handleKeydown($event)\",\n \"(focus)\": \"onFocusChanged(true)\",\n \"(blur)\": \"onFocusChanged(false)\"\n }\n})\nexport class NiceAsyncTypeahead<T, S extends object = object> extends NiceTypeaheadBase<T> implements OnInit {\n public readonly resource = input.required<string>();\n public readonly searchOptions = input<S | null>(null);\n public readonly autoSelectMode = input<NiceTypeaheadAutoSelectMode>(\"none\");\n\n /**\n * @deprecated Use autoSelectMode instead\n */\n public readonly autoSelectFirstValue = input(false, { transform: booleanAttribute });\n\n public readonly filteredValues = computed(() => this.service.items());\n\n protected readonly optionsContainer = viewChild<ElementRef<HTMLElement>>(\"optionsContainer\");\n\n private readonly prefilled = signal<boolean>(false);\n\n private readonly service = inject(NiceTypeaheadService);\n\n protected override _compareWith = (o1: T, o2: T) => {\n if (!(typeof o1 === \"object\" && o1 && typeof o2 === \"object\" && o2)) {\n return o1 === o2;\n }\n\n if (!(\"id\" in o1) || !(\"id\" in o2)) {\n return o1 === o2;\n }\n\n return o1.id === o2.id;\n };\n\n /**\n * Infinite scroll internal state\n */\n private readonly scrollThresholdPercent = 0.99;\n private lastScrollHeight = 0;\n\n constructor() {\n super();\n\n effect(() => this.service.setSearchOptions(this.searchOptions()));\n\n effect(() => this.service.search(this._searchValue()));\n\n effect(() => {\n const container = this.optionsContainer();\n if (!container) {\n return;\n }\n\n container.nativeElement.addEventListener(\"scroll\", this.onScroll.bind(this));\n });\n\n effect(() => {\n this.value = this.service.active();\n });\n\n effect(() => {\n if (this.focused) {\n return;\n }\n\n const items = this.service.items();\n untracked(() => this.service.autoSelect(items));\n });\n }\n\n public override ngOnInit(): void {\n super.ngOnInit();\n\n const autoSelectMode = this.autoSelectMode() ?? (this.autoSelectFirstValue() ? \"first_result\" : \"none\");\n const searchOptions = this.optionsContainer();\n this.service.init(this.resource(), {\n autoSelectMode: autoSelectMode,\n ...(searchOptions && { searchOptions: searchOptions })\n });\n }\n\n public override writeValue(value: T | string | number): void {\n if (typeof value === \"string\" || typeof value === \"number\") {\n this.service.setActiveFromId(value);\n return;\n }\n\n super.writeValue(value);\n this.service.setActive(value);\n }\n\n public override onFocusChanged(isFocused: boolean): void {\n super.onFocusChanged(isFocused);\n\n if (!isFocused) {\n return;\n }\n\n if (this.prefilled()) {\n this.prefilled.set(false);\n return;\n }\n\n this._searchControl.patchValue(\"\");\n }\n\n public override formatLabel(item: T): string {\n return this.service.formatLabel(item);\n }\n\n public override removeActiveValue() {\n super.removeActiveValue();\n\n this.service.setActive(null);\n }\n\n protected override _onSelect(option: MatOption): void {\n this.service.setActive(option.value);\n\n this._setSelectionByValue(option.value);\n this._selectOptionByValue(option.value);\n\n this.stateChanges.next();\n }\n\n public prefill(searchQuery: string): void {\n this.prefilled.set(true);\n this._searchControl.patchValue(searchQuery);\n }\n\n public search(searchQuery: string): void {\n this.service.search(searchQuery);\n }\n\n public setSearchOptions(options: S | null): void {\n this.service.setSearchOptions(options);\n }\n\n public setActive(active: T | null): void {\n this.service.setActive(active);\n }\n\n public patchSearchOptions(options: S | null): void {\n this.service.patchSearchOptions(options);\n }\n\n public reload(): Observable<void> {\n return this.service.reload();\n }\n\n public reloadActive(): void {\n this.service.reloadActive();\n }\n\n protected onScroll(event: Event): void {\n const target = event.target as HTMLElement;\n const threshold = (this.scrollThresholdPercent * 100 * target.scrollHeight) / 100;\n const current = target.scrollTop + target.clientHeight;\n\n if (this.lastScrollHeight > target.scrollHeight) {\n this.lastScrollHeight = 0;\n }\n\n if (current > threshold && this.lastScrollHeight < target.scrollHeight) {\n this.service.loadMore();\n this.lastScrollHeight = target.scrollHeight;\n }\n }\n}\n","<div\n #fallbackOverlayOrigin=\"cdkOverlayOrigin\"\n class=\"nice-typeahead\"\n cdk-overlay-origin\n>\n <div class=\"nice-typeahead-value\">\n @if (_empty()) {\n <span class=\"nice-typeahead-placeholder mat-mdc-select-min-line\">{{ _placeholder() }}</span>\n } @else {\n <span class=\"nice-typeahead-value-text\">\n <span class=\"mat-mdc-select-min-line\">\n @if (_value(); as activeValue) {\n {{ formatLabel(activeValue) }}\n }\n </span>\n </span>\n }\n </div>\n\n <div class=\"nice-typeahead-suffix\">\n @if (_empty()) {\n <div class=\"mat-mdc-select-arrow\">\n <svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M7 10l5 5 5-5z\"></path>\n </svg>\n </div>\n } @else if (canRemoveValue()) {\n <button class=\"nice-typeahead-remove\" mat-icon-button (click)=\"$event.stopPropagation(); removeActiveValue()\">\n <svg viewBox=\"0 -960 960 960\">\n <path d=\"m291-240-51-51 189-189-189-189 51-51 189 189 189-189 51 51-189 189 189 189-51 51-189-189-189 189Z\"/>\n </svg>\n </button>\n }\n </div>\n</div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayLockPosition\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayWidth]=\"_overlayWidth\"\n [cdkConnectedOverlayOrigin]=\"_preferredOverlayOrigin || fallbackOverlayOrigin\"\n (attach)=\"_onAttached()\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n #panel\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"nice-typeahead-panel nice-typeahead--open nice-typehead-animations-enabled\"\n [ngClass]=\"panelClass()\"\n [attr.id]=\"id + '-panel'\"\n (keydown)=\"_handleKeydown($event)\"\n (scrollend)=\"_handleScrollEnd()\"\n >\n <div class=\"nice-typeahead-search-input\">\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <input\n #input\n class=\"nice-typeahead__input\"\n matInput\n [formControl]=\"_searchControl\"\n >\n\n <nice-typeahead-search-icon matIconPrefix />\n </mat-form-field>\n </div>\n\n <div #optionsContainer class=\"nice-typeahead-options\" role=\"presentation\">\n @for (item of filteredValues(); track item) {\n <mat-option [value]=\"item\">\n @if (optionTemplate(); as optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n {{ formatLabel(item) }}\n }\n </mat-option>\n } @empty {\n <mat-option disabled>\n <span class=\"nice-typeahead__no-items\">\n {{ noItemsFoundLabel() }}\n </span>\n </mat-option>\n }\n </div>\n </div>\n</ng-template>\n","import { CdkConnectedOverlay, CdkOverlayOrigin } from \"@angular/cdk/overlay\";\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormField, MatFormFieldControl, MatPrefix } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { NiceTypeaheadSearchIcon } from \"./icons/search/typeahead-search-icon\";\nimport { NiceTypeaheadBase } from \"./typeahead-base\";\n\nexport type SearchFunction<T> = (search: string, item: T) => boolean;\n\n@Component({\n selector: \"nice-typeahead\",\n imports: [\n CdkOverlayOrigin,\n CdkConnectedOverlay,\n ReactiveFormsModule,\n MatOption,\n MatFormField,\n MatInput,\n MatIconButton,\n MatPrefix,\n NgClass,\n NgTemplateOutlet,\n NiceTypeaheadSearchIcon\n ],\n templateUrl: \"./typeahead.html\",\n styleUrl: \"./typeahead.scss\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: MatFormFieldControl, useExisting: NiceTypeahead }],\n host: {\n \"role\": \"combobox\",\n \"aria-haspopup\": \"listbox\",\n \"class\": \"nice-typeahead\",\n \"[attr.id]\": \"id\",\n \"[attr.aria-controls]\": \"panelOpen ? id + \\\"-panel\\\" : null\",\n \"[attr.aria-expanded]\": \"panelOpen\",\n \"[attr.aria-required]\": \"required.toString()\",\n \"[attr.aria-disabled]\": \"disabled.toString()\",\n \"[attr.aria-invalid]\": \"errorState\",\n \"[class.nice-typeahead-disabled]\": \"disabled\",\n \"[class.nice-typeahead-invalid]\": \"errorState\",\n \"[class.nice-typeahead-required]\": \"required\",\n \"[class.nice-typeahead-empty]\": \"empty\",\n \"(keydown)\": \"_handleKeydown($event)\",\n \"(focus)\": \"onFocusChanged(true)\",\n \"(blur)\": \"onFocusChanged(false)\"\n }\n})\nexport class NiceTypeahead<T> extends NiceTypeaheadBase<T> {\n public readonly values = input.required<T[]>();\n public readonly searchFn = input<SearchFunction<T>>();\n\n public readonly filteredValues = computed(() => this.filterValuesFromSearch(this._searchValue(), this.values()));\n\n public override onFocusChanged(isFocused: boolean): void {\n super.onFocusChanged(isFocused);\n\n if (isFocused) {\n this._searchControl.patchValue(\"\");\n }\n }\n\n public filterValuesFromSearch(searchValue: string, values: T[]): T[] {\n if (!searchValue) {\n return values;\n }\n\n const _searchValue = searchValue.toLowerCase();\n const fn = this.searchFn();\n if (fn) {\n return values.filter((v) => fn(_searchValue, v));\n }\n\n return values.filter((v) => {\n if (typeof v === \"string\") {\n return v.toLowerCase().includes(_searchValue);\n }\n\n const property = this.labelProperty();\n if (!property) {\n return false;\n }\n\n if (typeof v === \"object\" && v && property in v) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return v[property].toString().toLowerCase().includes(_searchValue);\n }\n\n return false;\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recursyve/ngx-material-components",
3
- "version": "19.0.0-beta.21",
3
+ "version": "19.0.0-beta.22",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0"
@@ -1,14 +1,20 @@
1
1
  import { ElementRef, OnInit } from "@angular/core";
2
2
  import { MatOption } from "@angular/material/core";
3
3
  import { Observable } from "rxjs";
4
+ import { NiceTypeaheadAutoSelectMode } from "./providers";
4
5
  import { NiceTypeaheadBase } from "./typeahead-base";
5
6
  import * as i0 from "@angular/core";
6
7
  export declare class NiceAsyncTypeahead<T, S extends object = object> extends NiceTypeaheadBase<T> implements OnInit {
7
8
  readonly resource: import("@angular/core").InputSignal<string>;
8
9
  readonly searchOptions: import("@angular/core").InputSignal<S | null>;
10
+ readonly autoSelectMode: import("@angular/core").InputSignal<NiceTypeaheadAutoSelectMode>;
11
+ /**
12
+ * @deprecated Use autoSelectMode instead
13
+ */
9
14
  readonly autoSelectFirstValue: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
10
15
  readonly filteredValues: import("@angular/core").Signal<any[]>;
11
16
  protected readonly optionsContainer: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
17
+ private readonly prefilled;
12
18
  private readonly service;
13
19
  protected _compareWith: (o1: T, o2: T) => boolean;
14
20
  /**
@@ -23,6 +29,8 @@ export declare class NiceAsyncTypeahead<T, S extends object = object> extends Ni
23
29
  formatLabel(item: T): string;
24
30
  removeActiveValue(): void;
25
31
  protected _onSelect(option: MatOption): void;
32
+ prefill(searchQuery: string): void;
33
+ search(searchQuery: string): void;
26
34
  setSearchOptions(options: S | null): void;
27
35
  setActive(active: T | null): void;
28
36
  patchSearchOptions(options: S | null): void;
@@ -30,5 +38,5 @@ export declare class NiceAsyncTypeahead<T, S extends object = object> extends Ni
30
38
  reloadActive(): void;
31
39
  protected onScroll(event: Event): void;
32
40
  static ɵfac: i0.ɵɵFactoryDeclaration<NiceAsyncTypeahead<any, any>, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<NiceAsyncTypeahead<any, any>, "nice-async-typeahead", never, { "resource": { "alias": "resource"; "required": true; "isSignal": true; }; "searchOptions": { "alias": "searchOptions"; "required": false; "isSignal": true; }; "autoSelectFirstValue": { "alias": "autoSelectFirstValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
41
+ static ɵcmp: i0.ɵɵComponentDeclaration<NiceAsyncTypeahead<any, any>, "nice-async-typeahead", never, { "resource": { "alias": "resource"; "required": true; "isSignal": true; }; "searchOptions": { "alias": "searchOptions"; "required": false; "isSignal": true; }; "autoSelectMode": { "alias": "autoSelectMode"; "required": false; "isSignal": true; }; "autoSelectFirstValue": { "alias": "autoSelectFirstValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
34
42
  }
@@ -1,5 +1,6 @@
1
1
  import { Observable, Subject } from "rxjs";
2
2
  import * as i0 from "@angular/core";
3
+ export type NiceTypeaheadAutoSelectMode = "first_result" | "single_result" | "none";
3
4
  export type AsyncTypeaheadRequests = {
4
5
  page: number;
5
6
  searchQuery?: string;
@@ -9,7 +10,7 @@ export type FetchActiveRequest = {
9
10
  id: number | string;
10
11
  };
11
12
  export type NiceTypeaheadInitOptions = {
12
- autoSelectFirstValue?: boolean;
13
+ autoSelectMode?: NiceTypeaheadAutoSelectMode;
13
14
  searchOptions?: object;
14
15
  };
15
16
  export declare class NiceTypeaheadService<T extends object> {
@@ -24,13 +25,14 @@ export declare class NiceTypeaheadService<T extends object> {
24
25
  private readonly _request;
25
26
  private readonly _nextRequest;
26
27
  private readonly _preloaded;
27
- private readonly _autoSelectFirstValue;
28
+ private readonly _autoSelectMode;
28
29
  private readonly _loading;
29
30
  readonly items: import("@angular/core").Signal<T[]>;
30
31
  readonly active: import("@angular/core").Signal<T | null>;
31
32
  readonly loading: import("@angular/core").Signal<boolean>;
32
33
  readonly isLastPage: import("@angular/core").Signal<boolean>;
33
34
  init(resource: string, options?: NiceTypeaheadInitOptions): void;
35
+ autoSelect(items: T[]): void;
34
36
  setSearchOptions(options: object | null): void;
35
37
  patchSearchOptions(options: object | null): void;
36
38
  setActive(active: T | null): void;