@tanstack/solid-form 0.11.0 → 0.13.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,27 @@
1
+ import { FieldApi, type Validator } from '@tanstack/form-core';
2
+ import type { DeepKeys, DeepValue, Narrow } from '@tanstack/form-core';
3
+ import type { JSXElement } from 'solid-js';
4
+ import type { CreateFieldOptions } from './types';
5
+ declare module '@tanstack/form-core' {
6
+ interface FieldApi<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>> {
7
+ Field: FieldComponent<TParentData, TFormValidator>;
8
+ }
9
+ }
10
+ export type CreateField<TParentData> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => {
11
+ name: Narrow<TName>;
12
+ } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>) => () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, DeepValue<TParentData, TName>>;
13
+ export declare function createField<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>;
14
+ type FieldComponentProps<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>> = {
15
+ children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
16
+ } & (TParentData extends any[] ? {
17
+ name?: TName;
18
+ index: number;
19
+ } : {
20
+ name: TName;
21
+ index?: never;
22
+ }) & Omit<CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>, 'name' | 'index'>;
23
+ export type FieldComponent<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>>({ children, ...fieldOptions }: FieldComponentProps<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
24
+ export declare function Field<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(props: {
25
+ children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>) => JSXElement;
26
+ } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): import("solid-js").JSX.Element;
27
+ export {};
@@ -0,0 +1,21 @@
1
+ import type { FormOptions, FormState, Validator } from '@tanstack/form-core';
2
+ import { FormApi } from '@tanstack/form-core';
3
+ import { type JSXElement } from 'solid-js';
4
+ import { type CreateField, type FieldComponent } from './createField';
5
+ type NoInfer<T> = [T][T extends any ? 0 : never];
6
+ declare module '@tanstack/form-core' {
7
+ interface FormApi<TFormData, TFormValidator> {
8
+ Provider: (props: {
9
+ children: any;
10
+ }) => JSXElement;
11
+ Field: FieldComponent<TFormData, TFormValidator>;
12
+ createField: CreateField<TFormData>;
13
+ useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
14
+ Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
15
+ selector?: (state: NoInfer<FormState<TFormData>>) => TSelected;
16
+ children: ((state: () => NoInfer<TSelected>) => JSXElement) | JSXElement;
17
+ }) => JSXElement;
18
+ }
19
+ }
20
+ export declare function createForm<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts?: () => FormOptions<TParentData, TFormValidator>): FormApi<TParentData, TFormValidator>;
21
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { FormApi, FormOptions, Validator } from '@tanstack/form-core';
2
+ import { type CreateField, type FieldComponent } from './createField';
3
+ export type FormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = {
4
+ createForm: (opts?: () => FormOptions<TFormData, TFormValidator>) => FormApi<TFormData, TFormValidator>;
5
+ createField: CreateField<TFormData>;
6
+ Field: FieldComponent<TFormData, TFormValidator>;
7
+ };
8
+ export declare function createFormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts?: () => FormOptions<TFormData, TFormValidator>): FormFactory<TFormData, TFormValidator>;
@@ -0,0 +1,11 @@
1
+ import type { FormApi, Validator } from '@tanstack/form-core';
2
+ type FormContextType = undefined | {
3
+ formApi: FormApi<any, Validator<any, unknown> | undefined>;
4
+ parentFieldName?: string;
5
+ };
6
+ export declare const formContext: import("solid-js").Context<FormContextType>;
7
+ export declare function useFormContext(): {
8
+ formApi: FormApi<any, Validator<any, unknown> | undefined>;
9
+ parentFieldName?: string | undefined;
10
+ };
11
+ export {};
@@ -1,20 +1,16 @@
1
- 'use strict';
2
-
3
- var formCore = require('@tanstack/form-core');
4
- var web = require('solid-js/web');
5
- var solidJs = require('solid-js');
6
- var solidStore = require('@tanstack/solid-store');
7
-
8
- // src/index.ts
9
- var formContext = solidJs.createContext(void 0);
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const formCore = require("@tanstack/form-core");
4
+ const web = require("solid-js/web");
5
+ const solidJs = require("solid-js");
6
+ const solidStore = require("@tanstack/solid-store");
7
+ const formContext = solidJs.createContext(void 0);
10
8
  function useFormContext() {
11
9
  const formApi = solidJs.useContext(formContext);
12
10
  if (!formApi)
13
11
  throw new Error(`You are trying to use the form API outside of a form!`);
14
12
  return formApi;
15
13
  }
16
-
17
- // src/createField.tsx
18
14
  function makeFieldReactive(fieldApi) {
19
15
  const [flag, setFlag] = solidJs.createSignal(false);
20
16
  const fieldApiMemo = solidJs.createMemo(() => [flag(), fieldApi]);
@@ -62,10 +58,8 @@ function Field(props) {
62
58
  }
63
59
  });
64
60
  }
