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/Inputs/Input/Input.tsx
import React, { forwardRef } from 'react';
import styles from './Input.module.scss';
import cn from 'classnames';
import Body from '../../../atoms/Typography/Body/Body.tsx';

interface IInputProps extends Omit<React.HTMLAttributes<HTMLInputElement>, 'onChange'> {
  value?: string;
  placeholder?: string;
  label?: string;
  disabled?: boolean;
  isError?: boolean;
  onChange?: (value: string) => void;
  className?: string;
}

/**
 * Поддерживает все стандартные пропсы HTMLInputElement.
 *
 * Полную документацию смотрите сайте: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement
 */

const Input = forwardRef<HTMLInputElement, IInputProps>(
  (
    { value, placeholder, label, disabled, isError, onChange, className, ...rest }: IInputProps,
    ref
  ) => {
    const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
      onChange?.(e.target.value);
    };

    return (
      <div
        className={cn(
          styles.root,
          {
            [styles.disabled]: disabled,
            [styles.isError]: isError,
          },
          className
        )}
      >
        {label && <Body className={styles.label}>{label}</Body>}
        <input
          ref={ref}
          type="text"
          value={value}
          placeholder={placeholder}
          className={styles.input}
          onChange={handleChange}
          disabled={disabled}
          {...rest}
        />
      </div>
    );
  }
);

export default Input;