import { forwardRef, useId } from 'react';
const Input = forwardRef(function Input(
{
label,
helperText,
error,
leadingIcon,
trailingIcon,
trailingAction,
id: idProp,
type = 'text',
className = '',
style,
...rest
},
ref
) {
const reactId = useId();
const id = idProp ?? reactId;
const describedBy = [];
if (helperText && !error) describedBy.push(`${id}-helper`);
if (error) describedBy.push(`${id}-error`);
const inputBorder = error
? '1px solid #dc2626'
: '1px solid var(--border)';
return (
{label && (
)}
{leadingIcon && (
{leadingIcon}
)}
0 ? describedBy.join(' ') : undefined}
className={[
'glass-input w-full rounded-xl px-4 py-3 transition-all duration-200',
'focus:outline-none focus-visible:ring-2',
leadingIcon ? 'pl-10' : '',
trailingIcon || trailingAction ? 'pr-10' : '',
]
.filter(Boolean)
.join(' ')}
style={{
border: inputBorder,
color: 'var(--text-primary)',
'--tw-ring-color': error ? '#dc2626' : 'var(--accent-ember)',
...style,
}}
{...rest}
/>
{trailingIcon && (
{trailingIcon}
)}
{trailingAction && (
{trailingAction}
)}
{error && (
{error}
)}
{!error && helperText && (
{helperText}
)}
);
});
export default Input;