@recursyve/ngx-material-components 19.0.0-beta.13 → 19.0.0-beta.15

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,4 +1,8 @@
1
1
  export type NiceDropzoneImageConfig = {
2
+ minSize?: {
3
+ width: number;
4
+ height: number;
5
+ };
2
6
  maxSize?: {
3
7
  width: number;
4
8
  height: number;
@@ -1,5 +1,6 @@
1
1
  export * from "./dropzone.directive";
2
2
  export * from "./dropzone";
3
3
  export * from "./config";
4
+ export * from "./models";
4
5
  export * from "./options";
5
6
  export * from "./provider";
@@ -20,7 +20,8 @@ class NiceChipListDirective {
20
20
  this.ngControl.valueAccessor = this;
21
21
  }
22
22
  effect(() => {
23
- untracked(() => this.updateTypeaheadSearchOptions(this.values()));
23
+ const values = this.values();
24
+ untracked(() => this.updateTypeaheadSearchOptions(values));
24
25
  });
25
26
  }
26
27
  onKeyDown(event) {
@@ -79,8 +80,8 @@ class NiceChipListDirective {
79
80
  if (!value) {
80
81
  return;
81
82
  }
82
- this.asyncTypeahead?.removeActiveValue();
83
83
  this.addValue(value);
84
+ this.asyncTypeahead?.removeActiveValue();
84
85
  });
85
86
  }
