@paragrav/rhf-utils 0.0.128 → 0.0.132

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 (164) hide show
  1. package/README.md +12 -9
  2. package/dist/esm/client/config/useRhfUtilsClientConfigContext.mjs +1 -0
  3. package/dist/esm/client/config/useRhfUtilsClientConfigContext.mjs.map +1 -0
  4. package/dist/esm/client/index.mjs +1 -0
  5. package/dist/esm/client/index.mjs.map +1 -0
  6. package/dist/esm/client/utils.mjs +1 -0
  7. package/dist/esm/client/utils.mjs.map +1 -0
  8. package/dist/esm/client/zod/context/RhfUtilsClientForZodContextProvider.mjs +1 -0
  9. package/dist/esm/client/zod/context/RhfUtilsClientForZodContextProvider.mjs.map +1 -0
  10. package/dist/esm/client/zod/context/RhfUtilsZodForm.mjs +1 -0
  11. package/dist/esm/client/zod/context/RhfUtilsZodForm.mjs.map +1 -0
  12. package/dist/esm/client/zod/context/useRhfUtilsClientForZodContext.mjs +1 -0
  13. package/dist/esm/client/zod/context/useRhfUtilsClientForZodContext.mjs.map +1 -0
  14. package/dist/esm/client/zod/context/useRhfUtilsZodForm.mjs +1 -0
  15. package/dist/esm/client/zod/context/useRhfUtilsZodForm.mjs.map +1 -0
  16. package/dist/esm/client/zod/createRhfUtilsClientForZod.mjs +1 -0
  17. package/dist/esm/client/zod/createRhfUtilsClientForZod.mjs.map +1 -0
  18. package/dist/esm/devtool/LazyDevTool.mjs +1 -0
  19. package/dist/esm/devtool/LazyDevTool.mjs.map +1 -0
  20. package/dist/esm/errors/flat/FlatFieldErrorsList.mjs +1 -0
  21. package/dist/esm/errors/flat/FlatFieldErrorsList.mjs.map +1 -0
  22. package/dist/esm/errors/flat/context/FlatFieldErrorsContextProvider.mjs +1 -0
  23. package/dist/esm/errors/flat/context/FlatFieldErrorsContextProvider.mjs.map +1 -0
  24. package/dist/esm/errors/flat/context/useFlatFieldErrorsContext.mjs +1 -0
  25. package/dist/esm/errors/flat/context/useFlatFieldErrorsContext.mjs.map +1 -0
  26. package/dist/esm/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.mjs +1 -0
  27. package/dist/esm/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.mjs.map +1 -0
  28. package/dist/esm/errors/flat/context/useFlatFieldErrorsContextOutput.mjs +1 -0
  29. package/dist/esm/errors/flat/context/useFlatFieldErrorsContextOutput.mjs.map +1 -0
  30. package/dist/esm/errors/flat/filterFlatFieldErrors.mjs +1 -0
  31. package/dist/esm/errors/flat/filterFlatFieldErrors.mjs.map +1 -0
  32. package/dist/esm/errors/flat/flattenFieldErrors.mjs +1 -0
  33. package/dist/esm/errors/flat/flattenFieldErrors.mjs.map +1 -0
  34. package/dist/esm/errors/flat/getFlatFieldErrors.mjs +1 -0
  35. package/dist/esm/errors/flat/getFlatFieldErrors.mjs.map +1 -0
  36. package/dist/esm/errors/getRefdFromFlatFieldErrors.mjs +1 -0
  37. package/dist/esm/errors/getRefdFromFlatFieldErrors.mjs.map +1 -0
  38. package/dist/esm/errors/isFieldErrorRefd.mjs +1 -0
  39. package/dist/esm/errors/isFieldErrorRefd.mjs.map +1 -0
  40. package/dist/esm/errors/isFlatFieldErrorEntryRefd.mjs +1 -0
  41. package/dist/esm/errors/isFlatFieldErrorEntryRefd.mjs.map +1 -0
  42. package/dist/esm/errors/message/FormErrorMessage.mjs +1 -0
  43. package/dist/esm/errors/message/FormErrorMessage.mjs.map +1 -0
  44. package/dist/esm/errors/message/FormErrorMessageByPath.mjs +1 -0
  45. package/dist/esm/errors/message/FormErrorMessageByPath.mjs.map +1 -0
  46. package/dist/esm/errors/nonfield/FormNonFieldErrorMarker.mjs +1 -0
  47. package/dist/esm/errors/nonfield/FormNonFieldErrorMarker.mjs.map +1 -0
  48. package/dist/esm/errors/nonfield/FormNonFieldErrorMarker.utils.mjs +1 -0
  49. package/dist/esm/errors/nonfield/FormNonFieldErrorMarker.utils.mjs.map +1 -0
  50. package/dist/esm/errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute.mjs +1 -0
  51. package/dist/esm/errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute.mjs.map +1 -0
  52. package/dist/esm/errors/nonfield/isNonFieldErrorMarkerInDOM.mjs +1 -0
  53. package/dist/esm/errors/nonfield/isNonFieldErrorMarkerInDOM.mjs.map +1 -0
  54. package/dist/esm/errors/orphan/getIsOrphanFormErrorWithParentElement.mjs +1 -0
  55. package/dist/esm/errors/orphan/getIsOrphanFormErrorWithParentElement.mjs.map +1 -0
  56. package/dist/esm/errors/orphan/getOrphansFromFlatFieldErrors.mjs +1 -0
  57. package/dist/esm/errors/orphan/getOrphansFromFlatFieldErrors.mjs.map +1 -0
  58. package/dist/esm/errors/orphan/isOrphanFormError.mjs +1 -0
  59. package/dist/esm/errors/orphan/isOrphanFormError.mjs.map +1 -0
  60. package/dist/esm/errors/output/consoleErrors.mjs +1 -0
  61. package/dist/esm/errors/output/consoleErrors.mjs.map +1 -0
  62. package/dist/esm/errors/root/RootErrorsListFromFlatFieldErrorsContext.mjs +1 -0
  63. package/dist/esm/errors/root/RootErrorsListFromFlatFieldErrorsContext.mjs.map +1 -0
  64. package/dist/esm/errors/root/consts.mjs +1 -0
  65. package/dist/esm/errors/root/consts.mjs.map +1 -0
  66. package/dist/esm/errors/root/getRootsFromFlatFieldErrors.mjs +1 -0
  67. package/dist/esm/errors/root/getRootsFromFlatFieldErrors.mjs.map +1 -0
  68. package/dist/esm/errors/root/isFlatFieldErrorEntryPathRoot.mjs +1 -0
  69. package/dist/esm/errors/root/isFlatFieldErrorEntryPathRoot.mjs.map +1 -0
  70. package/dist/esm/errors/root/isFormErrorPathRoot.mjs +1 -0
  71. package/dist/esm/errors/root/isFormErrorPathRoot.mjs.map +1 -0
  72. package/dist/esm/errors/trpc/getOnSubmitTrpcClientErrorHandler.mjs +1 -0
  73. package/dist/esm/errors/trpc/getOnSubmitTrpcClientErrorHandler.mjs.map +1 -0
  74. package/dist/esm/errors/trpc/trpcClientErrorMessageSchema.mjs +1 -0
  75. package/dist/esm/errors/trpc/trpcClientErrorMessageSchema.mjs.map +1 -0
  76. package/dist/esm/errors/trpc/trpcClientErrorToFormSubmitErrorsSchemaTransformer.mjs +1 -0
  77. package/dist/esm/errors/trpc/trpcClientErrorToFormSubmitErrorsSchemaTransformer.mjs.map +1 -0
  78. package/dist/esm/exports.mjs +22 -23
  79. package/dist/esm/exports.mjs.map +1 -0
  80. package/dist/esm/form/Form.mjs +2 -1
  81. package/dist/esm/form/Form.mjs.map +1 -0
  82. package/dist/esm/form/FormWithProviders.mjs +1 -0
  83. package/dist/esm/form/FormWithProviders.mjs.map +1 -0
  84. package/dist/esm/form/RhfUtilsFormProviders.mjs +1 -0
  85. package/dist/esm/form/RhfUtilsFormProviders.mjs.map +1 -0
  86. package/dist/esm/form/_Controller.mjs +1 -0
  87. package/dist/esm/form/_Controller.mjs.map +1 -0
  88. package/dist/esm/form/context/group/FormGroupContextProvider.mjs +1 -0
  89. package/dist/esm/form/context/group/FormGroupContextProvider.mjs.map +1 -0
  90. package/dist/esm/form/context/group/index.mjs +1 -0
  91. package/dist/esm/form/context/group/index.mjs.map +1 -0
  92. package/dist/esm/form/context/group/useFormGroupChildIsMountedTracker.mjs +1 -0
  93. package/dist/esm/form/context/group/useFormGroupChildIsMountedTracker.mjs.map +1 -0
  94. package/dist/esm/form/context/group/useFormGroupChildIsSubmittingTracker.mjs +1 -0
  95. package/dist/esm/form/context/group/useFormGroupChildIsSubmittingTracker.mjs.map +1 -0
  96. package/dist/esm/form/context/group/useFormGroupChildTracker.mjs +1 -0
  97. package/dist/esm/form/context/group/useFormGroupChildTracker.mjs.map +1 -0
  98. package/dist/esm/form/context/group/useFormGroupIsAnyBusy.mjs +1 -0
  99. package/dist/esm/form/context/group/useFormGroupIsAnyBusy.mjs.map +1 -0
  100. package/dist/esm/form/context/group/useFormGroupIsChildBusy.mjs +1 -0
  101. package/dist/esm/form/context/group/useFormGroupIsChildBusy.mjs.map +1 -0
  102. package/dist/esm/form/context/group/useFormGroupIsParentBusy.mjs +1 -0
  103. package/dist/esm/form/context/group/useFormGroupIsParentBusy.mjs.map +1 -0
  104. package/dist/esm/form/context/group/useFormGroupParentTracker.mjs +1 -0
  105. package/dist/esm/form/context/group/useFormGroupParentTracker.mjs.map +1 -0
  106. package/dist/esm/form/context/group/useFormOrParentIsBusy.mjs +1 -0
  107. package/dist/esm/form/context/group/useFormOrParentIsBusy.mjs.map +1 -0
  108. package/dist/esm/form/context/utils/RhfUtilsContextProvider.mjs +16 -23
  109. package/dist/esm/form/context/utils/RhfUtilsContextProvider.mjs.map +1 -0
  110. package/dist/esm/form/context/utils/useRhfUtilsContext.mjs +1 -0
  111. package/dist/esm/form/context/utils/useRhfUtilsContext.mjs.map +1 -0
  112. package/dist/esm/form/context/utils/useRhfUtilsContextRequestSubmit.mjs +1 -0
  113. package/dist/esm/form/context/utils/useRhfUtilsContextRequestSubmit.mjs.map +1 -0
  114. package/dist/esm/form/useFormIsBusy.mjs +1 -0
  115. package/dist/esm/form/useFormIsBusy.mjs.map +1 -0
  116. package/dist/esm/form/useRhfUtilsForm.mjs +1 -0
  117. package/dist/esm/form/useRhfUtilsForm.mjs.map +1 -0
  118. package/dist/esm/form/utils/getSubmitterButtonData.mjs +1 -0
  119. package/dist/esm/form/utils/getSubmitterButtonData.mjs.map +1 -0
  120. package/dist/esm/form/utils/useFormRequestSubmit.mjs +1 -0
  121. package/dist/esm/form/utils/useFormRequestSubmit.mjs.map +1 -0
  122. package/dist/esm/submit/error/FormSubmitError.mjs +1 -0
  123. package/dist/esm/submit/error/FormSubmitError.mjs.map +1 -0
  124. package/dist/esm/submit/error/setCtxErrorsByFormSubmitErrors.mjs +1 -0
  125. package/dist/esm/submit/error/setCtxErrorsByFormSubmitErrors.mjs.map +1 -0
  126. package/dist/esm/submit/useFormOnSubmitted.mjs +1 -0
  127. package/dist/esm/submit/useFormOnSubmitted.mjs.map +1 -0
  128. package/dist/esm/submit/useResetFormOnSubmitted.mjs +1 -0
  129. package/dist/esm/submit/useResetFormOnSubmitted.mjs.map +1 -0
  130. package/dist/esm/submit/useSubmitFormOnChange.mjs +1 -0
  131. package/dist/esm/submit/useSubmitFormOnChange.mjs.map +1 -0
  132. package/dist/esm/utils/PassthroughChildren.mjs +1 -0
  133. package/dist/esm/utils/PassthroughChildren.mjs.map +1 -0
  134. package/dist/esm/utils/createContext.mjs +1 -0
  135. package/dist/esm/utils/createContext.mjs.map +1 -0
  136. package/dist/esm/utils/isEmptyObject.mjs +1 -0
  137. package/dist/esm/utils/isEmptyObject.mjs.map +1 -0
  138. package/dist/esm/utils/useRefIfValueWasTrue.mjs +1 -0
  139. package/dist/esm/utils/useRefIfValueWasTrue.mjs.map +1 -0
  140. package/dist/types/client/config/RhfUtilsClientConfig.d.ts +1 -1
  141. package/dist/types/client/utils.d.ts +5 -39
  142. package/dist/types/client/zod/context/useRhfUtilsZodForm.d.ts +1 -3
  143. package/dist/types/errors/message/FormErrorMessageByPath.d.ts +0 -1
  144. package/dist/types/errors/nonfield/FormNonFieldErrorMarker.d.ts +0 -1
  145. package/dist/types/errors/nonfield/isNonFieldErrorMarkerInDOM.d.ts +1 -1
  146. package/dist/types/errors/orphan/getIsOrphanFormErrorWithParentElement.d.ts +1 -1
  147. package/dist/types/errors/orphan/getOrphansFromFlatFieldErrors.d.ts +1 -1
  148. package/dist/types/errors/orphan/isOrphanFormError.d.ts +1 -1
  149. package/dist/types/errors/output/consoleErrors.d.ts +1 -1
  150. package/dist/types/errors/root/RootErrorsListFromFlatFieldErrorsContext.d.ts +0 -1
  151. package/dist/types/errors/trpc/getOnSubmitTrpcClientErrorHandler.d.ts +2 -2
  152. package/dist/types/exports.d.ts +0 -1
  153. package/dist/types/form/context/group/index.d.ts +0 -1
  154. package/dist/types/form/context/utils/RhfUtilsContextProvider.d.ts +0 -2
  155. package/dist/types/form/context/utils/useRhfUtilsContextRequestSubmit.d.ts +1 -1
  156. package/dist/types/form/utils/getSubmitterButtonData.d.ts +1 -4
  157. package/dist/types/form/utils/useFormRequestSubmit.d.ts +1 -1
  158. package/dist/types/form/utils/useShouldFormBlockNavigation.d.ts +17 -4
  159. package/dist/types/submit/useFormOnSubmitSuccessfulAndReset.d.ts +1 -1
  160. package/dist/types/submit/useResetFormOnSubmitted.d.ts +2 -2
  161. package/dist/types/utils/PassthroughChildren.d.ts +0 -1
  162. package/package.json +1 -1
  163. package/dist/esm/form/utils/useShouldFormBlockNavigation.mjs +0 -9
  164. package/dist/esm/submit/useFormOnSubmitSuccessfulAndReset.mjs +0 -12
