import React, { ReactNode } from 'react';
import PropTypes from 'prop-types';
import { Cancelable } from 'lodash';
import { ButtonColor, ButtonTooltip, ButtonType, FuncType } from './enum';
import { Size, WaitType } from '../core/enum';
import DataSetComponent, { DataSetComponentProps } from '../data-set/DataSetComponent';
export interface ButtonProps extends DataSetComponentProps {
    /**
     * 按钮展现形式
     * @default 'raised'
     */
    funcType?: FuncType;
    /**
     * 按钮颜色风格
     * @default 'default'
     */
    color?: ButtonColor;
    /**
     * 按钮是否是加载状态
     */
    loading?: boolean;
    /**
     * 按钮图标
     */
    icon?: string;
    /**
     * 点击跳转的地址，指定此属性 button 的行为和 a 链接一致
     */
    href?: string;
    /**
     * 相当于 a 链接的 target 属性，href 存在时生效
     */
    target?: string;
    /**
     * 点击间隔时间
     */
    wait?: number;
    /**
     * 点击间隔类型，可选值：throttle | debounce
     * @default throttle
     */
    waitType?: WaitType;
    /**
     * 用tooltip显示按钮内容
     * 可选值：`none` `always` `overflow`
     */
    tooltip?: ButtonTooltip;
    /**
     * 按钮类型
     * @default 'button'
     */
    type?: ButtonType;
    block?: boolean;
    name?: string;
    value?: any;
    form?: string;
    formAction?: string;
    formEncType?: string;
    formMethod?: string;
    formNoValidate?: boolean;
    formTarget?: string;
    children?: ReactNode;
}
export default class Button extends DataSetComponent<ButtonProps> {
    static displayName: string;
    static __PRO_BUTTON: boolean;
    static get contextType(): React.Context<import("../form/FormContext").FormContextValue>;
    static propTypes: {
        id: PropTypes.Requireable<string>;
        size: PropTypes.Requireable<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>;
        dataSet: PropTypes.Requireable<object>;
        /**
         * 按钮展现模式
         * 可选值：'flat' | 'raised'
         * @default raised
         */
        funcType: PropTypes.Requireable<FuncType>;
        /**
         * 按钮颜色风格
         * 可选值：'default' | 'primary' | 'gray' | 'blue' | 'red' | 'green' | 'yellow' | 'purple' | 'dark'
         * @default 'default'
         */
        color: PropTypes.Requireable<ButtonColor>;
        /**
         * 按钮类型
         * 可选值：'button' | 'submit' | 'reset'
         * @default 'button'
         */
        type: PropTypes.Requireable<ButtonType>;
        /**
         * 按钮是否是加载状态
         */
        loading: PropTypes.Requireable<boolean>;
        /**
         * 点击跳转的地址，指定此属性 button 的行为和 a 链接一致
         */
        href: PropTypes.Requireable<string>;
        /**
         * 相当于 a 链接的 target 属性，href 存在时生效
         */
        target: PropTypes.Requireable<string>;
        /**
         * 点击等待时间
         */
        wait: PropTypes.Requireable<number>;
        /**
         * 点击间隔类型，可选值：throttle | debounce
         * @default throttle
         */
        waitType: PropTypes.Requireable<WaitType>;
        /**
         * 用tooltip显示按钮内容
         * 可选值：`none` `always` `overflow`
         */
        tooltip: PropTypes.Requireable<string>;
        /**
         * 将按钮宽度调整为其父宽度的选项
         */
        block: PropTypes.Requireable<boolean>;
    };
    static defaultProps: {
        suffixCls: string;
        type: ButtonType;
        waitType: WaitType;
    };
    get loading(): boolean;
    set loading(loading: boolean);
    isTooltipShown?: boolean;
    handleClickWait: Function & Cancelable;
    constructor(props: any, context: any);
    getObservableProps(props: any, context: any): any;
    componentWillReceiveProps(nextProps: any, nextContext: any): void;
    componentWillUnmount(): void;
    getHandleClick(props: any): Function & Cancelable;
    handleClickIfBubble(e: any): void;
    handleClick(e: any): Promise<void>;
    handleMouseEnter(e: any): void;
    handleMouseLeave(e: any): void;
    isDisabled(): boolean;
    getOmitPropsKeys(): string[];
    getOtherProps(): any;
    getClassName(...props: any[]): string | undefined;
    render(): JSX.Element;
}