86
87
  addValue(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"recursyve-ngx-material-components-chip-list.mjs","sources":["../../../src/material-components/chip-list/chip-list.ts","../../../src/material-components/chip-list/icons/clear/chip-list-items-clear-icon.ts","../../../src/material-components/chip-list/icons/clear/chip-list-items-clear-icon.svg","../../../src/material-components/chip-list/items/chip-list-items.ts","../../../src/material-components/chip-list/items/chip-list-items.html","../../../src/material-components/chip-list/recursyve-ngx-material-components-chip-list.ts"],"sourcesContent":["import {\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n OnInit,\n signal,\n untracked\n} from \"@angular/core\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\nimport { NiceAsyncTypeahead } from \"@recursyve/ngx-material-components/typeahead\";\nimport { NiceChipListItems } from \"./items/chip-list-items\";\n\n@Directive({\n selector: \"input[niceChipList], nice-async-typeahead[niceChipList]\"\n})\nexport class NiceChipListDirective<T> implements ControlValueAccessor, OnInit {\n public readonly withItemList = input.required<NiceChipListItems<T>>();\n public readonly reloadOnSelected = input<boolean>(true);\n public readonly separatorKeyboardCodes = input<string[]>([\"Enter\"]);\n\n private readonly elementRef = inject(ElementRef);\n private readonly injector = inject(Injector);\n private readonly asyncTypeahead = inject<NiceAsyncTypeahead<T>>(NiceAsyncTypeahead, { optional: true });\n private readonly ngControl = inject<NgControl>(NgControl, { optional: true });\n\n private readonly values = signal<T[]>([]);\n\n private propagateChanges?: (_: T[]) => void;\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n untracked(() => this.updateTypeaheadSearchOptions(this.values()));\n });\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n public onKeyDown(event: KeyboardEvent): void {\n if (this.asyncTypeahead) {\n return;\n }\n\n if (!this.separatorKeyboardCodes().includes(event.code)) {\n return;\n }\n\n if (!this.elementRef.nativeElement.validity.valid) {\n return;\n }\n\n this.addValue(this.elementRef.nativeElement.value);\n this.elementRef.nativeElement.value = \"\";\n event.preventDefault();\n }\n\n public ngOnInit(): void {\n this.setupAsyncTypeahead();\n\n const parentElement = this.elementRef.nativeElement.parentElement;\n if (parentElement.classList.contains(\"mat-mdc-form-field-infix\")) {\n parentElement.style.alignItems = \"flex-start\";\n parentElement.style.flexDirection = \"column-reverse\";\n }\n\n const withItemList = this.withItemList();\n withItemList.setItemsReactivity(toObservable(this.values, { injector: this.injector }));\n withItemList.removeChip.subscribe((index) => {\n const values = [...this.values()];\n values.splice(index, 1);\n\n this.propagateChanges?.(values);\n this.values.set(values);\n });\n\n if (this.asyncTypeahead) {\n withItemList.setFormatLabel((item) => this.asyncTypeahead!.formatLabel(item));\n }\n }\n\n public writeValue(obj: T[] | null): void {\n if (!obj) {\n this.values.set([]);\n } else if (Array.isArray(obj)) {\n this.values.set([...obj]);\n }\n }\n\n public registerOnChange(fn: (_: T[]) => void): void {\n this.propagateChanges = fn;\n }\n\n public registerOnTouched(): void {\n return;\n }\n\n private setupAsyncTypeahead(): void {\n if (!this.asyncTypeahead) {\n return;\n }\n\n this.asyncTypeahead.selected\n .subscribe((value) => {\n if (!value) {\n return;\n }\n\n this.asyncTypeahead?.removeActiveValue();\n this.addValue(value);\n });\n }\n\n private addValue(value: T): void {\n const values = [...this.values()];\n if (values.includes(value)) {\n return;\n }\n\n values.push(value);\n this.propagateChanges?.(values);\n this.values.set(values);\n }\n\n private updateTypeaheadSearchOptions(ignore: T[]): void {\n if (!this.asyncTypeahead) {\n return;\n }\n\n const searchOptions = this.asyncTypeahead.searchOptions();\n this.asyncTypeahead.setSearchOptions({ ...(searchOptions ?? {}), ignore });\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-chip-list-items-clear-icon\",\n templateUrl: \"chip-list-items-clear-icon.svg\"\n})\nexport class NiceChipListItemsClearIcon {}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0Zm5.49 16.07a1 1 0 0 1 -1.41 1.42l-3.9 -3.9a0.25 0.25 0 0 0 -0.36 0l-3.9 3.9a1 1 0 1 1 -1.41 -1.42l3.9 -3.89a0.25 0.25 0 0 0 0 -0.36l-3.9 -3.9a1 1 0 0 1 1.41 -1.41l3.9 3.9a0.25 0.25 0 0 0 0.36 0l3.9 -3.9a1 1 0 0 1 1.41 1.41l-3.9 3.9a0.25 0.25 0 0 0 0 0.36Z\" fill=\"currentColor\" stroke-width=\"1\"></path>\n</svg>\n","import { ChangeDetectionStrategy, Component, inject, Injector, output, Signal } from \"@angular/core\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\nimport { MatChipRemove, MatChipRow, MatChipSet } from \"@angular/material/chips\";\nimport { Observable } from \"rxjs\";\nimport { NiceChipListItemsClearIcon } from \"../icons/clear/chip-list-items-clear-icon\";\n\n@Component({\n selector: \"nice-chip-list-items\",\n templateUrl: \"./chip-list-items.html\",\n styleUrls: [\"./chip-list-items.scss\"],\n imports: [\n MatChipSet,\n MatChipRemove,\n MatChipRow,\n NiceChipListItemsClearIcon\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceChipListItems<T> {\n public readonly removeChip = output<number>();\n\n protected readonly injector = inject(Injector);\n\n public items?: Signal<T[]>;\n public formatLabelFn?: (value: T) => string;\n\n public setItemsReactivity(items$: Observable<T[]>): void {\n this.items = toSignal(items$, { injector: this.injector, initialValue: [] });\n }\n\n public setFormatLabel(fn: (value: T) => string): void {\n this.formatLabelFn = fn;\n }\n\n public remove(index: number): void {\n this.removeChip.emit(index);\n }\n}\n","@if (items) {\n <mat-chip-set>\n @for (item of items(); track item) {\n <mat-chip-row [highlighted]=\"true\" (removed)=\"remove($index)\">\n @if (formatLabelFn) {\n {{ formatLabelFn(item) }}\n } @else {\n {{ item }}\n }\n\n <button matChipRemove>\n <nice-chip-list-items-clear-icon />\n </button>\n </mat-chip-row>\n }\n </mat-chip-set>\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-chip-list.mjs","sources":["../../../src/material-components/chip-list/chip-list.ts","../../../src/material-components/chip-list/icons/clear/chip-list-items-clear-icon.ts","../../../src/material-components/chip-list/icons/clear/chip-list-items-clear-icon.svg","../../../src/material-components/chip-list/items/chip-list-items.ts","../../../src/material-components/chip-list/items/chip-list-items.html","../../../src/material-components/chip-list/recursyve-ngx-material-components-chip-list.ts"],"sourcesContent":["import {\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n OnInit,\n signal,\n untracked\n} from \"@angular/core\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\nimport { NiceAsyncTypeahead } from \"@recursyve/ngx-material-components/typeahead\";\nimport { NiceChipListItems } from \"./items/chip-list-items\";\n\n@Directive({\n selector: \"input[niceChipList], nice-async-typeahead[niceChipList]\"\n})\nexport class NiceChipListDirective<T> implements ControlValueAccessor, OnInit {\n public readonly withItemList = input.required<NiceChipListItems<T>>();\n public readonly reloadOnSelected = input<boolean>(true);\n public readonly separatorKeyboardCodes = input<string[]>([\"Enter\"]);\n\n private readonly elementRef = inject(ElementRef);\n private readonly injector = inject(Injector);\n private readonly asyncTypeahead = inject<NiceAsyncTypeahead<T>>(NiceAsyncTypeahead, { optional: true });\n private readonly ngControl = inject<NgControl>(NgControl, { optional: true });\n\n private readonly values = signal<T[]>([]);\n\n private propagateChanges?: (_: T[]) => void;\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n effect(() => {\n const values = this.values();\n untracked(() => this.updateTypeaheadSearchOptions(values));\n });\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n public onKeyDown(event: KeyboardEvent): void {\n if (this.asyncTypeahead) {\n return;\n }\n\n if (!this.separatorKeyboardCodes().includes(event.code)) {\n return;\n }\n\n if (!this.elementRef.nativeElement.validity.valid) {\n return;\n }\n\n this.addValue(this.elementRef.nativeElement.value);\n this.elementRef.nativeElement.value = \"\";\n event.preventDefault();\n }\n\n public ngOnInit(): void {\n this.setupAsyncTypeahead();\n\n const parentElement = this.elementRef.nativeElement.parentElement;\n if (parentElement.classList.contains(\"mat-mdc-form-field-infix\")) {\n parentElement.style.alignItems = \"flex-start\";\n parentElement.style.flexDirection = \"column-reverse\";\n }\n\n const withItemList = this.withItemList();\n withItemList.setItemsReactivity(toObservable(this.values, { injector: this.injector }));\n withItemList.removeChip.subscribe((index) => {\n const values = [...this.values()];\n values.splice(index, 1);\n\n this.propagateChanges?.(values);\n this.values.set(values);\n });\n\n if (this.asyncTypeahead) {\n withItemList.setFormatLabel((item) => this.asyncTypeahead!.formatLabel(item));\n }\n }\n\n public writeValue(obj: T[] | null): void {\n if (!obj) {\n this.values.set([]);\n } else if (Array.isArray(obj)) {\n this.values.set([...obj]);\n }\n }\n\n public registerOnChange(fn: (_: T[]) => void): void {\n this.propagateChanges = fn;\n }\n\n public registerOnTouched(): void {\n return;\n }\n\n private setupAsyncTypeahead(): void {\n if (!this.asyncTypeahead) {\n return;\n }\n\n this.asyncTypeahead.selected\n .subscribe((value) => {\n if (!value) {\n return;\n }\n\n this.addValue(value);\n this.asyncTypeahead?.removeActiveValue();\n });\n }\n\n private addValue(value: T): void {\n const values = [...this.values()];\n if (values.includes(value)) {\n return;\n }\n\n values.push(value);\n this.propagateChanges?.(values);\n this.values.set(values);\n }\n\n private updateTypeaheadSearchOptions(ignore: T[]): void {\n if (!this.asyncTypeahead) {\n return;\n }\n\n const searchOptions = this.asyncTypeahead.searchOptions();\n this.asyncTypeahead.setSearchOptions({ ...(searchOptions ?? {}), ignore });\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-chip-list-items-clear-icon\",\n templateUrl: \"chip-list-items-clear-icon.svg\"\n})\nexport class NiceChipListItemsClearIcon {}\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0Zm5.49 16.07a1 1 0 0 1 -1.41 1.42l-3.9 -3.9a0.25 0.25 0 0 0 -0.36 0l-3.9 3.9a1 1 0 1 1 -1.41 -1.42l3.9 -3.89a0.25 0.25 0 0 0 0 -0.36l-3.9 -3.9a1 1 0 0 1 1.41 -1.41l3.9 3.9a0.25 0.25 0 0 0 0.36 0l3.9 -3.9a1 1 0 0 1 1.41 1.41l-3.9 3.9a0.25 0.25 0 0 0 0 0.36Z\" fill=\"currentColor\" stroke-width=\"1\"></path>\n</svg>\n","import { ChangeDetectionStrategy, Component, inject, Injector, output, Signal } from \"@angular/core\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\nimport { MatChipRemove, MatChipRow, MatChipSet } from \"@angular/material/chips\";\nimport { Observable } from \"rxjs\";\nimport { NiceChipListItemsClearIcon } from \"../icons/clear/chip-list-items-clear-icon\";\n\n@Component({\n selector: \"nice-chip-list-items\",\n templateUrl: \"./chip-list-items.html\",\n styleUrls: [\"./chip-list-items.scss\"],\n imports: [\n MatChipSet,\n MatChipRemove,\n MatChipRow,\n NiceChipListItemsClearIcon\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceChipListItems<T> {\n public readonly removeChip = output<number>();\n\n protected readonly injector = inject(Injector);\n\n public items?: Signal<T[]>;\n public formatLabelFn?: (value: T) => string;\n\n public setItemsReactivity(items$: Observable<T[]>): void {\n this.items = toSignal(items$, { injector: this.injector, initialValue: [] });\n }\n\n public setFormatLabel(fn: (value: T) => string): void {\n this.formatLabelFn = fn;\n }\n\n public remove(index: number): void {\n this.removeChip.emit(index);\n }\n}\n","@if (items) {\n <mat-chip-set>\n @for (item of items(); track item) {\n <mat-chip-row [highlighted]=\"true\" (removed)=\"remove($index)\">\n @if (formatLabelFn) {\n {{ formatLabelFn(item) }}\n } @else {\n {{ item }}\n }\n\n <button matChipRemove>\n <nice-chip-list-items-clear-icon />\n </button>\n </mat-chip-row>\n }\n </mat-chip-set>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -350,5 +350,5 @@ function provideDropzone(options) {
350
350
  * Generated bundle index. Do not edit.
351
351
  */
352
352
 
353
- export { NiceDropzone, NiceDropzoneDirective, niceDropzoneModes, provideDropzone };
353
+ export { NiceDropzone, NiceDropzoneDirective, isLocalFile, isRemoteFile, niceDropzoneModes, provideDropzone };
354
354
  //# sourceMappingURL=recursyve-ngx-material-components-dropzone.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"recursyve-ngx-material-components-dropzone.mjs","sources":["../../../src/material-components/dropzone/dropzone.directive.ts","../../../src/material-components/dropzone/constant.ts","../../../src/material-components/dropzone/icons/file/file-icon.component.ts","../../../src/material-components/dropzone/icons/file/file-icon.template.svg","../../../src/material-components/dropzone/icons/image/image-icon.component.ts","../../../src/material-components/dropzone/icons/image/image-icon.template.svg","../../../src/material-components/dropzone/models.ts","../../../src/material-components/dropzone/pipes/file-size.pipe.ts","../../../src/material-components/dropzone/icons/delete/delete-icon.component.ts","../../../src/material-components/dropzone/icons/delete/delete-icon.template.svg","../../../src/material-components/dropzone/preview/file-preview.ts","../../../src/material-components/dropzone/preview/file-preview.html","../../../src/material-components/dropzone/dropzone.ts","../../../src/material-components/dropzone/dropzone.html","../../../src/material-components/dropzone/provider.ts","../../../src/material-components/dropzone/index.ts","../../../src/material-components/dropzone/recursyve-ngx-material-components-dropzone.ts"],"sourcesContent":["import { Directive, EventEmitter, HostBinding, HostListener, output, Output } from \"@angular/core\";\n\n@Directive({\n selector: \"[niceDropzone]\",\n standalone: true\n})\nexport class NiceDropzoneDirective {\n @HostBinding(\"class.file-over\")\n public fileOver!: boolean;\n\n @Output()\n public filesDropped = new EventEmitter<FileList>();\n\n public files = output()\n\n // Dragover listener\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = true;\n }\n\n // Dragleave listener\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n }\n\n // Drop listener\n @HostListener(\"drop\", [\"$event\"])\n public ondrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n\n if (!event.dataTransfer) {\n return;\n }\n\n const files = event.dataTransfer.files;\n if (files.length > 0) {\n this.filesDropped.emit(files);\n }\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_DROPZONE_TRANSLATION_KEYS = new InjectionToken(\"nice_dropzone_translation_keys\");\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-dropzone-file-icon\",\n templateUrl: \"./file-icon.template.svg\"\n})\nexport class NiceDropzoneFileIcon {}\n","<svg fill=\"none\" viewBox=\"-1.25 -1.25 40 40\" height=\"40\" width=\"40\">\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5.859375 36.328125h25.78125c1.294375 0 2.34375 -1.049375 2.34375 -2.34375V12.6890625c-0.00015625 -0.621171875 -0.246875 -1.2168750000000002 -0.6859375 -1.65625l-9.175 -9.175c-0.439375 -0.43909062499999996 -1.03515625 -0.6858046875 -1.65625 -0.6859375H5.859375c-1.2765624999999998 0 -2.34375 1.0671875000000002 -2.34375 2.34375v30.46875c0 1.2765624999999998 1.0671875000000002 2.34375 2.34375 2.34375Z\" stroke-width=\"2.5\"></path>\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M33.984375 12.890625h-9.375c-0.6215625 0 -1.2178125 -0.24693750000000003 -1.65734375 -0.68646875S22.265625 11.16846875 22.265625 10.546875v-9.375\" stroke-width=\"2.5\"></path>\n</svg>","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-dropzone-image-icon\",\n templateUrl: \"./image-icon.template.svg\"\n})\nexport class NiceDropzoneImageIcon {}\n","<svg width=\"40\" height=\"43\" viewBox=\"0 0 40 43\" fill=\"none\">\n <path d=\"M29.333 1.5H2.66634C1.92996 1.5 1.33301 2.09695 1.33301 2.83333V33.0556C1.33301 33.7919 1.92996 34.3889 2.66634 34.3889H29.333C30.0694 34.3889 30.6663 33.7919 30.6663 33.0556V2.83333C30.6663 2.09695 30.0694 1.5 29.333 1.5Z\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M38.6667 11.2778V40.1667C38.6621 40.5189 38.5201 40.8554 38.2711 41.1044C38.022 41.3535 37.6855 41.4954 37.3333 41.5001H12\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M30.6663 27.2778H1.33301\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7.55566 27.2778L16.8001 14.0689C17.0316 13.7366 17.3357 13.4614 17.6895 13.2642C18.0432 13.0669 18.4372 12.9528 18.8415 12.9306C19.2459 12.9083 19.6501 12.9784 20.0233 13.1356C20.3965 13.2928 20.7291 13.533 20.9957 13.8378L30.6668 25.0556\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9.33268 6.8335C9.8601 6.8335 10.3757 6.98989 10.8142 7.28291C11.2527 7.57593 11.5945 7.9924 11.7964 8.47967C11.9982 8.96694 12.051 9.50312 11.9481 10.0204C11.8452 10.5377 11.5912 11.0128 11.2183 11.3858C10.8454 11.7587 10.3702 12.0127 9.85292 12.1156C9.33564 12.2185 8.79946 12.1657 8.31219 11.9638C7.82492 11.762 7.40845 11.4202 7.11543 10.9817C6.82241 10.5432 6.66602 10.0276 6.66602 9.50016C6.66602 8.79292 6.94697 8.11464 7.44706 7.61454C7.94716 7.11445 8.62544 6.8335 9.33268 6.8335\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n","export type NiceFileDimensions = {\n width: number;\n height: number;\n ratio: number;\n};\n\nexport type NiceLocalFile = {\n file: File;\n name: string;\n size?: number;\n dimensions?: NiceFileDimensions;\n};\n\nexport type NiceRemoteFile = {\n id: string | number;\n name: string;\n url: string;\n size?: number;\n};\n\nexport type NiceSelectedFiles = NiceLocalFile | NiceRemoteFile;\n\nexport function isLocalFile(file: NiceSelectedFiles): file is NiceLocalFile {\n return \"file\" in file;\n}\n\nexport function isRemoteFile(file: NiceSelectedFiles): file is NiceRemoteFile {\n return \"id\" in file;\n}\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\nimport { NiceTranslater, NICE_COMPONENTS_TRANSLATER } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"../constant\";\nimport { NiceDropzoneTranslationKeyConfig } from \"../config\";\n\n@Pipe({\n name: \"niceFileSize\"\n})\nexport class FileSizePipe implements PipeTransform {\n private readonly units = [\"B\", \"KB\", \"MB\", \"GB\"] as const;\n\n private readonly translater = inject<NiceTranslater>(NICE_COMPONENTS_TRANSLATER);\n private readonly translationKeys = inject<NiceDropzoneTranslationKeyConfig>(NICE_DROPZONE_TRANSLATION_KEYS);\n\n public transform(bytes: number | null | undefined, precision = 0): string {\n const defaultUnit = this.translater(this.translationKeys.size.units.B);\n\n if (!bytes) {\n return `0 ${defaultUnit}`;\n }\n\n const unitIndex = Math.floor(Math.log(bytes) / Math.log(1000));\n const boundedUnitIndex = Math.min(unitIndex, this.units.length - 1);\n\n const size = bytes / Math.pow(1000, boundedUnitIndex);\n\n const unit = this.translater(this.translationKeys.size.units[this.units[boundedUnitIndex]]);\n return `${size.toFixed(precision)} ${unit}`;\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-dropzone-delete-icon\",\n templateUrl: \"./delete-icon.template.svg\"\n})\nexport class NiceDropzoneDeleteIcon {}\n","<svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0Zm5.49 16.07a1 1 0 0 1 -1.41 1.42l-3.9 -3.9a0.25 0.25 0 0 0 -0.36 0l-3.9 3.9a1 1 0 1 1 -1.41 -1.42l3.9 -3.89a0.25 0.25 0 0 0 0 -0.36l-3.9 -3.9a1 1 0 0 1 1.41 -1.41l3.9 3.9a0.25 0.25 0 0 0 0.36 0l3.9 -3.9a1 1 0 0 1 1.41 1.41l-3.9 3.9a0.25 0.25 0 0 0 0 0.36Z\" fill=\"currentColor\" stroke-width=\"1\"></path>\n</svg>","import { Component, computed, inject, input, output } from \"@angular/core\";\nimport { NiceTranslatePipe } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"../constant\";\nimport { NiceDropzoneModes } from \"../dropzone\";\nimport { NiceDropzoneTranslationKeyConfig } from \"../config\";\nimport { isLocalFile, NiceFileDimensions, NiceSelectedFiles } from \"../models\";\nimport { FileSizePipe } from \"../pipes/file-size.pipe\";\nimport { NiceDropzoneDeleteIcon } from \"../icons/delete/delete-icon.component\";\nimport { NiceDropzoneFileIcon } from \"../icons/file/file-icon.component\";\n\n@Component({\n selector: \"nice-dropzone-file-preview\",\n templateUrl: \"./file-preview.html\",\n styleUrls: [\"./file-preview.scss\"],\n imports: [NiceDropzoneDeleteIcon, NiceTranslatePipe, FileSizePipe, NiceDropzoneFileIcon],\n host: {\n style: \"flex: 1 1 auto;\"\n }\n})\nexport class NiceDropzoneFilePreview {\n public readonly file = input.required<NiceSelectedFiles>();\n public readonly mode = input.required<NiceDropzoneModes>();\n\n protected readonly clickDelete = output<void>();\n\n protected readonly isImage = computed(() => this.mode() === \"image\");\n protected readonly imageDimensions = computed<NiceFileDimensions | null>(() => {\n const file = this.file();\n if (isLocalFile(file)) {\n return file.dimensions ?? null;\n }\n\n return null;\n });\n protected readonly imageUrl = computed<string>(() => {\n const file = this.file();\n if (isLocalFile(file)) {\n return URL.createObjectURL(file.file);\n }\n\n return file.url;\n });\n\n protected _translationKeys = inject<NiceDropzoneTranslationKeyConfig>(NICE_DROPZONE_TRANSLATION_KEYS);\n}\n","<div class=\"nice-dropzone-preview\">\n @if (isImage()) {\n <img class=\"nice-dropzone-preview-image\" alt=\"\" draggable=\"false\" [src]=\"imageUrl()\" />\n } @else {\n <div class=\"nice-dropzone-preview-file\">\n <nice-dropzone-file-icon />\n </div>\n }\n\n <div class=\"nice-dropzone-preview-file-info\">\n <span class=\"mat-body-medium\">{{ file().name }}</span>\n\n @if (imageDimensions(); as dimension) {\n <span class=\"mat-label-medium\">\n {{ `${dimension.width}x${dimension.height}` }} {{ _translationKeys.ratio.pixels | niceTranslate }}\n </span>\n }\n\n @if (file().size; as size) {\n <span class=\"mat-label-medium\">{{ size | niceFileSize }}</span>\n }\n </div>\n\n <div class=\"nice-dropzone-preview-actions\">\n <button class=\"nice-dropzone-preview-actions-delete\" (click)=\"$event.stopPropagation(); clickDelete.emit()\">\n <nice-dropzone-delete-icon />\n </button>\n </div>\n</div>\n","import { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n Component,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnDestroy,\n signal,\n viewChild,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { MatRippleLoader } from \"@angular/material/core\";\nimport { NiceTranslatePipe } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"./constant\";\nimport {\n NiceDropzoneFileSizeConfig,\n NiceDropzoneImageConfig,\n NiceDropzoneTranslationKeyConfig\n} from \"./config\";\nimport { NiceDropzoneDirective } from \"./dropzone.directive\";\nimport { NiceDropzoneFileIcon } from \"./icons/file/file-icon.component\";\nimport { NiceDropzoneImageIcon } from \"./icons/image/image-icon.component\";\nimport { NiceFileDimensions, NiceSelectedFiles } from \"./models\";\nimport { NiceDropzoneFilePreview } from \"./preview/file-preview\";\n\nexport const niceDropzoneModes = [\"image\", \"file\", \"all\"] as const;\nexport type NiceDropzoneModes = (typeof niceDropzoneModes)[number];\n\n@Component({\n selector: \"nice-dropzone\",\n templateUrl: \"dropzone.html\",\n styleUrl: \"dropzone.scss\",\n imports: [\n NiceDropzoneDirective,\n NiceDropzoneImageIcon,\n NiceDropzoneFileIcon,\n NiceDropzoneFilePreview,\n NiceTranslatePipe\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceDropzone),\n multi: true\n }\n ]\n})\nexport class NiceDropzone implements OnDestroy, ControlValueAccessor {\n public readonly mode = input<NiceDropzoneModes>(\"all\");\n public readonly multiple = input(false, { transform: coerceBooleanProperty });\n public readonly disabled = input(false, { transform: coerceBooleanProperty });\n public readonly accept = input<string[]>();\n public readonly config = input<NiceDropzoneImageConfig>();\n public readonly maxFileSize = input<NiceDropzoneFileSizeConfig>();\n\n protected readonly _elementRef = viewChild(\"element\", { read: ElementRef });\n protected readonly _inputRef = viewChild<ElementRef<HTMLInputElement>>(\"fileInput\");\n\n /**\n * Handles the lazy creation of the MatButton ripple.\n * Used to improve the initial load time of large applications.\n */\n protected readonly _rippleLoader: MatRippleLoader = inject(MatRippleLoader);\n protected readonly _translationKeys = inject<NiceDropzoneTranslationKeyConfig>(NICE_DROPZONE_TRANSLATION_KEYS);\n\n protected readonly files = signal<NiceSelectedFiles[]>([]);\n\n protected _disabled = false;\n\n private _onChange!: (value: NiceSelectedFiles | NiceSelectedFiles[] | null) => void;\n private _value: NiceSelectedFiles | NiceSelectedFiles[] | null = null;\n\n constructor() {\n effect(() => {\n const elementRef = this._elementRef();\n if (!elementRef) {\n return;\n }\n\n this._rippleLoader.configureRipple(elementRef.nativeElement, { className: \"nice-dropzone-ripple\" });\n });\n\n effect(() => {\n this._disabled = this.disabled();\n });\n }\n\n public ngOnDestroy(): void {\n this._rippleLoader.destroyRipple(this._elementRef()?.nativeElement);\n }\n\n public writeValue(value: NiceSelectedFiles | NiceSelectedFiles[] | null): void {\n this._value = value;\n if (value) {\n this.files.set(Array.isArray(value) ? value : [value]);\n }\n }\n\n public registerOnChange(fn: (value: NiceSelectedFiles | NiceSelectedFiles[] | null) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(): void {\n // Do nothing\n }\n\n public setDisabledState(disabled: boolean): void {\n this._disabled = disabled;\n }\n\n public onFileChanged(event: Event): void {\n const files = (event.target as HTMLInputElement).files;\n if (!files) {\n return;\n }\n\n this.onFilesDropped(files);\n }\n\n public async onFilesDropped(fileList: FileList): Promise<void> {\n if (this.multiple() && !this._value) {\n this._value = [];\n }\n\n const accept = this.accept();\n for (const file of Array.from(fileList)) {\n if (accept && !accept.includes(file.type)) {\n continue;\n }\n\n const isImage = file.type.startsWith(\"image/\");\n const value = {\n file,\n name: file.name,\n size: file.size,\n ...(isImage && { dimensions: await this.getImageDimension(file) })\n } satisfies NiceSelectedFiles;\n if (this.multiple()) {\n (this._value as NiceSelectedFiles[]).push(value);\n } else {\n this._value = value;\n this.propagateChanges(this._value);\n return;\n }\n }\n\n if (this._value) {\n this.propagateChanges(this._value);\n }\n\n this.resetInput();\n }\n\n public onFileDelete(index: number): void {\n if (this.multiple()) {\n const files = [...this.files()];\n files.splice(index, 1);\n this.propagateChanges(files);\n } else {\n this.propagateChanges(null);\n this.resetInput();\n }\n }\n\n protected propagateChanges(value: NiceSelectedFiles | NiceSelectedFiles[] | null): void {\n if (value) {\n this.files.set(Array.isArray(value) ? value : [value]);\n } else {\n this.files.set([]);\n }\n\n this._value = value;\n this._onChange(value);\n }\n\n protected getImageDimension(file: File): Promise<NiceFileDimensions> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const image = new Image();\n image.onload = () => {\n resolve({\n width: image.width,\n height: image.height,\n ratio: image.width / image.height\n });\n };\n image.onerror = reject;\n image.src = reader.result as string;\n };\n\n reader.readAsDataURL(file);\n });\n }\n\n protected resetInput(): void {\n const input = this._inputRef();\n if (!input) {\n return;\n }\n\n input.nativeElement.value = \"\";\n }\n}\n","<div\n class=\"nice-dropzone-container\"\n>\n <div\n #element\n role=\"none\"\n class=\"nice-dropzone\"\n [class.nice-dropzone-disabled]=\"_disabled\"\n [class.nice-dropzone-multiple]=\"multiple()\"\n [class.nice-dropzone-single]=\"!multiple()\"\n [class.nice-dropzone-image]=\"mode() === 'image'\"\n [class.nice-dropzone-file]=\"mode() === 'file'\"\n [class.nice-dropzone-all]=\"mode() === 'all'\"\n [class.nice-dropzone-selected]=\"files().length > 0\"\n\n niceDropzone\n (filesDropped)=\"onFilesDropped($event)\"\n (click)=\"fileInput.click()\"\n (keyup.enter)=\"fileInput.click()\"\n >\n <div class=\"nice-dropzone-ripple\"></div>\n\n @if (multiple() || (!multiple() && !files().length)) {\n <div class=\"nice-dropzone-placeholder\">\n <div class=\"nice-dropzone-icon\">\n @if (mode() === \"image\") {\n <nice-dropzone-image-icon />\n } @else {\n <nice-dropzone-file-icon />\n }\n </div>\n\n <div class=\"nice-dropzone-content\">\n <span class=\"nice-dropzone-content-title\">\n @if (mode() === \"image\") {\n @if (multiple()) {\n {{ _translationKeys.upload.images | niceTranslate }}\n } @else {\n {{ _translationKeys.upload.image | niceTranslate }}\n }\n } @else {\n @if (multiple()) {\n {{ _translationKeys.upload.files | niceTranslate }}\n } @else {\n {{ _translationKeys.upload.file | niceTranslate }}\n }\n }\n </span>\n\n <div class=\"nice-dropzone-content-description\">\n @if (accept()?.length) {\n <span>\n {{ _translationKeys.format.label | niceTranslate }}:&nbsp;\n\n <span>\n {{ accept()?.join(\", \") }}\n </span>\n </span>\n }\n\n @if (mode() === \"image\" && config()?.recommendedSize; as recommendedSize) {\n <span>\n {{ _translationKeys.ratio.label | niceTranslate }}:&nbsp;\n\n <span>{{ recommendedSize.width }}x{{ recommendedSize.height }} {{ _translationKeys.ratio.pixels | niceTranslate }}</span>\n </span>\n }\n\n @if (maxFileSize(); as maxFileSize) {\n <span>\n {{ _translationKeys.size.label | niceTranslate }}:&nbsp;\n\n <span>{{ maxFileSize.size }} {{ _translationKeys.size.units[maxFileSize.unit] | niceTranslate }}</span>\n </span>\n }\n </div>\n </div>\n </div>\n } @else {\n <nice-dropzone-file-preview [file]=\"files()[0]\" [mode]=\"mode()\" (clickDelete)=\"onFileDelete(0)\" />\n }\n </div>\n\n @if (multiple()) {\n <div class=\"nice-dropzone-multiple-files-preview\">\n @for (file of files(); track file) {\n <nice-dropzone-file-preview [file]=\"file\" [mode]=\"mode()\" (clickDelete)=\"onFileDelete($index)\" />\n }\n </div>\n }\n</div>\n\n<input #fileInput style=\"display: none;\" type=\"file\" [accept]=\"accept()\" [multiple]=\"multiple()\" (change)=\"onFileChanged($event)\" />\n","import { Provider } from \"@angular/core\";\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"./constant\";\nimport { NiceDropzoneTranslationKeyConfig } from \"./config\";\nimport { NiceDropzoneOptions } from \"./options\";\n\nconst defaultTranslationKeys: NiceDropzoneTranslationKeyConfig = {\n upload: {\n file: \"components.dropzone.upload.file\",\n files: \"components.dropzone.upload.files\",\n image: \"components.dropzone.upload.image\",\n images: \"components.dropzone.upload.images\"\n },\n format: {\n label: \"components.dropzone.format.label\"\n },\n ratio: {\n label: \"components.dropzone.ratio.label\",\n pixels: \"components.dropzone.ratio.pixels\"\n },\n size: {\n label: \"components.dropzone.size.label\",\n units: {\n B: \"components.dropzone.size.units.B\",\n KB: \"components.dropzone.size.units.KB\",\n MB: \"components.dropzone.size.units.MB\",\n GB: \"components.dropzone.size.units.GB\"\n }\n }\n};\n\nexport function provideDropzone(options?: NiceDropzoneOptions): Provider[] {\n return [\n {\n provide: NICE_DROPZONE_TRANSLATION_KEYS,\n useValue: options?.translationKeys ?? defaultTranslationKeys\n }\n ];\n}\n","/*\n * Public API Surface of dropzone\n */\n\nexport * from \"./dropzone.directive\";\nexport * from \"./dropzone\";\nexport * from \"./config\";\nexport * from \"./options\";\nexport * from \"./provider\";\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-dropzone.mjs","sources":["../../../src/material-components/dropzone/dropzone.directive.ts","../../../src/material-components/dropzone/constant.ts","../../../src/material-components/dropzone/icons/file/file-icon.component.ts","../../../src/material-components/dropzone/icons/file/file-icon.template.svg","../../../src/material-components/dropzone/icons/image/image-icon.component.ts","../../../src/material-components/dropzone/icons/image/image-icon.template.svg","../../../src/material-components/dropzone/models.ts","../../../src/material-components/dropzone/pipes/file-size.pipe.ts","../../../src/material-components/dropzone/icons/delete/delete-icon.component.ts","../../../src/material-components/dropzone/icons/delete/delete-icon.template.svg","../../../src/material-components/dropzone/preview/file-preview.ts","../../../src/material-components/dropzone/preview/file-preview.html","../../../src/material-components/dropzone/dropzone.ts","../../../src/material-components/dropzone/dropzone.html","../../../src/material-components/dropzone/provider.ts","../../../src/material-components/dropzone/index.ts","../../../src/material-components/dropzone/recursyve-ngx-material-components-dropzone.ts"],"sourcesContent":["import { Directive, EventEmitter, HostBinding, HostListener, output, Output } from \"@angular/core\";\n\n@Directive({\n selector: \"[niceDropzone]\",\n standalone: true\n})\nexport class NiceDropzoneDirective {\n @HostBinding(\"class.file-over\")\n public fileOver!: boolean;\n\n @Output()\n public filesDropped = new EventEmitter<FileList>();\n\n public files = output()\n\n // Dragover listener\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = true;\n }\n\n // Dragleave listener\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n }\n\n // Drop listener\n @HostListener(\"drop\", [\"$event\"])\n public ondrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n\n if (!event.dataTransfer) {\n return;\n }\n\n const files = event.dataTransfer.files;\n if (files.length > 0) {\n this.filesDropped.emit(files);\n }\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_DROPZONE_TRANSLATION_KEYS = new InjectionToken(\"nice_dropzone_translation_keys\");\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-dropzone-file-icon\",\n templateUrl: \"./file-icon.template.svg\"\n})\nexport class NiceDropzoneFileIcon {}\n","<svg fill=\"none\" viewBox=\"-1.25 -1.25 40 40\" height=\"40\" width=\"40\">\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M5.859375 36.328125h25.78125c1.294375 0 2.34375 -1.049375 2.34375 -2.34375V12.6890625c-0.00015625 -0.621171875 -0.246875 -1.2168750000000002 -0.6859375 -1.65625l-9.175 -9.175c-0.439375 -0.43909062499999996 -1.03515625 -0.6858046875 -1.65625 -0.6859375H5.859375c-1.2765624999999998 0 -2.34375 1.0671875000000002 -2.34375 2.34375v30.46875c0 1.2765624999999998 1.0671875000000002 2.34375 2.34375 2.34375Z\" stroke-width=\"2.5\"></path>\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M33.984375 12.890625h-9.375c-0.6215625 0 -1.2178125 -0.24693750000000003 -1.65734375 -0.68646875S22.265625 11.16846875 22.265625 10.546875v-9.375\" stroke-width=\"2.5\"></path>\n</svg>","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-dropzone-image-icon\",\n templateUrl: \"./image-icon.template.svg\"\n})\nexport class NiceDropzoneImageIcon {}\n","<svg width=\"40\" height=\"43\" viewBox=\"0 0 40 43\" fill=\"none\">\n <path d=\"M29.333 1.5H2.66634C1.92996 1.5 1.33301 2.09695 1.33301 2.83333V33.0556C1.33301 33.7919 1.92996 34.3889 2.66634 34.3889H29.333C30.0694 34.3889 30.6663 33.7919 30.6663 33.0556V2.83333C30.6663 2.09695 30.0694 1.5 29.333 1.5Z\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M38.6667 11.2778V40.1667C38.6621 40.5189 38.5201 40.8554 38.2711 41.1044C38.022 41.3535 37.6855 41.4954 37.3333 41.5001H12\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M30.6663 27.2778H1.33301\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7.55566 27.2778L16.8001 14.0689C17.0316 13.7366 17.3357 13.4614 17.6895 13.2642C18.0432 13.0669 18.4372 12.9528 18.8415 12.9306C19.2459 12.9083 19.6501 12.9784 20.0233 13.1356C20.3965 13.2928 20.7291 13.533 20.9957 13.8378L30.6668 25.0556\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M9.33268 6.8335C9.8601 6.8335 10.3757 6.98989 10.8142 7.28291C11.2527 7.57593 11.5945 7.9924 11.7964 8.47967C11.9982 8.96694 12.051 9.50312 11.9481 10.0204C11.8452 10.5377 11.5912 11.0128 11.2183 11.3858C10.8454 11.7587 10.3702 12.0127 9.85292 12.1156C9.33564 12.2185 8.79946 12.1657 8.31219 11.9638C7.82492 11.762 7.40845 11.4202 7.11543 10.9817C6.82241 10.5432 6.66602 10.0276 6.66602 9.50016C6.66602 8.79292 6.94697 8.11464 7.44706 7.61454C7.94716 7.11445 8.62544 6.8335 9.33268 6.8335\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n","export type NiceFileDimensions = {\n width: number;\n height: number;\n ratio: number;\n};\n\nexport type NiceLocalFile = {\n file: File;\n name: string;\n size?: number;\n dimensions?: NiceFileDimensions;\n};\n\nexport type NiceRemoteFile = {\n id: string | number;\n name: string;\n url: string;\n size?: number;\n};\n\nexport type NiceSelectedFiles = NiceLocalFile | NiceRemoteFile;\n\nexport function isLocalFile(file: NiceSelectedFiles): file is NiceLocalFile {\n return \"file\" in file;\n}\n\nexport function isRemoteFile(file: NiceSelectedFiles): file is NiceRemoteFile {\n return \"id\" in file;\n}\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\nimport { NiceTranslater, NICE_COMPONENTS_TRANSLATER } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"../constant\";\nimport { NiceDropzoneTranslationKeyConfig } from \"../config\";\n\n@Pipe({\n name: \"niceFileSize\"\n})\nexport class FileSizePipe implements PipeTransform {\n private readonly units = [\"B\", \"KB\", \"MB\", \"GB\"] as const;\n\n private readonly translater = inject<NiceTranslater>(NICE_COMPONENTS_TRANSLATER);\n private readonly translationKeys = inject<NiceDropzoneTranslationKeyConfig>(NICE_DROPZONE_TRANSLATION_KEYS);\n\n public transform(bytes: number | null | undefined, precision = 0): string {\n const defaultUnit = this.translater(this.translationKeys.size.units.B);\n\n if (!bytes) {\n return `0 ${defaultUnit}`;\n }\n\n const unitIndex = Math.floor(Math.log(bytes) / Math.log(1000));\n const boundedUnitIndex = Math.min(unitIndex, this.units.length - 1);\n\n const size = bytes / Math.pow(1000, boundedUnitIndex);\n\n const unit = this.translater(this.translationKeys.size.units[this.units[boundedUnitIndex]]);\n return `${size.toFixed(precision)} ${unit}`;\n }\n}\n","import { Component } from \"@angular/core\";\n\n@Component({\n selector: \"nice-dropzone-delete-icon\",\n templateUrl: \"./delete-icon.template.svg\"\n})\nexport class NiceDropzoneDeleteIcon {}\n","<svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" aria-hidden=\"true\">\n <path d=\"M12 0a12 12 0 1 0 12 12A12 12 0 0 0 12 0Zm5.49 16.07a1 1 0 0 1 -1.41 1.42l-3.9 -3.9a0.25 0.25 0 0 0 -0.36 0l-3.9 3.9a1 1 0 1 1 -1.41 -1.42l3.9 -3.89a0.25 0.25 0 0 0 0 -0.36l-3.9 -3.9a1 1 0 0 1 1.41 -1.41l3.9 3.9a0.25 0.25 0 0 0 0.36 0l3.9 -3.9a1 1 0 0 1 1.41 1.41l-3.9 3.9a0.25 0.25 0 0 0 0 0.36Z\" fill=\"currentColor\" stroke-width=\"1\"></path>\n</svg>","import { Component, computed, inject, input, output } from \"@angular/core\";\nimport { NiceTranslatePipe } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"../constant\";\nimport { NiceDropzoneModes } from \"../dropzone\";\nimport { NiceDropzoneTranslationKeyConfig } from \"../config\";\nimport { isLocalFile, NiceFileDimensions, NiceSelectedFiles } from \"../models\";\nimport { FileSizePipe } from \"../pipes/file-size.pipe\";\nimport { NiceDropzoneDeleteIcon } from \"../icons/delete/delete-icon.component\";\nimport { NiceDropzoneFileIcon } from \"../icons/file/file-icon.component\";\n\n@Component({\n selector: \"nice-dropzone-file-preview\",\n templateUrl: \"./file-preview.html\",\n styleUrls: [\"./file-preview.scss\"],\n imports: [NiceDropzoneDeleteIcon, NiceTranslatePipe, FileSizePipe, NiceDropzoneFileIcon],\n host: {\n style: \"flex: 1 1 auto;\"\n }\n})\nexport class NiceDropzoneFilePreview {\n public readonly file = input.required<NiceSelectedFiles>();\n public readonly mode = input.required<NiceDropzoneModes>();\n\n protected readonly clickDelete = output<void>();\n\n protected readonly isImage = computed(() => this.mode() === \"image\");\n protected readonly imageDimensions = computed<NiceFileDimensions | null>(() => {\n const file = this.file();\n if (isLocalFile(file)) {\n return file.dimensions ?? null;\n }\n\n return null;\n });\n protected readonly imageUrl = computed<string>(() => {\n const file = this.file();\n if (isLocalFile(file)) {\n return URL.createObjectURL(file.file);\n }\n\n return file.url;\n });\n\n protected _translationKeys = inject<NiceDropzoneTranslationKeyConfig>(NICE_DROPZONE_TRANSLATION_KEYS);\n}\n","<div class=\"nice-dropzone-preview\">\n @if (isImage()) {\n <img class=\"nice-dropzone-preview-image\" alt=\"\" draggable=\"false\" [src]=\"imageUrl()\" />\n } @else {\n <div class=\"nice-dropzone-preview-file\">\n <nice-dropzone-file-icon />\n </div>\n }\n\n <div class=\"nice-dropzone-preview-file-info\">\n <span class=\"mat-body-medium\">{{ file().name }}</span>\n\n @if (imageDimensions(); as dimension) {\n <span class=\"mat-label-medium\">\n {{ `${dimension.width}x${dimension.height}` }} {{ _translationKeys.ratio.pixels | niceTranslate }}\n </span>\n }\n\n @if (file().size; as size) {\n <span class=\"mat-label-medium\">{{ size | niceFileSize }}</span>\n }\n </div>\n\n <div class=\"nice-dropzone-preview-actions\">\n <button class=\"nice-dropzone-preview-actions-delete\" (click)=\"$event.stopPropagation(); clickDelete.emit()\">\n <nice-dropzone-delete-icon />\n </button>\n </div>\n</div>\n","import { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n Component,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n OnDestroy,\n signal,\n viewChild,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { MatRippleLoader } from \"@angular/material/core\";\nimport { NiceTranslatePipe } from \"@recursyve/ngx-material-components/common\";\n\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"./constant\";\nimport {\n NiceDropzoneFileSizeConfig,\n NiceDropzoneImageConfig,\n NiceDropzoneTranslationKeyConfig\n} from \"./config\";\nimport { NiceDropzoneDirective } from \"./dropzone.directive\";\nimport { NiceDropzoneFileIcon } from \"./icons/file/file-icon.component\";\nimport { NiceDropzoneImageIcon } from \"./icons/image/image-icon.component\";\nimport { NiceFileDimensions, NiceSelectedFiles } from \"./models\";\nimport { NiceDropzoneFilePreview } from \"./preview/file-preview\";\n\nexport const niceDropzoneModes = [\"image\", \"file\", \"all\"] as const;\nexport type NiceDropzoneModes = (typeof niceDropzoneModes)[number];\n\n@Component({\n selector: \"nice-dropzone\",\n templateUrl: \"dropzone.html\",\n styleUrl: \"dropzone.scss\",\n imports: [\n NiceDropzoneDirective,\n NiceDropzoneImageIcon,\n NiceDropzoneFileIcon,\n NiceDropzoneFilePreview,\n NiceTranslatePipe\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceDropzone),\n multi: true\n }\n ]\n})\nexport class NiceDropzone implements OnDestroy, ControlValueAccessor {\n public readonly mode = input<NiceDropzoneModes>(\"all\");\n public readonly multiple = input(false, { transform: coerceBooleanProperty });\n public readonly disabled = input(false, { transform: coerceBooleanProperty });\n public readonly accept = input<string[]>();\n public readonly config = input<NiceDropzoneImageConfig>();\n public readonly maxFileSize = input<NiceDropzoneFileSizeConfig>();\n\n protected readonly _elementRef = viewChild(\"element\", { read: ElementRef });\n protected readonly _inputRef = viewChild<ElementRef<HTMLInputElement>>(\"fileInput\");\n\n /**\n * Handles the lazy creation of the MatButton ripple.\n * Used to improve the initial load time of large applications.\n */\n protected readonly _rippleLoader: MatRippleLoader = inject(MatRippleLoader);\n protected readonly _translationKeys = inject<NiceDropzoneTranslationKeyConfig>(NICE_DROPZONE_TRANSLATION_KEYS);\n\n protected readonly files = signal<NiceSelectedFiles[]>([]);\n\n protected _disabled = false;\n\n private _onChange!: (value: NiceSelectedFiles | NiceSelectedFiles[] | null) => void;\n private _value: NiceSelectedFiles | NiceSelectedFiles[] | null = null;\n\n constructor() {\n effect(() => {\n const elementRef = this._elementRef();\n if (!elementRef) {\n return;\n }\n\n this._rippleLoader.configureRipple(elementRef.nativeElement, { className: \"nice-dropzone-ripple\" });\n });\n\n effect(() => {\n this._disabled = this.disabled();\n });\n }\n\n public ngOnDestroy(): void {\n this._rippleLoader.destroyRipple(this._elementRef()?.nativeElement);\n }\n\n public writeValue(value: NiceSelectedFiles | NiceSelectedFiles[] | null): void {\n this._value = value;\n if (value) {\n this.files.set(Array.isArray(value) ? value : [value]);\n }\n }\n\n public registerOnChange(fn: (value: NiceSelectedFiles | NiceSelectedFiles[] | null) => void): void {\n this._onChange = fn;\n }\n\n public registerOnTouched(): void {\n // Do nothing\n }\n\n public setDisabledState(disabled: boolean): void {\n this._disabled = disabled;\n }\n\n public onFileChanged(event: Event): void {\n const files = (event.target as HTMLInputElement).files;\n if (!files) {\n return;\n }\n\n this.onFilesDropped(files);\n }\n\n public async onFilesDropped(fileList: FileList): Promise<void> {\n if (this.multiple() && !this._value) {\n this._value = [];\n }\n\n const accept = this.accept();\n for (const file of Array.from(fileList)) {\n if (accept && !accept.includes(file.type)) {\n continue;\n }\n\n const isImage = file.type.startsWith(\"image/\");\n const value = {\n file,\n name: file.name,\n size: file.size,\n ...(isImage && { dimensions: await this.getImageDimension(file) })\n } satisfies NiceSelectedFiles;\n if (this.multiple()) {\n (this._value as NiceSelectedFiles[]).push(value);\n } else {\n this._value = value;\n this.propagateChanges(this._value);\n return;\n }\n }\n\n if (this._value) {\n this.propagateChanges(this._value);\n }\n\n this.resetInput();\n }\n\n public onFileDelete(index: number): void {\n if (this.multiple()) {\n const files = [...this.files()];\n files.splice(index, 1);\n this.propagateChanges(files);\n } else {\n this.propagateChanges(null);\n this.resetInput();\n }\n }\n\n protected propagateChanges(value: NiceSelectedFiles | NiceSelectedFiles[] | null): void {\n if (value) {\n this.files.set(Array.isArray(value) ? value : [value]);\n } else {\n this.files.set([]);\n }\n\n this._value = value;\n this._onChange(value);\n }\n\n protected getImageDimension(file: File): Promise<NiceFileDimensions> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const image = new Image();\n image.onload = () => {\n resolve({\n width: image.width,\n height: image.height,\n ratio: image.width / image.height\n });\n };\n image.onerror = reject;\n image.src = reader.result as string;\n };\n\n reader.readAsDataURL(file);\n });\n }\n\n protected resetInput(): void {\n const input = this._inputRef();\n if (!input) {\n return;\n }\n\n input.nativeElement.value = \"\";\n }\n}\n","<div\n class=\"nice-dropzone-container\"\n>\n <div\n #element\n role=\"none\"\n class=\"nice-dropzone\"\n [class.nice-dropzone-disabled]=\"_disabled\"\n [class.nice-dropzone-multiple]=\"multiple()\"\n [class.nice-dropzone-single]=\"!multiple()\"\n [class.nice-dropzone-image]=\"mode() === 'image'\"\n [class.nice-dropzone-file]=\"mode() === 'file'\"\n [class.nice-dropzone-all]=\"mode() === 'all'\"\n [class.nice-dropzone-selected]=\"files().length > 0\"\n\n niceDropzone\n (filesDropped)=\"onFilesDropped($event)\"\n (click)=\"fileInput.click()\"\n (keyup.enter)=\"fileInput.click()\"\n >\n <div class=\"nice-dropzone-ripple\"></div>\n\n @if (multiple() || (!multiple() && !files().length)) {\n <div class=\"nice-dropzone-placeholder\">\n <div class=\"nice-dropzone-icon\">\n @if (mode() === \"image\") {\n <nice-dropzone-image-icon />\n } @else {\n <nice-dropzone-file-icon />\n }\n </div>\n\n <div class=\"nice-dropzone-content\">\n <span class=\"nice-dropzone-content-title\">\n @if (mode() === \"image\") {\n @if (multiple()) {\n {{ _translationKeys.upload.images | niceTranslate }}\n } @else {\n {{ _translationKeys.upload.image | niceTranslate }}\n }\n } @else {\n @if (multiple()) {\n {{ _translationKeys.upload.files | niceTranslate }}\n } @else {\n {{ _translationKeys.upload.file | niceTranslate }}\n }\n }\n </span>\n\n <div class=\"nice-dropzone-content-description\">\n @if (accept()?.length) {\n <span>\n {{ _translationKeys.format.label | niceTranslate }}:&nbsp;\n\n <span>\n {{ accept()?.join(\", \") }}\n </span>\n </span>\n }\n\n @if (mode() === \"image\" && config()?.recommendedSize; as recommendedSize) {\n <span>\n {{ _translationKeys.ratio.label | niceTranslate }}:&nbsp;\n\n <span>{{ recommendedSize.width }}x{{ recommendedSize.height }} {{ _translationKeys.ratio.pixels | niceTranslate }}</span>\n </span>\n }\n\n @if (maxFileSize(); as maxFileSize) {\n <span>\n {{ _translationKeys.size.label | niceTranslate }}:&nbsp;\n\n <span>{{ maxFileSize.size }} {{ _translationKeys.size.units[maxFileSize.unit] | niceTranslate }}</span>\n </span>\n }\n </div>\n </div>\n </div>\n } @else {\n <nice-dropzone-file-preview [file]=\"files()[0]\" [mode]=\"mode()\" (clickDelete)=\"onFileDelete(0)\" />\n }\n </div>\n\n @if (multiple()) {\n <div class=\"nice-dropzone-multiple-files-preview\">\n @for (file of files(); track file) {\n <nice-dropzone-file-preview [file]=\"file\" [mode]=\"mode()\" (clickDelete)=\"onFileDelete($index)\" />\n }\n </div>\n }\n</div>\n\n<input #fileInput style=\"display: none;\" type=\"file\" [accept]=\"accept()\" [multiple]=\"multiple()\" (change)=\"onFileChanged($event)\" />\n","import { Provider } from \"@angular/core\";\nimport { NICE_DROPZONE_TRANSLATION_KEYS } from \"./constant\";\nimport { NiceDropzoneTranslationKeyConfig } from \"./config\";\nimport { NiceDropzoneOptions } from \"./options\";\n\nconst defaultTranslationKeys: NiceDropzoneTranslationKeyConfig = {\n upload: {\n file: \"components.dropzone.upload.file\",\n files: \"components.dropzone.upload.files\",\n image: \"components.dropzone.upload.image\",\n images: \"components.dropzone.upload.images\"\n },\n format: {\n label: \"components.dropzone.format.label\"\n },\n ratio: {\n label: \"components.dropzone.ratio.label\",\n pixels: \"components.dropzone.ratio.pixels\"\n },\n size: {\n label: \"components.dropzone.size.label\",\n units: {\n B: \"components.dropzone.size.units.B\",\n KB: \"components.dropzone.size.units.KB\",\n MB: \"components.dropzone.size.units.MB\",\n GB: \"components.dropzone.size.units.GB\"\n }\n }\n};\n\nexport function provideDropzone(options?: NiceDropzoneOptions): Provider[] {\n return [\n {\n provide: NICE_DROPZONE_TRANSLATION_KEYS,\n useValue: options?.translationKeys ?? defaultTranslationKeys\n }\n ];\n}\n","/*\n * Public API Surface of dropzone\n */\n\nexport * from \"./dropzone.directive\";\nexport * from \"./dropzone\";\nexport * from \"./config\";\nexport * from \"./models\";\nexport * from \"./options\";\nexport * from \"./provider\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -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, ViewEncapsulation, ChangeDetectionStrategy } 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';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { Subject, switchMap, defer, EMPTY, map, catchError, finalize, startWith, merge, debounceTime, distinctUntilChanged, take, takeUntil } from 'rxjs';
5
5
  import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
@@ -30,17 +30,26 @@ class NiceTypeaheadService {
30
30
  _searchOptions = signal(null);
31
31
  _request = signal(null);
32
32
  _nextRequest = signal(null);
33
+ _preloaded = signal(false);
34
+ _autoSelectFirstValue = signal(false);
33
35
  _loading = signal(true);
34
36
  items = this._items.asReadonly();
35
37
  active = this._active.asReadonly();
36
38
  loading = this._loading.asReadonly();
37
39
  isLastPage = computed(() => !this._nextRequest());
38
- init(resource) {
40
+ init(resource, options) {
39
41
  this.fetchResources$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(switchMap((request) => this.fetchResources(request))).subscribe();
40
42
  this.fetchActive$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(switchMap((request) => this.fetchActive(request))).subscribe();
41
43
  const provider = this.resources.find((resources) => resources.resource === resource);
42
- if (provider) {
43
- this.resourceProvider = provider;
44
+ if (!provider) {
45
+ throw new Error("No provider found for resource " + resource);
46
+ }
47
+ this.resourceProvider = provider;
48
+ if (options?.autoSelectFirstValue) {
49
+ this._autoSelectFirstValue.set(options.autoSelectFirstValue);
50
+ }
51
+ if (options?.searchOptions) {
52
+ this._searchOptions.set(options.searchOptions);
44
53
  }
45
54
  }
46
55
  setSearchOptions(options) {
@@ -52,6 +61,9 @@ class NiceTypeaheadService {
52
61
  setActiveFromId(id) {
53
62
  this.fetchActive$.next({ id });
54
63
  }
64
+ reload() {
65
+ this.fetchResources$.next({ page: 0, searchQuery: this._request()?.searchQuery ?? "" });
66
+ }
55
67
  reloadActive() {
56
68
  const active = this._active();
57
69
  if (!active || !("id" in active)) {
@@ -126,6 +138,10 @@ class NiceTypeaheadService {
126
138
  else {
127
139
  this._nextRequest.set(null);
128
140
  }
141
+ if (this._autoSelectFirstValue() && !this._preloaded()) {
142
+ this._preloaded.set(true);
143
+ this._active.set(result.items[0]);
144
+ }
129
145
  }), catchError(() => EMPTY), finalize(() => {
130
146
  this._loading.set(false);
131
147
  }));
@@ -413,9 +429,7 @@ class NiceTypeaheadBase {
413
429
  this._handleClosedKeydown(event);
414
430
  }
415
431
  }
416
- _handleScrollEnd() {
417
- console.log("scroll end");
418
- }
432
+ _handleScrollEnd() { }
419
433
  _canOpen() {
420
434
  return !this._panelOpen && !this.disabled;
421
435
  }
@@ -504,7 +518,7 @@ class NiceTypeaheadBase {
504
518
  // Defer setting the value in order to avoid the "Expression
505
519
  // has changed after it was checked" errors from Angular.
506
520
  Promise.resolve().then(() => {
507
- if (this.ngControl) {
521
+ if (this.ngControl && this.ngControl.valueAccessor === this) {
508
522
  this._value.set(this.ngControl.value);
509
523
  }
510
524
  const _value = this.value;
@@ -638,6 +652,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
638
652
  class NiceAsyncTypeahead extends NiceTypeaheadBase {
639
653
  resource = input.required();
640
654
  searchOptions = input(null);
655
+ autoSelectFirstValue = input(false, { transform: booleanAttribute });
641
656
  filteredValues = computed(() => this.service.items());
642
657
  optionsContainer = viewChild("optionsContainer");
643
658
  service = inject(NiceTypeaheadService);
@@ -666,10 +681,17 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
666
681
  }
667
682
  container.nativeElement.addEventListener("scroll", this.onScroll.bind(this));
668
683
  });
684
+ effect(() => {
685
+ this.value = this.service.active();
686
+ });
669
687
  }
670
688
  ngOnInit() {
671
689
  super.ngOnInit();
672
- this.service.init(this.resource());
690
+ const searchOptions = this.optionsContainer();
691
+ this.service.init(this.resource(), {
692
+ autoSelectFirstValue: this.autoSelectFirstValue(),
693
+ ...(searchOptions && { searchOptions: searchOptions })
694
+ });
673
695
  }
674
696
  onFocusChanged(isFocused) {
675
697
  super.onFocusChanged(isFocused);
@@ -684,9 +706,21 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
684
706
  super.removeActiveValue();
685
707
  this.service.setActive(null);
686
708
  }
709
+ _onSelect(option) {
710
+ this.service.setActive(option.value);
711
+ this._setSelectionByValue(option.value);
712
+ this._selectOptionByValue(option.value);
713
+ this.stateChanges.next();
714
+ }
687
715
  setSearchOptions(options) {
688
716
  this.service.setSearchOptions(options);
689
717
  }
718
+ reload() {
719
+ this.service.reload();
720
+ }
721
+ reloadActive() {
722
+ this.service.reloadActive();
723
+ }
690
724
  onScroll(event) {
691
725
  const target = event.target;
692
726
  const threshold = (this.scrollThresholdPercent * 100 * target.scrollHeight) / 100;
@@ -700,7 +734,7 @@ class NiceAsyncTypeahead extends NiceTypeaheadBase {
700
734
  }
701
735
  }
702
736
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NiceAsyncTypeahead, deps: [], target: i0.ɵɵFactoryTarget.Component });
703
- 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 } }, 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: [
737
+ 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: [
704
738
  { provide: MatFormFieldControl, useExisting: NiceAsyncTypeahead },
705
739
  NiceTypeaheadService
706
740
  ], 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 } 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};\n\nexport type FetchActiveRequest = {\n id: number | string;\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 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): void {\n this.fetchResources$.pipe(takeUntilDestroyed(this.destroyRef)).pipe(\n switchMap((request) => this.fetchResources(request))\n ).subscribe();\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 this.resourceProvider = provider as NiceAsyncTypeaheadResourceProvider<T>;\n }\n }\n\n public setSearchOptions(options: object | null): void {\n this._searchOptions.set(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 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): void {\n this.fetchResources$.next({\n searchQuery,\n page: 0\n });\n }\n\n public loadMore(): void {\n const nextRequest = this._nextRequest();\n if (!nextRequest || this._loading()) {\n return;\n }\n\n this.fetchResources$.next(nextRequest);\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 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 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=\"#000000\" 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=\"#000000\" 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 console.log(\"scroll end\")\n }\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) {\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 || keyCode === SPACE) &&\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 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 { 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\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\n public override ngOnInit(): void {\n super.ngOnInit();\n\n this.service.init(this.resource());\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 public setSearchOptions(options: S | null): void {\n this.service.setSearchOptions(options);\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 } 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};\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 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(): void {\n this.fetchResources$.next({ page: 0, searchQuery: this._request()?.searchQuery ?? \"\" });\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): void {\n this.fetchResources$.next({\n searchQuery,\n page: 0\n });\n }\n\n public loadMore(): void {\n const nextRequest = this._nextRequest();\n if (!nextRequest || this._loading()) {\n return;\n }\n\n this.fetchResources$.next(nextRequest);\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 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 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=\"#000000\" 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=\"#000000\" 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 || keyCode === SPACE) &&\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 ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n OnInit,\n viewChild,\n ViewEncapsulation,\n booleanAttribute\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 { 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 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 reload(): void {\n 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":";;;;;;;;;;;;;;;;MAOsB,kCAAkC,CAAA;AAYvD;;ACjBM,MAAM,uCAAuC,GAAG,IAAI,cAAc,CAAC,+BAA+B,CAAC;;MCmB7F,oBAAoB,CAAA;AACZ,IAAA,SAAS,GAAG,MAAM,CAC/B,uCAAuC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAC9D,IAAI,EAAE;AACU,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,IAAA,eAAe,GAAG,IAAI,OAAO,EAA0B;AACvD,IAAA,YAAY,GAAG,IAAI,OAAO,EAAsB;IACzD,gBAAgB,GAAkE,IAAI;AAE7E,IAAA,MAAM,GAAG,MAAM,CAAM,EAAE,CAAC;AACxB,IAAA,OAAO,GAAG,MAAM,CAAW,IAAI,CAAC;AAChC,IAAA,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC;AAC5C,IAAA,QAAQ,GAAG,MAAM,CAAgC,IAAI,CAAC;AACtD,IAAA,YAAY,GAAG,MAAM,CAAgC,IAAI,CAAC;AAE1D,IAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B,IAAA,qBAAqB,GAAG,MAAM,CAAC,KAAK,CAAC;AACrC,IAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AAExB,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;AAChC,IAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAClC,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IAE1D,IAAI,CAAC,QAAgB,EAAE,OAAkC,EAAA;AAC5D,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC/D,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CACvD,CAAC,SAAS,EAAE;AAEb,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAC5D,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CACpD,CAAC,SAAS,EAAE;AAEb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,KAAK,QAAQ,CAAC;QACpF,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,QAAQ,CAAC;;AAGjE,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAiD;AAEzE,QAAA,IAAI,OAAO,EAAE,oBAAoB,EAAE;YAC/B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC;;AAGhE,QAAA,IAAI,OAAO,EAAE,aAAa,EAAE;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;;;AAI/C,IAAA,gBAAgB,CAAC,OAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG7B,IAAA,SAAS,CAAC,MAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;;AAGrB,IAAA,eAAe,CAAC,EAAmB,EAAA;QACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;;IAG3B,MAAM,GAAA;QACT,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,IAAI,EAAE,EAAE,CAAC;;IAGpF,YAAY,GAAA;AACf,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;QAC7B,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE;YAC9B;;AAGJ,QAAA,IAAI,EAAE,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE;YACnE;;AAGJ,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;;AAG5B,IAAA,QAAQ,CAAC,KAAU,EAAA;AACtB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGnB,IAAA,MAAM,CAAC,WAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YACtB,WAAW;AACX,YAAA,IAAI,EAAE;AACT,SAAA,CAAC;;IAGC,QAAQ,GAAA;AACX,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;QACvC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjC;;AAGJ,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGnC,IAAA,WAAW,CAAC,OAA2B,EAAA;QAC1C,OAAO,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,gBAAA,OAAO,KAAK;;AAGhB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;YACtF,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC3B,gBAAA,OAAO,KAAK;;YAGhB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;SACnD,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,KAAI;YACT,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC1B,SAAC,CAAC,EACF,UAAU,CAAC,MAAM,KAAK,CAAC,EACvB,QAAQ,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;SAC3B,CAAC,CACL;;AAGE,IAAA,cAAc,CAAC,OAA+B,EAAA;QACjD,OAAO,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,gBAAA,OAAO,KAAK;;AAGhB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;YAE1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;SAC5G,CAAC,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAI;AACX,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAY,CAAC;;iBACjC;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;oBACZ,GAAG,IAAI,CAAC,MAAM,EAAE;oBAChB,GAAI,MAAM,CAAC;AACd,iBAAA,CAAC;;AAGN,YAAA,IAAI,MAAM,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AAClB,oBAAA,GAAG,OAAO;oBACV,IAAI,EAAE,MAAM,CAAC;AAChB,iBAAA,CAAC;;iBACC;AACH,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;;YAG/B,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACpD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAEzC,SAAC,CAAC,EACF,UAAU,CAAC,MAAM,KAAK,CAAC,EACvB,QAAQ,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;SAC3B,CAAC,CACL;;AAGE,IAAA,WAAW,CAAC,IAAO,EAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,OAAO,EAAE;;QAGb,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;;wGA/KpC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;AChBK,SAAU,8BAA8B,CAC1C,SAAuE,EAAA;IAEvE,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MAAM;AAChC,QAAA,OAAO,EAAE,uCAAuC;AAChD,QAAA,QAAQ,EAAE,QAAQ;AAClB,QAAA,KAAK,EAAE;AACV,KAAA,CAAC,CAAC;AACP;;MCNa,uBAAuB,CAAA;wGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,sFCNpC,6dAIA,EAAA,CAAA;;4FDEa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;+BACI,4BAA4B,EAAA,QAAA,EAAA,6dAAA,EAAA;;;AEyC1C;;;AAGG;MAEU,iBAAiB,CAAA;AAUT,IAAA,OAAO;AAER,IAAA,iBAAiB,GAAG,KAAK,CAAS,gBAAgB,CAAC;IACnD,aAAa,GAAG,KAAK,EAAU;IAC/B,aAAa,GAAG,KAAK,EAA0B;IAC/C,cAAc,GAAG,KAAK,EAAiC;AACvD,IAAA,UAAU,GAAG,KAAK,CAAoB,EAAE,CAAC;AACzC,IAAA,cAAc,GAAG,KAAK,CAAU,IAAI,CAAC;IAErC,QAAQ,GAAG,MAAM,EAAY;AAErC,IAAA,OAAO,MAAM,GAAG,CAAC;AAEN,IAAA,MAAM,GAAG,SAAS,CAA+B,OAAO,CAAC;AACzD,IAAA,MAAM,GAAG,SAAS,CAA0B,OAAO,CAAC;AACpD,IAAA,WAAW,GAAG,SAAS,CAAC,mBAAmB,CAAC;AAErD,IAAA,kBAAkB;IAElB,SAAS,GAAmB,IAAI;IAChC,QAAQ,GAAG,KAAK;IAChB,SAAS,GAAG,KAAK;IACjB,UAAU,GAAG,KAAK;IAClB,YAAY,GAAG,CAAC,EAAK,EAAE,EAAK,KAAK,EAAE,KAAK,EAAE;AAEjC,IAAA,MAAM,GAAG,MAAM,CAAW,IAAI,CAAC;AAC/B,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AACvC,IAAA,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC;AACzB,IAAA,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC;AAEzB,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC9C,IAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;IAEzB,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;AACjD,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;IAElC,gBAAgB,GAAG,MAAM,CAAe,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9E,IAAA,EAAE,GAAW,CAAkB,eAAA,EAAA,iBAAiB,CAAC,MAAM,EAAE,EAAE;IAC3D,WAAW,GAAW,gBAAgB;AACtC,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAClC,IAAA,sBAAsB,GAAyC,KAAK,CAAC,MAAK;AACtF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;QAE5B,IAAI,OAAO,EAAE;AACT,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CACvB,SAAS,CAAC,OAAO,CAAC,EAClB,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAC7E;;AAGL,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC/E,KAAC,CAAC;AAEc,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAE7D,IAAA,yBAAyB,GAAG,IAAI,OAAO,EAAU;AAE1D,IAAA,WAAW;AACX,IAAA,uBAAuB;AACvB,IAAA,aAAa;AACb,IAAA,eAAe;AACf,IAAA,SAAS;AACT,IAAA,UAAU;AAEjB,IAAA,IAAW,WAAW,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;;IAG9B,IAAW,WAAW,CAAC,WAAW,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC;AAClC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAG5B,IAAA,IAAW,OAAO,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;;IAGxB,IAAW,OAAO,CAAC,SAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAG5B,IAAA,IAAW,QAAQ,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK;;IAGhG,IAAW,QAAQ,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAG5B,IAAA,IAAW,QAAQ,GAAA;QACf,OAAO,IAAI,CAAC,SAAS;;IAGzB,IAAW,QAAQ,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAG5B,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;;IAGxB,IAAW,KAAK,CAAC,KAAe,EAAA;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAE5C,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAIjC,IAAA,IAAW,KAAK,GAAA;AACZ,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;;AAGzB,IAAA,IAAW,gBAAgB,GAAA;QACvB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;;AAGtC,IAAA,IAAW,UAAU,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE,UAAU,IAAI,KAAK;;IAGvD,IAAW,UAAU,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1B;;AAGJ,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK;;AAG9C,IAAA,IAAW,SAAS,GAAA;QAChB,OAAO,IAAI,CAAC,UAAU;;AAG1B,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;AAElD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;;AAGhB,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;;AAGvC,QAAA,MAAM,wBAAwB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1D,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnE,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtE,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAC5C,wBAAwB,EACxB,SAAS,EACT,eAAe,EACf,UAAU,EACV,IAAI,CAAC,YAAY,CACpB;;IAGE,QAAQ,GAAA;AACX,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,EAAa;AAEtD,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CACjC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,CACzB,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;IAGjD,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAE5B,IAAI,CAAC,eAAe,EAAE;QAEtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAC5F,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,oBAAoB,EAAE;AAC/B,SAAC,CAAC;;IAGC,SAAS,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,gBAAgB,EAAE;;;IAIxB,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;AAGzB,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;AAGJ,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACxB,IAAK,KAAK,CAAC,MAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AAC7D,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;;;AAI1B,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAClC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;QACtF,IAAI,CAAC,cAAc,EAAE;YACjB;;AAGJ,QAAA,cAAc,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAG3D,IAAA,cAAc,CAAC,SAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QAExB,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,IAAI,EAAE;;;AAIZ,IAAA,UAAU,CAAC,KAAQ,EAAA;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;AAGrB,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;AAGhB,IAAA,iBAAiB,CAAC,EAAc,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;AAGjB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU;AAC3B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGrB,IAAA,WAAW,CAAC,IAAO,EAAA;AACtB,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,IAAI;;AAGf,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE;QAC/B,IAAI,EAAE,EAAE;AACJ,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;;AAGnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;QACrC,IAAI,CAAC,QAAQ,EAAE;AACX,YAAA,OAAO,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;;AAGjC,QAAA,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE;AAC9C,YAAA,OAAO,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;;AAGjC,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;;;AAGlB,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC;;AAGzB,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;IAGnB,iBAAiB,GAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAC5B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;IAGnC,gBAAgB,GAAA;AACnB,QAAA,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,EAAE;;IAGxC,IAAI,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClB;;;;;AAMJ,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE;;QAGpF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,CAAC;AACxE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;AAGtC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAGrB,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB;;AAGJ,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;AAEtC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAC,UAAU,IAAI;;AAGnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGrB,IAAA,KAAK,CAAC,OAAsB,EAAA;QAC/B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;;AAG1C,IAAA,cAAc,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf;;AAGJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;;aAC3B;AACH,YAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;;;AAIjC,IAAA,gBAAgB;IAEb,QAAQ,GAAA;QACd,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ;;IAGnC,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAC5D,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;YACvC,IAAI,CAAC,mBAAmB,EAAE;AAC9B,SAAC,CAAC;;IAGI,eAAe,GAAA;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,0BAA0B,CAAY,IAAI,CAAC,OAAO;AACpE,aAAA,uBAAuB;AACvB,aAAA,cAAc;AACd,aAAA,cAAc;AACd,aAAA,uBAAuB,CAAC,CAAC,UAAU,CAAC;AACpC,aAAA,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;QAEvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;AACnC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAC7B,oBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,qBAAqB,EAAE;;gBAGvD,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,EAAE;;AAEpB,SAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAK;YACnC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBAClC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC;;iBAC9D,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AACxD,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,qBAAqB,EAAE;;AAE3D,SAAC,CAAC;;AAGI,IAAA,gBAAgB,CAAC,eAA2D,EAAA;AAClF,QAAA,MAAM,YAAY,GACd,eAAe,YAAY;cACrB,eAAe,CAAC;AAClB,cAAE,eAAe,IAAI,IAAI,CAAC,WAAW;QAC7C,OAAO,YAAY,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK;;AAGzD,IAAA,cAAc,GAAG,CAAC,MAAiB,KAAI;AAC7C,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,OAAO,KAAK;;QAGhB,OAAO,MAAM,CAAC,QAAQ;AAC1B,KAAC;IAES,mBAAmB,GAAA;QACzB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,CAAC;;AAG3D,IAAA,qBAAqB,CAAC,KAAa,EAAA;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;YACT;;QAGJ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa;QAC1C,IAAI,CAAC,KAAK,EAAE;YACR;;AAGJ,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE;AACxC,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;;;;AAIb,YAAA,KAAK,CAAC,SAAS,GAAG,CAAC;;aAChB;YACH,KAAK,CAAC,SAAS,GAAG,wBAAwB,CACtC,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,YAAY,EACpB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,YAAY,CACrB;;;IAIC,aAAa,GAAA;QACnB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAC/B,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACvC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;YAE5B,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtC,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,EAAE;;AAEpB,SAAC,CAAC;;AAGI,IAAA,SAAS,CAAC,MAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;AAEvC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;IAGlB,oBAAoB,GAAA;;;AAG1B,QAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AACxB,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,KAAK,IAAI,EAAE;gBACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;AAGzC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK;YACzB,IAAI,MAAM,EAAE;AACR,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;;AAErC,YAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YAEjC,IAAI,CAAC,uBAAuB,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC5B,SAAC,CAAC;;AAGI,IAAA,oBAAoB,CAAC,KAAe,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAE5B,QAAA,MAAM,mBAAmB,GAAG,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,IAAI;;;QAI3E,IAAI,mBAAmB,EAAE;AACrB,YAAA,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;;AACnD,aAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;;YAGxB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;;AAGzC,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;;AAIhC,IAAA,oBAAoB,CAAC,KAAQ,EAAA;QACnC,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAiB,KAAI;;;YAGhE,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACzC,gBAAA,OAAO,KAAK;;AAGhB,YAAA,IAAI;;AAEA,gBAAA,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;;;YAEvE,OAAO,KAAK,EAAE;AACZ,gBAAA,OAAO,KAAK;;AAEpB,SAAC,CAAC;QAEF,IAAI,mBAAmB,EAAE;AACrB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,mBAAmB,CAAC;;AAGpD,QAAA,OAAO,mBAAmB;;IAGpB,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB;;AAGJ,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;;;AAIZ,YAAA,IAAI,uBAAuB,GAAG,CAAC,CAAC;AAChC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE;AACvC,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;oBAClB,uBAAuB,GAAG,KAAK;oBAC/B;;;AAIR,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,uBAAuB,CAAC;;aACpD;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;;AAK9D,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AAC/C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,QAAA,MAAM,UAAU,GACZ,OAAO,KAAK,UAAU;AACtB,YAAA,OAAO,KAAK,QAAQ;AACpB,YAAA,OAAO,KAAK,UAAU;YACtB,OAAO,KAAK,WAAW;QAC3B,MAAM,SAAS,GAAG,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK;AACxD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;;AAGhC,QAAA,IACI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC3D,aAAC,KAAK,CAAC,MAAM,IAAI,UAAU,CAAC,EAC9B;AACE,YAAA,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,EAAE;;;AAIT,IAAA,kBAAkB,CAAC,KAAoB,EAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW;AAChC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;QAC7B,MAAM,UAAU,GAAG,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,QAAQ;AACjE,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;AAEnC,QAAA,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE;;YAE5B,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;;;;AAGT,aAAA,IACH,CAAC,QAAQ;AACT,aAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,CAAC;AACxC,YAAA,OAAO,CAAC,UAAU;AAClB,YAAA,CAAC,cAAc,CAAC,KAAK,CAAC,EACxB;YACE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE;;aACvC;AACH,YAAA,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;;;AAItB,IAAA,YAAY,CAAC,QAAkB,EAAA;;AAErC,QAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,gBAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;;AAGvC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzB,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;wGAtlBP,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAyBiB,mBAAmB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAhBhD,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FATd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;wDAWoB,OAAO,EAAA,CAAA;sBADvB,YAAY;uBAAC,SAAS;;;ACQrB,MAAO,kBAAiD,SAAQ,iBAAoB,CAAA;AACtE,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAU;AACnC,IAAA,aAAa,GAAG,KAAK,CAAW,IAAI,CAAC;IACrC,oBAAoB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAEpE,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAElD,IAAA,gBAAgB,GAAG,SAAS,CAA0B,kBAAkB,CAAC;AAE3E,IAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEpC,IAAA,YAAY,GAAG,CAAC,EAAK,EAAE,EAAK,KAAI;AAC/C,QAAA,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,EAAE;YACjE,OAAO,EAAE,KAAK,EAAE;;AAGpB,QAAA,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE;YAChC,OAAO,EAAE,KAAK,EAAE;;AAGpB,QAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC1B,KAAC;AAED;;AAEG;IACc,sBAAsB,GAAG,IAAI;IACtC,gBAAgB,GAAG,CAAC;AAE5B,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;AAEP,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;AAEjE,QAAA,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAEtD,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACzC,IAAI,CAAC,SAAS,EAAE;gBACZ;;AAGJ,YAAA,SAAS,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChF,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACtC,SAAC,CAAC;;IAGU,QAAQ,GAAA;QACpB,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC/B,YAAA,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE;YACjD,IAAI,aAAa,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE;AACxD,SAAA,CAAC;;AAGU,IAAA,cAAc,CAAC,SAAkB,EAAA;AAC7C,QAAA,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC;QAE/B,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;;;AAI1B,IAAA,WAAW,CAAC,IAAO,EAAA;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;;IAGzB,iBAAiB,GAAA;QAC7B,KAAK,CAAC,iBAAiB,EAAE;AAEzB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;;AAGb,IAAA,SAAS,CAAC,MAAiB,EAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AAEpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC;AAEvC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;;AAGrB,IAAA,gBAAgB,CAAC,OAAiB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;;IAGnC,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;IAGlB,YAAY,GAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;;AAGrB,IAAA,QAAQ,CAAC,KAAY,EAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAC1C,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,sBAAsB,GAAG,GAAG,GAAG,MAAM,CAAC,YAAY,IAAI,GAAG;QACjF,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY;QAEtD,IAAI,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,YAAY,EAAE;AAC7C,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;;AAG7B,QAAA,IAAI,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,YAAY,EAAE;AACpE,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,YAAY;;;wGA9G1C,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAvBhB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,oCAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAAE;YACjE;SACH,EC9CL,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,04GA0FA,42HD/DQ,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EACnB,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,4LACZ,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,aAAa,EACb,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,qHACT,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,uBAAuB,EAAA,QAAA,EAAA,4BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA6BlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA1C9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EACvB,OAAA,EAAA;wBACL,gBAAgB;wBAChB,mBAAmB;wBACnB,mBAAmB;wBACnB,SAAS;wBACT,YAAY;wBACZ,QAAQ;wBACR,aAAa;wBACb,SAAS;wBACT,OAAO;wBACP,gBAAgB;wBAChB;AACH,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,oBAAoB,EAAE;wBACjE;qBACH,EACK,IAAA,EAAA;AACF,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,sBAAsB,EAAE,oCAAoC;AAC5D,wBAAA,sBAAsB,EAAE,WAAW;AACnC,wBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,wBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,wBAAA,qBAAqB,EAAE,YAAY;AACnC,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,gCAAgC,EAAE,YAAY;AAC9C,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,8BAA8B,EAAE,OAAO;AACvC,wBAAA,WAAW,EAAE,wBAAwB;AACrC,wBAAA,SAAS,EAAE,sBAAsB;AACjC,wBAAA,QAAQ,EAAE;AACb,qBAAA,EAAA,QAAA,EAAA,04GAAA,EAAA,MAAA,EAAA,CAAA,ozHAAA,CAAA,EAAA;;;AEZC,MAAO,aAAiB,SAAQ,iBAAoB,CAAA;AACtC,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAO;IAC9B,QAAQ,GAAG,KAAK,EAAqB;IAErC,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAEhG,IAAA,cAAc,CAAC,SAAkB,EAAA;AAC7C,QAAA,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC;QAE/B,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;;;IAInC,sBAAsB,CAAC,WAAmB,EAAE,MAAW,EAAA;QAC1D,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,OAAO,MAAM;;AAGjB,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,EAAE;AAC9C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC1B,IAAI,EAAE,EAAE;AACJ,YAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;;AAGpD,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACvB,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACvB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAGjD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE;YACrC,IAAI,CAAC,QAAQ,EAAE;AACX,gBAAA,OAAO,KAAK;;YAGhB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE;;;AAG7C,gBAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAGtE,YAAA,OAAO,KAAK;AAChB,SAAC,CAAC;;wGA1CG,aAAa,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EApBX,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAA,EAAA,oCAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,mBAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,EDhC7E,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,04GA0FA,42HC1EQ,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,4LACZ,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,aAAa,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,SAAS,EACT,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EACP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,oJAChB,uBAAuB,EAAA,QAAA,EAAA,4BAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA0BlB,aAAa,EAAA,UAAA,EAAA,CAAA;kBAvCzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EACjB,OAAA,EAAA;wBACL,gBAAgB;wBAChB,mBAAmB;wBACnB,mBAAmB;wBACnB,SAAS;wBACT,YAAY;wBACZ,QAAQ;wBACR,aAAa;wBACb,SAAS;wBACT,OAAO;wBACP,gBAAgB;wBAChB;AACH,qBAAA,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAe,aAAA,EAAE,CAAC,EACnE,IAAA,EAAA;AACF,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,OAAO,EAAE,gBAAgB;AACzB,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,sBAAsB,EAAE,oCAAoC;AAC5D,wBAAA,sBAAsB,EAAE,WAAW;AACnC,wBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,wBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,wBAAA,qBAAqB,EAAE,YAAY;AACnC,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,gCAAgC,EAAE,YAAY;AAC9C,wBAAA,iCAAiC,EAAE,UAAU;AAC7C,wBAAA,8BAA8B,EAAE,OAAO;AACvC,wBAAA,WAAW,EAAE,wBAAwB;AACrC,wBAAA,SAAS,EAAE,sBAAsB;AACjC,wBAAA,QAAQ,EAAE;AACb,qBAAA,EAAA,QAAA,EAAA,04GAAA,EAAA,MAAA,EAAA,CAAA,ozHAAA,CAAA,EAAA;;;AClDL;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@recursyve/ngx-material-components",
3
- "version": "19.0.0-beta.13",
3
+ "version": "19.0.0-beta.15",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0"
@@ -1,9 +1,11 @@
1
1
  import { ElementRef, OnInit } from "@angular/core";
2
+ import { MatOption } from "@angular/material/core";
2
3
  import { NiceTypeaheadBase } from "./typeahead-base";
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class NiceAsyncTypeahead<T, S extends object = object> extends NiceTypeaheadBase<T> implements OnInit {
5
6
  readonly resource: import("@angular/core").InputSignal<string>;
6
7
  readonly searchOptions: import("@angular/core").InputSignal<S | null>;
8
+ readonly autoSelectFirstValue: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
9
  readonly filteredValues: import("@angular/core").Signal<any[]>;
8
10
  protected readonly optionsContainer: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
9
11
  private readonly service;
@@ -18,8 +20,11 @@ export declare class NiceAsyncTypeahead<T, S extends object = object> extends Ni
18
20
  onFocusChanged(isFocused: boolean): void;
19
21
  formatLabel(item: T): string;
20
22
  removeActiveValue(): void;
23
+ protected _onSelect(option: MatOption): void;
21
24
  setSearchOptions(options: S | null): void;
25
+ reload(): void;
26
+ reloadActive(): void;
22
27
  protected onScroll(event: Event): void;
23
28
  static ɵfac: i0.ɵɵFactoryDeclaration<NiceAsyncTypeahead<any, any>, never>;
24
- 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; }; }, {}, never, never, true, never>;
29
+ 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>;
25
30
  }
@@ -7,6 +7,10 @@ export type AsyncTypeaheadRequests = {
7
7
  export type FetchActiveRequest = {
8
8
  id: number | string;
9
9
  };
10
+ export type NiceTypeaheadInitOptions = {
11
+ autoSelectFirstValue?: boolean;
12
+ searchOptions?: object;
13
+ };
10
14
  export declare class NiceTypeaheadService<T extends object> {
11
15
  private readonly resources;
12
16
  private readonly destroyRef;
@@ -18,15 +22,18 @@ export declare class NiceTypeaheadService<T extends object> {
18
22
  private readonly _searchOptions;
19
23
  private readonly _request;
20
24
  private readonly _nextRequest;
25
+ private readonly _preloaded;
26
+ private readonly _autoSelectFirstValue;
21
27
  private readonly _loading;
22
28
  readonly items: import("@angular/core").Signal<T[]>;
23
29
  readonly active: import("@angular/core").Signal<T | null>;
24
30
  readonly loading: import("@angular/core").Signal<boolean>;
25
31
  readonly isLastPage: import("@angular/core").Signal<boolean>;
26
- init(resource: string): void;
32
+ init(resource: string, options?: NiceTypeaheadInitOptions): void;
27
33
  setSearchOptions(options: object | null): void;
28
34
  setActive(active: T | null): void;
29
35
  setActiveFromId(id: number | string): void;
36
+ reload(): void;
30
37
  reloadActive(): void;
31
38
  setItems(items: T[]): void;
32
39
  search(searchQuery: string): void;