import * as React from "react";
import * as PropTypes from "prop-types";
import { Values } from "../utils/types";
import "./Button.less";
export interface Props {
    children?: React.ReactNode;
    className?: string;
    type?: ButtonType;
    size?: ButtonSize;
    value?: React.ReactNode;
    href?: string;
    target?: "_self" | "_blank";
    disabled?: boolean;
    onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement>;
    submit?: boolean;
    style?: React.CSSProperties;
    underlined?: boolean;
    ariaLabel?: string;
    dataTestID?: string;
    [additionalProp: string]: any;
}
declare type ButtonType = Values<typeof Type>;
declare type ButtonSize = Values<typeof Size>;
declare const Size: {
    readonly S: "small";
    readonly M: "regular";
    readonly L: "large";
};
declare const Type: {
    readonly PRIMARY: "primary";
    readonly SECONDARY: "secondary";
    readonly DESTRUCTIVE: "destructive";
    readonly SECONDARY_DESTRUCTIVE: "secondaryDestructive";
    readonly LINK: "link";
    readonly LINK_PLAIN: "linkPlain";
    readonly PLAIN: "plain";
};
export declare class Button extends React.PureComponent<Props> {
    static propTypes: {
        children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        className: PropTypes.Requireable<string>;
        type: PropTypes.Requireable<Values<{
            readonly PRIMARY: "primary";
            readonly SECONDARY: "secondary";
            readonly DESTRUCTIVE: "destructive";
            readonly SECONDARY_DESTRUCTIVE: "secondaryDestructive";
            readonly LINK: "link";
            readonly LINK_PLAIN: "linkPlain";
            readonly PLAIN: "plain";
        }>>;
        size: PropTypes.Requireable<Values<{
            readonly S: "small";
            readonly M: "regular";
            readonly L: "large";
        }>>;
        value: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        href: PropTypes.Requireable<string>;
        target: PropTypes.Requireable<string>;
        disabled: PropTypes.Requireable<boolean>;
        onClick: PropTypes.Requireable<(...args: any[]) => any>;
        submit: PropTypes.Requireable<boolean>;
        style: PropTypes.Requireable<object>;
        underlined: PropTypes.Requireable<boolean>;
        ariaLabel: PropTypes.Requireable<string>;
        dataTestID: PropTypes.Requireable<string>;
    };
    static defaultProps: {
        type: "secondary";
        size: "regular";
        target: string;
    };
    static Size: {
        readonly S: "small";
        readonly M: "regular";
        readonly L: "large";
    };
    static Type: {
        readonly PRIMARY: "primary";
        readonly SECONDARY: "secondary";
        readonly DESTRUCTIVE: "destructive";
        readonly SECONDARY_DESTRUCTIVE: "secondaryDestructive";
        readonly LINK: "link";
        readonly LINK_PLAIN: "linkPlain";
        readonly PLAIN: "plain";
    };
    _buttonRef: any;
    focus(): void;
    blur(): void;
    render(): JSX.Element;
}
export {};
