import React, { CSSProperties, Key, MouseEvent as ReactMouseEvent, ReactElement, ReactNode } from 'react';
import PropTypes from 'prop-types';
import ViewComponent, { ViewComponentProps } from '../core/ViewComponent';
import Button, { ButtonProps } from '../button/Button';
import EventManager from '../_util/EventManager';
import { modalChildrenProps } from './interface';
import { MousePosition } from '../_util/DocumentUtils';
export declare type DrawerTransitionName = 'slide-up' | 'slide-right' | 'slide-down' | 'slide-left';
export interface ModalProps extends ViewComponentProps {
    __deprecate__?: boolean;
    eventKey?: Key;
    children?: any;
    closable?: boolean;
    movable?: boolean;
    fullScreen?: boolean;
    maskClosable?: boolean | 'click' | 'dblclick';
    maskStyle?: CSSProperties;
    autoCenter?: boolean;
    mask?: boolean;
    maskClassName?: string;
    keyboardClosable?: boolean;
    modalTitle?: ReactNode;
    header?: ((title: ReactNode, closeBtn: ReactNode, okBtn: ReactElement<ButtonProps>, cancelBtn: ReactElement<ButtonProps>) => ReactNode) | ReactNode | boolean;
    footer?: ((okBtn: ReactElement<ButtonProps>, cancelBtn: ReactElement<ButtonProps>, modalChildrenProps: any) => ReactNode) | ReactNode | boolean;
    destroyOnClose?: boolean;
    okText?: ReactNode;
    cancelText?: ReactNode;
    okProps?: ButtonProps;
    cancelProps?: ButtonProps;
    onClose?: () => Promise<boolean | undefined> | boolean | undefined;
    onOk?: () => Promise<boolean | undefined> | boolean | undefined;
    onCancel?: () => Promise<boolean | undefined> | boolean | undefined;
    afterClose?: () => void;
    close?: () => void;
    update?: (props?: ModalProps) => void;
    okButton?: boolean;
    cancelButton?: boolean;
    /**
     * @deprecated
     */
    okCancel?: boolean;
    drawer?: boolean;
    drawerOffset?: number;
    drawerTransitionName?: DrawerTransitionName;
    transitionAppear?: boolean;
    key?: Key;
    border?: boolean;
    drawerBorder?: boolean;
    okFirst?: boolean;
    active?: boolean;
    onTop?: (key?: Key) => void;
    mousePosition?: MousePosition | null;
    contentStyle?: CSSProperties;
    bodyStyle?: CSSProperties;
    closeOnLocationChange?: boolean;
}
export default class Modal extends ViewComponent<ModalProps> {
    static displayName: string;
    static propTypes: {
        closable: PropTypes.Requireable<boolean>;
        movable: PropTypes.Requireable<boolean>;
        fullScreen: PropTypes.Requireable<boolean>;
        maskClosable: PropTypes.Requireable<string | boolean>;
        maskStyle: PropTypes.Requireable<object>;
        mask: PropTypes.Requireable<boolean>;
        maskClassName: PropTypes.Requireable<string>;
        keyboardClosable: PropTypes.Requireable<boolean>;
        footer: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        destroyOnClose: PropTypes.Requireable<boolean>;
        okText: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        cancelText: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        okProps: PropTypes.Requireable<object>;
        autoCenter: PropTypes.Requireable<boolean>;
        cancelProps: PropTypes.Requireable<object>;
        onClose: PropTypes.Requireable<(...args: any[]) => any>;
        onOk: PropTypes.Requireable<(...args: any[]) => any>;
        onCancel: PropTypes.Requireable<(...args: any[]) => any>;
        afterClose: PropTypes.Requireable<(...args: any[]) => any>;
        okButton: PropTypes.Requireable<boolean>;
        cancelButton: PropTypes.Requireable<boolean>;
        okCancel: PropTypes.Requireable<boolean>;
        drawer: PropTypes.Requireable<boolean>;
        drawerOffset: PropTypes.Requireable<number>;
        drawerTransitionName: PropTypes.Requireable<string>;
        okFirst: PropTypes.Requireable<boolean>;
        mousePosition: PropTypes.Requireable<PropTypes.InferProps<{
            x: PropTypes.Requireable<number>;
            y: PropTypes.Requireable<number>;
        }>>;
        contentStyle: PropTypes.Requireable<object>;
        bodyStyle: PropTypes.Requireable<object>;
        closeOnLocationChange: PropTypes.Requireable<boolean>;
        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>;
        accessKey: PropTypes.Requireable<string | boolean>;
        dir: PropTypes.Requireable<string>;
        contentEditable: PropTypes.Requireable<string | boolean>;
        draggable: PropTypes.Requireable<string | 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>;
    };
    static defaultProps: {
        suffixCls: string;
        closable: boolean;
        movable: boolean;
        mask: boolean;
        okButton: boolean;
        okCancel: boolean;
        destroyOnClose: boolean;
        fullScreen: boolean;
        drawer: boolean;
        drawerOffset: number;
        autoFocus: boolean;
        closeOnLocationChange: boolean;
    };
    static key: any;
    static open: any;
    static preview: any;
    static confirm: any;
    static info: any;
    static success: any;
    static error: any;
    static warning: any;
    static destroyAll: () => void;
    mousePosition?: MousePosition | null;
    moveEvent: EventManager;
    okCancelEvent: EventManager;
    offset?: [number | string | undefined, number | string | undefined];
    cancelButton: Button | null;
    get okBtn(): ReactElement<ButtonProps>;
    get cancelBtn(): ReactElement<ButtonProps>;
    contentNode: HTMLElement;
    childrenProps: modalChildrenProps;
    constructor(props: any, context: any);
    componentWillReceiveProps(nextProps: ModalProps, nextContext: any): void;
    saveCancelRef(node: any): void;
    handleKeyDown(e: any): void;
    getOmitPropsKeys(): string[];
    getOtherProps(): any;
    contentReference(node: any): void;
    getClassName(): string | undefined;
    render(): JSX.Element;
    componentWillUpdate({ hidden }: {
        hidden: any;
    }): void;
    componentWillUnmount(): void;
    handleMouseDown(e: any): void;
    handleHeaderMouseDown(downEvent: ReactMouseEvent<HTMLDivElement, MouseEvent>): void;
    handleOk(): Promise<void>;
    handleCancel(): Promise<void>;
    getHeader(): ReactNode;
    getWrappedHeader(header: ReactNode): ReactNode;
    getCloseButton(): ReactNode;
    getBody(): ReactNode;
    getFooter(): ReactNode;
    getWrappedFooter(footer: ReactNode): JSX.Element;
    getDefaultHeader: (title: any, closeButton: React.ReactNode, _okBtn: React.ReactElement<ButtonProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>, _cancelBtn: React.ReactElement<ButtonProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>) => JSX.Element | undefined;
    getDefaultFooter: (okBtn: React.ReactElement<ButtonProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>, cancelBtn: React.ReactElement<ButtonProps, string | ((props: any) => React.ReactElement<any, string | any | (new (props: any) => React.Component<any, any, any>)> | null) | (new (props: any) => React.Component<any, any, any>)>, _modalChildrenProps: modalChildrenProps) => JSX.Element;
    registerOk: (ok: any) => void;
    registerCancel: (cancel: any) => void;
    renderChildren(children: ReactNode): ReactNode;
    close(): void;
}
