import PropTypes from 'prop-types'; import { useEffect, useRef, useState, forwardRef } from 'react'; import ErrorMessage from './InputErrorMessage'; import PasswordPeekButton from './PasswordPeekButton'; import Description from './InputDescription'; import Label from './InputLabel'; import { clsm } from '../../utils'; import { OUTER_INPUT_VARIANT_CLASSES as outerInputVariantClasses, INNER_INPUT_VARIANT_CLASSES as innerInputVariantClasses, INPUT_TYPE_CLASSES as inputTypeClasses, INPUT_ERROR_CLASSES as inputErrorClasses } from './InputTheme'; const Input = forwardRef( ( { ariaLabel, autoCapitalize, autoComplete, autoCorrect, className, customStyles, description, error, footer, isRequired, label, name, onBlur, onChange, onClick, onFocus, placeholder, readOnly, tabIndex, type: initialType, value, variant, min, max }, ref ) => { const [inputType, setInputType] = useState(initialType); const hideDescription = useRef(false); const outerInputClasses = clsm( variant, outerInputVariantClasses[variant], inputType === 'number' && ['w-auto'] ); const innerInputClasses = clsm(innerInputVariantClasses); const inputClasses = clsm( inputTypeClasses[initialType], error !== undefined && error !== null && inputErrorClasses, className ); useEffect(() => { hideDescription.current = hideDescription.current || !!error; }, [error]); return (