import { Slot } from '@radix-ui/react-slot'; import { createFormHook, createFormHookContexts, useStore } from '@tanstack/react-form'; import * as React from 'react'; import { Label } from '#components/ui/label'; import { cn } from '#lib/utils'; const { fieldContext, formContext, useFieldContext: _useFieldContext, useFormContext, } = createFormHookContexts(); const { useAppForm, withForm } = createFormHook({ fieldContext, formContext, fieldComponents: { Label: FormLabel, Control: FormControl, Description: FormDescription, Message: FormMessage, MessageItems: FormMessageItems, Item: FormItem, }, formComponents: {}, }); type FormItemContextValue = { id: string; }; const FormItemContext = React.createContext({} as FormItemContextValue); function FormItem({ className, ...props }: React.ComponentProps<'div'>) { const id = React.useId(); return (
); } const useFieldContext = () => { const { id } = React.useContext(FormItemContext); const { name, store, ...fieldContext } = _useFieldContext(); // eslint-disable-next-line @typescript-eslint/no-unsafe-return const errors = useStore(store, (state) => state.meta.errors); if (!fieldContext) { throw new Error('useFieldContext should be used within '); } return { id, name, formItemId: `${id}-form-item`, formDescriptionId: `${id}-form-item-description`, formMessageId: `${id}-form-item-message`, errors, store, ...fieldContext, }; }; function FormLabel({ className, ...props }: React.ComponentProps) { const { formItemId, errors } = useFieldContext(); return (