import * as React from 'react';
import { ButtonProps as MuiButtonProps } from '@mui/material/Button';
import { IconId, IconSize } from '../icon/Icon';
import { SxProps } from '@mui/material';
import { CustomTheme } from '../../theme/CustomTheme';
export declare const colorStyles: (theme: CustomTheme) => {
    readonly contained: {
        readonly primary: {};
        readonly inherit: {
            readonly color: string;
            readonly backgroundColor: string;
            readonly ':hover': {
                readonly backgroundColor: string;
            };
            readonly '&:active': {
                readonly backgroundColor: string;
            };
            readonly ':disabled': {
                readonly color: string;
            };
        };
        readonly white: {
            readonly border: `1px solid ${string}`;
            readonly color: string;
            readonly backgroundColor: string;
            readonly ':hover': {
                readonly border: `1px solid ${string}`;
                readonly backgroundColor: string;
            };
            readonly '&:active': {
                readonly border: `1px solid ${string}`;
                readonly backgroundColor: string;
            };
            readonly ':disabled': {
                readonly border: "none";
                readonly color: string;
                readonly backgroundColor: string;
            };
        };
        readonly warning: {
            readonly color: string;
            readonly backgroundColor: string;
            readonly ':hover': {
                readonly backgroundColor: string;
            };
            readonly '&:active': {
                readonly backgroundColor: string;
            };
        };
    };
    readonly outlined: {
        readonly primary: {};
        readonly inherit: SxProps;
        readonly white: SxProps;
        readonly warning: SxProps;
    };
    readonly text: {
        readonly primary: {};
        readonly inherit: SxProps;
        readonly white: SxProps;
        readonly warning: SxProps;
    };
};
export declare const buttonVariants: readonly ["contained", "outlined", "text"];
type ButtonVariant = (typeof buttonVariants)[number];
export declare const buttonColors: readonly ["primary", "inherit", "white", "warning"];
type ButtonColor = (typeof buttonColors)[number];
export declare const buttonSizes: readonly ["M", "L", "XL"];
type ButtonSize = (typeof buttonSizes)[number];
export declare const buttonComponents: readonly ["button", "label"];
type ButtonComponent = (typeof buttonComponents)[number];
export declare const buttonTypes: readonly ["button", "submit", "reset"];
export type ButtonProps = Pick<MuiButtonProps, 'id' | 'disabled' | 'onClick' | 'aria-controls' | 'aria-haspopup' | 'aria-expanded' | 'sx' | 'type' | 'className' | 'onMouseEnter' | 'onMouseLeave'> & {
    /**
     * The variant of the button.
     */
    variant?: ButtonVariant;
    /**
     * The color of the button.
     */
    color?: ButtonColor;
    /**
     * Size of the button.
     */
    size?: ButtonSize;
    /**
     * Raw HTML component used to render this Button;
     */
    component?: ButtonComponent;
    /**
     * The text to display in the button.
     */
    text: string;
    /**
     * The identifier of the icon to display at the start of the button.
     */
    iconId?: IconId;
    /**
     * Icon to display in button. It will only be effective when the iconId is empty.
     */
    icon?: React.ReactNode;
    /**
     * The identifier of the icon size to display in the button.
     */
    iconSize?: IconSize;
    /**
     * Whether the button must have the icon at the end.
     */
    iconEnd?: boolean;
    /**
     * Text to be shown in a badge inside the button,
     */
    badgeText?: string;
    /**
     * Set to true to position badge to the left of the button text. Default is false (right position).
     */
    badgeLeft?: boolean;
    /**
     * Any extra inner elements that are necessary inside this button. For example, an &lt;input type="file" /&gt;
     */
    children?: React.ReactElement<'input'>;
    /**
     * The link element type to be used if this button is a link.
     */
    link?: React.ElementType;
    /**
     * Optional data-testid for testing purposes.
     */
    'data-testid'?: string;
};
/**
 * A component that displays a button with text and icon.
 * Button can be primary, secondary, outlined or text, and it can have an icon at the start or at the end.
 * It can be disabled.
 */
declare const Button: React.ForwardRefExoticComponent<Pick<MuiButtonProps, "id" | "className" | "aria-controls" | "aria-expanded" | "aria-haspopup" | "sx" | "disabled" | "type" | "onClick" | "onMouseEnter" | "onMouseLeave"> & {
    /**
     * The variant of the button.
     */
    variant?: ButtonVariant;
    /**
     * The color of the button.
     */
    color?: ButtonColor;
    /**
     * Size of the button.
     */
    size?: ButtonSize;
    /**
     * Raw HTML component used to render this Button;
     */
    component?: ButtonComponent;
    /**
     * The text to display in the button.
     */
    text: string;
    /**
     * The identifier of the icon to display at the start of the button.
     */
    iconId?: IconId;
    /**
     * Icon to display in button. It will only be effective when the iconId is empty.
     */
    icon?: React.ReactNode;
    /**
     * The identifier of the icon size to display in the button.
     */
    iconSize?: IconSize;
    /**
     * Whether the button must have the icon at the end.
     */
    iconEnd?: boolean;
    /**
     * Text to be shown in a badge inside the button,
     */
    badgeText?: string;
    /**
     * Set to true to position badge to the left of the button text. Default is false (right position).
     */
    badgeLeft?: boolean;
    /**
     * Any extra inner elements that are necessary inside this button. For example, an &lt;input type="file" /&gt;
     */
    children?: React.ReactElement<"input">;
    /**
     * The link element type to be used if this button is a link.
     */
    link?: React.ElementType;
    /**
     * Optional data-testid for testing purposes.
     */
    'data-testid'?: string;
} & React.RefAttributes<HTMLButtonElement>>;
export default Button;
