import { cn } from "@/lib/utils"; import { FormControl, FormDescription, FormField, FormItem, Input, InputProps } from "@/ui"; import * as React from "react"; import { createElement } from "react"; import { FieldPath, FieldValues, UseControllerProps, useFormContext } from "react-hook-form"; import { FormErrorMessage } from "./FormErrorMessage"; import { FormLabel, FormLabelProps } from "./FormLabel"; import { FormInputProps, FormInputWithIconProps } from "./FormProps"; export type FormTextFieldProps< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath > = { button?: (props?: React.PropsWithChildren) => React.ReactNode; } & InputProps & FormInputProps & Partial & FormInputWithIconProps & UseControllerProps; export const FormTextField = React.forwardRef< HTMLDivElement, React.HTMLAttributes & FormTextFieldProps >((props, ref) => { const { name, label, hint, placeholder, description, required, className, leadIcon, trailIcon, button, defaultValue, type, } = props; const { control } = useFormContext(); return ( { return ( {label && }
{leadIcon && (
{React.createElement( leadIcon, { className: "h-5 w-5 text-muted-foreground", "aria-hidden": true, }, null )}
)} {trailIcon && (
{createElement( trailIcon, { className: "h-5 w-5 text-muted-foreground", "aria-hidden": true, }, null )}
)}
{button && <>{createElement(button)}}
{description && {description}}
); }} /> ); });