@koalarx/ui 20.2.10 → 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.
|
@@ -619,11 +619,11 @@ class AutocompleteField extends InputFieldBase {
|
|
|
619
619
|
this.autocompleteValue.makeAutofill();
|
|
620
620
|
}
|
|
621
621
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AutocompleteField, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
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\"\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"] }] });
|
|
623
623
|
}
|
|
624
624
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.6", ngImport: i0, type: AutocompleteField, decorators: [{
|
|
625
625
|
type: Component,
|
|
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\"\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" }]
|
|
627
627
|
}], ctorParameters: () => [] });
|
|
628
628
|
|
|
629
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, 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\"\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":"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"}
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@koalarx/ui",
|
|
3
|
-
"version": "20.2.
|
|
3
|
+
"version": "20.2.11",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=20.0.0",
|
|
6
6
|
"@angular/core": ">=20.0.0"
|
|
@@ -226,6 +226,10 @@
|
|
|
226
226
|
"types": "./shared/components/input-field/input-email/index.d.ts",
|
|
227
227
|
"default": "./fesm2022/koalarx-ui-shared-components-input-field-input-email.mjs"
|
|
228
228
|
},
|
|
229
|
+
"./shared/components/input-field/input-month": {
|
|
230
|
+
"types": "./shared/components/input-field/input-month/index.d.ts",
|
|
231
|
+
"default": "./fesm2022/koalarx-ui-shared-components-input-field-input-month.mjs"
|
|
232
|
+
},
|
|
229
233
|
"./shared/components/input-field/input-password": {
|
|
230
234
|
"types": "./shared/components/input-field/input-password/index.d.ts",
|
|
231
235
|
"default": "./fesm2022/koalarx-ui-shared-components-input-field-input-password.mjs"
|
|
@@ -234,10 +238,6 @@
|
|
|
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"
|
|
236
240
|
},
|
|
237
|
-
"./shared/components/input-field/input-month": {
|
|
238
|
-
"types": "./shared/components/input-field/input-month/index.d.ts",
|
|
239
|
-
"default": "./fesm2022/koalarx-ui-shared-components-input-field-input-month.mjs"
|
|
240
|
-
},
|
|
241
241
|
"./shared/components/input-field/input-text": {
|
|
242
242
|
"types": "./shared/components/input-field/input-text/index.d.ts",
|
|
243
243
|
"default": "./fesm2022/koalarx-ui-shared-components-input-field-input-text.mjs"
|
|
@@ -250,14 +250,14 @@
|
|
|
250
250
|
"types": "./shared/components/input-field/input-url/index.d.ts",
|
|
251
251
|
"default": "./fesm2022/koalarx-ui-shared-components-input-field-input-url.mjs"
|
|
252
252
|
},
|
|
253
|
-
"./shared/components/input-field/switcher": {
|
|
254
|
-
"types": "./shared/components/input-field/switcher/index.d.ts",
|
|
255
|
-
"default": "./fesm2022/koalarx-ui-shared-components-input-field-switcher.mjs"
|
|
256
|
-
},
|
|
257
253
|
"./shared/components/input-field/select": {
|
|
258
254
|
"types": "./shared/components/input-field/select/index.d.ts",
|
|
259
255
|
"default": "./fesm2022/koalarx-ui-shared-components-input-field-select.mjs"
|
|
260
256
|
},
|
|
257
|
+
"./shared/components/input-field/switcher": {
|
|
258
|
+
"types": "./shared/components/input-field/switcher/index.d.ts",
|
|
259
|
+
"default": "./fesm2022/koalarx-ui-shared-components-input-field-switcher.mjs"
|
|
260
|
+
},
|
|
261
261
|
"./shared/components/input-field/textarea": {
|
|
262
262
|
"types": "./shared/components/input-field/textarea/index.d.ts",
|
|
263
263
|
"default": "./fesm2022/koalarx-ui-shared-components-input-field-textarea.mjs"
|