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' | 'number' | 'password' | 'file' | 'date' | 'time'; type TInputSize = 'sm' | 'md' | 'lg'; type Width = 'standard' | 'custom'; type TInputProps = Omit< DetailedHTMLProps, HTMLInputElement>, 'size' | 'type' > & { type?: TInputType; size?: TInputSize; widthform?: Width; disabled?: boolean; }; const sizeClasses: Record = { sm: { textSize: 'text-[10px] h-[28px]', iconSize: 'text-[10px]' }, md: { textSize: 'text-[12px] h-[30px]', iconSize: 'text-[12px]' }, lg: { textSize: 'text-[15px] 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', widthform = 'standard', disabled, className, ...rest }): ReactElement => { const [showPassword, setShowPassword] = useState(false); // State for password visibility const togglePasswordVisibility = (e: React.FormEvent) => { e.preventDefault(); if (!disabled) setShowPassword((prev) => !prev); }; const mergedClassName = cn( `px-[12px] py-[8px] text-neutral-800 bg-white placeholder:text-neutral-300 border border-neutral-200 hover:border-blue-300 focus:outline-1 focus:outline-blue-500 rounded-md font-bai-jamjuree w-full ${ widthform === 'standard' ? 'min-w-70' : '' }`, sizeClasses[size].textSize, disabled && disabledClass, className ); return ( {type === 'password' && ( {showPassword ? ( ) : ( )} )} ); };