import { default as React, ForwardRefExoticComponent, HTMLProps, PropsWithChildren, RefAttributes } from 'react';
import { ObjectValues } from '../../utils/ObjectValues';
export declare const STYLES_MAP: {
    readonly DEFAULT: "default";
    readonly UNSTYLED: "unstyled";
    readonly PRIMARY: "primary";
    readonly SECONDARY: "secondary";
    readonly INFO: "info";
    readonly WARNING: "warning";
    readonly DANGER: "danger";
    readonly SUCCESS: "success";
    readonly MUTED: "muted";
    readonly MUTED_FILLED: "muted-filled";
};
export type BUTTON_STYLE = ObjectValues<typeof STYLES_MAP>;
export declare const VARIANTS_MAP: {
    readonly VARIANT_LINK: "link";
    readonly VARIANT_LINK_INLINE: "link-inline";
    readonly VARIANT_OUTLINE: "outline";
    readonly VARIANT_ACTION: "action";
};
export type BUTTON_VARIANT = ObjectValues<typeof VARIANTS_MAP>;
export declare const SIZES_MAP: {
    readonly XS: "xs";
    readonly SM: "sm";
    readonly MD: "md";
    readonly LG: "lg";
};
export type BUTTON_SIZE = ObjectValues<typeof SIZES_MAP>;
type RegularButton = {
    /**
     * Use the button as a toggle button. The toggle state can be controlled via the `active` prop.
     *
     * @default false
     */
    asToggle?: false;
    /**
     * Callback function triggered when clicking the button.
     *
     * @param event The MouseEvent that triggered the click.
     */
    onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
};
type ToggleButton = {
    /**
     * Use the button as a toggle button. The toggle state can be controlled via the `active` prop.
     *
     * @default false
     */
    asToggle: true;
    /**
     * Callback function triggered when clicking the button.
     *
     * @param value The new value of the toggle button.
     */
    onClick?: (value: boolean) => void;
};
type BaseButtonProps = {
    /**
     * Whether the button should be disabled.
     *
     * @default false
     */
    disabled?: boolean;
    /**
     * Set the button toggled. Should be used in combination with "asToggle" prop.
     *
     * @default false
     */
    active?: boolean;
    /**
     * Use when the content of the button is an icon only to adapt the button spacing accordingly.
     *
     * @default false
     */
    iconOnly?: boolean;
    /**
     * Adds right side spacing for an icon. This should be used when having navigation buttons
     * that use an icon on the right side.
     *
     * @default false
     */
    iconRight?: boolean;
    /**
     * Optional rio-glyph icon name that comes in handy for icon only buttons for not adding
     * a span tag for the icon which reduces boilerplate code.
     */
    iconName?: string;
    /**
     * Defines whether the button text break into multiple lines when the button space exceeds.
     *
     * Multiline buttons should be used as exception only.
     *
     * @default false
     */
    multiline?: boolean;
    /**
     * Defines whether the button takes up the full width of the parent element.
     *
     * @default false
     */
    block?: boolean;
    /**
     * Sets the button style.
     * @default 'default'
     */
    bsStyle?: BUTTON_STYLE;
    /**
     * Sets the button size.
     */
    bsSize?: BUTTON_SIZE;
    /**
     * Sets the button variant.
     */
    variant?: BUTTON_VARIANT;
    /**
     * Whether the "ripple" effect should be suppressed on this button.
     */
    noRippleEffect?: boolean;
    /**
     * Optional key used to generate automatic GA tracking attributes when no explicit
     * tracking attributes are provided.
     *
     * Resulting label format: `button::<autoTrackingKey>`.
     */
    autoTrackingKey?: string;
    /**
     * Number of the index used for keyboard support.
     *
     * @default 0
     */
    tabIndex?: number;
    /**
     * Additional classes to be set on the button element.
     */
    className?: string;
};
type NativeButtonProps = Omit<HTMLProps<HTMLButtonElement>, 'as' | 'type' | 'onClick' | 'ref'> & BaseButtonProps & {
    /**
     * Defines this component as a native button element.
     *
     * @default 'button'
     */
    as?: 'button';
    /**
     * Defines the type of the button. This may be used for form submit buttons.
     *
     * @default 'button'
     */
    type?: 'button' | 'submit';
} & (RegularButton | ToggleButton);
type LinkButtonProps = Omit<HTMLProps<HTMLAnchorElement>, 'as' | 'type' | 'onClick' | 'ref'> & BaseButtonProps & {
    /**
     * Defines this component as a link element.
     */
    as: 'a';
    /**
     * Native button type is not supported when using `as="a"`.
     */
    type?: never;
    /**
     * Defines the destination URL for the link button.
     */
    href: string;
    /**
     * Toggle behavior is not supported when using `as="a"`.
     *
     * @default false
     */
    asToggle?: false;
    /**
     * Callback function triggered when clicking the link.
     *
     * @param event The MouseEvent that triggered the click.
     */
    onClick?: (event: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => void;
};
export type ButtonProps = NativeButtonProps | LinkButtonProps;
type Props = PropsWithChildren<ButtonProps>;
type ButtonType = ForwardRefExoticComponent<Props & RefAttributes<HTMLButtonElement>> & {
    DEFAULT: 'default';
    UNSTYLED: 'unstyled';
    PRIMARY: 'primary';
    SECONDARY: 'secondary';
    INFO: 'info';
    WARNING: 'warning';
    DANGER: 'danger';
    SUCCESS: 'success';
    MUTED: 'muted';
    MUTED_FILLED: 'muted-filled';
    VARIANT_LINK: 'link';
    VARIANT_LINK_INLINE: 'link-inline';
    VARIANT_OUTLINE: 'outline';
    VARIANT_ACTION: 'action';
    XS: 'xs';
    SM: 'sm';
    MD: 'md';
    LG: 'lg';
};
declare const Button: ButtonType;
export default Button;
