import { ChangeDetectorRef, ElementRef, EventEmitter, NgIterable, OnChanges, OnDestroy, OnInit, QueryList } from '@angular/core';
import { ControlContainer, ControlValueAccessor } from '@angular/forms';
import { QdFormMultiInputConfiguration, QdMultiInputOption } from '../model/forms.interface';
import { QdFormArray } from '../reactive-forms/controls/form-array';
import { QdFormArrayFactoryService } from '../reactive-forms/controls/form-array-factory.service';
import { QdFormsActionEmitterService } from '../shared/services/action-emitter.service';
import { QdMultiInputService } from './multi-input-service/multi-input.service';
import { QdPopoverOnClickDirective } from '../../core/popover/popover-on-click/popover-on-click.directive';
import { QdMultiInputMenuComponent } from './multi-input-menu/multi-input-menu.component';
import { QdEventBrokerService } from '../../core/services/event-broker.service';
import * as i0 from "@angular/core";
/**
 * The **QdMultiInput** is a component that provides a user interface for entering multiple inputs.<br />
 * It is designed to enhance the user experience when dealing with multiple inputs and can be used with Quadrel Reactive Forms or with model binding.
 *
 * ####**Usage with Reactive Forms**
 *
 * ```ts
 * form = new QdFormGroup({
 *   multiInput: new QdFormArray()
 * });
 * ```
 * ```html
 * <form [formGroup]="form">
 *   <qd-multi-input [formArrayName]="multiInput" [config]="config"></qd-multi-input>
 * </form>
 * ```
 *
 * ####**Usage with Model Binding**
 * ```ts
 * values;
 * ```
 * ```html
 * <qd-multi-input [(values)]="values" [config]="config"></qd-multi-input>
 * ```
 */
export declare class QdMultiInputComponent implements ControlValueAccessor, OnInit, OnChanges, OnDestroy, OnDestroy {
    private readonly hostRef;
    private readonly multiInputService;
    private readonly changeDetectorRef;
    private readonly actionEmitterService;
    private readonly qdFormArrayFactoryService;
    private readonly controlContainer;
    private readonly eventBrokerService;
    /**
     * Here an id can be assigned, with which a value can be linked to a corresponding label.
     */
    id: any;
    /**
     * The current form item values, if you are working with Model Binding.
     *
     * @example
     * <qd-multi-input [(values)]="values" [config]="config"></qd-multi-input>
     */
    set values(values: string[]);
    get values(): string[];
    /**
     * * @deprecated
     * TODO remove logic for support of [formControlName] directive and FormControl with angular 14 update
     */
    set formControlName(formControlName: string);
    get formControlName(): string;
    set formArrayName(formArrayName: string);
    get formArrayName(): string;
    /**
     * The configuration for this form item
     *
     * @example
     * {
     *   label: { i18n: 'my-label' },
     *   hint: { i18n: 'my-hint' },
     *   options: [
     *     { i18n: 'i18n.qd.exampleFormField.goodsDeclaration.import', value: 'import' },
     *     { i18n: 'i18n.qd.exampleFormField.goodsDeclaration.export', value: 'export' },
     *     { i18n: 'i18n.qd.exampleFormField.goodsDeclaration.transit', value: 'transit' }
     *   ]
     * };
     */
    config: QdFormMultiInputConfiguration;
    /**
     * A static test ID for integration tests can be set. <br />
     * The value for the HTML attribute [data-test-id].
     */
    testId: string;
    /**
     * Emits event when the values change. Return values match the current values.
     */
    readonly valuesChange: EventEmitter<string[]>;
    /**
     * Emits event when the hint is clicked/tapped. `hintAction` must be set to `true` for this.
     */
    readonly clickHint: EventEmitter<any>;
    /**
     * Emits event when a readonly value is clicked/tapped. `clickReadonly ` must be set to `true` for this.
     */
    readonly clickReadonly: EventEmitter<any>;
    /**
     * Emits event when a viewonly value is clicked/tapped. `clickViewonly ` must be set to `true` for this.
     */
    readonly clickViewonly: EventEmitter<any>;
    inputField: ElementRef;
    multiInputMenu: QdMultiInputMenuComponent;
    popoverOnClickDirective: QdPopoverOnClickDirective;
    errorTooltips: QueryList<ElementRef>;
    dropdownOptions: QueryList<ElementRef>;
    readonly: boolean;
    readonlyAction: boolean;
    viewonly: boolean;
    viewonlyAction: boolean;
    hintAction: boolean;
    disabled: boolean;
    hasFocus: boolean;
    get hasError(): boolean;
    clickOutside($event: any): void;
    label: string;
    options: QdMultiInputOption[];
    open: boolean;
    optionsListForView: QdMultiInputOption[];
    filterOptions: string;
    formArray: QdFormArray<string>;
    private _values;
    private _formControlName;
    private _formArrayName;
    private _onDisabledChange;
    private _subs;
    private _resizeObserver;
    private _onChange;
    private _onTouch;
    get hasHint(): boolean;
    constructor(hostRef: ElementRef<HTMLElement>, multiInputService: QdMultiInputService, changeDetectorRef: ChangeDetectorRef, actionEmitterService: QdFormsActionEmitterService, qdFormArrayFactoryService: QdFormArrayFactoryService, controlContainer: ControlContainer, eventBrokerService: QdEventBrokerService);
    ngOnInit(): void;
    ngOnChanges(changes: any): void;
    ngOnDestroy(): void;
    registerOnChange(fn: (_: any) => void): void;
    registerOnTouched(fn: any): void;
    writeValue(values: string[]): void;
    getItems(): QdMultiInputOption[];
    hasItems(): boolean;
    getTranslation(option: QdMultiInputOption): string;
    openPopover(): void;
    closePopover(): void;
    handleClick(option: QdMultiInputOption): void;
    handleBlur(): void;
    onKeyDown(event: KeyboardEvent): void;
    changeValue(): void;
    close(index: any): void;
    getIterableElements(): NgIterable<any>;
    getValues(): QdMultiInputOption[];
    handleChipClick($event: any): void;
    handleReadOnlyAction($event: any): void;
    handleViewOnlyAction($event: any): void;
    focus(): void;
    private updateConfiguration;
    private addChip;
    private handleUserInput;
    private addItemsToChipSet;
    private getSplitOptions;
    private findOptionIndex;
    private addItem;
    private haveOptionsChanged;
    private blur;
    private getItemsArray;
    private initOpModeSubscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<QdMultiInputComponent, [null, null, null, null, null, { optional: true; host: true; skipSelf: true; }, { optional: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<QdMultiInputComponent, "qd-multi-input", never, { "id": { "alias": "id"; "required": false; }; "values": { "alias": "values"; "required": false; }; "formControlName": { "alias": "formControlName"; "required": false; }; "formArrayName": { "alias": "formArrayName"; "required": false; }; "config": { "alias": "config"; "required": false; }; "testId": { "alias": "data-test-id"; "required": false; }; }, { "valuesChange": "valuesChange"; "clickHint": "clickHint"; "clickReadonly": "clickReadonly"; "clickViewonly": "clickViewonly"; }, never, never, false, never>;
}
//# sourceMappingURL=multi-input.component.d.ts.map