@paragrav/rhf-utils 0.0.67 → 0.0.68

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 (43) hide show
  1. package/dist/esm/client/index.mjs +1 -1
  2. package/dist/esm/errors/context/provider.mjs +5 -5
  3. package/dist/esm/errors/flat/filterFlatFieldErrors.mjs +10 -0
  4. package/dist/esm/errors/flat/useFormFlatFieldErrorsMemo.mjs +6 -0
  5. package/dist/esm/errors/isFieldErrorRefd.mjs +4 -0
  6. package/dist/esm/errors/nonfield/FormNonFieldErrorMarker.utils.mjs +2 -2
  7. package/dist/esm/errors/orphan/getIsOrphanFormErrorWithParentElement.mjs +5 -0
  8. package/dist/esm/errors/orphan/getOrphansFromFieldErrors.mjs +3 -6
  9. package/dist/esm/errors/orphan/getOrphansFromFlatFieldErrors.mjs +6 -7
  10. package/dist/esm/errors/orphan/isOrphanFormError.mjs +6 -6
  11. package/dist/esm/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.mjs +10 -0
  12. package/dist/esm/errors/orphan/useOrphanFormErrorsMemo.mjs +6 -6
  13. package/dist/esm/errors/root/getRootsFromFieldErrors.mjs +3 -6
  14. package/dist/esm/errors/root/getRootsFromFlatFieldErrors.mjs +5 -4
  15. package/dist/esm/errors/root/isFlatFieldErrorEntryPathRoot.mjs +5 -0
  16. package/dist/esm/errors/root/useRootFormFieldErrorsMemo.mjs +1 -1
  17. package/dist/esm/errors/{useFormErrorsMemo.mjs → useFormErrorsTransformMemo.mjs} +4 -1
  18. package/dist/esm/exports.mjs +16 -16
  19. package/dist/esm/form/_Form.mjs +47 -46
  20. package/dist/esm/form/useForm.mjs +11 -9
  21. package/dist/types/client/config.d.ts +18 -0
  22. package/dist/types/client/index.d.ts +0 -1
  23. package/dist/types/errors/flat/filterFlatFieldErrors.d.ts +9 -0
  24. package/dist/types/errors/flat/types.d.ts +4 -0
  25. package/dist/types/errors/flat/useFormFlatFieldErrorsMemo.d.ts +3 -1
  26. package/dist/types/errors/flat/useRefdFieldErrorsMemo.d.ts +1 -1
  27. package/dist/types/errors/isFieldErrorRefd.d.ts +7 -0
  28. package/dist/types/errors/isFlatFieldErrorEntryRefd.d.ts +7 -0
  29. package/dist/types/errors/nonfield/FormNonFieldErrorMarker.utils.d.ts +1 -1
  30. package/dist/types/errors/orphan/getIsOrphanFormErrorWithParentElement.d.ts +7 -0
  31. package/dist/types/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.d.ts +6 -0
  32. package/dist/types/errors/root/getRootsFromFlatFieldErrors.d.ts +1 -3
  33. package/dist/types/errors/root/isFlatFieldErrorEntryPathRoot.d.ts +7 -0
  34. package/dist/types/errors/root/isFormErrorPathRoot.d.ts +1 -0
  35. package/dist/types/errors/useFormErrorsTransformMemo.d.ts +7 -0
  36. package/dist/types/exports.d.ts +2 -2
  37. package/dist/types/form/_Form.d.ts +2 -2
  38. package/dist/types/form/useForm.d.ts +3 -1
  39. package/dist/types/form/useFormOptions.d.ts +0 -14
  40. package/package.json +8 -9
  41. package/dist/esm/errors/flat/useRefdFieldErrorsMemo.mjs +0 -13
  42. package/dist/esm/errors/isFieldError.mjs +0 -4
  43. package/dist/esm/errors/orphan/useFormHasOrphanAndNoFieldErrors.mjs +0 -10
@@ -7,7 +7,6 @@ const p = (t) => (r) => {
7
7
  r
8
8
  );