package/README.md CHANGED
@@ -73,15 +73,18 @@ export const rhfUtilsClientConfig: RhfUtilsClientConfig = {
73
73
  },
74
74
 
75
75
  // non-FormSubmitError thrown in onSubmit
76
- // use case: catch backend error and transform data for frontend
77
- onSubmitUnknownError: (
76
+ // use case: handle and transform error data for frontend
77
+ onSubmitErrorUnknown: (
78
78
  error, // unknown
79
79
  ) => {
80
- // if other error, re-throw to handle in ErrorBoundary
81
- if (!(error instanceof MyServerError)) throw error;
82
-
83
80
  // return FormSubmitErrors object to be merged to RHF context errors
84
- return transformServerErrorToFormSubmitErrors(error);
81
+ if (isMyServerError(error))
82
+ return transformMyServerErrorToFormSubmitErrors(error);
83
+
84
+ // if other error
85
+ return {
86
+ root: { type: 'server', message: 'There was a problem.' },
87
+ } satisfies FormSubmitErrors;
85
88
  },
86
89
 
87
90
  // rhfContext.formState.errors output for debugging
@@ -237,7 +240,7 @@ Example:
237
240
  />
238
241
  ```
239
242
 
240
- Any non-`FormSubmitError`s thrown from submit handler (e.g., fetch/axios error) can be transformed by `RhfUtilsClientConfig`'s `onSubmitUnknownError` callback. This takes an `unknown` error and can return a `FormSubmitErrors` object, which is merged in RHF's context errors.
243
+ Any non-`FormSubmitError`s thrown from submit handler (e.g., fetch/axios error) can be transformed by `RhfUtilsClientConfig`'s `onSubmitErrorUnknown` callback. This takes an `unknown` error and can return a `FormSubmitErrors` object, which is merged in RHF's context errors.
241
244
 
242
245
  Most common use case will be transforming backend errors to frontend shape. (You can use `getOnSubmitTrpcClientErrorHandler` HOF provided by this library for TRPC backends.)
243
246
 
@@ -255,8 +258,8 @@ type RhfUtilsFormOptions = {
255
258
 
256
259
  /**
257
260
  * Reset form values and state (e.g., isDirty, etc.) after submit -- on success and/or error.
258
- * - `defaults`: reset current values to defaults
259
- * - `current`: reset defaults to current values
261
+ * - `defaults`: reset current values to defaults (e.g., clear form)
262
+ * - `current`: reset defaults to current values (keep current values)
260
263
  */
261
264
  resetOnSubmitted?: {
262
265
  success?: { values: 'defaults' | 'current' };
@@ -7,3 +7,4 @@ export {
7
7
  o as _RhfUtilsClientConfigContextProvider,
8
8
  i as default
9
9
  };
10
+ //# sourceMappingURL=useRhfUtilsClientConfigContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRhfUtilsClientConfigContext.mjs","sources":["../../../../src/client/config/useRhfUtilsClientConfigContext.tsx"],"sourcesContent":["import createContext from '@/utils/createContext';\n\nimport type { RhfUtilsClientConfig } from './RhfUtilsClientConfig';\n\nconst {\n Provider: _RhfUtilsClientConfigContextProvider,\n useMaybe: useRhfUtilsClientConfigMaybeContext,\n} = createContext<RhfUtilsClientConfig>();\n\n//\n\nexport default useRhfUtilsClientConfigMaybeContext;\n\n//\n\nexport { _RhfUtilsClientConfigContextProvider };\n"],"names":["_RhfUtilsClientConfigContextProvider","useRhfUtilsClientConfigMaybeContext","createContext"],"mappings":";AAIM,MAAA;AAAA,EACJ,UAAUA;AAAA,EACV,UAAUC;AACZ,IAAIC,EAAoC;"}
@@ -47,3 +47,4 @@ const c = (r) => (o) => {
47
47
  export {
48
48
  c as createRhfUtilsClient
49
49
  };
50
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/client/index.tsx"],"sourcesContent":["import React from 'react';\nimport type { Resolver } from 'react-hook-form';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfig';\n\nimport type { FormWithProvidersProps } from '@/form/FormWithProviders';\nimport FormWithProviders from '@/form/FormWithProviders';\nimport type { SafeFieldValues } from '@/form/SafeFieldValues';\nimport useRhfUtilsForm from '@/form/useRhfUtilsForm';\nimport type { UseRhfUtilsFormProps } from '@/form/UseRhfUtilsFormProps';\nimport type { UseRhfUtilsFormReturn } from '@/form/UseRhfUtilsFormReturn';\n\nimport { mergeRhfUtilsClientConfigDefaultsWithUseRhfUtilsFormProps } from './utils';\n\n/**\n * Generic object schema type.\n */\nexport type ObjectSchema<\n TInputKey extends string,\n TOutputKey extends string,\n> = {\n [key in TInputKey]: SafeFieldValues; // should have key that returns FieldValues for input\n} & {\n [key in TOutputKey]: SafeFieldValues; // should have key that returns FieldValues for output\n};\n\n//\n\nexport type CreateRhfUtilsClient<\n TObjectSchema extends ObjectSchema<\n TObjectSchemaInputKey,\n TObjectSchemaOutputKey\n >,\n TObjectSchemaInputKey extends string,\n TObjectSchemaOutputKey extends string,\n> = {\n useForm: <\n TSchema extends TObjectSchema,\n TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey],\n TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey],\n UseRhfUtilsFormPropsForm extends UseRhfUtilsFormProps<\n TSchemaInput,\n TSchemaOutput\n > = UseRhfUtilsFormProps<TSchemaInput, TSchemaOutput>,\n >(\n schema: TSchema,\n form: UseRhfUtilsFormPropsForm,\n ) => UseRhfUtilsFormReturn<TSchemaInput, TSchemaOutput> & {\n FormWithProviders: React.FC<React.PropsWithChildren>;\n };\n\n FormWithProviders: <\n TSchema extends TObjectSchema,\n TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey],\n TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey],\n >(\n props: { schema: TSchema } & FormWithProvidersProps<\n TSchemaInput,\n TSchemaOutput\n >,\n ) => JSX.Element;\n};\n\n/**\n * ...\n *\n * (We need to use generics to generate types for schema resolver.)\n */\nexport const createRhfUtilsClient =\n <\n TObjectSchema extends ObjectSchema<\n TObjectSchemaInputKey,\n TObjectSchemaOutputKey\n >,\n TObjectSchemaInputKey extends string,\n TObjectSchemaOutputKey extends string,\n >(\n resolver: (schema: TObjectSchema) => Resolver<SafeFieldValues, unknown>,\n ) =>\n (\n config: RhfUtilsClientConfig,\n ): CreateRhfUtilsClient<\n TObjectSchema,\n TObjectSchemaInputKey,\n TObjectSchemaOutputKey\n > => {\n const _getUseRhfUtilsFormPropsWithResolverAndConfig =\n _getUseRhfUtilsFormProps(resolver, config);\n\n return {\n useForm: <\n TSchema extends TObjectSchema,\n TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey],\n TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey],\n UseRhfUtilsFormPropsForm extends UseRhfUtilsFormProps<\n TSchemaInput,\n TSchemaOutput\n > = UseRhfUtilsFormProps<TSchemaInput, TSchemaOutput>,\n >(\n schema: TSchema,\n form: UseRhfUtilsFormPropsForm,\n ) => {\n const useFormProps = _getUseRhfUtilsFormPropsWithResolverAndConfig<\n TSchema,\n TSchemaInput,\n TSchemaOutput\n >(schema, form);\n\n return {\n ...useRhfUtilsForm(useFormProps),\n FormWithProviders: (): React.ReactNode => {\n return <FormWithProviders {...useFormProps} />;\n },\n };\n },\n FormWithProviders: _getFormWithProviders(resolver, config),\n };\n };\n\nconst _getUseRhfUtilsFormProps = <\n TObjectSchema extends ObjectSchema<\n TObjectSchemaInputKey,\n TObjectSchemaOutputKey\n >,\n TObjectSchemaInputKey extends string,\n TObjectSchemaOutputKey extends string,\n>(\n resolver: (schema: TObjectSchema) => Resolver<SafeFieldValues, unknown>,\n config: RhfUtilsClientConfig,\n) =>\n function _getUseRhfUtilsFormPropsWithResolverAndConfigBySchemaAndFormProps<\n TSchema extends TObjectSchema,\n TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey],\n TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey],\n >(\n schema: TSchema,\n props: UseRhfUtilsFormProps<TSchemaInput, TSchemaOutput>,\n ): UseRhfUtilsFormProps<TSchemaInput, TSchemaOutput> {\n return {\n ...props,\n\n ...mergeRhfUtilsClientConfigDefaultsWithUseRhfUtilsFormProps(\n config.defaults,\n props,\n {\n rhf: {\n resolver: resolver(schema) as Resolver<TSchemaInput, unknown>,\n },\n },\n ),\n };\n };\n\nconst _getFormWithProviders = <\n TObjectSchema extends ObjectSchema<\n TObjectSchemaInputKey,\n TObjectSchemaOutputKey\n >,\n TObjectSchemaInputKey extends string,\n TObjectSchemaOutputKey extends string,\n>(\n resolver: (schema: TObjectSchema) => Resolver<SafeFieldValues, unknown>,\n config: RhfUtilsClientConfig,\n) => {\n const _getUseRhfUtilsFormPropsWithResolverAndConfig =\n _getUseRhfUtilsFormProps<\n TObjectSchema,\n TObjectSchemaInputKey,\n TObjectSchemaOutputKey\n >(resolver, config);\n\n return function _FormWithProviders<\n TSchema extends TObjectSchema,\n TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey],\n TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey],\n >({\n schema,\n children,\n ...props\n }: { schema: TSchema } & FormWithProvidersProps<\n TSchemaInput,\n TSchemaOutput\n >) {\n return (\n <FormWithProviders\n {..._getUseRhfUtilsFormPropsWithResolverAndConfig(schema, props)}\n >\n {children}\n </FormWithProviders>\n );\n };\n};\n"],"names":["createRhfUtilsClient","resolver","config","_getUseRhfUtilsFormPropsWithResolverAndConfig","_getUseRhfUtilsFormProps","schema","form","useFormProps","useRhfUtilsForm","jsx","FormWithProviders","_getFormWithProviders","props","mergeRhfUtilsClientConfigDefaultsWithUseRhfUtilsFormProps","children"],"mappings":";;;;;AAoEO,MAAMA,IACX,CAQEC,MAEF,CACEC,MAKG;AACG,QAAAC,IACJC,EAAyBH,GAAUC,CAAM;AAEpC,SAAA;AAAA,IACL,SAAS,CASPG,GACAC,MACG;AACG,YAAAC,IAAeJ,EAInBE,GAAQC,CAAI;AAEP,aAAA;AAAA,QACL,GAAGE,EAAgBD,CAAY;AAAA,QAC/B,mBAAmB,MACV,gBAAAE,EAACC,GAAmB,EAAA,GAAGH,EAAc,CAAA;AAAA,MAC9C;AAAA,IAEJ;AAAA,IACA,mBAAmBI,EAAsBV,GAAUC,CAAM;AAAA,EAAA;AAE7D,GAEIE,IAA2B,CAQ/BH,GACAC,MAEA,SAKEG,GACAO,GACmD;AAC5C,SAAA;AAAA,IACL,GAAGA;AAAA,IAEH,GAAGC;AAAA,MACDX,EAAO;AAAA,MACPU;AAAA,MACA;AAAA,QACE,KAAK;AAAA,UACH,UAAUX,EAASI,CAAM;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ,GAEIM,IAAwB,CAQ5BV,GACAC,MACG;AACG,QAAAC,IACJC,EAIEH,GAAUC,CAAM;AAEpB,SAAO,SAIL;AAAA,IACA,QAAAG;AAAA,IACA,UAAAS;AAAA,IACA,GAAGF;AAAA,EAAA,GAIF;AAEC,WAAA,gBAAAH;AAAA,MAACC;AAAA,MAAA;AAAA,QACE,GAAGP,EAA8CE,GAAQO,CAAK;AAAA,QAE9D,UAAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAGN;"}
@@ -27,3 +27,4 @@ const i = (l, ...t) => (
27
27
  export {
28
28
  i as mergeRhfUtilsClientConfigDefaultsWithUseRhfUtilsFormProps
29
29
  };
30
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../../../src/client/utils.ts"],"sourcesContent":["import type { RhfUtilsFormOptions } from '@/form/RhfUtilsFormOptions';\nimport type { SafeFieldValues } from '@/form/SafeFieldValues';\nimport type { UseRhfUtilsFormProps } from '@/form/UseRhfUtilsFormProps';\n\nimport type { RhfUtilsClientConfig } from './config/RhfUtilsClientConfig';\n\n/**\n * Merge {@link RhfUtilsClientConfig.defaults} with array of {@link UseRhfUtilsFormProps}'s overrides.\n */\nexport const mergeRhfUtilsClientConfigDefaultsWithUseRhfUtilsFormProps = <\n TFieldValues extends SafeFieldValues,\n TTransformedValues extends SafeFieldValues,\n>(\n defaults: RhfUtilsClientConfig['defaults'],\n ...props: Pick<\n UseRhfUtilsFormProps<TFieldValues, TTransformedValues>,\n 'rhf' | 'utils' | 'form'\n >[]\n) =>\n // sequentially merge each set of props into defaults\n props.reduce(\n (acc, curr) => ({\n rhf: {\n ...acc?.rhf,\n ...curr.rhf,\n },\n\n utils: {\n ...acc?.utils,\n ...curr.utils,\n } satisfies RhfUtilsFormOptions,\n\n form: {\n ...acc?.form,\n ...curr.form,\n className: [acc?.form?.className, curr.form?.className]\n .filter(Boolean) // filter out falsy values\n .join(' '), // stringify\n },\n }),\n\n // start with defaults\n defaults,\n );\n"],"names":["mergeRhfUtilsClientConfigDefaultsWithUseRhfUtilsFormProps","defaults","props","acc","curr","_a","_b"],"mappings":"AASa,MAAAA,IAA4D,CAIvEC,MACGC;AAAA;AAAA,EAMHA,EAAM;AAAA,IACJ,CAACC,GAAKC,MAAU;AAZP,UAAAC,GAAAC;AAYO;AAAA,QACd,KAAK;AAAA,UACH,GAAGH,KAAA,gBAAAA,EAAK;AAAA,UACR,GAAGC,EAAK;AAAA,QACV;AAAA,QAEA,OAAO;AAAA,UACL,GAAGD,KAAA,gBAAAA,EAAK;AAAA,UACR,GAAGC,EAAK;AAAA,QACV;AAAA,QAEA,MAAM;AAAA,UACJ,GAAGD,KAAA,gBAAAA,EAAK;AAAA,UACR,GAAGC,EAAK;AAAA,UACR,WAAW,EAACC,IAAAF,KAAA,gBAAAA,EAAK,SAAL,gBAAAE,EAAW,YAAWC,IAAAF,EAAK,SAAL,gBAAAE,EAAW,SAAS,EACnD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA;AAAA,QACb;AAAA,MAAA;AAAA;AAAA;AAAA,IAIFL;AAAA,EACF;AAAA;"}
@@ -13,3 +13,4 @@ const d = ({
13
13
  export {
14
14
  p as default
15
15
  };
16
+ //# sourceMappingURL=RhfUtilsClientForZodContextProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhfUtilsClientForZodContextProvider.mjs","sources":["../../../../../src/client/zod/context/RhfUtilsClientForZodContextProvider.tsx"],"sourcesContent":["import React from 'react';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfig';\nimport { _RhfUtilsClientConfigContextProvider } from '@/client/config/useRhfUtilsClientConfigContext';\n\nimport createRhfUtilsClientForZod from '../createRhfUtilsClientForZod';\n\nimport { _RhfUtilsClientForZodContextProvider } from './useRhfUtilsClientForZodContext';\n\ntype Props = React.PropsWithChildren<{\n config: RhfUtilsClientConfig;\n}>;\n\nconst RhfUtilsClientForZodContextProvider: React.FC<Props> = ({\n config,\n children,\n}) => {\n const [_config] = React.useState(config); // memo-ize initial value\n const [_client] = React.useState(() => createRhfUtilsClientForZod(_config));\n\n return (\n <_RhfUtilsClientConfigContextProvider value={_config}>\n <_RhfUtilsClientForZodContextProvider value={_client}>\n {children}\n </_RhfUtilsClientForZodContextProvider>\n </_RhfUtilsClientConfigContextProvider>\n );\n};\n\nexport default RhfUtilsClientForZodContextProvider;\n"],"names":["RhfUtilsClientForZodContextProvider","config","children","_config","React","_client","createRhfUtilsClientForZod","jsx","_RhfUtilsClientConfigContextProvider","_RhfUtilsClientForZodContextProvider","RhfUtilsClientForZodContextProvider$1"],"mappings":";;;;;AAaA,MAAMA,IAAuD,CAAC;AAAA,EAC5D,QAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACJ,QAAM,CAACC,CAAO,IAAIC,EAAM,SAASH,CAAM,GACjC,CAACI,CAAO,IAAID,EAAM,SAAS,MAAME,EAA2BH,CAAO,CAAC;AAGxE,SAAA,gBAAAI,EAACC,KAAqC,OAAOL,GAC3C,4BAACM,GAAqC,EAAA,OAAOJ,GAC1C,UAAAH,EACH,CAAA,EACF,CAAA;AAEJ,GAEAQ,IAAeV;"}
@@ -10,3 +10,4 @@ function m({
10
10
  export {
11
11
  m as default
12
12
  };
13
+ //# sourceMappingURL=RhfUtilsZodForm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RhfUtilsZodForm.mjs","sources":["../../../../../src/client/zod/context/RhfUtilsZodForm.tsx"],"sourcesContent":["import type { UseRhfUtilsFormProps } from '@/form/UseRhfUtilsFormProps';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport type { ZodTypeFieldValues } from '../ZodTypeFieldValues';\n\nimport useRhfUtilsClientForZodContext from './useRhfUtilsClientForZodContext';\n\ntype Props<TSchema extends ZodTypeFieldValues> = {\n schema: TSchema;\n} & UseRhfUtilsFormProps<\n TSchema[typeof zodTypeInput],\n TSchema[typeof zodTypeOutput]\n>;\n\nfunction RhfUtilsZodForm<TSchema extends ZodTypeFieldValues>({\n schema,\n ...props\n}: Props<TSchema>) {\n const { FormWithProviders } = useRhfUtilsClientForZodContext();\n\n return <FormWithProviders schema={schema} {...props} />;\n}\n\nexport default RhfUtilsZodForm;\n"],"names":["RhfUtilsZodForm","schema","props","FormWithProviders","useRhfUtilsClientForZodContext","jsx"],"mappings":";;AAcA,SAASA,EAAoD;AAAA,EAC3D,QAAAC;AAAA,EACA,GAAGC;AACL,GAAmB;AACX,QAAA,EAAE,mBAAAC,MAAsBC;AAE9B,SAAQ,gBAAAC,EAAAF,GAAA,EAAkB,QAAAF,GAAiB,GAAGC,EAAO,CAAA;AACvD;"}
@@ -7,3 +7,4 @@ export {
7
7
  o as _RhfUtilsClientForZodContextProvider,
8
8
  r as default
9
9
  };
10
+ //# sourceMappingURL=useRhfUtilsClientForZodContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRhfUtilsClientForZodContext.mjs","sources":["../../../../../src/client/zod/context/useRhfUtilsClientForZodContext.tsx"],"sourcesContent":["import createContext from '@/utils/createContext';\n\nimport type createRhfUtilsClientForZod from '../createRhfUtilsClientForZod';\n\nexport type RhfUtilsClientForZodContext = ReturnType<\n typeof createRhfUtilsClientForZod\n>;\n\nconst {\n Provider: _RhfUtilsClientForZodContextProvider,\n useRequired: useRhfUtilsClientForZodContext,\n} = createContext<RhfUtilsClientForZodContext>();\n\n//\n\nexport default useRhfUtilsClientForZodContext;\n\n//\n\nexport { _RhfUtilsClientForZodContextProvider };\n"],"names":["_RhfUtilsClientForZodContextProvider","useRhfUtilsClientForZodContext","createContext"],"mappings":";AAQM,MAAA;AAAA,EACJ,UAAUA;AAAA,EACV,aAAaC;AACf,IAAIC,EAA2C;"}
@@ -3,3 +3,4 @@ const e = (o, t) => s().useForm(o, t), f = e;
3
3
  export {
4
4
  f as default
5
5
  };
6
+ //# sourceMappingURL=useRhfUtilsZodForm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRhfUtilsZodForm.mjs","sources":["../../../../../src/client/zod/context/useRhfUtilsZodForm.ts"],"sourcesContent":["import type { UseRhfUtilsFormProps } from '@/form/UseRhfUtilsFormProps';\n\nimport type { zodTypeInput, zodTypeOutput } from '../consts';\nimport type { ZodTypeFieldValues } from '../ZodTypeFieldValues';\n\nimport useRhfUtilsClientForZodContext from './useRhfUtilsClientForZodContext';\n\nconst useRhfUtilsZodForm = <TSchema extends ZodTypeFieldValues>(\n schema: TSchema,\n form: UseRhfUtilsFormProps<\n TSchema[typeof zodTypeInput],\n TSchema[typeof zodTypeOutput]\n >,\n) => useRhfUtilsClientForZodContext().useForm(schema, form);\n\nexport default useRhfUtilsZodForm;\n"],"names":["useRhfUtilsZodForm","schema","form","useRhfUtilsClientForZodContext","useRhfUtilsZodForm$1"],"mappings":";AAOA,MAAMA,IAAqB,CACzBC,GACAC,MAIGC,EAAiC,EAAA,QAAQF,GAAQC,CAAI,GAE1DE,IAAeJ;"}
@@ -4,3 +4,4 @@ const i = e(t);
4
4
  export {
5
5
  i as default
6
6
  };
7
+ //# sourceMappingURL=createRhfUtilsClientForZod.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRhfUtilsClientForZod.mjs","sources":["../../../../src/client/zod/createRhfUtilsClientForZod.tsx"],"sourcesContent":["import { zodResolver } from '@hookform/resolvers/zod';\n\nimport { createRhfUtilsClient } from '..';\n\nimport { zodTypeInput, zodTypeOutput } from './consts';\nimport type { ZodTypeFieldValues } from './ZodTypeFieldValues';\n\nconst createRhfUtilsClientForZod = createRhfUtilsClient<\n ZodTypeFieldValues,\n typeof zodTypeInput,\n typeof zodTypeOutput\n>(zodResolver);\n\nexport default createRhfUtilsClientForZod;\n"],"names":["createRhfUtilsClientForZod","createRhfUtilsClient","zodResolver"],"mappings":";;AAOM,MAAAA,IAA6BC,EAIjCC,CAAW;"}
@@ -13,3 +13,4 @@ const a = e.lazy(
13
13
  export {
14
14
  u as default
15
15
  };
16
+ //# sourceMappingURL=LazyDevTool.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LazyDevTool.mjs","sources":["../../../src/devtool/LazyDevTool.tsx"],"sourcesContent":["import type { DevtoolUIProps } from '@hookform/devtools/dist/devToolUI';\nimport React from 'react';\nimport { useFormContext } from 'react-hook-form';\n\nconst LazyRhfDevTool = React.lazy(() =>\n import('@hookform/devtools').then((res) => ({\n default: res.DevTool,\n })),\n);\n\ntype LazyDevToolProps = {\n isDevelopment?: boolean;\n props?: Omit<DevtoolUIProps, 'control'>;\n};\n\n/**\n * Lazy-loaded RHF DevTool.\n */\nconst LazyDevTool: React.FC<LazyDevToolProps> = ({ isDevelopment, props }) => {\n // early escape for non-dev builds\n if (!isDevelopment) return null;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const { control } = useFormContext();\n\n return (\n <React.Suspense fallback={null}>\n <LazyRhfDevTool control={control} {...props} />\n </React.Suspense>\n );\n};\n\nexport default LazyDevTool;\n"],"names":["LazyRhfDevTool","React","res","LazyDevTool","isDevelopment","props","control","useFormContext","jsx"],"mappings":";;;AAIA,MAAMA,IAAiBC,EAAM;AAAA,EAAK,MAChC,OAAO,oBAAoB,EAAE,KAAK,CAACC,OAAS;AAAA,IAC1C,SAASA,EAAI;AAAA,EAAA,EACb;AACJ,GAUMC,IAA0C,CAAC,EAAE,eAAAC,GAAe,OAAAC,QAAY;AAExE,MAAA,CAACD,EAAsB,QAAA;AAGrB,QAAA,EAAE,SAAAE,MAAYC;AAGlB,SAAA,gBAAAC,EAACP,EAAM,UAAN,EAAe,UAAU,MACxB,UAAA,gBAAAO,EAACR,GAAe,EAAA,SAAAM,GAAmB,GAAGD,EAAO,CAAA,EAC/C,CAAA;AAEJ;"}
@@ -15,3 +15,4 @@ const o = ({ errors: e }) => {
15
15
  export {
16
16
  o as default
17
17
  };
18
+ //# sourceMappingURL=FlatFieldErrorsList.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlatFieldErrorsList.mjs","sources":["../../../../src/errors/flat/FlatFieldErrorsList.tsx"],"sourcesContent":["import isEmptyObject from '@/utils/isEmptyObject';\n\nimport type { FlatFieldErrors } from './types';\n\nexport type Props = {\n errors: FlatFieldErrors | null | undefined;\n};\n\nconst FlatFieldErrorsList: React.FC<Props> = ({ errors }) => {\n if (!errors) return;\n if (isEmptyObject(errors)) return;\n\n return (\n <ul>\n {Object.values(errors).map((value, index) => (\n <li\n key={index}\n role=\"alert\"\n aria-live=\"polite\" // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-live\n >\n {value.message}\n </li>\n ))}\n </ul>\n );\n};\n\nexport default FlatFieldErrorsList;\n"],"names":["FlatFieldErrorsList","errors","isEmptyObject","jsx","value","index"],"mappings":";;AAQA,MAAMA,IAAuC,CAAC,EAAE,QAAAC,QAAa;AAC3D,MAAKA,KACD,CAAAC,EAAcD,CAAM;AAGtB,WAAA,gBAAAE,EAAC,QACE,UAAO,OAAA,OAAOF,CAAM,EAAE,IAAI,CAACG,GAAOC,MACjC,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,aAAU;AAAA,QAET,UAAMC,EAAA;AAAA,MAAA;AAAA,MAJFC;AAAA,IAMR,CAAA,EACH,CAAA;AAEJ;"}
@@ -25,3 +25,4 @@ const C = ({
25
25
  export {
26
26
  C as default
27
27
  };
28
+ //# sourceMappingURL=FlatFieldErrorsContextProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlatFieldErrorsContextProvider.mjs","sources":["../../../../../src/errors/flat/context/FlatFieldErrorsContextProvider.tsx"],"sourcesContent":["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>;\n}>;\n\n/**\n * Provides a flattened version of the form errors.\n * Allows flattening and filtering to happen once per errors change.\n */\nconst FlatFieldErrorsContextProvider: React.FC<Props> = ({\n formRef,\n children,\n}) => {\n const { errors } = useFormState();\n\n const all = getFlatFieldErrors(errors);\n\n const orphans = formRef.current\n ? getOrphansFromFlatFieldErrors(all, formRef.current)\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\nexport default FlatFieldErrorsContextProvider;\n"],"names":["FlatFieldErrorsContextProvider","formRef","children","errors","useFormState","all","getFlatFieldErrors","orphans","getOrphansFromFlatFieldErrors","value","getRefdFromFlatFieldErrors","getRootsFromFlatFieldErrors","isEmptyObject","jsx","_FormErrorsFlatContextProvider"],"mappings":";;;;;;;;;AAsBA,MAAMA,IAAkD,CAAC;AAAA,EACvD,SAAAC;AAAA,EACA,UAAAC;AACF,MAAM;AACE,QAAA,EAAE,QAAAC,MAAWC,KAEbC,IAAMC,EAAmBH,CAAM,GAE/BI,IAAUN,EAAQ,UACpBO,EAA8BH,GAAKJ,EAAQ,OAAO,IAClD,IAEEQ,IAAQ;AAAA,IACZ,KAAAJ;AAAA,IACA,QAAQK,EAA2BL,CAAG;AAAA,IACtC,OAAOM,EAA4BN,CAAG;AAAA,IACtC,SAAAE;AAAA;AAAA,IAEA,WAAW,CAACK,EAAcT,CAAM;AAAA,IAChC,YAAY,CAACS,EAAcL,CAAO;AAAA,EAAA;AAIlC,SAAA,gBAAAM,EAACC,GAA+B,EAAA,OAAAL,GAC7B,UAAAP,EACH,CAAA;AAEJ;"}
@@ -7,3 +7,4 @@ export {
7
7
  o as _FormErrorsFlatContextProvider,
8
8
  s as default
9
9
  };
10
+ //# sourceMappingURL=useFlatFieldErrorsContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFlatFieldErrorsContext.mjs","sources":["../../../../../src/errors/flat/context/useFlatFieldErrorsContext.ts"],"sourcesContent":["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 default useFlatFieldErrorsContext;\n\n//\n\nexport { _FormErrorsFlatContextProvider };\n"],"names":["_FormErrorsFlatContextProvider","useFlatFieldErrorsContext","createContext","useFlatFieldErrorsContext$1"],"mappings":";AAcM,MAAA;AAAA,EACJ,UAAUA;AAAA,EACV,aAAaC;AACf,IAAIC,EAAsC,GAI1CC,IAAeF;"}
@@ -7,3 +7,4 @@ const t = () => {
7
7
  export {
8
8
  l as default
9
9
  };
10
+ //# sourceMappingURL=useFlatFieldErrorsContextHasOnlyOrphans.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFlatFieldErrorsContextHasOnlyOrphans.mjs","sources":["../../../../../src/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.ts"],"sourcesContent":["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 */\nconst 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\nexport default useFlatFieldErrorsContextHasOnlyOrphans;\n"],"names":["useFlatFieldErrorsContextHasOnlyOrphans","errors","useFlatFieldErrorsContext","React","useFlatFieldErrorsContextHasOnlyOrphans$1"],"mappings":";;AASA,MAAMA,IAA0C,MAAM;AACpD,QAAMC,IAASC;AAaR,SAXgBC,EAAM,QAAQ,MAE/B,CAACF,EAAO,aACR,CAACA,EAAO,aAAmB,KAI7B,OAAO,KAAKA,EAAO,OAAO,EAAE,WAAW,OAAO,KAAKA,EAAO,GAAG,EAAE,QAEhE,CAACA,CAAM,CAAC;AAGb,GAEAG,IAAeJ;"}
@@ -22,3 +22,4 @@ const C = (r) => {
22
22
  export {
23
23
  C as default
24
24
  };
25
+ //# sourceMappingURL=useFlatFieldErrorsContextOutput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFlatFieldErrorsContextOutput.mjs","sources":["../../../../../src/errors/flat/context/useFlatFieldErrorsContextOutput.ts"],"sourcesContent":["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 */\nconst 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\nexport default useFlatFieldErrorsContextOutput;\n\nconst defaultMessage = 'Form errors';\n"],"names":["useFlatFieldErrorsContextOutput","config","form","useFormContext","errors","useFlatFieldErrorsContext","React","console","_a","consoleErrors","defaultMessage","_throw","_b"],"mappings":";;;;AAWM,MAAAA,IAAkC,CACtCC,MACG;AACH,QAAMC,IAAOC,KAEPC,IAASC;AAIf,EAAAC,EAAM,UAAU,MAAM;;AAEhB,QAAA,CAACF,EAAO,UAAW;AAIjB,UAAAG,KAAUC,IAAAP,KAAA,gBAAAA,EAAQ,YAAR,gBAAAO,EAAA,KAAAP,GAAkBG;AAElC,IAAIG,KACFE;AAAA,MACEF,EAAQ,WAAWG;AAAA,MACnBR,EAAK,UAAU;AAAA,MACfE;AAAA,MACAG,EAAQ;AAAA,IAAA;AAMN,UAAAI,KAASC,IAAAX,KAAA,gBAAAA,EAAQ,UAAR,gBAAAW,EAAA,KAAAX,GAAgBG;AAE3B,QAAAO;AACF,YAAM,IAAI,MAAM,OAAOA,KAAW,WAAWA,IAASD,CAAc;AAAA,EAAA,GACrE,CAACN,CAAM,CAAC;AACb,GAIMM,IAAiB;"}
@@ -8,3 +8,4 @@ const r = (e) => (t) => (
8
8
  export {
9
9
  r as default
10
10
  };
11
+ //# sourceMappingURL=filterFlatFieldErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filterFlatFieldErrors.mjs","sources":["../../../../src/errors/flat/filterFlatFieldErrors.ts"],"sourcesContent":["import type { FlatFieldErrorEntry, FlatFieldErrors } from './types';\n\n/**\n * Filter {@link FlatFieldErrors} by a predicate.\n *\n * (Encapsulates to and from Object entries.)\n */\nconst 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\nexport default makeFlatFieldErrorsFilter;\n"],"names":["makeFlatFieldErrorsFilter","predicate","errors"],"mappings":"AAOM,MAAAA,IACJ,CAACC,MACD,CAACC;AAAA;AAAA,EAEC,OAAO;AAAA;AAAA,IAEL,OAAO,QAAQA,CAAM,EAElB,OAAOD,CAAS;AAAA,EACrB;AAAA;"}
@@ -3,3 +3,4 @@ const o = (t) => r(t);
3
3
  export {
4
4
  o as default
5
5
  };
6
+ //# sourceMappingURL=flattenFieldErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flattenFieldErrors.mjs","sources":["../../../../src/errors/flat/flattenFieldErrors.ts"],"sourcesContent":["import { flatten } from 'flat';\nimport type { FieldErrors } from 'react-hook-form';\n\n/**\n * Only flattens a {@link FieldErrors} object.\n * @returns e.g.,\n * ```\n * {\n * \"address.street.type\": \"too_short\",\n * \"address.street.ref.value\": \"123\",\n * \"address.street.message\": \"Required.\"\n * }\n * ```\n */\nconst flattenFieldErrors = (errors: FieldErrors) =>\n flatten<FieldErrors, Record<string, unknown>>(errors);\n\nexport default flattenFieldErrors;\n"],"names":["flattenFieldErrors","errors","flatten"],"mappings":";AAcA,MAAMA,IAAqB,CAACC,MAC1BC,EAA8CD,CAAM;"}
@@ -22,3 +22,4 @@ export {
22
22
  u as default,
23
23
  d as regexMaybeFieldErrorLeafNodeSuffix
24
24
  };
