@paragrav/rhf-utils 0.73.0 → 0.75.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.
package/README.md CHANGED
@@ -131,12 +131,12 @@ export const rhfUtilsClientConfig: RhfUtilsClientConfig = {
131
131
  // NOTE: this library is router-agnostic, so navigation blocking should happen elsewhere
132
132
  // (i.e., calling your own hook in `FormComponent`)
133
133
  useCanFormBeCancelled: () => {
134
- const { isDirty } = useFormState();
134
+ const { isDirty, isSubmitting } = useFormState();
135
135
 
136
- const canFormBeCancelled = ({ utils, lastSubmit, rhf }) =>
137
- !options.enableMyPrompter || // my prompter option not enabled
138
- !isDirty || // or rhf form state not dirty
139
- lastSubmit.status.current === 'success' || // successful submit before form state updated
136
+ const canFormBeCancelled = ({ utils, lastSubmit }) =>
137
+ !utils.options.enableMyPrompter || // my prompter option NOT enabled for this form
138
+ !isDirty || // or rhf form state NOT dirty
139
+ (isSubmitting && lastSubmit.statusRef.current === 'success') || // successful submit before form state updated
140
140
  confirm('Are you sure?'); // or user confirms
141
141
 
142
142
  // return callback to be called at event-time
@@ -197,6 +197,7 @@ Currently, only `zod` schemas are supported.
197
197
  passwordConfirm: z.string().min(1),
198
198
  })}
199
199
  defaultValues={{ email: '', password: '', passwordConfirm: '' }}
200
+ // optional transformer for api -- supplied to on submit handlers
200
201
  getApiData={({ email, password }) => ({ email, password })}
201
202
  // cancel handler (passed to `Children` below)
202
203
  // execution routed through `RhfUtilsClientConfig.useCanFormBeCancelled`, if provided
@@ -220,7 +221,7 @@ Currently, only `zod` schemas are supported.
220
221
  email: { message: 'Email is invalid.' },
221
222
  });
222
223
  }}
223
- // submit handler
224
+ // submit handler (return value supplied to onSubmitSuccess)
224
225
  onSubmit={({ input, output, api }, context, event) => registerService(api)}
