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;