import React, { forwardRef, type InputHTMLAttributes } from "react"; import cn from "classnames"; const classes = { root: "px-4 h-12 flex items-center w-full rounded border-gray-200 appearance-none transition duration-300 ease-in-out text-heading text-sm focus:outline-none focus:ring-0", normal: "bg-gray-100 border border-border-base focus:shadow focus:bg-light focus:border-gray-400", solid: "bg-gray-100 border border-border-100 focus:bg-light focus:border-gray-400", outline: "border border-border-base focus:border-gray-400", shadow: "focus:shadow", }; type Variant = "normal" | "solid" | "outline"; interface InputProps extends InputHTMLAttributes { label?: string; note?: string; error?: string; variant?: Variant; shadow?: boolean; inputClassName?: string; isRequired?: boolean; labelClass?: string; children?: React.ReactNode; } const Input = forwardRef( ( { className, label, note, name, error, children, variant = "normal", shadow = false, type = "text", inputClassName, isRequired = false, labelClass = "dark:text-white", ...rest }, ref ) => { const rootClassName = cn( classes.root, { [classes.normal]: variant === "normal", [classes.solid]: variant === "solid", [classes.outline]: variant === "outline", }, { [classes.shadow]: shadow, }, inputClassName ); return (
{label && ( )} {note &&

{note}

} {error && (

{error}

)} {children}
); } ); Input.displayName = "Input"; export default Input;