@paragrav/rhf-utils 0.1.0 → 0.59.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 (213) hide show
  1. package/README.md +260 -121
  2. package/dist/dts/Register.d.ts +16 -0
  3. package/dist/dts/_exports/config.d.ts +2 -0
  4. package/dist/dts/_exports/errors.d.ts +3 -0
  5. package/dist/dts/_exports/form.d.ts +7 -0
  6. package/dist/dts/_exports/index.d.ts +13 -0
  7. package/dist/dts/_exports/relay.d.ts +8 -0
  8. package/dist/dts/_exports/submit.d.ts +4 -0
  9. package/dist/dts/_exports/trpc.d.ts +2 -0
  10. package/dist/dts/_exports/types.d.ts +7 -0
  11. package/dist/dts/_exports/zod.d.ts +6 -0
  12. package/dist/dts/client/config/RhfUtilsClientConfigType.d.ts +63 -0
  13. package/dist/dts/client/config/context/RhfUtilsClientConfigContext.d.ts +3 -0
  14. package/dist/dts/client/config/context/RhfUtilsClientConfigProvider.d.ts +7 -0
  15. package/dist/dts/client/config/context/useRhfUtilsClientConfig.d.ts +1 -0
  16. package/dist/{types → dts}/devtool/LazyDevTool.d.ts +3 -4
  17. package/dist/dts/devtool/LazyDevToolViaProviders.d.ts +1 -0
  18. package/dist/{types → dts}/errors/flat/FlatFieldErrorsList.d.ts +2 -2
  19. package/dist/{types → dts}/errors/flat/context/FlatFieldErrorsContextProvider.d.ts +3 -3
  20. package/dist/{types → dts}/errors/flat/context/useFlatFieldErrorsContext.d.ts +1 -2
  21. package/dist/dts/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.d.ts +6 -0
  22. package/dist/{types → dts}/errors/flat/context/useFlatFieldErrorsContextOutput.d.ts +1 -2
  23. package/dist/dts/errors/flat/filterFlatFieldErrors.d.ts +7 -0
  24. package/dist/{types → dts}/errors/flat/flattenFieldErrors.d.ts +1 -2
  25. package/dist/{types → dts}/errors/flat/getFlatFieldErrors.d.ts +2 -1
  26. package/dist/dts/errors/getRefdFromFlatFieldErrors.d.ts +1 -0
  27. package/dist/{types → dts}/errors/isFieldErrorRefd.d.ts +1 -2
  28. package/dist/dts/errors/isFlatFieldErrorEntryRefd.d.ts +5 -0
  29. package/dist/{types → dts}/errors/message/FormErrorMessage.d.ts +2 -2
  30. package/dist/{types → dts}/errors/message/RhfUtilsFieldErrorMessage.d.ts +2 -2
  31. package/dist/{types → dts}/errors/nonfield/RhfUtilsNonFieldErrorMarker.d.ts +2 -2
  32. package/dist/dts/errors/nonfield/RhfUtilsNonFieldErrorMarkerHtmlAttribute.d.ts +4 -0
  33. package/dist/{types → dts}/errors/nonfield/isNonFieldError.d.ts +1 -2
  34. package/dist/dts/errors/nonfield/isNonFieldErrorMarkerInDOM.d.ts +5 -0
  35. package/dist/dts/errors/orphan/getIsOrphanFormErrorWithParentElement.d.ts +5 -0
  36. package/dist/dts/errors/orphan/getOrphansFromFlatFieldErrors.d.ts +2 -0
  37. package/dist/dts/errors/orphan/isOrphanFormError.d.ts +2 -0
  38. package/dist/dts/errors/output/consoleErrors.d.ts +5 -0
  39. package/dist/dts/errors/root/RootErrorsListFromFlatFieldErrorsContext.d.ts +1 -0
  40. package/dist/dts/errors/root/getRootsFromFlatFieldErrors.d.ts +1 -0
  41. package/dist/{types → dts}/errors/root/isFlatFieldErrorEntryPathRoot.d.ts +1 -2
  42. package/dist/{types → dts}/errors/root/isFormErrorPathRoot.d.ts +1 -2
  43. package/dist/{types → dts}/errors/trpc/makeOnSubmitTrpcClientErrorHandler.d.ts +2 -3
  44. package/dist/dts/errors/trpc/trpcClientErrorMessageSchema.d.ts +19 -0
  45. package/dist/dts/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.d.ts +23 -0
  46. package/dist/dts/form/RHF_UseFormReturnWithoutProxiesType.d.ts +15 -0
  47. package/dist/dts/form/RhfUtilsFormComponentPropsType.d.ts +17 -0
  48. package/dist/dts/form/RhfUtilsFormStateWithUtilsType.d.ts +7 -0
  49. package/dist/dts/form/UseRhfUtilsFormChildrenPropsType.d.ts +25 -0
  50. package/dist/dts/form/_Controller.d.ts +4 -0
  51. package/dist/dts/form/context/utils/RhfUtilsContextPropsType.d.ts +11 -0
  52. package/dist/dts/form/context/utils/RhfUtilsContextProvider.d.ts +9 -0
  53. package/dist/dts/form/context/utils/useRhfUtilsContext.d.ts +5 -0
  54. package/dist/dts/form/context/utils/useRhfUtilsContextRequestSubmit.d.ts +4 -0
  55. package/dist/dts/form/defaults/UseRhfUtilsFormGlobalDefaults.d.ts +24 -0
  56. package/dist/dts/form/defaults/UseRhfUtilsFormInstanceDefaults.d.ts +18 -0
  57. package/dist/dts/form/defaults/UseRhfUtilsFormResolvedDefaultsType.d.ts +12 -0
  58. package/dist/dts/form/defaults/form/UseRhfUtilsFormInstanceFormProps.d.ts +6 -0
  59. package/dist/dts/form/defaults/form/getRhfUtilsFormResolvedFormProps.d.ts +2 -0
  60. package/dist/dts/form/defaults/form/useRhfUtilsFormResolvedFormProps.d.ts +293 -0
  61. package/dist/{types/form/RhfUtilsFormOptions.d.ts → dts/form/options/RhfUtilsFormOptionsType.d.ts} +6 -7
  62. package/dist/dts/form/options/getRhfUtilsFormResolvedOptions.d.ts +2 -0
  63. package/dist/dts/form/options/useRhfUtilsFormResolvedOptions.d.ts +8 -0
  64. package/dist/dts/form/providers/RhfUtilsFormProviders.d.ts +6 -0
  65. package/dist/dts/form/providers/RhfUtilsFormProvidersPropsType.d.ts +15 -0
  66. package/dist/dts/form/rhf/UseFormPropsType.d.ts +4 -0
  67. package/dist/dts/form/rhf/getRhfUtilsFormResolvedRhfProps.d.ts +4 -0
  68. package/dist/dts/form/rhf/useRhfFormWithResolvedProps.d.ts +5 -0
  69. package/dist/dts/form/state/relay/FormStateRelayContextProvider.d.ts +4 -0
  70. package/dist/dts/form/state/relay/FormStateRelayedAggregatedType.d.ts +10 -0
  71. package/dist/dts/form/state/relay/FormStateRelayedItemType.d.ts +11 -0
  72. package/dist/dts/form/state/relay/FormStateRelayedOptionsType.d.ts +20 -0
  73. package/dist/dts/form/state/relay/FormStateRelayedType.d.ts +3 -0
  74. package/dist/dts/form/state/relay/pull/hooks.d.ts +31 -0
  75. package/dist/dts/form/state/relay/push/FormStateRelayPusher.d.ts +4 -0
  76. package/dist/dts/form/state/relay/push/useFormStateRelayPusher.d.ts +3 -0
  77. package/dist/dts/form/state/relay/useFormStateRelayContext.d.ts +20 -0
  78. package/dist/dts/form/state/relay/utils.d.ts +4 -0
  79. package/dist/dts/form/utils/getSubmitterButtonData.d.ts +6 -0
  80. package/dist/{types → dts}/form/utils/useFormRequestSubmit.d.ts +1 -2
  81. package/dist/dts/form/utils/useHandleCancelWithCheckIfCanBe.d.ts +4 -0
  82. package/dist/dts/form/utils/useHandleCancelWithCheckIfCanBeViaProviders.d.ts +2 -0
  83. package/dist/{types → dts}/form/utils/useShouldFormBlockNavigation.d.ts +1 -2
  84. package/dist/dts/form/with-handlers-and-children/RhfUtilsForm.d.ts +3 -0
  85. package/dist/dts/form/with-handlers-and-children/RhfUtilsFormProps.d.ts +46 -0
  86. package/dist/dts/form/with-handlers-and-children/_ChildrenViaProviders.d.ts +3 -0
  87. package/dist/dts/form/with-handlers-and-children/_FormWithSubmitHandler.d.ts +4 -0
  88. package/dist/dts/form/with-handlers-and-children/_useHandleSubmit.d.ts +11 -0
  89. package/dist/dts/form/with-providers/RhfUtilsFormWithProviders.d.ts +8 -0
  90. package/dist/dts/form/with-providers/RhfUtilsFormWithProvidersProps.d.ts +4 -0
  91. package/dist/dts/resolvers/ObjectSchema.d.ts +7 -0
  92. package/dist/dts/resolvers/zod/RhfUtilsUseZodFormChildrenFCType.d.ts +7 -0
  93. package/dist/dts/resolvers/zod/RhfUtilsUseZodFormChildrenPropsType.d.ts +4 -0
  94. package/dist/dts/resolvers/zod/ZodTypeSafeFieldValuesType.d.ts +5 -0
  95. package/dist/dts/resolvers/zod/consts.d.ts +4 -0
  96. package/dist/dts/resolvers/zod/form/RhfUtilsZodForm.d.ts +7 -0
  97. package/dist/dts/resolvers/zod/getZodResolver.d.ts +4 -0
  98. package/dist/dts/resolvers/zod/providers/RhfUtilsZodFormProviders.d.ts +8 -0
  99. package/dist/dts/resolvers/zod/with-providers/RhfUtilsZodFormWithProviders.d.ts +10 -0
  100. package/dist/dts/submit/UseRhfUtilsFormOnSubmitContextType.d.ts +23 -0
  101. package/dist/dts/submit/error/FormSubmitError.d.ts +6 -0
  102. package/dist/{types → dts}/submit/error/FormSubmitFieldErrors.d.ts +1 -1
  103. package/dist/dts/submit/error/setCtxErrorsByFormSubmitFieldErrors.d.ts +8 -0
  104. package/dist/dts/submit/last-error/LastSubmitErrorContextProvider.d.ts +4 -0
  105. package/dist/dts/submit/last-error/LastSubmitErrorContextType.d.ts +8 -0
  106. package/dist/dts/submit/last-error/useLastSubmitError.d.ts +4 -0
  107. package/dist/dts/submit/last-error/useLastSubmitErrorContext.d.ts +3 -0
  108. package/dist/dts/submit/last-error/useLastSubmitErrorContextWith.d.ts +2 -0
  109. package/dist/{types → dts}/submit/useFormOnSubmitSuccessfulAndReset.d.ts +1 -2
  110. package/dist/dts/submit/useFormOnSubmitted.d.ts +4 -0
  111. package/dist/{types → dts}/submit/useResetFormOnSubmitted.d.ts +1 -2
  112. package/dist/dts/submit/useRhfUtilsFormOnSubmitContext.d.ts +3 -0
  113. package/dist/dts/submit/useSubmitFormOnChange.d.ts +15 -0
  114. package/dist/dts/submit/useSubmitFormOnEvent.d.ts +9 -0
  115. package/dist/dts/submit/useSubmitFormOnWatch.d.ts +14 -0
  116. package/dist/dts/utils/PassthroughChildren.d.ts +7 -0
  117. package/dist/{types → dts}/utils/createContext.d.ts +1 -2
  118. package/dist/dts/utils/fixedForwardRef.d.ts +5 -0
  119. package/dist/dts/utils/isEmptyObject.d.ts +1 -0
  120. package/dist/dts/utils/types.d.ts +3 -0
  121. package/dist/{types → dts}/utils/useImperativeForwardedRef.d.ts +1 -2
  122. package/dist/dts/utils/useIsFirstRender.d.ts +7 -0
  123. package/dist/dts/utils/useRefIfValueWasTrue.d.ts +2 -0
  124. package/dist/dts/utils/useToggle.d.ts +2 -0
  125. package/dist/dts/vite-env.d.ts +1 -0
  126. package/dist/esm/getFlatFieldErrors.mjs +55 -0
  127. package/dist/esm/index.mjs +503 -390
  128. package/dist/esm/relay.mjs +222 -0
  129. package/dist/esm/trpc.mjs +8 -9
  130. package/package.json +91 -72
  131. package/LICENSE.md +0 -21
  132. package/dist/esm/createContext.mjs +0 -16
  133. package/dist/esm/group.mjs +0 -74
  134. package/dist/esm/useFlatFieldErrorsContext.mjs +0 -10
  135. package/dist/esm/utils.mjs +0 -20
  136. package/dist/types/_exports/group.d.ts +0 -9
  137. package/dist/types/_exports/index.d.ts +0 -15
  138. package/dist/types/_exports/trpc.d.ts +0 -2
  139. package/dist/types/_exports/utils.d.ts +0 -1
  140. package/dist/types/client/config/RhfUtilsClientConfig.d.ts +0 -70
  141. package/dist/types/client/config/useRhfUtilsClientConfigContext.d.ts +0 -4
  142. package/dist/types/client/context.d.ts +0 -2
  143. package/dist/types/client/index.d.ts +0 -24
  144. package/dist/types/client/utils.d.ts +0 -12
  145. package/dist/types/client/zod/RhfUtilsUseFormChildrenZodFC.d.ts +0 -12
  146. package/dist/types/client/zod/RhfUtilsUseFormChildrenZodProps.d.ts +0 -4
  147. package/dist/types/client/zod/ZodTypeFieldValues.d.ts +0 -3
  148. package/dist/types/client/zod/consts.d.ts +0 -4
  149. package/dist/types/client/zod/context/RhfUtilsClientForZodContextProvider.d.ts +0 -7
  150. package/dist/types/client/zod/context/RhfUtilsZodForm.d.ts +0 -8
  151. package/dist/types/client/zod/context/useRhfUtilsClientForZodContext.d.ts +0 -5
  152. package/dist/types/client/zod/context/useRhfUtilsZodForm.d.ts +0 -7
  153. package/dist/types/client/zod/createRhfUtilsClientForZod.d.ts +0 -3
  154. package/dist/types/errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans.d.ts +0 -7
  155. package/dist/types/errors/flat/filterFlatFieldErrors.d.ts +0 -8
  156. package/dist/types/errors/getRefdFromFlatFieldErrors.d.ts +0 -2
  157. package/dist/types/errors/isFlatFieldErrorEntryRefd.d.ts +0 -6
  158. package/dist/types/errors/nonfield/RhfUtilsNonFieldErrorMarkerHtmlAttribute.d.ts +0 -5
  159. package/dist/types/errors/nonfield/isNonFieldErrorMarkerInDOM.d.ts +0 -6
  160. package/dist/types/errors/orphan/getIsOrphanFormErrorWithParentElement.d.ts +0 -6
  161. package/dist/types/errors/orphan/getOrphansFromFlatFieldErrors.d.ts +0 -3
  162. package/dist/types/errors/orphan/isOrphanFormError.d.ts +0 -3
  163. package/dist/types/errors/output/consoleErrors.d.ts +0 -6
  164. package/dist/types/errors/root/RootErrorsListFromFlatFieldErrorsContext.d.ts +0 -2
  165. package/dist/types/errors/root/getRootsFromFlatFieldErrors.d.ts +0 -2
  166. package/dist/types/errors/trpc/trpcClientErrorMessageSchema.d.ts +0 -23
  167. package/dist/types/errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer.d.ts +0 -27
  168. package/dist/types/form/Form.d.ts +0 -10
  169. package/dist/types/form/FormWithProviders.d.ts +0 -12
  170. package/dist/types/form/RhfUtilsFormProviders.d.ts +0 -11
  171. package/dist/types/form/UseRhfUtilsFormChildrenProps.d.ts +0 -23
  172. package/dist/types/form/UseRhfUtilsFormOnSubmitContext.d.ts +0 -28
  173. package/dist/types/form/UseRhfUtilsFormProps.d.ts +0 -22
  174. package/dist/types/form/UseRhfUtilsFormReturn.d.ts +0 -19
  175. package/dist/types/form/_Controller.d.ts +0 -5
  176. package/dist/types/form/context/group/FormGroupContextProvider.d.ts +0 -4
  177. package/dist/types/form/context/group/index.d.ts +0 -14
  178. package/dist/types/form/context/group/useFormGroupChildIsMountedTracker.d.ts +0 -5
  179. package/dist/types/form/context/group/useFormGroupChildIsSubmittingTracker.d.ts +0 -5
  180. package/dist/types/form/context/group/useFormGroupChildTracker.d.ts +0 -6
  181. package/dist/types/form/context/group/useFormGroupIsAnyBusy.d.ts +0 -2
  182. package/dist/types/form/context/group/useFormGroupIsChildBusy.d.ts +0 -2
  183. package/dist/types/form/context/group/useFormGroupIsParentBusy.d.ts +0 -2
  184. package/dist/types/form/context/group/useFormGroupParentTracker.d.ts +0 -7
  185. package/dist/types/form/context/group/useFormOrParentIsBusy.d.ts +0 -2
  186. package/dist/types/form/context/utils/RhfUtilsContextProvider.d.ts +0 -8
  187. package/dist/types/form/context/utils/useRhfUtilsContext.d.ts +0 -13
  188. package/dist/types/form/context/utils/useRhfUtilsContextRequestSubmit.d.ts +0 -5
  189. package/dist/types/form/useFormIsBusy.d.ts +0 -2
  190. package/dist/types/form/useRhfUtilsForm.d.ts +0 -15
  191. package/dist/types/form/utils/getSubmitterButtonData.d.ts +0 -7
  192. package/dist/types/register.d.ts +0 -7
  193. package/dist/types/submit/error/FormSubmitError.d.ts +0 -6
  194. package/dist/types/submit/error/setCtxErrorsByFormSubmitFieldErrors.d.ts +0 -9
  195. package/dist/types/submit/useFormOnSubmitted.d.ts +0 -5
  196. package/dist/types/submit/useSubmitFormOnChange.d.ts +0 -8
  197. package/dist/types/utils/PassthroughChildren.d.ts +0 -7
  198. package/dist/types/utils/fixedForwardRef.d.ts +0 -6
  199. package/dist/types/utils/isEmptyObject.d.ts +0 -2
  200. package/dist/types/utils/types.d.ts +0 -1
  201. package/dist/types/utils/useRefIfValueWasTrue.d.ts +0 -2
  202. package/dist/types/utils/useThrowAsyncError.d.ts +0 -5
  203. package/dist/types/utils/useToggle.d.ts +0 -3
  204. /package/dist/{types → dts}/errors/flat/context/FlatFieldErrorsOutputConfig.d.ts +0 -0
  205. /package/dist/{types → dts}/errors/flat/types.d.ts +0 -0
  206. /package/dist/{types → dts}/errors/nonfield/RhfUtilsNonFieldErrorMarker.spec.d.ts +0 -0
  207. /package/dist/{types → dts}/errors/nonfield/RhfUtilsNonFieldErrorMarker.utils.d.ts +0 -0
  208. /package/dist/{types → dts}/errors/output/types.d.ts +0 -0
  209. /package/dist/{types → dts}/errors/root/consts.d.ts +0 -0
  210. /package/dist/{types/form/SafeFieldValues.d.ts → dts/form/rhf/SafeFieldValuesType.d.ts} +0 -0
  211. /package/dist/{types → dts}/main.d.ts +0 -0
  212. /package/dist/{types → dts}/utils/timeoutAsync.d.ts +0 -0
  213. /package/dist/{types → dts}/utils/useDebouncedOnChangeValue.d.ts +0 -0
