import * as React from 'react' import * as LabelPrimitive from '@radix-ui/react-label' import { Slot } from '@radix-ui/react-slot' import { Controller, ControllerProps, FieldPath, FieldValues, FormProvider, useFormContext, } from 'react-hook-form' import { cn, env } from '@/lib/utils' import { Label } from '@/components/ui/label' import TranslateClientFragment from '@/components/translate-client-fragment' const Form = FormProvider type FormFieldContextValue = FieldPath> = { name: TName } const FormFieldContext = React.createContext( {} as FormFieldContextValue) const FormField = = FieldPath> ({ ...props }: ControllerProps) => { return ( ) } const useFormField = () => { const fieldContext = React.useContext(FormFieldContext) const itemContext = React.useContext(FormItemContext) const { getFieldState, formState } = useFormContext() const fieldState = getFieldState(fieldContext.name, formState) if (!fieldContext) { throw new Error('useFormField should be used within ') } const { id } = itemContext return { id, name: fieldContext.name, formItemId: `${id}-form-item`, formDescriptionId: `${id}-form-item-description`, formMessageId: `${id}-form-item-message`, ...fieldState, } } type FormItemContextValue = { id: string } const FormItemContext = React.createContext( {} as FormItemContextValue) const FormItem = React.forwardRef>( ({ className, ...props }, ref) => { const id = React.useId() return (
) }) FormItem.displayName = 'FormItem' const FormLabel = React.forwardRef, React.ComponentPropsWithoutRef>( ({ className, ...props }, ref) => { const { error, formItemId } = useFormField() return (