HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;