import * as _angular_core from '@angular/core';
import { AfterViewInit, OnDestroy, TemplateRef } from '@angular/core';
import * as polytype from 'polytype';
import { MXSelectionValueComponent, MXLookComponent, AXDataSource, MXSelectionBridgeService, AXAutocompleteParentComponent, MXInputBaseValueComponent, AXEvent, AXValueChangedEvent, AXItemClickEvent, AXItemSelectedEvent } from '@acorex/cdk/common';
import { MXDropdownBoxBaseComponent, AXDropdownBoxComponent } from '@acorex/components/dropdown';
import { AXListComponent } from '@acorex/components/list';

declare const AXAutocompleteComponent_base: polytype.Polytype.ClusteredConstructor<[typeof MXDropdownBoxBaseComponent, typeof MXSelectionValueComponent, typeof MXLookComponent]>;
/**
 * The Button is a component which detects user interaction and triggers a corresponding event
 * @category
 */
declare class AXAutocompleteComponent extends AXAutocompleteComponent_base implements AfterViewInit, OnDestroy {
    delayTime: _angular_core.InputSignal<number>;
    /** Height of each list item in pixels, or 'auto' to let list measure. */
    itemHeight: _angular_core.InputSignal<number | "auto">;
    /** Maximum number of visible items before scrolling. */
    maxVisibleItems: _angular_core.InputSignal<number>;
    protected inputValue: _angular_core.WritableSignal<string>;
    protected isLoading: _angular_core.WritableSignal<boolean>;
    /** @ignore */
    protected renderList: boolean;
    /** @ignore */
    protected dropdownSizes: {
        width: string;
        height: string;
    };
    /** @ignore */
    protected _listDataSource: AXDataSource<any>;
    /** @ignore */
    private _dataSource;
    /** @ignore */
    private onChangedSubscription;
    /**
     * Gets the data source for the component, which can be either an `AXDataSource` or an array of items.
     * @returns {AXDataSource<any> | any[]}
     */
    get dataSource(): AXDataSource<any> | any[];
    /**
     * 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: AXDataSource<any> | any[]);
    /**
     * The placeholder text displayed when the component is empty.
     * @param {string} placeholder
     */
    placeholder: string;
    /**
     * The caption text to be displayed in the component.
     * @param {string} caption
     */
    caption: string;
    /**
     * The template used to customize the rendering of items.
     * @param {TemplateRef<any>} itemTemplate
     */
    itemTemplate: TemplateRef<any>;
    /**
     * The template used to customize the rendering of selected items.
     * @param {TemplateRef<any>} selectedTemplate
     */
    selectedTemplate: TemplateRef<any>;
    /**
     * The template used to display when there are no items.
     * @param {TemplateRef<any>} emptyTemplate
     */
    emptyTemplate: TemplateRef<any>;
    /**
     * The template used to display while loading.
     * @param {TemplateRef<any>} loadingTemplate
     */
    loadingTemplate: TemplateRef<any>;
    /**
     * The template used to display the header of the list.
     * @param {TemplateRef<unknown>} listHeaderTemplate
     */
    listHeaderTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    /**
     * The template used to display the footer of the list.
     * @param {TemplateRef<unknown>} listFooterTemplate
     */
    listFooterTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    /**
     * The width of the dropdown in pixels.
     * @defaultValue 260
     */
    dropdownWidth: number;
    /** @ignore */
    list: AXListComponent;
    /** @ignore */
    protected dropdown: AXDropdownBoxComponent;
    /**
     * Service for managing selection data, injected via `AX_SELECTION_DATA_TOKEN`.
     */
    selectionService: MXSelectionBridgeService;
    /** @ignore */
    private _unsubscriber;
    parent: AXAutocompleteParentComponent<any>;
    parentText: MXInputBaseValueComponent<any>;
    /** @ignore */
    ngAfterViewInit(): void;
    /** @ignore */
    ngOnDestroy(): void;
    /**
     * Retrieves an item by its key.
     * @param {any} key
     */
    getItemByKey(key: any): Promise<any> | any;
    /** @ignore */
    protected _handleOnOpenedEvent(e: AXEvent): void;
    /** @ignore */
    protected _handleOnClosedEvent(e: AXEvent): void;
    /** @ignore */
    protected _handleValueChanged(e: AXValueChangedEvent): void;
    /** @ignore */
    protected _handleItemClick(e: AXItemClickEvent): void;
    /** @ignore */
    protected _handleItemSelected(e: AXItemSelectedEvent): void;
    /** @ignore */
    private setDropdownSize;
    /**
     * Filters the data source based on the provided search term.
     * @param {string} term
     */
    search(term: string): void;
    /**
     * Refreshes the component by resetting state, clearing selection cache, refreshing the list, and closing the component.
     */
    refresh(): void;
    private get __hostName();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAutocompleteComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXAutocompleteComponent, "ax-autocomplete", never, { "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "minValue": { "alias": "minValue"; "required": false; }; "maxValue": { "alias": "maxValue"; "required": false; }; "value": { "alias": "value"; "required": false; }; "state": { "alias": "state"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "type": { "alias": "type"; "required": false; }; "look": { "alias": "look"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "valueField": { "alias": "valueField"; "required": false; }; "textField": { "alias": "textField"; "required": false; }; "disabledField": { "alias": "disabledField"; "required": false; }; "textTemplate": { "alias": "textTemplate"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "delayTime": { "alias": "delayTime"; "required": false; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; }; "caption": { "alias": "caption"; "required": false; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; "selectedTemplate": { "alias": "selectedTemplate"; "required": false; }; "emptyTemplate": { "alias": "emptyTemplate"; "required": false; }; "loadingTemplate": { "alias": "loadingTemplate"; "required": false; }; "listHeaderTemplate": { "alias": "listHeaderTemplate"; "required": false; "isSignal": true; }; "listFooterTemplate": { "alias": "listFooterTemplate"; "required": false; "isSignal": true; }; "dropdownWidth": { "alias": "dropdownWidth"; "required": false; }; }, { "valueChange": "valueChange"; "stateChange": "stateChange"; "onValueChanged": "onValueChanged"; "onBlur": "onBlur"; "onFocus": "onFocus"; "readonlyChange": "readonlyChange"; "disabledChange": "disabledChange"; "onOpened": "onOpened"; "onClosed": "onClosed"; "onItemClick": "onItemClick"; "onItemSelected": "onItemSelected"; }, never, ["ax-footer"], true, never>;
}

declare class AXAutocompleteModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAutocompleteModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AXAutocompleteModule, never, [typeof AXAutocompleteComponent], [typeof AXAutocompleteComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<AXAutocompleteModule>;
}

export { AXAutocompleteComponent, AXAutocompleteModule };
