import { AnchorHTMLAttributes, ButtonHTMLAttributes, FocusEventHandler, KeyboardEventHandler, MouseEventHandler, ReactElement, } from 'react'; import { CounterProps } from '@snack-uikit/counter'; import { ValueOf } from '@snack-uikit/utils'; import { APPEARANCE, ICON_POSITION, SIZE } from './constants'; export type Appearance = ValueOf; export type IconPosition = ValueOf; export type Size = ValueOf; export type BaseButtonProps = { /** CSS-класс */ className?: string; /** Флаг неактивности компонента */ disabled?: boolean; /** * Иконка * @type ReactElement */ icon?: ReactElement; /** Позиция иконки */ iconPosition?: IconPosition; /** Текст кнопки */ label?: string; /** Флаг состояния загрузки */ loading?: boolean; /** Колбек обработки клика */ onClick?: MouseEventHandler; /** Колбек обработки нажатия клавиши */ onKeyDown?: KeyboardEventHandler; /** Колбек обработки фокуса */ onFocus?: FocusEventHandler; /** Колбек обработки блюра */ onBlur?: FocusEventHandler; /** Размер */ size?: Size; /** Внешний вид кнопки */ appearance?: Appearance; /** HTML-аттрибут type */ type?: ButtonHTMLAttributes['type']; /** HTML-аттрибут tab-index */ tabIndex?: number; /** Сделать кнопку во всю ширину */ fullWidth?: boolean; }; export type AnchorButtonProps = { /** Ссылка */ href?: string; /** HTML-аттрибут target */ target?: AnchorHTMLAttributes['target']; }; export type CounterInButtonProps = Pick; export type CounterButtonProps = { /** Пропсы каунтера в кнопке */ counter?: CounterInButtonProps; }; export type CommonButtonProps = AnchorButtonProps & BaseButtonProps;