import { MXSelectionValueComponent, MXLookComponent, convertArrayToDataSource, AX_SELECTION_DATA_TOKEN, AXAutocompleteParentComponent, MXInputBaseValueComponent, AXComponent, AXFocusableComponent, AXValuableComponent, AXClearableComponent, AXClosableComponent, AXSearchableComponent, MXSelectionBridgeService } from '@acorex/cdk/common';
import { AXDecoratorGenericComponent, AXDecoratorCloseButtonComponent } from '@acorex/components/decorators';
import { MXDropdownBoxBaseComponent, AXDropdownBoxComponent } from '@acorex/components/dropdown';
import { AXListComponent } from '@acorex/components/list';
import { AXLoadingComponent } from '@acorex/components/loading';
import { AXTranslatorPipe } from '@acorex/core/translation';
import { AXUnsubscriber } from '@acorex/core/utils';
import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
import * as i0 from '@angular/core';
import { input, signal, inject, forwardRef, HostBinding, ViewChild, Input, ViewEncapsulation, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
import * as i1 from '@angular/forms';
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
import { classes } from 'polytype';
import { debounceTime } from 'rxjs';

/**
 * The Button is a component which detects user interaction and triggers a corresponding event
 * @category
 */
class AXAutocompleteComponent extends classes(MXDropdownBoxBaseComponent, MXSelectionValueComponent, MXLookComponent) {
    constructor() {
        super(...arguments);
        this.delayTime = input(300, ...(ngDevMode ? [{ debugName: "delayTime" }] : []));
        /** Height of each list item in pixels, or 'auto' to let list measure. */
        this.itemHeight = input(40, ...(ngDevMode ? [{ debugName: "itemHeight" }] : []));
        /** Maximum number of visible items before scrolling. */
        this.maxVisibleItems = input(5, ...(ngDevMode ? [{ debugName: "maxVisibleItems" }] : []));
        this.inputValue = signal('', ...(ngDevMode ? [{ debugName: "inputValue" }] : []));
        this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
        /** @ignore */
        this.renderList = false;
        /** @ignore */
        this.dropdownSizes = {
            width: '100%',
            height: 'auto',
        };
        /** @ignore */
        this._listDataSource = convertArrayToDataSource([], {
            key: this.valueField,
            pageSize: 10,
        });
        /**
         * The template used to display the header of the list.
         * @param {TemplateRef<unknown>} listHeaderTemplate
         */
        this.listHeaderTemplate = input(...(ngDevMode ? [undefined, { debugName: "listHeaderTemplate" }] : []));
        /**
         * The template used to display the footer of the list.
         * @param {TemplateRef<unknown>} listFooterTemplate
         */
        this.listFooterTemplate = input(...(ngDevMode ? [undefined, { debugName: "listFooterTemplate" }] : []));
        /**
         * The width of the dropdown in pixels.
         * @defaultValue 260
         */
        this.dropdownWidth = 260;
        /**
         * Service for managing selection data, injected via `AX_SELECTION_DATA_TOKEN`.
         */
        this.selectionService = inject(AX_SELECTION_DATA_TOKEN);
        /** @ignore */
        this._unsubscriber = inject(AXUnsubscriber);
        this.parent = inject(AXAutocompleteParentComponent);
        this.parentText = inject(MXInputBaseValueComponent);
    }
    /**
     * Gets the data source for the component, which can be either an `AXDataSource` or an array of items.
     * @returns {AXDataSource<any> | any[]}
     */
    get dataSource() {
        return this._dataSource;
    }
    /**
     * Sets the data source, either as `AXDataSource` or an array. Converts arrays to `AXDataSource` and subscribes to data and loading changes.
     * @param {AXDataSource<any> | any[]} v
     */
    set dataSource(v) {
        this._dataSource = v;
        if (Array.isArray(v)) {
            this._listDataSource = convertArrayToDataSource(v, {
                key: this.valueField,
                pageSize: 10,
            });
        }
        else {
            this._listDataSource = this.dataSource;
        }
        //
        this.onChangedSubscription = this._listDataSource.onChanged.subscribe((data) => {
            this.setDropdownSize(data.totalCount);
        });
        this._listDataSource.onLoadingChanged.pipe(this._unsubscriber.takeUntilDestroy).subscribe((loading) => {
            this.isLoading.set(loading);
        });
    }
    /** @ignore */
    ngAfterViewInit() {
        this.setDropdownSize();
        this.registerValidation();
        this.parentText.onTextChanged
            .pipe(debounceTime(this.delayTime()), this.parent.unsubscriber.takeUntilDestroy)
            .subscribe((e) => {
            if (!e.isUserInteraction)
                return;
            this.inputValue.set(e.value);
            if (!e.value) {
                this.close();
                return;
            }
            this.search(e.value);
            this.open();
        });
        this.parent.onKeyDown.pipe(this.parent.unsubscriber.takeUntilDestroy).subscribe((e) => {
            if (e.nativeEvent.key === 'ArrowDown') {
                this.search(this.inputValue());
                this.open();
                this.list.focus();
            }
        });
    }
    /** @ignore */
    ngOnDestroy() {
        this.onChangedSubscription.unsubscribe();
    }
    /**
     * Retrieves an item by its key.
     * @param {any} key
     */
    getItemByKey(key) {
        const startTime = Date.now();
        const check = async () => {
            while (Date.now() - startTime < 2000) {
                if (typeof this._listDataSource.find === 'function') {
                    return this._listDataSource.find(key);
                }
                else {
                    await new Promise((resolve) => setTimeout(resolve, 50));
                }
            }
            console.warn('Timeout reached without finding the "getItemByKey" method');
        };
        return check();
    }
    /** @ignore */
    _handleOnOpenedEvent(e) {
        if (!this.renderList) {
            this.renderList = true;
            this.list?.render();
        }
        else if (!this._listDataSource.totalCount || this._listDataSource.totalCount == 0) {
            this.list?.refresh(false);
        }
        //
        this.onOpened.emit({
            component: this,
            isUserInteraction: e.isUserInteraction,
        });
    }
    /** @ignore */
    _handleOnClosedEvent(e) {
        this.parent.focus();
        this.onClosed.emit({
            component: this,
            isUserInteraction: e.isUserInteraction,
        });
        this._unsubscriber.unsubscribe();
    }
    /** @ignore */
    _handleValueChanged(e) {
        if (e.isUserInteraction) {
            if (!this.multiple) {
                this.close();
            }
            this.parent.emitOnItemSelected(this.selectedItems, true);
        }
    }
    /** @ignore */
    _handleItemClick(e) {
        this.onItemClick.emit(e);
        if (!this.multiple) {
            this.close();
        }
    }
    /** @ignore */
    _handleItemSelected(e) {
        this.onItemSelected.emit(e);
        if (!this.multiple) {
            this.close();
        }
    }
    /** @ignore */
    setDropdownSize(count = 0) {
        if (this.dropdown.isActionsheetStyle) {
            const itemPx = typeof this.itemHeight() === 'number' ? this.itemHeight() : 40;
            this.dropdownSizes = {
                width: '100%',
                height: ['auto', '0px'].includes(this.dropdownSizes.height)
                    ? `${Math.min(15, count) * itemPx}px`
                    : this.dropdownSizes.height,
            };
        }
        else {
            const hostWidth = Math.max(this.parent.getHostElement().offsetWidth, this.dropdownWidth);
            const itemPx = typeof this.itemHeight() === 'number' ? this.itemHeight() : 40;
            const maxItems = Number(this.maxVisibleItems());
            this.dropdownSizes = {
                width: `${hostWidth}px`,
                height: count == 0 ? 'auto' : `${Math.min(maxItems, count) * itemPx}px`,
            };
        }
        setTimeout(() => {
            this.dropdown.updatePosition();
        });
    }
    /**
     * Filters the data source based on the provided search term.
     * @param {string} term
     */
    search(term) {
        if (term) {
            this._listDataSource.filter({
                field: this.textField,
                value: term,
                operator: { type: 'contains' },
            });
        }
        else {
            this._listDataSource.clearFilter();
        }
        this._listDataSource.refresh();
    }
    /**
     * Refreshes the component by resetting state, clearing selection cache, refreshing the list, and closing the component.
     */
    refresh() {
        this.reset(false);
        this.clearSelectionCache();
        this.list?.refresh();
        this.close();
    }
    get __hostName() {
        return this.name;
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXAutocompleteComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: AXAutocompleteComponent, isStandalone: true, selector: "ax-autocomplete", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, minValue: { classPropertyName: "minValue", publicName: "minValue", isSignal: false, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: "maxValue", publicName: "maxValue", isSignal: false, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: false, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: false, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: false, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: false, isRequired: false, transformFunction: null }, valueField: { classPropertyName: "valueField", publicName: "valueField", isSignal: false, isRequired: false, transformFunction: null }, textField: { classPropertyName: "textField", publicName: "textField", isSignal: false, isRequired: false, transformFunction: null }, disabledField: { classPropertyName: "disabledField", publicName: "disabledField", isSignal: false, isRequired: false, transformFunction: null }, textTemplate: { classPropertyName: "textTemplate", publicName: "textTemplate", isSignal: false, isRequired: false, transformFunction: null }, selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: false, isRequired: false, transformFunction: null }, delayTime: { classPropertyName: "delayTime", publicName: "delayTime", isSignal: true, isRequired: false, transformFunction: null }, itemHeight: { classPropertyName: "itemHeight", publicName: "itemHeight", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleItems: { classPropertyName: "maxVisibleItems", publicName: "maxVisibleItems", isSignal: true, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: false, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: false, isRequired: false, transformFunction: null }, selectedTemplate: { classPropertyName: "selectedTemplate", publicName: "selectedTemplate", isSignal: false, isRequired: false, transformFunction: null }, emptyTemplate: { classPropertyName: "emptyTemplate", publicName: "emptyTemplate", isSignal: false, isRequired: false, transformFunction: null }, loadingTemplate: { classPropertyName: "loadingTemplate", publicName: "loadingTemplate", isSignal: false, isRequired: false, transformFunction: null }, listHeaderTemplate: { classPropertyName: "listHeaderTemplate", publicName: "listHeaderTemplate", isSignal: true, isRequired: false, transformFunction: null }, listFooterTemplate: { classPropertyName: "listFooterTemplate", publicName: "listFooterTemplate", isSignal: true, isRequired: false, transformFunction: null }, dropdownWidth: { classPropertyName: "dropdownWidth", publicName: "dropdownWidth", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", stateChange: "stateChange", onValueChanged: "onValueChanged", onBlur: "onBlur", onFocus: "onFocus", readonlyChange: "readonlyChange", disabledChange: "disabledChange", onOpened: "onOpened", onClosed: "onClosed", onItemClick: "onItemClick", onItemSelected: "onItemSelected" }, host: { attributes: { "ngSkipHydration": "true" }, properties: { "attr.name": "this.__hostName" } }, providers: [
            { provide: AXComponent, useExisting: AXAutocompleteComponent },
            { provide: AXFocusableComponent, useExisting: AXAutocompleteComponent },
            { provide: AXValuableComponent, useExisting: AXAutocompleteComponent },
            { provide: AXClearableComponent, useExisting: AXAutocompleteComponent },
            { provide: AXClosableComponent, useExisting: AXAutocompleteComponent },
            { provide: AXSearchableComponent, useExisting: AXAutocompleteComponent },
            {
                provide: NG_VALUE_ACCESSOR,
                useExisting: forwardRef(() => AXAutocompleteComponent),
                multi: true,
            },
            {
                provide: AX_SELECTION_DATA_TOKEN,
                useClass: MXSelectionBridgeService,
            },
            AXUnsubscriber,
        ], viewQueries: [{ propertyName: "list", first: true, predicate: AXListComponent, descendants: true }, { propertyName: "dropdown", first: true, predicate: AXDropdownBoxComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ax-dropdown-box\n  [look]=\"look\"\n  [hasInput]=\"false\"\n  [disabled]=\"disabled\"\n  (blur)=\"emitOnBlurEvent($event)\"\n  (focus)=\"emitOnFocusEvent($event)\"\n  [class.ax-state-multiple]=\"multiple\"\n  (onOpened)=\"_handleOnOpenedEvent($event)\"\n  (onClosed)=\"_handleOnClosedEvent($event)\"\n>\n  <ng-container panel>\n    <div #panel class=\"ax-autocomplete-panel\" [style.min-width]=\"dropdownSizes.width\">\n      @if (dropdown.isActionsheetStyle) {\n        <ax-header class=\"ax-solid\">\n          <ax-title>{{ caption || placeholder | translate | async }}</ax-title>\n          <ax-close-button [icon]=\"multiple ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n        </ax-header>\n      }\n      @if (renderList) {\n        @if (listHeaderTemplate()) {\n          <ng-template [ngTemplateOutlet]=\"listHeaderTemplate()\"></ng-template>\n        }\n        <ax-list\n          [ngModel]=\"value\"\n          [readonly]=\"readonly\"\n          [multiple]=\"multiple\"\n          [textField]=\"textField\"\n          [selectionMode]=\"'item'\"\n          [valueField]=\"valueField\"\n          [itemHeight]=\"itemHeight()\"\n          [textTemplate]=\"textTemplate\"\n          [itemTemplate]=\"itemTemplate\"\n          [dataSource]=\"_listDataSource\"\n          [loadingTemplate]=\"loadingTemplate\"\n          [style.height]=\"dropdownSizes.height\"\n          [emptyTemplate]=\"emptyTemplate ?? empty\"\n          (onValueChanged)=\"_handleValueChanged($event)\"\n          (onItemClick)=\"_handleItemClick($event)\"\n          (onItemSelected)=\"_handleItemSelected($event)\"\n        >\n          <ng-template #empty> {{ '@acorex:common.general.no-result-found' | translate | async }} </ng-template>\n        </ax-list>\n        @if (listFooterTemplate()) {\n          <ng-template [ngTemplateOutlet]=\"listFooterTemplate()\"></ng-template>\n        }\n      }\n\n      @if (isLoading()) {\n        @if (loadingTemplate) {\n          <ng-template [ngTemplateOutlet]=\"loadingTemplate\"></ng-template>\n        } @else {\n          <div class=\"ax-autocomplete-loading-container\">\n            <ax-loading></ax-loading>\n          </div>\n        }\n      }\n\n      <ng-content select=\"ax-footer\"> </ng-content>\n    </div>\n  </ng-container>\n</ax-dropdown-box>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXListComponent, selector: "ax-list", inputs: ["id", "name", "disabled", "readonly", "valueField", "textField", "textTemplate", "disabledField", "multiple", "selectionMode", "isItemTruncated", "showItemTooltip", "dataSource", "itemHeight", "itemTemplate", "emptyTemplate", "loadingTemplate", "checkbox"], outputs: ["onValueChanged", "disabledChange", "readonlyChange", "onBlur", "onFocus", "onItemClick", "onItemSelected", "onScrolledIndexChanged"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXDropdownBoxComponent, selector: "ax-dropdown-box", inputs: ["disabled", "look", "hasInput", "popoverWidth"], outputs: ["disabledChange", "onBlur", "onFocus", "onClick", "onOpened", "onClosed"] }, { kind: "component", type: AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "component", type: AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["closeAll", "icon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXAutocompleteComponent, decorators: [{
            type: Component,
            args: [{ selector: 'ax-autocomplete', inputs: [
                        'disabled',
                        'readonly',
                        'tabIndex',
                        'placeholder',
                        'minValue',
                        'maxValue',
                        'value',
                        'state',
                        'name',
                        'id',
                        'type',
                        'look',
                        'multiple',
                        'valueField',
                        'textField',
                        'disabledField',
                        'textTemplate',
                        'selectedItems',
                    ], outputs: [
                        'valueChange',
                        'stateChange',
                        'onValueChanged',
                        'onBlur',
                        'onFocus',
                        'readonlyChange',
                        'disabledChange',
                        'onOpened',
                        'onClosed',
                        'onItemClick',
                        'onItemSelected',
                    ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
                        { provide: AXComponent, useExisting: AXAutocompleteComponent },
                        { provide: AXFocusableComponent, useExisting: AXAutocompleteComponent },
                        { provide: AXValuableComponent, useExisting: AXAutocompleteComponent },
                        { provide: AXClearableComponent, useExisting: AXAutocompleteComponent },
                        { provide: AXClosableComponent, useExisting: AXAutocompleteComponent },
                        { provide: AXSearchableComponent, useExisting: AXAutocompleteComponent },
                        {
                            provide: NG_VALUE_ACCESSOR,
                            useExisting: forwardRef(() => AXAutocompleteComponent),
                            multi: true,
                        },
                        {
                            provide: AX_SELECTION_DATA_TOKEN,
                            useClass: MXSelectionBridgeService,
                        },
                        AXUnsubscriber,
                    ], host: { ngSkipHydration: 'true' }, imports: [
                        AsyncPipe,
                        FormsModule,
                        AXListComponent,
                        NgTemplateOutlet,
                        AXTranslatorPipe,
                        AXLoadingComponent,
                        AXDropdownBoxComponent,
                        AXDecoratorGenericComponent,
                        AXDecoratorCloseButtonComponent,
                    ], template: "<ax-dropdown-box\n  [look]=\"look\"\n  [hasInput]=\"false\"\n  [disabled]=\"disabled\"\n  (blur)=\"emitOnBlurEvent($event)\"\n  (focus)=\"emitOnFocusEvent($event)\"\n  [class.ax-state-multiple]=\"multiple\"\n  (onOpened)=\"_handleOnOpenedEvent($event)\"\n  (onClosed)=\"_handleOnClosedEvent($event)\"\n>\n  <ng-container panel>\n    <div #panel class=\"ax-autocomplete-panel\" [style.min-width]=\"dropdownSizes.width\">\n      @if (dropdown.isActionsheetStyle) {\n        <ax-header class=\"ax-solid\">\n          <ax-title>{{ caption || placeholder | translate | async }}</ax-title>\n          <ax-close-button [icon]=\"multiple ? 'ax-icon ax-icon-check' : 'ax-icon ax-icon-close'\"></ax-close-button>\n        </ax-header>\n      }\n      @if (renderList) {\n        @if (listHeaderTemplate()) {\n          <ng-template [ngTemplateOutlet]=\"listHeaderTemplate()\"></ng-template>\n        }\n        <ax-list\n          [ngModel]=\"value\"\n          [readonly]=\"readonly\"\n          [multiple]=\"multiple\"\n          [textField]=\"textField\"\n          [selectionMode]=\"'item'\"\n          [valueField]=\"valueField\"\n          [itemHeight]=\"itemHeight()\"\n          [textTemplate]=\"textTemplate\"\n          [itemTemplate]=\"itemTemplate\"\n          [dataSource]=\"_listDataSource\"\n          [loadingTemplate]=\"loadingTemplate\"\n          [style.height]=\"dropdownSizes.height\"\n          [emptyTemplate]=\"emptyTemplate ?? empty\"\n          (onValueChanged)=\"_handleValueChanged($event)\"\n          (onItemClick)=\"_handleItemClick($event)\"\n          (onItemSelected)=\"_handleItemSelected($event)\"\n        >\n          <ng-template #empty> {{ '@acorex:common.general.no-result-found' | translate | async }} </ng-template>\n        </ax-list>\n        @if (listFooterTemplate()) {\n          <ng-template [ngTemplateOutlet]=\"listFooterTemplate()\"></ng-template>\n        }\n      }\n\n      @if (isLoading()) {\n        @if (loadingTemplate) {\n          <ng-template [ngTemplateOutlet]=\"loadingTemplate\"></ng-template>\n        } @else {\n          <div class=\"ax-autocomplete-loading-container\">\n            <ax-loading></ax-loading>\n          </div>\n        }\n      }\n\n      <ng-content select=\"ax-footer\"> </ng-content>\n    </div>\n  </ng-container>\n</ax-dropdown-box>\n" }]
        }], propDecorators: { delayTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "delayTime", required: false }] }], itemHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemHeight", required: false }] }], maxVisibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleItems", required: false }] }], dataSource: [{
                type: Input
            }], placeholder: [{
                type: Input
            }], caption: [{
                type: Input
            }], itemTemplate: [{
                type: Input
            }], selectedTemplate: [{
                type: Input
            }], emptyTemplate: [{
                type: Input
            }], loadingTemplate: [{
                type: Input
            }], listHeaderTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "listHeaderTemplate", required: false }] }], listFooterTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "listFooterTemplate", required: false }] }], dropdownWidth: [{
                type: Input
            }], list: [{
                type: ViewChild,
                args: [AXListComponent]
            }], dropdown: [{
                type: ViewChild,
                args: [AXDropdownBoxComponent, { static: true }]
            }], __hostName: [{
                type: HostBinding,
                args: ['attr.name']
            }] } });

class AXAutocompleteModule {
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXAutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: AXAutocompleteModule, imports: [AXAutocompleteComponent], exports: [AXAutocompleteComponent] }); }
    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXAutocompleteModule, imports: [AXAutocompleteComponent] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AXAutocompleteModule, decorators: [{
            type: NgModule,
            args: [{
                    imports: [AXAutocompleteComponent],
                    exports: [AXAutocompleteComponent],
                }]
        }] });

/**
 * Generated bundle index. Do not edit.
 */

export { AXAutocompleteComponent, AXAutocompleteModule };
//# sourceMappingURL=acorex-components-autocomplete.mjs.map
