cogsbox-state 0.5.490 → 0.5.492

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Components.d.ts","sourceRoot":"","sources":["../src/Components.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGjB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,EASZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAsBf,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,sBAAsB,2CAiFxB;AACD,eAAO,MAAM,uBAAuB,mDAWnC,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,iBAAiB,EAAE,GAAG,CAAC;IACvB,QAAQ,EAAE,GAAG,CAAC;CACf,kDA2DA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,IAAI,EACJ,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,EAAE,CAAC,OAAO,EAAE;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,KAAK,GAAG,CAAC;IACV,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,GAAG,CAAC;CACf,2CAkVA;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,QAcjC;AAED,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,IAAI,EAAE,8CAA8C;AACpD,YAAY,EAAE,sDAAsD;AACpE,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;CAC3C,2CAuCA"}
1
+ {"version":3,"file":"Components.d.ts","sourceRoot":"","sources":["../src/Components.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGjB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAQrB,OAAO,KAAK,EAAE,EASZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAsBf,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,sBAAsB,2CAiFxB;AACD,eAAO,MAAM,uBAAuB,mDAWnC,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,iBAAiB,EAAE,GAAG,CAAC;IACvB,QAAQ,EAAE,GAAG,CAAC;CACf,kDA2DA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,IAAI,EACJ,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,iBAAiB,EAAE,CAAC,OAAO,EAAE;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,KAAK,GAAG,CAAC;IACV,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,GAAG,CAAC;CACf,2CAiVA;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,QAcjC;AAED,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,IAAI,EAAE,8CAA8C;AACpD,YAAY,EAAE,sDAAsD;AACpE,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC;IACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;CAC3C,2CAuCA"}
@@ -1,8 +1,8 @@
1
- import { jsx as C, Fragment as q } from "react/jsx-runtime";
2
- import { pluginStore as E } from "./pluginStore.js";
1
+ import { jsx as E, Fragment as q } from "react/jsx-runtime";
2
+ import { pluginStore as C } from "./pluginStore.js";
3
3
  import { createScopedMetadataContext as J, toDeconstructedMethods as et } from "./plugins.js";
4
- import j, { memo as Q, useState as R, useRef as N, useCallback as L, useEffect as P, useLayoutEffect as nt, useMemo as ot } from "react";
5
- import { getGlobalStore as b } from "./store.js";
4
+ import j, { memo as Q, useState as R, useRef as W, useCallback as L, useEffect as P, useLayoutEffect as nt, useMemo as ot } from "react";
5
+ import { getGlobalStore as y } from "./store.js";
6
6
  import { useInView as rt } from "react-intersection-observer";
7
7
  import { v4 as X } from "uuid";
8
8
  import { isDeepEqual as it } from "./utility.js";
@@ -13,47 +13,47 @@ const {
13
13
  setShadowMetadata: Tt,
14
14
  getShadowValue: $,
15
15
  registerComponent: ct,
16
- unregisterComponent: lt,
16
+ unregisterComponent: ut,
17
17
  notifyPathSubscribers: wt,
18
- subscribeToPath: ut
19
- } = b.getState(), { stateHandlers: At, notifyFormUpdate: B } = E.getState();
18
+ subscribeToPath: lt
19
+ } = y.getState(), { stateHandlers: At, notifyFormUpdate: B } = C.getState();
20
20
  function dt({
21
21
  formOpts: e,
22
22
  path: t,
23
23
  stateKey: o,
24
24
  children: c
25
25
  }) {
26
- const { getInitialOptions: v, getShadowMetadata: p, getShadowValue: r } = b.getState(), l = v(o), h = p(o, t)?.validation, A = h?.status || "NOT_VALIDATED", g = (h?.errors || []).map((S) => ({
26
+ const { getInitialOptions: v, getShadowMetadata: p, getShadowValue: r } = y.getState(), u = v(o), M = p(o, t)?.validation, A = M?.status || "NOT_VALIDATED", g = (M?.errors || []).map((S) => ({
27
27
  ...S,
28
28
  path: t
29
- })), d = g.filter((S) => S.severity === "error").map((S) => S.message), a = g.filter((S) => S.severity === "warning").map((S) => S.message), T = d[0] || a[0], f = d.length > 0 ? "error" : a.length > 0 ? "warning" : void 0, { registeredPlugins: s } = E.getState(), y = {};
29
+ })), l = g.filter((S) => S.severity === "error").map((S) => S.message), a = g.filter((S) => S.severity === "warning").map((S) => S.message), T = l[0] || a[0], f = l.length > 0 ? "error" : a.length > 0 ? "warning" : void 0, { registeredPlugins: s } = C.getState(), b = {};
30
30
  return s.forEach((S) => {
31
- if (l && l.hasOwnProperty(S.name)) {
32
- const W = S.name, O = E.getState().getHookResult(o, W), k = J(
31
+ if (u && u.hasOwnProperty(S.name)) {
32
+ const N = S.name, O = C.getState().getHookResult(o, N), k = J(
33
33
  o,
34
- W,
34
+ N,
35
35
  t
36
36
  );
37
- y[W] = {
37
+ b[N] = {
38
38
  hookData: O,
39
39
  getFieldMetaData: k.getFieldMetaData,
40
40
  setFieldMetaData: k.setFieldMetaData,
41
41
  removeFieldMetaData: k.removeFieldMetaData
42
42
  };
43
43
  }
44
- }), /* @__PURE__ */ C(q, { children: l?.formElements?.validation && !e?.validation?.disable ? l.formElements.validation({
45
- children: /* @__PURE__ */ C(j.Fragment, { children: c }, t.toString()),
44
+ }), /* @__PURE__ */ E(q, { children: u?.formElements?.validation && !e?.validation?.disable ? u.formElements.validation({
45
+ children: /* @__PURE__ */ E(j.Fragment, { children: c }, t.toString()),
46
46
  status: A,
47
47
  // Now passes the new ValidationStatus type
48
48
  message: e?.validation?.hideMessage ? "" : e?.validation?.message || T || "",
49
49
  severity: f,
50
- hasErrors: d.length > 0,
50
+ hasErrors: l.length > 0,
51
51
  hasWarnings: a.length > 0,
52
52
  allErrors: g,
53
53
  path: t,
54
54
  getData: () => r(o, t),
55
- plugins: y
56
- }) : /* @__PURE__ */ C(j.Fragment, { children: c }, t.toString()) });
55
+ plugins: b
56
+ }) : /* @__PURE__ */ E(j.Fragment, { children: c }, t.toString()) });
57
57
  }
58
58
  const Dt = Q(
59
59
  gt,
@@ -68,17 +68,17 @@ function gt({
68
68
  rebuildStateShape: p,
69
69
  renderFn: r
70
70
  }) {
71
- const [, l] = R({}), { ref: m, inView: h } = rt(), A = N(null), g = [e, ...o].join(".");
72
- z(e, t, l);
73
- const d = L(
71
+ const [, u] = R({}), { ref: m, inView: M } = rt(), A = W(null), g = [e, ...o].join(".");
72
+ z(e, t, u);
73
+ const l = L(
74
74
  (s) => {
75
75
  A.current = s, m(s);
76
76
  },
77
77
  [m]
78
78
  );
79
79
  P(() => {
80
- const s = ut(g, (y) => {
81
- l({});
80
+ const s = lt(g, (b) => {
81
+ u({});
82
82
  });
83
83
  return () => s();
84
84
  }, [g]);
@@ -91,11 +91,11 @@ function gt({
91
91
  }), f = r(T, c, v);
92
92
  return j.isValidElement(f) ? j.cloneElement(f, {
93
93
  ref: (s) => {
94
- d(s);
95
- const { ref: y } = f;
96
- typeof y == "function" ? y(s) : y && "current" in y && (y.current = s);
94
+ l(s);
95
+ const { ref: b } = f;
96
+ typeof b == "function" ? b(s) : b && "current" in b && (b.current = s);
97
97
  }
98
- }) : /* @__PURE__ */ C("div", { ref: d, children: f });
98
+ }) : /* @__PURE__ */ E("div", { ref: l, children: f });
99
99
  }
100
100
  function It({
101
101
  stateKey: e,
@@ -105,24 +105,22 @@ function It({
105
105
  formOpts: v,
106
106
  setState: p
107
107
  }) {
108
- const r = N(X()).current, [, l] = R({}), m = N(null), h = [e, ...t].join(".");
109
- z(e, r, l);
110
- const g = b.getState().getShadowNode(e, t)?._meta?.typeInfo, d = $(e, t), [a, T] = R(d), f = N(!1), s = N(null);
108
+ const r = W(X()).current, [, u] = R({}), m = W(null), M = [e, ...t].join(".");
109
+ z(e, r, u);
110
+ const g = y.getState().getShadowNode(e, t)?._meta?.typeInfo, l = $(e, t), [a, T] = R(l), f = W(!1), s = W(null);
111
111
  P(() => {
112
- !f.current && !it(d, a) && T(d);
113
- }, [d]), P(() => {
114
- const { getShadowMetadata: n, setShadowMetadata: i } = b.getState();
115
- console.log("FormElementWrapper effect running for:", e, t);
116
- const u = n(e, t) || {};
117
- u.clientActivityState || (u.clientActivityState = { elements: /* @__PURE__ */ new Map() });
112
+ !f.current && !it(l, a) && T(l);
113
+ }, [l]), P(() => {
114
+ const { getShadowMetadata: n, setShadowMetadata: i } = y.getState(), d = n(e, t) || {};
115
+ d.clientActivityState || (d.clientActivityState = { elements: /* @__PURE__ */ new Map() });
118
116
  const w = () => {
119
- const M = m.current;
120
- if (!M) return "input";
121
- const x = M.tagName.toLowerCase();
117
+ const h = m.current;
118
+ if (!h) return "input";
119
+ const x = h.tagName.toLowerCase();
122
120
  if (x === "textarea") return "textarea";
123
121
  if (x === "select") return "select";
124
122
  if (x === "input") {
125
- const F = M.type;
123
+ const F = h.type;
126
124
  if (F === "checkbox") return "checkbox";
127
125
  if (F === "radio") return "radio";
128
126
  if (F === "range") return "range";
@@ -130,37 +128,37 @@ function It({
130
128
  }
131
129
  return "input";
132
130
  };
133
- u.clientActivityState.elements.set(r, {
131
+ d.clientActivityState.elements.set(r, {
134
132
  domRef: m,
135
133
  elementType: w(),
136
134
  inputType: m.current?.type,
137
135
  mountedAt: Date.now()
138
- }), console.log("currentMeta", u), i(e, t, u);
139
- const D = b.getState().subscribeToPath(h, (M) => {
140
- !f.current && a !== M && l({});
136
+ }), i(e, t, d);
137
+ const D = y.getState().subscribeToPath(M, (h) => {
138
+ !f.current && a !== h && u({});
141
139
  });
142
140
  return () => {
143
141
  D(), s.current && (clearTimeout(s.current), f.current = !1);
144
- const M = b.getState().getShadowMetadata(e, t);
145
- M?.clientActivityState?.elements && (M.clientActivityState.elements.delete(r), i(e, t, M));
142
+ const h = y.getState().getShadowMetadata(e, t);
143
+ h?.clientActivityState?.elements && (h.clientActivityState.elements.delete(r), i(e, t, h));
146
144
  };
147
145
  }, []);
148
- const y = L(
146
+ const b = L(
149
147
  (n) => {
150
- const i = b.getState().getShadowNode(e, t)?._meta?.typeInfo ?? g;
151
- i ? i.type === "number" && typeof n == "string" ? n = n === "" ? i.nullable ? null : i.default ?? 0 : Number(n) : i.type === "boolean" && typeof n == "string" ? n = n === "true" || n === "1" : i.type === "date" && typeof n == "string" && (n = new Date(n)) : typeof d === "number" && typeof n == "string" && (n = n === "" ? 0 : Number(n)), T(n);
152
- const { getShadowMetadata: u, setShadowMetadata: w } = b.getState(), D = u(e, t);
148
+ const i = y.getState().getShadowNode(e, t)?._meta?.typeInfo ?? g;
149
+ i ? i.type === "number" && typeof n == "string" ? n = n === "" ? i.nullable ? null : i.default ?? 0 : Number(n) : i.type === "boolean" && typeof n == "string" ? n = n === "true" || n === "1" : i.type === "date" && typeof n == "string" && (n = new Date(n)) : typeof l === "number" && typeof n == "string" && (n = n === "" ? 0 : Number(n)), T(n);
150
+ const { getShadowMetadata: d, setShadowMetadata: w } = y.getState(), D = d(e, t);
153
151
  if (D?.clientActivityState?.elements?.has(r)) {
154
152
  const I = D.clientActivityState.elements.get(r);
155
153
  I && I.currentActivity?.type === "focus" && (I.currentActivity.details = {
156
154
  ...I.currentActivity.details,
157
155
  value: n,
158
- previousValue: I.currentActivity.details?.value || d,
156
+ previousValue: I.currentActivity.details?.value || l,
159
157
  inputLength: typeof n == "string" ? n.length : void 0,
160
158
  keystrokeCount: (I.currentActivity.details?.keystrokeCount || 0) + 1
161
159
  }, w(e, t, D));
162
160
  }
163
- const M = D?.clientActivityState?.elements?.get(r);
161
+ const h = D?.clientActivityState?.elements?.get(r);
164
162
  B({
165
163
  stateKey: e,
166
164
  activityType: "input",
@@ -174,7 +172,7 @@ function It({
174
172
  // You'd need to track this from the actual input event
175
173
  isPasting: !1,
176
174
  // You'd need to track this from paste events
177
- keystrokeCount: (M?.currentActivity?.details?.keystrokeCount || 0) + 1
175
+ keystrokeCount: (h?.currentActivity?.details?.keystrokeCount || 0) + 1
178
176
  }
179
177
  }), G({
180
178
  stateKey: e,
@@ -195,14 +193,14 @@ function It({
195
193
  t,
196
194
  v?.debounceTime,
197
195
  g,
198
- d,
196
+ l,
199
197
  e,
200
198
  r
201
199
  ]
202
200
  ), S = L(() => {
203
- const { getShadowMetadata: n, setShadowMetadata: i } = b.getState(), u = n(e, t);
204
- if (u?.clientActivityState?.elements?.has(r)) {
205
- const w = u.clientActivityState.elements.get(r);
201
+ const { getShadowMetadata: n, setShadowMetadata: i } = y.getState(), d = n(e, t);
202
+ if (d?.clientActivityState?.elements?.has(r)) {
203
+ const w = d.clientActivityState.elements.get(r);
206
204
  w.currentActivity = {
207
205
  type: "focus",
208
206
  startTime: Date.now(),
@@ -210,7 +208,7 @@ function It({
210
208
  value: a,
211
209
  inputLength: typeof a == "string" ? a.length : void 0
212
210
  }
213
- }, i(e, t, u);
211
+ }, i(e, t, d);
214
212
  }
215
213
  B({
216
214
  stateKey: e,
@@ -222,15 +220,15 @@ function It({
222
220
  cursorPosition: m.current?.selectionStart
223
221
  }
224
222
  });
225
- }, [e, t, r, a]), W = L(() => {
226
- const { getShadowMetadata: n, setShadowMetadata: i } = b.getState();
223
+ }, [e, t, r, a]), N = L(() => {
224
+ const { getShadowMetadata: n, setShadowMetadata: i } = y.getState();
227
225
  s.current && (clearTimeout(s.current), s.current = null, f.current = !1, p(a, t, { updateType: "update" }));
228
- const u = n(e, t);
229
- if (u?.clientActivityState?.elements?.has(r)) {
230
- const M = u.clientActivityState.elements.get(r);
231
- M.currentActivity = void 0, i(e, t, u);
226
+ const d = n(e, t);
227
+ if (d?.clientActivityState?.elements?.has(r)) {
228
+ const h = d.clientActivityState.elements.get(r);
229
+ h.currentActivity = void 0, i(e, t, d);
232
230
  }
233
- const w = u?.clientActivityState?.elements?.get(r)?.currentActivity?.startTime;
231
+ const w = d?.clientActivityState?.elements?.get(r)?.currentActivity?.startTime;
234
232
  at(e)?.validation?.onBlur && G(
235
233
  {
236
234
  stateKey: e,
@@ -249,7 +247,7 @@ function It({
249
247
  duration: w ? Date.now() - w : 0
250
248
  }
251
249
  });
252
- }, [a, p, t, e, r, d]), O = o({
250
+ }, [a, p, t, e, r, l]), O = o({
253
251
  path: t,
254
252
  componentId: r,
255
253
  meta: void 0
@@ -260,16 +258,16 @@ function It({
260
258
  get(n, i) {
261
259
  return i === "$inputProps" ? {
262
260
  value: a ?? "",
263
- onChange: (u) => {
264
- y(u.target.value);
261
+ onChange: (d) => {
262
+ b(d.target.value);
265
263
  },
266
264
  onFocus: S,
267
- onBlur: W,
265
+ onBlur: N,
268
266
  ref: m
269
267
  } : i === "status" ? Y : i === "severity" ? V : i === "hasErrors" ? _.length > 0 : i === "hasWarnings" ? H.length > 0 : i === "allErrors" ? U : i === "message" ? Z : i === "getData" ? () => $(e, t) : n[i];
270
268
  }
271
269
  }), tt = c(K);
272
- return /* @__PURE__ */ C(dt, { formOpts: v, path: t, stateKey: e, children: tt });
270
+ return /* @__PURE__ */ E(dt, { formOpts: v, path: t, stateKey: e, children: tt });
273
271
  }
274
272
  function z(e, t, o) {
275
273
  const c = `${e}////${t}`;
@@ -278,10 +276,10 @@ function z(e, t, o) {
278
276
  paths: /* @__PURE__ */ new Set(),
279
277
  reactiveType: ["component"]
280
278
  }), () => {
281
- lt(e, c);
279
+ ut(e, c);
282
280
  }), [e, c]);
283
281
  }
284
- function Et({
282
+ function Ct({
285
283
  stateKey: e,
286
284
  path: t,
287
285
  // The path of the parent node (e.g. ['form'])
@@ -292,21 +290,21 @@ function Et({
292
290
  }) {
293
291
  const [p] = R(() => X()), [, r] = R({});
294
292
  z(e, p, r);
295
- const l = ot(() => o && o.length > 0 ? o.map((h) => [e, ...h.$_path].join(".")) : [[e, ...t].join(".")], [e, t, o]);
293
+ const u = ot(() => o && o.length > 0 ? o.map((M) => [e, ...M.$_path].join(".")) : [[e, ...t].join(".")], [e, t, o]);
296
294
  P(() => {
297
- const h = b.getState(), A = l.map((g) => h.subscribeToPath(g, () => {
295
+ const M = y.getState(), A = u.map((g) => M.subscribeToPath(g, () => {
298
296
  r({});
299
297
  }));
300
298
  return () => {
301
299
  A.forEach((g) => g());
302
300
  };
303
- }, [l]);
301
+ }, [u]);
304
302
  const m = c({
305
303
  path: t,
306
304
  componentId: p,
307
305
  meta: void 0
308
306
  });
309
- return /* @__PURE__ */ C(q, { children: v(m) });
307
+ return /* @__PURE__ */ E(q, { children: v(m) });
310
308
  }
311
309
  Q(function({
312
310
  children: t,
@@ -318,34 +316,34 @@ Q(function({
318
316
  const [, r] = R({});
319
317
  P(() => {
320
318
  const T = [o, ...c].join(".");
321
- return b.getState().subscribeToPath(T, () => {
319
+ return y.getState().subscribeToPath(T, () => {
322
320
  r({});
323
321
  });
324
322
  }, [o, c]);
325
- const l = E.getState().registeredPlugins.find((T) => T.name === v), m = E.getState().stateHandlers.get(o), h = b.getState().getShadowNode(o, c)?._meta?.typeInfo, A = E.getState().pluginOptions.get(o)?.get(v), g = E.getState().getHookResult(o, v);
326
- if (!l?.formWrapper || !m)
327
- return /* @__PURE__ */ C(q, { children: t });
328
- const d = et(m), a = J(
323
+ const u = C.getState().registeredPlugins.find((T) => T.name === v), m = C.getState().stateHandlers.get(o), M = y.getState().getShadowNode(o, c)?._meta?.typeInfo, A = C.getState().pluginOptions.get(o)?.get(v), g = C.getState().getHookResult(o, v);
324
+ if (!u?.formWrapper || !m)
325
+ return /* @__PURE__ */ E(q, { children: t });
326
+ const l = et(m), a = J(
329
327
  o,
330
- l.name,
328
+ u.name,
331
329
  c
332
330
  );
333
- return l.formWrapper({
331
+ return u.formWrapper({
334
332
  element: t,
335
333
  path: c,
336
334
  stateKey: o,
337
- pluginName: l.name,
338
- ...d,
335
+ pluginName: u.name,
336
+ ...l,
339
337
  ...a,
340
338
  options: A,
341
339
  hookData: g,
342
- fieldType: h?.type,
340
+ fieldType: M?.type,
343
341
  wrapperDepth: p
344
342
  });
345
343
  });
346
344
  export {
347
345
  It as FormElementWrapper,
348
- Et as IsolatedComponentWrapper,
346
+ Ct as IsolatedComponentWrapper,
349
347
  gt as ListItemWrapper,
350
348
  Dt as MemoizedCogsItemWrapper,
351
349
  dt as ValidationWrapper,
@@ -1 +1 @@
1
- {"version":3,"file":"Components.js","sources":["../src/Components.tsx"],"sourcesContent":["import {\r\n FormElementParams,\r\n StateObject,\r\n UpdateTypeDetail,\r\n type FormOptsType,\r\n} from './CogsState';\r\nimport { pluginStore } from './pluginStore';\r\nimport {\r\n createMetadataContext,\r\n createScopedMetadataContext,\r\n PluginsApi,\r\n toDeconstructedMethods,\r\n} from './plugins';\r\nimport React, {\r\n memo,\r\n RefObject,\r\n useCallback,\r\n useEffect,\r\n useLayoutEffect,\r\n useRef,\r\n useState,\r\n useMemo,\r\n type ReactNode,\r\n} from 'react';\r\nimport { getGlobalStore, ValidationError, ValidationSeverity } from './store';\nimport { useInView } from 'react-intersection-observer';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { isDeepEqual } from './utility';\r\nimport { runValidation } from './validation';\r\n\r\nconst {\r\n getInitialOptions,\r\n\r\n getShadowMetadata,\r\n setShadowMetadata,\r\n getShadowValue,\r\n\r\n registerComponent,\r\n unregisterComponent,\r\n\r\n notifyPathSubscribers,\r\n subscribeToPath,\r\n} = getGlobalStore.getState();\r\nconst { stateHandlers, notifyFormUpdate } = pluginStore.getState();\r\n\r\nexport type ValidationWrapperProps = {\r\n formOpts?: FormOptsType;\r\n path: string[];\r\n stateKey: string;\r\n children: ReactNode;\r\n};\r\n\r\nexport function ValidationWrapper({\r\n formOpts,\r\n path,\r\n stateKey,\r\n children,\r\n}: ValidationWrapperProps) {\r\n const { getInitialOptions, getShadowMetadata, getShadowValue } =\r\n getGlobalStore.getState();\r\n const thisStateOpts = getInitialOptions(stateKey!);\r\n\r\n const shadowMeta = getShadowMetadata(stateKey!, path);\r\n const validationState = shadowMeta?.validation;\r\n\r\n const status = validationState?.status || 'NOT_VALIDATED';\r\n\r\n const errors = (validationState?.errors || []).map((err) => ({\r\n ...err,\r\n path: path,\r\n })) as ValidationError[];\r\n const errorMessages = errors\r\n .filter((err) => err.severity === 'error')\r\n .map((err) => err.message);\r\n const warningMessages = errors\r\n .filter((err) => err.severity === 'warning')\r\n .map((err) => err.message);\r\n\r\n // Use first error, or first warning if no errors\r\n const message = errorMessages[0] || warningMessages[0];\r\n const primarySeverity: ValidationSeverity =\r\n errorMessages.length > 0\r\n ? 'error'\r\n : warningMessages.length > 0\r\n ? 'warning'\r\n : undefined;\r\n const { registeredPlugins } = pluginStore.getState();\r\n const pluginsApi: PluginsApi = {};\r\n\r\n // We iterate over ALL registered plugins in the app.\r\n registeredPlugins.forEach((plugin) => {\r\n if (thisStateOpts && thisStateOpts.hasOwnProperty(plugin.name)) {\r\n const pluginName = plugin.name;\r\n\r\n const hookData = pluginStore\r\n .getState()\r\n .getHookResult(stateKey!, pluginName);\r\n\r\n const scopedMetadata = createScopedMetadataContext(\r\n stateKey!,\r\n pluginName,\r\n path\r\n );\r\n\r\n pluginsApi[pluginName] = {\r\n hookData,\r\n getFieldMetaData: scopedMetadata.getFieldMetaData,\r\n setFieldMetaData: scopedMetadata.setFieldMetaData,\r\n removeFieldMetaData: scopedMetadata.removeFieldMetaData,\r\n };\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {thisStateOpts?.formElements?.validation &&\r\n !formOpts?.validation?.disable ? (\r\n thisStateOpts.formElements!.validation!({\r\n children: (\r\n <React.Fragment key={path.toString()}>{children}</React.Fragment>\r\n ),\r\n status, // Now passes the new ValidationStatus type\r\n message: formOpts?.validation?.hideMessage\r\n ? ''\r\n : formOpts?.validation?.message || message || '',\r\n severity: primarySeverity,\r\n hasErrors: errorMessages.length > 0,\r\n hasWarnings: warningMessages.length > 0,\r\n allErrors: errors,\r\n path: path,\r\n getData: () => getShadowValue(stateKey!, path),\r\n plugins: pluginsApi,\r\n })\r\n ) : (\r\n <React.Fragment key={path.toString()}>{children}</React.Fragment>\r\n )}\r\n </>\r\n );\r\n}\r\nexport const MemoizedCogsItemWrapper = memo(\r\n ListItemWrapper,\r\n (prevProps, nextProps) => {\r\n // Re-render if any of these change:\r\n return (\r\n prevProps.itemPath.join('.') === nextProps.itemPath.join('.') &&\r\n prevProps.stateKey === nextProps.stateKey &&\r\n prevProps.itemComponentId === nextProps.itemComponentId &&\r\n prevProps.localIndex === nextProps.localIndex\r\n );\r\n }\r\n);\r\n\r\nexport function ListItemWrapper({\r\n stateKey,\r\n itemComponentId,\r\n itemPath,\r\n localIndex,\r\n arraySetter,\r\n rebuildStateShape,\r\n renderFn,\r\n}: {\r\n stateKey: string;\r\n itemComponentId: string;\r\n itemPath: string[];\r\n localIndex: number;\r\n arraySetter: any;\r\n rebuildStateShape: any;\r\n renderFn: any;\r\n}) {\r\n const [, forceUpdate] = useState({});\r\n const { ref: inViewRef, inView } = useInView();\r\n const elementRef = useRef<HTMLElement | null>(null); // Changed to HTMLElement to be generic\r\n\r\n const fullKey = [stateKey, ...itemPath].join('.');\r\n\r\n useRegisterComponent(stateKey, itemComponentId, forceUpdate);\r\n\r\n const setRefs = useCallback(\r\n (element: HTMLElement | null) => {\r\n elementRef.current = element;\r\n inViewRef(element);\r\n },\r\n [inViewRef]\r\n );\r\n\r\n useEffect(() => {\r\n const unsubscribe = subscribeToPath(fullKey, (e) => {\r\n forceUpdate({});\r\n });\r\n return () => unsubscribe();\r\n }, [fullKey]);\r\n\r\n const itemValue = getShadowValue(stateKey, itemPath);\r\n if (itemValue === undefined) return null;\r\n\r\n const itemSetter = rebuildStateShape({\r\n currentState: itemValue,\r\n path: itemPath,\r\n componentId: itemComponentId,\r\n });\r\n\r\n // 1. Render the user's content (e.g. the <tr>)\r\n const children = renderFn(itemSetter, localIndex, arraySetter);\r\n\r\n // 2. AUTO-DETECT: If it is a single valid element (<tr>, <div>, <li>), inject the ref.\r\n if (React.isValidElement(children)) {\r\n // We clone the element and force our ref onto it\r\n return React.cloneElement(children as React.ReactElement<any>, {\r\n ref: (node: any) => {\r\n // Apply our virtualization ref\r\n setRefs(node);\r\n\r\n // Preserve any ref the user might have put on the element themselves\r\n const { ref: existingRef } = children as any;\r\n if (typeof existingRef === 'function') {\r\n existingRef(node);\r\n } else if (existingRef && 'current' in existingRef) {\r\n (existingRef as any).current = node;\r\n }\r\n },\r\n });\r\n }\r\n\r\n // 3. Fallback: If they returned a Fragment or string, we MUST wrap it to measure it.\r\n // (Note: This specific fallback will still break inside a <tbody>, but\r\n // as long as you return a <tr> above, line 90 catches it).\r\n return <div ref={setRefs}>{children}</div>;\r\n}\r\n\r\nexport function FormElementWrapper({\r\n stateKey,\r\n path,\r\n rebuildStateShape,\r\n renderFn,\r\n formOpts,\r\n setState,\r\n}: {\r\n stateKey: string;\r\n path: string[];\r\n rebuildStateShape: (options: {\r\n path: string[];\r\n componentId: string;\r\n meta?: any;\r\n }) => any;\r\n renderFn: (params: FormElementParams<any>) => ReactNode;\r\n formOpts?: FormOptsType;\r\n setState: any;\r\n}) {\r\n const componentId = useRef(uuidv4()).current;\r\n\r\n const [, forceUpdate] = useState({});\r\n const formElementRef = useRef<any>(null);\r\n const stateKeyPathKey = [stateKey, ...path].join('.');\r\n useRegisterComponent(stateKey, componentId, forceUpdate);\r\n // Get the shadow node to access typeInfo and schema\r\n const shadowNode = getGlobalStore.getState().getShadowNode(stateKey, path);\r\n const typeInfo = shadowNode?._meta?.typeInfo;\r\n\r\n const globalStateValue = getShadowValue(stateKey, path);\r\n const [localValue, setLocalValue] = useState<any>(globalStateValue);\r\n const isCurrentlyDebouncing = useRef(false);\r\n const debounceTimeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n useEffect(() => {\r\n if (\r\n !isCurrentlyDebouncing.current &&\r\n !isDeepEqual(globalStateValue, localValue)\r\n ) {\r\n setLocalValue(globalStateValue);\r\n }\r\n }, [globalStateValue]);\r\n\r\n useEffect(() => {\r\n const { getShadowMetadata, setShadowMetadata } = getGlobalStore.getState();\r\n console.log('FormElementWrapper effect running for:', stateKey, path);\r\n\r\n // Initialize clientActivityState if needed\r\n const currentMeta = getShadowMetadata(stateKey, path) || {};\r\n if (!currentMeta.clientActivityState) {\r\n currentMeta.clientActivityState = { elements: new Map() };\r\n }\r\n\r\n // Detect element type from the ref\r\n const detectElementType = () => {\r\n const el = formElementRef.current;\r\n if (!el) return 'input';\r\n const tagName = el.tagName.toLowerCase();\r\n if (tagName === 'textarea') return 'textarea';\r\n if (tagName === 'select') return 'select';\r\n if (tagName === 'input') {\r\n const type = (el as HTMLInputElement).type;\r\n if (type === 'checkbox') return 'checkbox';\r\n if (type === 'radio') return 'radio';\r\n if (type === 'range') return 'range';\r\n if (type === 'file') return 'file';\r\n }\r\n return 'input';\r\n };\r\n\r\n // Add this element to the Map\r\n currentMeta.clientActivityState.elements.set(componentId, {\r\n domRef: formElementRef,\r\n elementType: detectElementType(),\r\n inputType: formElementRef.current?.type,\r\n mountedAt: Date.now(),\r\n });\r\n console.log('currentMeta', currentMeta);\r\n setShadowMetadata(stateKey, path, currentMeta);\r\n\r\n // Subscribe to path updates\r\n const unsubscribe = getGlobalStore\r\n .getState()\r\n .subscribeToPath(stateKeyPathKey, (newValue) => {\r\n if (!isCurrentlyDebouncing.current && localValue !== newValue) {\r\n forceUpdate({});\r\n }\r\n });\r\n\r\n // Cleanup\r\n return () => {\r\n unsubscribe();\r\n\r\n if (debounceTimeoutRef.current) {\r\n clearTimeout(debounceTimeoutRef.current);\r\n isCurrentlyDebouncing.current = false;\r\n }\r\n\r\n // Remove element from Map\r\n const meta = getGlobalStore.getState().getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements) {\r\n meta.clientActivityState.elements.delete(componentId);\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n };\r\n }, []);\r\n\r\n const debouncedUpdate = useCallback(\r\n (newValue: any) => {\r\n const liveTypeInfo =\r\n getGlobalStore.getState().getShadowNode(stateKey, path)?._meta\r\n ?.typeInfo ?? typeInfo;\r\n\r\n // Type conversion logic (keep existing)\r\n if (liveTypeInfo) {\r\n if (liveTypeInfo.type === 'number' && typeof newValue === 'string') {\r\n newValue =\r\n newValue === ''\r\n ? liveTypeInfo.nullable\r\n ? null\r\n : (liveTypeInfo.default ?? 0)\r\n : Number(newValue);\r\n } else if (\r\n liveTypeInfo.type === 'boolean' &&\r\n typeof newValue === 'string'\r\n ) {\r\n newValue = newValue === 'true' || newValue === '1';\r\n } else if (\r\n liveTypeInfo.type === 'date' &&\r\n typeof newValue === 'string'\r\n ) {\r\n newValue = new Date(newValue);\r\n }\r\n } else {\r\n const currentType = typeof globalStateValue;\r\n if (currentType === 'number' && typeof newValue === 'string') {\r\n newValue = newValue === '' ? 0 : Number(newValue);\r\n }\r\n }\r\n\r\n setLocalValue(newValue);\r\n\r\n // Update input activity details\r\n const { getShadowMetadata, setShadowMetadata } =\r\n getGlobalStore.getState();\r\n const meta = getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements?.has(componentId)) {\r\n const element = meta.clientActivityState.elements.get(componentId);\r\n if (element && element.currentActivity?.type === 'focus') {\r\n element!.currentActivity.details = {\r\n ...element!.currentActivity.details,\r\n value: newValue,\r\n previousValue:\r\n element!.currentActivity.details?.value || globalStateValue,\r\n inputLength:\r\n typeof newValue === 'string' ? newValue.length : undefined,\r\n keystrokeCount:\r\n (element!.currentActivity.details?.keystrokeCount || 0) + 1,\r\n };\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n }\r\n const element = meta?.clientActivityState?.elements?.get(componentId);\r\n\r\n // Notify plugins\r\n notifyFormUpdate({\r\n stateKey,\r\n activityType: 'input', // Changed from 'type'\r\n path,\r\n timestamp: Date.now(),\r\n details: {\r\n value: newValue,\r\n inputLength:\r\n typeof newValue === 'string' ? newValue.length : undefined,\r\n isComposing: false, // You'd need to track this from the actual input event\r\n isPasting: false, // You'd need to track this from paste events\r\n keystrokeCount:\r\n (element?.currentActivity?.details?.keystrokeCount || 0) + 1,\r\n },\r\n });\r\n // Validation (keep existing)\r\n const virtualOperation: UpdateTypeDetail = {\r\n stateKey,\r\n path,\r\n newValue: newValue,\r\n updateType: 'update',\r\n timeStamp: Date.now(),\r\n status: 'new',\r\n oldValue: globalStateValue,\r\n };\r\n runValidation(virtualOperation, 'onChange');\r\n\r\n // Debounce state update (keep existing)\r\n isCurrentlyDebouncing.current = true;\r\n if (debounceTimeoutRef.current) {\r\n clearTimeout(debounceTimeoutRef.current);\r\n }\r\n\r\n const debounceTime = formOpts?.debounceTime ?? 200;\r\n debounceTimeoutRef.current = setTimeout(() => {\r\n isCurrentlyDebouncing.current = false;\r\n setState(newValue, path, {\r\n updateType: 'update',\r\n validationTrigger: 'onChange',\r\n });\r\n }, debounceTime);\r\n },\r\n [\r\n setState,\r\n path,\r\n formOpts?.debounceTime,\r\n typeInfo,\r\n globalStateValue,\r\n stateKey,\r\n componentId,\r\n ]\r\n );\r\n\r\n const handleFocus = useCallback(() => {\r\n const { getShadowMetadata, setShadowMetadata } = getGlobalStore.getState();\r\n\r\n // Update element's current activity\r\n const meta = getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements?.has(componentId)) {\r\n const element = meta.clientActivityState.elements.get(componentId)!;\r\n element.currentActivity = {\r\n type: 'focus',\r\n startTime: Date.now(),\r\n details: {\r\n value: localValue,\r\n inputLength:\r\n typeof localValue === 'string' ? localValue.length : undefined,\r\n },\r\n };\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n\r\n // Notify plugins\r\n notifyFormUpdate({\r\n stateKey,\r\n activityType: 'focus', // Changed from 'type'\r\n path,\r\n timestamp: Date.now(),\r\n details: {\r\n cursorPosition: formElementRef.current?.selectionStart,\r\n },\r\n });\r\n }, [stateKey, path, componentId, localValue]);\r\n const handleBlur = useCallback(() => {\r\n const { getShadowMetadata, setShadowMetadata } = getGlobalStore.getState();\r\n\r\n // Clear debounce if active\r\n if (debounceTimeoutRef.current) {\r\n clearTimeout(debounceTimeoutRef.current);\r\n debounceTimeoutRef.current = null;\r\n isCurrentlyDebouncing.current = false;\r\n setState(localValue, path, { updateType: 'update' });\r\n }\r\n\r\n // Clear element's current activity\r\n const meta = getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements?.has(componentId)) {\r\n const element = meta.clientActivityState.elements.get(componentId)!;\r\n element.currentActivity = undefined;\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n const focusStartTime =\r\n meta?.clientActivityState?.elements?.get(componentId)?.currentActivity\r\n ?.startTime;\r\n\r\n const validationOptions = getInitialOptions(stateKey)?.validation;\r\n if (validationOptions?.onBlur) {\r\n runValidation(\r\n {\r\n stateKey,\r\n path,\r\n newValue: localValue,\r\n updateType: 'update',\r\n timeStamp: Date.now(),\r\n status: 'new',\r\n oldValue: globalStateValue,\r\n },\r\n 'onBlur'\r\n );\r\n }\r\n\r\n // Refine / plugin validation runs after field validation so it wins on conflict\r\n notifyFormUpdate({\r\n stateKey,\r\n activityType: 'blur',\r\n path,\r\n timestamp: Date.now(),\r\n duration: focusStartTime ? Date.now() - focusStartTime : undefined,\r\n details: {\r\n duration: focusStartTime ? Date.now() - focusStartTime : 0,\r\n },\r\n });\r\n }, [localValue, setState, path, stateKey, componentId, globalStateValue]);\r\n\r\n const baseState = rebuildStateShape({\n path: path,\n componentId: componentId,\n meta: undefined,\n });\n const validationState = getShadowMetadata(stateKey, path)?.validation;\n const validationStatus = validationState?.status || 'NOT_VALIDATED';\n const allErrors = (validationState?.errors || []).map((err) => ({\n ...err,\n path,\n })) as ValidationError[];\n const errorMessages = allErrors\n .filter((err) => err.severity === 'error')\n .map((err) => err.message);\n const warningMessages = allErrors\n .filter((err) => err.severity === 'warning')\n .map((err) => err.message);\n const validationMessage = errorMessages[0] || warningMessages[0] || '';\n const validationSeverity: ValidationSeverity =\n errorMessages.length > 0\n ? 'error'\n : warningMessages.length > 0\n ? 'warning'\n : undefined;\n\n const stateWithInputProps = new Proxy(baseState, {\n get(target, prop) {\n if (prop === '$inputProps') {\n return {\n value: localValue ?? '',\r\n onChange: (e: any) => {\r\n debouncedUpdate(e.target.value);\r\n },\r\n onFocus: handleFocus,\r\n onBlur: handleBlur,\r\n ref: formElementRef,\n };\n }\n if (prop === 'status') return validationStatus;\n if (prop === 'severity') return validationSeverity;\n if (prop === 'hasErrors') return errorMessages.length > 0;\n if (prop === 'hasWarnings') return warningMessages.length > 0;\n if (prop === 'allErrors') return allErrors;\n if (prop === 'message') return validationMessage;\n if (prop === 'getData') return () => getShadowValue(stateKey, path);\n\n return target[prop];\n },\n });\n\r\n const initialElement = renderFn(stateWithInputProps);\r\n\r\n return (\r\n <ValidationWrapper formOpts={formOpts} path={path} stateKey={stateKey}>\r\n {initialElement}\r\n </ValidationWrapper>\r\n );\r\n}\r\n\r\nexport function useRegisterComponent(\r\n stateKey: string,\r\n componentId: string,\r\n forceUpdate: (o: object) => void\r\n) {\r\n const fullComponentId = `${stateKey}////${componentId}`;\r\n\r\n useLayoutEffect(() => {\r\n registerComponent(stateKey, fullComponentId, {\r\n forceUpdate: () => forceUpdate({}),\r\n paths: new Set(),\r\n reactiveType: ['component'],\r\n });\r\n return () => {\r\n unregisterComponent(stateKey, fullComponentId);\r\n };\r\n }, [stateKey, fullComponentId]);\r\n}\r\n\r\nexport function IsolatedComponentWrapper({\r\n stateKey,\r\n path, // The path of the parent node (e.g. ['form'])\r\n dependencies, // NEW: Optional array of Proxy objects or path arrays\r\n rebuildStateShape,\r\n renderFn,\r\n}: {\r\n stateKey: string;\r\n path: string[];\r\n dependencies?: any[]; // The explicit list of dependencies\r\n rebuildStateShape: (options: any) => any;\r\n renderFn: (state: any) => React.ReactNode;\r\n}) {\r\n const [componentId] = useState(() => uuidv4());\r\n const [, forceUpdate] = useState({});\r\n\r\n useRegisterComponent(stateKey, componentId, forceUpdate);\r\n\r\n const pathsToSubscribe = useMemo(() => {\r\n if (dependencies && dependencies.length > 0) {\r\n return dependencies.map((dep) => {\r\n return [stateKey, ...dep.$_path].join('.');\r\n });\r\n }\r\n\r\n return [[stateKey, ...path].join('.')];\r\n }, [stateKey, path, dependencies]);\r\n\r\n // 2. Subscribe to ALL calculated paths\r\n useEffect(() => {\r\n const store = getGlobalStore.getState();\r\n\r\n // Create an array of unsubscribe functions\r\n const unsubs = pathsToSubscribe.map((fullPathKey) => {\r\n return store.subscribeToPath(fullPathKey, () => {\r\n forceUpdate({});\r\n });\r\n });\r\n\r\n return () => {\r\n unsubs.forEach((unsub) => unsub());\r\n };\r\n }, [pathsToSubscribe]);\r\n\r\n const baseState = rebuildStateShape({\r\n path: path,\r\n componentId: componentId,\r\n meta: undefined,\r\n });\r\n\r\n return <>{renderFn(baseState)}</>;\r\n}\r\n// 1. Define the MINIMAL props needed.\r\ntype PluginWrapperProps = {\r\n children: ReactNode;\r\n stateKey: string;\r\n path: string[];\r\n pluginName: string;\r\n wrapperDepth: number;\r\n};\r\n\r\nconst PluginWrapper = memo(function PluginWrapper({\r\n children,\r\n stateKey,\r\n path,\r\n pluginName,\r\n wrapperDepth,\r\n}: PluginWrapperProps) {\r\n const [, forceUpdate] = useState({});\r\n\r\n useEffect(() => {\r\n const fullPathKey = [stateKey, ...path].join('.');\r\n const unsubscribe = getGlobalStore\r\n .getState()\r\n .subscribeToPath(fullPathKey, () => {\r\n forceUpdate({});\r\n });\r\n return unsubscribe;\r\n }, [stateKey, path]);\r\n\r\n const plugin = pluginStore\r\n .getState()\r\n .registeredPlugins.find((p) => p.name === pluginName);\r\n\r\n const stateHandler: StateObject<any> | undefined = pluginStore\r\n .getState()\r\n .stateHandlers.get(stateKey);\r\n\r\n const typeInfo = getGlobalStore.getState().getShadowNode(stateKey, path)\r\n ?._meta?.typeInfo;\r\n\r\n const options = pluginStore\r\n .getState()\r\n .pluginOptions.get(stateKey)\r\n ?.get(pluginName);\r\n\r\n const hookData = pluginStore.getState().getHookResult(stateKey, pluginName);\r\n\r\n if (!plugin?.formWrapper || !stateHandler) {\r\n return <>{children}</>;\r\n }\r\n\r\n const deconstructed = toDeconstructedMethods(stateHandler);\r\n const scopedMetadataContext = createScopedMetadataContext(\r\n stateKey,\r\n plugin.name,\r\n path\r\n );\r\n return plugin.formWrapper({\r\n element: children,\r\n path,\r\n stateKey,\r\n pluginName: plugin.name,\r\n ...deconstructed,\r\n\r\n ...scopedMetadataContext,\r\n options,\r\n hookData,\r\n fieldType: typeInfo?.type,\r\n wrapperDepth,\r\n });\r\n});\r\n"],"names":["getInitialOptions","getShadowMetadata","setShadowMetadata","getShadowValue","registerComponent","unregisterComponent","notifyPathSubscribers","subscribeToPath","getGlobalStore","stateHandlers","notifyFormUpdate","pluginStore","ValidationWrapper","formOpts","path","stateKey","children","thisStateOpts","validationState","status","errors","err","errorMessages","warningMessages","message","primarySeverity","registeredPlugins","pluginsApi","plugin","pluginName","hookData","scopedMetadata","createScopedMetadataContext","jsx","Fragment","React","MemoizedCogsItemWrapper","memo","ListItemWrapper","prevProps","nextProps","itemComponentId","itemPath","localIndex","arraySetter","rebuildStateShape","renderFn","forceUpdate","useState","inViewRef","inView","useInView","elementRef","useRef","fullKey","useRegisterComponent","setRefs","useCallback","element","useEffect","unsubscribe","e","itemValue","itemSetter","node","existingRef","FormElementWrapper","setState","componentId","uuidv4","formElementRef","stateKeyPathKey","typeInfo","globalStateValue","localValue","setLocalValue","isCurrentlyDebouncing","debounceTimeoutRef","isDeepEqual","currentMeta","detectElementType","el","tagName","type","newValue","meta","debouncedUpdate","liveTypeInfo","runValidation","debounceTime","handleFocus","handleBlur","focusStartTime","baseState","validationStatus","allErrors","validationMessage","validationSeverity","stateWithInputProps","target","prop","initialElement","fullComponentId","useLayoutEffect","IsolatedComponentWrapper","dependencies","pathsToSubscribe","useMemo","dep","store","unsubs","fullPathKey","unsub","wrapperDepth","p","stateHandler","options","deconstructed","toDeconstructedMethods","scopedMetadataContext"],"mappings":"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"}
1
+ {"version":3,"file":"Components.js","sources":["../src/Components.tsx"],"sourcesContent":["import {\r\n FormElementParams,\r\n StateObject,\r\n UpdateTypeDetail,\r\n type FormOptsType,\r\n} from './CogsState';\r\nimport { pluginStore } from './pluginStore';\r\nimport {\r\n createMetadataContext,\r\n createScopedMetadataContext,\r\n PluginsApi,\r\n toDeconstructedMethods,\r\n} from './plugins';\r\nimport React, {\r\n memo,\r\n RefObject,\r\n useCallback,\r\n useEffect,\r\n useLayoutEffect,\r\n useRef,\r\n useState,\r\n useMemo,\r\n type ReactNode,\r\n} from 'react';\r\nimport { getGlobalStore, ValidationError, ValidationSeverity } from './store';\r\nimport { useInView } from 'react-intersection-observer';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { isDeepEqual } from './utility';\r\nimport { runValidation } from './validation';\r\n\r\nconst {\r\n getInitialOptions,\r\n\r\n getShadowMetadata,\r\n setShadowMetadata,\r\n getShadowValue,\r\n\r\n registerComponent,\r\n unregisterComponent,\r\n\r\n notifyPathSubscribers,\r\n subscribeToPath,\r\n} = getGlobalStore.getState();\r\nconst { stateHandlers, notifyFormUpdate } = pluginStore.getState();\r\n\r\nexport type ValidationWrapperProps = {\r\n formOpts?: FormOptsType;\r\n path: string[];\r\n stateKey: string;\r\n children: ReactNode;\r\n};\r\n\r\nexport function ValidationWrapper({\r\n formOpts,\r\n path,\r\n stateKey,\r\n children,\r\n}: ValidationWrapperProps) {\r\n const { getInitialOptions, getShadowMetadata, getShadowValue } =\r\n getGlobalStore.getState();\r\n const thisStateOpts = getInitialOptions(stateKey!);\r\n\r\n const shadowMeta = getShadowMetadata(stateKey!, path);\r\n const validationState = shadowMeta?.validation;\r\n\r\n const status = validationState?.status || 'NOT_VALIDATED';\r\n\r\n const errors = (validationState?.errors || []).map((err) => ({\r\n ...err,\r\n path: path,\r\n })) as ValidationError[];\r\n const errorMessages = errors\r\n .filter((err) => err.severity === 'error')\r\n .map((err) => err.message);\r\n const warningMessages = errors\r\n .filter((err) => err.severity === 'warning')\r\n .map((err) => err.message);\r\n\r\n // Use first error, or first warning if no errors\r\n const message = errorMessages[0] || warningMessages[0];\r\n const primarySeverity: ValidationSeverity =\r\n errorMessages.length > 0\r\n ? 'error'\r\n : warningMessages.length > 0\r\n ? 'warning'\r\n : undefined;\r\n const { registeredPlugins } = pluginStore.getState();\r\n const pluginsApi: PluginsApi = {};\r\n\r\n // We iterate over ALL registered plugins in the app.\r\n registeredPlugins.forEach((plugin) => {\r\n if (thisStateOpts && thisStateOpts.hasOwnProperty(plugin.name)) {\r\n const pluginName = plugin.name;\r\n\r\n const hookData = pluginStore\r\n .getState()\r\n .getHookResult(stateKey!, pluginName);\r\n\r\n const scopedMetadata = createScopedMetadataContext(\r\n stateKey!,\r\n pluginName,\r\n path\r\n );\r\n\r\n pluginsApi[pluginName] = {\r\n hookData,\r\n getFieldMetaData: scopedMetadata.getFieldMetaData,\r\n setFieldMetaData: scopedMetadata.setFieldMetaData,\r\n removeFieldMetaData: scopedMetadata.removeFieldMetaData,\r\n };\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n {thisStateOpts?.formElements?.validation &&\r\n !formOpts?.validation?.disable ? (\r\n thisStateOpts.formElements!.validation!({\r\n children: (\r\n <React.Fragment key={path.toString()}>{children}</React.Fragment>\r\n ),\r\n status, // Now passes the new ValidationStatus type\r\n message: formOpts?.validation?.hideMessage\r\n ? ''\r\n : formOpts?.validation?.message || message || '',\r\n severity: primarySeverity,\r\n hasErrors: errorMessages.length > 0,\r\n hasWarnings: warningMessages.length > 0,\r\n allErrors: errors,\r\n path: path,\r\n getData: () => getShadowValue(stateKey!, path),\r\n plugins: pluginsApi,\r\n })\r\n ) : (\r\n <React.Fragment key={path.toString()}>{children}</React.Fragment>\r\n )}\r\n </>\r\n );\r\n}\r\nexport const MemoizedCogsItemWrapper = memo(\r\n ListItemWrapper,\r\n (prevProps, nextProps) => {\r\n // Re-render if any of these change:\r\n return (\r\n prevProps.itemPath.join('.') === nextProps.itemPath.join('.') &&\r\n prevProps.stateKey === nextProps.stateKey &&\r\n prevProps.itemComponentId === nextProps.itemComponentId &&\r\n prevProps.localIndex === nextProps.localIndex\r\n );\r\n }\r\n);\r\n\r\nexport function ListItemWrapper({\r\n stateKey,\r\n itemComponentId,\r\n itemPath,\r\n localIndex,\r\n arraySetter,\r\n rebuildStateShape,\r\n renderFn,\r\n}: {\r\n stateKey: string;\r\n itemComponentId: string;\r\n itemPath: string[];\r\n localIndex: number;\r\n arraySetter: any;\r\n rebuildStateShape: any;\r\n renderFn: any;\r\n}) {\r\n const [, forceUpdate] = useState({});\r\n const { ref: inViewRef, inView } = useInView();\r\n const elementRef = useRef<HTMLElement | null>(null); // Changed to HTMLElement to be generic\r\n\r\n const fullKey = [stateKey, ...itemPath].join('.');\r\n\r\n useRegisterComponent(stateKey, itemComponentId, forceUpdate);\r\n\r\n const setRefs = useCallback(\r\n (element: HTMLElement | null) => {\r\n elementRef.current = element;\r\n inViewRef(element);\r\n },\r\n [inViewRef]\r\n );\r\n\r\n useEffect(() => {\r\n const unsubscribe = subscribeToPath(fullKey, (e) => {\r\n forceUpdate({});\r\n });\r\n return () => unsubscribe();\r\n }, [fullKey]);\r\n\r\n const itemValue = getShadowValue(stateKey, itemPath);\r\n if (itemValue === undefined) return null;\r\n\r\n const itemSetter = rebuildStateShape({\r\n currentState: itemValue,\r\n path: itemPath,\r\n componentId: itemComponentId,\r\n });\r\n\r\n // 1. Render the user's content (e.g. the <tr>)\r\n const children = renderFn(itemSetter, localIndex, arraySetter);\r\n\r\n // 2. AUTO-DETECT: If it is a single valid element (<tr>, <div>, <li>), inject the ref.\r\n if (React.isValidElement(children)) {\r\n // We clone the element and force our ref onto it\r\n return React.cloneElement(children as React.ReactElement<any>, {\r\n ref: (node: any) => {\r\n // Apply our virtualization ref\r\n setRefs(node);\r\n\r\n // Preserve any ref the user might have put on the element themselves\r\n const { ref: existingRef } = children as any;\r\n if (typeof existingRef === 'function') {\r\n existingRef(node);\r\n } else if (existingRef && 'current' in existingRef) {\r\n (existingRef as any).current = node;\r\n }\r\n },\r\n });\r\n }\r\n\r\n // 3. Fallback: If they returned a Fragment or string, we MUST wrap it to measure it.\r\n // (Note: This specific fallback will still break inside a <tbody>, but\r\n // as long as you return a <tr> above, line 90 catches it).\r\n return <div ref={setRefs}>{children}</div>;\r\n}\r\n\r\nexport function FormElementWrapper({\r\n stateKey,\r\n path,\r\n rebuildStateShape,\r\n renderFn,\r\n formOpts,\r\n setState,\r\n}: {\r\n stateKey: string;\r\n path: string[];\r\n rebuildStateShape: (options: {\r\n path: string[];\r\n componentId: string;\r\n meta?: any;\r\n }) => any;\r\n renderFn: (params: FormElementParams<any>) => ReactNode;\r\n formOpts?: FormOptsType;\r\n setState: any;\r\n}) {\r\n const componentId = useRef(uuidv4()).current;\r\n\r\n const [, forceUpdate] = useState({});\r\n const formElementRef = useRef<any>(null);\r\n const stateKeyPathKey = [stateKey, ...path].join('.');\r\n useRegisterComponent(stateKey, componentId, forceUpdate);\r\n // Get the shadow node to access typeInfo and schema\r\n const shadowNode = getGlobalStore.getState().getShadowNode(stateKey, path);\r\n const typeInfo = shadowNode?._meta?.typeInfo;\r\n\r\n const globalStateValue = getShadowValue(stateKey, path);\r\n const [localValue, setLocalValue] = useState<any>(globalStateValue);\r\n const isCurrentlyDebouncing = useRef(false);\r\n const debounceTimeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n useEffect(() => {\r\n if (\r\n !isCurrentlyDebouncing.current &&\r\n !isDeepEqual(globalStateValue, localValue)\r\n ) {\r\n setLocalValue(globalStateValue);\r\n }\r\n }, [globalStateValue]);\r\n\r\n useEffect(() => {\r\n const { getShadowMetadata, setShadowMetadata } = getGlobalStore.getState();\r\n\r\n // Initialize clientActivityState if needed\r\n const currentMeta = getShadowMetadata(stateKey, path) || {};\r\n if (!currentMeta.clientActivityState) {\r\n currentMeta.clientActivityState = { elements: new Map() };\r\n }\r\n\r\n // Detect element type from the ref\r\n const detectElementType = () => {\r\n const el = formElementRef.current;\r\n if (!el) return 'input';\r\n const tagName = el.tagName.toLowerCase();\r\n if (tagName === 'textarea') return 'textarea';\r\n if (tagName === 'select') return 'select';\r\n if (tagName === 'input') {\r\n const type = (el as HTMLInputElement).type;\r\n if (type === 'checkbox') return 'checkbox';\r\n if (type === 'radio') return 'radio';\r\n if (type === 'range') return 'range';\r\n if (type === 'file') return 'file';\r\n }\r\n return 'input';\r\n };\r\n\r\n // Add this element to the Map\r\n currentMeta.clientActivityState.elements.set(componentId, {\r\n domRef: formElementRef,\r\n elementType: detectElementType(),\r\n inputType: formElementRef.current?.type,\r\n mountedAt: Date.now(),\r\n });\r\n\r\n setShadowMetadata(stateKey, path, currentMeta);\r\n\r\n // Subscribe to path updates\r\n const unsubscribe = getGlobalStore\r\n .getState()\r\n .subscribeToPath(stateKeyPathKey, (newValue) => {\r\n if (!isCurrentlyDebouncing.current && localValue !== newValue) {\r\n forceUpdate({});\r\n }\r\n });\r\n\r\n // Cleanup\r\n return () => {\r\n unsubscribe();\r\n\r\n if (debounceTimeoutRef.current) {\r\n clearTimeout(debounceTimeoutRef.current);\r\n isCurrentlyDebouncing.current = false;\r\n }\r\n\r\n // Remove element from Map\r\n const meta = getGlobalStore.getState().getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements) {\r\n meta.clientActivityState.elements.delete(componentId);\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n };\r\n }, []);\r\n\r\n const debouncedUpdate = useCallback(\r\n (newValue: any) => {\r\n const liveTypeInfo =\r\n getGlobalStore.getState().getShadowNode(stateKey, path)?._meta\r\n ?.typeInfo ?? typeInfo;\r\n\r\n // Type conversion logic (keep existing)\r\n if (liveTypeInfo) {\r\n if (liveTypeInfo.type === 'number' && typeof newValue === 'string') {\r\n newValue =\r\n newValue === ''\r\n ? liveTypeInfo.nullable\r\n ? null\r\n : (liveTypeInfo.default ?? 0)\r\n : Number(newValue);\r\n } else if (\r\n liveTypeInfo.type === 'boolean' &&\r\n typeof newValue === 'string'\r\n ) {\r\n newValue = newValue === 'true' || newValue === '1';\r\n } else if (\r\n liveTypeInfo.type === 'date' &&\r\n typeof newValue === 'string'\r\n ) {\r\n newValue = new Date(newValue);\r\n }\r\n } else {\r\n const currentType = typeof globalStateValue;\r\n if (currentType === 'number' && typeof newValue === 'string') {\r\n newValue = newValue === '' ? 0 : Number(newValue);\r\n }\r\n }\r\n\r\n setLocalValue(newValue);\r\n\r\n // Update input activity details\r\n const { getShadowMetadata, setShadowMetadata } =\r\n getGlobalStore.getState();\r\n const meta = getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements?.has(componentId)) {\r\n const element = meta.clientActivityState.elements.get(componentId);\r\n if (element && element.currentActivity?.type === 'focus') {\r\n element!.currentActivity.details = {\r\n ...element!.currentActivity.details,\r\n value: newValue,\r\n previousValue:\r\n element!.currentActivity.details?.value || globalStateValue,\r\n inputLength:\r\n typeof newValue === 'string' ? newValue.length : undefined,\r\n keystrokeCount:\r\n (element!.currentActivity.details?.keystrokeCount || 0) + 1,\r\n };\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n }\r\n const element = meta?.clientActivityState?.elements?.get(componentId);\r\n\r\n // Notify plugins\r\n notifyFormUpdate({\r\n stateKey,\r\n activityType: 'input', // Changed from 'type'\r\n path,\r\n timestamp: Date.now(),\r\n details: {\r\n value: newValue,\r\n inputLength:\r\n typeof newValue === 'string' ? newValue.length : undefined,\r\n isComposing: false, // You'd need to track this from the actual input event\r\n isPasting: false, // You'd need to track this from paste events\r\n keystrokeCount:\r\n (element?.currentActivity?.details?.keystrokeCount || 0) + 1,\r\n },\r\n });\r\n // Validation (keep existing)\r\n const virtualOperation: UpdateTypeDetail = {\r\n stateKey,\r\n path,\r\n newValue: newValue,\r\n updateType: 'update',\r\n timeStamp: Date.now(),\r\n status: 'new',\r\n oldValue: globalStateValue,\r\n };\r\n runValidation(virtualOperation, 'onChange');\r\n\r\n // Debounce state update (keep existing)\r\n isCurrentlyDebouncing.current = true;\r\n if (debounceTimeoutRef.current) {\r\n clearTimeout(debounceTimeoutRef.current);\r\n }\r\n\r\n const debounceTime = formOpts?.debounceTime ?? 200;\r\n debounceTimeoutRef.current = setTimeout(() => {\r\n isCurrentlyDebouncing.current = false;\r\n setState(newValue, path, {\r\n updateType: 'update',\r\n validationTrigger: 'onChange',\r\n });\r\n }, debounceTime);\r\n },\r\n [\r\n setState,\r\n path,\r\n formOpts?.debounceTime,\r\n typeInfo,\r\n globalStateValue,\r\n stateKey,\r\n componentId,\r\n ]\r\n );\r\n\r\n const handleFocus = useCallback(() => {\r\n const { getShadowMetadata, setShadowMetadata } = getGlobalStore.getState();\r\n\r\n // Update element's current activity\r\n const meta = getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements?.has(componentId)) {\r\n const element = meta.clientActivityState.elements.get(componentId)!;\r\n element.currentActivity = {\r\n type: 'focus',\r\n startTime: Date.now(),\r\n details: {\r\n value: localValue,\r\n inputLength:\r\n typeof localValue === 'string' ? localValue.length : undefined,\r\n },\r\n };\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n\r\n // Notify plugins\r\n notifyFormUpdate({\r\n stateKey,\r\n activityType: 'focus', // Changed from 'type'\r\n path,\r\n timestamp: Date.now(),\r\n details: {\r\n cursorPosition: formElementRef.current?.selectionStart,\r\n },\r\n });\r\n }, [stateKey, path, componentId, localValue]);\r\n const handleBlur = useCallback(() => {\r\n const { getShadowMetadata, setShadowMetadata } = getGlobalStore.getState();\r\n\r\n // Clear debounce if active\r\n if (debounceTimeoutRef.current) {\r\n clearTimeout(debounceTimeoutRef.current);\r\n debounceTimeoutRef.current = null;\r\n isCurrentlyDebouncing.current = false;\r\n setState(localValue, path, { updateType: 'update' });\r\n }\r\n\r\n // Clear element's current activity\r\n const meta = getShadowMetadata(stateKey, path);\r\n if (meta?.clientActivityState?.elements?.has(componentId)) {\r\n const element = meta.clientActivityState.elements.get(componentId)!;\r\n element.currentActivity = undefined;\r\n setShadowMetadata(stateKey, path, meta);\r\n }\r\n const focusStartTime =\r\n meta?.clientActivityState?.elements?.get(componentId)?.currentActivity\r\n ?.startTime;\r\n\r\n const validationOptions = getInitialOptions(stateKey)?.validation;\r\n if (validationOptions?.onBlur) {\r\n runValidation(\r\n {\r\n stateKey,\r\n path,\r\n newValue: localValue,\r\n updateType: 'update',\r\n timeStamp: Date.now(),\r\n status: 'new',\r\n oldValue: globalStateValue,\r\n },\r\n 'onBlur'\r\n );\r\n }\r\n\r\n // Refine / plugin validation runs after field validation so it wins on conflict\r\n notifyFormUpdate({\r\n stateKey,\r\n activityType: 'blur',\r\n path,\r\n timestamp: Date.now(),\r\n duration: focusStartTime ? Date.now() - focusStartTime : undefined,\r\n details: {\r\n duration: focusStartTime ? Date.now() - focusStartTime : 0,\r\n },\r\n });\r\n }, [localValue, setState, path, stateKey, componentId, globalStateValue]);\r\n\r\n const baseState = rebuildStateShape({\r\n path: path,\r\n componentId: componentId,\r\n meta: undefined,\r\n });\r\n const validationState = getShadowMetadata(stateKey, path)?.validation;\r\n const validationStatus = validationState?.status || 'NOT_VALIDATED';\r\n const allErrors = (validationState?.errors || []).map((err) => ({\r\n ...err,\r\n path,\r\n })) as ValidationError[];\r\n const errorMessages = allErrors\r\n .filter((err) => err.severity === 'error')\r\n .map((err) => err.message);\r\n const warningMessages = allErrors\r\n .filter((err) => err.severity === 'warning')\r\n .map((err) => err.message);\r\n const validationMessage = errorMessages[0] || warningMessages[0] || '';\r\n const validationSeverity: ValidationSeverity =\r\n errorMessages.length > 0\r\n ? 'error'\r\n : warningMessages.length > 0\r\n ? 'warning'\r\n : undefined;\r\n\r\n const stateWithInputProps = new Proxy(baseState, {\r\n get(target, prop) {\r\n if (prop === '$inputProps') {\r\n return {\r\n value: localValue ?? '',\r\n onChange: (e: any) => {\r\n debouncedUpdate(e.target.value);\r\n },\r\n onFocus: handleFocus,\r\n onBlur: handleBlur,\r\n ref: formElementRef,\r\n };\r\n }\r\n if (prop === 'status') return validationStatus;\r\n if (prop === 'severity') return validationSeverity;\r\n if (prop === 'hasErrors') return errorMessages.length > 0;\r\n if (prop === 'hasWarnings') return warningMessages.length > 0;\r\n if (prop === 'allErrors') return allErrors;\r\n if (prop === 'message') return validationMessage;\r\n if (prop === 'getData') return () => getShadowValue(stateKey, path);\r\n\r\n return target[prop];\r\n },\r\n });\r\n\r\n const initialElement = renderFn(stateWithInputProps);\r\n\r\n return (\r\n <ValidationWrapper formOpts={formOpts} path={path} stateKey={stateKey}>\r\n {initialElement}\r\n </ValidationWrapper>\r\n );\r\n}\r\n\r\nexport function useRegisterComponent(\r\n stateKey: string,\r\n componentId: string,\r\n forceUpdate: (o: object) => void\r\n) {\r\n const fullComponentId = `${stateKey}////${componentId}`;\r\n\r\n useLayoutEffect(() => {\r\n registerComponent(stateKey, fullComponentId, {\r\n forceUpdate: () => forceUpdate({}),\r\n paths: new Set(),\r\n reactiveType: ['component'],\r\n });\r\n return () => {\r\n unregisterComponent(stateKey, fullComponentId);\r\n };\r\n }, [stateKey, fullComponentId]);\r\n}\r\n\r\nexport function IsolatedComponentWrapper({\r\n stateKey,\r\n path, // The path of the parent node (e.g. ['form'])\r\n dependencies, // NEW: Optional array of Proxy objects or path arrays\r\n rebuildStateShape,\r\n renderFn,\r\n}: {\r\n stateKey: string;\r\n path: string[];\r\n dependencies?: any[]; // The explicit list of dependencies\r\n rebuildStateShape: (options: any) => any;\r\n renderFn: (state: any) => React.ReactNode;\r\n}) {\r\n const [componentId] = useState(() => uuidv4());\r\n const [, forceUpdate] = useState({});\r\n\r\n useRegisterComponent(stateKey, componentId, forceUpdate);\r\n\r\n const pathsToSubscribe = useMemo(() => {\r\n if (dependencies && dependencies.length > 0) {\r\n return dependencies.map((dep) => {\r\n return [stateKey, ...dep.$_path].join('.');\r\n });\r\n }\r\n\r\n return [[stateKey, ...path].join('.')];\r\n }, [stateKey, path, dependencies]);\r\n\r\n // 2. Subscribe to ALL calculated paths\r\n useEffect(() => {\r\n const store = getGlobalStore.getState();\r\n\r\n // Create an array of unsubscribe functions\r\n const unsubs = pathsToSubscribe.map((fullPathKey) => {\r\n return store.subscribeToPath(fullPathKey, () => {\r\n forceUpdate({});\r\n });\r\n });\r\n\r\n return () => {\r\n unsubs.forEach((unsub) => unsub());\r\n };\r\n }, [pathsToSubscribe]);\r\n\r\n const baseState = rebuildStateShape({\r\n path: path,\r\n componentId: componentId,\r\n meta: undefined,\r\n });\r\n\r\n return <>{renderFn(baseState)}</>;\r\n}\r\n// 1. Define the MINIMAL props needed.\r\ntype PluginWrapperProps = {\r\n children: ReactNode;\r\n stateKey: string;\r\n path: string[];\r\n pluginName: string;\r\n wrapperDepth: number;\r\n};\r\n\r\nconst PluginWrapper = memo(function PluginWrapper({\r\n children,\r\n stateKey,\r\n path,\r\n pluginName,\r\n wrapperDepth,\r\n}: PluginWrapperProps) {\r\n const [, forceUpdate] = useState({});\r\n\r\n useEffect(() => {\r\n const fullPathKey = [stateKey, ...path].join('.');\r\n const unsubscribe = getGlobalStore\r\n .getState()\r\n .subscribeToPath(fullPathKey, () => {\r\n forceUpdate({});\r\n });\r\n return unsubscribe;\r\n }, [stateKey, path]);\r\n\r\n const plugin = pluginStore\r\n .getState()\r\n .registeredPlugins.find((p) => p.name === pluginName);\r\n\r\n const stateHandler: StateObject<any> | undefined = pluginStore\r\n .getState()\r\n .stateHandlers.get(stateKey);\r\n\r\n const typeInfo = getGlobalStore.getState().getShadowNode(stateKey, path)\r\n ?._meta?.typeInfo;\r\n\r\n const options = pluginStore\r\n .getState()\r\n .pluginOptions.get(stateKey)\r\n ?.get(pluginName);\r\n\r\n const hookData = pluginStore.getState().getHookResult(stateKey, pluginName);\r\n\r\n if (!plugin?.formWrapper || !stateHandler) {\r\n return <>{children}</>;\r\n }\r\n\r\n const deconstructed = toDeconstructedMethods(stateHandler);\r\n const scopedMetadataContext = createScopedMetadataContext(\r\n stateKey,\r\n plugin.name,\r\n path\r\n );\r\n return plugin.formWrapper({\r\n element: children,\r\n path,\r\n stateKey,\r\n pluginName: plugin.name,\r\n ...deconstructed,\r\n\r\n ...scopedMetadataContext,\r\n options,\r\n hookData,\r\n fieldType: typeInfo?.type,\r\n wrapperDepth,\r\n });\r\n});\r\n"],"names":["getInitialOptions","getShadowMetadata","setShadowMetadata","getShadowValue","registerComponent","unregisterComponent","notifyPathSubscribers","subscribeToPath","getGlobalStore","stateHandlers","notifyFormUpdate","pluginStore","ValidationWrapper","formOpts","path","stateKey","children","thisStateOpts","validationState","status","errors","err","errorMessages","warningMessages","message","primarySeverity","registeredPlugins","pluginsApi","plugin","pluginName","hookData","scopedMetadata","createScopedMetadataContext","jsx","Fragment","React","MemoizedCogsItemWrapper","memo","ListItemWrapper","prevProps","nextProps","itemComponentId","itemPath","localIndex","arraySetter","rebuildStateShape","renderFn","forceUpdate","useState","inViewRef","inView","useInView","elementRef","useRef","fullKey","useRegisterComponent","setRefs","useCallback","element","useEffect","unsubscribe","e","itemValue","itemSetter","node","existingRef","FormElementWrapper","setState","componentId","uuidv4","formElementRef","stateKeyPathKey","typeInfo","globalStateValue","localValue","setLocalValue","isCurrentlyDebouncing","debounceTimeoutRef","isDeepEqual","currentMeta","detectElementType","el","tagName","type","newValue","meta","debouncedUpdate","liveTypeInfo","runValidation","debounceTime","handleFocus","handleBlur","focusStartTime","baseState","validationStatus","allErrors","validationMessage","validationSeverity","stateWithInputProps","target","prop","initialElement","fullComponentId","useLayoutEffect","IsolatedComponentWrapper","dependencies","pathsToSubscribe","useMemo","dep","store","unsubs","fullPathKey","unsub","wrapperDepth","p","stateHandler","options","deconstructed","toDeconstructedMethods","scopedMetadataContext"],"mappings":"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"}
package/dist/plugins.d.ts CHANGED
@@ -35,8 +35,9 @@ export type ChainMethodDefinition<THandler extends ChainMethodHandler = ChainMet
35
35
  };
36
36
  export type ChainMethodDefinitions = Record<string, ChainMethodDefinition<any>>;
37
37
  type ChainMethodCallable<THandler> = THandler extends (ctx: any, ...args: infer TArgs) => infer TReturn ? (...args: TArgs) => TReturn : never;
38
+ type LiteralStringKeys<T> = string extends keyof T ? never : Extract<keyof T, string>;
38
39
  export type ChainMethodCallables<TMethods> = {
39
- [K in keyof TMethods as K extends string ? `$${K}` : never]: TMethods[K] extends ChainMethodDefinition<infer TFn> ? ChainMethodCallable<TFn> : never;
40
+ [K in LiteralStringKeys<TMethods> as K extends string ? `$${K}` : never]: TMethods[K] extends ChainMethodDefinition<infer TFn> ? ChainMethodCallable<TFn> : never;
40
41
  };
41
42
  export type KeyedTypes<TMap extends Record<string, any>> = {
42
43
  __key: 'keyed';