@tanstack/solid-form 0.28.0 → 0.29.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.
@@ -1,7 +1,6 @@
1
1
  import { FieldApi, DeepKeys, DeepValue, Narrow, Validator } from '@tanstack/form-core';
2
2
  import { JSXElement } from 'solid-js';
3
3
  import { CreateFieldOptions } from './types.cjs';
4
-
5
4
  interface SolidFieldApi<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined> {
6
5
  Field: FieldComponent<TParentData, TFormValidator>;
7
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createForm.cjs","sources":["../../src/createForm.tsx"],"sourcesContent":["import { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { type JSXElement, createComputed, onMount } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport {\n type CreateField,\n Field,\n type FieldComponent,\n createField,\n} from './createField'\nimport type { FormOptions, FormState, Validator } from '@tanstack/form-core'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\ninterface SolidFormApi<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> {\n Field: FieldComponent<TFormData, TFormValidator>\n createField: CreateField<TFormData, TFormValidator>\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>) => JSXElement) | JSXElement\n }) => JSXElement\n}\n\nexport function createForm<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(opts?: () => FormOptions<TParentData, TFormValidator>) {\n const options = opts?.()\n const api = new FormApi<TParentData, TFormValidator>(options)\n const extendedApi: typeof api & SolidFormApi<TParentData, TFormValidator> =\n api as never\n\n extendedApi.Field = (props) => <Field {...props} form={api} />\n extendedApi.createField = (props) =>\n createField(() => {\n return { ...props(), form: api }\n })\n extendedApi.useStore = (selector) => useStore(api.store, selector)\n extendedApi.Subscribe = (props) =>\n functionalUpdate(props.children, useStore(api.store, props.selector))\n\n onMount(api.mount)\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 createComputed(() => api.update(opts?.()))\n\n return extendedApi\n}\n"],"names":["createForm","opts","options","api","FormApi","extendedApi","Field","props","_$createComponent","_$mergeProps","form","createField","useStore","selector","store","Subscribe","functionalUpdate","children","onMount","mount","createComputed","update"],"mappings":";;;;;;;AA4BO,SAASA,WAKdC,MAAuD;AACvD,QAAMC,UAAUD;AACVE,QAAAA,MAAM,IAAIC,iBAAqCF,OAAO;AAC5D,QAAMG,cACJF;AAEFE,cAAYC,QAASC,CAAAA,UAAKC,IAAMF,gBAAAA,YAAAA,OAAKG,eAAKF,OAAK;AAAA,IAAEG,MAAMP;AAAAA,EAAO,CAAA,CAAA;AAClDQ,cAAAA,cAAeJ,CACzBI,UAAAA,YAAAA,YAAY,MAAM;AACT,WAAA;AAAA,MAAE,GAAGJ,MAAM;AAAA,MAAGG,MAAMP;AAAAA,IAAAA;AAAAA,EAAI,CAChC;AACHE,cAAYO,WAAYC,CAAAA,aAAaD,WAAST,SAAAA,IAAIW,OAAOD,QAAQ;AACrDE,cAAAA,YAAaR,CACvBS,UAAAA,SAAAA,iBAAiBT,MAAMU,UAAUL,oBAAST,IAAIW,OAAOP,MAAMM,QAAQ,CAAC;AAEtEK,kBAAQf,IAAIgB,KAAK;AAMjBC,UAAAA,eAAe,MAAMjB,IAAIkB,OAAOpB,8BAAQ,CAAC;AAElCI,SAAAA;AACT;;"}
1
+ {"version":3,"file":"createForm.cjs","sources":["../../src/createForm.tsx"],"sourcesContent":["import { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { type JSXElement, createComputed, onMount } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport {\n type CreateField,\n Field,\n type FieldComponent,\n createField,\n} from './createField'\nimport type { FormOptions, FormState, Validator } from '@tanstack/form-core'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport interface SolidFormApi<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> {\n Field: FieldComponent<TFormData, TFormValidator>\n createField: CreateField<TFormData, TFormValidator>\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>) => JSXElement) | JSXElement\n }) => JSXElement\n}\n\nexport function createForm<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(opts?: () => FormOptions<TParentData, TFormValidator>) {\n const options = opts?.()\n const api = new FormApi<TParentData, TFormValidator>(options)\n const extendedApi: typeof api & SolidFormApi<TParentData, TFormValidator> =\n api as never\n\n extendedApi.Field = (props) => <Field {...props} form={api} />\n extendedApi.createField = (props) =>\n createField(() => {\n return { ...props(), form: api }\n })\n extendedApi.useStore = (selector) => useStore(api.store, selector)\n extendedApi.Subscribe = (props) =>\n functionalUpdate(props.children, useStore(api.store, props.selector))\n\n onMount(api.mount)\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 createComputed(() => api.update(opts?.()))\n\n return extendedApi\n}\n"],"names":["createForm","opts","options","api","FormApi","extendedApi","Field","props","_$createComponent","_$mergeProps","form","createField","useStore","selector","store","Subscribe","functionalUpdate","children","onMount","mount","createComputed","update"],"mappings":";;;;;;;AA4BO,SAASA,WAKdC,MAAuD;AACvD,QAAMC,UAAUD;AACVE,QAAAA,MAAM,IAAIC,iBAAqCF,OAAO;AAC5D,QAAMG,cACJF;AAEFE,cAAYC,QAASC,CAAAA,UAAKC,IAAMF,gBAAAA,YAAAA,OAAKG,eAAKF,OAAK;AAAA,IAAEG,MAAMP;AAAAA,EAAO,CAAA,CAAA;AAClDQ,cAAAA,cAAeJ,CACzBI,UAAAA,YAAAA,YAAY,MAAM;AACT,WAAA;AAAA,MAAE,GAAGJ,MAAM;AAAA,MAAGG,MAAMP;AAAAA,IAAAA;AAAAA,EAAI,CAChC;AACHE,cAAYO,WAAYC,CAAAA,aAAaD,WAAST,SAAAA,IAAIW,OAAOD,QAAQ;AACrDE,cAAAA,YAAaR,CACvBS,UAAAA,SAAAA,iBAAiBT,MAAMU,UAAUL,oBAAST,IAAIW,OAAOP,MAAMM,QAAQ,CAAC;AAEtEK,kBAAQf,IAAIgB,KAAK;AAMjBC,UAAAA,eAAe,MAAMjB,IAAIkB,OAAOpB,8BAAQ,CAAC;AAElCI,SAAAA;AACT;;"}
@@ -1,9 +1,8 @@
1
1
  import { FormApi, FormOptions, FormState, Validator } from '@tanstack/form-core';
