// Adapted from shadcn/ui, MIT (98a1fe67). See THIRD_PARTY_NOTICES.md. "use client"; import * as React from "react"; import { cn } from "./_ynrlib/cn.js"; import type { Label as LabelPrimitive } from "./_ynrlib/radix-ui.js"; import { Slot } from "./_ynrlib/radix-ui.js"; import { Controller, FormProvider, useFormContext, useFormState, type ControllerProps, type FieldPath, type FieldValues, } from "./_ynrlib/hook-form.js"; import { Label } from "./label.js"; export const HookForm = FormProvider; type FormFieldContextValue< TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, > = { name: TName; }; const FormFieldContext = React.createContext( null, ); export const HookFormField = < TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, >({ ...props }: ControllerProps) => { return ( ); }; export const useHookFormField = () => { const fieldContext = React.useContext(FormFieldContext); const itemContext = React.useContext(FormItemContext); const form = useFormContext(); if (!fieldContext || !itemContext || !form) { throw new Error( "useHookFormField requires HookForm, HookFormField and HookFormItem.", ); } const { getFieldState } = form; const formState = useFormState({ name: fieldContext.name }); 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, }; }; type FormItemContextValue = { id: string; }; const FormItemContext = React.createContext(null); export function HookFormItem({ className, ...props }: React.ComponentProps<"div">) { const id = React.useId(); return (
); } export function HookFormLabel({ className, ...props }: React.ComponentProps) { const { error, formItemId } = useHookFormField(); return (