import type { JSX } from 'react';
import React from 'react';
import type { ButtonLinkAllowedValues } from '../../lib/types/button-link.js';
import type { ThemeIn } from '../../lib/theming/Theme.js';
import type { CommonProps } from '../../internal/CommonWrapper/index.js';
import type { TGetRootNode } from '../../lib/rootNode/index.js';
import type { SizeProp } from '../../lib/types/props.js';
import type { PolymorphicPropsWithoutRef } from '../../lib/types/polymorphic-component.js';
export type ButtonType = 'button' | 'submit' | 'reset';
export type ButtonUse = 'default' | 'outline' | 'fill' | 'text' | 'accent' | 'danger' | 'success' | 'pay'
/** @deprecated Используйте компонент <Link component="button" /> */
 | 'link'
/** @deprecated Используйте use="outline" */
 | 'backless'
/** @deprecated Используйте use="accent" */
 | 'primary';
export interface ButtonInnerProps extends CommonProps {
    /** @ignore */
    _noPadding?: boolean;
    /** @ignore */
    _noRightPadding?: boolean;
    /** Применяет к кнопке стили псевдокласса `:active`. */
    active?: boolean;
    /** Выравнивание текста в кнопке. */
    align?: React.CSSProperties['textAlign'];
    /** Преобразует обычную кнопку в кнопку со стрелкой. */
    arrow?: boolean | 'left';
    /** Устанавливает фокус на кнопке после окончания загрузки страницы.*/
    autoFocus?: boolean;
    /** Убирает обводку у кнопки.
     *
     * **Не рекомендуем использовать, противоречит дизайн-требованиям.
     * @deprecated Состояние не соответствует Контур.Гайдам, проп будет удален в 7.0.
     *
     * Альтернативный вариант использования — use="fill" или переменную темы `btnBorderWidth` */
    borderless?: boolean;
    /** @ignore */
    checked?: boolean;
    /** @ignore */
    children?: React.ReactNode;
    /** @ignore */
    corners?: React.CSSProperties;
    /** Блокирует кнопку и перекрашивает в серый. */
    disabled?: boolean;
    /** @ignore */
    disableFocus?: boolean;
    /** Переводит кнопку в состояние валидации "Ошибка".
     *
     * @deprecated Состояние не соответствует Контур.Гайдам, проп будет удален в 7.0. */
    error?: boolean;
    /** Добавляет иконку слева от текста кнопки. */
    icon?: React.ReactElement;
    /** Добавляет иконку справа от текста кнопки. */
    rightIcon?: React.ReactElement;
    /** Переводит кнопку в состояние загрузки. */
    loading?: boolean;
    /** Сужает кнопку.
     *
     * @deprecated Состояние не соответствует Контур.Гайдам, проп будет удален в 7.0.
     *
     * Альтернативный вариант использования — через переменные темы `btnPaddingXSmall`, `btnPaddingXMedium`, `btnPaddingXLarge` */
    narrow?: boolean;
    /** Размер кнопки. */
    size?: SizeProp;
    /** HTML-атрибут `type`. */
    type?: ButtonType;
    /** HTML-атрибут `title`. */
    title?: string;
    /** Стиль кнопки.
     * - accent — кнопка основного действия
     * - outline — кнопка второстепенного действия с границами без фона
     * - fill — кнопка второстепенного действия с фоном без границ
     * - text — кнопка второстепенного действия без фона и обводки
     * - danger — кнопка деструктивного действия
     * - success — кнопка позитивного действия
     * - pay — кнопка, связанная с оплатой
     *
     * ⚠️ Deprecated-стили, будут удалены в 7.0:
     * - use="primary" → use="accent"
     * - use="backless" → use="outline"
     * - use="link" → `<Link component="button">`
     * - use="default" → use="outline" или use="fill"
     */
    use?: ButtonUse;
    /** @ignore */
    visuallyFocused?: boolean;
    /** Переводит кнопку в состояние валидации "Предупреждение".
     * @deprecated Состояние не соответствует Контур.Гайдам, проп будет удален в 7.0. */
    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 globalObject;
    private emotion;
    private cx;
    private styles;
    private activeStyles;
    private theme;
    private node;
    private size;
    getRootNode: TGetRootNode;
    private setRootNode;
    private keyListener;
    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 getUseStyle;
    private getSizeClassName;
    private getSizeWrapClassName;
    private handleFocus;
    private handleBlur;
    private _ref;
}
export {};
