@paragrav/rhf-utils 0.68.0 → 0.70.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.
Files changed (31) hide show
  1. package/dist/tsdown/{FormRelayOptions-mBqiP41Z.d.ts → FormRelayOptions-ZhzSBb1T.d.mts} +2 -2
  2. package/dist/tsdown/FormRelayOptions-ZhzSBb1T.d.mts.map +1 -0
  3. package/dist/tsdown/{FormRelaySetter-BKO0Wodf.js → FormRelaySetter-BKO0Wodf.mjs} +1 -1
  4. package/dist/tsdown/FormRelaySetter-BKO0Wodf.mjs.map +1 -0
  5. package/dist/tsdown/{RhfUtilsClientConfigType-CeOJzNAc.d.ts → RhfUtilsClientConfigType-BL9W1POo.d.mts} +2 -2
  6. package/dist/tsdown/RhfUtilsClientConfigType-BL9W1POo.d.mts.map +1 -0
  7. package/dist/tsdown/{RhfUtilsContextType-BFmDtONY.d.ts → RhfUtilsContextType-BFmDtONY.d.mts} +1 -1
  8. package/dist/tsdown/RhfUtilsContextType-BFmDtONY.d.mts.map +1 -0
  9. package/dist/tsdown/{index.d.ts → index.d.mts} +4 -4
  10. package/dist/tsdown/index.d.mts.map +1 -0
  11. package/dist/tsdown/{index.js → index.mjs} +2 -2
  12. package/dist/tsdown/index.mjs.map +1 -0
  13. package/dist/tsdown/{relay.d.ts → relay.d.mts} +3 -3
  14. package/dist/tsdown/relay.d.mts.map +1 -0
  15. package/dist/tsdown/{relay.js → relay.mjs} +2 -2
  16. package/dist/tsdown/relay.mjs.map +1 -0
  17. package/dist/tsdown/{trpc.d.ts → trpc.d.mts} +2 -2
  18. package/dist/tsdown/trpc.d.mts.map +1 -0
  19. package/dist/tsdown/{trpc.js → trpc.mjs} +1 -1
  20. package/dist/tsdown/trpc.mjs.map +1 -0
  21. package/package.json +4 -2
  22. package/dist/tsdown/FormRelayOptions-mBqiP41Z.d.ts.map +0 -1
  23. package/dist/tsdown/FormRelaySetter-BKO0Wodf.js.map +0 -1
  24. package/dist/tsdown/RhfUtilsClientConfigType-CeOJzNAc.d.ts.map +0 -1
  25. package/dist/tsdown/RhfUtilsContextType-BFmDtONY.d.ts.map +0 -1
  26. package/dist/tsdown/index.d.ts.map +0 -1
  27. package/dist/tsdown/index.js.map +0 -1
  28. package/dist/tsdown/relay.d.ts.map +0 -1
  29. package/dist/tsdown/relay.js.map +0 -1
  30. package/dist/tsdown/trpc.d.ts.map +0 -1
  31. package/dist/tsdown/trpc.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { i as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-BFmDtONY.js";
1
+ import { i as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-BFmDtONY.mjs";
2
2
  import { FormState } from "react-hook-form";
3
3
 
4
4
  //#region src/form/relay/types.d.ts
@@ -27,4 +27,4 @@ type FormRelayOptions = {
27
27
  };
28
28
  //#endregion
29
29
  export { FormRelay as n, FormRelayStateSelected as r, FormRelayOptions as t };
30
- //# sourceMappingURL=FormRelayOptions-mBqiP41Z.d.ts.map
30
+ //# sourceMappingURL=FormRelayOptions-ZhzSBb1T.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormRelayOptions-ZhzSBb1T.d.mts","names":[],"sources":["../../src/form/relay/types.ts","../../src/form/relay/FormRelayOptions.ts"],"mappings":";;;;KAOY,SAAA,sBAA+B,eAAA,GAAkB,eAAA;EAEzD,KAAA,EAAO,sBAAA,CAAuB,YAAA;EAC9B,OAAA,EAAS,gBAAA;EACT,KAAA,EAAO,eAAA;AAAA;AAAA,KAGC,sBAAA,sBACW,eAAA,GAAkB,eAAA,IACrC,OAAA,CACF,SAAA,CAAU,YAAA;EACR,SAAA;AAAA;;;KCZQ,gBAAA;EDCA;;;;ECIV,MAAA,GAAS,SAAA,EAAW,SAAA,CAAU,eAAA,MAAqB,sBAAA;EDFnB;;;;;ECShC,MAAA;AAAA"}
@@ -191,4 +191,4 @@ const FormRelaySetter = ({ options }) => {
191
191
  //#endregion
192
192
  export { _RhfUtilsContextProvider as a, FormRelayContextProvider as c, isEmptyObject as i, useFormRelayContext as l, useFormRelaySet as n, useRhfUtilsContext as o, getFlatFieldErrors as r, useRhfUtilsMaybeContext as s, FormRelaySetter as t, createContext as u };
193
193
 
194
- //# sourceMappingURL=FormRelaySetter-BKO0Wodf.js.map
194
+ //# sourceMappingURL=FormRelaySetter-BKO0Wodf.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormRelaySetter-BKO0Wodf.mjs","names":[],"sources":["../../src/utils/createContext.ts","../../src/form/relay/context/useFormRelayContext.ts","../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/utils/isEmptyObject.ts","../../src/errors/flat/flattenFieldErrors.ts","../../src/errors/flat/getFlatFieldErrors.ts","../../src/form/relay/set/useFormRelaySet.ts","../../src/form/relay/set/FormRelaySetter.tsx"],"sourcesContent":["import React from 'react';\n\n/**\n * Create a strictly-typed context that throws error if no provider is found.\n * @returns A tuple with a function to get the context and the context provider.\n */\nexport function createContext<T = unknown>() {\n const context = React.createContext<T | undefined>(undefined);\n\n const useMaybe = () => React.useContext(context);\n\n const useRequired = () => {\n const c = useMaybe();\n\n // type guard\n if (c === undefined) throw new Error();\n\n return c;\n };\n\n return {\n Provider: context.Provider,\n useMaybe,\n useRequired,\n } as const;\n}\n","import type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport { createContext } from '@/utils/createContext';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelay, FormRelayStateSelected } from '../types';\n\nexport type FormsRelayed = Record<\n string, // form id\n FormRelay\n>;\n\nexport type FormRelayContext = {\n // set\n\n add: (\n state: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => void;\n\n update: (id: string, state: FormRelayStateSelected) => void;\n\n remove: (id: string) => void;\n\n // state\n\n state: FormsRelayed;\n};\n\nexport const {\n Provider: _FormRelayContextProvider,\n useRequired: useFormRelayContext,\n} = createContext<FormRelayContext>();\n","import React from 'react';\n\nimport type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nimport type { FormsRelayed } from './useFormRelayContext';\nimport { _FormRelayContextProvider } from './useFormRelayContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const FormRelayContextProvider: React.FC<Props> = ({ children }) => {\n // state\n\n const [state, setState] = React.useState<FormsRelayed>({});\n\n // set\n\n const add = React.useCallback(\n (\n formState: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => {\n if (state[utils.formId]) throw new Error('Form id already exists.');\n\n setState((forms) => ({\n ...forms,\n [utils.formId]: { state: formState, utils, options },\n }));\n },\n\n [state],\n );\n\n const update = React.useCallback(\n (id: string, state: FormRelayStateSelected) => {\n setState((forms) => {\n const current = forms[id];\n\n if (!current) throw new Error(\"Form id doesn't exist\");\n\n return {\n ...forms,\n [id]: { ...current, state },\n };\n });\n },\n [],\n );\n\n const remove = React.useCallback((id: string) => {\n setState((forms) =>\n Object.fromEntries(\n Object.entries(forms)\n // keep only other ids\n .filter(([entryId]) => entryId !== id),\n ),\n );\n }, []);\n\n //\n\n return (\n <_FormRelayContextProvider\n value={{\n // set\n\n add,\n update,\n remove,\n\n // get\n\n state,\n }}\n >\n {children}\n </_FormRelayContextProvider>\n );\n};\n","import { createContext } from '@/utils/createContext';\n\nimport type { RhfUtilsContext } from './RhfUtilsContextType';\n\nconst {\n Provider: _RhfUtilsContextProvider,\n useRequired: useRhfUtilsContext,\n useMaybe: useRhfUtilsMaybeContext,\n} = createContext<RhfUtilsContext>();\n\nexport {\n _RhfUtilsContextProvider,\n useRhfUtilsContext,\n useRhfUtilsMaybeContext,\n};\n","export const isEmptyObject = (obj: Record<string, unknown>) =>\n Object.keys(obj).length === 0;\n","import { flatten } from 'flat';\nimport type { FieldErrors } from 'react-hook-form';\n\n/**\n * Flatten a {@link FieldErrors} object.\n *\n * @returns e.g.,\n * ```ts\n * {\n * \"address.street.type\": \"too_short\",\n * \"address.street.ref.value\": \"123\",\n * \"address.street.message\": \"Required.\"\n * }\n * ```\n */\nexport const flattenFieldErrors = (errors: FieldErrors) =>\n flatten<FieldErrors, Record<string, unknown>>(errors);\n","import type { FieldError, FieldErrors } from 'react-hook-form';\nimport { get } from 'react-hook-form';\n\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport { flattenFieldErrors } from './flattenFieldErrors';\nimport type { FlatFieldErrors } from './types';\n\n/**\n * Get {@link FlatFieldErrors} from {@link FieldErrors}.\n * This makes it easy to work with potentially deeply-nested {@link FieldErrors}.\n *\n * @param errors {@link FieldErrors} object.\n *\n * @returns `FlatFieldErrors` object.\n *\n * @example\n * ```\n * {\n * \"address.street\": {\n * type: \"too_short\",\n * ref: { value: \"123\" },\n * message: \"Required.\" }\n * }\n * }\n * ```\n */\nexport const getFlatFieldErrors = (errors: FieldErrors): FlatFieldErrors => {\n // flatten object for simpler processing\n const flattened = flattenFieldErrors(errors);\n\n // get flattened keys (e.g., `name.message`), which we must transform back to actual paths (e.g., `name`)\n const flattenedKeys = Object.keys(flattened);\n\n // rebuild FlatFieldErrors\n return Object.fromEntries(\n flattenedKeys.reduce<[PropertyKey, FieldError][]>(\n (entriesAccumulator, flattenedKey) => {\n /**\n * Maybe path.\n *\n * Derived from flattened key by removing leaf node suffix (if present).\n *\n * @example\n * path: `address.street.message` -> `address.street`\n * @example\n * not path: `address.street.ref` -> `address.street.ref` (no suffix match to replace)\n */\n const maybePath = flattenedKey.replace(\n regexMaybeFieldErrorLeafNodeSuffix,\n '',\n );\n\n // if nothing replaced, then it's not a leaf node; return early\n if (maybePath === flattenedKey) return entriesAccumulator;\n\n // find field error in original FieldErrors object\n // has dual-purpose of confirming that each path is valid\n const fieldError = get(errors, maybePath, undefined) as\n | FieldError\n | undefined;\n\n // if no field error found, then derived path was wrong; return early\n if (!fieldError) return entriesAccumulator;\n\n /**\n * Add entry to accumulator.\n *\n * (If it's a duplicate (e.g., `.type` leaf node matched before `.message`),\n * it doesn't matter because `Object.fromEntries` will just overwrite\n * first entry with second matching key/value.)\n */\n entriesAccumulator.push([maybePath, fieldError]);\n\n return entriesAccumulator;\n },\n\n [], // entries\n ),\n );\n};\n\n//\n\n/**\n * Regular expression to maybe match the end of a leaf node path.\n *\n * i.e., `name.type`, `address.street.message`\n *\n * iow: dot [?: non-capturing](\"type\" | \"message\")[\\b word boundary][$ end of string]\n */\nexport const regexMaybeFieldErrorLeafNodeSuffix = /\\.(?:type|message)\\b$/;\n\n//\n\nexport type FieldErrorsSansRef<\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n> = Record<\n keyof TFieldValues | 'root',\n Partial<Pick<FieldError, 'message' | 'type'>> & {\n hasRef: boolean;\n }\n>;\n\nexport const getFlatFieldErrorsSansRef = <TFieldValues extends SafeFieldValues>(\n errors: FieldErrors<TFieldValues>,\n) =>\n Object.fromEntries(\n Object.entries(getFlatFieldErrors(errors)).map(([name, error]) => [\n name,\n {\n type: error.type,\n message: error.message,\n hasRef: !!error.ref, // strip out actual ref, etc. (avoid circular JSON error)\n },\n ]),\n ) as FieldErrorsSansRef<TFieldValues>;\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport { getFlatFieldErrorsSansRef } from '@/errors/flat/getFlatFieldErrors';\n\nimport { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { useFormRelayContext } from '../context/useFormRelayContext';\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nexport const useFormRelaySet = (options?: FormRelayOptions) => {\n if (!options) return;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [memoOptions] = React.useState(options);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnMount(memoOptions);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnChange(memoOptions);\n};\n\n// HELPERS\n\n// mount\n\nconst useFormRelayOnMount = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n () => {\n relay.add(formStateForRelay, utils, options);\n\n // unmount\n return () => {\n relay.remove(utils.formId);\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n};\n\n// update\n\nconst useFormRelayOnChange = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n // when form state changes, publish to relay context\n () => {\n relay.update(utils.formId, formStateForRelay);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateForRelay],\n );\n};\n\n// relayed form state\n\n/** Transform, memo-ize {@link useFormState}'s return to {@link FormRelayed} */\nconst useFormStateForRelay = (\n options: FormRelayOptions,\n): FormRelayStateSelected => {\n const formState = useFormState();\n\n const formStateSelected = options.select(formState);\n\n const formStateSelectedJson = JSON.stringify({\n ...formStateSelected,\n errors:\n formStateSelected.errors &&\n getFlatFieldErrorsSansRef(formStateSelected.errors),\n });\n\n const memoFormStateSelected = React.useMemo(\n // when watch JSON changes, update memo\n () => formStateSelected,\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateSelectedJson],\n );\n\n return memoFormStateSelected;\n};\n","import type { FormRelayOptions } from '../FormRelayOptions';\n\nimport { useFormRelaySet } from './useFormRelaySet';\n\ntype Props = {\n options?: FormRelayOptions;\n};\n\nexport const FormRelaySetter: React.FC<Props> = ({ options }) => {\n useFormRelaySet(options);\n\n return null;\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { a as RhfUtilsFormOptions, i as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-BFmDtONY.js";
1
+ import { a as RhfUtilsFormOptions, i as SafeFieldValues, t as RhfUtilsContext } from "./RhfUtilsContextType-BFmDtONY.mjs";
2
2
  import React$1 from "react";
3
3
  import { ControllerProps, FieldError, FieldPath, UseFormProps, UseFormReturn } from "react-hook-form";
4
4
 
@@ -210,4 +210,4 @@ type RhfUtilsClientConfig = {
210
210
  };
211
211
  //#endregion
212
212
  export { UseRhfUtilsFormOnSubmitContext as a, FormSubmitFieldErrors as c, MaybePromise as i, RhfUseFormInstanceProps as l, RhfUtilsFormInjectorProps as n, UseRhfUtilsFormOnSubmitErrorContext as o, _Controller as r, FormSubmitError as s, RhfUtilsClientConfig as t, useFlatFieldErrorsContext as u };
213
- //# sourceMappingURL=RhfUtilsClientConfigType-CeOJzNAc.d.ts.map
213
+ //# sourceMappingURL=RhfUtilsClientConfigType-BL9W1POo.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhfUtilsClientConfigType-BL9W1POo.d.mts","names":[],"sources":["../../src/errors/output/types.ts","../../src/errors/flat/types.ts","../../src/errors/flat/context/useFlatFieldErrorsContext.ts","../../src/errors/flat/context/FlatFieldErrorsOutputConfig.ts","../../src/form/rhf/UseFormPropsType.ts","../../src/form/defaults/UseRhfUtilsFormGlobalDefaults.ts","../../src/submit/error/FormSubmitFieldErrors.ts","../../src/submit/error/FormSubmitError.ts","../../src/submit/UseRhfUtilsFormOnSubmitContextType.ts","../../src/utils/types.ts","../../src/form/_Controller.tsx","../../src/client/config/RhfUtilsFormInjectorProps.ts","../../src/client/config/RhfUtilsClientConfigType.ts"],"mappings":"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"}
@@ -79,4 +79,4 @@ type RhfUtilsContext = RhfUtilsContextProviderProps & {
79
79
  };
80
80
  //#endregion
81
81
  export { RhfUtilsFormOptions as a, SafeFieldValues as i, RhfUtilsContextProviderProps as n, LastSubmitState as r, RhfUtilsContext as t };
82
- //# sourceMappingURL=RhfUtilsContextType-BFmDtONY.d.ts.map
82
+ //# sourceMappingURL=RhfUtilsContextType-BFmDtONY.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhfUtilsContextType-BFmDtONY.d.mts","names":[],"sources":["../../src/submit/useResetFormOnSubmitted.ts","../../src/submit/useSubmitFormOnWatch.ts","../../src/form/options/RhfUtilsFormOptionsType.ts","../../src/form/rhf/SafeFieldValuesType.ts","../../src/form/context/utils/LastSubmitStateType.ts","../../src/form/context/utils/RhfUtilsContextProvider.tsx","../../src/form/context/utils/RhfUtilsContextType.ts"],"mappings":";;;;;;;;KAOY,8BAAA;;AAAZ;;;;EAWM,OAAA;IAAY,MAAA;EAAA;EAKF;;AAAM;EAAhB,KAAA;IAAU,MAAA;EAAA;AAAA;;;KChBJ,2BAAA;qEAEV,QAAQ;AAAA;;;;ADFV;;;;KEKY,mBAAA;EFMM,wCEFd,qBAAA;EFOY;;AAAM;EEFlB,aAAA,GAAgB,2BAAA;EAGhB,gBAAA,GAAmB,8BAAA;EDjBX;;;;AAEF;ECsBN,OAAA,aAAoB,IAAA,CAAK,cAAA;AAAA,KAGxB,QAAA;EACC,mBAAA;AAAA,IAGE,oBAAA;;;;;;KCnCI,eAAA,GAAkB,MAAM;;;KCHxB,eAAA;;;KCcA,4BAAA;EACV,MAAA;EACA,OAAA,EAAS,KAAA,CAAM,SAAA,CAAU,eAAA,ULTf;EKYV,OAAA,EAAS,mBAAA;AAAA;;;KCdC,eAAA,GAAkB,4BAAA;;ANE9B;;;;;EMOI,kBAAA,EAAoB,SAAA,CAAU,eAAA;AAAA"}
@@ -1,6 +1,6 @@
1
- import { a as UseRhfUtilsFormOnSubmitContext, c as FormSubmitFieldErrors, i as MaybePromise, l as RhfUseFormInstanceProps, n as RhfUtilsFormInjectorProps, o as UseRhfUtilsFormOnSubmitErrorContext, r as _Controller, s as FormSubmitError, t as RhfUtilsClientConfig, u as useFlatFieldErrorsContext } from "./RhfUtilsClientConfigType-CeOJzNAc.js";
2
- import { a as RhfUtilsFormOptions, i as SafeFieldValues, n as RhfUtilsContextProviderProps, r as LastSubmitState, t as RhfUtilsContext } from "./RhfUtilsContextType-BFmDtONY.js";
3
- import { t as FormRelayOptions } from "./FormRelayOptions-mBqiP41Z.js";
1
+ import { a as UseRhfUtilsFormOnSubmitContext, c as FormSubmitFieldErrors, i as MaybePromise, l as RhfUseFormInstanceProps, n as RhfUtilsFormInjectorProps, o as UseRhfUtilsFormOnSubmitErrorContext, r as _Controller, s as FormSubmitError, t as RhfUtilsClientConfig, u as useFlatFieldErrorsContext } from "./RhfUtilsClientConfigType-BL9W1POo.mjs";
2
+ import { a as RhfUtilsFormOptions, i as SafeFieldValues, n as RhfUtilsContextProviderProps, r as LastSubmitState, t as RhfUtilsContext } from "./RhfUtilsContextType-BFmDtONY.mjs";
3
+ import { t as FormRelayOptions } from "./FormRelayOptions-ZhzSBb1T.mjs";
4
4
  import React$1 from "react";
5
5
  import { Resolver, SubmitErrorHandler, UseFormProps, UseFormReturn } from "react-hook-form";
6
6
  import { z } from "zod";
@@ -222,4 +222,4 @@ type RhfUtilsUseZodFormChildrenFC<TSchema extends ZodTypeSafeFieldValues, TChild
222
222
 
223
223
  //#endregion
224
224
  export { FormSubmitError, type FormSubmitFieldErrors, type Register, type RhfUtilsClientConfig, RhfUtilsClientConfigProvider, type RhfUtilsFormInjectorProps, type RhfUtilsFormOptions, RhfUtilsNonFieldErrorMarker, type RhfUtilsUseZodFormChildrenFC, type RhfUtilsUseZodFormChildrenProps, RhfUtilsZodForm, RhfUtilsZodFormProviders, RhfUtilsZodFormWithProviders, type SafeFieldValues, type RHF_UseFormReturnWithoutProxies as UseFormReturnWithoutProxies, type UseRhfUtilsFormChildrenProps, type UseRhfUtilsFormOnSubmitContext, type UseRhfUtilsFormOnSubmitErrorContext, type ZodTypeSafeFieldValues, useFlatFieldErrorsContext, useFlatFieldErrorsContextHasOnlyOrphans, useFormRequestSubmit, useLastSubmitError, useRhfUtilsContext };
225
- //# sourceMappingURL=index.d.ts.map
225
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/Register.d.ts","../../src/client/config/context/RhfUtilsClientConfigProvider.tsx","../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/form/RHF_UseFormReturnWithoutProxiesType.ts","../../src/form/UseRhfUtilsFormChildrenPropsType.ts","../../src/form/utils/useFormRequestSubmit.ts","../../src/submit/last-error/useLastSubmitError.ts","../../src/form/defaults/form/UseRhfUtilsFormInstanceFormProps.ts","../../src/form/with-handlers-and-children/RhfUtilsFormPropsOnBeforeSubmitInvariants.ts","../../src/form/with-handlers-and-children/RhfUtilsFormProps.ts","../../src/resolvers/zod/consts.ts","../../src/resolvers/zod/ZodTypeSafeFieldValuesType.ts","../../src/resolvers/zod/form/RhfUtilsZodForm.tsx","../../src/form/providers/RhfUtilsFormProvidersPropsType.ts","../../src/resolvers/zod/providers/RhfUtilsZodFormProviders.tsx","../../src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.tsx","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenPropsType.ts","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenFCType.ts","../../src/_exports/index.ts"],"mappings":"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"}
@@ -1,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-BKO0Wodf.js";
1
+ import { a as _RhfUtilsContextProvider, c as FormRelayContextProvider, i as isEmptyObject, o as useRhfUtilsContext, r as getFlatFieldErrors, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-BKO0Wodf.mjs";
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";
@@ -744,4 +744,4 @@ const RhfUtilsZodFormWithProviders = ({ schema, ...props }) => /* @__PURE__ */ j
744
744
  //#endregion
745
745
  export { FormSubmitError, RhfUtilsClientConfigProvider, RhfUtilsNonFieldErrorMarker, RhfUtilsZodForm, RhfUtilsZodFormProviders, RhfUtilsZodFormWithProviders, useFlatFieldErrorsContext, useFlatFieldErrorsContextHasOnlyOrphans, useFormRequestSubmit, useLastSubmitError, useRhfUtilsContext };
746
746
 
747
- //# sourceMappingURL=index.js.map
747
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","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,5 +1,5 @@
1
- import { a as RhfUtilsFormOptions, i as SafeFieldValues } from "./RhfUtilsContextType-BFmDtONY.js";
2
- import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-mBqiP41Z.js";
1
+ import { a as RhfUtilsFormOptions, i as SafeFieldValues } from "./RhfUtilsContextType-BFmDtONY.mjs";
2
+ import { n as FormRelay, r as FormRelayStateSelected, t as FormRelayOptions } from "./FormRelayOptions-ZhzSBb1T.mjs";
3
3
  import React$1 from "react";
4
4
  import { FormState } from "react-hook-form";
5
5
 
@@ -54,4 +54,4 @@ declare const FormRelaySetter: React.FC<Props>;
54
54
  declare const useFormRelaySet: (options?: FormRelayOptions) => void;
55
55
  //#endregion
56
56
  export { type FormRelay, FormRelayContextProvider, type FormRelayGroup, FormRelaySetter, type FormRelayStateSelected, useFirstFormStateGroup, useFormRelayGroup, useFormRelayId, useFormRelaySet };
57
- //# sourceMappingURL=relay.d.ts.map
57
+ //# sourceMappingURL=relay.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.d.mts","names":[],"sources":["../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/relay/get/FormRelayGroupType.ts","../../src/form/relay/get/grouper/useFirstFormStateGroup.ts","../../src/form/relay/get/useFormRelay.ts","../../src/form/relay/set/FormRelaySetter.tsx","../../src/form/relay/set/useFormRelaySet.ts"],"mappings":";;;;;;KAUK,OAAA,GAAQ,OAAA,CAAM,iBAAiB;AAAA,cAEvB,wBAAA,EAA0B,OAAA,CAAM,EAAE,CAAC,OAAA;;;KCRpC,cAAA,GAAiB,OAAA,CAC3B,IAAA,CACE,SAAA,CAAU,eAAA;EAQV,SAAA;EAEA,cAAA;EAEA,gBAAA;EAEA,mBAAA,WDVM;ECaN,WAAA;EDbS;AAAuB;AAEpC;;;ECkBI,SAAA;AAAA;;;;;;;;AD9BsB;;cEoBb,sBAAA,QAA6B,cAoBzC;;;cC7BY,cAAA,GAAkB,MAAA,aACM,SADQ;AAAA,KAKjC,sBAAA;EACN,MAAA;AAAA;EAEA,SAAA,GAAY,OAAA;IACV,MAAA,EAAQ,gBAAA;IACR,OAAA,EAAS,mBAAmB;EAAA;AAAA;AAAA,cAIvB,iBAAA,GACX,QAAA,GAAW,sBAAA,KACV,cAkBF;;;KCzCI,KAAA;EACH,OAAA,GAAU,gBAAgB;AAAA;AAAA,cAGf,eAAA,EAAiB,KAAA,CAAM,EAAE,CAAC,KAAA;;;cCG1B,eAAA,GAAmB,OAA0B,GAAhB,gBAAgB"}
@@ -1,4 +1,4 @@
1
- import { c as FormRelayContextProvider, i as isEmptyObject, l as useFormRelayContext, n as useFormRelaySet, s as useRhfUtilsMaybeContext, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-BKO0Wodf.js";
1
+ import { c as FormRelayContextProvider, i as isEmptyObject, l as useFormRelayContext, n as useFormRelaySet, s as useRhfUtilsMaybeContext, t as FormRelaySetter, u as createContext } from "./FormRelaySetter-BKO0Wodf.mjs";
2
2
  import React from "react";
3
3
  import { useFormState } from "react-hook-form";
4
4
  //#region src/form/relay/context/utils.ts
@@ -70,4 +70,4 @@ const useFirstFormStateGroup = () => {
70
70
  //#endregion
71
71
  export { FormRelayContextProvider, FormRelaySetter, useFirstFormStateGroup, useFormRelayGroup, useFormRelayId, useFormRelaySet };
72
72
 
73
- //# sourceMappingURL=relay.js.map
73
+ //# sourceMappingURL=relay.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.mjs","names":[],"sources":["../../src/form/relay/context/utils.ts","../../src/form/relay/get/useFormRelay.ts","../../src/form/relay/get/grouper/context/index.ts","../../src/form/relay/get/grouper/useFirstFormStateGroup.ts"],"sourcesContent":["import { isEmptyObject } from '@/utils/isEmptyObject';\n\nimport type { FormRelayGroup } from '../get/FormRelayGroupType';\nimport type { FormRelayStateSelected } from '../types';\n\n// see: https://github.com/react-hook-form/react-hook-form/blob/7ce7cc6da38e9787bcf05e94fbd14dd712d27a85/src/logic/getProxyFormState.ts\n\n/** Condense list of form states to singular booleans. */\nexport const getFormRelayedAggregatedByRelayedItem = (\n formStates: FormRelayStateSelected[],\n): FormRelayGroup =>\n formStates.reduce<FormRelayGroup>(\n (acc, curr) =>\n ({\n // booleans\n isDirty: acc.isDirty || curr.isDirty,\n isSubmitting: acc.isSubmitting || curr.isSubmitting,\n isLoading: acc.isLoading || curr.isLoading,\n isSubmitted: acc.isSubmitted || curr.isSubmitted,\n isSubmitSuccessful: acc.isSubmitSuccessful || curr.isSubmitSuccessful,\n isValidating: acc.isValidating || curr.isValidating,\n isValid: acc.isValid || curr.isValid,\n isReady: acc.isReady || curr.isReady,\n disabled: acc.disabled || curr.disabled,\n // objects\n hasErrors:\n acc.hasErrors || (curr.errors && !isEmptyObject(curr.errors)),\n hasDirtyFields:\n acc.hasDirtyFields ||\n (curr.dirtyFields && !isEmptyObject(curr.dirtyFields)),\n hasTouchedFields:\n acc.hasTouchedFields ||\n (curr.touchedFields && !isEmptyObject(curr.touchedFields)),\n hasValidatingFields:\n acc.hasValidatingFields ||\n (curr.validatingFields && !isEmptyObject(curr.validatingFields)),\n // counts\n submitCount: (acc.submitCount ?? 0) + (curr.submitCount ?? 0),\n // supplemental\n isMounted: acc.isMounted || curr.isMounted,\n }) satisfies FormRelayGroup,\n\n // initial values\n {\n isDirty: undefined,\n isSubmitting: undefined,\n isLoading: undefined,\n isSubmitted: undefined,\n isSubmitSuccessful: undefined,\n isValidating: undefined,\n isReady: undefined,\n isValid: undefined,\n disabled: undefined,\n // objects\n hasErrors: undefined,\n hasDirtyFields: undefined,\n hasTouchedFields: undefined,\n hasValidatingFields: undefined,\n // counts\n submitCount: undefined,\n // supplemental\n isMounted: undefined,\n },\n );\n","import React from 'react';\n\nimport type { RhfUtilsFormOptions } from '@/form/options/RhfUtilsFormOptionsType';\n\nimport type { FormsRelayed } from '../context/useFormRelayContext';\nimport { useFormRelayContext } from '../context/useFormRelayContext';\nimport { getFormRelayedAggregatedByRelayedItem } from '../context/utils';\nimport type { FormRelayOptions } from '../FormRelayOptions';\n\nimport type { FormRelayGroup } from './FormRelayGroupType';\n\nexport const useFormRelayId = (formId: string) =>\n useFormRelayContext().state[formId];\n\n//\n\nexport type FormRelayGroupCriteria =\n | { groups: string[] }\n | {\n predicate: (context: {\n groups: FormRelayOptions['groups'];\n options: RhfUtilsFormOptions;\n }) => boolean;\n };\n\nexport const useFormRelayGroup = (\n criteria?: FormRelayGroupCriteria,\n): FormRelayGroup => {\n const relayState = useFormRelayContext().state;\n\n const relayStateFiltered = getFormRelaysByCriteria(relayState, criteria);\n\n const state = getFormRelayedAggregatedByRelayedItem(\n relayStateFiltered.map(({ state }) => state),\n );\n\n const jsonState = JSON.stringify(state);\n\n const memoState = React.useMemo(\n () => state,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [jsonState],\n );\n\n return memoState;\n};\n\n// WRITE TESTS\n\nconst getFormRelaysByCriteria = (\n relayState: FormsRelayed,\n criteria?: FormRelayGroupCriteria,\n) =>\n Object.values(relayState).filter(\n ({ options, utils }) =>\n // no criteria specified\n !criteria ||\n // groups specified\n ('groups' in criteria &&\n criteria.groups.filter((group) => options.groups?.includes(group))\n .length) ||\n // predicate specified\n ('predicate' in criteria &&\n criteria.predicate({\n groups: options.groups,\n options: utils.options,\n })),\n );\n","import { createContext } from '@/utils/createContext';\n\nimport type { FormRelayGroup } from '../../FormRelayGroupType';\n\nexport type FormRelayGrouperContext = {\n state: FormRelayGroup;\n};\n\n// context\n\nexport const {\n Provider: _FormRelayGrouperContextProvider,\n useRequired: _useFormRelayGrouperContext,\n useMaybe: _useFormRelayGrouperMaybeContext,\n} = createContext<FormRelayGrouperContext>();\n","import { useFormState } from 'react-hook-form';\n\nimport { useRhfUtilsMaybeContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { getFormRelayedAggregatedByRelayedItem } from '../../context/utils';\n\nimport type { FormRelayGroup } from '../FormRelayGroupType';\nimport { useFormRelayGroup } from '../useFormRelay';\n\nimport { _useFormRelayGrouperMaybeContext } from './context';\n\n/* eslint-disable react-hooks/rules-of-hooks -- ⚠️ condition will (i.e., should) not change between renders! */\n\n/**\n * Use this when you don't (want to) know whether component is wrapped\n * with RHF context, `FormRelayGrouperContext`, or `FormRelayContext`.\n * Will return `FormRelayGroup`, regardless.\n *\n * Allows you to build naive components that are not tied to one specific context.\n */\nexport const useFirstFormStateGroup = (): FormRelayGroup => {\n const maybeUtils = useRhfUtilsMaybeContext();\n\n // if utils present, then relay unnecessary (bc we are in the context of a single form)\n\n if (maybeUtils) {\n const state = useFormState();\n\n return getFormRelayedAggregatedByRelayedItem([state]);\n }\n\n // if relay grouper present...\n\n const maybeRelayCtx = _useFormRelayGrouperMaybeContext();\n\n if (maybeRelayCtx) return maybeRelayCtx.state;\n\n // otherwise: use top-level relay\n\n return useFormRelayGroup();\n};\n"],"mappings":";;;;;AAQA,MAAa,yCACX,eAEA,WAAW,QACR,KAAK,UACH;CAEC,SAAS,IAAI,WAAW,KAAK;CAC7B,cAAc,IAAI,gBAAgB,KAAK;CACvC,WAAW,IAAI,aAAa,KAAK;CACjC,aAAa,IAAI,eAAe,KAAK;CACrC,oBAAoB,IAAI,sBAAsB,KAAK;CACnD,cAAc,IAAI,gBAAgB,KAAK;CACvC,SAAS,IAAI,WAAW,KAAK;CAC7B,SAAS,IAAI,WAAW,KAAK;CAC7B,UAAU,IAAI,YAAY,KAAK;CAE/B,WACE,IAAI,aAAc,KAAK,UAAU,CAAC,cAAc,KAAK,MAAM;CAC7D,gBACE,IAAI,kBACH,KAAK,eAAe,CAAC,cAAc,KAAK,WAAW;CACtD,kBACE,IAAI,oBACH,KAAK,iBAAiB,CAAC,cAAc,KAAK,aAAa;CAC1D,qBACE,IAAI,uBACH,KAAK,oBAAoB,CAAC,cAAc,KAAK,gBAAgB;CAEhE,cAAc,IAAI,eAAe,MAAM,KAAK,eAAe;CAE3D,WAAW,IAAI,aAAa,KAAK;AACnC,IAGF;CACE,SAAS,KAAA;CACT,cAAc,KAAA;CACd,WAAW,KAAA;CACX,aAAa,KAAA;CACb,oBAAoB,KAAA;CACpB,cAAc,KAAA;CACd,SAAS,KAAA;CACT,SAAS,KAAA;CACT,UAAU,KAAA;CAEV,WAAW,KAAA;CACX,gBAAgB,KAAA;CAChB,kBAAkB,KAAA;CAClB,qBAAqB,KAAA;CAErB,aAAa,KAAA;CAEb,WAAW,KAAA;AACb,CACF;;;ACpDF,MAAa,kBAAkB,WAC7B,oBAAoB,CAAC,CAAC,MAAM;AAa9B,MAAa,qBACX,aACmB;CACnB,MAAM,aAAa,oBAAoB,CAAC,CAAC;CAIzC,MAAM,QAAQ,sCAFa,wBAAwB,YAAY,QAG5C,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,CAC7C;CAEA,MAAM,YAAY,KAAK,UAAU,KAAK;CAQtC,OANkB,MAAM,cAChB,OAEN,CAAC,SAAS,CAGG;AACjB;AAIA,MAAM,2BACJ,YACA,aAEA,OAAO,OAAO,UAAU,CAAC,CAAC,QACvB,EAAE,SAAS,YAEV,CAAC,YAEA,YAAY,YACX,SAAS,OAAO,QAAQ,UAAU,QAAQ,QAAQ,SAAS,KAAK,CAAC,CAAC,CAC/D,UAEJ,eAAe,YACd,SAAS,UAAU;CACjB,QAAQ,QAAQ;CAChB,SAAS,MAAM;AACjB,CAAC,CACP;;;ACzDF,MAAa,EACX,UAAU,kCACV,aAAa,6BACb,UAAU,qCACR,cAAuC;;;;;;;;;;ACM3C,MAAa,+BAA+C;CAK1D,IAJmB,wBAIN,GAGX,OAAO,sCAAsC,CAF/B,aAEoC,CAAC,CAAC;CAKtD,MAAM,gBAAgB,iCAAiC;CAEvD,IAAI,eAAe,OAAO,cAAc;CAIxC,OAAO,kBAAkB;AAC3B"}
@@ -1,4 +1,4 @@
1
- import { c as FormSubmitFieldErrors, t as RhfUtilsClientConfig } from "./RhfUtilsClientConfigType-CeOJzNAc.js";
1
+ import { c as FormSubmitFieldErrors, t as RhfUtilsClientConfig } from "./RhfUtilsClientConfigType-BL9W1POo.mjs";
2
2
  import { TRPCClientErrorLike } from "@trpc/client";
3
3
  import { z } from "zod";
4
4
  import { AnyTRPCRouter } from "@trpc/server";
@@ -34,4 +34,4 @@ declare const trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer: z.ZodEffe
34
34
  }])[], TRPCClientErrorLike<AnyTRPCRouter>>, FormSubmitFieldErrors, TRPCClientErrorLike<AnyTRPCRouter>>;
35
35
  //#endregion
36
36
  export { makeOnSubmitTrpcClientErrorHandler, trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer };
37
- //# sourceMappingURL=trpc.d.ts.map
37
+ //# sourceMappingURL=trpc.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.d.mts","names":[],"sources":["../../src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.ts","../../src/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.ts"],"mappings":";;;;;;;;;;AAcA;;cAAa,kCAAA,GAET,oBAAA,EAAsB,WAAA,CACpB,oBAAA,+BAGH,KAAA,cAAiB,qBAAA;;;;;AANpB;cCDa,uDAAA,EAAuD,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,aAAA,GAAA,CAAA,CAAA,UAAA,EAAA,mBAAA,CAAA,aAAA,YAAA,mBAAA,CAAA,aAAA,aAAA,mBAAA,CAAA,aAAA,IAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,SAAA"}
@@ -46,4 +46,4 @@ const makeOnSubmitTrpcClientErrorHandler = (onNotTrpcClientError) => (error) =>
46
46
  //#endregion
47
47
  export { makeOnSubmitTrpcClientErrorHandler, trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer };
48
48
 
49
- //# sourceMappingURL=trpc.js.map
49
+ //# sourceMappingURL=trpc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpc.mjs","names":[],"sources":["../../src/errors/trpc/trpcClientErrorMessageSchema.ts","../../src/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.ts","../../src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Schema for {@link TRPCClientError} message.\n *\n * (Sent from backend as JSON string.)\n */\nexport const trpcClientErrorMessageSchema = z\n .object({\n code: z.string(),\n message: z.string(),\n path: z.array(z.string()),\n })\n .passthrough();\n","import type { TRPCClientErrorLike } from '@trpc/client';\nimport { TRPCClientError } from '@trpc/client';\nimport type { AnyTRPCRouter } from '@trpc/server';\nimport type { ErrorOption } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\n\nimport { trpcClientErrorMessageSchema } from './trpcClientErrorMessageSchema';\n\n/**\n * Schema that transforms {@link TRPCClientError} to RHF {@link FormSubmitFieldErrors}.\n */\nexport const trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer = z\n .custom<TRPCClientErrorLike<AnyTRPCRouter>>(\n (error: unknown) => error instanceof TRPCClientError, // check instance type\n )\n\n // return: message (stringified json)\n .transform((error) => error.message)\n\n // return: parsed json as unknown\n .transform((json) => {\n try {\n return JSON.parse(json) as unknown;\n } catch (error) {\n // if not json, message is just string\n // build single item array for root\n // (must be in array for next step in transform)\n return [\n {\n validation: 'root',\n code: 'server',\n message: json,\n path: ['root'],\n },\n ] satisfies z.infer<typeof trpcClientErrorMessageSchema>[];\n }\n })\n\n // return: (trpc client error)[]\n .pipe(z.array(trpcClientErrorMessageSchema))\n\n // return: [path, ErrorOption][] (array of entries)\n .transform((errors) =>\n errors.map(\n (error) =>\n [\n error.path.join('.'), // flatten path (e.g., \"street.name\")\n {\n type: error.code,\n message: error.message,\n } satisfies ErrorOption,\n ] as const,\n ),\n )\n\n // return: FormSubmitFieldErrors\n .transform((errors) => Object.fromEntries(errors) as FormSubmitFieldErrors);\n","import { TRPCClientError } from '@trpc/client';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\n\nimport { trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer } from './trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer';\n\n/**\n * HOF that returns submit error handler for {@link RhfUtilsClientConfig.onSubmitErrorUnknown}.\n *\n * @param onError Fallback for handling non-TRPC errors.\n * @returns FormSubmitError\n */\nexport const makeOnSubmitTrpcClientErrorHandler =\n (\n onNotTrpcClientError: NonNullable<\n RhfUtilsClientConfig['onSubmitErrorUnknown']\n >,\n ) =>\n (error: unknown): FormSubmitFieldErrors | undefined => {\n // transform\n if (error instanceof TRPCClientError)\n return trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.parse(\n error,\n );\n\n // if unknown error, use callback\n return onNotTrpcClientError(error);\n };\n"],"mappings":";;;;;;;;AAOA,MAAa,+BAA+B,EACzC,OAAO;CACN,MAAM,EAAE,OAAO;CACf,SAAS,EAAE,OAAO;CAClB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAC1B,CAAC,CAAC,CACD,YAAY;;;;;;ACAf,MAAa,0DAA0D,EACpE,QACE,UAAmB,iBAAiB,eACvC,CAAC,CAGA,WAAW,UAAU,MAAM,OAAO,CAAC,CAGnC,WAAW,SAAS;CACnB,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,SAAS,OAAO;EAId,OAAO,CACL;GACE,YAAY;GACZ,MAAM;GACN,SAAS;GACT,MAAM,CAAC,MAAM;EACf,CACF;CACF;AACF,CAAC,CAAC,CAGD,KAAK,EAAE,MAAM,4BAA4B,CAAC,CAAC,CAG3C,WAAW,WACV,OAAO,KACJ,UACC,CACE,MAAM,KAAK,KAAK,GAAG,GACnB;CACE,MAAM,MAAM;CACZ,SAAS,MAAM;AACjB,CACF,CACJ,CACF,CAAC,CAGA,WAAW,WAAW,OAAO,YAAY,MAAM,CAA0B;;;;;;;;;AC5C5E,MAAa,sCAET,0BAID,UAAsD;CAErD,IAAI,iBAAiB,iBACnB,OAAO,wDAAwD,MAC7D,KACF;CAGF,OAAO,qBAAqB,KAAK;AACnC"}
package/package.json CHANGED
@@ -1,20 +1,22 @@
1
1
  {
2
2
  "name": "@paragrav/rhf-utils",
3
3
  "author": "paragrav.dev",
4
- "version": "0.68.0",
4
+ "version": "0.70.0",
5
5
  "description": "Integration utilities for react-hook-form.",
6
6
  "type": "module",
7
7
  "sideEffects": false,
8
8
  "files": [
9
9
  "dist/tsdown/*"
10
10
  ],
11
+ "main": "./dist/tsdown/index.mjs",
12
+ "module": "./dist/tsdown/index.mjs",
13
+ "types": "./dist/tsdown/index.d.mts",
11
14
  "exports": {
12
15
  ".": "./dist/tsdown/index.js",
13
16
  "./relay": "./dist/tsdown/relay.js",
14
17
  "./trpc": "./dist/tsdown/trpc.js",
15
18
  "./package.json": "./package.json"
16
19
  },
17
- "types": "./dist/tsdown/index.d.ts",
18
20
  "publishConfig": {
19
21
  "withoutPublish": true,
20
22
  "tempDir": "publish"
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormRelayOptions-mBqiP41Z.d.ts","names":[],"sources":["../../src/form/relay/types.ts","../../src/form/relay/FormRelayOptions.ts"],"mappings":";;;;KAOY,SAAA,sBAA+B,eAAA,GAAkB,eAAA;EAEzD,KAAA,EAAO,sBAAA,CAAuB,YAAA;EAC9B,OAAA,EAAS,gBAAA;EACT,KAAA,EAAO,eAAA;AAAA;AAAA,KAGC,sBAAA,sBACW,eAAA,GAAkB,eAAA,IACrC,OAAA,CACF,SAAA,CAAU,YAAA;EACR,SAAA;AAAA;;;KCZQ,gBAAA;EDCA;;;;ECIV,MAAA,GAAS,SAAA,EAAW,SAAA,CAAU,eAAA,MAAqB,sBAAA;EDFnB;;;;;ECShC,MAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"FormRelaySetter-BKO0Wodf.js","names":[],"sources":["../../src/utils/createContext.ts","../../src/form/relay/context/useFormRelayContext.ts","../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/utils/isEmptyObject.ts","../../src/errors/flat/flattenFieldErrors.ts","../../src/errors/flat/getFlatFieldErrors.ts","../../src/form/relay/set/useFormRelaySet.ts","../../src/form/relay/set/FormRelaySetter.tsx"],"sourcesContent":["import React from 'react';\n\n/**\n * Create a strictly-typed context that throws error if no provider is found.\n * @returns A tuple with a function to get the context and the context provider.\n */\nexport function createContext<T = unknown>() {\n const context = React.createContext<T | undefined>(undefined);\n\n const useMaybe = () => React.useContext(context);\n\n const useRequired = () => {\n const c = useMaybe();\n\n // type guard\n if (c === undefined) throw new Error();\n\n return c;\n };\n\n return {\n Provider: context.Provider,\n useMaybe,\n useRequired,\n } as const;\n}\n","import type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport { createContext } from '@/utils/createContext';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelay, FormRelayStateSelected } from '../types';\n\nexport type FormsRelayed = Record<\n string, // form id\n FormRelay\n>;\n\nexport type FormRelayContext = {\n // set\n\n add: (\n state: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => void;\n\n update: (id: string, state: FormRelayStateSelected) => void;\n\n remove: (id: string) => void;\n\n // state\n\n state: FormsRelayed;\n};\n\nexport const {\n Provider: _FormRelayContextProvider,\n useRequired: useFormRelayContext,\n} = createContext<FormRelayContext>();\n","import React from 'react';\n\nimport type { RhfUtilsContext } from '@/form/context/utils/RhfUtilsContextType';\n\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nimport type { FormsRelayed } from './useFormRelayContext';\nimport { _FormRelayContextProvider } from './useFormRelayContext';\n\ntype Props = React.PropsWithChildren;\n\nexport const FormRelayContextProvider: React.FC<Props> = ({ children }) => {\n // state\n\n const [state, setState] = React.useState<FormsRelayed>({});\n\n // set\n\n const add = React.useCallback(\n (\n formState: FormRelayStateSelected,\n utils: RhfUtilsContext,\n options: FormRelayOptions,\n ) => {\n if (state[utils.formId]) throw new Error('Form id already exists.');\n\n setState((forms) => ({\n ...forms,\n [utils.formId]: { state: formState, utils, options },\n }));\n },\n\n [state],\n );\n\n const update = React.useCallback(\n (id: string, state: FormRelayStateSelected) => {\n setState((forms) => {\n const current = forms[id];\n\n if (!current) throw new Error(\"Form id doesn't exist\");\n\n return {\n ...forms,\n [id]: { ...current, state },\n };\n });\n },\n [],\n );\n\n const remove = React.useCallback((id: string) => {\n setState((forms) =>\n Object.fromEntries(\n Object.entries(forms)\n // keep only other ids\n .filter(([entryId]) => entryId !== id),\n ),\n );\n }, []);\n\n //\n\n return (\n <_FormRelayContextProvider\n value={{\n // set\n\n add,\n update,\n remove,\n\n // get\n\n state,\n }}\n >\n {children}\n </_FormRelayContextProvider>\n );\n};\n","import { createContext } from '@/utils/createContext';\n\nimport type { RhfUtilsContext } from './RhfUtilsContextType';\n\nconst {\n Provider: _RhfUtilsContextProvider,\n useRequired: useRhfUtilsContext,\n useMaybe: useRhfUtilsMaybeContext,\n} = createContext<RhfUtilsContext>();\n\nexport {\n _RhfUtilsContextProvider,\n useRhfUtilsContext,\n useRhfUtilsMaybeContext,\n};\n","export const isEmptyObject = (obj: Record<string, unknown>) =>\n Object.keys(obj).length === 0;\n","import { flatten } from 'flat';\nimport type { FieldErrors } from 'react-hook-form';\n\n/**\n * Flatten a {@link FieldErrors} object.\n *\n * @returns e.g.,\n * ```ts\n * {\n * \"address.street.type\": \"too_short\",\n * \"address.street.ref.value\": \"123\",\n * \"address.street.message\": \"Required.\"\n * }\n * ```\n */\nexport const flattenFieldErrors = (errors: FieldErrors) =>\n flatten<FieldErrors, Record<string, unknown>>(errors);\n","import type { FieldError, FieldErrors } from 'react-hook-form';\nimport { get } from 'react-hook-form';\n\nimport type { SafeFieldValues } from '@/form/rhf/SafeFieldValuesType';\n\nimport { flattenFieldErrors } from './flattenFieldErrors';\nimport type { FlatFieldErrors } from './types';\n\n/**\n * Get {@link FlatFieldErrors} from {@link FieldErrors}.\n * This makes it easy to work with potentially deeply-nested {@link FieldErrors}.\n *\n * @param errors {@link FieldErrors} object.\n *\n * @returns `FlatFieldErrors` object.\n *\n * @example\n * ```\n * {\n * \"address.street\": {\n * type: \"too_short\",\n * ref: { value: \"123\" },\n * message: \"Required.\" }\n * }\n * }\n * ```\n */\nexport const getFlatFieldErrors = (errors: FieldErrors): FlatFieldErrors => {\n // flatten object for simpler processing\n const flattened = flattenFieldErrors(errors);\n\n // get flattened keys (e.g., `name.message`), which we must transform back to actual paths (e.g., `name`)\n const flattenedKeys = Object.keys(flattened);\n\n // rebuild FlatFieldErrors\n return Object.fromEntries(\n flattenedKeys.reduce<[PropertyKey, FieldError][]>(\n (entriesAccumulator, flattenedKey) => {\n /**\n * Maybe path.\n *\n * Derived from flattened key by removing leaf node suffix (if present).\n *\n * @example\n * path: `address.street.message` -> `address.street`\n * @example\n * not path: `address.street.ref` -> `address.street.ref` (no suffix match to replace)\n */\n const maybePath = flattenedKey.replace(\n regexMaybeFieldErrorLeafNodeSuffix,\n '',\n );\n\n // if nothing replaced, then it's not a leaf node; return early\n if (maybePath === flattenedKey) return entriesAccumulator;\n\n // find field error in original FieldErrors object\n // has dual-purpose of confirming that each path is valid\n const fieldError = get(errors, maybePath, undefined) as\n | FieldError\n | undefined;\n\n // if no field error found, then derived path was wrong; return early\n if (!fieldError) return entriesAccumulator;\n\n /**\n * Add entry to accumulator.\n *\n * (If it's a duplicate (e.g., `.type` leaf node matched before `.message`),\n * it doesn't matter because `Object.fromEntries` will just overwrite\n * first entry with second matching key/value.)\n */\n entriesAccumulator.push([maybePath, fieldError]);\n\n return entriesAccumulator;\n },\n\n [], // entries\n ),\n );\n};\n\n//\n\n/**\n * Regular expression to maybe match the end of a leaf node path.\n *\n * i.e., `name.type`, `address.street.message`\n *\n * iow: dot [?: non-capturing](\"type\" | \"message\")[\\b word boundary][$ end of string]\n */\nexport const regexMaybeFieldErrorLeafNodeSuffix = /\\.(?:type|message)\\b$/;\n\n//\n\nexport type FieldErrorsSansRef<\n TFieldValues extends SafeFieldValues = SafeFieldValues,\n> = Record<\n keyof TFieldValues | 'root',\n Partial<Pick<FieldError, 'message' | 'type'>> & {\n hasRef: boolean;\n }\n>;\n\nexport const getFlatFieldErrorsSansRef = <TFieldValues extends SafeFieldValues>(\n errors: FieldErrors<TFieldValues>,\n) =>\n Object.fromEntries(\n Object.entries(getFlatFieldErrors(errors)).map(([name, error]) => [\n name,\n {\n type: error.type,\n message: error.message,\n hasRef: !!error.ref, // strip out actual ref, etc. (avoid circular JSON error)\n },\n ]),\n ) as FieldErrorsSansRef<TFieldValues>;\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\n\nimport { getFlatFieldErrorsSansRef } from '@/errors/flat/getFlatFieldErrors';\n\nimport { useRhfUtilsContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { useFormRelayContext } from '../context/useFormRelayContext';\nimport type { FormRelayOptions } from '../FormRelayOptions';\nimport type { FormRelayStateSelected } from '../types';\n\nexport const useFormRelaySet = (options?: FormRelayOptions) => {\n if (!options) return;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [memoOptions] = React.useState(options);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnMount(memoOptions);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFormRelayOnChange(memoOptions);\n};\n\n// HELPERS\n\n// mount\n\nconst useFormRelayOnMount = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n () => {\n relay.add(formStateForRelay, utils, options);\n\n // unmount\n return () => {\n relay.remove(utils.formId);\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n};\n\n// update\n\nconst useFormRelayOnChange = (options: FormRelayOptions) => {\n const utils = useRhfUtilsContext();\n const relay = useFormRelayContext();\n const formStateForRelay = useFormStateForRelay(options);\n\n React.useEffect(\n // when form state changes, publish to relay context\n () => {\n relay.update(utils.formId, formStateForRelay);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateForRelay],\n );\n};\n\n// relayed form state\n\n/** Transform, memo-ize {@link useFormState}'s return to {@link FormRelayed} */\nconst useFormStateForRelay = (\n options: FormRelayOptions,\n): FormRelayStateSelected => {\n const formState = useFormState();\n\n const formStateSelected = options.select(formState);\n\n const formStateSelectedJson = JSON.stringify({\n ...formStateSelected,\n errors:\n formStateSelected.errors &&\n getFlatFieldErrorsSansRef(formStateSelected.errors),\n });\n\n const memoFormStateSelected = React.useMemo(\n // when watch JSON changes, update memo\n () => formStateSelected,\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [formStateSelectedJson],\n );\n\n return memoFormStateSelected;\n};\n","import type { FormRelayOptions } from '../FormRelayOptions';\n\nimport { useFormRelaySet } from './useFormRelaySet';\n\ntype Props = {\n options?: FormRelayOptions;\n};\n\nexport const FormRelaySetter: React.FC<Props> = ({ options }) => {\n useFormRelaySet(options);\n\n return null;\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RhfUtilsClientConfigType-CeOJzNAc.d.ts","names":[],"sources":["../../src/errors/output/types.ts","../../src/errors/flat/types.ts","../../src/errors/flat/context/useFlatFieldErrorsContext.ts","../../src/errors/flat/context/FlatFieldErrorsOutputConfig.ts","../../src/form/rhf/UseFormPropsType.ts","../../src/form/defaults/UseRhfUtilsFormGlobalDefaults.ts","../../src/submit/error/FormSubmitFieldErrors.ts","../../src/submit/error/FormSubmitError.ts","../../src/submit/UseRhfUtilsFormOnSubmitContextType.ts","../../src/utils/types.ts","../../src/form/_Controller.tsx","../../src/client/config/RhfUtilsFormInjectorProps.ts","../../src/client/config/RhfUtilsClientConfigType.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RhfUtilsContextType-BFmDtONY.d.ts","names":[],"sources":["../../src/submit/useResetFormOnSubmitted.ts","../../src/submit/useSubmitFormOnWatch.ts","../../src/form/options/RhfUtilsFormOptionsType.ts","../../src/form/rhf/SafeFieldValuesType.ts","../../src/form/context/utils/LastSubmitStateType.ts","../../src/form/context/utils/RhfUtilsContextProvider.tsx","../../src/form/context/utils/RhfUtilsContextType.ts"],"mappings":";;;;;;;;KAOY,8BAAA;;AAAZ;;;;EAWM,OAAA;IAAY,MAAA;EAAA;EAKF;;AAAM;EAAhB,KAAA;IAAU,MAAA;EAAA;AAAA;;;KChBJ,2BAAA;qEAEV,QAAQ;AAAA;;;;ADFV;;;;KEKY,mBAAA;EFMM,wCEFd,qBAAA;EFOY;;AAAM;EEFlB,aAAA,GAAgB,2BAAA;EAGhB,gBAAA,GAAmB,8BAAA;EDjBX;;;;AAEF;ECsBN,OAAA,aAAoB,IAAA,CAAK,cAAA;AAAA,KAGxB,QAAA;EACC,mBAAA;AAAA,IAGE,oBAAA;;;;;;KCnCI,eAAA,GAAkB,MAAM;;;KCHxB,eAAA;;;KCcA,4BAAA;EACV,MAAA;EACA,OAAA,EAAS,KAAA,CAAM,SAAA,CAAU,eAAA,ULTf;EKYV,OAAA,EAAS,mBAAA;AAAA;;;KCdC,eAAA,GAAkB,4BAAA;;ANE9B;;;;;EMOI,kBAAA,EAAoB,SAAA,CAAU,eAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/Register.d.ts","../../src/client/config/context/RhfUtilsClientConfigProvider.tsx","../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts","../../src/errors/nonfield/RhfUtilsNonFieldErrorMarker.tsx","../../src/form/context/utils/useRhfUtilsContext.tsx","../../src/form/RHF_UseFormReturnWithoutProxiesType.ts","../../src/form/UseRhfUtilsFormChildrenPropsType.ts","../../src/form/utils/useFormRequestSubmit.ts","../../src/submit/last-error/useLastSubmitError.ts","../../src/form/defaults/form/UseRhfUtilsFormInstanceFormProps.ts","../../src/form/with-handlers-and-children/RhfUtilsFormPropsOnBeforeSubmitInvariants.ts","../../src/form/with-handlers-and-children/RhfUtilsFormProps.ts","../../src/resolvers/zod/consts.ts","../../src/resolvers/zod/ZodTypeSafeFieldValuesType.ts","../../src/resolvers/zod/form/RhfUtilsZodForm.tsx","../../src/form/providers/RhfUtilsFormProvidersPropsType.ts","../../src/resolvers/zod/providers/RhfUtilsZodFormProviders.tsx","../../src/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.tsx","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenPropsType.ts","../../src/resolvers/zod/RhfUtilsUseZodFormChildrenFCType.ts","../../src/_exports/index.ts"],"mappings":"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"}
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"relay.d.ts","names":[],"sources":["../../src/form/relay/context/FormRelayContextProvider.tsx","../../src/form/relay/get/FormRelayGroupType.ts","../../src/form/relay/get/grouper/useFirstFormStateGroup.ts","../../src/form/relay/get/useFormRelay.ts","../../src/form/relay/set/FormRelaySetter.tsx","../../src/form/relay/set/useFormRelaySet.ts"],"mappings":";;;;;;KAUK,OAAA,GAAQ,OAAA,CAAM,iBAAiB;AAAA,cAEvB,wBAAA,EAA0B,OAAA,CAAM,EAAE,CAAC,OAAA;;;KCRpC,cAAA,GAAiB,OAAA,CAC3B,IAAA,CACE,SAAA,CAAU,eAAA;EAQV,SAAA;EAEA,cAAA;EAEA,gBAAA;EAEA,mBAAA,WDVM;ECaN,WAAA;EDbS;AAAuB;AAEpC;;;ECkBI,SAAA;AAAA;;;;;;;;AD9BsB;;cEoBb,sBAAA,QAA6B,cAoBzC;;;cC7BY,cAAA,GAAkB,MAAA,aACM,SADQ;AAAA,KAKjC,sBAAA;EACN,MAAA;AAAA;EAEA,SAAA,GAAY,OAAA;IACV,MAAA,EAAQ,gBAAA;IACR,OAAA,EAAS,mBAAmB;EAAA;AAAA;AAAA,cAIvB,iBAAA,GACX,QAAA,GAAW,sBAAA,KACV,cAkBF;;;KCzCI,KAAA;EACH,OAAA,GAAU,gBAAgB;AAAA;AAAA,cAGf,eAAA,EAAiB,KAAA,CAAM,EAAE,CAAC,KAAA;;;cCG1B,eAAA,GAAmB,OAA0B,GAAhB,gBAAgB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"relay.js","names":[],"sources":["../../src/form/relay/context/utils.ts","../../src/form/relay/get/useFormRelay.ts","../../src/form/relay/get/grouper/context/index.ts","../../src/form/relay/get/grouper/useFirstFormStateGroup.ts"],"sourcesContent":["import { isEmptyObject } from '@/utils/isEmptyObject';\n\nimport type { FormRelayGroup } from '../get/FormRelayGroupType';\nimport type { FormRelayStateSelected } from '../types';\n\n// see: https://github.com/react-hook-form/react-hook-form/blob/7ce7cc6da38e9787bcf05e94fbd14dd712d27a85/src/logic/getProxyFormState.ts\n\n/** Condense list of form states to singular booleans. */\nexport const getFormRelayedAggregatedByRelayedItem = (\n formStates: FormRelayStateSelected[],\n): FormRelayGroup =>\n formStates.reduce<FormRelayGroup>(\n (acc, curr) =>\n ({\n // booleans\n isDirty: acc.isDirty || curr.isDirty,\n isSubmitting: acc.isSubmitting || curr.isSubmitting,\n isLoading: acc.isLoading || curr.isLoading,\n isSubmitted: acc.isSubmitted || curr.isSubmitted,\n isSubmitSuccessful: acc.isSubmitSuccessful || curr.isSubmitSuccessful,\n isValidating: acc.isValidating || curr.isValidating,\n isValid: acc.isValid || curr.isValid,\n isReady: acc.isReady || curr.isReady,\n disabled: acc.disabled || curr.disabled,\n // objects\n hasErrors:\n acc.hasErrors || (curr.errors && !isEmptyObject(curr.errors)),\n hasDirtyFields:\n acc.hasDirtyFields ||\n (curr.dirtyFields && !isEmptyObject(curr.dirtyFields)),\n hasTouchedFields:\n acc.hasTouchedFields ||\n (curr.touchedFields && !isEmptyObject(curr.touchedFields)),\n hasValidatingFields:\n acc.hasValidatingFields ||\n (curr.validatingFields && !isEmptyObject(curr.validatingFields)),\n // counts\n submitCount: (acc.submitCount ?? 0) + (curr.submitCount ?? 0),\n // supplemental\n isMounted: acc.isMounted || curr.isMounted,\n }) satisfies FormRelayGroup,\n\n // initial values\n {\n isDirty: undefined,\n isSubmitting: undefined,\n isLoading: undefined,\n isSubmitted: undefined,\n isSubmitSuccessful: undefined,\n isValidating: undefined,\n isReady: undefined,\n isValid: undefined,\n disabled: undefined,\n // objects\n hasErrors: undefined,\n hasDirtyFields: undefined,\n hasTouchedFields: undefined,\n hasValidatingFields: undefined,\n // counts\n submitCount: undefined,\n // supplemental\n isMounted: undefined,\n },\n );\n","import React from 'react';\n\nimport type { RhfUtilsFormOptions } from '@/form/options/RhfUtilsFormOptionsType';\n\nimport type { FormsRelayed } from '../context/useFormRelayContext';\nimport { useFormRelayContext } from '../context/useFormRelayContext';\nimport { getFormRelayedAggregatedByRelayedItem } from '../context/utils';\nimport type { FormRelayOptions } from '../FormRelayOptions';\n\nimport type { FormRelayGroup } from './FormRelayGroupType';\n\nexport const useFormRelayId = (formId: string) =>\n useFormRelayContext().state[formId];\n\n//\n\nexport type FormRelayGroupCriteria =\n | { groups: string[] }\n | {\n predicate: (context: {\n groups: FormRelayOptions['groups'];\n options: RhfUtilsFormOptions;\n }) => boolean;\n };\n\nexport const useFormRelayGroup = (\n criteria?: FormRelayGroupCriteria,\n): FormRelayGroup => {\n const relayState = useFormRelayContext().state;\n\n const relayStateFiltered = getFormRelaysByCriteria(relayState, criteria);\n\n const state = getFormRelayedAggregatedByRelayedItem(\n relayStateFiltered.map(({ state }) => state),\n );\n\n const jsonState = JSON.stringify(state);\n\n const memoState = React.useMemo(\n () => state,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [jsonState],\n );\n\n return memoState;\n};\n\n// WRITE TESTS\n\nconst getFormRelaysByCriteria = (\n relayState: FormsRelayed,\n criteria?: FormRelayGroupCriteria,\n) =>\n Object.values(relayState).filter(\n ({ options, utils }) =>\n // no criteria specified\n !criteria ||\n // groups specified\n ('groups' in criteria &&\n criteria.groups.filter((group) => options.groups?.includes(group))\n .length) ||\n // predicate specified\n ('predicate' in criteria &&\n criteria.predicate({\n groups: options.groups,\n options: utils.options,\n })),\n );\n","import { createContext } from '@/utils/createContext';\n\nimport type { FormRelayGroup } from '../../FormRelayGroupType';\n\nexport type FormRelayGrouperContext = {\n state: FormRelayGroup;\n};\n\n// context\n\nexport const {\n Provider: _FormRelayGrouperContextProvider,\n useRequired: _useFormRelayGrouperContext,\n useMaybe: _useFormRelayGrouperMaybeContext,\n} = createContext<FormRelayGrouperContext>();\n","import { useFormState } from 'react-hook-form';\n\nimport { useRhfUtilsMaybeContext } from '@/form/context/utils/useRhfUtilsContext';\n\nimport { getFormRelayedAggregatedByRelayedItem } from '../../context/utils';\n\nimport type { FormRelayGroup } from '../FormRelayGroupType';\nimport { useFormRelayGroup } from '../useFormRelay';\n\nimport { _useFormRelayGrouperMaybeContext } from './context';\n\n/* eslint-disable react-hooks/rules-of-hooks -- ⚠️ condition will (i.e., should) not change between renders! */\n\n/**\n * Use this when you don't (want to) know whether component is wrapped\n * with RHF context, `FormRelayGrouperContext`, or `FormRelayContext`.\n * Will return `FormRelayGroup`, regardless.\n *\n * Allows you to build naive components that are not tied to one specific context.\n */\nexport const useFirstFormStateGroup = (): FormRelayGroup => {\n const maybeUtils = useRhfUtilsMaybeContext();\n\n // if utils present, then relay unnecessary (bc we are in the context of a single form)\n\n if (maybeUtils) {\n const state = useFormState();\n\n return getFormRelayedAggregatedByRelayedItem([state]);\n }\n\n // if relay grouper present...\n\n const maybeRelayCtx = _useFormRelayGrouperMaybeContext();\n\n if (maybeRelayCtx) return maybeRelayCtx.state;\n\n // otherwise: use top-level relay\n\n return useFormRelayGroup();\n};\n"],"mappings":";;;;;AAQA,MAAa,yCACX,eAEA,WAAW,QACR,KAAK,UACH;CAEC,SAAS,IAAI,WAAW,KAAK;CAC7B,cAAc,IAAI,gBAAgB,KAAK;CACvC,WAAW,IAAI,aAAa,KAAK;CACjC,aAAa,IAAI,eAAe,KAAK;CACrC,oBAAoB,IAAI,sBAAsB,KAAK;CACnD,cAAc,IAAI,gBAAgB,KAAK;CACvC,SAAS,IAAI,WAAW,KAAK;CAC7B,SAAS,IAAI,WAAW,KAAK;CAC7B,UAAU,IAAI,YAAY,KAAK;CAE/B,WACE,IAAI,aAAc,KAAK,UAAU,CAAC,cAAc,KAAK,MAAM;CAC7D,gBACE,IAAI,kBACH,KAAK,eAAe,CAAC,cAAc,KAAK,WAAW;CACtD,kBACE,IAAI,oBACH,KAAK,iBAAiB,CAAC,cAAc,KAAK,aAAa;CAC1D,qBACE,IAAI,uBACH,KAAK,oBAAoB,CAAC,cAAc,KAAK,gBAAgB;CAEhE,cAAc,IAAI,eAAe,MAAM,KAAK,eAAe;CAE3D,WAAW,IAAI,aAAa,KAAK;AACnC,IAGF;CACE,SAAS,KAAA;CACT,cAAc,KAAA;CACd,WAAW,KAAA;CACX,aAAa,KAAA;CACb,oBAAoB,KAAA;CACpB,cAAc,KAAA;CACd,SAAS,KAAA;CACT,SAAS,KAAA;CACT,UAAU,KAAA;CAEV,WAAW,KAAA;CACX,gBAAgB,KAAA;CAChB,kBAAkB,KAAA;CAClB,qBAAqB,KAAA;CAErB,aAAa,KAAA;CAEb,WAAW,KAAA;AACb,CACF;;;ACpDF,MAAa,kBAAkB,WAC7B,oBAAoB,CAAC,CAAC,MAAM;AAa9B,MAAa,qBACX,aACmB;CACnB,MAAM,aAAa,oBAAoB,CAAC,CAAC;CAIzC,MAAM,QAAQ,sCAFa,wBAAwB,YAAY,QAG5C,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,CAC7C;CAEA,MAAM,YAAY,KAAK,UAAU,KAAK;CAQtC,OANkB,MAAM,cAChB,OAEN,CAAC,SAAS,CAGG;AACjB;AAIA,MAAM,2BACJ,YACA,aAEA,OAAO,OAAO,UAAU,CAAC,CAAC,QACvB,EAAE,SAAS,YAEV,CAAC,YAEA,YAAY,YACX,SAAS,OAAO,QAAQ,UAAU,QAAQ,QAAQ,SAAS,KAAK,CAAC,CAAC,CAC/D,UAEJ,eAAe,YACd,SAAS,UAAU;CACjB,QAAQ,QAAQ;CAChB,SAAS,MAAM;AACjB,CAAC,CACP;;;ACzDF,MAAa,EACX,UAAU,kCACV,aAAa,6BACb,UAAU,qCACR,cAAuC;;;;;;;;;;ACM3C,MAAa,+BAA+C;CAK1D,IAJmB,wBAIN,GAGX,OAAO,sCAAsC,CAF/B,aAEoC,CAAC,CAAC;CAKtD,MAAM,gBAAgB,iCAAiC;CAEvD,IAAI,eAAe,OAAO,cAAc;CAIxC,OAAO,kBAAkB;AAC3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"trpc.d.ts","names":[],"sources":["../../src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.ts","../../src/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.ts"],"mappings":";;;;;;;;;;AAcA;;cAAa,kCAAA,GAET,oBAAA,EAAsB,WAAA,CACpB,oBAAA,+BAGH,KAAA,cAAiB,qBAAA;;;;;AANpB;cCDa,uDAAA,EAAuD,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,aAAA,GAAA,CAAA,CAAA,UAAA,EAAA,mBAAA,CAAA,aAAA,YAAA,mBAAA,CAAA,aAAA,aAAA,mBAAA,CAAA,aAAA,IAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,SAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"trpc.js","names":[],"sources":["../../src/errors/trpc/trpcClientErrorMessageSchema.ts","../../src/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.ts","../../src/errors/trpc/makeOnSubmitTrpcClientErrorHandler.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Schema for {@link TRPCClientError} message.\n *\n * (Sent from backend as JSON string.)\n */\nexport const trpcClientErrorMessageSchema = z\n .object({\n code: z.string(),\n message: z.string(),\n path: z.array(z.string()),\n })\n .passthrough();\n","import type { TRPCClientErrorLike } from '@trpc/client';\nimport { TRPCClientError } from '@trpc/client';\nimport type { AnyTRPCRouter } from '@trpc/server';\nimport type { ErrorOption } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\n\nimport { trpcClientErrorMessageSchema } from './trpcClientErrorMessageSchema';\n\n/**\n * Schema that transforms {@link TRPCClientError} to RHF {@link FormSubmitFieldErrors}.\n */\nexport const trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer = z\n .custom<TRPCClientErrorLike<AnyTRPCRouter>>(\n (error: unknown) => error instanceof TRPCClientError, // check instance type\n )\n\n // return: message (stringified json)\n .transform((error) => error.message)\n\n // return: parsed json as unknown\n .transform((json) => {\n try {\n return JSON.parse(json) as unknown;\n } catch (error) {\n // if not json, message is just string\n // build single item array for root\n // (must be in array for next step in transform)\n return [\n {\n validation: 'root',\n code: 'server',\n message: json,\n path: ['root'],\n },\n ] satisfies z.infer<typeof trpcClientErrorMessageSchema>[];\n }\n })\n\n // return: (trpc client error)[]\n .pipe(z.array(trpcClientErrorMessageSchema))\n\n // return: [path, ErrorOption][] (array of entries)\n .transform((errors) =>\n errors.map(\n (error) =>\n [\n error.path.join('.'), // flatten path (e.g., \"street.name\")\n {\n type: error.code,\n message: error.message,\n } satisfies ErrorOption,\n ] as const,\n ),\n )\n\n // return: FormSubmitFieldErrors\n .transform((errors) => Object.fromEntries(errors) as FormSubmitFieldErrors);\n","import { TRPCClientError } from '@trpc/client';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfigType';\n\nimport type { FormSubmitFieldErrors } from '@/submit/error/FormSubmitFieldErrors';\n\nimport { trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer } from './trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer';\n\n/**\n * HOF that returns submit error handler for {@link RhfUtilsClientConfig.onSubmitErrorUnknown}.\n *\n * @param onError Fallback for handling non-TRPC errors.\n * @returns FormSubmitError\n */\nexport const makeOnSubmitTrpcClientErrorHandler =\n (\n onNotTrpcClientError: NonNullable<\n RhfUtilsClientConfig['onSubmitErrorUnknown']\n >,\n ) =>\n (error: unknown): FormSubmitFieldErrors | undefined => {\n // transform\n if (error instanceof TRPCClientError)\n return trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.parse(\n error,\n );\n\n // if unknown error, use callback\n return onNotTrpcClientError(error);\n };\n"],"mappings":";;;;;;;;AAOA,MAAa,+BAA+B,EACzC,OAAO;CACN,MAAM,EAAE,OAAO;CACf,SAAS,EAAE,OAAO;CAClB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAC1B,CAAC,CAAC,CACD,YAAY;;;;;;ACAf,MAAa,0DAA0D,EACpE,QACE,UAAmB,iBAAiB,eACvC,CAAC,CAGA,WAAW,UAAU,MAAM,OAAO,CAAC,CAGnC,WAAW,SAAS;CACnB,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,SAAS,OAAO;EAId,OAAO,CACL;GACE,YAAY;GACZ,MAAM;GACN,SAAS;GACT,MAAM,CAAC,MAAM;EACf,CACF;CACF;AACF,CAAC,CAAC,CAGD,KAAK,EAAE,MAAM,4BAA4B,CAAC,CAAC,CAG3C,WAAW,WACV,OAAO,KACJ,UACC,CACE,MAAM,KAAK,KAAK,GAAG,GACnB;CACE,MAAM,MAAM;CACZ,SAAS,MAAM;AACjB,CACF,CACJ,CACF,CAAC,CAGA,WAAW,WAAW,OAAO,YAAY,MAAM,CAA0B;;;;;;;;;AC5C5E,MAAa,sCAET,0BAID,UAAsD;CAErD,IAAI,iBAAiB,iBACnB,OAAO,wDAAwD,MAC7D,KACF;CAGF,OAAO,qBAAqB,KAAK;AACnC"}