@notmrabhi/flowforge 0.1.0

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 (56) hide show
  1. package/README.md +70 -0
  2. package/dist/GatewayBranchEdge-C-AVfqfT.js +1 -0
  3. package/dist/GatewayBranchEdge-gncIBR-0.js +854 -0
  4. package/dist/SchemaBuilderDrawer-DFyGUCZM.js +3235 -0
  5. package/dist/SchemaBuilderDrawer-zci9aEUc.js +4 -0
  6. package/dist/_commonjsHelpers-DKOUU3wS.js +1 -0
  7. package/dist/_commonjsHelpers-DaMA6jEr.js +8 -0
  8. package/dist/bpmn-CcuE2X_Q.js +2 -0
  9. package/dist/bpmn-CtfWDaOY.js +33 -0
  10. package/dist/canvas.cjs +1 -0
  11. package/dist/canvas.d.ts +646 -0
  12. package/dist/canvas.js +28 -0
  13. package/dist/canvasTokens-CAD6G24b.js +32 -0
  14. package/dist/canvasTokens-gKNYrPl4.js +1 -0
  15. package/dist/core.cjs +1 -0
  16. package/dist/core.d.ts +333 -0
  17. package/dist/core.js +24 -0
  18. package/dist/defaultUi.cjs +1 -0
  19. package/dist/defaultUi.d.ts +83 -0
  20. package/dist/defaultUi.js +18 -0
  21. package/dist/form.cjs +1 -0
  22. package/dist/form.d.ts +857 -0
  23. package/dist/form.js +43 -0
  24. package/dist/index-B31-Y5uO.js +11 -0
  25. package/dist/index-B3aHpb84.js +13 -0
  26. package/dist/index-BnzttJ4w.js +13758 -0
  27. package/dist/index-BysKSEtZ.js +1 -0
  28. package/dist/index-C-CpxcAF.js +8132 -0
  29. package/dist/index-C9lDjGKB.js +2553 -0
  30. package/dist/index-CChSmn-Q.js +6 -0
  31. package/dist/index-CIbEqy9U.js +7319 -0
  32. package/dist/index-CkjEllpd.js +1 -0
  33. package/dist/index-CpKKFxCT.js +2 -0
  34. package/dist/index-Cw9DC-tf.js +76 -0
  35. package/dist/index-CzPi8KQC.js +1310 -0
  36. package/dist/index-D14V8rKX.js +1 -0
  37. package/dist/index-DVIy64gf.js +41 -0
  38. package/dist/index-gtgq_241.js +3 -0
  39. package/dist/index-l6kvDx-m.js +1360 -0
  40. package/dist/index-lcviy90e.js +613 -0
  41. package/dist/index-wOnYb3DO.js +567 -0
  42. package/dist/index.cjs +1 -0
  43. package/dist/index.d.ts +1354 -0
  44. package/dist/index.js +106 -0
  45. package/dist/messages-CO299wPN.js +22 -0
  46. package/dist/messages-O9Tw_XXR.js +1 -0
  47. package/dist/nodeRegistry.cjs +1 -0
  48. package/dist/nodeRegistry.d.ts +293 -0
  49. package/dist/nodeRegistry.js +538 -0
  50. package/dist/style.css +6 -0
  51. package/dist/templateRegistry.cjs +1 -0
  52. package/dist/templateRegistry.d.ts +83 -0
  53. package/dist/templateRegistry.js +43 -0
  54. package/dist/templateSkeletons-B3DkIUbY.js +1 -0
  55. package/dist/templateSkeletons-D60ixh5T.js +2617 -0
  56. package/package.json +112 -0
