@tanstack/solid-form 1.32.1 → 1.33.1

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 (45) hide show
  1. package/dist/cjs/createField.cjs +7 -7
  2. package/dist/cjs/createField.cjs.map +1 -1
  3. package/dist/cjs/createFieldGroup.cjs +1 -1
  4. package/dist/cjs/createFieldGroup.cjs.map +1 -1
  5. package/dist/cjs/createForm.cjs +7 -2
  6. package/dist/cjs/createForm.cjs.map +1 -1
  7. package/dist/cjs/createForm.d.cts +6 -0
  8. package/dist/cjs/createFormGroup.cjs +48 -0
  9. package/dist/cjs/createFormGroup.cjs.map +1 -0
  10. package/dist/cjs/createFormGroup.d.cts +15 -0
  11. package/dist/cjs/index.cjs +7 -0
  12. package/dist/cjs/index.cjs.map +1 -1
  13. package/dist/cjs/index.d.cts +2 -1
  14. package/dist/esm/createField.js +8 -8
  15. package/dist/esm/createField.js.map +1 -1
  16. package/dist/esm/createFieldGroup.js +2 -2
  17. package/dist/esm/createFieldGroup.js.map +1 -1
  18. package/dist/esm/createForm.d.ts +6 -0
  19. package/dist/esm/createForm.js +8 -3
  20. package/dist/esm/createForm.js.map +1 -1
  21. package/dist/esm/createFormGroup.d.ts +15 -0
  22. package/dist/esm/createFormGroup.js +48 -0
  23. package/dist/esm/createFormGroup.js.map +1 -0
  24. package/dist/esm/index.d.ts +2 -1
  25. package/dist/esm/index.js +5 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/source/createField.jsx +8 -8
  28. package/dist/source/createField.jsx.map +1 -1
  29. package/dist/source/createFieldGroup.jsx +2 -2
  30. package/dist/source/createFieldGroup.jsx.map +1 -1
  31. package/dist/source/createForm.d.ts +6 -0
  32. package/dist/source/createForm.jsx +7 -3
  33. package/dist/source/createForm.jsx.map +1 -1
  34. package/dist/source/createFormGroup.d.ts +16 -0
  35. package/dist/source/createFormGroup.jsx +50 -0
  36. package/dist/source/createFormGroup.jsx.map +1 -0
  37. package/dist/source/index.d.ts +2 -1
  38. package/dist/source/index.jsx +2 -1
  39. package/dist/source/index.jsx.map +1 -1
  40. package/package.json +3 -3
  41. package/src/createField.tsx +8 -8
  42. package/src/createFieldGroup.tsx +2 -2
  43. package/src/createForm.tsx +60 -3
  44. package/src/createFormGroup.tsx +622 -0
  45. package/src/index.tsx +2 -1
