{"version":3,"file":"createFieldGroup.cjs","sources":["../../src/createFieldGroup.tsx"],"sourcesContent":["import { FieldGroupApi, functionalUpdate } from '@tanstack/form-core'\nimport { useStore } from '@tanstack/solid-store'\nimport { onCleanup, onMount } from 'solid-js'\nimport type { Component, JSX, ParentProps } from 'solid-js'\nimport type {\n  DeepKeysOfType,\n  FieldGroupState,\n  FieldsMap,\n  FormAsyncValidateOrFn,\n  FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { LensFieldComponent } from './createField'\nimport type { AppFieldExtendedSolidFormApi } from './createFormHook'\n\n/**\n * @private\n */\nexport type AppFieldExtendedSolidFieldGroupApi<\n  TFormData,\n  TFieldGroupData,\n  TFields extends\n    | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n    | FieldsMap<TFormData, TFieldGroupData>,\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  TFieldComponents extends Record<string, Component<any>>,\n  TFormComponents extends Record<string, Component<any>>,\n> = FieldGroupApi<\n  TFormData,\n  TFieldGroupData,\n  TFields,\n  TOnMount,\n  TOnChange,\n  TOnChangeAsync,\n  TOnBlur,\n  TOnBlurAsync,\n  TOnSubmit,\n  TOnSubmitAsync,\n  TOnDynamic,\n  TOnDynamicAsync,\n  TOnServer,\n  TSubmitMeta\n> &\n  NoInfer<TFormComponents> & {\n    AppField: LensFieldComponent<\n      TFieldGroupData,\n      TSubmitMeta,\n      NoInfer<TFieldComponents>\n    >\n    AppForm: Component<ParentProps>\n    /**\n     * A solid component to render form fields. With this, you can render and manage individual form fields.\n     */\n    Field: LensFieldComponent<TFieldGroupData, TSubmitMeta>\n\n    /**\n     * A `Subscribe` function that allows you to listen and solid to changes in the form's state. It's especially useful when you need to execute side effects or render specific components in response to state updates.\n     */\n    Subscribe: <TSelected = NoInfer<FieldGroupState<TFieldGroupData>>>(props: {\n      selector?: (state: NoInfer<FieldGroupState<TFieldGroupData>>) => TSelected\n      children: ((state: NoInfer<TSelected>) => JSX.Element) | JSX.Element\n    }) => JSX.Element\n  }\n\nexport function createFieldGroup<\n  TFormData,\n  TFieldGroupData,\n  TFields extends\n    | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n    | FieldsMap<TFormData, TFieldGroupData>,\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  TComponents extends Record<string, Component<any>>,\n  TFormComponents extends Record<string, Component<any>>,\n  TSubmitMeta = never,\n>(\n  opts: () => {\n    form:\n      | AppFieldExtendedSolidFormApi<\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          TComponents,\n          TFormComponents\n        >\n      | AppFieldExtendedSolidFieldGroupApi<\n          // Since this only occurs if you nest it within other form lenses, it can be more\n          // lenient with the types.\n          unknown,\n          TFormData,\n          string | FieldsMap<unknown, TFormData>,\n          any,\n          any,\n          any,\n          any,\n          any,\n          any,\n          any,\n          any,\n          any,\n          any,\n          TSubmitMeta,\n          TComponents,\n          TFormComponents\n        >\n    fields: TFields\n    defaultValues?: TFieldGroupData\n    onSubmitMeta?: TSubmitMeta\n    formComponents: TFormComponents\n  },\n): AppFieldExtendedSolidFieldGroupApi<\n  TFormData,\n  TFieldGroupData,\n  TFields,\n  TOnMount,\n  TOnChange,\n  TOnChangeAsync,\n  TOnBlur,\n  TOnBlurAsync,\n  TOnSubmit,\n  TOnSubmitAsync,\n  TOnDynamic,\n  TOnDynamicAsync,\n  TOnServer,\n  TSubmitMeta,\n  TComponents,\n  TFormComponents\n> {\n  const options = opts()\n  const api = new FieldGroupApi(options)\n  const form =\n    options.form instanceof FieldGroupApi\n      ? (options.form.form as AppFieldExtendedSolidFormApi<\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          TComponents,\n          TFormComponents\n        >)\n      : options.form\n\n  const extendedApi: AppFieldExtendedSolidFieldGroupApi<\n    TFormData,\n    TFieldGroupData,\n    TFields,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta,\n    TComponents,\n    TFormComponents\n  > = api as never\n\n  extendedApi.AppForm = (appFormProps) => <form.AppForm {...appFormProps} />\n  extendedApi.AppField = (props) => (\n    <form.AppField {...(api.getFormFieldOptions(props) as any)} />\n  )\n  extendedApi.Field = (props) => (\n    <form.Field {...(api.getFormFieldOptions(props) as any)} />\n  )\n  extendedApi.Subscribe = (props) => {\n    const data = useStore(api.store, props.selector)\n\n    return functionalUpdate(props.children, data()) as Element\n  }\n\n  let mounted = false\n  onMount(() => {\n    const cleanupFn = api.mount()\n    mounted = true\n    onCleanup(() => {\n      cleanupFn()\n      mounted = false\n    })\n  })\n\n  return Object.assign(extendedApi, {\n    ...options.formComponents,\n  }) as AppFieldExtendedSolidFieldGroupApi<\n    TFormData,\n    TFieldGroupData,\n    TFields,\n    TOnMount,\n    TOnChange,\n    TOnChangeAsync,\n    TOnBlur,\n    TOnBlurAsync,\n    TOnSubmit,\n    TOnSubmitAsync,\n    TOnDynamic,\n    TOnDynamicAsync,\n    TOnServer,\n    TSubmitMeta,\n    TComponents,\n    TFormComponents\n  >\n}\n"],"names":["createFieldGroup","opts","options","api","FieldGroupApi","form","extendedApi","AppForm","appFormProps","_$createComponent","AppField","props","_$mergeProps","getFormFieldOptions","Field","Subscribe","data","useStore","store","selector","functionalUpdate","children","onMount","cleanupFn","mount","onCleanup","Object","assign","formComponents"],"mappings":";;;;;;AAyEO,SAASA,iBAoBdC,MA4DA;AACA,QAAMC,UAAUD,KAAAA;AAChB,QAAME,MAAM,IAAIC,SAAAA,cAAcF,OAAO;AACrC,QAAMG,OACJH,QAAQG,gBAAgBD,SAAAA,gBACnBF,QAAQG,KAAKA,OAgBdH,QAAQG;AAEd,QAAMC,cAiBFH;AAEJG,cAAYC,UAAWC,CAAAA,iBAAYC,IAAAA,gBAAMJ,KAAKE,SAAYC,YAAY;AACtEF,cAAYI,WAAYC,CAAAA,UAAKF,IAAAA,gBAC1BJ,KAAKK,UAAQE,IAAAA,WAAA,MAAMT,IAAIU,oBAAoBF,KAAK,CAAQ,CAAA;AAE3DL,cAAYQ,QAASH,CAAAA,UAAKF,IAAAA,gBACvBJ,KAAKS,OAAKF,IAAAA,WAAA,MAAMT,IAAIU,oBAAoBF,KAAK,CAAQ,CAAA;AAExDL,cAAYS,YAAaJ,CAAAA,UAAU;AACjC,UAAMK,OAAOC,WAAAA,SAASd,IAAIe,OAAOP,MAAMQ,QAAQ;AAE/C,WAAOC,0BAAiBT,MAAMU,UAAUL,KAAAA,CAAM;AAAA,EAChD;AAGAM,UAAAA,QAAQ,MAAM;AACZ,UAAMC,YAAYpB,IAAIqB,MAAAA;AAEtBC,YAAAA,UAAU,MAAM;AACdF,gBAAAA;AAAAA,IAEF,CAAC;AAAA,EACH,CAAC;AAED,SAAOG,OAAOC,OAAOrB,aAAa;AAAA,IAChC,GAAGJ,QAAQ0B;AAAAA,EAAAA,CACZ;AAkBH;;"}