treege 3.0.0-beta.70 → 3.0.0-beta.71

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,514 +0,0 @@
1
- import { C as e, D as t, E as n, I as r, L as i, M as a, N as o, O as s, R as c, S as l, T as u, a as d, c as f, d as p, f as m, g as h, i as g, l as _, o as v, s as y, u as b, w as x, x as S, z as C } from "./ThemeContext-CdHMLHiw.js";
2
- import { Fragment as w, createContext as T, useCallback as E, useContext as D, useEffect as O, useMemo as k, useRef as A, useState as j } from "react";
3
- import { jsx as M } from "react/jsx-runtime";
4
- //#region src/renderer/context/TreegeRendererProvider.tsx
5
- var N = T(void 0), ee = () => D(N), P = ({ children: e, ...t }) => /* @__PURE__ */ M(N.Provider, {
6
- value: t,
7
- children: e
8
- }), F = async (t, r, i, a, o) => {
9
- if (!t.url || t.url.trim() === "") return {
10
- error: "No URL configured for submission",
11
- success: !1
12
- };
13
- let s = n(x(t.url, r, { encode: !0 }), o);
14
- if (!s || s.trim() === "") return {
15
- error: "Invalid URL after template replacement",
16
- success: !1
17
- };
18
- let c = t.payloadTemplate ? h(t.payloadTemplate, r, i) : void 0, d = await S({
19
- body: c === void 0 ? t.sendAllFormValues ? JSON.stringify(y(r, i)) : void 0 : JSON.stringify(c),
20
- headers: l(u(a, r), u(t.headers, r)),
21
- method: t.method || "POST",
22
- queryParams: u(t.queryParams, r),
23
- url: s
24
- });
25
- if (!d.success) return {
26
- data: d.data,
27
- error: d.error,
28
- success: !1
29
- };
30
- let f = t.redirectUrl ? (() => {
31
- let n = e(t.redirectUrl, d.data);
32
- return n && n.trim() !== "" ? n : void 0;
33
- })() : void 0;
34
- return {
35
- data: d.data,
36
- redirectUrl: f,
37
- success: !0
38
- };
39
- }, I = (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, i, a, o) => {
42
- let [s, l] = j(!1), [u, d] = j(null), f = k(() => {
43
- let t = e.find((e) => c(e) && e.data?.type === "submit");
44
- return t && c(t) ? t : null;
45
- }, [e]), p = E(async (e) => {
46
- if (!f?.data?.submitConfig) return null;
47
- let s = f.data.submitConfig;
48
- if (!s.url || s.url.trim() === "") return null;
49
- d(null), s.showLoading !== !1 && l(!0);
50
- try {
51
- let c = await F(s, t, i, a, o);
52
- if (c.success) {
53
- let t = r(s.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(() => I(e), 1e3);
60
- }
61
- } else d({
62
- message: r(s.errorMessage, n) || c.error || "An error occurred during submission",
63
- type: "error"
64
- });
65
- return c;
66
- } catch (e) {
67
- let t = r(s.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
- i,
83
- a,
84
- o
85
- ]);
86
- return {
87
- clearSubmitMessage: E(() => {
88
- d(null);
89
- }, []),
90
- handleSubmitWithConfig: p,
91
- hasSubmitConfig: !!f?.data?.submitConfig,
92
- isSubmitting: s,
93
- submitButtonNode: f,
94
- submitMessage: u
95
- };
96
- }, L = (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), R = (e, t, n) => {
97
- let r = L(e), i = L(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
- }, z = (e, t, n) => {
131
- let { field: r, operator: i, value: a } = e;
132
- if (!(r && i) || a === void 0) return !0;
133
- let o = t[r];
134
- if (o === void 0 && n) {
135
- let e = n.get(r);
136
- e && c(e) && (o = t[e.id]);
137
- }
138
- return Array.isArray(o) ? i === "===" ? o.some((e) => R(e, a, "===")) || R(o, a, "===") : i === "!==" ? o.every((e) => R(e, a, "!==")) && R(o, a, "!==") : o.some((e) => R(e, a, i)) : R(o, a, i);
139
- }, B = (e, t, n) => {
140
- if (!e || e.length === 0) return !0;
141
- if (e.length === 1) return z(e[0], t, n);
142
- let r = z(e[0], t, n);
143
- for (let i = 1; i < e.length; i += 1) {
144
- let a = e[i], s = z(a, t, n), c = e[i - 1].logicalOperator || o.AND;
145
- if (c === o.AND) {
146
- if (r &&= s, !r) return !1;
147
- } else if (c === o.OR && (r ||= s, r)) return !0;
148
- }
149
- return r;
150
- }, ne = (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 = [], i = [], a = [];
158
- e.forEach((e) => {
159
- let t = e.data?.isFallback, n = e.data?.conditions?.length;
160
- t ? a.push(e) : n ? i.push(e) : r.push(e);
161
- });
162
- let o = [...r];
163
- if (i.length === 0) return a.length > 0 && o.length === 0 && o.push(...a), {
164
- edgesToFollow: o,
165
- waitingForInput: !1
166
- };
167
- if (!i.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 v(c(r) ? r.id : e.field, t);
173
- }) : !1;
174
- })) return a.length > 0 && o.push(...a), {
175
- edgesToFollow: o,
176
- waitingForInput: o.length === 0
177
- };
178
- let s = i.filter((e) => B(e.data?.conditions, t, n));
179
- return s.length > 0 ? (o.push(...s), {
180
- edgesToFollow: o,
181
- waitingForInput: !1
182
- }) : (o.push(...a), {
183
- edgesToFollow: o,
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(c) || n[0];
189
- }, re = (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
- }, ie = (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 = ne(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
- re(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
- }, ae = (e) => e.filter((e) => !i(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: n, flow: r, googleApiKey: a, headers: o, language: s, onChange: u, onSubmit: p, showPoweredBy: m, theme: v, validate: b, validationMode: x, initialValues: S = {} }) => {
250
- let C = ee(), w = k(() => ({
251
- baseUrl: e ?? C?.baseUrl,
252
- components: {
253
- form: n?.form ?? C?.components?.form,
254
- inputs: {
255
- ...C?.components?.inputs,
256
- ...n?.inputs
257
- },
258
- loadingSkeleton: n?.loadingSkeleton ?? C?.components?.loadingSkeleton,
259
- step: n?.step ?? C?.components?.step,
260
- submitButton: n?.submitButton ?? C?.components?.submitButton,
261
- submitButtonWrapper: n?.submitButtonWrapper ?? C?.components?.submitButtonWrapper,
262
- ui: {
263
- ...C?.components?.ui,
264
- ...n?.ui
265
- }
266
- },
267
- googleApiKey: a ?? C?.googleApiKey,
268
- headers: l(C?.headers, o),
269
- language: s ?? C?.language ?? "en",
270
- showPoweredBy: m ?? C?.showPoweredBy ?? !0,
271
- theme: v ?? C?.theme ?? "dark",
272
- validationMode: x ?? C?.validationMode ?? "onSubmit"
273
- }), [
274
- e,
275
- n,
276
- C,
277
- a,
278
- o,
279
- s,
280
- m,
281
- v,
282
- x
283
- ]), T = k(() => r?.nodes ?? [], [r]), D = k(() => r?.edges ?? [], [r]), M = k(() => _(T), [T]), N = t(w.language), P = A({}), [F, I] = j({}), [L, R] = j(() => g(S, M)), z = k(() => W(S), [S]), B = A(z), { endOfPathReached: ne, visibleNodes: V, visibleRootNodes: H } = k(() => ie(T, D, L), [
284
- T,
285
- D,
286
- L
287
- ]), U = k(() => ae(V), [V]), re = k(() => {
288
- let e = /* @__PURE__ */ new Map();
289
- return T.forEach((t) => {
290
- i(t) && e.set(t.id, t);
291
- }), e;
292
- }, [T]), [G, K] = j(0), q = U.length === 0 ? 0 : Math.min(G, U.length - 1), J = U[q], oe = J?.groupId ? re.get(J.groupId) : void 0, se = q === 0, ce = U.length === 0 || q >= U.length - 1, { clearSubmitMessage: le, handleSubmitWithConfig: ue, hasSubmitConfig: de, isSubmitting: fe, submitButtonNode: pe, submitMessage: me } = te(V, L, w.language, M, w.headers, w.baseUrl), he = A(u), Y = A(b), X = k(() => y(L, M), [L, M]), Z = k(() => {
293
- let e = pe?.data?.submitConfig?.payloadTemplate;
294
- return e ? h(e, L, M) ?? X : X;
295
- }, [
296
- pe,
297
- L,
298
- M,
299
- X
300
- ]), ge = E((e, t) => {
301
- R((n) => ({
302
- ...n,
303
- [e]: t
304
- })), I((t) => {
305
- let n = { ...t };
306
- return delete n[e], n;
307
- });
308
- }, []), Q = E((e) => {
309
- Object.keys(e).length !== 0 && (R((t) => ({
310
- ...t,
311
- ...e
312
- })), I((t) => {
313
- let n = { ...t };
314
- return Object.keys(e).forEach((e) => {
315
- delete n[e];
316
- }), n;
317
- }));
318
- }, []), $ = E((e) => {
319
- let t = {};
320
- V.forEach((e) => {
321
- if (c(e)) {
322
- let n = e.id, r = L[n];
323
- if (e.data.required && f(r)) {
324
- t[n] = N(e.data.errorMessage) || N("validation.required");
325
- return;
326
- }
327
- if (!f(r) && e.data.pattern) try {
328
- new RegExp(e.data.pattern).test(String(r)) || (t[n] = N(e.data.errorMessage) || N("validation.invalidFormat"));
329
- } catch (e) {
330
- console.error(`Invalid pattern for field ${n}:`, e);
331
- }
332
- }
333
- });
334
- let n = e ? e(L, V) : {}, r = {
335
- ...t,
336
- ...n
337
- };
338
- return I(r), {
339
- errors: r,
340
- hasCustomErrors: Object.keys(n).length > 0,
341
- isValid: Object.keys(r).length === 0
342
- };
343
- }, [
344
- V,
345
- L,
346
- N
347
- ]), _e = E(() => {
348
- K((e) => e >= U.length - 1 ? e : e + 1);
349
- }, [U.length]), ve = E(() => {
350
- K((e) => Math.max(0, e - 1));
351
- }, []), ye = E(async () => {
352
- let { isValid: e } = $(Y.current);
353
- if (!e) return !1;
354
- if (de) {
355
- let e = await ue((e) => {
356
- p && p(Z, { httpResponse: e });
357
- });
358
- if (e === null) return p?.(Z), !0;
359
- if (!e.success) return !0;
360
- } else p && p(Z);
361
- return !0;
362
- }, [
363
- $,
364
- de,
365
- ue,
366
- p,
367
- Z
368
- ]), be = k(() => {
369
- if (!J) return [];
370
- let e = [];
371
- return J.nodes.forEach((t) => {
372
- c(t) && t.data.type !== "submit" && t.data.required && f(L[t.id]) && e.push(N(t.data.label) || t.id);
373
- }), e;
374
- }, [
375
- J,
376
- L,
377
- N
378
- ]), xe = k(() => V.some((e) => c(e) && e.data.type === "submit"), [V]), Se = k(() => J ? J.nodes.every((e) => !c(e) || !e.data.required || e.data.type === "submit" ? !0 : !f(L[e.id])) : !1, [J, L]), Ce = k(() => {
379
- let e = Object.keys(F);
380
- return e.length > 0 ? e[0] : void 0;
381
- }, [F]);
382
- return O(() => {
383
- if (U.length === 0) {
384
- G !== 0 && K(0);
385
- return;
386
- }
387
- G > U.length - 1 && K(U.length - 1);
388
- }, [U.length, G]), O(() => {
389
- he.current = u;
390
- }, [u]), O(() => {
391
- Y.current = b;
392
- }, [b]), O(() => {
393
- he.current?.(X);
394
- }, [X]), O(() => {
395
- w.validationMode === "onChange" && $(Y.current);
396
- }, [w.validationMode, $]), O(() => {
397
- let e = d(M, L, P.current);
398
- Object.keys(e).length > 0 && Q(e), P.current = L;
399
- }, [
400
- L,
401
- M,
402
- Q
403
- ]), O(() => {
404
- B.current !== z && (B.current = z, R(g(S, M)), I({}));
405
- }, [
406
- z,
407
- S,
408
- M
409
- ]), {
410
- canContinueStep: Se,
411
- canSubmit: (xe || ne) && T.length > 0,
412
- clearSubmitMessage: le,
413
- config: w,
414
- currentStep: J,
415
- currentStepGroupNode: oe,
416
- currentStepIndex: q,
417
- firstErrorFieldId: Ce,
418
- formErrors: F,
419
- formValues: L,
420
- goToNextStep: _e,
421
- goToPreviousStep: ve,
422
- handleSubmit: ye,
423
- hasSubmitInput: xe,
424
- inputNodes: M,
425
- isFirstStep: se,
426
- isLastStep: ce,
427
- isSubmitting: fe,
428
- missingRequiredFields: be,
429
- prevFormValuesRef: P,
430
- setFieldErrors: I,
431
- setFieldValue: ge,
432
- setMultipleFieldValues: Q,
433
- steps: U,
434
- submitMessage: me,
435
- t: N,
436
- validateForm: $,
437
- visibleNodes: V,
438
- visibleRootNodes: H
439
- };
440
- }, K = /\{\{([\w-]+)}}/g, q = (e) => e == null || e === "", J = (...e) => {
441
- let t = [];
442
- for (let n of e) if (n) for (let e of n.matchAll(K)) t.includes(e[1]) || t.push(e[1]);
443
- return t;
444
- }, oe = (e) => {
445
- let t = e.data.httpConfig ?? e.data.optionsSource;
446
- if (!t) return [];
447
- let n = Object.values(t.queryParams ?? {});
448
- return J(t.url, t.body, ...n);
449
- }, se = (e, t, n, r) => oe(e).filter((e) => q(t[e])).map((e) => {
450
- let t = n.find((t) => t.id === e);
451
- return {
452
- id: e,
453
- label: t ? m(t, r) : e
454
- };
455
- }), ce = ({ DefaultFormWrapper: e, DefaultInputWrapper: t, DefaultSubmitButton: n, DefaultSubmitButtonWrapper: i, config: o, defaultInputRenderers: l, defaultUI: u, formErrors: d, formValues: f, inputNodes: m, isSubmitting: h, missingRequiredFields: g, setFieldValue: _ }) => {
456
- let v = k(() => o.components.form || e, [o.components.form, e]), y = k(() => o.components.submitButton || n, [o.components.submitButton, n]), x = k(() => o.components.submitButtonWrapper || i || w, [o.components.submitButtonWrapper, i]);
457
- return {
458
- FormWrapper: v,
459
- renderNode: E(function(e) {
460
- let { type: n } = e;
461
- switch (n) {
462
- case a.input: {
463
- if (!c(e)) return null;
464
- let n = e.data, i = n.type || "text", a = o.components.inputs?.[i], u = l[i], v = a || u, y = e.id, x = (e) => _(y, e), S = f[y], C = d[y], w = r(n.label, o.language), T = b(n, o.language), E = r(n.helperText, o.language), D = p(e), O = s(w), k = s(T), A = s(E);
465
- return v ? /* @__PURE__ */ M(t, {
466
- node: e,
467
- children: /* @__PURE__ */ M(v, {
468
- field: {
469
- "aria-invalid": C ? !0 : void 0,
470
- id: e.id,
471
- name: D,
472
- placeholder: k,
473
- required: n.required,
474
- value: S
475
- },
476
- extra: {
477
- error: C,
478
- helperText: A,
479
- isSubmitting: h,
480
- label: O,
481
- missingDependencies: se(e, f, m, o.language),
482
- missingRequiredFields: g,
483
- node: e,
484
- setValue: x
485
- }
486
- }, i)
487
- }, e.id) : (console.warn("No renderer found for input type:", i), null);
488
- }
489
- case a.group: return null;
490
- case a.ui: {
491
- if (!C(e)) return null;
492
- let t = e.data.type || "title", n = o.components.ui?.[t], r = u[t], i = n || r;
493
- return i ? /* @__PURE__ */ M(i, { node: e }, e.id) : null;
494
- }
495
- default: return console.warn("Unknown node type:", n), null;
496
- }
497
- }, [
498
- o,
499
- f,
500
- d,
501
- _,
502
- h,
503
- g,
504
- m,
505
- l,
506
- u,
507
- t
508
- ]),
509
- SubmitButton: y,
510
- SubmitButtonWrapper: x
511
- };
512
- };
513
- //#endregion
514
- export { H as a, P as c, ie as i, ee as l, G as n, z as o, U as r, B as s, ce as t };