import { DetailedHTMLProps, FC, InputHTMLAttributes, ReactElement, useState, } from 'react'; import { EyeInvisibleOutlined, EyeOutlined } from '@ant-design/icons'; // Import Ant Design icons import { cn } from '@imphnen-frontend-service/utils'; import { Button } from '../button'; type TInputType = 'text' | 'email' | 'password'; type TInputSize = 'sm' | 'md' | 'lg'; type TInputProps = Omit< DetailedHTMLProps, HTMLInputElement>, 'size' | 'type' > & { type?: TInputType; size?: TInputSize; disabled?: boolean; }; const sizeClasses: Record = { sm: { textSize: 'text-[10px] max-h-[28px]', iconSize: 'text-[10px]' }, md: { textSize: 'text-[12px] max-h-[30px]', iconSize: 'text-[12px]' }, lg: { textSize: 'text-[15px] max-h-[34px]', iconSize: 'text-[15px]' }, }; const disabledClass = 'opacity-50 hover:border-neutral-200 cursor-not-allowed'; export const Input: FC = ({ type = 'text', size = 'md', placeholder = 'Placeholder', disabled, className, ...rest }): ReactElement => { const [showPassword, setShowPassword] = useState(false); // State for password visibility const togglePasswordVisibility = () => { if (!disabled) setShowPassword((prev) => !prev); }; const mergedClassName = cn( 'px-[12px] py-[8px] text-neutral-800 placeholder:text-neutral-300 border border-neutral-200 hover:border-blue-300 focus:outline-1 focus:outline-blue-500 rounded-md font-bai-jamjuree min-w-70', sizeClasses[size].textSize, disabled && disabledClass, className ); return ( {type === 'password' && ( {showPassword ? ( ) : ( )} )} ); };