@koalarx/ui 20.2.9 → 20.2.11

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.
@@ -439,7 +439,7 @@ class AutocompleteValue {
439
439
  return (!options ||
440
440
  options.value !== this._selectedOption()?.value);
441
441
  }
442
- async selectOption(value) {
442
+ async selectOption(value, searchIfNotFound = true) {
443
443
  if (isEmpty(value)) {
444
444
  this._currentValue.set(null);
445
445
  return;
@@ -453,13 +453,16 @@ class AutocompleteValue {
453
453
  const options = this._multiple
454
454
  ? this._options()?.filter((opt) => `${value}`?.includes(`${opt.value}`))
455
455
  : this._options()?.find((opt) => `${opt.value}` === `${value}`);
456
- if (!isEmpty(value) && !options && this._isOnDemand()) {
456
+ if (!isEmpty(value) &&
457
+ !options &&
458
+ this._isOnDemand() &&
459
+ searchIfNotFound) {
457
460
  this._requestOptionsParams.update(() => ({
458
461
  internalFilter: this._internalFilter(),
459
462
  autofill: value,
460
463
  }));
461
464
  await delay(100);
462
- this.selectOption(value);
465
+ await this.selectOption(value, false);
463
466
  return;
464
467
  }
465
468
  if (options && this.selectedOptionIsDiff(options)) {
@@ -475,24 +478,14 @@ class AutocompleteValue {
475
478
  }
476
479
  }
477
480
  async makeAutofill() {
478
- if (!isEmpty(this._control?.value)) {
479
- while (this._isLoading()) {
480
- await delay(100);
481
- }
482
- this.selectOption(this._control?.value);
483
- const currentValue = this._currentValue();
484
- if ((this._multiple &&
485
- ((Array.isArray(currentValue) && currentValue.length === 0) ||
486
- !Array.isArray(currentValue))) ||
487
- (!this._multiple && isEmpty(currentValue))) {
488
- this._autofill.set(this._control?.value);
489
- this._requestOptionsParams.update((params) => ({
490
- ...params,
491
- internalFilter: this._internalFilter(),
492
- autofill: this._autofill(),
493
- }));
494
- }
481
+ const value = this._control?.value;
482
+ if (isEmpty(value)) {
483
+ return;
484
+ }
485
+ while (this._isLoading()) {
486
+ await delay(100);
495
487
  }
488
+ await this.selectOption(value);
496
489
  }
497
490
  init(control, options, isLoading, isOnDemand, multiple = false) {
498
491
  this._control = control;
@@ -626,11 +619,11 @@ class AutocompleteField extends InputFieldBase {
626
619
  this.autocompleteValue.makeAutofill();
627
620
  }
628
621
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AutocompleteField, deps: [], target: i0.ɵɵFactoryTarget.Component });
629
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.6", type: AutocompleteField, isStandalone: true, selector: "kl-autocomplete-field", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholderSearchField: { classPropertyName: "placeholderSearchField", publicName: "placeholderSearchField", isSignal: true, isRequired: false, transformFunction: null }, disableAutoTypeConversion: { classPropertyName: "disableAutoTypeConversion", publicName: "disableAutoTypeConversion", isSignal: true, isRequired: false, transformFunction: null } }, providers: [Autocomplete, AutocompleteValue], usesInheritance: true, ngImport: i0, template: "<button class=\"relative select hover:cursor-default bg-base-100 w-full min-h-10 h-full flex items-center justify-between flex-nowrap\"\n [class.has-value]=\"autocompleteValue.hasValue()\"\n type=\"button\"\n tabindex=\"0\"\n [id]=\"fieldId\"\n [disabled]=\"isDisabled() || isLoading()\"\n (focus)=\"control().markAsTouched()\"\n (click)=\"open()\">\n\n @if (label(); as label) {\n <span class=\"autocomplete-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\">\n <span>{{label}} {{ isRequired() ? '*' : '' }}</span>\n </span>\n }\n\n <div class=\"flex flex-wrap gap-1 pt-3 pb-2 items-center w-full h-full selected-options\"\n [hookChange]=\"!isLoading() && (autocompleteValue.filter() || autocompleteValue.currentValue())\"\n [class.hidden]=\"!autocompleteValue.hasValue()\">\n @if (multiple()) {\n @for (item of autocompleteValue.selectedOptions(); track $index) {\n <span class=\"flex items-center badge badge-primary badge-sm rounded-sm\">\n <span>{{item.label}}</span>\n <i class=\"fa-solid fa-xmark text-neutral-400 hover:cursor-pointer\"\n (click)=\"autocompleteValue.remove($event, item.value)\">\n </i>\n </span>\n }\n } @else {\n {{autocompleteValue.selectedOption()?.label}}\n }\n </div>\n\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (autocompleteValue.hasValue()) {\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer pt-1 pr-2\"\n (click)=\"autocompleteValue.clear($event)\">\n </i>\n }\n</button>\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n", dependencies: [{ kind: "component", type: Loader, selector: "kl-loader", inputs: ["size"] }, { kind: "component", type: FieldErrors, selector: "kl-field-errors", inputs: ["field"] }, { kind: "directive", type: HookChange, selector: "[hookChange]", inputs: ["hookChange"] }] });
622
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.6", type: AutocompleteField, isStandalone: true, selector: "kl-autocomplete-field", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, placeholderSearchField: { classPropertyName: "placeholderSearchField", publicName: "placeholderSearchField", isSignal: true, isRequired: false, transformFunction: null }, disableAutoTypeConversion: { classPropertyName: "disableAutoTypeConversion", publicName: "disableAutoTypeConversion", isSignal: true, isRequired: false, transformFunction: null } }, providers: [Autocomplete, AutocompleteValue], usesInheritance: true, ngImport: i0, template: "<button class=\"relative select hover:cursor-default bg-base-100 w-full min-h-10 h-full flex items-center justify-between flex-nowrap select-text\"\n [class.has-value]=\"autocompleteValue.hasValue()\"\n type=\"button\"\n tabindex=\"0\"\n [id]=\"fieldId\"\n [disabled]=\"isDisabled() || isLoading()\"\n (focus)=\"control().markAsTouched()\"\n (click)=\"open()\">\n\n @if (label(); as label) {\n <span class=\"autocomplete-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\">\n <span>{{label}} {{ isRequired() ? '*' : '' }}</span>\n </span>\n }\n\n <div class=\"flex flex-wrap gap-1 pt-3 pb-2 items-center w-full h-full selected-options\"\n [hookChange]=\"!isLoading() && (autocompleteValue.filter() || autocompleteValue.currentValue())\"\n [class.hidden]=\"!autocompleteValue.hasValue()\">\n @if (multiple()) {\n @for (item of autocompleteValue.selectedOptions(); track $index) {\n <span class=\"flex items-center badge badge-primary badge-sm rounded-sm\">\n <span>{{item.label}}</span>\n <i class=\"fa-solid fa-xmark text-neutral-400 hover:cursor-pointer\"\n (click)=\"autocompleteValue.remove($event, item.value)\">\n </i>\n </span>\n }\n } @else {\n {{autocompleteValue.selectedOption()?.label}}\n }\n </div>\n\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (autocompleteValue.hasValue()) {\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer pt-1 pr-2\"\n (click)=\"autocompleteValue.clear($event)\">\n </i>\n }\n</button>\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n", dependencies: [{ kind: "component", type: Loader, selector: "kl-loader", inputs: ["size"] }, { kind: "component", type: FieldErrors, selector: "kl-field-errors", inputs: ["field"] }, { kind: "directive", type: HookChange, selector: "[hookChange]", inputs: ["hookChange"] }] });
630
623
  }
631
624
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AutocompleteField, decorators: [{
632
625
  type: Component,
633
- args: [{ selector: 'kl-autocomplete-field', providers: [Autocomplete, AutocompleteValue], imports: [Loader, FieldErrors, HookChange], template: "<button class=\"relative select hover:cursor-default bg-base-100 w-full min-h-10 h-full flex items-center justify-between flex-nowrap\"\n [class.has-value]=\"autocompleteValue.hasValue()\"\n type=\"button\"\n tabindex=\"0\"\n [id]=\"fieldId\"\n [disabled]=\"isDisabled() || isLoading()\"\n (focus)=\"control().markAsTouched()\"\n (click)=\"open()\">\n\n @if (label(); as label) {\n <span class=\"autocomplete-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\">\n <span>{{label}} {{ isRequired() ? '*' : '' }}</span>\n </span>\n }\n\n <div class=\"flex flex-wrap gap-1 pt-3 pb-2 items-center w-full h-full selected-options\"\n [hookChange]=\"!isLoading() && (autocompleteValue.filter() || autocompleteValue.currentValue())\"\n [class.hidden]=\"!autocompleteValue.hasValue()\">\n @if (multiple()) {\n @for (item of autocompleteValue.selectedOptions(); track $index) {\n <span class=\"flex items-center badge badge-primary badge-sm rounded-sm\">\n <span>{{item.label}}</span>\n <i class=\"fa-solid fa-xmark text-neutral-400 hover:cursor-pointer\"\n (click)=\"autocompleteValue.remove($event, item.value)\">\n </i>\n </span>\n }\n } @else {\n {{autocompleteValue.selectedOption()?.label}}\n }\n </div>\n\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (autocompleteValue.hasValue()) {\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer pt-1 pr-2\"\n (click)=\"autocompleteValue.clear($event)\">\n </i>\n }\n</button>\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n" }]
626
+ args: [{ selector: 'kl-autocomplete-field', providers: [Autocomplete, AutocompleteValue], imports: [Loader, FieldErrors, HookChange], template: "<button class=\"relative select hover:cursor-default bg-base-100 w-full min-h-10 h-full flex items-center justify-between flex-nowrap select-text\"\n [class.has-value]=\"autocompleteValue.hasValue()\"\n type=\"button\"\n tabindex=\"0\"\n [id]=\"fieldId\"\n [disabled]=\"isDisabled() || isLoading()\"\n (focus)=\"control().markAsTouched()\"\n (click)=\"open()\">\n\n @if (label(); as label) {\n <span class=\"autocomplete-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\">\n <span>{{label}} {{ isRequired() ? '*' : '' }}</span>\n </span>\n }\n\n <div class=\"flex flex-wrap gap-1 pt-3 pb-2 items-center w-full h-full selected-options\"\n [hookChange]=\"!isLoading() && (autocompleteValue.filter() || autocompleteValue.currentValue())\"\n [class.hidden]=\"!autocompleteValue.hasValue()\">\n @if (multiple()) {\n @for (item of autocompleteValue.selectedOptions(); track $index) {\n <span class=\"flex items-center badge badge-primary badge-sm rounded-sm\">\n <span>{{item.label}}</span>\n <i class=\"fa-solid fa-xmark text-neutral-400 hover:cursor-pointer\"\n (click)=\"autocompleteValue.remove($event, item.value)\">\n </i>\n </span>\n }\n } @else {\n {{autocompleteValue.selectedOption()?.label}}\n }\n </div>\n\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (autocompleteValue.hasValue()) {\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer pt-1 pr-2\"\n (click)=\"autocompleteValue.clear($event)\">\n </i>\n }\n</button>\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n" }]
634
627
  }], ctorParameters: () => [] });
635
628
 