65
-
66
- // src/createForm.tsx
67
61
  function createForm(opts) {
68
- const options = opts?.();
62
+ const options = opts == null ? void 0 : opts();
69
63
  const formApi = new formCore.FormApi(options);
70
64
  formApi.Provider = function Provider(props) {
71
65
  solidJs.onMount(formApi.mount);
@@ -79,32 +73,32 @@ function createForm(opts) {
79
73
  formApi.createField = createField;
80
74
  formApi.useStore = (selector) => solidStore.useStore(formApi.store, selector);
81
75
  formApi.Subscribe = (props) => formCore.functionalUpdate(props.children, solidStore.useStore(formApi.store, props.selector));
82
- solidJs.createComputed(() => formApi.update(opts?.()));
76
+ solidJs.createComputed(() => formApi.update(opts == null ? void 0 : opts()));
83
77
  return formApi;
84
78
  }
85
79
  function createFormFactory(defaultOpts) {
86
80
  return {
87
81
  createForm: (opts) => createForm(
88
- () => solidJs.mergeProps(defaultOpts?.() ?? {}, opts?.() ?? {})
82
+ () => solidJs.mergeProps((defaultOpts == null ? void 0 : defaultOpts()) ?? {}, (opts == null ? void 0 : opts()) ?? {})
89
83
  ),
90
84
  createField,
91
85
  Field
92
86
  };
93
87
  }
94
-
95
- Object.defineProperty(exports, 'FieldApi', {
88
+ Object.defineProperty(exports, "FieldApi", {
96
89
  enumerable: true,
97
- get: function () { return formCore.FieldApi; }
90
+ get: () => formCore.FieldApi
98
91
  });
99
- Object.defineProperty(exports, 'FormApi', {
92
+ Object.defineProperty(exports, "FormApi", {
100
93
  enumerable: true,
101
- get: function () { return formCore.FormApi; }
94
+ get: () => formCore.FormApi
102
95
  });
103
- Object.defineProperty(exports, 'functionalUpdate', {
96
+ Object.defineProperty(exports, "functionalUpdate", {
104
97
  enumerable: true,
105
- get: function () { return formCore.functionalUpdate; }
98
+ get: () => formCore.functionalUpdate
106
99
  });
107
100
  exports.Field = Field;
108
101
  exports.createField = createField;
109
102
  exports.createForm = createForm;
110
103
  exports.createFormFactory = createFormFactory;
104
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/formContext.ts","../../src/createField.tsx","../../src/createForm.tsx","../../src/createFormFactory.ts"],"sourcesContent":["import { createContext, useContext } from 'solid-js'\nimport type { FormApi, Validator } from '@tanstack/form-core'\n\ntype FormContextType =\n | undefined\n | {\n formApi: FormApi<any, Validator<any, unknown> | undefined>\n parentFieldName?: string\n }\n\nexport const formContext = createContext<FormContextType>(undefined)\n\nexport function useFormContext() {\n const formApi: FormContextType = useContext(formContext)\n\n if (!formApi)\n throw new Error(`You are trying to use the form API outside of a form!`)\n\n return formApi\n}\n","import { FieldApi, type Validator } from '@tanstack/form-core'\nimport {\n createComponent,\n createComputed,\n createMemo,\n createSignal,\n onCleanup,\n onMount,\n} from 'solid-js'\nimport { formContext, useFormContext } from './formContext'\n\nimport type { DeepKeys, DeepValue, Narrow } from '@tanstack/form-core'\nimport type { JSXElement } from 'solid-js'\nimport type { CreateFieldOptions } from './types'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FieldApi<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n > {\n Field: FieldComponent<TParentData, TFormValidator>\n }\n}\n\nexport type CreateField<TParentData> = <\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n opts: () => { name: Narrow<TName> } & CreateFieldOptions<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >,\n) => () => FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n DeepValue<TParentData, TName>\n>\n\n// ugly way to trick solid into triggering updates for changes on the fieldApi\nfunction makeFieldReactive<FieldApiT extends FieldApi<any, any, any, any>>(\n fieldApi: FieldApiT,\n): () => FieldApiT {\n const [flag, setFlag] = createSignal(false)\n const fieldApiMemo = createMemo(() => [flag(), fieldApi] as const)\n const unsubscribeStore = fieldApi.store.subscribe(() => setFlag((f) => !f))\n onCleanup(unsubscribeStore)\n return () => fieldApiMemo()[1]\n}\n\nexport function createField<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n opts: () => CreateFieldOptions<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >,\n): () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator> {\n // Get the form API either manually or from context\n const { formApi, parentFieldName } = useFormContext()\n\n const options = opts()\n const name = (\n typeof options.index === 'number'\n ? [parentFieldName, options.index, options.name]\n : [parentFieldName, options.name]\n )\n .filter((d) => d !== undefined)\n .join('.')\n\n const fieldApi = new FieldApi({\n ...options,\n form: formApi,\n name: name as typeof options.name as never,\n })\n fieldApi.Field = Field as never\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 * createComputed to make sure this effect runs before render effects\n */\n createComputed(() => fieldApi.update({ ...opts(), form: formApi } as never))\n\n // Instantiates field meta and removes it when unrendered\n onMount(() => onCleanup(fieldApi.mount()))\n\n return makeFieldReactive(fieldApi) as never\n}\n\ntype FieldComponentProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = {\n children: (\n fieldApi: () => FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n >,\n ) => JSXElement\n} & (TParentData extends any[]\n ? {\n name?: TName\n index: number\n }\n : {\n name: TName\n index?: never\n }) &\n Omit<\n CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>,\n 'name' | 'index'\n >\n\nexport type FieldComponent<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n> = <\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n>({\n children,\n ...fieldOptions\n}: FieldComponentProps<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n>) => JSXElement\n\nexport function Field<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n props: {\n children: (\n fieldApi: () => FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >,\n ) => JSXElement\n } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>,\n) {\n const fieldApi = createField<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >(() => {\n const { children, ...fieldOptions } = props\n return fieldOptions\n })\n\n return (\n <formContext.Provider\n value={{\n formApi: fieldApi().form as never,\n parentFieldName: String(fieldApi().name),\n }}\n >\n {/* createComponent to make sure the signals in the children component are not tracked */}\n {createComponent(() => props.children(fieldApi), {})}\n </formContext.Provider>\n )\n}\n","import type { FormOptions, FormState, Validator } from '@tanstack/form-core'\nimport { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { createComputed, onMount, type JSXElement } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport {\n Field,\n createField,\n type CreateField,\n type FieldComponent,\n} from './createField'\nimport { formContext } from './formContext'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FormApi<TFormData, TFormValidator> {\n Provider: (props: { children: any }) => JSXElement\n Field: FieldComponent<TFormData, TFormValidator>\n createField: CreateField<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>) => JSXElement) | JSXElement\n }) => JSXElement\n }\n}\n\nexport function createForm<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n opts?: () => FormOptions<TParentData, TFormValidator>,\n): FormApi<TParentData, TFormValidator> {\n const options = opts?.()\n const formApi = new FormApi<TParentData, TFormValidator>(options)\n\n formApi.Provider = function Provider(props) {\n onMount(formApi.mount)\n return (\n <formContext.Provider {...props} value={{ formApi: formApi as never }} />\n )\n }\n formApi.Field = Field as any\n formApi.createField = createField as CreateField<TParentData>\n formApi.useStore = (selector) => useStore(formApi.store, selector)\n formApi.Subscribe = (props) =>\n functionalUpdate(props.children, useStore(formApi.store, props.selector))\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(() => formApi.update(opts?.()))\n\n return formApi\n}\n","import type { FormApi, FormOptions, Validator } from '@tanstack/form-core'\n\nimport {\n type CreateField,\n type FieldComponent,\n Field,\n createField,\n} from './createField'\nimport { createForm } from './createForm'\nimport { mergeProps } from 'solid-js'\n\nexport type FormFactory<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = {\n createForm: (\n opts?: () => FormOptions<TFormData, TFormValidator>,\n ) => FormApi<TFormData, TFormValidator>\n createField: CreateField<TFormData>\n Field: FieldComponent<TFormData, TFormValidator>\n}\n\nexport function createFormFactory<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n>(\n defaultOpts?: () => FormOptions<TFormData, TFormValidator>,\n): FormFactory<TFormData, TFormValidator> {\n return {\n createForm: (opts) =>\n createForm<TFormData, TFormValidator>(() =>\n mergeProps(defaultOpts?.() ?? {}, opts?.() ?? {}),\n ),\n createField,\n Field: Field as never,\n }\n}\n"],"names":["createContext","useContext","makeFieldReactive","fieldApi","flag","setFlag","createSignal","fieldApiMemo","createMemo","unsubscribeStore","store","subscribe","f","onCleanup","createField","opts","formApi","parentFieldName","useFormContext","options","name","index","filter","d","undefined","join","FieldApi","form","Field","createComputed","update","onMount","mount","props","children","fieldOptions","_$createComponent","formContext","Provider","value","String","createComponent","createForm","FormApi","_$mergeProps","useStore","selector","Subscribe","functionalUpdate","mergeProps"],"mappings":";;;;;;AAUa,MAAA,cAAcA,QAAAA,cAA+B,MAAS;AAE5D,SAAS,iBAAiB;AACzB,QAAA,UAA2BC,mBAAW,WAAW;AAEvD,MAAI,CAAC;AACG,UAAA,IAAI,MAAM,uDAAuD;AAElE,SAAA;AACT;ACqCA,SAASC,kBACPC,UACiB;AACjB,QAAM,CAACC,MAAMC,OAAO,IAAIC,QAAY,aAAC,KAAK;AAC1C,QAAMC,eAAeC,QAAAA,WAAW,MAAM,CAACJ,KAAM,GAAED,QAAQ,CAAU;AACjE,QAAMM,mBAAmBN,SAASO,MAAMC,UAAU,MAAMN,QAASO,OAAM,CAACA,CAAC,CAAC;AAC1EC,UAAS,UAACJ,gBAAgB;AAC1B,SAAO,MAAMF,eAAe,CAAC;AAC/B;AAEO,SAASO,YAUdC,MAMqE;AAErE,QAAM;AAAA,IAAEC;AAAAA,IAASC;AAAAA,EAAiB,IAAGC,eAAc;AAEnD,QAAMC,UAAUJ;AAChB,QAAMK,QACJ,OAAOD,QAAQE,UAAU,WACrB,CAACJ,iBAAiBE,QAAQE,OAAOF,QAAQC,IAAI,IAC7C,CAACH,iBAAiBE,QAAQC,IAAI,GAEjCE,OAAQC,OAAMA,MAAMC,MAAS,EAC7BC,KAAK,GAAG;AAEX,QAAMtB,WAAW,IAAIuB,kBAAS;AAAA,IAC5B,GAAGP;AAAAA,IACHQ,MAAMX;AAAAA,IACNI;AAAAA,EACF,CAAC;AACDjB,WAASyB,QAAQA;AAQjBC,yBAAe,MAAM1B,SAAS2B,OAAO;AAAA,IAAE,GAAGf,KAAM;AAAA,IAAEY,MAAMX;AAAAA,EAAkB,CAAA,CAAC;AAG3Ee,UAAAA,QAAQ,MAAMlB,QAAS,UAACV,SAAS6B,MAAK,CAAE,CAAC;AAEzC,SAAO9B,kBAAkBC,QAAQ;AACnC;AA0DO,SAASyB,MAUdK,OAUA;AACA,QAAM9B,WAAWW,YAKf,MAAM;AACN,UAAM;AAAA,MAAEoB;AAAAA,MAAU,GAAGC;AAAAA,IAAc,IAAGF;AACtC,WAAOE;AAAAA,EACT,CAAC;AAED,SAAAC,IAAA,gBACGC,YAAYC,UAAQ;AAAA,IAAA,IACnBC,QAAK;AAAA,aAAE;AAAA,QACLvB,SAASb,SAAQ,EAAGwB;AAAAA,QACpBV,iBAAiBuB,OAAOrC,SAAU,EAACiB,IAAI;AAAA;IACxC;AAAA,IAAA,IAAAc,WAAA;AAAA,aAGAO,QAAAA,gBAAgB,MAAMR,MAAMC,SAAS/B,QAAQ,GAAG,CAAA,CAAE;AAAA,IAAC;AAAA,EAAA,CAAA;AAG1D;ACxLO,SAASuC,WAMd3B,MACsC;AACtC,QAAMI,UAAUJ;AAChB,QAAMC,UAAU,IAAI2B,iBAAqCxB,OAAO;AAEhEH,UAAQsB,WAAW,SAASA,SAASL,OAAO;AAC1CF,oBAAQf,QAAQgB,KAAK;AACrB,WAAAI,IAAA,gBACGC,YAAYC,UAAQM,IAAAA,WAAKX,OAAK;AAAA,MAAEM,OAAO;AAAA,QAAEvB;AAAAA,MAA0B;AAAA,IAAC,CAAA,CAAA;AAAA;AAGzEA,UAAQY,QAAQA;AAChBZ,UAAQF,cAAcA;AACtBE,UAAQ6B,WAAYC,cAAaD,WAAAA,SAAS7B,QAAQN,OAAOoC,QAAQ;AACjE9B,UAAQ+B,YAAad,WACnBe,SAAAA,iBAAiBf,MAAMC,UAAUW,WAAQ,SAAC7B,QAAQN,OAAOuB,MAAMa,QAAQ,CAAC;AAM1EjB,UAAAA,eAAe,MAAMb,QAAQc,OAAOf,8BAAQ,CAAC;AAE7C,SAAOC;AACT;ACtCO,SAAS,kBAId,aACwC;AACjC,SAAA;AAAA,IACL,YAAY,CAAC,SACX;AAAA,MAAsC,MACpCiC,QAAAA,YAAW,iDAAmB,CAAI,IAAA,mCAAY,CAAA,CAAE;AAAA,IAClD;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,7 @@
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 { createForm } from './createForm';
4
+ export type { CreateField, FieldComponent } from './createField';
5
+ export { createField, Field } from './createField';
6
+ export type { FormFactory } from './createFormFactory';
7
+ export { createFormFactory } from './createFormFactory';
@@ -0,0 +1,7 @@
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 { createForm } from './createForm';
4
+ export type { CreateField, FieldComponent } from './createField';
5
+ export { createField, Field } from './createField';
6
+ export type { FormFactory } from './createFormFactory';
7
+ export { createFormFactory } from './createFormFactory';
@@ -1,20 +1,16 @@
1
- 'use strict';
2
-
3
- var formCore = require('@tanstack/form-core');
4
- var web = require('solid-js/web');
5
- var solidJs = require('solid-js');
6
- var solidStore = require('@tanstack/solid-store');
7
-
8
- // src/index.ts
9
- var formContext = solidJs.createContext(void 0);
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const formCore = require("@tanstack/form-core");
4
+ const web = require("solid-js/web");
5
+ const solidJs = require("solid-js");
6
+ const solidStore = require("@tanstack/solid-store");
7
+ const formContext = solidJs.createContext(void 0);
10
8
  function useFormContext() {
11
9
  const formApi = solidJs.useContext(formContext);
12
10
  if (!formApi)
13
11
  throw new Error(`You are trying to use the form API outside of a form!`);
14
12
  return formApi;
15
13
  }
16
-
17
- // src/createField.tsx
18
14
  function makeFieldReactive(fieldApi) {
19
15
  const [flag, setFlag] = solidJs.createSignal(false);
20
16
  const fieldApiMemo = solidJs.createMemo(() => [flag(), fieldApi]);
@@ -62,10 +58,8 @@ function Field(props) {
62
58
  }
63
59
  });
64
60
  }
65
-
66
- // src/createForm.tsx
67
61
  function createForm(opts) {
68
- const options = opts?.();
62
+ const options = opts == null ? void 0 : opts();
69
63
  const formApi = new formCore.FormApi(options);
70
64
  formApi.Provider = function Provider(props) {
71
65
  solidJs.onMount(formApi.mount);
@@ -79,32 +73,32 @@ function createForm(opts) {
79
73
  formApi.createField = createField;
80
74
  formApi.useStore = (selector) => solidStore.useStore(formApi.store, selector);
81
75
  formApi.Subscribe = (props) => formCore.functionalUpdate(props.children, solidStore.useStore(formApi.store, props.selector));
82
- solidJs.createComputed(() => formApi.update(opts?.()));
76
+ solidJs.createComputed(() => formApi.update(opts == null ? void 0 : opts()));
83
77
  return formApi;
84
78
  }
85
79
  function createFormFactory(defaultOpts) {
86
80
  return {
87
81
  createForm: (opts) => createForm(
88
- () => solidJs.mergeProps(defaultOpts?.() ?? {}, opts?.() ?? {})
82
+ () => solidJs.mergeProps((defaultOpts == null ? void 0 : defaultOpts()) ?? {}, (opts == null ? void 0 : opts()) ?? {})
89
83
  ),
90
84
  createField,
91
85
  Field
92
86
  };
93
87
  }
94
-
95
- Object.defineProperty(exports, 'FieldApi', {
88
+ Object.defineProperty(exports, "FieldApi", {
96
89
  enumerable: true,
97
- get: function () { return formCore.FieldApi; }
90
+ get: () => formCore.FieldApi
98
91
  });
99
- Object.defineProperty(exports, 'FormApi', {
92
+ Object.defineProperty(exports, "FormApi", {
100
93
  enumerable: true,
101
- get: function () { return formCore.FormApi; }
94
+ get: () => formCore.FormApi
102
95
  });
103
- Object.defineProperty(exports, 'functionalUpdate', {
96
+ Object.defineProperty(exports, "functionalUpdate", {
104
97
  enumerable: true,
105
- get: function () { return formCore.functionalUpdate; }
98
+ get: () => formCore.functionalUpdate
106
99
  });
107
100
  exports.Field = Field;
108
101
  exports.createField = createField;
109
102
  exports.createForm = createForm;
110
103
  exports.createFormFactory = createFormFactory;
104
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,2 @@
1
+ /// <reference lib="dom" />
2
+ export {};
@@ -0,0 +1 @@
1
+ /// <reference lib="dom" />
@@ -0,0 +1 @@
1
+ /// <reference lib="dom" />
@@ -0,0 +1 @@
1
+ /// <reference lib="dom" />
@@ -0,0 +1 @@
1
+ export declare function sleep(timeout: number): Promise<void>;
@@ -0,0 +1,4 @@
1
+ import type { FieldOptions, DeepKeys, DeepValue, Validator } from '@tanstack/form-core';
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>> = FieldOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
3
+ mode?: 'value' | 'array';
4
+ };
@@ -0,0 +1,27 @@
1
+ import { FieldApi, type Validator } from '@tanstack/form-core';
2
+ import type { DeepKeys, DeepValue, Narrow } from '@tanstack/form-core';
3
+ import type { JSXElement } from 'solid-js';
4
+ import type { CreateFieldOptions } from './types';
5
+ declare module '@tanstack/form-core' {
6
+ interface FieldApi<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>> {
7
+ Field: FieldComponent<TParentData, TFormValidator>;
8
+ }
9
+ }
10
+ export type CreateField<TParentData> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => {
11
+ name: Narrow<TName>;
12
+ } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>) => () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, DeepValue<TParentData, TName>>;
13
+ export declare function createField<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>;
14
+ type FieldComponentProps<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>> = {
15
+ children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
16
+ } & (TParentData extends any[] ? {
17
+ name?: TName;
18
+ index: number;
19
+ } : {
20
+ name: TName;
21
+ index?: never;
22
+ }) & Omit<CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>, 'name' | 'index'>;
23
+ export type FieldComponent<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>>({ children, ...fieldOptions }: FieldComponentProps<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
24
+ export declare function Field<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(props: {
25
+ children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>) => JSXElement;
26
+ } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): import("solid-js").JSX.Element;
27
+ export {};
@@ -0,0 +1,21 @@
1
+ import type { FormOptions, FormState, Validator } from '@tanstack/form-core';
2
+ import { FormApi } from '@tanstack/form-core';
3
+ import { type JSXElement } from 'solid-js';
4
+ import { type CreateField, type FieldComponent } from './createField';
5
+ type NoInfer<T> = [T][T extends any ? 0 : never];
6
+ declare module '@tanstack/form-core' {
7
+ interface FormApi<TFormData, TFormValidator> {
8
+ Provider: (props: {
9
+ children: any;
10
+ }) => JSXElement;
11
+ Field: FieldComponent<TFormData, TFormValidator>;
12
+ createField: CreateField<TFormData>;
13
+ useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
14
+ Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
15
+ selector?: (state: NoInfer<FormState<TFormData>>) => TSelected;
16
+ children: ((state: () => NoInfer<TSelected>) => JSXElement) | JSXElement;
17
+ }) => JSXElement;
18
+ }
19
+ }
20
+ export declare function createForm<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts?: () => FormOptions<TParentData, TFormValidator>): FormApi<TParentData, TFormValidator>;
21
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { FormApi, FormOptions, Validator } from '@tanstack/form-core';
2
+ import { type CreateField, type FieldComponent } from './createField';
3
+ export type FormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = {
4
+ createForm: (opts?: () => FormOptions<TFormData, TFormValidator>) => FormApi<TFormData, TFormValidator>;
5
+ createField: CreateField<TFormData>;
6
+ Field: FieldComponent<TFormData, TFormValidator>;
7
+ };
8
+ export declare function createFormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts?: () => FormOptions<TFormData, TFormValidator>): FormFactory<TFormData, TFormValidator>;
@@ -0,0 +1,11 @@
1
+ import type { FormApi, Validator } from '@tanstack/form-core';
2
+ type FormContextType = undefined | {
3
+ formApi: FormApi<any, Validator<any, unknown> | undefined>;
4
+ parentFieldName?: string;
5
+ };
6
+ export declare const formContext: import("solid-js").Context<FormContextType>;
7
+ export declare function useFormContext(): {
8
+ formApi: FormApi<any, Validator<any, unknown> | undefined>;
9
+ parentFieldName?: string | undefined;
10
+ };
11
+ export {};
@@ -0,0 +1,7 @@
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 { createForm } from './createForm';
4
+ export type { CreateField, FieldComponent } from './createField';
5
+ export { createField, Field } from './createField';
6
+ export type { FormFactory } from './createFormFactory';
7
+ export { createFormFactory } from './createFormFactory';
@@ -0,0 +1,7 @@
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 { createForm } from './createForm';
4
+ export type { CreateField, FieldComponent } from './createField';
5
+ export { createField, Field } from './createField';
6
+ export type { FormFactory } from './createFormFactory';
7
+ export { createFormFactory } from './createFormFactory';
@@ -1,19 +1,15 @@
1
- import { FieldApi, FormApi, functionalUpdate } from '@tanstack/form-core';
2
- export { FieldApi, FormApi, functionalUpdate } from '@tanstack/form-core';
3
- import { createComponent, mergeProps } from 'solid-js/web';
4
- import { createContext, createComputed, onMount, onCleanup, createComponent as createComponent$1, mergeProps as mergeProps$1, useContext, createSignal, createMemo } from 'solid-js';
5
- import { useStore } from '@tanstack/solid-store';
6
-
7
- // src/index.ts
8
- var formContext = createContext(void 0);
1
+ import { FieldApi, FormApi, functionalUpdate } from "@tanstack/form-core";
2
+ import { FieldApi as FieldApi2, FormApi as FormApi2, functionalUpdate as functionalUpdate2 } from "@tanstack/form-core";
3
+ import { createComponent, mergeProps } from "solid-js/web";
4
+ import { createContext, useContext, createComputed, onMount, onCleanup, createComponent as createComponent$1, createSignal, createMemo, mergeProps as mergeProps$1 } from "solid-js";
5
+ import { useStore } from "@tanstack/solid-store";
6
+ const formContext = createContext(void 0);
9
7
  function useFormContext() {
10
8
  const formApi = useContext(formContext);
11
9
  if (!formApi)
12
10
  throw new Error(`You are trying to use the form API outside of a form!`);
13
11
  return formApi;
14
12
  }
15
-
16
- // src/createField.tsx
17
13
  function makeFieldReactive(fieldApi) {
18
14
  const [flag, setFlag] = createSignal(false);
19
15
  const fieldApiMemo = createMemo(() => [flag(), fieldApi]);
@@ -61,10 +57,8 @@ function Field(props) {
61
57
  }
62
58
  });
63
59
  }
64
-
65
- // src/createForm.tsx
66
60
  function createForm(opts) {
67
- const options = opts?.();
61
+ const options = opts == null ? void 0 : opts();
68
62
  const formApi = new FormApi(options);
69
63
  formApi.Provider = function Provider(props) {
70
64
  onMount(formApi.mount);
@@ -78,17 +72,25 @@ function createForm(opts) {
78
72
  formApi.createField = createField;
79
73
  formApi.useStore = (selector) => useStore(formApi.store, selector);
80
74
  formApi.Subscribe = (props) => functionalUpdate(props.children, useStore(formApi.store, props.selector));
81
- createComputed(() => formApi.update(opts?.()));
75
+ createComputed(() => formApi.update(opts == null ? void 0 : opts()));
82
76
  return formApi;
83
77
  }
84
78
  function createFormFactory(defaultOpts) {
85
79
  return {
86
80
  createForm: (opts) => createForm(
87
- () => mergeProps$1(defaultOpts?.() ?? {}, opts?.() ?? {})
81
+ () => mergeProps$1((defaultOpts == null ? void 0 : defaultOpts()) ?? {}, (opts == null ? void 0 : opts()) ?? {})
88
82
  ),
89
83
  createField,
90
84
  Field
91
85
  };
92
86
  }
93
-
94
- export { Field, createField, createForm, createFormFactory };
87
+ export {
88
+ Field,
89
+ FieldApi2 as FieldApi,
90
+ FormApi2 as FormApi,
91
+ createField,
92
+ createForm,
93
+ createFormFactory,
94
+ functionalUpdate2 as functionalUpdate
95
+ };
96
+ //# sourceMappingURL=index.mjs.map
@@ -1,19 +1,15 @@
1
- import { FieldApi, FormApi, functionalUpdate } from '@tanstack/form-core';
2
- export { FieldApi, FormApi, functionalUpdate } from '@tanstack/form-core';
3
- import { createComponent, mergeProps } from 'solid-js/web';
4
- import { createContext, createComputed, onMount, onCleanup, createComponent as createComponent$1, mergeProps as mergeProps$1, useContext, createSignal, createMemo } from 'solid-js';
5
- import { useStore } from '@tanstack/solid-store';
6
-
7
- // src/index.ts
8
- var formContext = createContext(void 0);
1
+ import { FieldApi, FormApi, functionalUpdate } from "@tanstack/form-core";
2
+ import { FieldApi as FieldApi2, FormApi as FormApi2, functionalUpdate as functionalUpdate2 } from "@tanstack/form-core";
3
+ import { createComponent, mergeProps } from "solid-js/web";
4
+ import { createContext, useContext, createComputed, onMount, onCleanup, createComponent as createComponent$1, createSignal, createMemo, mergeProps as mergeProps$1 } from "solid-js";
5
+ import { useStore } from "@tanstack/solid-store";
6
+ const formContext = createContext(void 0);
9
7
  function useFormContext() {
10
8
  const formApi = useContext(formContext);
11
9
  if (!formApi)
12
10
  throw new Error(`You are trying to use the form API outside of a form!`);
13
11
  return formApi;
14
12
  }
15
-
16
- // src/createField.tsx
17
13
  function makeFieldReactive(fieldApi) {
18
14
  const [flag, setFlag] = createSignal(false);
19
15
  const fieldApiMemo = createMemo(() => [flag(), fieldApi]);
@@ -61,10 +57,8 @@ function Field(props) {
61
57
  }
62
58
  });
63
59
  }
64
-
65
- // src/createForm.tsx
66
60
  function createForm(opts) {
67
- const options = opts?.();
61
+ const options = opts == null ? void 0 : opts();
68
62
  const formApi = new FormApi(options);
69
63
  formApi.Provider = function Provider(props) {
70
64
  onMount(formApi.mount);
@@ -78,17 +72,25 @@ function createForm(opts) {
78
72
  formApi.createField = createField;
79
73
  formApi.useStore = (selector) => useStore(formApi.store, selector);
80
74
  formApi.Subscribe = (props) => functionalUpdate(props.children, useStore(formApi.store, props.selector));
81
- createComputed(() => formApi.update(opts?.()));
75
+ createComputed(() => formApi.update(opts == null ? void 0 : opts()));
82
76
  return formApi;
83
77
  }
84
78
  function createFormFactory(defaultOpts) {
85
79
  return {
86
80
  createForm: (opts) => createForm(
87
- () => mergeProps$1(defaultOpts?.() ?? {}, opts?.() ?? {})
81
+ () => mergeProps$1((defaultOpts == null ? void 0 : defaultOpts()) ?? {}, (opts == null ? void 0 : opts()) ?? {})
88
82
  ),
89
83
  createField,
90
84
  Field
91
85
  };
92
86
  }
93
-
94
- export { Field, createField, createForm, createFormFactory };
87
+ export {
88
+ Field,
89
+ FieldApi2 as FieldApi,
90
+ FormApi2 as FormApi,
91
+ createField,
92
+ createForm,
93
+ createFormFactory,
94
+ functionalUpdate2 as functionalUpdate
95
+ };
96
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/formContext.ts","../../src/createField.tsx","../../src/createForm.tsx","../../src/createFormFactory.ts"],"sourcesContent":["import { createContext, useContext } from 'solid-js'\nimport type { FormApi, Validator } from '@tanstack/form-core'\n\ntype FormContextType =\n | undefined\n | {\n formApi: FormApi<any, Validator<any, unknown> | undefined>\n parentFieldName?: string\n }\n\nexport const formContext = createContext<FormContextType>(undefined)\n\nexport function useFormContext() {\n const formApi: FormContextType = useContext(formContext)\n\n if (!formApi)\n throw new Error(`You are trying to use the form API outside of a form!`)\n\n return formApi\n}\n","import { FieldApi, type Validator } from '@tanstack/form-core'\nimport {\n createComponent,\n createComputed,\n createMemo,\n createSignal,\n onCleanup,\n onMount,\n} from 'solid-js'\nimport { formContext, useFormContext } from './formContext'\n\nimport type { DeepKeys, DeepValue, Narrow } from '@tanstack/form-core'\nimport type { JSXElement } from 'solid-js'\nimport type { CreateFieldOptions } from './types'\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FieldApi<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n > {\n Field: FieldComponent<TParentData, TFormValidator>\n }\n}\n\nexport type CreateField<TParentData> = <\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n opts: () => { name: Narrow<TName> } & CreateFieldOptions<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >,\n) => () => FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n DeepValue<TParentData, TName>\n>\n\n// ugly way to trick solid into triggering updates for changes on the fieldApi\nfunction makeFieldReactive<FieldApiT extends FieldApi<any, any, any, any>>(\n fieldApi: FieldApiT,\n): () => FieldApiT {\n const [flag, setFlag] = createSignal(false)\n const fieldApiMemo = createMemo(() => [flag(), fieldApi] as const)\n const unsubscribeStore = fieldApi.store.subscribe(() => setFlag((f) => !f))\n onCleanup(unsubscribeStore)\n return () => fieldApiMemo()[1]\n}\n\nexport function createField<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n opts: () => CreateFieldOptions<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >,\n): () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator> {\n // Get the form API either manually or from context\n const { formApi, parentFieldName } = useFormContext()\n\n const options = opts()\n const name = (\n typeof options.index === 'number'\n ? [parentFieldName, options.index, options.name]\n : [parentFieldName, options.name]\n )\n .filter((d) => d !== undefined)\n .join('.')\n\n const fieldApi = new FieldApi({\n ...options,\n form: formApi,\n name: name as typeof options.name as never,\n })\n fieldApi.Field = Field as never\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 * createComputed to make sure this effect runs before render effects\n */\n createComputed(() => fieldApi.update({ ...opts(), form: formApi } as never))\n\n // Instantiates field meta and removes it when unrendered\n onMount(() => onCleanup(fieldApi.mount()))\n\n return makeFieldReactive(fieldApi) as never\n}\n\ntype FieldComponentProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = {\n children: (\n fieldApi: () => FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n >,\n ) => JSXElement\n} & (TParentData extends any[]\n ? {\n name?: TName\n index: number\n }\n : {\n name: TName\n index?: never\n }) &\n Omit<\n CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>,\n 'name' | 'index'\n >\n\nexport type FieldComponent<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n> = <\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n>({\n children,\n ...fieldOptions\n}: FieldComponentProps<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator,\n TData\n>) => JSXElement\n\nexport function Field<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TFieldValidator extends\n | Validator<DeepValue<TParentData, TName>, unknown>\n | undefined = undefined,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n props: {\n children: (\n fieldApi: () => FieldApi<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >,\n ) => JSXElement\n } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>,\n) {\n const fieldApi = createField<\n TParentData,\n TName,\n TFieldValidator,\n TFormValidator\n >(() => {\n const { children, ...fieldOptions } = props\n return fieldOptions\n })\n\n return (\n <formContext.Provider\n value={{\n formApi: fieldApi().form as never,\n parentFieldName: String(fieldApi().name),\n }}\n >\n {/* createComponent to make sure the signals in the children component are not tracked */}\n {createComponent(() => props.children(fieldApi), {})}\n </formContext.Provider>\n )\n}\n","import type { FormOptions, FormState, Validator } from '@tanstack/form-core'\nimport { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { createComputed, onMount, type JSXElement } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport {\n Field,\n createField,\n type CreateField,\n type FieldComponent,\n} from './createField'\nimport { formContext } from './formContext'\n\ntype NoInfer<T> = [T][T extends any ? 0 : never]\n\ndeclare module '@tanstack/form-core' {\n // eslint-disable-next-line no-shadow\n interface FormApi<TFormData, TFormValidator> {\n Provider: (props: { children: any }) => JSXElement\n Field: FieldComponent<TFormData, TFormValidator>\n createField: CreateField<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>) => JSXElement) | JSXElement\n }) => JSXElement\n }\n}\n\nexport function createForm<\n TParentData,\n TFormValidator extends\n | Validator<TParentData, unknown>\n | undefined = undefined,\n>(\n opts?: () => FormOptions<TParentData, TFormValidator>,\n): FormApi<TParentData, TFormValidator> {\n const options = opts?.()\n const formApi = new FormApi<TParentData, TFormValidator>(options)\n\n formApi.Provider = function Provider(props) {\n onMount(formApi.mount)\n return (\n <formContext.Provider {...props} value={{ formApi: formApi as never }} />\n )\n }\n formApi.Field = Field as any\n formApi.createField = createField as CreateField<TParentData>\n formApi.useStore = (selector) => useStore(formApi.store, selector)\n formApi.Subscribe = (props) =>\n functionalUpdate(props.children, useStore(formApi.store, props.selector))\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(() => formApi.update(opts?.()))\n\n return formApi\n}\n","import type { FormApi, FormOptions, Validator } from '@tanstack/form-core'\n\nimport {\n type CreateField,\n type FieldComponent,\n Field,\n createField,\n} from './createField'\nimport { createForm } from './createForm'\nimport { mergeProps } from 'solid-js'\n\nexport type FormFactory<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n> = {\n createForm: (\n opts?: () => FormOptions<TFormData, TFormValidator>,\n ) => FormApi<TFormData, TFormValidator>\n createField: CreateField<TFormData>\n Field: FieldComponent<TFormData, TFormValidator>\n}\n\nexport function createFormFactory<\n TFormData,\n TFormValidator extends Validator<TFormData, unknown> | undefined = undefined,\n>(\n defaultOpts?: () => FormOptions<TFormData, TFormValidator>,\n): FormFactory<TFormData, TFormValidator> {\n return {\n createForm: (opts) =>\n createForm<TFormData, TFormValidator>(() =>\n mergeProps(defaultOpts?.() ?? {}, opts?.() ?? {}),\n ),\n createField,\n Field: Field as never,\n }\n}\n"],"names":["makeFieldReactive","fieldApi","flag","setFlag","createSignal","fieldApiMemo","createMemo","unsubscribeStore","store","subscribe","f","onCleanup","createField","opts","formApi","parentFieldName","useFormContext","options","name","index","filter","d","undefined","join","FieldApi","form","Field","createComputed","update","onMount","mount","props","children","fieldOptions","_$createComponent","formContext","Provider","value","String","createComponent","createForm","FormApi","_$mergeProps","useStore","selector","Subscribe","functionalUpdate","mergeProps"],"mappings":";;;;;AAUa,MAAA,cAAc,cAA+B,MAAS;AAE5D,SAAS,iBAAiB;AACzB,QAAA,UAA2B,WAAW,WAAW;AAEvD,MAAI,CAAC;AACG,UAAA,IAAI,MAAM,uDAAuD;AAElE,SAAA;AACT;ACqCA,SAASA,kBACPC,UACiB;AACjB,QAAM,CAACC,MAAMC,OAAO,IAAIC,aAAa,KAAK;AAC1C,QAAMC,eAAeC,WAAW,MAAM,CAACJ,KAAM,GAAED,QAAQ,CAAU;AACjE,QAAMM,mBAAmBN,SAASO,MAAMC,UAAU,MAAMN,QAASO,OAAM,CAACA,CAAC,CAAC;AAC1EC,YAAUJ,gBAAgB;AAC1B,SAAO,MAAMF,eAAe,CAAC;AAC/B;AAEO,SAASO,YAUdC,MAMqE;AAErE,QAAM;AAAA,IAAEC;AAAAA,IAASC;AAAAA,EAAiB,IAAGC,eAAc;AAEnD,QAAMC,UAAUJ;AAChB,QAAMK,QACJ,OAAOD,QAAQE,UAAU,WACrB,CAACJ,iBAAiBE,QAAQE,OAAOF,QAAQC,IAAI,IAC7C,CAACH,iBAAiBE,QAAQC,IAAI,GAEjCE,OAAQC,OAAMA,MAAMC,MAAS,EAC7BC,KAAK,GAAG;AAEX,QAAMtB,WAAW,IAAIuB,SAAS;AAAA,IAC5B,GAAGP;AAAAA,IACHQ,MAAMX;AAAAA,IACNI;AAAAA,EACF,CAAC;AACDjB,WAASyB,QAAQA;AAQjBC,iBAAe,MAAM1B,SAAS2B,OAAO;AAAA,IAAE,GAAGf,KAAM;AAAA,IAAEY,MAAMX;AAAAA,EAAkB,CAAA,CAAC;AAG3Ee,UAAQ,MAAMlB,UAAUV,SAAS6B,MAAK,CAAE,CAAC;AAEzC,SAAO9B,kBAAkBC,QAAQ;AACnC;AA0DO,SAASyB,MAUdK,OAUA;AACA,QAAM9B,WAAWW,YAKf,MAAM;AACN,UAAM;AAAA,MAAEoB;AAAAA,MAAU,GAAGC;AAAAA,IAAc,IAAGF;AACtC,WAAOE;AAAAA,EACT,CAAC;AAED,SAAAC,gBACGC,YAAYC,UAAQ;AAAA,IAAA,IACnBC,QAAK;AAAA,aAAE;AAAA,QACLvB,SAASb,SAAQ,EAAGwB;AAAAA,QACpBV,iBAAiBuB,OAAOrC,SAAU,EAACiB,IAAI;AAAA;IACxC;AAAA,IAAA,IAAAc,WAAA;AAAA,aAGAO,kBAAgB,MAAMR,MAAMC,SAAS/B,QAAQ,GAAG,CAAA,CAAE;AAAA,IAAC;AAAA,EAAA,CAAA;AAG1D;ACxLO,SAASuC,WAMd3B,MACsC;AACtC,QAAMI,UAAUJ;AAChB,QAAMC,UAAU,IAAI2B,QAAqCxB,OAAO;AAEhEH,UAAQsB,WAAW,SAASA,SAASL,OAAO;AAC1CF,YAAQf,QAAQgB,KAAK;AACrB,WAAAI,gBACGC,YAAYC,UAAQM,WAAKX,OAAK;AAAA,MAAEM,OAAO;AAAA,QAAEvB;AAAAA,MAA0B;AAAA,IAAC,CAAA,CAAA;AAAA;AAGzEA,UAAQY,QAAQA;AAChBZ,UAAQF,cAAcA;AACtBE,UAAQ6B,WAAYC,cAAaD,SAAS7B,QAAQN,OAAOoC,QAAQ;AACjE9B,UAAQ+B,YAAad,WACnBe,iBAAiBf,MAAMC,UAAUW,SAAS7B,QAAQN,OAAOuB,MAAMa,QAAQ,CAAC;AAM1EjB,iBAAe,MAAMb,QAAQc,OAAOf,8BAAQ,CAAC;AAE7C,SAAOC;AACT;ACtCO,SAAS,kBAId,aACwC;AACjC,SAAA;AAAA,IACL,YAAY,CAAC,SACX;AAAA,MAAsC,MACpCiC,cAAW,iDAAmB,CAAI,IAAA,mCAAY,CAAA,CAAE;AAAA,IAClD;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,2 @@
1
+ /// <reference lib="dom" />
2
+ export {};
@@ -0,0 +1 @@
1
+ /// <reference lib="dom" />
@@ -0,0 +1 @@
1
+ /// <reference lib="dom" />
@@ -0,0 +1 @@
1
+ /// <reference lib="dom" />
@@ -0,0 +1 @@
1
+ export declare function sleep(timeout: number): Promise<void>;
@@ -0,0 +1,4 @@
1
+ import type { FieldOptions, DeepKeys, DeepValue, Validator } from '@tanstack/form-core';
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>> = FieldOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
3
+ mode?: 'value' | 'array';
4
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-form",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Powerful, type-safe forms for Solid.",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
@@ -12,61 +12,48 @@
12
12
  },
13
13
  "sideEffects": false,
14
14
  "files": [
15
- "build",
15
+ "dist",
16
16
  "src"
17
17
  ],
18
18
  "type": "module",
19
- "main": "./build/index.cjs",
20
- "module": "./build/index.js",
21
- "types": "./build/index.d.ts",
19
+ "types": "dist/mjs/index.d.mts",
20
+ "main": "dist/cjs/index.cjs",
21
+ "module": "dist/mjs/index.mjs",
22
22
  "exports": {
23
- "development": {
23
+ ".": {
24
24
  "import": {
25
- "types": "./build/index.d.ts",
26
- "default": "./build/dev.js"
25
+ "types": "./dist/mjs/index.d.mts",
26
+ "default": "./dist/mjs/index.mjs"
27
27
  },
28
28
  "require": {
29
- "types": "./build/index.d.cts",
30
- "default": "./build/dev.cjs"
29
+ "types": "./dist/cjs/index.d.cts",
30
+ "default": "./dist/cjs/index.cjs"
31
31
  }
32
32
  },
33
- "import": {
34
- "types": "./build/index.d.ts",
35
- "default": "./build/index.js"
36
- },
37
- "require": {
38
- "types": "./build/index.d.cts",
39
- "default": "./build/index.cjs"
40
- }
41
- },
42
- "nx": {
43
- "targets": {
44
- "test:build": {
45
- "dependsOn": [
46
- "build"
47
- ]
48
- }
49
- }
33
+ "./package.json": "./package.json"
50
34
  },
51
35
  "devDependencies": {
52
36
  "solid-js": "^1.7.8",
53
- "tsup-preset-solid": "^2.1.0",
54
- "vite-plugin-solid": "^2.7.0"
37
+ "vite-plugin-solid": "^2.8.0"
55
38
  },
56
39
  "dependencies": {
57
40
  "@tanstack/solid-store": "^0.2.1",
58
- "@tanstack/form-core": "0.11.0"
41
+ "@tanstack/form-core": "0.13.0"
59
42
  },
60
43
  "peerDependencies": {
61
44
  "solid-js": "^1.6.0"
62
45
  },
63
46
  "scripts": {
64
- "clean": "rimraf ./build && rimraf ./coverage",
47
+ "clean": "rimraf ./dist && rimraf ./coverage",
65
48
  "test:eslint": "eslint --ext .ts,.tsx ./src",
66
- "test:types": "tsc --noEmit",
49
+ "test:types:versions49": "../../node_modules/typescript49/bin/tsc --noEmit",
50
+ "test:types:versions50": "../../node_modules/typescript50/bin/tsc --noEmit",
51
+ "test:types:versions51": "../../node_modules/typescript51/bin/tsc --noEmit",
52
+ "test:types:versions52": "tsc --noEmit",
53
+ "test:types": "pnpm run \"/^test:types:versions.*/\"",
67
54
  "test:lib": "vitest run --coverage",
68
55
  "test:lib:dev": "pnpm run test:lib --watch",
69
56
  "test:build": "publint --strict",
70
- "build": "tsup"
57
+ "build": "vite build"
71
58
  }
72
59
  }
@@ -57,7 +57,7 @@ it('should type onChange properly', () => {
57
57
  return null
58
58
  },
59
59
  }}
60
- children={(field) => null}
60
+ children={() => null}
61
61
  />
62
62
  <form.Field
63
63
  name="age"
@@ -67,7 +67,7 @@ it('should type onChange properly', () => {
67
67
  return null
68
68
  },
69
69
  }}
70
- children={(field) => null}
70
+ children={() => null}
71
71
  />
72
72
  </form.Provider>
73
73
  )
