diff --git a/docs/assets/field-states-extended.png b/docs/assets/field-states-extended.png new file mode 100644 index 000000000..033fe6e68 Binary files /dev/null and b/docs/assets/field-states-extended.png differ diff --git a/docs/assets/field-states.png b/docs/assets/field-states.png index 2e6490cd8..a78ed16f9 100644 Binary files a/docs/assets/field-states.png and b/docs/assets/field-states.png differ diff --git a/docs/framework/react/guides/basic-concepts.md b/docs/framework/react/guides/basic-concepts.md index 5b3e5d3a3..4e4ece2e5 100644 --- a/docs/framework/react/guides/basic-concepts.md +++ b/docs/framework/react/guides/basic-concepts.md @@ -92,7 +92,11 @@ const { } = field.state ``` -There are three field states that can be useful to see how the user interacts with a field: A field is _"touched"_ when the user clicks/tabs into it, _"pristine"_ until the user changes value in it, and _"dirty"_ after the value has been changed. You can check these states via the `isTouched`, `isPristine` and `isDirty` flags, as seen below. +There are three states in the metadata that can be useful to see how the user interacts with a field: + +- _"isTouched"_, after the user clicks/tabs into the field +- _"isPristine"_, until the user changes the field value +- _"isDirty"_, after the fields value has been changed ```tsx const { isTouched, isPristine, isDirty } = field.state.meta @@ -100,9 +104,28 @@ const { isTouched, isPristine, isDirty } = field.state.meta ![Field states](https://raw.githubusercontent.com/TanStack/form/main/docs/assets/field-states.png) -> **Important note for users coming from `React Hook Form`**: the `isDirty` flag in `TanStack/form` is different from the flag with the same name in RHF. -> In RHF, `isDirty = true`, when the form's values are different from the original values. If the user changes the values in a form, and then changes them again to end up with values that match the form's default values, `isDirty` will be `false` in RHF, but `true` in `TanStack/form`. -> The default values are exposed both on the form's and the field's level in `TanStack/form` (`form.options.defaultValues`, `field.options.defaultValue`), so you can write your own `isDefaultValue()` helper if you need to emulate RHF's behavior.` +## Understanding 'isDirty' in Different Libraries + +Non-Persistent `dirty` state + +- **Libraries**: React Hook Form (RHF), Formik, Final Form. +- **Behavior**: A field is 'dirty' if its value differs from the default. Reverting to the default value makes it 'clean' again. + +Persistent `dirty` state + +- **Libraries**: Angular Form, Vue FormKit. +- **Behavior**: A field remains 'dirty' once changed, even if reverted to the default value. + +We have chosen the persistent 'dirty' state model. To also support a non-persistent 'dirty' state, we introduce the isDefault flag. This flag acts as an inverse of the non-persistent 'dirty' state. + +```tsx +const { isTouched, isPristine, isDirty, isDefaultValue } = field.state.meta + +// The following line will re-create the non-Persistent `dirty` functionality. +const nonPersistentIsDirty = !isDefaultValue +``` + +![Field states extended](https://raw.githubusercontent.com/TanStack/form/main/docs/assets/field-states-extended.png) ## Field API diff --git a/docs/reference/classes/fieldapi.md b/docs/reference/classes/fieldapi.md index f305d36a1..e03e15236 100644 --- a/docs/reference/classes/fieldapi.md +++ b/docs/reference/classes/fieldapi.md @@ -7,7 +7,7 @@ title: FieldApi # Class: FieldApi\ -Defined in: [packages/form-core/src/FieldApi.ts:859](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L859) +Defined in: [packages/form-core/src/FieldApi.ts:863](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L863) A class representing the API for managing a form field. @@ -65,7 +65,7 @@ the `new FieldApi` constructor. new FieldApi(opts): FieldApi ``` -Defined in: [packages/form-core/src/FieldApi.ts:991](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L991) +Defined in: [packages/form-core/src/FieldApi.ts:995](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L995) Initializes a new `FieldApi` instance. @@ -87,7 +87,7 @@ Initializes a new `FieldApi` instance. form: FormApi; ``` -Defined in: [packages/form-core/src/FieldApi.ts:903](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L903) +Defined in: [packages/form-core/src/FieldApi.ts:907](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L907) A reference to the form API instance. @@ -99,7 +99,7 @@ A reference to the form API instance. name: DeepKeys; ``` -Defined in: [packages/form-core/src/FieldApi.ts:927](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L927) +Defined in: [packages/form-core/src/FieldApi.ts:931](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L931) The field name. @@ -111,7 +111,7 @@ The field name. options: FieldApiOptions; ``` -Defined in: [packages/form-core/src/FieldApi.ts:931](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L931) +Defined in: [packages/form-core/src/FieldApi.ts:935](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L935) The field options. @@ -123,7 +123,7 @@ The field options. store: Derived>; ``` -Defined in: [packages/form-core/src/FieldApi.ts:955](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L955) +Defined in: [packages/form-core/src/FieldApi.ts:959](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L959) The field state store. @@ -135,7 +135,7 @@ The field state store. timeoutIds: object; ``` -Defined in: [packages/form-core/src/FieldApi.ts:982](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L982) +Defined in: [packages/form-core/src/FieldApi.ts:986](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L986) #### formListeners @@ -165,7 +165,7 @@ validations: Record; get state(): FieldState ``` -Defined in: [packages/form-core/src/FieldApi.ts:979](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L979) +Defined in: [packages/form-core/src/FieldApi.ts:983](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L983) The current field state. @@ -181,7 +181,7 @@ The current field state. getInfo(): FieldInfo ``` -Defined in: [packages/form-core/src/FieldApi.ts:1245](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1245) +Defined in: [packages/form-core/src/FieldApi.ts:1249](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1249) Gets the field information object. @@ -197,7 +197,7 @@ Gets the field information object. getMeta(): FieldMeta ``` -Defined in: [packages/form-core/src/FieldApi.ts:1213](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1213) +Defined in: [packages/form-core/src/FieldApi.ts:1217](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1217) #### Returns @@ -211,7 +211,7 @@ Defined in: [packages/form-core/src/FieldApi.ts:1213](https://github.com/TanStac getValue(): TData ``` -Defined in: [packages/form-core/src/FieldApi.ts:1198](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1198) +Defined in: [packages/form-core/src/FieldApi.ts:1202](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1202) Gets the current field value. @@ -231,7 +231,7 @@ Use `field.state.value` instead. handleBlur(): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1657](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1657) +Defined in: [packages/form-core/src/FieldApi.ts:1661](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1661) Handles the blur event. @@ -247,7 +247,7 @@ Handles the blur event. handleChange(updater): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1650](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1650) +Defined in: [packages/form-core/src/FieldApi.ts:1654](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1654) Handles the change event. @@ -272,7 +272,7 @@ insertValue( opts?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1262](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1262) +Defined in: [packages/form-core/src/FieldApi.ts:1266](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1266) Inserts a value at the specified index, shifting the subsequent values to the right. @@ -302,7 +302,7 @@ Inserts a value at the specified index, shifting the subsequent values to the ri mount(): () => void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1088](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1088) +Defined in: [packages/form-core/src/FieldApi.ts:1092](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1092) Mounts the field instance to the form. @@ -325,7 +325,7 @@ moveValue( opts?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1306](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1306) +Defined in: [packages/form-core/src/FieldApi.ts:1310](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1310) Moves the value at the first specified index to the second specified index. @@ -357,7 +357,7 @@ parseValueWithSchema(schema): | StandardSchemaV1Issue[] ``` -Defined in: [packages/form-core/src/FieldApi.ts:1699](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1699) +Defined in: [packages/form-core/src/FieldApi.ts:1703](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1703) Parses the field's value with the given schema and returns issues (if any). This method does NOT set any internal errors. @@ -385,7 +385,7 @@ parseValueWithSchemaAsync(schema): Promise< | StandardSchemaV1Issue[]> ``` -Defined in: [packages/form-core/src/FieldApi.ts:1711](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1711) +Defined in: [packages/form-core/src/FieldApi.ts:1715](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1715) Parses the field's value with the given schema and returns issues (if any). This method does NOT set any internal errors. @@ -412,7 +412,7 @@ The standard schema to parse this field's value with. pushValue(value, opts?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1250](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1250) +Defined in: [packages/form-core/src/FieldApi.ts:1254](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1254) Pushes a new value to the field. @@ -438,7 +438,7 @@ Pushes a new value to the field. removeValue(index, opts?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1288](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1288) +Defined in: [packages/form-core/src/FieldApi.ts:1292](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1292) Removes a value at the specified index. @@ -467,7 +467,7 @@ replaceValue( opts?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1275](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1275) +Defined in: [packages/form-core/src/FieldApi.ts:1279](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1279) Replaces a value at the specified index. @@ -497,7 +497,7 @@ Replaces a value at the specified index. setErrorMap(errorMap): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1674](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1674) +Defined in: [packages/form-core/src/FieldApi.ts:1678](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1678) Updates the field's errorMap @@ -519,7 +519,7 @@ Updates the field's errorMap setMeta(updater): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1218](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1218) +Defined in: [packages/form-core/src/FieldApi.ts:1222](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1222) Sets the field metadata. @@ -541,7 +541,7 @@ Sets the field metadata. setValue(updater, options?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1205](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1205) +Defined in: [packages/form-core/src/FieldApi.ts:1209](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1209) Sets the field value and run the `change` validator. @@ -570,7 +570,7 @@ swapValues( opts?): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1297](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1297) +Defined in: [packages/form-core/src/FieldApi.ts:1301](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1301) Swaps the values at the specified indices. @@ -600,7 +600,7 @@ Swaps the values at the specified indices. update(opts): void ``` -Defined in: [packages/form-core/src/FieldApi.ts:1141](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1141) +Defined in: [packages/form-core/src/FieldApi.ts:1145](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1145) Updates the field instance with new options. @@ -622,7 +622,7 @@ Updates the field instance with new options. validate(cause, opts?): unknown[] | Promise ``` -Defined in: [packages/form-core/src/FieldApi.ts:1617](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1617) +Defined in: [packages/form-core/src/FieldApi.ts:1621](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L1621) Validates the field value. diff --git a/docs/reference/classes/formapi.md b/docs/reference/classes/formapi.md index 5067bd1d9..4916ced0d 100644 --- a/docs/reference/classes/formapi.md +++ b/docs/reference/classes/formapi.md @@ -7,7 +7,7 @@ title: FormApi # Class: FormApi\ -Defined in: [packages/form-core/src/FormApi.ts:767](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L767) +Defined in: [packages/form-core/src/FormApi.ts:771](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L771) A class representing the Form API. It handles the logic and interactions with the form state. @@ -45,7 +45,7 @@ However, if you need to create a new instance manually, you can do so by calling new FormApi(opts?): FormApi ``` -Defined in: [packages/form-core/src/FormApi.ts:838](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L838) +Defined in: [packages/form-core/src/FormApi.ts:842](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L842) Constructs a new `FormApi` instance with the given form options. @@ -67,7 +67,7 @@ Constructs a new `FormApi` instance with the given form options. baseStore: Store>; ``` -Defined in: [packages/form-core/src/FormApi.ts:794](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L794) +Defined in: [packages/form-core/src/FormApi.ts:798](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L798) *** @@ -77,7 +77,7 @@ Defined in: [packages/form-core/src/FormApi.ts:794](https://github.com/TanStack/ fieldInfo: Record, FieldInfo>; ``` -Defined in: [packages/form-core/src/FormApi.ts:824](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L824) +Defined in: [packages/form-core/src/FormApi.ts:828](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L828) A record of field information for each field in the form. @@ -89,7 +89,7 @@ A record of field information for each field in the form. fieldMetaDerived: Derived, AnyFieldMeta>>; ``` -Defined in: [packages/form-core/src/FormApi.ts:807](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L807) +Defined in: [packages/form-core/src/FormApi.ts:811](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L811) *** @@ -99,7 +99,7 @@ Defined in: [packages/form-core/src/FormApi.ts:807](https://github.com/TanStack/ options: FormOptions = {}; ``` -Defined in: [packages/form-core/src/FormApi.ts:782](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L782) +Defined in: [packages/form-core/src/FormApi.ts:786](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L786) The options for the form. @@ -111,7 +111,7 @@ The options for the form. store: Derived>; ``` -Defined in: [packages/form-core/src/FormApi.ts:808](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L808) +Defined in: [packages/form-core/src/FormApi.ts:812](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L812) ## Accessors @@ -123,7 +123,7 @@ Defined in: [packages/form-core/src/FormApi.ts:808](https://github.com/TanStack/ get state(): FormState ``` -Defined in: [packages/form-core/src/FormApi.ts:826](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L826) +Defined in: [packages/form-core/src/FormApi.ts:830](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L830) ##### Returns @@ -137,7 +137,7 @@ Defined in: [packages/form-core/src/FormApi.ts:826](https://github.com/TanStack/ deleteField(field): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1912](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1912) +Defined in: [packages/form-core/src/FormApi.ts:1938](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1938) #### Type Parameters @@ -161,7 +161,7 @@ Defined in: [packages/form-core/src/FormApi.ts:1912](https://github.com/TanStack getAllErrors(): object ``` -Defined in: [packages/form-core/src/FormApi.ts:2148](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2148) +Defined in: [packages/form-core/src/FormApi.ts:2174](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2174) Returns form and field level errors @@ -212,7 +212,7 @@ errors: ( getFieldInfo(field): FieldInfo ``` -Defined in: [packages/form-core/src/FormApi.ts:1826](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1826) +Defined in: [packages/form-core/src/FormApi.ts:1852](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1852) Gets the field info of the specified field. @@ -238,7 +238,7 @@ Gets the field info of the specified field. getFieldMeta(field): undefined | AnyFieldMeta ``` -Defined in: [packages/form-core/src/FormApi.ts:1817](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1817) +Defined in: [packages/form-core/src/FormApi.ts:1843](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1843) Gets the metadata of the specified field. @@ -264,7 +264,7 @@ Gets the metadata of the specified field. getFieldValue(field): DeepValue ``` -Defined in: [packages/form-core/src/FormApi.ts:1810](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1810) +Defined in: [packages/form-core/src/FormApi.ts:1836](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1836) Gets the value of the specified field. @@ -292,7 +292,7 @@ Gets the value of the specified field. handleSubmit(): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1712](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1712) +Defined in: [packages/form-core/src/FormApi.ts:1738](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1738) Handles the form submission, performs validation, and calls the appropriate onSubmit or onSubmitInvalid callbacks. @@ -306,7 +306,7 @@ Handles the form submission, performs validation, and calls the appropriate onSu handleSubmit(submitMeta): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1713](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1713) +Defined in: [packages/form-core/src/FormApi.ts:1739](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1739) Handles the form submission, performs validation, and calls the appropriate onSubmit or onSubmitInvalid callbacks. @@ -332,7 +332,7 @@ insertFieldValue( opts?): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1951](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1951) +Defined in: [packages/form-core/src/FormApi.ts:1977](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1977) #### Type Parameters @@ -368,7 +368,7 @@ Defined in: [packages/form-core/src/FormApi.ts:1951](https://github.com/TanStack mount(): () => void ``` -Defined in: [packages/form-core/src/FormApi.ts:1142](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1142) +Defined in: [packages/form-core/src/FormApi.ts:1168](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1168) #### Returns @@ -390,7 +390,7 @@ moveFieldValues( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:2075](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2075) +Defined in: [packages/form-core/src/FormApi.ts:2101](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2101) Moves the value at the first specified index to the second specified index within an array field. @@ -433,7 +433,7 @@ parseValuesWithSchema(schema): } ``` -Defined in: [packages/form-core/src/FormApi.ts:2208](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2208) +Defined in: [packages/form-core/src/FormApi.ts:2234](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2234) Parses the form's values with a given standard schema and returns issues (if any). This method does NOT set any internal errors. @@ -467,7 +467,7 @@ parseValuesWithSchemaAsync(schema): Promise< }> ``` -Defined in: [packages/form-core/src/FormApi.ts:2220](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2220) +Defined in: [packages/form-core/src/FormApi.ts:2246](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2246) Parses the form's values with a given standard schema and returns issues (if any). This method does NOT set any internal errors. @@ -500,7 +500,7 @@ pushFieldValue( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1936](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1936) +Defined in: [packages/form-core/src/FormApi.ts:1962](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1962) Pushes a value into an array field. @@ -537,7 +537,7 @@ removeFieldValue( opts?): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:2009](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2009) +Defined in: [packages/form-core/src/FormApi.ts:2035](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2035) Removes a value from an array field at the specified index. @@ -575,7 +575,7 @@ replaceFieldValue( opts?): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1983](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1983) +Defined in: [packages/form-core/src/FormApi.ts:2009](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2009) Replaces a value into an array field at the specified index. @@ -613,7 +613,7 @@ Replaces a value into an array field at the specified index. reset(values?, opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1230](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1230) +Defined in: [packages/form-core/src/FormApi.ts:1256](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1256) Resets the form state to the default values. If values are provided, the form will be reset to those values instead and the default values will be updated. @@ -646,7 +646,7 @@ Optional options to control the reset behavior. resetField(field): void ``` -Defined in: [packages/form-core/src/FormApi.ts:2103](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2103) +Defined in: [packages/form-core/src/FormApi.ts:2129](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2129) Resets the field value and meta to default state @@ -672,7 +672,7 @@ Resets the field value and meta to default state resetFieldMeta(fieldMeta): Record ``` -Defined in: [packages/form-core/src/FormApi.ts:1866](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1866) +Defined in: [packages/form-core/src/FormApi.ts:1892](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1892) resets every field's meta @@ -698,7 +698,7 @@ resets every field's meta setErrorMap(errorMap): void ``` -Defined in: [packages/form-core/src/FormApi.ts:2124](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2124) +Defined in: [packages/form-core/src/FormApi.ts:2150](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2150) Updates the form's errorMap @@ -720,7 +720,7 @@ Updates the form's errorMap setFieldMeta(field, updater): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1845](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1845) +Defined in: [packages/form-core/src/FormApi.ts:1871](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1871) Updates the metadata of the specified field. @@ -753,7 +753,7 @@ setFieldValue( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1882](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1882) +Defined in: [packages/form-core/src/FormApi.ts:1908](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1908) Sets the value of the specified field and optionally updates the touched state. @@ -791,7 +791,7 @@ swapFieldValues( opts?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:2046](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2046) +Defined in: [packages/form-core/src/FormApi.ts:2072](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L2072) Swaps the values at the specified indices within an array field. @@ -829,7 +829,7 @@ Swaps the values at the specified indices within an array field. update(options?): void ``` -Defined in: [packages/form-core/src/FormApi.ts:1162](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1162) +Defined in: [packages/form-core/src/FormApi.ts:1188](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1188) Updates the form options and form state. @@ -851,7 +851,7 @@ Updates the form options and form state. validateAllFields(cause): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1256](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1256) +Defined in: [packages/form-core/src/FormApi.ts:1282](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1282) Validates all fields using the correct handlers for a given validation cause. @@ -876,7 +876,7 @@ validateArrayFieldsStartingFrom( cause): Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1286](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1286) +Defined in: [packages/form-core/src/FormApi.ts:1312](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1312) Validates the children of a specified array in the form starting from a given index until the end using the correct handlers for a given validation type. @@ -910,7 +910,7 @@ Validates the children of a specified array in the form starting from a given in validateField(field, cause): unknown[] | Promise ``` -Defined in: [packages/form-core/src/FormApi.ts:1325](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1325) +Defined in: [packages/form-core/src/FormApi.ts:1351](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L1351) Validates a specified field in the form using the correct handlers for a given validation type. diff --git a/docs/reference/functions/shallow.md b/docs/reference/functions/evaluate.md similarity index 77% rename from docs/reference/functions/shallow.md rename to docs/reference/functions/evaluate.md index 3cc088274..d91ae8f64 100644 --- a/docs/reference/functions/shallow.md +++ b/docs/reference/functions/evaluate.md @@ -1,14 +1,14 @@ --- -id: shallow -title: shallow +id: evaluate +title: evaluate --- -# Function: shallow() +# Function: evaluate() ```ts -function shallow(objA, objB): boolean +function evaluate(objA, objB): boolean ``` Defined in: [packages/form-core/src/utils.ts:339](https://github.com/TanStack/form/blob/main/packages/form-core/src/utils.ts#L339) diff --git a/docs/reference/index.md b/docs/reference/index.md index 22d02ea92..7189939a7 100644 --- a/docs/reference/index.md +++ b/docs/reference/index.md @@ -82,8 +82,8 @@ title: "@tanstack/form-core" ## Functions +- [evaluate](functions/evaluate.md) - [formOptions](functions/formoptions.md) - [isGlobalFormValidationError](functions/isglobalformvalidationerror.md) - [isStandardSchemaValidator](functions/isstandardschemavalidator.md) - [mergeForm](functions/mergeform.md) -- [shallow](functions/shallow.md) diff --git a/docs/reference/interfaces/formstate.md b/docs/reference/interfaces/formstate.md index ef35bf687..3a7d0ecc7 100644 --- a/docs/reference/interfaces/formstate.md +++ b/docs/reference/interfaces/formstate.md @@ -7,7 +7,7 @@ title: FormState # Interface: FormState\ -Defined in: [packages/form-core/src/FormApi.ts:643](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L643) +Defined in: [packages/form-core/src/FormApi.ts:647](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L647) An object representing the current state of the form. @@ -61,7 +61,7 @@ BaseFormState._force_re_eval canSubmit: boolean; ``` -Defined in: [packages/form-core/src/FormApi.ts:636](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L636) +Defined in: [packages/form-core/src/FormApi.ts:640](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L640) A boolean indicating if the form can be submitted based on its current state. @@ -123,7 +123,7 @@ DerivedFormState.errors fieldMeta: Record, AnyFieldMeta>; ``` -Defined in: [packages/form-core/src/FormApi.ts:640](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L640) +Defined in: [packages/form-core/src/FormApi.ts:644](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L644) A record of field metadata for each field in the form. @@ -171,6 +171,24 @@ DerivedFormState.isBlurred *** +### isDefaultValue + +```ts +isDefaultValue: boolean; +``` + +Defined in: [packages/form-core/src/FormApi.ts:632](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L632) + +A boolean indicating if all of the form's fields are the same as default values. + +#### Inherited from + +```ts +DerivedFormState.isDefaultValue +``` + +*** + ### isDirty ```ts @@ -369,7 +387,7 @@ DerivedFormState.isTouched isValid: boolean; ``` -Defined in: [packages/form-core/src/FormApi.ts:632](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L632) +Defined in: [packages/form-core/src/FormApi.ts:636](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L636) A boolean indicating if the form and all its fields are valid. Evaluates `true` if there are no errors. diff --git a/docs/reference/type-aliases/anyfieldapi.md b/docs/reference/type-aliases/anyfieldapi.md index 9db1bfefa..ec7f13266 100644 --- a/docs/reference/type-aliases/anyfieldapi.md +++ b/docs/reference/type-aliases/anyfieldapi.md @@ -11,6 +11,6 @@ title: AnyFieldApi type AnyFieldApi = FieldApi; ``` -Defined in: [packages/form-core/src/FieldApi.ts:828](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L828) +Defined in: [packages/form-core/src/FieldApi.ts:832](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L832) A type representing the Field API with all generics set to `any` for convenience. diff --git a/docs/reference/type-aliases/anyfieldmeta.md b/docs/reference/type-aliases/anyfieldmeta.md index abbfd3049..f54865ca1 100644 --- a/docs/reference/type-aliases/anyfieldmeta.md +++ b/docs/reference/type-aliases/anyfieldmeta.md @@ -11,4 +11,4 @@ title: AnyFieldMeta type AnyFieldMeta = FieldMeta; ``` -Defined in: [packages/form-core/src/FieldApi.ts:747](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L747) +Defined in: [packages/form-core/src/FieldApi.ts:751](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L751) diff --git a/docs/reference/type-aliases/anyfieldmetaderived.md b/docs/reference/type-aliases/anyfieldmetaderived.md index 71df55bfb..44264f45f 100644 --- a/docs/reference/type-aliases/anyfieldmetaderived.md +++ b/docs/reference/type-aliases/anyfieldmetaderived.md @@ -11,4 +11,4 @@ title: AnyFieldMetaDerived type AnyFieldMetaDerived = FieldMetaDerived; ``` -Defined in: [packages/form-core/src/FieldApi.ts:661](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L661) +Defined in: [packages/form-core/src/FieldApi.ts:665](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L665) diff --git a/docs/reference/type-aliases/anyformapi.md b/docs/reference/type-aliases/anyformapi.md index a0e2c7469..290ac6300 100644 --- a/docs/reference/type-aliases/anyformapi.md +++ b/docs/reference/type-aliases/anyformapi.md @@ -11,6 +11,6 @@ title: AnyFormApi type AnyFormApi = FormApi; ``` -Defined in: [packages/form-core/src/FormApi.ts:747](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L747) +Defined in: [packages/form-core/src/FormApi.ts:751](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L751) A type representing the Form API with all generics set to `any` for convenience. diff --git a/docs/reference/type-aliases/anyformstate.md b/docs/reference/type-aliases/anyformstate.md index 875c2be9d..edbd5e543 100644 --- a/docs/reference/type-aliases/anyformstate.md +++ b/docs/reference/type-aliases/anyformstate.md @@ -11,4 +11,4 @@ title: AnyFormState type AnyFormState = FormState; ``` -Defined in: [packages/form-core/src/FormApi.ts:676](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L676) +Defined in: [packages/form-core/src/FormApi.ts:680](https://github.com/TanStack/form/blob/main/packages/form-core/src/FormApi.ts#L680) diff --git a/docs/reference/type-aliases/derivedformstate.md b/docs/reference/type-aliases/derivedformstate.md index f86722ba3..c5e5b8dd9 100644 --- a/docs/reference/type-aliases/derivedformstate.md +++ b/docs/reference/type-aliases/derivedformstate.md @@ -75,6 +75,14 @@ isBlurred: boolean; A boolean indicating if any of the form fields have been blurred. +### isDefaultValue + +```ts +isDefaultValue: boolean; +``` + +A boolean indicating if all of the form's fields are the same as default values. + ### isDirty ```ts diff --git a/docs/reference/type-aliases/fieldmeta.md b/docs/reference/type-aliases/fieldmeta.md index 14f0df130..422ad9d4f 100644 --- a/docs/reference/type-aliases/fieldmeta.md +++ b/docs/reference/type-aliases/fieldmeta.md @@ -11,7 +11,7 @@ title: FieldMeta type FieldMeta = FieldMetaBase & FieldMetaDerived; ``` -Defined in: [packages/form-core/src/FieldApi.ts:684](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L684) +Defined in: [packages/form-core/src/FieldApi.ts:688](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L688) An object type representing the metadata of a field in a form. diff --git a/docs/reference/type-aliases/fieldmetaderived.md b/docs/reference/type-aliases/fieldmetaderived.md index c9b00d1dc..a0c99bfa5 100644 --- a/docs/reference/type-aliases/fieldmetaderived.md +++ b/docs/reference/type-aliases/fieldmetaderived.md @@ -66,6 +66,14 @@ errors: ( An array of errors related to the field value. +### isDefaultValue + +```ts +isDefaultValue: boolean; +``` + +A flag indicating whether the field's current value is the default value + ### isPristine ```ts diff --git a/docs/reference/type-aliases/fieldstate.md b/docs/reference/type-aliases/fieldstate.md index c1043845e..c3284905c 100644 --- a/docs/reference/type-aliases/fieldstate.md +++ b/docs/reference/type-aliases/fieldstate.md @@ -11,7 +11,7 @@ title: FieldState type FieldState = object; ``` -Defined in: [packages/form-core/src/FieldApi.ts:770](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L770) +Defined in: [packages/form-core/src/FieldApi.ts:774](https://github.com/TanStack/form/blob/main/packages/form-core/src/FieldApi.ts#L774) An object type representing the state of a field. diff --git a/examples/angular/array/package.json b/examples/angular/array/package.json index c2a921bb0..cd5a6412c 100644 --- a/examples/angular/array/package.json +++ b/examples/angular/array/package.json @@ -18,7 +18,7 @@ "@angular/platform-browser": "^19.2.9", "@angular/platform-browser-dynamic": "^19.2.9", "@angular/router": "^19.2.9", - "@tanstack/angular-form": "^1.9.1", + "@tanstack/angular-form": "^1.10.0", "rxjs": "^7.8.2", "tslib": "^2.8.1", "zone.js": "^0.15.0" diff --git a/examples/angular/simple/package.json b/examples/angular/simple/package.json index d88998cdf..75c072065 100644 --- a/examples/angular/simple/package.json +++ b/examples/angular/simple/package.json @@ -18,7 +18,7 @@ "@angular/platform-browser": "^19.2.9", "@angular/platform-browser-dynamic": "^19.2.9", "@angular/router": "^19.2.9", - "@tanstack/angular-form": "^1.9.1", + "@tanstack/angular-form": "^1.10.0", "rxjs": "^7.8.2", "tslib": "^2.8.1", "zone.js": "^0.15.0" diff --git a/examples/lit/simple/package.json b/examples/lit/simple/package.json index 829a576e9..f5cef98b6 100644 --- a/examples/lit/simple/package.json +++ b/examples/lit/simple/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/lit-form": "^1.9.1", + "@tanstack/lit-form": "^1.10.0", "lit": "^3.3.0" }, "devDependencies": { diff --git a/examples/lit/ui-libraries/package.json b/examples/lit/ui-libraries/package.json index 58180841f..39c049cb1 100644 --- a/examples/lit/ui-libraries/package.json +++ b/examples/lit/ui-libraries/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@material/web": "^2.3.0", - "@tanstack/lit-form": "^1.9.1", + "@tanstack/lit-form": "^1.10.0", "lit": "^3.3.0" }, "devDependencies": { diff --git a/examples/react/array/package.json b/examples/react/array/package.json index 5edfc3b20..b72f3cd8a 100644 --- a/examples/react/array/package.json +++ b/examples/react/array/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/examples/react/compiler/package.json b/examples/react/compiler/package.json index e8dfc3110..d0053d9ae 100644 --- a/examples/react/compiler/package.json +++ b/examples/react/compiler/package.json @@ -9,7 +9,7 @@ "_test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/examples/react/field-errors-from-form-validators/package.json b/examples/react/field-errors-from-form-validators/package.json index 9c4aea114..567842405 100644 --- a/examples/react/field-errors-from-form-validators/package.json +++ b/examples/react/field-errors-from-form-validators/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/examples/react/large-form/package.json b/examples/react/large-form/package.json index 37a50ce61..cd761fd3b 100644 --- a/examples/react/large-form/package.json +++ b/examples/react/large-form/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/examples/react/next-server-actions/package.json b/examples/react/next-server-actions/package.json index c705f8adc..615f2de48 100644 --- a/examples/react/next-server-actions/package.json +++ b/examples/react/next-server-actions/package.json @@ -8,7 +8,7 @@ "_test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "@tanstack/react-store": "^0.7.0", "next": "15.3.1", "react": "^19.0.0", diff --git a/examples/react/query-integration/package.json b/examples/react/query-integration/package.json index a5205b8db..0db6e3483 100644 --- a/examples/react/query-integration/package.json +++ b/examples/react/query-integration/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "@tanstack/react-query": "^5.75.2", "react": "^19.0.0", "react-dom": "^19.0.0" diff --git a/examples/react/remix/package.json b/examples/react/remix/package.json index 89a2a4071..056c4b659 100644 --- a/examples/react/remix/package.json +++ b/examples/react/remix/package.json @@ -11,7 +11,7 @@ "@remix-run/node": "^2.16.5", "@remix-run/react": "^2.16.5", "@remix-run/serve": "^2.16.5", - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "@tanstack/react-store": "^0.7.0", "isbot": "^5.1.27", "react": "^19.0.0", diff --git a/examples/react/simple/package.json b/examples/react/simple/package.json index e0a099446..cfab5c2bf 100644 --- a/examples/react/simple/package.json +++ b/examples/react/simple/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/examples/react/standard-schema/package.json b/examples/react/standard-schema/package.json index 1dcd22a2e..c39461789 100644 --- a/examples/react/standard-schema/package.json +++ b/examples/react/standard-schema/package.json @@ -9,7 +9,7 @@ "test:types": "tsc" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "arktype": "^2.1.20", "effect": "^3.14.18", "react": "^19.0.0", diff --git a/examples/react/tanstack-start/package.json b/examples/react/tanstack-start/package.json index c316db685..4cfef99ac 100644 --- a/examples/react/tanstack-start/package.json +++ b/examples/react/tanstack-start/package.json @@ -9,7 +9,7 @@ "start": "vinxi start" }, "dependencies": { - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "@tanstack/react-router": "^1.119.0", "@tanstack/react-start": "^1.119.2", "@tanstack/react-store": "^0.7.0", diff --git a/examples/react/ui-libraries/package.json b/examples/react/ui-libraries/package.json index fec714017..9dbe27aa2 100644 --- a/examples/react/ui-libraries/package.json +++ b/examples/react/ui-libraries/package.json @@ -14,7 +14,7 @@ "@mantine/core": "7.17.7", "@mantine/hooks": "7.17.7", "@mui/material": "6.4.11", - "@tanstack/react-form": "^1.9.1", + "@tanstack/react-form": "^1.10.0", "@yme/lay-postcss": "0.1.0", "postcss": "8.5.3", "postcss-preset-mantine": "1.17.0", diff --git a/examples/solid/array/package.json b/examples/solid/array/package.json index fe8d03680..460aa05aa 100644 --- a/examples/solid/array/package.json +++ b/examples/solid/array/package.json @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-form": "^1.9.1", + "@tanstack/solid-form": "^1.10.0", "solid-js": "^1.9.6" }, "devDependencies": { diff --git a/examples/solid/simple/package.json b/examples/solid/simple/package.json index 8245bda19..eb4433fc0 100644 --- a/examples/solid/simple/package.json +++ b/examples/solid/simple/package.json @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/solid-form": "^1.9.1", + "@tanstack/solid-form": "^1.10.0", "solid-js": "^1.9.6" }, "devDependencies": { diff --git a/examples/svelte/array/package.json b/examples/svelte/array/package.json index 94d2c6579..e20f0b1bd 100644 --- a/examples/svelte/array/package.json +++ b/examples/svelte/array/package.json @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/svelte-form": "^1.9.1" + "@tanstack/svelte-form": "^1.10.0" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.3", diff --git a/examples/svelte/simple/package.json b/examples/svelte/simple/package.json index e730a46ff..12c5a78da 100644 --- a/examples/svelte/simple/package.json +++ b/examples/svelte/simple/package.json @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "@tanstack/svelte-form": "^1.9.1" + "@tanstack/svelte-form": "^1.10.0" }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^5.0.3", diff --git a/examples/vue/array/package.json b/examples/vue/array/package.json index 64a51859d..9ce0c5083 100644 --- a/examples/vue/array/package.json +++ b/examples/vue/array/package.json @@ -10,7 +10,7 @@ "serve": "vite preview" }, "dependencies": { - "@tanstack/vue-form": "^1.9.1", + "@tanstack/vue-form": "^1.10.0", "vue": "^3.5.13" }, "devDependencies": { diff --git a/examples/vue/simple/package.json b/examples/vue/simple/package.json index 9ee8edba6..74dd077c8 100644 --- a/examples/vue/simple/package.json +++ b/examples/vue/simple/package.json @@ -10,7 +10,7 @@ "serve": "vite preview" }, "dependencies": { - "@tanstack/vue-form": "^1.9.1", + "@tanstack/vue-form": "^1.10.0", "vue": "^3.5.13" }, "devDependencies": { diff --git a/packages/angular-form/package.json b/packages/angular-form/package.json index 26fff8a51..1e8ae8a98 100644 --- a/packages/angular-form/package.json +++ b/packages/angular-form/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/angular-form", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe forms for Angular.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/form-core/package.json b/packages/form-core/package.json index 63e09383c..04441c054 100644 --- a/packages/form-core/package.json +++ b/packages/form-core/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/form-core", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe, framework agnostic forms.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/form-core/src/FieldApi.ts b/packages/form-core/src/FieldApi.ts index 2b2d9882a..dac3c2571 100644 --- a/packages/form-core/src/FieldApi.ts +++ b/packages/form-core/src/FieldApi.ts @@ -656,6 +656,10 @@ export type FieldMetaDerived< * A boolean indicating if the field is valid. Evaluates `true` if there are no field errors. */ isValid: boolean + /** + * A flag indicating whether the field's current value is the default value + */ + isDefaultValue: boolean } export type AnyFieldMetaDerived = FieldMetaDerived< diff --git a/packages/form-core/src/FormApi.ts b/packages/form-core/src/FormApi.ts index d1c990646..45242067e 100644 --- a/packages/form-core/src/FormApi.ts +++ b/packages/form-core/src/FormApi.ts @@ -2,6 +2,7 @@ import { Derived, Store, batch } from '@tanstack/store' import { deleteBy, determineFormLevelErrorSourceAndValue, + evaluate, functionalUpdate, getAsyncValidatorArray, getBy, @@ -9,7 +10,6 @@ import { isGlobalFormValidationError, isNonEmptyArray, setBy, - shallow, } from './utils' import { @@ -626,6 +626,10 @@ export type DerivedFormState< * A boolean indicating if none of the form's fields' values have been modified by the user. Evaluates `true` if the user have not modified any of the fields. Opposite of `isDirty`. */ isPristine: boolean + /** + * A boolean indicating if all of the form's fields are the same as default values. + */ + isDefaultValue: boolean /** * A boolean indicating if the form and all its fields are valid. Evaluates `true` if there are no errors. */ @@ -883,21 +887,26 @@ export class FormApi< for (const fieldName of Object.keys( currBaseStore.fieldMetaBase, ) as Array) { - const currBaseVal = currBaseStore.fieldMetaBase[ + const currBaseMeta = currBaseStore.fieldMetaBase[ fieldName as never ] as AnyFieldMetaBase - const prevBaseVal = prevBaseStore?.fieldMetaBase[ + const prevBaseMeta = prevBaseStore?.fieldMetaBase[ fieldName as never ] as AnyFieldMetaBase | undefined const prevFieldInfo = prevVal?.[fieldName as never as keyof typeof prevVal] + const curFieldVal = getBy(currBaseStore.values, fieldName) + let fieldErrors = prevFieldInfo?.errors - if (!prevBaseVal || currBaseVal.errorMap !== prevBaseVal.errorMap) { + if ( + !prevBaseMeta || + currBaseMeta.errorMap !== prevBaseMeta.errorMap + ) { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - fieldErrors = Object.values(currBaseVal.errorMap ?? {}).filter( + fieldErrors = Object.values(currBaseMeta.errorMap ?? {}).filter( (val) => val !== undefined, ) as never @@ -912,15 +921,26 @@ export class FormApi< } // As primitives, we don't need to aggressively persist the same referential value for performance reasons - const isFieldPristine = !currBaseVal.isDirty const isFieldValid = !isNonEmptyArray(fieldErrors ?? []) + const isFieldPristine = !currBaseMeta.isDirty + const isDefaultValue = + evaluate( + curFieldVal, + getBy(this.options.defaultValues, fieldName), + ) || + evaluate( + curFieldVal, + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + this.getFieldInfo(fieldName)?.instance?.options.defaultValue, + ) if ( prevFieldInfo && prevFieldInfo.isPristine === isFieldPristine && prevFieldInfo.isValid === isFieldValid && + prevFieldInfo.isDefaultValue === isDefaultValue && prevFieldInfo.errors === fieldErrors && - currBaseVal === prevBaseVal + currBaseMeta === prevBaseMeta ) { fieldMeta[fieldName] = prevFieldInfo originalMetaCount++ @@ -928,10 +948,11 @@ export class FormApi< } fieldMeta[fieldName] = { - ...currBaseVal, + ...currBaseMeta, errors: fieldErrors, isPristine: isFieldPristine, isValid: isFieldValid, + isDefaultValue: isDefaultValue, } as AnyFieldMeta } @@ -981,6 +1002,9 @@ export class FormApi< const isTouched = fieldMetaValues.some((field) => field.isTouched) const isBlurred = fieldMetaValues.some((field) => field.isBlurred) + const isDefaultValue = fieldMetaValues.every( + (field) => field.isDefaultValue, + ) const shouldInvalidateOnMount = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition @@ -1059,8 +1083,9 @@ export class FormApi< prevVal.isTouched === isTouched && prevVal.isBlurred === isBlurred && prevVal.isPristine === isPristine && + prevVal.isDefaultValue === isDefaultValue && prevVal.isDirty === isDirty && - shallow(prevBaseStore, currBaseStore) + evaluate(prevBaseStore, currBaseStore) ) { return prevVal } @@ -1078,6 +1103,7 @@ export class FormApi< isTouched, isBlurred, isPristine, + isDefaultValue, isDirty, } as FormState< TFormData, @@ -1187,11 +1213,11 @@ export class FormApi< const shouldUpdateValues = options.defaultValues && - !shallow(options.defaultValues, oldOptions.defaultValues) && + !evaluate(options.defaultValues, oldOptions.defaultValues) && !this.state.isTouched const shouldUpdateState = - !shallow(options.defaultState, oldOptions.defaultState) && + !evaluate(options.defaultState, oldOptions.defaultState) && !this.state.isTouched if (!shouldUpdateValues && !shouldUpdateState && !shouldUpdateReeval) return diff --git a/packages/form-core/src/metaHelper.ts b/packages/form-core/src/metaHelper.ts index ef1c214da..9ecc6fed8 100644 --- a/packages/form-core/src/metaHelper.ts +++ b/packages/form-core/src/metaHelper.ts @@ -15,6 +15,7 @@ export const defaultFieldMeta: AnyFieldMeta = { isDirty: false, isPristine: true, isValid: true, + isDefaultValue: true, errors: [], errorMap: {}, errorSourceMap: {}, diff --git a/packages/form-core/src/utils.ts b/packages/form-core/src/utils.ts index 5e74c1726..6060cb68f 100644 --- a/packages/form-core/src/utils.ts +++ b/packages/form-core/src/utils.ts @@ -336,7 +336,7 @@ export const isGlobalFormValidationError = ( return !!error && typeof error === 'object' && 'fields' in error } -export function shallow(objA: T, objB: T) { +export function evaluate(objA: T, objB: T) { if (Object.is(objA, objB)) { return true } @@ -367,18 +367,23 @@ export function shallow(objA: T, objB: T) { } const keysA = Object.keys(objA) - if (keysA.length !== Object.keys(objB).length) { + const keysB = Object.keys(objB) + + if (keysA.length !== keysB.length) { return false } - for (let i = 0; i < keysA.length; i++) { + for (const key of keysA) { + // performs recursive search down the object tree + if ( - !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) || - !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T]) + !keysB.includes(key) || + !evaluate(objA[key as keyof T], objB[key as keyof T]) ) { return false } } + return true } diff --git a/packages/form-core/tests/FieldApi.spec.ts b/packages/form-core/tests/FieldApi.spec.ts index 01cd7eb77..c10c3fa9c 100644 --- a/packages/form-core/tests/FieldApi.spec.ts +++ b/packages/form-core/tests/FieldApi.spec.ts @@ -57,6 +57,7 @@ describe('field api', () => { expect(field.getMeta()).toEqual({ isTouched: false, isBlurred: false, + isDefaultValue: true, isValidating: false, isPristine: true, isValid: true, @@ -77,48 +78,160 @@ describe('field api', () => { name: 'name', defaultMeta: { isTouched: true, - isDirty: true, - isPristine: false, isBlurred: true, + isDirty: true, }, }) field.mount() - expect(field.getMeta()).toEqual({ + expect(field.getMeta()).toMatchObject({ isTouched: true, isBlurred: true, - isValidating: false, isDirty: true, - isPristine: false, + + // derived meta data isValid: true, + isValidating: false, errors: [], errorMap: {}, errorSourceMap: {}, }) }) - it('should set a value correctly', () => { + it('should update the fields meta isDefaultValue with primitives', () => { const form = new FormApi({ defaultValues: { name: 'test', }, }) - form.mount() const field = new FieldApi({ - form, + form: form, name: 'name', + defaultValue: 'another-test', + }) + field.mount() + + expect(field.getMeta().isDefaultValue).toBe(true) + + field.setValue('not-test') + expect(field.getMeta().isDefaultValue).toBe(false) + + field.setValue('test') + expect(field.getMeta().isDefaultValue).toBe(true) + + form.resetField('name') + expect(field.getMeta().isDefaultValue).toBe(true) + + // checks the defaultValue provided to the field + field.setValue('another-test') + expect(field.getMeta().isDefaultValue).toBe(true) + }) + + it('should update the fields meta isDefaultValue with arrays - simple', () => { + const form = new FormApi({ + defaultValues: { + arr: ['', ''], + }, }) + form.mount() + const field = new FieldApi({ + form: form, + name: 'arr', + }) field.mount() - field.setValue('other', { - dontUpdateMeta: true, + expect(field.getMeta().isDefaultValue).toBe(true) + + field.setValue(['hello', 'goodbye']) + expect(field.getMeta().isDefaultValue).toBe(false) + + field.setValue(['', '']) + expect(field.getMeta().isDefaultValue).toBe(true) + }) + + it('should update the fields meta isDefaultValue with arrays - complex', () => { + const defaultValues: [{ age: number; name?: string }, null | undefined] = [ + { age: 0 }, + undefined, + ] + const form = new FormApi({ + defaultValues: { + arr: defaultValues, + }, + }) + form.mount() + + const field = new FieldApi({ + form: form, + name: 'arr', }) - expect(field.getValue()).toBe('other') + field.mount() + expect(field.getMeta().isDefaultValue).toBe(true) + + field.setValue([{ age: 0, name: '' }, null]) + expect(field.getMeta().isDefaultValue).toBe(false) + + field.setValue([{ age: 0 }, undefined]) + expect(field.getMeta().isDefaultValue).toBe(true) + }) + + it('should update the fields meta isDefaultValue with objects - simple', () => { + const objectMetaForm = new FormApi({ + defaultValues: { + obj: { firstName: 'John', lastName: 'Wick' }, + }, + }) + objectMetaForm.mount() + + const objectField = new FieldApi({ + form: objectMetaForm, + name: 'obj', + }) + objectField.mount() + + expect(objectField.getMeta().isDefaultValue).toBe(true) + + objectField.setValue({ firstName: 'John', lastName: 'Travolta' }) + expect(objectField.getMeta().isDefaultValue).toBe(false) + + objectField.setValue({ firstName: 'John', lastName: 'Wick' }) + expect(objectField.getMeta().isDefaultValue).toBe(true) + }) + + it('should update the fields meta isDefaultValue with objects - complex', () => { + const defaultValues: { arr: [number, object]; test?: string } = { + arr: [0, {}], + } + const form = new FormApi({ + defaultValues: { + obj: defaultValues, + }, + }) + form.mount() + + const field = new FieldApi({ + form: form, + name: 'obj', + }) + field.mount() + + expect(field.getMeta().isDefaultValue).toBe(true) + + field.setValue({ + arr: [1, {}], + test: 'hi', + }) + expect(field.getMeta().isDefaultValue).toBe(false) + + field.setValue({ + arr: [0, {}], + }) + expect(field.getMeta().isDefaultValue).toBe(true) }) it('should set isBlurred correctly', () => { diff --git a/packages/form-core/tests/FormApi.spec.ts b/packages/form-core/tests/FormApi.spec.ts index 292fce077..21f1b1aad 100644 --- a/packages/form-core/tests/FormApi.spec.ts +++ b/packages/form-core/tests/FormApi.spec.ts @@ -3080,6 +3080,34 @@ describe('form api', () => { expect(field.state.meta.isTouched).toBe(false) }) + it('should set the form isDefaultValue meta', async () => { + const form = new FormApi({ + defaultValues: { + name: 'tony', + lastName: 'hawk', + }, + }) + form.mount() + + const nameField = new FieldApi({ + form, + name: 'name', + }) + nameField.mount() + + const lastNameField = new FieldApi({ + form, + name: 'lastName', + }) + lastNameField.mount() + + lastNameField.setValue('') + expect(form.state.isDefaultValue).toBe(false) + + lastNameField.setValue('hawk') + expect(form.state.isDefaultValue).toBe(true) + }) + it('should allow submission, when the form is invalid, with canSubmitWhenInvalid', async () => { const form = new FormApi({ defaultValues: { diff --git a/packages/form-core/tests/utils.spec.ts b/packages/form-core/tests/utils.spec.ts index dbaad093a..18a493ae0 100644 --- a/packages/form-core/tests/utils.spec.ts +++ b/packages/form-core/tests/utils.spec.ts @@ -3,6 +3,7 @@ import { deleteBy, determineFieldLevelErrorSourceAndValue, determineFormLevelErrorSourceAndValue, + evaluate, getBy, makePathArray, setBy, @@ -492,3 +493,74 @@ describe('determineFieldLevelErrorSourceAndValue', () => { }) }) }) + +describe('evaluate', () => { + it('should test equality between primitives', () => { + const numbersTrue = evaluate(1, 1) + expect(numbersTrue).toEqual(true) + + const stringFalse = evaluate('uh oh', '') + expect(stringFalse).toEqual(false) + + const boolTrue = evaluate(true, true) + expect(boolTrue).toEqual(true) + + const nullFalse = evaluate(null, {}) + expect(nullFalse).toEqual(false) + + const undefinedFalse = evaluate(undefined, null) + expect(undefinedFalse).toEqual(false) + }) + + it('should test equality between arrays', () => { + const arrayTrue = evaluate([], []) + expect(arrayTrue).toEqual(true) + + const arrayDeepSearchTrue = evaluate([[1]], [[1]]) + expect(arrayDeepSearchTrue).toEqual(true) + + const arrayFalse = evaluate([], ['']) + expect(arrayFalse).toEqual(false) + + const arrayDeepFalse = evaluate([[1]], []) + expect(arrayDeepFalse).toEqual(false) + + const arrayComplexFalse = evaluate([[{ test: 'true' }], null], [[1], {}]) + expect(arrayComplexFalse).toEqual(false) + + const arrayComplexTrue = evaluate( + [[{ test: 'true' }], null], + [[{ test: 'true' }], null], + ) + expect(arrayComplexTrue).toEqual(true) + }) + + it('should test equality between objects', () => { + const objTrue = evaluate({ test: 'same' }, { test: 'same' }) + expect(objTrue).toEqual(true) + + const objFalse = evaluate({ test: 'not' }, { test: 'same' }) + expect(objFalse).toEqual(false) + + const objDeepFalse = evaluate({ test: 'not' }, { test: { test: 'same' } }) + expect(objDeepFalse).toEqual(false) + + const objDeepArrFalse = evaluate({ test: [] }, { test: [[]] }) + expect(objDeepArrFalse).toEqual(false) + + const objNullFalse = evaluate({ test: '' }, null) + expect(objNullFalse).toEqual(false) + + const objComplexFalse = evaluate( + { test: { testTwo: '' }, arr: [[1]] }, + { test: { testTwo: false }, arr: [[1], [0]] }, + ) + expect(objComplexFalse).toEqual(false) + + const objComplexTrue = evaluate( + { test: { testTwo: '' }, arr: [[1]] }, + { test: { testTwo: '' }, arr: [[1]] }, + ) + expect(objComplexTrue).toEqual(true) + }) +}) diff --git a/packages/lit-form/package.json b/packages/lit-form/package.json index 6af5d44cc..5b6df5288 100644 --- a/packages/lit-form/package.json +++ b/packages/lit-form/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/lit-form", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe forms for Lit.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/react-form/package.json b/packages/react-form/package.json index 83ce53a6a..6503903a6 100644 --- a/packages/react-form/package.json +++ b/packages/react-form/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/react-form", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe forms for React.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/solid-form/package.json b/packages/solid-form/package.json index 8e8bd1c35..92ceb124e 100644 --- a/packages/solid-form/package.json +++ b/packages/solid-form/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/solid-form", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe forms for Solid.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/svelte-form/package.json b/packages/svelte-form/package.json index 569fc1bbf..846f0fef0 100644 --- a/packages/svelte-form/package.json +++ b/packages/svelte-form/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/svelte-form", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe forms for Svelte.", "author": "tannerlinsley", "license": "MIT", diff --git a/packages/vue-form/package.json b/packages/vue-form/package.json index 19a8e824b..ed40c6dd4 100644 --- a/packages/vue-form/package.json +++ b/packages/vue-form/package.json @@ -1,6 +1,6 @@ { "name": "@tanstack/vue-form", - "version": "1.9.1", + "version": "1.10.0", "description": "Powerful, type-safe forms for Vue.", "author": "tannerlinsley", "license": "MIT", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 116bd99e2..1edd527f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,7 +114,7 @@ importers: specifier: ^19.2.9 version: 19.2.9(@angular/common@19.2.9(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.9(@angular/animations@19.2.9(@angular/common@19.2.9(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@19.2.9(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2) '@tanstack/angular-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/angular-form rxjs: specifier: ^7.8.2 @@ -166,7 +166,7 @@ importers: specifier: ^19.2.9 version: 19.2.9(@angular/common@19.2.9(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.9(@angular/animations@19.2.9(@angular/common@19.2.9(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0)))(@angular/common@19.2.9(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.9(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2) '@tanstack/angular-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/angular-form rxjs: specifier: ^7.8.2 @@ -194,7 +194,7 @@ importers: examples/lit/simple: dependencies: '@tanstack/lit-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/lit-form lit: specifier: ^3.3.0 @@ -210,7 +210,7 @@ importers: specifier: ^2.3.0 version: 2.3.0 '@tanstack/lit-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/lit-form lit: specifier: ^3.3.0 @@ -223,7 +223,7 @@ importers: examples/react/array: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form react: specifier: ^19.0.0 @@ -248,7 +248,7 @@ importers: examples/react/compiler: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form react: specifier: ^19.0.0 @@ -279,7 +279,7 @@ importers: examples/react/field-errors-from-form-validators: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form react: specifier: ^19.0.0 @@ -304,7 +304,7 @@ importers: examples/react/large-form: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form react: specifier: ^19.0.0 @@ -329,7 +329,7 @@ importers: examples/react/next-server-actions: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form '@tanstack/react-store': specifier: ^0.7.0 @@ -360,7 +360,7 @@ importers: examples/react/query-integration: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form '@tanstack/react-query': specifier: ^5.75.2 @@ -397,7 +397,7 @@ importers: specifier: ^2.16.5 version: 2.16.5(typescript@5.8.2) '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form '@tanstack/react-store': specifier: ^0.7.0 @@ -434,7 +434,7 @@ importers: examples/react/simple: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form react: specifier: ^19.0.0 @@ -459,7 +459,7 @@ importers: examples/react/standard-schema: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form arktype: specifier: ^2.1.20 @@ -496,7 +496,7 @@ importers: examples/react/tanstack-start: dependencies: '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form '@tanstack/react-router': specifier: ^1.119.0 @@ -557,7 +557,7 @@ importers: specifier: 6.4.11 version: 6.4.11(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react@19.1.0))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/react-form '@yme/lay-postcss': specifier: 0.1.0 @@ -600,7 +600,7 @@ importers: examples/solid/array: dependencies: '@tanstack/solid-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/solid-form solid-js: specifier: ^1.9.6 @@ -619,7 +619,7 @@ importers: examples/solid/simple: dependencies: '@tanstack/solid-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/solid-form solid-js: specifier: ^1.9.6 @@ -638,7 +638,7 @@ importers: examples/svelte/array: dependencies: '@tanstack/svelte-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/svelte-form devDependencies: '@sveltejs/vite-plugin-svelte': @@ -660,7 +660,7 @@ importers: examples/svelte/simple: dependencies: '@tanstack/svelte-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/svelte-form devDependencies: '@sveltejs/vite-plugin-svelte': @@ -682,7 +682,7 @@ importers: examples/vue/array: dependencies: '@tanstack/vue-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/vue-form vue: specifier: ^3.5.13 @@ -704,7 +704,7 @@ importers: examples/vue/simple: dependencies: '@tanstack/vue-form': - specifier: ^1.9.1 + specifier: ^1.10.0 version: link:../../../packages/vue-form vue: specifier: ^3.5.13