{"version":3,"file":"createForm.cjs","sources":["../../src/createForm.tsx"],"sourcesContent":["import { FormApi, functionalUpdate } from '@tanstack/form-core'\nimport { createComputed, onMount } from 'solid-js'\nimport { useStore } from '@tanstack/solid-store'\nimport { Field, createField } from './createField'\nimport { FormGroup } from './createFormGroup'\nimport type {\n  FormAsyncValidateOrFn,\n  FormOptions,\n  FormState,\n  FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { JSXElement } from 'solid-js'\nimport type { FieldComponent } from './createField'\nimport type { FormGroupComponent } from './createFormGroup'\n\nexport interface SolidFormApi<\n  TParentData,\n  TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TSubmitMeta,\n> {\n  Field: FieldComponent<\n    TParentData,\n    TFormOnMount,\n    TFormOnChange,\n    TFormOnChangeAsync,\n    TFormOnBlur,\n    TFormOnBlurAsync,\n    TFormOnSubmit,\n    TFormOnSubmitAsync,\n    TFormOnDynamic,\n    TFormOnDynamicAsync,\n    TFormOnServer,\n    TSubmitMeta\n  >\n  FormGroup: FormGroupComponent<\n    TParentData,\n    TFormOnMount,\n    TFormOnChange,\n    TFormOnChangeAsync,\n    TFormOnBlur,\n    TFormOnBlurAsync,\n    TFormOnSubmit,\n    TFormOnSubmitAsync,\n    TFormOnDynamic,\n    TFormOnDynamicAsync,\n    TFormOnServer,\n    TSubmitMeta\n  >\n  useStore: <\n    TSelected = NoInfer<\n      FormState<\n        TParentData,\n        TFormOnMount,\n        TFormOnChange,\n        TFormOnChangeAsync,\n        TFormOnBlur,\n        TFormOnBlurAsync,\n        TFormOnSubmit,\n        TFormOnSubmitAsync,\n        TFormOnDynamic,\n        TFormOnDynamicAsync,\n        TFormOnServer\n      >\n    >,\n  >(\n    selector?: (\n      state: NoInfer<\n        FormState<\n          TParentData,\n          TFormOnMount,\n          TFormOnChange,\n          TFormOnChangeAsync,\n          TFormOnBlur,\n          TFormOnBlurAsync,\n          TFormOnSubmit,\n          TFormOnSubmitAsync,\n          TFormOnDynamic,\n          TFormOnDynamicAsync,\n          TFormOnServer\n        >\n      >,\n    ) => TSelected,\n  ) => () => TSelected\n  Subscribe: <\n    TSelected = NoInfer<\n      FormState<\n        TParentData,\n        TFormOnMount,\n        TFormOnChange,\n        TFormOnChangeAsync,\n        TFormOnBlur,\n        TFormOnBlurAsync,\n        TFormOnSubmit,\n        TFormOnSubmitAsync,\n        TFormOnDynamic,\n        TFormOnDynamicAsync,\n        TFormOnServer\n      >\n    >,\n  >(props: {\n    selector?: (\n      state: NoInfer<\n        FormState<\n          TParentData,\n          TFormOnMount,\n          TFormOnChange,\n          TFormOnChangeAsync,\n          TFormOnBlur,\n          TFormOnBlurAsync,\n          TFormOnSubmit,\n          TFormOnSubmitAsync,\n          TFormOnDynamic,\n          TFormOnDynamicAsync,\n          TFormOnServer\n        >\n      >,\n    ) => TSelected\n    children: ((state: () => NoInfer<TSelected>) => JSXElement) | JSXElement\n  }) => JSXElement\n}\n\n/**\n * An extended version of the `FormApi` class that includes React-specific functionalities from `ReactFormApi`\n */\nexport type SolidFormExtendedApi<\n  TFormData,\n  TOnMount extends undefined | FormValidateOrFn<TFormData>,\n  TOnChange extends undefined | FormValidateOrFn<TFormData>,\n  TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n  TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n  TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n  TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n  TSubmitMeta,\n> = FormApi<\n  TFormData,\n  TOnMount,\n  TOnChange,\n  TOnChangeAsync,\n  TOnBlur,\n  TOnBlurAsync,\n  TOnSubmit,\n  TOnSubmitAsync,\n  TOnDynamic,\n  TOnDynamicAsync,\n  TOnServer,\n  TSubmitMeta\n> &\n  SolidFormApi<\n    TFormData,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta\n  >\nexport function createForm<\n  TParentData,\n  TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n  TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n  TSubmitMeta,\n>(\n  opts?: () => FormOptions<\n    TParentData,\n    TFormOnMount,\n    TFormOnChange,\n    TFormOnChangeAsync,\n    TFormOnBlur,\n    TFormOnBlurAsync,\n    TFormOnSubmit,\n    TFormOnSubmitAsync,\n    TFormOnDynamic,\n    TFormOnDynamicAsync,\n    TFormOnServer,\n    TSubmitMeta\n  >,\n) {\n  const options = opts?.()\n  const api = new FormApi<\n    TParentData,\n    TFormOnMount,\n    TFormOnChange,\n    TFormOnChangeAsync,\n    TFormOnBlur,\n    TFormOnBlurAsync,\n    TFormOnSubmit,\n    TFormOnSubmitAsync,\n    TFormOnDynamic,\n    TFormOnDynamicAsync,\n    TFormOnServer,\n    TSubmitMeta\n  >(options)\n  const extendedApi: typeof api &\n    SolidFormApi<\n      TParentData,\n      TFormOnMount,\n      TFormOnChange,\n      TFormOnChangeAsync,\n      TFormOnBlur,\n      TFormOnBlurAsync,\n      TFormOnSubmit,\n      TFormOnSubmitAsync,\n      TFormOnDynamic,\n      TFormOnDynamicAsync,\n      TFormOnServer,\n      TSubmitMeta\n    > = api as never\n\n  extendedApi.Field = (props) => <Field {...props} form={api} />\n  extendedApi.FormGroup = (props) => <FormGroup {...props} form={api} />\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","FormGroup","useStore","selector","store","Subscribe","functionalUpdate","children","onMount","mount","createComputed","update"],"mappings":";;;;;;;;AA8KO,SAASA,WAcdC,MAcA;AACA,QAAMC,UAAUD,OAAAA;AAChB,QAAME,MAAM,IAAIC,SAAAA,QAadF,OAAO;AACT,QAAMG,cAcAF;AAENE,cAAYC,QAASC,CAAAA,UAAKC,IAAAA,gBAAMF,YAAAA,OAAKG,IAAAA,WAAKF,OAAK;AAAA,IAAEG,MAAMP;AAAAA,EAAAA,CAAG,CAAA;AAC1DE,cAAYM,YAAaJ,CAAAA,UAAKC,IAAAA,gBAAMG,gBAAAA,WAASF,IAAAA,WAAKF,OAAK;AAAA,IAAEG,MAAMP;AAAAA,EAAAA,CAAG,CAAA;AAClEE,cAAYO,WAAYC,CAAAA,aAAaD,WAAAA,SAAST,IAAIW,OAAOD,QAAQ;AACjER,cAAYU,YAAaR,CAAAA,UACvBS,SAAAA,iBAAiBT,MAAMU,UAAUL,WAAAA,SAAST,IAAIW,OAAOP,MAAMM,QAAQ,CAAC;AAEtEK,UAAAA,QAAQf,IAAIgB,KAAK;AAMjBC,UAAAA,eAAe,MAAMjB,IAAIkB,OAAOpB,OAAAA,CAAQ,CAAC;AAEzC,SAAOI;AACT;;"}