package/build/index.d.cts DELETED
@@ -1,56 +0,0 @@
1
- import { DeepKeys, Validator, DeepValue, FieldOptions, Narrow, FieldApi, FormState, FormOptions, FormApi } from '@tanstack/form-core';
2
- export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, RequiredByKey, Updater, UpdaterFn, ValidationCause, ValidationError, ValidationMeta, functionalUpdate } from '@tanstack/form-core';
3
- import { JSXElement } from 'solid-js';
4
-
5
- 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>> = FieldOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
6
- mode?: 'value' | 'array';
7
- };
8
-
9
- declare module '@tanstack/form-core' {
10
- interface FieldApi<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>> {
11
- Field: FieldComponent<TParentData, TFormValidator>;
12
- }
13
- }
14
- type CreateField<TParentData> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => {
15
- name: Narrow<TName>;
16
- } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>) => () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, DeepValue<TParentData, TName>>;
17
- declare function createField<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>;
18
- type FieldComponentProps<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>> = {
19
- children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
20
- } & (TParentData extends any[] ? {
21
- name?: TName;
22
- index: number;
23
- } : {
24
- name: TName;
25
- index?: never;
26
- }) & Omit<CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>, 'name' | 'index'>;
27
- type FieldComponent<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>>({ children, ...fieldOptions }: FieldComponentProps<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
28
- declare function Field<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(props: {
29
- children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>) => JSXElement;
30
- } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): any;
31
-
32
- type NoInfer<T> = [T][T extends any ? 0 : never];
33
- declare module '@tanstack/form-core' {
34
- interface FormApi<TFormData, TFormValidator> {
35
- Provider: (props: {
36
- children: any;
37
- }) => JSXElement;
38
- Field: FieldComponent<TFormData, TFormValidator>;
39
- createField: CreateField<TFormData>;
40
- useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
41
- Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
42
- selector?: (state: NoInfer<FormState<TFormData>>) => TSelected;
43
- children: ((state: () => NoInfer<TSelected>) => JSXElement) | JSXElement;
44
- }) => JSXElement;
45
- }
46
- }
47
- declare function createForm<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts?: () => FormOptions<TParentData, TFormValidator>): FormApi<TParentData, TFormValidator>;
48
-
49
- type FormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = {
50
- createForm: (opts?: () => FormOptions<TFormData, TFormValidator>) => FormApi<TFormData, TFormValidator>;
51
- createField: CreateField<TFormData>;
52
- Field: FieldComponent<TFormData, TFormValidator>;
53
- };
54
- declare function createFormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts?: () => FormOptions<TFormData, TFormValidator>): FormFactory<TFormData, TFormValidator>;
55
-
56
- export { CreateField, Field, FieldComponent, FormFactory, createField, createForm, createFormFactory };
package/build/index.d.ts DELETED
@@ -1,56 +0,0 @@
1
- import { DeepKeys, Validator, DeepValue, FieldOptions, Narrow, FieldApi, FormState, FormOptions, FormApi } from '@tanstack/form-core';
2
- export { DeepKeys, DeepValue, FieldApi, FieldApiOptions, FieldInfo, FieldMeta, FieldOptions, FieldState, FormApi, FormOptions, FormState, RequiredByKey, Updater, UpdaterFn, ValidationCause, ValidationError, ValidationMeta, functionalUpdate } from '@tanstack/form-core';
3
- import { JSXElement } from 'solid-js';
4
-
5
- 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>> = FieldOptions<TParentData, TName, TFieldValidator, TFormValidator, TData> & {
6
- mode?: 'value' | 'array';
7
- };
8
-
9
- declare module '@tanstack/form-core' {
10
- interface FieldApi<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>> {
11
- Field: FieldComponent<TParentData, TFormValidator>;
12
- }
13
- }
14
- type CreateField<TParentData> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => {
15
- name: Narrow<TName>;
16
- } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>) => () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, DeepValue<TParentData, TName>>;
17
- declare function createField<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts: () => CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>;
18
- type FieldComponentProps<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>> = {
19
- children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
20
- } & (TParentData extends any[] ? {
21
- name?: TName;
22
- index: number;
23
- } : {
24
- name: TName;
25
- index?: never;
26
- }) & Omit<CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>, 'name' | 'index'>;
27
- type FieldComponent<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined> = <TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>>({ children, ...fieldOptions }: FieldComponentProps<TParentData, TName, TFieldValidator, TFormValidator, TData>) => JSXElement;
28
- declare function Field<TParentData, TName extends DeepKeys<TParentData>, TFieldValidator extends Validator<DeepValue<TParentData, TName>, unknown> | undefined = undefined, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(props: {
29
- children: (fieldApi: () => FieldApi<TParentData, TName, TFieldValidator, TFormValidator>) => JSXElement;
30
- } & CreateFieldOptions<TParentData, TName, TFieldValidator, TFormValidator>): any;
31
-
32
- type NoInfer<T> = [T][T extends any ? 0 : never];
33
- declare module '@tanstack/form-core' {
34
- interface FormApi<TFormData, TFormValidator> {
35
- Provider: (props: {
36
- children: any;
37
- }) => JSXElement;
38
- Field: FieldComponent<TFormData, TFormValidator>;
39
- createField: CreateField<TFormData>;
40
- useStore: <TSelected = NoInfer<FormState<TFormData>>>(selector?: (state: NoInfer<FormState<TFormData>>) => TSelected) => () => TSelected;
41
- Subscribe: <TSelected = NoInfer<FormState<TFormData>>>(props: {
42
- selector?: (state: NoInfer<FormState<TFormData>>) => TSelected;
43
- children: ((state: () => NoInfer<TSelected>) => JSXElement) | JSXElement;
44
- }) => JSXElement;
45
- }
46
- }
47
- declare function createForm<TParentData, TFormValidator extends Validator<TParentData, unknown> | undefined = undefined>(opts?: () => FormOptions<TParentData, TFormValidator>): FormApi<TParentData, TFormValidator>;
48
-
49
- type FormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined> = {
50
- createForm: (opts?: () => FormOptions<TFormData, TFormValidator>) => FormApi<TFormData, TFormValidator>;
51
- createField: CreateField<TFormData>;
52
- Field: FieldComponent<TFormData, TFormValidator>;
53
- };
54
- declare function createFormFactory<TFormData, TFormValidator extends Validator<TFormData, unknown> | undefined = undefined>(defaultOpts?: () => FormOptions<TFormData, TFormValidator>): FormFactory<TFormData, TFormValidator>;
55
-
56
- export { CreateField, Field, FieldComponent, FormFactory, createField, createForm, createFormFactory };