import React from 'react';
import type { ButtonLinkAllowedValues } from '../../lib/types/button-link';
import type { ThemeIn } from '../../lib/theming/Theme';
import type { CommonProps } from '../../internal/CommonWrapper';
import type { TGetRootNode } from '../../lib/rootNode';
import type { SizeProp } from '../../lib/types/props';
import type { PolymorphicPropsWithoutRef } from '../../lib/types/polymorphic-component';
export type ButtonType = 'button' | 'submit' | 'reset';
export type ButtonUse = 'default' | 'primary' | 'success' | 'danger' | 'pay' | 'link' | 'text' | 'backless';
export interface ButtonInnerProps extends CommonProps {
    /** @ignore */
    _noPadding?: boolean;
    /** @ignore */
    _noRightPadding?: boolean;
    /** Применяет к кнопке стили псевдокласса `:active`. */
    active?: boolean;
    /** Выравнивание текста в кнопке. */
    align?: React.CSSProperties['textAlign'];
    /** Преобразует обычную кнопку в кнопку со стрелкой. */
    arrow?: boolean | 'left';
    /** Устанавливает фокус на кнопке после окончания загрузки страницы.*/
    autoFocus?: boolean;
    /** Убирает обводку у кнопки.
     *
     * **Не рекомендуем использовать, противоречит дизайн-требованиям.**
     */
    borderless?: boolean;
    /** @ignore */
    checked?: boolean;
    /** @ignore */
    children?: React.ReactNode;
    /** @ignore */
    corners?: React.CSSProperties;
    /** Блокирует кнопку и перекрашивает в серый. */
    disabled?: boolean;
    /** @ignore */
    disableFocus?: boolean;
    /** Переводит кнопку в состояние валидации "Ошибка".
     *
     * **Не рекомендуем использовать, противоречит дизайн-требованиям.** */
    error?: boolean;
    /** Добавляет иконку слева от текста кнопки. */
    icon?: React.ReactElement;
    /** Добавляет иконку справа от текста кнопки. */
    rightIcon?: React.ReactElement;
    /** Переводит кнопку в состояние загрузки. */
    loading?: boolean;
    /** Сужает кнопку.
     *
     * **Не рекомендуем использовать, противоречит дизайн-требованиям.** */
    narrow?: boolean;
    /** Размер кнопки. */
    size?: SizeProp;
    /** HTML-атрибут `type`. */
    type?: ButtonType;
    /** HTML-атрибут `title`. */
    title?: string;
    /** Стиль кнопки.
     * **Вариант `link` устарел.** Если нужна кнопка, выглядящая как ссылка, используйте `Link component=button`.
     */
    use?: ButtonUse;
    /** @ignore */
    visuallyFocused?: boolean;
    /** Переводит кнопку в состояние валидации "Предупреждение".
     *
     * **Не рекомендуем использовать, противоречит дизайн-требованиям.**
     */
    warning?: boolean;
    /** Ширина кнопки. */
    width?: number | string;
    /** Объект с переменными темы. */
    theme?: ThemeIn;
}
export declare const BUTTON_DEFAULT_COMPONENT = "button";
export type ButtonProps<C extends ButtonLinkAllowedValues = typeof BUTTON_DEFAULT_COMPONENT> = PolymorphicPropsWithoutRef<ButtonInnerProps, C>;
export interface ButtonState {
    focusedByTab: boolean;
}
export declare const ButtonDataTids: {
    readonly rootElement: "Button__rootElement";
    readonly root: "Button__root";
    readonly spinner: "Button__spinner";
};
type DefaultProps = Required<Pick<ButtonProps<ButtonLinkAllowedValues>, 'use' | 'type' | 'component'>>;
/** Кнопка запускает действие, сценарий или позволяет перейти на другую страницу. */
export declare class Button<C extends ButtonLinkAllowedValues = typeof BUTTON_DEFAULT_COMPONENT> extends React.Component<ButtonProps<C>, ButtonState> {
    static __KONTUR_REACT_UI__: string;
    static displayName: string;
    static __BUTTON__: boolean;
    static defaultProps: DefaultProps;
    private getProps;
    state: {
        focusedByTab: boolean;
    };
    private theme;
    private node;
    private size;
    getRootNode: TGetRootNode;
    private setRootNode;
    componentDidMount(): void;
    static getDerivedStateFromProps(props: ButtonProps): {
        focusedByTab: boolean;
    } | null;
    /** Программно устанавливает фокус на кнопке. Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.
     * @public
     */
    focus(): void;
    /** Программно снимает фокус с кнопки.
     * @public
     */
    blur(): void;
    render(): JSX.Element;
    private getTabIndex;
    private renderMain;
    private renderIcon2022;
    private getSizeClassName;
    private getSizeWrapClassName;
    private handleFocus;
    private handleBlur;
    private _ref;
}
export {};