25
+ //# sourceMappingURL=getFlatFieldErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFlatFieldErrors.mjs","sources":["../../../../src/errors/flat/getFlatFieldErrors.ts"],"sourcesContent":["import type { FieldError, FieldErrors } from 'react-hook-form';\nimport { get } from 'react-hook-form';\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 */\nconst 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 (entries, flattenedKey) => {\n // remove possible leaf node suffix from flattened key\n const path = flattenedKey.replace(\n regexMaybeFieldErrorLeafNodeSuffix,\n '',\n );\n\n // if nothing replaced, then it's not a leaf node; return early\n if (path === flattenedKey) return entries;\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, path, undefined) as\n | FieldError\n | undefined;\n\n // if no field error found, then key was wrong; return early\n if (!fieldError) return entries;\n\n // add entry\n entries.push([path, fieldError]);\n\n // if dupe, doesn't matter -- i.e., `.type` leaf node matched before `.message`\n // Object.entries will overwrite dupe with same key/value\n\n return entries;\n },\n\n [], // entries\n ),\n );\n};\n\nexport default getFlatFieldErrors;\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"],"names":["getFlatFieldErrors","errors","flattened","flattenFieldErrors","flattenedKeys","entries","flattenedKey","path","regexMaybeFieldErrorLeafNodeSuffix","fieldError","get"],"mappings":";;AAyBM,MAAAA,IAAqB,CAACC,MAAyC;AAE7D,QAAAC,IAAYC,EAAmBF,CAAM,GAGrCG,IAAgB,OAAO,KAAKF,CAAS;AAG3C,SAAO,OAAO;AAAA,IACZE,EAAc;AAAA,MACZ,CAACC,GAASC,MAAiB;AAEzB,cAAMC,IAAOD,EAAa;AAAA,UACxBE;AAAA,UACA;AAAA,QAAA;AAIE,YAAAD,MAASD,EAAqB,QAAAD;AAIlC,cAAMI,IAAaC,EAAIT,GAAQM,GAAM,MAAS;AAK1C,eAACE,KAGLJ,EAAQ,KAAK,CAACE,GAAME,CAAU,CAAC,GAKxBJ;AAAA,MACT;AAAA,MAEA,CAAC;AAAA;AAAA,IACH;AAAA,EAAA;AAEJ,GAaaG,IAAqC;"}
@@ -6,3 +6,4 @@ const l = r(
6
6
  export {
7
7
  l as default
8
8
  };
9
+ //# sourceMappingURL=getRefdFromFlatFieldErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRefdFromFlatFieldErrors.mjs","sources":["../../../src/errors/getRefdFromFlatFieldErrors.ts"],"sourcesContent":["import makeFlatFieldErrorsFilter from './flat/filterFlatFieldErrors';\nimport isFlatFieldErrorEntryRefd from './isFlatFieldErrorEntryRefd';\n\nconst getRefdFromFlatFieldErrors = makeFlatFieldErrorsFilter(\n isFlatFieldErrorEntryRefd,\n);\n\nexport default getRefdFromFlatFieldErrors;\n"],"names":["getRefdFromFlatFieldErrors","makeFlatFieldErrorsFilter","isFlatFieldErrorEntryRefd"],"mappings":";;AAGA,MAAMA,IAA6BC;AAAA,EACjCC;AACF;"}
@@ -2,3 +2,4 @@ const r = (e) => !!e.ref;
2
2
  export {
3
3
  r as default
4
4
  };
5
+ //# sourceMappingURL=isFieldErrorRefd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFieldErrorRefd.mjs","sources":["../../../src/errors/isFieldErrorRefd.ts"],"sourcesContent":["import type { FieldError } from 'react-hook-form';\n\n/**\n * Determine if {@link FieldError} is a `ref`'d field error.\n */\nconst isFieldErrorRefd = (error: FieldError): boolean => !!error.ref;\n\nexport default isFieldErrorRefd;\n"],"names":["isFieldErrorRefd","error"],"mappings":"AAKA,MAAMA,IAAmB,CAACC,MAA+B,CAAC,CAACA,EAAM;"}
@@ -3,3 +3,4 @@ const t = ([, r]) => e(r);
3
3
  export {
4
4
  t as default
5
5
  };
6
+ //# sourceMappingURL=isFlatFieldErrorEntryRefd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFlatFieldErrorEntryRefd.mjs","sources":["../../../src/errors/isFlatFieldErrorEntryRefd.ts"],"sourcesContent":["import type { FlatFieldErrorEntry } from './flat/types';\nimport isFieldErrorRefd from './isFieldErrorRefd';\n\n/**\n * Determine if {@link FieldError} is a `ref`'d field error.\n */\nconst isFlatFieldErrorEntryRefd = ([, error]: FlatFieldErrorEntry): boolean =>\n isFieldErrorRefd(error);\n\nexport default isFlatFieldErrorEntryRefd;\n"],"names":["isFlatFieldErrorEntryRefd","error","isFieldErrorRefd"],"mappings":";AAMA,MAAMA,IAA4B,CAAC,CAAA,EAAGC,CAAK,MACzCC,EAAiBD,CAAK;"}
@@ -12,3 +12,4 @@ const i = ({ message: r, className: e }) => /* @__PURE__ */ o(
12
12
  export {
13
13
  i as default
14
14
  };
15
+ //# sourceMappingURL=FormErrorMessage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormErrorMessage.mjs","sources":["../../../../src/errors/message/FormErrorMessage.tsx"],"sourcesContent":["import React from 'react';\n\ntype Props = { message: string; className?: string };\n\nconst FormErrorMessage: React.FC<Props> = ({ message, className }) => (\n <p\n role=\"alert\"\n aria-live=\"polite\" // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-live\n className={className}\n >\n {message}\n </p>\n);\n\nexport default FormErrorMessage;\n"],"names":["FormErrorMessage","message","className","jsx"],"mappings":";;AAIA,MAAMA,IAAoC,CAAC,EAAE,SAAAC,GAAS,WAAAC,EACpD,MAAA,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,aAAU;AAAA,IACV,WAAAD;AAAA,IAEC,UAAAD;AAAA,EAAA;AACH;"}
@@ -12,3 +12,4 @@ const f = ({ path: o, Component: s }) => {
12
12
  export {
13
13
  E as default
14
14
  };
15
+ //# sourceMappingURL=FormErrorMessageByPath.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormErrorMessageByPath.mjs","sources":["../../../../src/errors/message/FormErrorMessageByPath.tsx"],"sourcesContent":["import type { FieldError } from 'react-hook-form';\nimport { get, useFormState } from 'react-hook-form';\n\nimport FormNonFieldErrorMarker from '../nonfield/FormNonFieldErrorMarker';\n\nimport FormErrorMessage from './FormErrorMessage';\n\ntype Props = {\n /** Field name as flat path. (e.g., \"address.street\") */\n path: string;\n /** Optional component to use to display message. (Defaults to {@link FormErrorMessage}) */\n Component?: React.FC<{ message: string }>;\n};\n\nconst FormErrorMessageByPath: React.FC<Props> = ({ path, Component }) => {\n const { errors } = useFormState();\n\n const error = get(errors, path, undefined) as FieldError | undefined;\n\n const _Component = Component ?? FormErrorMessage;\n\n if (!error?.message) return null;\n\n return (\n <>\n {/* marker (only required for non-root non-field errors) */}\n <FormNonFieldErrorMarker path={path} />\n\n {/* error message */}\n <_Component message={error.message} />\n </>\n );\n};\n\nexport default FormErrorMessageByPath;\n"],"names":["FormErrorMessageByPath","path","Component","errors","useFormState","error","get","_Component","FormErrorMessage","jsxs","Fragment","jsx","FormNonFieldErrorMarker","FormErrorMessageByPath$1"],"mappings":";;;;AAcA,MAAMA,IAA0C,CAAC,EAAE,MAAAC,GAAM,WAAAC,QAAgB;AACjE,QAAA,EAAE,QAAAC,MAAWC,KAEbC,IAAQC,EAAIH,GAAQF,GAAM,MAAS,GAEnCM,IAAaL,KAAaM;AAE5B,SAACH,KAAA,QAAAA,EAAO,UAKR,gBAAAI,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAwB,MAAAX,GAAY;AAAA,IAGpC,gBAAAU,EAAAJ,GAAA,EAAW,SAASF,EAAM,QAAS,CAAA;AAAA,EACtC,EAAA,CAAA,IAT0B;AAW9B,GAEAQ,IAAeb;"}
@@ -17,3 +17,4 @@ const a = ({ path: r }) => {
17
17
  export {
18
18
  d as default
19
19
  };
20
+ //# sourceMappingURL=FormNonFieldErrorMarker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormNonFieldErrorMarker.mjs","sources":["../../../../src/errors/nonfield/FormNonFieldErrorMarker.tsx"],"sourcesContent":["import FormNonFieldErrorMarkerHtmlAttribute from './FormNonFieldErrorMarkerHtmlAttribute';\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 */\nconst FormNonFieldErrorMarker: React.FC<Props> = ({ path }) => {\n const dataAttribute = {\n [FormNonFieldErrorMarkerHtmlAttribute]: 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\nexport default FormNonFieldErrorMarker;\n"],"names":["FormNonFieldErrorMarker","path","dataAttribute","FormNonFieldErrorMarkerHtmlAttribute","jsx","FormNonFieldErrorMarker$1"],"mappings":";;AAcA,MAAMA,IAA2C,CAAC,EAAE,MAAAC,QAAW;AAC7D,QAAMC,IAAgB;AAAA,IACpB,CAACC,CAAoC,GAAGF;AAAA,EAAA;AAIxC,SAAA,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,OAAO,EAAE,SAAS,OAAO;AAAA,MACxB,GAAGF;AAAA,IAAA;AAAA,EAAA;AAGV,GAEAG,IAAeL;"}
@@ -21,3 +21,4 @@ const m = (r, e) => (
21
21
  export {
22
22
  m as getFormNonFieldErrorMarkerQuerySelector
23
23
  };
24
+ //# sourceMappingURL=FormNonFieldErrorMarker.utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormNonFieldErrorMarker.utils.mjs","sources":["../../../../src/errors/nonfield/FormNonFieldErrorMarker.utils.ts"],"sourcesContent":["import FormNonFieldErrorMarkerHtmlAttribute from './FormNonFieldErrorMarkerHtmlAttribute';\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 getFormNonFieldErrorMarkerQuerySelector = (\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 FormNonFieldErrorMarkerHtmlAttribute + 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"],"names":["getFormNonFieldErrorMarkerQuerySelector","path","options","attrSuffix","pathSuffix","_getQuerySelector","FormNonFieldErrorMarkerHtmlAttribute","attr","value"],"mappings":";AAQa,MAAAA,IAA0C,CACrDC,GACAC;AAAA;AAAA,EAgBI;AAAA;AAAA;AAAA,IAGE,CAAC,IAAI,EAAE;AAAA,IAOD;AAAA;AAAA,MAEE;AAAA;AAAA,MAEA;AAAA,IACF;AAAA,EACF,EAGL;AAAA,IAAI,CAAC,CAACC,GAAYC,CAAU,MAC3BC;AAAA,MACEC,IAAuCH;AAAA,MACvCF,IAAOG;AAAA,IACT;AAAA,EAAA,EAID,KAAK,IAAI;AAAA,GAMVC,IAAoB,CAACE,GAAcC,MACvC,kBAAkBD,CAAI,KAAKC,CAAK;"}
@@ -2,3 +2,4 @@ const r = "data-paragrav-rhf-utils-nonfield-error-marker-path";
2
2
  export {
3
3
  r as default
4
4
  };
5
+ //# sourceMappingURL=FormNonFieldErrorMarkerHtmlAttribute.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormNonFieldErrorMarkerHtmlAttribute.mjs","sources":["../../../../src/errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute.ts"],"sourcesContent":["/**\n * HTML data attribute for {@link FormNonFieldErrorMarker}.\n */\nconst FormNonFieldErrorMarkerHtmlAttribute =\n 'data-paragrav-rhf-utils-nonfield-error-marker-path';\n\nexport default FormNonFieldErrorMarkerHtmlAttribute;\n"],"names":["FormNonFieldErrorMarkerHtmlAttribute"],"mappings":"AAGA,MAAMA,IACJ;"}
@@ -3,3 +3,4 @@ const l = (r, e) => !!e.querySelector(o(r));
3
3
  export {
4
4
  l as default
5
5
  };
6
+ //# sourceMappingURL=isNonFieldErrorMarkerInDOM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isNonFieldErrorMarkerInDOM.mjs","sources":["../../../../src/errors/nonfield/isNonFieldErrorMarkerInDOM.ts"],"sourcesContent":["import { getFormNonFieldErrorMarkerQuerySelector } from './FormNonFieldErrorMarker.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 */\nconst isNonFieldErrorMarkerInDOM = (\n path: string,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n): boolean =>\n !!parentElement.querySelector(getFormNonFieldErrorMarkerQuerySelector(path));\n\nexport default isNonFieldErrorMarkerInDOM;\n"],"names":["isNonFieldErrorMarkerInDOM","path","parentElement","getFormNonFieldErrorMarkerQuerySelector"],"mappings":";AAMM,MAAAA,IAA6B,CACjCC,GACAC,MAEA,CAAC,CAACA,EAAc,cAAcC,EAAwCF,CAAI,CAAC;"}
@@ -3,3 +3,4 @@ const n = (r) => ([t, e]) => o(t, e, r);
3
3
  export {
4
4
  n as default
5
5
  };
6
+ //# sourceMappingURL=getIsOrphanFormErrorWithParentElement.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getIsOrphanFormErrorWithParentElement.mjs","sources":["../../../../src/errors/orphan/getIsOrphanFormErrorWithParentElement.ts"],"sourcesContent":["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 */\nconst getIsFlatFieldErrorEntryOrphanByParentElement =\n (parentElement: Pick<HTMLElement, 'querySelector'>) =>\n ([path, error]: FlatFieldErrorEntry) =>\n isOrphanFormError(path, error, parentElement);\n\nexport default getIsFlatFieldErrorEntryOrphanByParentElement;\n"],"names":["getIsFlatFieldErrorEntryOrphanByParentElement","parentElement","path","error","isOrphanFormError"],"mappings":";AAOM,MAAAA,IACJ,CAACC,MACD,CAAC,CAACC,GAAMC,CAAK,MACXC,EAAkBF,GAAMC,GAAOF,CAAa;"}
@@ -6,3 +6,4 @@ const F = (r, t) => e(
6
6
  export {
7
7
  F as default
8
8
  };
9
+ //# sourceMappingURL=getOrphansFromFlatFieldErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrphansFromFlatFieldErrors.mjs","sources":["../../../../src/errors/orphan/getOrphansFromFlatFieldErrors.ts"],"sourcesContent":["import makeFlatFieldErrorsFilter from '../flat/filterFlatFieldErrors';\nimport type { FlatFieldErrors } from '../flat/types';\n\nimport getIsFlatFieldErrorEntryOrphanByParentElement from './getIsOrphanFormErrorWithParentElement';\n\nconst getOrphansFromFlatFieldErrors = (\n errors: FlatFieldErrors,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n): FlatFieldErrors =>\n makeFlatFieldErrorsFilter(\n getIsFlatFieldErrorEntryOrphanByParentElement(parentElement),\n )(errors);\n\nexport default getOrphansFromFlatFieldErrors;\n"],"names":["getOrphansFromFlatFieldErrors","errors","parentElement","makeFlatFieldErrorsFilter","getIsFlatFieldErrorEntryOrphanByParentElement"],"mappings":";;AAKM,MAAAA,IAAgC,CACpCC,GACAC,MAEAC;AAAA,EACEC,EAA8CF,CAAa;AAC7D,EAAED,CAAM;"}
@@ -10,3 +10,4 @@ const d = (r, o, i) => (
10
10
  export {
11
11
  d as default
12
12
  };
13
+ //# sourceMappingURL=isOrphanFormError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isOrphanFormError.mjs","sources":["../../../../src/errors/orphan/isOrphanFormError.ts"],"sourcesContent":["import type { FieldError } from 'react-hook-form';\n\nimport isFieldErrorRefd from '../isFieldErrorRefd';\nimport isNonFieldErrorMarkerInDOM from '../nonfield/isNonFieldErrorMarkerInDOM';\nimport isFormErrorPathRoot from '../root/isFormErrorPathRoot';\n\nconst isOrphanFormError = (\n path: string,\n error: FieldError,\n parentElement: Pick<HTMLElement, 'querySelector'>,\n) =>\n // not root path\n !isFormErrorPathRoot(path) &&\n // non-field\n !isFieldErrorRefd(error) &&\n // not marked in DOM\n !isNonFieldErrorMarkerInDOM(path, parentElement);\n\nexport default isOrphanFormError;\n"],"names":["isOrphanFormError","path","error","parentElement","isFormErrorPathRoot","isFieldErrorRefd","isNonFieldErrorMarkerInDOM"],"mappings":";;;AAMM,MAAAA,IAAoB,CACxBC,GACAC,GACAC;AAAA;AAAA,EAGA,CAACC,EAAoBH,CAAI;AAAA,EAEzB,CAACI,EAAiBH,CAAK;AAAA,EAEvB,CAACI,EAA2BL,GAAME,CAAa;AAAA;"}
@@ -4,3 +4,4 @@ const c = (o, e, s, r = "debug") => {
4
4
  export {
5
5
  c as default
6
6
  };
7
+ //# sourceMappingURL=consoleErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consoleErrors.mjs","sources":["../../../../src/errors/output/consoleErrors.ts"],"sourcesContent":["import type { SafeFieldValues } from '@/form/SafeFieldValues';\n\n/**\n * Output form values and errors to console.\n */\nconst 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\nexport default consoleErrors;\n"],"names":["consoleErrors","message","values","errors","type"],"mappings":"AAKA,MAAMA,IAAgB,CACpBC,GACAC,GAEAC,GACAC,IAA0B,YACvB;AAEH,UAAQA,CAAI,EAAEH,GAAS,EAAE,QAAAC,GAAQ,QAAAC,GAAQ;AAC3C;"}
@@ -8,3 +8,4 @@ const e = () => {
8
8
  export {
9
9
  m as default
10
10
  };
11
+ //# sourceMappingURL=RootErrorsListFromFlatFieldErrorsContext.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RootErrorsListFromFlatFieldErrorsContext.mjs","sources":["../../../../src/errors/root/RootErrorsListFromFlatFieldErrorsContext.tsx"],"sourcesContent":["import useFlatFieldErrorsContext from '../flat/context/useFlatFieldErrorsContext';\nimport FlatFieldErrorsList from '../flat/FlatFieldErrorsList';\n\nconst RootErrorsListFromFlatFieldErrorsContext: React.FC = () => {\n const rootErrors = useFlatFieldErrorsContext().roots;\n\n return <FlatFieldErrorsList errors={rootErrors} />;\n};\n\nexport default RootErrorsListFromFlatFieldErrorsContext;\n"],"names":["RootErrorsListFromFlatFieldErrorsContext","rootErrors","useFlatFieldErrorsContext","jsx","FlatFieldErrorsList","RootErrorsListFromFlatFieldErrorsContext$1"],"mappings":";;;AAGA,MAAMA,IAAqD,MAAM;AACzD,QAAAC,IAAaC,EAA4B,EAAA;AAExC,SAAA,gBAAAC,EAACC,GAAoB,EAAA,QAAQH,EAAY,CAAA;AAClD,GAEAI,IAAeL;"}
@@ -2,3 +2,4 @@ const o = "root";
2
2
  export {
3
3
  o as FormErrorPathRoot
4
4
  };
5
+ //# sourceMappingURL=consts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.mjs","sources":["../../../../src/errors/root/consts.ts"],"sourcesContent":["export const FormErrorPathRoot = 'root';\n"],"names":["FormErrorPathRoot"],"mappings":"AAAO,MAAMA,IAAoB;"}
@@ -6,3 +6,4 @@ const l = r(
6
6
  export {
7
7
  l as default
8
8
  };
9
+ //# sourceMappingURL=getRootsFromFlatFieldErrors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRootsFromFlatFieldErrors.mjs","sources":["../../../../src/errors/root/getRootsFromFlatFieldErrors.ts"],"sourcesContent":["import makeFlatFieldErrorsFilter from '../flat/filterFlatFieldErrors';\n\nimport isFlatFieldErrorEntryPathRoot from './isFlatFieldErrorEntryPathRoot';\n\nconst getRootsFromFlatFieldErrors = makeFlatFieldErrorsFilter(\n isFlatFieldErrorEntryPathRoot,\n);\n\nexport default getRootsFromFlatFieldErrors;\n"],"names":["getRootsFromFlatFieldErrors","makeFlatFieldErrorsFilter","isFlatFieldErrorEntryPathRoot"],"mappings":";;AAIA,MAAMA,IAA8BC;AAAA,EAClCC;AACF;"}
@@ -3,3 +3,4 @@ const a = ([o]) => r(o);
3
3
  export {
4
4
  a as default
5
5
  };
6
+ //# sourceMappingURL=isFlatFieldErrorEntryPathRoot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFlatFieldErrorEntryPathRoot.mjs","sources":["../../../../src/errors/root/isFlatFieldErrorEntryPathRoot.ts"],"sourcesContent":["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 */\nconst isFlatFieldErrorEntryPathRoot = ([path]: FlatFieldErrorEntry) =>\n isFormErrorPathRoot(path);\n\nexport default isFlatFieldErrorEntryPathRoot;\n"],"names":["isFlatFieldErrorEntryPathRoot","path","isFormErrorPathRoot"],"mappings":";AAOA,MAAMA,IAAgC,CAAC,CAACC,CAAI,MAC1CC,EAAoBD,CAAI;"}
@@ -3,3 +3,4 @@ const s = (o) => o === r || o.startsWith(r + ".");
3
3
  export {
4
4
  s as default
5
5
  };
6
+ //# sourceMappingURL=isFormErrorPathRoot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isFormErrorPathRoot.mjs","sources":["../../../../src/errors/root/isFormErrorPathRoot.ts"],"sourcesContent":["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 */\nconst isFormErrorPathRoot = (path: string): boolean =>\n path === FormErrorPathRoot || path.startsWith(FormErrorPathRoot + '.');\n\nexport default isFormErrorPathRoot;\n"],"names":["isFormErrorPathRoot","path","FormErrorPathRoot"],"mappings":";AAOM,MAAAA,IAAsB,CAACC,MAC3BA,MAASC,KAAqBD,EAAK,WAAWC,IAAoB,GAAG;"}
@@ -4,3 +4,4 @@ const o = (t) => (r) => r instanceof n ? e.parse(r) : t(r), a = o;
4
4
  export {
5
5
  a as default
6
6
  };
7
+ //# sourceMappingURL=getOnSubmitTrpcClientErrorHandler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOnSubmitTrpcClientErrorHandler.mjs","sources":["../../../../src/errors/trpc/getOnSubmitTrpcClientErrorHandler.ts"],"sourcesContent":["import { TRPCClientError } from '@trpc/client';\n\nimport type { RhfUtilsClientConfig } from '@/client/config/RhfUtilsClientConfig';\n\nimport type { FormSubmitErrors } from '@/submit/error/FormSubmitErrors';\n\nimport trpcClientErrorToFormSubmitErrorsSchemaTransformer from './trpcClientErrorToFormSubmitErrorsSchemaTransformer';\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 */\nconst getOnSubmitTrpcClientErrorHandler =\n (\n onNotTrpcClientError: NonNullable<\n RhfUtilsClientConfig['onSubmitErrorUnknown']\n >,\n ) =>\n (error: unknown): FormSubmitErrors | undefined => {\n // transform\n if (error instanceof TRPCClientError)\n return trpcClientErrorToFormSubmitErrorsSchemaTransformer.parse(error);\n\n // if unknown error, use callback\n return onNotTrpcClientError(error);\n };\n\nexport default getOnSubmitTrpcClientErrorHandler;\n"],"names":["getOnSubmitTrpcClientErrorHandler","onNotTrpcClientError","error","TRPCClientError","trpcClientErrorToFormSubmitErrorsSchemaTransformer","getOnSubmitTrpcClientErrorHandler$1"],"mappings":";;AAcA,MAAMA,IACJ,CACEC,MAIF,CAACC,MAEKA,aAAiBC,IACZC,EAAmD,MAAMF,CAAK,IAGhED,EAAqBC,CAAK,GAGrCG,IAAeL;"}
@@ -8,3 +8,4 @@ const a = r.object({
8
8
  export {
9
9
  a as default
10
10
  };
11
+ //# sourceMappingURL=trpcClientErrorMessageSchema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpcClientErrorMessageSchema.mjs","sources":["../../../../src/errors/trpc/trpcClientErrorMessageSchema.ts"],"sourcesContent":["import { z } from 'zod';\n\n/**\n * Schema for {@link TRPCClientError} message.\n *\n * (Sent from backend as JSON string.)\n */\nconst trpcClientErrorMessageSchema = z.object({\n validation: z.string(),\n code: z.string(),\n message: z.string(),\n path: z.array(z.string()),\n});\n\nexport default trpcClientErrorMessageSchema;\n"],"names":["trpcClientErrorMessageSchema","z"],"mappings":";AAOM,MAAAA,IAA+BC,EAAE,OAAO;AAAA,EAC5C,YAAYA,EAAE,OAAO;AAAA,EACrB,MAAMA,EAAE,OAAO;AAAA,EACf,SAASA,EAAE,OAAO;AAAA,EAClB,MAAMA,EAAE,MAAMA,EAAE,QAAQ;AAC1B,CAAC;"}
@@ -32,3 +32,4 @@ const i = e.custom(
32
32
  export {
33
33
  i as default
34
34
  };
35
+ //# sourceMappingURL=trpcClientErrorToFormSubmitErrorsSchemaTransformer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trpcClientErrorToFormSubmitErrorsSchemaTransformer.mjs","sources":["../../../../src/errors/trpc/trpcClientErrorToFormSubmitErrorsSchemaTransformer.ts"],"sourcesContent":["import type { TRPCClientErrorLike } from '@trpc/client';\nimport { TRPCClientError } from '@trpc/client';\nimport type { AnyRouter } from '@trpc/server';\nimport type { ErrorOption } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport type { FormSubmitErrors } from '@/submit/error/FormSubmitErrors';\n\nimport trpcClientErrorMessageSchema from './trpcClientErrorMessageSchema';\n\n/**\n * Schema that transforms {@link TRPCClientError} to RHF {@link FormSubmitErrors}.\n */\nconst trpcClientErrorToFormSubmitErrorsSchemaTransformer = z\n .custom<TRPCClientErrorLike<AnyRouter>>(\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: FormSubmitErrors\n .transform((errors) => Object.fromEntries(errors) as FormSubmitErrors);\n\nexport default trpcClientErrorToFormSubmitErrorsSchemaTransformer;\n"],"names":["trpcClientErrorToFormSubmitErrorsSchemaTransformer","z","error","TRPCClientError","json","trpcClientErrorMessageSchema","errors"],"mappings":";;;AAaA,MAAMA,IAAqDC,EACxD;AAAA,EACC,CAACC,MAAmBA,aAAiBC;AAAA;AACvC,EAGC,UAAU,CAACD,MAAUA,EAAM,OAAO,EAGlC,UAAU,CAACE,MAAS;AACf,MAAA;AACK,WAAA,KAAK,MAAMA,CAAI;AAAA,UACR;AAIP,WAAA;AAAA,MACL;AAAA,QACE,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,SAASA;AAAA,QACT,MAAM,CAAC,MAAM;AAAA,MACf;AAAA,IAAA;AAAA,EAEJ;AACF,CAAC,EAGA,KAAKH,EAAE,MAAMI,CAA4B,CAAC,EAG1C;AAAA,EAAU,CAACC,MACVA,EAAO;AAAA,IACL,CAACJ,MACC;AAAA,MACEA,EAAM,KAAK,KAAK,GAAG;AAAA;AAAA,MACnB;AAAA,QACE,MAAMA,EAAM;AAAA,QACZ,SAASA,EAAM;AAAA,MACjB;AAAA,IACF;AAAA,EACJ;AACF,EAGC,UAAU,CAACI,MAAW,OAAO,YAAYA,CAAM,CAAqB;"}