File: /var/www/design.system/src/molecules/Button/Button.tsx
import React, { forwardRef } from 'react';
import styles from './Button.module.scss';
import cn from 'classnames';
import Body from '../../atoms/Typography/Body/Body.tsx';
interface IButtonProps extends React.HTMLAttributes<HTMLButtonElement> {
size?: 'medium' | 'small';
variant?: 'primary' | 'secondary' | 'text';
isIconType?: boolean;
danger?: boolean;
disabled?: boolean;
}
/**
* Поддерживает все стандартные пропсы HTMLButtonElement.
*
* Полную документацию смотрите сайте: https://developer.mozilla.org/en-US/docs/Web/API/HTMLButtonElement
*/
const Button = forwardRef<HTMLButtonElement, IButtonProps>(
(
{
size = 'medium',
variant = 'primary',
isIconType,
danger,
disabled,
children,
className,
...rest
}: IButtonProps,
ref
) => {
return (
<button
ref={ref}
className={cn(
styles.root,
styles[`size--${size}`],
styles[`variant--${variant}`],
{
[styles.isIconType]: isIconType,
[styles.disabled]: disabled,
[styles.danger]: danger,
},
className
)}
{...rest}
>
<Body isSingleLine strong={true}>
{children}
</Body>
</button>
);
}
);
export default Button;