2
2
  import { JSXElement } from 'solid-js';
3
3
  import { CreateField, FieldComponent } from './createField.cjs';
4
-
5
4
  type NoInfer<T> = [T][T extends any ? 0 : never];
6
- interface SolidFormApi<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> {
5
+ export interface SolidFormApi<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> {
7
6
  Field: FieldComponent<TFormData, TFormValidator>;
8
7
  createField: CreateField<TFormData, TFormValidator>;
9
8
  useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
@@ -1,4 +1,4 @@
1
1
  export * from '@tanstack/form-core';
2
- export { createForm } from './createForm.cjs';
2
+ export { createForm, type SolidFormApi } from './createForm.cjs';
3
3
  export type { CreateField, FieldComponent } from './createField.cjs';
4
4
  export { createField, Field } from './createField.cjs';
@@ -1,5 +1,4 @@
1
1
  import { DeepKeys, DeepValue, FieldApiOptions, Validator } from '@tanstack/form-core';
2
-
3
2
  export type CreateFieldOptions<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = FieldApiOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
4
3
  mode?: 'value' | 'array';
5
4
  };
@@ -1,7 +1,6 @@
1
1
  import { FieldApi, DeepKeys, DeepValue, Narrow, Validator } from '@tanstack/form-core';
2
2
  import { JSXElement } from 'solid-js';
3
3
  import { CreateFieldOptions } from './types.js';
4
-
5
4
  interface SolidFieldApi<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined> {
6
5
  Field: FieldComponent<TParentData, TFormValidator>;
7
6
  }
@@ -1,9 +1,8 @@
1
1
  import { FormApi, FormOptions, FormState, Validator } from '@tanstack/form-core';
2
2
  import { JSXElement } from 'solid-js';
3
3
  import { CreateField, FieldComponent } from './createField.js';
4
-
5
4
  type NoInfer<T> = [T][T extends any ? 0 : never];
6
- interface SolidFormApi<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> {
5
+ export interface SolidFormApi<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> {
7
6
  Field: FieldComponent<TFormData, TFormValidator>;
8
7
  createField: CreateField<TFormData, TFormValidator>;
9
8
  useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
@@ -1 +1 @@
1
- {"version":3,"file":"createForm.js","sources":["../../src/createForm.tsx"],"sourcesContent":["import { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { type JSXElement, createComputed, onMount } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport {\n type CreateField,\n Field,\n type FieldComponent,\n createField,\n} from './createField'\nimport type { FormOptions, FormState, Validator } from '@tanstack/form-core'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\ninterface SolidFormApi<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> {\n Field: FieldComponent<TFormData, TFormValidator>\n createField: CreateField<TFormData, TFormValidator>\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>) => JSXElement) | JSXElement\n }) => JSXElement\n}\n\nexport function createForm<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(opts?: () => FormOptions<TParentData, TFormValidator>) {\n const options = opts?.()\n const api = new FormApi<TParentData, TFormValidator>(options)\n const extendedApi: typeof api & SolidFormApi<TParentData, TFormValidator> =\n api as never\n\n extendedApi.Field = (props) => <Field {...props} form={api} />\n extendedApi.createField = (props) =>\n createField(() => {\n return { ...props(), form: api }\n })\n extendedApi.useStore = (selector) => useStore(api.store, selector)\n extendedApi.Subscribe = (props) =>\n functionalUpdate(props.children, useStore(api.store, props.selector))\n\n onMount(api.mount)\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 createComputed(() => api.update(opts?.()))\n\n return extendedApi\n}\n"],"names":["createForm","opts","options","api","FormApi","extendedApi","Field","props","_$createComponent","_$mergeProps","form","createField","useStore","selector","store","Subscribe","functionalUpdate","children","onMount","mount","createComputed","update"],"mappings":";;;;;AA4BO,SAASA,WAKdC,MAAuD;AACvD,QAAMC,UAAUD;AACVE,QAAAA,MAAM,IAAIC,QAAqCF,OAAO;AAC5D,QAAMG,cACJF;AAEFE,cAAYC,QAASC,CAAAA,UAAKC,gBAAMF,OAAKG,WAAKF,OAAK;AAAA,IAAEG,MAAMP;AAAAA,EAAO,CAAA,CAAA;AAClDQ,cAAAA,cAAeJ,CACzBI,UAAAA,YAAY,MAAM;AACT,WAAA;AAAA,MAAE,GAAGJ,MAAM;AAAA,MAAGG,MAAMP;AAAAA,IAAAA;AAAAA,EAAI,CAChC;AACHE,cAAYO,WAAYC,CAAAA,aAAaD,SAAST,IAAIW,OAAOD,QAAQ;AACrDE,cAAAA,YAAaR,CACvBS,UAAAA,iBAAiBT,MAAMU,UAAUL,SAAST,IAAIW,OAAOP,MAAMM,QAAQ,CAAC;AAEtEK,UAAQf,IAAIgB,KAAK;AAMjBC,iBAAe,MAAMjB,IAAIkB,OAAOpB,8BAAQ,CAAC;AAElCI,SAAAA;AACT;"}
1
+ {"version":3,"file":"createForm.js","sources":["../../src/createForm.tsx"],"sourcesContent":["import { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { type JSXElement, createComputed, onMount } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport {\n type CreateField,\n Field,\n type FieldComponent,\n createField,\n} from './createField'\nimport type { FormOptions, FormState, Validator } from '@tanstack/form-core'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\nexport interface SolidFormApi<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> {\n Field: FieldComponent<TFormData, TFormValidator>\n createField: CreateField<TFormData, TFormValidator>\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>) => JSXElement) | JSXElement\n }) => JSXElement\n}\n\nexport function createForm<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(opts?: () => FormOptions<TParentData, TFormValidator>) {\n const options = opts?.()\n const api = new FormApi<TParentData, TFormValidator>(options)\n const extendedApi: typeof api & SolidFormApi<TParentData, TFormValidator> =\n api as never\n\n extendedApi.Field = (props) => <Field {...props} form={api} />\n extendedApi.createField = (props) =>\n createField(() => {\n return { ...props(), form: api }\n })\n extendedApi.useStore = (selector) => useStore(api.store, selector)\n extendedApi.Subscribe = (props) =>\n functionalUpdate(props.children, useStore(api.store, props.selector))\n\n onMount(api.mount)\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 createComputed(() => api.update(opts?.()))\n\n return extendedApi\n}\n"],"names":["createForm","opts","options","api","FormApi","extendedApi","Field","props","_$createComponent","_$mergeProps","form","createField","useStore","selector","store","Subscribe","functionalUpdate","children","onMount","mount","createComputed","update"],"mappings":";;;;;AA4BO,SAASA,WAKdC,MAAuD;AACvD,QAAMC,UAAUD;AACVE,QAAAA,MAAM,IAAIC,QAAqCF,OAAO;AAC5D,QAAMG,cACJF;AAEFE,cAAYC,QAASC,CAAAA,UAAKC,gBAAMF,OAAKG,WAAKF,OAAK;AAAA,IAAEG,MAAMP;AAAAA,EAAO,CAAA,CAAA;AAClDQ,cAAAA,cAAeJ,CACzBI,UAAAA,YAAY,MAAM;AACT,WAAA;AAAA,MAAE,GAAGJ,MAAM;AAAA,MAAGG,MAAMP;AAAAA,IAAAA;AAAAA,EAAI,CAChC;AACHE,cAAYO,WAAYC,CAAAA,aAAaD,SAAST,IAAIW,OAAOD,QAAQ;AACrDE,cAAAA,YAAaR,CACvBS,UAAAA,iBAAiBT,MAAMU,UAAUL,SAAST,IAAIW,OAAOP,MAAMM,QAAQ,CAAC;AAEtEK,UAAQf,IAAIgB,KAAK;AAMjBC,iBAAe,MAAMjB,IAAIkB,OAAOpB,8BAAQ,CAAC;AAElCI,SAAAA;AACT;"}
@@ -1,4 +1,4 @@
1
1
  export * from '@tanstack/form-core';
2
- export { createForm } from './createForm.js';
2
+ export { createForm, type SolidFormApi } from './createForm.js';
3
3
  export type { CreateField, FieldComponent } from './createField.js';
4
4
  export { createField, Field } from './createField.js';
@@ -1,5 +1,4 @@
1
1
  import { DeepKeys, DeepValue, FieldApiOptions, Validator } from '@tanstack/form-core';
2
-
3
2
  export type CreateFieldOptions<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>> = FieldApiOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
4
3
  mode?: 'value' | 'array';
5
4
  };
@@ -3,7 +3,7 @@ import { type JSXElement } from 'solid-js';
3
3
  import { type CreateField, type FieldComponent } from './createField';
4
4
  import type { FormOptions, FormState, Validator } from '@tanstack/form-core';
5
5
  type NoInfer<T> = [T][T extends any ? 0 : never];
6
- interface SolidFormApi<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> {
6
+ export interface SolidFormApi<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> {
7
7
  Field: FieldComponent<TFormData, TFormValidator>;
8
8
  createField: CreateField<TFormData, TFormValidator>;
9
9
  useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
@@ -1,4 +1,4 @@
1
1
  export * from '@tanstack/form-core';
2
- export { createForm } from './createForm';
2
+ export { createForm, type SolidFormApi } from './createForm';
3
3
  export type { CreateField, FieldComponent } from './createField';
4
4
  export { createField, Field } from './createField';
@@ -1 +1 @@
1
- {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAA;AAG5D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-form",
3
- "version": "0.28.0",
3
+ "version": "0.29.1",
4
4
  "description": "Powerful, type-safe forms for Solid.",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -45,8 +45,8 @@
45
45
  "@tanstack/form-core": "0.28.0"
46
46
  },
47
47
  "devDependencies": {
48
- "solid-js": "^1.8.19",
49
- "vite": "^5.3.5",
48
+ "solid-js": "^1.8.20",
49
+ "vite": "^5.4.0",
50
50
  "vite-plugin-solid": "^2.10.2"
51
51
  },
52
52
  "peerDependencies": {
@@ -11,7 +11,7 @@ import type { FormOptions, FormState, Validator } from '@tanstack/form-core'
11
11
 
12
12
  type NoInfer<T> = [T][T extends any ? 0 : never]
13
13
 
14
- interface SolidFormApi<
14
+ export interface SolidFormApi<
15
15
  TFormData,
16
16
  TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,
17
17
  > {
package/src/index.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from '@tanstack/form-core'
2
2
 
3
- export { createForm } from './createForm'
3
+ export { createForm, type SolidFormApi } from './createForm'
4
4
 
5
5
  export type { CreateField, FieldComponent } from './createField'
6
6
  export { createField, Field } from './createField'