@tanstack/solid-form 1.32.1 → 1.33.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.
@@ -0,0 +1,622 @@
1
+ import { FormGroupApi, functionalUpdate } from '@tanstack/form-core'
2
+ import {
3
+ createComponent,
4
+ createComputed,
5
+ createSignal,
6
+ onCleanup,
7
+ onMount,
8
+ } from 'solid-js'
9
+ import { useStore } from '@tanstack/solid-store'
10
+ import type {
11
+ DeepKeys,
12
+ DeepValue,
13
+ FormAsyncValidateOrFn,
14
+ FormGroupApiOptions,
15
+ FormGroupAsyncValidateOrFn,
16
+ FormGroupOptions,
17
+ FormGroupValidateOrFn,
18
+ FormValidateOrFn,
19
+ } from '@tanstack/form-core'
20
+ import type { Accessor, JSX, JSXElement } from 'solid-js'
21
+
22
+ // ugly way to trick solid into triggering updates for changes on the formGroupApi
23
+ function makeFormGroupReactive<
24
+ TParentData,
25
+ TName extends DeepKeys<TParentData>,
26
+ TData extends DeepValue<TParentData, TName>,
27
+ TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
28
+ TOnChange extends
29
+ | undefined
30
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
31
+ TOnChangeAsync extends
32
+ | undefined
33
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
34
+ TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
35
+ TOnBlurAsync extends
36
+ | undefined
37
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
38
+ TOnSubmit extends
39
+ | undefined
40
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
41
+ TOnSubmitAsync extends
42
+ | undefined
43
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
44
+ TOnDynamic extends
45
+ | undefined
46
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
47
+ TOnDynamicAsync extends
48
+ | undefined
49
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
50
+ TSubmitMeta,
51
+ TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
52
+ TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
53
+ TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
54
+ TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
55
+ TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
56
+ TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
57
+ TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
58
+ TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,
59
+ TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
60
+ TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
61
+ TParentSubmitMeta,
62
+ >(
63
+ formGroupApi: FormGroupApi<
64
+ TParentData,
65
+ TName,
66
+ TData,
67
+ TOnMount,
68
+ TOnChange,
69
+ TOnChangeAsync,
70
+ TOnBlur,
71
+ TOnBlurAsync,
72
+ TOnSubmit,
73
+ TOnSubmitAsync,
74
+ TOnDynamic,
75
+ TOnDynamicAsync,
76
+ TSubmitMeta,
77
+ TFormOnMount,
78
+ TFormOnChange,
79
+ TFormOnChangeAsync,
80
+ TFormOnBlur,
81
+ TFormOnBlurAsync,
82
+ TFormOnSubmit,
83
+ TFormOnSubmitAsync,
84
+ TFormOnDynamic,
85
+ TFormOnDynamicAsync,
86
+ TFormOnServer,
87
+ TParentSubmitMeta
88
+ >,
89
+ ): () => FormGroupApi<
90
+ TParentData,
91
+ TName,
92
+ TData,
93
+ TOnMount,
94
+ TOnChange,
95
+ TOnChangeAsync,
96
+ TOnBlur,
97
+ TOnBlurAsync,
98
+ TOnSubmit,
99
+ TOnSubmitAsync,
100
+ TOnDynamic,
101
+ TOnDynamicAsync,
102
+ TSubmitMeta,
103
+ TFormOnMount,
104
+ TFormOnChange,
105
+ TFormOnChangeAsync,
106
+ TFormOnBlur,
107
+ TFormOnBlurAsync,
108
+ TFormOnSubmit,
109
+ TFormOnSubmitAsync,
110
+ TFormOnDynamic,
111
+ TFormOnDynamicAsync,
112
+ TFormOnServer,
113
+ TParentSubmitMeta
114
+ > {
115
+ const [group, setGroup] = createSignal(formGroupApi, { equals: false })
116
+ // Handle shallow comparison to make sure that Derived doesn't create a new setGroup call every time
117
+ const store = useStore(formGroupApi.store, (store) => store)
118
+ // Run before initial render
119
+ createComputed(() => {
120
+ // Use the store to track dependencies
121
+ store()
122
+ setGroup(formGroupApi)
123
+ })
124
+ return group
125
+ }
126
+
127
+ export function createFormGroup<
128
+ TParentData,
129
+ TName extends DeepKeys<TParentData>,
130
+ TData extends DeepValue<TParentData, TName>,
131
+ TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
132
+ TOnChange extends
133
+ | undefined
134
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
135
+ TOnChangeAsync extends
136
+ | undefined
137
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
138
+ TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
139
+ TOnBlurAsync extends
140
+ | undefined
141
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
142
+ TOnSubmit extends
143
+ | undefined
144
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
145
+ TOnSubmitAsync extends
146
+ | undefined
147
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
148
+ TOnDynamic extends
149
+ | undefined
150
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
151
+ TOnDynamicAsync extends
152
+ | undefined
153
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
154
+ TSubmitMeta,
155
+ TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
156
+ TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
157
+ TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
158
+ TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
159
+ TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
160
+ TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
161
+ TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
162
+ TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,
163
+ TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
164
+ TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
165
+ TParentSubmitMeta,
166
+ >(
167
+ opts: () => FormGroupApiOptions<
168
+ TParentData,
169
+ TName,
170
+ TData,
171
+ TOnMount,
172
+ TOnChange,
173
+ TOnChangeAsync,
174
+ TOnBlur,
175
+ TOnBlurAsync,
176
+ TOnSubmit,
177
+ TOnSubmitAsync,
178
+ TOnDynamic,
179
+ TOnDynamicAsync,
180
+ TSubmitMeta,
181
+ TFormOnMount,
182
+ TFormOnChange,
183
+ TFormOnChangeAsync,
184
+ TFormOnBlur,
185
+ TFormOnBlurAsync,
186
+ TFormOnSubmit,
187
+ TFormOnSubmitAsync,
188
+ TFormOnDynamic,
189
+ TFormOnDynamicAsync,
190
+ TFormOnServer,
191
+ TParentSubmitMeta
192
+ >,
193
+ ) {
194
+ const options = opts()
195
+
196
+ const api = new FormGroupApi(options)
197
+
198
+ let mounted = false
199
+ // Instantiates form group meta and removes it when unrendered
200
+ onMount(() => {
201
+ const cleanupFn = api.mount()
202
+ mounted = true
203
+ onCleanup(() => {
204
+ cleanupFn()
205
+ mounted = false
206
+ })
207
+ })
208
+
209
+ /**
210
+ * formGroupApi.update should not have any side effects. Think of it like a `useRef`
211
+ * that we need to keep updated every render with the most up-to-date information.
212
+ *
213
+ * createComputed to make sure this effect runs before render effects
214
+ */
215
+ createComputed(() => {
216
+ if (!mounted) return
217
+ api.update(opts())
218
+ })
219
+
220
+ return makeFormGroupReactive<
221
+ TParentData,
222
+ TName,
223
+ TData,
224
+ TOnMount,
225
+ TOnChange,
226
+ TOnChangeAsync,
227
+ TOnBlur,
228
+ TOnBlurAsync,
229
+ TOnSubmit,
230
+ TOnSubmitAsync,
231
+ TOnDynamic,
232
+ TOnDynamicAsync,
233
+ TSubmitMeta,
234
+ TFormOnMount,
235
+ TFormOnChange,
236
+ TFormOnChangeAsync,
237
+ TFormOnBlur,
238
+ TFormOnBlurAsync,
239
+ TFormOnSubmit,
240
+ TFormOnSubmitAsync,
241
+ TFormOnDynamic,
242
+ TFormOnDynamicAsync,
243
+ TFormOnServer,
244
+ TParentSubmitMeta
245
+ >(api)
246
+ }
247
+
248
+ interface FormGroupComponentBoundProps<
249
+ TParentData,
250
+ TName extends DeepKeys<TParentData>,
251
+ TData extends DeepValue<TParentData, TName>,
252
+ TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
253
+ TOnChange extends
254
+ | undefined
255
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
256
+ TOnChangeAsync extends
257
+ | undefined
258
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
259
+ TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
260
+ TOnBlurAsync extends
261
+ | undefined
262
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
263
+ TOnSubmit extends
264
+ | undefined
265
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
266
+ TOnSubmitAsync extends
267
+ | undefined
268
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
269
+ TOnDynamic extends
270
+ | undefined
271
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
272
+ TOnDynamicAsync extends
273
+ | undefined
274
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
275
+ TSubmitMeta,
276
+ TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
277
+ TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
278
+ TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
279
+ TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
280
+ TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
281
+ TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
282
+ TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
283
+ TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,
284
+ TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
285
+ TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
286
+ TParentSubmitMeta,
287
+ ExtendedApi = {},
288
+ > extends FormGroupOptions<
289
+ TParentData,
290
+ TName,
291
+ TData,
292
+ TOnMount,
293
+ TOnChange,
294
+ TOnChangeAsync,
295
+ TOnBlur,
296
+ TOnBlurAsync,
297
+ TOnSubmit,
298
+ TOnSubmitAsync,
299
+ TOnDynamic,
300
+ TOnDynamicAsync,
301
+ TSubmitMeta,
302
+ TFormOnMount,
303
+ TFormOnChange,
304
+ TFormOnChangeAsync,
305
+ TFormOnBlur,
306
+ TFormOnBlurAsync,
307
+ TFormOnSubmit,
308
+ TFormOnSubmitAsync,
309
+ TFormOnDynamic,
310
+ TFormOnDynamicAsync,
311
+ TFormOnServer,
312
+ TParentSubmitMeta
313
+ > {
314
+ children: (
315
+ formGroupApi: Accessor<
316
+ FormGroupApi<
317
+ TParentData,
318
+ TName,
319
+ TData,
320
+ TOnMount,
321
+ TOnChange,
322
+ TOnChangeAsync,
323
+ TOnBlur,
324
+ TOnBlurAsync,
325
+ TOnSubmit,
326
+ TOnSubmitAsync,
327
+ TOnDynamic,
328
+ TOnDynamicAsync,
329
+ TSubmitMeta,
330
+ TFormOnMount,
331
+ TFormOnChange,
332
+ TFormOnChangeAsync,
333
+ TFormOnBlur,
334
+ TFormOnBlurAsync,
335
+ TFormOnSubmit,
336
+ TFormOnSubmitAsync,
337
+ TFormOnDynamic,
338
+ TFormOnDynamicAsync,
339
+ TFormOnServer,
340
+ TParentSubmitMeta
341
+ >
342
+ > &
343
+ ExtendedApi,
344
+ ) => JSX.Element
345
+ }
346
+
347
+ /**
348
+ * A type alias representing a form group component for a specific form data type.
349
+ */
350
+ export type FormGroupComponent<
351
+ in out TParentData,
352
+ in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
353
+ in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
354
+ in out TFormOnChangeAsync extends
355
+ | undefined
356
+ | FormAsyncValidateOrFn<TParentData>,
357
+ in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
358
+ in out TFormOnBlurAsync extends
359
+ | undefined
360
+ | FormAsyncValidateOrFn<TParentData>,
361
+ in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
362
+ in out TFormOnSubmitAsync extends
363
+ | undefined
364
+ | FormAsyncValidateOrFn<TParentData>,
365
+ in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,
366
+ in out TFormOnDynamicAsync extends
367
+ | undefined
368
+ | FormAsyncValidateOrFn<TParentData>,
369
+ in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
370
+ in out TParentSubmitMeta,
371
+ in out ExtendedApi = {},
372
+ > = <
373
+ const TName extends DeepKeys<TParentData>,
374
+ TData extends DeepValue<TParentData, TName>,
375
+ TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
376
+ TOnChange extends
377
+ | undefined
378
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
379
+ TOnChangeAsync extends
380
+ | undefined
381
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
382
+ TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
383
+ TOnBlurAsync extends
384
+ | undefined
385
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
386
+ TOnSubmit extends
387
+ | undefined
388
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
389
+ TOnSubmitAsync extends
390
+ | undefined
391
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
392
+ TOnDynamic extends
393
+ | undefined
394
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
395
+ TOnDynamicAsync extends
396
+ | undefined
397
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
398
+ TSubmitMeta,
399
+ >(
400
+ props: FormGroupComponentBoundProps<
401
+ TParentData,
402
+ TName,
403
+ TData,
404
+ TOnMount,
405
+ TOnChange,
406
+ TOnChangeAsync,
407
+ TOnBlur,
408
+ TOnBlurAsync,
409
+ TOnSubmit,
410
+ TOnSubmitAsync,
411
+ TOnDynamic,
412
+ TOnDynamicAsync,
413
+ TSubmitMeta,
414
+ TFormOnMount,
415
+ TFormOnChange,
416
+ TFormOnChangeAsync,
417
+ TFormOnBlur,
418
+ TFormOnBlurAsync,
419
+ TFormOnSubmit,
420
+ TFormOnSubmitAsync,
421
+ TFormOnDynamic,
422
+ TFormOnDynamicAsync,
423
+ TFormOnServer,
424
+ TParentSubmitMeta,
425
+ ExtendedApi
426
+ >,
427
+ ) => JSXElement
428
+
429
+ interface FormGroupComponentProps<
430
+ TParentData,
431
+ TName extends DeepKeys<TParentData>,
432
+ TData extends DeepValue<TParentData, TName>,
433
+ TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
434
+ TOnChange extends
435
+ | undefined
436
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
437
+ TOnChangeAsync extends
438
+ | undefined
439
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
440
+ TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
441
+ TOnBlurAsync extends
442
+ | undefined
443
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
444
+ TOnSubmit extends
445
+ | undefined
446
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
447
+ TOnSubmitAsync extends
448
+ | undefined
449
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
450
+ TOnDynamic extends
451
+ | undefined
452
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
453
+ TOnDynamicAsync extends
454
+ | undefined
455
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
456
+ TSubmitMeta,
457
+ TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
458
+ TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
459
+ TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
460
+ TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
461
+ TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
462
+ TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
463
+ TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
464
+ TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,
465
+ TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
466
+ TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
467
+ TParentSubmitMeta,
468
+ > extends FormGroupApiOptions<
469
+ TParentData,
470
+ TName,
471
+ TData,
472
+ TOnMount,
473
+ TOnChange,
474
+ TOnChangeAsync,
475
+ TOnBlur,
476
+ TOnBlurAsync,
477
+ TOnSubmit,
478
+ TOnSubmitAsync,
479
+ TOnDynamic,
480
+ TOnDynamicAsync,
481
+ TSubmitMeta,
482
+ TFormOnMount,
483
+ TFormOnChange,
484
+ TFormOnChangeAsync,
485
+ TFormOnBlur,
486
+ TFormOnBlurAsync,
487
+ TFormOnSubmit,
488
+ TFormOnSubmitAsync,
489
+ TFormOnDynamic,
490
+ TFormOnDynamicAsync,
491
+ TFormOnServer,
492
+ TParentSubmitMeta
493
+ > {
494
+ children: (
495
+ formGroupApi: () => FormGroupApi<
496
+ TParentData,
497
+ TName,
498
+ TData,
499
+ TOnMount,
500
+ TOnChange,
501
+ TOnChangeAsync,
502
+ TOnBlur,
503
+ TOnBlurAsync,
504
+ TOnSubmit,
505
+ TOnSubmitAsync,
506
+ TOnDynamic,
507
+ TOnDynamicAsync,
508
+ TSubmitMeta,
509
+ TFormOnMount,
510
+ TFormOnChange,
511
+ TFormOnChangeAsync,
512
+ TFormOnBlur,
513
+ TFormOnBlurAsync,
514
+ TFormOnSubmit,
515
+ TFormOnSubmitAsync,
516
+ TFormOnDynamic,
517
+ TFormOnDynamicAsync,
518
+ TFormOnServer,
519
+ TParentSubmitMeta
520
+ >,
521
+ ) => JSXElement
522
+ }
523
+
524
+ export function FormGroup<
525
+ TParentData,
526
+ TName extends DeepKeys<TParentData>,
527
+ TData extends DeepValue<TParentData, TName>,
528
+ TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
529
+ TOnChange extends
530
+ | undefined
531
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
532
+ TOnChangeAsync extends
533
+ | undefined
534
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
535
+ TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,
536
+ TOnBlurAsync extends
537
+ | undefined
538
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
539
+ TOnSubmit extends
540
+ | undefined
541
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
542
+ TOnSubmitAsync extends
543
+ | undefined
544
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
545
+ TOnDynamic extends
546
+ | undefined
547
+ | FormGroupValidateOrFn<TParentData, TName, TData>,
548
+ TOnDynamicAsync extends
549
+ | undefined
550
+ | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,
551
+ TSubmitMeta,
552
+ TFormOnMount extends undefined | FormValidateOrFn<TParentData>,
553
+ TFormOnChange extends undefined | FormValidateOrFn<TParentData>,
554
+ TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
555
+ TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,
556
+ TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
557
+ TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,
558
+ TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
559
+ TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,
560
+ TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,
561
+ TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,
562
+ TParentSubmitMeta,
563
+ >(
564
+ props: FormGroupComponentProps<
565
+ TParentData,
566
+ TName,
567
+ TData,
568
+ TOnMount,
569
+ TOnChange,
570
+ TOnChangeAsync,
571
+ TOnBlur,
572
+ TOnBlurAsync,
573
+ TOnSubmit,
574
+ TOnSubmitAsync,
575
+ TOnDynamic,
576
+ TOnDynamicAsync,
577
+ TSubmitMeta,
578
+ TFormOnMount,
579
+ TFormOnChange,
580
+ TFormOnChangeAsync,
581
+ TFormOnBlur,
582
+ TFormOnBlurAsync,
583
+ TFormOnSubmit,
584
+ TFormOnSubmitAsync,
585
+ TFormOnDynamic,
586
+ TFormOnDynamicAsync,
587
+ TFormOnServer,
588
+ TParentSubmitMeta
589
+ >,
590
+ ) {
591
+ const formGroupApi = createFormGroup<
592
+ TParentData,
593
+ TName,
594
+ TData,
595
+ TOnMount,
596
+ TOnChange,
597
+ TOnChangeAsync,
598
+ TOnBlur,
599
+ TOnBlurAsync,
600
+ TOnSubmit,
601
+ TOnSubmitAsync,
602
+ TOnDynamic,
603
+ TOnDynamicAsync,
604
+ TSubmitMeta,
605
+ TFormOnMount,
606
+ TFormOnChange,
607
+ TFormOnChangeAsync,
608
+ TFormOnBlur,
609
+ TFormOnBlurAsync,
610
+ TFormOnSubmit,
611
+ TFormOnSubmitAsync,
612
+ TFormOnDynamic,
613
+ TFormOnDynamicAsync,
614
+ TFormOnServer,
615
+ TParentSubmitMeta
616
+ >(() => {
617
+ const { children, ...formGroupOptions } = props
618
+ return formGroupOptions
619
+ })
620
+
621
+ return <>{createComponent(() => props.children(formGroupApi), {})}</>
622
+ }
package/src/index.tsx CHANGED
@@ -5,5 +5,6 @@ export { useStore } from '@tanstack/solid-store'
5
5
  export * from './createField'
6
6
  export * from './createForm'
7
7
  export * from './createFieldGroup'
8
+ export * from './createFormGroup'
8
9
  export * from './createFormHook'
9
10
  export * from './types'