@jcoreio/zod-forms 2.0.0 → 2.1.1

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 (322) hide show
  1. package/ConditionalValidator.d.mts +25 -0
  2. package/ConditionalValidator.d.mts.map +1 -0
  3. package/ConditionalValidator.d.ts +12 -12
  4. package/ConditionalValidator.d.ts.map +1 -1
  5. package/FieldPath.d.mts +24 -0
  6. package/FieldPath.d.mts.map +1 -0
  7. package/FieldPath.d.ts +13 -15
  8. package/FieldPath.d.ts.map +1 -1
  9. package/FormAction.d.mts +15 -0
  10. package/FormAction.d.mts.map +1 -0
  11. package/FormAction.d.ts +12 -12
  12. package/FormAction.d.ts.map +1 -1
  13. package/FormContext.d.mts +40 -0
  14. package/FormContext.d.mts.map +1 -0
  15. package/FormContext.d.ts +34 -34
  16. package/FormContext.d.ts.map +1 -1
  17. package/FormState.d.mts +34 -0
  18. package/FormState.d.mts.map +1 -0
  19. package/FormState.d.ts +24 -25
  20. package/FormState.d.ts.map +1 -1
  21. package/FormState.js.map +1 -1
  22. package/FormState.mjs.map +1 -1
  23. package/FormStateContext.d.mts +8 -0
  24. package/FormStateContext.d.mts.map +1 -0
  25. package/FormStateContext.d.ts +2 -2
  26. package/FormStateContext.d.ts.map +1 -1
  27. package/actions/addHandlers.d.mts +15 -0
  28. package/actions/addHandlers.d.mts.map +1 -0
  29. package/actions/addHandlers.d.ts +8 -8
  30. package/actions/addHandlers.d.ts.map +1 -1
  31. package/actions/arrayActions.d.mts +130 -0
  32. package/actions/arrayActions.d.mts.map +1 -0
  33. package/actions/arrayActions.d.ts +77 -77
  34. package/actions/arrayActions.d.ts.map +1 -1
  35. package/actions/initialize.d.mts +14 -0
  36. package/actions/initialize.d.mts.map +1 -0
  37. package/actions/initialize.d.ts +8 -8
  38. package/actions/initialize.d.ts.map +1 -1
  39. package/actions/removeHandlers.d.mts +10 -0
  40. package/actions/removeHandlers.d.mts.map +1 -0
  41. package/actions/removeHandlers.d.ts +5 -5
  42. package/actions/removeHandlers.d.ts.map +1 -1
  43. package/actions/setMeta.d.mts +9 -0
  44. package/actions/setMeta.d.mts.map +1 -0
  45. package/actions/setMeta.d.ts +5 -5
  46. package/actions/setMeta.d.ts.map +1 -1
  47. package/actions/setMounted.d.mts +6 -0
  48. package/actions/setMounted.d.mts.map +1 -0
  49. package/actions/setMounted.d.ts +2 -2
  50. package/actions/setMounted.d.ts.map +1 -1
  51. package/actions/setParsedValue.d.mts +12 -0
  52. package/actions/setParsedValue.d.mts.map +1 -0
  53. package/actions/setParsedValue.d.ts +6 -6
  54. package/actions/setParsedValue.d.ts.map +1 -1
  55. package/actions/setSubmitStatus.d.mts +14 -0
  56. package/actions/setSubmitStatus.d.mts.map +1 -0
  57. package/actions/setSubmitStatus.d.ts +9 -9
  58. package/actions/setSubmitStatus.d.ts.map +1 -1
  59. package/actions/setValue.d.mts +10 -0
  60. package/actions/setValue.d.mts.map +1 -0
  61. package/actions/setValue.d.ts +5 -5
  62. package/actions/setValue.d.ts.map +1 -1
  63. package/actions/submit.d.mts +5 -0
  64. package/actions/submit.d.mts.map +1 -0
  65. package/actions/submit.d.ts +1 -1
  66. package/actions/submit.d.ts.map +1 -1
  67. package/actions/submitSucceeded.d.mts +5 -0
  68. package/actions/submitSucceeded.d.mts.map +1 -0
  69. package/actions/submitSucceeded.d.ts +1 -1
  70. package/actions/submitSucceeded.d.ts.map +1 -1
  71. package/createFormMiddleware.d.mts +6 -0
  72. package/createFormMiddleware.d.mts.map +1 -0
  73. package/createFormMiddleware.d.ts +2 -2
  74. package/createFormMiddleware.d.ts.map +1 -1
  75. package/createFormProvider.d.mts +15 -0
  76. package/createFormProvider.d.mts.map +1 -0
  77. package/createFormProvider.d.ts +9 -7
  78. package/createFormProvider.d.ts.map +1 -1
  79. package/createFormReducer.d.mts +9 -0
  80. package/createFormReducer.d.mts.map +1 -0
  81. package/createFormReducer.d.ts +4 -4
  82. package/createFormReducer.d.ts.map +1 -1
  83. package/createSelectFieldErrorMap.d.mts +32 -0
  84. package/createSelectFieldErrorMap.d.mts.map +1 -0
  85. package/createSelectFieldErrorMap.d.ts +23 -23
  86. package/createSelectFieldErrorMap.d.ts.map +1 -1
  87. package/createSelectFormStatus.d.mts +133 -0
  88. package/createSelectFormStatus.d.mts.map +1 -0
  89. package/createSelectFormStatus.d.ts +101 -97
  90. package/createSelectFormStatus.d.ts.map +1 -1
  91. package/createSelectFormStatus.js +2 -2
  92. package/createSelectFormStatus.js.map +1 -1
  93. package/createSelectFormStatus.mjs +1 -1
  94. package/createSelectFormStatus.mjs.map +1 -1
  95. package/createSelectFormValues.d.mts +45 -0
  96. package/createSelectFormValues.d.mts.map +1 -0
  97. package/createSelectFormValues.d.ts +34 -34
  98. package/createSelectFormValues.d.ts.map +1 -1
  99. package/createZodForm.d.mts +42 -0
  100. package/createZodForm.d.mts.map +1 -0
  101. package/createZodForm.d.ts +36 -32
  102. package/createZodForm.d.ts.map +1 -1
  103. package/index.d.mts +15 -0
  104. package/index.d.mts.map +1 -0
  105. package/index.d.ts +14 -14
  106. package/index.d.ts.map +1 -1
  107. package/initFormState.d.mts +4 -0
  108. package/initFormState.d.mts.map +1 -0
  109. package/initFormState.d.ts +1 -1
  110. package/initFormState.d.ts.map +1 -1
  111. package/package.json +10 -7
  112. package/reducers/addHandlers.d.mts +24 -0
  113. package/reducers/addHandlers.d.mts.map +1 -0
  114. package/reducers/addHandlers.d.ts +20 -20
  115. package/reducers/addHandlers.d.ts.map +1 -1
  116. package/reducers/arrayInsert.d.mts +7 -0
  117. package/reducers/arrayInsert.d.mts.map +1 -0
  118. package/reducers/arrayInsert.d.ts +3 -3
  119. package/reducers/arrayInsert.d.ts.map +1 -1
  120. package/reducers/arrayInsertParsed.d.mts +7 -0
  121. package/reducers/arrayInsertParsed.d.mts.map +1 -0
  122. package/reducers/arrayInsertParsed.d.ts +3 -3
  123. package/reducers/arrayInsertParsed.d.ts.map +1 -1
  124. package/reducers/arrayMove.d.mts +8 -0
  125. package/reducers/arrayMove.d.mts.map +1 -0
  126. package/reducers/arrayMove.d.ts +3 -3
  127. package/reducers/arrayMove.d.ts.map +1 -1
  128. package/reducers/arrayPop.d.mts +7 -0
  129. package/reducers/arrayPop.d.mts.map +1 -0
  130. package/reducers/arrayPop.d.ts +3 -3
  131. package/reducers/arrayPop.d.ts.map +1 -1
  132. package/reducers/arrayPush.d.mts +7 -0
  133. package/reducers/arrayPush.d.mts.map +1 -0
  134. package/reducers/arrayPush.d.ts +3 -3
  135. package/reducers/arrayPush.d.ts.map +1 -1
  136. package/reducers/arrayPushParsed.d.mts +7 -0
  137. package/reducers/arrayPushParsed.d.mts.map +1 -0
  138. package/reducers/arrayPushParsed.d.ts +3 -3
  139. package/reducers/arrayPushParsed.d.ts.map +1 -1
  140. package/reducers/arrayRemove.d.mts +7 -0
  141. package/reducers/arrayRemove.d.mts.map +1 -0
  142. package/reducers/arrayRemove.d.ts +3 -3
  143. package/reducers/arrayRemove.d.ts.map +1 -1
  144. package/reducers/arrayRemoveAll.d.mts +7 -0
  145. package/reducers/arrayRemoveAll.d.mts.map +1 -0
  146. package/reducers/arrayRemoveAll.d.ts +3 -3
  147. package/reducers/arrayRemoveAll.d.ts.map +1 -1
  148. package/reducers/arrayShift.d.mts +7 -0
  149. package/reducers/arrayShift.d.mts.map +1 -0
  150. package/reducers/arrayShift.d.ts +3 -3
  151. package/reducers/arrayShift.d.ts.map +1 -1
  152. package/reducers/arraySplice.d.mts +7 -0
  153. package/reducers/arraySplice.d.mts.map +1 -0
  154. package/reducers/arraySplice.d.ts +3 -3
  155. package/reducers/arraySplice.d.ts.map +1 -1
  156. package/reducers/arraySpliceParsed.d.mts +7 -0
  157. package/reducers/arraySpliceParsed.d.mts.map +1 -0
  158. package/reducers/arraySpliceParsed.d.ts +3 -3
  159. package/reducers/arraySpliceParsed.d.ts.map +1 -1
  160. package/reducers/arraySwap.d.mts +8 -0
  161. package/reducers/arraySwap.d.mts.map +1 -0
  162. package/reducers/arraySwap.d.ts +3 -3
  163. package/reducers/arraySwap.d.ts.map +1 -1
  164. package/reducers/arrayUnshift.d.mts +7 -0
  165. package/reducers/arrayUnshift.d.mts.map +1 -0
  166. package/reducers/arrayUnshift.d.ts +3 -3
  167. package/reducers/arrayUnshift.d.ts.map +1 -1
  168. package/reducers/arrayUnshiftParsed.d.mts +7 -0
  169. package/reducers/arrayUnshiftParsed.d.mts.map +1 -0
  170. package/reducers/arrayUnshiftParsed.d.ts +3 -3
  171. package/reducers/arrayUnshiftParsed.d.ts.map +1 -1
  172. package/reducers/initialize.d.mts +49 -0
  173. package/reducers/initialize.d.mts.map +1 -0
  174. package/reducers/initialize.d.ts +44 -41
  175. package/reducers/initialize.d.ts.map +1 -1
  176. package/reducers/removeHandlers.d.mts +24 -0
  177. package/reducers/removeHandlers.d.mts.map +1 -0
  178. package/reducers/removeHandlers.d.ts +20 -20
  179. package/reducers/removeHandlers.d.ts.map +1 -1
  180. package/reducers/setMeta.d.mts +6 -0
  181. package/reducers/setMeta.d.mts.map +1 -0
  182. package/reducers/setMeta.d.ts +3 -3
  183. package/reducers/setMeta.d.ts.map +1 -1
  184. package/reducers/setParsedValue.d.mts +50 -0
  185. package/reducers/setParsedValue.d.mts.map +1 -0
  186. package/reducers/setParsedValue.d.ts +45 -42
  187. package/reducers/setParsedValue.d.ts.map +1 -1
  188. package/reducers/setSubmitStatus.d.mts +24 -0
  189. package/reducers/setSubmitStatus.d.mts.map +1 -0
  190. package/reducers/setSubmitStatus.d.ts +20 -20
  191. package/reducers/setSubmitStatus.d.ts.map +1 -1
  192. package/reducers/setValue.d.mts +29 -0
  193. package/reducers/setValue.d.mts.map +1 -0
  194. package/reducers/setValue.d.ts +25 -23
  195. package/reducers/setValue.d.ts.map +1 -1
  196. package/reducers/submitSucceeded.d.mts +23 -0
  197. package/reducers/submitSucceeded.d.mts.map +1 -0
  198. package/reducers/submitSucceeded.d.ts +19 -19
  199. package/reducers/submitSucceeded.d.ts.map +1 -1
  200. package/reducers/util/getInverseArrayElementSchema.d.mts +3 -0
  201. package/reducers/util/getInverseArrayElementSchema.d.mts.map +1 -0
  202. package/reducers/util/getInverseArrayElementSchema.d.ts.map +1 -1
  203. package/reducers/util/updateRawArray.d.mts +7 -0
  204. package/reducers/util/updateRawArray.d.mts.map +1 -0
  205. package/reducers/util/updateRawArray.d.ts +3 -3
  206. package/reducers/util/updateRawArray.d.ts.map +1 -1
  207. package/src/FormState.ts +1 -0
  208. package/src/createSelectFormStatus.ts +3 -1
  209. package/src/useArrayField.ts +13 -2
  210. package/src/useField.ts +81 -18
  211. package/src/useHtmlField.ts +31 -23
  212. package/useArrayField.d.mts +34 -0
  213. package/useArrayField.d.mts.map +1 -0
  214. package/useArrayField.d.ts +23 -23
  215. package/useArrayField.d.ts.map +1 -1
  216. package/useArrayField.js +22 -8
  217. package/useArrayField.js.map +1 -1
  218. package/useArrayField.mjs +12 -2
  219. package/useArrayField.mjs.map +1 -1
  220. package/useField.d.mts +38 -0
  221. package/useField.d.mts.map +1 -0
  222. package/useField.d.ts +31 -28
  223. package/useField.d.ts.map +1 -1
  224. package/useField.js +55 -22
  225. package/useField.js.map +1 -1
  226. package/useField.mjs +34 -16
  227. package/useField.mjs.map +1 -1
  228. package/useFormContext.d.mts +4 -0
  229. package/useFormContext.d.mts.map +1 -0
  230. package/useFormContext.d.ts +1 -1
  231. package/useFormContext.d.ts.map +1 -1
  232. package/useFormDispatch.d.mts +5 -0
  233. package/useFormDispatch.d.mts.map +1 -0
  234. package/useFormDispatch.d.ts +1 -1
  235. package/useFormDispatch.d.ts.map +1 -1
  236. package/useFormSelector.d.mts +6 -0
  237. package/useFormSelector.d.mts.map +1 -0
  238. package/useFormSelector.d.ts +1 -1
  239. package/useFormSelector.d.ts.map +1 -1
  240. package/useFormStatus.d.mts +13 -0
  241. package/useFormStatus.d.mts.map +1 -0
  242. package/useFormStatus.d.ts +10 -10
  243. package/useFormStatus.d.ts.map +1 -1
  244. package/useFormValues.d.mts +8 -0
  245. package/useFormValues.d.mts.map +1 -0
  246. package/useFormValues.d.ts +4 -4
  247. package/useFormValues.d.ts.map +1 -1
  248. package/useHtmlField.d.mts +41 -0
  249. package/useHtmlField.d.mts.map +1 -0
  250. package/useHtmlField.d.ts +25 -24
  251. package/useHtmlField.d.ts.map +1 -1
  252. package/useHtmlField.js +34 -23
  253. package/useHtmlField.js.map +1 -1
  254. package/useHtmlField.mjs +35 -20
  255. package/useHtmlField.mjs.map +1 -1
  256. package/useInitialize.d.mts +5 -0
  257. package/useInitialize.d.mts.map +1 -0
  258. package/useInitialize.d.ts +1 -1
  259. package/useInitialize.d.ts.map +1 -1
  260. package/useSubmit.d.mts +5 -0
  261. package/useSubmit.d.mts.map +1 -0
  262. package/useSubmit.d.ts +1 -1
  263. package/useSubmit.d.ts.map +1 -1
  264. package/util/DeepPartial.d.mts +2 -0
  265. package/util/DeepPartial.d.mts.map +1 -0
  266. package/util/DeepPartial.d.ts +1 -3
  267. package/util/DeepPartial.d.ts.map +1 -1
  268. package/util/PathInSchema.d.mts +5 -0
  269. package/util/PathInSchema.d.mts.map +1 -0
  270. package/util/PathInSchema.d.ts +1 -1
  271. package/util/PathInSchema.d.ts.map +1 -1
  272. package/util/PathInType.d.mts +7 -0
  273. package/util/PathInType.d.mts.map +1 -0
  274. package/util/PathInType.d.ts +3 -8
  275. package/util/PathInType.d.ts.map +1 -1
  276. package/util/SchemaAt.d.mts +5 -0
  277. package/util/SchemaAt.d.mts.map +1 -0
  278. package/util/SchemaAt.d.ts.map +1 -1
  279. package/util/acceptsBigint.d.mts +3 -0
  280. package/util/acceptsBigint.d.mts.map +1 -0
  281. package/util/acceptsBigint.d.ts.map +1 -1
  282. package/util/acceptsBigint.js +2 -2
  283. package/util/acceptsBigint.js.map +1 -1
  284. package/util/acceptsNumber.d.mts +3 -0
  285. package/util/acceptsNumber.d.mts.map +1 -0
  286. package/util/acceptsNumber.d.ts.map +1 -1
  287. package/util/acceptsNumber.js +2 -2
  288. package/util/acceptsNumber.js.map +1 -1
  289. package/util/bindActionsToField.d.mts +3 -0
  290. package/util/bindActionsToField.d.mts.map +1 -0
  291. package/util/bindActionsToField.d.ts +2 -6
  292. package/util/bindActionsToField.d.ts.map +1 -1
  293. package/util/get.d.mts +2 -0
  294. package/util/get.d.mts.map +1 -0
  295. package/util/get.d.ts.map +1 -1
  296. package/util/getArrayElementSchema.d.mts +3 -0
  297. package/util/getArrayElementSchema.d.mts.map +1 -0
  298. package/util/getArrayElementSchema.d.ts.map +1 -1
  299. package/util/getArrayElementSchema.js +2 -2
  300. package/util/getArrayElementSchema.js.map +1 -1
  301. package/util/isPromise.d.mts +2 -0
  302. package/util/isPromise.d.mts.map +1 -0
  303. package/util/isPromise.d.ts.map +1 -1
  304. package/util/maybeParse.d.mts +3 -0
  305. package/util/maybeParse.d.mts.map +1 -0
  306. package/util/maybeParse.d.ts.map +1 -1
  307. package/util/parsePathstring.d.mts +33 -0
  308. package/util/parsePathstring.d.mts.map +1 -0
  309. package/util/parsePathstring.d.ts +14 -38
  310. package/util/parsePathstring.d.ts.map +1 -1
  311. package/util/pathstring.d.mts +7 -0
  312. package/util/pathstring.d.mts.map +1 -0
  313. package/util/pathstring.d.ts.map +1 -1
  314. package/util/set.d.mts +2 -0
  315. package/util/set.d.mts.map +1 -0
  316. package/util/set.d.ts.map +1 -1
  317. package/util/setAdd.d.mts +2 -0
  318. package/util/setAdd.d.mts.map +1 -0
  319. package/util/setAdd.d.ts.map +1 -1
  320. package/util/setDelete.d.mts +2 -0
  321. package/util/setDelete.d.mts.map +1 -0
  322. package/util/setDelete.d.ts.map +1 -1
