import { ElementRef, EventEmitter, OnChanges } from '@angular/core';
import { NgControl } from '@angular/forms';
import { KbqAutocompleteTrigger } from '@koobiq/components/autocomplete';
import { KbqTrim } from '@koobiq/components/form-field';
import { KbqTagsDefaultOptions } from './tag-default-options';
import { KbqTagList } from './tag-list.component';
import { KbqTagTextControl } from './tag-text-control';
import * as i0 from "@angular/core";
import * as i1 from "@koobiq/components/core";
/** Represents an input event on a `kbqTagInput`. */
export interface KbqTagInputEvent {
    /** The native `<input>` element that the event is being fired for. */
    input: HTMLInputElement;
    /** The value of the input. */
    value: string;
}
export interface KbqTagSeparator {
    symbol: RegExp;
    key: string;
}
/**
 * Directive that adds tag-specific behaviors to an input element inside `<kbq-form-field>`.
 * May be placed inside or outside of an `<kbq-tag-list>`.
 */
export declare class KbqTagInput implements KbqTagTextControl, OnChanges {
    private elementRef;
    private defaultOptions;
    private trimDirective;
    ngControl: NgControl;
    autocompleteTrigger?: KbqAutocompleteTrigger | undefined;
    /** Whether the control is focused. */
    focused: boolean;
    /**
     * The list of key codes that will trigger a tagEnd event.
     *
     * Defaults to `[ENTER]`.
     */
    set separatorKeyCodes(value: number[]);
    private _separatorKeyCodes;
    get separators(): KbqTagSeparator[];
    private _separators;
    /** Emitted when a tag is to be added. */
    readonly tagEnd: EventEmitter<KbqTagInputEvent>;
    /** A value indicating whether allow/prevent tags duplication  */
    distinct: boolean;
    /** The input's placeholder text. */
    placeholder: string;
    /** Unique id for the input. */
    id: string;
    /** Register input for tag list */
    set tagList(value: KbqTagList);
    private _tagList;
    /**
     * Whether or not the tagEnd event will be emitted when the input is blurred.
     */
    get addOnBlur(): boolean;
    set addOnBlur(value: boolean);
    private _addOnBlur;
    /**
     * Whether the tagEnd event will be emitted when the text pasted.
     */
    get addOnPaste(): boolean;
    set addOnPaste(value: boolean);
    private _addOnPaste;
    /** Whether the input is disabled. */
    get disabled(): boolean;
    set disabled(value: boolean);
    private _disabled;
    /** Whether the input is empty. */
    get empty(): boolean;
    /**
     * @docs-private
     *
     * @deprecated Unused. Will be removed in next major release.
     */
    countOfSymbolsForUpdateWidth: number;
    /** The native input element to which this directive is attached. */
    private inputElement;
    constructor(elementRef: ElementRef<HTMLInputElement>, defaultOptions: KbqTagsDefaultOptions, trimDirective: KbqTrim, ngControl: NgControl, autocompleteTrigger?: KbqAutocompleteTrigger | undefined);
    ngOnChanges(): void;
    /** @docs-private */
    onKeydown(event: KeyboardEvent): void;
    /** Checks to see if the blur should emit the (tagEnd) event. */
    blur(event: FocusEvent): void;
    triggerValidation(): void;
    /** Checks to see if the (tagEnd) event needs to be emitted. */
    emitTagEnd(): void;
    get hasDuplicates(): boolean;
    onInput(): void;
    onPaste($event: ClipboardEvent): void;
    /**
     * @docs-private
     *
     * @deprecated Unused. Will be removed in next major release.
     */
    updateInputWidth(): void;
    /** @docs-private */
    onFocus(): void;
    /** Focuses the input. */
    focus(): void;
    private getSeparatorsForString;
    private trimValue;
    private getSeparatorByKeyCode;
    private hasControl;
    /** Checks whether a keycode is one of the configured separators. */
    private isSeparatorKey;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqTagInput, [null, null, { optional: true; self: true; }, { optional: true; self: true; }, { optional: true; self: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTagInput, "input[kbqTagInputFor]", ["kbqTagInput", "kbqTagInputFor"], { "separatorKeyCodes": { "alias": "kbqTagInputSeparatorKeyCodes"; "required": false; }; "distinct": { "alias": "distinct"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "id": { "alias": "id"; "required": false; }; "tagList": { "alias": "kbqTagInputFor"; "required": false; }; "addOnBlur": { "alias": "kbqTagInputAddOnBlur"; "required": false; }; "addOnPaste": { "alias": "kbqTagInputAddOnPaste"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "tagEnd": "kbqTagInputTokenEnd"; }, never, never, false, [{ directive: typeof i1.KbqFieldSizingContent; inputs: {}; outputs: {}; }]>;
}
