@tanstack/react-form 0.1.2 → 0.2.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 (159) hide show
  1. package/build/legacy/createFormFactory.cjs +42 -0
  2. package/build/legacy/createFormFactory.cjs.map +1 -0
  3. package/build/legacy/createFormFactory.d.cts +12 -0
  4. package/build/legacy/createFormFactory.d.ts +12 -0
  5. package/build/legacy/createFormFactory.js +17 -0
  6. package/build/legacy/createFormFactory.js.map +1 -0
  7. package/build/legacy/formContext.cjs +51 -0
  8. package/build/legacy/formContext.cjs.map +1 -0
  9. package/build/legacy/formContext.d.cts +13 -0
  10. package/build/legacy/formContext.d.ts +13 -0
  11. package/build/legacy/formContext.js +15 -0
  12. package/build/legacy/formContext.js.map +1 -0
  13. package/build/legacy/index.cjs +46 -0
  14. package/build/legacy/index.cjs.map +1 -0
  15. package/build/legacy/index.d.cts +7 -0
  16. package/build/legacy/index.d.ts +7 -0
  17. package/build/legacy/index.js +15 -0
  18. package/build/legacy/index.js.map +1 -0
  19. package/build/legacy/types.cjs +19 -0
  20. package/build/legacy/types.cjs.map +1 -0
  21. package/build/legacy/types.d.cts +7 -0
  22. package/build/legacy/types.d.ts +7 -0
  23. package/build/legacy/types.js +1 -0
  24. package/build/legacy/types.js.map +1 -0
  25. package/build/legacy/useField.cjs +80 -0
  26. package/build/legacy/useField.cjs.map +1 -0
  27. package/build/legacy/useField.d.cts +27 -0
  28. package/build/{lib → legacy}/useField.d.ts +10 -9
  29. package/build/legacy/useField.js +44 -0
  30. package/build/legacy/useField.js.map +1 -0
  31. package/build/legacy/useForm.cjs +70 -0
  32. package/build/legacy/useForm.cjs.map +1 -0
  33. package/build/legacy/useForm.d.cts +23 -0
  34. package/build/{lib → legacy}/useForm.d.ts +9 -7
  35. package/build/legacy/useForm.js +35 -0
  36. package/build/legacy/useForm.js.map +1 -0
  37. package/build/modern/createFormFactory.cjs +42 -0
  38. package/build/modern/createFormFactory.cjs.map +1 -0
  39. package/build/modern/createFormFactory.d.cts +12 -0
  40. package/build/modern/createFormFactory.d.ts +12 -0
  41. package/build/modern/createFormFactory.js +17 -0
  42. package/build/modern/createFormFactory.js.map +1 -0
  43. package/build/modern/formContext.cjs +51 -0
  44. package/build/modern/formContext.cjs.map +1 -0
  45. package/build/modern/formContext.d.cts +13 -0
  46. package/build/modern/formContext.d.ts +13 -0
  47. package/build/modern/formContext.js +15 -0
  48. package/build/modern/formContext.js.map +1 -0
  49. package/build/modern/index.cjs +46 -0
  50. package/build/modern/index.cjs.map +1 -0
  51. package/build/modern/index.d.cts +7 -0
  52. package/build/modern/index.d.ts +7 -0
  53. package/build/modern/index.js +15 -0
  54. package/build/modern/index.js.map +1 -0
  55. package/build/modern/types.cjs +19 -0
  56. package/build/modern/types.cjs.map +1 -0
  57. package/build/modern/types.d.cts +7 -0
  58. package/build/modern/types.d.ts +7 -0
  59. package/build/modern/types.js +1 -0
  60. package/build/modern/types.js.map +1 -0
  61. package/build/modern/useField.cjs +80 -0
  62. package/build/modern/useField.cjs.map +1 -0
  63. package/build/modern/useField.d.cts +27 -0
  64. package/build/modern/useField.d.ts +27 -0
  65. package/build/modern/useField.js +44 -0
  66. package/build/modern/useField.js.map +1 -0
  67. package/build/modern/useForm.cjs +70 -0
  68. package/build/modern/useForm.cjs.map +1 -0
  69. package/build/modern/useForm.d.cts +23 -0
  70. package/build/modern/useForm.d.ts +23 -0
  71. package/build/modern/useForm.js +35 -0
  72. package/build/modern/useForm.js.map +1 -0
  73. package/package.json +28 -22
  74. package/build/lib/_virtual/_rollupPluginBabelHelpers.cjs +0 -19
  75. package/build/lib/_virtual/_rollupPluginBabelHelpers.cjs.map +0 -1
  76. package/build/lib/_virtual/_rollupPluginBabelHelpers.js +0 -17
  77. package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
  78. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs +0 -19
  79. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs.map +0 -1
  80. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js +0 -17
  81. package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js.map +0 -1
  82. package/build/lib/createFormFactory.cjs +0 -18
  83. package/build/lib/createFormFactory.cjs.map +0 -1
  84. package/build/lib/createFormFactory.d.ts +0 -9
  85. package/build/lib/createFormFactory.d.ts.map +0 -1
  86. package/build/lib/createFormFactory.js +0 -16
  87. package/build/lib/createFormFactory.js.map +0 -1
  88. package/build/lib/createFormFactory.legacy.cjs +0 -18
  89. package/build/lib/createFormFactory.legacy.cjs.map +0 -1
  90. package/build/lib/createFormFactory.legacy.js +0 -16
  91. package/build/lib/createFormFactory.legacy.js.map +0 -1
  92. package/build/lib/formContext.cjs +0 -35
  93. package/build/lib/formContext.cjs.map +0 -1
  94. package/build/lib/formContext.d.ts +0 -11
  95. package/build/lib/formContext.d.ts.map +0 -1
  96. package/build/lib/formContext.js +0 -13
  97. package/build/lib/formContext.js.map +0 -1
  98. package/build/lib/formContext.legacy.cjs +0 -35
  99. package/build/lib/formContext.legacy.cjs.map +0 -1
  100. package/build/lib/formContext.legacy.js +0 -13
  101. package/build/lib/formContext.legacy.js.map +0 -1
  102. package/build/lib/index.cjs +0 -26
  103. package/build/lib/index.cjs.map +0 -1
  104. package/build/lib/index.d.ts +0 -8
  105. package/build/lib/index.d.ts.map +0 -1
  106. package/build/lib/index.js +0 -5
  107. package/build/lib/index.js.map +0 -1
  108. package/build/lib/index.legacy.cjs +0 -26
  109. package/build/lib/index.legacy.cjs.map +0 -1
  110. package/build/lib/index.legacy.js +0 -5
  111. package/build/lib/index.legacy.js.map +0 -1
  112. package/build/lib/tests/createFormFactory.test.d.ts +0 -3
  113. package/build/lib/tests/createFormFactory.test.d.ts.map +0 -1
  114. package/build/lib/tests/useField.test.d.ts +0 -3
  115. package/build/lib/tests/useField.test.d.ts.map +0 -1
  116. package/build/lib/tests/useForm.test.d.ts +0 -3
  117. package/build/lib/tests/useForm.test.d.ts.map +0 -1
  118. package/build/lib/tests/utils.d.ts +0 -2
  119. package/build/lib/tests/utils.d.ts.map +0 -1
  120. package/build/lib/types.d.ts +0 -5
  121. package/build/lib/types.d.ts.map +0 -1
  122. package/build/lib/useField.cjs +0 -83
  123. package/build/lib/useField.cjs.map +0 -1
  124. package/build/lib/useField.d.ts.map +0 -1
  125. package/build/lib/useField.js +0 -80
  126. package/build/lib/useField.js.map +0 -1
  127. package/build/lib/useField.legacy.cjs +0 -83
  128. package/build/lib/useField.legacy.cjs.map +0 -1
  129. package/build/lib/useField.legacy.js +0 -80
  130. package/build/lib/useField.legacy.js.map +0 -1
  131. package/build/lib/useForm.cjs +0 -52
  132. package/build/lib/useForm.cjs.map +0 -1
  133. package/build/lib/useForm.d.ts.map +0 -1
  134. package/build/lib/useForm.js +0 -50
  135. package/build/lib/useForm.js.map +0 -1
  136. package/build/lib/useForm.legacy.cjs +0 -52
  137. package/build/lib/useForm.legacy.cjs.map +0 -1
  138. package/build/lib/useForm.legacy.js +0 -50
  139. package/build/lib/useForm.legacy.js.map +0 -1
  140. package/build/lib/utils/isBrowser.cjs +0 -8
  141. package/build/lib/utils/isBrowser.cjs.map +0 -1
  142. package/build/lib/utils/isBrowser.d.ts +0 -2
  143. package/build/lib/utils/isBrowser.d.ts.map +0 -1
  144. package/build/lib/utils/isBrowser.js +0 -6
  145. package/build/lib/utils/isBrowser.js.map +0 -1
  146. package/build/lib/utils/isBrowser.legacy.cjs +0 -8
  147. package/build/lib/utils/isBrowser.legacy.cjs.map +0 -1
  148. package/build/lib/utils/isBrowser.legacy.js +0 -6
  149. package/build/lib/utils/isBrowser.legacy.js.map +0 -1
  150. package/build/lib/utils/useIsomorphicLayoutEffect.cjs +0 -11
  151. package/build/lib/utils/useIsomorphicLayoutEffect.cjs.map +0 -1
  152. package/build/lib/utils/useIsomorphicLayoutEffect.d.ts +0 -3
  153. package/build/lib/utils/useIsomorphicLayoutEffect.d.ts.map +0 -1
  154. package/build/lib/utils/useIsomorphicLayoutEffect.js +0 -9
  155. package/build/lib/utils/useIsomorphicLayoutEffect.js.map +0 -1
  156. package/build/lib/utils/useIsomorphicLayoutEffect.legacy.cjs +0 -11
  157. package/build/lib/utils/useIsomorphicLayoutEffect.legacy.cjs.map +0 -1
  158. package/build/lib/utils/useIsomorphicLayoutEffect.legacy.js +0 -9
  159. package/build/lib/utils/useIsomorphicLayoutEffect.legacy.js.map +0 -1
