@tanstack/react-form 0.0.7 → 0.0.9

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 (37) hide show
  1. package/build/cjs/createFormFactory.js +2 -3
  2. package/build/cjs/createFormFactory.js.map +1 -1
  3. package/build/cjs/formContext.js.map +1 -1
  4. package/build/cjs/index.js +1 -2
  5. package/build/cjs/index.js.map +1 -1
  6. package/build/cjs/useField.js +46 -11
  7. package/build/cjs/useField.js.map +1 -1
  8. package/build/cjs/useForm.js +6 -4
  9. package/build/cjs/useForm.js.map +1 -1
  10. package/build/esm/index.js +47 -22
  11. package/build/esm/index.js.map +1 -1
  12. package/build/stats-html.html +1 -1
  13. package/build/stats-react.json +97 -153
  14. package/build/types/form-core/src/FieldApi.d.ts +2 -1
  15. package/build/types/form-core/src/FormApi.d.ts +2 -2
  16. package/build/types/form-core/src/utils.d.ts +7 -1
  17. package/build/types/index.d.ts +30 -22
  18. package/build/types/react-form/src/createFormFactory.d.ts +2 -3
  19. package/build/types/react-form/src/formContext.d.ts +8 -2
  20. package/build/types/react-form/src/index.d.ts +2 -4
  21. package/build/types/react-form/src/useField.d.ts +23 -8
  22. package/build/types/react-form/src/useForm.d.ts +2 -3
  23. package/build/umd/index.development.js +58 -32
  24. package/build/umd/index.development.js.map +1 -1
  25. package/build/umd/index.production.js +2 -2
  26. package/build/umd/index.production.js.map +1 -1
  27. package/package.json +2 -2
  28. package/src/createFormFactory.ts +4 -5
  29. package/src/formContext.ts +4 -1
  30. package/src/index.ts +2 -5
  31. package/src/useField.tsx +138 -0
  32. package/src/useForm.tsx +7 -6
  33. package/build/cjs/Field.js +0 -54
  34. package/build/cjs/Field.js.map +0 -1
  35. package/build/types/react-form/src/Field.d.ts +0 -9
  36. package/src/Field.tsx +0 -36
  37. package/src/useField.ts +0 -50
@@ -11,11 +11,11 @@
11
11
  "children": [
12
12
  {
13
13
  "name": "@tanstack+store@0.0.1-beta.84/node_modules/@tanstack/store/build/esm/index.js",
14
- "uid": "b353-47"
14
+ "uid": "766a-45"
15
15
  },
16
16
  {
17
17
  "name": "@tanstack+react-store@0.0.1-beta.84_react-dom@18.2.0_react@18.2.0/node_modules/@tanstack/react-store/build/esm/index.js",
18
- "uid": "b353-53"
18
+ "uid": "766a-51"
19
19
  }
20
20
  ]
21
21
  },
@@ -24,33 +24,29 @@
24
24
  "children": [
25
25
  {
26
26
  "name": "form-core/build/esm/index.js",
27
- "uid": "b353-49"
27
+ "uid": "766a-47"
28
28
  },
29
29
  {
30
30
  "name": "react-form/src",
31
31
  "children": [
32
32
  {
33
- "uid": "b353-55",
33
+ "uid": "766a-53",
34
34
  "name": "formContext.ts"
35
35
  },
36
36
  {
37
- "uid": "b353-57",
38
- "name": "useField.ts"
37
+ "uid": "766a-55",
38
+ "name": "useField.tsx"
39
39
  },
40
40
  {
41
- "uid": "b353-59",
42
- "name": "Field.tsx"
43
- },
44
- {
45
- "uid": "b353-61",
41
+ "uid": "766a-57",
46
42
  "name": "useForm.tsx"
47
43
  },
48
44
  {
49
- "uid": "b353-63",
45
+ "uid": "766a-59",
50
46
  "name": "createFormFactory.ts"
51
47
  },
52
48
  {
53
- "uid": "b353-65",
49
+ "uid": "766a-61",
54
50
  "name": "index.ts"
55
51
  }
56
52
  ]
@@ -58,7 +54,7 @@
58
54
  ]
59
55
  },