@@ -1,24 +1,24 @@
1
1
  import z from 'zod';
2
- import { FormState } from '../FormState';
3
- import { SetSubmitStatusAction } from '../actions/setSubmitStatus';
2
+ import { FormState } from "../FormState.js";
3
+ import { SetSubmitStatusAction } from "../actions/setSubmitStatus.js";
4
4
  export declare function setSubmitStatusReducer<T extends z.ZodTypeAny>(state: FormState<T>, action: SetSubmitStatusAction<T>): {
5
- submitSucceeded: boolean;
6
- submitting: boolean;
7
- submitError?: unknown;
8
- submitPromise?: Promise<void>;
9
- submitFailed: boolean;
10
- submittedParsedValues?: z.output<T> | undefined;
11
- submittedValues?: z.input<T> | undefined;
12
- mounted: boolean;
13
- initialized: boolean;
14
- fieldMeta: { [K in string]?: import("../FormState").FieldMeta; };
15
- values?: import("../util/DeepPartial").DeepPartial<z.input<T>> | undefined;
16
- parsedValues?: z.output<T> | undefined;
17
- initialValues?: import("../util/DeepPartial").DeepPartial<z.input<T>> | undefined;
18
- initialParsedValues?: z.output<T> | undefined;
19
- validationError?: any;
20
- onSubmit: Set<import("../FormState").SubmitHandler<T>>;
21
- onSubmitSucceeded: Set<import("../FormState").SubmitSuccededHandler>;
22
- onSubmitFailed: Set<import("../FormState").SubmitFailedHandler>;
5
+ submitSucceeded: boolean;
6
+ submitting: boolean;
7
+ submitError?: unknown;
8
+ submitPromise?: Promise<void>;
9
+ submitFailed: boolean;
10
+ submittedParsedValues?: z.output<T> | undefined;
11
+ submittedValues?: z.input<T> | undefined;
12
+ mounted: boolean;
13
+ initialized: boolean;
14
+ fieldMeta: { [K in string]?: import("../FormState.js").FieldMeta };
15
+ values?: import("../util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
16
+ parsedValues?: z.output<T> | undefined;
17
+ initialValues?: import("../util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
18
+ initialParsedValues?: z.output<T> | undefined;
19
+ validationError?: any;
20
+ onSubmit: Set<import("../FormState.js").SubmitHandler<T>>;
21
+ onSubmitSucceeded: Set<import("../FormState.js").SubmitSuccededHandler>;
22
+ onSubmitFailed: Set<import("../FormState.js").SubmitFailedHandler>;
23
23
  };
24
24
  //# sourceMappingURL=setSubmitStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setSubmitStatus.d.ts","sourceRoot":"","sources":["../../src/reducers/setSubmitStatus.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAElE,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAC3D,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EACnB,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;;;;;;;;;;8BASyK,CAAC;;;;;;;;;EAD3M"}
1
+ {"version":3,"file":"setSubmitStatus.d.ts","names":["z","FormState","SetSubmitStatusAction","setSubmitStatusReducer","ZodTypeAny","state","T","action","FieldMeta"],"sources":["../../src/reducers/setSubmitStatus.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,SAAS;AAClB,SAASC,qBAAqB;AAE9B,wBAAgBC,sBAAsB,CAAC,UAAUH,CAAC,CAACI,UAAU,CAAAD,CAC3DE,KAAK,EAAEJ,SAAS,CAACK,CAAC,CAAC,EACnBC,MAAM,EAAEL,qBAAqB,CAACI,CAAC,CAAC;;;;;;;;;;+BASiM,0BAAAE,SAAA","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ import z from 'zod';
2
+ import { FormState } from "../FormState.mjs";
3
+ import { SetValueAction } from "../actions/setValue.mjs";
4
+ import { FieldPath } from "../FieldPath.mjs";
5
+ export declare const createSetValueReducer: <T extends z.ZodTypeAny>({
6
+ schema
7
+ }: {
8
+ schema: T;
9
+ }) => <Field extends FieldPath>(state: FormState<T>, action: SetValueAction<Field>) => FormState<T> | {
10
+ submitError: undefined;
11
+ validationError: undefined;
12
+ values: import("../util/DeepPartial.mjs").DeepPartial<z.input<T>> | undefined;
13
+ parsedValues: any;
14
+ mounted: boolean;
15
+ initialized: boolean;
16
+ fieldMeta: { [K in string]?: import("../FormState.mjs").FieldMeta };
17
+ submittedParsedValues?: z.output<T> | undefined;
18
+ submittedValues?: z.input<T> | undefined;
19
+ initialValues?: import("../util/DeepPartial.mjs").DeepPartial<z.input<T>> | undefined;
20
+ initialParsedValues?: z.output<T> | undefined;
21
+ submitPromise?: Promise<void>;
22
+ onSubmit: Set<import("../FormState.mjs").SubmitHandler<T>>;
23
+ onSubmitSucceeded: Set<import("../FormState.mjs").SubmitSuccededHandler>;
24
+ onSubmitFailed: Set<import("../FormState.mjs").SubmitFailedHandler>;
25
+ submitting: boolean;
26
+ submitSucceeded: boolean;
27
+ submitFailed: boolean;
28
+ };
29
+ //# sourceMappingURL=setValue.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setValue.d.mts","names":["z","FormState","SetValueAction","FieldPath","createSetValueReducer","ZodTypeAny","schema","T","state","action","Field","FieldMeta"],"sources":["../../src/reducers/setValue.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,SAAS;AAClB,SAASC,cAAc;AAEvB,SAASC,SAAS;AAElB,qBAAaC,qBAAqB,GAAI,UAAUJ,CAAC,CAACK,UAAU,EAAE;EAAAC;CAAA,EAE3D;EACDA,MAAM,EAAEC,CAAC;CACV,MAC0B,cAAcJ,SAAS,EAC9CK,KAAA,EAAOP,SAAS,CAACM,CAAC,CAAC,EACnBE,MAAA,EAAQP,cAAc,CAACQ,KAAK,CAAC,KAAAT,SAAA,CAAAM,CAAA;;;;;;;+BASQ,2BAAAI,SAAA;;;;;;;;;;;;CAiBtC","ignoreList":[]}
@@ -1,27 +1,29 @@
1
1
  import z from 'zod';
2
- import { FormState } from '../FormState';
3
- import { SetValueAction } from '../actions/setValue';
4
- import { FieldPath } from '../FieldPath';
5
- export declare const createSetValueReducer: <T extends z.ZodTypeAny>({ schema, }: {
6
- schema: T;
2
+ import { FormState } from "../FormState.js";
3
+ import { SetValueAction } from "../actions/setValue.js";
4
+ import { FieldPath } from "../FieldPath.js";
5
+ export declare const createSetValueReducer: <T extends z.ZodTypeAny>({
6
+ schema
7
+ }: {
8
+ schema: T;
7
9
  }) => <Field extends FieldPath>(state: FormState<T>, action: SetValueAction<Field>) => FormState<T> | {
8
- submitError: undefined;
9
- validationError: undefined;
10
- values: import("../util/DeepPartial").DeepPartial<z.input<T>> | undefined;
11
- parsedValues: any;
12
- mounted: boolean;
13
- initialized: boolean;
14
- fieldMeta: { [K in string]?: import("../FormState").FieldMeta; };
15
- submittedParsedValues?: z.output<T> | undefined;
16
- submittedValues?: z.input<T> | undefined;
17
- initialValues?: import("../util/DeepPartial").DeepPartial<z.input<T>> | undefined;
18
- initialParsedValues?: z.output<T> | undefined;
19
- submitPromise?: Promise<void>;
20
- onSubmit: Set<import("../FormState").SubmitHandler<T>>;
21
- onSubmitSucceeded: Set<import("../FormState").SubmitSuccededHandler>;
22
- onSubmitFailed: Set<import("../FormState").SubmitFailedHandler>;
23
- submitting: boolean;
24
- submitSucceeded: boolean;
25
- submitFailed: boolean;
10
+ submitError: undefined;
11
+ validationError: undefined;
12
+ values: import("../util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
13
+ parsedValues: any;
14
+ mounted: boolean;
15
+ initialized: boolean;
16
+ fieldMeta: { [K in string]?: import("../FormState.js").FieldMeta };
17
+ submittedParsedValues?: z.output<T> | undefined;
18
+ submittedValues?: z.input<T> | undefined;
19
+ initialValues?: import("../util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
20
+ initialParsedValues?: z.output<T> | undefined;
21
+ submitPromise?: Promise<void>;
22
+ onSubmit: Set<import("../FormState.js").SubmitHandler<T>>;
23
+ onSubmitSucceeded: Set<import("../FormState.js").SubmitSuccededHandler>;
24
+ onSubmitFailed: Set<import("../FormState.js").SubmitFailedHandler>;
25
+ submitting: boolean;
26
+ submitSucceeded: boolean;
27
+ submitFailed: boolean;
26
28
  };
27
29
  //# sourceMappingURL=setValue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setValue.d.ts","sourceRoot":"","sources":["../../src/reducers/setValue.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,aAE3D;IACD,MAAM,EAAE,CAAC,CAAA;CACV,MAC0B,KAAK,SAAS,SAAS,EAC9C,OAAO,SAAS,CAAC,CAAC,CAAC,EACnB,QAAQ,cAAc,CAAC,KAAK,CAAC;;;;;;;8BAShB,CAAC;;;;;;;;;;;;CAiBf,CAAA"}
1
+ {"version":3,"file":"setValue.d.ts","names":["z","FormState","SetValueAction","FieldPath","createSetValueReducer","ZodTypeAny","schema","T","state","action","Field","FieldMeta"],"sources":["../../src/reducers/setValue.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,SAAS;AAClB,SAASC,cAAc;AAEvB,SAASC,SAAS;AAElB,qBAAaC,qBAAqB,GAAI,UAAUJ,CAAC,CAACK,UAAU,EAAE;EAAAC;CAAA,EAE3D;EACDA,MAAM,EAAEC,CAAC;CACV,MAC0B,cAAcJ,SAAS,EAC9CK,KAAA,EAAOP,SAAS,CAACM,CAAC,CAAC,EACnBE,MAAA,EAAQP,cAAc,CAACQ,KAAK,CAAC,KAAAT,SAAA,CAAAM,CAAA;;;;;;;+BASQ,0BAAAI,SAAA;;;;;;;;;;;;CAiBtC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ import z from 'zod';
2
+ import { FormState } from "../FormState.mjs";
3
+ export declare function submitSucceededReducer<T extends z.ZodTypeAny>(state: FormState<T>): {
4
+ submitting: boolean;
5
+ submitSucceeded: boolean;
6
+ submitFailed: boolean;
7
+ submitError: undefined;
8
+ submitPromise: undefined;
9
+ initialParsedValues: z.output<T> | undefined;
10
+ initialValues: z.input<T> | undefined;
11
+ mounted: boolean;
12
+ initialized: boolean;
13
+ fieldMeta: { [K in string]?: import("../FormState.mjs").FieldMeta };
14
+ values?: import("../util/DeepPartial.mjs").DeepPartial<z.input<T>> | undefined;
15
+ parsedValues?: z.output<T> | undefined;
16
+ submittedParsedValues?: z.output<T> | undefined;
17
+ submittedValues?: z.input<T> | undefined;
18
+ validationError?: any;
19
+ onSubmit: Set<import("../FormState.mjs").SubmitHandler<T>>;
20
+ onSubmitSucceeded: Set<import("../FormState.mjs").SubmitSuccededHandler>;
21
+ onSubmitFailed: Set<import("../FormState.mjs").SubmitFailedHandler>;
22
+ };
23
+ //# sourceMappingURL=submitSucceeded.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitSucceeded.d.mts","names":["z","FormState","submitSucceededReducer","ZodTypeAny","state","T","FieldMeta"],"sources":["../../src/reducers/submitSucceeded.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,SAAS;AAElB,wBAAgBC,sBAAsB,CAAC,UAAUF,CAAC,CAACG,UAAU,CAAAD,CAC3DE,KAAK,EAAEH,SAAS,CAACI,CAAC,CAAC;;;;;;;;;;+BAaqM,2BAAAC,SAAA","ignoreList":[]}
@@ -1,23 +1,23 @@
1
1
  import z from 'zod';
2
- import { FormState } from '../FormState';
2
+ import { FormState } from "../FormState.js";
3
3
  export declare function submitSucceededReducer<T extends z.ZodTypeAny>(state: FormState<T>): {
4
- submitting: boolean;
5
- submitSucceeded: boolean;
6
- submitFailed: boolean;
7
- submitError: undefined;
8
- submitPromise: undefined;
9
- initialParsedValues: z.output<T> | undefined;
10
- initialValues: z.input<T> | undefined;
11
- mounted: boolean;
12
- initialized: boolean;
13
- fieldMeta: { [K in string]?: import("../FormState").FieldMeta; };
14
- values?: import("../util/DeepPartial").DeepPartial<z.input<T>> | undefined;
15
- parsedValues?: z.output<T> | undefined;
16
- submittedParsedValues?: z.output<T> | undefined;
17
- submittedValues?: z.input<T> | undefined;
18
- validationError?: any;
19
- onSubmit: Set<import("../FormState").SubmitHandler<T>>;
20
- onSubmitSucceeded: Set<import("../FormState").SubmitSuccededHandler>;
21
- onSubmitFailed: Set<import("../FormState").SubmitFailedHandler>;
4
+ submitting: boolean;
5
+ submitSucceeded: boolean;
6
+ submitFailed: boolean;
7
+ submitError: undefined;
8
+ submitPromise: undefined;
9
+ initialParsedValues: z.output<T> | undefined;
10
+ initialValues: z.input<T> | undefined;
11
+ mounted: boolean;
12
+ initialized: boolean;
13
+ fieldMeta: { [K in string]?: import("../FormState.js").FieldMeta };
14
+ values?: import("../util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
15
+ parsedValues?: z.output<T> | undefined;
16
+ submittedParsedValues?: z.output<T> | undefined;
17
+ submittedValues?: z.input<T> | undefined;
18
+ validationError?: any;
19
+ onSubmit: Set<import("../FormState.js").SubmitHandler<T>>;
20
+ onSubmitSucceeded: Set<import("../FormState.js").SubmitSuccededHandler>;
21
+ onSubmitFailed: Set<import("../FormState.js").SubmitFailedHandler>;
22
22
  };
23
23
  //# sourceMappingURL=submitSucceeded.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"submitSucceeded.d.ts","sourceRoot":"","sources":["../../src/reducers/submitSucceeded.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAC3D,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;;;;;;;;;;8BAa6K,CAAC;;;;;;;;;EADlM"}
1
+ {"version":3,"file":"submitSucceeded.d.ts","names":["z","FormState","submitSucceededReducer","ZodTypeAny","state","T","FieldMeta"],"sources":["../../src/reducers/submitSucceeded.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,SAAS;AAElB,wBAAgBC,sBAAsB,CAAC,UAAUF,CAAC,CAACG,UAAU,CAAAD,CAC3DE,KAAK,EAAEH,SAAS,CAACI,CAAC,CAAC;;;;;;;;;;+BAaqM,0BAAAC,SAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import z from 'zod';
2
+ export declare function getInverseArrayElementSchema(schema: z.ZodTypeAny): z.ZodType<any, any, any>;
3
+ //# sourceMappingURL=getInverseArrayElementSchema.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getInverseArrayElementSchema.d.mts","names":["z","getInverseArrayElementSchema","schema","ZodTypeAny","ZodType"],"sources":["../../../src/reducers/util/getInverseArrayElementSchema.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAInB,wBAAgBC,4BAA4BA,CAACC,MAAM,EAAEF,CAAC,CAACG,UAAU,GAAAH,CAAA,CAAAI,OAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"getInverseArrayElementSchema.d.ts","sourceRoot":"","sources":["../../../src/reducers/util/getInverseArrayElementSchema.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAInB,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,4BAIhE"}
1
+ {"version":3,"file":"getInverseArrayElementSchema.d.ts","names":["z","getInverseArrayElementSchema","schema","ZodTypeAny","ZodType"],"sources":["../../../src/reducers/util/getInverseArrayElementSchema.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAInB,wBAAgBC,4BAA4BA,CAACC,MAAM,EAAEF,CAAC,CAACG,UAAU,GAAAH,CAAA,CAAAI,OAAA","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import z from 'zod';
2
+ import { Reducer } from 'react';
3
+ import { FieldPath, FieldPathForValue } from "../../FieldPath.mjs";
4
+ import { FormState } from "../../FormState.mjs";
5
+ import { FormAction } from "../../FormAction.mjs";
6
+ export declare function updateRawArray<T extends z.ZodTypeAny, Field extends FieldPathForValue<any[]>>(reducer: Reducer<FormState<T>, FormAction<T>>, state: FormState<T>, field: FieldPath, updater: (array: z.input<Field['schema']> | undefined) => z.input<Field['schema']> | undefined): FormState<T>;
7
+ //# sourceMappingURL=updateRawArray.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateRawArray.d.mts","names":["z","Reducer","FieldPath","FieldPathForValue","FormState","FormAction","updateRawArray","ZodTypeAny","reducer","T","state","field","updater","array","input","Field"],"sources":["../../../src/reducers/util/updateRawArray.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,EAAEC,iBAAiB;AACrC,SAASC,SAAS;AAClB,SAASC,UAAU;AAInB,wBAAgBC,cAAc,CAC5B,UAAUN,CAAC,CAACO,UAAU,EACtB,cAAcJ,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAAG,CAEtCE,OAAO,EAAEP,OAAO,CAACG,SAAS,CAACK,CAAC,CAAC,EAAEJ,UAAU,CAACI,CAAC,CAAC,CAAC,EAC7CC,KAAK,EAAEN,SAAS,CAACK,CAAC,CAAC,EACnBE,KAAK,EAAET,SAAS,EAChBU,OAAO,EAAE,CACPC,KAAK,EAAEb,CAAC,CAACc,KAAK,CAACC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,KACxCf,CAAC,CAACc,KAAK,CAACC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,GAAAX,SAAA,CAAAK,CAAA","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import z from 'zod';
2
2
  import { Reducer } from 'react';
3
- import { FieldPath, FieldPathForValue } from '../../FieldPath';
4
- import { FormState } from '../../FormState';
5
- import { FormAction } from '../../FormAction';
3
+ import { FieldPath, FieldPathForValue } from "../../FieldPath.js";
4
+ import { FormState } from "../../FormState.js";
5
+ import { FormAction } from "../../FormAction.js";
6
6
  export declare function updateRawArray<T extends z.ZodTypeAny, Field extends FieldPathForValue<any[]>>(reducer: Reducer<FormState<T>, FormAction<T>>, state: FormState<T>, field: FieldPath, updater: (array: z.input<Field['schema']> | undefined) => z.input<Field['schema']> | undefined): FormState<T>;
7
7
  //# sourceMappingURL=updateRawArray.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateRawArray.d.ts","sourceRoot":"","sources":["../../../src/reducers/util/updateRawArray.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAI7C,wBAAgB,cAAc,CAC5B,CAAC,SAAS,CAAC,CAAC,UAAU,EACtB,KAAK,SAAS,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAEtC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAC7C,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,EACnB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,CACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,KACxC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,gBAO1C"}
1
+ {"version":3,"file":"updateRawArray.d.ts","names":["z","Reducer","FieldPath","FieldPathForValue","FormState","FormAction","updateRawArray","ZodTypeAny","reducer","T","state","field","updater","array","input","Field"],"sources":["../../../src/reducers/util/updateRawArray.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,EAAEC,iBAAiB;AACrC,SAASC,SAAS;AAClB,SAASC,UAAU;AAInB,wBAAgBC,cAAc,CAC5B,UAAUN,CAAC,CAACO,UAAU,EACtB,cAAcJ,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAAG,CAEtCE,OAAO,EAAEP,OAAO,CAACG,SAAS,CAACK,CAAC,CAAC,EAAEJ,UAAU,CAACI,CAAC,CAAC,CAAC,EAC7CC,KAAK,EAAEN,SAAS,CAACK,CAAC,CAAC,EACnBE,KAAK,EAAET,SAAS,EAChBU,OAAO,EAAE,CACPC,KAAK,EAAEb,CAAC,CAACc,KAAK,CAACC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,KACxCf,CAAC,CAACc,KAAK,CAACC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,GAAAX,SAAA,CAAAK,CAAA","ignoreList":[]}
package/src/FormState.ts CHANGED
@@ -4,6 +4,7 @@ import { DeepPartial } from './util/DeepPartial'
4
4
  export type FieldMeta = {
5
5
  touched: boolean
6
6
  visited: boolean
7
+ customMeta?: unknown
7
8
  }
8
9
 
9
10
  export type SubmitHandler<T extends z.ZodTypeAny> = (
@@ -34,8 +34,10 @@ export function createSelectFormStatus() {
34
34
  ],
35
35
  isEqual
36
36
  ),
37
+ selectValidationError,
37
38
  ],
38
- (parsedPristine, pristine) => parsedPristine && pristine
39
+ (parsedPristine, pristine, validationError) =>
40
+ validationError ? pristine : parsedPristine
39
41
  )
40
42
 
41
43
  return createStructuredSelector({
@@ -20,6 +20,7 @@ import { setValue } from './actions/setValue'
20
20
  import { setMeta } from './actions/setMeta'
21
21
  import { FieldMeta } from './FormState'
22
22
  import { DeepPartial } from './util/DeepPartial'
23
+ import { maybeParse } from './util/maybeParse'
23
24
 
24
25
  export type UseArrayFieldProps<Field extends FieldPath> =
25
26
  NonNullable<z.input<Field['schema']>> extends any[] ?
@@ -78,16 +79,25 @@ function useArrayFieldBase<Field extends ArrayFieldPath>(
78
79
  createSelector(
79
80
  [
80
81
  createStructuredSelector({
82
+ parsedValue: ({ parsedValues }) =>
83
+ get(parsedValues, field.path) as z.output<T> | undefined,
81
84
  value: ({ values }) =>
82
85
  get(values, field.path) as DeepPartial<z.input<T>> | undefined,
86
+ initialParsedValue: ({ initialParsedValues }) =>
87
+ get(initialParsedValues, field.path) as z.output<T> | undefined,
83
88
  initialValue: ({ initialValues }) =>
84
89
  get(initialValues, field.path) as
85
90
  | DeepPartial<z.input<T>>
86
91
  | undefined,
87
92
  }),
88
93
  ],
89
- ({ value, initialValue }) => {
90
- const dirty = !isEqual(value, initialValue)
94
+ ({
95
+ value,
96
+ parsedValue = maybeParse(field.schema, value),
97
+ initialValue,
98
+ initialParsedValue = maybeParse(field.schema, initialValue),
99
+ }) => {
100
+ const dirty = !isEqual(parsedValue, initialParsedValue)
91
101
  const pristine = !dirty
92
102
  return {
93
103
  dirty,
@@ -135,6 +145,7 @@ function useArrayFieldBase<Field extends ArrayFieldPath>(
135
145
  ...boundActions,
136
146
  visited: meta?.visited || false,
137
147
  touched: meta?.touched || submitFailed,
148
+ customMeta: meta?.customMeta,
138
149
  error,
139
150
  elements,
140
151
  dirty,
package/src/useField.ts CHANGED
@@ -20,6 +20,8 @@ import { SchemaAt } from './util/SchemaAt'
20
20
  import { maybeParse } from './util/maybeParse'
21
21
  import { bindActionsToField } from './util/bindActionsToField'
22
22
  import { DeepPartial } from './util/DeepPartial'
23
+ import { invert } from 'zod-invertible'
24
+ import { SelectFormValues } from './createSelectFormValues'
23
25
 
24
26
  export type UseFieldProps<Field extends FieldPath> = FieldMeta &
25
27
  ReturnType<
@@ -53,11 +55,18 @@ export interface TypedUseField<T extends z.ZodTypeAny> {
53
55
  ): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>
54
56
  }
55
57
 
58
+ export type UseFieldOptions = {
59
+ normalizeOnMount?: boolean
60
+ }
61
+
56
62
  function useFieldBase<
57
63
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
58
64
  T extends z.ZodTypeAny,
59
65
  Field extends FieldPath,
60
- >(field: Field): UseFieldProps<Field> {
66
+ >(
67
+ field: Field,
68
+ { normalizeOnMount = true }: UseFieldOptions = {}
69
+ ): UseFieldProps<Field> {
61
70
  type Schema = Field['schema']
62
71
 
63
72
  const {
@@ -68,6 +77,8 @@ function useFieldBase<
68
77
  selectFieldErrorMap,
69
78
  } = useFormContext<T>()
70
79
 
80
+ type FormValues = ReturnType<SelectFormValues<T>>
81
+
71
82
  const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>
72
83
 
73
84
  const valuesSelector = React.useMemo(
@@ -77,24 +88,42 @@ function useFieldBase<
77
88
  createSelector(
78
89
  [
79
90
  createStructuredSelector({
80
- parsedValue: ({ parsedValues }) =>
81
- get(parsedValues, field.path) as z.output<Schema> | undefined,
82
- value: ({ values }) => get(values, field.path),
83
- initialParsedValue: ({ initialParsedValues }) =>
84
- get(initialParsedValues, field.path) as
85
- | z.output<Schema>
86
- | undefined,
87
- initialValue: ({ initialValues }) =>
88
- get(initialValues, field.path),
91
+ parsedValue: createSelector(
92
+ (state: FormValues) => state.parsedValues,
93
+ (parsedValues) =>
94
+ get(parsedValues, field.path) as z.output<Schema> | undefined
95
+ ),
96
+ value: createSelector(
97
+ (state: FormValues) => state.values,
98
+ (values) =>
99
+ get(values, field.path) as
100
+ | DeepPartial<z.input<Schema>>
101
+ | undefined
102
+ ),
103
+ initialParsedValue: createSelector(
104
+ (state: FormValues) => state.initialParsedValues,
105
+ (initialParsedValues) =>
106
+ get(initialParsedValues, field.path) as
107
+ | z.output<Schema>
108
+ | undefined
109
+ ),
110
+ initialValue: createSelector(
111
+ (state: FormValues) => state.initialValues,
112
+ (initialValues) =>
113
+ get(initialValues, field.path) as
114
+ | DeepPartial<z.input<Schema>>
115
+ | undefined
116
+ ),
89
117
  }),
90
118
  ],
91
119
  ({
92
120
  value,
93
- parsedValue = maybeParse(field.schema, value),
121
+ parsedValue = maybeParse<Schema>(field.schema, value),
94
122
  initialValue,
95
- initialParsedValue = maybeParse(field.schema, initialValue),
123
+ initialParsedValue = maybeParse<Schema>(field.schema, initialValue),
96
124
  }) => {
97
- const dirty = !isEqual(value, initialValue)
125
+ // console.error(new Error('selector'), { value, parsedValue })
126
+ const dirty = !isEqual(parsedValue, initialParsedValue)
98
127
  const pristine = !dirty
99
128
  return {
100
129
  parsedValue,
@@ -117,18 +146,44 @@ function useFieldBase<
117
146
  )
118
147
  const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])
119
148
  const submitFailed = useFormSelector((state) => state.submitFailed)
149
+ const initialized = useFormSelector((state) => state.initialized)
120
150
 
121
151
  const boundActions = React.useMemo(
122
152
  () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),
123
153
  [field.pathstring]
124
154
  )
125
155
 
156
+ const info = React.useRef({ mounted: false, initialized })
157
+
158
+ let normalizedValue = parsedValues.value
159
+ if (
160
+ normalizeOnMount &&
161
+ (!info.current.mounted || (!info.current.initialized && initialized))
162
+ ) {
163
+ const parsed = field.schema.safeParse(parsedValues.value)
164
+ const formatted =
165
+ parsed.success ? invert(field.schema).safeParse(parsed.data) : undefined
166
+ if (formatted?.success && formatted.data !== parsedValues.value) {
167
+ normalizedValue = formatted.data
168
+ }
169
+ }
170
+ info.current.mounted = true
171
+ info.current.initialized = initialized
172
+
173
+ React.useEffect(() => {
174
+ if (normalizeOnMount && !isEqual(normalizedValue, parsedValues.value)) {
175
+ boundActions.setValue(normalizedValue)
176
+ }
177
+ }, [])
178
+
126
179
  return React.useMemo(
127
180
  () => ({
128
181
  ...boundActions,
129
182
  ...parsedValues,
183
+ value: normalizedValue,
130
184
  visited: meta?.visited || false,
131
185
  touched: meta?.touched || submitFailed,
186
+ customMeta: meta?.customMeta,
132
187
  error,
133
188
  valid: !error,
134
189
  invalid: Boolean(error),
@@ -138,7 +193,8 @@ function useFieldBase<
138
193
  }
139
194
 
140
195
  export function useField<Field extends FieldPath>(
141
- field: Field
196
+ field: Field,
197
+ options?: UseFieldOptions
142
198
  ): UseFieldProps<Field>
143
199
  export function useField<
144
200
  T extends z.ZodTypeAny = z.ZodBranded<
@@ -146,7 +202,10 @@ export function useField<
146
202
  'cast to TypedUseArray<T> to pass a path array'
147
203
  >,
148
204
  Path extends PathInSchema<T> = any,
149
- >(field: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>
205
+ >(
206
+ field: Path,
207
+ options?: UseFieldOptions
208
+ ): UseFieldProps<FieldPath<SchemaAt<T, Path>>>
150
209
  export function useField<
151
210
  T extends z.ZodTypeAny = z.ZodBranded<
152
211
  z.ZodNever,
@@ -154,13 +213,17 @@ export function useField<
154
213
  >,
155
214
  Pathstring extends PathstringInSchema<T> = any,
156
215
  >(
157
- field: Pathstring
216
+ field: Pathstring,
217
+
218
+ options?: UseFieldOptions
158
219
  ): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>
159
220
  export function useField<T extends z.ZodTypeAny>(
160
- field: FieldPath | BasePath | string
221
+ field: FieldPath | BasePath | string,
222
+ options?: UseFieldOptions
161
223
  ): UseFieldProps<any> | { ERROR: string } {
162
224
  const { root } = useFormContext<T>()
163
225
  return useFieldBase(
164
- field instanceof FieldPath ? field : root.get(field as any)
226
+ field instanceof FieldPath ? field : root.get(field as any),
227
+ options
165
228
  )
166
229
  }