@tanstack/react-form 0.10.3 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/cjs/createFormFactory.d.ts +11 -0
  2. package/dist/cjs/formContext.d.ts +10 -0
  3. package/dist/cjs/index.cjs +181 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/cjs/index.d.cts +8 -0
  6. package/dist/cjs/index.d.ts +8 -0
  7. package/dist/cjs/index.js +181 -0
  8. package/dist/cjs/tests/createFormFactory.test.d.ts +1 -0
  9. package/dist/cjs/tests/useField.test-d.d.ts +1 -0
  10. package/dist/cjs/tests/useField.test.d.ts +1 -0
  11. package/dist/cjs/tests/useForm.test-d.d.ts +1 -0
  12. package/dist/cjs/tests/useForm.test.d.ts +1 -0
  13. package/dist/cjs/tests/utils.d.ts +1 -0
  14. package/dist/cjs/types.d.ts +4 -0
  15. package/dist/cjs/useField.d.ts +28 -0
  16. package/dist/cjs/useForm.d.ts +19 -0
  17. package/dist/cjs/useIsomorphicEffectOnce.d.ts +5 -0
  18. package/dist/cjs/useIsomorphicLayoutEffect.d.ts +3 -0
  19. package/dist/cjs/useTransform.d.ts +5 -0
  20. package/dist/cjs/validateFormData.d.ts +14 -0
  21. package/dist/mjs/createFormFactory.d.ts +11 -0
  22. package/dist/mjs/formContext.d.ts +10 -0
  23. package/dist/mjs/index.d.mts +8 -0
  24. package/dist/mjs/index.d.ts +8 -0
  25. package/dist/mjs/index.js +170 -0
  26. package/dist/mjs/index.mjs +170 -0
  27. package/dist/mjs/index.mjs.map +1 -0
  28. package/dist/mjs/tests/createFormFactory.test.d.ts +1 -0
  29. package/dist/mjs/tests/useField.test-d.d.ts +1 -0
  30. package/dist/mjs/tests/useField.test.d.ts +1 -0
  31. package/dist/mjs/tests/useForm.test-d.d.ts +1 -0
  32. package/dist/mjs/tests/useForm.test.d.ts +1 -0
  33. package/dist/mjs/tests/utils.d.ts +1 -0
  34. package/dist/mjs/types.d.ts +4 -0
  35. package/dist/mjs/useField.d.ts +28 -0
  36. package/dist/mjs/useForm.d.ts +19 -0
  37. package/dist/mjs/useIsomorphicEffectOnce.d.ts +5 -0
  38. package/dist/mjs/useIsomorphicLayoutEffect.d.ts +3 -0
  39. package/dist/mjs/useTransform.d.ts +5 -0
  40. package/dist/mjs/validateFormData.d.ts +14 -0
  41. package/package.json +21 -24
  42. package/src/createFormFactory.ts +25 -9
  43. package/src/formContext.ts +5 -5
  44. package/src/index.ts +7 -1
  45. package/src/tests/createFormFactory.test.tsx +1 -1
  46. package/src/tests/useField.test-d.tsx +12 -8
  47. package/src/tests/useField.test.tsx +45 -33
  48. package/src/tests/useForm.test-d.tsx +36 -0
  49. package/src/tests/useForm.test.tsx +59 -42
  50. package/src/types.ts +13 -4
  51. package/src/useField.tsx +82 -40
  52. package/src/useForm.tsx +20 -11
  53. package/src/useIsomorphicEffectOnce.ts +38 -0
  54. package/src/useIsomorphicLayoutEffect.ts +1 -1
  55. package/src/useTransform.ts +16 -0
  56. package/src/validateFormData.ts +70 -0
  57. package/build/legacy/createFormFactory.cjs +0 -42
  58. package/build/legacy/createFormFactory.cjs.map +0 -1
  59. package/build/legacy/createFormFactory.d.cts +0 -12
  60. package/build/legacy/createFormFactory.d.ts +0 -12
  61. package/build/legacy/createFormFactory.js +0 -17
  62. package/build/legacy/createFormFactory.js.map +0 -1
  63. package/build/legacy/formContext.cjs +0 -51
  64. package/build/legacy/formContext.cjs.map +0 -1
  65. package/build/legacy/formContext.d.cts +0 -13
  66. package/build/legacy/formContext.d.ts +0 -13
  67. package/build/legacy/formContext.js +0 -15
  68. package/build/legacy/formContext.js.map +0 -1
  69. package/build/legacy/index.cjs +0 -46
  70. package/build/legacy/index.cjs.map +0 -1
  71. package/build/legacy/index.d.cts +0 -7
  72. package/build/legacy/index.d.ts +0 -7
  73. package/build/legacy/index.js +0 -15
  74. package/build/legacy/index.js.map +0 -1
  75. package/build/legacy/types.cjs +0 -19
  76. package/build/legacy/types.cjs.map +0 -1
  77. package/build/legacy/types.d.cts +0 -7
  78. package/build/legacy/types.d.ts +0 -7
  79. package/build/legacy/types.js +0 -1
  80. package/build/legacy/types.js.map +0 -1
  81. package/build/legacy/useField.cjs +0 -88
  82. package/build/legacy/useField.cjs.map +0 -1
  83. package/build/legacy/useField.d.cts +0 -27
  84. package/build/legacy/useField.d.ts +0 -27
  85. package/build/legacy/useField.js +0 -52
  86. package/build/legacy/useField.js.map +0 -1
  87. package/build/legacy/useForm.cjs +0 -73
  88. package/build/legacy/useForm.cjs.map +0 -1
  89. package/build/legacy/useForm.d.cts +0 -23
  90. package/build/legacy/useForm.d.ts +0 -23
  91. package/build/legacy/useForm.js +0 -38
  92. package/build/legacy/useForm.js.map +0 -1
  93. package/build/legacy/useIsomorphicLayoutEffect.cjs +0 -35
  94. package/build/legacy/useIsomorphicLayoutEffect.cjs.map +0 -1
  95. package/build/legacy/useIsomorphicLayoutEffect.d.cts +0 -5
  96. package/build/legacy/useIsomorphicLayoutEffect.d.ts +0 -5
  97. package/build/legacy/useIsomorphicLayoutEffect.js +0 -10
  98. package/build/legacy/useIsomorphicLayoutEffect.js.map +0 -1
  99. package/build/modern/createFormFactory.cjs +0 -42
  100. package/build/modern/createFormFactory.cjs.map +0 -1
  101. package/build/modern/createFormFactory.d.cts +0 -12
  102. package/build/modern/createFormFactory.d.ts +0 -12
  103. package/build/modern/createFormFactory.js +0 -17
  104. package/build/modern/createFormFactory.js.map +0 -1
  105. package/build/modern/formContext.cjs +0 -51
  106. package/build/modern/formContext.cjs.map +0 -1
  107. package/build/modern/formContext.d.cts +0 -13
  108. package/build/modern/formContext.d.ts +0 -13
  109. package/build/modern/formContext.js +0 -15
  110. package/build/modern/formContext.js.map +0 -1
  111. package/build/modern/index.cjs +0 -46
  112. package/build/modern/index.cjs.map +0 -1
  113. package/build/modern/index.d.cts +0 -7
  114. package/build/modern/index.d.ts +0 -7
  115. package/build/modern/index.js +0 -15
  116. package/build/modern/index.js.map +0 -1
  117. package/build/modern/types.cjs +0 -19
  118. package/build/modern/types.cjs.map +0 -1
  119. package/build/modern/types.d.cts +0 -7
  120. package/build/modern/types.d.ts +0 -7
  121. package/build/modern/types.js +0 -1
  122. package/build/modern/types.js.map +0 -1
  123. package/build/modern/useField.cjs +0 -88
  124. package/build/modern/useField.cjs.map +0 -1
  125. package/build/modern/useField.d.cts +0 -27
  126. package/build/modern/useField.d.ts +0 -27
  127. package/build/modern/useField.js +0 -52
  128. package/build/modern/useField.js.map +0 -1
  129. package/build/modern/useForm.cjs +0 -73
  130. package/build/modern/useForm.cjs.map +0 -1
  131. package/build/modern/useForm.d.cts +0 -23
  132. package/build/modern/useForm.d.ts +0 -23
  133. package/build/modern/useForm.js +0 -38
  134. package/build/modern/useForm.js.map +0 -1
  135. package/build/modern/useIsomorphicLayoutEffect.cjs +0 -35
  136. package/build/modern/useIsomorphicLayoutEffect.cjs.map +0 -1
  137. package/build/modern/useIsomorphicLayoutEffect.d.cts +0 -5
  138. package/build/modern/useIsomorphicLayoutEffect.d.ts +0 -5
  139. package/build/modern/useIsomorphicLayoutEffect.js +0 -10
  140. package/build/modern/useIsomorphicLayoutEffect.js.map +0 -1