@@ -0,0 +1,16 @@
1
+ import { FormGroupApi } from '@tanstack/form-core';
2
+ import type { DeepKeys, DeepValue, FormAsyncValidateOrFn, FormGroupApiOptions, FormGroupAsyncValidateOrFn, FormGroupOptions, FormGroupValidateOrFn, FormValidateOrFn } from '@tanstack/form-core';
3
+ import type { Accessor, JSX, JSXElement } from 'solid-js';
4
+ export declare function createFormGroup<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta>(opts: () => FormGroupApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>): () => FormGroupApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>;
5
+ interface FormGroupComponentBoundProps<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta, ExtendedApi = {}> extends FormGroupOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta> {
6
+ children: (formGroupApi: Accessor<FormGroupApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>> & ExtendedApi) => JSX.Element;
7
+ }
8
+ /**
9
+ * A type alias representing a form group component for a specific form data type.
10
+ */
11
+ export type FormGroupComponent<in out TParentData, in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>, in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>, in out TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, in out TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, in out TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, in out TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, in out TParentSubmitMeta, in out ExtendedApi = {}> = <const TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta>(props: FormGroupComponentBoundProps<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta, ExtendedApi>) => JSXElement;
12
+ interface FormGroupComponentProps<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta> extends FormGroupApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta> {
13
+ children: (formGroupApi: () => FormGroupApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>) => JSXElement;
14
+ }
15
+ export declare function FormGroup<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta>(props: FormGroupComponentProps<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>): JSX.Element;
16
+ export {};
@@ -0,0 +1,50 @@
1
+ import { FormGroupApi } from '@tanstack/form-core';
2
+ import { createComponent, createComputed, createSignal, onCleanup, onMount, } from 'solid-js';
3
+ import { useSelector } from '@tanstack/solid-store';
4
+ // ugly way to trick solid into triggering updates for changes on the formGroupApi
5
+ function makeFormGroupReactive(formGroupApi) {
6
+ const [group, setGroup] = createSignal(formGroupApi, { equals: false });
7
+ // Handle shallow comparison to make sure that Derived doesn't create a new setGroup call every time
8
+ const store = useSelector(formGroupApi.store, (store) => store);
9
+ // Run before initial render
10
+ createComputed(() => {
11
+ // Use the store to track dependencies
12
+ store();
13
+ setGroup(formGroupApi);
14
+ });
15
+ return group;
16
+ }
17
+ export function createFormGroup(opts) {
18
+ const options = opts();
19
+ const api = new FormGroupApi(options);
20
+ let mounted = false;
21
+ // Instantiates form group meta and removes it when unrendered
22
+ onMount(() => {
23
+ const cleanupFn = api.mount();
24
+ mounted = true;
25
+ onCleanup(() => {
26
+ cleanupFn();
27
+ mounted = false;
28
+ });
29
+ });
30
+ /**
31
+ * formGroupApi.update should not have any side effects. Think of it like a `useRef`
32
+ * that we need to keep updated every render with the most up-to-date information.
33
+ *
34
+ * createComputed to make sure this effect runs before render effects
35
+ */
36
+ createComputed(() => {
37
+ if (!mounted)
38
+ return;
39
+ api.update(opts());
40
+ });
41
+ return makeFormGroupReactive(api);
42
+ }
43
+ export function FormGroup(props) {
44
+ const formGroupApi = createFormGroup(() => {
45
+ const { children, ...formGroupOptions } = props;
46
+ return formGroupOptions;
47
+ });
48
+ return <>{createComponent(() => props.children(formGroupApi), {})}</>;
49
+ }
50
+ //# sourceMappingURL=createFormGroup.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFormGroup.jsx","sourceRoot":"","sources":["../../src/createFormGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAA;AACpE,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,SAAS,EACT,OAAO,GACR,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAanD,kFAAkF;AAClF,SAAS,qBAAqB,CAwC5B,YAyBC;IA2BD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IACvE,oGAAoG;IACpG,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC/D,4BAA4B;IAC5B,cAAc,CAAC,GAAG,EAAE;QAClB,sCAAsC;QACtC,KAAK,EAAE,CAAA;QACP,QAAQ,CAAC,YAAY,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAwC7B,IAyBC;IAED,MAAM,OAAO,GAAG,IAAI,EAAE,CAAA;IAEtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAA;IAErC,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,8DAA8D;IAC9D,OAAO,CAAC,GAAG,EAAE;QACX,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,CAAA;QAC7B,OAAO,GAAG,IAAI,CAAA;QACd,SAAS,CAAC,GAAG,EAAE;YACb,SAAS,EAAE,CAAA;YACX,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,OAAO,qBAAqB,CAyB1B,GAAG,CAAC,CAAA;AACR,CAAC;AAsRD,MAAM,UAAU,SAAS,CAwCvB,KAyBC;IAED,MAAM,YAAY,GAAG,eAAe,CAyBlC,GAAG,EAAE;QACL,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,KAAK,CAAA;QAC/C,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAA;AACvE,CAAC"}
@@ -1,7 +1,8 @@
1
1
  export * from '@tanstack/form-core';
2
- export { useStore } from '@tanstack/solid-store';
2
+ export { useSelector, useStore } from '@tanstack/solid-store';
3
3
  export * from './createField';