60
56
  {
61
- "uid": "b353-51",
57
+ "uid": "766a-49",
62
58
  "name": "\u0000rollupPluginBabelHelpers.js"
63
59
  }
64
60
  ]
@@ -67,334 +63,282 @@
67
63
  "isRoot": true
68
64
  },
69
65
  "nodeParts": {
70
- "b353-47": {
66
+ "766a-45": {
71
67
  "renderedLength": 1288,
72
68
  "gzipLength": 497,
73
69
  "brotliLength": 0,
74
- "mainUid": "b353-46"
70
+ "mainUid": "766a-44"
75
71
  },
76
- "b353-49": {
77
- "renderedLength": 23458,
78
- "gzipLength": 5139,
72
+ "766a-47": {
73
+ "renderedLength": 23508,
74
+ "gzipLength": 5149,
79
75
  "brotliLength": 0,
80
- "mainUid": "b353-48"
76
+ "mainUid": "766a-46"
81
77
  },
82
- "b353-51": {
78
+ "766a-49": {
83
79
  "renderedLength": 431,
84
80
  "gzipLength": 240,
85
81
  "brotliLength": 0,
86
- "mainUid": "b353-50"
82
+ "mainUid": "766a-48"
87
83
  },
88
- "b353-53": {
84
+ "766a-51": {
89
85
  "renderedLength": 978,
90
86
  "gzipLength": 456,
91
87
  "brotliLength": 0,
92
- "mainUid": "b353-52"
88
+ "mainUid": "766a-50"
93
89
  },
94
- "b353-55": {
90
+ "766a-53": {
95
91
  "renderedLength": 296,
96
92
  "gzipLength": 200,
97
93
  "brotliLength": 0,
98
- "mainUid": "b353-54"
94
+ "mainUid": "766a-52"
99
95
  },
100
- "b353-57": {
101
- "renderedLength": 610,
102
- "gzipLength": 324,
96
+ "766a-55": {
97
+ "renderedLength": 2096,
98
+ "gzipLength": 779,
103
99
  "brotliLength": 0,
104
- "mainUid": "b353-56"
100
+ "mainUid": "766a-54"
105
101
  },
106
- "b353-59": {
107
- "renderedLength": 320,
108
- "gzipLength": 203,
102
+ "766a-57": {
103
+ "renderedLength": 1287,
104
+ "gzipLength": 495,
109
105
  "brotliLength": 0,
110
- "mainUid": "b353-58"
106
+ "mainUid": "766a-56"
111
107
  },
112
- "b353-61": {
113
- "renderedLength": 1264,
114
- "gzipLength": 486,
108
+ "766a-59": {
109
+ "renderedLength": 217,
110
+ "gzipLength": 138,
115
111
  "brotliLength": 0,
116
- "mainUid": "b353-60"
112
+ "mainUid": "766a-58"
117
113
  },
118
- "b353-63": {
119
- "renderedLength": 242,
120
- "gzipLength": 153,
121
- "brotliLength": 0,
122
- "mainUid": "b353-62"
123
- },
124
- "b353-65": {
114
+ "766a-61": {
125
115
  "renderedLength": 0,
126
116
  "gzipLength": 0,
127
117
  "brotliLength": 0,
128
- "mainUid": "b353-64"
118
+ "mainUid": "766a-60"
129
119
  }
130
120
  },
131
121
  "nodeMetas": {
132
- "b353-46": {
122
+ "766a-44": {
133
123
  "id": "/node_modules/.pnpm/@tanstack+store@0.0.1-beta.84/node_modules/@tanstack/store/build/esm/index.js",
134
124
  "moduleParts": {
135
- "index.production.js": "b353-47"
125
+ "index.production.js": "766a-45"
136
126
  },
137
127
  "imported": [],
138
128
  "importedBy": [
139
129
  {
140
- "uid": "b353-48"
130
+ "uid": "766a-46"
141
131
  },
142
132
  {
143
- "uid": "b353-52"
133
+ "uid": "766a-50"
144
134
  }
145
135
  ]
146
136
  },
147
- "b353-48": {
137
+ "766a-46": {
148
138
  "id": "/packages/form-core/build/esm/index.js",
149
139
  "moduleParts": {
150
- "index.production.js": "b353-49"
140
+ "index.production.js": "766a-47"
151
141
  },
152
142
  "imported": [
153
143
  {
154
- "uid": "b353-46"
144
+ "uid": "766a-44"
155
145
  }
156
146
  ],
157
147
  "importedBy": [
158
148
  {
159
- "uid": "b353-64"
149
+ "uid": "766a-60"
160
150
  },
161
151
  {
162
- "uid": "b353-60"
152
+ "uid": "766a-56"
163
153
  },
164
154
  {
165
- "uid": "b353-58"
166
- },
167
- {
168
- "uid": "b353-56"
155
+ "uid": "766a-54"
169
156
  }
170
157
  ]
171
158
  },
172
- "b353-50": {
159
+ "766a-48": {
173
160
  "id": "\u0000rollupPluginBabelHelpers.js",
174
161
  "moduleParts": {
175
- "index.production.js": "b353-51"
162
+ "index.production.js": "766a-49"
176
163
  },
177
164
  "imported": [],
178
165
  "importedBy": [
179
166
  {
180
- "uid": "b353-60"
167
+ "uid": "766a-56"
181
168
  }
182
169
  ]
183
170
  },
184
- "b353-52": {
171
+ "766a-50": {
185
172
  "id": "/node_modules/.pnpm/@tanstack+react-store@0.0.1-beta.84_react-dom@18.2.0_react@18.2.0/node_modules/@tanstack/react-store/build/esm/index.js",
186
173
  "moduleParts": {
187
- "index.production.js": "b353-53"
174
+ "index.production.js": "766a-51"
188
175
  },
189
176
  "imported": [
190
177
  {
191
- "uid": "b353-67"
178
+ "uid": "766a-63"
192
179
  },
193
180
  {
194
- "uid": "b353-46"
181
+ "uid": "766a-44"
195
182
  }
196
183
  ],
197
184
  "importedBy": [
198
185
  {
199
- "uid": "b353-60"
186
+ "uid": "766a-56"
200
187
  },
201
188
  {
202
- "uid": "b353-56"
189
+ "uid": "766a-54"
203
190
  }
204
191
  ]
205
192
  },
206
- "b353-54": {
193
+ "766a-52": {
207
194
  "id": "/packages/react-form/src/formContext.ts",
208
195
  "moduleParts": {
209
- "index.production.js": "b353-55"
196
+ "index.production.js": "766a-53"
210
197
  },
211
198
  "imported": [
212
199
  {
213
- "uid": "b353-66"
200
+ "uid": "766a-62"
214
201
  }
215
202
  ],
216
203
  "importedBy": [
217
204
  {
218
- "uid": "b353-60"
205
+ "uid": "766a-56"
219
206
  },
220
207
  {
221
- "uid": "b353-56"
208
+ "uid": "766a-54"
222
209
  }
223
210
  ]
224
211
  },
225
- "b353-56": {
226
- "id": "/packages/react-form/src/useField.ts",
212
+ "766a-54": {
213
+ "id": "/packages/react-form/src/useField.tsx",
227
214
  "moduleParts": {
228
- "index.production.js": "b353-57"
215
+ "index.production.js": "766a-55"
229
216
  },
230
217
  "imported": [
231
218
  {
232
- "uid": "b353-66"
219
+ "uid": "766a-62"
233
220
  },
234
221
  {
235
- "uid": "b353-52"
222
+ "uid": "766a-50"
236
223
  },
237
224
  {
238
- "uid": "b353-48"
225
+ "uid": "766a-46"
239
226
  },
240
227
  {
241
- "uid": "b353-54"
228
+ "uid": "766a-52"
242
229
  }
243
230
  ],
244
231
  "importedBy": [
245
232
  {
246
- "uid": "b353-64"
247
- },
248
- {
249
- "uid": "b353-60"
233
+ "uid": "766a-60"
250
234
  },
251
235
  {
252
- "uid": "b353-58"
236
+ "uid": "766a-56"
253
237
  },
254
238
  {
255
- "uid": "b353-62"
239
+ "uid": "766a-58"
256
240
  }
257
241
  ]
258
242
  },
259
- "b353-58": {
260
- "id": "/packages/react-form/src/Field.tsx",
261
- "moduleParts": {
262
- "index.production.js": "b353-59"
263
- },
264
- "imported": [
265
- {
266
- "uid": "b353-66"
267
- },
268
- {
269
- "uid": "b353-48"
270
- },
271
- {
272
- "uid": "b353-56"
273
- }
274
- ],
275
- "importedBy": [
276
- {
277
- "uid": "b353-64"
278
- },
279
- {
280
- "uid": "b353-60"
281
- },
282
- {
283
- "uid": "b353-62"
284
- }
285
- ]
286
- },
287
- "b353-60": {
243
+ "766a-56": {
288
244
  "id": "/packages/react-form/src/useForm.tsx",
289
245
  "moduleParts": {
290
- "index.production.js": "b353-61"
246
+ "index.production.js": "766a-57"
291
247
  },
292
248
  "imported": [
293
249
  {
294
- "uid": "b353-50"
250
+ "uid": "766a-48"
295
251
  },
296
252
  {
297
- "uid": "b353-48"
253
+ "uid": "766a-46"
298
254
  },
299
255
  {
300
- "uid": "b353-52"
256
+ "uid": "766a-50"
301
257
  },
302
258
  {
303
- "uid": "b353-66"
259
+ "uid": "766a-62"
304
260
  },
305
261
  {
306
- "uid": "b353-58"
262
+ "uid": "766a-54"
307
263
  },
308
264
  {
309
- "uid": "b353-56"
310
- },
311
- {
312
- "uid": "b353-54"
265
+ "uid": "766a-52"
313
266
  }
314
267
  ],
315
268
  "importedBy": [
316
269
  {
317
- "uid": "b353-64"
270
+ "uid": "766a-60"
318
271
  },
319
272
  {
320
- "uid": "b353-62"
273
+ "uid": "766a-58"
321
274
  }
322
275
  ]
323
276
  },
324
- "b353-62": {
277
+ "766a-58": {
325
278
  "id": "/packages/react-form/src/createFormFactory.ts",
326
279
  "moduleParts": {
327
- "index.production.js": "b353-63"
280
+ "index.production.js": "766a-59"
328
281
  },
329
282
  "imported": [
330
283
  {
331
- "uid": "b353-56"
332
- },
333
- {
334
- "uid": "b353-60"
284
+ "uid": "766a-54"
335
285
  },
336
286
  {
337
- "uid": "b353-58"
287
+ "uid": "766a-56"
338
288
  }
339
289
  ],
340
290
  "importedBy": [
341
291
  {
342
- "uid": "b353-64"
292
+ "uid": "766a-60"
343
293
  }
344
294
  ]
345
295
  },
346
- "b353-64": {
296
+ "766a-60": {
347
297
  "id": "/packages/react-form/src/index.ts",
348
298
  "moduleParts": {
349
- "index.production.js": "b353-65"
299
+ "index.production.js": "766a-61"
350
300
  },
351
301
  "imported": [
352
302
  {
353
- "uid": "b353-48"
303
+ "uid": "766a-46"
354
304
  },
355
305
  {
356
- "uid": "b353-60"
306
+ "uid": "766a-56"
357
307
  },
358
308
  {
359
- "uid": "b353-58"
309
+ "uid": "766a-54"
360
310
  },
361
311
  {
362
- "uid": "b353-56"
363
- },
364
- {
365
- "uid": "b353-62"
312
+ "uid": "766a-58"
366
313
  }
367
314
  ],
368
315
  "importedBy": [],
369
316
  "isEntry": true
370
317
  },
371
- "b353-66": {
318
+ "766a-62": {
372
319
  "id": "react",
373
320
  "moduleParts": {},
374
321
  "imported": [],
375
322
  "importedBy": [
376
323
  {
377
- "uid": "b353-60"
378
- },
379
- {
380
- "uid": "b353-58"
324
+ "uid": "766a-56"
381
325
  },
382
326
  {
383
- "uid": "b353-56"
327
+ "uid": "766a-54"
384
328
  },
385
329
  {
386
- "uid": "b353-54"
330
+ "uid": "766a-52"
387
331
  }
388
332
  ],
389
333
  "isExternal": true
390
334
  },
391
- "b353-67": {
335
+ "766a-63": {
392
336
  "id": "use-sync-external-store/shim/with-selector",
393
337
  "moduleParts": {},
394
338
  "imported": [],
395
339
  "importedBy": [
396
340
  {
397
- "uid": "b353-52"
341
+ "uid": "766a-50"
398
342
  }
399
343
  ],
400
344
  "isExternal": true
@@ -4,6 +4,7 @@ import { Store } from '@tanstack/store';
4
4
  export type ValidationCause = 'change' | 'blur' | 'submit';
5
5
  export interface FieldOptions<TData, TFormData> {
6
6
  name: unknown extends TFormData ? string : DeepKeys<TFormData>;
7
+ index?: TData extends any[] ? number : never;
7
8
  defaultValue?: TData;
8
9
  validate?: (value: TData, fieldApi: FieldApi<TData, TFormData>) => ValidationError;
9
10
  validateAsync?: (value: TData, fieldApi: FieldApi<TData, TFormData>) => ValidationError | Promise<ValidationError>;
@@ -63,7 +64,7 @@ export declare class FieldApi<TData, TFormData> {
63
64
  getMeta: () => FieldMeta;
64
65
  setMeta: (updater: Updater<FieldMeta>) => void;
65
66
  getInfo: () => Record<DeepKeys<TFormData>, import("./FormApi").FieldInfo<TFormData>>[DeepKeys<TFormData>];
66
- pushValue: (value: TData) => void;
67
+ pushValue: (value: TData extends any[] ? TData[number] : never) => void;
67
68
  insertValue: (index: number, value: TData) => void;
68
69
  removeValue: (index: number) => void;
69
70
  swapValues: (aIndex: number, bIndex: number) => void;
@@ -53,7 +53,7 @@ export declare class FormApi<TFormData> {
53
53
  fieldName?: string;
54
54
  validationMeta: ValidationMeta;
55
55
  constructor(opts?: FormOptions<TFormData>);
56
- update: (options: FormOptions<TFormData>) => void;
56
+ update: (options?: FormOptions<TFormData>) => void;
57
57
  reset: () => void;
58
58
  validateAllFields: () => Promise<ValidationError[]>;
59
59
  validateForm: () => Promise<ValidationError>;
@@ -71,7 +71,7 @@ export declare class FormApi<TFormData> {
71
71
  insertFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, value: DeepValue<TFormData, TField>, opts?: {
72
72
  touch?: boolean;
73
73
  }) => void;
74
- spliceFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, opts?: {
74
+ removeFieldValue: <TField extends DeepKeys<TFormData>>(field: TField, index: number, opts?: {
75
75
  touch?: boolean;
76
76
  }) => void;
77
77
  swapFieldValues: <TField extends DeepKeys<TFormData>>(field: TField, index1: number, index2: number) => void;
@@ -10,7 +10,13 @@ type IsTuple<T> = T extends readonly any[] & {
10
10
  length: infer Length;
11
11
  } ? Length extends Index40 ? T : never : never;
12
12
  type AllowedIndexes<Tuple extends ReadonlyArray<any>, Keys extends number = never> = Tuple extends readonly [] ? Keys : Tuple extends readonly [infer _, ...infer Tail] ? AllowedIndexes<Tail, Keys | Tail['length']> : Keys;
13
- export type DeepKeys<T> = unknown extends T ? keyof T : object extends T ? string : T extends readonly any[] & IsTuple<T> ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>> : T extends any[] ? never & 'Dynamic length array indexing is not supported' : T extends Date ? never : T extends object ? (keyof T & string) | DeepKeysPrefix<T, keyof T> : never;
13
+ export type DeepKeys<T> = unknown extends T ? keyof T : object extends T ? string : T extends readonly any[] & IsTuple<T> ? AllowedIndexes<T> | DeepKeysPrefix<T, AllowedIndexes<T>> : T extends any[] ? DeepKeys<T[number]> : T extends Date ? never : T extends object ? (keyof T & string) | DeepKeysPrefix<T, keyof T> : never;
14
14
  type DeepKeysPrefix<T, TPrefix> = TPrefix extends keyof T & (number | string) ? `${TPrefix}.${DeepKeys<T[TPrefix]> & string}` : never;
15
15
  export type DeepValue<T, TProp> = T extends Record<string | number, any> ? TProp extends `${infer TBranch}.${infer TDeepProp}` ? DeepValue<T[TBranch], TDeepProp> : T[TProp & string] : never;
16
+ type Narrowable = string | number | bigint | boolean;
17
+ type NarrowRaw<A> = (A extends [] ? [] : never) | (A extends Narrowable ? A : never) | {
18
+ [K in keyof A]: A[K] extends Function ? A[K] : NarrowRaw<A[K]>;
19
+ };
20
+ export type Narrow<A> = Try<A, [], NarrowRaw<A>>;
21
+ type Try<A1, A2, Catch = never> = A1 extends A2 ? A1 : Catch;
16
22
  export {};
@@ -8,35 +8,36 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- import { DeepKeys, FieldApi, DeepValue, FieldOptions, FormOptions, FormApi, FormState } from '@tanstack/form-core';
11
+ import { FieldApi, DeepKeys, FieldOptions, Narrow, DeepValue, FormState, FormOptions, FormApi } from '@tanstack/form-core';
12
12
  export { ChangeProps, DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, InputProps, RequiredByKey, Updater, UpdaterFn, UserChangeProps, UserInputProps, ValidationCause, ValidationError, ValidationMeta, functionalUpdate } from '@tanstack/form-core';
13
13
  import { NoInfer } from '@tanstack/react-store';
14
14
  import React from 'react';
15
15
 
16
- type FieldComponent<TFormData> = <TField extends DeepKeys<TFormData>>({ children, ...fieldOptions }: {
17
- children: (fieldApi: FieldApi<DeepValue<TFormData, TField>, TFormData>) => any;
18
- name: TField;
19
- } & Omit<FieldOptions<DeepValue<TFormData, TField>, TFormData>, 'name'>) => any;
20
- declare function Field<TData, TFormData>({ children, ...fieldOptions }: {
21
- children: (fieldApi: FieldApi<TData, TFormData>) => any;
22
- } & FieldOptions<TData, TFormData>): any;
23
-
24
- type FormFactory<TFormData> = {
25
- useForm: (opts?: FormOptions<TFormData>) => FormApi<TFormData>;
26
- useField: UseField<TFormData>;
27
- Field: FieldComponent<TFormData>;
28
- };
29
- declare function createFormFactory<TFormData>(defaultOpts?: FormOptions<TFormData>): FormFactory<TFormData>;
30
-
31
16
  declare module '@tanstack/form-core' {
32
- interface FieldOptions<TData, TFormData> {
33
- formFactory?: FormFactory<TFormData>;
17
+ interface FieldApi<TData, TFormData> {
18
+ Field: FieldComponent<TData, TFormData>;
34
19
  }
35
20
  }
21
+ type UseFieldOptions<TData, TFormData> = FieldOptions<TData, TFormData> & {
22
+ mode?: 'value' | 'array';
23
+ };
36
24
  type UseField<TFormData> = <TField extends DeepKeys<TFormData>>(opts?: {
37
- name: TField;
38
- } & FieldOptions<DeepValue<TFormData, TField>, TFormData>) => FieldApi<DeepValue<TFormData, TField>, TFormData>;
39
- declare function useField<TData, TFormData>(opts: FieldOptions<TData, TFormData> & {}): FieldApi<TData, TFormData>;
25
+ name: Narrow<TField>;
26
+ } & UseFieldOptions<DeepValue<TFormData, TField>, TFormData>) => FieldApi<DeepValue<TFormData, TField>, TFormData>;
27
+ declare function useField<TData, TFormData>(opts: UseFieldOptions<TData, TFormData>): FieldApi<TData, TFormData>;
28
+ type FieldValue<TFormData, TField> = TFormData extends any[] ? unknown extends TField ? TFormData[number] : DeepValue<TFormData[number], TField> : DeepValue<TFormData, TField>;
29
+ type FieldComponent<TParentData, TFormData> = <TField>({ children, ...fieldOptions }: {
30
+ children: (fieldApi: FieldApi<FieldValue<TParentData, TField>, TFormData>) => any;
31
+ } & Omit<UseFieldOptions<FieldValue<TParentData, TField>, TFormData>, 'name' | 'index'> & (TParentData extends any[] ? {
32
+ name?: TField extends undefined ? TField : DeepKeys<TParentData>;
33
+ index: number;
34
+ } : {
35
+ name: TField extends undefined ? TField : DeepKeys<TParentData>;
36
+ index?: never;
37
+ })) => any;
38
+ declare function Field<TData, TFormData>({ children, ...fieldOptions }: {
39
+ children: (fieldApi: FieldApi<TData, TFormData>) => any;
40
+ } & UseFieldOptions<TData, TFormData>): JSX.Element;
40
41
 
41
42
  declare module '@tanstack/form-core' {
42
43
  interface Register {
@@ -44,7 +45,7 @@ declare module '@tanstack/form-core' {
44
45
  }
45
46
  interface FormApi<TFormData> {
46
47
  Form: FormComponent;
47
- Field: FieldComponent<TFormData>;
48
+ Field: FieldComponent<TFormData, TFormData>;
48
49
  useField: UseField<TFormData>;
49
50
  useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => TSelected;
50
51
  Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
@@ -60,4 +61,11 @@ type FormProps = React.HTMLProps<HTMLFormElement> & {
60
61
  };
61
62
  type FormComponent = (props: FormProps) => any;
62
63
 
64
+ type FormFactory<TFormData> = {
65
+ useForm: (opts?: FormOptions<TFormData>) => FormApi<TFormData>;
66
+ useField: UseField<TFormData>;
67
+ Field: FieldComponent<TFormData, TFormData>;
68
+ };
69
+ declare function createFormFactory<TFormData>(defaultOpts?: FormOptions<TFormData>): FormFactory<TFormData>;
70
+
63
71
  export { Field, FieldComponent, FormComponent, FormFactory, FormProps, UseField, createFormFactory, useField, useForm };
@@ -1,9 +1,8 @@
1
1
  import type { FormApi, FormOptions } from '@tanstack/form-core';
2
- import { type UseField } from './useField';
3
- import { type FieldComponent } from './Field';
2
+ import { type UseField, type FieldComponent } from './useField';
4
3
  export type FormFactory<TFormData> = {
5
4
  useForm: (opts?: FormOptions<TFormData>) => FormApi<TFormData>;
6
5
  useField: UseField<TFormData>;
7
- Field: FieldComponent<TFormData>;
6
+ Field: FieldComponent<TFormData, TFormData>;
8
7
  };
9
8
  export declare function createFormFactory<TFormData>(defaultOpts?: FormOptions<TFormData>): FormFactory<TFormData>;
@@ -1,4 +1,10 @@
1
1
  import type { FormApi } from '@tanstack/form-core';
2
2
  import * as React from 'react';
3
- export declare const formContext: React.Context<FormApi<any> | null>;
4
- export declare function useFormContext(): FormApi<any>;
3
+ export declare const formContext: React.Context<{
4
+ formApi: FormApi<any>;
5
+ parentFieldName?: string | undefined;
6
+ } | null>;
7
+ export declare function useFormContext(): {
8
+ formApi: FormApi<any>;
9
+ parentFieldName?: string | undefined;
10
+ };
@@ -2,9 +2,7 @@ export type { ChangeProps, DeepKeys, DeepValue, FieldApiOptions, FieldInfo, Fiel
2
2
  export { FormApi, FieldApi, functionalUpdate } from '@tanstack/form-core';
3
3
  export type { FormComponent, FormProps } from './useForm';
4
4
  export { useForm } from './useForm';
5
- export type { FieldComponent } from './Field';
6
- export { Field } from './Field';
7
- export type { UseField } from './useField';
8
- export { useField } from './useField';
5
+ export type { UseField, FieldComponent } from './useField';
6
+ export { useField, Field } from './useField';
9
7
  export type { FormFactory } from './createFormFactory';
10
8
  export { createFormFactory } from './createFormFactory';