import {
type AnchorHTMLAttributes,
type ButtonHTMLAttributes,
type ElementType,
type ReactNode,
} from 'react';
export type StyleColors = {
default: {
[key: string]: string;
};
inverted: {
[key: string]: string;
};
};
type ComponentProps = {
/**
* Тип кнопки
* @default secondary
*/
view?: 'accent' | 'primary' | 'secondary' | 'outlined' | 'transparent' | 'text';
/**
* Форма кнопки
* @default rectangular
*/
shape?: 'rounded' | 'rectangular';
/**
* Ширина текстового контента
* @default hug
*/
textResizing?: 'fill' | 'hug';
/**
* Подпись под лейблом (видна только в размерах >= m)
*/
hint?: ReactNode;
/**
* Слот слева
*/
leftAddons?: ReactNode;
/**
* Слот справа
*/
rightAddons?: ReactNode;
/**
* Размер компонента
* @default 56
*/
size?: 32 | 40 | 48 | 56 | 64 | 72;
/**
* Растягивает компонент на ширину контейнера
* @default false
*/
block?: boolean;
/**
* Дополнительный класс
*/
className?: string;
/**
* Дополнительный класс для спиннера
*/
spinnerClassName?: string;
/**
* Выводит ссылку в виде кнопки
*/
href?: string;
/**
* Позволяет использовать кастомный компонент для кнопки (например Link из роутера)
*/
Component?: ElementType;
/**
* Идентификатор для систем автоматизированного тестирования.
* Для спиннера используется модификатор -loader
*/
dataTestId?: string;
/**
* Показать лоадер
* @default false
*/
loading?: boolean;
/**
* Не переносить текст кнопки на новую строку
* @default false
*/
nowrap?: boolean;
/**
* Набор цветов для компонента
*/
colors?: 'default' | 'inverted';
/**
* Включает размытие фона для некоторых вариантов кнопки
* @description Может привести к просадке fps и другим багам. Старайтесь не размещать слишком много заблюреных элементов на одной странице.
*/
allowBackdropBlur?: boolean;
/**
* Дочерние элементы.
*/
children?: ReactNode;
/**
* Дополнительный класс для label
*/
labelClassName?: string;
/**
* Дополнительный класс для hint
*/
hintClassName?: string;
};
export type PrivateButtonProps = {
/**
* Основные стили компонента.
*/
styles: { [key: string]: string };
/**
* Стили компонента для default и inverted режима.
*/
colorStylesMap: StyleColors;
};
export type CommonButtonProps = ComponentProps &
Partial | ButtonHTMLAttributes>;
export type ButtonProps = CommonButtonProps & {
/**
* Контрольная точка, с нее начинается desktop версия
* @default 1024
*/
breakpoint?: number;
/**
* Версия, которая будет использоваться при серверном рендеринге
*/
client?: 'desktop' | 'mobile';
/**
* Значение по-умолчанию для хука useMatchMedia
* @deprecated Используйте client
*/
defaultMatchMediaValue?: boolean | (() => boolean);
};