package/README.md CHANGED
@@ -7,46 +7,51 @@ Integration and utility library for [react-hook-form](https://www.react-hook-for
7
7
  ## Features
8
8
 
9
9
  - TypeScript-first
10
- - global configuration (`RhfUtilsClientConfig`)
10
+ - global configuration (🔗 [`RhfUtilsClientConfig`](#config) section)
11
11
  - RHF (`UseFormProps`) and utilities (`RhfUtilsFormOptions`) options defaults
12
- - inject your own hooks and UI (`FormChildrenWrapper`)
13
- - server error transformation (`onSubmitErrorUnknown`)
14
- - RHF `FormState.errors` logging/throwing (`RhfUtilsClientConfig.fieldErrors`)
15
- - form-level configuration (`RhfUtilsZodForm`)
12
+ - inject your own hooks and UI (`FormComponent`)
13
+ - server error transformation (`onSubmitErrorUnknown`) ✨
14
+ - handle cancel prompt (`useCanFormBeCancelled`) ✨
15
+ - RHF `FormState.errors` logging/throwing (`RhfUtilsClientConfig.fieldErrors`) ✨
16
+ - form-level configuration (🔗 [`RhfUtilsZodForm`](#form) section)
16
17
  - RHF and utilities options overrides
17
18
  - extendable utilities options type (`RhfUtilsFormOptions`)
18
19
  - throw error (`FormSubmitError`) in submit handler to add errors to RHF context and fail submit
19
- - handle submit error (`onSubmitError`)
20
- - dependency injection for children (`RhfUtilsZodForm.Children`), including:
20
+ - handle submit error (`onSubmitError` / `useLastSubmitError`)
21
+ - context injection for children (`RhfUtilsZodForm.Children`), including:
21
22
  - formId, formRef, RHF context, utilities options
22
23
  - schema-typed Controller component and FormSubmitError class
23
- - simpler/flatter `FieldErrors` structure (`FlatFieldErrors`)
24
+ - form state relay (🔗 [`FormStateRelayContextProvider`](#form-state-relay) section) ✨
25
+ - access specific form's state from outside that form/provider
26
+ - assign forms into groups and watch collectively
27
+ - simpler/flatter `FieldErrors` structure (🔗 [`FlatFieldErrors`](#flatfielderrors) section)
28
+ - find orphans errors (🔗 [orphan errors](#orphan-errors) section) ✨
24
29
  - context groups errors into `all`, `fields`, `roots`, and `orphans` (`useFlatFieldErrorsContext`)
25
- - safer `FieldValues` type (`SafeFieldValues`)
30
+ - safer `FieldValues` type (🔗 [`SafeFieldValues`](#safefieldvalues) section)
26
31
  - `zod` support, including input/output types for transformations
27
- - ~3.2kB min+gzip core (excluding [peer dependencies](#peer-dependencies))
32
+ - ~2.8kB min+gzip core (excluding [peer dependencies](#peer-dependencies))
28
33
 
29
34
  ## Install
30
35
 
31
36
  ```sh
32
37
  npm install @paragrav/rhf-utils # npm
33
- pnpm install @paragrav/rhf-utils # pnpm
38
+ pnpm add @paragrav/rhf-utils # pnpm
34
39
  yarn add @paragrav/rhf-utils # yarn
35
40
  ```
36
41
 
37
42
  ## Quick Start
38
43
 
39
44
  - 🔗 [Config](#config) (`RhfUtilsClientConfig`): define your global config (optional)
40
- - 🔗 [Provider](#provider) (`RhfUtilsClientForZodContextProvider`): add to your global stack
41
- - 🔗 [Form](#form) (`RhfUtilsZodForm`): use as form component
45
+ - 🔗 [Provider](#config-provider) (`RhfUtilsClientConfigProvider`): add to your global stack
46
+ - 🔗 [Form With Providers](#form-with-providers) (`RhfUtilsZodFormWithProviders`): use as form component
47
+ - 🔗 [Form State Relay](#form-state-relay) (`FormStateRelayContextProvider`): relay form state
42
48
 
43
49
  ## Config
44
50
 
45
- Create a config (`RhfUtilsClientConfig`) object with desired global config and default options. Config applies across all forms, and defaults can be overridden per form.
51
+ Create a config (`RhfUtilsClientConfig`) object with desired **global** config and default options. Config applies across all forms, and defaults can be overridden per form.
46
52
 
47
53
  ```tsx
48
54
  export const rhfUtilsClientConfig: RhfUtilsClientConfig = {
49
- // overridable at individual form level
50
55
  defaults: {
51
56
  // globally-relevant subset of RHF's `UseFormProps` options
52
57
  rhf: {
@@ -66,17 +71,16 @@ export const rhfUtilsClientConfig: RhfUtilsClientConfig = {
66
71
  },
67
72
  },
68
73
 
69
- // optional form component (defaults to primitive HTML form)
70
- FormComponent: Form.Root,
71
-
72
- // optional wrapper component to inject your own hooks and components
73
- // around all RhfUtilsZodForm instances
74
- FormChildrenWrapper: (
75
- // UseRhfUtilsFormChildrenProps
74
+ // optional form component to use (defaults to primitive HTML form)
75
+ // also, is used to inject your own hooks and components
76
+ // for all RhfUtilsZodForm instances
77
+ FormComponent: (
78
+ // RhfUtilsFormComponentProps
76
79
  {
80
+ formProps, // computed form props
77
81
  formId, // unique id string
78
82
  formRef, // ref
79
- context, // rhf UseFormReturn
83
+ context, // rhf UseFormReturn (without proxy `formState`)
80
84
  options, // RhfUtilsFormOptions (with any custom props)
81
85
  Controller, // rhf controller (SafeFieldValues-typed; no schema at this level)
82
86
  FormSubmitError, // error class (SafeFieldValues-typed; no schema at this level)
@@ -92,16 +96,31 @@ export const rhfUtilsClientConfig: RhfUtilsClientConfig = {
92
96
  });
93
97
 
94
98
  return (
95
- <>
99
+ <Form.Root {...formProps} ref={formRef}>
96
100
  {/* RhfUtilsZodForm.Children "outlet" (see "Component Hierarchy" section) */}
97
101
  {children}
98
102
 
99
103
  {/* root errors list */}
100
104
  <RootErrorsList />
101
- </>
105
+ </Form.Root>
102
106
  );
103
107
  },
104
108
 
109
+ // hook that returns callback to determine whether form can be cancelled
110
+ // if `true`, `RhfUtilsZodForm.onCancel` at form-level is called (e.g., parent component hides form)
111
+ // this allows you to handle non-navigational blocking/prompting
112
+ // NOTE: this library is router-agnostic, so navigation blocking should happen elsewhere
113
+ // (i.e., calling your own hook in `FormComponent`)
114
+ useCanFormBeCancelled: () => {
115
+ const { isDirty } = useFormState();
116
+
117
+ // return callback to be called at event-time
118
+ return ({ options }) =>
119
+ !options.enableMyPrompter || // my prompter option not enabled
120
+ !isDirty || // or rhf form state not dirty
121
+ confirm('Are you sure you want to cancel?'); // or user confirms
122
+ },
123
+
105
124
  // non-FormSubmitError thrown in onSubmit
106
125
  // use case: handle and transform server error data for frontend
107
126
  onSubmitErrorUnknown: (
@@ -134,108 +153,140 @@ export const rhfUtilsClientConfig: RhfUtilsClientConfig = {
134
153
  };
135
154
  ```
136
155
 
137
- ## Provider
156
+ ## Config Provider
138
157
 
139
158
  Add the context provider to your global provider stack.
140
159
 
141
160
  ```tsx
142
- <RhfUtilsClientForZodContextProvider config={rhfUtilsClientConfig}>
161
+ <RhfUtilsClientConfigProvider config={rhfUtilsClientConfig}>
143
162
  {children}
144
- </RhfUtilsClientForZodContextProvider>
163
+ </RhfUtilsClientConfigProvider>
145
164
  ```
146
165
 
147
- Currently, only `zod` is supported.
166
+ ## Form With Providers
148
167
 
149
- ## Form
168
+ Currently, only `zod` schemas are supported.
150
169
 
151
170
  ```tsx
152
- <RhfUtilsZodForm
153
- schema={loginFormSchema}
154
- defaultValues={{
155
- email: '',
171
+ <RhfUtilsZodFormWithProviders
172
+ schema={z.object({
173
+ email: z.string().min(1).email(),
174
+ password: z.string().min(1),
175
+ passwordConfirm: z.string().min(1),
176
+ })}
177
+ defaultValues={{ email: '', password: '', passwordConfirm: '' }}
178
+ getApiData={({ email, password }) => ({ email, password })}
179
+ // cancel handler (passed to `Children` below)
180
+ // execution routed through `RhfUtilsClientConfig.useCanFormBeCancelled`, if provided
181
+ onCancel={handleCancel}
182
+ // submit handlers
183
+ onBeforeSubmitInvariants={async (
184
+ { input, output, api }, // schema input (form values), output; api data (via getApiData)
185
+ context, // UseRhfUtilsFormOnSubmitContext (id, ref, rhf context (without proxy formState), utils options, schema-typed FormSubmitError class)
186
+ event, // SubmitEvent
187
+ ) => [
188
+ [
189
+ 'passwordConfirm', // type safe
190
+ 'Passwords must match.',
191
+ data.password === data.passwordConfirm,
192
+ ],
193
+ ]}
194
+ onBeforeSubmit={({ input, output, api }, context, event) => {
195
+ if (!isValid(input.email))
196
+ throw new context.FormSubmitError({
197
+ email: { message: 'Email is invalid.' },
198
+ });
156
199
  }}
157
200
  // submit handler
158
- onSubmit={async (
159
- data, // schema output
160
- context, // UseRhfUtilsFormOnSubmitContext (id, ref, rhf context, utils options, schema-typed FormSubmitError class)
161
- event, // SubmitEvent
162
- ) => {
163
- await loginService(data);
164
- handleSuccess();
165
- }}
201
+ onSubmit={({ input, output, api }, context, event) => registerService(api)}
202
+ onSubmitSuccess={(onSubmitResult, { input, output, api }, context, event) =>
203
+ navigate('/app/' + onSubmitResult.id)
204
+ }
166
205
  // handle error declaratively (i.e., no throw/catch)
167
- onSubmitError={({
168
- error, // unknown
169
- context, // UseRhfUtilsFormOnSubmitErrorContext (id, ref, rhf context, utils options, `FormSubmitFieldErrors` from `onSubmitErrorUnknown`)
170
- event, // SubmitEvent
171
- }) => {
206
+ onSubmitError={({ error, context, event }) => {
172
207
  handleError(error);
173
208
  }}
209
+ onSubmitFinally={() => {
210
+ setState();
211
+ }}
212
+ // form-specific options/overrides (merged with defaults)
213
+ rhf={{
214
+ mode: 'onBlur',
215
+ }}
216
+ utils={{
217
+ submitOnWatch: { debounce: 250 },
218
+ // custom option props
219
+ // (see "Extend RhfUtilsFormOptions" section)
220
+ enableMyOptionalFormHook: true,
221
+ }}
222
+ // surfaced form element attributes
223
+ id="my-form-id"
224
+ className="my-special-form-class" // merged with global defaults
225
+ // other form element attributes
226
+ form={{ noValidate: true }} // merged with global defaults
174
227
  // fields
175
228
  Children={({
176
229
  // UseRhfUtilsFormChildrenProps
177
- formId, // unique id string
230
+ formId, // unique id string (auto-gen if not supplied)
178
231
  formRef, // ref
179
- context, // rhf UseFormReturn
232
+ context, // rhf UseFormReturn (without proxy `formState`)
180
233
  options, // RhfUtilsFormOptions
181
234
  Controller, // schema-typed rhf controller
182
235
  FormSubmitError, // schema-typed error class
236
+ onCancel, // wrapped cancel handler from above
183
237
  }) => (
184
238
  <>
185
239
  <Controller
186
240
  name="email" // schema-typed field name
187
241
  render={({ field, formState: { isSubmitting } }) => (
188
- <label>
189
- Email
190
- <input {...field} disabled={isSubmitting} />
242
+ <Stack>
243
+ <label>
244
+ Email
245
+ <input {...field} disabled={isSubmitting} />
246
+ </label>
247
+
191
248
  <ErrorMessage path={field.name} />
192
- </label>
249
+ </Stack>
193
250
  )}
194
251
  />
195
252
 
196
- <button type="button" onClick={handleCancel}>
253
+ <button type="button" onClick={onCancel}>
197
254
  Cancel
198
255
  </button>
199
256
  <button type="submit">Login</button>
200
257
  </>
201
258
  )}
202
- // form-specific options/overrides (merged with defaults)
203
- rhf={{
204
- mode: 'onBlur',
205
- }}
206
- utils={{
207
- submitOnChange: true,
208
- // custom option props
209
- // (see "Extend RhfUtilsFormOptions" section)
210
- enableMyOptionalFormHook: true,
211
- }}
212
- form={{
213
- // class names are merged together with global defaults
214
- className: 'my-special-form-class',
215
- }}
216
259
  />
217
260
  ```
218
261
 
219
262
  ### Form Children
220
263
 
221
- `Children` prop takes a component which is rendered as a child of the form (and, if supplied, of `RhfUtilsClientConfig.FormChildrenWrapper`). It receives `UseRhfUtilsFormChildrenProps` as props, including a type-safe `Controller` component.
264
+ `Children` prop takes a component which is rendered as a child of the form (and, if supplied, of `RhfUtilsClientConfig.FormComponent`). It receives `UseRhfUtilsFormChildrenProps` as props, including a type-safe `Controller` component.
222
265
 
223
- If you prefer to define your `Children` component as standalone, you will need to specify any dependencies as `props` (e.g., `onCancel` callback):
266
+ If you prefer to define your `Children` component as standalone, you will need to specify any dependencies as `props` (e.g., `onEvent` callback):
224
267
 
225
268
  ```tsx
226
- const Children: RhfUtilsUseFormChildrenZodFC<typeof schema, { onCancel: () => void }> = ({...}) => {};
269
+ const Children: RhfUtilsUseZodFormChildrenFC<
270
+ typeof schema,
271
+ { onEvent: () => void } // other props (if required)
272
+ > = ({ ... }) => {};
227
273
 
228
- function Children({...}: RhfUtilsUseFormChildrenZodProps<typeof schema, { onCancel: () => void }>) {}
274
+ // or
275
+
276
+ function Children({ ... }: RhfUtilsUseZodFormChildrenProps<
277
+ typeof schema,
278
+ { onEvent: () => void } // other props (if required)
279
+ >) {}
229
280
  ```
230
281
 
231
- And pass dependencies manually:
282
+ And pass other props manually, if applicable:
232
283
 
233
284
  ```tsx
234
- <RhfUtilsZodForm
285
+ <RhfUtilsZodFormWithProviders
235
286
  Children={(rhfUtilsZodFormChildrenProps) => (
236
287
  <Children
237
288
  {...rhfUtilsZodFormChildrenProps}
238
- props={{ onCancel: handleCancel }}
289
+ props={{ onEvent: handleEvent }}
239
290
  />
240
291
  )}
241
292
  />
@@ -243,20 +294,40 @@ And pass dependencies manually:
243
294
 
244
295
  ## Form Component Hierarchy
245
296
 
246
- `RhfUtilsZodForm` renders as:
297
+ For each form instance, `RhfUtilsZodForm` renders as the following:
247
298
 
248
299
  ```tsx
249
- <ReactHookForm.FormProvider> // standard rhf provider
250
- <RhfUtilsProviders> // rhf utils internal providers
251
- <RhfUtilsClientConfig.FormComponent> // from global config (or default)
252
- <RhfUtilsClientConfig.FormChildrenWrapper> // from global config (if provided)
253
- <RhfUtilsZodForm.Children /> // form instance component prop
254
- </RhfUtilsClientConfig.FormChildrenWrapper>
300
+ <ReactHookForm.FormProvider> // standard rhf provider
301
+ <RhfUtilsProviders> // rhf utils internal providers
302
+ <RhfUtilsClientConfig.FormComponent> // from global config (or native form, if not provided)
303
+ <RhfUtilsZodForm.Children /> // form instance component prop
255
304
  </RhfUtilsClientConfig.FormComponent>
256
305
  <RhfUtilsProviders>
257
306
  </ReactHookForm.FormProvider>
258
307
  ```
259
308
 
309
+ ## De-couple Providers from Form
310
+
311
+ Sometimes you need to control the nesting of the Form element. For example, to appease HTML rules or expand the scope of the Provider.
312
+
313
+ ```tsx
314
+ <aside>
315
+ <RhfUtilsZodFormProviders formId="my-form">
316
+ <main>
317
+ <RhfUtilsZodForm />
318
+ </main>
319
+
320
+ <footer>
321
+ <SubmitButton form="my-form">
322
+
323
+ <MyFormErrorsViaProviders>
324
+ </footer>
325
+ </RhfUtilsZodFormProviders>
326
+ </aside>
327
+ ```
328
+
329
+ For similar pattern, especially across more than one form, see [Form State Relay](#form-state-relay) section.
330
+
260
331
  ## `FormSubmitError`
261
332
 
262
333
  This is an `Error`-based class that you can use to throw a schema-typed error in your submit handler.
@@ -266,21 +337,23 @@ This is an `Error`-based class that you can use to throw a schema-typed error in
266
337
  ### Example
267
338
 
268
339
  ```tsx
269
- <RhfUtilsZodForm
270
- onSubmit={async (data, { FormSubmitError }) => {
271
- if (isProblem(data))
340
+ <RhfUtilsZodFormWithProviders
341
+ onBeforeSubmit={async ({ input, output, api }, { FormSubmitError }) => {
342
+ if (!isValid(data))
272
343
  throw new FormSubmitError({
273
344
  'street.address': { message: 'Street address invalid.' },
274
345
  });
275
-
276
- await post('/backend');
277
346
  }}
278
347
  />
279
348
  ```
280
349
 
281
350
  Any non-`FormSubmitError` error thrown from your submit handler (e.g., fetch/axios error) can be transformed by `RhfUtilsClientConfig`'s `onSubmitErrorUnknown` callback. This takes an `unknown` error and can return a `FormSubmitFieldErrors` object, which is merged into RHF's form state errors.
282
351
 
283
- Most common use case will be transforming backend errors to frontend shape.
352
+ Most common use case will be transforming backend errors to frontend shape expected by RHF.
353
+
354
+ ### Last Submit Error
355
+
356
+ Sometimes, perhaps outside any specific `FormContext`, you need direct access to the actual error object that was thrown, which caused the last submit to fail. The `useLastSubmitError` hook allows you to do just this. (You can probably handle most form-specific cases via `onSubmitErrorUnknown`, which receives error as well.)
284
357
 
285
358
  ## `RhfUtilsFormOptions`
286
359
 
@@ -291,12 +364,8 @@ type RhfUtilsFormOptions = {
291
364
  /** Stop propagation of submit event. */
292
365
  stopSubmitPropagation?: boolean;
293
366
 
294
- /**
295
- * Request submit via listener on form change.
296
- * - `true`: no debounce
297
- * - number: milliseconds to debounce
298
- */
299
- submitOnChange?: boolean | number;
367
+ /** Request submit on change. */
368
+ submitOnChange?: { debounce?: number };
300
369
 
301
370
  /**
302
371
  * Reset form values and state (e.g., isDirty, etc.) after submit -- on success and/or error.
@@ -327,7 +396,8 @@ import '@paragrav/rhf-utils';
327
396
  declare module '@paragrav/rhf-utils' {
328
397
  export interface Register {
329
398
  RhfUtilsFormOptions: {
330
- /** Custom props for your custom hooks/behaviors. */
399
+ /** Custom props for your custom options/hooks/behaviors. */
400
+ enableMyPrompter?: boolean;
331
401
  enableMyOptionalFormHook?: boolean;
332
402
  configMyOptionalFormHook?: MyCustomFormHookConfig;
333
403
  };
@@ -335,6 +405,100 @@ declare module '@paragrav/rhf-utils' {
335
405
  }
336
406
  ```
337
407
 
408
+ ## <a id="form-state-relay" /> Form State Relay _(~1.2kB min+gzip)_
409
+
410
+ Sometimes you need to access one or more forms' state outside the form (and its providers).
411
+
412
+ ### Single form state
413
+
414
+ Use case: display a form's errors (or any other state) outside form and its context.
415
+
416
+ ```tsx
417
+ <FormStateRelayContextProvider> // relay provider
418
+ <ReactHookForm.FormProvider> // rhf provider
419
+ <FormStateRelayPusher /> // push form state
420
+ <ReactHookForm.FormProvider>
421
+
422
+ <WatchOutsideFormContext /> // watch form state
423
+ </FormStateRelayContextProvider>;
424
+ ```
425
+
426
+ Push can be configured via `FormStateRelayPusher` component or `useFormStateRelayPush` hook with `FormStateRelayPushOptions` options.
427
+
428
+ ```ts
429
+ type FormStateRelayPushOptions = {
430
+ group?: string | string[]; // assign group(s) to watch multiple forms in aggregate
431
+ flaggedState?: {
432
+ isMounted?: true; // flag form when mounted -- e.g., forms that are hidden by default
433
+ };
434
+ };
435
+ ```
436
+
437
+ ```tsx
438
+ function WatchOutsideFormContext() {
439
+ // FormStateWithUtils (either via RHF -- when requested within form context -- or relay when not)
440
+ const formState = useFormStateWithUtilsViaRhfOrRelay();
441
+ }
442
+
443
+ // when watching a single form, original RHF FormState with generally-typed SafeFieldValues
444
+ type FormStateRelayed = FormState<SafeFieldValues>;
445
+ ```
446
+
447
+ The `useFormStateWithUtilsViaRhfOrRelay` hook uses `useFormStateRelayPullOnlyOrThrow` internally. It provides additional naivety when consumer doesn't know which context between RHF or Relay is present. (This is useful when building base components -- e.g., buttons -- which may exist outside of form context.)
448
+
449
+ ### Multiple forms
450
+
451
+ Use cases:
452
+
453
+ - disable parent form when ANY child is "flagged" (i.e., dirty)
454
+ - disable ALL children when parent is "flagged" (i.e., submitting)
455
+ - confirm navigation when ANY mounted form is "flagged" (i.e., dirty)
456
+
457
+ ```tsx
458
+ function ParentForm() {
459
+ const childrenFormState = useFormStateRelayWatchGroup('children'); // FormStateRelayedAggregated
460
+
461
+ return (
462
+ <ReactHookForm.FormProvider>
463
+ <FormStateRelayPusher formId="parent" /> // pusher
464
+ <input type="submit" disabled={childrenFormState.isDirty} />
465
+ </ReactHookForm.FormProvider>
466
+ );
467
+ }
468
+
469
+ function ChildForm() {
470
+ const parentFormState = useFormStateRelayWatchId('parent'); // FormStateRelayed
471
+
472
+ return (
473
+ <ReactHookForm.FormProvider>
474
+ <FormStateRelayPusher group="children" /> // pusher
475
+ <input type="submit" disabled={parentFormState.isSubmitting} />
476
+ </ReactHookForm.FormProvider>
477
+ );
478
+ }
479
+
480
+ type FormStateRelayedAggregated = FormStateRelayed & {
481
+ // object values reduced to booleans for non-empty-ness
482
+ dirtyFields: boolean;
483
+ touchedFields: boolean;
484
+ validatingFields: boolean;
485
+ error: boolean;
486
+ // composites
487
+ isSubmitUnsuccessful: boolean;
488
+ isMountedFlagged: boolean; // via RelayedFormOptions['flaggedState']['isMounted']
489
+ };
490
+ ```
491
+
492
+ You can also aggregate any (i.e., all) forms via `useFormStateRelayPullAny`, which returns `FormStateRelayedAggregated` as well.
493
+
494
+ ```tsx
495
+ <FormStateRelayContextProvider>
496
+ <ParentForm />
497
+ <ChildForm />
498
+ <Child2Form />
499
+ </FormStateRelayContextProvider>
500
+ ```
501
+
338
502
  ## Field Errors
339
503
 
340
504
  ### FlatFieldErrors
@@ -402,32 +566,7 @@ _If you include the marker in bulk error lists, it will defeat the purpose of th
402
566
 
403
567
  ## Other Features
404
568
 
405
- ### Form Groups _(0.7kB min+gzip)_
406
-
407
- Sometimes you need to group multiple forms together.
408
-
409
- Use case: disable parent form when any child is "busy"; disable all children when parent is "busy".
410
-
411
- Use `FormGroupContextProvider` to wrap your children and parent forms.
412
-
413
- ```tsx
414
- <FormGroupContextProvider>
415
- <ChildForm1 />
416
- <ChildForm2 />
417
- <ParentForm />
418
- </FormGroupContextProvider>
419
- ```
420
-
421
- In your parent form, use the hook `useFormGroupParentTracker`, which returns `boolean` value indicating whether any child forms is busy.
422
-
423
- In children forms, there are two options. You can choose to consider form "busy" when:
424
-
425
- - `isSubmitting` is `true` by using `useFormGroupChildIsSubmittingTracker` hook
426
- - it is mounted by using `useFormGroupChildIsMountedTracker` hook
427
-
428
- Both hooks return `boolean` value indicating whether parent form is busy.
429
-
430
- ### TRPC.io Utils _(0.4kB min+gzip)_
569
+ ### TRPC.io Utils _(0.41kB min+gzip)_
431
570
 
432
571
  #### `trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer`
433
572
 
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Use this to extend internal types.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * declare module '@paragrav/rhf-utils' {
7
+ * export interface Register {
8
+ * RhfUtilsFormOptions: {
9
+ * myCustomOption?: boolean;
10
+ * };
11
+ * }
12
+ * }
13
+ * ```
14
+ */
15
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions, @typescript-eslint/no-empty-object-type
16
+ export interface Register {}
@@ -0,0 +1,2 @@
1
+ export { RhfUtilsClientConfigProvider } from '../client/config/context/RhfUtilsClientConfigProvider';
2
+ export type { RhfUtilsClientConfig } from '../client/config/RhfUtilsClientConfigType';
@@ -0,0 +1,3 @@
1
+ export { useFlatFieldErrorsContext } from '../errors/flat/context/useFlatFieldErrorsContext';
2
+ export { useFlatFieldErrorsContextHasOnlyOrphans } from '../errors/flat/context/useFlatFieldErrorsContextHasOnlyOrphans';
3
+ export { RhfUtilsNonFieldErrorMarker } from '../errors/nonfield/RhfUtilsNonFieldErrorMarker';
@@ -0,0 +1,7 @@
1
+ export { useRhfUtilsContext } from '../form/context/utils/useRhfUtilsContext';
2
+ export type { RhfUtilsFormOptions } from '../form/options/RhfUtilsFormOptionsType';
3
+ export type { SafeFieldValues } from '../form/rhf/SafeFieldValuesType';
4
+ export type { RHF_UseFormReturnWithoutProxies as UseFormReturnWithoutProxies } from '../form/RHF_UseFormReturnWithoutProxiesType';
5
+ export type { RhfUtilsFormComponentProps } from '../form/RhfUtilsFormComponentPropsType';
6
+ export type { UseRhfUtilsFormChildrenProps } from '../form/UseRhfUtilsFormChildrenPropsType';
7
+ export { useFormRequestSubmit } from '../form/utils/useFormRequestSubmit';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license @paragrav/rhf-utils
3
+ *
4
+ * Copyright (c) 2024-present paragrav.dev
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ export * from './config';
10
+ export * from './errors';
11
+ export * from './form';
12
+ export * from './submit';
13
+ export * from './zod';
@@ -0,0 +1,8 @@
1
+ export { FormStateRelayContextProvider } from '../form/state/relay/FormStateRelayContextProvider';
2
+ export type { FormStateRelayedAggregated } from '../form/state/relay/FormStateRelayedAggregatedType';
3
+ export type { FormStateRelayedItemWithUtils } from '../form/state/relay/FormStateRelayedItemType';
4
+ export type { FormStateRelayedOptions } from '../form/state/relay/FormStateRelayedOptionsType';
5
+ export type { FormStateRelayed } from '../form/state/relay/FormStateRelayedType';
6
+ export { useFormStateRelayPullAny, useFormStateRelayPullById, useFormStateRelayPullGroup, useFormStateRelayPullOnlyOrThrow, useFormStateWithUtilsViaRhfOrRelay, } from '../form/state/relay/pull/hooks';
7
+ export { FormStateRelayPusher } from '../form/state/relay/push/FormStateRelayPusher';
8
+ export { useFormStateRelayPusher } from '../form/state/relay/push/useFormStateRelayPusher';
@@ -0,0 +1,4 @@
1
+ export { FormSubmitError } from '../submit/error/FormSubmitError';
2
+ export type { FormSubmitFieldErrors } from '../submit/error/FormSubmitFieldErrors';
3
+ export { useLastSubmitError } from '../submit/last-error/useLastSubmitError';
4
+ export type { UseRhfUtilsFormOnSubmitContext, UseRhfUtilsFormOnSubmitErrorContext, } from '../submit/UseRhfUtilsFormOnSubmitContextType';
@@ -0,0 +1,2 @@
1
+ export { makeOnSubmitTrpcClientErrorHandler } from '../errors/trpc/makeOnSubmitTrpcClientErrorHandler';
2
+ export { trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer } from '../errors/trpc/trpcClientErrorToFormSubmitFieldErrorsSchemaTransformer';
@@ -0,0 +1,7 @@
1
+ export type * from './errors';
2
+ export type * from './form';
3
+ export type * from './relay';
4
+ export type * from './submit';
5
+ export type * from './trpc';
6
+ export type * from './zod';
7
+ export type { Register } from '../Register';
@@ -0,0 +1,6 @@
1
+ export { RhfUtilsZodForm } from '../resolvers/zod/form/RhfUtilsZodForm';
2
+ export { RhfUtilsZodFormProviders } from '../resolvers/zod/providers/RhfUtilsZodFormProviders';
3
+ export { RhfUtilsZodFormWithProviders } from '../resolvers/zod/with-providers/RhfUtilsZodFormWithProviders';
4
+ export type { RhfUtilsUseZodFormChildrenFC } from '../resolvers/zod/RhfUtilsUseZodFormChildrenFCType';
5
+ export type { RhfUtilsUseZodFormChildrenProps } from '../resolvers/zod/RhfUtilsUseZodFormChildrenPropsType';
6
+ export type { ZodTypeSafeFieldValues } from '../resolvers/zod/ZodTypeSafeFieldValuesType';