import React, { CSSProperties, ReactNode } from 'react';
import PropTypes from 'prop-types';
import Trigger from '../trigger/Trigger';
import { Action } from '../trigger/enum';
import { TextField, TextFieldProps } from '../text-field/TextField';
import TaskRunner from '../_util/TaskRunner';
export interface TriggerFieldProps extends TextFieldProps {
    /**
     * 下拉框的自定义内容
     */
    popupContent?: ReactNode | ((props: any) => ReactNode);
    /**
     * 下拉框的自定义样式名
     */
    popupCls?: string;
    /**
     * 下拉框的内链样式
     */
    popupStyle?: CSSProperties;
    /**
     * 触发下拉框的方式组
     * 可选值：click | focus | hover | contextMenu
     */
    trigger?: Action[];
    /**
     * 下拉框显示延迟
     * @defualt 150
     */
    triggerShowDelay?: number;
    /**
     * 下拉框隐藏延迟
     * @defualt 50
     */
    triggerHiddenDelay?: number;
    /**
     * 下拉框变化钩子
     */
    onPopupHiddenChange?: (hidden: boolean) => void;
    /**
     * 定义浮层的容器，默认为 body
     * @param triggerNode
     */
    getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
}
export default abstract class TriggerField<T extends TriggerFieldProps> extends TextField<T & TriggerFieldProps> {
    static displayName: string;
    static propTypes: {
        id: PropTypes.Requireable<string>;
        size: PropTypes.Requireable<import("../core/enum").Size>;
        suffixCls: PropTypes.Requireable<string>;
        prefixCls: PropTypes.Requireable<string>;
        title: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        disabled: PropTypes.Requireable<boolean>;
        hidden: PropTypes.Requireable<boolean>;
        autoFocus: PropTypes.Requireable<boolean>;
        style: PropTypes.Requireable<object>;
        className: PropTypes.Requireable<string>;
        tabIndex: PropTypes.Requireable<number>;
        lang: PropTypes.Requireable<string>;
        spellCheck: PropTypes.Requireable<boolean>;
        onFocus: PropTypes.Requireable<(...args: any[]) => any>;
        onBlur: PropTypes.Requireable<(...args: any[]) => any>;
        onClick: PropTypes.Requireable<(...args: any[]) => any>;
        onDoubleClick: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseUp: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseDown: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseMove: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
        onMouseOut: PropTypes.Requireable<(...args: any[]) => any>;
        onContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyUp: PropTypes.Requireable<(...args: any[]) => any>;
        onKeyPress: PropTypes.Requireable<(...args: any[]) => any>;
        dataSet: PropTypes.Requireable<object>;
        _inTable: PropTypes.Requireable<boolean>;
        type: PropTypes.Requireable<string>;
        name: PropTypes.Requireable<string>;
        value: PropTypes.Requireable<any>;
        defaultValue: PropTypes.Requireable<any>;
        required: PropTypes.Requireable<boolean>;
        readOnly: PropTypes.Requireable<boolean>;
        form: PropTypes.Requireable<string>;
        dataIndex: PropTypes.Requireable<number>;
        multiple: PropTypes.Requireable<boolean>;
        rowSpan: PropTypes.Requireable<number>;
        newLine: PropTypes.Requireable<boolean>;
        colSpan: PropTypes.Requireable<number>;
        validator: PropTypes.Requireable<(...args: any[]) => any>;
        onInvalid: PropTypes.Requireable<(...args: any[]) => any>;
        help: PropTypes.Requireable<string>;
        showHelp: PropTypes.Requireable<import("../field/enum").ShowHelp>;
        renderer: PropTypes.Requireable<(...args: any[]) => any>;
        validationRenderer: PropTypes.Requireable<(...args: any[]) => any>;
        maxTagPlaceholder: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        maxTagCount: PropTypes.Requireable<number>;
        maxTagTextLength: PropTypes.Requireable<number>;
        pristine: PropTypes.Requireable<boolean>;
        trim: PropTypes.Requireable<import("../data-set/enum").FieldTrim>;
        onBeforeChange: PropTypes.Requireable<(...args: any[]) => any>;
        onChange: PropTypes.Requireable<(...args: any[]) => any>;
        onInput: PropTypes.Requireable<(...args: any[]) => any>;
        onEnterDown: PropTypes.Requireable<(...args: any[]) => any>;
        fieldClassName: PropTypes.Requireable<string>;
        placeholder: PropTypes.Requireable<string | (string | null | undefined)[]>;
        minLength: PropTypes.Requireable<number>;
        maxLength: PropTypes.Requireable<number>;
        pattern: PropTypes.Requireable<string | object>;
        autoComplete: PropTypes.Requireable<string>;
        prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        suffix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        clearButton: PropTypes.Requireable<boolean>;
        addonBefore: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        restrict: PropTypes.Requireable<string>;
        isFlat: PropTypes.Requireable<boolean>;
        valueChangeAction: PropTypes.Requireable<import("../text-field/enum").ValueChangeAction>;
        wait: PropTypes.Requireable<number>;
        waitType: PropTypes.Requireable<import("../core/enum").WaitType>;
        groupClassName: PropTypes.Requireable<string>;
        /**
         * 下拉框的自定义内容
         */
        popupContent: PropTypes.Requireable<PropTypes.ReactElementLike>;
        /**
         * 下拉框的自定义样式名
         */
        popupCls: PropTypes.Requireable<string>;
        /**
         * 下拉框的内链样式
         */
        popupStyle: PropTypes.Requireable<object>;
        /**
         * 触发下拉框的方式
         * 可选值：click | focus | hover | contextMenu
         */
        trigger: React.Requireable<any>;
        /**
         * 下拉框显示延迟
         * @defualt 150
         */
        triggerShowDelay: PropTypes.Requireable<number>;
        /**
         * 下拉框隐藏延迟
         * @defualt 50
         */
        triggerHiddenDelay: PropTypes.Requireable<number>;
        /**
         * 下拉框变化钩子
         */
        onPopupHiddenChange: PropTypes.Requireable<(...args: any[]) => any>;
        /**
         * 定义浮层的容器，默认为 body
         */
        getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
    };
    static defaultProps: {
        suffixCls: string;
        clearButton: boolean;
        trigger: string[];
        triggerShowDelay: number;
        triggerHiddenDelay: number;
        multiple: boolean;
        valueChangeAction: import("../text-field/enum").ValueChangeAction;
        waitType: import("../core/enum").WaitType;
        readOnly: boolean;
        disabled: boolean;
        noValidate: boolean;
        showHelp: string;
        trim: import("../data-set/enum").FieldTrim;
    };
    popupTask: TaskRunner;
    trigger: Trigger | null;
    statePopup: boolean;
    get popup(): boolean;
    constructor(props: any, context: any);
    isValidationMessageHidden(message?: ReactNode): undefined | boolean;
    setPopup(statePopup: boolean): void;
    abstract getTriggerIconFont(): string;
    abstract handlePopupAnimateAppear(key: any): void;
    abstract handlePopupAnimateEnd(key: any, exists: any): void;
    abstract getPopupStyleFromAlign(target: any): CSSProperties | undefined;
    abstract getPopupContent(): ReactNode;
    getRootDomNode(): Element | Text | null;
    getOtherProps(): Pick<Pick<Pick<Pick<any, string | number | symbol>, string | number | symbol>, string | number | symbol>, string | number | symbol>;
    getPopupProps(): {};
    getWrappedEditor(): JSX.Element;
    getWrapperClassNames(...args: any[]): string;
    getDefaultSuffix(): ReactNode;
    handleTagAnimateEnd(): void;
    handlePopupMouseDown(e: any): void;
    handlePopupHiddenChange(hidden: boolean): void;
    forcePopupAlign(): void;
    expand(): void;
    collapse(): void;
}
