import * as polytype from 'polytype';
import * as _angular_core from '@angular/core';
import { OnInit, TemplateRef } from '@angular/core';
import { MXInputBaseValueComponent, MXLookComponent, AXAutocompleteParentComponent, AXClickEvent } from '@acorex/cdk/common';
import { AXUnsubscriber } from '@acorex/core/utils';

declare const AXTagBoxComponent_base: polytype.Polytype.ClusteredConstructor<[{
    new (): MXInputBaseValueComponent<unknown[]>;
    ɵfac: _angular_core.ɵɵFactoryDeclaration<MXInputBaseValueComponent<any>, never>;
    ɵprov: _angular_core.ɵɵInjectableDeclaration<MXInputBaseValueComponent<any>>;
}, typeof MXLookComponent, (abstract new () => AXAutocompleteParentComponent<unknown[]>) & {
    ɵfac: _angular_core.ɵɵFactoryDeclaration<AXAutocompleteParentComponent<any>, never>;
    ɵprov: _angular_core.ɵɵInjectableDeclaration<AXAutocompleteParentComponent<any>>;
}]>;
declare class AXTagBoxComponent extends AXTagBoxComponent_base implements OnInit {
    unsubscriber: AXUnsubscriber;
    protected updateOn: _angular_core.WritableSignal<"change" | "blur" | "submit">;
    addOnComma: _angular_core.InputSignal<boolean>;
    addOnEnter: _angular_core.InputSignal<boolean>;
    valueField: _angular_core.InputSignal<string>;
    textField: _angular_core.InputSignal<string>;
    readonlyField: _angular_core.InputSignal<string>;
    allowDuplicateValues: _angular_core.InputSignal<boolean>;
    tagTemplate: _angular_core.InputSignal<TemplateRef<unknown>>;
    onTagClick: _angular_core.OutputEmitterRef<AXClickEvent>;
    onTagDblClick: _angular_core.OutputEmitterRef<AXClickEvent>;
    onTagContextMenu: _angular_core.OutputEmitterRef<AXClickEvent>;
    inputValue: _angular_core.WritableSignal<string>;
    private autocompleteComponent;
    ngOnInit(): void;
    /**
     * Adds items to the tag box.
     *
     * @param items - Array of objects to add as tags
     */
    addItems(items: object[]): void;
    /**
     * Removes a tag at the specified index.
     *
     * @param index - Index of the tag to remove
     */
    removeItem(index: number): void;
    /**
     * Converts input values to tag objects.
     *
     * @param v - Value to convert (string, object, or array)
     * @returns Array of tag objects
     */
    convertString(v: unknown): object[];
    getFieldValue(item: unknown, path: string): unknown;
    /**
     * Keep autocomplete selected values in sync with current tags
     */
    private syncAutocompleteSelection;
    protected internalSetValue(value: unknown): unknown[];
    private get __hostName();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXTagBoxComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXTagBoxComponent, "ax-tag-box", never, { "disabled": { "alias": "disabled"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "value": { "alias": "value"; "required": false; }; "state": { "alias": "state"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "allowNull": { "alias": "allowNull"; "required": false; }; "type": { "alias": "type"; "required": false; }; "look": { "alias": "look"; "required": false; }; "addOnComma": { "alias": "addOnComma"; "required": false; "isSignal": true; }; "addOnEnter": { "alias": "addOnEnter"; "required": false; "isSignal": true; }; "valueField": { "alias": "valueField"; "required": false; "isSignal": true; }; "textField": { "alias": "textField"; "required": false; "isSignal": true; }; "readonlyField": { "alias": "readonlyField"; "required": false; "isSignal": true; }; "allowDuplicateValues": { "alias": "allowDuplicateValues"; "required": false; "isSignal": true; }; "tagTemplate": { "alias": "tagTemplate"; "required": false; "isSignal": true; }; }, { "onBlur": "onBlur"; "onFocus": "onFocus"; "valueChange": "valueChange"; "stateChange": "stateChange"; "onValueChanged": "onValueChanged"; "readonlyChange": "readonlyChange"; "disabledChange": "disabledChange"; "onKeyDown": "onKeyDown"; "onKeyUp": "onKeyUp"; "onKeyPress": "onKeyPress"; "onTagClick": "onTagClick"; "onTagDblClick": "onTagDblClick"; "onTagContextMenu": "onTagContextMenu"; }, ["autocompleteComponent"], ["ax-prefix", "ax-clear-button", "ax-suffix", "ax-autocomplete", "ax-validation-rule"], true, never>;
}

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

export { AXTagBoxComponent, AXTagBoxModule };
