'use client'; import React, { forwardRef, useId, useState } from 'react'; import { Eye, EyeOff } from 'lucide-react'; interface InputProps extends React.InputHTMLAttributes { label?: string; error?: string; icon?: React.ReactNode; endIcon?: React.ReactNode; passwordToggleLabels?: { show: string; hide: string; }; } export const Input = forwardRef( ( { label, error, icon, endIcon, passwordToggleLabels, className = '', id, type, ...props }, ref, ) => { const [showPassword, setShowPassword] = useState(false); const genId = useId(); const inputId = id ?? genId; const resolvedEndIcon = endIcon ?? (passwordToggleLabels ? ( ) : undefined); const resolvedType = passwordToggleLabels ? showPassword ? 'text' : 'password' : type; return (
{label && ( )}
{icon && (
{icon}
)} {resolvedEndIcon && (
{resolvedEndIcon}
)}
{error && (

{error}

)}
); } ); Input.displayName = 'Input';