"use client"; import * as React from "react"; import { Controller, FormProvider, useFormContext, useFormState, type ControllerProps, type FieldPath, type FieldValues, } from "react-hook-form"; import { Label } from "@/components/ui/label"; import { cn } from "@/lib/utils"; const Form = FormProvider; interface FormFieldContextValue< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, > { name: TName; } const FormFieldContext = React.createContext( null, ); function FormField< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, >(props: ControllerProps) { return ( ); } const FormItemContext = React.createContext<{ id: string } | null>(null); function useFormField() { const fieldContext = React.useContext(FormFieldContext); const itemContext = React.useContext(FormItemContext); const { getFieldState } = useFormContext(); const formState = useFormState({ name: fieldContext?.name }); if (!fieldContext || !itemContext) throw new Error("useFormField must be used within /"); const fieldState = getFieldState(fieldContext.name, formState); const { id } = itemContext; return { id, name: fieldContext.name, formItemId: `${id}-form-item`, formDescriptionId: `${id}-form-item-description`, formMessageId: `${id}-form-item-message`, ...fieldState, }; } function FormItem({ className, ...props }: React.ComponentProps<"div">) { const id = React.useId(); return (
); } function FormLabel({ className, ...props }: React.ComponentProps) { const { error, formItemId } = useFormField(); return (