@paragrav/rhf-utils 0.72.0 → 0.73.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 +79 -49
- package/dist/tsdown/{FormRelayOptions-k7OaoAqV.d.ts → FormRelayOptions-BtNZLz8X.d.ts} +2 -2
- package/dist/tsdown/{FormRelayOptions-k7OaoAqV.d.ts.map → FormRelayOptions-BtNZLz8X.d.ts.map} +1 -1
- package/dist/tsdown/{FormRelaySetter-BKO0Wodf.js → FormRelaySetter-Cuh0-4HA.js} +3 -2
- package/dist/tsdown/{FormRelaySetter-BKO0Wodf.js.map → FormRelaySetter-Cuh0-4HA.js.map} +1 -1
- package/dist/tsdown/{RhfUtilsClientConfigType-BaedoEQY.d.ts → RhfUtilsClientConfigType-CCgbRG3a.d.ts} +60 -11
- package/dist/tsdown/RhfUtilsClientConfigType-CCgbRG3a.d.ts.map +1 -0
- package/dist/tsdown/{RhfUtilsContextType-DwlvEWjd.d.ts → RhfUtilsContextType-Cqg-0i2U.d.ts} +4 -15
- package/dist/tsdown/RhfUtilsContextType-Cqg-0i2U.d.ts.map +1 -0
- package/dist/tsdown/index.d.ts +9 -12
- package/dist/tsdown/index.d.ts.map +1 -1
- package/dist/tsdown/index.js +57 -37
- package/dist/tsdown/index.js.map +1 -1
- package/dist/tsdown/relay.d.ts +2 -2
- package/dist/tsdown/relay.js +1 -1
- package/dist/tsdown/trpc.d.ts +1 -1
- package/package.json +18 -18
- package/dist/tsdown/RhfUtilsClientConfigType-BaedoEQY.d.ts.map +0 -1
- package/dist/tsdown/RhfUtilsContextType-DwlvEWjd.d.ts.map +0 -1
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-Cuh0-4HA.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";
|
|
@@ -81,11 +81,17 @@ var FormSubmitError = class extends Error {
|
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
83
|
//#endregion
|
|
84
|
-
//#region src/submit/last
|
|
85
|
-
const { Provider:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
//#region src/submit/last/context/useLastSubmitContext.ts
|
|
85
|
+
const { Provider: _LastSubmitContextProvider, useRequired: _useLastSubmitContext } = createContext();
|
|
86
|
+
const useLastSubmit = () => {
|
|
87
|
+
const lastSubmit = _useLastSubmitContext();
|
|
88
|
+
return {
|
|
89
|
+
status: lastSubmit.status.ref,
|
|
90
|
+
error: lastSubmit.error.state
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
const useLastSubmitStatus = () => useLastSubmit().status;
|
|
94
|
+
const useLastSubmitError = () => useLastSubmit().error;
|
|
89
95
|
//#endregion
|
|
90
96
|
//#region src/devtool/LazyDevTool.tsx
|
|
91
97
|
const LazyRhfDevTool = React.lazy(() => import("@hookform/devtools").then((res) => ({ default: res.DevTool })));
|
|
@@ -118,6 +124,7 @@ const useRhfUtilsClientConfig = () => {
|
|
|
118
124
|
const useRhfUtilsFormOnSubmitContext = () => {
|
|
119
125
|
return {
|
|
120
126
|
utils: useRhfUtilsContext(),
|
|
127
|
+
lastSubmit: useLastSubmit(),
|
|
121
128
|
rhf: useFormContext(),
|
|
122
129
|
FormSubmitError
|
|
123
130
|
};
|
|
@@ -126,11 +133,12 @@ const useRhfUtilsFormOnSubmitContext = () => {
|
|
|
126
133
|
//#region src/form/utils/useHandleCancelWithCheckIfCanBe.ts
|
|
127
134
|
const useHandleCancelWithCheckIfCanBe = (onCancel, useCanFormBeCancelled, formOnSubmitContext) => {
|
|
128
135
|
const canFormBeCancelled = useCanFormBeCancelled?.();
|
|
129
|
-
|
|
136
|
+
const handleCancelWithCheck = async () => {
|
|
130
137
|
if (!onCancel) return;
|
|
131
138
|
if (await Promise.resolve(canFormBeCancelled?.(formOnSubmitContext)) === false) return;
|
|
132
139
|
return Promise.resolve(onCancel());
|
|
133
140
|
};
|
|
141
|
+
return handleCancelWithCheck;
|
|
134
142
|
};
|
|
135
143
|
//#endregion
|
|
136
144
|
//#region src/form/utils/useHandleCancelWithCheckIfCanBeViaProviders.ts
|
|
@@ -186,15 +194,15 @@ const useRhfUtilsFormResolvedFormProps = (formProps, id, surfaced) => {
|
|
|
186
194
|
};
|
|
187
195
|
};
|
|
188
196
|
//#endregion
|
|
189
|
-
//#region src/submit/last
|
|
197
|
+
//#region src/submit/last/context/useLastSubmitErrorContextWith.ts
|
|
190
198
|
const useLastSubmitErrorContextWith = (handleSubmit) => {
|
|
191
|
-
const ctx =
|
|
199
|
+
const ctx = _useLastSubmitContext();
|
|
192
200
|
return async function(event) {
|
|
193
201
|
try {
|
|
194
|
-
ctx.reset();
|
|
202
|
+
ctx.error.reset();
|
|
195
203
|
return await handleSubmit(event);
|
|
196
204
|
} catch (error) {
|
|
197
|
-
ctx.set(error, event);
|
|
205
|
+
ctx.error.set(error, event);
|
|
198
206
|
throw error;
|
|
199
207
|
}
|
|
200
208
|
};
|
|
@@ -203,15 +211,16 @@ const useLastSubmitErrorContextWith = (handleSubmit) => {
|
|
|
203
211
|
//#region src/form/with-handlers-and-children/_useHandleSubmit.ts
|
|
204
212
|
const useRhfUtilsFormHandleSubmit_Internal = ({ onValid, onInvalid, onError, onFinally }) => {
|
|
205
213
|
const rhfContext = useFormContext();
|
|
206
|
-
const { options
|
|
214
|
+
const { options } = useRhfUtilsContext();
|
|
215
|
+
const lastSubmitStatusRef = useLastSubmitStatus();
|
|
207
216
|
const handleSubmitWithLastSubmitError = useLastSubmitErrorContextWith(rhfContext.handleSubmit(onValid, onInvalid));
|
|
208
217
|
return (event) => {
|
|
209
|
-
|
|
218
|
+
lastSubmitStatusRef.current = "submitting";
|
|
210
219
|
if (options.stopSubmitPropagation) event.stopPropagation();
|
|
211
220
|
Promise.resolve(handleSubmitWithLastSubmitError(event)).then(() => {
|
|
212
|
-
|
|
221
|
+
lastSubmitStatusRef.current = "success";
|
|
213
222
|
}).catch((error) => {
|
|
214
|
-
|
|
223
|
+
lastSubmitStatusRef.current = "error";
|
|
215
224
|
onError(error, event);
|
|
216
225
|
}).finally(() => {
|
|
217
226
|
onFinally?.();
|
|
@@ -224,6 +233,7 @@ const RhfUtilsFormWithSubmitHandler_Internal = ({ getApiData, onSubmitInvalid, o
|
|
|
224
233
|
const rhfContext = useFormContext();
|
|
225
234
|
const utils = useRhfUtilsContext();
|
|
226
235
|
const config = useRhfUtilsClientConfig();
|
|
236
|
+
const lastSubmit = useLastSubmit();
|
|
227
237
|
const resolvedFormProps = useRhfUtilsFormResolvedFormProps(form, utils.formId, { className });
|
|
228
238
|
const handleSubmitValid = async (data, event) => {
|
|
229
239
|
const datas = {
|
|
@@ -233,6 +243,7 @@ const RhfUtilsFormWithSubmitHandler_Internal = ({ getApiData, onSubmitInvalid, o
|
|
|
233
243
|
};
|
|
234
244
|
const context = {
|
|
235
245
|
utils,
|
|
246
|
+
lastSubmit,
|
|
236
247
|
rhf: rhfContext,
|
|
237
248
|
FormSubmitError
|
|
238
249
|
};
|
|
@@ -240,7 +251,7 @@ const RhfUtilsFormWithSubmitHandler_Internal = ({ getApiData, onSubmitInvalid, o
|
|
|
240
251
|
if (onBeforeSubmitInvariants) await handleOnSubmitInvariants(onBeforeSubmitInvariants, datas, context, submitEvent);
|
|
241
252
|
await Promise.resolve(onBeforeSubmit?.(datas, context, submitEvent));
|
|
242
253
|
const submitResponse = await Promise.resolve(onSubmit?.(datas, context, submitEvent));
|
|
243
|
-
|
|
254
|
+
lastSubmit.status.current = "success";
|
|
244
255
|
await Promise.resolve(onSubmitSuccess?.(submitResponse, datas, context, submitEvent));
|
|
245
256
|
};
|
|
246
257
|
function handleSubmitError(error, event) {
|
|
@@ -248,6 +259,7 @@ const RhfUtilsFormWithSubmitHandler_Internal = ({ getApiData, onSubmitInvalid, o
|
|
|
248
259
|
if (formSubmitErrors) setCtxErrorsByFormSubmitFieldErrors(rhfContext, formSubmitErrors);
|
|
249
260
|
onSubmitError?.(error, {
|
|
250
261
|
utils,
|
|
262
|
+
lastSubmit,
|
|
251
263
|
errors: formSubmitErrors,
|
|
252
264
|
rhf: rhfContext
|
|
253
265
|
}, event);
|
|
@@ -260,19 +272,25 @@ const RhfUtilsFormWithSubmitHandler_Internal = ({ getApiData, onSubmitInvalid, o
|
|
|
260
272
|
});
|
|
261
273
|
const Outlet = React.useCallback(() => children, []);
|
|
262
274
|
/** FormComponent props -- general, non-form-, non-schema-specific. */
|
|
263
|
-
const
|
|
275
|
+
const formHooksProps = {
|
|
264
276
|
...utils,
|
|
265
277
|
rhf: rhfContext,
|
|
278
|
+
lastSubmit
|
|
279
|
+
};
|
|
280
|
+
config.useFormHooks?.(formHooksProps);
|
|
281
|
+
/** FormComponent props -- general, non-form-, non-schema-specific. */
|
|
282
|
+
const formInjectorProps = {
|
|
283
|
+
...formHooksProps,
|
|
284
|
+
Outlet,
|
|
266
285
|
Controller: _Controller,
|
|
267
|
-
FormSubmitError
|
|
268
|
-
Outlet
|
|
286
|
+
FormSubmitError
|
|
269
287
|
};
|
|
270
288
|
return /* @__PURE__ */ jsx(config.FormComponent ?? "form", {
|
|
271
289
|
...resolvedFormProps,
|
|
272
290
|
id: utils.formId,
|
|
273
291
|
ref: utils.formRef,
|
|
274
292
|
onSubmit: handleSubmit,
|
|
275
|
-
children: config.
|
|
293
|
+
children: config.FormOutlet ? /* @__PURE__ */ jsx(config.FormOutlet, { ...formInjectorProps }) : children
|
|
276
294
|
});
|
|
277
295
|
};
|
|
278
296
|
const handleOnSubmitInvariants = async (onBeforeSubmitInvariants, data, context, event) => {
|
|
@@ -395,20 +413,23 @@ const FlatFieldErrorsContextProvider = ({ formRef, children }) => {
|
|
|
395
413
|
});
|
|
396
414
|
};
|
|
397
415
|
//#endregion
|
|
398
|
-
//#region src/submit/last
|
|
399
|
-
const
|
|
400
|
-
const [
|
|
401
|
-
return /* @__PURE__ */ jsx(
|
|
416
|
+
//#region src/submit/last/context/LastSubmitContextProvider.tsx
|
|
417
|
+
const LastSubmitContextProvider = ({ children }) => {
|
|
418
|
+
const [error, setError] = React.useState();
|
|
419
|
+
return /* @__PURE__ */ jsx(_LastSubmitContextProvider, {
|
|
402
420
|
value: {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
421
|
+
status: { ref: React.useRef(null) },
|
|
422
|
+
error: {
|
|
423
|
+
state: error,
|
|
424
|
+
reset: () => {
|
|
425
|
+
setError(void 0);
|
|
426
|
+
},
|
|
427
|
+
set: (error, event) => {
|
|
428
|
+
setError({
|
|
429
|
+
error,
|
|
430
|
+
event
|
|
431
|
+
});
|
|
432
|
+
}
|
|
412
433
|
}
|
|
413
434
|
},
|
|
414
435
|
children
|
|
@@ -627,8 +648,7 @@ const RhfUtilsContextProvider = ({ formId, formRef, options, children }) => {
|
|
|
627
648
|
value: {
|
|
628
649
|
formId,
|
|
629
650
|
formRef,
|
|
630
|
-
options
|
|
631
|
-
lastSubmitStateRef: React.useRef(null)
|
|
651
|
+
options
|
|
632
652
|
},
|
|
633
653
|
children
|
|
634
654
|
});
|
|
@@ -676,7 +696,7 @@ function RhfUtilsFormProviders({ formId, rhf, resolver, defaultValues, options,
|
|
|
676
696
|
formId: id,
|
|
677
697
|
formRef,
|
|
678
698
|
options: resolvedOptions,
|
|
679
|
-
children: [/* @__PURE__ */ jsx(FormRelaySetter, { options: relay }), /* @__PURE__ */ jsx(
|
|
699
|
+
children: [/* @__PURE__ */ jsx(FormRelaySetter, { options: relay }), /* @__PURE__ */ jsx(LastSubmitContextProvider, { children })]
|
|
680
700
|
})
|
|
681
701
|
})
|
|
682
702
|
});
|
|
@@ -742,6 +762,6 @@ const RhfUtilsZodFormWithProviders = ({ schema, ...props }) => /* @__PURE__ */ j
|
|
|
742
762
|
* LICENSE file in the root directory of this source tree.
|
|
743
763
|
*/
|
|
744
764
|
//#endregion
|
|
745
|
-
export { FormSubmitError, RhfUtilsClientConfigProvider, RhfUtilsNonFieldErrorMarker, RhfUtilsZodForm, RhfUtilsZodFormProviders, RhfUtilsZodFormWithProviders, useFlatFieldErrorsContext, useFlatFieldErrorsContextHasOnlyOrphans, useFormRequestSubmit, useLastSubmitError, useRhfUtilsContext };
|
|
765
|
+
export { FormSubmitError, RhfUtilsClientConfigProvider, RhfUtilsNonFieldErrorMarker, RhfUtilsZodForm, RhfUtilsZodFormProviders, RhfUtilsZodFormWithProviders, useFlatFieldErrorsContext, useFlatFieldErrorsContextHasOnlyOrphans, useFormRequestSubmit, useLastSubmit, useLastSubmitError, useLastSubmitStatus, useRhfUtilsContext };
|
|
746
766
|
|
|
747
767
|
//# sourceMappingURL=index.js.map
|
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-error/useLastSubmitErrorContext.ts","../../src/submit/last-error/useLastSubmitError.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-error/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-error/LastSubmitErrorContextProvider.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 { LastSubmitErrorContext } from './LastSubmitErrorContextType';\n\nconst {\n Provider: _LastSubmitErrorContextProvider,\n useRequired: _useLastSubmitErrorContext,\n} = createContext<LastSubmitErrorContext>();\n\nexport { _LastSubmitErrorContextProvider, _useLastSubmitErrorContext };\n","import { _useLastSubmitErrorContext } from './useLastSubmitErrorContext';\n\nexport const useLastSubmitError = () => _useLastSubmitErrorContext().current;\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 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 rhf = useFormContext<TFieldValues, unknown, TTransformedValues>();\n\n return {\n utils,\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 return 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","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 { _useLastSubmitErrorContext } from './useLastSubmitErrorContext';\n\nexport const useLastSubmitErrorContextWith = (\n handleSubmit: (\n event: React.SubmitEvent<HTMLFormElement>,\n ) => MaybePromise<unknown>,\n) => {\n const ctx = _useLastSubmitErrorContext();\n\n return async function (event: React.SubmitEvent<HTMLFormElement>) {\n try {\n ctx.reset(); // reset state before next submit event\n\n return await handleSubmit(event);\n } catch (error: unknown) {\n ctx.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 { useLastSubmitErrorContextWith } from '@/submit/last-error/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, lastSubmitStateRef } = useRhfUtilsContext();\n\n const handleSubmit = rhfContext.handleSubmit(onValid, onInvalid);\n\n const handleSubmitWithLastSubmitError =\n useLastSubmitErrorContextWith(handleSubmit);\n\n return (event: React.SubmitEvent<HTMLFormElement>) => {\n lastSubmitStateRef.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 lastSubmitStateRef.current = 'success';\n })\n .catch((error: unknown) => {\n lastSubmitStateRef.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 { RhfUtilsFormInjectorProps } from '@/client/config/RhfUtilsFormInjectorProps';\n\nimport { FormSubmitError } from '@/submit/error/FormSubmitError';\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\nimport { setCtxErrorsByFormSubmitFieldErrors } from '@/submit/error/setCtxErrorsByFormSubmitFieldErrors';\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\n const resolvedFormProps = useRhfUtilsFormResolvedFormProps(\n form,\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 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 -- ignore, for now\n utils.lastSubmitStateRef.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 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 formInjectorProps: RhfUtilsFormInjectorProps = {\n // eslint-disable-next-line react-hooks/refs -- bug?\n ...utils,\n rhf: rhfContext as UseFormReturn<SafeFieldValues, unknown, SafeFieldValues>,\n Controller: _Controller,\n FormSubmitError: FormSubmitError,\n Outlet,\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.FormInjector ? (\n <config.FormInjector\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 { LastSubmitErrorContext } from './LastSubmitErrorContextType';\nimport { _LastSubmitErrorContextProvider } from './useLastSubmitErrorContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const LastSubmitErrorContextProvider: React.FC<Props> = ({\n children,\n}) => {\n const [lastSubmit, setLastSubmit] =\n React.useState<LastSubmitErrorContext['current']>(undefined);\n\n return (\n <_LastSubmitErrorContextProvider\n value={{\n current: lastSubmit,\n\n reset: () => {\n setLastSubmit(undefined);\n },\n\n set: (error, event) => {\n setLastSubmit({ error, event });\n },\n }}\n >\n {children}\n </_LastSubmitErrorContextProvider>\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 type { LastSubmitState } from './LastSubmitStateType';\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 const lastSubmitStateRef = React.useRef<LastSubmitState>(null);\n\n return (\n <_RhfUtilsContextProvider\n value={{\n formId,\n formRef,\n options,\n lastSubmitStateRef,\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 { LastSubmitErrorContextProvider } from '@/submit/last-error/LastSubmitErrorContextProvider';\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 <LastSubmitErrorContextProvider>\n {children}\n </LastSubmitErrorContextProvider>\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 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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"}
|
package/dist/tsdown/relay.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-
|
|
1
|
+
import { i as RhfUtilsFormOptions, r as SafeFieldValues } from "./RhfUtilsContextType-Cqg-0i2U.js";
|
|
2
|
+
import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-BtNZLz8X.js";
|
|
3
3
|
import React$1 from "react";
|
|
4
4
|
import { FormState } from "react-hook-form";
|
|
5
5
|
|