Spaces:
Sleeping
Sleeping
import React, { forwardRef } from 'react'; | |
interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> { | |
label?: string; | |
error?: string; | |
className?: string; | |
fullWidth?: boolean; | |
icon?: React.ReactNode; | |
} | |
const Input = forwardRef<HTMLInputElement, InputProps>( | |
({ label, error, className = '', fullWidth = true, icon, ...props }, ref) => { | |
return ( | |
<div className={`mb-4 ${fullWidth ? 'w-full' : ''} ${className}`}> | |
{label && ( | |
<label className="block text-sm font-medium mb-1 text-gray-700"> | |
{label} | |
</label> | |
)} | |
<div className="relative"> | |
{icon && ( | |
<div className="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none"> | |
{icon} | |
</div> | |
)} | |
<input | |
ref={ref} | |
className={` | |
ios-input | |
${icon ? 'pl-10' : ''} | |
${error ? 'border-red-500' : ''} | |
`} | |
{...props} | |
/> | |
</div> | |
{error && <p className="mt-1 text-sm text-red-600">{error}</p>} | |
</div> | |
); | |
} | |
); | |
Input.displayName = 'Input'; | |
export default Input; |