@paragrav/rhf-utils 0.73.0 → 0.74.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 +7 -6
- package/dist/tsdown/{FormRelayOptions-BtNZLz8X.d.ts → FormRelayOptions-B5CknIkX.d.ts} +2 -3
- package/dist/tsdown/FormRelayOptions-B5CknIkX.d.ts.map +1 -0
- package/dist/tsdown/{FormRelaySetter-Cuh0-4HA.js → FormRelaySetter-CLkDwgfH.js} +7 -3
- package/dist/tsdown/FormRelaySetter-CLkDwgfH.js.map +1 -0
- package/dist/tsdown/{RhfUtilsClientConfigType-CCgbRG3a.d.ts → RhfUtilsClientConfigType-CRy_vYef.d.ts} +11 -10
- package/dist/tsdown/RhfUtilsClientConfigType-CRy_vYef.d.ts.map +1 -0
- package/dist/tsdown/{RhfUtilsContextType-Cqg-0i2U.d.ts → RhfUtilsContextType-DBOvBnPF.d.ts} +9 -6
- package/dist/tsdown/RhfUtilsContextType-DBOvBnPF.d.ts.map +1 -0
- package/dist/tsdown/index.d.ts +23 -36
- package/dist/tsdown/index.d.ts.map +1 -1
- package/dist/tsdown/index.js +11 -10
- package/dist/tsdown/index.js.map +1 -1
- package/dist/tsdown/relay.d.ts +4 -4
- package/dist/tsdown/relay.d.ts.map +1 -1
- package/dist/tsdown/relay.js +1 -1
- package/dist/tsdown/trpc.d.ts +1 -2
- package/dist/tsdown/trpc.d.ts.map +1 -1
- package/package.json +15 -25
- package/dist/tsdown/FormRelayOptions-BtNZLz8X.d.ts.map +0 -1
- package/dist/tsdown/FormRelaySetter-Cuh0-4HA.js.map +0 -1
- package/dist/tsdown/RhfUtilsClientConfigType-CCgbRG3a.d.ts.map +0 -1
- package/dist/tsdown/RhfUtilsContextType-Cqg-0i2U.d.ts.map +0 -1
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
|
|
137
|
-
!options.enableMyPrompter || // my prompter option
|
|
138
|
-
!isDirty || // or rhf form state
|
|
139
|
-
lastSubmit.
|
|
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-
|
|
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-
|
|
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
|
-
*
|
|
139
|
+
* @example
|
|
140
|
+
* - `name.type`
|
|
141
|
+
* - `address.street.message`
|
|
142
|
+
*
|
|
143
|
+
* @description
|
|
140
144
|
*
|
|
141
|
-
*
|
|
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-
|
|
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-
|
|
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.
|
|
@@ -96,7 +95,7 @@ type FormSubmitFieldErrors<TFieldValues extends SafeFieldValues = SafeFieldValue
|
|
|
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 =
|
|
98
|
+
declare class FormSubmitError<TFieldValues extends SafeFieldValues = SafeFieldValues, TApiValues extends undefined | SafeFieldValues = undefined, TAllValues extends SafeFieldValues = TApiValues extends undefined ? TFieldValues : TFieldValues | TApiValues> extends Error {
|
|
100
99
|
errors: FormSubmitFieldErrors<TAllValues>;
|
|
101
100
|
constructor(errors: FormSubmitFieldErrors<TAllValues>, message?: string);
|
|
102
101
|
}
|
|
@@ -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
|
-
|
|
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. */
|
|
178
|
-
|
|
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-
|
|
263
|
+
//# sourceMappingURL=RhfUtilsClientConfigType-CRy_vYef.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RhfUtilsClientConfigType-CRy_vYef.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,mBACrC,OAEF,UAAU;EAGR;EACA;;;;cChBS,gBACX,qBAAqB,kBAAkB,iBACvC,+BAA+B,6BAC/B,mBAAmB,kBAAkB,+BACjC,eACA,eAAe,oBACX;EAEC,QAAQ,sBAAsB;cAA9B,QAAQ,sBAAsB,aACrC;;;;KCbQ;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.) */
|
|
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. */
|
|
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;
|
|
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>;
|
|
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-
|
|
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"}
|
package/dist/tsdown/index.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { a as Register, i as RhfUtilsFormOptions, n as RhfUtilsContextProviderProps, r as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-
|
|
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-
|
|
3
|
-
import { t as FormRelayOptions } from "./FormRelayOptions-
|
|
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-CRy_vYef.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`) */
|
|
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
|
-
}
|
|
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 =
|
|
107
|
-
getApiData?: TGetApiValues;
|
|
108
|
-
|
|
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>;
|
|
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;
|
|
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 =
|
|
149
|
-
declare const RhfUtilsZodForm: <TSchema extends ZodTypeSafeFieldValues, TGetApiValues extends undefined | RhfUtilsFormPropsGetApiValues<TSchema[typeof zodTypeOutput], SafeFieldValues>, TOnSubmitReturnType, TApiValues extends undefined | SafeFieldValues =
|
|
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.) */
|
|
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 =
|
|
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 =
|
|
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"
|
|
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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"}
|
package/dist/tsdown/index.js
CHANGED
|
@@ -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-
|
|
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
|
-
|
|
89
|
+
statusRef: lastSubmit.status.ref,
|
|
90
90
|
error: lastSubmit.error.state
|
|
91
91
|
};
|
|
92
92
|
};
|
|
93
|
-
const useLastSubmitStatus = () => useLastSubmit().
|
|
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
|
|
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,
|
|
252
|
-
await Promise.resolve(onBeforeSubmit?.(datas,
|
|
253
|
-
const submitResponse = await Promise.resolve(onSubmit?.(datas,
|
|
254
|
-
lastSubmit.
|
|
255
|
-
await Promise.resolve(onSubmitSuccess?.(submitResponse, datas,
|
|
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
|
-
|
|
516
|
+
const values = keepValues ? getValues() : void 0;
|
|
517
|
+
reset(values, {
|
|
517
518
|
keepIsSubmitSuccessful: true,
|
|
518
519
|
keepIsSubmitted: true,
|
|
519
520
|
keepSubmitCount: true,
|
package/dist/tsdown/index.js.map
CHANGED
|
@@ -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 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 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 // 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> | 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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"}
|
package/dist/tsdown/relay.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { i as RhfUtilsFormOptions, r as SafeFieldValues } from "./RhfUtilsContextType-
|
|
2
|
-
import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-
|
|
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;
|
|
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":"
|
|
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"}
|
package/dist/tsdown/relay.js
CHANGED
|
@@ -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-
|
|
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
|
package/dist/tsdown/trpc.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { d as FormSubmitFieldErrors, t as RhfUtilsClientConfig } from "./RhfUtilsClientConfigType-
|
|
1
|
+
import { d as FormSubmitFieldErrors, t as RhfUtilsClientConfig } from "./RhfUtilsClientConfigType-CRy_vYef.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":"
|
|
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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paragrav/rhf-utils",
|
|
3
3
|
"author": "paragrav.dev",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.74.0",
|
|
5
5
|
"description": "Integration utilities for react-hook-form.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
@@ -45,18 +45,18 @@
|
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@eslint/compat": "^2.1.0",
|
|
47
47
|
"@eslint/config-helpers": "^0.6.0",
|
|
48
|
-
"@eslint/eslintrc": "^3.3.
|
|
49
|
-
"@eslint/js": "^9.39.
|
|
50
|
-
"@playwright/experimental-ct-react": "^1.61.
|
|
51
|
-
"@playwright/test": "^1.61.
|
|
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.
|
|
54
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
55
|
-
"@typescript-eslint/parser": "^8.
|
|
53
|
+
"@types/node": "^24.13.3",
|
|
54
|
+
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
|
55
|
+
"@typescript-eslint/parser": "^8.64.0",
|
|
56
56
|
"@vitejs/plugin-react": "^6.0.3",
|
|
57
57
|
"clean-publish": "^7.1.0",
|
|
58
58
|
"cross-env": "^10.1.0",
|
|
59
|
-
"eslint": "^9.39.
|
|
59
|
+
"eslint": "^9.39.5",
|
|
60
60
|
"eslint-config-prettier": "^10.1.8",
|
|
61
61
|
"eslint-import-resolver-alias": "^1.1.2",
|
|
62
62
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
@@ -71,25 +71,15 @@
|
|
|
71
71
|
"happy-dom": "^20.10.6",
|
|
72
72
|
"husky": "^9.1.7",
|
|
73
73
|
"lint-staged": "^17.0.8",
|
|
74
|
-
"prettier": "^3.
|
|
74
|
+
"prettier": "^3.9.5",
|
|
75
75
|
"rollup": "^4.62.2",
|
|
76
76
|
"safe-stable-stringify": "^2.5.0",
|
|
77
|
-
"terser": "^5.
|
|
78
|
-
"tsdown": "^0.22.
|
|
77
|
+
"terser": "^5.49.0",
|
|
78
|
+
"tsdown": "^0.22.7",
|
|
79
79
|
"typescript": "^6.0.3",
|
|
80
|
-
"typescript-eslint": "^8.
|
|
81
|
-
"vite": "^8.1.
|
|
82
|
-
"vitest": "^4.1.
|
|
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"
|
|
80
|
+
"typescript-eslint": "^8.64.0",
|
|
81
|
+
"vite": "^8.1.4",
|
|
82
|
+
"vitest": "^4.1.10"
|
|
93
83
|
},
|
|
94
84
|
"repository": {
|
|
95
85
|
"type": "git",
|
|
@@ -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":"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"}
|
|
@@ -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"}
|