9
9
  return {
10
- config: r,
11
10
  useForm: (o, s) => F(
12
11
  e(o, s)
13
12
  ),
@@ -30,6 +29,7 @@ const p = (t) => (r) => {
30
29
  var s, m, i, n, f, a, h;
31
30
  return {
32
31
  ...o,
32
+ config: r,
33
33
  rhf: {
34
34
  ...(s = r.defaultOptions) == null ? void 0 : s.rhf,
35
35
  ...o.rhf,
@@ -1,8 +1,8 @@
1
1
  import { jsx as F } from "react/jsx-runtime";
2
- import i from "../flat/getFlatFieldErrors.mjs";
3
- import l from "../orphan/getOrphansFromFlatFieldErrors.mjs";
4
- import a from "../root/getRootsFromFlatFieldErrors.mjs";
5
- import p from "../useFormErrorsMemo.mjs";
2
+ import a from "../flat/getFlatFieldErrors.mjs";
3
+ import i from "../orphan/getOrphansFromFlatFieldErrors.mjs";
4
+ import l from "../root/getRootsFromFlatFieldErrors.mjs";
5
+ import p from "../useFormErrorsTransformMemo.mjs";
6
6
  import { _FormErrorsFlatContextProvider as c } from "./index.mjs";
7
7
  const u = ({
8
8
  formRef: o,
@@ -11,7 +11,7 @@ const u = ({
11
11
  const e = p((s) => {
12
12
  if (!o.current)
13
13
  return;
14
- const r = i(s), m = a(r), n = l(r, o.current);
14
+ const r = a(s), m = l(r), n = i(r, o.current);
15
15
  return { all: r, roots: m, orphans: n };
16
16
  });
17
17
  return /* @__PURE__ */ F(c, { value: e, children: t });
@@ -0,0 +1,10 @@
1
+ const r = (e) => (t) => (
2
+ // re-create object from entries
3
+ Object.fromEntries(
4
+ // break down to entries
5
+ Object.entries(t).filter(e)
6
+ )
7
+ );
8
+ export {
9
+ r as default
10
+ };
@@ -0,0 +1,6 @@
1
+ import r from "../useFormErrorsTransformMemo.mjs";
2
+ import o from "./getFlatFieldErrors.mjs";
3
+ const s = () => r(o);
4
+ export {
5
+ s as default
6
+ };
@@ -0,0 +1,4 @@
1
+ const r = (e) => !!e.ref;
2
+ export {
3
+ r as default
4
+ };
@@ -1,6 +1,6 @@
1
1
  import o from "./FormNonFieldErrorMarkerHtmlAttribute.mjs";
2
- const t = (r) => `[role="alert"][${o}="${r}"]`, n = (r, e) => !!e.querySelector(t(r));
2
+ const t = (r) => `[role="alert"][${o}="${r}"]`, i = (r, e) => !!e.querySelector(t(r));
3
3
  export {
4
4
  t as getFormNonFieldErrorMarkerQuerySelector,
5
- n as hasNonFieldErrorMarkerInDOM
5
+ i as isNonFieldErrorMarkerInDOM
6
6
  };
@@ -0,0 +1,5 @@
1
+ import o from "./isOrphanFormError.mjs";
2
+ const n = (r) => ([t, e]) => o(t, e, r);
3
+ export {
4
+ n as default
5
+ };
@@ -1,9 +1,6 @@
1
- import e from "../flat/getFlatFieldErrors.mjs";
2
- import s from "./getOrphansFromFlatFieldErrors.mjs";
3
- const a = (r, o) => {
4
- const t = e(r);
5
- return s(t, o);
6
- };
1
+ import t from "../flat/getFlatFieldErrors.mjs";
2
+ import e from "./getOrphansFromFlatFieldErrors.mjs";
3
+ const a = (r, o) => e(t(r), o);
7
4
  export {
8
5
  a as default
9
6
  };
@@ -1,9 +1,8 @@
1
- import s from "./isOrphanFormError.mjs";
2
- const a = (r, t) => Object.fromEntries(
3
- Object.entries(r).filter(
4
- ([e, o]) => s(e, o, t)
5
- )
6
- );
1
+ import e from "../flat/filterFlatFieldErrors.mjs";
2
+ import o from "./getIsOrphanFormErrorWithParentElement.mjs";
3
+ const F = (r, t) => e(
4
+ o(t)
5
+ )(r);
7
6
  export {
8
- a as default
7
+ F as default
9
8
  };
@@ -1,12 +1,12 @@
1
- import m from "../isFieldError.mjs";
2
- import { hasNonFieldErrorMarkerInDOM as t } from "../nonfield/FormNonFieldErrorMarker.utils.mjs";
3
- import s from "../root/isFormErrorPathRoot.mjs";
4
- const n = (r, o, i) => (
1
+ import m from "../isFieldErrorRefd.mjs";
2
+ import { isNonFieldErrorMarkerInDOM as t } from "../nonfield/FormNonFieldErrorMarker.utils.mjs";
3
+ import e from "../root/isFormErrorPathRoot.mjs";
4
+ const d = (r, o, i) => (
5
5
  // not root path
6
- !s(r) && // non-field
6
+ !e(r) && // non-field
7
7
  !m(o) && // does not have marker
8
8
  !t(r, i)
9
9
  );
10
10
  export {
11
- n as default
11
+ d as default
12
12
  };
@@ -0,0 +1,10 @@
1
+ import s from "../../utils/isEmptyObject.mjs";
2
+ import t from "../flat/useFormFlatFieldErrorsMemo.mjs";
3
+ import m from "./useOrphanFormErrorsMemo.mjs";
4
+ const n = (o) => {
5
+ const e = t(), r = m(o);
6
+ return s(r) ? !1 : Object.keys(e).length !== Object.keys(r).length;
7
+ }, i = n;
8
+ export {
9
+ i as default
10
+ };
@@ -1,14 +1,14 @@
1
1
  import "react";
2
2
  import t from "../../utils/isEmptyObject.mjs";
3
- import e from "../useFormErrorsMemo.mjs";
4
- import m from "./getOrphansFromFieldErrors.mjs";
5
- const s = (r) => e((o) => {
3
+ import m from "../useFormErrorsTransformMemo.mjs";
4
+ import e from "./getOrphansFromFieldErrors.mjs";
5
+ const s = (r) => m((o) => {
6
6
  if (t(o))
7
7
  return {};
8
8
  if (!r.current)
9
9
  throw new Error();
10
- return m(o, r.current);
11
- }), E = s;
10
+ return e(o, r.current);
11
+ }), a = s;
12
12
  export {
13
- E as default
13
+ a as default
14
14
  };
@@ -1,9 +1,6 @@
1
- import t from "../flat/getFlatFieldErrors.mjs";
2
- import e from "./getRootsFromFlatFieldErrors.mjs";
3
- const F = (r) => {
4
- const o = t(r);
5
- return e(o);
6
- };
1
+ import o from "../flat/getFlatFieldErrors.mjs";
2
+ import t from "./getRootsFromFlatFieldErrors.mjs";
3
+ const F = (r) => t(o(r));
7
4
  export {
8
5
  F as default
9
6
  };
@@ -1,7 +1,8 @@
1
- import o from "./isFormErrorPathRoot.mjs";
2
- const s = (r) => Object.fromEntries(
3
- Object.entries(r).filter(([t]) => o(t))
1
+ import r from "../flat/filterFlatFieldErrors.mjs";
2
+ import o from "./isFlatFieldErrorEntryPathRoot.mjs";
3
+ const l = r(
4
+ o
4
5
  );
5
6
  export {
6
- s as default
7
+ l as default
7
8
  };
@@ -0,0 +1,5 @@
1
+ import r from "./isFormErrorPathRoot.mjs";
2
+ const a = ([o]) => r(o);
3
+ export {
4
+ a as default
5
+ };
@@ -1,4 +1,4 @@
1
- import o from "../useFormErrorsMemo.mjs";
1
+ import o from "../useFormErrorsTransformMemo.mjs";
2
2
  import r from "./getRootsFromFieldErrors.mjs";
3
3
  const e = () => o(r), t = e;
4
4
  export {
@@ -2,7 +2,10 @@ import e from "react";
2
2
  import { useFormState as t } from "react-hook-form";
3
3
  const u = (r) => {
4
4
  const { errors: o } = t();
5
- return e.useMemo(() => r(o), [r, o]);
5
+ return e.useMemo(
6
+ () => r(o),
7
+ [r, o]
8
+ );
6
9
  };
7
10
  export {
8
11
  u as default
@@ -1,22 +1,22 @@
1
1
  import { createZodRhfUtilsClient as e } from "./client/zod/index.mjs";
2
2
  import { default as s } from "./client/zod/context/index.mjs";
3
3
  import { default as u } from "./client/zod/context/provider.mjs";
4
- import { default as m } from "./devtool/LazyDevTool.mjs";
4
+ import { default as f } from "./devtool/LazyDevTool.mjs";
5
5
  import { default as d } from "./errors/context/index.mjs";
6
6
  import { default as x } from "./errors/context/provider.mjs";
7
7
  import { default as n } from "./errors/message/FormErrorMessage.mjs";
8
8
  import { default as E } from "./errors/message/FormErrorMessageByPath.mjs";
9
9
  import { default as c } from "./errors/nonfield/FormNonFieldErrorMarker.mjs";
10
10
  import { default as S } from "./errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute.mjs";
11
- import { default as y } from "./errors/orphan/useFormHasOrphanAndNoFieldErrors.mjs";
12
- import { default as M } from "./errors/orphan/useOrphanFormErrorsMemo.mjs";
11
+ import { default as y } from "./errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.mjs";
12
+ import { default as O } from "./errors/orphan/useOrphanFormErrorsMemo.mjs";
13
13
  import { default as P } from "./errors/orphan/useOrphanFormErrorsToConsole.mjs";
14
14
  import { default as I } from "./errors/root/useRootFormFieldErrorsMemo.mjs";
15
- import { default as k } from "./errors/useFormErrorConsoleDebug.mjs";
15
+ import { default as g } from "./errors/useFormErrorConsoleDebug.mjs";
16
16
  import { default as B } from "./errors/useFormErrorsEffect.mjs";
17
- import { default as v } from "./errors/useFormErrorsIfAny.mjs";
18
- import { default as D } from "./errors/useFormErrorsMemo.mjs";
19
- import { default as Z } from "./errors/useFormRequestSubmit.mjs";
17
+ import { default as A } from "./errors/useFormErrorsIfAny.mjs";
18
+ import { default as D } from "./errors/useFormErrorsTransformMemo.mjs";
19
+ import { default as H } from "./errors/useFormRequestSubmit.mjs";
20
20
  import { default as q } from "./form/useForm.mjs";
21
21
  import { default as L } from "./form/context/utils/FormUtilsContextProvider.mjs";
22
22
  import { default as w } from "./form/context/utils/useFormUtilsContext.mjs";
@@ -28,7 +28,7 @@ import { default as rr } from "./form/context/group/useFormGroupIsAnyBusy.mjs";
28
28
  import { default as er } from "./form/context/group/useFormGroupIsChildBusy.mjs";
29
29
  import { default as sr } from "./form/context/group/useFormGroupIsParentBusy.mjs";
30
30
  import { default as ur } from "./form/context/group/useFormGroupParentTracker.mjs";
31
- import { default as mr } from "./form/context/group/useFormOrParentIsBusy.mjs";
31
+ import { default as fr } from "./form/context/group/useFormOrParentIsBusy.mjs";
32
32
  import { default as dr } from "./form/utils/getSubmitterButtonData.mjs";
33
33
  import { FormSubmitError as xr } from "./submit/error/FormSubmitError.mjs";
34
34
  import { default as nr } from "./submit/useFormOnSubmitSuccessful.mjs";
@@ -45,16 +45,16 @@ export {
45
45
  S as FormNonFieldErrorMarkerHtmlAttribute,
46
46
  xr as FormSubmitError,
47
47
  L as FormUtilsContextProvider,
48
- m as LazyDevTool,
48
+ f as LazyDevTool,
49
49
  u as RhfUtilsZodContextProvider,
50
50
  e as createZodRhfUtilsClient,
51
51
  dr as getSubmitterButtonData,
52
52
  q as useForm,
53
- k as useFormErrorConsoleDebug,
53
+ g as useFormErrorConsoleDebug,
54
54
  B as useFormErrorsEffect,
55
55
  d as useFormErrorsFlatContext,
56
- v as useFormErrorsIfAny,
57
- D as useFormErrorsMemo,
56
+ A as useFormErrorsIfAny,
57
+ D as useFormErrorsTransformMemo,
58
58
  V as useFormGroupChildIsMountedTracker,
59
59
  X as useFormGroupChildIsSubmittingTracker,
60
60
  _ as useFormGroupChildTracker,
@@ -62,13 +62,13 @@ export {
62
62
  er as useFormGroupIsChildBusy,
63
63
  sr as useFormGroupIsParentBusy,
64
64
  ur as useFormGroupParentTracker,
65
- y as useFormHasOrphanAndNoFieldErrors,
65
+ y as useFormHasOnlyOrphanFieldErrorsMemo,
66
66
  nr as useFormOnSubmitSuccessful,
67
67
  Er as useFormOnSubmitSuccessfulAndReset,
68
- mr as useFormOrParentIsBusy,
69
- Z as useFormRequestSubmit,
68
+ fr as useFormOrParentIsBusy,
69
+ H as useFormRequestSubmit,
70
70
  w as useFormUtilsContext,
71
- M as useOrphanFormErrorsMemo,
71
+ O as useOrphanFormErrorsMemo,
72
72
  P as useOrphanFormErrorsToConsole,
73
73
  Sr as useResetFormAfterSubmitSuccessful,
74
74
  cr as useResetFormOnSubmitError,
@@ -1,89 +1,90 @@
1
- import { jsxs as v, jsx as p } from "react/jsx-runtime";
1
+ import { jsxs as B, jsx as p } from "react/jsx-runtime";
2
2
  import "react";
3
- import { useFormContext as B } from "react-hook-form";
4
- import N from "../devtool/LazyDevTool.mjs";
5
- import { FormSubmitError as P } from "../submit/error/FormSubmitError.mjs";
6
- import T from "../submit/error/setCtxErrorsByFormSubmitError.mjs";
7
- import V from "../submit/useResetFormOnSubmitError.mjs";
8
- import _ from "./_FormBase.mjs";
9
- function A({
10
- formId: x,
3
+ import { useFormContext as N } from "react-hook-form";
4
+ import P from "../devtool/LazyDevTool.mjs";
5
+ import { FormSubmitError as T } from "../submit/error/FormSubmitError.mjs";
6
+ import V from "../submit/error/setCtxErrorsByFormSubmitError.mjs";
7
+ import _ from "../submit/useResetFormOnSubmitError.mjs";
8
+ import O from "./_FormBase.mjs";
9
+ function G({
10
+ formId: c,
11
11
  formRef: l,
12
12
  form: t,
13
- children: y
13
+ config: n,
14
+ children: o
14
15
  }) {
15
- var c, b, S, o, h;
16
- const a = B();
17
- V({
18
- disabled: !((c = t == null ? void 0 : t.options) != null && c.resetValuesOnSubmitError)
16
+ var b, S, h, E, F;
17
+ const a = N();
18
+ _({
19
+ disabled: !((b = t == null ? void 0 : t.options) != null && b.resetValuesOnSubmitError)
19
20
  });
20
- const C = async (i) => {
21
- var n;
22
- (n = t == null ? void 0 : t.options) != null && n.stopSubmitPropagation && i.stopPropagation();
21
+ const y = async (s) => {
22
+ var e;
23
+ (e = t == null ? void 0 : t.options) != null && e.stopSubmitPropagation && s.stopPropagation();
23
24
  try {
24
25
  await a.handleSubmit(
25
- g,
26
+ j,
26
27
  t == null ? void 0 : t.onSubmitInvalid
27
- )(i);
28
- } catch (s) {
29
- j(s, i);
28
+ )(s);
29
+ } catch (i) {
30
+ v(i, s);
30
31
  }
31
- }, g = (i, n) => {
32
- var s;
33
- return (s = t == null ? void 0 : t.onSubmit) == null ? void 0 : s.call(
32
+ }, j = (s, e) => {
33
+ var i;
34
+ return (i = t == null ? void 0 : t.onSubmit) == null ? void 0 : i.call(
34
35
  t,
35
- i,
36
+ s,
36
37
  a,
37
- n
38
+ e
38
39
  );
39
- }, j = (i, n) => {
40
- var e, E, F;
41
- const s = i instanceof P ? (
40
+ }, v = (s, e) => {
41
+ var x, C;
42
+ const i = s instanceof T ? (
42
43
  // consumer can manually throw FormSubmitError (e.g., manual validation)
43
- i
44
+ s
44
45
  ) : (
45
46
  // if error is not FormSubmitError, consumer can provide global handler
46
- (E = (e = t == null ? void 0 : t.options) == null ? void 0 : e.onSubmitError) == null ? void 0 : E.call(e, i)
47
+ (x = n == null ? void 0 : n.onSubmitError) == null ? void 0 : x.call(n, s)
47
48
  );
48
- s && T(a, s), (F = t == null ? void 0 : t.onSubmitError) == null || F.call(
49
+ i && V(a, i), (C = t == null ? void 0 : t.onSubmitError) == null || C.call(
49
50
  t,
50
- i,
51
+ s,
51
52
  a,
52
- n
53
+ e
53
54
  );
54
55
  }, u = {
55
- formId: x,
56
+ formId: c,
56
57
  formRef: l,
57
58
  ctx: a,
58
59
  options: t == null ? void 0 : t.options
59
- }, d = (i) => {
60
- var s, e;
61
- const n = (e = (s = t == null ? void 0 : t.options) == null ? void 0 : s.Children) == null ? void 0 : e[i];
62
- return n && /* @__PURE__ */ p(n, { ...u });
60
+ }, d = (s) => {
61
+ var i;
62
+ const e = (i = n == null ? void 0 : n.Children) == null ? void 0 : i[s];
63
+ return e && /* @__PURE__ */ p(e, { ...u });
63
64
  };
64
- return /* @__PURE__ */ v(
65
- _,
65
+ return /* @__PURE__ */ B(
66
+ O,
66
67
  {
67
68
  noValidate: !0,
68
69
  style: {
69
70
  position: "relative"
70
71
  },
71
72
  ...t == null ? void 0 : t.props,
72
- className: [(b = t == null ? void 0 : t.options) == null ? void 0 : b.classNames, ((S = t == null ? void 0 : t.props) == null ? void 0 : S.className) ?? ""].join(
73
+ className: [(S = t == null ? void 0 : t.options) == null ? void 0 : S.classNames, ((h = t == null ? void 0 : t.props) == null ? void 0 : h.className) ?? ""].join(
73
74
  " "
74
75
  ),
75
- onSubmit: C,
76
+ onSubmit: y,
76
77
  formRef: l,
77
78
  children: [
78
79
  d("top"),
79
- ((o = t == null ? void 0 : t.options) == null ? void 0 : o.devTool) !== "disabled" && /* @__PURE__ */ p(N, { placement: "top-right", ...(h = t == null ? void 0 : t.options) == null ? void 0 : h.devTool }),
80
+ ((E = t == null ? void 0 : t.options) == null ? void 0 : E.devTool) !== "disabled" && /* @__PURE__ */ p(P, { placement: "top-right", ...(F = t == null ? void 0 : t.options) == null ? void 0 : F.devTool }),
80
81
  (t == null ? void 0 : t.Fields) && /* @__PURE__ */ p(t.Fields, { ...u }),
81
- y,
82
+ o,
82
83
  d("bottom")
83
84
  ]
84
85
  }
85
86
  );
86
87
  }
87
88
  export {
88
- A as default
89
+ G as default
89
90
  };
@@ -1,14 +1,15 @@
1
1
  import n from "react";
2
- import { useForm as u } from "react-hook-form";
3
- import i from "../submit/useSubmitFormOnChange.mjs";
4
- const l = ({
5
- rhf: m,
2
+ import { useForm as i } from "react-hook-form";
3
+ import c from "../submit/useSubmitFormOnChange.mjs";
4
+ const P = ({
5
+ config: m,
6
+ rhf: p,
6
7
  form: o,
7
- utils: p
8
+ utils: u
8
9
  }) => {
9
10
  var t;
10
- const s = n.useId(), e = u(m), r = n.useRef(null);
11
- return i(r, {
11
+ const s = n.useId(), e = i(p), r = n.useRef(null);
12
+ return c(r, {
12
13
  disabled: !((t = o == null ? void 0 : o.options) != null && t.submitOnChange)
13
14
  }), {
14
15
  id: s,
@@ -18,15 +19,16 @@ const l = ({
18
19
  formId: s,
19
20
  formRef: r,
20
21
  rhfForm: e,
21
- utils: p
22
+ utils: u
22
23
  },
23
24
  formProps: {
24
25
  formId: s,
25
26
  formRef: r,
27
+ config: m,
26
28
  form: o
27
29
  }
28
30
  };
29
31
  };
30
32
  export {
31
- l as default
33
+ P as default
32
34
  };
@@ -1,7 +1,13 @@
1
+ import { FormSubmitError } from '../submit/error/FormSubmitError';
1
2
  import { UseFormOptions } from '../form/useFormOptions';
3
+ import { UseFormFieldsProps } from '../form/useForm';
4
+ import { _FormSlots } from '../form/_Form';
2
5
  import { UseFormProps } from 'react-hook-form';
3
6
 
4
7
  export type ClientConfig = {
8
+ /**
9
+ * Default options for all forms. (Are overridden by form-specific options.)
10
+ */
5
11
  defaultOptions?: {
6
12
  /**
7
13
  * Default RHF `useForm` settings.
@@ -16,4 +22,16 @@ export type ClientConfig = {
16
22
  */
17
23
  form?: UseFormOptions;
18
24
  };
25
+ /**
26
+ * Components injected by slot across all forms.
27
+ * (Per-form injection can be done via Fields prop.)
28
+ *
29
+ * top: e.g., block navigation on dirty form.
30
+ * bottom: e.g., root errors list.
31
+ */
32
+ Children?: Partial<Record<_FormSlots, React.FC<UseFormFieldsProps>>>;
33
+ /**
34
+ * Handle non-{@link FormSubmitError} errors. Optionally, return {@link FormSubmitError} to merge into context errors.
35
+ */
36
+ onSubmitError?: (error: unknown) => FormSubmitError | undefined;
19
37
  };
@@ -13,7 +13,6 @@ export type ObjectSchema<TInputKey extends string, TOutputKey extends string> =
13
13
  [key in TOutputKey]: SafeFieldValues;
14
14
  };
15
15
  export type CreateRhfUtilsClient<TObjectSchema extends ObjectSchema<TObjectSchemaInputKey, TObjectSchemaOutputKey>, TObjectSchemaInputKey extends string, TObjectSchemaOutputKey extends string> = {
16
- config: ClientConfig;
17
16
  useForm: <TSchema extends TObjectSchema, TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey], TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey]>(schema: TSchema, props: UseFormProps<TSchemaInput, TSchemaOutput>) => UseFormReturn<TSchemaInput, TSchemaOutput>;
18
17
  FormWithProviders: <TSchema extends TObjectSchema, TSchemaInput extends SafeFieldValues = TSchema[TObjectSchemaInputKey], TSchemaOutput extends SafeFieldValues = TSchema[TObjectSchemaOutputKey]>(props: {
19
18
  schema: TSchema;
@@ -0,0 +1,9 @@
1
+ import { FlatFieldErrorEntry, FlatFieldErrors } from './types';
2
+
3
+ /**
4
+ * Filter {@link FlatFieldErrors} by a predicate.
5
+ *
6
+ * (Encapsulates to and from Object entries.)
7
+ */
8
+ declare const makeFlatFieldErrorsFilter: (predicate: (entry: FlatFieldErrorEntry, index: number) => boolean) => (errors: FlatFieldErrors) => FlatFieldErrors;
9
+ export default makeFlatFieldErrorsFilter;
@@ -11,3 +11,7 @@ import { FieldError } from 'react-hook-form';
11
11
  * ```
12
12
  */
13
13
  export type FlatFieldErrors = Record<string, FieldError>;
14
+ /**
15
+ * Return from `Object.entries` on {@link FlatFieldErrors}.
16
+ */
17
+ export type FlatFieldErrorEntry = [path: string, error: FieldError];
@@ -1,5 +1,7 @@
1
+ import { FlatFieldErrors } from './types';
2
+
1
3
  /**
2
4
  * Use {@link FieldErrors} as {@link FlatFieldErrors}.
3
5
  */
4
- declare const useFormFlatFieldErrorsMemo: () => import('./types').FlatFieldErrors;
6
+ declare const useFormFlatFieldErrorsMemo: () => FlatFieldErrors;
5
7
  export default useFormFlatFieldErrorsMemo;
@@ -2,7 +2,7 @@ import { FlatFieldErrors } from './types';
2
2
  import { FieldErrors } from 'react-hook-form';
3
3
 
4
4
  /**
5
- * Use errors with refs.
5
+ * Use {@link FieldErrors} with `ref`s as {@link FlatFieldErrors}.
6
6
  */
7
7
  declare const useRefdFieldErrorsMemo: () => FlatFieldErrors;
8
8
  export default useRefdFieldErrorsMemo;
@@ -0,0 +1,7 @@
1
+ import { FieldError } from 'react-hook-form';
2
+
3
+ /**
4
+ * Determine if {@link FieldError} is a `ref`'d field error.
5
+ */
6
+ declare const isFieldErrorRefd: (error: FieldError) => boolean;
7
+ export default isFieldErrorRefd;
@@ -0,0 +1,7 @@
1
+ import { FlatFieldErrorEntry } from './flat/types';
2
+
3
+ /**
4
+ * Util wrapper for {@link isFieldErrorRefd} for usage with {@link FlatFieldErrorEntry}.
5
+ */
6
+ declare const isFlatFieldErrorEntryRefd: ([, error]: FlatFieldErrorEntry) => boolean;
7
+ export default isFlatFieldErrorEntryRefd;
@@ -1,2 +1,2 @@
1
1
  export declare const getFormNonFieldErrorMarkerQuerySelector: (path: string) => string;
2
- export declare const hasNonFieldErrorMarkerInDOM: (path: string, parentElement: Pick<HTMLElement, 'querySelector'>) => boolean;
2
+ export declare const isNonFieldErrorMarkerInDOM: (path: string, parentElement: Pick<HTMLElement, 'querySelector'>) => boolean;
@@ -0,0 +1,7 @@
1
+ import { FlatFieldErrorEntry } from '../flat/types';
2
+
3
+ /**
4
+ * Util wrapper for {@link isOrphanFormError} for usage with {@link FlatFieldErrorEntry}.
5
+ */
6
+ declare const getIsFlatFieldErrorEntryOrphanByParentElement: (parentElement: Pick<HTMLElement, 'querySelector'>) => ([path, error]: FlatFieldErrorEntry) => boolean;
7
+ export default getIsFlatFieldErrorEntryOrphanByParentElement;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Determined if there are orphan errors and no field errors.
3
+ * (May be useful when reporting or displaying a specific message to user.)
4
+ */
5
+ declare const useFormHasOnlyOrphanFieldErrorsMemo: (formRef: React.RefObject<HTMLFormElement>) => boolean;
6
+ export default useFormHasOnlyOrphanFieldErrorsMemo;
@@ -1,4 +1,2 @@
1
- import { FlatFieldErrors } from '../flat/types';
2
-
3
- declare const getRootsFromFlatFieldErrors: (errors: FlatFieldErrors) => FlatFieldErrors;
1
+ declare const getRootsFromFlatFieldErrors: (errors: import('../flat/types').FlatFieldErrors) => import('../flat/types').FlatFieldErrors;
4
2
  export default getRootsFromFlatFieldErrors;
@@ -0,0 +1,7 @@
1
+ import { FlatFieldErrorEntry } from '../flat/types';
2
+
3
+ /**
4
+ * Util wrapper for {@link isFormErrorPathRoot} for usage with {@link FlatFieldErrorEntry}.
5
+ */
6
+ declare const isFlatFieldErrorEntryPathRoot: ([path]: FlatFieldErrorEntry) => boolean;
7
+ export default isFlatFieldErrorEntryPathRoot;
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Determine if an error path is root. (e.g., `root` or `root.nested`)
3
+ *
3
4
  * @param path Flat path. (e.g., 'root.nested')
4
5
  */
5
6
  declare const isFormErrorPathRoot: (path: string) => boolean;
@@ -0,0 +1,7 @@
1
+ import { FieldErrors } from 'react-hook-form';
2
+
3
+ /**
4
+ * Create transformed memoized form errors value.
5
+ */
6
+ declare const useFormErrorsTransformMemo: <TTransformedReturn>(transform: (errors: FieldErrors) => TTransformedReturn) => TTransformedReturn;
7
+ export default useFormErrorsTransformMemo;
@@ -9,14 +9,14 @@ export { default as FormErrorMessage } from './errors/message/FormErrorMessage';
9
9
  export { default as FormErrorMessageByPath } from './errors/message/FormErrorMessageByPath';
10
10
  export { default as FormNonFieldErrorMarker } from './errors/nonfield/FormNonFieldErrorMarker';
11
11
  export { default as FormNonFieldErrorMarkerHtmlAttribute } from './errors/nonfield/FormNonFieldErrorMarkerHtmlAttribute';
12
- export { default as useFormHasOrphanAndNoFieldErrors } from './errors/orphan/useFormHasOrphanAndNoFieldErrors';
12
+ export { default as useFormHasOnlyOrphanFieldErrorsMemo } from './errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo';
13
13
  export { default as useOrphanFormErrorsMemo } from './errors/orphan/useOrphanFormErrorsMemo';
14
14
  export { default as useOrphanFormErrorsToConsole } from './errors/orphan/useOrphanFormErrorsToConsole';
15
15
  export { default as useRootFormFieldErrorsMemo } from './errors/root/useRootFormFieldErrorsMemo';
16
16
  export { default as useFormErrorConsoleDebug } from './errors/useFormErrorConsoleDebug';
17
17
  export { default as useFormErrorsEffect } from './errors/useFormErrorsEffect';
18
18
  export { default as useFormErrorsIfAny } from './errors/useFormErrorsIfAny';
19
- export { default as useFormErrorsMemo } from './errors/useFormErrorsMemo';
19
+ export { default as useFormErrorsTransformMemo } from './errors/useFormErrorsTransformMemo';
20
20
  export { default as useFormRequestSubmit } from './errors/useFormRequestSubmit';
21
21
  export type { SafeFieldValues } from './form/SafeFieldValues';
22
22
  export type { UseFormFieldsProps } from './form/useForm';
@@ -3,9 +3,9 @@ import { SafeFieldValues } from './SafeFieldValues';
3
3
  import { default as React } from 'react';
4
4
 
5
5
  export type _FormSlots = 'top' | 'bottom';
6
- export type _FormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = React.PropsWithChildren<Pick<UseFormProps<TFieldValues, TTransformedValues>, 'form'> & {
6
+ export type _FormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = React.PropsWithChildren<Pick<UseFormProps<TFieldValues, TTransformedValues>, 'form' | 'config'> & {
7
7
  formId: string;
8
8
  formRef: React.RefObject<HTMLFormElement>;
9
9
  }>;
10
- declare function _Form<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ formId, formRef, form, children, }: _FormProps<TFieldValues, TTransformedValues>): import("react/jsx-runtime").JSX.Element;
10
+ declare function _Form<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ formId, formRef, form, config, children, }: _FormProps<TFieldValues, TTransformedValues>): import("react/jsx-runtime").JSX.Element;
11
11
  export default _Form;
@@ -3,6 +3,7 @@ import { SafeFieldValues } from './SafeFieldValues';
3
3
  import { FormUtilsContextProviderProps } from './context/utils/FormUtilsContextProvider';
4
4
  import { _FormProvidersProps } from './_FormProviders';
5
5
  import { _FormProps } from './_Form';
6
+ import { ClientConfig } from '../client/config';
6
7
  import { SubmitErrorHandler, UseFormProps as RhfUseFormProps, UseFormReturn as RhfUseFormReturn } from 'react-hook-form';
7
8
  import { default as React } from 'react';
8
9
 
@@ -13,6 +14,7 @@ export type UseFormFieldsProps<TFieldValues extends SafeFieldValues = SafeFieldV
13
14
  options?: UseFormOptions;
14
15
  };
15
16
  export type UseFormProps<TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues> = {
17
+ config?: ClientConfig;
16
18
  /** {@link RhfUseFormProps} props for RHF's {@link useRhfForm}. */
17
19
  rhf?: RhfUseFormProps<TFieldValues>;
18
20
  /** {@link FormProps} props for Form. */
@@ -37,7 +39,7 @@ export type UseFormProps<TFieldValues extends SafeFieldValues, TTransformedValue
37
39
  * see https://caniuse.com/?search=form%20attribute
38
40
  * @returns Form provider and form.
39
41
  */
40
- declare const useForm: <TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ rhf, form, utils, }: UseFormProps<TFieldValues, TTransformedValues>) => {
42
+ declare const useForm: <TFieldValues extends SafeFieldValues, TTransformedValues extends SafeFieldValues>({ config, rhf, form, utils, }: UseFormProps<TFieldValues, TTransformedValues>) => {
41
43
  readonly id: string;
42
44
  readonly ref: React.RefObject<HTMLFormElement>;
43
45
  readonly context: RhfUseFormReturn<TFieldValues, unknown, TTransformedValues>;
@@ -1,6 +1,3 @@
1
- import { UseFormFieldsProps } from './useForm';
2
- import { _FormSlots } from './_Form';
3
- import { FormSubmitError } from '../submit/error/FormSubmitError';
4
1
  import { DevtoolUIProps } from '@hookform/devtools/dist/devToolUI';
5
2
 
6
3
  export type UseFormOptions = {
@@ -14,15 +11,4 @@ export type UseFormOptions = {
14
11
  stopSubmitPropagation?: boolean;
15
12
  /** Control dev tool options. */
16
13
  devTool?: DevtoolUIProps | 'disabled';
17
- /**
18
- * Components injected by slot.
19
- *
20
- * e.g., top: block navigation on dirty form.
21
- * e.g., bottom: root errors list.
22
- */
23
- Children?: Partial<Record<_FormSlots, React.FC<UseFormFieldsProps>>>;
24
- /**
25
- * Handle non-{@link FormSubmitError} errors. Optionally, return {@link FormSubmitError} to merge into context errors.
26
- */
27
- onSubmitError?: (error: unknown) => FormSubmitError | undefined;
28
14
  };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@paragrav/rhf-utils",
3
3
  "author": "paragrav.dev",
4
4
  "license": "MIT",
5
- "version": "0.0.67",
5
+ "version": "0.0.68",
6
6
  "description": "Integration utilities for react-hook-form.",
7
7
  "type": "module",
8
8
  "sideEffects": false,
@@ -57,9 +57,9 @@
57
57
  "default": "./dist/esm/errors/useFormErrorsIfAny.mjs",
58
58
  "types": "./dist/types/errors/useFormErrorsIfAny.d.ts"
59
59
  },
60
- "./errors/useFormErrorsOnChange": {
61
- "default": "./dist/esm/errors/useFormErrorsOnChange.mjs",
62
- "types": "./dist/types/errors/useFormErrorsOnChange.d.ts"
60
+ "./errors/useFormErrorsTransformMemo": {
61
+ "default": "./dist/esm/errors/useFormErrorsTransformMemo.mjs",
62
+ "types": "./dist/types/errors/useFormErrorsTransformMemo.d.ts"
63
63
  },
64
64
  "./errors/useFormRequestSubmit": {
65
65
  "default": "./dist/esm/errors/useFormRequestSubmit.mjs",
@@ -73,14 +73,14 @@
73
73
  "default": "./dist/esm/errors/nonfield/FormNonFieldErrorMarker.utils.mjs",
74
74
  "types": "./dist/types/errors/nonfield/FormNonFieldErrorMarker.utils.d.ts"
75
75
  },
76
+ "./errors/useFormHasOnlyOrphanFieldErrorsMemo": {
77
+ "default": "./dist/esm/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.mjs",
78
+ "types": "./dist/types/errors/orphan/useFormHasOnlyOrphanFieldErrorsMemo.d.ts"
79
+ },
76
80
  "./errors/useOrphanFormErrorsToConsoleError": {
77
81
  "default": "./dist/esm/errors/orphan/useOrphanFormErrorsToConsoleError.mjs",
78
82
  "types": "./dist/types/errors/orphan/useOrphanFormErrorsToConsoleError.d.ts"
79
83
  },
80
- "./errors/useFormErrorsHasOnlyOrphans": {
81
- "default": "./dist/esm/errors/orphan/useFormErrorsHasOnlyOrphans.mjs",
82
- "types": "./dist/types/errors/orphan/useFormErrorsHasOnlyOrphans.d.ts"
83
- },
84
84
  "./errors/useOrphanFormErrors": {
85
85
  "default": "./dist/esm/errors/orphan/useOrphanFormErrors.mjs",
86
86
  "types": "./dist/types/errors/orphan/useOrphanFormErrors.d.ts"
@@ -173,7 +173,6 @@
173
173
  "lint": "eslint --ignore-path ./.gitignore --ext ts,tsx --report-unused-disable-directives --max-warnings 0 .",
174
174
  "preinstall": "npx only-allow npm",
175
175
  "prepare": "husky",
176
- "prepublishOnly": "npm run build",
177
176
  "preview": "vite preview --config vite.config.dev.ts",
178
177
  "test": "vitest",
179
178
  "test:ct": "playwright test -c playwright-ct.config.ts",
@@ -1,13 +0,0 @@
1
- import t from "../isFieldError.mjs";
2
- import s from "../useFormErrorsMemo.mjs";
3
- import i from "./getFlatFieldErrors.mjs";
4
- const d = () => s(m), m = (r) => {
5
- const e = i(r);
6
- return Object.fromEntries(
7
- Object.entries(e).filter(([, o]) => t(o))
8
- );
9
- };
10
- export {
11
- d as default,
12
- m as getFlatFieldFormErrors
13
- };
@@ -1,4 +0,0 @@
1
- const e = (r) => !!r.ref;
2
- export {
3
- e as default
4
- };
@@ -1,10 +0,0 @@
1
- import r from "../../utils/isEmptyObject.mjs";
2
- import t from "../flat/useRefdFieldErrorsMemo.mjs";
3
- import m from "./useOrphanFormErrorsMemo.mjs";
4
- const n = (o) => {
5
- const s = m(o), e = t();
6
- return r(s) ? !1 : !r(e);
7
- }, d = n;
8
- export {
9
- d as default
10
- };