import { ElementType, ReactNode, ReactElement } from 'react';
import { DataAttributes, PolymorphicComponentPropsWithRef } from '../../utils/types';
import { IconName, IconProps } from '../Icon';
import '../../helpers/base.less';
import './Button.less';
interface BaseButtonPops {
    /**
     * Button size.
     * @since 2.5.0
     */
    size?: 'md' | 'lg';
    /**
     * Visual intent color to apply to component.
     * @since 0.0.42
     */
    intent?: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
    /**
     * Display button with transparent background.
     * @since 2.1.0
     */
    ghost?: boolean;
    /**
     * Arrow button.
     * @since 2.6.0
     */
    arrow?: 'forward' | 'backward';
    /**
     * Selected state of toggle button. Used in controlled component mode.
     * @since 0.0.68
     */
    selected?: boolean;
    /**
     * Toggle button callback. Used in uncontrolled component mode.
     * @since 0.0.68
     */
    onToggle?: (state: boolean) => void;
    /**
     * State of the button
     * @since 0.0.42
     */
    state?: 'active' | 'loading' | 'hovered' | 'focused';
    /**
     * Is button disabled?
     * @since 0.0.42
     */
    disabled?: boolean;
    /**
     * Tooltip for component
     * @since 0.0.42
     */
    tooltip?: ReactNode;
    /**
     * Name of icon or [Icon](#!/Icon) component
     * @since 0.0.42
     * @type IconName | IconProps | ReactNode
     */
    icon?: IconName | IconProps | ReactNode;
    /**
     * Show caret
     * @since 0.0.42
     */
    caret?: boolean | ReactNode;
    /**
     * Dynamically expand the button to fill out the whole available width of its parent container.
     * @since 1.8.0
     */
    fill?: boolean;
    /**
     * Content of the button
     * @since 0.0.37
     */
    children?: ReactNode;
    /**
     * @ignore
     */
    className?: string;
    /**
     * @ignore
     */
    baseClassName?: string;
}
export declare type ButtonProps<Component extends ElementType = 'button'> = {
    /**
     * Component to render as the root element. Useful when rendering a `Button` as `<a>` or `<Link>`.
     * @since 0.0.42
     * @type ElementType
     * @default button
     */
    component?: Component;
} & PolymorphicComponentPropsWithRef<Component, BaseButtonPops> & DataAttributes;
declare type ButtonComponent<Component extends ElementType = 'button'> = {
    defaultProps?: Partial<ButtonProps<Component>>;
    displayName?: string;
} & (<C extends ElementType = Component>(props: ButtonProps<C>) => ReactElement | null);
/**
 * `Button` component is used for executing actions, changing the application state, opening forms or dialog windows, and submitting data.
 * As a rule, you should not use buttons for navigation between individual pages (use `Link` instead).
 * @since 0.0.37
 */
declare const _default: ButtonComponent<"button">;
export default _default;
