"use client"; import { Icon } from "@iconify/react"; import { useState } from "react"; import { Control, FieldPath, FieldValues } from "react-hook-form"; import { Field, FieldError, FieldLabel } from "@/components/shadcn/field/field"; import { FormControl, FormField } from "@/components/shadcn/form"; import { Input } from "@/components/shadcn/input/input"; import { cn } from "@/lib/utils"; const SIZE_MAP = { sm: "sm", md: "default", lg: "lg" } as const; interface CustomInputProps { control: Control; name: FieldPath; label?: string; labelPlacement?: "inside" | "outside"; variant?: "flat" | "bordered" | "underlined" | "faded"; size?: "sm" | "md" | "lg"; type?: string; placeholder?: string; password?: boolean; confirmPassword?: boolean; defaultValue?: string; isReadOnly?: boolean; isRequired?: boolean; isDisabled?: boolean; } export const CustomInput = ({ control, name, type = "text", label = name, labelPlacement = "inside", placeholder, variant = "bordered", size = "md", confirmPassword = false, password = false, defaultValue, isReadOnly = false, isRequired = true, isDisabled = false, }: CustomInputProps) => { const [isPasswordVisible, setIsPasswordVisible] = useState(false); const [isConfirmPasswordVisible, setIsConfirmPasswordVisible] = useState(false); void variant; void defaultValue; const inputLabel = confirmPassword ? "Confirm Password" : password ? "Password" : label; const inputPlaceholder = confirmPassword ? "Confirm Password" : password ? "Password" : placeholder; const isMaskedInput = password || confirmPassword; const inputType = isMaskedInput ? isPasswordVisible || isConfirmPasswordVisible ? "text" : "password" : type; const inputIsRequired = isMaskedInput ? true : isRequired; const toggleVisibility = () => { if (password) { setIsPasswordVisible(!isPasswordVisible); } else if (confirmPassword) { setIsConfirmPasswordVisible(!isConfirmPasswordVisible); } }; return ( ( {inputLabel && ( {inputLabel} {inputIsRequired && ( * )} )}
{isMaskedInput && ( )}
{fieldState.error?.message && ( {fieldState.error.message} )}
)} /> ); };