import React, { Component, CSSProperties, Key, MouseEventHandler, ReactElement, ReactNode } from 'react';
import PropTypes from 'prop-types';
import { ElementProps } from '../../pro/lib/core/ViewComponent';
import TaskRunner from '../_util/TaskRunner';
import Popup from './Popup';
import EventManager from '../_util/EventManager';
import { Action, HideAction, ShowAction } from './enum';
export declare type RenderFunction = (props?: {
    trigger?: ReactNode;
}) => React.ReactNode;
export declare type ChildrenFunction = (caller: (node: ReactNode) => ReactNode, childrenProps?: any) => ReactElement;
export interface TriggerProps extends ElementProps {
    action?: Action[];
    showAction?: ShowAction[];
    hideAction?: HideAction[];
    popupContent?: ReactNode | RenderFunction;
    popupCls?: string;
    popupStyle?: CSSProperties;
    popupHidden?: boolean;
    popupPlacement?: string;
    popupAlign?: object;
    builtinPlacements?: any;
    onPopupAlign?: (source: Node, align: object, target: Node | Window, translate: {
        x: number;
        y: number;
    }) => void;
    onPopupAnimateAppear?: (key: Key | null) => void;
    onPopupAnimateEnter?: (key: Key | null) => void;
    onPopupAnimateLeave?: (key: Key | null) => void;
    onPopupAnimateEnd?: (key: Key | null, exists: boolean) => void;
    onPopupHiddenBeforeChange?: (hidden: boolean) => boolean;
    onPopupHiddenChange?: (hidden: boolean) => void;
    onPopupMouseEnter?: MouseEventHandler<any>;
    onPopupMouseLeave?: MouseEventHandler<any>;
    getRootDomNode?: () => Element | null | Text;
    getPopupStyleFromAlign?: (target: Node | Window, align: object) => object | undefined;
    getPopupClassNameFromAlign?: (align: object) => string | undefined;
    getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
    focusDelay?: number;
    blurDelay?: number;
    mouseEnterDelay?: number;
    mouseLeaveDelay?: number;
    transitionName?: string;
    defaultPopupHidden?: boolean;
    forceRender?: boolean;
    tabIntoPopupContent?: boolean;
    popupClassName?: string;
    children?: ReactNode | ChildrenFunction;
    childrenProps?: any;
}
export default class Trigger extends Component<TriggerProps> {
    static displayName: string;
    static propTypes: {
        action: React.Requireable<any>;
        showAction: React.Requireable<any>;
        hideAction: React.Requireable<any>;
        popupContent: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        popupCls: PropTypes.Requireable<string>;
        popupStyle: PropTypes.Requireable<object>;
        popupHidden: PropTypes.Requireable<boolean>;
        popupPlacement: PropTypes.Requireable<string>;
        popupAlign: PropTypes.Requireable<object>;
        builtinPlacements: PropTypes.Requireable<any>;
        onPopupAnimateAppear: PropTypes.Requireable<(...args: any[]) => any>;
        onPopupAnimateEnter: PropTypes.Requireable<(...args: any[]) => any>;
        onPopupAnimateLeave: PropTypes.Requireable<(...args: any[]) => any>;
        onPopupAnimateEnd: PropTypes.Requireable<(...args: any[]) => any>;
        onPopupAlign: PropTypes.Requireable<(...args: any[]) => any>;
        onPopupHiddenChange: PropTypes.Requireable<(...args: any[]) => any>;
        getPopupStyleFromAlign: PropTypes.Requireable<(...args: any[]) => any>;
        getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
        focusDelay: PropTypes.Requireable<number>;
        blurDelay: PropTypes.Requireable<number>;
        mouseEnterDelay: PropTypes.Requireable<number>;
        mouseLeaveDelay: PropTypes.Requireable<number>;
        transitionName: PropTypes.Requireable<string>;
        defaultPopupHidden: PropTypes.Requireable<boolean>;
        popupClassName: PropTypes.Requireable<string>;
        tabIntoPopupContent: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        focusDelay: number;
        blurDelay: number;
        mouseEnterDelay: number;
        mouseLeaveDelay: number;
        transitionName: string;
        defaultPopupHidden: boolean;
    };
    popup: Popup | null;
    popupTask?: TaskRunner;
    documentEvent?: EventManager;
    targetEvent?: EventManager;
    focusTime: number;
    preClickTime: number;
    animateFrameId: number;
    popupHidden?: boolean;
    mounted?: boolean;
    activeElement?: HTMLElement | null;
    currentTriggerChild?: ReactElement | null;
    focusElements?: HTMLElement[];
    target?: HTMLElement | null;
    focusTarget?: HTMLElement | null;
    align?: object;
    constructor(props: any, context: any);
    saveRef(node: any): void;
    getFocusableElements(elements: any): void;
    renderTriggerChild(child: ReactNode): ReactNode;
    render(): ({} | null | undefined)[];
    componentWillReceiveProps(nextProps: any): void;
    componentDidMount(): void;
    componentDidUpdate(): void;
    componentWillUnmount(): void;
    cancelPopupTask(): void;
    handlePopupKeyDown(e: any): void;
    handleTargetBlur(e: any, child: ReactElement): boolean;
    handleTriggerEvent(eventName: any, child: any, e: any): void;
    handleEvent(eventName: string, child: ReactElement, e: any): void;
    handlePopupMouseDown(e: any): void;
    handlePopupBlur(e: any): void;
    handleContextMenu(e: any): void;
    handleKeyDown(e: any): void;
    handleFocus(): void;
    handleBlur(): void;
    handleDocumentMouseDown(e: any): void;
    handleDocumentScroll({ target }: {
        target: any;
    }): void;
    handleMouseDown(): void;
    handleClick(e: any): void;
    handleMouseEnter(): void;
    handleMouseLeave(): void;
    handlePopupMouseEnter(e: any): void;
    handlePopupMouseLeave(e: any): void;
    getPopup(): ReactNode;
    getRootDomNode(): Element | Text | null;
    getPopupClassNameFromAlign(align: any): string;
    forcePopupAlign(): void;
    getPopupContent(): any;
    popupHiddenBeforeChange(hidden: boolean): boolean;
    setPopupHidden(hidden: boolean): void;
    delaySetPopupHidden(popupHidden: any, delay: any): void;
    isClickToShow(): boolean;
    isContextMenuToShow(): boolean;
    isClickToHide(): boolean;
    isMouseEnterToShow(): boolean;
    isMouseLeaveToHide(): boolean;
    isFocusToShow(): boolean;
    isBlurToHide(): boolean;
}