@@ -1,23 +0,0 @@
1
- import { FormState, FormOptions, FormApi } from '@tanstack/form-core';
2
- import { NoInfer } from '@tanstack/react-store';
3
- import { ReactNode } from 'react';
4
- import { FieldComponent, UseField } from './useField.js';
5
- import './types.js';
6
-
7
- declare module '@tanstack/form-core' {
8
- interface FormApi<TFormData, ValidatorType> {
9
- Provider: (props: {
10
- children: any;
11
- }) => any;
12
- Field: FieldComponent<TFormData, ValidatorType>;
13
- useField: UseField<TFormData>;
14
- useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => TSelected;
15
- Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
16
- selector?: (state: NoInfer<FormState<TFormData>>) => TSelected;
17
- children: ((state: NoInfer<TSelected>) => ReactNode) | ReactNode;
18
- }) => any;
19
- }
20
- }
21
- declare function useForm<TData, FormValidator>(opts?: FormOptions<TData, FormValidator>): FormApi<TData, FormValidator>;
22
-
23
- export { useForm };
@@ -1,38 +0,0 @@
1
- // src/useForm.tsx
2
- import { FormApi, functionalUpdate } from "@tanstack/form-core";
3
- import { useStore } from "@tanstack/react-store";
4
- import React, { useState } from "react";
5
- import { Field, useField } from "./useField.js";
6
- import { formContext } from "./formContext.js";
7
- import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect.js";
8
- function useForm(opts) {
9
- const [formApi] = useState(() => {
10
- const api = new FormApi(opts);
11
- api.Provider = function Provider(props) {
12
- useIsomorphicLayoutEffect(api.mount, []);
13
- return /* @__PURE__ */ React.createElement(formContext.Provider, { ...props, value: { formApi: api } });
14
- };
15
- api.Field = Field;
16
- api.useField = useField;
17
- api.useStore = (selector) => {
18
- return useStore(api.store, selector);
19
- };
20
- api.Subscribe = (props) => {
21
- return functionalUpdate(
22
- props.children,
23
- // eslint-disable-next-line react-hooks/rules-of-hooks
24
- useStore(api.store, props.selector)
25
- );
26
- };
27
- return api;
28
- });
29
- formApi.useStore((state) => state.isSubmitting);
30
- useIsomorphicLayoutEffect(() => {
31
- formApi.update(opts);
32
- });
33
- return formApi;
34
- }
35
- export {
36
- useForm
37
- };
38
- //# sourceMappingURL=useForm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/useForm.tsx"],"sourcesContent":["import type { FormState, FormOptions } from '@tanstack/form-core'\nimport { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport type { NoInfer } from '@tanstack/react-store'\nimport { useStore } from '@tanstack/react-store'\nimport React, { type ReactNode, useState } from 'react'\nimport { type UseField, type FieldComponent, Field, useField } from './useField'\nimport { formContext } from './formContext'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FormApi<TFormData, ValidatorType> {\n Provider: (props: { children: any }) => any\n Field: FieldComponent<TFormData, ValidatorType>\n useField: UseField<TFormData>\n useStore: <TSelected = NoInfer<FormState<TFormData>>>(\n selector?: (state: NoInfer<FormState<TFormData>>) => TSelected,\n ) => TSelected\n Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {\n selector?: (state: NoInfer<FormState<TFormData>>) => TSelected\n children: ((state: NoInfer<TSelected>) => ReactNode) | ReactNode\n }) => any\n }\n}\n\nexport function useForm<TData, FormValidator>(\n opts?: FormOptions<TData, FormValidator>,\n): FormApi<TData, FormValidator> {\n const [formApi] = useState(() => {\n // @ts-ignore\n const api = new FormApi<TData>(opts)\n\n api.Provider = function Provider(props) {\n useIsomorphicLayoutEffect(api.mount, [])\n return <formContext.Provider {...props} value={{ formApi: api }} />\n }\n api.Field = Field as any\n api.useField = useField as any\n api.useStore = (\n // @ts-ignore\n selector,\n ) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStore(api.store as any, selector as any) as any\n }\n api.Subscribe = (\n // @ts-ignore\n props,\n ) => {\n return functionalUpdate(\n props.children,\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useStore(api.store as any, props.selector as any),\n ) as any\n }\n\n return api\n })\n\n formApi.useStore((state) => state.isSubmitting)\n\n /**\n * formApi.update should not have any side effects. Think of it like a `useRef`\n * that we need to keep updated every render with the most up-to-date information.\n */\n useIsomorphicLayoutEffect(() => {\n formApi.update(opts)\n })\n\n return formApi as any\n}\n"],"mappings":";AACA,SAAS,SAAS,wBAAwB;AAE1C,SAAS,gBAAgB;AACzB,OAAO,SAAyB,gBAAgB;AAChD,SAA6C,OAAO,gBAAgB;AACpE,SAAS,mBAAmB;AAC5B,SAAS,iCAAiC;AAkBnC,SAAS,QACd,MAC+B;AAC/B,QAAM,CAAC,OAAO,IAAI,SAAS,MAAM;AAE/B,UAAM,MAAM,IAAI,QAAe,IAAI;AAEnC,QAAI,WAAW,SAAS,SAAS,OAAO;AACtC,gCAA0B,IAAI,OAAO,CAAC,CAAC;AACvC,aAAO,oCAAC,YAAY,UAAZ,EAAsB,GAAG,OAAO,OAAO,EAAE,SAAS,IAAI,GAAG;AAAA,IACnE;AACA,QAAI,QAAQ;AACZ,QAAI,WAAW;AACf,QAAI,WAAW,CAEb,aACG;AAEH,aAAO,SAAS,IAAI,OAAc,QAAe;AAAA,IACnD;AACA,QAAI,YAAY,CAEd,UACG;AACH,aAAO;AAAA,QACL,MAAM;AAAA;AAAA,QAEN,SAAS,IAAI,OAAc,MAAM,QAAe;AAAA,MAClD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC;AAED,UAAQ,SAAS,CAAC,UAAU,MAAM,YAAY;AAM9C,4BAA0B,MAAM;AAC9B,YAAQ,OAAO,IAAI;AAAA,EACrB,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -1,35 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/useIsomorphicLayoutEffect.ts
21
- var useIsomorphicLayoutEffect_exports = {};
22
- __export(useIsomorphicLayoutEffect_exports, {
23
- useIsomorphicLayoutEffect: () => useIsomorphicLayoutEffect
24
- });
25
- module.exports = __toCommonJS(useIsomorphicLayoutEffect_exports);
26
- var import_react = require("react");
27
- var useIsomorphicLayoutEffect = (
28
- // @ts-ignore
29
- typeof window !== "undefined" ? import_react.useLayoutEffect : import_react.useEffect
30
- );
31
- // Annotate the CommonJS export names for ESM import in node:
32
- 0 && (module.exports = {
33
- useIsomorphicLayoutEffect
34
- });
35
- //# sourceMappingURL=useIsomorphicLayoutEffect.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/useIsomorphicLayoutEffect.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react'\n\nexport const useIsomorphicLayoutEffect =\n // @ts-ignore\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA2C;AAEpC,IAAM;AAAA;AAAA,EAEX,OAAO,WAAW,cAAc,+BAAkB;AAAA;","names":[]}
@@ -1,5 +0,0 @@
1
- import { useLayoutEffect } from 'react';
2
-
3
- declare const useIsomorphicLayoutEffect: typeof useLayoutEffect;
4
-
5
- export { useIsomorphicLayoutEffect };
@@ -1,5 +0,0 @@
1
- import { useLayoutEffect } from 'react';
2
-
3
- declare const useIsomorphicLayoutEffect: typeof useLayoutEffect;
4
-
5
- export { useIsomorphicLayoutEffect };
@@ -1,10 +0,0 @@
1
- // src/useIsomorphicLayoutEffect.ts
2
- import { useEffect, useLayoutEffect } from "react";
3
- var useIsomorphicLayoutEffect = (
4
- // @ts-ignore
5
- typeof window !== "undefined" ? useLayoutEffect : useEffect
6
- );
7
- export {
8
- useIsomorphicLayoutEffect
9
- };
10
- //# sourceMappingURL=useIsomorphicLayoutEffect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/useIsomorphicLayoutEffect.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react'\n\nexport const useIsomorphicLayoutEffect =\n // @ts-ignore\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n"],"mappings":";AAAA,SAAS,WAAW,uBAAuB;AAEpC,IAAM;AAAA;AAAA,EAEX,OAAO,WAAW,cAAc,kBAAkB;AAAA;","names":[]}