import { forwardRef, InputHTMLAttributes, useState, useEffect } from "react";
import { twMerge } from "tailwind-merge";
interface TextInputProps extends InputHTMLAttributes {
type?: string;
storedValue?: string;
}
const TextInput = forwardRef(
({ type = "text", className, value, defaultValue, onChange, ...props }, ref) => {
const [internalValue, setInternalValue] = useState(value ?? defaultValue ?? "");
// Sync when `value` changes (controlled mode)
useEffect(() => {
if (value !== undefined) {
setInternalValue(value);
}
}, [value]);
const handleChange = (e: React.ChangeEvent) => {
const newVal = e.target.value;
setInternalValue(newVal);
onChange?.(e); // Pass event to parent (so Email, Password, etc. still work)
};
return (
);
}
);
TextInput.displayName = "TextInput";
export default TextInput;