225
226
  onSubmitSuccess={(submitResult, { input, output, api }, context, event) =>
226
227
  navigate('/app/' + submitResult.id)
@@ -1,6 +1,5 @@
1
- import { r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-Cqg-0i2U.js";
1
+ import { r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-DBOvBnPF.js";
2
2
  import { FormState } from "react-hook-form";
3
-
4
3
  //#region src/form/relay/types.d.ts
5
4
  type FormRelay<TFieldValues extends SafeFieldValues = SafeFieldValues> = {
6
5
  state: FormRelayStateSelected<TFieldValues>;
@@ -27,4 +26,4 @@ type FormRelayOptions = {
27
26
  };
28
27
  //#endregion
29
28
  export { FormRelay as n, FormRelayStateSelected as r, FormRelayOptions as t };
30
- //# sourceMappingURL=FormRelayOptions-BtNZLz8X.d.ts.map
29
+ //# sourceMappingURL=FormRelayOptions-B5CknIkX.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormRelayOptions-B5CknIkX.d.ts","names":[],"sources":["../../src/form/relay/types.ts","../../src/form/relay/FormRelayOptions.ts"],"mappings":";;;KAOY,UAAU,qBAAqB,kBAAkB;EAEzD,OAAO,uBAAuB;EAC9B,SAAS;EACT,OAAO;;KAGC,uBACV,qBAAqB,kBAAkB,mBACrC,QACF,UAAU;EACR;;;;KCZQ;;;;;EAKV,SAAS,WAAW,UAAU,qBAAqB;;;;;;EAOnD"}
@@ -136,9 +136,13 @@ const getFlatFieldErrors = (errors) => {
136
136
  /**
137
137
  * Regular expression to maybe match the end of a leaf node path.
138
138
  *
139
- * i.e., `name.type`, `address.street.message`
139
+ * @example
140
+ * - `name.type`
141
+ * - `address.street.message`
142
+ *
143
+ * @description
140
144
  *
141
- * iow: dot [?: non-capturing]("type" | "message")[\b word boundary][$ end of string]
145
+ * dot [?: non-capturing]("type" | "message")[\b word boundary][$ end of string]
142
146
  */
143
147
  const regexMaybeFieldErrorLeafNodeSuffix = /\.(?:type|message)\b$/;
144
148
  const getFlatFieldErrorsSansRef = (errors) => Object.fromEntries(Object.entries(getFlatFieldErrors(errors)).map(([name, error]) => [name, {
@@ -192,4 +196,4 @@ const FormRelaySetter = ({ options }) => {
192
196
  //#endregion
193
197
  export { _RhfUtilsContextProvider as a, FormRelayContextProvider as c, isEmptyObject as i, useFormRelayContext as l, useFormRelaySet as n, useRhfUtilsContext as o, getFlatFieldErrors as r, useRhfUtilsMaybeContext as s, FormRelaySetter as t, createContext as u };
194
198
 
195
- //# sourceMappingURL=FormRelaySetter-Cuh0-4HA.js.map
199
+ //# sourceMappingURL=FormRelaySetter-CLkDwgfH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormRelaySetter-CLkDwgfH.js","names":[],"sources":["../../src/utils/createContext.ts","../../src/form/relay/context/useFormRelayContext.ts","../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/utils/isEmptyObject.ts","../../src/errors/flat/flattenFieldErrors.ts","../../src/errors/flat/getFlatFieldErrors.ts","../../src/form/relay/set/useFormRelaySet.ts","../../src/form/relay/set/FormRelaySetter.tsx"],"sourcesContent":["import React from 'react';\n\n/**\n * Create a strictly-typed context that throws error if no provider is found.\n * @returns A tuple with a function to get the context and the context provider.\n */\nexport function createContext<T = unknown>() {\n const context = React.createContext<T | undefined>(undefined);\n\n const useMaybe = () => React.useContext(context);\n\n const useRequired = () => {\n const c = useMaybe();\n\n // type guard\n if (c === undefined) throw new Error();\n\n return c;\n };\n\n return {\n Provider: context.Provider,\n useMaybe,\n useRequired,\n } as const;\n}\n","import type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport { createContext } from '@/utils/createContext';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelay, FormRelayStateSelected } from '../types';\n\nexport type FormsRelayed = Record<\n string, // form id\n FormRelay\n>;\n\nexport type FormRelayContext = {\n // set\n\n add: (\n state: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => void;\n\n update: (id: string, state: FormRelayStateSelected) => void;\n\n remove: (id: string) => void;\n\n // state\n\n state: FormsRelayed;\n};\n\nexport const {\n Provider: _FormRelayContextProvider,\n useRequired: useFormRelayContext,\n} = createContext<FormRelayContext>();\n","import React from 'react';\n\nimport type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nimport type { FormsRelayed } from './useFormRelayContext';\nimport { _FormRelayContextProvider } from './useFormRelayContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const FormRelayContextProvider: React.FC<Props> = ({ children }) => {\n // state\n\n const [state, setState] = React.useState<FormsRelayed>({});\n\n // set\n\n const add = React.useCallback(\n (\n formState: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => {\n if (state[utils.formId]) throw new Error('Form id already exists.');\n\n setState((forms) => ({\n ...forms,\n [utils.formId]: { state: formState, utils, options },\n }));\n },\n\n [state],\n );\n\n const update = React.useCallback(\n (id: string, state: FormRelayStateSelected) => {\n setState((forms) => {\n const current = forms[id];\n\n if (!current) throw new Error(\"Form id doesn't exist\");\n\n return {\n ...forms,\n [id]: { ...current, state },\n };\n });\n },\n [],\n );\n\n const remove = React.useCallback((id: string) => {\n setState((forms) =>\n Object.fromEntries(\n Object.entries(forms)\n // keep only other ids\n .filter(([entryId]) => entryId !== id),\n ),\n );\n }, []);\n\n //\n\n return (\n <_FormRelayContextProvider\n value={{\n // set\n\n add,\n update,\n remove,\n\n // get\n\n state,\n }}\n >\n {children}\n </_FormRelayContextProvider>\n );\n};\n","import { createContext } from '@/utils/createContext';\n\nimport type { RhfUtilsContext } from './RhfUtilsContextType';\n\nconst {\n Provider: _RhfUtilsContextProvider,\n useRequired: useRhfUtilsContext,\n useMaybe: useRhfUtilsMaybeContext,\n} = createContext<RhfUtilsContext>();\n\nexport {\n _RhfUtilsContextProvider,\n useRhfUtilsContext,\n useRhfUtilsMaybeContext,\n};\n","export const isEmptyObject = (obj: Record<string, unknown>) =>\n Object.keys(obj).length === 0;\n","import { flatten } from 'flat';\nimport type { FieldErrors } from 'react-hook-form';\n\n/**\n * Flatten a {@link FieldErrors} object.\n *\n * @returns e.g.,\n * ```ts\n * {\n * \"address.street.type\": \"too_short\",\n * \"address.street.ref.value\": \"123\",\n * \"address.street.message\": \"Required.\"\n * }\n * ```\n */\nexport const flattenFieldErrors = (errors: FieldErrors) =>\n flatten<FieldErrors, Record<string, unknown>>(errors);\n","import type { FieldError, FieldErrors } from 'react-hook-form';\nimport { get } from 'react-hook-form';\n\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport { flattenFieldErrors } from './flattenFieldErrors';\nimport type { FlatFieldErrors } from './types';\n\n/**\n * Get {@link FlatFieldErrors} from {@link FieldErrors}.\n * This makes it easy to work with potentially deeply-nested {@link FieldErrors}.\n *\n * @param errors {@link FieldErrors} object.\n *\n * @returns `FlatFieldErrors` object.\n *\n * @example\n * ```\n * {\n * \"address.street\": {\n * type: \"too_short\",\n * ref: { value: \"123\" },\n * message: \"Required.\" }\n * }\n * }\n * ```\n */\nexport const getFlatFieldErrors = (errors: FieldErrors): FlatFieldErrors => {\n // flatten object for simpler processing\n const flattened = flattenFieldErrors(errors);\n\n // get flattened keys (e.g., `name.message`), which we must transform back to actual paths (e.g., `name`)\n const flattenedKeys = Object.keys(flattened);\n\n // rebuild FlatFieldErrors\n return Object.fromEntries(\n flattenedKeys.reduce<[PropertyKey, FieldError][]>(\n (entriesAccumulator, flattenedKey) => {\n /**\n * Maybe path.\n *\n * Derived from flattened key by removing leaf node suffix (if present).\n *\n * @example\n * path: `address.street.message` -> `address.street`\n * @example\n * not path: `address.street.ref` -> `address.street.ref` (no suffix match to replace)\n */\n const maybePath = flattenedKey.replace(\n regexMaybeFieldErrorLeafNodeSuffix,\n '',\n );\n\n // if nothing replaced, then it's not a leaf node; return early\n if (maybePath === flattenedKey) return entriesAccumulator;\n\n // find field error in original FieldErrors object\n // has dual-purpose of confirming that each path is valid\n const fieldError = get(errors, maybePath, undefined) as\n FieldError | undefined;\n\n // if no field error found, then derived path was wrong; return early\n if (!fieldError) return entriesAccumulator;\n\n /**\n * Add entry to accumulator.\n *\n * (If it's a duplicate (e.g., `.type` leaf node matched before `.message`),\n * it doesn't matter because `Object.fromEntries` will just overwrite\n * first entry with second matching key/value.)\n */\n entriesAccumulator.push([maybePath, fieldError]);\n\n return entriesAccumulator;\n },\n\n [], // entries\n ),\n );\n};\n\n//\n\n/**\n * Regular expression to maybe match the end of a leaf node path.\n *\n * @example\n * - `name.type`\n * - `address.street.message`\n *\n * @description\n *\n * dot [?: non-capturing](\"type\" | \"message\")[\\b word boundary][$ end of string]\n */\nexport const regexMaybeFieldErrorLeafNodeSuffix = /\\.(?:type|message)\\b$/;\n\n//\n\nexport type FieldErrorsSansRef<\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n> = Record<\n keyof TFieldValues | 'root',\n Partial<Pick<FieldError, 'message' | 'type'>> & {\n hasRef: boolean;\n }\n>;\n\nexport const getFlatFieldErrorsSansRef = <TFieldValues extends SafeFieldValues>(\n errors: FieldErrors<TFieldValues>,\n) =>\n Object.fromEntries(\n Object.entries(getFlatFieldErrors(errors)).map(([name, error]) => [\n name,\n {\n type: error.type,\n message: error.message,\n hasRef: !!error.ref, // strip out actual ref, etc. (avoid circular JSON error)\n },\n ]),\n ) as FieldErrorsSansRef<TFieldValues>;\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport { getFlatFieldErrorsSansRef } from '@/errors/flat/getFlatFieldErrors';\n\nimport { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { useFormRelayContext } from '../context/useFormRelayContext';\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nexport const useFormRelaySet = (options?: FormRelayOptions) => {\n if (!options) return;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [memoOptions] = React.useState(options);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnMount(memoOptions);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnChange(memoOptions);\n};\n\n// HELPERS\n\n// mount\n\nconst useFormRelayOnMount = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n () => {\n relay.add(formStateForRelay, utils, options);\n\n // unmount\n return () => {\n relay.remove(utils.formId);\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n};\n\n// update\n\nconst useFormRelayOnChange = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n // when form state changes, publish to relay context\n () => {\n relay.update(utils.formId, formStateForRelay);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateForRelay],\n );\n};\n\n// relayed form state\n\n/** Transform, memo-ize {@link useFormState}'s return to {@link FormRelayed} */\nconst useFormStateForRelay = (\n options: FormRelayOptions,\n): FormRelayStateSelected => {\n const formState = useFormState();\n\n const formStateSelected = options.select(formState);\n\n const formStateSelectedJson = JSON.stringify({\n ...formStateSelected,\n errors:\n formStateSelected.errors &&\n getFlatFieldErrorsSansRef(formStateSelected.errors),\n });\n\n const memoFormStateSelected = React.useMemo(\n // when watch JSON changes, update memo\n () => formStateSelected,\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateSelectedJson],\n );\n\n return memoFormStateSelected;\n};\n","import type { FormRelayOptions } from '../FormRelayOptions';\n\nimport { useFormRelaySet } from './useFormRelaySet';\n\ntype Props = {\n options?: FormRelayOptions;\n};\n\nexport const FormRelaySetter: React.FC<Props> = ({ options }) => {\n useFormRelaySet(options);\n\n return null;\n};\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { i as RhfUtilsFormOptions, r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-Cqg-0i2U.js";
1
+ import { i as RhfUtilsFormOptions, r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-DBOvBnPF.js";
2
2
  import React$1 from "react";
3
3
  import { ControllerProps, FieldError, FieldPath, UseFormProps, UseFormReturn } from "react-hook-form";
4
-
5
4
  //#region src/errors/output/types.d.ts
6
5
  /**
7
6
  * Config object for error output.
@@ -90,15 +89,15 @@ type UseRhfUtilsFormGlobalDefaults = {
90
89
  * - `root` is reserved for special use cases.
91
90
  * - simplified `ErrorOption` value.
92
91
  */
93
- type FormSubmitFieldErrors<TFieldValues extends SafeFieldValues = SafeFieldValues> = Record<FieldPath<TFieldValues> | `root.${string}`, {
92
+ type FormSubmitFieldErrors<TFieldValues extends SafeFieldValues = SafeFieldValues, TApiValues extends undefined | SafeFieldValues = undefined, TAllValues extends SafeFieldValues = TApiValues extends undefined ? TFieldValues : TFieldValues & TApiValues> = Record<FieldPath<TAllValues> | `root.${string}`, {
94
93
  message: string;
95
94
  type?: string;
96
95
  }>;
97
96
  //#endregion
98
97
  //#region src/submit/error/FormSubmitError.d.ts
99
- declare class FormSubmitError<TFieldValues extends SafeFieldValues = SafeFieldValues, TApiValues extends undefined | SafeFieldValues = undefined, TAllValues extends SafeFieldValues = (TApiValues extends undefined ? TFieldValues : TFieldValues | TApiValues)> extends Error {
100
- errors: FormSubmitFieldErrors<TAllValues>;
101
- constructor(errors: FormSubmitFieldErrors<TAllValues>, message?: string);
98
+ declare class FormSubmitError<TFieldValues extends SafeFieldValues = SafeFieldValues, TApiValues extends undefined | SafeFieldValues = undefined> extends Error {
99
+ errors: FormSubmitFieldErrors<TFieldValues, TApiValues>;
100
+ constructor(errors: FormSubmitFieldErrors<TFieldValues, TApiValues>, message?: string);
102
101
  }
103
102
  //#endregion
104
103
  //#region src/submit/last/error/LastSubmitErrorType.d.ts
@@ -108,6 +107,7 @@ type LastSubmitError = {
108
107
  };
109
108
  //#endregion
110
109
  //#region src/submit/last/status/LastSubmitStatusType.d.ts
110
+ /** Last submit state. */
111
111
  type LastSubmitStatus = null | 'submitting' | 'success' | 'error';
112
112
  //#endregion
113
113
  //#region src/submit/last/context/LastSubmitContextType.d.ts
@@ -116,16 +116,14 @@ type LastSubmitContext = {
116
116
  ref: React.RefObject<LastSubmitStatus | null>;
117
117
  };
118
118
  error: {
119
- /**
120
- * Last submit error (with event).
121
- */
119
+ /** Last submit error (with event). */
122
120
  state: LastSubmitError | undefined;
123
121
  set: (error: unknown, event: React.BaseSyntheticEvent) => void;
124
122
  reset: () => void;
125
123
  };
126
124
  };
127
125
  type LastSubmitContextRead = {
128
- status: LastSubmitContext['status']['ref'];
126
+ statusRef: LastSubmitContext['status']['ref'];
129
127
  error: LastSubmitContext['error']['state'];
130
128
  };
131
129
  //#endregion
@@ -174,8 +172,11 @@ type RhfUtilsClientConfigUseFormHooksProps<TFieldValues extends SafeFieldValues
174
172
  * RhfUtilsClientConfig's FormComponent props.
175
173
  */
176
174
  type RhfUtilsClientConfigFormOutletProps<TFieldValues extends SafeFieldValues = SafeFieldValues, TTransformedValues extends SafeFieldValues = TFieldValues> = Merge<RhfUtilsClientConfigUseFormHooksProps<TFieldValues, TTransformedValues>, {
177
- /** Form instance children (`RhfUtilsZodForm.Children`) to output amid globally-injected code. */Outlet: React.FC; /** RHF Controller (SafeFieldValues-typed; no schema at this level). */
178
- Controller: typeof _Controller<TFieldValues>; /** Error class (SafeFieldValues-typed; no schema at this level). */
175
+ /** Form instance children (`RhfUtilsZodForm.Children`) to output amid globally-injected code. */
176
+ Outlet: React.FC;
177
+ /** RHF Controller (SafeFieldValues-typed; no schema at this level). */
178
+ Controller: typeof _Controller<TFieldValues>;
179
+ /** Error class (SafeFieldValues-typed; no schema at this level). */
179
180
  FormSubmitError: typeof FormSubmitError<TFieldValues>;
180
181
  }>;
181
182
  //#endregion
@@ -259,4 +260,4 @@ type RhfUtilsClientConfig = {
259
260
  };
260
261
  //#endregion
261
262
  export { UseRhfUtilsFormOnSubmitContext as a, LastSubmitStatus as c, FormSubmitFieldErrors as d, RhfUseFormInstanceProps as f, MaybePromise as i, LastSubmitError as l, RhfUtilsClientConfigFormOutletProps as n, UseRhfUtilsFormOnSubmitErrorContext as o, useFlatFieldErrorsContext as p, _Controller as r, LastSubmitContextRead as s, RhfUtilsClientConfig as t, FormSubmitError as u };
262
- //# sourceMappingURL=RhfUtilsClientConfigType-CCgbRG3a.d.ts.map
263
+ //# sourceMappingURL=RhfUtilsClientConfigType-B8BwRERI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhfUtilsClientConfigType-B8BwRERI.d.ts","names":[],"sources":["../../src/errors/output/types.ts","../../src/errors/flat/types.ts","../../src/errors/flat/context/useFlatFieldErrorsContext.ts","../../src/errors/flat/context/FlatFieldErrorsOutputConfig.ts","../../src/form/rhf/UseFormPropsType.ts","../../src/form/defaults/UseRhfUtilsFormGlobalDefaults.ts","../../src/submit/error/FormSubmitFieldErrors.ts","../../src/submit/error/FormSubmitError.ts","../../src/submit/last/error/LastSubmitErrorType.ts","../../src/submit/last/status/LastSubmitStatusType.ts","../../src/submit/last/context/LastSubmitContextType.ts","../../src/submit/UseRhfUtilsFormOnSubmitContextType.ts","../../src/utils/types.ts","../../src/form/_Controller.tsx","../../src/client/config/RhfUtilsClientConfigUseFormHooksProps.ts","../../src/client/config/RhfUtilsClientConfigFormOutletProps.ts","../../src/client/config/RhfUtilsClientConfigType.ts"],"mappings":";;;;;;;KAGY;EACV;EACA;;;;;;;;;;;;;;KCOU,kBAAkB,eAAe;;;KCRjC;EACV,KAAK;EACL,QAAQ;EACR,OAAO;EACP,SAAS;EAET;EACA;;cAIU,gDAA8B,SAAA,qCAC3B,iCAAyB;;;KCZ5B;;;;;;;;EAQV,WACE,SAAS,2BACN;;;;;;;EAQL,SACE,SAAS;;;;KCnBD,wBAAwB,KAClC;KAaU,wBACV,qBAAqB,iBACrB,2BAA2B,mBACzB,KACF,aAAa,uBAAuB;;;;;;KCd1B;;;;;;EAMV,MAAM;;;;;;EAON,UAAU;;;;EAKV,OAAO,KACL,QAAM,gBAAgB,QAAM,IAAI;;;;;;;;;;;;KCfxB,sBACV,qBAAqB,kBAAkB,iBACvC,+BAA+B,6BAC/B,mBAAmB,kBAAkB,+BACjC,eACA,eAAe,cACjB,OAEF,UAAU;EAGR;EACA;;;;cCpBS,gBACX,qBAAqB,kBAAkB,iBACvC,+BAA+B,qCACvB;EAEC,QAAQ,sBAAsB,cAAc;EAA5C,YAAA,QAAQ,sBAAsB,cAAc,aACnD;;;;KCVQ;EACV;EACA,OAAO,MAAM;;;;;KCDH;;;KCEA;EACV;IACE,KAAK,MAAM,UAAU;;EAGvB;;IAEE,OAAO;IAEP,MAAM,gBAAgB,OAAO,MAAM;IAEnC;;;KAIQ;EACV,WAAW;EACX,OAAO;;;;;;;;;KCLG,+BACV,qBAAqB,kBAAkB,iBACvC,2BAA2B,kBAAkB,cAC7C,+BAA+B;EAE/B,OAAO;EACP,YAAY;EACZ,KAAK,cAAc,uBAAuB;EAC1C,wBAAwB,gBAAgB,cAAc;;;;;KAM5C,oCACV,qBAAqB,iBACrB,2BAA2B;EAE3B,OAAO;EACP,YAAY;EACZ,KAAK,cAAc,uBAAuB;EAC1C,SAAS;;;;KCpCC,aAAa,KAAK,IAAI,QAAQ;;KAG9B,MAAM,GAAG,GAAG,aAAa,eAAe,IAClD,KAAK,SAAS,KACd,KAAK,KAAK,SAAS,UAAU,KAC7B,KAAK,KAAK,KAAK,SAAS,UAAU,UAAU;;;KCDlC,iBACV,qBAAqB,iBACrB,cAAc,UAAU,gBAAgB,UAAU,iBAChD,KAAK,gBAAgB,cAAc;cAE1B,cACX,qBAAqB,iBACrB,cAAc,UAAU,gBAAgB,UAAU,eAElD,OAAO,iBAAiB,cAAc,2BAAM,IAAA;;;;;;KCFlC,sCACV,qBAAqB,kBAAkB,iBACvC,2BAA2B,kBAAkB,gBAC3C,MACF;EAEE,YAAY;EACZ,KAAK,cAAc,uBAAuB;;;;;;;KCPlC,oCACV,qBAAqB,kBAAkB,iBACvC,2BAA2B,kBAAkB,gBAC3C,MACF,sCAAsC,cAAc;;EAGlD,QAAQ,MAAM;;EAGd,mBAAmB,YAAY;;EAE/B,wBAAwB,gBAAgB;;;;;;;;;KCPhC;;;;EAIV,WAAW;;;;;;EAOX,gBAAgB,MAAM,GACpB,MAAM,kBAAkB,MAAM,eAAe;;;;;;;;;;;;EAc/C,gBAAgB,OAAO;;;;;;;;;;;;EAavB,aAAa,MAAM,GAAG;;;;;;;;;;;;;;;;EAiBtB,+BACE,OAAO,mCACJ;;;;;;;;;;;EAYL,wBAAwB,mBAAmB;;;;EAK3C;;;;IAIE,SAAS"}
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import { DevtoolUIProps } from "@hookform/devtools/dist/devToolUI";
3
-
4
3
  //#region src/Register.d.ts
5
4
  /**
6
5
  * Use this to extend internal types.
@@ -42,7 +41,8 @@ type UseResetFormOnSubmittedOptions = undefined | {
42
41
  //#endregion
43
42
  //#region src/submit/useSubmitFormOnWatch.d.ts
44
43
  type UseSubmitFormOnWatchOptions = {
45
- /** Milliseconds to debounce form submission. (Default is none.) */debounce: number;
44
+ /** Milliseconds to debounce form submission. (Default is none.) */
45
+ debounce: number;
46
46
  };
47
47
  //#endregion
48
48
  //#region src/form/options/RhfUtilsFormOptionsType.d.ts
@@ -52,11 +52,13 @@ type UseSubmitFormOnWatchOptions = {
52
52
  * Can be extended via {@link Register}.
53
53
  */
54
54
  type RhfUtilsFormOptions = {
55
- /** Stop propagation of submit event. */stopSubmitPropagation?: boolean;
55
+ /** Stop propagation of submit event. */
56
+ stopSubmitPropagation?: boolean;
56
57
  /**
57
58
  * Request submit when user changes form values.
58
59
  */
59
- submitOnWatch?: UseSubmitFormOnWatchOptions; /** Reset form values and state (e.g., `isDirty`) after submit -- on success and/or error. */
60
+ submitOnWatch?: UseSubmitFormOnWatchOptions;
61
+ /** Reset form values and state (e.g., `isDirty`) after submit -- on success and/or error. */
60
62
  resetOnSubmitted?: UseResetFormOnSubmittedOptions;
61
63
  /**
62
64
  * Control dev tool options.
@@ -77,7 +79,8 @@ type SafeFieldValues = Record<string, unknown>;
77
79
  //#region src/form/context/utils/RhfUtilsContextProvider.d.ts
78
80
  type RhfUtilsContextProviderProps = {
79
81
  formId: string;
80
- formRef: React.RefObject<HTMLFormElement | null>; /** Consumer-supplied options and values. */
82
+ formRef: React.RefObject<HTMLFormElement | null>;
83
+ /** Consumer-supplied options and values. */
81
84
  options: RhfUtilsFormOptions;
82
85
  };
83
86
  //#endregion
@@ -85,4 +88,4 @@ type RhfUtilsContextProviderProps = {
85
88
  type RhfUtilsContext = RhfUtilsContextProviderProps;
86
89
  //#endregion
87
90
  export { Register as a, RhfUtilsFormOptions as i, RhfUtilsContextProviderProps as n, SafeFieldValues as r, RhfUtilsContext as t };
88
- //# sourceMappingURL=RhfUtilsContextType-Cqg-0i2U.d.ts.map
91
+ //# sourceMappingURL=RhfUtilsContextType-DBOvBnPF.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhfUtilsContextType-DBOvBnPF.d.ts","names":[],"sources":["../../src/Register.d.ts","../../src/submit/useResetFormOnSubmitted.ts","../../src/submit/useSubmitFormOnWatch.ts","../../src/form/options/RhfUtilsFormOptionsType.ts","../../src/form/rhf/SafeFieldValuesType.ts","../../src/form/context/utils/RhfUtilsContextProvider.tsx","../../src/form/context/utils/RhfUtilsContextType.ts"],"mappings":";;;;;;;;;;;;;;;;;;UAeiB;;;;;;KCRL;;;;;;EAWN;IAAY;;;;;EAKZ;IAAU;;;;;KChBJ;;EAEV;;;;;;;;;KCGU;;EAIR;;;;EAKA,gBAAgB;;EAGhB,mBAAmB;;;;;;EAOnB,oBAAoB,KAAK;KAGxB;EACC,2BAA2B;IAGzB;;;;;;KCnCI,kBAAkB;;;KCUlB;EACV;EACA,SAAS,MAAM,UAAU;;EAGzB,SAAS;;;;KChBC,kBAAkB"}
@@ -1,10 +1,9 @@
1
- import { a as Register, i as RhfUtilsFormOptions, n as RhfUtilsContextProviderProps, r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-Cqg-0i2U.js";
2
- import { a as UseRhfUtilsFormOnSubmitContext, c as LastSubmitStatus, d as FormSubmitFieldErrors, f as RhfUseFormInstanceProps, i as MaybePromise, l as LastSubmitError, n as RhfUtilsClientConfigFormOutletProps, o as UseRhfUtilsFormOnSubmitErrorContext, p as useFlatFieldErrorsContext, r as _Controller, s as LastSubmitContextRead, t as RhfUtilsClientConfig, u as FormSubmitError } from "./RhfUtilsClientConfigType-CCgbRG3a.js";
3
- import { t as FormRelayOptions } from "./FormRelayOptions-BtNZLz8X.js";
1
+ import { a as Register, i as RhfUtilsFormOptions, n as RhfUtilsContextProviderProps, r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-DBOvBnPF.js";
2
+ import { a as UseRhfUtilsFormOnSubmitContext, c as LastSubmitStatus, d as FormSubmitFieldErrors, f as RhfUseFormInstanceProps, i as MaybePromise, l as LastSubmitError, n as RhfUtilsClientConfigFormOutletProps, o as UseRhfUtilsFormOnSubmitErrorContext, p as useFlatFieldErrorsContext, r as _Controller, s as LastSubmitContextRead, t as RhfUtilsClientConfig, u as FormSubmitError } from "./RhfUtilsClientConfigType-B8BwRERI.js";
3
+ import { t as FormRelayOptions } from "./FormRelayOptions-B5CknIkX.js";
4
4
  import React$1 from "react";
5
5
  import { Resolver, SubmitErrorHandler, UseFormProps, UseFormReturn } from "react-hook-form";
6
6
  import { z } from "zod";
7
-
8
7
  //#region src/client/config/context/RhfUtilsClientConfigProvider.d.ts
9
8
  type Props$4 = React$1.PropsWithChildren<{
10
9
  config?: RhfUtilsClientConfig;
@@ -21,7 +20,8 @@ declare const useFlatFieldErrorsContextHasOnlyOrphans: () => boolean;
21
20
  //#endregion
22
21
  //#region src/errors/nonfield/RhfUtilsNonFieldErrorMarker.d.ts
23
22
  type Props$3 = {
24
- /** Flat field name. (e.g., `address.street`) */path: string;
23
+ /** Flat field name. (e.g., `address.street`) */
24
+ path: string;
25
25
  };
26
26
  /**
27
27
  * Empty, hidden marker to indicate a non-field/non-root error is being displayed to user.
@@ -63,8 +63,8 @@ type UseRhfUtilsFormChildrenProps<TFieldValues extends SafeFieldValues, TTransfo
63
63
  FormSubmitError: typeof FormSubmitError<TFieldValues>;
64
64
  } & {
65
65
  onCancel?: () => MaybePromise<void>;
66
- } & // cancel
67
- (TProps extends undefined ? {
66
+ } // cancel
67
+ & (TProps extends undefined ? {
68
68
  props?: undefined;
69
69
  } : {
70
70
  props: TProps;
@@ -103,9 +103,11 @@ type RhfUtilsFormPropsOnBeforeSubmitInvariants<TFieldValues extends SafeFieldVal
103
103
  //#endregion
104
104
  //#region src/form/with-handlers-and-children/RhfUtilsFormProps.d.ts
105
105
  type RhfUtilsFormPropsGetApiValues<TTransformedValues extends SafeFieldValues, TApiValues> = (data: TTransformedValues) => TApiValues;
106
- type RhfUtilsFormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = (TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined)> = {
107
- getApiData?: TGetApiValues; /** Cancellation handler -- channeled through {@link RhfUtilsClientConfig.useCanFormBeCancelled} before propagating to `Children` component. */
108
- onCancel?: () => MaybePromise<void>; /** Submit handler when form is invalid. */
106
+ type RhfUtilsFormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined> = {
107
+ getApiData?: TGetApiValues;
108
+ /** Cancellation handler -- channeled through {@link RhfUtilsClientConfig.useCanFormBeCancelled} before propagating to `Children` component. */
109
+ onCancel?: () => MaybePromise<void>;
110
+ /** Submit handler when form is invalid. */
109
111
  onSubmitInvalid?: SubmitErrorHandler<TFieldValues>;
110
112
  /**
111
113
  * List of invariants to run against input/output/api data.
@@ -126,11 +128,13 @@ type RhfUtilsFormProps<TFieldValues extends SafeFieldValues, TTransformedValues
126
128
  input: TFieldValues;
127
129
  output: TTransformedValues;
128
130
  api: TApiValues;
129
- }, context: UseRhfUtilsFormOnSubmitContext<TFieldValues, TTransformedValues, TApiValues>, event: React.BaseSyntheticEvent<SubmitEvent>) => MaybePromise<unknown>; /** Submit error handler. (Only for errors not of instance `FormError`, which are handled internally.) */
131
+ }, context: UseRhfUtilsFormOnSubmitContext<TFieldValues, TTransformedValues, TApiValues>, event: React.BaseSyntheticEvent<SubmitEvent>) => MaybePromise<unknown>;
132
+ /** Submit error handler. (Only for errors not of instance `FormError`, which are handled internally.) */
130
133
  onSubmitError?: (error: unknown, context: UseRhfUtilsFormOnSubmitErrorContext<TFieldValues, TTransformedValues>, event: React.BaseSyntheticEvent<SubmitEvent>) => void;
131
134
  onSubmitFinally?: () => MaybePromise<void>;
132
135
  Children: React.FC<UseRhfUtilsFormChildrenProps<TFieldValues, TTransformedValues>>;
133
- form?: UseRhfUtilsFormInstanceFormProps; /** Form class attribute. */
136
+ form?: UseRhfUtilsFormInstanceFormProps;
137
+ /** Form class attribute. */
134
138
  className?: string;
135
139
  };
136
140
  //#endregion
@@ -145,15 +149,16 @@ type ZodTypeOfSafeFieldValues = z.ZodType<SafeFieldValues, z.ZodObjectDef>;
145
149
  type ZodTypeSafeFieldValues = ZodTypeOfSafeFieldValues | z.ZodEffects<ZodTypeOfSafeFieldValues>;
146
150
  //#endregion
147
151
  //#region src/resolvers/zod/form/RhfUtilsZodForm.d.ts
148
- type Props$2<TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = (TGetApiValues extends RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], infer U> ? U : undefined)> = React.PropsWithChildren<RhfUtilsFormProps<TSchema[typeof zodTypeInput], TSchema[typeof zodTypeOutput], TGetApiValues, TOnSubmitReturnType, TApiValues>>;
149
- declare const RhfUtilsZodForm: <TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = (TGetApiValues extends RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], infer U> ? U : undefined)>(props: Props$2<TSchema, TGetApiValues, TOnSubmitReturnType, TApiValues>) => import("react").JSX.Element;
152
+ type Props$2<TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], infer U> ? U : undefined> = React.PropsWithChildren<RhfUtilsFormProps<TSchema[typeof zodTypeInput], TSchema[typeof zodTypeOutput], TGetApiValues, TOnSubmitReturnType, TApiValues>>;
153
+ declare const RhfUtilsZodForm: <TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], infer U> ? U : undefined>(props: Props$2<TSchema, TGetApiValues, TOnSubmitReturnType, TApiValues>) => import("react").JSX.Element;
150
154
  //#endregion
151
155
  //#region src/form/providers/RhfUtilsFormProvidersPropsType.d.ts
152
156
  /**
153
157
  * RhfUtils form providers props.
154
158
  */
155
159
  type RhfUtilsFormProvidersProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = {
156
- /** Globally-unique form id. (Used in DOM. Auto-generated if not supplied.) */formId?: string;
160
+ /** Globally-unique form id. (Used in DOM. Auto-generated if not supplied.) */
161
+ formId?: string;
157
162
  resolver?: Resolver<TFieldValues, unknown, TTransformedValues>;
158
163
  rhf?: RhfUseFormInstanceProps<TFieldValues, TTransformedValues>;
159
164
  defaultValues?: UseFormProps<TFieldValues, unknown, TTransformedValues>['defaultValues'];
@@ -165,20 +170,13 @@ type RhfUtilsFormProvidersProps<TFieldValues extends SafeFieldValues, TTransform
165
170
  type Props$1<TSchema extends ZodTypeSafeFieldValues> = React.PropsWithChildren<{
166
171
  schema: TSchema;
167
172
  } & RhfUtilsFormProvidersProps<TSchema[typeof zodTypeInput], TSchema[typeof zodTypeOutput]>>;
168
- declare const RhfUtilsZodFormProviders: <TSchema extends ZodTypeSafeFieldValues>({
169
- schema,
170
- children,
171
- ...props
172
- }: Props$1<TSchema>) => import("react").JSX.Element;
173
+ declare const RhfUtilsZodFormProviders: <TSchema extends ZodTypeSafeFieldValues>({ schema, children, ...props }: Props$1<TSchema>) => import("react").JSX.Element;
173
174
  //#endregion
174
175
  //#region src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.d.ts
175
- type Props<TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TFieldValues extends TSchema[typeof zodTypeInput] = TSchema[typeof zodTypeInput], TTransformedValues extends TSchema[typeof zodTypeOutput] = TSchema[typeof zodTypeOutput], TApiValues extends undefined | SafeFieldValues = (TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined)> = React.PropsWithChildren<{
176
+ type Props<TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TFieldValues extends TSchema[typeof zodTypeInput] = TSchema[typeof zodTypeInput], TTransformedValues extends TSchema[typeof zodTypeOutput] = TSchema[typeof zodTypeOutput], TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined> = React.PropsWithChildren<{
176
177
  schema: TSchema;
177
178
  } & Omit<RhfUtilsFormProvidersProps<TFieldValues, TTransformedValues>, 'resolver'> & RhfUtilsFormProps<TFieldValues, TTransformedValues, TGetApiValues, TOnSubmitReturnType, TApiValues>>;
178
- declare const RhfUtilsZodFormWithProviders: <TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TFieldValues extends TSchema[typeof zodTypeInput] = TSchema[typeof zodTypeInput], TTransformedValues extends TSchema[typeof zodTypeOutput] = TSchema[typeof zodTypeOutput], TApiValues extends undefined | SafeFieldValues = (TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined)>({
179
- schema,
180
- ...props
181
- }: Props<TSchema, TGetApiValues, TOnSubmitReturnType, TFieldValues, TTransformedValues, TApiValues>) => import("react").JSX.Element;
179
+ declare const RhfUtilsZodFormWithProviders: <TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>, TOnSubmitReturnType, TFieldValues extends TSchema[typeof zodTypeInput] = TSchema[typeof zodTypeInput], TTransformedValues extends TSchema[typeof zodTypeOutput] = TSchema[typeof zodTypeOutput], TApiValues extends undefined | SafeFieldValues = TGetApiValues extends RhfUtilsFormPropsGetApiValues<TTransformedValues, infer U> ? U : undefined>({ schema, ...props }: Props<TSchema, TGetApiValues, TOnSubmitReturnType, TFieldValues, TTransformedValues, TApiValues>) => import("react").JSX.Element;
182
180
  //#endregion
183
181
  //#region src/resolvers/zod/RhfUtilsUseZodFormChildrenPropsType.d.ts
184
182
  type RhfUtilsUseZodFormChildrenProps<TSchema extends ZodTypeSafeFieldValues, TChildrenProps = undefined> = UseRhfUtilsFormChildrenProps<TSchema[typeof zodTypeInput], TSchema[typeof zodTypeOutput], TChildrenProps>;
@@ -188,17 +186,6 @@ type RhfUtilsUseZodFormChildrenProps<TSchema extends ZodTypeSafeFieldValues, TCh
188
186
  * {@link React.FC} for {@link RhfUtilsUseZodFormChildrenProps}.
189
187
  */
190
188
  type RhfUtilsUseZodFormChildrenFC<TSchema extends ZodTypeSafeFieldValues, TChildrenProps = undefined> = React$1.FC<RhfUtilsUseZodFormChildrenProps<TSchema, TChildrenProps>>;
191
- //#endregion
192
- //#region src/_exports/index.d.ts
193
- /**
194
- * @license @paragrav/rhf-utils
195
- *
196
- * Copyright (c) 2024-present paragrav.dev
197
- *
198
- * This source code is licensed under the MIT license found in the
199
- * LICENSE file in the root directory of this source tree.
200
- */
201
-
202
189
  //#endregion
203
190
  export { FormSubmitError, type FormSubmitFieldErrors, type Register, type RhfUtilsClientConfig, type RhfUtilsClientConfigFormOutletProps, RhfUtilsClientConfigProvider, type RhfUtilsFormOptions, RhfUtilsNonFieldErrorMarker, type RhfUtilsUseZodFormChildrenFC, type RhfUtilsUseZodFormChildrenProps, RhfUtilsZodForm, RhfUtilsZodFormProviders, RhfUtilsZodFormWithProviders, type SafeFieldValues, type RHF_UseFormReturnWithoutProxies as UseFormReturnWithoutProxies, type UseRhfUtilsFormChildrenProps, type UseRhfUtilsFormOnSubmitContext, type UseRhfUtilsFormOnSubmitErrorContext, type ZodTypeSafeFieldValues, useFlatFieldErrorsContext, useFlatFieldErrorsContextHasOnlyOrphans, useFormRequestSubmit, useLastSubmit, useLastSubmitError, useLastSubmitStatus, useRhfUtilsContext };
204
191
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/client/config/context/RhfUtilsClientConfigProvider.tsx","../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/form/RHF_UseFormReturnWithoutProxiesType.ts","../../src/form/UseRhfUtilsFormChildrenPropsType.ts","../../src/form/utils/useFormRequestSubmit.ts","../../src/submit/last/context/useLastSubmitContext.ts","../../src/form/defaults/form/UseRhfUtilsFormInstanceFormProps.ts","../../src/form/with-handlers-and-children/RhfUtilsFormPropsOnBeforeSubmitInvariants.ts","../../src/form/with-handlers-and-children/RhfUtilsFormProps.ts","../../src/resolvers/zod/consts.ts","../../src/resolvers/zod/ZodTypeSafeFieldValuesType.ts","../../src/resolvers/zod/form/RhfUtilsZodForm.tsx","../../src/form/providers/RhfUtilsFormProvidersPropsType.ts","../../src/resolvers/zod/providers/RhfUtilsZodFormProviders.tsx","../../src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.tsx","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenPropsType.ts","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenFCType.ts","../../src/_exports/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/client/config/context/RhfUtilsClientConfigProvider.tsx","../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/form/RHF_UseFormReturnWithoutProxiesType.ts","../../src/form/UseRhfUtilsFormChildrenPropsType.ts","../../src/form/utils/useFormRequestSubmit.ts","../../src/submit/last/context/useLastSubmitContext.ts","../../src/form/defaults/form/UseRhfUtilsFormInstanceFormProps.ts","../../src/form/with-handlers-and-children/RhfUtilsFormPropsOnBeforeSubmitInvariants.ts","../../src/form/with-handlers-and-children/RhfUtilsFormProps.ts","../../src/resolvers/zod/consts.ts","../../src/resolvers/zod/ZodTypeSafeFieldValuesType.ts","../../src/resolvers/zod/form/RhfUtilsZodForm.tsx","../../src/form/providers/RhfUtilsFormProvidersPropsType.ts","../../src/resolvers/zod/providers/RhfUtilsZodFormProviders.tsx","../../src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.tsx","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenPropsType.ts","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenFCType.ts"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as _RhfUtilsContextProvider, c as FormRelayContextProvider, i as isEmptyObject, o as useRhfUtilsContext, r as getFlatFieldErrors, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-Cuh0-4HA.js";
1
+ import { a as _RhfUtilsContextProvider, c as FormRelayContextProvider, i as isEmptyObject, o as useRhfUtilsContext, r as getFlatFieldErrors, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-CLkDwgfH.js";
2
2
  import React from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  import { Controller, FormProvider, useForm, useFormContext, useFormState, useWatch } from "react-hook-form";
@@ -86,11 +86,11 @@ const { Provider: _LastSubmitContextProvider, useRequired: _useLastSubmitContext
86
86
  const useLastSubmit = () => {
87
87
  const lastSubmit = _useLastSubmitContext();
88
88
  return {
89
- status: lastSubmit.status.ref,
89
+ statusRef: lastSubmit.status.ref,
90
90
  error: lastSubmit.error.state
91
91
  };
92
92
  };
93
- const useLastSubmitStatus = () => useLastSubmit().status;
93
+ const useLastSubmitStatus = () => useLastSubmit().statusRef;
94
94
  const useLastSubmitError = () => useLastSubmit().error;
95
95
  //#endregion
96
96
  //#region src/devtool/LazyDevTool.tsx
@@ -241,18 +241,18 @@ const RhfUtilsFormWithSubmitHandler_Internal = ({ getApiData, onSubmitInvalid, o
241
241
  output: data,
242
242
  api: getApiData?.(data)
243
243
  };
244
- const context = {
244
+ const onSubmitContext = {
245
245
  utils,
246
246
  lastSubmit,
247
247
  rhf: rhfContext,
248
248
  FormSubmitError
249
249
  };
250
250
  const submitEvent = event;
251
- if (onBeforeSubmitInvariants) await handleOnSubmitInvariants(onBeforeSubmitInvariants, datas, context, submitEvent);
252
- await Promise.resolve(onBeforeSubmit?.(datas, context, submitEvent));
253
- const submitResponse = await Promise.resolve(onSubmit?.(datas, context, submitEvent));
254
- lastSubmit.status.current = "success";
255
- await Promise.resolve(onSubmitSuccess?.(submitResponse, datas, context, submitEvent));
251
+ if (onBeforeSubmitInvariants) await handleOnSubmitInvariants(onBeforeSubmitInvariants, datas, onSubmitContext, submitEvent);
252
+ await Promise.resolve(onBeforeSubmit?.(datas, onSubmitContext, submitEvent));
253
+ const submitResponse = await Promise.resolve(onSubmit?.(datas, onSubmitContext, submitEvent));
254
+ lastSubmit.statusRef.current = "success";
255
+ await Promise.resolve(onSubmitSuccess?.(submitResponse, datas, onSubmitContext, submitEvent));
256
256
  };
257
257
  function handleSubmitError(error, event) {
258
258
  const formSubmitErrors = error instanceof FormSubmitError ? error.errors : config.onSubmitErrorUnknown?.(error);
@@ -513,7 +513,8 @@ const useResetFormOnSubmitted = (options) => {
513
513
  const whichValues = options[success ? "success" : "error"]?.values;
514
514
  if (!whichValues) return;
515
515
  const keepValues = whichValues === "current";
516
- reset(keepValues ? getValues() : void 0, {
516
+ const values = keepValues ? getValues() : void 0;
517
+ reset(values, {
517
518
  keepIsSubmitSuccessful: true,
518
519
  keepIsSubmitted: true,
519
520
  keepSubmitCount: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["RhfController","useRhfForm","RhfFormProvider"],"sources":["../../src/client/config/context/RhfUtilsClientConfigContext.tsx","../../src/client/config/context/RhfUtilsClientConfigProvider.tsx","../../src/errors/flat/context/useFlatFieldErrorsContext.ts","../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarkerHtmlAttribute.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.tsx","../../src/form/utils/useFormRequestSubmit.ts","../../src/submit/error/FormSubmitError.ts","../../src/submit/last/context/useLastSubmitContext.ts","../../src/devtool/LazyDevTool.tsx","../../src/devtool/LazyDevToolViaProviders.tsx","../../src/form/_Controller.tsx","../../src/client/config/context/useRhfUtilsClientConfig.ts","../../src/submit/useRhfUtilsFormOnSubmitContext.ts","../../src/form/utils/useHandleCancelWithCheckIfCanBe.ts","../../src/form/utils/useHandleCancelWithCheckIfCanBeViaProviders.ts","../../src/form/with-handlers-and-children/_ChildrenViaProviders.tsx","../../src/submit/error/setCtxErrorsByFormSubmitFieldErrors.ts","../../src/form/defaults/form/getRhfUtilsFormResolvedFormProps.ts","../../src/form/defaults/form/useRhfUtilsFormResolvedFormProps.ts","../../src/submit/last/context/useLastSubmitErrorContextWith.ts","../../src/form/with-handlers-and-children/_useHandleSubmit.ts","../../src/form/with-handlers-and-children/_FormWithSubmitHandler.tsx","../../src/form/with-handlers-and-children/RhfUtilsForm.tsx","../../src/resolvers/zod/form/RhfUtilsZodForm.tsx","../../src/errors/flat/filterFlatFieldErrors.ts","../../src/errors/isFieldErrorRefd.ts","../../src/errors/isFlatFieldErrorEntryRefd.ts","../../src/errors/getRefdFromFlatFieldErrors.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.utils.ts","../../src/errors/nonfield/isNonFieldErrorMarkerInDOM.ts","../../src/errors/root/consts.ts","../../src/errors/root/isFormErrorPathRoot.ts","../../src/errors/orphan/isOrphanFormError.ts","../../src/errors/orphan/getIsOrphanFormErrorWithParentElement.ts","../../src/errors/orphan/getOrphansFromFlatFieldErrors.ts","../../src/errors/root/isFlatFieldErrorEntryPathRoot.ts","../../src/errors/root/getRootsFromFlatFieldErrors.ts","../../src/errors/flat/context/FlatFieldErrorsContextProvider.tsx","../../src/submit/last/context/LastSubmitContextProvider.tsx","../../src/errors/output/consoleErrors.ts","../../src/errors/flat/context/useFlatFieldErrorsContextOutput.ts","../../src/utils/useRefIfValueWasTrue.ts","../../src/submit/useFormOnSubmitted.ts","../../src/submit/useResetFormOnSubmitted.ts","../../src/utils/useIsFirstRender.ts","../../src/utils/useDebouncedOnChangeValue.ts","../../src/submit/useSubmitFormOnEvent.ts","../../src/submit/useSubmitFormOnWatch.ts","../../src/form/context/utils/RhfUtilsContextProvider.tsx","../../src/form/options/getRhfUtilsFormResolvedOptions.ts","../../src/form/options/useRhfUtilsFormResolvedOptions.ts","../../src/form/rhf/getRhfUtilsFormResolvedRhfProps.ts","../../src/form/rhf/useRhfFormWithResolvedProps.ts","../../src/form/providers/RhfUtilsFormProviders.tsx","../../src/resolvers/zod/getZodResolver.ts","../../src/resolvers/zod/providers/RhfUtilsZodFormProviders.tsx","../../src/form/with-providers/RhfUtilsFormWithProviders.tsx","../../src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.tsx","../../src/_exports/index.ts"],"sourcesContent":["import React from 'react';\n\nimport type { RhfUtilsClientConfig } from '../RhfUtilsClientConfigType';\n\nexport const RhfUtilsClientConfigContext_Internal = React.createContext<\n RhfUtilsClientConfig | undefined\n>(undefined);\n","import React from 'react';\n\nimport { FormRelayContextProvider } from '@/form/relay/context/FormRelayContextProvider';\n\nimport type { RhfUtilsClientConfig } from '../RhfUtilsClientConfigType';\n\nimport { RhfUtilsClientConfigContext_Internal } from './RhfUtilsClientConfigContext';\n\ntype Props = React.PropsWithChildren<{\n config?: RhfUtilsClientConfig;\n}>;\n\nexport const RhfUtilsClientConfigProvider: React.FC<Props> = ({\n config,\n children,\n}) => {\n const [memoConfig] = React.useState(config ?? {});\n\n return (\n <RhfUtilsClientConfigContext_Internal.Provider value={memoConfig}>\n <FormRelayContextProvider>{children}</FormRelayContextProvider>\n </RhfUtilsClientConfigContext_Internal.Provider>\n );\n};\n","import { createContext } from '@/utils/createContext';\n\nimport type { FlatFieldErrors } from '../types';\n\nexport type FlatFieldErrorsContext = {\n all: FlatFieldErrors;\n fields: FlatFieldErrors;\n roots: FlatFieldErrors;\n orphans: FlatFieldErrors;\n // computed\n hasErrors: boolean;\n hasOrphans: boolean;\n};\n\nconst {\n Provider: _FormErrorsFlatContextProvider,\n useRequired: useFlatFieldErrorsContext,\n} = createContext<FlatFieldErrorsContext>();\n\n//\n\nexport { _FormErrorsFlatContextProvider, useFlatFieldErrorsContext };\n","import React from 'react';\n\nimport { useFlatFieldErrorsContext } from './useFlatFieldErrorsContext';\n\n/**\n * Returns `true` if all errors are orphans.\n *\n * You may want to treat this case specifically.\n */\nexport const useFlatFieldErrorsContextHasOnlyOrphans = () => {\n const errors = useFlatFieldErrorsContext();\n\n const hasOnlyOrphans = React.useMemo(() => {\n // if empty or no orphans, early return\n if (!errors.hasErrors) return false;\n if (!errors.hasOrphans) return false;\n\n // if same count, then all errors are orphans\n return (\n Object.keys(errors.orphans).length === Object.keys(errors.all).length\n );\n }, [errors]);\n\n return hasOnlyOrphans;\n};\n","/**\n * HTML data attribute for {@link RhfUtilsNonFieldErrorMarker}.\n */\nexport const RhfUtilsNonFieldErrorMarkerHtmlAttribute =\n 'data-rhfutils-nonfield-error-marker-path';\n","import { RhfUtilsNonFieldErrorMarkerHtmlAttribute } from './RhfUtilsNonFieldErrorMarkerHtmlAttribute';\n\ntype Props = {\n /** Flat field name. (e.g., `address.street`) */\n path: string;\n};\n\n/**\n * Empty, hidden marker to indicate a non-field/non-root error is being displayed to user.\n *\n * Example use case:\n * Field array with minimum items.\n * (When there are no items, the error is not associated with a field and is displayed separately.)\n */\nexport const RhfUtilsNonFieldErrorMarker: React.FC<Props> = ({ path }) => {\n const dataAttribute = {\n [RhfUtilsNonFieldErrorMarkerHtmlAttribute]: path,\n };\n\n return (\n <div\n role=\"alert\"\n aria-hidden=\"true\" // hide from screen readers\n style={{ display: 'none' }} // hide from view/flow\n {...dataAttribute}\n />\n );\n};\n","import React from 'react';\n\n/**\n * Get callback to trigger submit manually on form.\n *\n * Note: `submitter` is optional, but is required to be a submit button.\n *\n * @link https://developer.mozilla.org/docs/Web/API/HTMLFormElement/requestSubmit\n */\nexport const useFormRequestSubmit = (\n ref: React.RefObject<HTMLFormElement | null>,\n): HTMLFormElement['requestSubmit'] =>\n React.useCallback(\n (submitter) => {\n // typeguard (should never happen at runtime when callback is called)\n if (!ref.current) throw new Error();\n\n requestSubmitByForm(ref.current, submitter);\n },\n [ref],\n );\n\n//\n\nconst requestSubmitByForm = (\n form: Pick<HTMLFormElement, 'requestSubmit'>, // narrow to avoid `{[string]: any}` type\n submitter?: HTMLElement | null, // submit button\n) => {\n form.requestSubmit(submitter);\n};\n","import type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport type { FormSubmitFieldErrors } from './FormSubmitFieldErrors';\n\nexport class FormSubmitError<\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n TApiValues extends undefined | SafeFieldValues = undefined,\n TAllValues extends SafeFieldValues = TApiValues extends undefined\n ? TFieldValues\n : TFieldValues | TApiValues,\n> extends Error {\n constructor(\n public errors: FormSubmitFieldErrors<TAllValues>,\n message?: string, // error message\n // options?: ErrorOptions, // requires es2022\n ) {\n super(message);\n }\n}\n","import { createContext } from '@/utils/createContext';\n\nimport type {\n LastSubmitContext,\n LastSubmitContextRead,\n} from './LastSubmitContextType';\n\nconst {\n Provider: _LastSubmitContextProvider,\n useRequired: _useLastSubmitContext,\n} = createContext<LastSubmitContext>();\n\nexport { _LastSubmitContextProvider, _useLastSubmitContext };\n\n//\n\nexport const useLastSubmit = (): LastSubmitContextRead => {\n const lastSubmit = _useLastSubmitContext();\n\n return {\n status: lastSubmit.status.ref,\n error: lastSubmit.error.state,\n };\n};\n\nexport const useLastSubmitStatus = () => useLastSubmit().status;\n\nexport const useLastSubmitError = () => useLastSubmit().error;\n","import type { DevtoolUIProps } from '@hookform/devtools/dist/devToolUI';\nimport React from 'react';\n\nconst LazyRhfDevTool = React.lazy(() =>\n import('@hookform/devtools').then((res) => ({\n default: res.DevTool,\n })),\n);\n\ntype LazyDevToolProps = {\n config?: boolean | Pick<DevtoolUIProps, 'placement' | 'styles'>;\n};\n\n/**\n * Lazy-loaded RHF DevTool.\n */\nexport const LazyDevTool: React.FC<LazyDevToolProps> = ({ config }) => {\n const [memoConfig] = React.useState(config);\n\n // early escape for non-dev builds\n if (!memoConfig) return null;\n\n const props = typeof memoConfig === 'object' ? memoConfig : undefined;\n\n return (\n <React.Suspense>\n <LazyRhfDevTool {...props} />\n </React.Suspense>\n );\n};\n","import { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { LazyDevTool } from './LazyDevTool';\n\nexport const LazyDevToolViaProviders: React.FC = () => {\n const utils = useRhfUtilsContext();\n\n return <LazyDevTool config={utils.options.devTool} />;\n};\n","import type { ControllerProps, FieldPath } from 'react-hook-form';\nimport { Controller as RhfController } from 'react-hook-form';\n\nimport type { SafeFieldValues } from './rhf/SafeFieldValuesType';\n\nexport type _ControllerProps<\n TFieldValues extends SafeFieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = Omit<ControllerProps<TFieldValues, TName>, 'control'>;\n\nexport const _Controller = <\n TFieldValues extends SafeFieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: _ControllerProps<TFieldValues, TName>,\n) => <RhfController {...props} />;\n","import React from 'react';\n\nimport { RhfUtilsClientConfigContext_Internal } from './RhfUtilsClientConfigContext';\n\nexport const useRhfUtilsClientConfig = () => {\n const ctx = React.useContext(RhfUtilsClientConfigContext_Internal);\n\n if (ctx === undefined) throw new Error();\n\n return ctx;\n};\n","import { useFormContext } from 'react-hook-form';\n\nimport { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport { FormSubmitError } from './error/FormSubmitError';\nimport { useLastSubmit } from './last/context/useLastSubmitContext';\nimport type { UseRhfUtilsFormOnSubmitContext } from './UseRhfUtilsFormOnSubmitContextType';\n\nexport const useRhfUtilsFormOnSubmitContext = <\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n TTransformedValues extends SafeFieldValues = TFieldValues,\n>(): UseRhfUtilsFormOnSubmitContext<TFieldValues, TTransformedValues> => {\n const utils = useRhfUtilsContext();\n\n const lastSubmit = useLastSubmit();\n\n const rhf = useFormContext<TFieldValues, unknown, TTransformedValues>();\n\n return {\n utils,\n lastSubmit,\n rhf,\n FormSubmitError: FormSubmitError,\n };\n};\n","import type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport type { UseRhfUtilsFormOnSubmitContext } from '@/submit/UseRhfUtilsFormOnSubmitContextType';\n\nimport type { MaybePromise } from '@/utils/types';\n\nexport const useHandleCancelWithCheckIfCanBe = (\n onCancel: undefined | (() => MaybePromise<void>),\n useCanFormBeCancelled: RhfUtilsClientConfig['useCanFormBeCancelled'],\n formOnSubmitContext: UseRhfUtilsFormOnSubmitContext,\n) => {\n const canFormBeCancelled = useCanFormBeCancelled?.();\n\n const handleCancelWithCheck = async () => {\n if (!onCancel) return;\n\n // - resolve possible promise\n // - keep returned handled non-async to avoid downstream type issues\n const canBeCancelled = await Promise.resolve(\n canFormBeCancelled?.(formOnSubmitContext),\n );\n\n // if form explicitly can't be cancelled, early return\n if (canBeCancelled === false) return;\n\n return Promise.resolve(onCancel());\n };\n\n return handleCancelWithCheck;\n};\n","import { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { useRhfUtilsFormOnSubmitContext } from '@/submit/useRhfUtilsFormOnSubmitContext';\n\nimport type { MaybePromise } from '@/utils/types';\n\nimport { useHandleCancelWithCheckIfCanBe } from './useHandleCancelWithCheckIfCanBe';\n\nexport const useHandleCancelWithCheckIfCanBeViaProviders = (\n onCancel: undefined | (() => MaybePromise<void>),\n) => {\n const { useCanFormBeCancelled } = useRhfUtilsClientConfig();\n const formSubmitContext = useRhfUtilsFormOnSubmitContext();\n\n return useHandleCancelWithCheckIfCanBe(\n onCancel,\n useCanFormBeCancelled,\n formSubmitContext,\n );\n};\n","import { useFormContext } from 'react-hook-form';\n\nimport { FormSubmitError } from '@/submit/error/FormSubmitError';\n\nimport { _Controller } from '../_Controller';\nimport { useRhfUtilsContext } from '../context/utils/useRhfUtilsContext';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport { useHandleCancelWithCheckIfCanBeViaProviders } from '../utils/useHandleCancelWithCheckIfCanBeViaProviders';\n\nimport type { RhfUtilsFormProps } from './RhfUtilsFormProps';\n\nexport const RhfUtilsFormChildrenViaProviders_Internal = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>({\n onCancel,\n Children,\n}: Pick<\n RhfUtilsFormProps<TFieldValues, TTransformedValues, undefined, undefined>,\n 'Children' | 'onCancel'\n>) => {\n const rhf = useFormContext<TFieldValues, unknown, TTransformedValues>();\n const utils = useRhfUtilsContext();\n const onCancelWithCheck =\n useHandleCancelWithCheckIfCanBeViaProviders(onCancel);\n\n return (\n <Children\n {...utils}\n rhf={rhf}\n onCancel={onCancelWithCheck}\n Controller={_Controller<TFieldValues>}\n FormSubmitError={FormSubmitError}\n />\n );\n};\n","import type { FieldPath } from 'react-hook-form';\n\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\nimport type { RHF_UseFormReturnWithoutProxies } from '@/form/RHF_UseFormReturnWithoutProxiesType';\n\nimport type { FormSubmitFieldErrors } from './FormSubmitFieldErrors';\n\n/**\n * Handle thrown {@link FormSubmitError}.\n * Add key/values as name/message to RHF context errors.\n */\nexport const setCtxErrorsByFormSubmitFieldErrors = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n ctx: RHF_UseFormReturnWithoutProxies<TFieldValues, TTransformedValues>,\n errors: FormSubmitFieldErrors,\n) => {\n // loop through error object and set errors in rhf context\n Object.entries(errors).forEach(([name, fieldError]) => {\n ctx.setError(name as FieldPath<TFieldValues>, {\n type: 'FormSubmitFieldError', // default\n ...fieldError,\n });\n });\n};\n","import type {\n RhfUtilsFormInstanceFormSurfacedProps,\n UseRhfUtilsFormInstanceFormProps,\n} from './UseRhfUtilsFormInstanceFormProps';\n\nexport const getRhfUtilsFormResolvedFormProps = (\n global: UseRhfUtilsFormInstanceFormProps | undefined,\n instance: UseRhfUtilsFormInstanceFormProps | undefined,\n surfaced?: RhfUtilsFormInstanceFormSurfacedProps,\n): UseRhfUtilsFormInstanceFormProps => ({\n ...global,\n ...instance,\n\n className:\n [global?.className, instance?.className, surfaced?.className]\n .filter(Boolean) // filter out falsy values\n .join(' ')\n .trim() || undefined, // replace empty string with undefined\n});\n","import { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { getRhfUtilsFormResolvedFormProps } from './getRhfUtilsFormResolvedFormProps';\nimport type { UseRhfUtilsFormInstanceFormProps } from './UseRhfUtilsFormInstanceFormProps';\n\nexport const useRhfUtilsFormResolvedFormProps = (\n formProps: UseRhfUtilsFormInstanceFormProps | undefined,\n id: string,\n surfaced?: { className?: string },\n) => {\n const config = useRhfUtilsClientConfig();\n\n return {\n id,\n\n ...getRhfUtilsFormResolvedFormProps(\n config.defaults?.form,\n formProps,\n surfaced,\n ),\n };\n};\n","import type { MaybePromise } from '@/utils/types';\n\nimport { _useLastSubmitContext } from './useLastSubmitContext';\n\nexport const useLastSubmitErrorContextWith = (\n handleSubmit: (\n event: React.SubmitEvent<HTMLFormElement>,\n ) => MaybePromise<unknown>,\n) => {\n const ctx = _useLastSubmitContext();\n\n return async function (event: React.SubmitEvent<HTMLFormElement>) {\n try {\n ctx.error.reset(); // reset state before next submit event\n\n return await handleSubmit(event);\n } catch (error: unknown) {\n ctx.error.set(error, event);\n\n throw error;\n }\n };\n};\n","import type { SubmitErrorHandler, SubmitHandler } from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\n\nimport { useLastSubmitStatus } from '@/submit/last/context/useLastSubmitContext';\nimport { useLastSubmitErrorContextWith } from '@/submit/last/context/useLastSubmitErrorContextWith';\n\nimport type { MaybePromise } from '@/utils/types';\n\nimport { useRhfUtilsContext } from '../context/utils/useRhfUtilsContext';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\n\ntype Props<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n> = {\n onValid: SubmitHandler<TTransformedValues>;\n onInvalid?: SubmitErrorHandler<TFieldValues>;\n onError: (error: unknown, event: React.BaseSyntheticEvent) => void;\n onFinally?: () => MaybePromise<unknown>;\n};\n\nexport const useRhfUtilsFormHandleSubmit_Internal = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>({\n onValid,\n onInvalid,\n onError,\n onFinally,\n}: Props<TFieldValues, TTransformedValues>): ((\n event: React.SubmitEvent<HTMLFormElement>,\n) => void) => {\n const rhfContext = useFormContext<\n TFieldValues,\n unknown,\n TTransformedValues\n >();\n\n const { options } = useRhfUtilsContext();\n const lastSubmitStatusRef = useLastSubmitStatus();\n\n const handleSubmit = rhfContext.handleSubmit(onValid, onInvalid);\n\n const handleSubmitWithLastSubmitError =\n useLastSubmitErrorContextWith(handleSubmit);\n\n return (event: React.SubmitEvent<HTMLFormElement>) => {\n lastSubmitStatusRef.current = 'submitting';\n\n // cannot stop propagation in handleSubmitValid, b/c it receives a different event object\n if (options.stopSubmitPropagation) event.stopPropagation();\n\n void Promise.resolve(handleSubmitWithLastSubmitError(event))\n .then(() => {\n lastSubmitStatusRef.current = 'success';\n })\n .catch((error: unknown) => {\n lastSubmitStatusRef.current = 'error';\n\n onError(error, event);\n })\n .finally(() => {\n onFinally?.();\n });\n };\n};\n","import React from 'react';\nimport type { UseFormHandleSubmit, UseFormReturn } from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\n\nimport { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\nimport type { RhfUtilsClientConfigFormOutletProps } from '@/client/config/RhfUtilsClientConfigFormOutletProps';\nimport type { RhfUtilsClientConfigUseFormHooksProps } from '@/client/config/RhfUtilsClientConfigUseFormHooksProps';\n\nimport { FormSubmitError } from '@/submit/error/FormSubmitError';\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\nimport { setCtxErrorsByFormSubmitFieldErrors } from '@/submit/error/setCtxErrorsByFormSubmitFieldErrors';\nimport { useLastSubmit } from '@/submit/last/context/useLastSubmitContext';\n\nimport type {\n UseRhfUtilsFormOnSubmitContext,\n UseRhfUtilsFormOnSubmitErrorContext,\n} from '../../submit/UseRhfUtilsFormOnSubmitContextType';\n\nimport { _Controller } from '../_Controller';\nimport { useRhfUtilsContext } from '../context/utils/useRhfUtilsContext';\nimport { useRhfUtilsFormResolvedFormProps } from '../defaults/form/useRhfUtilsFormResolvedFormProps';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\n\nimport { useRhfUtilsFormHandleSubmit_Internal } from './_useHandleSubmit';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from './RhfUtilsFormProps';\nimport type { RhfUtilsFormPropsOnBeforeSubmitInvariants } from './RhfUtilsFormPropsOnBeforeSubmitInvariants';\n\nexport const RhfUtilsFormWithSubmitHandler_Internal = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n getApiData,\n // handlers\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n // other\n form,\n className,\n //\n children,\n}: React.PropsWithChildren<\n Pick<\n RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n >,\n | 'getApiData'\n | 'onSubmitInvalid'\n | 'onBeforeSubmitInvariants'\n | 'onBeforeSubmit'\n | 'onSubmit'\n | 'onSubmitSuccess'\n | 'onSubmitError'\n | 'onSubmitFinally'\n | 'form'\n | 'className'\n >\n>) => {\n const rhfContext = useFormContext<\n TFieldValues,\n unknown,\n TTransformedValues\n >();\n\n const utils = useRhfUtilsContext();\n const config = useRhfUtilsClientConfig();\n const lastSubmit = useLastSubmit();\n\n const resolvedFormProps = useRhfUtilsFormResolvedFormProps(\n form,\n\n // eslint-disable-next-line react-hooks/refs -- bug?\n utils.formId,\n {\n className,\n },\n );\n\n // SUBMIT\n\n const handleSubmitValid: Parameters<\n UseFormHandleSubmit<TFieldValues, TTransformedValues>\n >[0] = async (data: TTransformedValues, event?: React.BaseSyntheticEvent) => {\n const input = rhfContext.getValues();\n\n const api = getApiData?.(data) as TApiValues;\n\n const datas = { input, output: data, api };\n\n const context: UseRhfUtilsFormOnSubmitContext<\n TFieldValues,\n TTransformedValues,\n TApiValues\n > = {\n utils,\n lastSubmit,\n rhf: rhfContext,\n FormSubmitError,\n };\n const submitEvent = event as React.BaseSyntheticEvent<SubmitEvent>; // `as` required due to conditional generic\n\n if (onBeforeSubmitInvariants)\n await handleOnSubmitInvariants<\n TFieldValues,\n TTransformedValues,\n TApiValues\n >(onBeforeSubmitInvariants, datas, context, submitEvent);\n\n await Promise.resolve(onBeforeSubmit?.(datas, context, submitEvent));\n\n const submitResponse = (await Promise.resolve(\n onSubmit?.(datas, context, submitEvent),\n )) as TOnSubmitReturnType;\n\n // eslint-disable-next-line react-hooks/immutability\n lastSubmit.status.current = 'success';\n\n await Promise.resolve(\n onSubmitSuccess?.(submitResponse, datas, context, submitEvent),\n );\n };\n\n function handleSubmitError(error: unknown, event: React.BaseSyntheticEvent) {\n // get `FormSubmitFieldErrors`, if possible\n const formSubmitErrors =\n error instanceof FormSubmitError\n ? // consumer can manually throw FormSubmitError (e.g., manual validation)\n (error as FormSubmitError).errors // `as` to strip `<any>` generic\n : // if error is not FormSubmitError, consumer can provide global handler\n config.onSubmitErrorUnknown?.(error);\n\n if (formSubmitErrors)\n setCtxErrorsByFormSubmitFieldErrors(rhfContext, formSubmitErrors);\n\n onSubmitError?.(\n error,\n {\n utils,\n lastSubmit,\n errors: formSubmitErrors,\n rhf: rhfContext,\n } satisfies UseRhfUtilsFormOnSubmitErrorContext<\n TFieldValues,\n TTransformedValues\n >,\n event as React.BaseSyntheticEvent<SubmitEvent>, // `as` required due to conditional generic\n );\n }\n\n const handleSubmit = useRhfUtilsFormHandleSubmit_Internal({\n onValid: handleSubmitValid,\n onInvalid: onSubmitInvalid,\n onError: handleSubmitError,\n onFinally: onSubmitFinally,\n });\n\n // FormComponent and props\n\n const Outlet = React.useCallback(\n () => children,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /** FormComponent props -- general, non-form-, non-schema-specific. */\n const formHooksProps: RhfUtilsClientConfigUseFormHooksProps = {\n // eslint-disable-next-line react-hooks/refs -- bug?\n ...utils,\n rhf: rhfContext as UseFormReturn<SafeFieldValues, unknown, SafeFieldValues>,\n lastSubmit,\n };\n\n // eslint-disable-next-line react-hooks/refs\n config.useFormHooks?.(formHooksProps);\n\n /** FormComponent props -- general, non-form-, non-schema-specific. */\n const formInjectorProps: RhfUtilsClientConfigFormOutletProps = {\n // eslint-disable-next-line react-hooks/refs\n ...formHooksProps,\n Outlet,\n Controller: _Controller,\n FormSubmitError: FormSubmitError,\n };\n\n // FormComponent or native form\n const FormComponent = config.FormComponent ?? 'form';\n\n return (\n <FormComponent\n {...resolvedFormProps}\n // eslint-disable-next-line react-hooks/refs -- bug?\n id={utils.formId}\n // eslint-disable-next-line react-hooks/refs -- bug?\n ref={utils.formRef}\n onSubmit={handleSubmit}\n >\n {/** eslint-disable-next-line react-hooks/static-components */}\n {config.FormOutlet ? (\n <config.FormOutlet\n // eslint-disable-next-line react-hooks/refs -- bug?\n {...formInjectorProps}\n />\n ) : (\n children\n )}\n </FormComponent>\n );\n};\n\n//\n\nconst handleOnSubmitInvariants = async <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TApiValues extends undefined | SafeFieldValues,\n>(\n onBeforeSubmitInvariants: RhfUtilsFormPropsOnBeforeSubmitInvariants<\n TFieldValues,\n TTransformedValues,\n TApiValues\n >,\n data: { input: TFieldValues; output: TTransformedValues; api: TApiValues },\n context: UseRhfUtilsFormOnSubmitContext<\n TFieldValues,\n TTransformedValues,\n TApiValues\n >,\n event: React.BaseSyntheticEvent<SubmitEvent>,\n) => {\n const invariants = await Promise.resolve(\n onBeforeSubmitInvariants(data, context, event),\n );\n\n const falseyFieldsAndMessages = invariants\n .filter(({ validate }) => !validate)\n .map(({ field, message }) => [field, { message }] as const);\n\n if (!falseyFieldsAndMessages.length) return;\n\n throw new context.FormSubmitError(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n Object.fromEntries(falseyFieldsAndMessages) as FormSubmitFieldErrors,\n );\n};\n","import { LazyDevToolViaProviders } from '@/devtool/LazyDevToolViaProviders';\n\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\n\nimport { RhfUtilsFormChildrenViaProviders_Internal } from './_ChildrenViaProviders';\nimport { RhfUtilsFormWithSubmitHandler_Internal } from './_FormWithSubmitHandler';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from './RhfUtilsFormProps';\n\nexport const RhfUtilsForm = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n getApiData,\n // handlers\n onCancel,\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n //\n Children,\n // attrs\n form,\n className,\n}: RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n>) => (\n <RhfUtilsFormWithSubmitHandler_Internal\n getApiData={getApiData}\n onSubmitInvalid={onSubmitInvalid}\n onBeforeSubmitInvariants={onBeforeSubmitInvariants}\n onBeforeSubmit={onBeforeSubmit}\n onSubmit={onSubmit}\n onSubmitSuccess={onSubmitSuccess}\n onSubmitError={onSubmitError}\n onSubmitFinally={onSubmitFinally}\n form={form}\n className={className}\n >\n <LazyDevToolViaProviders />\n\n <RhfUtilsFormChildrenViaProviders_Internal\n onCancel={onCancel}\n Children={Children}\n />\n </RhfUtilsFormWithSubmitHandler_Internal>\n);\n","import type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\nimport { RhfUtilsForm } from '@/form/with-handlers-and-children/RhfUtilsForm';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from '@/form/with-handlers-and-children/RhfUtilsFormProps';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport type { ZodTypeSafeFieldValues } from '../ZodTypeSafeFieldValuesType';\n\ntype Props<\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n SafeFieldValues\n >,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n infer U\n >\n ? U\n : undefined,\n> = React.PropsWithChildren<\n RhfUtilsFormProps<\n TSchema[typeof zodTypeInput],\n TSchema[typeof zodTypeOutput],\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n >\n>;\n\nexport const RhfUtilsZodForm = <\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n SafeFieldValues\n >,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n infer U\n >\n ? U\n : undefined,\n>(\n props: Props<TSchema, TGetApiValues, TOnSubmitReturnType, TApiValues>,\n) => <RhfUtilsForm {...props} />;\n","import type { FlatFieldErrorEntry, FlatFieldErrors } from './types';\n\n/**\n * Filter {@link FlatFieldErrors} by a predicate.\n *\n * (Encapsulates to and from Object entries.)\n */\nexport const makeFlatFieldErrorsFilter =\n (predicate: (entry: FlatFieldErrorEntry, index: number) => boolean) =>\n (errors: FlatFieldErrors): FlatFieldErrors =>\n // re-create object from entries\n Object.fromEntries(\n // break down to entries\n Object.entries(errors)\n // filter by predicate\n .filter(predicate),\n );\n","import type { FieldError } from 'react-hook-form';\n\n/**\n * Determine if {@link FieldError} is a `ref`'d field error.\n */\nexport const isFieldErrorRefd = (error: FieldError): boolean => !!error.ref;\n","import type { FlatFieldErrorEntry } from './flat/types';\nimport { isFieldErrorRefd } from './isFieldErrorRefd';\n\n/**\n * Determine if {@link FieldError} is a `ref`'d field error.\n */\nexport const isFlatFieldErrorEntryRefd = ([\n ,\n error,\n]: FlatFieldErrorEntry): boolean => isFieldErrorRefd(error);\n","import { makeFlatFieldErrorsFilter } from './flat/filterFlatFieldErrors';\nimport { isFlatFieldErrorEntryRefd } from './isFlatFieldErrorEntryRefd';\n\nexport const getRefdFromFlatFieldErrors = makeFlatFieldErrorsFilter(\n isFlatFieldErrorEntryRefd,\n);\n","import { RhfUtilsNonFieldErrorMarkerHtmlAttribute } from './RhfUtilsNonFieldErrorMarkerHtmlAttribute';\n\n/**\n * Returns query selector for matching non-field error marker.\n * By default includes nested field matching. (See `options.excludeNested`.)\n *\n * @returns One or more selectors in a comma-separated list.\n */\nexport const getRhfUtilsNonFieldErrorMarkerQuerySelector = (\n path: string,\n options?: {\n /**\n * Do not look for match as nested field.\n *\n * By default this is enabled to facilitate looking for fields that may be nested inside objects.\n * This is only a problem when a front-end field is nested more deeply than back-end.\n * For example, field arrays require objects as items, so actual field may be `field.value`.\n * This should be safe, as fields are by definition leaf nodes, so will not have nested fields.\n * (If this check should need to be more precise in the future, it may be ideal to distinguish between client/server errors or paths.)\n */\n excludeNested?: boolean;\n },\n) => {\n return (\n // list of selector variants\n (\n [\n // equals\n // e.g., attr=\"path\"\n ['', ''],\n\n // starts with\n // e.g., attr^=\"path.\"\n ...(options?.excludeNested\n ? []\n : [\n [\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors#attrvalue_4\n '^',\n // only match nested (avoid match 'field' with 'field1`)\n '.',\n ],\n ]),\n ] as const\n )\n .map(([attrSuffix, pathSuffix]) =>\n _getQuerySelector(\n RhfUtilsNonFieldErrorMarkerHtmlAttribute + attrSuffix,\n path + pathSuffix,\n ),\n )\n\n // construct list selector for O(n)\n .join(', ')\n );\n};\n\n// util\n\nconst _getQuerySelector = (attr: string, value: string) =>\n `[role=\"alert\"][${attr}=\"${value}\"]`;\n","import { getRhfUtilsNonFieldErrorMarkerQuerySelector } from './RhfUtilsNonFieldErrorMarker.utils';\n\n/**\n * Determine if a non-field error marker is in the DOM.\n * Note: this will also look for nested markers to accommodate field arrays\n */\nexport const isNonFieldErrorMarkerInDOM = (\n path: string,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n): boolean =>\n !!parentElement.querySelector(\n getRhfUtilsNonFieldErrorMarkerQuerySelector(path),\n );\n","export const FormErrorPathRoot = 'root';\n","import { FormErrorPathRoot } from './consts';\n\n/**\n * Determine if an error path is root. (e.g., `root` or `root.nested`)\n *\n * @param path Flat path. (e.g., 'root.nested')\n */\nexport const isFormErrorPathRoot = (path: string): boolean =>\n path === FormErrorPathRoot || path.startsWith(FormErrorPathRoot + '.');\n","import type { FieldError } from 'react-hook-form';\n\nimport { isFieldErrorRefd } from '../isFieldErrorRefd';\nimport { isNonFieldErrorMarkerInDOM } from '../nonfield/isNonFieldErrorMarkerInDOM';\nimport { isFormErrorPathRoot } from '../root/isFormErrorPathRoot';\n\nexport const isOrphanFormError = (\n path: string,\n error: FieldError,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n) =>\n // non-field\n !isFieldErrorRefd(error) &&\n // non-root\n !isFormErrorPathRoot(path) &&\n // not marked in DOM\n !isNonFieldErrorMarkerInDOM(path, parentElement);\n","import type { FlatFieldErrorEntry } from '../flat/types';\n\nimport { isOrphanFormError } from './isOrphanFormError';\n\n/**\n * Util wrapper for {@link isOrphanFormError} for usage with {@link FlatFieldErrorEntry}.\n */\nexport const getIsFlatFieldErrorEntryOrphanByParentElement =\n (parentElement: Pick<HTMLElement, 'querySelector'>) =>\n ([path, error]: FlatFieldErrorEntry) =>\n isOrphanFormError(path, error, parentElement);\n","import { makeFlatFieldErrorsFilter } from '../flat/filterFlatFieldErrors';\nimport type { FlatFieldErrors } from '../flat/types';\n\nimport { getIsFlatFieldErrorEntryOrphanByParentElement } from './getIsOrphanFormErrorWithParentElement';\n\nexport const getOrphansFromFlatFieldErrors = (\n errors: FlatFieldErrors,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n): FlatFieldErrors =>\n makeFlatFieldErrorsFilter(\n getIsFlatFieldErrorEntryOrphanByParentElement(parentElement),\n )(errors);\n","import type { FlatFieldErrorEntry } from '../flat/types';\n\nimport { isFormErrorPathRoot } from './isFormErrorPathRoot';\n\n/**\n * Util wrapper for {@link isFormErrorPathRoot} for usage with {@link FlatFieldErrorEntry}.\n */\nexport const isFlatFieldErrorEntryPathRoot = ([path]: FlatFieldErrorEntry) =>\n isFormErrorPathRoot(path);\n","import { makeFlatFieldErrorsFilter } from '../flat/filterFlatFieldErrors';\n\nimport { isFlatFieldErrorEntryPathRoot } from './isFlatFieldErrorEntryPathRoot';\n\nexport const getRootsFromFlatFieldErrors = makeFlatFieldErrorsFilter(\n isFlatFieldErrorEntryPathRoot,\n);\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport { getRefdFromFlatFieldErrors } from '@/errors/getRefdFromFlatFieldErrors';\n\nimport { isEmptyObject } from '@/utils/isEmptyObject';\n\nimport { getOrphansFromFlatFieldErrors } from '../../orphan/getOrphansFromFlatFieldErrors';\nimport { getRootsFromFlatFieldErrors } from '../../root/getRootsFromFlatFieldErrors';\n\nimport { getFlatFieldErrors } from '../getFlatFieldErrors';\n\nimport { _FormErrorsFlatContextProvider } from './useFlatFieldErrorsContext';\n\ntype Props = React.PropsWithChildren<{\n formRef: React.RefObject<HTMLFormElement | null>;\n}>;\n\n/**\n * Provides a flattened version of the form errors.\n * Allows flattening and filtering to happen once per errors change.\n */\nexport const FlatFieldErrorsContextProvider: React.FC<Props> = ({\n formRef,\n children,\n}) => {\n const { errors } = useFormState();\n\n const all = getFlatFieldErrors(errors);\n\n const orphans =\n // eslint-disable-next-line react-hooks/refs\n formRef.current\n ? getOrphansFromFlatFieldErrors(\n all,\n // eslint-disable-next-line react-hooks/refs\n formRef.current,\n )\n : {};\n\n const value = {\n all,\n fields: getRefdFromFlatFieldErrors(all),\n roots: getRootsFromFlatFieldErrors(all),\n orphans,\n // computed\n hasErrors: !isEmptyObject(errors),\n hasOrphans: !isEmptyObject(orphans),\n };\n\n return (\n <_FormErrorsFlatContextProvider value={value}>\n {children}\n </_FormErrorsFlatContextProvider>\n );\n};\n","import React from 'react';\n\nimport type { LastSubmitError } from '../error/LastSubmitErrorType';\nimport type { LastSubmitStatus } from '../status/LastSubmitStatusType';\n\nimport { _LastSubmitContextProvider } from './useLastSubmitContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const LastSubmitContextProvider: React.FC<Props> = ({ children }) => {\n const [error, setError] = React.useState<LastSubmitError>();\n\n const statusRef = React.useRef<LastSubmitStatus>(null);\n\n return (\n <_LastSubmitContextProvider\n value={{\n status: { ref: statusRef },\n\n error: {\n state: error,\n\n reset: () => {\n setError(undefined);\n },\n\n set: (error, event) => {\n setError({ error, event });\n },\n },\n }}\n >\n {children}\n </_LastSubmitContextProvider>\n );\n};\n","import type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\n/**\n * Output form values and errors to console.\n */\nexport const consoleErrors = (\n message: string,\n values: SafeFieldValues,\n // accept any record -- e.g., FieldErrors or FlatFieldErrors\n errors: Record<string, unknown>,\n type: 'debug' | 'error' = 'debug',\n) => {\n // eslint-disable-next-line no-console -- deliberate logging\n console[type](message, { values, errors });\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\n\nimport { consoleErrors } from '../../output/consoleErrors';\n\nimport type { FlatFieldErrorsOutputConfig } from './FlatFieldErrorsOutputConfig';\nimport { useFlatFieldErrorsContext } from './useFlatFieldErrorsContext';\n\n/**\n * Outputs (e.g., console, throw) errors based on config.\n */\nexport const useFlatFieldErrorsContextOutput = (\n config?: FlatFieldErrorsOutputConfig,\n) => {\n const form = useFormContext();\n\n const errors = useFlatFieldErrorsContext();\n\n // when errors change (memo-ized by provider)\n // output as configured\n React.useEffect(() => {\n // if no errors, don't do anything further\n if (!errors.hasErrors) return;\n\n // CONSOLE\n\n const console = config?.console?.(errors);\n\n if (console) {\n consoleErrors(\n console.message ?? defaultMessage,\n form.getValues(),\n errors,\n console.type,\n );\n }\n\n // THROW\n\n const _throw = config?.throw?.(errors);\n\n if (_throw)\n throw new Error(typeof _throw === 'string' ? _throw : defaultMessage);\n }, [errors]); // eslint-disable-line react-hooks/exhaustive-deps\n};\n\n//\n\nconst defaultMessage = 'Form errors';\n","import React from 'react';\n\nexport const useRefIfValueWasTrue = (value: boolean) => {\n const hasBooleanChanged = React.useRef(false);\n\n // when value is true, set ref to true\n React.useEffect(() => {\n if (!value) return;\n\n hasBooleanChanged.current = true;\n }, [value]);\n\n const reset = () => {\n hasBooleanChanged.current = false;\n };\n\n return [hasBooleanChanged, reset] as const;\n};\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport type { MaybePromise } from '@/utils/types';\nimport { useRefIfValueWasTrue } from '@/utils/useRefIfValueWasTrue';\n\nexport const useFormOnSubmitted = (\n callback?: (success: boolean) => MaybePromise<unknown>,\n options?: { successful?: boolean },\n) => {\n const { isSubmitSuccessful, isSubmitting } = useFormState();\n\n const [wasSubmitting, resetWasSubmitting] =\n useRefIfValueWasTrue(isSubmitting);\n\n // on successful submit, call callback\n React.useEffect(() => {\n if (!callback) return;\n\n // if currently submitting, ignore\n if (isSubmitting) return;\n\n // wait for submit to finish\n if (!wasSubmitting.current) return;\n\n // always reset to wait for next submit\n resetWasSubmitting();\n\n // check success against options passed\n if (\n options?.successful === undefined || // if option not specified, call on any submit\n isSubmitSuccessful === options.successful // otherwise, call only if matches\n ) {\n callback(isSubmitSuccessful);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only track isSubmitting -- so success is checked each time\n }, [isSubmitting]);\n};\n","import { useFormContext } from 'react-hook-form';\n\nimport { useFormOnSubmitted } from './useFormOnSubmitted';\n\n/**\n * Configuration options for {@link useResetFormOnSubmitted}.\n */\nexport type UseResetFormOnSubmittedOptions =\n // disabled\n | undefined\n\n // enabled\n | {\n /**\n * Reset values on successful submit.\n * - `defaults`: reset current values to defaults\n * - `current`: reset defaults to current values\n */\n success?: { values: 'defaults' | 'current' };\n\n /**\n * Reset values to defaults on submit error.\n */\n error?: { values: 'defaults' };\n };\n\n/**\n * Control resetting of values and (some) state (e.g., `isDirty`) after form submitted.\n *\n * `isDirty` and other state is reset, but submit-related state is preserved, as well as errors.\n *\n * Use cases:\n * - on success:\n * - `defaults`: reset current values to defaults (e.g., clear form)\n * - `current`: reset defaults to current values (e.g., keep values)\n * - on error:\n * - reset current values to default values (e.g., submitOnChange reset)\n *\n * See `Rules` section: https://react-hook-form.com/api/useform/reset/\n * Specifically: \"- It's recommended to reset inside useEffect after submission.\"\n */\nexport const useResetFormOnSubmitted = (\n options: UseResetFormOnSubmittedOptions,\n) => {\n const { getValues, reset } = useFormContext();\n\n useFormOnSubmitted((success) => {\n if (!options) return;\n\n const whichValues = options[success ? 'success' : 'error']?.values;\n\n if (!whichValues) return;\n\n const keepValues = whichValues === 'current';\n\n const values = keepValues\n ? getValues() // current values\n : undefined; // default values\n\n reset(values, {\n // keep submit stuff for tracking relevant state (e.g., `useFormOnSubmitSuccessful`)\n keepIsSubmitSuccessful: true,\n keepIsSubmitted: true,\n keepSubmitCount: true,\n\n /**\n * This is necessary when setting default values to current values (lest form stop updating).\n *\n * Technically, we are keeping values and resetting default values to same values.\n *\n * Steps to repro:\n * - RhfUtilsClientConfig with resetOnSubmitted set to success values to current\n * - remove `keepValues` prop from reset\n * - create valid form, submit\n * - form values should be unchanged\n * - unexpectedly: can no longer type into input\n */\n keepValues,\n\n // keep errors in the case of unsuccessful submit\n keepErrors: true,\n });\n });\n};\n","import React from 'react';\n\n/**\n * Use to determine if first render has run.\n *\n * (Supports strict mode.)\n */\nexport const useIsFirstRender = () => {\n const isFirstRender = React.useRef(DEFAULT_STATE);\n\n // on mount, mark as not first render\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = !DEFAULT_STATE;\n }\n\n // on dismount (or before additional strictmode run), reset state\n return () => {\n isFirstRender.current = DEFAULT_STATE;\n };\n }, []);\n\n return isFirstRender;\n};\n\nconst DEFAULT_STATE = true;\n","import React from 'react';\n\n/**\n * React hook to debounce onChange event callback.\n *\n * Returns debounced state setter (uses ref internally).\n *\n * When debounce delay has elapsed after setting value,\n * onChange callback is called with latest value.\n *\n * @returns `[setValueDebounced]`\n */\nexport const useDebouncedOnChangeValue = <TValue>({\n onChange,\n delay,\n}: {\n onChange: (value: TValue) => void;\n delay: number;\n}) => {\n /**\n * State. (Via ref as it should not re-render.)\n */\n const state = React.useRef<{\n value: TValue;\n timer: NodeJS.Timeout;\n }>(null);\n\n // internal fns\n\n /** Callback for `setTimeout`. */\n const _onTimeout = () => {\n // typeguard (this should never happen)\n if (!state.current) return;\n\n // call consumer\n onChange(state.current.value);\n\n // reset state\n state.current = null;\n };\n\n const _clearTimeout = () => {\n if (state.current) clearTimeout(state.current.timer);\n };\n\n // cleanup\n\n React.useEffect(\n // return timeout clearer\n () => _clearTimeout,\n [],\n );\n\n // return\n\n const setValueDebounced = (value: TValue) => {\n // if there is active timeout, clear it\n _clearTimeout();\n\n // update state\n state.current = {\n // value being tracked\n value,\n // new timer\n timer: setTimeout(_onTimeout, delay),\n };\n };\n\n return [setValueDebounced] as const;\n};\n","import React from 'react';\n\nimport { useFormRequestSubmit } from '@/form/utils/useFormRequestSubmit';\n\nimport { useDebouncedOnChangeValue } from '@/utils/useDebouncedOnChangeValue';\n\nexport type UseSubmitFormOnEventDebouncedOptions = {\n /** Milliseconds to debounce form submission. (Default is none.) */\n debounce?: number;\n};\n\n/**\n * Internal, shared hook to setup debounced callback for OnChange hooks.\n */\nexport const useSubmitFormOnEventDebounced = (\n formRef: React.RefObject<HTMLFormElement | null>,\n options?: UseSubmitFormOnEventDebouncedOptions,\n) => {\n const requestSubmit = useFormRequestSubmit(formRef);\n\n const [setOnChangeDebounced] = useDebouncedOnChangeValue<unknown>({\n delay: options?.debounce ?? 0,\n\n // on change value after debounce\n onChange: () => {\n requestSubmit();\n },\n });\n\n return setOnChangeDebounced;\n};\n","import React from 'react';\nimport { useFormState, useWatch } from 'react-hook-form';\n\nimport { useIsFirstRender } from '@/utils/useIsFirstRender';\n\nimport { useSubmitFormOnEventDebounced } from './useSubmitFormOnEvent';\n\nexport type UseSubmitFormOnWatchOptions = {\n /** Milliseconds to debounce form submission. (Default is none.) */\n debounce: number;\n};\n\n/**\n * Watches for changes in form values.\n *\n * Caveats:\n * - uses RHF's useWatch\n * - triggers change immediately as user types, so use sensible debounce time\n * - does not cover uncontrolled inputs\n */\nexport const useSubmitFormOnWatch = (\n formRef: React.RefObject<HTMLFormElement | null>,\n options?: UseSubmitFormOnWatchOptions,\n) => {\n const setOnChangeDebounced = useSubmitFormOnEventDebounced(formRef, {\n debounce: options?.debounce,\n });\n\n const watch = useWatch();\n const { isValid, isDirty, isValidating, isSubmitting } = useFormState();\n\n /**\n * In some cases, {@link watch} reference object can change,\n * even when no input has been made by user.\n */\n const watchJson = React.useMemo(() => JSON.stringify(watch), [watch]);\n\n const isFirstRender = useIsFirstRender();\n\n React.useEffect(\n // on form values/state change, call callback\n () => {\n if (isFirstRender.current) return; // ignore initial render (i.e., don't immediately submit)\n // form state\n if (isValidating) return; // wait for validation\n if (isSubmitting) return; // do not re-submit\n if (!isValid) return;\n if (!isDirty) return;\n\n setOnChangeDebounced(watch);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isValid, isDirty, watchJson, isValidating],\n // - isValidating bc we need to re-trigger after validation complete\n // - e.g., single keystroke making input in/valid; we have to wait\n // - isSubmitting not included bc would create infinite loop of submits after first submission\n // - expect form to block changes while submitting to avoid changes that get swallowed\n );\n};\n","import React from 'react';\n\nimport { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { useFlatFieldErrorsContextOutput } from '@/errors/flat/context/useFlatFieldErrorsContextOutput';\n\nimport type { RhfUtilsFormOptions } from '@/form/options/RhfUtilsFormOptionsType';\n\nimport { useResetFormOnSubmitted } from '@/submit/useResetFormOnSubmitted';\nimport { useSubmitFormOnWatch } from '@/submit/useSubmitFormOnWatch';\n\nimport { _RhfUtilsContextProvider } from './useRhfUtilsContext';\n\nexport type RhfUtilsContextProviderProps = {\n formId: string;\n formRef: React.RefObject<HTMLFormElement | null>;\n\n /** Consumer-supplied options and values. */\n options: RhfUtilsFormOptions;\n};\n\nexport const RhfUtilsContextProvider: React.FC<\n React.PropsWithChildren<RhfUtilsContextProviderProps>\n> = ({\n formId,\n formRef,\n options,\n //\n children,\n}) => {\n const [memoOptions] = React.useState(options);\n\n const config = useRhfUtilsClientConfig();\n\n useFlatFieldErrorsContextOutput(config.fieldErrors?.output);\n\n (memoOptions.submitOnWatch ? useSubmitFormOnWatch : undefined)?.(\n formRef,\n memoOptions.submitOnWatch,\n );\n\n useResetFormOnSubmitted(memoOptions.resetOnSubmitted);\n\n return (\n <_RhfUtilsContextProvider\n value={{\n formId,\n formRef,\n options,\n }}\n >\n {children}\n </_RhfUtilsContextProvider>\n );\n};\n","import type { RhfUtilsFormOptions } from './RhfUtilsFormOptionsType';\n\nexport const getRhfUtilsFormResolvedOptions = (\n global: RhfUtilsFormOptions | undefined,\n instance: RhfUtilsFormOptions | undefined,\n): RhfUtilsFormOptions => ({\n ...global,\n ...instance,\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- false positive\n ...((global?.resetOnSubmitted || instance?.resetOnSubmitted) && {\n resetOnSubmitted: {\n ...global?.resetOnSubmitted,\n ...instance?.resetOnSubmitted,\n },\n }),\n});\n","import React from 'react';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport { getRhfUtilsFormResolvedOptions } from './getRhfUtilsFormResolvedOptions';\nimport type { RhfUtilsFormOptions } from './RhfUtilsFormOptionsType';\n\nexport const useRhfUtilsFormResolvedOptions = (\n config: RhfUtilsClientConfig,\n options: RhfUtilsFormOptions | undefined,\n) =>\n React.useMemo(\n () => getRhfUtilsFormResolvedOptions(config.defaults?.options, options),\n\n // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo\n [JSON.stringify(options)],\n );\n","import type { UseRhfUtilsFormResolvedDefaults } from '../defaults/UseRhfUtilsFormResolvedDefaultsType';\n\nimport type { SafeFieldValues } from './SafeFieldValuesType';\nimport type {\n RhfUseFormGlobalProps,\n RhfUseFormInstanceProps,\n} from './UseFormPropsType';\n\nexport const getRhfUtilsFormResolvedRhfProps = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n global: RhfUseFormGlobalProps | undefined,\n instance:\n | RhfUseFormInstanceProps<TFieldValues, TTransformedValues>\n | undefined,\n): UseRhfUtilsFormResolvedDefaults<\n TFieldValues,\n TTransformedValues\n>['rhf'] => ({\n ...global,\n ...instance,\n});\n","import type { Resolver, UseFormProps } from 'react-hook-form';\nimport { useForm as useRhfForm } from 'react-hook-form';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport type { RhfUseFormInstanceProps } from '../rhf/UseFormPropsType';\n\nimport { getRhfUtilsFormResolvedRhfProps } from './getRhfUtilsFormResolvedRhfProps';\n\nexport const useRhfFormWithResolvedProps = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n props: RhfUseFormInstanceProps<TFieldValues, TTransformedValues> | undefined,\n config: RhfUtilsClientConfig,\n defaultValues: UseFormProps<\n TFieldValues,\n unknown,\n TTransformedValues\n >['defaultValues'],\n resolver?: Resolver<TFieldValues, unknown, TTransformedValues>,\n) =>\n useRhfForm<TFieldValues, unknown, TTransformedValues>({\n ...getRhfUtilsFormResolvedRhfProps(config.defaults?.rhf, props),\n resolver,\n defaultValues,\n });\n","import React from 'react';\nimport { FormProvider as RhfFormProvider } from 'react-hook-form';\n\nimport { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { FlatFieldErrorsContextProvider } from '@/errors/flat/context/FlatFieldErrorsContextProvider';\n\nimport { LastSubmitContextProvider } from '@/submit/last/context/LastSubmitContextProvider';\n\nimport { RhfUtilsContextProvider } from '../context/utils/RhfUtilsContextProvider';\nimport { useRhfUtilsFormResolvedOptions } from '../options/useRhfUtilsFormResolvedOptions';\nimport { FormRelaySetter } from '../relay/set/FormRelaySetter';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport { useRhfFormWithResolvedProps } from '../rhf/useRhfFormWithResolvedProps';\n\nimport type { RhfUtilsFormProvidersProps } from './RhfUtilsFormProvidersPropsType';\n\ntype Props<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n> = React.PropsWithChildren<\n RhfUtilsFormProvidersProps<TFieldValues, TTransformedValues>\n>;\n\nexport function RhfUtilsFormProviders<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>({\n formId,\n rhf,\n resolver,\n defaultValues,\n options,\n relay,\n //\n children,\n}: Props<TFieldValues, TTransformedValues>) {\n // global config\n\n const config = useRhfUtilsClientConfig();\n\n // id\n\n const reactId = React.useId();\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- replace empty string\n const id = formId || reactId;\n\n // ref\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n // rhf\n\n const resolvedRhf = useRhfFormWithResolvedProps(\n rhf,\n config,\n defaultValues,\n resolver,\n );\n\n // options\n\n const resolvedOptions = useRhfUtilsFormResolvedOptions(config, options);\n\n //\n\n return (\n <RhfFormProvider {...resolvedRhf}>\n <FlatFieldErrorsContextProvider formRef={formRef}>\n <RhfUtilsContextProvider\n formId={id}\n formRef={formRef}\n options={resolvedOptions}\n >\n <FormRelaySetter options={relay} />\n\n <LastSubmitContextProvider>{children}</LastSubmitContextProvider>\n </RhfUtilsContextProvider>\n </FlatFieldErrorsContextProvider>\n </RhfFormProvider>\n );\n}\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { Resolver } from 'react-hook-form';\n\nimport type { zodTypeInput, zodTypeOutput } from './consts';\nimport type { ZodTypeSafeFieldValues } from './ZodTypeSafeFieldValuesType';\n\nexport const getZodResolver = <\n TSchema extends ZodTypeSafeFieldValues,\n TFieldValues extends TSchema[typeof zodTypeInput],\n TTransformedValues extends TSchema[typeof zodTypeOutput],\n>(\n schema: TSchema,\n) => zodResolver(schema) as Resolver<TFieldValues, unknown, TTransformedValues>;\n","import { RhfUtilsFormProviders } from '@/form/providers/RhfUtilsFormProviders';\nimport type { RhfUtilsFormProvidersProps } from '@/form/providers/RhfUtilsFormProvidersPropsType';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport { getZodResolver } from '../getZodResolver';\nimport type { ZodTypeSafeFieldValues } from '../ZodTypeSafeFieldValuesType';\n\ntype Props<TSchema extends ZodTypeSafeFieldValues> = React.PropsWithChildren<\n { schema: TSchema } &\n //\n RhfUtilsFormProvidersProps<\n TSchema[typeof zodTypeInput],\n TSchema[typeof zodTypeOutput]\n >\n>;\n\nexport const RhfUtilsZodFormProviders = <\n TSchema extends ZodTypeSafeFieldValues,\n>({\n schema,\n children,\n ...props\n}: Props<TSchema>) => (\n <RhfUtilsFormProviders {...props} resolver={getZodResolver(schema)}>\n {children}\n </RhfUtilsFormProviders>\n);\n","import { RhfUtilsFormProviders } from '../providers/RhfUtilsFormProviders';\nimport type { RhfUtilsFormProvidersProps } from '../providers/RhfUtilsFormProvidersPropsType';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport { RhfUtilsForm } from '../with-handlers-and-children/RhfUtilsForm';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from '../with-handlers-and-children/RhfUtilsFormProps';\n\nimport type { RhfUtilsFormWithProvidersProps } from './RhfUtilsFormWithProvidersProps';\n\n/**\n * Form providers (with utils) with immediate descendent {@link RhfUtilsForm}.\n * (Syntactic sugar for {@link useRhfUtilsForm}. Use this for most applications.)\n */\nexport function RhfUtilsFormWithProviders<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n getApiData,\n // provider\n resolver,\n rhf,\n defaultValues,\n options,\n relay,\n // form\n onCancel,\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n Children,\n form,\n formId,\n className,\n}: RhfUtilsFormWithProvidersProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n>) {\n const providerProps: RhfUtilsFormProvidersProps<\n TFieldValues,\n TTransformedValues\n > = {\n formId,\n resolver,\n rhf,\n defaultValues,\n options,\n relay,\n };\n\n const formProps: RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n > = {\n getApiData,\n onCancel,\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n Children,\n form,\n className,\n };\n\n return (\n <RhfUtilsFormProviders {...providerProps}>\n <RhfUtilsForm {...formProps} />\n </RhfUtilsFormProviders>\n );\n}\n","import type { RhfUtilsFormProvidersProps } from '@/form/providers/RhfUtilsFormProvidersPropsType';\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from '@/form/with-handlers-and-children/RhfUtilsFormProps';\nimport { RhfUtilsFormWithProviders } from '@/form/with-providers/RhfUtilsFormWithProviders';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport { getZodResolver } from '../getZodResolver';\nimport type { ZodTypeSafeFieldValues } from '../ZodTypeSafeFieldValuesType';\n\ntype Props<\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TFieldValues extends TSchema[typeof zodTypeInput] =\n TSchema[typeof zodTypeInput],\n TTransformedValues extends TSchema[typeof zodTypeOutput] =\n TSchema[typeof zodTypeOutput],\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n> = React.PropsWithChildren<\n { schema: TSchema } &\n // provider\n Omit<\n RhfUtilsFormProvidersProps<TFieldValues, TTransformedValues>,\n 'resolver'\n > &\n // form\n RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n >\n>;\n\nexport const RhfUtilsZodFormWithProviders = <\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TFieldValues extends TSchema[typeof zodTypeInput] =\n TSchema[typeof zodTypeInput],\n TTransformedValues extends TSchema[typeof zodTypeOutput] =\n TSchema[typeof zodTypeOutput],\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n schema,\n ...props\n}: Props<\n TSchema,\n TGetApiValues,\n TOnSubmitReturnType,\n TFieldValues,\n TTransformedValues,\n TApiValues\n>) => (\n <RhfUtilsFormWithProviders {...props} resolver={getZodResolver(schema)} />\n);\n","/**\n * @license @paragrav/rhf-utils\n *\n * Copyright (c) 2024-present paragrav.dev\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nexport type { Register } from '../Register';\nexport * from './config';\nexport * from './errors';\nexport * from './form';\nexport * from './submit';\nexport * from './zod';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["RhfController","useRhfForm","RhfFormProvider"],"sources":["../../src/client/config/context/RhfUtilsClientConfigContext.tsx","../../src/client/config/context/RhfUtilsClientConfigProvider.tsx","../../src/errors/flat/context/useFlatFieldErrorsContext.ts","../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarkerHtmlAttribute.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.tsx","../../src/form/utils/useFormRequestSubmit.ts","../../src/submit/error/FormSubmitError.ts","../../src/submit/last/context/useLastSubmitContext.ts","../../src/devtool/LazyDevTool.tsx","../../src/devtool/LazyDevToolViaProviders.tsx","../../src/form/_Controller.tsx","../../src/client/config/context/useRhfUtilsClientConfig.ts","../../src/submit/useRhfUtilsFormOnSubmitContext.ts","../../src/form/utils/useHandleCancelWithCheckIfCanBe.ts","../../src/form/utils/useHandleCancelWithCheckIfCanBeViaProviders.ts","../../src/form/with-handlers-and-children/_ChildrenViaProviders.tsx","../../src/submit/error/setCtxErrorsByFormSubmitFieldErrors.ts","../../src/form/defaults/form/getRhfUtilsFormResolvedFormProps.ts","../../src/form/defaults/form/useRhfUtilsFormResolvedFormProps.ts","../../src/submit/last/context/useLastSubmitErrorContextWith.ts","../../src/form/with-handlers-and-children/_useHandleSubmit.ts","../../src/form/with-handlers-and-children/_FormWithSubmitHandler.tsx","../../src/form/with-handlers-and-children/RhfUtilsForm.tsx","../../src/resolvers/zod/form/RhfUtilsZodForm.tsx","../../src/errors/flat/filterFlatFieldErrors.ts","../../src/errors/isFieldErrorRefd.ts","../../src/errors/isFlatFieldErrorEntryRefd.ts","../../src/errors/getRefdFromFlatFieldErrors.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.utils.ts","../../src/errors/nonfield/isNonFieldErrorMarkerInDOM.ts","../../src/errors/root/consts.ts","../../src/errors/root/isFormErrorPathRoot.ts","../../src/errors/orphan/isOrphanFormError.ts","../../src/errors/orphan/getIsOrphanFormErrorWithParentElement.ts","../../src/errors/orphan/getOrphansFromFlatFieldErrors.ts","../../src/errors/root/isFlatFieldErrorEntryPathRoot.ts","../../src/errors/root/getRootsFromFlatFieldErrors.ts","../../src/errors/flat/context/FlatFieldErrorsContextProvider.tsx","../../src/submit/last/context/LastSubmitContextProvider.tsx","../../src/errors/output/consoleErrors.ts","../../src/errors/flat/context/useFlatFieldErrorsContextOutput.ts","../../src/utils/useRefIfValueWasTrue.ts","../../src/submit/useFormOnSubmitted.ts","../../src/submit/useResetFormOnSubmitted.ts","../../src/utils/useIsFirstRender.ts","../../src/utils/useDebouncedOnChangeValue.ts","../../src/submit/useSubmitFormOnEvent.ts","../../src/submit/useSubmitFormOnWatch.ts","../../src/form/context/utils/RhfUtilsContextProvider.tsx","../../src/form/options/getRhfUtilsFormResolvedOptions.ts","../../src/form/options/useRhfUtilsFormResolvedOptions.ts","../../src/form/rhf/getRhfUtilsFormResolvedRhfProps.ts","../../src/form/rhf/useRhfFormWithResolvedProps.ts","../../src/form/providers/RhfUtilsFormProviders.tsx","../../src/resolvers/zod/getZodResolver.ts","../../src/resolvers/zod/providers/RhfUtilsZodFormProviders.tsx","../../src/form/with-providers/RhfUtilsFormWithProviders.tsx","../../src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.tsx","../../src/_exports/index.ts"],"sourcesContent":["import React from 'react';\n\nimport type { RhfUtilsClientConfig } from '../RhfUtilsClientConfigType';\n\nexport const RhfUtilsClientConfigContext_Internal = React.createContext<\n RhfUtilsClientConfig | undefined\n>(undefined);\n","import React from 'react';\n\nimport { FormRelayContextProvider } from '@/form/relay/context/FormRelayContextProvider';\n\nimport type { RhfUtilsClientConfig } from '../RhfUtilsClientConfigType';\n\nimport { RhfUtilsClientConfigContext_Internal } from './RhfUtilsClientConfigContext';\n\ntype Props = React.PropsWithChildren<{\n config?: RhfUtilsClientConfig;\n}>;\n\nexport const RhfUtilsClientConfigProvider: React.FC<Props> = ({\n config,\n children,\n}) => {\n const [memoConfig] = React.useState(config ?? {});\n\n return (\n <RhfUtilsClientConfigContext_Internal.Provider value={memoConfig}>\n <FormRelayContextProvider>{children}</FormRelayContextProvider>\n </RhfUtilsClientConfigContext_Internal.Provider>\n );\n};\n","import { createContext } from '@/utils/createContext';\n\nimport type { FlatFieldErrors } from '../types';\n\nexport type FlatFieldErrorsContext = {\n all: FlatFieldErrors;\n fields: FlatFieldErrors;\n roots: FlatFieldErrors;\n orphans: FlatFieldErrors;\n // computed\n hasErrors: boolean;\n hasOrphans: boolean;\n};\n\nconst {\n Provider: _FormErrorsFlatContextProvider,\n useRequired: useFlatFieldErrorsContext,\n} = createContext<FlatFieldErrorsContext>();\n\n//\n\nexport { _FormErrorsFlatContextProvider, useFlatFieldErrorsContext };\n","import React from 'react';\n\nimport { useFlatFieldErrorsContext } from './useFlatFieldErrorsContext';\n\n/**\n * Returns `true` if all errors are orphans.\n *\n * You may want to treat this case specifically.\n */\nexport const useFlatFieldErrorsContextHasOnlyOrphans = () => {\n const errors = useFlatFieldErrorsContext();\n\n const hasOnlyOrphans = React.useMemo(() => {\n // if empty or no orphans, early return\n if (!errors.hasErrors) return false;\n if (!errors.hasOrphans) return false;\n\n // if same count, then all errors are orphans\n return (\n Object.keys(errors.orphans).length === Object.keys(errors.all).length\n );\n }, [errors]);\n\n return hasOnlyOrphans;\n};\n","/**\n * HTML data attribute for {@link RhfUtilsNonFieldErrorMarker}.\n */\nexport const RhfUtilsNonFieldErrorMarkerHtmlAttribute =\n 'data-rhfutils-nonfield-error-marker-path';\n","import { RhfUtilsNonFieldErrorMarkerHtmlAttribute } from './RhfUtilsNonFieldErrorMarkerHtmlAttribute';\n\ntype Props = {\n /** Flat field name. (e.g., `address.street`) */\n path: string;\n};\n\n/**\n * Empty, hidden marker to indicate a non-field/non-root error is being displayed to user.\n *\n * Example use case:\n * Field array with minimum items.\n * (When there are no items, the error is not associated with a field and is displayed separately.)\n */\nexport const RhfUtilsNonFieldErrorMarker: React.FC<Props> = ({ path }) => {\n const dataAttribute = {\n [RhfUtilsNonFieldErrorMarkerHtmlAttribute]: path,\n };\n\n return (\n <div\n role=\"alert\"\n aria-hidden=\"true\" // hide from screen readers\n style={{ display: 'none' }} // hide from view/flow\n {...dataAttribute}\n />\n );\n};\n","import React from 'react';\n\n/**\n * Get callback to trigger submit manually on form.\n *\n * Note: `submitter` is optional, but is required to be a submit button.\n *\n * @link https://developer.mozilla.org/docs/Web/API/HTMLFormElement/requestSubmit\n */\nexport const useFormRequestSubmit = (\n ref: React.RefObject<HTMLFormElement | null>,\n): HTMLFormElement['requestSubmit'] =>\n React.useCallback(\n (submitter) => {\n // typeguard (should never happen at runtime when callback is called)\n if (!ref.current) throw new Error();\n\n requestSubmitByForm(ref.current, submitter);\n },\n [ref],\n );\n\n//\n\nconst requestSubmitByForm = (\n form: Pick<HTMLFormElement, 'requestSubmit'>, // narrow to avoid `{[string]: any}` type\n submitter?: HTMLElement | null, // submit button\n) => {\n form.requestSubmit(submitter);\n};\n","import type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport type { FormSubmitFieldErrors } from './FormSubmitFieldErrors';\n\nexport class FormSubmitError<\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n TApiValues extends undefined | SafeFieldValues = undefined,\n> extends Error {\n constructor(\n public errors: FormSubmitFieldErrors<TFieldValues, TApiValues>,\n message?: string, // error message\n // options?: ErrorOptions, // requires es2022\n ) {\n super(message);\n }\n}\n","import { createContext } from '@/utils/createContext';\n\nimport type {\n LastSubmitContext,\n LastSubmitContextRead,\n} from './LastSubmitContextType';\n\nconst {\n Provider: _LastSubmitContextProvider,\n useRequired: _useLastSubmitContext,\n} = createContext<LastSubmitContext>();\n\nexport { _LastSubmitContextProvider, _useLastSubmitContext };\n\n//\n\nexport const useLastSubmit = (): LastSubmitContextRead => {\n const lastSubmit = _useLastSubmitContext();\n\n return {\n statusRef: lastSubmit.status.ref,\n error: lastSubmit.error.state,\n };\n};\n\nexport const useLastSubmitStatus = () => useLastSubmit().statusRef;\n\nexport const useLastSubmitError = () => useLastSubmit().error;\n","import type { DevtoolUIProps } from '@hookform/devtools/dist/devToolUI';\nimport React from 'react';\n\nconst LazyRhfDevTool = React.lazy(() =>\n import('@hookform/devtools').then((res) => ({\n default: res.DevTool,\n })),\n);\n\ntype LazyDevToolProps = {\n config?: boolean | Pick<DevtoolUIProps, 'placement' | 'styles'>;\n};\n\n/**\n * Lazy-loaded RHF DevTool.\n */\nexport const LazyDevTool: React.FC<LazyDevToolProps> = ({ config }) => {\n const [memoConfig] = React.useState(config);\n\n // early escape for non-dev builds\n if (!memoConfig) return null;\n\n const props = typeof memoConfig === 'object' ? memoConfig : undefined;\n\n return (\n <React.Suspense>\n <LazyRhfDevTool {...props} />\n </React.Suspense>\n );\n};\n","import { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { LazyDevTool } from './LazyDevTool';\n\nexport const LazyDevToolViaProviders: React.FC = () => {\n const utils = useRhfUtilsContext();\n\n return <LazyDevTool config={utils.options.devTool} />;\n};\n","import type { ControllerProps, FieldPath } from 'react-hook-form';\nimport { Controller as RhfController } from 'react-hook-form';\n\nimport type { SafeFieldValues } from './rhf/SafeFieldValuesType';\n\nexport type _ControllerProps<\n TFieldValues extends SafeFieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = Omit<ControllerProps<TFieldValues, TName>, 'control'>;\n\nexport const _Controller = <\n TFieldValues extends SafeFieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: _ControllerProps<TFieldValues, TName>,\n) => <RhfController {...props} />;\n","import React from 'react';\n\nimport { RhfUtilsClientConfigContext_Internal } from './RhfUtilsClientConfigContext';\n\nexport const useRhfUtilsClientConfig = () => {\n const ctx = React.useContext(RhfUtilsClientConfigContext_Internal);\n\n if (ctx === undefined) throw new Error();\n\n return ctx;\n};\n","import { useFormContext } from 'react-hook-form';\n\nimport { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport { FormSubmitError } from './error/FormSubmitError';\nimport { useLastSubmit } from './last/context/useLastSubmitContext';\nimport type { UseRhfUtilsFormOnSubmitContext } from './UseRhfUtilsFormOnSubmitContextType';\n\nexport const useRhfUtilsFormOnSubmitContext = <\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n TTransformedValues extends SafeFieldValues = TFieldValues,\n>(): UseRhfUtilsFormOnSubmitContext<TFieldValues, TTransformedValues> => {\n const utilsCtx = useRhfUtilsContext();\n\n const lastSubmitCtx = useLastSubmit();\n\n const rhf = useFormContext<TFieldValues, unknown, TTransformedValues>();\n\n return {\n utils: utilsCtx,\n lastSubmit: lastSubmitCtx,\n rhf,\n FormSubmitError,\n };\n};\n","import type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport type { UseRhfUtilsFormOnSubmitContext } from '@/submit/UseRhfUtilsFormOnSubmitContextType';\n\nimport type { MaybePromise } from '@/utils/types';\n\nexport const useHandleCancelWithCheckIfCanBe = (\n onCancel: undefined | (() => MaybePromise<void>),\n useCanFormBeCancelled: RhfUtilsClientConfig['useCanFormBeCancelled'],\n formOnSubmitContext: UseRhfUtilsFormOnSubmitContext,\n) => {\n const canFormBeCancelled = useCanFormBeCancelled?.();\n\n const handleCancelWithCheck = async () => {\n if (!onCancel) return;\n\n // - resolve possible promise\n // - keep returned handled non-async to avoid downstream type issues\n const canBeCancelled = await Promise.resolve(\n canFormBeCancelled?.(formOnSubmitContext),\n );\n\n // if form explicitly can't be cancelled, early return\n if (canBeCancelled === false) return;\n\n return Promise.resolve(onCancel());\n };\n\n return handleCancelWithCheck;\n};\n","import { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { useRhfUtilsFormOnSubmitContext } from '@/submit/useRhfUtilsFormOnSubmitContext';\n\nimport type { MaybePromise } from '@/utils/types';\n\nimport { useHandleCancelWithCheckIfCanBe } from './useHandleCancelWithCheckIfCanBe';\n\nexport const useHandleCancelWithCheckIfCanBeViaProviders = (\n onCancel: undefined | (() => MaybePromise<void>),\n) => {\n const { useCanFormBeCancelled } = useRhfUtilsClientConfig();\n const formSubmitContext = useRhfUtilsFormOnSubmitContext();\n\n return useHandleCancelWithCheckIfCanBe(\n onCancel,\n useCanFormBeCancelled,\n formSubmitContext,\n );\n};\n","import { useFormContext } from 'react-hook-form';\n\nimport { FormSubmitError } from '@/submit/error/FormSubmitError';\n\nimport { _Controller } from '../_Controller';\nimport { useRhfUtilsContext } from '../context/utils/useRhfUtilsContext';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport { useHandleCancelWithCheckIfCanBeViaProviders } from '../utils/useHandleCancelWithCheckIfCanBeViaProviders';\n\nimport type { RhfUtilsFormProps } from './RhfUtilsFormProps';\n\nexport const RhfUtilsFormChildrenViaProviders_Internal = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>({\n onCancel,\n Children,\n}: Pick<\n RhfUtilsFormProps<TFieldValues, TTransformedValues, undefined, undefined>,\n 'Children' | 'onCancel'\n>) => {\n const rhf = useFormContext<TFieldValues, unknown, TTransformedValues>();\n const utils = useRhfUtilsContext();\n const onCancelWithCheck =\n useHandleCancelWithCheckIfCanBeViaProviders(onCancel);\n\n return (\n <Children\n {...utils}\n rhf={rhf}\n onCancel={onCancelWithCheck}\n Controller={_Controller<TFieldValues>}\n FormSubmitError={FormSubmitError}\n />\n );\n};\n","import type { FieldPath } from 'react-hook-form';\n\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\nimport type { RHF_UseFormReturnWithoutProxies } from '@/form/RHF_UseFormReturnWithoutProxiesType';\n\nimport type { FormSubmitFieldErrors } from './FormSubmitFieldErrors';\n\n/**\n * Handle thrown {@link FormSubmitError}.\n * Add key/values as name/message to RHF context errors.\n */\nexport const setCtxErrorsByFormSubmitFieldErrors = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n ctx: RHF_UseFormReturnWithoutProxies<TFieldValues, TTransformedValues>,\n errors: FormSubmitFieldErrors,\n) => {\n // loop through error object and set errors in rhf context\n Object.entries(errors).forEach(([name, fieldError]) => {\n ctx.setError(name as FieldPath<TFieldValues>, {\n type: 'FormSubmitFieldError', // default\n ...fieldError,\n });\n });\n};\n","import type {\n RhfUtilsFormInstanceFormSurfacedProps,\n UseRhfUtilsFormInstanceFormProps,\n} from './UseRhfUtilsFormInstanceFormProps';\n\nexport const getRhfUtilsFormResolvedFormProps = (\n global: UseRhfUtilsFormInstanceFormProps | undefined,\n instance: UseRhfUtilsFormInstanceFormProps | undefined,\n surfaced?: RhfUtilsFormInstanceFormSurfacedProps,\n): UseRhfUtilsFormInstanceFormProps => ({\n ...global,\n ...instance,\n\n className:\n [global?.className, instance?.className, surfaced?.className]\n .filter(Boolean) // filter out falsy values\n .join(' ')\n .trim() || undefined, // replace empty string with undefined\n});\n","import { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { getRhfUtilsFormResolvedFormProps } from './getRhfUtilsFormResolvedFormProps';\nimport type { UseRhfUtilsFormInstanceFormProps } from './UseRhfUtilsFormInstanceFormProps';\n\nexport const useRhfUtilsFormResolvedFormProps = (\n formProps: UseRhfUtilsFormInstanceFormProps | undefined,\n id: string,\n surfaced?: { className?: string },\n) => {\n const config = useRhfUtilsClientConfig();\n\n return {\n id,\n\n ...getRhfUtilsFormResolvedFormProps(\n config.defaults?.form,\n formProps,\n surfaced,\n ),\n };\n};\n","import type { MaybePromise } from '@/utils/types';\n\nimport { _useLastSubmitContext } from './useLastSubmitContext';\n\nexport const useLastSubmitErrorContextWith = (\n handleSubmit: (\n event: React.SubmitEvent<HTMLFormElement>,\n ) => MaybePromise<unknown>,\n) => {\n const ctx = _useLastSubmitContext();\n\n return async function (event: React.SubmitEvent<HTMLFormElement>) {\n try {\n ctx.error.reset(); // reset state before next submit event\n\n return await handleSubmit(event);\n } catch (error: unknown) {\n ctx.error.set(error, event);\n\n throw error;\n }\n };\n};\n","import type { SubmitErrorHandler, SubmitHandler } from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\n\nimport { useLastSubmitStatus } from '@/submit/last/context/useLastSubmitContext';\nimport { useLastSubmitErrorContextWith } from '@/submit/last/context/useLastSubmitErrorContextWith';\n\nimport type { MaybePromise } from '@/utils/types';\n\nimport { useRhfUtilsContext } from '../context/utils/useRhfUtilsContext';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\n\ntype Props<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n> = {\n onValid: SubmitHandler<TTransformedValues>;\n onInvalid?: SubmitErrorHandler<TFieldValues>;\n onError: (error: unknown, event: React.BaseSyntheticEvent) => void;\n onFinally?: () => MaybePromise<unknown>;\n};\n\nexport const useRhfUtilsFormHandleSubmit_Internal = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>({\n onValid,\n onInvalid,\n onError,\n onFinally,\n}: Props<TFieldValues, TTransformedValues>): ((\n event: React.SubmitEvent<HTMLFormElement>,\n) => void) => {\n const rhfContext = useFormContext<\n TFieldValues,\n unknown,\n TTransformedValues\n >();\n\n const { options } = useRhfUtilsContext();\n const lastSubmitStatusRef = useLastSubmitStatus();\n\n const handleSubmit = rhfContext.handleSubmit(onValid, onInvalid);\n\n const handleSubmitWithLastSubmitError =\n useLastSubmitErrorContextWith(handleSubmit);\n\n return (event: React.SubmitEvent<HTMLFormElement>) => {\n lastSubmitStatusRef.current = 'submitting';\n\n // cannot stop propagation in handleSubmitValid, b/c it receives a different event object\n if (options.stopSubmitPropagation) event.stopPropagation();\n\n void Promise.resolve(handleSubmitWithLastSubmitError(event))\n .then(() => {\n lastSubmitStatusRef.current = 'success';\n })\n .catch((error: unknown) => {\n lastSubmitStatusRef.current = 'error';\n\n onError(error, event);\n })\n .finally(() => {\n onFinally?.();\n });\n };\n};\n","import React from 'react';\nimport type { UseFormHandleSubmit, UseFormReturn } from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\n\nimport { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\nimport type { RhfUtilsClientConfigFormOutletProps } from '@/client/config/RhfUtilsClientConfigFormOutletProps';\nimport type { RhfUtilsClientConfigUseFormHooksProps } from '@/client/config/RhfUtilsClientConfigUseFormHooksProps';\n\nimport { FormSubmitError } from '@/submit/error/FormSubmitError';\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\nimport { setCtxErrorsByFormSubmitFieldErrors } from '@/submit/error/setCtxErrorsByFormSubmitFieldErrors';\nimport { useLastSubmit } from '@/submit/last/context/useLastSubmitContext';\n\nimport type {\n UseRhfUtilsFormOnSubmitContext,\n UseRhfUtilsFormOnSubmitErrorContext,\n} from '../../submit/UseRhfUtilsFormOnSubmitContextType';\n\nimport { _Controller } from '../_Controller';\nimport { useRhfUtilsContext } from '../context/utils/useRhfUtilsContext';\nimport { useRhfUtilsFormResolvedFormProps } from '../defaults/form/useRhfUtilsFormResolvedFormProps';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\n\nimport { useRhfUtilsFormHandleSubmit_Internal } from './_useHandleSubmit';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from './RhfUtilsFormProps';\nimport type { RhfUtilsFormPropsOnBeforeSubmitInvariants } from './RhfUtilsFormPropsOnBeforeSubmitInvariants';\n\nexport const RhfUtilsFormWithSubmitHandler_Internal = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n getApiData,\n // handlers\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n // other\n form,\n className,\n //\n children,\n}: React.PropsWithChildren<\n Pick<\n RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n >,\n | 'getApiData'\n | 'onSubmitInvalid'\n | 'onBeforeSubmitInvariants'\n | 'onBeforeSubmit'\n | 'onSubmit'\n | 'onSubmitSuccess'\n | 'onSubmitError'\n | 'onSubmitFinally'\n | 'form'\n | 'className'\n >\n>) => {\n const rhfContext = useFormContext<\n TFieldValues,\n unknown,\n TTransformedValues\n >();\n\n const utils = useRhfUtilsContext();\n const config = useRhfUtilsClientConfig();\n const lastSubmit = useLastSubmit();\n\n const resolvedFormProps = useRhfUtilsFormResolvedFormProps(\n form,\n\n // eslint-disable-next-line react-hooks/refs -- bug?\n utils.formId,\n {\n className,\n },\n );\n\n // SUBMIT\n\n const handleSubmitValid: Parameters<\n UseFormHandleSubmit<TFieldValues, TTransformedValues>\n >[0] = async (data: TTransformedValues, event?: React.BaseSyntheticEvent) => {\n const input = rhfContext.getValues();\n\n const api = getApiData?.(data) as TApiValues;\n\n const datas = { input, output: data, api };\n\n const onSubmitContext: UseRhfUtilsFormOnSubmitContext<\n TFieldValues,\n TTransformedValues,\n TApiValues\n > = {\n utils,\n lastSubmit,\n rhf: rhfContext,\n FormSubmitError,\n };\n const submitEvent = event as React.BaseSyntheticEvent<SubmitEvent>; // `as` required due to conditional generic\n\n if (onBeforeSubmitInvariants)\n await handleOnSubmitInvariants<\n TFieldValues,\n TTransformedValues,\n TApiValues\n >(onBeforeSubmitInvariants, datas, onSubmitContext, submitEvent);\n\n await Promise.resolve(\n onBeforeSubmit?.(datas, onSubmitContext, submitEvent),\n );\n\n const submitResponse = (await Promise.resolve(\n onSubmit?.(datas, onSubmitContext, submitEvent),\n )) as TOnSubmitReturnType;\n\n // eslint-disable-next-line react-hooks/immutability\n lastSubmit.statusRef.current = 'success';\n\n await Promise.resolve(\n onSubmitSuccess?.(submitResponse, datas, onSubmitContext, submitEvent),\n );\n };\n\n function handleSubmitError(error: unknown, event: React.BaseSyntheticEvent) {\n // get `FormSubmitFieldErrors`, if possible\n const formSubmitErrors =\n error instanceof FormSubmitError\n ? // consumer can manually throw FormSubmitError (e.g., manual validation)\n (error as FormSubmitError).errors // `as` to strip `<any>` generic\n : // if error is not FormSubmitError, consumer can provide global handler\n config.onSubmitErrorUnknown?.(error);\n\n if (formSubmitErrors)\n setCtxErrorsByFormSubmitFieldErrors(rhfContext, formSubmitErrors);\n\n onSubmitError?.(\n error,\n {\n utils,\n lastSubmit,\n errors: formSubmitErrors,\n rhf: rhfContext,\n } satisfies UseRhfUtilsFormOnSubmitErrorContext<\n TFieldValues,\n TTransformedValues\n >,\n event as React.BaseSyntheticEvent<SubmitEvent>, // `as` required due to conditional generic\n );\n }\n\n const handleSubmit = useRhfUtilsFormHandleSubmit_Internal({\n onValid: handleSubmitValid,\n onInvalid: onSubmitInvalid,\n onError: handleSubmitError,\n onFinally: onSubmitFinally,\n });\n\n // FormComponent and props\n\n const Outlet = React.useCallback(\n () => children,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n /** FormComponent props -- general, non-form-, non-schema-specific. */\n const formHooksProps: RhfUtilsClientConfigUseFormHooksProps = {\n // eslint-disable-next-line react-hooks/refs -- bug?\n ...utils,\n rhf: rhfContext as UseFormReturn<SafeFieldValues, unknown, SafeFieldValues>,\n lastSubmit,\n };\n\n // eslint-disable-next-line react-hooks/refs\n config.useFormHooks?.(formHooksProps);\n\n /** FormComponent props -- general, non-form-, non-schema-specific. */\n const formInjectorProps: RhfUtilsClientConfigFormOutletProps = {\n // eslint-disable-next-line react-hooks/refs\n ...formHooksProps,\n Outlet,\n Controller: _Controller,\n FormSubmitError: FormSubmitError,\n };\n\n // FormComponent or native form\n const FormComponent = config.FormComponent ?? 'form';\n\n return (\n <FormComponent\n {...resolvedFormProps}\n // eslint-disable-next-line react-hooks/refs -- bug?\n id={utils.formId}\n // eslint-disable-next-line react-hooks/refs -- bug?\n ref={utils.formRef}\n onSubmit={handleSubmit}\n >\n {/** eslint-disable-next-line react-hooks/static-components */}\n {config.FormOutlet ? (\n <config.FormOutlet\n // eslint-disable-next-line react-hooks/refs -- bug?\n {...formInjectorProps}\n />\n ) : (\n children\n )}\n </FormComponent>\n );\n};\n\n//\n\nconst handleOnSubmitInvariants = async <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TApiValues extends undefined | SafeFieldValues,\n>(\n onBeforeSubmitInvariants: RhfUtilsFormPropsOnBeforeSubmitInvariants<\n TFieldValues,\n TTransformedValues,\n TApiValues\n >,\n data: { input: TFieldValues; output: TTransformedValues; api: TApiValues },\n context: UseRhfUtilsFormOnSubmitContext<\n TFieldValues,\n TTransformedValues,\n TApiValues\n >,\n event: React.BaseSyntheticEvent<SubmitEvent>,\n) => {\n const invariants = await Promise.resolve(\n onBeforeSubmitInvariants(data, context, event),\n );\n\n const falseyFieldsAndMessages = invariants\n .filter(({ validate }) => !validate)\n .map(({ field, message }) => [field, { message }] as const);\n\n if (!falseyFieldsAndMessages.length) return;\n\n throw new context.FormSubmitError(\n Object.fromEntries(falseyFieldsAndMessages) as FormSubmitFieldErrors<\n TFieldValues,\n TApiValues\n >,\n );\n};\n","import { LazyDevToolViaProviders } from '@/devtool/LazyDevToolViaProviders';\n\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\n\nimport { RhfUtilsFormChildrenViaProviders_Internal } from './_ChildrenViaProviders';\nimport { RhfUtilsFormWithSubmitHandler_Internal } from './_FormWithSubmitHandler';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from './RhfUtilsFormProps';\n\nexport const RhfUtilsForm = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n getApiData,\n // handlers\n onCancel,\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n //\n Children,\n // attrs\n form,\n className,\n}: RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n>) => (\n <RhfUtilsFormWithSubmitHandler_Internal\n getApiData={getApiData}\n onSubmitInvalid={onSubmitInvalid}\n onBeforeSubmitInvariants={onBeforeSubmitInvariants}\n onBeforeSubmit={onBeforeSubmit}\n onSubmit={onSubmit}\n onSubmitSuccess={onSubmitSuccess}\n onSubmitError={onSubmitError}\n onSubmitFinally={onSubmitFinally}\n form={form}\n className={className}\n >\n <LazyDevToolViaProviders />\n\n <RhfUtilsFormChildrenViaProviders_Internal\n onCancel={onCancel}\n Children={Children}\n />\n </RhfUtilsFormWithSubmitHandler_Internal>\n);\n","import type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\nimport { RhfUtilsForm } from '@/form/with-handlers-and-children/RhfUtilsForm';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from '@/form/with-handlers-and-children/RhfUtilsFormProps';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport type { ZodTypeSafeFieldValues } from '../ZodTypeSafeFieldValuesType';\n\ntype Props<\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n SafeFieldValues\n >,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n infer U\n >\n ? U\n : undefined,\n> = React.PropsWithChildren<\n RhfUtilsFormProps<\n TSchema[typeof zodTypeInput],\n TSchema[typeof zodTypeOutput],\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n >\n>;\n\nexport const RhfUtilsZodForm = <\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n SafeFieldValues\n >,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TSchema[typeof zodTypeOutput],\n infer U\n >\n ? U\n : undefined,\n>(\n props: Props<TSchema, TGetApiValues, TOnSubmitReturnType, TApiValues>,\n) => <RhfUtilsForm {...props} />;\n","import type { FlatFieldErrorEntry, FlatFieldErrors } from './types';\n\n/**\n * Filter {@link FlatFieldErrors} by a predicate.\n *\n * (Encapsulates to and from Object entries.)\n */\nexport const makeFlatFieldErrorsFilter =\n (predicate: (entry: FlatFieldErrorEntry, index: number) => boolean) =>\n (errors: FlatFieldErrors): FlatFieldErrors =>\n // re-create object from entries\n Object.fromEntries(\n // break down to entries\n Object.entries(errors)\n // filter by predicate\n .filter(predicate),\n );\n","import type { FieldError } from 'react-hook-form';\n\n/**\n * Determine if {@link FieldError} is a `ref`'d field error.\n */\nexport const isFieldErrorRefd = (error: FieldError): boolean => !!error.ref;\n","import type { FlatFieldErrorEntry } from './flat/types';\nimport { isFieldErrorRefd } from './isFieldErrorRefd';\n\n/**\n * Determine if {@link FieldError} is a `ref`'d field error.\n */\nexport const isFlatFieldErrorEntryRefd = ([\n ,\n error,\n]: FlatFieldErrorEntry): boolean => isFieldErrorRefd(error);\n","import { makeFlatFieldErrorsFilter } from './flat/filterFlatFieldErrors';\nimport { isFlatFieldErrorEntryRefd } from './isFlatFieldErrorEntryRefd';\n\nexport const getRefdFromFlatFieldErrors = makeFlatFieldErrorsFilter(\n isFlatFieldErrorEntryRefd,\n);\n","import { RhfUtilsNonFieldErrorMarkerHtmlAttribute } from './RhfUtilsNonFieldErrorMarkerHtmlAttribute';\n\n/**\n * Returns query selector for matching non-field error marker.\n * By default includes nested field matching. (See `options.excludeNested`.)\n *\n * @returns One or more selectors in a comma-separated list.\n */\nexport const getRhfUtilsNonFieldErrorMarkerQuerySelector = (\n path: string,\n options?: {\n /**\n * Do not look for match as nested field.\n *\n * By default this is enabled to facilitate looking for fields that may be nested inside objects.\n * This is only a problem when a front-end field is nested more deeply than back-end.\n * For example, field arrays require objects as items, so actual field may be `field.value`.\n * This should be safe, as fields are by definition leaf nodes, so will not have nested fields.\n * (If this check should need to be more precise in the future, it may be ideal to distinguish between client/server errors or paths.)\n */\n excludeNested?: boolean;\n },\n) => {\n return (\n // list of selector variants\n (\n [\n // equals\n // e.g., attr=\"path\"\n ['', ''],\n\n // starts with\n // e.g., attr^=\"path.\"\n ...(options?.excludeNested\n ? []\n : [\n [\n // @see https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors#attrvalue_4\n '^',\n // only match nested (avoid match 'field' with 'field1`)\n '.',\n ],\n ]),\n ] as const\n )\n .map(([attrSuffix, pathSuffix]) =>\n _getQuerySelector(\n RhfUtilsNonFieldErrorMarkerHtmlAttribute + attrSuffix,\n path + pathSuffix,\n ),\n )\n\n // construct list selector for O(n)\n .join(', ')\n );\n};\n\n// util\n\nconst _getQuerySelector = (attr: string, value: string) =>\n `[role=\"alert\"][${attr}=\"${value}\"]`;\n","import { getRhfUtilsNonFieldErrorMarkerQuerySelector } from './RhfUtilsNonFieldErrorMarker.utils';\n\n/**\n * Determine if a non-field error marker is in the DOM.\n * Note: this will also look for nested markers to accommodate field arrays\n */\nexport const isNonFieldErrorMarkerInDOM = (\n path: string,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n): boolean =>\n !!parentElement.querySelector(\n getRhfUtilsNonFieldErrorMarkerQuerySelector(path),\n );\n","export const FormErrorPathRoot = 'root';\n","import { FormErrorPathRoot } from './consts';\n\n/**\n * Determine if an error path is root. (e.g., `root` or `root.nested`)\n *\n * @param path Flat path. (e.g., 'root.nested')\n */\nexport const isFormErrorPathRoot = (path: string): boolean =>\n path === FormErrorPathRoot || path.startsWith(FormErrorPathRoot + '.');\n","import type { FieldError } from 'react-hook-form';\n\nimport { isFieldErrorRefd } from '../isFieldErrorRefd';\nimport { isNonFieldErrorMarkerInDOM } from '../nonfield/isNonFieldErrorMarkerInDOM';\nimport { isFormErrorPathRoot } from '../root/isFormErrorPathRoot';\n\nexport const isOrphanFormError = (\n path: string,\n error: FieldError,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n) =>\n // non-field\n !isFieldErrorRefd(error) &&\n // non-root\n !isFormErrorPathRoot(path) &&\n // not marked in DOM\n !isNonFieldErrorMarkerInDOM(path, parentElement);\n","import type { FlatFieldErrorEntry } from '../flat/types';\n\nimport { isOrphanFormError } from './isOrphanFormError';\n\n/**\n * Util wrapper for {@link isOrphanFormError} for usage with {@link FlatFieldErrorEntry}.\n */\nexport const getIsFlatFieldErrorEntryOrphanByParentElement =\n (parentElement: Pick<HTMLElement, 'querySelector'>) =>\n ([path, error]: FlatFieldErrorEntry) =>\n isOrphanFormError(path, error, parentElement);\n","import { makeFlatFieldErrorsFilter } from '../flat/filterFlatFieldErrors';\nimport type { FlatFieldErrors } from '../flat/types';\n\nimport { getIsFlatFieldErrorEntryOrphanByParentElement } from './getIsOrphanFormErrorWithParentElement';\n\nexport const getOrphansFromFlatFieldErrors = (\n errors: FlatFieldErrors,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n): FlatFieldErrors =>\n makeFlatFieldErrorsFilter(\n getIsFlatFieldErrorEntryOrphanByParentElement(parentElement),\n )(errors);\n","import type { FlatFieldErrorEntry } from '../flat/types';\n\nimport { isFormErrorPathRoot } from './isFormErrorPathRoot';\n\n/**\n * Util wrapper for {@link isFormErrorPathRoot} for usage with {@link FlatFieldErrorEntry}.\n */\nexport const isFlatFieldErrorEntryPathRoot = ([path]: FlatFieldErrorEntry) =>\n isFormErrorPathRoot(path);\n","import { makeFlatFieldErrorsFilter } from '../flat/filterFlatFieldErrors';\n\nimport { isFlatFieldErrorEntryPathRoot } from './isFlatFieldErrorEntryPathRoot';\n\nexport const getRootsFromFlatFieldErrors = makeFlatFieldErrorsFilter(\n isFlatFieldErrorEntryPathRoot,\n);\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport { getRefdFromFlatFieldErrors } from '@/errors/getRefdFromFlatFieldErrors';\n\nimport { isEmptyObject } from '@/utils/isEmptyObject';\n\nimport { getOrphansFromFlatFieldErrors } from '../../orphan/getOrphansFromFlatFieldErrors';\nimport { getRootsFromFlatFieldErrors } from '../../root/getRootsFromFlatFieldErrors';\n\nimport { getFlatFieldErrors } from '../getFlatFieldErrors';\n\nimport { _FormErrorsFlatContextProvider } from './useFlatFieldErrorsContext';\n\ntype Props = React.PropsWithChildren<{\n formRef: React.RefObject<HTMLFormElement | null>;\n}>;\n\n/**\n * Provides a flattened version of the form errors.\n * Allows flattening and filtering to happen once per errors change.\n */\nexport const FlatFieldErrorsContextProvider: React.FC<Props> = ({\n formRef,\n children,\n}) => {\n const { errors } = useFormState();\n\n const all = getFlatFieldErrors(errors);\n\n const orphans =\n // eslint-disable-next-line react-hooks/refs\n formRef.current\n ? getOrphansFromFlatFieldErrors(\n all,\n // eslint-disable-next-line react-hooks/refs\n formRef.current,\n )\n : {};\n\n const value = {\n all,\n fields: getRefdFromFlatFieldErrors(all),\n roots: getRootsFromFlatFieldErrors(all),\n orphans,\n // computed\n hasErrors: !isEmptyObject(errors),\n hasOrphans: !isEmptyObject(orphans),\n };\n\n return (\n <_FormErrorsFlatContextProvider value={value}>\n {children}\n </_FormErrorsFlatContextProvider>\n );\n};\n","import React from 'react';\n\nimport type { LastSubmitError } from '../error/LastSubmitErrorType';\nimport type { LastSubmitStatus } from '../status/LastSubmitStatusType';\n\nimport { _LastSubmitContextProvider } from './useLastSubmitContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const LastSubmitContextProvider: React.FC<Props> = ({ children }) => {\n const [error, setError] = React.useState<LastSubmitError>();\n\n const statusRef = React.useRef<LastSubmitStatus>(null);\n\n return (\n <_LastSubmitContextProvider\n value={{\n status: { ref: statusRef },\n\n error: {\n state: error,\n\n reset: () => {\n setError(undefined);\n },\n\n set: (error, event) => {\n setError({ error, event });\n },\n },\n }}\n >\n {children}\n </_LastSubmitContextProvider>\n );\n};\n","import type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\n/**\n * Output form values and errors to console.\n */\nexport const consoleErrors = (\n message: string,\n values: SafeFieldValues,\n // accept any record -- e.g., FieldErrors or FlatFieldErrors\n errors: Record<string, unknown>,\n type: 'debug' | 'error' = 'debug',\n) => {\n // eslint-disable-next-line no-console -- deliberate logging\n console[type](message, { values, errors });\n};\n","import React from 'react';\nimport { useFormContext } from 'react-hook-form';\n\nimport { consoleErrors } from '../../output/consoleErrors';\n\nimport type { FlatFieldErrorsOutputConfig } from './FlatFieldErrorsOutputConfig';\nimport { useFlatFieldErrorsContext } from './useFlatFieldErrorsContext';\n\n/**\n * Outputs (e.g., console, throw) errors based on config.\n */\nexport const useFlatFieldErrorsContextOutput = (\n config?: FlatFieldErrorsOutputConfig,\n) => {\n const form = useFormContext();\n\n const errors = useFlatFieldErrorsContext();\n\n // when errors change (memo-ized by provider)\n // output as configured\n React.useEffect(() => {\n // if no errors, don't do anything further\n if (!errors.hasErrors) return;\n\n // CONSOLE\n\n const console = config?.console?.(errors);\n\n if (console) {\n consoleErrors(\n console.message ?? defaultMessage,\n form.getValues(),\n errors,\n console.type,\n );\n }\n\n // THROW\n\n const _throw = config?.throw?.(errors);\n\n if (_throw)\n throw new Error(typeof _throw === 'string' ? _throw : defaultMessage);\n }, [errors]); // eslint-disable-line react-hooks/exhaustive-deps\n};\n\n//\n\nconst defaultMessage = 'Form errors';\n","import React from 'react';\n\nexport const useRefIfValueWasTrue = (value: boolean) => {\n const hasBooleanChanged = React.useRef(false);\n\n // when value is true, set ref to true\n React.useEffect(() => {\n if (!value) return;\n\n hasBooleanChanged.current = true;\n }, [value]);\n\n const reset = () => {\n hasBooleanChanged.current = false;\n };\n\n return [hasBooleanChanged, reset] as const;\n};\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport type { MaybePromise } from '@/utils/types';\nimport { useRefIfValueWasTrue } from '@/utils/useRefIfValueWasTrue';\n\nexport const useFormOnSubmitted = (\n callback?: (success: boolean) => MaybePromise<unknown>,\n options?: { successful?: boolean },\n) => {\n const { isSubmitSuccessful, isSubmitting } = useFormState();\n\n const [wasSubmitting, resetWasSubmitting] =\n useRefIfValueWasTrue(isSubmitting);\n\n // on successful submit, call callback\n React.useEffect(() => {\n if (!callback) return;\n\n // if currently submitting, ignore\n if (isSubmitting) return;\n\n // wait for submit to finish\n if (!wasSubmitting.current) return;\n\n // always reset to wait for next submit\n resetWasSubmitting();\n\n // check success against options passed\n if (\n options?.successful === undefined || // if option not specified, call on any submit\n isSubmitSuccessful === options.successful // otherwise, call only if matches\n ) {\n callback(isSubmitSuccessful);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps -- only track isSubmitting -- so success is checked each time\n }, [isSubmitting]);\n};\n","import { useFormContext } from 'react-hook-form';\n\nimport { useFormOnSubmitted } from './useFormOnSubmitted';\n\n/**\n * Configuration options for {@link useResetFormOnSubmitted}.\n */\nexport type UseResetFormOnSubmittedOptions =\n // disabled\n | undefined\n\n // enabled\n | {\n /**\n * Reset values on successful submit.\n * - `defaults`: reset current values to defaults\n * - `current`: reset defaults to current values\n */\n success?: { values: 'defaults' | 'current' };\n\n /**\n * Reset values to defaults on submit error.\n */\n error?: { values: 'defaults' };\n };\n\n/**\n * Control resetting of values and (some) state (e.g., `isDirty`) after form submitted.\n *\n * `isDirty` and other state is reset, but submit-related state is preserved, as well as errors.\n *\n * Use cases:\n * - on success:\n * - `defaults`: reset current values to defaults (e.g., clear form)\n * - `current`: reset defaults to current values (e.g., keep values)\n * - on error:\n * - reset current values to default values (e.g., submitOnChange reset)\n *\n * See `Rules` section: https://react-hook-form.com/api/useform/reset/\n * Specifically: \"- It's recommended to reset inside useEffect after submission.\"\n */\nexport const useResetFormOnSubmitted = (\n options: UseResetFormOnSubmittedOptions,\n) => {\n const { getValues, reset } = useFormContext();\n\n useFormOnSubmitted((success) => {\n if (!options) return;\n\n const whichValues = options[success ? 'success' : 'error']?.values;\n\n if (!whichValues) return;\n\n const keepValues = whichValues === 'current';\n\n const values = keepValues\n ? getValues() // current values\n : undefined; // default values\n\n reset(values, {\n // keep submit stuff for tracking relevant state (e.g., `useFormOnSubmitSuccessful`)\n keepIsSubmitSuccessful: true,\n keepIsSubmitted: true,\n keepSubmitCount: true,\n\n /**\n * This is necessary when setting default values to current values (lest form stop updating).\n *\n * Technically, we are keeping values and resetting default values to same values.\n *\n * Steps to repro:\n * - RhfUtilsClientConfig with resetOnSubmitted set to success values to current\n * - remove `keepValues` prop from reset\n * - create valid form, submit\n * - form values should be unchanged\n * - unexpectedly: can no longer type into input\n */\n keepValues,\n\n // keep errors in the case of unsuccessful submit\n keepErrors: true,\n });\n });\n};\n","import React from 'react';\n\n/**\n * Use to determine if first render has run.\n *\n * (Supports strict mode.)\n */\nexport const useIsFirstRender = () => {\n const isFirstRender = React.useRef(DEFAULT_STATE);\n\n // on mount, mark as not first render\n React.useEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = !DEFAULT_STATE;\n }\n\n // on dismount (or before additional strictmode run), reset state\n return () => {\n isFirstRender.current = DEFAULT_STATE;\n };\n }, []);\n\n return isFirstRender;\n};\n\nconst DEFAULT_STATE = true;\n","import React from 'react';\n\n/**\n * React hook to debounce onChange event callback.\n *\n * Returns debounced state setter (uses ref internally).\n *\n * When debounce delay has elapsed after setting value,\n * onChange callback is called with latest value.\n *\n * @returns `[setValueDebounced]`\n */\nexport const useDebouncedOnChangeValue = <TValue>({\n onChange,\n delay,\n}: {\n onChange: (value: TValue) => void;\n delay: number;\n}) => {\n /**\n * State. (Via ref as it should not re-render.)\n */\n const state = React.useRef<{\n value: TValue;\n timer: NodeJS.Timeout;\n }>(null);\n\n // internal fns\n\n /** Callback for `setTimeout`. */\n const _onTimeout = () => {\n // typeguard (this should never happen)\n if (!state.current) return;\n\n // call consumer\n onChange(state.current.value);\n\n // reset state\n state.current = null;\n };\n\n const _clearTimeout = () => {\n if (state.current) clearTimeout(state.current.timer);\n };\n\n // cleanup\n\n React.useEffect(\n // return timeout clearer\n () => _clearTimeout,\n [],\n );\n\n // return\n\n const setValueDebounced = (value: TValue) => {\n // if there is active timeout, clear it\n _clearTimeout();\n\n // update state\n state.current = {\n // value being tracked\n value,\n // new timer\n timer: setTimeout(_onTimeout, delay),\n };\n };\n\n return [setValueDebounced] as const;\n};\n","import React from 'react';\n\nimport { useFormRequestSubmit } from '@/form/utils/useFormRequestSubmit';\n\nimport { useDebouncedOnChangeValue } from '@/utils/useDebouncedOnChangeValue';\n\nexport type UseSubmitFormOnEventDebouncedOptions = {\n /** Milliseconds to debounce form submission. (Default is none.) */\n debounce?: number;\n};\n\n/**\n * Internal, shared hook to setup debounced callback for OnChange hooks.\n */\nexport const useSubmitFormOnEventDebounced = (\n formRef: React.RefObject<HTMLFormElement | null>,\n options?: UseSubmitFormOnEventDebouncedOptions,\n) => {\n const requestSubmit = useFormRequestSubmit(formRef);\n\n const [setOnChangeDebounced] = useDebouncedOnChangeValue<unknown>({\n delay: options?.debounce ?? 0,\n\n // on change value after debounce\n onChange: () => {\n requestSubmit();\n },\n });\n\n return setOnChangeDebounced;\n};\n","import React from 'react';\nimport { useFormState, useWatch } from 'react-hook-form';\n\nimport { useIsFirstRender } from '@/utils/useIsFirstRender';\n\nimport { useSubmitFormOnEventDebounced } from './useSubmitFormOnEvent';\n\nexport type UseSubmitFormOnWatchOptions = {\n /** Milliseconds to debounce form submission. (Default is none.) */\n debounce: number;\n};\n\n/**\n * Watches for changes in form values.\n *\n * Caveats:\n * - uses RHF's useWatch\n * - triggers change immediately as user types, so use sensible debounce time\n * - does not cover uncontrolled inputs\n */\nexport const useSubmitFormOnWatch = (\n formRef: React.RefObject<HTMLFormElement | null>,\n options?: UseSubmitFormOnWatchOptions,\n) => {\n const setOnChangeDebounced = useSubmitFormOnEventDebounced(formRef, {\n debounce: options?.debounce,\n });\n\n const watch = useWatch();\n const { isValid, isDirty, isValidating, isSubmitting } = useFormState();\n\n /**\n * In some cases, {@link watch} reference object can change,\n * even when no input has been made by user.\n */\n const watchJson = React.useMemo(() => JSON.stringify(watch), [watch]);\n\n const isFirstRender = useIsFirstRender();\n\n React.useEffect(\n // on form values/state change, call callback\n () => {\n if (isFirstRender.current) return; // ignore initial render (i.e., don't immediately submit)\n // form state\n if (isValidating) return; // wait for validation\n if (isSubmitting) return; // do not re-submit\n if (!isValid) return;\n if (!isDirty) return;\n\n setOnChangeDebounced(watch);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isValid, isDirty, watchJson, isValidating],\n // - isValidating bc we need to re-trigger after validation complete\n // - e.g., single keystroke making input in/valid; we have to wait\n // - isSubmitting not included bc would create infinite loop of submits after first submission\n // - expect form to block changes while submitting to avoid changes that get swallowed\n );\n};\n","import React from 'react';\n\nimport { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { useFlatFieldErrorsContextOutput } from '@/errors/flat/context/useFlatFieldErrorsContextOutput';\n\nimport type { RhfUtilsFormOptions } from '@/form/options/RhfUtilsFormOptionsType';\n\nimport { useResetFormOnSubmitted } from '@/submit/useResetFormOnSubmitted';\nimport { useSubmitFormOnWatch } from '@/submit/useSubmitFormOnWatch';\n\nimport { _RhfUtilsContextProvider } from './useRhfUtilsContext';\n\nexport type RhfUtilsContextProviderProps = {\n formId: string;\n formRef: React.RefObject<HTMLFormElement | null>;\n\n /** Consumer-supplied options and values. */\n options: RhfUtilsFormOptions;\n};\n\nexport const RhfUtilsContextProvider: React.FC<\n React.PropsWithChildren<RhfUtilsContextProviderProps>\n> = ({\n formId,\n formRef,\n options,\n //\n children,\n}) => {\n const [memoOptions] = React.useState(options);\n\n const config = useRhfUtilsClientConfig();\n\n useFlatFieldErrorsContextOutput(config.fieldErrors?.output);\n\n (memoOptions.submitOnWatch ? useSubmitFormOnWatch : undefined)?.(\n formRef,\n memoOptions.submitOnWatch,\n );\n\n useResetFormOnSubmitted(memoOptions.resetOnSubmitted);\n\n return (\n <_RhfUtilsContextProvider\n value={{\n formId,\n formRef,\n options,\n }}\n >\n {children}\n </_RhfUtilsContextProvider>\n );\n};\n","import type { RhfUtilsFormOptions } from './RhfUtilsFormOptionsType';\n\nexport const getRhfUtilsFormResolvedOptions = (\n global: RhfUtilsFormOptions | undefined,\n instance: RhfUtilsFormOptions | undefined,\n): RhfUtilsFormOptions => ({\n ...global,\n ...instance,\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- false positive\n ...((global?.resetOnSubmitted || instance?.resetOnSubmitted) && {\n resetOnSubmitted: {\n ...global?.resetOnSubmitted,\n ...instance?.resetOnSubmitted,\n },\n }),\n});\n","import React from 'react';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport { getRhfUtilsFormResolvedOptions } from './getRhfUtilsFormResolvedOptions';\nimport type { RhfUtilsFormOptions } from './RhfUtilsFormOptionsType';\n\nexport const useRhfUtilsFormResolvedOptions = (\n config: RhfUtilsClientConfig,\n options: RhfUtilsFormOptions | undefined,\n) =>\n React.useMemo(\n () => getRhfUtilsFormResolvedOptions(config.defaults?.options, options),\n\n // eslint-disable-next-line react-hooks/exhaustive-deps, react-hooks/use-memo\n [JSON.stringify(options)],\n );\n","import type { UseRhfUtilsFormResolvedDefaults } from '../defaults/UseRhfUtilsFormResolvedDefaultsType';\n\nimport type { SafeFieldValues } from './SafeFieldValuesType';\nimport type {\n RhfUseFormGlobalProps,\n RhfUseFormInstanceProps,\n} from './UseFormPropsType';\n\nexport const getRhfUtilsFormResolvedRhfProps = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n global: RhfUseFormGlobalProps | undefined,\n instance:\n RhfUseFormInstanceProps<TFieldValues, TTransformedValues> | undefined,\n): UseRhfUtilsFormResolvedDefaults<\n TFieldValues,\n TTransformedValues\n>['rhf'] => ({\n ...global,\n ...instance,\n});\n","import type { Resolver, UseFormProps } from 'react-hook-form';\nimport { useForm as useRhfForm } from 'react-hook-form';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport type { RhfUseFormInstanceProps } from '../rhf/UseFormPropsType';\n\nimport { getRhfUtilsFormResolvedRhfProps } from './getRhfUtilsFormResolvedRhfProps';\n\nexport const useRhfFormWithResolvedProps = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n props: RhfUseFormInstanceProps<TFieldValues, TTransformedValues> | undefined,\n config: RhfUtilsClientConfig,\n defaultValues: UseFormProps<\n TFieldValues,\n unknown,\n TTransformedValues\n >['defaultValues'],\n resolver?: Resolver<TFieldValues, unknown, TTransformedValues>,\n) =>\n useRhfForm<TFieldValues, unknown, TTransformedValues>({\n ...getRhfUtilsFormResolvedRhfProps(config.defaults?.rhf, props),\n resolver,\n defaultValues,\n });\n","import React from 'react';\nimport { FormProvider as RhfFormProvider } from 'react-hook-form';\n\nimport { useRhfUtilsClientConfig } from '@/client/config/context/useRhfUtilsClientConfig';\n\nimport { FlatFieldErrorsContextProvider } from '@/errors/flat/context/FlatFieldErrorsContextProvider';\n\nimport { LastSubmitContextProvider } from '@/submit/last/context/LastSubmitContextProvider';\n\nimport { RhfUtilsContextProvider } from '../context/utils/RhfUtilsContextProvider';\nimport { useRhfUtilsFormResolvedOptions } from '../options/useRhfUtilsFormResolvedOptions';\nimport { FormRelaySetter } from '../relay/set/FormRelaySetter';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport { useRhfFormWithResolvedProps } from '../rhf/useRhfFormWithResolvedProps';\n\nimport type { RhfUtilsFormProvidersProps } from './RhfUtilsFormProvidersPropsType';\n\ntype Props<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n> = React.PropsWithChildren<\n RhfUtilsFormProvidersProps<TFieldValues, TTransformedValues>\n>;\n\nexport function RhfUtilsFormProviders<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>({\n formId,\n rhf,\n resolver,\n defaultValues,\n options,\n relay,\n //\n children,\n}: Props<TFieldValues, TTransformedValues>) {\n // global config\n\n const config = useRhfUtilsClientConfig();\n\n // id\n\n const reactId = React.useId();\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- replace empty string\n const id = formId || reactId;\n\n // ref\n\n const formRef = React.useRef<HTMLFormElement>(null);\n\n // rhf\n\n const resolvedRhf = useRhfFormWithResolvedProps(\n rhf,\n config,\n defaultValues,\n resolver,\n );\n\n // options\n\n const resolvedOptions = useRhfUtilsFormResolvedOptions(config, options);\n\n //\n\n return (\n <RhfFormProvider {...resolvedRhf}>\n <FlatFieldErrorsContextProvider formRef={formRef}>\n <RhfUtilsContextProvider\n formId={id}\n formRef={formRef}\n options={resolvedOptions}\n >\n <FormRelaySetter options={relay} />\n\n <LastSubmitContextProvider>{children}</LastSubmitContextProvider>\n </RhfUtilsContextProvider>\n </FlatFieldErrorsContextProvider>\n </RhfFormProvider>\n );\n}\n","import { zodResolver } from '@hookform/resolvers/zod';\nimport type { Resolver } from 'react-hook-form';\n\nimport type { zodTypeInput, zodTypeOutput } from './consts';\nimport type { ZodTypeSafeFieldValues } from './ZodTypeSafeFieldValuesType';\n\nexport const getZodResolver = <\n TSchema extends ZodTypeSafeFieldValues,\n TFieldValues extends TSchema[typeof zodTypeInput],\n TTransformedValues extends TSchema[typeof zodTypeOutput],\n>(\n schema: TSchema,\n) => zodResolver(schema) as Resolver<TFieldValues, unknown, TTransformedValues>;\n","import { RhfUtilsFormProviders } from '@/form/providers/RhfUtilsFormProviders';\nimport type { RhfUtilsFormProvidersProps } from '@/form/providers/RhfUtilsFormProvidersPropsType';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport { getZodResolver } from '../getZodResolver';\nimport type { ZodTypeSafeFieldValues } from '../ZodTypeSafeFieldValuesType';\n\ntype Props<TSchema extends ZodTypeSafeFieldValues> = React.PropsWithChildren<\n { schema: TSchema } &\n //\n RhfUtilsFormProvidersProps<\n TSchema[typeof zodTypeInput],\n TSchema[typeof zodTypeOutput]\n >\n>;\n\nexport const RhfUtilsZodFormProviders = <\n TSchema extends ZodTypeSafeFieldValues,\n>({\n schema,\n children,\n ...props\n}: Props<TSchema>) => (\n <RhfUtilsFormProviders {...props} resolver={getZodResolver(schema)}>\n {children}\n </RhfUtilsFormProviders>\n);\n","import { RhfUtilsFormProviders } from '../providers/RhfUtilsFormProviders';\nimport type { RhfUtilsFormProvidersProps } from '../providers/RhfUtilsFormProvidersPropsType';\nimport type { SafeFieldValues } from '../rhf/SafeFieldValuesType';\nimport { RhfUtilsForm } from '../with-handlers-and-children/RhfUtilsForm';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from '../with-handlers-and-children/RhfUtilsFormProps';\n\nimport type { RhfUtilsFormWithProvidersProps } from './RhfUtilsFormWithProvidersProps';\n\n/**\n * Form providers (with utils) with immediate descendent {@link RhfUtilsForm}.\n * (Syntactic sugar for {@link useRhfUtilsForm}. Use this for most applications.)\n */\nexport function RhfUtilsFormWithProviders<\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n getApiData,\n // provider\n resolver,\n rhf,\n defaultValues,\n options,\n relay,\n // form\n onCancel,\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n Children,\n form,\n formId,\n className,\n}: RhfUtilsFormWithProvidersProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n>) {\n const providerProps: RhfUtilsFormProvidersProps<\n TFieldValues,\n TTransformedValues\n > = {\n formId,\n resolver,\n rhf,\n defaultValues,\n options,\n relay,\n };\n\n const formProps: RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n > = {\n getApiData,\n onCancel,\n onSubmitInvalid,\n onBeforeSubmitInvariants,\n onBeforeSubmit,\n onSubmit,\n onSubmitSuccess,\n onSubmitError,\n onSubmitFinally,\n Children,\n form,\n className,\n };\n\n return (\n <RhfUtilsFormProviders {...providerProps}>\n <RhfUtilsForm {...formProps} />\n </RhfUtilsFormProviders>\n );\n}\n","import type { RhfUtilsFormProvidersProps } from '@/form/providers/RhfUtilsFormProvidersPropsType';\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\nimport type {\n RhfUtilsFormProps,\n RhfUtilsFormPropsGetApiValues,\n} from '@/form/with-handlers-and-children/RhfUtilsFormProps';\nimport { RhfUtilsFormWithProviders } from '@/form/with-providers/RhfUtilsFormWithProviders';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport { getZodResolver } from '../getZodResolver';\nimport type { ZodTypeSafeFieldValues } from '../ZodTypeSafeFieldValuesType';\n\ntype Props<\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TFieldValues extends TSchema[typeof zodTypeInput] =\n TSchema[typeof zodTypeInput],\n TTransformedValues extends TSchema[typeof zodTypeOutput] =\n TSchema[typeof zodTypeOutput],\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n> = React.PropsWithChildren<\n { schema: TSchema } &\n // provider\n Omit<\n RhfUtilsFormProvidersProps<TFieldValues, TTransformedValues>,\n 'resolver'\n > &\n // form\n RhfUtilsFormProps<\n TFieldValues,\n TTransformedValues,\n TGetApiValues,\n TOnSubmitReturnType,\n TApiValues\n >\n>;\n\nexport const RhfUtilsZodFormWithProviders = <\n TSchema extends ZodTypeSafeFieldValues,\n TGetApiValues extends\n | undefined\n | RhfUtilsFormPropsGetApiValues<TTransformedValues, SafeFieldValues>,\n TOnSubmitReturnType,\n TFieldValues extends TSchema[typeof zodTypeInput] =\n TSchema[typeof zodTypeInput],\n TTransformedValues extends TSchema[typeof zodTypeOutput] =\n TSchema[typeof zodTypeOutput],\n TApiValues extends undefined | SafeFieldValues =\n TGetApiValues extends RhfUtilsFormPropsGetApiValues<\n TTransformedValues,\n infer U\n >\n ? U\n : undefined,\n>({\n schema,\n ...props\n}: Props<\n TSchema,\n TGetApiValues,\n TOnSubmitReturnType,\n TFieldValues,\n TTransformedValues,\n TApiValues\n>) => (\n <RhfUtilsFormWithProviders {...props} resolver={getZodResolver(schema)} />\n);\n","/**\n * @license @paragrav/rhf-utils\n *\n * Copyright (c) 2024-present paragrav.dev\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nexport type { Register } from '../Register';\nexport * from './config';\nexport * from './errors';\nexport * from './form';\nexport * from './submit';\nexport * from './zod';\n"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { i as RhfUtilsFormOptions, r as SafeFieldValues } from "./RhfUtilsContextType-Cqg-0i2U.js";
2
- import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-BtNZLz8X.js";
1
+ import { i as RhfUtilsFormOptions, r as SafeFieldValues } from "./RhfUtilsContextType-DBOvBnPF.js";
2
+ import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-B5CknIkX.js";
3
3
  import React$1 from "react";
4
4
  import { FormState } from "react-hook-form";
5
-
6
5
  //#region src/form/relay/context/FormRelayContextProvider.d.ts
7
6
  type Props$1 = React$1.PropsWithChildren;
8
7
  declare const FormRelayContextProvider: React$1.FC<Props$1>;
@@ -12,7 +11,8 @@ type FormRelayGroup = Partial<Omit<FormState<SafeFieldValues>, 'defaultValues' |
12
11
  hasErrors: boolean;
13
12
  hasDirtyFields: boolean;
14
13
  hasTouchedFields: boolean;
15
- hasValidatingFields: boolean; /** Sum of all submit counts. */
14
+ hasValidatingFields: boolean;
15
+ /** Sum of all submit counts. */
16
16
  submitCount: number;
17
17
  /**
18
18
  * Consider form flagged when mounted.
@@ -1 +1 @@
1
- {"version":3,"file":"relay.d.ts","names":[],"sources":["../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/relay/get/FormRelayGroupType.ts","../../src/form/relay/get/grouper/useFirstFormStateGroup.ts","../../src/form/relay/get/useFormRelay.ts","../../src/form/relay/set/FormRelaySetter.tsx","../../src/form/relay/set/useFormRelaySet.ts"],"mappings":";;;;;;KAUK,OAAA,GAAQ,OAAA,CAAM,iBAAiB;AAAA,cAEvB,wBAAA,EAA0B,OAAA,CAAM,EAAE,CAAC,OAAA;;;KCRpC,cAAA,GAAiB,OAAA,CAC3B,IAAA,CACE,SAAA,CAAU,eAAA;EAQV,SAAA;EAEA,cAAA;EAEA,gBAAA;EAEA,mBAAA,WDVM;ECaN,WAAA;EDbS;AAAuB;AAEpC;;;ECkBI,SAAA;AAAA;;;;;;;;AD9BsB;;cEoBb,sBAAA,QAA6B,cAoBzC;;;cC7BY,cAAA,GAAkB,MAAA,aACM,SADQ;AAAA,KAKjC,sBAAA;EACN,MAAA;AAAA;EAEA,SAAA,GAAY,OAAA;IACV,MAAA,EAAQ,gBAAA;IACR,OAAA,EAAS,mBAAmB;EAAA;AAAA;AAAA,cAIvB,iBAAA,GACX,QAAA,GAAW,sBAAA,KACV,cAkBF;;;KCzCI,KAAA;EACH,OAAA,GAAU,gBAAgB;AAAA;AAAA,cAGf,eAAA,EAAiB,KAAA,CAAM,EAAE,CAAC,KAAA;;;cCG1B,eAAA,GAAmB,OAA0B,GAAhB,gBAAgB"}
1
+ {"version":3,"file":"relay.d.ts","names":[],"sources":["../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/relay/get/FormRelayGroupType.ts","../../src/form/relay/get/grouper/useFirstFormStateGroup.ts","../../src/form/relay/get/useFormRelay.ts","../../src/form/relay/set/FormRelaySetter.tsx","../../src/form/relay/set/useFormRelaySet.ts"],"mappings":";;;;;KAUK,UAAQ,QAAM;cAEN,0BAA0B,QAAM,GAAG;;;KCRpC,iBAAiB,QAC3B,KACE,UAAU;EAQV;EAEA;EAEA;EAEA;;EAGA;;;;;;EAOA;;;;;;;;;;;cCVS,8BAA6B;;;cCT7B,iBAAkB,mBAAlB;KAKD;EACN;;EAEA,YAAY;IACV,QAAQ;IACR,SAAS;;;cAIJ,oBACX,WAAW,2BACV;;;KCvBE;EACH,UAAU;;cAGC,iBAAiB,MAAM,GAAG;;;cCG1B,kBAAmB,UAAU"}
@@ -1,4 +1,4 @@
1
- import { c as FormRelayContextProvider, i as isEmptyObject, l as useFormRelayContext, n as useFormRelaySet, s as useRhfUtilsMaybeContext, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-Cuh0-4HA.js";
1
+ import { c as FormRelayContextProvider, i as isEmptyObject, l as useFormRelayContext, n as useFormRelaySet, s as useRhfUtilsMaybeContext, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-CLkDwgfH.js";
2
2
  import React from "react";
3
3
  import { useFormState } from "react-hook-form";
4
4
  //#region src/form/relay/context/utils.ts
@@ -1,8 +1,7 @@
1
- import { d as FormSubmitFieldErrors, t as RhfUtilsClientConfig } from "./RhfUtilsClientConfigType-CCgbRG3a.js";
1
+ import { d as FormSubmitFieldErrors, t as RhfUtilsClientConfig } from "./RhfUtilsClientConfigType-B8BwRERI.js";
2
2
  import { TRPCClientErrorLike } from "@trpc/client";
3
3
  import { z } from "zod";
4
4
  import { AnyTRPCRouter } from "@trpc/server";
5
-
6
5
  //#region src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.d.ts
7
6
  /**
8
7
  * HOF that returns submit error handler for {@link RhfUtilsClientConfig.onSubmitErrorUnknown}.
@@ -1 +1 @@
1
- {"version":3,"file":"trpc.d.ts","names":[],"sources":["../../src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.ts","../../src/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.ts"],"mappings":";;;;;;;;;;AAcA;;cAAa,kCAAA,GAET,oBAAA,EAAsB,WAAA,CACpB,oBAAA,+BAGH,KAAA,cAAiB,qBAAA;;;;;AANpB;cCDa,uDAAA,EAAuD,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,aAAA,GAAA,CAAA,CAAA,UAAA,EAAA,mBAAA,CAAA,aAAA,YAAA,mBAAA,CAAA,aAAA,aAAA,mBAAA,CAAA,aAAA,IAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,SAAA"}
1
+ {"version":3,"file":"trpc.d.ts","names":[],"sources":["../../src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.ts","../../src/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.ts"],"mappings":";;;;;;;;;;;cAca,qCAET,sBAAsB,YACpB,mDAGH,mBAAiB;;;;;;cCPP,yDAAuD,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,QAAA,oBAAA,gBAAA,EAAA,YAAA,oBAAA,yBAAA,oBAAA,0BAAA,oBAAA,iBAAA,EAAA,SAAA,EAAA;;;;;;;;;;;;;;;OA6CS,oBAAA,iBAAA,uBAAA,oBAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@paragrav/rhf-utils",
3
3
  "author": "paragrav.dev",
4
- "version": "0.73.0",
4
+ "version": "0.75.0",
5
5
  "description": "Integration utilities for react-hook-form.",
6
6
  "type": "module",
7
7
  "sideEffects": false,
@@ -44,19 +44,20 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@eslint/compat": "^2.1.0",
47
- "@eslint/config-helpers": "^0.6.0",
48
- "@eslint/eslintrc": "^3.3.5",
49
- "@eslint/js": "^9.39.4",
50
- "@playwright/experimental-ct-react": "^1.61.0",
51
- "@playwright/test": "^1.61.0",
47
+ "@eslint/config-helpers": "^0.7.0",
48
+ "@eslint/eslintrc": "^3.3.6",
49
+ "@eslint/js": "^9.39.5",
50
+ "@playwright/experimental-ct-react": "^1.61.1",
51
+ "@playwright/test": "^1.61.1",
52
52
  "@rollup/plugin-typescript": "^12.3.0",
53
- "@types/node": "^24.13.2",
54
- "@typescript-eslint/eslint-plugin": "^8.62.0",
55
- "@typescript-eslint/parser": "^8.62.0",
56
- "@vitejs/plugin-react": "^6.0.3",
53
+ "@types/node": "^24.13.3",
54
+ "@typescript-eslint/eslint-plugin": "^8.65.0",
55
+ "@typescript-eslint/parser": "^8.65.0",
56
+ "@typescript/native": "npm:typescript@^7.0.2",
57
+ "@vitejs/plugin-react": "^6.0.4",
57
58
  "clean-publish": "^7.1.0",
58
59
  "cross-env": "^10.1.0",
59
- "eslint": "^9.39.4",
60
+ "eslint": "^9.39.5",
60
61
  "eslint-config-prettier": "^10.1.8",
61
62
  "eslint-import-resolver-alias": "^1.1.2",
62
63
  "eslint-import-resolver-typescript": "^4.4.5",
@@ -66,30 +67,20 @@
66
67
  "eslint-plugin-react": "^7.37.5",
67
68
  "eslint-plugin-react-hooks": "^7.1.1",
68
69
  "eslint-plugin-react-refresh": "^0.5.3",
69
- "eslint-plugin-simple-import-sort": "^13.0.0",
70
+ "eslint-plugin-simple-import-sort": "^14.0.0",
70
71
  "globals": "^17.7.0",
71
- "happy-dom": "^20.10.6",
72
+ "happy-dom": "^20.11.0",
72
73
  "husky": "^9.1.7",
73
- "lint-staged": "^17.0.8",
74
- "prettier": "^3.8.4",
74
+ "lint-staged": "^17.1.1",
75
+ "prettier": "^3.9.6",
75
76
  "rollup": "^4.62.2",
76
77
  "safe-stable-stringify": "^2.5.0",
77
- "terser": "^5.48.0",
78
- "tsdown": "^0.22.3",
78
+ "terser": "^5.49.0",
79
+ "tsdown": "^0.22.13",
79
80
  "typescript": "^6.0.3",
80
- "typescript-eslint": "^8.62.0",
81
- "vite": "^8.1.0",
82
- "vitest": "^4.1.9"
83
- },
84
- "resolutions": {
85
- "eslint": "^9.39.4",
86
- "@types/react": "^19.0.4",
87
- "@types/react-dom": "^19.0.2",
88
- "react": "^19.0.0",
89
- "react-dom": "^19.0.0",
90
- "typescript": "^6.0.3",
91
- "unrs-resolver": "1.11.1",
92
- "vite": "^8.1.0"
81
+ "typescript-eslint": "^8.65.0",
82
+ "vite": "^8.1.5",
83
+ "vitest": "^4.1.10"
93
84
  },
94
85
  "repository": {
95
86
  "type": "git",
@@ -113,7 +104,7 @@
113
104
  "build": "tsc -b && tsdown",
114
105
  "build:dev": "vite build --config vite.config.dev.ts",
115
106
  "dev": "vite --config vite.config.dev.ts --force",
116
- "lint": "eslint . --cache --cache-strategy content",
107
+ "lint": "eslint .",
117
108
  "lint:fix": "pnpm run lint --fix",
118
109
  "preinstall": "npx only-allow pnpm",
119
110
  "preview": "vite preview --config vite.config.dev.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormRelayOptions-BtNZLz8X.d.ts","names":[],"sources":["../../src/form/relay/types.ts","../../src/form/relay/FormRelayOptions.ts"],"mappings":";;;;KAOY,SAAA,sBAA+B,eAAA,GAAkB,eAAA;EAEzD,KAAA,EAAO,sBAAA,CAAuB,YAAA;EAC9B,OAAA,EAAS,gBAAA;EACT,KAAA,EAAO,eAAA;AAAA;AAAA,KAGC,sBAAA,sBACW,eAAA,GAAkB,eAAA,IACrC,OAAA,CACF,SAAA,CAAU,YAAA;EACR,SAAA;AAAA;;;KCZQ,gBAAA;EDCA;;;;ECIV,MAAA,GAAS,SAAA,EAAW,SAAA,CAAU,eAAA,MAAqB,sBAAA;EDFnB;;;;;ECShC,MAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormRelaySetter-Cuh0-4HA.js","names":[],"sources":["../../src/utils/createContext.ts","../../src/form/relay/context/useFormRelayContext.ts","../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/utils/isEmptyObject.ts","../../src/errors/flat/flattenFieldErrors.ts","../../src/errors/flat/getFlatFieldErrors.ts","../../src/form/relay/set/useFormRelaySet.ts","../../src/form/relay/set/FormRelaySetter.tsx"],"sourcesContent":["import React from 'react';\n\n/**\n * Create a strictly-typed context that throws error if no provider is found.\n * @returns A tuple with a function to get the context and the context provider.\n */\nexport function createContext<T = unknown>() {\n const context = React.createContext<T | undefined>(undefined);\n\n const useMaybe = () => React.useContext(context);\n\n const useRequired = () => {\n const c = useMaybe();\n\n // type guard\n if (c === undefined) throw new Error();\n\n return c;\n };\n\n return {\n Provider: context.Provider,\n useMaybe,\n useRequired,\n } as const;\n}\n","import type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport { createContext } from '@/utils/createContext';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelay, FormRelayStateSelected } from '../types';\n\nexport type FormsRelayed = Record<\n string, // form id\n FormRelay\n>;\n\nexport type FormRelayContext = {\n // set\n\n add: (\n state: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => void;\n\n update: (id: string, state: FormRelayStateSelected) => void;\n\n remove: (id: string) => void;\n\n // state\n\n state: FormsRelayed;\n};\n\nexport const {\n Provider: _FormRelayContextProvider,\n useRequired: useFormRelayContext,\n} = createContext<FormRelayContext>();\n","import React from 'react';\n\nimport type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nimport type { FormsRelayed } from './useFormRelayContext';\nimport { _FormRelayContextProvider } from './useFormRelayContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const FormRelayContextProvider: React.FC<Props> = ({ children }) => {\n // state\n\n const [state, setState] = React.useState<FormsRelayed>({});\n\n // set\n\n const add = React.useCallback(\n (\n formState: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => {\n if (state[utils.formId]) throw new Error('Form id already exists.');\n\n setState((forms) => ({\n ...forms,\n [utils.formId]: { state: formState, utils, options },\n }));\n },\n\n [state],\n );\n\n const update = React.useCallback(\n (id: string, state: FormRelayStateSelected) => {\n setState((forms) => {\n const current = forms[id];\n\n if (!current) throw new Error(\"Form id doesn't exist\");\n\n return {\n ...forms,\n [id]: { ...current, state },\n };\n });\n },\n [],\n );\n\n const remove = React.useCallback((id: string) => {\n setState((forms) =>\n Object.fromEntries(\n Object.entries(forms)\n // keep only other ids\n .filter(([entryId]) => entryId !== id),\n ),\n );\n }, []);\n\n //\n\n return (\n <_FormRelayContextProvider\n value={{\n // set\n\n add,\n update,\n remove,\n\n // get\n\n state,\n }}\n >\n {children}\n </_FormRelayContextProvider>\n );\n};\n","import { createContext } from '@/utils/createContext';\n\nimport type { RhfUtilsContext } from './RhfUtilsContextType';\n\nconst {\n Provider: _RhfUtilsContextProvider,\n useRequired: useRhfUtilsContext,\n useMaybe: useRhfUtilsMaybeContext,\n} = createContext<RhfUtilsContext>();\n\nexport {\n _RhfUtilsContextProvider,\n useRhfUtilsContext,\n useRhfUtilsMaybeContext,\n};\n","export const isEmptyObject = (obj: Record<string, unknown>) =>\n Object.keys(obj).length === 0;\n","import { flatten } from 'flat';\nimport type { FieldErrors } from 'react-hook-form';\n\n/**\n * Flatten a {@link FieldErrors} object.\n *\n * @returns e.g.,\n * ```ts\n * {\n * \"address.street.type\": \"too_short\",\n * \"address.street.ref.value\": \"123\",\n * \"address.street.message\": \"Required.\"\n * }\n * ```\n */\nexport const flattenFieldErrors = (errors: FieldErrors) =>\n flatten<FieldErrors, Record<string, unknown>>(errors);\n","import type { FieldError, FieldErrors } from 'react-hook-form';\nimport { get } from 'react-hook-form';\n\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport { flattenFieldErrors } from './flattenFieldErrors';\nimport type { FlatFieldErrors } from './types';\n\n/**\n * Get {@link FlatFieldErrors} from {@link FieldErrors}.\n * This makes it easy to work with potentially deeply-nested {@link FieldErrors}.\n *\n * @param errors {@link FieldErrors} object.\n *\n * @returns `FlatFieldErrors` object.\n *\n * @example\n * ```\n * {\n * \"address.street\": {\n * type: \"too_short\",\n * ref: { value: \"123\" },\n * message: \"Required.\" }\n * }\n * }\n * ```\n */\nexport const getFlatFieldErrors = (errors: FieldErrors): FlatFieldErrors => {\n // flatten object for simpler processing\n const flattened = flattenFieldErrors(errors);\n\n // get flattened keys (e.g., `name.message`), which we must transform back to actual paths (e.g., `name`)\n const flattenedKeys = Object.keys(flattened);\n\n // rebuild FlatFieldErrors\n return Object.fromEntries(\n flattenedKeys.reduce<[PropertyKey, FieldError][]>(\n (entriesAccumulator, flattenedKey) => {\n /**\n * Maybe path.\n *\n * Derived from flattened key by removing leaf node suffix (if present).\n *\n * @example\n * path: `address.street.message` -> `address.street`\n * @example\n * not path: `address.street.ref` -> `address.street.ref` (no suffix match to replace)\n */\n const maybePath = flattenedKey.replace(\n regexMaybeFieldErrorLeafNodeSuffix,\n '',\n );\n\n // if nothing replaced, then it's not a leaf node; return early\n if (maybePath === flattenedKey) return entriesAccumulator;\n\n // find field error in original FieldErrors object\n // has dual-purpose of confirming that each path is valid\n const fieldError = get(errors, maybePath, undefined) as\n | FieldError\n | undefined;\n\n // if no field error found, then derived path was wrong; return early\n if (!fieldError) return entriesAccumulator;\n\n /**\n * Add entry to accumulator.\n *\n * (If it's a duplicate (e.g., `.type` leaf node matched before `.message`),\n * it doesn't matter because `Object.fromEntries` will just overwrite\n * first entry with second matching key/value.)\n */\n entriesAccumulator.push([maybePath, fieldError]);\n\n return entriesAccumulator;\n },\n\n [], // entries\n ),\n );\n};\n\n//\n\n/**\n * Regular expression to maybe match the end of a leaf node path.\n *\n * i.e., `name.type`, `address.street.message`\n *\n * iow: dot [?: non-capturing](\"type\" | \"message\")[\\b word boundary][$ end of string]\n */\nexport const regexMaybeFieldErrorLeafNodeSuffix = /\\.(?:type|message)\\b$/;\n\n//\n\nexport type FieldErrorsSansRef<\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n> = Record<\n keyof TFieldValues | 'root',\n Partial<Pick<FieldError, 'message' | 'type'>> & {\n hasRef: boolean;\n }\n>;\n\nexport const getFlatFieldErrorsSansRef = <TFieldValues extends SafeFieldValues>(\n errors: FieldErrors<TFieldValues>,\n) =>\n Object.fromEntries(\n Object.entries(getFlatFieldErrors(errors)).map(([name, error]) => [\n name,\n {\n type: error.type,\n message: error.message,\n hasRef: !!error.ref, // strip out actual ref, etc. (avoid circular JSON error)\n },\n ]),\n ) as FieldErrorsSansRef<TFieldValues>;\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport { getFlatFieldErrorsSansRef } from '@/errors/flat/getFlatFieldErrors';\n\nimport { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { useFormRelayContext } from '../context/useFormRelayContext';\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nexport const useFormRelaySet = (options?: FormRelayOptions) => {\n if (!options) return;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [memoOptions] = React.useState(options);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnMount(memoOptions);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnChange(memoOptions);\n};\n\n// HELPERS\n\n// mount\n\nconst useFormRelayOnMount = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n () => {\n relay.add(formStateForRelay, utils, options);\n\n // unmount\n return () => {\n relay.remove(utils.formId);\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n};\n\n// update\n\nconst useFormRelayOnChange = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n // when form state changes, publish to relay context\n () => {\n relay.update(utils.formId, formStateForRelay);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateForRelay],\n );\n};\n\n// relayed form state\n\n/** Transform, memo-ize {@link useFormState}'s return to {@link FormRelayed} */\nconst useFormStateForRelay = (\n options: FormRelayOptions,\n): FormRelayStateSelected => {\n const formState = useFormState();\n\n const formStateSelected = options.select(formState);\n\n const formStateSelectedJson = JSON.stringify({\n ...formStateSelected,\n errors:\n formStateSelected.errors &&\n getFlatFieldErrorsSansRef(formStateSelected.errors),\n });\n\n const memoFormStateSelected = React.useMemo(\n // when watch JSON changes, update memo\n () => formStateSelected,\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateSelectedJson],\n );\n\n return memoFormStateSelected;\n};\n","import type { FormRelayOptions } from '../FormRelayOptions';\n\nimport { useFormRelaySet } from './useFormRelaySet';\n\ntype Props = {\n options?: FormRelayOptions;\n};\n\nexport const FormRelaySetter: React.FC<Props> = ({ options }) => {\n useFormRelaySet(options);\n\n return null;\n};\n"],"mappings":";;;;;;;;;AAMA,SAAgB,gBAA6B;CAC3C,MAAM,UAAU,MAAM,cAA6B,KAAA,CAAS;CAE5D,MAAM,iBAAiB,MAAM,WAAW,OAAO;CAE/C,MAAM,oBAAoB;EACxB,MAAM,IAAI,SAAS;EAGnB,IAAI,MAAM,KAAA,GAAW,MAAM,IAAI,MAAM;EAErC,OAAO;CACT;CAEA,OAAO;EACL,UAAU,QAAQ;EAClB;EACA;CACF;AACF;;;ACKA,MAAa,EACX,UAAU,2BACV,aAAa,wBACX,cAAgC;;;ACrBpC,MAAa,4BAA6C,EAAE,eAAe;CAGzE,MAAM,CAAC,OAAO,YAAY,MAAM,SAAuB,CAAC,CAAC;CAiDzD,OACE,oBAAC,2BAAD;EACE,OAAO;GAGL,KAlDM,MAAM,aAEd,WACA,OACA,YACG;IACH,IAAI,MAAM,MAAM,SAAS,MAAM,IAAI,MAAM,yBAAyB;IAElE,UAAU,WAAW;KACnB,GAAG;MACF,MAAM,SAAS;MAAE,OAAO;MAAW;MAAO;KAAQ;IACrD,EAAE;GACJ,GAEA,CAAC,KAAK,CAoCA;GACF,QAlCS,MAAM,aAClB,IAAY,UAAkC;IAC7C,UAAU,UAAU;KAClB,MAAM,UAAU,MAAM;KAEtB,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,uBAAuB;KAErD,OAAO;MACL,GAAG;OACF,KAAK;OAAE,GAAG;OAAS;MAAM;KAC5B;IACF,CAAC;GACH,GACA,CAAC,CAqBQ;GACL,QAnBS,MAAM,aAAa,OAAe;IAC/C,UAAU,UACR,OAAO,YACL,OAAO,QAAQ,KAAK,CAAC,CAElB,QAAQ,CAAC,aAAa,YAAY,EAAE,CACzC,CACF;GACF,GAAG,CAAC,CAWO;GAIL;EACF;EAEC;CACwB,CAAA;AAE/B;;;AC7EA,MAAM,EACJ,UAAU,0BACV,aAAa,oBACb,UAAU,4BACR,cAA+B;;;ACRnC,MAAa,iBAAiB,QAC5B,OAAO,KAAK,GAAG,CAAC,CAAC,WAAW;;;;;;;;;;;;;;;ACc9B,MAAa,sBAAsB,WACjC,QAA8C,MAAM;;;;;;;;;;;;;;;;;;;;;;ACWtD,MAAa,sBAAsB,WAAyC;CAE1E,MAAM,YAAY,mBAAmB,MAAM;CAG3C,MAAM,gBAAgB,OAAO,KAAK,SAAS;CAG3C,OAAO,OAAO,YACZ,cAAc,QACX,oBAAoB,iBAAiB;;;;;;;;;;;EAWpC,MAAM,YAAY,aAAa,QAC7B,oCACA,EACF;EAGA,IAAI,cAAc,cAAc,OAAO;EAIvC,MAAM,aAAa,IAAI,QAAQ,WAAW,KAAA,CAAS;EAKnD,IAAI,CAAC,YAAY,OAAO;;;;;;;;EASxB,mBAAmB,KAAK,CAAC,WAAW,UAAU,CAAC;EAE/C,OAAO;CACT,GAEA,CAAC,CACH,CACF;AACF;;;;;;;;AAWA,MAAa,qCAAqC;AAalD,MAAa,6BACX,WAEA,OAAO,YACL,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,WAAW,CAChE,MACA;CACE,MAAM,MAAM;CACZ,SAAS,MAAM;CACf,QAAQ,CAAC,CAAC,MAAM;AAClB,CACF,CAAC,CACH;;;ACzGF,MAAa,mBAAmB,YAA+B;CAC7D,IAAI,CAAC,SAAS;CAGd,MAAM,CAAC,eAAe,MAAM,SAAS,OAAO;CAG5C,oBAAoB,WAAW;CAE/B,qBAAqB,WAAW;AAClC;AAMA,MAAM,uBAAuB,YAA8B;CACzD,MAAM,QAAQ,mBAAmB;CACjC,MAAM,QAAQ,oBAAoB;CAClC,MAAM,oBAAoB,qBAAqB,OAAO;CAEtD,MAAM,gBACE;EACJ,MAAM,IAAI,mBAAmB,OAAO,OAAO;EAG3C,aAAa;GACX,MAAM,OAAO,MAAM,MAAM;EAC3B;CACF,GAEA,CAAC,CACH;AACF;AAIA,MAAM,wBAAwB,YAA8B;CAC1D,MAAM,QAAQ,mBAAmB;CACjC,MAAM,QAAQ,oBAAoB;CAClC,MAAM,oBAAoB,qBAAqB,OAAO;CAEtD,MAAM,gBAEE;EACJ,MAAM,OAAO,MAAM,QAAQ,iBAAiB;CAC9C,GAEA,CAAC,iBAAiB,CACpB;AACF;;AAKA,MAAM,wBACJ,YAC2B;CAC3B,MAAM,YAAY,aAAa;CAE/B,MAAM,oBAAoB,QAAQ,OAAO,SAAS;CAElD,MAAM,wBAAwB,KAAK,UAAU;EAC3C,GAAG;EACH,QACE,kBAAkB,UAClB,0BAA0B,kBAAkB,MAAM;CACtD,CAAC;CAUD,OAR8B,MAAM,cAE5B,mBAGN,CAAC,qBAAqB,CAGG;AAC7B;;;ACjFA,MAAa,mBAAoC,EAAE,cAAc;CAC/D,gBAAgB,OAAO;CAEvB,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RhfUtilsClientConfigType-CCgbRG3a.d.ts","names":[],"sources":["../../src/errors/output/types.ts","../../src/errors/flat/types.ts","../../src/errors/flat/context/useFlatFieldErrorsContext.ts","../../src/errors/flat/context/FlatFieldErrorsOutputConfig.ts","../../src/form/rhf/UseFormPropsType.ts","../../src/form/defaults/UseRhfUtilsFormGlobalDefaults.ts","../../src/submit/error/FormSubmitFieldErrors.ts","../../src/submit/error/FormSubmitError.ts","../../src/submit/last/error/LastSubmitErrorType.ts","../../src/submit/last/status/LastSubmitStatusType.ts","../../src/submit/last/context/LastSubmitContextType.ts","../../src/submit/UseRhfUtilsFormOnSubmitContextType.ts","../../src/utils/types.ts","../../src/form/_Controller.tsx","../../src/client/config/RhfUtilsClientConfigUseFormHooksProps.ts","../../src/client/config/RhfUtilsClientConfigFormOutletProps.ts","../../src/client/config/RhfUtilsClientConfigType.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RhfUtilsContextType-Cqg-0i2U.d.ts","names":[],"sources":["../../src/Register.d.ts","../../src/submit/useResetFormOnSubmitted.ts","../../src/submit/useSubmitFormOnWatch.ts","../../src/form/options/RhfUtilsFormOptionsType.ts","../../src/form/rhf/SafeFieldValuesType.ts","../../src/form/context/utils/RhfUtilsContextProvider.tsx","../../src/form/context/utils/RhfUtilsContextType.ts"],"mappings":";;;;;;;;AAeA;;;;AAAyB;;;;ACRzB;;;UDQiB,QAAA;;;;;;KCRL,8BAAA;EDQK;;;;AAAQ;ECGnB,OAAA;IAAY,MAAA;EAAA;EAXN;;;EAgBN,KAAA;IAAU,MAAA;EAAA;AAAA;;;KChBJ,2BAAA;qEAEV,QAAQ;AAAA;;;AFMV;;;;AAAyB;AAAzB,KGHY,mBAAA;0CAIR,qBAAA;EFTQ;;;EEcR,aAAA,GAAgB,2BAAA,EFHd;EEMF,gBAAA,GAAmB,8BAAA;EFDjB;;;AAAgB;;EEQlB,OAAA,aAAoB,IAAA,CAAK,cAAA;AAAA,KAGxB,QAAA;EACC,mBAAA;AAAA,IAGE,oBAAA;;;;;;KCnCI,eAAA,GAAkB,MAAM;;;KCUxB,4BAAA;EACV,MAAA;EACA,OAAA,EAAS,KAAA,CAAM,SAAA,CAAU,eAAA,ULAF;EKGvB,OAAA,EAAS,mBAAA;AAAA;;;KChBC,eAAA,GAAkB,4BAA4B"}