import React from 'react';
import { Theme } from '../cn';
export declare type ButtonProps = {
    /**
     * Текст кнопки
     */
    text?: React.ReactNode;
    /**
     * Иконка кнопки
     */
    icon?: React.ReactNode;
    /**
     * Список произвольных элементов в левом слоте
     */
    rightAddons?: React.ReactNode;
    /**
     * Список произвольных элементов в правом слоте
     */
    leftAddons?: React.ReactNode;
    /**
     * Тип кнопки
     * @default 'default'
     */
    view?: 'default' | 'action' | 'extra' | 'rounded';
    /**
     * Поведение кнопки
     */
    type?: 'button' | 'reset' | 'submit';
    /**
     * HTML элемент, которым будет компонент в DOM
     */
    tag?: 'button' | 'span';
    /**
     * Управление шириной кнопки. При значении 'available' растягивает кнопку на ширину родителя
     */
    width?: 'default' | 'available';
    /**
     * Размер компонента
     */
    size?: 's' | 'm' | 'l' | 'xl';
    /**
     * Управление возможности взаимодействия с компонентом
     */
    disabled?: boolean;
    /**
     * Отображение кнопки в состоянии фокуса
     */
    focused?: boolean;
    /**
     * Псевдо представление кнопки
     */
    pseudo?: boolean;
    /**
     * Идентификатор компонента в DOM
     */
    id?: string;
    /**
     * Отключает валидацию полей формы, у которых есть атрибут pattern
     */
    formNoValidate?: boolean;
    /**
     * Имя компонента в DOM
     */
    name?: string;
    /**
     * Текст всплывающей подсказки
     */
    title?: string;
    /**
     * Последовательность перехода между контролами при нажатии на Tab
     */
    tabIndex?: number;
    /**
     * Тип переключателя
     */
    togglable?: 'check' | 'radio';
    /**
     * Отображение кнопки в отмеченном (зажатом) состоянии
     */
    checked?: boolean;
    /**
     * Дочерние элементы `Button`
     */
    children?: React.ReactNode;
    /**
     * Идентификатор для систем автоматизированного тестирования
     */
    'data-test-id'?: string;
    /**
     * Тема компонента
     */
    theme?: Theme;
    /**
     * Дополнительный класс
     */
    className?: string;
    /**
     * Обработчик клика по кнопке
     */
    onClick?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик фокуса кнопки
     */
    onFocus?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик снятия фокуса кнопки
     */
    onBlur?: (event?: React.FocusEvent<any>) => void;
    /**
     * Обработчик события наведения курсора на кнопку
     */
    onMouseEnter?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события снятия курсора с кнопки
     */
    onMouseLeave?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события нажатия кнопки мыши в момент
     */
    onMouseDown?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события отжатия кнопки мыши в момент
     */
    onMouseUp?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события отведения курсора с кнопки
     */
    onMouseOut?: (event?: React.MouseEvent<any>) => void;
    /**
     * Обработчик события нажатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyDown?: (event?: React.KeyboardEvent<any>) => void;
    /**
     * Обработчик события отжатия на клавишу клавиатуры в момент, когда фокус находится на компоненте
     */
    onKeyUp?: (event?: React.KeyboardEvent<any>) => void;
};
declare type ButtonState = {
    focused: boolean;
    hovered: boolean;
    pressed: boolean;
};
/**
 * Компонент кнопки (да, она нажимается!).
 */
export declare class Button extends React.PureComponent<ButtonProps, ButtonState> {
    protected cn: (this: void | {
        props?: Record<string, unknown>;
    }, elementNameOrMods?: string | {
        [key: string]: string | number | boolean;
    }, mods?: {
        [key: string]: string | number | boolean;
    }) => string;
    static defaultProps: Partial<ButtonProps>;
    static getDerivedStateFromProps(nextProps: ButtonProps): Partial<ButtonState> | null;
    state: {
        focused: boolean;
        hovered: boolean;
        pressed: boolean;
    };
    private control;
    render(): JSX.Element;
    private handleClick;
    private handleFocus;
    private handleBlur;
    private handleMouseEnter;
    private handleMouseLeave;
    private handleMouseDown;
    private handleMouseUp;
    private handleMouseOut;
    private handleKeyDown;
    private handleKeyUp;
    /**
     * Возвращает корневой `HTMLElement` компонента.
     */
    getNode(): HTMLButtonElement | HTMLSpanElement;
    /**
     * Устанавливает фокус на поле ввода.
     */
    focus(): void;
    /**
     * Убирает фокус с поля ввода.
     */
    blur(): void;
}
declare const _default: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<Button>> & Button;
export default _default;
