@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
package/useField.js CHANGED
@@ -16,9 +16,13 @@ var _reactRedux = require("react-redux");
16
16
  var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
17
17
  var _maybeParse = require("./util/maybeParse.js");
18
18
  var _bindActionsToField = require("./util/bindActionsToField.js");
19
+ var _zodInvertible = require("zod-invertible");
19
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
21
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
22
  function useFieldBase(field) {
23
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
24
+ _ref$normalizeOnMount = _ref.normalizeOnMount,
25
+ normalizeOnMount = _ref$normalizeOnMount === void 0 ? true : _ref$normalizeOnMount;
22
26
  var _useFormContext = (0, _useFormContext3.useFormContext)(),
23
27
  setParsedValue = _useFormContext.setParsedValue,
24
28
  setValue = _useFormContext.setValue,
@@ -28,30 +32,35 @@ function useFieldBase(field) {
28
32
  var useFormSelector = _useFormSelector.useFormSelector;
29
33
  var valuesSelector = _react["default"].useMemo(function () {
30
34
  return (0, _reselect.createSelector)([selectFormValues], (0, _reselect.createSelector)([(0, _reselect.createStructuredSelector)({
31
- parsedValue: function parsedValue(_ref) {
32
- var parsedValues = _ref.parsedValues;
35
+ parsedValue: (0, _reselect.createSelector)(function (state) {
36
+ return state.parsedValues;
37
+ }, function (parsedValues) {
33
38
  return (0, _get.get)(parsedValues, field.path);
34
- },
35
- value: function value(_ref2) {
36
- var values = _ref2.values;
39
+ }),
40
+ value: (0, _reselect.createSelector)(function (state) {
41
+ return state.values;
42
+ }, function (values) {
37
43
  return (0, _get.get)(values, field.path);
38
- },
39
- initialParsedValue: function initialParsedValue(_ref3) {
40
- var initialParsedValues = _ref3.initialParsedValues;
44
+ }),
45
+ initialParsedValue: (0, _reselect.createSelector)(function (state) {
46
+ return state.initialParsedValues;
47
+ }, function (initialParsedValues) {
41
48
  return (0, _get.get)(initialParsedValues, field.path);
42
- },
43
- initialValue: function initialValue(_ref4) {
44
- var initialValues = _ref4.initialValues;
49
+ }),
50
+ initialValue: (0, _reselect.createSelector)(function (state) {
51
+ return state.initialValues;
52
+ }, function (initialValues) {
45
53
  return (0, _get.get)(initialValues, field.path);
46
- }
47
- })], function (_ref5) {
48
- var value = _ref5.value,
49
- _ref5$parsedValue = _ref5.parsedValue,
50
- parsedValue = _ref5$parsedValue === void 0 ? (0, _maybeParse.maybeParse)(field.schema, value) : _ref5$parsedValue,
51
- initialValue = _ref5.initialValue,
52
- _ref5$initialParsedVa = _ref5.initialParsedValue,
53
- initialParsedValue = _ref5$initialParsedVa === void 0 ? (0, _maybeParse.maybeParse)(field.schema, initialValue) : _ref5$initialParsedVa;
54
- var dirty = !(0, _fastDeepEqual["default"])(value, initialValue);
54
+ })
55
+ })], function (_ref2) {
56
+ var value = _ref2.value,
57
+ _ref2$parsedValue = _ref2.parsedValue,
58
+ parsedValue = _ref2$parsedValue === void 0 ? (0, _maybeParse.maybeParse)(field.schema, value) : _ref2$parsedValue,
59
+ initialValue = _ref2.initialValue,
60
+ _ref2$initialParsedVa = _ref2.initialParsedValue,
61
+ initialParsedValue = _ref2$initialParsedVa === void 0 ? (0, _maybeParse.maybeParse)(field.schema, initialValue) : _ref2$initialParsedVa;
62
+ // console.error(new Error('selector'), { value, parsedValue })
63
+ var dirty = !(0, _fastDeepEqual["default"])(parsedValue, initialParsedValue);
55
64
  var pristine = !dirty;
56
65
  return {
57
66
  parsedValue: parsedValue,
@@ -73,6 +82,9 @@ function useFieldBase(field) {
73
82
  var submitFailed = useFormSelector(function (state) {
74
83
  return state.submitFailed;
75
84
  });
85
+ var initialized = useFormSelector(function (state) {
86
+ return state.initialized;
87
+ });
76
88
  var boundActions = _react["default"].useMemo(function () {
77
89
  return (0, _bindActionsToField.bindActionsToField)({
78
90
  setParsedValue: setParsedValue,
@@ -80,19 +92,40 @@ function useFieldBase(field) {
80
92
  setMeta: setMeta
81
93
  }, field);
82
94
  }, [field.pathstring]);
95
+ var info = _react["default"].useRef({
96
+ mounted: false,
97
+ initialized: initialized
98
+ });
99
+ var normalizedValue = parsedValues.value;
100
+ if (normalizeOnMount && (!info.current.mounted || !info.current.initialized && initialized)) {
101
+ var parsed = field.schema.safeParse(parsedValues.value);
102
+ var formatted = parsed.success ? (0, _zodInvertible.invert)(field.schema).safeParse(parsed.data) : undefined;
103
+ if (formatted !== null && formatted !== void 0 && formatted.success && formatted.data !== parsedValues.value) {
104
+ normalizedValue = formatted.data;
105
+ }
106
+ }
107
+ info.current.mounted = true;
108
+ info.current.initialized = initialized;
109
+ _react["default"].useEffect(function () {
110
+ if (normalizeOnMount && !(0, _fastDeepEqual["default"])(normalizedValue, parsedValues.value)) {
111
+ boundActions.setValue(normalizedValue);
112
+ }
113
+ }, []);
83
114
  return _react["default"].useMemo(function () {
84
115
  return _objectSpread(_objectSpread(_objectSpread({}, boundActions), parsedValues), {}, {
116
+ value: normalizedValue,
85
117
  visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
86
118
  touched: (meta === null || meta === void 0 ? void 0 : meta.touched) || submitFailed,
119
+ customMeta: meta === null || meta === void 0 ? void 0 : meta.customMeta,
87
120
  error: error,
88
121
  valid: !error,
89
122
  invalid: Boolean(error)
90
123
  });
91
124
  }, [field.pathstring, parsedValues, meta, error, submitFailed]);
92
125
  }
93
- function useField(field) {
126
+ function useField(field, options) {
94
127
  var _useFormContext2 = (0, _useFormContext3.useFormContext)(),
95
128
  root = _useFormContext2.root;
96
- return useFieldBase(field instanceof _FieldPath.FieldPath ? field : root.get(field));
129
+ return useFieldBase(field instanceof _FieldPath.FieldPath ? field : root.get(field), options);
97
130
  }
98
131
  //# sourceMappingURL=useField.js.map
package/useField.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"useField.js","names":["_FieldPath","require","_get","_react","_interopRequireDefault","_useFormSelector","_useFormContext3","_reselect","_reactRedux","_fastDeepEqual","_maybeParse","_bindActionsToField","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useFieldBase","field","_useFormContext","useFormContext","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","parsedValue","_ref","parsedValues","get","path","value","_ref2","values","initialParsedValue","_ref3","initialParsedValues","initialValue","_ref4","initialValues","_ref5","_ref5$parsedValue","maybeParse","schema","_ref5$initialParsedVa","dirty","isEqual","pristine","pathstring","shallowEqual","error","state","meta","fieldMeta","submitFailed","boundActions","bindActionsToField","visited","touched","valid","invalid","Boolean","useField","_useFormContext2","root","FieldPath"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { DeepPartial } from './util/DeepPartial'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n Field,\n {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\n }\n >\n > & {\n parsedValue?: z.output<Field['schema']>\n value?: DeepPartial<z.input<Field['schema']>>\n initialParsedValue?: z.output<Field['schema']>\n initialValue?: DeepPartial<z.input<Field['schema']>>\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(\n path: Path\n ): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useFieldBase<\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n T extends z.ZodTypeAny,\n Field extends FieldPath,\n>(field: Field): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as z.output<Schema> | undefined,\n value: ({ values }) => get(values, field.path),\n initialParsedValue: ({ initialParsedValues }) =>\n get(initialParsedValues, field.path) as\n | z.output<Schema>\n | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path),\n }),\n ],\n ({\n value,\n parsedValue = maybeParse(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse(field.schema, initialValue),\n }) => {\n const dirty = !isEqual(value, initialValue)\n const pristine = !dirty\n return {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const parsedValues = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),\n [field.pathstring]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...parsedValues,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, parsedValues, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any,\n>(field: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any,\n>(\n field: Pathstring\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useField.js","names":["_FieldPath","require","_get","_react","_interopRequireDefault","_useFormSelector","_useFormContext3","_reselect","_reactRedux","_fastDeepEqual","_maybeParse","_bindActionsToField","_zodInvertible","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useFieldBase","field","_ref","undefined","_ref$normalizeOnMount","normalizeOnMount","_useFormContext","useFormContext","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","parsedValue","state","parsedValues","get","path","value","values","initialParsedValue","initialParsedValues","initialValue","initialValues","_ref2","_ref2$parsedValue","maybeParse","schema","_ref2$initialParsedVa","dirty","isEqual","pristine","pathstring","shallowEqual","error","meta","fieldMeta","submitFailed","initialized","boundActions","bindActionsToField","info","useRef","mounted","normalizedValue","current","parsed","safeParse","formatted","success","invert","data","useEffect","visited","touched","customMeta","valid","invalid","Boolean","useField","options","_useFormContext2","root","FieldPath"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { DeepPartial } from './util/DeepPartial'\nimport { invert } from 'zod-invertible'\nimport { SelectFormValues } from './createSelectFormValues'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n Field,\n {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\n }\n >\n > & {\n parsedValue?: z.output<Field['schema']>\n value?: DeepPartial<z.input<Field['schema']>>\n initialParsedValue?: z.output<Field['schema']>\n initialValue?: DeepPartial<z.input<Field['schema']>>\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(\n path: Path\n ): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nexport type UseFieldOptions = {\n normalizeOnMount?: boolean\n}\n\nfunction useFieldBase<\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n T extends z.ZodTypeAny,\n Field extends FieldPath,\n>(\n field: Field,\n { normalizeOnMount = true }: UseFieldOptions = {}\n): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n type FormValues = ReturnType<SelectFormValues<T>>\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: createSelector(\n (state: FormValues) => state.parsedValues,\n (parsedValues) =>\n get(parsedValues, field.path) as z.output<Schema> | undefined\n ),\n value: createSelector(\n (state: FormValues) => state.values,\n (values) =>\n get(values, field.path) as\n | DeepPartial<z.input<Schema>>\n | undefined\n ),\n initialParsedValue: createSelector(\n (state: FormValues) => state.initialParsedValues,\n (initialParsedValues) =>\n get(initialParsedValues, field.path) as\n | z.output<Schema>\n | undefined\n ),\n initialValue: createSelector(\n (state: FormValues) => state.initialValues,\n (initialValues) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<Schema>>\n | undefined\n ),\n }),\n ],\n ({\n value,\n parsedValue = maybeParse<Schema>(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse<Schema>(field.schema, initialValue),\n }) => {\n // console.error(new Error('selector'), { value, parsedValue })\n const dirty = !isEqual(parsedValue, initialParsedValue)\n const pristine = !dirty\n return {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const parsedValues = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n const initialized = useFormSelector((state) => state.initialized)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),\n [field.pathstring]\n )\n\n const info = React.useRef({ mounted: false, initialized })\n\n let normalizedValue = parsedValues.value\n if (\n normalizeOnMount &&\n (!info.current.mounted || (!info.current.initialized && initialized))\n ) {\n const parsed = field.schema.safeParse(parsedValues.value)\n const formatted =\n parsed.success ? invert(field.schema).safeParse(parsed.data) : undefined\n if (formatted?.success && formatted.data !== parsedValues.value) {\n normalizedValue = formatted.data\n }\n }\n info.current.mounted = true\n info.current.initialized = initialized\n\n React.useEffect(() => {\n if (normalizeOnMount && !isEqual(normalizedValue, parsedValues.value)) {\n boundActions.setValue(normalizedValue)\n }\n }, [])\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...parsedValues,\n value: normalizedValue,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n customMeta: meta?.customMeta,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, parsedValues, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field,\n options?: UseFieldOptions\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any,\n>(\n field: Path,\n options?: UseFieldOptions\n): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any,\n>(\n field: Pathstring,\n\n options?: UseFieldOptions\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string,\n options?: UseFieldOptions\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any),\n options\n )\n}\n"],"mappings":"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","ignoreList":[]}
package/useField.mjs CHANGED
@@ -8,7 +8,10 @@ import { shallowEqual } from 'react-redux';
8
8
  import isEqual from 'fast-deep-equal';
9
9
  import { maybeParse } from "./util/maybeParse.mjs";
10
10
  import { bindActionsToField } from "./util/bindActionsToField.mjs";
11
- function useFieldBase(field) {
11
+ import { invert } from 'zod-invertible';
12
+ function useFieldBase(field, {
13
+ normalizeOnMount = true
14
+ } = {}) {
12
15
  const {
13
16
  setParsedValue,
14
17
  setValue,
@@ -18,25 +21,18 @@ function useFieldBase(field) {
18
21
  } = useFormContext();
19
22
  const useFormSelector = untypedUseFormSelector;
20
23
  const valuesSelector = React.useMemo(() => createSelector([selectFormValues], createSelector([createStructuredSelector({
21
- parsedValue: ({
22
- parsedValues
23
- }) => get(parsedValues, field.path),
24
- value: ({
25
- values
26
- }) => get(values, field.path),
27
- initialParsedValue: ({
28
- initialParsedValues
29
- }) => get(initialParsedValues, field.path),
30
- initialValue: ({
31
- initialValues
32
- }) => get(initialValues, field.path)
24
+ parsedValue: createSelector(state => state.parsedValues, parsedValues => get(parsedValues, field.path)),
25
+ value: createSelector(state => state.values, values => get(values, field.path)),
26
+ initialParsedValue: createSelector(state => state.initialParsedValues, initialParsedValues => get(initialParsedValues, field.path)),
27
+ initialValue: createSelector(state => state.initialValues, initialValues => get(initialValues, field.path))
33
28
  })], ({
34
29
  value,
35
30
  parsedValue = maybeParse(field.schema, value),
36
31
  initialValue,
37
32
  initialParsedValue = maybeParse(field.schema, initialValue)
38
33
  }) => {
39
- const dirty = !isEqual(value, initialValue);
34
+ // console.error(new Error('selector'), { value, parsedValue })
35
+ const dirty = !isEqual(parsedValue, initialParsedValue);
40
36
  const pristine = !dirty;
41
37
  return {
42
38
  parsedValue,
@@ -51,25 +47,47 @@ function useFieldBase(field) {
51
47
  const error = useFormSelector(state => selectFieldErrorMap(state)[field.pathstring]);
52
48
  const meta = useFormSelector(state => state.fieldMeta[field.pathstring]);
53
49
  const submitFailed = useFormSelector(state => state.submitFailed);
50
+ const initialized = useFormSelector(state => state.initialized);
54
51
  const boundActions = React.useMemo(() => bindActionsToField({
55
52
  setParsedValue,
56
53
  setValue,
57
54
  setMeta
58
55
  }, field), [field.pathstring]);
56
+ const info = React.useRef({
57
+ mounted: false,
58
+ initialized
59
+ });
60
+ let normalizedValue = parsedValues.value;
61
+ if (normalizeOnMount && (!info.current.mounted || !info.current.initialized && initialized)) {
62
+ const parsed = field.schema.safeParse(parsedValues.value);
63
+ const formatted = parsed.success ? invert(field.schema).safeParse(parsed.data) : undefined;
64
+ if (formatted !== null && formatted !== void 0 && formatted.success && formatted.data !== parsedValues.value) {
65
+ normalizedValue = formatted.data;
66
+ }
67
+ }
68
+ info.current.mounted = true;
69
+ info.current.initialized = initialized;
70
+ React.useEffect(() => {
71
+ if (normalizeOnMount && !isEqual(normalizedValue, parsedValues.value)) {
72
+ boundActions.setValue(normalizedValue);
73
+ }
74
+ }, []);
59
75
  return React.useMemo(() => ({
60
76
  ...boundActions,
61
77
  ...parsedValues,
78
+ value: normalizedValue,
62
79
  visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
63
80
  touched: (meta === null || meta === void 0 ? void 0 : meta.touched) || submitFailed,
81
+ customMeta: meta === null || meta === void 0 ? void 0 : meta.customMeta,
64
82
  error,
65
83
  valid: !error,
66
84
  invalid: Boolean(error)
67
85
  }), [field.pathstring, parsedValues, meta, error, submitFailed]);
68
86
  }
69
- export function useField(field) {
87
+ export function useField(field, options) {
70
88
  const {
71
89
  root
72
90
  } = useFormContext();
73
- return useFieldBase(field instanceof FieldPath ? field : root.get(field));
91
+ return useFieldBase(field instanceof FieldPath ? field : root.get(field), options);
74
92
  }
75
93
  //# sourceMappingURL=useField.mjs.map
package/useField.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"useField.mjs","names":["FieldPath","get","React","useFormSelector","untypedUseFormSelector","useFormContext","createSelector","createStructuredSelector","shallowEqual","isEqual","maybeParse","bindActionsToField","useFieldBase","field","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","valuesSelector","useMemo","parsedValue","parsedValues","path","value","values","initialParsedValue","initialParsedValues","initialValue","initialValues","schema","dirty","pristine","pathstring","error","state","meta","fieldMeta","submitFailed","boundActions","visited","touched","valid","invalid","Boolean","useField","root"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { DeepPartial } from './util/DeepPartial'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n Field,\n {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\n }\n >\n > & {\n parsedValue?: z.output<Field['schema']>\n value?: DeepPartial<z.input<Field['schema']>>\n initialParsedValue?: z.output<Field['schema']>\n initialValue?: DeepPartial<z.input<Field['schema']>>\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(\n path: Path\n ): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nfunction useFieldBase<\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n T extends z.ZodTypeAny,\n Field extends FieldPath,\n>(field: Field): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as z.output<Schema> | undefined,\n value: ({ values }) => get(values, field.path),\n initialParsedValue: ({ initialParsedValues }) =>\n get(initialParsedValues, field.path) as\n | z.output<Schema>\n | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path),\n }),\n ],\n ({\n value,\n parsedValue = maybeParse(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse(field.schema, initialValue),\n }) => {\n const dirty = !isEqual(value, initialValue)\n const pristine = !dirty\n return {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const parsedValues = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),\n [field.pathstring]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...parsedValues,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, parsedValues, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any,\n>(field: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any,\n>(\n field: Pathstring\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useField.mjs","names":["FieldPath","get","React","useFormSelector","untypedUseFormSelector","useFormContext","createSelector","createStructuredSelector","shallowEqual","isEqual","maybeParse","bindActionsToField","invert","useFieldBase","field","normalizeOnMount","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","valuesSelector","useMemo","parsedValue","state","parsedValues","path","value","values","initialParsedValue","initialParsedValues","initialValue","initialValues","schema","dirty","pristine","pathstring","error","meta","fieldMeta","submitFailed","initialized","boundActions","info","useRef","mounted","normalizedValue","current","parsed","safeParse","formatted","success","data","undefined","useEffect","visited","touched","customMeta","valid","invalid","Boolean","useField","options","root"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { DeepPartial } from './util/DeepPartial'\nimport { invert } from 'zod-invertible'\nimport { SelectFormValues } from './createSelectFormValues'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<\n Field,\n {\n setParsedValue: typeof setParsedValue<Field>\n setValue: typeof setValue<Field>\n setMeta: typeof setMeta<Field>\n }\n >\n > & {\n parsedValue?: z.output<Field['schema']>\n value?: DeepPartial<z.input<Field['schema']>>\n initialParsedValue?: z.output<Field['schema']>\n initialValue?: DeepPartial<z.input<Field['schema']>>\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(\n path: Path\n ): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Pathstring extends PathstringInSchema<T>>(\n path: Pathstring\n ): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\n}\n\nexport type UseFieldOptions = {\n normalizeOnMount?: boolean\n}\n\nfunction useFieldBase<\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters\n T extends z.ZodTypeAny,\n Field extends FieldPath,\n>(\n field: Field,\n { normalizeOnMount = true }: UseFieldOptions = {}\n): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n type FormValues = ReturnType<SelectFormValues<T>>\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: createSelector(\n (state: FormValues) => state.parsedValues,\n (parsedValues) =>\n get(parsedValues, field.path) as z.output<Schema> | undefined\n ),\n value: createSelector(\n (state: FormValues) => state.values,\n (values) =>\n get(values, field.path) as\n | DeepPartial<z.input<Schema>>\n | undefined\n ),\n initialParsedValue: createSelector(\n (state: FormValues) => state.initialParsedValues,\n (initialParsedValues) =>\n get(initialParsedValues, field.path) as\n | z.output<Schema>\n | undefined\n ),\n initialValue: createSelector(\n (state: FormValues) => state.initialValues,\n (initialValues) =>\n get(initialValues, field.path) as\n | DeepPartial<z.input<Schema>>\n | undefined\n ),\n }),\n ],\n ({\n value,\n parsedValue = maybeParse<Schema>(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse<Schema>(field.schema, initialValue),\n }) => {\n // console.error(new Error('selector'), { value, parsedValue })\n const dirty = !isEqual(parsedValue, initialParsedValue)\n const pristine = !dirty\n return {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const parsedValues = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n const initialized = useFormSelector((state) => state.initialized)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),\n [field.pathstring]\n )\n\n const info = React.useRef({ mounted: false, initialized })\n\n let normalizedValue = parsedValues.value\n if (\n normalizeOnMount &&\n (!info.current.mounted || (!info.current.initialized && initialized))\n ) {\n const parsed = field.schema.safeParse(parsedValues.value)\n const formatted =\n parsed.success ? invert(field.schema).safeParse(parsed.data) : undefined\n if (formatted?.success && formatted.data !== parsedValues.value) {\n normalizedValue = formatted.data\n }\n }\n info.current.mounted = true\n info.current.initialized = initialized\n\n React.useEffect(() => {\n if (normalizeOnMount && !isEqual(normalizedValue, parsedValues.value)) {\n boundActions.setValue(normalizedValue)\n }\n }, [])\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...parsedValues,\n value: normalizedValue,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n customMeta: meta?.customMeta,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, parsedValues, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field,\n options?: UseFieldOptions\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any,\n>(\n field: Path,\n options?: UseFieldOptions\n): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any,\n>(\n field: Pathstring,\n\n options?: UseFieldOptions\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string,\n options?: UseFieldOptions\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any),\n options\n )\n}\n"],"mappings":"AACA,SAAmBA,SAAS;AAE5B,SAASC,GAAG;AACZ,OAAOC,KAAK,MAAM,OAAO;AAIzB,SACEC,eAAe,IAAIC,sBAAsB;AAG3C,SAASC,cAAc;AACvB,SAASC,cAAc,EAAEC,wBAAwB,QAAQ,UAAU;AACnE,SAASC,YAAY,QAAQ,aAAa;AAC1C,OAAOC,OAAO,MAAM,iBAAiB;AAIrC,SAASC,UAAU;AACnB,SAASC,kBAAkB;AAE3B,SAASC,MAAM,QAAQ,gBAAgB;AAuCvC,SAASC,YAAYA,CAKnBC,KAAY,EACZ;EAAEC,gBAAgB,GAAG;AAAsB,CAAC,GAAG,CAAC,CAAC,EAC3B;EAGtB,MAAM;IACJC,cAAc;IACdC,QAAQ;IACRC,OAAO;IACPC,gBAAgB;IAChBC;EACF,CAAC,GAAGf,cAAc,CAAI,CAAC;EAIvB,MAAMF,eAAe,GAAGC,sBAAiD;EAEzE,MAAMiB,cAAc,GAAGnB,KAAK,CAACoB,OAAO,CAClC,MACEhB,cAAc,CACZ,CAACa,gBAAgB,CAAC,EAClBb,cAAc,CACZ,CACEC,wBAAwB,CAAC;IACvBgB,WAAW,EAAEjB,cAAc,CACxBkB,KAAiB,IAAKA,KAAK,CAACC,YAAY,EACxCA,YAAY,IACXxB,GAAG,CAACwB,YAAY,EAAEX,KAAK,CAACY,IAAI,CAChC,CAAC;IACDC,KAAK,EAAErB,cAAc,CAClBkB,KAAiB,IAAKA,KAAK,CAACI,MAAM,EAClCA,MAAM,IACL3B,GAAG,CAAC2B,MAAM,EAAEd,KAAK,CAACY,IAAI,CAG1B,CAAC;IACDG,kBAAkB,EAAEvB,cAAc,CAC/BkB,KAAiB,IAAKA,KAAK,CAACM,mBAAmB,EAC/CA,mBAAmB,IAClB7B,GAAG,CAAC6B,mBAAmB,EAAEhB,KAAK,CAACY,IAAI,CAGvC,CAAC;IACDK,YAAY,EAAEzB,cAAc,CACzBkB,KAAiB,IAAKA,KAAK,CAACQ,aAAa,EACzCA,aAAa,IACZ/B,GAAG,CAAC+B,aAAa,EAAElB,KAAK,CAACY,IAAI,CAGjC;EACF,CAAC,CAAC,CACH,EACD,CAAC;IACCC,KAAK;IACLJ,WAAW,GAAGb,UAAU,CAASI,KAAK,CAACmB,MAAM,EAAEN,KAAK,CAAC;IACrDI,YAAY;IACZF,kBAAkB,GAAGnB,UAAU,CAASI,KAAK,CAACmB,MAAM,EAAEF,YAAY;EACpE,CAAC,KAAK;IACJ;IACA,MAAMG,KAAK,GAAG,CAACzB,OAAO,CAACc,WAAW,EAAEM,kBAAkB,CAAC;IACvD,MAAMM,QAAQ,GAAG,CAACD,KAAK;IACvB,OAAO;MACLX,WAAW;MACXI,KAAK;MACLE,kBAAkB;MAClBE,YAAY;MACZG,KAAK;MACLC;IACF,CAAC;EACH,CACF,CACF,CAAC,EACH,CAACrB,KAAK,CAACsB,UAAU,CACnB,CAAC;EAED,MAAMX,YAAY,GAAGtB,eAAe,CAACkB,cAAc,EAAEb,YAAY,CAAC;EAElE,MAAM6B,KAAK,GAAGlC,eAAe,CAC1BqB,KAAK,IAAKJ,mBAAmB,CAACI,KAAK,CAAC,CAACV,KAAK,CAACsB,UAAU,CACxD,CAAC;EACD,MAAME,IAAI,GAAGnC,eAAe,CAAEqB,KAAK,IAAKA,KAAK,CAACe,SAAS,CAACzB,KAAK,CAACsB,UAAU,CAAC,CAAC;EAC1E,MAAMI,YAAY,GAAGrC,eAAe,CAAEqB,KAAK,IAAKA,KAAK,CAACgB,YAAY,CAAC;EACnE,MAAMC,WAAW,GAAGtC,eAAe,CAAEqB,KAAK,IAAKA,KAAK,CAACiB,WAAW,CAAC;EAEjE,MAAMC,YAAY,GAAGxC,KAAK,CAACoB,OAAO,CAChC,MAAMX,kBAAkB,CAAC;IAAEK,cAAc;IAAEC,QAAQ;IAAEC;EAAQ,CAAC,EAAEJ,KAAK,CAAC,EACtE,CAACA,KAAK,CAACsB,UAAU,CACnB,CAAC;EAED,MAAMO,IAAI,GAAGzC,KAAK,CAAC0C,MAAM,CAAC;IAAEC,OAAO,EAAE,KAAK;IAAEJ;EAAY,CAAC,CAAC;EAE1D,IAAIK,eAAe,GAAGrB,YAAY,CAACE,KAAK;EACxC,IACEZ,gBAAgB,KACf,CAAC4B,IAAI,CAACI,OAAO,CAACF,OAAO,IAAK,CAACF,IAAI,CAACI,OAAO,CAACN,WAAW,IAAIA,WAAY,CAAC,EACrE;IACA,MAAMO,MAAM,GAAGlC,KAAK,CAACmB,MAAM,CAACgB,SAAS,CAACxB,YAAY,CAACE,KAAK,CAAC;IACzD,MAAMuB,SAAS,GACbF,MAAM,CAACG,OAAO,GAAGvC,MAAM,CAACE,KAAK,CAACmB,MAAM,CAAC,CAACgB,SAAS,CAACD,MAAM,CAACI,IAAI,CAAC,GAAGC,SAAS;IAC1E,IAAIH,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEC,OAAO,IAAID,SAAS,CAACE,IAAI,KAAK3B,YAAY,CAACE,KAAK,EAAE;MAC/DmB,eAAe,GAAGI,SAAS,CAACE,IAAI;IAClC;EACF;EACAT,IAAI,CAACI,OAAO,CAACF,OAAO,GAAG,IAAI;EAC3BF,IAAI,CAACI,OAAO,CAACN,WAAW,GAAGA,WAAW;EAEtCvC,KAAK,CAACoD,SAAS,CAAC,MAAM;IACpB,IAAIvC,gBAAgB,IAAI,CAACN,OAAO,CAACqC,eAAe,EAAErB,YAAY,CAACE,KAAK,CAAC,EAAE;MACrEe,YAAY,CAACzB,QAAQ,CAAC6B,eAAe,CAAC;IACxC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO5C,KAAK,CAACoB,OAAO,CAClB,OAAO;IACL,GAAGoB,YAAY;IACf,GAAGjB,YAAY;IACfE,KAAK,EAAEmB,eAAe;IACtBS,OAAO,EAAE,CAAAjB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEiB,OAAO,KAAI,KAAK;IAC/BC,OAAO,EAAE,CAAAlB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEkB,OAAO,KAAIhB,YAAY;IACtCiB,UAAU,EAAEnB,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmB,UAAU;IAC5BpB,KAAK;IACLqB,KAAK,EAAE,CAACrB,KAAK;IACbsB,OAAO,EAAEC,OAAO,CAACvB,KAAK;EACxB,CAAC,CAAC,EACF,CAACvB,KAAK,CAACsB,UAAU,EAAEX,YAAY,EAAEa,IAAI,EAAED,KAAK,EAAEG,YAAY,CAC5D,CAAC;AACH;AA2BA,OAAO,SAASqB,QAAQA,CACtB/C,KAAoC,EACpCgD,OAAyB,EACe;EACxC,MAAM;IAAEC;EAAK,CAAC,GAAG1D,cAAc,CAAI,CAAC;EACpC,OAAOQ,YAAY,CACjBC,KAAK,YAAYd,SAAS,GAAGc,KAAK,GAAGiD,IAAI,CAAC9D,GAAG,CAACa,KAAY,CAAC,EAC3DgD,OACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import z from 'zod';
2
+ import { FormContextProps } from "./FormContext.mjs";
3
+ export declare function useFormContext<T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, 'you must pass a schema type'>>(): FormContextProps<T>;
4
+ //# sourceMappingURL=useFormContext.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormContext.d.mts","names":["z","FormContextProps","useFormContext","ZodTypeAny","ZodBranded","ZodNever","T"],"sources":["src/useFormContext.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAEnB,SAAsBC,gBAAgB;AAEtC,wBAAgBC,cAAc,CAC5B,UAAUF,CAAC,CAACG,UAAU,GAAGH,CAAC,CAACI,UAAU,CACnCJ,CAAC,CAACK,QAAQ,EACV,6BAA6B,CAC9B,CAAAH,CAAA,GACED,gBAAgB,CAACK,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  import z from 'zod';
2
- import { FormContextProps } from './FormContext';
2
+ import { FormContextProps } from "./FormContext.js";
3
3
  export declare function useFormContext<T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, 'you must pass a schema type'>>(): FormContextProps<T>;
4
4
  //# sourceMappingURL=useFormContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormContext.d.ts","sourceRoot":"","sources":["src/useFormContext.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,EAAe,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAE7D,wBAAgB,cAAc,CAC5B,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CACnC,CAAC,CAAC,QAAQ,EACV,6BAA6B,CAC9B,KACE,gBAAgB,CAAC,CAAC,CAAC,CAMvB"}
1
+ {"version":3,"file":"useFormContext.d.ts","names":["z","FormContextProps","useFormContext","ZodTypeAny","ZodBranded","ZodNever","T"],"sources":["src/useFormContext.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAEnB,SAAsBC,gBAAgB;AAEtC,wBAAgBC,cAAc,CAC5B,UAAUF,CAAC,CAACG,UAAU,GAAGH,CAAC,CAACI,UAAU,CACnCJ,CAAC,CAACK,QAAQ,EACV,6BAA6B,CAC9B,CAAAH,CAAA,GACED,gBAAgB,CAACK,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import z from 'zod';
2
+ import { FormAction } from "./FormAction.mjs";
3
+ import { Dispatch } from 'redux';
4
+ export declare const useFormDispatch: <T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, "you must pass a schema type">>() => Dispatch<FormAction<T>>;
5
+ //# sourceMappingURL=useFormDispatch.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormDispatch.d.mts","names":["z","FormAction","Dispatch","useFormDispatch","ZodTypeAny","ZodBranded","ZodNever","T"],"sources":["src/useFormDispatch.ts"],"sourcesContent":[null],"mappings":"AAEA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,UAAU;AACnB,SAASC,QAAQ,QAAQ,OAAO;AAEhC,qBAAaC,eAAe,EAA2C,CACrE,UAAUH,CAAC,CAACI,UAAU,GAAGJ,CAAC,CAACK,UAAU,CACnCL,CAAC,CAACM,QAAQ,EACV,6BAA6B,CAC9B,OACIJ,QAAQ,CAACD,UAAU,CAACM,CAAC,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import z from 'zod';
2
- import { FormAction } from './FormAction';
2
+ import { FormAction } from "./FormAction.js";
3
3
  import { Dispatch } from 'redux';
4
4
  export declare const useFormDispatch: <T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, "you must pass a schema type">>() => Dispatch<FormAction<T>>;
5
5
  //# sourceMappingURL=useFormDispatch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormDispatch.d.ts","sourceRoot":"","sources":["src/useFormDispatch.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,eAAO,MAAM,eAAe,EAA2C,CACrE,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CACnC,CAAC,CAAC,QAAQ,EACV,6BAA6B,CAC9B,OACI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"useFormDispatch.d.ts","names":["z","FormAction","Dispatch","useFormDispatch","ZodTypeAny","ZodBranded","ZodNever","T"],"sources":["src/useFormDispatch.ts"],"sourcesContent":[null],"mappings":"AAEA,OAAOA,CAAC,MAAM,KAAK;AACnB,SAASC,UAAU;AACnB,SAASC,QAAQ,QAAQ,OAAO;AAEhC,qBAAaC,eAAe,EAA2C,CACrE,UAAUH,CAAC,CAACI,UAAU,GAAGJ,CAAC,CAACK,UAAU,CACnCL,CAAC,CAACM,QAAQ,EACV,6BAA6B,CAC9B,OACIJ,QAAQ,CAACD,UAAU,CAACM,CAAC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import { TypedUseSelectorHook } from 'react-redux';
2
+ import { FormState } from "./FormState.mjs";
3
+ import z from 'zod';
4
+ export declare const useFormSelector: import("react-redux").UseSelector<unknown>;
5
+ export type TypedUseFormSelector<T extends z.ZodTypeAny> = TypedUseSelectorHook<FormState<T>>;
6
+ //# sourceMappingURL=useFormSelector.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormSelector.d.mts","names":["TypedUseSelectorHook","FormState","z","useFormSelector","UseSelector","TypedUseFormSelector","ZodTypeAny","T"],"sources":["src/useFormSelector.ts"],"sourcesContent":[null],"mappings":"AAAA,SAA6BA,oBAAoB,QAAQ,aAAa;AAEtE,SAASC,SAAS;AAClB,OAAOC,CAAC,MAAM,KAAK;AAEnB,qBAAaC,eAAe,wBAAAC,WAAA,SAAuC;AACnE,OAAM,KAAMC,oBAAoB,CAAC,UAAUH,CAAC,CAACI,UAAU,IAAIN,oBAAoB,CAC7EC,SAAS,CAACM,CAAC,CAAC,CACb","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { TypedUseSelectorHook } from 'react-redux';
2
- import { FormState } from './FormState';
2
+ import { FormState } from "./FormState.js";
3
3
  import z from 'zod';
4
4
  export declare const useFormSelector: import("react-redux").UseSelector<unknown>;
5
5
  export type TypedUseFormSelector<T extends z.ZodTypeAny> = TypedUseSelectorHook<FormState<T>>;
@@ -1 +1 @@
1
- {"version":3,"file":"useFormSelector.d.ts","sourceRoot":"","sources":["src/useFormSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,eAAe,4CAAuC,CAAA;AACnE,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,oBAAoB,CAC7E,SAAS,CAAC,CAAC,CAAC,CACb,CAAA"}
1
+ {"version":3,"file":"useFormSelector.d.ts","names":["TypedUseSelectorHook","FormState","z","useFormSelector","UseSelector","TypedUseFormSelector","ZodTypeAny","T"],"sources":["src/useFormSelector.ts"],"sourcesContent":[null],"mappings":"AAAA,SAA6BA,oBAAoB,QAAQ,aAAa;AAEtE,SAASC,SAAS;AAClB,OAAOC,CAAC,MAAM,KAAK;AAEnB,qBAAaC,eAAe,wBAAAC,WAAA,SAAuC;AACnE,OAAM,KAAMC,oBAAoB,CAAC,UAAUH,CAAC,CAACI,UAAU,IAAIN,oBAAoB,CAC7EC,SAAS,CAACM,CAAC,CAAC,CACb","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ export declare function useFormStatus(): {
2
+ initialized: boolean;
3
+ submitting: boolean;
4
+ submitSucceeded: boolean;
5
+ submitFailed: boolean;
6
+ submitError: unknown;
7
+ validationError: any;
8
+ valid: boolean;
9
+ invalid: boolean;
10
+ pristine: boolean;
11
+ dirty: boolean;
12
+ };
13
+ //# sourceMappingURL=useFormStatus.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormStatus.d.mts","names":["useFormStatus"],"sources":["src/useFormStatus.ts"],"sourcesContent":[null],"mappings":"AAUA,wBAAgBA,aAAaA,CAAA","ignoreList":[]}
@@ -1,13 +1,13 @@
1
1
  export declare function useFormStatus(): {
2
- initialized: boolean;
3
- submitting: boolean;
4
- submitSucceeded: boolean;
5
- submitFailed: boolean;
6
- submitError: unknown;
7
- validationError: any;
8
- valid: boolean;
9
- invalid: boolean;
10
- pristine: boolean;
11
- dirty: boolean;
2
+ initialized: boolean;
3
+ submitting: boolean;
4
+ submitSucceeded: boolean;
5
+ submitFailed: boolean;
6
+ submitError: unknown;
7
+ validationError: any;
8
+ valid: boolean;
9
+ invalid: boolean;
10
+ pristine: boolean;
11
+ dirty: boolean;
12
12
  };
13
13
  //# sourceMappingURL=useFormStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormStatus.d.ts","sourceRoot":"","sources":["src/useFormStatus.ts"],"names":[],"mappings":"AAUA,wBAAgB,aAAa;;;;;;;;;;;EAG5B"}
1
+ {"version":3,"file":"useFormStatus.d.ts","names":["useFormStatus"],"sources":["src/useFormStatus.ts"],"sourcesContent":[null],"mappings":"AAUA,wBAAgBA,aAAaA,CAAA","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import z from 'zod';
2
+ export declare function useFormValues<T extends z.ZodTypeAny = z.ZodUnknown>(): {
3
+ parsedValues: z.output<T> | undefined;
4
+ values: import("./util/DeepPartial.mjs").DeepPartial<z.input<T>> | undefined;
5
+ initialParsedValues: z.output<T> | undefined;
6
+ initialValues: import("./util/DeepPartial.mjs").DeepPartial<z.input<T>> | undefined;
7
+ };
8
+ //# sourceMappingURL=useFormValues.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFormValues.d.mts","names":["z","useFormValues","ZodTypeAny","ZodUnknown"],"sources":["src/useFormValues.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAInB,wBAAgBC,aAAa,CAAC,UAAUD,CAAC,CAACE,UAAU,GAAGF,CAAC,CAACG,UAAU,CAAAF,CAAA","ignoreList":[]}
@@ -1,8 +1,8 @@
1
1
  import z from 'zod';
2
2
  export declare function useFormValues<T extends z.ZodTypeAny = z.ZodUnknown>(): {
3
- parsedValues: z.output<T> | undefined;
4
- values: import("./util/DeepPartial").DeepPartial<z.input<T>> | undefined;
5
- initialParsedValues: z.output<T> | undefined;
6
- initialValues: import("./util/DeepPartial").DeepPartial<z.input<T>> | undefined;
3
+ parsedValues: z.output<T> | undefined;
4
+ values: import("./util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
5
+ initialParsedValues: z.output<T> | undefined;
6
+ initialValues: import("./util/DeepPartial.js").DeepPartial<z.input<T>> | undefined;
7
7
  };
8
8
  //# sourceMappingURL=useFormValues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormValues.d.ts","sourceRoot":"","sources":["src/useFormValues.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAInB,wBAAgB,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;;;;;EAGlE"}
1
+ {"version":3,"file":"useFormValues.d.ts","names":["z","useFormValues","ZodTypeAny","ZodUnknown"],"sources":["src/useFormValues.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,CAAC,MAAM,KAAK;AAInB,wBAAgBC,aAAa,CAAC,UAAUD,CAAC,CAACE,UAAU,GAAGF,CAAC,CAACG,UAAU,CAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ import z from 'zod';
2
+ import { FieldPath } from "./FieldPath.mjs";
3
+ import { UseFieldProps } from "./useField.mjs";
4
+ import React, { HTMLInputTypeAttribute } from 'react';
5
+ import { PathInSchema, PathstringInSchema } from "./util/PathInSchema.mjs";
6
+ import { parsePathstring } from "./util/parsePathstring.mjs";
7
+ import { SchemaAt } from "./util/SchemaAt.mjs";
8
+ export type HtmlFieldInputProps = {
9
+ name: string;
10
+ type: HTMLInputTypeAttribute;
11
+ value: string;
12
+ checked?: boolean;
13
+ onChange: React.ChangeEventHandler;
14
+ onFocus: React.FocusEventHandler;
15
+ onBlur: React.FocusEventHandler;
16
+ };
17
+ export type ValidUseHtmlFieldProps<Field extends FieldPath> = {
18
+ input: HtmlFieldInputProps;
19
+ meta: UseFieldProps<Field>;
20
+ };
21
+ export type UseHtmlFieldProps<Field extends FieldPath> = z.input<Field['schema']> extends (string | number | bigint | boolean | null | undefined) ? {
22
+ input: HtmlFieldInputProps;
23
+ meta: UseFieldProps<Field>;
24
+ } : {
25
+ ERROR: 'field schema input must be a nullish string, number, boolean or bigint';
26
+ };
27
+ export type UseHtmlFieldOptions<Field, Schema extends z.ZodTypeAny = (Field extends FieldPath<infer S> ? S : z.ZodTypeAny)> = {
28
+ field: Field;
29
+ type: z.input<Schema> extends boolean | null | undefined ? 'checkbox' : Exclude<HTMLInputTypeAttribute, 'checkbox'>;
30
+ normalizeOnMount?: boolean;
31
+ normalizeOnBlur?: boolean;
32
+ };
33
+ export interface TypedUseHtmlField<T extends z.ZodTypeAny> {
34
+ <Field extends FieldPath>(options: UseHtmlFieldOptions<Field, Field['schema']>): UseHtmlFieldProps<Field>;
35
+ <Path extends PathInSchema<T>>(options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>;
36
+ <Path extends PathstringInSchema<T>>(options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>;
37
+ }
38
+ export declare function useHtmlField<Field extends FieldPath>(options: UseHtmlFieldOptions<Field, Field['schema']>): UseHtmlFieldProps<Field>;
39
+ export declare function useHtmlField<T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, 'cast to TypedUseHtmlField<T> to pass a path array'>, Path extends PathInSchema<T> = any>(options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>;
40
+ export declare function useHtmlField<T extends z.ZodTypeAny = z.ZodBranded<z.ZodNever, 'cast to TypedUseHtmlField<T> to pass a pathstring'>, Path extends PathstringInSchema<T> = any>(options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>;
41
+ //# sourceMappingURL=useHtmlField.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHtmlField.d.mts","names":["z","FieldPath","UseFieldProps","React","HTMLInputTypeAttribute","PathInSchema","PathstringInSchema","parsePathstring","SchemaAt","HtmlFieldInputProps","name","type","value","checked","onChange","ChangeEventHandler","onFocus","FocusEventHandler","onBlur","ValidUseHtmlFieldProps","input","meta","Field","UseHtmlFieldProps","ERROR","UseHtmlFieldOptions","ZodTypeAny","S","field","Schema","Exclude","normalizeOnMount","normalizeOnBlur","TypedUseHtmlField","options","T","Path","useHtmlField","ZodBranded","ZodNever"],"sources":["src/useHtmlField.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}