treege 3.0.0-beta.66 → 3.0.0-beta.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.
@@ -1,506 +0,0 @@
1
- import { A as e, C as t, E as n, F as r, I as i, L as a, P as o, S as s, T as c, a as l, b as u, c as d, d as f, f as p, i as m, j as h, l as g, o as _, s as v, u as y, w as b, x, y as S } from "./ThemeContext-7cghqUb0.js";
2
- import { Fragment as C, createContext as w, useCallback as T, useContext as E, useEffect as D, useMemo as O, useRef as k, useState as A } from "react";
3
- import { jsx as j } from "react/jsx-runtime";
4
- //#region src/renderer/context/TreegeRendererProvider.tsx
5
- var M = w(void 0), ee = () => E(M), N = ({ children: e, ...t }) => /* @__PURE__ */ j(M.Provider, {
6
- value: t,
7
- children: e
8
- }), P = async (e, n, r, i, a) => {
9
- if (!e.url || e.url.trim() === "") return {
10
- error: "No URL configured for submission",
11
- success: !1
12
- };
13
- let o = b(s(e.url, n, { encode: !0 }), a);
14
- if (!o || o.trim() === "") return {
15
- error: "Invalid URL after template replacement",
16
- success: !1
17
- };
18
- let c = await S({
19
- body: e.sendAllFormValues ? JSON.stringify(v(n, r)) : e.body ? s(e.body, n, { json: !0 }) : void 0,
20
- headers: u(t(i, n), t(e.headers, n)),
21
- method: e.method || "POST",
22
- queryParams: t(e.queryParams, n),
23
- url: o
24
- });
25
- if (!c.success) return {
26
- data: c.data,
27
- error: c.error,
28
- success: !1
29
- };
30
- let l = e.redirectUrl ? (() => {
31
- let t = x(e.redirectUrl, c.data);
32
- return t && t.trim() !== "" ? t : void 0;
33
- })() : void 0;
34
- return {
35
- data: c.data,
36
- redirectUrl: l,
37
- success: !0
38
- };
39
- }, F = (e) => {
40
- e && (e.startsWith("http://") || e.startsWith("https://") ? window.location.href = e : window.history?.pushState ? (window.history.pushState({}, "", e), window.dispatchEvent(new PopStateEvent("popstate"))) : window.location.href = e);
41
- }, te = (e, t, n, r, a, s) => {
42
- let [c, l] = A(!1), [u, d] = A(null), f = O(() => {
43
- let t = e.find((e) => i(e) && e.data?.type === "submit");
44
- return t && i(t) ? t : null;
45
- }, [e]), p = T(async (e) => {
46
- if (!f?.data?.submitConfig) return null;
47
- let i = f.data.submitConfig;
48
- if (!i.url || i.url.trim() === "") return null;
49
- d(null), i.showLoading !== !1 && l(!0);
50
- try {
51
- let c = await P(i, t, r, a, s);
52
- if (c.success) {
53
- let t = o(i.successMessage, n);
54
- if (t && d({
55
- message: t,
56
- type: "success"
57
- }), e && e(c.data), c.redirectUrl) {
58
- let e = c.redirectUrl;
59
- setTimeout(() => F(e), 1e3);
60
- }
61
- } else d({
62
- message: o(i.errorMessage, n) || c.error || "An error occurred during submission",
63
- type: "error"
64
- });
65
- return c;
66
- } catch (e) {
67
- let t = o(i.errorMessage, n) || (e instanceof Error ? e.message : "An unexpected error occurred");
68
- return d({
69
- message: t,
70
- type: "error"
71
- }), {
72
- error: t,
73
- success: !1
74
- };
75
- } finally {
76
- l(!1);
77
- }
78
- }, [
79
- f,
80
- t,
81
- n,
82
- r,
83
- a,
84
- s
85
- ]);
86
- return {
87
- clearSubmitMessage: T(() => {
88
- d(null);
89
- }, []),
90
- handleSubmitWithConfig: p,
91
- hasSubmitConfig: !!f?.data?.submitConfig,
92
- isSubmitting: c,
93
- submitButtonNode: f,
94
- submitMessage: u
95
- };
96
- }, I = (e) => e == null ? null : typeof e == "boolean" || typeof e == "number" ? e : typeof e == "string" ? e === "" ? null : e : typeof e == "object" ? JSON.stringify(e) : String(e), L = (e, t, n) => {
97
- let r = I(e), i = I(t);
98
- if (r === null || i === null) switch (n) {
99
- case "===": return r === i;
100
- case "!==": return r !== i;
101
- default: return !1;
102
- }
103
- if ([
104
- ">",
105
- "<",
106
- ">=",
107
- "<="
108
- ].includes(n)) {
109
- let e = Number(r), t = Number(i);
110
- if (!(Number.isNaN(e) || Number.isNaN(t))) switch (n) {
111
- case ">": return e > t;
112
- case "<": return e < t;
113
- case ">=": return e >= t;
114
- case "<=": return e <= t;
115
- default: return !1;
116
- }
117
- return !1;
118
- }
119
- switch (n) {
120
- case "===": {
121
- let e = Number(r), t = Number(i);
122
- return Number.isNaN(e) || Number.isNaN(t) ? String(r) === String(i) : e === t;
123
- }
124
- case "!==": {
125
- let e = Number(r), t = Number(i);
126
- return Number.isNaN(e) || Number.isNaN(t) ? String(r) !== String(i) : e !== t;
127
- }
128
- default: return !1;
129
- }
130
- }, R = (e, t, n) => {
131
- let { field: r, operator: a, value: o } = e;
132
- if (!(r && a) || o === void 0) return !0;
133
- let s = t[r];
134
- if (s === void 0 && n) {
135
- let e = n.get(r);
136
- e && i(e) && (s = t[e.id]);
137
- }
138
- return Array.isArray(s) ? a === "===" ? s.some((e) => L(e, o, "===")) || L(s, o, "===") : a === "!==" ? s.every((e) => L(e, o, "!==")) && L(s, o, "!==") : s.some((e) => L(e, o, a)) : L(s, o, a);
139
- }, z = (e, t, n) => {
140
- if (!e || e.length === 0) return !0;
141
- if (e.length === 1) return R(e[0], t, n);
142
- let r = R(e[0], t, n);
143
- for (let i = 1; i < e.length; i += 1) {
144
- let a = e[i], o = R(a, t, n), s = e[i - 1].logicalOperator || h.AND;
145
- if (s === h.AND) {
146
- if (r &&= o, !r) return !1;
147
- } else if (s === h.OR && (r ||= o, r)) return !0;
148
- }
149
- return r;
150
- }, B = (e) => {
151
- let t = /* @__PURE__ */ new Map();
152
- return e.forEach((e) => {
153
- let n = t.get(e.source);
154
- n ? n.push(e) : t.set(e.source, [e]);
155
- }), t;
156
- }, V = (e, t, n) => {
157
- let r = [], a = [], o = [];
158
- e.forEach((e) => {
159
- let t = e.data?.isFallback, n = e.data?.conditions?.length;
160
- t ? o.push(e) : n ? a.push(e) : r.push(e);
161
- });
162
- let s = [...r];
163
- if (a.length === 0) return o.length > 0 && s.length === 0 && s.push(...o), {
164
- edgesToFollow: s,
165
- waitingForInput: !1
166
- };
167
- if (!a.every((e) => {
168
- let r = e.data?.conditions;
169
- return r ? r.every((e) => {
170
- if (!e.field) return !0;
171
- let r = n.get(e.field);
172
- return _(i(r) ? r.id : e.field, t);
173
- }) : !1;
174
- })) return o.length > 0 && s.push(...o), {
175
- edgesToFollow: s,
176
- waitingForInput: s.length === 0
177
- };
178
- let c = a.filter((e) => z(e.data?.conditions, t, n));
179
- return c.length > 0 ? (s.push(...c), {
180
- edgesToFollow: s,
181
- waitingForInput: !1
182
- }) : (s.push(...o), {
183
- edgesToFollow: s,
184
- waitingForInput: !1
185
- });
186
- }, H = (e, t) => !t.some((t) => t.target === e), U = (e, t) => {
187
- let n = e.filter((e) => H(e.id, t));
188
- return n.find(i) || n[0];
189
- }, ne = (e, t, n, r) => {
190
- e.forEach((e) => {
191
- let i = r.get(e);
192
- if (!i) return;
193
- let { parentId: a } = i, o = /* @__PURE__ */ new Set();
194
- for (; a && !o.has(a);) {
195
- if (o.add(a), t.add(a), !n.has(a)) {
196
- let t = n.get(e);
197
- t !== void 0 && n.set(a, t);
198
- }
199
- a = r.get(a)?.parentId;
200
- }
201
- });
202
- }, re = (e, t, n) => {
203
- let r = U(e, t);
204
- if (!r) return {
205
- endOfPathReached: !0,
206
- visibleNodeIds: /* @__PURE__ */ new Set(),
207
- visibleNodes: [],
208
- visibleRootNodes: []
209
- };
210
- let i = new Map(e.map((e) => [e.id, e])), a = B(t), o = [], s = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), l = !1, u = (e) => {
211
- if (c.has(e)) return;
212
- c.add(e);
213
- let t = i.get(e);
214
- if (!t) return;
215
- s.add(e), o.push(t);
216
- let { edgesToFollow: r, waitingForInput: d } = V(a.get(e) || [], n, i);
217
- if (d) {
218
- l = !0;
219
- return;
220
- }
221
- r.forEach((e) => {
222
- u(e.target);
223
- });
224
- };
225
- u(r.id);
226
- let d = new Map(o.map((e, t) => [e.id, t])), f = new Set(s);
227
- ne(s, f, d, i);
228
- let p = e.filter((e) => f.has(e.id)).sort((e, t) => (d.get(e.id) ?? 2 ** 53 - 1) - (d.get(t.id) ?? 2 ** 53 - 1)), m = p.filter((e) => !(e.parentId && f.has(e.parentId)));
229
- return {
230
- endOfPathReached: !l,
231
- visibleNodeIds: f,
232
- visibleNodes: p,
233
- visibleRootNodes: m
234
- };
235
- }, ie = (e) => e.filter((e) => !r(e)).reduce((e, t) => {
236
- let n = t.parentId ?? null, r = e.at(-1);
237
- return r && r.groupId === n ? [...e.slice(0, -1), {
238
- ...r,
239
- nodes: [...r.nodes, t]
240
- }] : [...e, {
241
- groupId: n,
242
- nodes: [t]
243
- }];
244
- }, []), W = (e) => {
245
- if (typeof e != "object" || !e) return JSON.stringify(e) ?? "null";
246
- if (Array.isArray(e)) return `[${e.map(W).join(",")}]`;
247
- let t = e;
248
- return `{${Object.keys(t).sort().map((e) => `${JSON.stringify(e)}:${W(t[e])}`).join(",")}}`;
249
- }, G = ({ baseUrl: e, components: t, flow: n, googleApiKey: a, headers: o, language: s, onChange: f, onSubmit: p, showPoweredBy: h, theme: _, validate: y, validationMode: b, initialValues: x = {} }) => {
250
- let S = ee(), C = O(() => ({
251
- baseUrl: e ?? S?.baseUrl,
252
- components: {
253
- form: t?.form ?? S?.components?.form,
254
- inputs: {
255
- ...S?.components?.inputs,
256
- ...t?.inputs
257
- },
258
- loadingSkeleton: t?.loadingSkeleton ?? S?.components?.loadingSkeleton,
259
- step: t?.step ?? S?.components?.step,
260
- submitButton: t?.submitButton ?? S?.components?.submitButton,
261
- submitButtonWrapper: t?.submitButtonWrapper ?? S?.components?.submitButtonWrapper,
262
- ui: {
263
- ...S?.components?.ui,
264
- ...t?.ui
265
- }
266
- },
267
- googleApiKey: a ?? S?.googleApiKey,
268
- headers: u(S?.headers, o),
269
- language: s ?? S?.language ?? "en",
270
- showPoweredBy: h ?? S?.showPoweredBy ?? !0,
271
- theme: _ ?? S?.theme ?? "dark",
272
- validationMode: b ?? S?.validationMode ?? "onSubmit"
273
- }), [
274
- e,
275
- t,
276
- S,
277
- a,
278
- o,
279
- s,
280
- h,
281
- _,
282
- b
283
- ]), w = O(() => n?.nodes ?? [], [n]), E = O(() => n?.edges ?? [], [n]), j = O(() => g(w), [w]), M = c(C.language), N = k({}), [P, F] = A({}), [I, L] = A(() => m(x, j)), R = O(() => W(x), [x]), z = k(R), { endOfPathReached: B, visibleNodes: V, visibleRootNodes: H } = O(() => re(w, E, I), [
284
- w,
285
- E,
286
- I
287
- ]), U = O(() => ie(V), [V]), ne = O(() => {
288
- let e = /* @__PURE__ */ new Map();
289
- return w.forEach((t) => {
290
- r(t) && e.set(t.id, t);
291
- }), e;
292
- }, [w]), [G, K] = A(0), q = U.length === 0 ? 0 : Math.min(G, U.length - 1), J = U[q], Y = J?.groupId ? ne.get(J.groupId) : void 0, ae = q === 0, oe = U.length === 0 || q >= U.length - 1, { clearSubmitMessage: se, handleSubmitWithConfig: ce, hasSubmitConfig: le, isSubmitting: ue, submitMessage: de } = te(V, I, C.language, j, C.headers, C.baseUrl), fe = k(f), X = k(y), Z = O(() => v(I, j), [I, j]), pe = T((e, t) => {
293
- L((n) => ({
294
- ...n,
295
- [e]: t
296
- })), F((t) => {
297
- let n = { ...t };
298
- return delete n[e], n;
299
- });
300
- }, []), Q = T((e) => {
301
- Object.keys(e).length !== 0 && (L((t) => ({
302
- ...t,
303
- ...e
304
- })), F((t) => {
305
- let n = { ...t };
306
- return Object.keys(e).forEach((e) => {
307
- delete n[e];
308
- }), n;
309
- }));
310
- }, []), $ = T((e) => {
311
- let t = {};
312
- V.forEach((e) => {
313
- if (i(e)) {
314
- let n = e.id, r = I[n];
315
- if (e.data.required && d(r)) {
316
- t[n] = M(e.data.errorMessage) || M("validation.required");
317
- return;
318
- }
319
- if (!d(r) && e.data.pattern) try {
320
- new RegExp(e.data.pattern).test(String(r)) || (t[n] = M(e.data.errorMessage) || M("validation.invalidFormat"));
321
- } catch (e) {
322
- console.error(`Invalid pattern for field ${n}:`, e);
323
- }
324
- }
325
- });
326
- let n = e ? e(I, V) : {}, r = {
327
- ...t,
328
- ...n
329
- };
330
- return F(r), {
331
- errors: r,
332
- hasCustomErrors: Object.keys(n).length > 0,
333
- isValid: Object.keys(r).length === 0
334
- };
335
- }, [
336
- V,
337
- I,
338
- M
339
- ]), me = T(() => {
340
- K((e) => e >= U.length - 1 ? e : e + 1);
341
- }, [U.length]), he = T(() => {
342
- K((e) => Math.max(0, e - 1));
343
- }, []), ge = T(async () => {
344
- let { isValid: e } = $(X.current);
345
- if (!e) return !1;
346
- if (le) {
347
- let e = await ce((e) => {
348
- p && p(Z, { httpResponse: e });
349
- });
350
- if (e === null) return p?.(Z), !0;
351
- if (!e.success) return !0;
352
- } else p && p(Z);
353
- return !0;
354
- }, [
355
- $,
356
- le,
357
- ce,
358
- p,
359
- Z
360
- ]), _e = O(() => {
361
- if (!J) return [];
362
- let e = [];
363
- return J.nodes.forEach((t) => {
364
- i(t) && t.data.type !== "submit" && t.data.required && d(I[t.id]) && e.push(M(t.data.label) || t.id);
365
- }), e;
366
- }, [
367
- J,
368
- I,
369
- M
370
- ]), ve = O(() => V.some((e) => i(e) && e.data.type === "submit"), [V]), ye = O(() => J ? J.nodes.every((e) => !i(e) || !e.data.required || e.data.type === "submit" ? !0 : !d(I[e.id])) : !1, [J, I]), be = O(() => {
371
- let e = Object.keys(P);
372
- return e.length > 0 ? e[0] : void 0;
373
- }, [P]);
374
- return D(() => {
375
- if (U.length === 0) {
376
- G !== 0 && K(0);
377
- return;
378
- }
379
- G > U.length - 1 && K(U.length - 1);
380
- }, [U.length, G]), D(() => {
381
- fe.current = f;
382
- }, [f]), D(() => {
383
- X.current = y;
384
- }, [y]), D(() => {
385
- fe.current?.(Z);
386
- }, [Z]), D(() => {
387
- C.validationMode === "onChange" && $(X.current);
388
- }, [C.validationMode, $]), D(() => {
389
- let e = l(j, I, N.current);
390
- Object.keys(e).length > 0 && Q(e), N.current = I;
391
- }, [
392
- I,
393
- j,
394
- Q
395
- ]), D(() => {
396
- z.current !== R && (z.current = R, L(m(x, j)), F({}));
397
- }, [
398
- R,
399
- x,
400
- j
401
- ]), {
402
- canContinueStep: ye,
403
- canSubmit: (ve || B) && w.length > 0,
404
- clearSubmitMessage: se,
405
- config: C,
406
- currentStep: J,
407
- currentStepGroupNode: Y,
408
- currentStepIndex: q,
409
- firstErrorFieldId: be,
410
- formErrors: P,
411
- formValues: I,
412
- goToNextStep: me,
413
- goToPreviousStep: he,
414
- handleSubmit: ge,
415
- hasSubmitInput: ve,
416
- inputNodes: j,
417
- isFirstStep: ae,
418
- isLastStep: oe,
419
- isSubmitting: ue,
420
- missingRequiredFields: _e,
421
- prevFormValuesRef: N,
422
- setFieldErrors: F,
423
- setFieldValue: pe,
424
- setMultipleFieldValues: Q,
425
- steps: U,
426
- submitMessage: de,
427
- t: M,
428
- validateForm: $,
429
- visibleNodes: V,
430
- visibleRootNodes: H
431
- };
432
- }, K = /\{\{([\w-]+)}}/g, q = (e) => e == null || e === "", J = (...e) => {
433
- let t = [];
434
- for (let n of e) if (n) for (let e of n.matchAll(K)) t.includes(e[1]) || t.push(e[1]);
435
- return t;
436
- }, Y = (e) => {
437
- let t = e.data.httpConfig ?? e.data.optionsSource;
438
- if (!t) return [];
439
- let n = Object.values(t.queryParams ?? {});
440
- return J(t.url, t.body, ...n);
441
- }, ae = (e, t, n, r) => Y(e).filter((e) => q(t[e])).map((e) => {
442
- let t = n.find((t) => t.id === e);
443
- return {
444
- id: e,
445
- label: t ? p(t, r) : e
446
- };
447
- }), oe = ({ DefaultFormWrapper: t, DefaultInputWrapper: r, DefaultSubmitButton: s, DefaultSubmitButtonWrapper: c, config: l, defaultInputRenderers: u, defaultUI: d, formErrors: p, formValues: m, inputNodes: h, isSubmitting: g, missingRequiredFields: _, setFieldValue: v }) => {
448
- let b = O(() => l.components.form || t, [l.components.form, t]), x = O(() => l.components.submitButton || s, [l.components.submitButton, s]), S = O(() => l.components.submitButtonWrapper || c || C, [l.components.submitButtonWrapper, c]);
449
- return {
450
- FormWrapper: b,
451
- renderNode: T(function(t) {
452
- let { type: s } = t;
453
- switch (s) {
454
- case e.input: {
455
- if (!i(t)) return null;
456
- let e = t.data, a = e.type || "text", s = l.components.inputs?.[a], c = u[a], d = s || c, b = t.id, x = (e) => v(b, e), S = m[b], C = p[b], w = o(e.label, l.language), T = y(e, l.language), E = o(e.helperText, l.language), D = f(t), O = n(w), k = n(T), A = n(E);
457
- return d ? /* @__PURE__ */ j(r, {
458
- node: t,
459
- children: /* @__PURE__ */ j(d, {
460
- field: {
461
- "aria-invalid": C ? !0 : void 0,
462
- id: t.id,
463
- name: D,
464
- placeholder: k,
465
- required: e.required,
466
- value: S
467
- },
468
- extra: {
469
- error: C,
470
- helperText: A,
471
- isSubmitting: g,
472
- label: O,
473
- missingDependencies: ae(t, m, h, l.language),
474
- missingRequiredFields: _,
475
- node: t,
476
- setValue: x
477
- }
478
- }, a)
479
- }, t.id) : (console.warn("No renderer found for input type:", a), null);
480
- }
481
- case e.group: return null;
482
- case e.ui: {
483
- if (!a(t)) return null;
484
- let e = t.data.type || "title", n = l.components.ui?.[e], r = d[e], i = n || r;
485
- return i ? /* @__PURE__ */ j(i, { node: t }, t.id) : null;
486
- }
487
- default: return console.warn("Unknown node type:", s), null;
488
- }
489
- }, [
490
- l,
491
- m,
492
- p,
493
- v,
494
- g,
495
- _,
496
- h,
497
- u,
498
- d,
499
- r
500
- ]),
501
- SubmitButton: x,
502
- SubmitButtonWrapper: S
503
- };
504
- };
505
- //#endregion
506
- export { H as a, N as c, re as i, ee as l, G as n, R as o, U as r, z as s, oe as t };