"use client"; import { Icon } from "@iconify/react"; import { InputHTMLAttributes, useState } from "react"; import { Control, FieldPath, FieldValues } from "react-hook-form"; import { FormControl, FormField, FormMessage } from "@/components/shadcn/form"; import { Input } from "@/components/shadcn/input/input"; import { cn } from "@/lib/utils"; interface WizardInputFieldProps { 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; normalizeValue?: (value: string) => string; autoCapitalize?: InputHTMLAttributes["autoCapitalize"]; autoCorrect?: InputHTMLAttributes["autoCorrect"]; spellCheck?: boolean; requiredIndicator?: boolean; } export const WizardInputField = ({ control, name, type = "text", label = name, labelPlacement = "inside", variant, size, placeholder, confirmPassword = false, password = false, defaultValue, isReadOnly = false, isRequired = true, isDisabled = false, normalizeValue, autoCapitalize, autoCorrect, spellCheck, requiredIndicator, }: WizardInputFieldProps) => { const [isPasswordVisible, setIsPasswordVisible] = useState(false); const [isConfirmPasswordVisible, setIsConfirmPasswordVisible] = useState(false); void variant; void size; const inputLabel = confirmPassword ? "Confirm Password" : password ? "Password" : label; const inputPlaceholder = confirmPassword ? "Confirm Password" : password ? "Password" : placeholder; const isMaskedInput = type === "password" || password || confirmPassword; const inputType = isMaskedInput ? isPasswordVisible || isConfirmPasswordVisible ? "text" : "password" : type; const inputIsRequired = password || confirmPassword ? true : isRequired; const showRequiredIndicator = requiredIndicator ?? inputIsRequired; const toggleVisibility = () => { if (password || type === "password") { setIsPasswordVisible((current) => !current); return; } if (confirmPassword) { setIsConfirmPasswordVisible((current) => !current); } }; return ( { const value = field.value ?? defaultValue ?? ""; return (
{ if (!normalizeValue) { field.onChange(event); return; } const normalizedValue = normalizeValue(event.target.value); field.onChange(normalizedValue); }} value={value} /> {isMaskedInput && ( )}
); }} /> ); };