import type { InputProps, InputValue } from '../input';
import type { TagProps } from '../tag';
import type { TNode } from '../common';
export interface TdTagInputProps {
    autoWidth?: boolean;
    clearable?: boolean;
    collapsedItems?: TNode<{
        value: TagInputValue;
        collapsedTags: TagInputValue;
        count: number;
    }>;
    disabled?: boolean;
    dragSort?: boolean;
    excessTagsDisplayType?: 'scroll' | 'break-line';
    inputProps?: InputProps;
    inputValue?: InputValue;
    defaultInputValue?: InputValue;
    label?: string | TNode;
    max?: number;
    minCollapsedNum?: number;
    placeholder?: string;
    readonly?: boolean;
    size?: 'small' | 'medium' | 'large';
    status?: 'default' | 'success' | 'warning' | 'error';
    suffix?: string | TNode;
    suffixIcon?: TNode;
    tag?: string | TNode<{
        value: string | number;
    }>;
    tagProps?: TagProps;
    tips?: string | TNode;
    value?: TagInputValue;
    defaultValue?: TagInputValue;
    modelValue?: TagInputValue;
    valueDisplay?: string | TNode<{
        value: TagInputValue;
        onClose: (index: number, item?: any) => void;
    }>;
    onBlur?: (value: TagInputValue, context: {
        inputValue: InputValue;
        e: FocusEvent;
    }) => void;
    onChange?: (value: TagInputValue, context: TagInputChangeContext) => void;
    onClear?: (context: {
        e: MouseEvent;
    }) => void;
    onClick?: (context: {
        e: MouseEvent;
    }) => void;
    onDragSort?: (context: TagInputDragSortContext) => void;
    onEnter?: (value: TagInputValue, context: {
        e: KeyboardEvent;
        inputValue: InputValue;
    }) => void;
    onFocus?: (value: TagInputValue, context: {
        inputValue: InputValue;
        e: FocusEvent;
    }) => void;
    onInputChange?: (value: InputValue, context?: InputValueChangeContext) => void;
    onMouseenter?: (context: {
        e: MouseEvent;
    }) => void;
    onMouseleave?: (context: {
        e: MouseEvent;
    }) => void;
    onPaste?: (context: {
        e: ClipboardEvent;
        pasteValue: string;
    }) => void;
    onRemove?: (context: TagInputRemoveContext) => void;
}
export declare type TagInputValue = Array<string | number>;
export interface TagInputChangeContext {
    trigger: TagInputTriggerSource;
    index?: number;
    item?: string | number;
    e?: MouseEvent | KeyboardEvent;
}
export declare type TagInputTriggerSource = 'enter' | 'tag-remove' | 'backspace' | 'clear';
export interface TagInputDragSortContext {
    newTags: TagInputValue;
    currentIndex: number;
    current: string | number;
    targetIndex: number;
    target: string | number;
}
export interface InputValueChangeContext {
    e?: InputEvent | MouseEvent | CompositionEvent | KeyboardEvent;
    trigger: 'input' | 'clear' | 'enter' | 'blur';
}
export interface TagInputRemoveContext {
    value: TagInputValue;
    index: number;
    item: string | number;
    e?: MouseEvent | KeyboardEvent;
    trigger: TagInputRemoveTrigger;
}
export declare type TagInputRemoveTrigger = 'tag-remove' | 'backspace';
