import { CSSProperties, ReactNode } from 'react';
import Trigger from '../../../lib/trigger/Trigger';
import { Action } from '../../../lib/trigger/enum';
import { TextField, TextFieldProps } from '../text-field/TextField';
import TaskRunner from '../_util/TaskRunner';
import { TriggerViewMode } from './enum';
export interface TriggerFieldPopupContentProps {
    setValue: (value: any) => void;
    setPopup: (hidden: boolean) => void;
}
export { TriggerViewMode, };
export interface TriggerFieldProps<P extends TriggerFieldPopupContentProps = TriggerFieldPopupContentProps> extends TextFieldProps {
    /**
     * 下拉框的自定义内容
     */
    popupContent?: ReactNode | ((props: P) => ReactNode);
    /**
     * 下拉框的自定义样式名
     */
    popupCls?: string;
    /**
     * 下拉框的内链样式
     */
    popupStyle?: CSSProperties;
    /**
     * 下拉框对齐方式
     */
    popupPlacement?: string;
    /**
     * 触发下拉框的方式组
     * 可选值：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 | undefined | null;
    /**
     * 定义浮层对齐的目标，默认为组件最外层元素
     */
    getPopupAlignTarget?: () => HTMLElement;
    /**
     * 当popup中有可获取焦点对象时，是否按tab键时获取焦点
     */
    tabIntoPopupContent?: boolean;
    viewMode?: TriggerViewMode;
}
export default abstract class TriggerField<T extends TriggerFieldProps = TriggerFieldProps> extends TextField<T> {
    static displayName: string;
    static defaultProps: {
        suffixCls: string;
        clearButton: boolean;
        popupPlacement: string;
        triggerShowDelay: number;
        triggerHiddenDelay: number;
        viewMode: TriggerViewMode;
        multiple: boolean;
        border: boolean;
        valueChangeAction: import("../text-field/enum").ValueChangeAction;
        waitType: import("../core/enum").WaitType;
        readOnly: boolean;
        disabled: boolean;
        noValidate: boolean;
        trim: import("../data-set/enum").FieldTrim;
    };
    popupTask?: TaskRunner;
    trigger: Trigger | null;
    statePopup: boolean;
    get popup(): boolean;
    constructor(props: any, context: any);
    saveTrigger(node: any): void;
    isValidationMessageHidden(message?: ReactNode): 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;
    getOmitPropsKeys(): string[];
    getObservableProps(props: any, context: any): any;
    getPopupProps(): TriggerFieldPopupContentProps;
    getPopupClassName(defaultClassName: string | undefined): string | undefined;
    getPopupWrapper(): HTMLDivElement | undefined;
    renderPopupContent(): T["popupContent"];
    getDefaultAction(): Action[];
    getWrappedEditor(renderedValue?: ReactNode): JSX.Element;
    getWrapperClassNames(...args: any[]): string;
    getDefaultSuffix(): ReactNode;
    handleTagAnimateEnd(): void;
    handlePopupMouseDown(e: any): void;
    handlePopupHiddenChange(hidden: boolean): void;
    forcePositionChanged(): void;
    forcePopupAlign(): void;
    expand(): void;
    collapse(): void;
}