636
629
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"koalarx-ui-shared-components-input-field-autocomplete.mjs","sources":["../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-ref.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-options.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-options.html","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-builder.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-value.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-field.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-field.html","../../projects/koala-ui/shared/components/input-field/autocomplete/koalarx-ui-shared-components-input-field-autocomplete.ts"],"sourcesContent":["import {\n ApplicationRef,\n ComponentRef,\n inject,\n Injectable,\n InjectionToken,\n Type,\n} from '@angular/core';\nimport { AUTOCOMPLETE_APP_REF } from './autocomplete';\n\nexport const AUTOCOMPLETE_REF_TOKEN = new InjectionToken(\n 'AutocompleteRefToken'\n);\n\n@Injectable()\nexport class AutocompleteRef {\n private readonly appRef = inject<ApplicationRef>(AUTOCOMPLETE_APP_REF);\n private readonly componentRef = inject<() => ComponentRef<Type<any>>>(\n AUTOCOMPLETE_REF_TOKEN\n );\n\n close() {\n setTimeout(() => {\n this.componentRef().destroy();\n this.appRef.detachView(this.componentRef().hostView);\n });\n }\n}\n","import {\n booleanAttribute,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { AutocompleteRef } from './autocomplete-ref';\nimport { AutocompleteList, AutocompleteValue } from './autocomplete-value';\nimport { KlArray } from '@koalarx/utils/KlArray';\n\n@Component({\n selector: 'kl-autocomplete-options',\n templateUrl: './autocomplete-options.html',\n imports: [ReactiveFormsModule],\n})\nexport class AutocompleteOptions implements OnInit, OnDestroy {\n private readonly autocompleteRef = inject(AutocompleteRef);\n private readonly viewContainerRef =\n inject<ViewContainerRef>(ViewContainerRef);\n private firstLoad = true;\n\n fieldId = input.required<string>();\n options = input.required<Signal<AutocompleteList>>();\n control = input.required<FormControl>();\n multiple = input.required<boolean>();\n autocompleteValue = input.required<AutocompleteValue>();\n placeholderSearchField = input<string | undefined>();\n disableAutoTypeConversion = input(false, { transform: booleanAttribute });\n list = linkedSignal(() => {\n const options = this.options()();\n return new KlArray(options).split(100)[0];\n });\n\n optionFocused = signal(0);\n\n searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n constructor() {\n effect(() => {\n const hasValue = !!this.autocompleteValue().currentValue();\n\n if (this.firstLoad) {\n this.firstLoad = false;\n return;\n }\n\n if (hasValue && !this.multiple()) {\n this.close();\n }\n });\n\n effect(() => {\n const options = this.options()();\n if (options.length > 0) {\n this.optionFocused.set(0);\n }\n });\n }\n\n private updateScrollPosition(direction: 'down' | 'up' = 'down') {\n setTimeout(() => {\n const containerElement =\n this.viewContainerRef.element.nativeElement.querySelector(\n '.kl-autocomplete-options-container'\n ) as HTMLDivElement;\n const focusedOptionElement = containerElement.querySelector(\n 'label.active'\n ) as HTMLDivElement;\n\n if (focusedOptionElement) {\n containerElement.scrollTo({\n top:\n direction === 'down'\n ? containerElement.scrollTop +\n focusedOptionElement.getBoundingClientRect().height\n : containerElement.scrollTop -\n focusedOptionElement.getBoundingClientRect().height,\n });\n }\n });\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown': {\n event.stopPropagation();\n event.preventDefault();\n\n this.optionFocused.update((value) => {\n if (value < this.options()().length - 1) {\n return value + 1;\n }\n return value;\n });\n this.updateScrollPosition('down');\n break;\n }\n case 'ArrowUp': {\n event.stopPropagation();\n event.preventDefault();\n\n this.optionFocused.update((value) => {\n if (value > 0) {\n return value - 1;\n }\n return value;\n });\n this.updateScrollPosition('up');\n break;\n }\n }\n };\n\n private onKeyup = (event: KeyboardEvent) => {\n const containerElement: HTMLDivElement =\n this.viewContainerRef.element.nativeElement;\n\n switch (event.key) {\n case 'Enter': {\n event.stopPropagation();\n event.preventDefault();\n\n const focusedOption = this.options()()[this.optionFocused()];\n\n if (focusedOption) {\n containerElement\n .querySelectorAll<HTMLInputElement>('input')\n .item(this.optionFocused() + 1)\n .click();\n }\n break;\n }\n case 'Escape': {\n event.stopPropagation();\n event.preventDefault();\n\n this.close();\n break;\n }\n }\n };\n\n private onClick = (event: MouseEvent) => {\n const containerElement: HTMLDivElement =\n this.viewContainerRef.element.nativeElement;\n const insideClick = containerElement.contains(event.target as Node);\n\n if (!insideClick) {\n event.stopPropagation();\n event.preventDefault();\n this.close();\n }\n };\n\n private onScroll = (event: Event) => {\n const container = this.viewContainerRef.element.nativeElement.querySelector(\n '.kl-autocomplete-options-container'\n );\n const target = event.target as HTMLElement;\n\n if (!container || !target.tagName) return;\n\n if (target !== container) {\n this.close();\n }\n };\n\n private close() {\n if (\n this.autocompleteValue().filterControl.value &&\n !this.autocompleteValue().isOnDemand()\n ) {\n this.autocompleteValue().filterControl.reset();\n }\n\n this.autocompleteRef.close();\n }\n\n ngOnDestroy() {\n document.removeEventListener('keyup', this.onKeyup);\n document.removeEventListener('keydown', this.onKeyDown);\n document.removeEventListener('click', this.onClick);\n window.removeEventListener('scroll', this.onScroll, true);\n }\n\n ngOnInit() {\n this.searchInputRef()?.nativeElement.focus();\n\n setTimeout(() => {\n document.addEventListener('keyup', this.onKeyup);\n document.addEventListener('keydown', this.onKeyDown);\n document.addEventListener('click', this.onClick);\n window.addEventListener('scroll', this.onScroll, true);\n }, 150);\n }\n\n setValue(event: Event) {\n const target = event.target as HTMLInputElement;\n\n let value: string | number = target.value;\n\n if (\n !Number.isNaN(parseInt(value as any)) &&\n !/^0+[1-9]\\d*$/.test(value) &&\n !this.disableAutoTypeConversion()\n ) {\n value = Number(value);\n }\n\n if (this.multiple()) {\n const check = target.checked;\n\n let currentValue = this.control().value;\n\n if (!Array.isArray(currentValue)) {\n currentValue = [currentValue];\n }\n\n if (check) {\n this.control().setValue([...currentValue, value]);\n } else {\n this.control().setValue(currentValue.filter((v: any) => v !== value));\n }\n } else {\n this.control().setValue(value);\n }\n }\n}\n","<div class=\"bg-base-300 overflow-hidden shadow border border-neutral-200 dark:border-neutral-700 rounded-lg flex flex-col w-full\"\n [attr.aria-labelledby]=\"fieldId()\">\n\n <div class=\"kl-autocomplete-filter border-b border-neutral-200 dark:border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none placeholder:opacity-60\"\n #searchInput\n type=\"search\"\n [formControl]=\"autocompleteValue().filterControl\"\n placeholder=\"Type to Search...\"\n />\n </label>\n </div>\n\n <div class=\"kl-autocomplete-options-container flex flex-col overflow-auto p-1\">\n @for (item of list(); track $index) {\n @let optionLabelId = fieldId() + '-' + item.value;\n\n <label class=\"relative py-1 px-2 pr-8 rounded-md\"\n [attr.for]=\"optionLabelId\"\n [class.active]=\"$index === optionFocused()\"\n (mouseover)=\"optionFocused.set($index)\">\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId()\"\n [attr.value]=\"item.value\"\n [checked]=\"multiple()\n ? control().value?.includes(item.value)\n : item.value === control().value\"\n (change)=\"setValue($event)\"\n />\n {{item.label}}\n </label>\n }\n </div>\n</div>\n","import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n inputBinding,\n Signal,\n ViewContainerRef,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { GENERIC_COMPONENT_CONTAINER_NAME } from '@koalarx/ui/core/config';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { randomString } from '@koalarx/utils/KlString';\nimport { AutocompleteOptions } from './autocomplete-options';\nimport { AUTOCOMPLETE_REF_TOKEN, AutocompleteRef } from './autocomplete-ref';\nimport { AutocompleteList, AutocompleteValue } from './autocomplete-value';\n\nexport type AutocompleteAfterCloseTrigger = string | Record<string, any>;\nexport type AutocompleteAfterCloseTriggerFn = (\n trigger: AutocompleteAfterCloseTrigger\n) => void;\nexport const AUTOCOMPLETE_APP_REF = new InjectionToken('AutocompleteAppRef');\n\nexport interface AutocompleteOpenData {\n fieldId: string;\n options: Signal<AutocompleteList>;\n control: FormControl<any>;\n multiple: boolean;\n autocompleteValue: AutocompleteValue;\n placeholderSearchField?: string;\n disableAutoTypeConversion?: boolean;\n}\n\n@Injectable()\nexport class Autocomplete {\n private readonly appRef = inject(ApplicationRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(EnvironmentInjector);\n\n private generateElementId() {\n let elementId: string;\n\n do {\n elementId = randomString(50, {\n numbers: false,\n lowercase: true,\n uppercase: true,\n specialCharacters: false,\n });\n } while (document.getElementById(elementId));\n\n return elementId;\n }\n\n private calculatePosition(container: HTMLDivElement) {\n const autocompleteField = this.viewContainerRef.element\n .nativeElement as HTMLElement;\n const currentTop = window.scrollY;\n const position = autocompleteField.getBoundingClientRect();\n const optionsContainer = container.querySelector<HTMLDivElement>(\n '.kl-autocomplete-options-container'\n );\n const filterContainer = container?.querySelector<HTMLDivElement>(\n '.kl-autocomplete-filter'\n );\n const filterContainerHeight = (filterContainer?.clientHeight || 0) + 2;\n\n if (position) {\n const screenHeight = document.body.clientHeight;\n const maxHeight = (screenHeight * 40) / 100;\n let top = position.bottom;\n let height = Math.abs(screenHeight - top);\n\n if (height > maxHeight) {\n height = maxHeight;\n }\n\n const percentFillOnScreen = (height * 100) / screenHeight;\n\n if (percentFillOnScreen <= 20) {\n const optionsHeight = optionsContainer?.scrollHeight || 0;\n const currentHeight = optionsHeight + filterContainerHeight;\n\n if (optionsHeight > 0 && currentHeight <= maxHeight) {\n height = currentHeight;\n } else {\n height = Math.abs(screenHeight - (screenHeight - position.top));\n\n if (height > maxHeight) {\n height = maxHeight;\n }\n }\n\n top = position.top - height;\n }\n\n top += currentTop;\n\n container.style.top = `${top}px`;\n container.style.maxHeight = `${height}px`;\n\n return { top, left: position.left, width: position.width, height };\n }\n\n return null;\n }\n\n private async waitForButtonEnabled(\n buttonElement: HTMLButtonElement,\n timeout: number\n ) {\n const delayTime = 50;\n\n let ellapsedTime = 0;\n\n while (buttonElement.disabled && ellapsedTime <= timeout) {\n await delay(delayTime);\n ellapsedTime += delayTime;\n }\n }\n\n private async positionOnScreen(container: HTMLDivElement) {\n const autocompleteField = this.viewContainerRef.element\n .nativeElement as HTMLElement;\n const autocompleteFieldButton =\n autocompleteField.querySelector<HTMLButtonElement>('button');\n\n if (autocompleteFieldButton) {\n await this.waitForButtonEnabled(autocompleteFieldButton, 5000);\n }\n\n const position = this.calculatePosition(container);\n\n if (position) {\n const { left, width } = position;\n\n container.style.position = 'absolute';\n container.style.display = 'flex';\n container.style.left = `${left}px`;\n container.style.width = `${width}px`;\n container.style.height = `auto`;\n container.style.zIndex = '99';\n container.style.overflow = 'hidden';\n container.style.transition = 'all 0.1s ease-in-out';\n\n const selectedOptions =\n autocompleteField.querySelector<HTMLDivElement>('.selected-options');\n\n if (selectedOptions) {\n selectedOptions.onchange = () => this.positionOnScreen(container);\n }\n }\n }\n\n async open(data: AutocompleteOpenData) {\n const main = document.querySelector<HTMLElement>(\n GENERIC_COMPONENT_CONTAINER_NAME\n );\n\n if (main) {\n const elementId = this.generateElementId();\n const container = main.appendChild(document.createElement('div'));\n\n container.id = elementId;\n\n await this.positionOnScreen(container);\n\n const componentRef = createComponent(AutocompleteOptions, {\n environmentInjector: this.injector,\n hostElement: container,\n elementInjector: Injector.create({\n providers: [\n { provide: AUTOCOMPLETE_APP_REF, useValue: this.appRef },\n {\n provide: AUTOCOMPLETE_REF_TOKEN,\n useValue: () => componentRef,\n },\n {\n provide: AutocompleteRef,\n deps: [AUTOCOMPLETE_APP_REF, AUTOCOMPLETE_REF_TOKEN],\n },\n ],\n }),\n bindings: [\n ...Object.keys(data).map((key) =>\n inputBinding(key, () => (data as any)[key])\n ),\n ],\n });\n\n this.appRef.attachView(componentRef.hostView);\n\n componentRef.changeDetectorRef.detectChanges();\n\n this.calculatePosition(container);\n }\n }\n}\n","import { Injectable, ResourceRef, Signal } from '@angular/core';\nimport {\n AutocompleteDataOptionsFn,\n AutocompleteList,\n} from './autocomplete-value';\n\n@Injectable({ providedIn: 'root' })\nexport class AutocompleteBuilder {\n onDemand(config: AutocompleteDataOptionsFn) {\n return config;\n }\n\n onServer(config: ResourceRef<AutocompleteList>) {\n return config;\n }\n\n inMemory(config: AutocompleteList) {\n return config;\n }\n\n inMemoryWithLoading(config: Signal<AutocompleteList>) {\n return config;\n }\n}\n","import {\n computed,\n DestroyRef,\n inject,\n Injectable,\n ResourceRef,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport { isEmpty } from '@koalarx/ui/shared/utils';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\n\nexport type AutocompleteOptionValue = string | number | null;\n\nexport interface AutocompleteOption<TData = any> {\n label: string;\n value: AutocompleteOptionValue;\n data?: TData;\n}\n\nexport type AutocompleteList = AutocompleteOption[];\nexport interface AutocompleteDataOptionsFnParams {\n filter?: string | null;\n autofill?: any | null;\n internalFilter?: string | null;\n}\n\nexport type AutocompleteDataOptionsFn = (\n data: Signal<AutocompleteDataOptionsFnParams>\n) => ResourceRef<AutocompleteList>;\n\nexport type AutocompleteDataOptions =\n | AutocompleteDataOptionsFn\n | ResourceRef<AutocompleteList>\n | Signal<AutocompleteList>\n | AutocompleteList;\n\n@Injectable()\nexport class AutocompleteValue {\n private readonly destroyRef = inject(DestroyRef);\n private readonly _filter = signal<string | null>('');\n private _control?: FormControl<any>;\n private readonly _currentValue = signal<\n AutocompleteOption | AutocompleteOption[] | null\n >(null);\n private _multiple = false;\n private _options?: Signal<AutocompleteList>;\n private _autofill = signal<any | null>(null);\n private _isLoading?: Signal<boolean>;\n private _internalFilter = signal<string | null>(null);\n private _isOnDemand?: WritableSignal<boolean>;\n private readonly _requestOptionsParams =\n signal<AutocompleteDataOptionsFnParams>({\n filter: null,\n autofill: null,\n });\n\n private readonly _selectedOption = computed(() => {\n const currentValue = this._currentValue();\n\n if (Array.isArray(currentValue)) {\n return null;\n }\n\n return currentValue;\n });\n\n private readonly _selectedOptions = computed(() => {\n const currentValue = this._currentValue();\n\n if (Array.isArray(currentValue)) {\n return currentValue;\n }\n\n return [];\n });\n\n private readonly _hasValue = computed(() => {\n const currentValue = this._currentValue();\n const value = Array.isArray(currentValue)\n ? currentValue\n : currentValue?.value;\n\n if (Array.isArray(value)) {\n return value.length > 0;\n } else if (typeof value === 'number') {\n return value >= 0;\n }\n\n return !!value;\n });\n\n filterControl = new FormControl<string | null>('');\n\n get filter() {\n return this._filter.asReadonly();\n }\n\n get hasValue() {\n return this._hasValue;\n }\n\n get currentValue() {\n return this._currentValue.asReadonly();\n }\n\n get selectedOption() {\n return this._selectedOption;\n }\n\n get selectedOptions() {\n return this._selectedOptions;\n }\n\n get autofill() {\n return this._autofill.asReadonly();\n }\n\n get requestOptionsParams() {\n return this._requestOptionsParams.asReadonly();\n }\n\n set internalFilter(value: string | null) {\n this._internalFilter.set(value);\n this._requestOptionsParams.update(() => ({\n filter: this.filterControl.enabled ? null : this.filterControl.value,\n internalFilter: this._internalFilter(),\n autofill: null,\n }));\n }\n\n get isOnDemand() {\n if (!this._isOnDemand) {\n return signal(false);\n }\n return this._isOnDemand.asReadonly();\n }\n\n private selectedOptionIsDiff(\n options: AutocompleteOption | AutocompleteOption[]\n ) {\n if (this._multiple) {\n return (\n !Array.isArray(options) ||\n options.length !== this._selectedOptions().length ||\n options.some(\n (opt, index) => opt.value !== this._selectedOptions()[index].value\n )\n );\n }\n\n return (\n !options ||\n (options as AutocompleteOption).value !== this._selectedOption()?.value\n );\n }\n\n private async selectOption(value: any) {\n if (isEmpty(value)) {\n this._currentValue.set(null);\n return;\n }\n\n while (this._isLoading!()) {\n await delay(100);\n }\n\n if (!this._options) {\n return;\n }\n\n const options = this._multiple\n ? this._options()?.filter((opt) => `${value}`?.includes(`${opt.value}`))\n : this._options()?.find((opt) => `${opt.value}` === `${value}`);\n\n if (!isEmpty(value) && !options && this._isOnDemand!()) {\n this._requestOptionsParams.update(() => ({\n internalFilter: this._internalFilter(),\n autofill: value,\n }));\n\n await delay(100);\n\n this.selectOption(value);\n\n return;\n }\n\n if (options && this.selectedOptionIsDiff(options)) {\n this._currentValue.update(() => {\n if (this._multiple) {\n if (Array.isArray(options)) {\n return options;\n }\n\n return [options];\n }\n\n return options;\n });\n }\n }\n\n async makeAutofill() {\n if (!isEmpty(this._control?.value)) {\n while (this._isLoading!()) {\n await delay(100);\n }\n\n this.selectOption(this._control?.value);\n\n const currentValue = this._currentValue();\n\n if (\n (this._multiple &&\n ((Array.isArray(currentValue) && currentValue.length === 0) ||\n !Array.isArray(currentValue))) ||\n (!this._multiple && isEmpty(currentValue))\n ) {\n this._autofill.set(this._control?.value);\n this._requestOptionsParams.update((params) => ({\n ...params,\n internalFilter: this._internalFilter(),\n autofill: this._autofill(),\n }));\n }\n }\n }\n\n init(\n control: FormControl<any>,\n options: Signal<AutocompleteList>,\n isLoading: Signal<boolean>,\n isOnDemand: WritableSignal<boolean>,\n multiple = false\n ) {\n this._control = control;\n this._options = options;\n this._multiple = multiple;\n this._isLoading = isLoading;\n this._isOnDemand = isOnDemand;\n\n this.filterControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(500))\n .subscribe((value) => {\n this._autofill.set(null);\n this._filter.set(value);\n this._requestOptionsParams.update(() => ({\n filter: value,\n internalFilter: this._internalFilter(),\n autofill: null,\n }));\n });\n\n this._control.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => this.selectOption(value));\n }\n\n clear(event: MouseEvent) {\n event.preventDefault();\n this._control?.setValue(null);\n this._currentValue.set(null);\n this.filterControl.setValue(null);\n }\n\n remove(event: MouseEvent, value: AutocompleteOptionValue) {\n event.preventDefault();\n if (!this._multiple) {\n return;\n }\n\n if (!this._control) {\n return;\n }\n\n const currentValue = this._control.value;\n\n this._control?.setValue(\n currentValue.filter((v: AutocompleteOptionValue) => v !== value)\n );\n }\n}\n","import {\n booleanAttribute,\n Component,\n effect,\n inject,\n Injector,\n input,\n isSignal,\n linkedSignal,\n OnInit,\n ResourceRef,\n runInInjectionContext,\n Signal,\n signal,\n} from '@angular/core';\nimport { Loader } from '@koalarx/ui/core/components/loader';\nimport { FieldErrors } from '@koalarx/ui/shared/components/field-errors';\nimport { InputFieldBase } from '@koalarx/ui/shared/components/input-field';\nimport { HookChange } from '@koalarx/ui/shared/directives';\nimport { isEmpty } from '@koalarx/ui/shared/utils';\nimport { Autocomplete } from './autocomplete';\nimport {\n AutocompleteDataOptions,\n AutocompleteDataOptionsFn,\n AutocompleteList,\n AutocompleteValue,\n} from './autocomplete-value';\n\ninterface OptionsResource {\n onDemand?: ResourceRef<AutocompleteList>;\n onServer?: ResourceRef<AutocompleteList>;\n inMemory?: AutocompleteList;\n inMemoryWithLoading?: Signal<AutocompleteList>;\n}\n\n@Component({\n selector: 'kl-autocomplete-field',\n templateUrl: './autocomplete-field.html',\n providers: [Autocomplete, AutocompleteValue],\n imports: [Loader, FieldErrors, HookChange],\n})\nexport class AutocompleteField extends InputFieldBase implements OnInit {\n private readonly injector = inject(Injector);\n\n readonly autocompleteValue = inject(AutocompleteValue);\n readonly autocomplete = inject(Autocomplete);\n\n readonly options = input.required<AutocompleteDataOptions>();\n readonly multiple = input(false, { transform: booleanAttribute });\n readonly placeholderSearchField = input<string>();\n readonly disableAutoTypeConversion = input(false, {\n transform: booleanAttribute,\n });\n\n readonly isLoading = signal<boolean>(false);\n readonly optionList = signal<AutocompleteList>([]);\n\n readonly optionsResource = signal<OptionsResource | null>(null);\n readonly isOnDemand = linkedSignal(\n () => this.optionsResource()?.onDemand !== undefined\n );\n\n constructor() {\n super();\n\n effect(() => {\n const optionList = this.optionList();\n const autofill = this.autocompleteValue.autofill();\n\n if (optionList.length > 0 && !isEmpty(autofill)) {\n this.autocompleteValue.makeAutofill();\n }\n });\n\n effect(() => {\n const options = this.optionsResource();\n\n if (!options) {\n return;\n }\n\n const { onDemand, onServer, inMemory, inMemoryWithLoading } = options;\n\n if (onDemand) {\n this.optionList.set(onDemand.value());\n this.isLoading.set(onDemand.isLoading());\n } else if (onServer) {\n this.optionList.set(this.applyFilter(onServer.value()));\n this.isLoading.set(onServer.isLoading());\n } else if (inMemory) {\n this.optionList.set(this.applyFilter(inMemory));\n this.isLoading.set(false);\n } else if (inMemoryWithLoading) {\n const optionsWithLoading = inMemoryWithLoading();\n this.optionList.set(this.applyFilter(optionsWithLoading ?? []));\n this.isLoading.set(!optionsWithLoading);\n }\n });\n }\n\n private applyFilter(options: AutocompleteList) {\n const filter = this.autocompleteValue.filter() ?? '';\n return options.filter((option) =>\n option.label.toLowerCase().includes(filter.toLowerCase())\n );\n }\n\n private generateOptionsResource(): OptionsResource {\n const options = this.options();\n\n if (Object.hasOwn(options, 'value')) {\n return { onServer: options as ResourceRef<AutocompleteList> };\n } else if (isSignal(options)) {\n return {\n inMemoryWithLoading: options as Signal<AutocompleteList>,\n };\n } else if (typeof options === 'function') {\n const resourceFnOptions = options as AutocompleteDataOptionsFn;\n return {\n onDemand: runInInjectionContext(this.injector, () =>\n resourceFnOptions(this.autocompleteValue.requestOptionsParams)\n ),\n };\n }\n\n return { inMemory: options as AutocompleteList };\n }\n\n open() {\n this.autocomplete.open({\n fieldId: this.fieldId,\n options: this.optionList,\n control: this.control(),\n multiple: this.multiple(),\n autocompleteValue: this.autocompleteValue,\n placeholderSearchField: this.placeholderSearchField(),\n disableAutoTypeConversion: this.disableAutoTypeConversion(),\n });\n }\n\n ngOnInit(): void {\n this.autocompleteValue.init(\n this.control(),\n this.optionList,\n this.isLoading,\n this.isOnDemand,\n this.multiple()\n );\n this.optionsResource.set(this.generateOptionsResource());\n this.autocompleteValue.makeAutofill();\n }\n}\n","<button class=\"relative select hover:cursor-default bg-base-100 w-full min-h-10 h-full flex items-center justify-between flex-nowrap\"\n [class.has-value]=\"autocompleteValue.hasValue()\"\n type=\"button\"\n tabindex=\"0\"\n [id]=\"fieldId\"\n [disabled]=\"isDisabled() || isLoading()\"\n (focus)=\"control().markAsTouched()\"\n (click)=\"open()\">\n\n @if (label(); as label) {\n <span class=\"autocomplete-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\">\n <span>{{label}} {{ isRequired() ? '*' : '' }}</span>\n </span>\n }\n\n <div class=\"flex flex-wrap gap-1 pt-3 pb-2 items-center w-full h-full selected-options\"\n [hookChange]=\"!isLoading() && (autocompleteValue.filter() || autocompleteValue.currentValue())\"\n [class.hidden]=\"!autocompleteValue.hasValue()\">\n @if (multiple()) {\n @for (item of autocompleteValue.selectedOptions(); track $index) {\n <span class=\"flex items-center badge badge-primary badge-sm rounded-sm\">\n <span>{{item.label}}</span>\n <i class=\"fa-solid fa-xmark text-neutral-400 hover:cursor-pointer\"\n (click)=\"autocompleteValue.remove($event, item.value)\">\n </i>\n </span>\n }\n } @else {\n {{autocompleteValue.selectedOption()?.label}}\n }\n </div>\n\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (autocompleteValue.hasValue()) {\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer pt-1 pr-2\"\n (click)=\"autocompleteValue.clear($event)\">\n </i>\n }\n</button>\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAUa,sBAAsB,GAAG,IAAI,cAAc,CACtD,sBAAsB;MAIX,eAAe,CAAA;AACT,IAAA,MAAM,GAAG,MAAM,CAAiB,oBAAoB,CAAC;AACrD,IAAA,YAAY,GAAG,MAAM,CACpC,sBAAsB,CACvB;IAED,KAAK,GAAA;QACH,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;AACtD,SAAC,CAAC;;uGAVO,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAf,eAAe,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCWY,mBAAmB,CAAA;AACb,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,gBAAgB,GAC/B,MAAM,CAAmB,gBAAgB,CAAC;IACpC,SAAS,GAAG,IAAI;AAExB,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAU;AAClC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAA4B;AACpD,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAe;AACvC,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAW;AACpC,IAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,4DAAqB;IACvD,sBAAsB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAsB;AACpD,IAAA,yBAAyB,GAAG,KAAK,CAAC,KAAK,6DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AACzE,IAAA,IAAI,GAAG,YAAY,CAAC,MAAK;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAChC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAC,CAAC;AAEF,IAAA,aAAa,GAAG,MAAM,CAAC,CAAC,yDAAC;AAEzB,IAAA,cAAc,GAAG,SAAS,CAA+B,aAAa,0DAAC;AAEvE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,EAAE;AAE1D,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB;;YAGF,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAChC,IAAI,CAAC,KAAK,EAAE;;AAEhB,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAChC,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;;AAE7B,SAAC,CAAC;;IAGI,oBAAoB,CAAC,YAA2B,MAAM,EAAA;QAC5D,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CACvD,oCAAoC,CACnB;YACrB,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,aAAa,CACzD,cAAc,CACG;YAEnB,IAAI,oBAAoB,EAAE;gBACxB,gBAAgB,CAAC,QAAQ,CAAC;oBACxB,GAAG,EACD,SAAS,KAAK;0BACV,gBAAgB,CAAC,SAAS;AAC1B,4BAAA,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;0BAC7C,gBAAgB,CAAC,SAAS;AAC1B,4BAAA,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAC1D,iBAAA,CAAC;;AAEN,SAAC,CAAC;;AAGI,IAAA,SAAS,GAAG,CAAC,KAAoB,KAAI;AAC3C,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAClC,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;wBACvC,OAAO,KAAK,GAAG,CAAC;;AAElB,oBAAA,OAAO,KAAK;AACd,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACjC;;YAEF,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAClC,oBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,OAAO,KAAK,GAAG,CAAC;;AAElB,oBAAA,OAAO,KAAK;AACd,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC/B;;;AAGN,KAAC;AAEO,IAAA,OAAO,GAAG,CAAC,KAAoB,KAAI;QACzC,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa;AAE7C,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,OAAO,EAAE;gBACZ,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;AAEtB,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBAE5D,IAAI,aAAa,EAAE;oBACjB;yBACG,gBAAgB,CAAmB,OAAO;AAC1C,yBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;AAC7B,yBAAA,KAAK,EAAE;;gBAEZ;;YAEF,KAAK,QAAQ,EAAE;gBACb,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,CAAC,KAAK,EAAE;gBACZ;;;AAGN,KAAC;AAEO,IAAA,OAAO,GAAG,CAAC,KAAiB,KAAI;QACtC,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;QAEnE,IAAI,CAAC,WAAW,EAAE;YAChB,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;;AAEhB,KAAC;AAEO,IAAA,QAAQ,GAAG,CAAC,KAAY,KAAI;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CACzE,oCAAoC,CACrC;AACD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;AAEnC,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,EAAE;;AAEhB,KAAC;IAEO,KAAK,GAAA;AACX,QAAA,IACE,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,KAAK;YAC5C,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,EACtC;YACA,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;;AAGhD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;IAG9B,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACnD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;QACvD,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;;IAG3D,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QAE5C,UAAU,CAAC,MAAK;YACd,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAChD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;YACpD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAChD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvD,EAAE,GAAG,CAAC;;AAGT,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAE/C,QAAA,IAAI,KAAK,GAAoB,MAAM,CAAC,KAAK;QAEzC,IACE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAY,CAAC,CAAC;AACrC,YAAA,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,CAAC,IAAI,CAAC,yBAAyB,EAAE,EACjC;AACA,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;AAGvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO;YAE5B,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK;YAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAChC,gBAAA,YAAY,GAAG,CAAC,YAAY,CAAC;;YAG/B,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC,CAAC;;iBAC5C;gBACL,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;;aAElE;YACL,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;;;uGAjNvB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBhC,69CAuCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhBY,mBAAmB,EAAA,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,CAAA,EAAA,CAAA;;2FAElB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAE1B,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,69CAAA,EAAA;;;MECnB,oBAAoB,GAAG,IAAI,cAAc,CAAC,oBAAoB;MAa9D,YAAY,CAAA;AACN,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE/C,iBAAiB,GAAA;AACvB,QAAA,IAAI,SAAiB;AAErB,QAAA,GAAG;AACD,YAAA,SAAS,GAAG,YAAY,CAAC,EAAE,EAAE;AAC3B,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,iBAAiB,EAAE,KAAK;AACzB,aAAA,CAAC;AACJ,SAAC,QAAQ,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;AAE3C,QAAA,OAAO,SAAS;;AAGV,IAAA,iBAAiB,CAAC,SAAyB,EAAA;AACjD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC7C,aAAA,aAA4B;AAC/B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;AACjC,QAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,qBAAqB,EAAE;QAC1D,MAAM,gBAAgB,GAAG,SAAS,CAAC,aAAa,CAC9C,oCAAoC,CACrC;QACD,MAAM,eAAe,GAAG,SAAS,EAAE,aAAa,CAC9C,yBAAyB,CAC1B;QACD,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC;QAEtE,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY;YAC/C,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,GAAG;AAC3C,YAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM;YACzB,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;AAEzC,YAAA,IAAI,MAAM,GAAG,SAAS,EAAE;gBACtB,MAAM,GAAG,SAAS;;YAGpB,MAAM,mBAAmB,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,YAAY;AAEzD,YAAA,IAAI,mBAAmB,IAAI,EAAE,EAAE;AAC7B,gBAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE,YAAY,IAAI,CAAC;AACzD,gBAAA,MAAM,aAAa,GAAG,aAAa,GAAG,qBAAqB;gBAE3D,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,IAAI,SAAS,EAAE;oBACnD,MAAM,GAAG,aAAa;;qBACjB;AACL,oBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAE/D,oBAAA,IAAI,MAAM,GAAG,SAAS,EAAE;wBACtB,MAAM,GAAG,SAAS;;;AAItB,gBAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,MAAM;;YAG7B,GAAG,IAAI,UAAU;YAEjB,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,IAAI;YAChC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,MAAM,IAAI;AAEzC,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;;AAGpE,QAAA,OAAO,IAAI;;AAGL,IAAA,MAAM,oBAAoB,CAChC,aAAgC,EAChC,OAAe,EAAA;QAEf,MAAM,SAAS,GAAG,EAAE;QAEpB,IAAI,YAAY,GAAG,CAAC;QAEpB,OAAO,aAAa,CAAC,QAAQ,IAAI,YAAY,IAAI,OAAO,EAAE;AACxD,YAAA,MAAM,KAAK,CAAC,SAAS,CAAC;YACtB,YAAY,IAAI,SAAS;;;IAIrB,MAAM,gBAAgB,CAAC,SAAyB,EAAA;AACtD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC7C,aAAA,aAA4B;QAC/B,MAAM,uBAAuB,GAC3B,iBAAiB,CAAC,aAAa,CAAoB,QAAQ,CAAC;QAE9D,IAAI,uBAAuB,EAAE;YAC3B,MAAM,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,IAAI,CAAC;;QAGhE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAElD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ;AAEhC,YAAA,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACrC,YAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;YAChC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,IAAI;YAClC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,IAAI;AACpC,YAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAC/B,YAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAC7B,YAAA,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACnC,YAAA,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,sBAAsB;YAEnD,MAAM,eAAe,GACnB,iBAAiB,CAAC,aAAa,CAAiB,mBAAmB,CAAC;YAEtE,IAAI,eAAe,EAAE;AACnB,gBAAA,eAAe,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;;;;IAKvE,MAAM,IAAI,CAAC,IAA0B,EAAA;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CACjC,gCAAgC,CACjC;QAED,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC1C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAEjE,YAAA,SAAS,CAAC,EAAE,GAAG,SAAS;AAExB,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAEtC,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,mBAAmB,EAAE;gBACxD,mBAAmB,EAAE,IAAI,CAAC,QAAQ;AAClC,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC/B,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;AACxD,wBAAA;AACE,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,QAAQ,EAAE,MAAM,YAAY;AAC7B,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,eAAe;AACxB,4BAAA,IAAI,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;AACrD,yBAAA;AACF,qBAAA;iBACF,CAAC;AACF,gBAAA,QAAQ,EAAE;oBACR,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAC3B,YAAY,CAAC,GAAG,EAAE,MAAO,IAAY,CAAC,GAAG,CAAC,CAAC,CAC5C;AACF,iBAAA;AACF,aAAA,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AAE7C,YAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAE9C,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;;;uGAhK1B,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAZ,YAAY,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;MC7BY,mBAAmB,CAAA;AAC9B,IAAA,QAAQ,CAAC,MAAiC,EAAA;AACxC,QAAA,OAAO,MAAM;;AAGf,IAAA,QAAQ,CAAC,MAAqC,EAAA;AAC5C,QAAA,OAAO,MAAM;;AAGf,IAAA,QAAQ,CAAC,MAAwB,EAAA;AAC/B,QAAA,OAAO,MAAM;;AAGf,IAAA,mBAAmB,CAAC,MAAgC,EAAA;AAClD,QAAA,OAAO,MAAM;;uGAdJ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCoCrB,iBAAiB,CAAA;AACX,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,OAAO,GAAG,MAAM,CAAgB,EAAE,mDAAC;AAC5C,IAAA,QAAQ;AACC,IAAA,aAAa,GAAG,MAAM,CAErC,IAAI,yDAAC;IACC,SAAS,GAAG,KAAK;AACjB,IAAA,QAAQ;AACR,IAAA,SAAS,GAAG,MAAM,CAAa,IAAI,qDAAC;AACpC,IAAA,UAAU;AACV,IAAA,eAAe,GAAG,MAAM,CAAgB,IAAI,2DAAC;AAC7C,IAAA,WAAW;IACF,qBAAqB,GACpC,MAAM,CAAkC;AACtC,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEa,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AAEzC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,YAAY;AACrB,KAAC,2DAAC;AAEe,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AAEzC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/B,YAAA,OAAO,YAAY;;AAGrB,QAAA,OAAO,EAAE;AACX,KAAC,4DAAC;AAEe,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY;AACtC,cAAE;AACF,cAAE,YAAY,EAAE,KAAK;AAEvB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;;AAClB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,OAAO,KAAK,IAAI,CAAC;;QAGnB,OAAO,CAAC,CAAC,KAAK;AAChB,KAAC,qDAAC;AAEF,IAAA,aAAa,GAAG,IAAI,WAAW,CAAgB,EAAE,CAAC;AAElD,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;;AAGlC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;;AAGxC,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;;AAG7B,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;;AAGpC,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE;;IAGhD,IAAI,cAAc,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO;AACvC,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACpE,YAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;;AAGL,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;AAEtB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;;AAG9B,IAAA,oBAAoB,CAC1B,OAAkD,EAAA;AAElD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,QACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBACvB,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM;gBACjD,OAAO,CAAC,IAAI,CACV,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CACnE;;QAIL,QACE,CAAC,OAAO;YACP,OAA8B,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK;;IAInE,MAAM,YAAY,CAAC,KAAU,EAAA;AACnC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5B;;AAGF,QAAA,OAAO,IAAI,CAAC,UAAW,EAAE,EAAE;AACzB,YAAA,MAAM,KAAK,CAAC,GAAG,CAAC;;AAGlB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;;AAGF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;cACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAA,EAAG,KAAK,CAAA,CAAE,EAAE,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,CAAE,CAAC;cACrE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,CAAE,KAAK,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC;AAEjE,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAY,EAAE,EAAE;YACtD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO;AACvC,gBAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,KAAK,CAAC,GAAG,CAAC;AAEhB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAExB;;QAGF,IAAI,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAK;AAC7B,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,wBAAA,OAAO,OAAO;;oBAGhB,OAAO,CAAC,OAAO,CAAC;;AAGlB,gBAAA,OAAO,OAAO;AAChB,aAAC,CAAC;;;AAIN,IAAA,MAAM,YAAY,GAAA;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,UAAW,EAAE,EAAE;AACzB,gBAAA,MAAM,KAAK,CAAC,GAAG,CAAC;;YAGlB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;AAEvC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;YAEzC,IACE,CAAC,IAAI,CAAC,SAAS;AACb,iBAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;AACxD,oBAAA,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;iBAChC,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,EAC1C;gBACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;gBACxC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM;AAC7C,oBAAA,GAAG,MAAM;AACT,oBAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,oBAAA,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE;AAC3B,iBAAA,CAAC,CAAC;;;;IAKT,IAAI,CACF,OAAyB,EACzB,OAAiC,EACjC,SAA0B,EAC1B,UAAmC,EACnC,QAAQ,GAAG,KAAK,EAAA;AAEhB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAE7B,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAC3D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO;AACvC,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;QAEJ,IAAI,CAAC,QAAQ,CAAC;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAGnD,IAAA,KAAK,CAAC,KAAiB,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;;IAGnC,MAAM,CAAC,KAAiB,EAAE,KAA8B,EAAA;QACtD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;AAExC,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CACrB,YAAY,CAAC,MAAM,CAAC,CAAC,CAA0B,KAAK,CAAC,KAAK,KAAK,CAAC,CACjE;;uGAlPQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACAK,MAAO,iBAAkB,SAAQ,cAAc,CAAA;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEnC,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEnC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAA2B;AACnD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;IACxD,sBAAsB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACxC,yBAAyB,GAAG,KAAK,CAAC,KAAK,6DAC9C,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADqB;AAChD,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;AAEO,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,UAAU,GAAG,MAAM,CAAmB,EAAE,sDAAC;AAEzC,IAAA,eAAe,GAAG,MAAM,CAAyB,IAAI,2DAAC;AACtD,IAAA,UAAU,GAAG,YAAY,CAChC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,KAAK,SAAS,CACrD;AAED,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAEP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAElD,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAEzC,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;YAEtC,IAAI,CAAC,OAAO,EAAE;gBACZ;;YAGF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO;YAErE,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;;iBACnC,IAAI,QAAQ,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;;iBACnC,IAAI,QAAQ,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;iBACpB,IAAI,mBAAmB,EAAE;AAC9B,gBAAA,MAAM,kBAAkB,GAAG,mBAAmB,EAAE;AAChD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC;;AAE3C,SAAC,CAAC;;AAGI,IAAA,WAAW,CAAC,OAAyB,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE;QACpD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAC3B,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAC1D;;IAGK,uBAAuB,GAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAE9B,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;AACnC,YAAA,OAAO,EAAE,QAAQ,EAAE,OAAwC,EAAE;;AACxD,aAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO;AACL,gBAAA,mBAAmB,EAAE,OAAmC;aACzD;;AACI,aAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACxC,MAAM,iBAAiB,GAAG,OAAoC;YAC9D,OAAO;AACL,gBAAA,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAC7C,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAC/D;aACF;;AAGH,QAAA,OAAO,EAAE,QAAQ,EAAE,OAA2B,EAAE;;IAGlD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,UAAU;AACxB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,YAAA,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE;AACrD,YAAA,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AAC5D,SAAA,CAAC;;IAGJ,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACzB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EAAE,CAChB;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;uGA5G5B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAHjB,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC9C,8tDA8CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPY,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,+EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE9B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,SAAA,EAEtB,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,OAAA,EACnC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAA,QAAA,EAAA,8tDAAA,EAAA;;;AEvC5C;;AAEG;;;;"}
1
+ {"version":3,"file":"koalarx-ui-shared-components-input-field-autocomplete.mjs","sources":["../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-ref.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-options.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-options.html","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-builder.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-value.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-field.ts","../../projects/koala-ui/shared/components/input-field/autocomplete/autocomplete-field.html","../../projects/koala-ui/shared/components/input-field/autocomplete/koalarx-ui-shared-components-input-field-autocomplete.ts"],"sourcesContent":["import {\n ApplicationRef,\n ComponentRef,\n inject,\n Injectable,\n InjectionToken,\n Type,\n} from '@angular/core';\nimport { AUTOCOMPLETE_APP_REF } from './autocomplete';\n\nexport const AUTOCOMPLETE_REF_TOKEN = new InjectionToken(\n 'AutocompleteRefToken'\n);\n\n@Injectable()\nexport class AutocompleteRef {\n private readonly appRef = inject<ApplicationRef>(AUTOCOMPLETE_APP_REF);\n private readonly componentRef = inject<() => ComponentRef<Type<any>>>(\n AUTOCOMPLETE_REF_TOKEN\n );\n\n close() {\n setTimeout(() => {\n this.componentRef().destroy();\n this.appRef.detachView(this.componentRef().hostView);\n });\n }\n}\n","import {\n booleanAttribute,\n Component,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n OnDestroy,\n OnInit,\n Signal,\n signal,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { AutocompleteRef } from './autocomplete-ref';\nimport { AutocompleteList, AutocompleteValue } from './autocomplete-value';\nimport { KlArray } from '@koalarx/utils/KlArray';\n\n@Component({\n selector: 'kl-autocomplete-options',\n templateUrl: './autocomplete-options.html',\n imports: [ReactiveFormsModule],\n})\nexport class AutocompleteOptions implements OnInit, OnDestroy {\n private readonly autocompleteRef = inject(AutocompleteRef);\n private readonly viewContainerRef =\n inject<ViewContainerRef>(ViewContainerRef);\n private firstLoad = true;\n\n fieldId = input.required<string>();\n options = input.required<Signal<AutocompleteList>>();\n control = input.required<FormControl>();\n multiple = input.required<boolean>();\n autocompleteValue = input.required<AutocompleteValue>();\n placeholderSearchField = input<string | undefined>();\n disableAutoTypeConversion = input(false, { transform: booleanAttribute });\n list = linkedSignal(() => {\n const options = this.options()();\n return new KlArray(options).split(100)[0];\n });\n\n optionFocused = signal(0);\n\n searchInputRef = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n constructor() {\n effect(() => {\n const hasValue = !!this.autocompleteValue().currentValue();\n\n if (this.firstLoad) {\n this.firstLoad = false;\n return;\n }\n\n if (hasValue && !this.multiple()) {\n this.close();\n }\n });\n\n effect(() => {\n const options = this.options()();\n if (options.length > 0) {\n this.optionFocused.set(0);\n }\n });\n }\n\n private updateScrollPosition(direction: 'down' | 'up' = 'down') {\n setTimeout(() => {\n const containerElement =\n this.viewContainerRef.element.nativeElement.querySelector(\n '.kl-autocomplete-options-container'\n ) as HTMLDivElement;\n const focusedOptionElement = containerElement.querySelector(\n 'label.active'\n ) as HTMLDivElement;\n\n if (focusedOptionElement) {\n containerElement.scrollTo({\n top:\n direction === 'down'\n ? containerElement.scrollTop +\n focusedOptionElement.getBoundingClientRect().height\n : containerElement.scrollTop -\n focusedOptionElement.getBoundingClientRect().height,\n });\n }\n });\n }\n\n private onKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowDown': {\n event.stopPropagation();\n event.preventDefault();\n\n this.optionFocused.update((value) => {\n if (value < this.options()().length - 1) {\n return value + 1;\n }\n return value;\n });\n this.updateScrollPosition('down');\n break;\n }\n case 'ArrowUp': {\n event.stopPropagation();\n event.preventDefault();\n\n this.optionFocused.update((value) => {\n if (value > 0) {\n return value - 1;\n }\n return value;\n });\n this.updateScrollPosition('up');\n break;\n }\n }\n };\n\n private onKeyup = (event: KeyboardEvent) => {\n const containerElement: HTMLDivElement =\n this.viewContainerRef.element.nativeElement;\n\n switch (event.key) {\n case 'Enter': {\n event.stopPropagation();\n event.preventDefault();\n\n const focusedOption = this.options()()[this.optionFocused()];\n\n if (focusedOption) {\n containerElement\n .querySelectorAll<HTMLInputElement>('input')\n .item(this.optionFocused() + 1)\n .click();\n }\n break;\n }\n case 'Escape': {\n event.stopPropagation();\n event.preventDefault();\n\n this.close();\n break;\n }\n }\n };\n\n private onClick = (event: MouseEvent) => {\n const containerElement: HTMLDivElement =\n this.viewContainerRef.element.nativeElement;\n const insideClick = containerElement.contains(event.target as Node);\n\n if (!insideClick) {\n event.stopPropagation();\n event.preventDefault();\n this.close();\n }\n };\n\n private onScroll = (event: Event) => {\n const container = this.viewContainerRef.element.nativeElement.querySelector(\n '.kl-autocomplete-options-container'\n );\n const target = event.target as HTMLElement;\n\n if (!container || !target.tagName) return;\n\n if (target !== container) {\n this.close();\n }\n };\n\n private close() {\n if (\n this.autocompleteValue().filterControl.value &&\n !this.autocompleteValue().isOnDemand()\n ) {\n this.autocompleteValue().filterControl.reset();\n }\n\n this.autocompleteRef.close();\n }\n\n ngOnDestroy() {\n document.removeEventListener('keyup', this.onKeyup);\n document.removeEventListener('keydown', this.onKeyDown);\n document.removeEventListener('click', this.onClick);\n window.removeEventListener('scroll', this.onScroll, true);\n }\n\n ngOnInit() {\n this.searchInputRef()?.nativeElement.focus();\n\n setTimeout(() => {\n document.addEventListener('keyup', this.onKeyup);\n document.addEventListener('keydown', this.onKeyDown);\n document.addEventListener('click', this.onClick);\n window.addEventListener('scroll', this.onScroll, true);\n }, 150);\n }\n\n setValue(event: Event) {\n const target = event.target as HTMLInputElement;\n\n let value: string | number = target.value;\n\n if (\n !Number.isNaN(parseInt(value as any)) &&\n !/^0+[1-9]\\d*$/.test(value) &&\n !this.disableAutoTypeConversion()\n ) {\n value = Number(value);\n }\n\n if (this.multiple()) {\n const check = target.checked;\n\n let currentValue = this.control().value;\n\n if (!Array.isArray(currentValue)) {\n currentValue = [currentValue];\n }\n\n if (check) {\n this.control().setValue([...currentValue, value]);\n } else {\n this.control().setValue(currentValue.filter((v: any) => v !== value));\n }\n } else {\n this.control().setValue(value);\n }\n }\n}\n","<div class=\"bg-base-300 overflow-hidden shadow border border-neutral-200 dark:border-neutral-700 rounded-lg flex flex-col w-full\"\n [attr.aria-labelledby]=\"fieldId()\">\n\n <div class=\"kl-autocomplete-filter border-b border-neutral-200 dark:border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none placeholder:opacity-60\"\n #searchInput\n type=\"search\"\n [formControl]=\"autocompleteValue().filterControl\"\n placeholder=\"Type to Search...\"\n />\n </label>\n </div>\n\n <div class=\"kl-autocomplete-options-container flex flex-col overflow-auto p-1\">\n @for (item of list(); track $index) {\n @let optionLabelId = fieldId() + '-' + item.value;\n\n <label class=\"relative py-1 px-2 pr-8 rounded-md\"\n [attr.for]=\"optionLabelId\"\n [class.active]=\"$index === optionFocused()\"\n (mouseover)=\"optionFocused.set($index)\">\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId()\"\n [attr.value]=\"item.value\"\n [checked]=\"multiple()\n ? control().value?.includes(item.value)\n : item.value === control().value\"\n (change)=\"setValue($event)\"\n />\n {{item.label}}\n </label>\n }\n </div>\n</div>\n","import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n inputBinding,\n Signal,\n ViewContainerRef,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { GENERIC_COMPONENT_CONTAINER_NAME } from '@koalarx/ui/core/config';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { randomString } from '@koalarx/utils/KlString';\nimport { AutocompleteOptions } from './autocomplete-options';\nimport { AUTOCOMPLETE_REF_TOKEN, AutocompleteRef } from './autocomplete-ref';\nimport { AutocompleteList, AutocompleteValue } from './autocomplete-value';\n\nexport type AutocompleteAfterCloseTrigger = string | Record<string, any>;\nexport type AutocompleteAfterCloseTriggerFn = (\n trigger: AutocompleteAfterCloseTrigger\n) => void;\nexport const AUTOCOMPLETE_APP_REF = new InjectionToken('AutocompleteAppRef');\n\nexport interface AutocompleteOpenData {\n fieldId: string;\n options: Signal<AutocompleteList>;\n control: FormControl<any>;\n multiple: boolean;\n autocompleteValue: AutocompleteValue;\n placeholderSearchField?: string;\n disableAutoTypeConversion?: boolean;\n}\n\n@Injectable()\nexport class Autocomplete {\n private readonly appRef = inject(ApplicationRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(EnvironmentInjector);\n\n private generateElementId() {\n let elementId: string;\n\n do {\n elementId = randomString(50, {\n numbers: false,\n lowercase: true,\n uppercase: true,\n specialCharacters: false,\n });\n } while (document.getElementById(elementId));\n\n return elementId;\n }\n\n private calculatePosition(container: HTMLDivElement) {\n const autocompleteField = this.viewContainerRef.element\n .nativeElement as HTMLElement;\n const currentTop = window.scrollY;\n const position = autocompleteField.getBoundingClientRect();\n const optionsContainer = container.querySelector<HTMLDivElement>(\n '.kl-autocomplete-options-container'\n );\n const filterContainer = container?.querySelector<HTMLDivElement>(\n '.kl-autocomplete-filter'\n );\n const filterContainerHeight = (filterContainer?.clientHeight || 0) + 2;\n\n if (position) {\n const screenHeight = document.body.clientHeight;\n const maxHeight = (screenHeight * 40) / 100;\n let top = position.bottom;\n let height = Math.abs(screenHeight - top);\n\n if (height > maxHeight) {\n height = maxHeight;\n }\n\n const percentFillOnScreen = (height * 100) / screenHeight;\n\n if (percentFillOnScreen <= 20) {\n const optionsHeight = optionsContainer?.scrollHeight || 0;\n const currentHeight = optionsHeight + filterContainerHeight;\n\n if (optionsHeight > 0 && currentHeight <= maxHeight) {\n height = currentHeight;\n } else {\n height = Math.abs(screenHeight - (screenHeight - position.top));\n\n if (height > maxHeight) {\n height = maxHeight;\n }\n }\n\n top = position.top - height;\n }\n\n top += currentTop;\n\n container.style.top = `${top}px`;\n container.style.maxHeight = `${height}px`;\n\n return { top, left: position.left, width: position.width, height };\n }\n\n return null;\n }\n\n private async waitForButtonEnabled(\n buttonElement: HTMLButtonElement,\n timeout: number\n ) {\n const delayTime = 50;\n\n let ellapsedTime = 0;\n\n while (buttonElement.disabled && ellapsedTime <= timeout) {\n await delay(delayTime);\n ellapsedTime += delayTime;\n }\n }\n\n private async positionOnScreen(container: HTMLDivElement) {\n const autocompleteField = this.viewContainerRef.element\n .nativeElement as HTMLElement;\n const autocompleteFieldButton =\n autocompleteField.querySelector<HTMLButtonElement>('button');\n\n if (autocompleteFieldButton) {\n await this.waitForButtonEnabled(autocompleteFieldButton, 5000);\n }\n\n const position = this.calculatePosition(container);\n\n if (position) {\n const { left, width } = position;\n\n container.style.position = 'absolute';\n container.style.display = 'flex';\n container.style.left = `${left}px`;\n container.style.width = `${width}px`;\n container.style.height = `auto`;\n container.style.zIndex = '99';\n container.style.overflow = 'hidden';\n container.style.transition = 'all 0.1s ease-in-out';\n\n const selectedOptions =\n autocompleteField.querySelector<HTMLDivElement>('.selected-options');\n\n if (selectedOptions) {\n selectedOptions.onchange = () => this.positionOnScreen(container);\n }\n }\n }\n\n async open(data: AutocompleteOpenData) {\n const main = document.querySelector<HTMLElement>(\n GENERIC_COMPONENT_CONTAINER_NAME\n );\n\n if (main) {\n const elementId = this.generateElementId();\n const container = main.appendChild(document.createElement('div'));\n\n container.id = elementId;\n\n await this.positionOnScreen(container);\n\n const componentRef = createComponent(AutocompleteOptions, {\n environmentInjector: this.injector,\n hostElement: container,\n elementInjector: Injector.create({\n providers: [\n { provide: AUTOCOMPLETE_APP_REF, useValue: this.appRef },\n {\n provide: AUTOCOMPLETE_REF_TOKEN,\n useValue: () => componentRef,\n },\n {\n provide: AutocompleteRef,\n deps: [AUTOCOMPLETE_APP_REF, AUTOCOMPLETE_REF_TOKEN],\n },\n ],\n }),\n bindings: [\n ...Object.keys(data).map((key) =>\n inputBinding(key, () => (data as any)[key])\n ),\n ],\n });\n\n this.appRef.attachView(componentRef.hostView);\n\n componentRef.changeDetectorRef.detectChanges();\n\n this.calculatePosition(container);\n }\n }\n}\n","import { Injectable, ResourceRef, Signal } from '@angular/core';\nimport {\n AutocompleteDataOptionsFn,\n AutocompleteList,\n} from './autocomplete-value';\n\n@Injectable({ providedIn: 'root' })\nexport class AutocompleteBuilder {\n onDemand(config: AutocompleteDataOptionsFn) {\n return config;\n }\n\n onServer(config: ResourceRef<AutocompleteList>) {\n return config;\n }\n\n inMemory(config: AutocompleteList) {\n return config;\n }\n\n inMemoryWithLoading(config: Signal<AutocompleteList>) {\n return config;\n }\n}\n","import {\n computed,\n DestroyRef,\n inject,\n Injectable,\n ResourceRef,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport { isEmpty } from '@koalarx/ui/shared/utils';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\n\nexport type AutocompleteOptionValue = string | number | null;\n\nexport interface AutocompleteOption<TData = any> {\n label: string;\n value: AutocompleteOptionValue;\n data?: TData;\n}\n\nexport type AutocompleteList = AutocompleteOption[];\nexport interface AutocompleteDataOptionsFnParams {\n filter?: string | null;\n autofill?: any | null;\n internalFilter?: string | null;\n}\n\nexport type AutocompleteDataOptionsFn = (\n data: Signal<AutocompleteDataOptionsFnParams>\n) => ResourceRef<AutocompleteList>;\n\nexport type AutocompleteDataOptions =\n | AutocompleteDataOptionsFn\n | ResourceRef<AutocompleteList>\n | Signal<AutocompleteList>\n | AutocompleteList;\n\n@Injectable()\nexport class AutocompleteValue {\n private readonly destroyRef = inject(DestroyRef);\n private readonly _filter = signal<string | null>('');\n private _control?: FormControl<any>;\n private readonly _currentValue = signal<\n AutocompleteOption | AutocompleteOption[] | null\n >(null);\n private _multiple = false;\n private _options?: Signal<AutocompleteList>;\n private _autofill = signal<any | null>(null);\n private _isLoading?: Signal<boolean>;\n private _internalFilter = signal<string | null>(null);\n private _isOnDemand?: WritableSignal<boolean>;\n private readonly _requestOptionsParams =\n signal<AutocompleteDataOptionsFnParams>({\n filter: null,\n autofill: null,\n });\n\n private readonly _selectedOption = computed(() => {\n const currentValue = this._currentValue();\n\n if (Array.isArray(currentValue)) {\n return null;\n }\n\n return currentValue;\n });\n\n private readonly _selectedOptions = computed(() => {\n const currentValue = this._currentValue();\n\n if (Array.isArray(currentValue)) {\n return currentValue;\n }\n\n return [];\n });\n\n private readonly _hasValue = computed(() => {\n const currentValue = this._currentValue();\n const value = Array.isArray(currentValue)\n ? currentValue\n : currentValue?.value;\n\n if (Array.isArray(value)) {\n return value.length > 0;\n } else if (typeof value === 'number') {\n return value >= 0;\n }\n\n return !!value;\n });\n\n filterControl = new FormControl<string | null>('');\n\n get filter() {\n return this._filter.asReadonly();\n }\n\n get hasValue() {\n return this._hasValue;\n }\n\n get currentValue() {\n return this._currentValue.asReadonly();\n }\n\n get selectedOption() {\n return this._selectedOption;\n }\n\n get selectedOptions() {\n return this._selectedOptions;\n }\n\n get autofill() {\n return this._autofill.asReadonly();\n }\n\n get requestOptionsParams() {\n return this._requestOptionsParams.asReadonly();\n }\n\n set internalFilter(value: string | null) {\n this._internalFilter.set(value);\n this._requestOptionsParams.update(() => ({\n filter: this.filterControl.enabled ? null : this.filterControl.value,\n internalFilter: this._internalFilter(),\n autofill: null,\n }));\n }\n\n get isOnDemand() {\n if (!this._isOnDemand) {\n return signal(false);\n }\n return this._isOnDemand.asReadonly();\n }\n\n private selectedOptionIsDiff(\n options: AutocompleteOption | AutocompleteOption[]\n ) {\n if (this._multiple) {\n return (\n !Array.isArray(options) ||\n options.length !== this._selectedOptions().length ||\n options.some(\n (opt, index) => opt.value !== this._selectedOptions()[index].value\n )\n );\n }\n\n return (\n !options ||\n (options as AutocompleteOption).value !== this._selectedOption()?.value\n );\n }\n\n private async selectOption(value: any, searchIfNotFound = true) {\n if (isEmpty(value)) {\n this._currentValue.set(null);\n return;\n }\n\n while (this._isLoading!()) {\n await delay(100);\n }\n\n if (!this._options) {\n return;\n }\n\n const options = this._multiple\n ? this._options()?.filter((opt) => `${value}`?.includes(`${opt.value}`))\n : this._options()?.find((opt) => `${opt.value}` === `${value}`);\n\n if (\n !isEmpty(value) &&\n !options &&\n this._isOnDemand!() &&\n searchIfNotFound\n ) {\n this._requestOptionsParams.update(() => ({\n internalFilter: this._internalFilter(),\n autofill: value,\n }));\n\n await delay(100);\n\n await this.selectOption(value, false);\n\n return;\n }\n\n if (options && this.selectedOptionIsDiff(options)) {\n this._currentValue.update(() => {\n if (this._multiple) {\n if (Array.isArray(options)) {\n return options;\n }\n\n return [options];\n }\n\n return options;\n });\n }\n }\n\n async makeAutofill() {\n const value = this._control?.value;\n\n if (isEmpty(value)) {\n return;\n }\n\n while (this._isLoading!()) {\n await delay(100);\n }\n\n await this.selectOption(value);\n }\n\n init(\n control: FormControl<any>,\n options: Signal<AutocompleteList>,\n isLoading: Signal<boolean>,\n isOnDemand: WritableSignal<boolean>,\n multiple = false\n ) {\n this._control = control;\n this._options = options;\n this._multiple = multiple;\n this._isLoading = isLoading;\n this._isOnDemand = isOnDemand;\n\n this.filterControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(500))\n .subscribe((value) => {\n this._autofill.set(null);\n this._filter.set(value);\n this._requestOptionsParams.update(() => ({\n filter: value,\n internalFilter: this._internalFilter(),\n autofill: null,\n }));\n });\n\n this._control.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => this.selectOption(value));\n }\n\n clear(event: MouseEvent) {\n event.preventDefault();\n this._control?.setValue(null);\n this._currentValue.set(null);\n this.filterControl.setValue(null);\n }\n\n remove(event: MouseEvent, value: AutocompleteOptionValue) {\n event.preventDefault();\n if (!this._multiple) {\n return;\n }\n\n if (!this._control) {\n return;\n }\n\n const currentValue = this._control.value;\n\n this._control?.setValue(\n currentValue.filter((v: AutocompleteOptionValue) => v !== value)\n );\n }\n}\n","import {\n booleanAttribute,\n Component,\n effect,\n inject,\n Injector,\n input,\n isSignal,\n linkedSignal,\n OnInit,\n ResourceRef,\n runInInjectionContext,\n Signal,\n signal,\n} from '@angular/core';\nimport { Loader } from '@koalarx/ui/core/components/loader';\nimport { FieldErrors } from '@koalarx/ui/shared/components/field-errors';\nimport { InputFieldBase } from '@koalarx/ui/shared/components/input-field';\nimport { HookChange } from '@koalarx/ui/shared/directives';\nimport { isEmpty } from '@koalarx/ui/shared/utils';\nimport { Autocomplete } from './autocomplete';\nimport {\n AutocompleteDataOptions,\n AutocompleteDataOptionsFn,\n AutocompleteList,\n AutocompleteValue,\n} from './autocomplete-value';\n\ninterface OptionsResource {\n onDemand?: ResourceRef<AutocompleteList>;\n onServer?: ResourceRef<AutocompleteList>;\n inMemory?: AutocompleteList;\n inMemoryWithLoading?: Signal<AutocompleteList>;\n}\n\n@Component({\n selector: 'kl-autocomplete-field',\n templateUrl: './autocomplete-field.html',\n providers: [Autocomplete, AutocompleteValue],\n imports: [Loader, FieldErrors, HookChange],\n})\nexport class AutocompleteField extends InputFieldBase implements OnInit {\n private readonly injector = inject(Injector);\n\n readonly autocompleteValue = inject(AutocompleteValue);\n readonly autocomplete = inject(Autocomplete);\n\n readonly options = input.required<AutocompleteDataOptions>();\n readonly multiple = input(false, { transform: booleanAttribute });\n readonly placeholderSearchField = input<string>();\n readonly disableAutoTypeConversion = input(false, {\n transform: booleanAttribute,\n });\n\n readonly isLoading = signal<boolean>(false);\n readonly optionList = signal<AutocompleteList>([]);\n\n readonly optionsResource = signal<OptionsResource | null>(null);\n readonly isOnDemand = linkedSignal(\n () => this.optionsResource()?.onDemand !== undefined\n );\n\n constructor() {\n super();\n\n effect(() => {\n const optionList = this.optionList();\n const autofill = this.autocompleteValue.autofill();\n\n if (optionList.length > 0 && !isEmpty(autofill)) {\n this.autocompleteValue.makeAutofill();\n }\n });\n\n effect(() => {\n const options = this.optionsResource();\n\n if (!options) {\n return;\n }\n\n const { onDemand, onServer, inMemory, inMemoryWithLoading } = options;\n\n if (onDemand) {\n this.optionList.set(onDemand.value());\n this.isLoading.set(onDemand.isLoading());\n } else if (onServer) {\n this.optionList.set(this.applyFilter(onServer.value()));\n this.isLoading.set(onServer.isLoading());\n } else if (inMemory) {\n this.optionList.set(this.applyFilter(inMemory));\n this.isLoading.set(false);\n } else if (inMemoryWithLoading) {\n const optionsWithLoading = inMemoryWithLoading();\n this.optionList.set(this.applyFilter(optionsWithLoading ?? []));\n this.isLoading.set(!optionsWithLoading);\n }\n });\n }\n\n private applyFilter(options: AutocompleteList) {\n const filter = this.autocompleteValue.filter() ?? '';\n return options.filter((option) =>\n option.label.toLowerCase().includes(filter.toLowerCase())\n );\n }\n\n private generateOptionsResource(): OptionsResource {\n const options = this.options();\n\n if (Object.hasOwn(options, 'value')) {\n return { onServer: options as ResourceRef<AutocompleteList> };\n } else if (isSignal(options)) {\n return {\n inMemoryWithLoading: options as Signal<AutocompleteList>,\n };\n } else if (typeof options === 'function') {\n const resourceFnOptions = options as AutocompleteDataOptionsFn;\n return {\n onDemand: runInInjectionContext(this.injector, () =>\n resourceFnOptions(this.autocompleteValue.requestOptionsParams)\n ),\n };\n }\n\n return { inMemory: options as AutocompleteList };\n }\n\n open() {\n this.autocomplete.open({\n fieldId: this.fieldId,\n options: this.optionList,\n control: this.control(),\n multiple: this.multiple(),\n autocompleteValue: this.autocompleteValue,\n placeholderSearchField: this.placeholderSearchField(),\n disableAutoTypeConversion: this.disableAutoTypeConversion(),\n });\n }\n\n ngOnInit(): void {\n this.autocompleteValue.init(\n this.control(),\n this.optionList,\n this.isLoading,\n this.isOnDemand,\n this.multiple()\n );\n this.optionsResource.set(this.generateOptionsResource());\n this.autocompleteValue.makeAutofill();\n }\n}\n","<button class=\"relative select hover:cursor-default bg-base-100 w-full min-h-10 h-full flex items-center justify-between flex-nowrap select-text\"\n [class.has-value]=\"autocompleteValue.hasValue()\"\n type=\"button\"\n tabindex=\"0\"\n [id]=\"fieldId\"\n [disabled]=\"isDisabled() || isLoading()\"\n (focus)=\"control().markAsTouched()\"\n (click)=\"open()\">\n\n @if (label(); as label) {\n <span class=\"autocomplete-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\">\n <span>{{label}} {{ isRequired() ? '*' : '' }}</span>\n </span>\n }\n\n <div class=\"flex flex-wrap gap-1 pt-3 pb-2 items-center w-full h-full selected-options\"\n [hookChange]=\"!isLoading() && (autocompleteValue.filter() || autocompleteValue.currentValue())\"\n [class.hidden]=\"!autocompleteValue.hasValue()\">\n @if (multiple()) {\n @for (item of autocompleteValue.selectedOptions(); track $index) {\n <span class=\"flex items-center badge badge-primary badge-sm rounded-sm\">\n <span>{{item.label}}</span>\n <i class=\"fa-solid fa-xmark text-neutral-400 hover:cursor-pointer\"\n (click)=\"autocompleteValue.remove($event, item.value)\">\n </i>\n </span>\n }\n } @else {\n {{autocompleteValue.selectedOption()?.label}}\n }\n </div>\n\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (autocompleteValue.hasValue()) {\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer pt-1 pr-2\"\n (click)=\"autocompleteValue.clear($event)\">\n </i>\n }\n</button>\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;MAUa,sBAAsB,GAAG,IAAI,cAAc,CACtD,sBAAsB;MAIX,eAAe,CAAA;AACT,IAAA,MAAM,GAAG,MAAM,CAAiB,oBAAoB,CAAC;AACrD,IAAA,YAAY,GAAG,MAAM,CACpC,sBAAsB,CACvB;IAED,KAAK,GAAA;QACH,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;AACtD,SAAC,CAAC;;uGAVO,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAf,eAAe,EAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCWY,mBAAmB,CAAA;AACb,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,gBAAgB,GAC/B,MAAM,CAAmB,gBAAgB,CAAC;IACpC,SAAS,GAAG,IAAI;AAExB,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAU;AAClC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAA4B;AACpD,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAe;AACvC,IAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAW;AACpC,IAAA,iBAAiB,GAAG,KAAK,CAAC,QAAQ,4DAAqB;IACvD,sBAAsB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAsB;AACpD,IAAA,yBAAyB,GAAG,KAAK,CAAC,KAAK,6DAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AACzE,IAAA,IAAI,GAAG,YAAY,CAAC,MAAK;AACvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAChC,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,KAAC,CAAC;AAEF,IAAA,aAAa,GAAG,MAAM,CAAC,CAAC,yDAAC;AAEzB,IAAA,cAAc,GAAG,SAAS,CAA+B,aAAa,0DAAC;AAEvE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,EAAE;AAE1D,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;gBACtB;;YAGF,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAChC,IAAI,CAAC,KAAK,EAAE;;AAEhB,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAChC,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;;AAE7B,SAAC,CAAC;;IAGI,oBAAoB,CAAC,YAA2B,MAAM,EAAA;QAC5D,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CACvD,oCAAoC,CACnB;YACrB,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,aAAa,CACzD,cAAc,CACG;YAEnB,IAAI,oBAAoB,EAAE;gBACxB,gBAAgB,CAAC,QAAQ,CAAC;oBACxB,GAAG,EACD,SAAS,KAAK;0BACV,gBAAgB,CAAC,SAAS;AAC1B,4BAAA,oBAAoB,CAAC,qBAAqB,EAAE,CAAC;0BAC7C,gBAAgB,CAAC,SAAS;AAC1B,4BAAA,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,MAAM;AAC1D,iBAAA,CAAC;;AAEN,SAAC,CAAC;;AAGI,IAAA,SAAS,GAAG,CAAC,KAAoB,KAAI;AAC3C,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,WAAW,EAAE;gBAChB,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAClC,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;wBACvC,OAAO,KAAK,GAAG,CAAC;;AAElB,oBAAA,OAAO,KAAK;AACd,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACjC;;YAEF,KAAK,SAAS,EAAE;gBACd,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;AAClC,oBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;wBACb,OAAO,KAAK,GAAG,CAAC;;AAElB,oBAAA,OAAO,KAAK;AACd,iBAAC,CAAC;AACF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC/B;;;AAGN,KAAC;AAEO,IAAA,OAAO,GAAG,CAAC,KAAoB,KAAI;QACzC,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa;AAE7C,QAAA,QAAQ,KAAK,CAAC,GAAG;YACf,KAAK,OAAO,EAAE;gBACZ,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;AAEtB,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBAE5D,IAAI,aAAa,EAAE;oBACjB;yBACG,gBAAgB,CAAmB,OAAO;AAC1C,yBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC;AAC7B,yBAAA,KAAK,EAAE;;gBAEZ;;YAEF,KAAK,QAAQ,EAAE;gBACb,KAAK,CAAC,eAAe,EAAE;gBACvB,KAAK,CAAC,cAAc,EAAE;gBAEtB,IAAI,CAAC,KAAK,EAAE;gBACZ;;;AAGN,KAAC;AAEO,IAAA,OAAO,GAAG,CAAC,KAAiB,KAAI;QACtC,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa;QAC7C,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC;QAEnE,IAAI,CAAC,WAAW,EAAE;YAChB,KAAK,CAAC,eAAe,EAAE;YACvB,KAAK,CAAC,cAAc,EAAE;YACtB,IAAI,CAAC,KAAK,EAAE;;AAEhB,KAAC;AAEO,IAAA,QAAQ,GAAG,CAAC,KAAY,KAAI;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CACzE,oCAAoC,CACrC;AACD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;AAE1C,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE;AAEnC,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,IAAI,CAAC,KAAK,EAAE;;AAEhB,KAAC;IAEO,KAAK,GAAA;AACX,QAAA,IACE,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,KAAK;YAC5C,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,EACtC;YACA,IAAI,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE;;AAGhD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;IAG9B,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACnD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;QACvD,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;;IAG3D,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE;QAE5C,UAAU,CAAC,MAAK;YACd,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAChD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;YACpD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;YAChD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;SACvD,EAAE,GAAG,CAAC;;AAGT,IAAA,QAAQ,CAAC,KAAY,EAAA;AACnB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAA0B;AAE/C,QAAA,IAAI,KAAK,GAAoB,MAAM,CAAC,KAAK;QAEzC,IACE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAY,CAAC,CAAC;AACrC,YAAA,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,CAAC,IAAI,CAAC,yBAAyB,EAAE,EACjC;AACA,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;AAGvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO;YAE5B,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK;YAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAChC,gBAAA,YAAY,GAAG,CAAC,YAAY,CAAC;;YAG/B,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,EAAE,KAAK,CAAC,CAAC;;iBAC5C;gBACL,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;;;aAElE;YACL,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;;;uGAjNvB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBhC,69CAuCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhBY,mBAAmB,EAAA,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,CAAA,EAAA,CAAA;;2FAElB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAE1B,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,69CAAA,EAAA;;;MECnB,oBAAoB,GAAG,IAAI,cAAc,CAAC,oBAAoB;MAa9D,YAAY,CAAA;AACN,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAC/B,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,IAAA,QAAQ,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE/C,iBAAiB,GAAA;AACvB,QAAA,IAAI,SAAiB;AAErB,QAAA,GAAG;AACD,YAAA,SAAS,GAAG,YAAY,CAAC,EAAE,EAAE;AAC3B,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,iBAAiB,EAAE,KAAK;AACzB,aAAA,CAAC;AACJ,SAAC,QAAQ,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;AAE3C,QAAA,OAAO,SAAS;;AAGV,IAAA,iBAAiB,CAAC,SAAyB,EAAA;AACjD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC7C,aAAA,aAA4B;AAC/B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;AACjC,QAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,qBAAqB,EAAE;QAC1D,MAAM,gBAAgB,GAAG,SAAS,CAAC,aAAa,CAC9C,oCAAoC,CACrC;QACD,MAAM,eAAe,GAAG,SAAS,EAAE,aAAa,CAC9C,yBAAyB,CAC1B;QACD,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC;QAEtE,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY;YAC/C,MAAM,SAAS,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,GAAG;AAC3C,YAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM;YACzB,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;AAEzC,YAAA,IAAI,MAAM,GAAG,SAAS,EAAE;gBACtB,MAAM,GAAG,SAAS;;YAGpB,MAAM,mBAAmB,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,YAAY;AAEzD,YAAA,IAAI,mBAAmB,IAAI,EAAE,EAAE;AAC7B,gBAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE,YAAY,IAAI,CAAC;AACzD,gBAAA,MAAM,aAAa,GAAG,aAAa,GAAG,qBAAqB;gBAE3D,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,IAAI,SAAS,EAAE;oBACnD,MAAM,GAAG,aAAa;;qBACjB;AACL,oBAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAE/D,oBAAA,IAAI,MAAM,GAAG,SAAS,EAAE;wBACtB,MAAM,GAAG,SAAS;;;AAItB,gBAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,MAAM;;YAG7B,GAAG,IAAI,UAAU;YAEjB,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,IAAI;YAChC,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,EAAG,MAAM,IAAI;AAEzC,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE;;AAGpE,QAAA,OAAO,IAAI;;AAGL,IAAA,MAAM,oBAAoB,CAChC,aAAgC,EAChC,OAAe,EAAA;QAEf,MAAM,SAAS,GAAG,EAAE;QAEpB,IAAI,YAAY,GAAG,CAAC;QAEpB,OAAO,aAAa,CAAC,QAAQ,IAAI,YAAY,IAAI,OAAO,EAAE;AACxD,YAAA,MAAM,KAAK,CAAC,SAAS,CAAC;YACtB,YAAY,IAAI,SAAS;;;IAIrB,MAAM,gBAAgB,CAAC,SAAyB,EAAA;AACtD,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC7C,aAAA,aAA4B;QAC/B,MAAM,uBAAuB,GAC3B,iBAAiB,CAAC,aAAa,CAAoB,QAAQ,CAAC;QAE9D,IAAI,uBAAuB,EAAE;YAC3B,MAAM,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,IAAI,CAAC;;QAGhE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAElD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ;AAEhC,YAAA,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AACrC,YAAA,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;YAChC,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,IAAI;YAClC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,KAAK,IAAI;AACpC,YAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AAC/B,YAAA,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAC7B,YAAA,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AACnC,YAAA,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,sBAAsB;YAEnD,MAAM,eAAe,GACnB,iBAAiB,CAAC,aAAa,CAAiB,mBAAmB,CAAC;YAEtE,IAAI,eAAe,EAAE;AACnB,gBAAA,eAAe,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;;;;IAKvE,MAAM,IAAI,CAAC,IAA0B,EAAA;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CACjC,gCAAgC,CACjC;QAED,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC1C,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAEjE,YAAA,SAAS,CAAC,EAAE,GAAG,SAAS;AAExB,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAEtC,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,mBAAmB,EAAE;gBACxD,mBAAmB,EAAE,IAAI,CAAC,QAAQ;AAClC,gBAAA,WAAW,EAAE,SAAS;AACtB,gBAAA,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC/B,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;AACxD,wBAAA;AACE,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,QAAQ,EAAE,MAAM,YAAY;AAC7B,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,eAAe;AACxB,4BAAA,IAAI,EAAE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;AACrD,yBAAA;AACF,qBAAA;iBACF,CAAC;AACF,gBAAA,QAAQ,EAAE;oBACR,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAC3B,YAAY,CAAC,GAAG,EAAE,MAAO,IAAY,CAAC,GAAG,CAAC,CAAC,CAC5C;AACF,iBAAA;AACF,aAAA,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AAE7C,YAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAE9C,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;;;uGAhK1B,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAZ,YAAY,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB;;;MC7BY,mBAAmB,CAAA;AAC9B,IAAA,QAAQ,CAAC,MAAiC,EAAA;AACxC,QAAA,OAAO,MAAM;;AAGf,IAAA,QAAQ,CAAC,MAAqC,EAAA;AAC5C,QAAA,OAAO,MAAM;;AAGf,IAAA,QAAQ,CAAC,MAAwB,EAAA;AAC/B,QAAA,OAAO,MAAM;;AAGf,IAAA,mBAAmB,CAAC,MAAgC,EAAA;AAClD,QAAA,OAAO,MAAM;;uGAdJ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCoCrB,iBAAiB,CAAA;AACX,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,OAAO,GAAG,MAAM,CAAgB,EAAE,mDAAC;AAC5C,IAAA,QAAQ;AACC,IAAA,aAAa,GAAG,MAAM,CAErC,IAAI,yDAAC;IACC,SAAS,GAAG,KAAK;AACjB,IAAA,QAAQ;AACR,IAAA,SAAS,GAAG,MAAM,CAAa,IAAI,qDAAC;AACpC,IAAA,UAAU;AACV,IAAA,eAAe,GAAG,MAAM,CAAgB,IAAI,2DAAC;AAC7C,IAAA,WAAW;IACF,qBAAqB,GACpC,MAAM,CAAkC;AACtC,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,QAAQ,EAAE,IAAI;AACf,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEa,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AAEzC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI;;AAGb,QAAA,OAAO,YAAY;AACrB,KAAC,2DAAC;AAEe,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAChD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AAEzC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC/B,YAAA,OAAO,YAAY;;AAGrB,QAAA,OAAO,EAAE;AACX,KAAC,4DAAC;AAEe,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY;AACtC,cAAE;AACF,cAAE,YAAY,EAAE,KAAK;AAEvB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;;AAClB,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,OAAO,KAAK,IAAI,CAAC;;QAGnB,OAAO,CAAC,CAAC,KAAK;AAChB,KAAC,qDAAC;AAEF,IAAA,aAAa,GAAG,IAAI,WAAW,CAAgB,EAAE,CAAC;AAElD,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;;AAGlC,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;;AAGvB,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;;AAGxC,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;;AAG7B,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;;AAGpC,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE;;IAGhD,IAAI,cAAc,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO;AACvC,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACpE,YAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,QAAQ,EAAE,IAAI;AACf,SAAA,CAAC,CAAC;;AAGL,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC;;AAEtB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;;AAG9B,IAAA,oBAAoB,CAC1B,OAAkD,EAAA;AAElD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,QACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBACvB,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM;gBACjD,OAAO,CAAC,IAAI,CACV,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CACnE;;QAIL,QACE,CAAC,OAAO;YACP,OAA8B,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK;;AAInE,IAAA,MAAM,YAAY,CAAC,KAAU,EAAE,gBAAgB,GAAG,IAAI,EAAA;AAC5D,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC5B;;AAGF,QAAA,OAAO,IAAI,CAAC,UAAW,EAAE,EAAE;AACzB,YAAA,MAAM,KAAK,CAAC,GAAG,CAAC;;AAGlB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;;AAGF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC;cACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAA,EAAG,KAAK,CAAA,CAAE,EAAE,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,CAAE,CAAC;cACrE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,CAAE,KAAK,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC;AAEjE,QAAA,IACE,CAAC,OAAO,CAAC,KAAK,CAAC;AACf,YAAA,CAAC,OAAO;YACR,IAAI,CAAC,WAAY,EAAE;AACnB,YAAA,gBAAgB,EAChB;YACA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO;AACvC,gBAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,KAAK,CAAC,GAAG,CAAC;YAEhB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;YAErC;;QAGF,IAAI,OAAO,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAK;AAC7B,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC1B,wBAAA,OAAO,OAAO;;oBAGhB,OAAO,CAAC,OAAO,CAAC;;AAGlB,gBAAA,OAAO,OAAO;AAChB,aAAC,CAAC;;;AAIN,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK;AAElC,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB;;AAGF,QAAA,OAAO,IAAI,CAAC,UAAW,EAAE,EAAE;AACzB,YAAA,MAAM,KAAK,CAAC,GAAG,CAAC;;AAGlB,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;;IAGhC,IAAI,CACF,OAAyB,EACzB,OAAiC,EACjC,SAA0B,EAC1B,UAAmC,EACnC,QAAQ,GAAG,KAAK,EAAA;AAEhB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAE7B,IAAI,CAAC,aAAa,CAAC;AAChB,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AAC3D,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO;AACvC,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE;AACtC,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA,CAAC,CAAC;AACL,SAAC,CAAC;QAEJ,IAAI,CAAC,QAAQ,CAAC;AACX,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAGnD,IAAA,KAAK,CAAC,KAAiB,EAAA;QACrB,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;;IAGnC,MAAM,CAAC,KAAiB,EAAE,KAA8B,EAAA;QACtD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB;;AAGF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB;;AAGF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;AAExC,QAAA,IAAI,CAAC,QAAQ,EAAE,QAAQ,CACrB,YAAY,CAAC,MAAM,CAAC,CAAC,CAA0B,KAAK,CAAC,KAAK,KAAK,CAAC,CACjE;;uGA3OQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACAK,MAAO,iBAAkB,SAAQ,cAAc,CAAA;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAEnC,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAEnC,IAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAA2B;AACnD,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,4CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;IACxD,sBAAsB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACxC,yBAAyB,GAAG,KAAK,CAAC,KAAK,6DAC9C,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CADqB;AAChD,YAAA,SAAS,EAAE,gBAAgB;AAC5B,SAAA,CAAA,CAAA,CAAC;AAEO,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,UAAU,GAAG,MAAM,CAAmB,EAAE,sDAAC;AAEzC,IAAA,eAAe,GAAG,MAAM,CAAyB,IAAI,2DAAC;AACtD,IAAA,UAAU,GAAG,YAAY,CAChC,MAAM,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,KAAK,SAAS,CACrD;AAED,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAEP,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE;AAElD,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAEzC,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;YAEtC,IAAI,CAAC,OAAO,EAAE;gBACZ;;YAGF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO;YAErE,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;;iBACnC,IAAI,QAAQ,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;;iBACnC,IAAI,QAAQ,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;;iBACpB,IAAI,mBAAmB,EAAE;AAC9B,gBAAA,MAAM,kBAAkB,GAAG,mBAAmB,EAAE;AAChD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC;;AAE3C,SAAC,CAAC;;AAGI,IAAA,WAAW,CAAC,OAAyB,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE;QACpD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KAC3B,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAC1D;;IAGK,uBAAuB,GAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAE9B,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;AACnC,YAAA,OAAO,EAAE,QAAQ,EAAE,OAAwC,EAAE;;AACxD,aAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO;AACL,gBAAA,mBAAmB,EAAE,OAAmC;aACzD;;AACI,aAAA,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YACxC,MAAM,iBAAiB,GAAG,OAAoC;YAC9D,OAAO;AACL,gBAAA,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAC7C,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAC/D;aACF;;AAGH,QAAA,OAAO,EAAE,QAAQ,EAAE,OAA2B,EAAE;;IAGlD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,UAAU;AACxB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AACzC,YAAA,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE;AACrD,YAAA,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AAC5D,SAAA,CAAC;;IAGJ,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,CAAC,IAAI,CACzB,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EAAE,CAChB;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;AACxD,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;;uGA5G5B,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAHjB,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtC9C,0uDA8CA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPY,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,+EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAE9B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAN7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,SAAA,EAEtB,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,OAAA,EACnC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAA,QAAA,EAAA,0uDAAA,EAAA;;;AEvC5C;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koalarx/ui",
3
- "version": "20.2.9",
3
+ "version": "20.2.11",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0",
6
6
  "@angular/core": ">=20.0.0"
@@ -230,6 +230,10 @@
230
230
  "types": "./shared/components/input-field/input-month/index.d.ts",
231
231
  "default": "./fesm2022/koalarx-ui-shared-components-input-field-input-month.mjs"
232
232
  },
233
+ "./shared/components/input-field/input-password": {
234
+ "types": "./shared/components/input-field/input-password/index.d.ts",
235
+ "default": "./fesm2022/koalarx-ui-shared-components-input-field-input-password.mjs"
236
+ },
233
237
  "./shared/components/input-field/input-radio": {
234
238
  "types": "./shared/components/input-field/input-radio/index.d.ts",
235
239
  "default": "./fesm2022/koalarx-ui-shared-components-input-field-input-radio.mjs"
@@ -238,10 +242,6 @@
238
242
  "types": "./shared/components/input-field/input-text/index.d.ts",
239
243
  "default": "./fesm2022/koalarx-ui-shared-components-input-field-input-text.mjs"
240
244
  },
241
- "./shared/components/input-field/input-password": {
242
- "types": "./shared/components/input-field/input-password/index.d.ts",
243
- "default": "./fesm2022/koalarx-ui-shared-components-input-field-input-password.mjs"
244
- },
245
245
  "./shared/components/input-field/input-time": {
246
246
  "types": "./shared/components/input-field/input-time/index.d.ts",
247
247
  "default": "./fesm2022/koalarx-ui-shared-components-input-field-input-time.mjs"