import { default as React, RefObject } from 'react';
import { IconSize } from '../Icon/Icon';
import { IconNames } from '../Icon/IconNames';
import { FontWeights, TextReplacements, TextTypes } from '../Text/Text';
/**
 * Types
 */
export declare enum ButtonSizes {
    small = "small",
    medium = "medium",
    large = "large",
    /** @remarks only available for the muted button type */
    extraLarge = "extra-large"
}
export declare enum ButtonTypes {
    default = "default",
    secondary = "secondary",
    primary = "primary",
    shimmer = "shimmer",
    muted = "muted"
}
type eventFn = (event: React.MouseEvent) => void;
type simpleFn = () => void;
export type ButtonShape = 'default' | 'round';
/**
 * Props
 * ---------------------------------------------------------------------------------------------------------------------
 */
interface CommonButtonProps {
    testId?: string;
    /** @deprecated */
    className?: string;
    children?: string;
    targetRef?: RefObject<HTMLSpanElement>;
    /** @deprecated */
    color?: string;
    /** @deprecated */
    hoverColor?: string;
    /** @deprecated */
    fontWeight?: FontWeights;
    /** @deprecated */
    textType?: TextTypes;
    /** @deprecated use `rounded` prop instead */
    shape?: ButtonShape;
    rounded?: boolean;
    textWrap?: 'wrap' | 'no-wrap';
    /** @deprecated use `icon` and `iconPosition` props instead */
    iconLeft?: IconNames;
    /** @deprecated use `icon` and `iconPosition` props instead */
    iconRight?: IconNames;
    /** @deprecated */
    iconSize?: IconSize;
    /** @deprecated */
    iconColor?: string;
    /** @deprecated */
    iconHoverColor?: string;
    /** @deprecated */
    iconFillColor?: string;
    /** @deprecated */
    iconLargeOnHover?: boolean;
    iconHasCircle?: boolean;
    icon?: IconNames;
    iconPosition?: 'left' | 'right';
    w100?: boolean;
    isLoading?: boolean;
    disabled?: boolean;
    visible?: boolean;
    uppercase?: boolean;
    replacements?: TextReplacements;
    onClick?: eventFn | simpleFn;
    onMouseDown?: eventFn | simpleFn;
    debounce?: number;
}
type BaseButtonProps = CommonButtonProps & {
    type?: Exclude<ButtonTypes, ButtonTypes.muted>;
    size?: Exclude<ButtonSizes, ButtonSizes.extraLarge>;
    blurred?: never;
    inverted?: never;
};
type MutedButtonProps = CommonButtonProps & {
    type: Extract<ButtonTypes, ButtonTypes.muted>;
    size?: ButtonSizes;
    blurred?: boolean;
    inverted?: boolean;
};
export type ButtonProps = BaseButtonProps | MutedButtonProps;
/**
 * Component
 * ---------------------------------------------------------------------------------------------------------------------
 */
export declare const Button: (props: ButtonProps) => import("react/jsx-runtime").JSX.Element;
export {};
