@digiform/wizard 0.2.18 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/core/src/types/guards.js +0 -12
  2. package/core/src/utils/apiBodyUtils.js +43 -75
  3. package/index.d.ts +2 -8
  4. package/index.js +2 -108
  5. package/package.json +1 -28
  6. package/styles.css +1 -1
  7. package/ui/src/lib/utils/templateUtils.js +11 -43
  8. package/wizard/src/features/form-runtime/FormWizard/FormWizard.js +36 -33
  9. package/wizard/src/features/form-runtime/components/FormField.js +28 -28
  10. package/wizard/src/features/form-runtime/components/FormFooter.js +4 -4
  11. package/wizard/src/features/form-runtime/components/FormSection/FormSection.js +19 -19
  12. package/wizard/src/features/form-runtime/components/FormStep/FormStep.js +21 -21
  13. package/wizard/src/features/form-runtime/components/StepProgressIndicator/StepProgressIndicator.js +1 -1
  14. package/wizard/src/features/form-runtime/config/configResolver.js +10 -14
  15. package/wizard/src/features/form-runtime/config/templateLoader.js +82 -112
  16. package/wizard/src/features/form-runtime/hooks/useComponentTriggers.js +42 -66
  17. package/wizard/src/features/form-runtime/hooks/useFieldEventHandlers.js +3 -3
  18. package/wizard/src/features/form-runtime/hooks/useFormFieldState.js +5 -5
  19. package/wizard/src/features/form-runtime/utils/errorUtils.js +31 -42
  20. package/wizard/src/features/form-runtime/utils/validationUX.js +14 -55
  21. package/wizard/src/features/state-management/machines/useFormMachine.js +3 -3
  22. package/wizard/src/features/trigger-action-system/components/ActionManager.js +4 -4
  23. package/wizard/src/features/validation-system/validation/ValidationEngine.js +24 -29
  24. package/FormWizard.d.ts +0 -10
  25. package/core/src/types/api.js +0 -12
  26. package/core/src/types/form-config.js +0 -60
  27. package/core/src/types/form-wizard-config-schema.js +0 -113
  28. package/core/src/types/validation.js +0 -61
  29. package/features/api-integration.d.ts +0 -2
  30. package/features/api-integration.js +0 -17
  31. package/features/dialog-system.d.ts +0 -2
  32. package/features/dialog-system.js +0 -9
  33. package/features/form-runtime.d.ts +0 -2
  34. package/features/form-runtime.js +0 -63
  35. package/features/index.d.ts +0 -11
  36. package/features/state-management.d.ts +0 -2
  37. package/features/state-management.js +0 -21
  38. package/features/trigger-action-system.d.ts +0 -2
  39. package/features/trigger-action-system.js +0 -12
  40. package/features/validation-system.d.ts +0 -2
  41. package/features/validation-system.js +0 -23
  42. package/styles/index.d.ts +0 -0
  43. package/ui/src/components/badge/badge.js +0 -20
  44. package/ui/src/components/badge/badge.module.css.js +0 -12
  45. package/wizard/src/features/api-integration/services/ActionExecutor.js +0 -339
  46. package/wizard/src/features/api-integration/services/ApiCallExecutor.js +0 -6
  47. package/wizard/src/features/api-integration/services/DialogExecutor.js +0 -6
  48. package/wizard/src/features/api-integration/services/GenericTriggerService.js +0 -284
  49. package/wizard/src/features/api-integration/services/NavigationExecutor.js +0 -6
  50. package/wizard/src/features/form-runtime/config/templateConfig.js +0 -156
  51. package/wizard/src/features/form-runtime/config/templateUtils.js +0 -14
  52. package/wizard/src/features/form-runtime/utils/validation.js +0 -100
  53. package/wizard/src/features/trigger-action-system/components/ActionLoadingIndicator/ActionLoadingIndicator.js +0 -46
  54. package/wizard/src/features/trigger-action-system/components/ActionLoadingIndicator/ActionLoadingIndicator.module.css.js +0 -30
  55. package/wizard/src/features/trigger-action-system/utils/GenericTriggerEngine.js +0 -376
  56. package/wizard/src/features/validation-system/components/ValidationDebugger.js +0 -69
  57. package/wizard/src/features/validation-system/validation/tanstackSchemaAdapter.js +0 -17
  58. package/wizard/src/features/validation-system/validation/validationService.js +0 -74
