diff --git a/packages/react-form-devtools/eslint.config.js b/packages/react-form-devtools/eslint.config.js
index dd590b561..66f87d647 100644
--- a/packages/react-form-devtools/eslint.config.js
+++ b/packages/react-form-devtools/eslint.config.js
@@ -20,6 +20,8 @@ export default [
'react-hooks/exhaustive-deps': 'error',
'react-hooks/rules-of-hooks': 'error',
'react-compiler/react-compiler': 'error',
+ // Must be "off" to avoid moving `useContext` to `use`, which breaks React 17/18 usage.
+ '@eslint-react/no-use-context': 'off',
},
},
]
diff --git a/packages/react-form-nextjs/eslint.config.js b/packages/react-form-nextjs/eslint.config.js
index dd590b561..66f87d647 100644
--- a/packages/react-form-nextjs/eslint.config.js
+++ b/packages/react-form-nextjs/eslint.config.js
@@ -20,6 +20,8 @@ export default [
'react-hooks/exhaustive-deps': 'error',
'react-hooks/rules-of-hooks': 'error',
'react-compiler/react-compiler': 'error',
+ // Must be "off" to avoid moving `useContext` to `use`, which breaks React 17/18 usage.
+ '@eslint-react/no-use-context': 'off',
},
},
]
diff --git a/packages/react-form-remix/eslint.config.js b/packages/react-form-remix/eslint.config.js
index dd590b561..66f87d647 100644
--- a/packages/react-form-remix/eslint.config.js
+++ b/packages/react-form-remix/eslint.config.js
@@ -20,6 +20,8 @@ export default [
'react-hooks/exhaustive-deps': 'error',
'react-hooks/rules-of-hooks': 'error',
'react-compiler/react-compiler': 'error',
+ // Must be "off" to avoid moving `useContext` to `use`, which breaks React 17/18 usage.
+ '@eslint-react/no-use-context': 'off',
},
},
]
diff --git a/packages/react-form-start/eslint.config.js b/packages/react-form-start/eslint.config.js
index dd590b561..66f87d647 100644
--- a/packages/react-form-start/eslint.config.js
+++ b/packages/react-form-start/eslint.config.js
@@ -20,6 +20,8 @@ export default [
'react-hooks/exhaustive-deps': 'error',
'react-hooks/rules-of-hooks': 'error',
'react-compiler/react-compiler': 'error',
+ // Must be "off" to avoid moving `useContext` to `use`, which breaks React 17/18 usage.
+ '@eslint-react/no-use-context': 'off',
},
},
]
diff --git a/packages/react-form/eslint.config.js b/packages/react-form/eslint.config.js
index dd590b561..66f87d647 100644
--- a/packages/react-form/eslint.config.js
+++ b/packages/react-form/eslint.config.js
@@ -20,6 +20,8 @@ export default [
'react-hooks/exhaustive-deps': 'error',
'react-hooks/rules-of-hooks': 'error',
'react-compiler/react-compiler': 'error',
+ // Must be "off" to avoid moving `useContext` to `use`, which breaks React 17/18 usage.
+ '@eslint-react/no-use-context': 'off',
},
},
]
diff --git a/packages/react-form/src/createFormHook.tsx b/packages/react-form/src/createFormHook.tsx
index 5c0e8b7ad..4008c47fc 100644
--- a/packages/react-form/src/createFormHook.tsx
+++ b/packages/react-form/src/createFormHook.tsx
@@ -359,7 +359,6 @@ export function createFormHook<
return (
{(field) => (
- // eslint-disable-next-line @eslint-react/no-context-provider
{children(Object.assign(field, fieldComponents))}
diff --git a/packages/react-form/src/useField.tsx b/packages/react-form/src/useField.tsx
index 2a3f546cf..76d2bc923 100644
--- a/packages/react-form/src/useField.tsx
+++ b/packages/react-form/src/useField.tsx
@@ -1,6 +1,6 @@
'use client'
-import { useMemo, useRef, useState } from 'react'
+import { useMemo, useState } from 'react'
import { useStore } from '@tanstack/react-store'
import { FieldApi, functionalUpdate } from '@tanstack/form-core'
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'
@@ -15,42 +15,9 @@ import type {
FormAsyncValidateOrFn,
FormValidateOrFn,
} from '@tanstack/form-core'
-import type { FunctionComponent, ReactElement, ReactNode } from 'react'
+import type { FunctionComponent, ReactNode } from 'react'
import type { UseFieldOptions, UseFieldOptionsBound } from './types'
-interface ReactFieldApi<
- TParentData,
- TFormOnMount extends undefined | FormValidateOrFn,
- TFormOnChange extends undefined | FormValidateOrFn,
- TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnBlur extends undefined | FormValidateOrFn,
- TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnSubmit extends undefined | FormValidateOrFn,
- TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnDynamic extends undefined | FormValidateOrFn,
- TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnServer extends undefined | FormAsyncValidateOrFn,
- TPatentSubmitMeta,
-> {
- /**
- * A pre-bound and type-safe sub-field component using this field as a root.
- */
- Field: FieldComponent<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TPatentSubmitMeta
- >
-}
-
/**
* A type representing a hook for using a field in a form with the given form data type.
*
@@ -305,23 +272,7 @@ export function useField<
TFormOnDynamicAsync,
TFormOnServer,
TPatentSubmitMeta
- > &
- ReactFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TPatentSubmitMeta
- > = reactiveFieldApi as never
-
- extendedApi.Field = Field as never
+ > = reactiveFieldApi as never
return extendedApi
}, [
diff --git a/packages/solid-form/src/createField.tsx b/packages/solid-form/src/createField.tsx
index 504564b03..1284f0aaf 100644
--- a/packages/solid-form/src/createField.tsx
+++ b/packages/solid-form/src/createField.tsx
@@ -15,7 +15,6 @@ import type {
FieldValidators,
FormAsyncValidateOrFn,
FormValidateOrFn,
- Narrow,
} from '@tanstack/form-core'
import type { Accessor, JSX, JSXElement } from 'solid-js'
@@ -51,94 +50,6 @@ interface SolidFieldApi<
>
}
-export type CreateField<
- TParentData,
- TFormOnMount extends undefined | FormValidateOrFn,
- TFormOnChange extends undefined | FormValidateOrFn,
- TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnBlur extends undefined | FormValidateOrFn,
- TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnSubmit extends undefined | FormValidateOrFn,
- TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnDynamic extends undefined | FormValidateOrFn,
- TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnServer extends undefined | FormAsyncValidateOrFn,
- TParentSubmitMeta,
-> = <
- TName extends DeepKeys,
- TData extends DeepValue,
- TOnMount extends undefined | FieldValidateOrFn,
- TOnChange extends undefined | FieldValidateOrFn,
- TOnChangeAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnBlur extends undefined | FieldValidateOrFn,
- TOnBlurAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnSubmit extends undefined | FieldValidateOrFn,
- TOnSubmitAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnDynamic extends undefined | FieldValidateOrFn,
- TOnDynamicAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
->(
- opts: () => { name: Narrow } & CreateFieldOptionsBound<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync
- >,
-) => () => FieldApi<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
-> &
- SolidFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- >
-
// ugly way to trick solid into triggering updates for changes on the fieldApi
function makeFieldReactive<
TParentData,
@@ -326,23 +237,7 @@ export function createField<
const api = new FieldApi(options)
- const extendedApi: typeof api &
- SolidFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- > = api as never
-
- extendedApi.Field = Field as never
+ const extendedApi: typeof api = api as never
let mounted = false
// Instantiates field meta and removes it when unrendered
diff --git a/packages/solid-form/src/createForm.tsx b/packages/solid-form/src/createForm.tsx
index 383014c09..0c01b193a 100644
--- a/packages/solid-form/src/createForm.tsx
+++ b/packages/solid-form/src/createForm.tsx
@@ -9,7 +9,7 @@ import type {
FormValidateOrFn,
} from '@tanstack/form-core'
import type { JSXElement } from 'solid-js'
-import type { CreateField, FieldComponent } from './createField'
+import type { FieldComponent } from './createField'
export interface SolidFormApi<
TParentData,
@@ -39,20 +39,6 @@ export interface SolidFormApi<
TFormOnServer,
TSubmitMeta
>
- createField: CreateField<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TSubmitMeta
- >
useStore: <
TSelected = NoInfer<
FormState<
@@ -231,10 +217,6 @@ export function createForm<
> = api as never
extendedApi.Field = (props) =>
- extendedApi.createField = (props) =>
- createField(() => {
- return { ...props(), form: api }
- }) as never
extendedApi.useStore = (selector) => useStore(api.store, selector)
extendedApi.Subscribe = (props) =>
functionalUpdate(props.children, useStore(api.store, props.selector))
diff --git a/packages/svelte-form/src/Field.svelte b/packages/svelte-form/src/Field.svelte
index 57fba2860..9d63c23e4 100644
--- a/packages/svelte-form/src/Field.svelte
+++ b/packages/svelte-form/src/Field.svelte
@@ -10,8 +10,7 @@
} from '@tanstack/form-core'
import { useStore } from '@tanstack/svelte-store'
import { onMount, type Snippet } from 'svelte'
- import Field from './Field.svelte'
- import type { CreateFieldOptions, SvelteFieldApi } from './types.js'
+ import type { CreateFieldOptions } from './types.js'
export function createField<
TParentData,
@@ -76,23 +75,7 @@
const api = new FieldApi(options)
- const extendedApi: typeof api &
- SvelteFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- > = api as never
-
- extendedApi.Field = Field as never
+ const extendedApi: typeof api = api as never
let mounted = false
// Instantiates field meta and removes it when unrendered
diff --git a/packages/svelte-form/src/createForm.svelte.ts b/packages/svelte-form/src/createForm.svelte.ts
index 5bd92181c..fc770e941 100644
--- a/packages/svelte-form/src/createForm.svelte.ts
+++ b/packages/svelte-form/src/createForm.svelte.ts
@@ -1,7 +1,7 @@
import { FormApi } from '@tanstack/form-core'
import { useStore } from '@tanstack/svelte-store'
import { onMount } from 'svelte'
-import Field, { createField } from './Field.svelte'
+import Field from './Field.svelte'
import Subscribe from './Subscribe.svelte'
import type {
Component,
@@ -15,7 +15,7 @@ import type {
FormState,
FormValidateOrFn,
} from '@tanstack/form-core'
-import type { CreateField, FieldComponent, WithoutFunction } from './types.js'
+import type { FieldComponent, WithoutFunction } from './types.js'
export interface SvelteFormApi<
TParentData,
@@ -45,20 +45,6 @@ export interface SvelteFormApi<
TFormOnServer,
TSubmitMeta
>
- createField: CreateField<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TSubmitMeta
- >
useStore: <
TSelected = NoInfer<
FormState<
@@ -287,10 +273,6 @@ export function createForm<
// @ts-expect-error constructor definition exists only on a type level
extendedApi.Field = (internal, props) =>
Field(internal, { ...props, form: api as never } as never)
- extendedApi.createField = (props) =>
- createField(() => {
- return { ...props(), form: api } as never
- }) as never // Type cast because else "Error: Type instantiation is excessively deep and possibly infinite."
extendedApi.useStore = (selector) => useStore(api.store, selector)
// @ts-expect-error constructor definition exists only on a type level
extendedApi.Subscribe = (internal, props) =>
diff --git a/packages/svelte-form/src/createFormCreator.svelte.ts b/packages/svelte-form/src/createFormCreator.svelte.ts
index 0637168f9..af4c5fe41 100644
--- a/packages/svelte-form/src/createFormCreator.svelte.ts
+++ b/packages/svelte-form/src/createFormCreator.svelte.ts
@@ -13,7 +13,7 @@ import type {
} from '@tanstack/form-core'
import type { FieldComponent } from './types.js'
import type { SvelteFormExtendedApi } from './createForm.svelte'
-import type { Component, Snippet, SvelteComponent } from 'svelte'
+import type { Component, Snippet } from 'svelte'
/**
* TypeScript inferencing is weird.
diff --git a/packages/svelte-form/src/index.ts b/packages/svelte-form/src/index.ts
index 5540f0b85..6001165f2 100644
--- a/packages/svelte-form/src/index.ts
+++ b/packages/svelte-form/src/index.ts
@@ -6,7 +6,7 @@ export { createForm, type SvelteFormApi } from './createForm.svelte.js'
export { default as Field, createField } from './Field.svelte'
-export type { CreateField, FieldComponent } from './types.js'
+export type { FieldComponent } from './types.js'
export {
createFormCreator,
diff --git a/packages/svelte-form/src/types.ts b/packages/svelte-form/src/types.ts
index 853834d0a..c593926ac 100644
--- a/packages/svelte-form/src/types.ts
+++ b/packages/svelte-form/src/types.ts
@@ -80,36 +80,6 @@ export type WithoutFunction = {
[K in keyof T as T[K] extends Function ? never : K]: T[K]
}
-export interface SvelteFieldApi<
- TParentData,
- TFormOnMount extends undefined | FormValidateOrFn,
- TFormOnChange extends undefined | FormValidateOrFn,
- TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnBlur extends undefined | FormValidateOrFn,
- TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnSubmit extends undefined | FormValidateOrFn,
- TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnDynamic extends undefined | FormValidateOrFn,
- TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnServer extends undefined | FormAsyncValidateOrFn,
- TParentSubmitMeta,
-> {
- Field: FieldComponent<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- >
-}
-
export type FieldComponent<
TParentData,
TFormOnMount extends undefined | FormValidateOrFn,
@@ -338,106 +308,3 @@ type FieldComponentProps<
>,
'form'
>
-
-export type CreateField<
- TParentData,
- TFormOnMount extends undefined | FormValidateOrFn,
- TFormOnChange extends undefined | FormValidateOrFn,
- TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnBlur extends undefined | FormValidateOrFn,
- TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnSubmit extends undefined | FormValidateOrFn,
- TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnDynamic extends undefined | FormValidateOrFn,
- TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnServer extends undefined | FormAsyncValidateOrFn,
- TParentSubmitMeta,
-> = <
- TName extends DeepKeys,
- TData extends DeepValue,
- TOnMount extends undefined | FieldValidateOrFn,
- TOnChange extends undefined | FieldValidateOrFn,
- TOnChangeAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnBlur extends undefined | FieldValidateOrFn,
- TOnBlurAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnSubmit extends undefined | FieldValidateOrFn,
- TOnSubmitAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnDynamic extends undefined | FieldValidateOrFn,
- TOnDynamicAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TSubmitMeta,
->(
- opts: () => { name: Narrow } & Omit<
- CreateFieldOptions<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TSubmitMeta
- >,
- 'form'
- >,
-) => FieldApi<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
-> &
- SvelteFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- >
diff --git a/packages/vue-form/src/useField.tsx b/packages/vue-form/src/useField.tsx
index c9e3b2492..630ae6214 100644
--- a/packages/vue-form/src/useField.tsx
+++ b/packages/vue-form/src/useField.tsx
@@ -15,7 +15,6 @@ import type {
EmitsOptions,
EmitsToProps,
PublicProps,
- Ref,
SetupContext,
SlotsType,
} from 'vue'
@@ -185,125 +184,6 @@ export interface VueFieldApi<
>
}
-export type UseField<
- TParentData,
- TFormOnMount extends undefined | FormValidateOrFn,
- TFormOnChange extends undefined | FormValidateOrFn,
- TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnBlur extends undefined | FormValidateOrFn,
- TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnSubmit extends undefined | FormValidateOrFn,
- TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnDynamic extends undefined | FormValidateOrFn,
- TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn,
- TFormOnServer extends undefined | FormAsyncValidateOrFn,
- TParentSubmitMeta,
-> = <
- TName extends DeepKeys,
- TData extends DeepValue,
- TOnMount extends undefined | FieldValidateOrFn,
- TOnChange extends undefined | FieldValidateOrFn,
- TOnChangeAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnBlur extends undefined | FieldValidateOrFn,
- TOnBlurAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnSubmit extends undefined | FieldValidateOrFn,
- TOnSubmitAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
- TOnDynamic extends undefined | FieldValidateOrFn,
- TOnDynamicAsync extends
- | undefined
- | FieldAsyncValidateOrFn,
->(
- opts: UseFieldOptionsBound<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync
- >,
-) => {
- api: FieldApi<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- > &
- VueFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- >
- state: Readonly<
- Ref<
- FieldApi<
- TParentData,
- TName,
- TData,
- TOnMount,
- TOnChange,
- TOnChangeAsync,
- TOnBlur,
- TOnBlurAsync,
- TOnSubmit,
- TOnSubmitAsync,
- TOnDynamic,
- TOnDynamicAsync,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- >['state']
- >
- >
-}
-
export function useField<
TParentData,
TName extends DeepKeys,
@@ -370,25 +250,7 @@ export function useField<
name: opts.name,
})
- const extendedApi: typeof api &
- VueFieldApi<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TParentSubmitMeta
- > = api as never
-
- extendedApi.Field = Field as never
-
- return extendedApi
+ return api
})()
const fieldState = useStore(fieldApi.store, (state) => state)
diff --git a/packages/vue-form/src/useForm.tsx b/packages/vue-form/src/useForm.tsx
index 74be6e56a..a4f8f8f49 100644
--- a/packages/vue-form/src/useForm.tsx
+++ b/packages/vue-form/src/useForm.tsx
@@ -1,7 +1,7 @@
import { FormApi } from '@tanstack/form-core'
import { useStore } from '@tanstack/vue-store'
import { defineComponent, h, onMounted } from 'vue'
-import { Field, useField } from './useField'
+import { Field } from './useField'
import type {
FormAsyncValidateOrFn,
FormOptions,
@@ -17,7 +17,7 @@ import type {
Ref,
SlotsType,
} from 'vue'
-import type { FieldComponent, UseField } from './useField'
+import type { FieldComponent } from './useField'
type SubscribeComponent<
TParentData,
@@ -149,20 +149,6 @@ export interface VueFormApi<
TFormOnServer,
TSubmitMeta
>
- useField: UseField<
- TParentData,
- TFormOnMount,
- TFormOnChange,
- TFormOnChangeAsync,
- TFormOnBlur,
- TFormOnBlurAsync,
- TFormOnSubmit,
- TFormOnSubmitAsync,
- TFormOnDynamic,
- TFormOnDynamicAsync,
- TFormOnServer,
- TSubmitMeta
- >
useStore: <
TSelected = NoInfer<
FormState<
@@ -287,10 +273,6 @@ export function useForm<
inheritAttrs: false,
},
) as never
- extendedApi.useField = (props) => {
- const field = useField({ ...props, form: api })
- return field
- }
extendedApi.useStore = (selector) => {
return useStore(api.store as never, selector as never) as never
}