Pranav_rs
force add frontend files
bc832fa
import React, { forwardRef } from 'react';
interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
label?: string;
error?: string;
icon?: React.ReactNode;
rightElement?: React.ReactNode;
}
export const Input = forwardRef<HTMLInputElement, InputProps>(({
label,
error,
icon,
rightElement,
className = '',
...props
}, ref) => {
return (
<div className="w-full">
{label && (
<label className="block text-sm font-medium text-slate-700 dark:text-slate-300 mb-1.5">
{label}
</label>
)}
<div className="relative flex items-center">
{icon && (
<div className="absolute left-3.5 text-slate-400">
{icon}
</div>
)}
<input
ref={ref}
className={`
w-full px-4 py-3 rounded-xl border bg-white dark:bg-slate-800 text-slate-700 dark:text-slate-200 placeholder-slate-400 dark:placeholder-slate-500
${icon ? 'pl-10' : ''}
${rightElement ? 'pr-14' : ''}
? 'border-red-300 dark:border-red-900/50 focus:ring-red-200 dark:focus:ring-red-900/20 focus:border-red-400'
: 'border-slate-200 dark:border-slate-700 focus:ring-blue-100 dark:focus:ring-blue-900/20 focus:border-blue-400 dark:focus:border-blue-500'
}
focus:outline-none focus:ring-2 transition-all duration-200
${className}
`}
{...props}
/>
{rightElement && (
<div className="absolute right-2 flex items-center">
{rightElement}
</div>
)}
</div>
{error && (
<p className="mt-1.5 text-xs text-red-500">{error}</p>
)}
</div>
);
});
Input.displayName = 'Input';