4
4
  export * from './createForm';
5
5
  export * from './createFieldGroup';
6
+ export * from './createFormGroup';
6
7
  export * from './createFormHook';
7
8
  export * from './types';
@@ -1,8 +1,9 @@
1
1
  export * from '@tanstack/form-core';
2
- export { useStore } from '@tanstack/solid-store';
2
+ export { useSelector, useStore } from '@tanstack/solid-store';
3
3
  export * from './createField';
4
4
  export * from './createForm';
5
5
  export * from './createFieldGroup';
6
+ export * from './createFormGroup';
6
7
  export * from './createFormHook';
7
8
  export * from './types';
8
9
  //# sourceMappingURL=index.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAE7D,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-form",
3
- "version": "1.32.1",
3
+ "version": "1.33.1",
4
4
  "description": "Powerful, type-safe forms for Solid.",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -41,8 +41,8 @@
41
41
  "src"
42
42
  ],
43
43
  "dependencies": {
44
- "@tanstack/solid-store": "^0.9.1",
45
- "@tanstack/form-core": "1.32.1"
44
+ "@tanstack/solid-store": "^0.11.0",
45
+ "@tanstack/form-core": "1.33.1"
46
46
  },
47
47
  "devDependencies": {
48
48
  "solid-js": "^1.9.9",
@@ -6,7 +6,7 @@ import {
6
6
  onCleanup,
7
7
  onMount,
8
8
  } from 'solid-js'
9
- import { useStore } from '@tanstack/solid-store'
9
+ import { useSelector } from '@tanstack/solid-store'
10
10
  import type {
11
11
  DeepKeys,
12
12
  DeepValue,
@@ -173,30 +173,30 @@ function makeFieldReactive<
173
173
  // avoid re-renders when child properties change. Meta is tracked piece by
174
174
  // piece so that consumers re-render when any meta property updates.
175
175
  // See: https://github.com/TanStack/form/issues/1961
176
- const reactiveStateValue = useStore(fieldApi.store, (state) =>
176
+ const reactiveStateValue = useSelector(fieldApi.store, (state) =>
177
177
  mode === 'array' ? state.meta._arrayVersion || 0 : state.value,
178
178
  )
179
- const reactiveMetaIsTouched = useStore(
179
+ const reactiveMetaIsTouched = useSelector(
180
180
  fieldApi.store,
181
181
  (state) => state.meta.isTouched,
182
182
  )
183
- const reactiveMetaIsBlurred = useStore(
183
+ const reactiveMetaIsBlurred = useSelector(
184
184
  fieldApi.store,
185
185
  (state) => state.meta.isBlurred,
186
186
  )
187
- const reactiveMetaIsDirty = useStore(
187
+ const reactiveMetaIsDirty = useSelector(
188
188
  fieldApi.store,
189
189
  (state) => state.meta.isDirty,
190
190
  )
191
- const reactiveMetaErrorMap = useStore(
191
+ const reactiveMetaErrorMap = useSelector(
192
192
  fieldApi.store,
193
193
  (state) => state.meta.errorMap,
194
194
  )
195
- const reactiveMetaErrorSourceMap = useStore(
195
+ const reactiveMetaErrorSourceMap = useSelector(
196
196
  fieldApi.store,
197
197
  (state) => state.meta.errorSourceMap,
198
198
  )
199
- const reactiveMetaIsValidating = useStore(
199
+ const reactiveMetaIsValidating = useSelector(
200
200
  fieldApi.store,
201
201
  (state) => state.meta.isValidating,
202
202
  )
@@ -1,5 +1,5 @@
1
1
  import { FieldGroupApi, functionalUpdate } from '@tanstack/form-core'
2
- import { useStore } from '@tanstack/solid-store'
2
+ import { useSelector } from '@tanstack/solid-store'
3
3
  import { onCleanup, onMount } from 'solid-js'
4
4
  import type { Component, JSX, ParentProps } from 'solid-js'
5
5
  import type {
@@ -201,7 +201,7 @@ export function createFieldGroup<
201
201
  <form.Field {...(api.getFormFieldOptions(props) as any)} />
202
202
  )
203
203
  extendedApi.Subscribe = (props) => {
204
- const data = useStore(api.store, props.selector)
204
+ const data = useSelector(api.store, props.selector)
205
205
 
206
206
  return functionalUpdate(props.children, data()) as Element
207
207
  }
@@ -1,7 +1,8 @@
1
1
  import { FormApi, functionalUpdate } from '@tanstack/form-core'
2
2
  import { createComputed, onMount } from 'solid-js'
3
- import { useStore } from '@tanstack/solid-store'
3
+ import { useSelector } from '@tanstack/solid-store'
4
4
  import { Field, createField } from './createField'
5
+ import { FormGroup } from './createFormGroup'
5
6
  import type {
6
7
  FormAsyncValidateOrFn,
7
8
  FormOptions,
@@ -10,6 +11,7 @@ import type {
10
11
  } from '@tanstack/form-core'
11
12
  import type { JSXElement } from 'solid-js'
12
13
  import type { FieldComponent } from './createField'
14
+ import type { FormGroupComponent } from './createFormGroup'
13
15
 
14
16
  export interface SolidFormApi<
15
17
  TParentData,
@@ -39,6 +41,58 @@ export interface SolidFormApi<
39
41
  TFormOnServer,
40
42
  TSubmitMeta
41
43
  >
44
+ FormGroup: FormGroupComponent<
45
+ TParentData,
46
+ TFormOnMount,
47
+ TFormOnChange,
48
+ TFormOnChangeAsync,
49
+ TFormOnBlur,
50
+ TFormOnBlurAsync,
51
+ TFormOnSubmit,
52
+ TFormOnSubmitAsync,
53
+ TFormOnDynamic,
54
+ TFormOnDynamicAsync,
55
+ TFormOnServer,
56
+ TSubmitMeta
57
+ >
58
+ useSelector: <
59
+ TSelected = NoInfer<
60
+ FormState<
61
+ TParentData,
62
+ TFormOnMount,
63
+ TFormOnChange,
64
+ TFormOnChangeAsync,
65
+ TFormOnBlur,
66
+ TFormOnBlurAsync,
67
+ TFormOnSubmit,
68
+ TFormOnSubmitAsync,
69
+ TFormOnDynamic,
70
+ TFormOnDynamicAsync,
71
+ TFormOnServer
72
+ >
73
+ >,
74
+ >(
75
+ selector?: (
76
+ state: NoInfer<
77
+ FormState<
78
+ TParentData,
79
+ TFormOnMount,
80
+ TFormOnChange,
81
+ TFormOnChangeAsync,
82
+ TFormOnBlur,
83
+ TFormOnBlurAsync,
84
+ TFormOnSubmit,
85
+ TFormOnSubmitAsync,
86
+ TFormOnDynamic,
87
+ TFormOnDynamicAsync,
88
+ TFormOnServer
89
+ >
90
+ >,
91
+ ) => TSelected,
92
+ ) => () => TSelected
93
+ /**
94
+ * @deprecated Use `form.useSelector` instead.
95
+ */
42
96
  useStore: <
43
97
  TSelected = NoInfer<
44
98
  FormState<
@@ -217,9 +271,12 @@ export function createForm<
217
271
  > = api as never
218
272
 
219
273
  extendedApi.Field = (props) => <Field {...props} form={api} />
220
- extendedApi.useStore = (selector) => useStore(api.store, selector)
274
+ extendedApi.FormGroup = (props) => <FormGroup {...props} form={api} />
275
+ extendedApi.useSelector = (selector) => useSelector(api.store, selector)
276
+ /** @deprecated Use `form.useSelector` instead. */
277
+ extendedApi.useStore = extendedApi.useSelector
221
278
  extendedApi.Subscribe = (props) =>
222
- functionalUpdate(props.children, useStore(api.store, props.selector))
279
+ functionalUpdate(props.children, useSelector(api.store, props.selector))
223
280
 
224
281
  onMount(api.mount)
225
282