@@ -0,0 +1,854 @@
1
+ import e, { createContext as le, useContext as re } from "react";
2
+ import { Handle as b, Position as x, getStraightPath as B, BaseEdge as M } from "reactflow";
3
+ import { Tooltip as A, Chip as j } from "@mui/material";
4
+ import { GrTrigger as ae } from "react-icons/gr";
5
+ import { d as se } from "./messages-CO299wPN.js";
6
+ import { MdOutlineModeEdit as C, MdInfoOutline as K, MdInput as ie, MdDeleteOutline as I, MdCheckCircle as fe, MdPeople as ce, MdSchedule as de, MdWebhook as te, MdNotifications as $, MdSms as me, MdEmail as pe, MdContentCopy as ge, MdHttp as ye, MdCallSplit as ue, MdAccountTree as Ee, MdOpenInNew as be } from "react-icons/md";
7
+ import { FaCheckCircle as xe, FaTimesCircle as he } from "react-icons/fa";
8
+ import { FiFilter as Ne } from "react-icons/fi";
9
+ import { a as L, H as ke, B as _ } from "./canvasTokens-CAD6G24b.js";
10
+ const ve = le({
11
+ onEditNode: () => {
12
+ },
13
+ onDeleteNode: () => {
14
+ },
15
+ onAddStep: () => {
16
+ },
17
+ onClickAddTrigger: () => {
18
+ },
19
+ messages: se,
20
+ nodeRegistry: null,
21
+ nodeBody: "full"
22
+ }), w = () => re(ve), we = () => /* @__PURE__ */ e.createElement("div", { style: { width: 350, display: "flex", justifyContent: "center" } }, /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0, left: "50%" } }), /* @__PURE__ */ e.createElement("div", { style: { padding: "8px 28px", borderRadius: 999, background: "#f5f5f5", border: "1.5px solid #bdbdbd", fontSize: 13, fontWeight: 500, color: "#424242", userSelect: "none" } }, "Start")), Se = () => /* @__PURE__ */ e.createElement("div", { style: { width: 350, display: "flex", justifyContent: "center" } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0, left: "50%" } }), /* @__PURE__ */ e.createElement("div", { style: { padding: "8px 28px", borderRadius: 999, background: "#f5f5f5", border: "1.5px solid #bdbdbd", fontSize: 13, fontWeight: 500, color: "#424242", userSelect: "none" } }, "End")), Ce = () => {
23
+ const { onClickAddTrigger: t, messages: l } = w();
24
+ return /* @__PURE__ */ e.createElement("div", { style: { width: 350, display: "flex", justifyContent: "center" } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0, left: "50%" } }), /* @__PURE__ */ e.createElement(A, { title: l.addTriggerTooltip, placement: "top", arrow: !0 }, /* @__PURE__ */ e.createElement(
25
+ "div",
26
+ {
27
+ onClick: t,
28
+ role: "button",
29
+ tabIndex: 0,
30
+ onKeyDown: (s) => {
31
+ s.key === "Enter" && t();
32
+ },
33
+ style: { padding: "10px 24px", borderRadius: 8, border: "1.5px dashed #d0d0d0", background: "#fff", cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", gap: 8 }
34
+ },
35
+ /* @__PURE__ */ e.createElement(ae, { size: 16 }),
36
+ /* @__PURE__ */ e.createElement("span", { className: "ff-text-black", style: { fontSize: 13 }, "data-testid": "add-trigger-btn-text" }, l.addTriggerButton)
37
+ )), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0, left: "50%" } }));
38
+ }, Te = ({ id: t }) => {
39
+ const { onAddStep: l } = w();
40
+ return /* @__PURE__ */ e.createElement(
41
+ "div",
42
+ {
43
+ onClick: () => l(t),
44
+ role: "button",
45
+ tabIndex: 0,
46
+ onKeyDown: (s) => {
47
+ s.key === "Enter" && l(t);
48
+ },
49
+ style: { width: 28, height: 28, borderRadius: "50%", border: "1.5px solid #9e9e9e", background: "#fff", display: "flex", alignItems: "center", justifyContent: "center", cursor: "pointer", fontSize: 18, color: "#757575", lineHeight: 1, userSelect: "none" }
50
+ },
51
+ /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }),
52
+ "+",
53
+ /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } })
54
+ );
55
+ };
56
+ function ze(t) {
57
+ return t ? t === "END_USER_CREATION" ? "New User Registration" : t === "END_USER_UPDATION" ? "On User Update" : t.replace(/[_-]+/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()) : "";
58
+ }
59
+ function Ie(t) {
60
+ const l = typeof t == "string" ? t : t.value ?? "";
61
+ return l === "SIGNUP_FLOW" ? "User Self-Registration" : l === "ADMIN_CREATION_FLOW" ? "Create User via Admin Portal" : l === "SHEDULAR" ? "Scheduler" : typeof t != "string" && t.label ? t.label : l.replace(/[_-]+/g, " ").replace(/\b\w/g, (s) => s.toUpperCase());
62
+ }
63
+ const Pe = ({ data: t }) => {
64
+ const { onClickAddTrigger: l } = w(), {
65
+ type: s,
66
+ eventType: d,
67
+ sources: a,
68
+ label: r,
69
+ source: m,
70
+ previewWorkflow: n,
71
+ executionStatus: o,
72
+ infoText: f = "This node decides the flow trigger type and configuration."
73
+ } = t ?? {}, g = (u) => {
74
+ u == null || u.stopPropagation(), l();
75
+ }, p = Array.isArray(a) && a.length > 0, E = !!(r || m), c = s === "scheduler" ? "Scheduler Trigger" : s === "event" || p || E ? "Event Trigger Source" : "Select Trigger", i = s === "scheduler" ? /* @__PURE__ */ e.createElement("span", null, "Scheduler to be configured") : s === "event" || p ? /* @__PURE__ */ e.createElement("div", null, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement("span", { style: { fontWeight: 600 } }, ze(d)), /* @__PURE__ */ e.createElement("span", { className: "ff-ms-2 ff-text-muted", style: { fontSize: 12 } }, "via")), /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-flex-wrap ff-mt-2", style: { gap: 4 } }, p ? a.map((u, k) => /* @__PURE__ */ e.createElement(
76
+ j,
77
+ {
78
+ key: k,
79
+ label: Ie(u),
80
+ variant: "outlined",
81
+ size: "small",
82
+ className: "ff-text-dark"
83
+ }
84
+ )) : /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted", style: { fontSize: 12 } }, "No source selected"))) : E ? /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-flex-wrap ff-align-items-center", style: { gap: 6 } }, r && /* @__PURE__ */ e.createElement("span", { style: { fontWeight: 600 } }, r), m && /* @__PURE__ */ e.createElement(j, { label: m, variant: "outlined", size: "small" })) : /* @__PURE__ */ e.createElement(
85
+ "span",
86
+ {
87
+ role: "button",
88
+ tabIndex: 0,
89
+ onClick: g,
90
+ onKeyDown: (u) => {
91
+ (u.key === "Enter" || u.key === " ") && g(u);
92
+ },
93
+ style: { cursor: "pointer", color: "#1e88e5" }
94
+ },
95
+ "Click to select a trigger to start your workflow"
96
+ ), N = o ? /* @__PURE__ */ e.createElement(e.Fragment, null, o.status === "success" && /* @__PURE__ */ e.createElement(xe, { size: 16, color: "#1DBF60", style: { marginRight: 8 } }), o.status === "failed" && /* @__PURE__ */ e.createElement(he, { size: 16, color: "#f44336", style: { marginRight: 8 } })) : /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center" }, !n && /* @__PURE__ */ e.createElement(
97
+ "div",
98
+ {
99
+ role: "button",
100
+ tabIndex: 0,
101
+ onClick: g,
102
+ onKeyDown: (u) => {
103
+ (u.key === "Enter" || u.key === " ") && g(u);
104
+ },
105
+ className: "ff-me-2",
106
+ style: { cursor: "pointer", color: "#212121" },
107
+ "aria-label": "Edit trigger"
108
+ },
109
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
110
+ ), /* @__PURE__ */ e.createElement(A, { title: /* @__PURE__ */ e.createElement("div", null, f), placement: "right", arrow: !0 }, /* @__PURE__ */ e.createElement("span", null, /* @__PURE__ */ e.createElement(K, { color: "gray", size: 16 }))));
111
+ return /* @__PURE__ */ e.createElement("div", { style: { width: 350 } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #a5d6a7", borderRadius: 8, background: "#fff", overflow: "hidden" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center", style: { padding: "10px 6px" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement(
112
+ "div",
113
+ {
114
+ style: {
115
+ width: 28,
116
+ height: 28,
117
+ borderRadius: 6,
118
+ background: "rgba(76,175,80,0.1)",
119
+ display: "flex",
120
+ alignItems: "center",
121
+ justifyContent: "center",
122
+ flexShrink: 0
123
+ }
124
+ },
125
+ /* @__PURE__ */ e.createElement(ie, { size: 16, color: "#388e3c" })
126
+ ), /* @__PURE__ */ e.createElement("span", { style: { fontSize: 14, fontWeight: 600, color: "#212121" } }, c)), /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center" }, N)), /* @__PURE__ */ e.createElement(
127
+ "div",
128
+ {
129
+ style: {
130
+ background: "#f5f5f5",
131
+ fontSize: 12,
132
+ color: "#212121",
133
+ padding: "10px 6px",
134
+ margin: "0 12px 12px",
135
+ borderRadius: 6
136
+ }
137
+ },
138
+ i
139
+ )), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 }, id: "1" }));
140
+ }, ne = ({ rail: t, cardWidth: l }) => {
141
+ const s = l / 2;
142
+ l / 2 + t.indent;
143
+ const d = "var(--ff-edge-color, #b0bec5)";
144
+ return /* @__PURE__ */ e.createElement(
145
+ "svg",
146
+ {
147
+ width: l + t.indent + 200,
148
+ height: t.height,
149
+ style: { position: "absolute", left: 0, top: "100%", pointerEvents: "none", overflow: "visible" }
150
+ },
151
+ /* @__PURE__ */ e.createElement("line", { x1: s, y1: 0, x2: s, y2: t.height, stroke: d, strokeWidth: 1.5 }),
152
+ t.branches.map((a, r) => {
153
+ const m = a.y;
154
+ return /* @__PURE__ */ e.createElement("g", { key: r, transform: `translate(0, ${m})` }, /* @__PURE__ */ e.createElement(
155
+ "rect",
156
+ {
157
+ x: s - 5,
158
+ y: -5,
159
+ width: 10,
160
+ height: 10,
161
+ fill: "#fff",
162
+ stroke: d,
163
+ strokeWidth: 1.5,
164
+ transform: `rotate(45, ${s}, 0)`
165
+ }
166
+ ), /* @__PURE__ */ e.createElement(
167
+ "text",
168
+ {
169
+ x: s + 14,
170
+ y: 4,
171
+ fontSize: 12,
172
+ fontWeight: 500,
173
+ fill: "var(--ff-text, #212121)",
174
+ style: { fontFamily: "sans-serif" }
175
+ },
176
+ a.label
177
+ ));
178
+ })
179
+ );
180
+ }, De = ({ id: t, data: l }) => {
181
+ const { onEditNode: s, onDeleteNode: d } = w(), { conditions: a = [], infoText: r = "Filter conditions applied to workflow data", _branchRail: m } = l;
182
+ return /* @__PURE__ */ e.createElement("div", { style: { width: 350, position: "relative" } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #ffe082", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-mb-2 ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded", style: { width: 25, height: 25, background: "rgba(255,160,0,0.1)" } }, /* @__PURE__ */ e.createElement(Ne, { className: "ff-text-warning", size: 16 })), /* @__PURE__ */ e.createElement("span", { className: "ff-ms-2 ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, "Filter")), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
183
+ "div",
184
+ {
185
+ role: "button",
186
+ tabIndex: 0,
187
+ onClick: (n) => {
188
+ n.stopPropagation(), s(t);
189
+ },
190
+ onKeyDown: (n) => {
191
+ n.key === "Enter" && (n.stopPropagation(), s(t));
192
+ }
193
+ },
194
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
195
+ ), /* @__PURE__ */ e.createElement(
196
+ "div",
197
+ {
198
+ className: "ff-ms-2",
199
+ role: "button",
200
+ tabIndex: 0,
201
+ onClick: (n) => {
202
+ n.stopPropagation(), d(t);
203
+ },
204
+ onKeyDown: (n) => {
205
+ n.key === "Enter" && (n.stopPropagation(), d(t));
206
+ }
207
+ },
208
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
209
+ ), /* @__PURE__ */ e.createElement(A, { title: r, placement: "right", arrow: !0 }, /* @__PURE__ */ e.createElement("div", { className: "ff-ms-2" }, /* @__PURE__ */ e.createElement(K, { color: "gray", size: 16 }))))), /* @__PURE__ */ e.createElement("div", { className: "ff-p-2 ff-mx-2 ff-mb-2 ff-rounded", style: { background: "#fafafa", fontSize: 12 } }, a.length === 0 ? /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, "No conditions configured") : a.map((n, o) => /* @__PURE__ */ e.createElement("div", { key: o, className: "ff-d-flex ff-align-items-center ff-mb-1" }, /* @__PURE__ */ e.createElement("p", { className: "ff-m-0 ff-fw-bold ff-me-1 ff-text-truncate", style: { maxWidth: 100 }, title: n.field }, n.field), /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, n.operator), /* @__PURE__ */ e.createElement("p", { className: "ff-text-dark ff-text-truncate ff-mx-1 ff-m-0", title: n.value }, n.value), o < a.length - 1 && /* @__PURE__ */ e.createElement("p", { className: "ff-bg-primary ff-text-white ff-fw-bold ff-ms-1 ff-px-1 ff-rounded-1 ff-m-0" }, n.logicalOperator))))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }), m && /* @__PURE__ */ e.createElement(ne, { rail: m, cardWidth: 350 }));
210
+ }, Ae = ({ id: t, data: l }) => {
211
+ const { onEditNode: s, onDeleteNode: d, nodeRegistry: a, nodeBody: r = "full" } = w(), { title: m = "Task", descriptorType: n, groupBlocks: o, groups: f, roles: g, groupId: p, roleId: E, infoText: c = "" } = l, i = n ? a == null ? void 0 : a.forType(n) : void 0, N = i == null ? void 0 : i.icon, u = (y) => y == null ? "" : typeof y == "string" ? y : typeof y == "object" && "label" in y ? String(y.label) : String(y), k = (y) => Array.isArray(y) ? y.map(u).filter(Boolean) : y != null && y !== "" ? [u(y)] : [], h = (o == null ? void 0 : o.flatMap((y) => y.groups ?? [])) ?? [...k(f), ...k(g), ...k(p), ...k(E)], z = h.length > 0;
212
+ return /* @__PURE__ */ e.createElement("div", { style: { width: 350 } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #b0bec5", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, N && /* @__PURE__ */ e.createElement("div", { style: { display: "flex", alignItems: "center" } }, N), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, m)), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
213
+ "div",
214
+ {
215
+ role: "button",
216
+ tabIndex: 0,
217
+ onClick: (y) => {
218
+ y.stopPropagation(), s(t);
219
+ },
220
+ onKeyDown: (y) => {
221
+ y.key === "Enter" && (y.stopPropagation(), s(t));
222
+ }
223
+ },
224
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
225
+ ), /* @__PURE__ */ e.createElement(
226
+ "div",
227
+ {
228
+ className: "ff-ms-2",
229
+ role: "button",
230
+ tabIndex: 0,
231
+ onClick: (y) => {
232
+ y.stopPropagation(), d(t);
233
+ },
234
+ onKeyDown: (y) => {
235
+ y.key === "Enter" && (y.stopPropagation(), d(t));
236
+ }
237
+ },
238
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
239
+ ), c && /* @__PURE__ */ e.createElement(A, { title: c, placement: "right", arrow: !0 }, /* @__PURE__ */ e.createElement("div", { className: "ff-ms-2" }, /* @__PURE__ */ e.createElement(K, { color: "gray", size: 16 }))))), r !== "title-only" && /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: "#fafafa", fontSize: 12 } }, i != null && i.renderNode ? i.renderNode(l) : z ? /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-flex-wrap ff-gap-1" }, h.map((y, T) => /* @__PURE__ */ e.createElement("span", { key: T, className: "ff-badge ff-bg-dark ff-text-white ff-py-1 ff-px-2 ff-rounded", style: { fontSize: 11 }, title: y }, y))) : /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, "Not configured"))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
240
+ }, H = 5, Le = ({ id: t, data: l }) => {
241
+ const { onEditNode: s, onDeleteNode: d } = w(), { approvalData: a, isPreview: r = !1, _branchRail: m } = l, n = (a == null ? void 0 : a.policy) ?? {}, o = n.stages ?? [], f = o.length, g = o.slice(0, H), p = f - H, E = n.name ?? n.policyName ?? "Untitled Policy";
242
+ return /* @__PURE__ */ e.createElement("div", { style: { width: 350, position: "relative" } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #ffe082", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-mb-2 ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded", style: { width: 25, height: 25, background: "rgba(251,192,45,0.2)" } }, /* @__PURE__ */ e.createElement(fe, { style: { color: "#FBC02D" }, size: 16 })), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, "Approval Policy")), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, !r && /* @__PURE__ */ e.createElement(
243
+ "div",
244
+ {
245
+ role: "button",
246
+ tabIndex: 0,
247
+ style: { cursor: "pointer" },
248
+ onClick: (c) => {
249
+ c.stopPropagation(), s(t);
250
+ },
251
+ onKeyDown: (c) => {
252
+ c.key === "Enter" && (c.stopPropagation(), s(t));
253
+ }
254
+ },
255
+ /* @__PURE__ */ e.createElement(C, { size: 16, className: "ff-text-secondary" })
256
+ ), !r && /* @__PURE__ */ e.createElement(
257
+ "div",
258
+ {
259
+ className: "ff-ms-2",
260
+ role: "button",
261
+ tabIndex: 0,
262
+ style: { cursor: "pointer" },
263
+ onClick: (c) => {
264
+ c.stopPropagation(), d(t);
265
+ },
266
+ onKeyDown: (c) => {
267
+ c.key === "Enter" && (c.stopPropagation(), d(t));
268
+ }
269
+ },
270
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
271
+ ), /* @__PURE__ */ e.createElement(A, { title: "This approval policy determines who must approve a request before the workflow continues.", arrow: !0, placement: "right" }, /* @__PURE__ */ e.createElement("span", { className: "ff-ms-2 ff-d-inline-flex" }, /* @__PURE__ */ e.createElement(K, { color: "gray", size: 16 }))))), /* @__PURE__ */ e.createElement("div", { className: "ff-p-2 ff-rounded ff-mx-2 ff-mb-2", style: { background: "#FCFCFC" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-start ff-align-items-center ff-mb-2" }, /* @__PURE__ */ e.createElement("h6", { className: "ff-text-dark ff-mb-0 ff-text-truncate ff-flex-grow-1 ff-me-2", style: { fontSize: 13, fontWeight: 700 }, title: E }, E), /* @__PURE__ */ e.createElement("span", { className: "ff-badge ff-rounded-pill ff-px-2 ff-py-1 ff-flex-shrink-0", style: { background: "#FFF9C4", color: "#616161", fontSize: 11, fontWeight: 600 } }, f, " Stage", f !== 1 ? "s" : "")), o.length > 0 ? /* @__PURE__ */ e.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 8 } }, g.map((c, i) => {
272
+ var T, P, S;
273
+ const N = ((T = c.stageName) == null ? void 0 : T.trim()) || `Stage ${i + 1}`, u = Array.isArray(c.userIds) ? c.userIds.length : 0, k = ((P = c.groupName) == null ? void 0 : P.trim()) ?? "", h = ((S = c.roleName) == null ? void 0 : S.trim()) ?? "", z = u > 0 || k || h;
274
+ let y = "Not configured";
275
+ return k ? y = `Group: ${k}` : h ? y = `Role: ${h}` : u > 0 && (y = `${u} approver${u !== 1 ? "s" : ""}`), /* @__PURE__ */ e.createElement("div", { key: i, className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-rounded-circle ff-d-flex ff-align-items-center ff-justify-content-center ff-flex-shrink-0", style: { width: 28, height: 28, background: "#FFF9C4", color: "#5D4037", fontSize: 12, fontWeight: 700 } }, i + 1), /* @__PURE__ */ e.createElement("div", { className: "ff-flex-grow-1 ff-rounded ff-p-2 ff-d-flex ff-justify-content-between ff-align-items-center ff-border", style: { background: "#FFFDE7", borderColor: "#FEE79A" } }, /* @__PURE__ */ e.createElement("span", { style: { fontSize: 12, fontWeight: 700, color: "#212121" } }, N), /* @__PURE__ */ e.createElement("span", { className: `ff-d-flex ff-align-items-center ff-gap-1 ${z ? "ff-text-dark" : "ff-text-muted"}`, style: { fontSize: 12 } }, /* @__PURE__ */ e.createElement(ce, { size: 16, className: "ff-flex-shrink-0", style: { color: z ? "#5D4037" : "#9E9E9E" } }), y)));
276
+ }), p > 0 && /* @__PURE__ */ e.createElement(
277
+ "div",
278
+ {
279
+ className: "ff-text-center ff-fw-bold ff-py-2 ff-border ff-rounded",
280
+ style: { fontSize: 11, color: "#1976d2", borderColor: "#FEE79A", background: "#FFFDE7", borderStyle: "dashed", cursor: r ? "default" : "pointer" },
281
+ role: r ? void 0 : "button",
282
+ tabIndex: r ? void 0 : 0,
283
+ onClick: (c) => {
284
+ r || (c.stopPropagation(), s(t));
285
+ },
286
+ onKeyDown: (c) => {
287
+ r || c.key !== "Enter" || (c.stopPropagation(), s(t));
288
+ }
289
+ },
290
+ "+ ",
291
+ p,
292
+ " More Stage",
293
+ p > 1 ? "s" : ""
294
+ )) : /* @__PURE__ */ e.createElement("div", { className: "ff-text-center ff-py-3 ff-rounded ff-border", style: { fontSize: 12, color: "#9e9e9e", background: "#FFFDE7", borderColor: "#FEE79A", borderStyle: "dashed" } }, "No stages configured"))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }), m && /* @__PURE__ */ e.createElement(ne, { rail: m, cardWidth: 350 }));
295
+ }, Fe = ({ id: t, data: l }) => {
296
+ const { onEditNode: s, onDeleteNode: d } = w(), { duration: a, unit: r } = l, m = a != null && r, n = m ? `Wait ${a} ${r}` : "Not configured";
297
+ return /* @__PURE__ */ e.createElement("div", { style: { width: 350 } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #b0bec5", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded", style: { width: 25, height: 25, background: "rgba(33,150,243,0.1)" } }, /* @__PURE__ */ e.createElement(de, { size: 16, color: "#1976d2" })), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, "Delay")), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
298
+ "div",
299
+ {
300
+ role: "button",
301
+ tabIndex: 0,
302
+ onClick: (o) => {
303
+ o.stopPropagation(), s(t);
304
+ },
305
+ onKeyDown: (o) => {
306
+ o.key === "Enter" && (o.stopPropagation(), s(t));
307
+ }
308
+ },
309
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
310
+ ), /* @__PURE__ */ e.createElement(
311
+ "div",
312
+ {
313
+ className: "ff-ms-2",
314
+ role: "button",
315
+ tabIndex: 0,
316
+ onClick: (o) => {
317
+ o.stopPropagation(), d(t);
318
+ },
319
+ onKeyDown: (o) => {
320
+ o.key === "Enter" && (o.stopPropagation(), d(t));
321
+ }
322
+ },
323
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
324
+ ))), /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: "#fafafa", fontSize: 12 } }, /* @__PURE__ */ e.createElement("span", { className: m ? "ff-text-dark ff-fw-medium" : "ff-text-muted" }, n))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
325
+ }, O = {
326
+ email: { label: "Email", bg: "#e3f2fd", color: "#1565c0", iconType: pe },
327
+ slack: { label: "Slack", bg: "#e8f5e9", color: "#2e7d32", iconType: $ },
328
+ teams: { label: "MS Teams", bg: "#ede7f6", color: "#4527a0", iconType: $ },
329
+ sms: { label: "SMS", bg: "#fce4ec", color: "#880e4f", iconType: me },
330
+ "in-app": { label: "In-App", bg: "#fff3e0", color: "#e65100", iconType: $ },
331
+ webhook: { label: "Webhook", bg: "#f3e5f5", color: "#6a1b9a", iconType: te }
332
+ }, We = {
333
+ label: "Notification",
334
+ bg: "rgba(156,39,176,0.1)",
335
+ color: "#7b1fa2",
336
+ iconType: $
337
+ };
338
+ function Re(t) {
339
+ var l;
340
+ switch (t.channel) {
341
+ case "email":
342
+ return ((l = t.emailTo) == null ? void 0 : l.join(", ")) ?? t.recipient ?? null;
343
+ case "slack":
344
+ return t.slackChannel ?? null;
345
+ case "teams":
346
+ return t.teamsMessage ? "Message configured" : null;
347
+ case "sms":
348
+ return t.smsTo ?? null;
349
+ case "in-app":
350
+ return t.inAppRecipient ?? null;
351
+ case "webhook":
352
+ return t.webhookUrl ?? null;
353
+ default:
354
+ return t.recipient ?? null;
355
+ }
356
+ }
357
+ function $e(t) {
358
+ switch (t.channel) {
359
+ case "email":
360
+ return t.emailSubject ?? t.subject ?? null;
361
+ case "slack": {
362
+ const l = t.slackMessage;
363
+ return l ? l.length > 60 ? `${l.slice(0, 60)}…` : l : null;
364
+ }
365
+ case "in-app":
366
+ return t.inAppTitle ?? null;
367
+ default:
368
+ return t.subject ?? null;
369
+ }
370
+ }
371
+ const Be = ({ id: t, data: l }) => {
372
+ const { onEditNode: s, onDeleteNode: d } = w(), a = l, r = a.channel && O[a.channel] ? O[a.channel] : We, m = Re(a), n = $e(a), o = !!(a.channel && m), f = r.iconType;
373
+ return /* @__PURE__ */ e.createElement("div", { style: { width: L } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #b0bec5", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-justify-content-center ff-rounded", style: { width: 25, height: 25, background: r.bg } }, /* @__PURE__ */ e.createElement(f, { size: 16, color: r.color })), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, a.channel ? `${r.label} Notification` : "Notification")), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
374
+ "div",
375
+ {
376
+ role: "button",
377
+ tabIndex: 0,
378
+ onClick: (g) => {
379
+ g.stopPropagation(), s(t);
380
+ },
381
+ onKeyDown: (g) => {
382
+ (g.key === "Enter" || g.key === " ") && (g.stopPropagation(), s(t));
383
+ }
384
+ },
385
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
386
+ ), /* @__PURE__ */ e.createElement(
387
+ "div",
388
+ {
389
+ className: "ff-ms-2",
390
+ role: "button",
391
+ tabIndex: 0,
392
+ onClick: (g) => {
393
+ g.stopPropagation(), d(t);
394
+ },
395
+ onKeyDown: (g) => {
396
+ (g.key === "Enter" || g.key === " ") && (g.stopPropagation(), d(t));
397
+ }
398
+ },
399
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
400
+ ))), /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: "#fafafa", fontSize: 12 } }, o ? /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-flex-column ff-gap-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("span", { className: "ff-px-2 ff-py-1 ff-rounded", style: { fontSize: 10, background: r.bg, color: r.color, fontWeight: 600, flexShrink: 0 } }, r.label), /* @__PURE__ */ e.createElement("span", { className: "ff-text-dark ff-text-truncate", style: { maxWidth: 220 } }, m)), n && /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted ff-text-truncate", style: { maxWidth: 280 } }, n)) : /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, "Not configured"))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
401
+ }, U = {
402
+ "api-key": "API Key",
403
+ hmac: "HMAC"
404
+ }, Me = ({ data: t }) => {
405
+ const { onClickAddTrigger: l } = w(), { label: s = "Webhook Trigger", endpointUrl: d, authMethod: a, source: r } = t, m = (o) => {
406
+ o.stopPropagation(), l();
407
+ }, n = (o) => {
408
+ o.stopPropagation(), d && navigator.clipboard.writeText(d).catch(() => {
409
+ });
410
+ };
411
+ return /* @__PURE__ */ e.createElement("div", { style: { width: L } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #90caf9", borderRadius: 8, background: "#fff", overflow: "hidden" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-2" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { style: { width: 28, height: 28, borderRadius: 6, background: "rgba(33,150,243,0.1)", display: "flex", alignItems: "center", justifyContent: "center", flexShrink: 0 } }, /* @__PURE__ */ e.createElement(te, { size: 16, color: "#1565c0" })), /* @__PURE__ */ e.createElement("span", { style: { fontSize: 13, fontWeight: 600, color: "#212121" } }, "Webhook Trigger")), /* @__PURE__ */ e.createElement(
412
+ "div",
413
+ {
414
+ role: "button",
415
+ tabIndex: 0,
416
+ onClick: m,
417
+ onKeyDown: (o) => {
418
+ (o.key === "Enter" || o.key === " ") && m(o);
419
+ },
420
+ className: "ff-d-flex ff-align-items-center",
421
+ style: { paddingRight: 4, cursor: "pointer" }
422
+ },
423
+ /* @__PURE__ */ e.createElement(C, { size: 16, color: "#555" })
424
+ )), /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: "#e3f2fd", border: "1px solid #90caf9" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-flex-wrap ff-gap-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("span", { style: { fontSize: 12, color: "#1565c0", fontWeight: 600 } }, s), r && /* @__PURE__ */ e.createElement("span", { className: "ff-px-2 ff-py-1 ff-rounded", style: { fontSize: 11, background: "#fff", border: "1px solid #90caf9", color: "#1565c0" } }, r), a && a !== "none" && U[a] && /* @__PURE__ */ e.createElement("span", { className: "ff-px-2 ff-py-1 ff-rounded", style: { fontSize: 10, background: "#1565c0", color: "#fff", fontWeight: 600 } }, U[a])), d && /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-1", style: { marginTop: 4 } }, /* @__PURE__ */ e.createElement("span", { style: { fontSize: 10, color: "#1565c0", fontFamily: "monospace", flex: 1, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, d), /* @__PURE__ */ e.createElement(A, { title: "Copy URL", placement: "top", arrow: !0 }, /* @__PURE__ */ e.createElement(
425
+ "div",
426
+ {
427
+ role: "button",
428
+ tabIndex: 0,
429
+ onClick: n,
430
+ onKeyDown: (o) => {
431
+ (o.key === "Enter" || o.key === " ") && n(o);
432
+ },
433
+ style: { cursor: "pointer", flexShrink: 0 }
434
+ },
435
+ /* @__PURE__ */ e.createElement(ge, { size: 12, color: "#1565c0" })
436
+ ))))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
437
+ }, Ke = ({ id: t, data: l }) => {
438
+ var E;
439
+ const { onEditNode: s, onDeleteNode: d, nodeRegistry: a } = w(), { method: r, url: m, descriptorType: n } = l, o = n ? (E = a == null ? void 0 : a.forType(n)) == null ? void 0 : E.icon : /* @__PURE__ */ e.createElement(ye, { size: 16, color: "#546e7a" }), f = !!(r && m), g = (r == null ? void 0 : r.toUpperCase()) ?? "", p = ke[g] ?? null;
440
+ return /* @__PURE__ */ e.createElement("div", { style: { width: L } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #b0bec5", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { style: { width: 25, height: 25, display: "flex", alignItems: "center", justifyContent: "center" } }, o), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, "REST API Call")), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
441
+ "div",
442
+ {
443
+ role: "button",
444
+ tabIndex: 0,
445
+ onClick: (c) => {
446
+ c.stopPropagation(), s(t);
447
+ },
448
+ onKeyDown: (c) => {
449
+ (c.key === "Enter" || c.key === " ") && (c.stopPropagation(), s(t));
450
+ }
451
+ },
452
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
453
+ ), /* @__PURE__ */ e.createElement(
454
+ "div",
455
+ {
456
+ className: "ff-ms-2",
457
+ role: "button",
458
+ tabIndex: 0,
459
+ onClick: (c) => {
460
+ c.stopPropagation(), d(t);
461
+ },
462
+ onKeyDown: (c) => {
463
+ (c.key === "Enter" || c.key === " ") && (c.stopPropagation(), d(t));
464
+ }
465
+ },
466
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
467
+ ))), /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: "#fafafa", fontSize: 12 } }, f ? /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, p && /* @__PURE__ */ e.createElement("span", { style: { fontSize: 10, fontWeight: 700, padding: "2px 6px", borderRadius: 4, background: p.bg, color: p.color, flexShrink: 0 } }, g), /* @__PURE__ */ e.createElement("span", { className: "ff-text-dark ff-text-truncate", style: { fontFamily: "monospace", fontSize: 11 }, title: m }, m)) : /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, "Not configured"))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
468
+ }, je = {
469
+ eq: "=",
470
+ neq: "≠",
471
+ gt: ">",
472
+ gte: "≥",
473
+ lt: "<",
474
+ lte: "≤",
475
+ contains: "contains",
476
+ startsWith: "starts with",
477
+ endsWith: "ends with",
478
+ isEmpty: "is empty",
479
+ isNotEmpty: "is not empty"
480
+ }, _e = ({ id: t, data: l }) => {
481
+ const { onEditNode: s, onDeleteNode: d } = w(), { title: a = "Condition Branch", branchConfigs: r = [], defaultBranch: m } = l, n = r.length > 0;
482
+ return /* @__PURE__ */ e.createElement("div", { style: { width: L } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #b39ddb", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { style: { width: 25, height: 25, borderRadius: 6, background: "rgba(103,58,183,0.1)", display: "flex", alignItems: "center", justifyContent: "center" } }, /* @__PURE__ */ e.createElement(ue, { size: 16, color: "#512da8" })), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, a)), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
483
+ "div",
484
+ {
485
+ role: "button",
486
+ tabIndex: 0,
487
+ onClick: (o) => {
488
+ o.stopPropagation(), s(t);
489
+ },
490
+ onKeyDown: (o) => {
491
+ (o.key === "Enter" || o.key === " ") && (o.stopPropagation(), s(t));
492
+ }
493
+ },
494
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
495
+ ), /* @__PURE__ */ e.createElement(
496
+ "div",
497
+ {
498
+ className: "ff-ms-2",
499
+ role: "button",
500
+ tabIndex: 0,
501
+ onClick: (o) => {
502
+ o.stopPropagation(), d(t);
503
+ },
504
+ onKeyDown: (o) => {
505
+ (o.key === "Enter" || o.key === " ") && (o.stopPropagation(), d(t));
506
+ }
507
+ },
508
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
509
+ ))), /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: "#fafafa", fontSize: 12 } }, n ? /* @__PURE__ */ e.createElement("div", { style: { display: "flex", flexDirection: "column", gap: 4 } }, r.map((o, f) => {
510
+ var c, i;
511
+ const g = _[f % _.length], p = (c = o.conditions) == null ? void 0 : c[0], E = (((i = o.conditions) == null ? void 0 : i.length) ?? 0) - 1;
512
+ return /* @__PURE__ */ e.createElement("div", { key: o.key, style: { display: "flex", alignItems: "center", gap: 6 } }, /* @__PURE__ */ e.createElement("span", { style: { fontSize: 10, fontWeight: 600, padding: "2px 7px", borderRadius: 10, background: g.bg, color: g.color, flexShrink: 0 } }, o.label || o.key), p ? /* @__PURE__ */ e.createElement("span", { style: { fontSize: 11, color: "#616161", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" } }, p.field, " ", je[p.operator] ?? p.operator, p.value ? ` ${p.value}` : "", E > 0 ? ` +${E} more` : "") : /* @__PURE__ */ e.createElement("span", { style: { fontSize: 11, color: "#9e9e9e" } }, "No conditions yet"));
513
+ }), m && /* @__PURE__ */ e.createElement("div", { style: { display: "flex", alignItems: "center", gap: 6, marginTop: 2 } }, /* @__PURE__ */ e.createElement("span", { style: { fontSize: 10, fontWeight: 600, padding: "2px 7px", borderRadius: 10, background: "#f5f5f5", color: "#757575", flexShrink: 0 } }, "Default"), /* @__PURE__ */ e.createElement("span", { style: { fontSize: 11, color: "#9e9e9e" } }, "fallback path"))) : /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, "Not configured — click edit to add branches"))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
514
+ }, He = ({ id: t, data: l }) => {
515
+ var c;
516
+ const { onEditNode: s, onDeleteNode: d, nodeRegistry: a } = w(), { title: r = "Sub-Workflow", workflowId: m, workflowLabel: n, descriptorType: o, onPreview: f } = l, g = o ? (c = a == null ? void 0 : a.forType(o)) == null ? void 0 : c.icon : /* @__PURE__ */ e.createElement(Ee, { size: 16, color: "#00695c" }), p = !!m, E = (i) => {
517
+ i.stopPropagation(), m && f && f(m);
518
+ };
519
+ return /* @__PURE__ */ e.createElement("div", { style: { width: L } }, /* @__PURE__ */ e.createElement(b, { type: "target", position: x.Top, style: { opacity: 0 } }), /* @__PURE__ */ e.createElement("div", { style: { border: "1.5px solid #80cbc4", borderRadius: 8, background: "#fff" } }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-justify-content-between ff-align-items-center ff-mx-2 ff-mt-2 ff-mb-1" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-gap-2" }, /* @__PURE__ */ e.createElement("div", { style: { width: 25, height: 25, borderRadius: 6, background: "rgba(0,137,123,0.1)", display: "flex", alignItems: "center", justifyContent: "center" } }, g), /* @__PURE__ */ e.createElement("span", { className: "ff-fw-medium ff-text-dark", style: { fontSize: 14 } }, r)), /* @__PURE__ */ e.createElement("div", { className: "node-actions ff-d-flex ff-align-items-center" }, /* @__PURE__ */ e.createElement(
520
+ "div",
521
+ {
522
+ role: "button",
523
+ tabIndex: 0,
524
+ onClick: (i) => {
525
+ i.stopPropagation(), s(t);
526
+ },
527
+ onKeyDown: (i) => {
528
+ (i.key === "Enter" || i.key === " ") && (i.stopPropagation(), s(t));
529
+ }
530
+ },
531
+ /* @__PURE__ */ e.createElement(C, { size: 16 })
532
+ ), /* @__PURE__ */ e.createElement(
533
+ "div",
534
+ {
535
+ className: "ff-ms-2",
536
+ role: "button",
537
+ tabIndex: 0,
538
+ onClick: (i) => {
539
+ i.stopPropagation(), d(t);
540
+ },
541
+ onKeyDown: (i) => {
542
+ (i.key === "Enter" || i.key === " ") && (i.stopPropagation(), d(t));
543
+ }
544
+ },
545
+ /* @__PURE__ */ e.createElement(I, { color: "red", size: 16 })
546
+ ))), /* @__PURE__ */ e.createElement("div", { className: "ff-mx-2 ff-mb-2 ff-p-2 ff-rounded", style: { background: p ? "#e0f2f1" : "#fafafa", fontSize: 12, border: p ? "1px solid #b2dfdb" : "none" } }, p ? /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-align-items-center ff-justify-content-between" }, /* @__PURE__ */ e.createElement("div", { className: "ff-d-flex ff-flex-column ff-gap-1" }, /* @__PURE__ */ e.createElement("span", { style: { fontSize: 12, fontWeight: 600, color: "#00695c" } }, n || m), /* @__PURE__ */ e.createElement("span", { style: { fontSize: 10, color: "#80cbc4", fontFamily: "monospace" } }, "ID: ", m)), f && /* @__PURE__ */ e.createElement(
547
+ "div",
548
+ {
549
+ role: "button",
550
+ tabIndex: 0,
551
+ onClick: E,
552
+ onKeyDown: (i) => {
553
+ (i.key === "Enter" || i.key === " ") && E(i);
554
+ },
555
+ style: { cursor: "pointer", display: "flex", alignItems: "center", gap: 3, fontSize: 11, color: "#00897b" }
556
+ },
557
+ /* @__PURE__ */ e.createElement(be, { size: 13 }),
558
+ "Preview"
559
+ )) : /* @__PURE__ */ e.createElement("span", { className: "ff-text-muted" }, "Not configured — select a workflow"))), /* @__PURE__ */ e.createElement(b, { type: "source", position: x.Bottom, style: { opacity: 0 } }));
560
+ }, ot = {
561
+ startNode: we,
562
+ endNode: Se,
563
+ addTriggerNode: Ce,
564
+ addStepNode: Te,
565
+ triggerNode: Pe,
566
+ filterNode: De,
567
+ actionNode: Ae,
568
+ approvalNode: Le,
569
+ delayNode: Fe,
570
+ notificationNode: Be,
571
+ webhookTriggerNode: Me,
572
+ restApiNode: Ke,
573
+ conditionBranchNode: _e,
574
+ subWorkflowNode: He
575
+ }, Oe = 11.5, G = 2, F = 6, V = 40, q = 20, Z = 4, lt = ({
576
+ id: t,
577
+ sourceX: l,
578
+ sourceY: s,
579
+ targetX: d,
580
+ targetY: a,
581
+ sourcePosition: r,
582
+ targetPosition: m,
583
+ source: n,
584
+ target: o,
585
+ data: f
586
+ }) => {
587
+ const [g, p, E] = B({
588
+ sourceX: l,
589
+ sourceY: s,
590
+ targetX: d,
591
+ targetY: a
592
+ }), c = f == null ? void 0 : f.label, i = c === "Pass", N = i || c === "Fail", u = l + (d - l) / 3, k = s + (a - s) / 3, h = l + 2 * (d - l) / 3, z = s + 2 * (a - s) / 3, y = f == null ? void 0 : f.onAddStepClick, T = (D) => {
593
+ if (D.stopPropagation(), typeof y != "function") return;
594
+ const oe = {
595
+ edgeId: t,
596
+ nodeId: n,
597
+ sourceNodeId: n,
598
+ targetNodeId: o,
599
+ position: "between",
600
+ referenceNodeId: n,
601
+ referenceNodeType: f == null ? void 0 : f.referenceNodeType,
602
+ stepVisibility: f == null ? void 0 : f.stepVisibility
603
+ };
604
+ y(n, oe);
605
+ }, P = (D) => {
606
+ (D.key === "Enter" || D.key === " ") && (D.preventDefault(), T(D));
607
+ }, S = () => /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("g", { className: "plus-icon-container" }, /* @__PURE__ */ e.createElement("circle", { r: Oe, className: "edge-plus-circle" }), /* @__PURE__ */ e.createElement("line", { x1: 0, y1: -F, x2: 0, y2: F, strokeWidth: G, strokeLinecap: "round", className: "plus-line" }), /* @__PURE__ */ e.createElement("line", { x1: -F, y1: 0, x2: F, y2: 0, strokeWidth: G, strokeLinecap: "round", className: "plus-line" })), /* @__PURE__ */ e.createElement("g", { className: "edge-plus-tooltip", transform: "translate(18, 0)" }, /* @__PURE__ */ e.createElement("rect", { x: 0, y: -10, width: 65, height: 20, rx: 4, className: "tooltip-bg" }), /* @__PURE__ */ e.createElement("path", { d: "M0 -4 L-4 0 L0 4 Z", className: "tooltip-bg" }), /* @__PURE__ */ e.createElement("text", { x: 32, y: 0, textAnchor: "middle", dominantBaseline: "central", fill: "white", style: { fontSize: 10, fontWeight: 600, pointerEvents: "none" } }, "Add Step"))), v = y ? {
608
+ onClick: T,
609
+ onKeyDown: P,
610
+ role: "button",
611
+ tabIndex: 0,
612
+ style: { cursor: "pointer", pointerEvents: "all" }
613
+ } : {
614
+ style: { cursor: "default", pointerEvents: "all" }
615
+ };
616
+ return /* @__PURE__ */ e.createElement("g", { className: "edge-with-plus-wrapper" }, /* @__PURE__ */ e.createElement(M, { id: t, path: g }), N ? /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement("g", { transform: `translate(${u}, ${k})` }, /* @__PURE__ */ e.createElement("rect", { x: -V / 2, y: -q / 2, width: V, height: q, rx: Z, ry: Z, fill: i ? "#ADE6C5" : "#FDBFBF" }), /* @__PURE__ */ e.createElement("text", { textAnchor: "middle", dominantBaseline: "central", fill: i ? "#1DBF60" : "#C50000", style: { fontSize: 12, fontWeight: 500 } }, c)), /* @__PURE__ */ e.createElement("g", { className: "nodrag nopan edge-plus-svg", transform: `translate(${h}, ${z})`, "data-testid": "plus-node-icon", ...v }, /* @__PURE__ */ e.createElement(S, null))) : /* @__PURE__ */ e.createElement("g", { className: "nodrag nopan edge-plus-svg", transform: `translate(${p}, ${E})`, "data-testid": "plus-node-icon", ...v }, /* @__PURE__ */ e.createElement(S, null)));
617
+ }, Ue = 11.5, Y = 2, W = 6, rt = ({
618
+ id: t,
619
+ sourceX: l,
620
+ sourceY: s,
621
+ targetX: d,
622
+ targetY: a,
623
+ source: r,
624
+ target: m,
625
+ data: n
626
+ }) => {
627
+ const [o, f, g] = B({
628
+ sourceX: l,
629
+ sourceY: s,
630
+ targetX: d,
631
+ targetY: a
632
+ }), p = n == null ? void 0 : n.onAddStepClick, E = (i) => {
633
+ i.stopPropagation(), typeof p == "function" && p(r, {
634
+ edgeId: t,
635
+ nodeId: r,
636
+ sourceNodeId: r,
637
+ targetNodeId: m,
638
+ position: "between",
639
+ referenceNodeId: r,
640
+ referenceNodeType: n == null ? void 0 : n.referenceNodeType,
641
+ stepVisibility: n == null ? void 0 : n.stepVisibility,
642
+ filterId: n == null ? void 0 : n.filterId,
643
+ branch: n == null ? void 0 : n.branch
644
+ });
645
+ }, c = (i) => {
646
+ (i.key === "Enter" || i.key === " ") && (i.preventDefault(), E(i));
647
+ };
648
+ return /* @__PURE__ */ e.createElement("g", { className: "edge-with-plus-wrapper" }, /* @__PURE__ */ e.createElement(M, { id: t, path: o, style: { stroke: "#b0bec5" } }), /* @__PURE__ */ e.createElement(
649
+ "g",
650
+ {
651
+ className: "nodrag nopan edge-plus-svg",
652
+ transform: `translate(${f}, ${g})`,
653
+ style: {
654
+ cursor: p ? "pointer" : "default",
655
+ pointerEvents: "all",
656
+ outline: "none"
657
+ },
658
+ onClick: p ? E : void 0,
659
+ onKeyDown: p ? c : void 0,
660
+ role: p ? "button" : void 0,
661
+ tabIndex: p ? 0 : void 0,
662
+ "data-testid": "plus-node-icon"
663
+ },
664
+ /* @__PURE__ */ e.createElement("circle", { r: Ue, className: "edge-plus-circle" }),
665
+ /* @__PURE__ */ e.createElement(
666
+ "line",
667
+ {
668
+ x1: 0,
669
+ y1: -W,
670
+ x2: 0,
671
+ y2: W,
672
+ strokeWidth: Y,
673
+ strokeLinecap: "round",
674
+ className: "plus-line"
675
+ }
676
+ ),
677
+ /* @__PURE__ */ e.createElement(
678
+ "line",
679
+ {
680
+ x1: -W,
681
+ y1: 0,
682
+ x2: W,
683
+ y2: 0,
684
+ strokeWidth: Y,
685
+ strokeLinecap: "round",
686
+ className: "plus-line"
687
+ }
688
+ ),
689
+ /* @__PURE__ */ e.createElement("g", { className: "edge-plus-tooltip", transform: "translate(18, 0)" }, /* @__PURE__ */ e.createElement(
690
+ "rect",
691
+ {
692
+ x: 0,
693
+ y: -10,
694
+ width: 65,
695
+ height: 20,
696
+ rx: 4,
697
+ className: "tooltip-bg"
698
+ }
699
+ ), /* @__PURE__ */ e.createElement("path", { d: "M0 -4 L-4 0 L0 4 Z", className: "tooltip-bg" }), /* @__PURE__ */ e.createElement(
700
+ "text",
701
+ {
702
+ x: 32,
703
+ y: 0,
704
+ textAnchor: "middle",
705
+ dominantBaseline: "central",
706
+ fill: "white",
707
+ style: { fontSize: 10, fontWeight: 600, pointerEvents: "none" }
708
+ },
709
+ "Add Step"
710
+ ))
711
+ ));
712
+ }, at = ({ id: t, sourceX: l, sourceY: s, targetX: d, targetY: a }) => {
713
+ const [r] = B({ sourceX: l, sourceY: s, targetX: d, targetY: a });
714
+ return /* @__PURE__ */ e.createElement(M, { id: t, path: r, style: { stroke: "#b0bec5" } });
715
+ }, Ge = 11.5, J = 2, R = 6, Ve = -24, Q = 40, X = 20, ee = 4, st = ({
716
+ id: t,
717
+ sourceX: l,
718
+ sourceY: s,
719
+ targetX: d,
720
+ targetY: a,
721
+ source: r,
722
+ target: m,
723
+ data: n
724
+ }) => {
725
+ const [o, f, g] = B({ sourceX: l, sourceY: s, targetX: d, targetY: a }), p = n == null ? void 0 : n.label, E = p === "Pass", c = E || p === "Fail", i = n == null ? void 0 : n.onAddStepClick, N = (n == null ? void 0 : n.showPlus) !== !1 && !!i, u = (h) => {
726
+ h.stopPropagation(), typeof i == "function" && i(r, {
727
+ edgeId: t,
728
+ nodeId: r,
729
+ sourceNodeId: r,
730
+ targetNodeId: m,
731
+ position: "between",
732
+ referenceNodeId: r,
733
+ referenceNodeType: n == null ? void 0 : n.referenceNodeType,
734
+ stepVisibility: n == null ? void 0 : n.stepVisibility
735
+ });
736
+ }, k = (h) => {
737
+ (h.key === "Enter" || h.key === " ") && (h.preventDefault(), u(h));
738
+ };
739
+ return /* @__PURE__ */ e.createElement("g", { className: "edge-with-plus-wrapper" }, /* @__PURE__ */ e.createElement(M, { id: t, path: o, style: { stroke: "#b0bec5" } }), /* @__PURE__ */ e.createElement(
740
+ "g",
741
+ {
742
+ className: "nodrag nopan edge-plus-svg",
743
+ transform: `translate(${f}, ${g})`,
744
+ style: { cursor: i ? "pointer" : "default", pointerEvents: "all", outline: "none" },
745
+ onClick: i ? u : void 0,
746
+ onKeyDown: i ? k : void 0,
747
+ role: i ? "button" : void 0,
748
+ tabIndex: i ? 0 : void 0
749
+ },
750
+ c && /* @__PURE__ */ e.createElement("g", { transform: `translate(0, ${N ? Ve : 0})` }, /* @__PURE__ */ e.createElement(
751
+ "rect",
752
+ {
753
+ x: -Q / 2,
754
+ y: -X / 2,
755
+ width: Q,
756
+ height: X,
757
+ rx: ee,
758
+ ry: ee,
759
+ fill: E ? "#ADE6C5" : "#FDBFBF"
760
+ }
761
+ ), /* @__PURE__ */ e.createElement("text", { textAnchor: "middle", dominantBaseline: "central", fill: E ? "#1DBF60" : "#C50000", style: { fontSize: 12, fontWeight: 500 } }, p)),
762
+ N && /* @__PURE__ */ e.createElement("g", { className: "plus-icon-container" }, /* @__PURE__ */ e.createElement("circle", { r: Ge, className: "edge-plus-circle" }), /* @__PURE__ */ e.createElement("line", { x1: 0, y1: -R, x2: 0, y2: R, strokeWidth: J, strokeLinecap: "round", className: "plus-line" }), /* @__PURE__ */ e.createElement("line", { x1: -R, y1: 0, x2: R, y2: 0, strokeWidth: J, strokeLinecap: "round", className: "plus-line" })),
763
+ N && /* @__PURE__ */ e.createElement("g", { className: "edge-plus-tooltip", transform: "translate(22, 0)" }, /* @__PURE__ */ e.createElement("rect", { x: 0, y: -10, width: 65, height: 20, rx: 4, className: "tooltip-bg" }), /* @__PURE__ */ e.createElement("path", { d: "M0 -4 L-4 0 L0 4 Z", className: "tooltip-bg" }), /* @__PURE__ */ e.createElement("text", { x: 32, y: 0, textAnchor: "middle", dominantBaseline: "central", fill: "white", style: { fontSize: 10, fontWeight: 600, pointerEvents: "none" } }, "Add Step"))
764
+ ));
765
+ }, it = ({
766
+ id: t,
767
+ source: l,
768
+ target: s,
769
+ sourceX: d,
770
+ sourceY: a,
771
+ targetX: r,
772
+ targetY: m,
773
+ style: n = {},
774
+ markerEnd: o,
775
+ data: f
776
+ }) => {
777
+ const g = (f == null ? void 0 : f.verticalRouting) ?? !1, p = 30, E = g ? (() => {
778
+ const v = m - p;
779
+ return `M ${d},${v} L ${r},${v} L ${r},${m}`;
780
+ })() : (() => {
781
+ const v = a + 30;
782
+ return `M ${d},${a} L ${d},${v} L ${r},${v} L ${r},${m}`;
783
+ })(), c = n.stroke || "#d1d5db", i = f == null ? void 0 : f.label, N = (f == null ? void 0 : f.isFirst) ?? !1, u = f == null ? void 0 : f.onAddStepClick, k = g ? m - p : a + 30, h = d + (r - d) * (g ? 0.25 : 0.35), z = d + (r - d) * (g ? 0.65 : 0.7), y = k, T = (v) => {
784
+ v.stopPropagation(), u && u(l, {
785
+ edgeId: t,
786
+ nodeId: l,
787
+ sourceNodeId: l,
788
+ targetNodeId: s,
789
+ position: "between",
790
+ referenceNodeId: l,
791
+ filterId: f == null ? void 0 : f.filterId,
792
+ branch: f == null ? void 0 : f.branch
793
+ });
794
+ }, P = 11.5, S = 6;
795
+ return /* @__PURE__ */ e.createElement("g", null, /* @__PURE__ */ e.createElement("path", { id: t, d: E, fill: "none", stroke: c, strokeWidth: 1.5, markerEnd: o }), i && !g && /* @__PURE__ */ e.createElement("g", { transform: `translate(${h}, ${y})` }, (() => {
796
+ const v = Math.max(44, i.length * 7 + 20);
797
+ return /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(
798
+ "rect",
799
+ {
800
+ x: -v / 2,
801
+ y: -11,
802
+ width: v,
803
+ height: 22,
804
+ rx: 11,
805
+ fill: N ? "#e8f5e9" : "#ffebee",
806
+ stroke: N ? "#81c784" : "#e57373",
807
+ strokeWidth: 1
808
+ }
809
+ ), /* @__PURE__ */ e.createElement(
810
+ "text",
811
+ {
812
+ x: 0,
813
+ y: 4,
814
+ textAnchor: "middle",
815
+ fontSize: 10,
816
+ fontWeight: 600,
817
+ fill: N ? "#2e7d32" : "#c62828",
818
+ style: { fontFamily: "sans-serif", pointerEvents: "none" }
819
+ },
820
+ i
821
+ ));
822
+ })()), u && /* @__PURE__ */ e.createElement(
823
+ "g",
824
+ {
825
+ transform: `translate(${z}, ${y})`,
826
+ onClick: T,
827
+ style: { cursor: "pointer", pointerEvents: "all" },
828
+ className: "nodrag nopan edge-plus-svg"
829
+ },
830
+ /* @__PURE__ */ e.createElement("circle", { r: P, className: "edge-plus-circle" }),
831
+ /* @__PURE__ */ e.createElement("line", { x1: 0, y1: -S, x2: 0, y2: S, strokeWidth: 2, strokeLinecap: "round", className: "plus-line" }),
832
+ /* @__PURE__ */ e.createElement("line", { x1: -S, y1: 0, x2: S, y2: 0, strokeWidth: 2, strokeLinecap: "round", className: "plus-line" })
833
+ ));
834
+ };
835
+ export {
836
+ Ae as A,
837
+ Fe as D,
838
+ lt as E,
839
+ De as F,
840
+ it as G,
841
+ st as L,
842
+ Be as N,
843
+ at as P,
844
+ Ke as R,
845
+ we as S,
846
+ Pe as T,
847
+ Me as W,
848
+ Ce as a,
849
+ Le as b,
850
+ Se as c,
851
+ rt as d,
852
+ ot as e,
853
+ ve as f
854
+ };