@@ -1,13 +0,0 @@
1
- import * as React from 'react';
2
-
3
- const formContext = /*#__PURE__*/React.createContext(null);
4
- function useFormContext() {
5
- const formApi = React.useContext(formContext);
6
- if (!formApi) {
7
- throw new Error("You are trying to use the form API outside of a form!");
8
- }
9
- return formApi;
10
- }
11
-
12
- export { formContext, useFormContext };
13
- //# sourceMappingURL=formContext.legacy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formContext.legacy.js","sources":["../../src/formContext.ts"],"sourcesContent":["import type { FormApi } from '@tanstack/form-core'\nimport * as React from 'react'\n\nexport const formContext = React.createContext<{\n formApi: FormApi<any>\n parentFieldName?: string\n} | null>(null!)\n\nexport function useFormContext() {\n const formApi = React.useContext(formContext)\n\n if (!formApi) {\n throw new Error(`You are trying to use the form API outside of a form!`)\n }\n\n return formApi\n}\n"],"names":["formContext","React","createContext","useFormContext","formApi","useContext","Error"],"mappings":";;AAGO,MAAMA,WAAW,gBAAGC,KAAK,CAACC,aAAa,CAGpC,IAAK,EAAC;AAET,SAASC,cAAcA,GAAG;AAC/B,EAAA,MAAMC,OAAO,GAAGH,KAAK,CAACI,UAAU,CAACL,WAAW,CAAC,CAAA;EAE7C,IAAI,CAACI,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CAAA,uDAAwD,CAAC,CAAA;AAC1E,GAAA;AAEA,EAAA,OAAOF,OAAO,CAAA;AAChB;;;;"}
@@ -1,26 +0,0 @@
1
- 'use strict';
2
-
3
- var formCore = require('@tanstack/form-core');
4
- var useForm = require('./useForm.cjs');
5
- var useField = require('./useField.cjs');
6
- var createFormFactory = require('./createFormFactory.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, 'FieldApi', {
11
- enumerable: true,
12
- get: function () { return formCore.FieldApi; }
13
- });
14
- Object.defineProperty(exports, 'FormApi', {
15
- enumerable: true,
16
- get: function () { return formCore.FormApi; }
17
- });
18
- Object.defineProperty(exports, 'functionalUpdate', {
19
- enumerable: true,
20
- get: function () { return formCore.functionalUpdate; }
21
- });
22
- exports.useForm = useForm.useForm;
23
- exports.Field = useField.Field;
24
- exports.useField = useField.useField;
25
- exports.createFormFactory = createFormFactory.createFormFactory;
26
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,8 +0,0 @@
1
- export type { DeepKeys, DeepValue, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormOptions, FormState, RequiredByKey, Updater, UpdaterFn, ValidationCause, ValidationError, ValidationMeta, } from '@tanstack/form-core';
2
- export { FormApi, FieldApi, functionalUpdate } from '@tanstack/form-core';
3
- export { useForm } from './useForm';
4
- export type { UseField, FieldComponent } from './useField';
5
- export { useField, Field } from './useField';
6
- export type { FormFactory } from './createFormFactory';
7
- export { createFormFactory } from './createFormFactory';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,SAAS,EACT,eAAe,EACf,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,aAAa,EACb,OAAO,EACP,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE5C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1,5 +0,0 @@
1
- export { FieldApi, FormApi, functionalUpdate } from '@tanstack/form-core';
2
- export { useForm } from './useForm.js';
3
- export { Field, useField } from './useField.js';
4
- export { createFormFactory } from './createFormFactory.js';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,26 +0,0 @@
1
- 'use strict';
2
-
3
- var formCore = require('@tanstack/form-core');
4
- var useForm = require('./useForm.legacy.cjs');
5
- var useField = require('./useField.legacy.cjs');
6
- var createFormFactory = require('./createFormFactory.legacy.cjs');
7
-
8
-
9
-
10
- Object.defineProperty(exports, 'FieldApi', {
11
- enumerable: true,
12
- get: function () { return formCore.FieldApi; }
13
- });
14
- Object.defineProperty(exports, 'FormApi', {
15
- enumerable: true,
16
- get: function () { return formCore.FormApi; }
17
- });
18
- Object.defineProperty(exports, 'functionalUpdate', {
19
- enumerable: true,
20
- get: function () { return formCore.functionalUpdate; }
21
- });
22
- exports.useForm = useForm.useForm;
23
- exports.Field = useField.Field;
24
- exports.useField = useField.useField;
25
- exports.createFormFactory = createFormFactory.createFormFactory;
26
- //# sourceMappingURL=index.legacy.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.legacy.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +0,0 @@
1
- export { FieldApi, FormApi, functionalUpdate } from '@tanstack/form-core';
2
- export { useForm } from './useForm.legacy.js';
3
- export { Field, useField } from './useField.legacy.js';
4
- export { createFormFactory } from './createFormFactory.legacy.js';
5
- //# sourceMappingURL=index.legacy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.legacy.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -1,3 +0,0 @@
1
- /// <reference lib="dom" />
2
- import '@testing-library/jest-dom';
3
- //# sourceMappingURL=createFormFactory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createFormFactory.test.d.ts","sourceRoot":"","sources":["../../../src/tests/createFormFactory.test.tsx"],"names":[],"mappings":";AAEA,OAAO,2BAA2B,CAAA"}
@@ -1,3 +0,0 @@
1
- /// <reference lib="dom" />
2
- import '@testing-library/jest-dom';
3
- //# sourceMappingURL=useField.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useField.test.d.ts","sourceRoot":"","sources":["../../../src/tests/useField.test.tsx"],"names":[],"mappings":";AAIA,OAAO,2BAA2B,CAAA"}
@@ -1,3 +0,0 @@
1
- /// <reference lib="dom" />
2
- import '@testing-library/jest-dom';
3
- //# sourceMappingURL=useForm.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useForm.test.d.ts","sourceRoot":"","sources":["../../../src/tests/useForm.test.tsx"],"names":[],"mappings":";AAGA,OAAO,2BAA2B,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare function sleep(timeout: number): Promise<void>;
2
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tests/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpD"}
@@ -1,5 +0,0 @@
1
- import type { FieldOptions } from '@tanstack/form-core';
2
- export type UseFieldOptions<TData, TFormData> = FieldOptions<TData, TFormData> & {
3
- mode?: 'value' | 'array';
4
- };
5
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,MAAM,eAAe,CAAC,KAAK,EAAE,SAAS,IAAI,YAAY,CAC1D,KAAK,EACL,SAAS,CACV,GAAG;IACF,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CACzB,CAAA"}
@@ -1,83 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
- var reactStore = require('@tanstack/react-store');
5
- var formCore = require('@tanstack/form-core');
6
- var formContext = require('./formContext.cjs');
7
- var useIsomorphicLayoutEffect = require('./utils/useIsomorphicLayoutEffect.cjs');
8
-
9
- function useField(opts) {
10
- // Get the form API either manually or from context
11
- const {
12
- formApi,
13
- parentFieldName
14
- } = formContext.useFormContext();
15
- const [fieldApi] = React.useState(() => {
16
- const name = (typeof opts.index === 'number' ? [parentFieldName, opts.index, opts.name] : [parentFieldName, opts.name]).filter(d => d !== undefined).join('.');
17
- const api = new formCore.FieldApi({
18
- ...opts,
19
- form: formApi,
20
- name: name
21
- });
22
- api.Field = Field;
23
- return api;
24
- });
25
-
26
- /**
27
- * fieldApi.update should not have any side effects. Think of it like a `useRef`
28
- * that we need to keep updated every render with the most up-to-date information.
29
- */
30
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
31
- fieldApi.update({
32
- ...opts,
33
- form: formApi
34
- });
35
- });
36
- reactStore.useStore(fieldApi.store, opts.mode === 'array' ? state => {
37
- return [state.meta, Object.keys(state.value || []).length];
38
- } : undefined);
39
-
40
- // Instantiates field meta and removes it when unrendered
41
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi]);
42
- return fieldApi;
43
- }
44
-
45
- // export type FieldValue<TFormData, TField> = TFormData extends any[]
46
- // ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`
47
- // ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>
48
- // : TField extends `[${infer TIndex extends number | 'i'}]`
49
- // ? TFormData[TIndex extends 'i' ? number : TIndex]
50
- // : never
51
- // : TField extends `${infer TPrefix}[${infer TIndex extends
52
- // | number
53
- // | 'i'}].${infer TRest}`
54
- // ? DeepValue<
55
- // DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],
56
- // TRest
57
- // >
58
- // : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`
59
- // ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]
60
- // : DeepValue<TFormData, TField>
61
- // type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>
62
- // // ^?
63
- // type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>
64
- // // ^?
65
- // type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>
66
- // // ^?
67
- function Field({
68
- children,
69
- ...fieldOptions
70
- }) {
71
- const fieldApi = useField(fieldOptions);
72
- return /*#__PURE__*/React.createElement(formContext.formContext.Provider, {
73
- value: {
74
- formApi: fieldApi.form,
75
- parentFieldName: fieldApi.name
76
- },
77
- children: formCore.functionalUpdate(children, fieldApi)
78
- });
79
- }
80
-
81
- exports.Field = Field;
82
- exports.useField = useField;
83
- //# sourceMappingURL=useField.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useField.cjs","sources":["../../src/useField.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport type {\n DeepKeys,\n DeepValue,\n FieldOptions,\n Narrow,\n} from '@tanstack/form-core'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useFormContext, formContext } from './formContext'\nimport { useIsomorphicLayoutEffect } from './utils/useIsomorphicLayoutEffect'\nimport type { UseFieldOptions } from './types'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FieldApi<TData, TFormData> {\n Field: FieldComponent<TData, TFormData>\n }\n}\n\nexport type UseField<TFormData> = <TField extends DeepKeys<TFormData>>(\n opts?: { name: Narrow<TField> } & UseFieldOptions<\n DeepValue<TFormData, TField>,\n TFormData\n >,\n) => FieldApi<DeepValue<TFormData, TField>, TFormData>\n\nexport function useField<TData, TFormData>(\n opts: UseFieldOptions<TData, TFormData>,\n): FieldApi<TData, TFormData> {\n // Get the form API either manually or from context\n const { formApi, parentFieldName } = useFormContext()\n\n const [fieldApi] = useState<FieldApi<TData, TFormData>>(() => {\n const name = (\n typeof opts.index === 'number'\n ? [parentFieldName, opts.index, opts.name]\n : [parentFieldName, opts.name]\n )\n .filter((d) => d !== undefined)\n .join('.')\n\n const api = new FieldApi({ ...opts, form: formApi, name: name as any })\n\n api.Field = Field as any\n\n return api\n })\n\n /**\n * fieldApi.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 fieldApi.update({ ...opts, form: formApi } as never)\n })\n\n useStore(\n fieldApi.store as any,\n opts.mode === 'array'\n ? (state: any) => {\n return [state.meta, Object.keys(state.value || []).length]\n }\n : undefined,\n )\n\n // Instantiates field meta and removes it when unrendered\n useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi])\n\n return fieldApi\n}\n\n// export type FieldValue<TFormData, TField> = TFormData extends any[]\n// ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`\n// ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>\n// : TField extends `[${infer TIndex extends number | 'i'}]`\n// ? TFormData[TIndex extends 'i' ? number : TIndex]\n// : never\n// : TField extends `${infer TPrefix}[${infer TIndex extends\n// | number\n// | 'i'}].${infer TRest}`\n// ? DeepValue<\n// DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],\n// TRest\n// >\n// : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`\n// ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]\n// : DeepValue<TFormData, TField>\n\nexport type FieldValue<TFormData, TField> = TFormData extends any[]\n ? unknown extends TField\n ? TFormData[number]\n : DeepValue<TFormData[number], TField>\n : DeepValue<TFormData, TField>\n\n// type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>\n// // ^?\n// type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>\n// // ^?\n// type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>\n// // ^?\n\nexport type FieldComponent<TParentData, TFormData> = <TField>({\n children,\n ...fieldOptions\n}: {\n children: (\n fieldApi: FieldApi<FieldValue<TParentData, TField>, TFormData>,\n ) => any\n} & Omit<\n UseFieldOptions<FieldValue<TParentData, TField>, TFormData>,\n 'name' | 'index'\n> &\n (TParentData extends any[]\n ? {\n name?: TField extends undefined ? TField : DeepKeys<TParentData>\n index: number\n }\n : {\n name: TField extends undefined ? TField : DeepKeys<TParentData>\n index?: never\n })) => any\n\nexport function Field<TData, TFormData>({\n children,\n ...fieldOptions\n}: {\n children: (fieldApi: FieldApi<TData, TFormData>) => any\n} & UseFieldOptions<TData, TFormData>) {\n const fieldApi = useField(fieldOptions as any)\n\n return (\n <formContext.Provider\n value={{ formApi: fieldApi.form, parentFieldName: fieldApi.name }}\n children={functionalUpdate(children, fieldApi as any)}\n />\n )\n}\n"],"names":["useField","opts","formApi","parentFieldName","useFormContext","fieldApi","useState","name","index","filter","d","undefined","join","api","FieldApi","form","Field","useIsomorphicLayoutEffect","update","useStore","store","mode","state","meta","Object","keys","value","length","mount","children","fieldOptions","React","createElement","formContext","Provider","functionalUpdate"],"mappings":";;;;;;;;AA2BO,SAASA,QAAQA,CACtBC,IAAuC,EACX;AAC5B;EACA,MAAM;IAAEC,OAAO;AAAEC,IAAAA,eAAAA;GAAiB,GAAGC,0BAAc,EAAE,CAAA;AAErD,EAAA,MAAM,CAACC,QAAQ,CAAC,GAAGC,cAAQ,CAA6B,MAAM;AAC5D,IAAA,MAAMC,IAAI,GAAG,CACX,OAAON,IAAI,CAACO,KAAK,KAAK,QAAQ,GAC1B,CAACL,eAAe,EAAEF,IAAI,CAACO,KAAK,EAAEP,IAAI,CAACM,IAAI,CAAC,GACxC,CAACJ,eAAe,EAAEF,IAAI,CAACM,IAAI,CAAC,EAE/BE,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKC,SAAS,CAAC,CAC9BC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ,IAAA,MAAMC,GAAG,GAAG,IAAIC,iBAAQ,CAAC;AAAE,MAAA,GAAGb,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAO;AAAEK,MAAAA,IAAI,EAAEA,IAAAA;AAAY,KAAC,CAAC,CAAA;IAEvEM,GAAG,CAACG,KAAK,GAAGA,KAAY,CAAA;AAExB,IAAA,OAAOH,GAAG,CAAA;AACZ,GAAC,CAAC,CAAA;;AAEF;AACF;AACA;AACA;AACEI,EAAAA,mDAAyB,CAAC,MAAM;IAC9BZ,QAAQ,CAACa,MAAM,CAAC;AAAE,MAAA,GAAGjB,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAAA;AAAQ,KAAU,CAAC,CAAA;AACtD,GAAC,CAAC,CAAA;AAEFiB,EAAAA,mBAAQ,CACNd,QAAQ,CAACe,KAAK,EACdnB,IAAI,CAACoB,IAAI,KAAK,OAAO,GAChBC,KAAU,IAAK;AACd,IAAA,OAAO,CAACA,KAAK,CAACC,IAAI,EAAEC,MAAM,CAACC,IAAI,CAACH,KAAK,CAACI,KAAK,IAAI,EAAE,CAAC,CAACC,MAAM,CAAC,CAAA;GAC3D,GACDhB,SACN,CAAC,CAAA;;AAED;EACAM,mDAAyB,CAAC,MAAMZ,QAAQ,CAACuB,KAAK,EAAE,EAAE,CAACvB,QAAQ,CAAC,CAAC,CAAA;AAE7D,EAAA,OAAOA,QAAQ,CAAA;AACjB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAuBO,SAASW,KAAKA,CAAmB;EACtCa,QAAQ;EACR,GAAGC,YAAAA;AAG+B,CAAC,EAAE;AACrC,EAAA,MAAMzB,QAAQ,GAAGL,QAAQ,CAAC8B,YAAmB,CAAC,CAAA;AAE9C,EAAA,oBACEC,KAAA,CAAAC,aAAA,CAACC,uBAAW,CAACC,QAAQ,EAAA;AACnBR,IAAAA,KAAK,EAAE;MAAExB,OAAO,EAAEG,QAAQ,CAACU,IAAI;MAAEZ,eAAe,EAAEE,QAAQ,CAACE,IAAAA;KAAO;AAClEsB,IAAAA,QAAQ,EAAEM,yBAAgB,CAACN,QAAQ,EAAExB,QAAe,CAAA;AAAE,GACvD,CAAC,CAAA;AAEN;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useField.d.ts","sourceRoot":"","sources":["../../src/useField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EAET,MAAM,EACP,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAoB,MAAM,qBAAqB,CAAA;AAGhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,OAAO,QAAQ,qBAAqB,CAAC;IAEnC,UAAU,QAAQ,CAAC,KAAK,EAAE,SAAS;QACjC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;KACxC;CACF;AAED,MAAM,MAAM,QAAQ,CAAC,SAAS,IAAI,CAAC,MAAM,SAAS,QAAQ,CAAC,SAAS,CAAC,EACnE,IAAI,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,eAAe,CAC/C,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,EAC5B,SAAS,CACV,KACE,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,CAAA;AAEtD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,EACvC,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,GACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAyC5B;AAmBD,MAAM,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,IAAI,SAAS,SAAS,GAAG,EAAE,GAC/D,OAAO,SAAS,MAAM,GACpB,SAAS,CAAC,MAAM,CAAC,GACjB,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GACtC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;AAShC,MAAM,MAAM,cAAc,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,MAAM,EAAE,EAC5D,QAAQ,EACR,GAAG,YAAY,EAChB,EAAE;IACD,QAAQ,EAAE,CACR,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,KAC3D,GAAG,CAAA;CACT,GAAG,IAAI,CACN,eAAe,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC,EAC3D,MAAM,GAAG,OAAO,CACjB,GACC,CAAC,WAAW,SAAS,GAAG,EAAE,GACtB;IACE,IAAI,CAAC,EAAE,MAAM,SAAS,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IAChE,KAAK,EAAE,MAAM,CAAA;CACd,GACD;IACE,IAAI,EAAE,MAAM,SAAS,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC/D,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,CAAC,KAAK,GAAG,CAAA;AAEhB,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,EACtC,QAAQ,EACR,GAAG,YAAY,EAChB,EAAE;IACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,CAAA;CACxD,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,eASpC"}
@@ -1,80 +0,0 @@
1
- import React__default, { useState } from 'react';
2
- import { useStore } from '@tanstack/react-store';
3
- import { FieldApi, functionalUpdate } from '@tanstack/form-core';
4
- import { useFormContext, formContext } from './formContext.js';
5
- import { useIsomorphicLayoutEffect } from './utils/useIsomorphicLayoutEffect.js';
6
-
7
- function useField(opts) {
8
- // Get the form API either manually or from context
9
- const {
10
- formApi,
11
- parentFieldName
12
- } = useFormContext();
13
- const [fieldApi] = useState(() => {
14
- const name = (typeof opts.index === 'number' ? [parentFieldName, opts.index, opts.name] : [parentFieldName, opts.name]).filter(d => d !== undefined).join('.');
15
- const api = new FieldApi({
16
- ...opts,
17
- form: formApi,
18
- name: name
19
- });
20
- api.Field = Field;
21
- return api;
22
- });
23
-
24
- /**
25
- * fieldApi.update should not have any side effects. Think of it like a `useRef`
26
- * that we need to keep updated every render with the most up-to-date information.
27
- */
28
- useIsomorphicLayoutEffect(() => {
29
- fieldApi.update({
30
- ...opts,
31
- form: formApi
32
- });
33
- });
34
- useStore(fieldApi.store, opts.mode === 'array' ? state => {
35
- return [state.meta, Object.keys(state.value || []).length];
36
- } : undefined);
37
-
38
- // Instantiates field meta and removes it when unrendered
39
- useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi]);
40
- return fieldApi;
41
- }
42
-
43
- // export type FieldValue<TFormData, TField> = TFormData extends any[]
44
- // ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`
45
- // ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>
46
- // : TField extends `[${infer TIndex extends number | 'i'}]`
47
- // ? TFormData[TIndex extends 'i' ? number : TIndex]
48
- // : never
49
- // : TField extends `${infer TPrefix}[${infer TIndex extends
50
- // | number
51
- // | 'i'}].${infer TRest}`
52
- // ? DeepValue<
53
- // DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],
54
- // TRest
55
- // >
56
- // : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`
57
- // ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]
58
- // : DeepValue<TFormData, TField>
59
- // type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>
60
- // // ^?
61
- // type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>
62
- // // ^?
63
- // type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>
64
- // // ^?
65
- function Field({
66
- children,
67
- ...fieldOptions
68
- }) {
69
- const fieldApi = useField(fieldOptions);
70
- return /*#__PURE__*/React__default.createElement(formContext.Provider, {
71
- value: {
72
- formApi: fieldApi.form,
73
- parentFieldName: fieldApi.name
74
- },
75
- children: functionalUpdate(children, fieldApi)
76
- });
77
- }
78
-
79
- export { Field, useField };
80
- //# sourceMappingURL=useField.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useField.js","sources":["../../src/useField.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport type {\n DeepKeys,\n DeepValue,\n FieldOptions,\n Narrow,\n} from '@tanstack/form-core'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useFormContext, formContext } from './formContext'\nimport { useIsomorphicLayoutEffect } from './utils/useIsomorphicLayoutEffect'\nimport type { UseFieldOptions } from './types'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FieldApi<TData, TFormData> {\n Field: FieldComponent<TData, TFormData>\n }\n}\n\nexport type UseField<TFormData> = <TField extends DeepKeys<TFormData>>(\n opts?: { name: Narrow<TField> } & UseFieldOptions<\n DeepValue<TFormData, TField>,\n TFormData\n >,\n) => FieldApi<DeepValue<TFormData, TField>, TFormData>\n\nexport function useField<TData, TFormData>(\n opts: UseFieldOptions<TData, TFormData>,\n): FieldApi<TData, TFormData> {\n // Get the form API either manually or from context\n const { formApi, parentFieldName } = useFormContext()\n\n const [fieldApi] = useState<FieldApi<TData, TFormData>>(() => {\n const name = (\n typeof opts.index === 'number'\n ? [parentFieldName, opts.index, opts.name]\n : [parentFieldName, opts.name]\n )\n .filter((d) => d !== undefined)\n .join('.')\n\n const api = new FieldApi({ ...opts, form: formApi, name: name as any })\n\n api.Field = Field as any\n\n return api\n })\n\n /**\n * fieldApi.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 fieldApi.update({ ...opts, form: formApi } as never)\n })\n\n useStore(\n fieldApi.store as any,\n opts.mode === 'array'\n ? (state: any) => {\n return [state.meta, Object.keys(state.value || []).length]\n }\n : undefined,\n )\n\n // Instantiates field meta and removes it when unrendered\n useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi])\n\n return fieldApi\n}\n\n// export type FieldValue<TFormData, TField> = TFormData extends any[]\n// ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`\n// ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>\n// : TField extends `[${infer TIndex extends number | 'i'}]`\n// ? TFormData[TIndex extends 'i' ? number : TIndex]\n// : never\n// : TField extends `${infer TPrefix}[${infer TIndex extends\n// | number\n// | 'i'}].${infer TRest}`\n// ? DeepValue<\n// DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],\n// TRest\n// >\n// : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`\n// ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]\n// : DeepValue<TFormData, TField>\n\nexport type FieldValue<TFormData, TField> = TFormData extends any[]\n ? unknown extends TField\n ? TFormData[number]\n : DeepValue<TFormData[number], TField>\n : DeepValue<TFormData, TField>\n\n// type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>\n// // ^?\n// type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>\n// // ^?\n// type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>\n// // ^?\n\nexport type FieldComponent<TParentData, TFormData> = <TField>({\n children,\n ...fieldOptions\n}: {\n children: (\n fieldApi: FieldApi<FieldValue<TParentData, TField>, TFormData>,\n ) => any\n} & Omit<\n UseFieldOptions<FieldValue<TParentData, TField>, TFormData>,\n 'name' | 'index'\n> &\n (TParentData extends any[]\n ? {\n name?: TField extends undefined ? TField : DeepKeys<TParentData>\n index: number\n }\n : {\n name: TField extends undefined ? TField : DeepKeys<TParentData>\n index?: never\n })) => any\n\nexport function Field<TData, TFormData>({\n children,\n ...fieldOptions\n}: {\n children: (fieldApi: FieldApi<TData, TFormData>) => any\n} & UseFieldOptions<TData, TFormData>) {\n const fieldApi = useField(fieldOptions as any)\n\n return (\n <formContext.Provider\n value={{ formApi: fieldApi.form, parentFieldName: fieldApi.name }}\n children={functionalUpdate(children, fieldApi as any)}\n />\n )\n}\n"],"names":["useField","opts","formApi","parentFieldName","useFormContext","fieldApi","useState","name","index","filter","d","undefined","join","api","FieldApi","form","Field","useIsomorphicLayoutEffect","update","useStore","store","mode","state","meta","Object","keys","value","length","mount","children","fieldOptions","React","createElement","formContext","Provider","functionalUpdate"],"mappings":";;;;;;AA2BO,SAASA,QAAQA,CACtBC,IAAuC,EACX;AAC5B;EACA,MAAM;IAAEC,OAAO;AAAEC,IAAAA,eAAAA;GAAiB,GAAGC,cAAc,EAAE,CAAA;AAErD,EAAA,MAAM,CAACC,QAAQ,CAAC,GAAGC,QAAQ,CAA6B,MAAM;AAC5D,IAAA,MAAMC,IAAI,GAAG,CACX,OAAON,IAAI,CAACO,KAAK,KAAK,QAAQ,GAC1B,CAACL,eAAe,EAAEF,IAAI,CAACO,KAAK,EAAEP,IAAI,CAACM,IAAI,CAAC,GACxC,CAACJ,eAAe,EAAEF,IAAI,CAACM,IAAI,CAAC,EAE/BE,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKC,SAAS,CAAC,CAC9BC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ,IAAA,MAAMC,GAAG,GAAG,IAAIC,QAAQ,CAAC;AAAE,MAAA,GAAGb,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAO;AAAEK,MAAAA,IAAI,EAAEA,IAAAA;AAAY,KAAC,CAAC,CAAA;IAEvEM,GAAG,CAACG,KAAK,GAAGA,KAAY,CAAA;AAExB,IAAA,OAAOH,GAAG,CAAA;AACZ,GAAC,CAAC,CAAA;;AAEF;AACF;AACA;AACA;AACEI,EAAAA,yBAAyB,CAAC,MAAM;IAC9BZ,QAAQ,CAACa,MAAM,CAAC;AAAE,MAAA,GAAGjB,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAAA;AAAQ,KAAU,CAAC,CAAA;AACtD,GAAC,CAAC,CAAA;AAEFiB,EAAAA,QAAQ,CACNd,QAAQ,CAACe,KAAK,EACdnB,IAAI,CAACoB,IAAI,KAAK,OAAO,GAChBC,KAAU,IAAK;AACd,IAAA,OAAO,CAACA,KAAK,CAACC,IAAI,EAAEC,MAAM,CAACC,IAAI,CAACH,KAAK,CAACI,KAAK,IAAI,EAAE,CAAC,CAACC,MAAM,CAAC,CAAA;GAC3D,GACDhB,SACN,CAAC,CAAA;;AAED;EACAM,yBAAyB,CAAC,MAAMZ,QAAQ,CAACuB,KAAK,EAAE,EAAE,CAACvB,QAAQ,CAAC,CAAC,CAAA;AAE7D,EAAA,OAAOA,QAAQ,CAAA;AACjB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAuBO,SAASW,KAAKA,CAAmB;EACtCa,QAAQ;EACR,GAAGC,YAAAA;AAG+B,CAAC,EAAE;AACrC,EAAA,MAAMzB,QAAQ,GAAGL,QAAQ,CAAC8B,YAAmB,CAAC,CAAA;AAE9C,EAAA,oBACEC,cAAA,CAAAC,aAAA,CAACC,WAAW,CAACC,QAAQ,EAAA;AACnBR,IAAAA,KAAK,EAAE;MAAExB,OAAO,EAAEG,QAAQ,CAACU,IAAI;MAAEZ,eAAe,EAAEE,QAAQ,CAACE,IAAAA;KAAO;AAClEsB,IAAAA,QAAQ,EAAEM,gBAAgB,CAACN,QAAQ,EAAExB,QAAe,CAAA;AAAE,GACvD,CAAC,CAAA;AAEN;;;;"}
@@ -1,83 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
- var reactStore = require('@tanstack/react-store');
5
- var formCore = require('@tanstack/form-core');
6
- var formContext = require('./formContext.legacy.cjs');
7
- var useIsomorphicLayoutEffect = require('./utils/useIsomorphicLayoutEffect.legacy.cjs');
8
-
9
- function useField(opts) {
10
- // Get the form API either manually or from context
11
- const {
12
- formApi,
13
- parentFieldName
14
- } = formContext.useFormContext();
15
- const [fieldApi] = React.useState(() => {
16
- const name = (typeof opts.index === 'number' ? [parentFieldName, opts.index, opts.name] : [parentFieldName, opts.name]).filter(d => d !== undefined).join('.');
17
- const api = new formCore.FieldApi({
18
- ...opts,
19
- form: formApi,
20
- name: name
21
- });
22
- api.Field = Field;
23
- return api;
24
- });
25
-
26
- /**
27
- * fieldApi.update should not have any side effects. Think of it like a `useRef`
28
- * that we need to keep updated every render with the most up-to-date information.
29
- */
30
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
31
- fieldApi.update({
32
- ...opts,
33
- form: formApi
34
- });
35
- });
36
- reactStore.useStore(fieldApi.store, opts.mode === 'array' ? state => {
37
- return [state.meta, Object.keys(state.value || []).length];
38
- } : undefined);
39
-
40
- // Instantiates field meta and removes it when unrendered
41
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi]);
42
- return fieldApi;
43
- }
44
-
45
- // export type FieldValue<TFormData, TField> = TFormData extends any[]
46
- // ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`
47
- // ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>
48
- // : TField extends `[${infer TIndex extends number | 'i'}]`
49
- // ? TFormData[TIndex extends 'i' ? number : TIndex]
50
- // : never
51
- // : TField extends `${infer TPrefix}[${infer TIndex extends
52
- // | number
53
- // | 'i'}].${infer TRest}`
54
- // ? DeepValue<
55
- // DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],
56
- // TRest
57
- // >
58
- // : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`
59
- // ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]
60
- // : DeepValue<TFormData, TField>
61
- // type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>
62
- // // ^?
63
- // type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>
64
- // // ^?
65
- // type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>
66
- // // ^?
67
- function Field({
68
- children,
69
- ...fieldOptions
70
- }) {
71
- const fieldApi = useField(fieldOptions);
72
- return /*#__PURE__*/React.createElement(formContext.formContext.Provider, {
73
- value: {
74
- formApi: fieldApi.form,
75
- parentFieldName: fieldApi.name
76
- },
77
- children: formCore.functionalUpdate(children, fieldApi)
78
- });
79
- }
80
-
81
- exports.Field = Field;
82
- exports.useField = useField;
83
- //# sourceMappingURL=useField.legacy.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useField.legacy.cjs","sources":["../../src/useField.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport type {\n DeepKeys,\n DeepValue,\n FieldOptions,\n Narrow,\n} from '@tanstack/form-core'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useFormContext, formContext } from './formContext'\nimport { useIsomorphicLayoutEffect } from './utils/useIsomorphicLayoutEffect'\nimport type { UseFieldOptions } from './types'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FieldApi<TData, TFormData> {\n Field: FieldComponent<TData, TFormData>\n }\n}\n\nexport type UseField<TFormData> = <TField extends DeepKeys<TFormData>>(\n opts?: { name: Narrow<TField> } & UseFieldOptions<\n DeepValue<TFormData, TField>,\n TFormData\n >,\n) => FieldApi<DeepValue<TFormData, TField>, TFormData>\n\nexport function useField<TData, TFormData>(\n opts: UseFieldOptions<TData, TFormData>,\n): FieldApi<TData, TFormData> {\n // Get the form API either manually or from context\n const { formApi, parentFieldName } = useFormContext()\n\n const [fieldApi] = useState<FieldApi<TData, TFormData>>(() => {\n const name = (\n typeof opts.index === 'number'\n ? [parentFieldName, opts.index, opts.name]\n : [parentFieldName, opts.name]\n )\n .filter((d) => d !== undefined)\n .join('.')\n\n const api = new FieldApi({ ...opts, form: formApi, name: name as any })\n\n api.Field = Field as any\n\n return api\n })\n\n /**\n * fieldApi.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 fieldApi.update({ ...opts, form: formApi } as never)\n })\n\n useStore(\n fieldApi.store as any,\n opts.mode === 'array'\n ? (state: any) => {\n return [state.meta, Object.keys(state.value || []).length]\n }\n : undefined,\n )\n\n // Instantiates field meta and removes it when unrendered\n useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi])\n\n return fieldApi\n}\n\n// export type FieldValue<TFormData, TField> = TFormData extends any[]\n// ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`\n// ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>\n// : TField extends `[${infer TIndex extends number | 'i'}]`\n// ? TFormData[TIndex extends 'i' ? number : TIndex]\n// : never\n// : TField extends `${infer TPrefix}[${infer TIndex extends\n// | number\n// | 'i'}].${infer TRest}`\n// ? DeepValue<\n// DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],\n// TRest\n// >\n// : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`\n// ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]\n// : DeepValue<TFormData, TField>\n\nexport type FieldValue<TFormData, TField> = TFormData extends any[]\n ? unknown extends TField\n ? TFormData[number]\n : DeepValue<TFormData[number], TField>\n : DeepValue<TFormData, TField>\n\n// type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>\n// // ^?\n// type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>\n// // ^?\n// type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>\n// // ^?\n\nexport type FieldComponent<TParentData, TFormData> = <TField>({\n children,\n ...fieldOptions\n}: {\n children: (\n fieldApi: FieldApi<FieldValue<TParentData, TField>, TFormData>,\n ) => any\n} & Omit<\n UseFieldOptions<FieldValue<TParentData, TField>, TFormData>,\n 'name' | 'index'\n> &\n (TParentData extends any[]\n ? {\n name?: TField extends undefined ? TField : DeepKeys<TParentData>\n index: number\n }\n : {\n name: TField extends undefined ? TField : DeepKeys<TParentData>\n index?: never\n })) => any\n\nexport function Field<TData, TFormData>({\n children,\n ...fieldOptions\n}: {\n children: (fieldApi: FieldApi<TData, TFormData>) => any\n} & UseFieldOptions<TData, TFormData>) {\n const fieldApi = useField(fieldOptions as any)\n\n return (\n <formContext.Provider\n value={{ formApi: fieldApi.form, parentFieldName: fieldApi.name }}\n children={functionalUpdate(children, fieldApi as any)}\n />\n )\n}\n"],"names":["useField","opts","formApi","parentFieldName","useFormContext","fieldApi","useState","name","index","filter","d","undefined","join","api","FieldApi","form","Field","useIsomorphicLayoutEffect","update","useStore","store","mode","state","meta","Object","keys","value","length","mount","children","fieldOptions","React","createElement","formContext","Provider","functionalUpdate"],"mappings":";;;;;;;;AA2BO,SAASA,QAAQA,CACtBC,IAAuC,EACX;AAC5B;EACA,MAAM;IAAEC,OAAO;AAAEC,IAAAA,eAAAA;GAAiB,GAAGC,0BAAc,EAAE,CAAA;AAErD,EAAA,MAAM,CAACC,QAAQ,CAAC,GAAGC,cAAQ,CAA6B,MAAM;AAC5D,IAAA,MAAMC,IAAI,GAAG,CACX,OAAON,IAAI,CAACO,KAAK,KAAK,QAAQ,GAC1B,CAACL,eAAe,EAAEF,IAAI,CAACO,KAAK,EAAEP,IAAI,CAACM,IAAI,CAAC,GACxC,CAACJ,eAAe,EAAEF,IAAI,CAACM,IAAI,CAAC,EAE/BE,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKC,SAAS,CAAC,CAC9BC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ,IAAA,MAAMC,GAAG,GAAG,IAAIC,iBAAQ,CAAC;AAAE,MAAA,GAAGb,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAO;AAAEK,MAAAA,IAAI,EAAEA,IAAAA;AAAY,KAAC,CAAC,CAAA;IAEvEM,GAAG,CAACG,KAAK,GAAGA,KAAY,CAAA;AAExB,IAAA,OAAOH,GAAG,CAAA;AACZ,GAAC,CAAC,CAAA;;AAEF;AACF;AACA;AACA;AACEI,EAAAA,mDAAyB,CAAC,MAAM;IAC9BZ,QAAQ,CAACa,MAAM,CAAC;AAAE,MAAA,GAAGjB,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAAA;AAAQ,KAAU,CAAC,CAAA;AACtD,GAAC,CAAC,CAAA;AAEFiB,EAAAA,mBAAQ,CACNd,QAAQ,CAACe,KAAK,EACdnB,IAAI,CAACoB,IAAI,KAAK,OAAO,GAChBC,KAAU,IAAK;AACd,IAAA,OAAO,CAACA,KAAK,CAACC,IAAI,EAAEC,MAAM,CAACC,IAAI,CAACH,KAAK,CAACI,KAAK,IAAI,EAAE,CAAC,CAACC,MAAM,CAAC,CAAA;GAC3D,GACDhB,SACN,CAAC,CAAA;;AAED;EACAM,mDAAyB,CAAC,MAAMZ,QAAQ,CAACuB,KAAK,EAAE,EAAE,CAACvB,QAAQ,CAAC,CAAC,CAAA;AAE7D,EAAA,OAAOA,QAAQ,CAAA;AACjB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAuBO,SAASW,KAAKA,CAAmB;EACtCa,QAAQ;EACR,GAAGC,YAAAA;AAG+B,CAAC,EAAE;AACrC,EAAA,MAAMzB,QAAQ,GAAGL,QAAQ,CAAC8B,YAAmB,CAAC,CAAA;AAE9C,EAAA,oBACEC,KAAA,CAAAC,aAAA,CAACC,uBAAW,CAACC,QAAQ,EAAA;AACnBR,IAAAA,KAAK,EAAE;MAAExB,OAAO,EAAEG,QAAQ,CAACU,IAAI;MAAEZ,eAAe,EAAEE,QAAQ,CAACE,IAAAA;KAAO;AAClEsB,IAAAA,QAAQ,EAAEM,yBAAgB,CAACN,QAAQ,EAAExB,QAAe,CAAA;AAAE,GACvD,CAAC,CAAA;AAEN;;;;;"}
@@ -1,80 +0,0 @@
1
- import React__default, { useState } from 'react';
2
- import { useStore } from '@tanstack/react-store';
3
- import { FieldApi, functionalUpdate } from '@tanstack/form-core';
4
- import { useFormContext, formContext } from './formContext.legacy.js';
5
- import { useIsomorphicLayoutEffect } from './utils/useIsomorphicLayoutEffect.legacy.js';
6
-
7
- function useField(opts) {
8
- // Get the form API either manually or from context
9
- const {
10
- formApi,
11
- parentFieldName
12
- } = useFormContext();
13
- const [fieldApi] = useState(() => {
14
- const name = (typeof opts.index === 'number' ? [parentFieldName, opts.index, opts.name] : [parentFieldName, opts.name]).filter(d => d !== undefined).join('.');
15
- const api = new FieldApi({
16
- ...opts,
17
- form: formApi,
18
- name: name
19
- });
20
- api.Field = Field;
21
- return api;
22
- });
23
-
24
- /**
25
- * fieldApi.update should not have any side effects. Think of it like a `useRef`
26
- * that we need to keep updated every render with the most up-to-date information.
27
- */
28
- useIsomorphicLayoutEffect(() => {
29
- fieldApi.update({
30
- ...opts,
31
- form: formApi
32
- });
33
- });
34
- useStore(fieldApi.store, opts.mode === 'array' ? state => {
35
- return [state.meta, Object.keys(state.value || []).length];
36
- } : undefined);
37
-
38
- // Instantiates field meta and removes it when unrendered
39
- useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi]);
40
- return fieldApi;
41
- }
42
-
43
- // export type FieldValue<TFormData, TField> = TFormData extends any[]
44
- // ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`
45
- // ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>
46
- // : TField extends `[${infer TIndex extends number | 'i'}]`
47
- // ? TFormData[TIndex extends 'i' ? number : TIndex]
48
- // : never
49
- // : TField extends `${infer TPrefix}[${infer TIndex extends
50
- // | number
51
- // | 'i'}].${infer TRest}`
52
- // ? DeepValue<
53
- // DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],
54
- // TRest
55
- // >
56
- // : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`
57
- // ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]
58
- // : DeepValue<TFormData, TField>
59
- // type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>
60
- // // ^?
61
- // type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>
62
- // // ^?
63
- // type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>
64
- // // ^?
65
- function Field({
66
- children,
67
- ...fieldOptions
68
- }) {
69
- const fieldApi = useField(fieldOptions);
70
- return /*#__PURE__*/React__default.createElement(formContext.Provider, {
71
- value: {
72
- formApi: fieldApi.form,
73
- parentFieldName: fieldApi.name
74
- },
75
- children: functionalUpdate(children, fieldApi)
76
- });
77
- }
78
-
79
- export { Field, useField };
80
- //# sourceMappingURL=useField.legacy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useField.legacy.js","sources":["../../src/useField.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport type {\n DeepKeys,\n DeepValue,\n FieldOptions,\n Narrow,\n} from '@tanstack/form-core'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useFormContext, formContext } from './formContext'\nimport { useIsomorphicLayoutEffect } from './utils/useIsomorphicLayoutEffect'\nimport type { UseFieldOptions } from './types'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FieldApi<TData, TFormData> {\n Field: FieldComponent<TData, TFormData>\n }\n}\n\nexport type UseField<TFormData> = <TField extends DeepKeys<TFormData>>(\n opts?: { name: Narrow<TField> } & UseFieldOptions<\n DeepValue<TFormData, TField>,\n TFormData\n >,\n) => FieldApi<DeepValue<TFormData, TField>, TFormData>\n\nexport function useField<TData, TFormData>(\n opts: UseFieldOptions<TData, TFormData>,\n): FieldApi<TData, TFormData> {\n // Get the form API either manually or from context\n const { formApi, parentFieldName } = useFormContext()\n\n const [fieldApi] = useState<FieldApi<TData, TFormData>>(() => {\n const name = (\n typeof opts.index === 'number'\n ? [parentFieldName, opts.index, opts.name]\n : [parentFieldName, opts.name]\n )\n .filter((d) => d !== undefined)\n .join('.')\n\n const api = new FieldApi({ ...opts, form: formApi, name: name as any })\n\n api.Field = Field as any\n\n return api\n })\n\n /**\n * fieldApi.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 fieldApi.update({ ...opts, form: formApi } as never)\n })\n\n useStore(\n fieldApi.store as any,\n opts.mode === 'array'\n ? (state: any) => {\n return [state.meta, Object.keys(state.value || []).length]\n }\n : undefined,\n )\n\n // Instantiates field meta and removes it when unrendered\n useIsomorphicLayoutEffect(() => fieldApi.mount(), [fieldApi])\n\n return fieldApi\n}\n\n// export type FieldValue<TFormData, TField> = TFormData extends any[]\n// ? TField extends `[${infer TIndex extends number | 'i'}].${infer TRest}`\n// ? DeepValue<TFormData[TIndex extends 'i' ? number : TIndex], TRest>\n// : TField extends `[${infer TIndex extends number | 'i'}]`\n// ? TFormData[TIndex extends 'i' ? number : TIndex]\n// : never\n// : TField extends `${infer TPrefix}[${infer TIndex extends\n// | number\n// | 'i'}].${infer TRest}`\n// ? DeepValue<\n// DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex],\n// TRest\n// >\n// : TField extends `${infer TPrefix}[${infer TIndex extends number | 'i'}]`\n// ? DeepValue<TFormData, TPrefix>[TIndex extends 'i' ? number : TIndex]\n// : DeepValue<TFormData, TField>\n\nexport type FieldValue<TFormData, TField> = TFormData extends any[]\n ? unknown extends TField\n ? TFormData[number]\n : DeepValue<TFormData[number], TField>\n : DeepValue<TFormData, TField>\n\n// type Test1 = FieldValue<{ foo: { bar: string }[] }, 'foo'>\n// // ^?\n// type Test2 = FieldValue<{ foo: { bar: string }[] }, 'foo[i]'>\n// // ^?\n// type Test3 = FieldValue<{ foo: { bar: string }[] }, 'foo[2].bar'>\n// // ^?\n\nexport type FieldComponent<TParentData, TFormData> = <TField>({\n children,\n ...fieldOptions\n}: {\n children: (\n fieldApi: FieldApi<FieldValue<TParentData, TField>, TFormData>,\n ) => any\n} & Omit<\n UseFieldOptions<FieldValue<TParentData, TField>, TFormData>,\n 'name' | 'index'\n> &\n (TParentData extends any[]\n ? {\n name?: TField extends undefined ? TField : DeepKeys<TParentData>\n index: number\n }\n : {\n name: TField extends undefined ? TField : DeepKeys<TParentData>\n index?: never\n })) => any\n\nexport function Field<TData, TFormData>({\n children,\n ...fieldOptions\n}: {\n children: (fieldApi: FieldApi<TData, TFormData>) => any\n} & UseFieldOptions<TData, TFormData>) {\n const fieldApi = useField(fieldOptions as any)\n\n return (\n <formContext.Provider\n value={{ formApi: fieldApi.form, parentFieldName: fieldApi.name }}\n children={functionalUpdate(children, fieldApi as any)}\n />\n )\n}\n"],"names":["useField","opts","formApi","parentFieldName","useFormContext","fieldApi","useState","name","index","filter","d","undefined","join","api","FieldApi","form","Field","useIsomorphicLayoutEffect","update","useStore","store","mode","state","meta","Object","keys","value","length","mount","children","fieldOptions","React","createElement","formContext","Provider","functionalUpdate"],"mappings":";;;;;;AA2BO,SAASA,QAAQA,CACtBC,IAAuC,EACX;AAC5B;EACA,MAAM;IAAEC,OAAO;AAAEC,IAAAA,eAAAA;GAAiB,GAAGC,cAAc,EAAE,CAAA;AAErD,EAAA,MAAM,CAACC,QAAQ,CAAC,GAAGC,QAAQ,CAA6B,MAAM;AAC5D,IAAA,MAAMC,IAAI,GAAG,CACX,OAAON,IAAI,CAACO,KAAK,KAAK,QAAQ,GAC1B,CAACL,eAAe,EAAEF,IAAI,CAACO,KAAK,EAAEP,IAAI,CAACM,IAAI,CAAC,GACxC,CAACJ,eAAe,EAAEF,IAAI,CAACM,IAAI,CAAC,EAE/BE,MAAM,CAAEC,CAAC,IAAKA,CAAC,KAAKC,SAAS,CAAC,CAC9BC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEZ,IAAA,MAAMC,GAAG,GAAG,IAAIC,QAAQ,CAAC;AAAE,MAAA,GAAGb,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAO;AAAEK,MAAAA,IAAI,EAAEA,IAAAA;AAAY,KAAC,CAAC,CAAA;IAEvEM,GAAG,CAACG,KAAK,GAAGA,KAAY,CAAA;AAExB,IAAA,OAAOH,GAAG,CAAA;AACZ,GAAC,CAAC,CAAA;;AAEF;AACF;AACA;AACA;AACEI,EAAAA,yBAAyB,CAAC,MAAM;IAC9BZ,QAAQ,CAACa,MAAM,CAAC;AAAE,MAAA,GAAGjB,IAAI;AAAEc,MAAAA,IAAI,EAAEb,OAAAA;AAAQ,KAAU,CAAC,CAAA;AACtD,GAAC,CAAC,CAAA;AAEFiB,EAAAA,QAAQ,CACNd,QAAQ,CAACe,KAAK,EACdnB,IAAI,CAACoB,IAAI,KAAK,OAAO,GAChBC,KAAU,IAAK;AACd,IAAA,OAAO,CAACA,KAAK,CAACC,IAAI,EAAEC,MAAM,CAACC,IAAI,CAACH,KAAK,CAACI,KAAK,IAAI,EAAE,CAAC,CAACC,MAAM,CAAC,CAAA;GAC3D,GACDhB,SACN,CAAC,CAAA;;AAED;EACAM,yBAAyB,CAAC,MAAMZ,QAAQ,CAACuB,KAAK,EAAE,EAAE,CAACvB,QAAQ,CAAC,CAAC,CAAA;AAE7D,EAAA,OAAOA,QAAQ,CAAA;AACjB,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AAuBO,SAASW,KAAKA,CAAmB;EACtCa,QAAQ;EACR,GAAGC,YAAAA;AAG+B,CAAC,EAAE;AACrC,EAAA,MAAMzB,QAAQ,GAAGL,QAAQ,CAAC8B,YAAmB,CAAC,CAAA;AAE9C,EAAA,oBACEC,cAAA,CAAAC,aAAA,CAACC,WAAW,CAACC,QAAQ,EAAA;AACnBR,IAAAA,KAAK,EAAE;MAAExB,OAAO,EAAEG,QAAQ,CAACU,IAAI;MAAEZ,eAAe,EAAEE,QAAQ,CAACE,IAAAA;KAAO;AAClEsB,IAAAA,QAAQ,EAAEM,gBAAgB,CAACN,QAAQ,EAAExB,QAAe,CAAA;AAAE,GACvD,CAAC,CAAA;AAEN;;;;"}
@@ -1,52 +0,0 @@
1
- 'use strict';
2
-
3
- var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.cjs');
4
- var formCore = require('@tanstack/form-core');
5
- var reactStore = require('@tanstack/react-store');
6
- var React = require('react');
7
- var useField = require('./useField.cjs');
8
- var formContext = require('./formContext.cjs');
9
- var useIsomorphicLayoutEffect = require('./utils/useIsomorphicLayoutEffect.cjs');
10
-
11
- function useForm(opts) {
12
- const [formApi] = React.useState(() => {
13
- // @ts-ignore
14
- const api = new formCore.FormApi(opts);
15
-
16
- // eslint-disable-next-line react/display-name
17
- api.Provider = props => /*#__PURE__*/React.createElement(formContext.formContext.Provider, _rollupPluginBabelHelpers.extends({}, props, {
18
- value: {
19
- formApi: api
20
- }
21
- }));
22
- api.Field = useField.Field;
23
- api.useField = useField.useField;
24
- api.useStore = (
25
- // @ts-ignore
26
- selector) => {
27
- // eslint-disable-next-line react-hooks/rules-of-hooks
28
- return reactStore.useStore(api.store, selector);
29
- };
30
- api.Subscribe = (
31
- // @ts-ignore
32
- props) => {
33
- return formCore.functionalUpdate(props.children,
34
- // eslint-disable-next-line react-hooks/rules-of-hooks
35
- reactStore.useStore(api.store, props.selector));
36
- };
37
- return api;
38
- });
39
- formApi.useStore(state => state.isSubmitting);
40
-
41
- /**
42
- * formApi.update should not have any side effects. Think of it like a `useRef`
43
- * that we need to keep updated every render with the most up-to-date information.
44
- */
45
- useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
46
- formApi.update(opts);
47
- });
48
- return formApi;
49
- }
50
-
51
- exports.useForm = useForm;
52
- //# sourceMappingURL=useForm.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useForm.cjs","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 './utils/useIsomorphicLayoutEffect'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FormApi<TFormData> {\n Provider: (props: { children: any }) => any\n Field: FieldComponent<TFormData, TFormData>\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>(opts?: FormOptions<TData>): FormApi<TData> {\n const [formApi] = useState(() => {\n // @ts-ignore\n const api = new FormApi<TData>(opts)\n\n // eslint-disable-next-line react/display-name\n api.Provider = (props) => (\n <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"],"names":["useForm","opts","formApi","useState","api","FormApi","Provider","props","React","createElement","formContext","_extends","value","Field","useField","useStore","selector","store","Subscribe","functionalUpdate","children","state","isSubmitting","useIsomorphicLayoutEffect","update"],"mappings":";;;;;;;;;;AAyBO,SAASA,OAAOA,CAAQC,IAAyB,EAAkB;AACxE,EAAA,MAAM,CAACC,OAAO,CAAC,GAAGC,cAAQ,CAAC,MAAM;AAC/B;AACA,IAAA,MAAMC,GAAG,GAAG,IAAIC,gBAAO,CAAQJ,IAAI,CAAC,CAAA;;AAEpC;AACAG,IAAAA,GAAG,CAACE,QAAQ,GAAIC,KAAK,iBACnBC,KAAA,CAAAC,aAAA,CAACC,uBAAW,CAACJ,QAAQ,EAAAK,iCAAA,KAAKJ,KAAK,EAAA;AAAEK,MAAAA,KAAK,EAAE;AAAEV,QAAAA,OAAO,EAAEE,GAAAA;AAAI,OAAA;AAAE,KAAA,CAAE,CAC5D,CAAA;IACDA,GAAG,CAACS,KAAK,GAAGA,cAAY,CAAA;IACxBT,GAAG,CAACU,QAAQ,GAAGA,iBAAe,CAAA;IAC9BV,GAAG,CAACW,QAAQ,GAAG;AACb;AACAC,IAAAA,QAAQ,KACL;AACH;AACA,MAAA,OAAOD,mBAAQ,CAACX,GAAG,CAACa,KAAK,EAASD,QAAe,CAAC,CAAA;KACnD,CAAA;IACDZ,GAAG,CAACc,SAAS,GAAG;AACd;AACAX,IAAAA,KAAK,KACF;AACH,MAAA,OAAOY,yBAAgB,CACrBZ,KAAK,CAACa,QAAQ;AACd;MACAL,mBAAQ,CAACX,GAAG,CAACa,KAAK,EAASV,KAAK,CAACS,QAAe,CAClD,CAAC,CAAA;KACF,CAAA;AAED,IAAA,OAAOZ,GAAG,CAAA;AACZ,GAAC,CAAC,CAAA;EAEFF,OAAO,CAACa,QAAQ,CAAEM,KAAK,IAAKA,KAAK,CAACC,YAAY,CAAC,CAAA;;AAE/C;AACF;AACA;AACA;AACEC,EAAAA,mDAAyB,CAAC,MAAM;AAC9BrB,IAAAA,OAAO,CAACsB,MAAM,CAACvB,IAAI,CAAC,CAAA;AACtB,GAAC,CAAC,CAAA;AAEF,EAAA,OAAOC,OAAO,CAAA;AAChB;;;;"}