@@ -1,156 +0,0 @@
1
- "use client";
2
- /* empty css */
3
- import { getTemplateTypeFromId as o } from "../../../../../ui/src/lib/utils/templateUtils.js";
4
- const a = {
5
- generic: {
6
- permissions: {
7
- // Generic templates are completely locked - only navigation and step title can be changed
8
- canAddComponents: !1,
9
- canRemoveComponents: !1,
10
- canEditComponentProperties: !1,
11
- canAddSections: !1,
12
- canRemoveSections: !1,
13
- canEditSectionProperties: !1,
14
- canEditStepTitle: !0,
15
- // Allow title customization for generic templates
16
- canEditNavigation: !0,
17
- // Allow navigation customization
18
- canEditActions: !1,
19
- canDuplicate: !1,
20
- // Generic templates cannot be duplicated
21
- canDelete: !0
22
- // But they can be removed from forms
23
- },
24
- display: {
25
- type: "generic",
26
- isReadonly: !0,
27
- showLockIcon: !0,
28
- themeClass: "bg-indigo-50 border-indigo-200 text-indigo-900 hover:bg-indigo-100",
29
- iconColor: "text-indigo-600",
30
- lockTooltip: "Generic template - Only title and navigation can be customized",
31
- badgeText: "Generic"
32
- },
33
- rules: {
34
- lockMessage: "This is a generic template. Only the step title and navigation settings can be modified.",
35
- supportsMultipleSteps: !0,
36
- defaultNavigation: {
37
- next: { label: "Next", enabled: !0 },
38
- previous: { label: "Previous", enabled: !0 }
39
- }
40
- }
41
- },
42
- team: {
43
- permissions: {
44
- // Team templates allow full editing like normal steps
45
- canAddComponents: !0,
46
- canRemoveComponents: !0,
47
- canEditComponentProperties: !0,
48
- canAddSections: !0,
49
- canRemoveSections: !0,
50
- canEditSectionProperties: !0,
51
- canEditStepTitle: !0,
52
- canEditNavigation: !0,
53
- canEditActions: !0,
54
- canDuplicate: !0,
55
- canDelete: !0
56
- },
57
- display: {
58
- type: "team",
59
- isReadonly: !1,
60
- showLockIcon: !1,
61
- themeClass: "bg-emerald-50 border-emerald-200 text-emerald-900 hover:bg-emerald-100",
62
- iconColor: "text-emerald-600",
63
- badgeText: "Team"
64
- },
65
- rules: {
66
- lockMessage: "",
67
- // No restrictions for team templates
68
- supportsMultipleSteps: !0,
69
- defaultNavigation: {
70
- next: { label: "Next", enabled: !0 },
71
- previous: { label: "Previous", enabled: !0 }
72
- }
73
- }
74
- }
75
- }, s = {
76
- permissions: {
77
- canAddComponents: !0,
78
- canRemoveComponents: !0,
79
- canEditComponentProperties: !0,
80
- canAddSections: !0,
81
- canRemoveSections: !0,
82
- canEditSectionProperties: !0,
83
- canEditStepTitle: !0,
84
- canEditNavigation: !0,
85
- canEditActions: !0,
86
- canDuplicate: !0,
87
- canDelete: !0
88
- },
89
- display: {
90
- type: null,
91
- isReadonly: !1,
92
- showLockIcon: !1,
93
- themeClass: "bg-white border-muted",
94
- iconColor: "text-muted-foreground"
95
- },
96
- rules: {
97
- lockMessage: "",
98
- supportsMultipleSteps: !1,
99
- defaultNavigation: {
100
- next: { label: "Next", enabled: !0 },
101
- previous: { label: "Previous", enabled: !0 }
102
- }
103
- }
104
- };
105
- function i(e) {
106
- let t = null;
107
- if (typeof e == "string" ? t = e : "templateId" in e && (t = e.templateId), !t)
108
- return s;
109
- const n = o(t);
110
- return n && a[n] ? a[n] : s;
111
- }
112
- function u(e) {
113
- return i(e).permissions;
114
- }
115
- function g(e) {
116
- return i(e).display;
117
- }
118
- function d(e, t) {
119
- return u(e)[t];
120
- }
121
- function T(e, t) {
122
- return "templateId" in e ? i(e).display.isReadonly : t ? i(t.templateId).display.isReadonly : !1;
123
- }
124
- function p(e) {
125
- return i(e).rules.lockMessage;
126
- }
127
- function y(e, t) {
128
- if (d(e, t))
129
- return { allowed: !0 };
130
- const l = p(e), c = i(e);
131
- return {
132
- allowed: !1,
133
- message: l || `This action is not allowed for ${c.display.badgeText || "this"} templates.`
134
- };
135
- }
136
- function r(e) {
137
- return typeof e == "string" ? o(e) : "templateId" in e ? o(e.templateId) : null;
138
- }
139
- function b(e) {
140
- return r(e) === "generic";
141
- }
142
- function v(e) {
143
- return r(e) === "team";
144
- }
145
- export {
146
- p as getLockMessage,
147
- i as getTemplateConfig,
148
- g as getTemplateDisplayConfig,
149
- u as getTemplatePermissions,
150
- r as getTemplateTypeFromInput,
151
- d as isActionAllowed,
152
- b as isGenericTemplateInput,
153
- T as isStepLocked,
154
- v as isTeamTemplateInput,
155
- y as validateTemplateAction
156
- };
@@ -1,14 +0,0 @@
1
- "use client";
2
- /* empty css */
3
- import { getTemplateMetadata as t, getAvailableGenericTemplates as a, getAvailableTemplates as l } from "./templateLoader.js";
4
- import { createAsyncTemplateFunctions as n } from "../../../../../ui/src/lib/utils/templateUtils.js";
5
- const e = n({
6
- getAvailableTemplates: l,
7
- getAvailableGenericTemplates: a,
8
- getTemplateMetadata: t
9
- }), s = e.getAvailableGenericTemplatesSync, o = e.getTemplateInfo, p = e.validateTemplateReferences;
10
- export {
11
- s as getAvailableGenericTemplatesSync,
12
- o as getTemplateInfo,
13
- p as validateTemplateReferences
14
- };
@@ -1,100 +0,0 @@
1
- "use client";
2
- const o = (r) => r === void 0 ? { value: void 0 } : typeof r == "object" && r !== null && "value" in r ? {
3
- value: r.value,
4
- message: r.message
5
- } : { value: r }, y = (r, t, a) => {
6
- if (!r.validation)
7
- return [];
8
- const i = [], n = r.validation;
9
- if (n.required) {
10
- const { value: e, message: s } = o(
11
- n.required
12
- );
13
- e && !u(t) && i.push(s || "This field is required");
14
- }
15
- if (n.minLength) {
16
- const { value: e, message: s } = o(
17
- n.minLength
18
- );
19
- e !== void 0 && !d(t, e) && i.push(s || `Minimum length is ${e} characters`);
20
- }
21
- if (n.maxLength) {
22
- const { value: e, message: s } = o(
23
- n.maxLength
24
- );
25
- e !== void 0 && !m(t, e) && i.push(s || `Maximum length is ${e} characters`);
26
- }
27
- if (n.pattern) {
28
- const { value: e, message: s } = o(
29
- n.pattern
30
- );
31
- e && !c(t, e) && i.push(s || "Invalid format");
32
- }
33
- if (n.email) {
34
- const { value: e, message: s } = o(
35
- n.email
36
- );
37
- e && !l(t) && i.push(s || "Invalid email address");
38
- }
39
- if (n.min) {
40
- const { value: e, message: s } = o(n.min);
41
- e !== void 0 && !f(t, e) && i.push(s || `Minimum value is ${e}`);
42
- }
43
- if (n.max) {
44
- const { value: e, message: s } = o(n.max);
45
- e !== void 0 && !g(t, e) && i.push(s || `Maximum value is ${e}`);
46
- }
47
- if (n.rules && n.rules.length > 0)
48
- for (const e of n.rules)
49
- h(e, t, a) || i.push(e.message || "Validation failed");
50
- return i;
51
- }, h = (r, t, a) => {
52
- const i = r.params;
53
- switch (r.type) {
54
- case "required":
55
- return u(t);
56
- case "minLength":
57
- return d(t, i?.min);
58
- case "maxLength":
59
- return m(t, i?.max);
60
- case "pattern":
61
- return c(t, i?.pattern);
62
- case "email":
63
- return l(t);
64
- case "number":
65
- return p(t);
66
- case "min":
67
- return f(t, i?.min);
68
- case "max":
69
- return g(t, i?.max);
70
- case "custom":
71
- return x(t, i?.validator, a);
72
- default:
73
- return !0;
74
- }
75
- }, u = (r) => r == null ? !1 : typeof r == "string" ? r.trim() !== "" : Array.isArray(r) ? r.length > 0 : !0, d = (r, t) => t === void 0 || r === void 0 || r === null ? !0 : typeof r == "string" || Array.isArray(r) ? r.length >= t : !0, m = (r, t) => t === void 0 || r === void 0 || r === null ? !0 : typeof r == "string" || Array.isArray(r) ? r.length <= t : !0, c = (r, t) => {
76
- if (t === void 0 || r === void 0 || r === null || typeof r != "string") return !0;
77
- try {
78
- return new RegExp(t).test(r);
79
- } catch {
80
- return console.error("Invalid regex pattern:", t), !0;
81
- }
82
- }, l = (r) => r == null || r === "" ? !0 : typeof r != "string" ? !1 : /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r), p = (r) => r == null || r === "" ? !0 : !Number.isNaN(Number(r)), f = (r, t) => t === void 0 || r === void 0 || r === null || r === "" ? !0 : Number(r) >= t, g = (r, t) => t === void 0 || r === void 0 || r === null || r === "" ? !0 : Number(r) <= t, x = (r, t, a) => {
83
- if (!t) return !0;
84
- console.warn(
85
- "[DEPRECATED] String-based custom validators are deprecated and pose security risks. Please migrate to function-based validators using the ValidationEngine."
86
- );
87
- try {
88
- return new Function(
89
- "value",
90
- "formData",
91
- `return ${t}`
92
- )(r, a);
93
- } catch (i) {
94
- return console.error("Error in custom validator:", i), !1;
95
- }
96
- };
97
- export {
98
- y as validateComponentValue,
99
- h as validateRule
100
- };
@@ -1,46 +0,0 @@
1
- "use client";
2
- import { jsx as s, jsxs as r } from "react/jsx-runtime";
3
- /* empty css */
4
- import { Badge as c } from "../../../../../../ui/src/components/badge/badge.js";
5
- import { Card as o, CardContent as l } from "../../../../../../ui/src/components/card/card.js";
6
- import { clsx as d } from "clsx";
7
- import { Loader2 as m } from "lucide-react";
8
- import { memo as p } from "react";
9
- import e from "./ActionLoadingIndicator.module.css.js";
10
- const g = p(
11
- ({ activeActions: a, className: n }) => {
12
- const t = Object.values(a).filter(
13
- (i) => i.status === "executing"
14
- );
15
- return t.length === 0 ? null : /* @__PURE__ */ s(o, { className: d(e.card, n), children: /* @__PURE__ */ r(l, { className: e.cardContent, children: [
16
- /* @__PURE__ */ r("div", { className: e.contentRow, children: [
17
- /* @__PURE__ */ s(m, { className: e.spinner }),
18
- /* @__PURE__ */ r("div", { className: e.textContent, children: [
19
- /* @__PURE__ */ s("div", { className: e.title, children: "Executing Actions..." }),
20
- /* @__PURE__ */ s("div", { className: e.subtitle, children: t.length === 1 ? "1 action in progress" : `${t.length} actions in progress` })
21
- ] }),
22
- /* @__PURE__ */ s("div", { className: e.badgeList, children: t.map((i) => /* @__PURE__ */ s(
23
- c,
24
- {
25
- variant: "secondary",
26
- className: e.badgeText,
27
- children: i.actionId.split("-")[0]
28
- },
29
- i.actionId
30
- )) })
31
- ] }),
32
- /* @__PURE__ */ s("div", { className: e.progressSection, children: /* @__PURE__ */ s("div", { className: e.progressTrack, children: /* @__PURE__ */ s(
33
- "div",
34
- {
35
- className: e.progressBar,
36
- style: { width: "60%" }
37
- }
38
- ) }) })
39
- ] }) });
40
- }
41
- );
42
- g.displayName = "ActionLoadingIndicator";
43
- export {
44
- g as ActionLoadingIndicator,
45
- g as default
46
- };
@@ -1,30 +0,0 @@
1
- "use client";
2
- const t = "fb-card_jvOrv", e = "fb-cardContent_Cnf5t", s = "fb-contentRow_-lops", n = "fb-spinner_SkwMR", o = "fb-textContent_t3X2X", r = "fb-title_-fTQX", c = "fb-subtitle_wyptE", b = "fb-badgeList_xtoNn", a = "fb-badgeText_TZRdG", g = "fb-progressSection_XcPgJ", i = "fb-progressTrack_BUoRx", f = "fb-progressBar_5MELx", p = {
3
- card: t,
4
- cardContent: e,
5
- contentRow: s,
6
- spinner: n,
7
- textContent: o,
8
- title: r,
9
- subtitle: c,
10
- badgeList: b,
11
- badgeText: a,
12
- progressSection: g,
13
- progressTrack: i,
14
- progressBar: f
15
- };
16
- export {
17
- b as badgeList,
18
- a as badgeText,
19
- t as card,
20
- e as cardContent,
21
- s as contentRow,
22
- p as default,
23
- f as progressBar,
24
- g as progressSection,
25
- i as progressTrack,
26
- n as spinner,
27
- c as subtitle,
28
- o as textContent,
29
- r as title
30
- };