@burdenoff/fluidgrids-fe-sdk 2026.827.1 → 2026.915.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.
- package/dist/ExecutionDetailPage-OWNO2BEW.js +11 -0
- package/dist/{ExecutionDetailPage-FF2DYKAZ.js.map → ExecutionDetailPage-OWNO2BEW.js.map} +1 -1
- package/dist/ExecutionsListPage-6O4AS3CM.js +10 -0
- package/dist/{ExecutionsListPage-NKISRFMA.js.map → ExecutionsListPage-6O4AS3CM.js.map} +1 -1
- package/dist/{MissingNodesInstallModal-HA5L3FK2.js → MissingNodesInstallModal-QAXLWW35.js} +43 -7
- package/dist/MissingNodesInstallModal-QAXLWW35.js.map +1 -0
- package/dist/{TemplateConfigurationModal-MXNGZQIC.js → TemplateConfigurationModal-TB7DJBTR.js} +11 -8
- package/dist/TemplateConfigurationModal-TB7DJBTR.js.map +1 -0
- package/dist/{TemplateDetailPanel-CJ3NPVTP.js → TemplateDetailPanel-KS3LQIBD.js} +3 -4
- package/dist/TemplateDetailPanel-KS3LQIBD.js.map +1 -0
- package/dist/WorkflowBuilder-S2PXF5RZ.js +19 -0
- package/dist/{WorkflowBuilder-XFXFAMUE.js.map → WorkflowBuilder-S2PXF5RZ.js.map} +1 -1
- package/dist/WorkflowsList-XQW7YPZX.js +12 -0
- package/dist/{WorkflowsList-TZAN3YBA.js.map → WorkflowsList-XQW7YPZX.js.map} +1 -1
- package/dist/{chunk-7VNIEIR6.js → chunk-7YWBH2A5.js} +9 -3
- package/dist/chunk-7YWBH2A5.js.map +1 -0
- package/dist/chunk-ACRXNUU2.js +504 -0
- package/dist/chunk-ACRXNUU2.js.map +1 -0
- package/dist/{chunk-6PNRM3KQ.js → chunk-AE7FZRTH.js} +5 -4
- package/dist/chunk-AE7FZRTH.js.map +1 -0
- package/dist/{chunk-YJKZSUNC.js → chunk-BF4YC7XN.js} +32 -15
- package/dist/chunk-BF4YC7XN.js.map +1 -0
- package/dist/chunk-CLPFGB5Y.js +453 -0
- package/dist/chunk-CLPFGB5Y.js.map +1 -0
- package/dist/{chunk-MH4AHYK3.js → chunk-ELB3LXRJ.js} +17 -5
- package/dist/chunk-ELB3LXRJ.js.map +1 -0
- package/dist/{chunk-IWKLEFC7.js → chunk-GBDXBJPH.js} +7 -6
- package/dist/chunk-GBDXBJPH.js.map +1 -0
- package/dist/{chunk-Y36DJHU3.js → chunk-KT72XMAB.js} +4 -176
- package/dist/chunk-KT72XMAB.js.map +1 -0
- package/dist/chunk-LMO5ASOE.js +43 -0
- package/dist/chunk-LMO5ASOE.js.map +1 -0
- package/dist/{chunk-OHGXRM6Z.js → chunk-NH5YCY37.js} +3 -3
- package/dist/{chunk-OHGXRM6Z.js.map → chunk-NH5YCY37.js.map} +1 -1
- package/dist/chunk-RXMBIJ5Z.js +3 -0
- package/dist/chunk-RXMBIJ5Z.js.map +1 -0
- package/dist/chunk-TVZ5UUGI.js +541 -0
- package/dist/chunk-TVZ5UUGI.js.map +1 -0
- package/dist/{chunk-SG7Z2IRQ.js → chunk-UPN73SK4.js} +5 -5
- package/dist/{chunk-SG7Z2IRQ.js.map → chunk-UPN73SK4.js.map} +1 -1
- package/dist/{chunk-A54HLFJE.js → chunk-UVBJY5FB.js} +5668 -5901
- package/dist/chunk-UVBJY5FB.js.map +1 -0
- package/dist/chunk-UVG4SYBS.js +405 -0
- package/dist/chunk-UVG4SYBS.js.map +1 -0
- package/dist/chunk-VJDLWE5S.js +505 -0
- package/dist/chunk-VJDLWE5S.js.map +1 -0
- package/dist/{chunk-V5UEEB74.js → chunk-WO3AHQVD.js} +17 -41
- package/dist/chunk-WO3AHQVD.js.map +1 -0
- package/dist/chunk-ZWQBPYWX.js +4901 -0
- package/dist/chunk-ZWQBPYWX.js.map +1 -0
- package/dist/executions.d.ts +7 -0
- package/dist/executions.js +14 -0
- package/dist/executions.js.map +1 -0
- package/dist/history.d.ts +5 -0
- package/dist/history.js +9 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +147 -616
- package/dist/index.js +61 -6870
- package/dist/index.js.map +1 -1
- package/dist/nodes.d.ts +5 -0
- package/dist/nodes.js +6 -0
- package/dist/nodes.js.map +1 -0
- package/dist/settings.d.ts +5 -0
- package/dist/settings.js +4 -0
- package/dist/settings.js.map +1 -0
- package/dist/templates.d.ts +17 -0
- package/dist/templates.js +19 -0
- package/dist/templates.js.map +1 -0
- package/dist/workflow-builder-JKkdIJoP.d.ts +473 -0
- package/dist/workflow-builder.d.ts +5 -0
- package/dist/workflow-builder.js +20 -0
- package/dist/workflow-builder.js.map +1 -0
- package/dist/workflows-list.d.ts +5 -0
- package/dist/workflows-list.js +12 -0
- package/dist/workflows-list.js.map +1 -0
- package/package.json +29 -1
- package/dist/ExecutionDetailPage-FF2DYKAZ.js +0 -10
- package/dist/ExecutionsListPage-NKISRFMA.js +0 -9
- package/dist/MissingNodesInstallModal-HA5L3FK2.js.map +0 -1
- package/dist/TemplateConfigurationModal-MXNGZQIC.js.map +0 -1
- package/dist/TemplateDetailPanel-CJ3NPVTP.js.map +0 -1
- package/dist/WorkflowBuilder-XFXFAMUE.js +0 -17
- package/dist/WorkflowsList-TZAN3YBA.js +0 -11
- package/dist/chunk-6PNRM3KQ.js.map +0 -1
- package/dist/chunk-7VNIEIR6.js.map +0 -1
- package/dist/chunk-A54HLFJE.js.map +0 -1
- package/dist/chunk-IWKLEFC7.js.map +0 -1
- package/dist/chunk-MH4AHYK3.js.map +0 -1
- package/dist/chunk-V5UEEB74.js.map +0 -1
- package/dist/chunk-Y36DJHU3.js.map +0 -1
- package/dist/chunk-YJKZSUNC.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cn } from './chunk-3ZYUGTIT.js';
|
|
2
|
-
import { useTr } from './chunk-
|
|
2
|
+
import { useTr } from './chunk-7YWBH2A5.js';
|
|
3
3
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
4
4
|
import { XIcon } from 'lucide-react';
|
|
5
5
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -135,5 +135,5 @@ function DialogDescription({
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
139
|
-
//# sourceMappingURL=chunk-
|
|
138
|
+
//# sourceMappingURL=chunk-NH5YCY37.js.map
|
|
139
|
+
//# sourceMappingURL=chunk-NH5YCY37.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/dialog.tsx"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/ui/dialog.tsx"],"names":[],"mappings":"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","file":"chunk-NH5YCY37.js","sourcesContent":["import * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\nimport { cn } from \"../utils/cn\";\nimport { useTr } from \"../hooks/useTr\";\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n size?: \"default\" | \"lg\" | \"xl\" | \"full\";\n}) {\n const tr = useTr();\n const sizeClasses = {\n default: \"sm:max-w-lg\",\n lg: \"sm:max-w-3xl\",\n xl: \"sm:max-w-[1400px] w-[90vw]\",\n full: \"sm:max-w-[95vw] w-[95vw]\",\n };\n\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none\",\n sizeClasses[size],\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\"\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">\n {tr(\"fluidgrids.ui.dialog.closeLabel\", \"Close\")}\n </span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RXMBIJ5Z.js"}
|
|
@@ -0,0 +1,541 @@
|
|
|
1
|
+
import { FluidGridsProvider, Card } from './chunk-UVBJY5FB.js';
|
|
2
|
+
import { Input } from './chunk-P5PKRQAO.js';
|
|
3
|
+
import { Button } from './chunk-DBOMRIP5.js';
|
|
4
|
+
import { useFlowStore } from './chunk-KT72XMAB.js';
|
|
5
|
+
import { cn } from './chunk-3ZYUGTIT.js';
|
|
6
|
+
import { useWorkflowDefinition } from './chunk-ELB3LXRJ.js';
|
|
7
|
+
import { useTr } from './chunk-7YWBH2A5.js';
|
|
8
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
9
|
+
import { MarkerType, ReactFlowProvider, useReactFlow, ReactFlow, Background, Controls, MiniMap, Handle, Position } from '@xyflow/react';
|
|
10
|
+
import { useShallow } from 'zustand/shallow';
|
|
11
|
+
import '@xyflow/react/dist/style.css';
|
|
12
|
+
import { ArrowLeft, Save, Play, Trash2 } from 'lucide-react';
|
|
13
|
+
import { useTheme } from '@burdenoff/fe-libs/shared/hooks/shell';
|
|
14
|
+
import { Toaster as Toaster$1 } from 'sonner';
|
|
15
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
16
|
+
import { useParams, Navigate } from 'react-router';
|
|
17
|
+
import { Icon } from '@iconify/react';
|
|
18
|
+
|
|
19
|
+
var Toaster = ({ ...props }) => {
|
|
20
|
+
const { resolvedTheme = "light" } = useTheme();
|
|
21
|
+
return /* @__PURE__ */ jsx(
|
|
22
|
+
Toaster$1,
|
|
23
|
+
{
|
|
24
|
+
theme: resolvedTheme,
|
|
25
|
+
className: "toaster group",
|
|
26
|
+
toastOptions: {
|
|
27
|
+
classNames: {
|
|
28
|
+
toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
|
|
29
|
+
description: "group-[.toast]:text-muted-foreground",
|
|
30
|
+
actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
|
|
31
|
+
cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
...props
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
var defaultEdgeOptions = {
|
|
39
|
+
type: "smoothstep",
|
|
40
|
+
markerEnd: {
|
|
41
|
+
type: MarkerType.ArrowClosed,
|
|
42
|
+
width: 21,
|
|
43
|
+
height: 21
|
|
44
|
+
},
|
|
45
|
+
style: {
|
|
46
|
+
stroke: "#888"
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var handleStyle = {
|
|
50
|
+
width: 10,
|
|
51
|
+
height: 10,
|
|
52
|
+
background: "#3b82f6",
|
|
53
|
+
// blue-500
|
|
54
|
+
border: "2px solid white"
|
|
55
|
+
};
|
|
56
|
+
var baseNodeStyle = {
|
|
57
|
+
padding: "8px 16px",
|
|
58
|
+
borderRadius: "8px",
|
|
59
|
+
fontWeight: 500,
|
|
60
|
+
boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)",
|
|
61
|
+
position: "relative",
|
|
62
|
+
color: "white"
|
|
63
|
+
};
|
|
64
|
+
var NODE_COLORS = {
|
|
65
|
+
"trigger:api": "#22c55e",
|
|
66
|
+
end: "#ef4444",
|
|
67
|
+
"internal:if": "#8b5cf6",
|
|
68
|
+
"internal:switch": "#8b5cf6",
|
|
69
|
+
"internal:loop": "#f59e0b",
|
|
70
|
+
"internal:merge": "#6366f1",
|
|
71
|
+
"internal:set": "#3b82f6",
|
|
72
|
+
"internal:filter": "#06b6d4",
|
|
73
|
+
"internal:aggregate": "#0891b2",
|
|
74
|
+
"internal:wait": "#64748b",
|
|
75
|
+
"internal:noop": "#94a3b8",
|
|
76
|
+
"internal:http": "#f97316",
|
|
77
|
+
default: "#3b82f6"
|
|
78
|
+
};
|
|
79
|
+
function getNodeColor(type) {
|
|
80
|
+
return NODE_COLORS[type] ?? NODE_COLORS.default;
|
|
81
|
+
}
|
|
82
|
+
function TriggerNode({ data }) {
|
|
83
|
+
const tr = useTr();
|
|
84
|
+
const label = data.label;
|
|
85
|
+
return /* @__PURE__ */ jsxs("div", { style: { ...baseNodeStyle, background: getNodeColor("trigger:api") }, children: [
|
|
86
|
+
label || tr(
|
|
87
|
+
"fluidgrids.components.workflowBuilderCore.triggerNodeLabel",
|
|
88
|
+
"API Trigger"
|
|
89
|
+
),
|
|
90
|
+
/* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Bottom, style: handleStyle })
|
|
91
|
+
] });
|
|
92
|
+
}
|
|
93
|
+
function EndNode({ data }) {
|
|
94
|
+
const tr = useTr();
|
|
95
|
+
const label = data.label;
|
|
96
|
+
return /* @__PURE__ */ jsxs("div", { style: { ...baseNodeStyle, background: getNodeColor("end") }, children: [
|
|
97
|
+
/* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, style: handleStyle }),
|
|
98
|
+
label || tr("fluidgrids.components.workflowBuilderCore.endNodeLabel", "End")
|
|
99
|
+
] });
|
|
100
|
+
}
|
|
101
|
+
function ActionNode({ data, type }) {
|
|
102
|
+
const tr = useTr();
|
|
103
|
+
const label = data.label;
|
|
104
|
+
const color = getNodeColor(type || "default");
|
|
105
|
+
return /* @__PURE__ */ jsxs(
|
|
106
|
+
"div",
|
|
107
|
+
{
|
|
108
|
+
style: {
|
|
109
|
+
...baseNodeStyle,
|
|
110
|
+
background: color,
|
|
111
|
+
minWidth: 120,
|
|
112
|
+
textAlign: "center"
|
|
113
|
+
},
|
|
114
|
+
children: [
|
|
115
|
+
/* @__PURE__ */ jsx(Handle, { type: "target", position: Position.Top, style: handleStyle }),
|
|
116
|
+
label || tr(
|
|
117
|
+
"fluidgrids.components.workflowBuilderCore.actionNodeLabel",
|
|
118
|
+
"Action"
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Bottom, style: handleStyle })
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
var NODE_TYPES = {
|
|
126
|
+
"trigger:api": TriggerNode,
|
|
127
|
+
end: EndNode,
|
|
128
|
+
"internal:if": ActionNode,
|
|
129
|
+
"internal:switch": ActionNode,
|
|
130
|
+
"internal:loop": ActionNode,
|
|
131
|
+
"internal:merge": ActionNode,
|
|
132
|
+
"internal:set": ActionNode,
|
|
133
|
+
"internal:filter": ActionNode,
|
|
134
|
+
"internal:aggregate": ActionNode,
|
|
135
|
+
"internal:wait": ActionNode,
|
|
136
|
+
"internal:noop": ActionNode,
|
|
137
|
+
"internal:http": ActionNode,
|
|
138
|
+
"internal:subworkflow": ActionNode,
|
|
139
|
+
default: ActionNode
|
|
140
|
+
};
|
|
141
|
+
var nodeIdCounter = 0;
|
|
142
|
+
function FlowBuilderInner({
|
|
143
|
+
workflow,
|
|
144
|
+
readonly = false,
|
|
145
|
+
hideHeader = false,
|
|
146
|
+
hideSidebar = false,
|
|
147
|
+
hideLogsPanel = false,
|
|
148
|
+
onSave,
|
|
149
|
+
onExecute,
|
|
150
|
+
onNodeClick,
|
|
151
|
+
onBack,
|
|
152
|
+
className
|
|
153
|
+
}) {
|
|
154
|
+
const reactFlowInstance = useReactFlow();
|
|
155
|
+
const tr = useTr();
|
|
156
|
+
const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);
|
|
157
|
+
const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);
|
|
158
|
+
const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);
|
|
159
|
+
const setNodes = useFlowStore((s) => s.actions.nodes.setNodes);
|
|
160
|
+
const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(
|
|
161
|
+
useShallow((s) => [
|
|
162
|
+
s.workflow.nodes,
|
|
163
|
+
s.workflow.edges,
|
|
164
|
+
s.actions.nodes.onNodesChange,
|
|
165
|
+
s.actions.edges.onEdgesChange,
|
|
166
|
+
s.actions.edges.onConnect
|
|
167
|
+
])
|
|
168
|
+
);
|
|
169
|
+
const [workflowName, setWorkflowName] = useState(
|
|
170
|
+
workflow?.name || "Untitled Workflow"
|
|
171
|
+
);
|
|
172
|
+
const [selectedNodeId, setSelectedNodeId] = useState(null);
|
|
173
|
+
const reactFlowWrapper = useRef(null);
|
|
174
|
+
useEffect(() => {
|
|
175
|
+
resetWorkflow();
|
|
176
|
+
if (workflow) {
|
|
177
|
+
setWorkflow(workflow);
|
|
178
|
+
setWorkflowName(workflow.name || "Untitled Workflow");
|
|
179
|
+
}
|
|
180
|
+
}, [workflow, resetWorkflow, setWorkflow]);
|
|
181
|
+
const handleNameChange = (e) => {
|
|
182
|
+
setWorkflowName(e.target.value);
|
|
183
|
+
setWorkflow({ name: e.target.value });
|
|
184
|
+
};
|
|
185
|
+
const handleSave = () => {
|
|
186
|
+
const savedWorkflow = {
|
|
187
|
+
id: workflow?.id || "",
|
|
188
|
+
workflowKey: workflow?.workflowKey || "",
|
|
189
|
+
name: workflowName,
|
|
190
|
+
version: workflow?.version || "1",
|
|
191
|
+
alias: workflow?.alias,
|
|
192
|
+
nodes,
|
|
193
|
+
edges,
|
|
194
|
+
sidebar: {
|
|
195
|
+
active: "none",
|
|
196
|
+
panels: {
|
|
197
|
+
nodeProperties: {
|
|
198
|
+
selectedNode: null
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
onSave?.(savedWorkflow);
|
|
204
|
+
};
|
|
205
|
+
const handleExecute = () => {
|
|
206
|
+
const runId = `run-${Date.now()}`;
|
|
207
|
+
onExecute?.(runId);
|
|
208
|
+
};
|
|
209
|
+
const handleNodeClick = useCallback(
|
|
210
|
+
(_event, node) => {
|
|
211
|
+
setSelectedNodeId(node.id);
|
|
212
|
+
onNodeClick?.(node);
|
|
213
|
+
},
|
|
214
|
+
[onNodeClick]
|
|
215
|
+
);
|
|
216
|
+
const handlePaneClick = useCallback(() => {
|
|
217
|
+
setSelectedNodeId(null);
|
|
218
|
+
}, []);
|
|
219
|
+
const handleDragOver = useCallback((event) => {
|
|
220
|
+
event.preventDefault();
|
|
221
|
+
event.dataTransfer.dropEffect = "copy";
|
|
222
|
+
}, []);
|
|
223
|
+
const handleDrop = useCallback(
|
|
224
|
+
(event) => {
|
|
225
|
+
event.preventDefault();
|
|
226
|
+
const raw = event.dataTransfer.getData("application/json");
|
|
227
|
+
if (!raw) return;
|
|
228
|
+
let payload;
|
|
229
|
+
try {
|
|
230
|
+
payload = JSON.parse(raw);
|
|
231
|
+
} catch {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const nodeType = payload.type || payload.id || "default";
|
|
235
|
+
const label = payload.label || nodeType;
|
|
236
|
+
const bounds = reactFlowWrapper.current?.getBoundingClientRect();
|
|
237
|
+
if (!bounds) return;
|
|
238
|
+
const position = reactFlowInstance.screenToFlowPosition({
|
|
239
|
+
x: event.clientX - bounds.left,
|
|
240
|
+
y: event.clientY - bounds.top
|
|
241
|
+
});
|
|
242
|
+
nodeIdCounter += 1;
|
|
243
|
+
const newNodeId = `${nodeType}-${Date.now()}-${nodeIdCounter}`;
|
|
244
|
+
const newNode = {
|
|
245
|
+
id: newNodeId,
|
|
246
|
+
type: nodeType,
|
|
247
|
+
position,
|
|
248
|
+
data: { label }
|
|
249
|
+
};
|
|
250
|
+
const currentNodes = useFlowStore.getState().workflow.nodes;
|
|
251
|
+
setNodes([...currentNodes, newNode]);
|
|
252
|
+
},
|
|
253
|
+
[reactFlowInstance, setNodes]
|
|
254
|
+
);
|
|
255
|
+
const selectedNode = selectedNodeId ? nodes.find((n) => n.id === selectedNodeId) : null;
|
|
256
|
+
const handleSelectedNodeLabelChange = useCallback(
|
|
257
|
+
(newLabel) => {
|
|
258
|
+
if (!selectedNodeId) return;
|
|
259
|
+
const currentNodes = useFlowStore.getState().workflow.nodes;
|
|
260
|
+
const updated = currentNodes.map(
|
|
261
|
+
(n) => n.id === selectedNodeId ? { ...n, data: { ...n.data, label: newLabel } } : n
|
|
262
|
+
);
|
|
263
|
+
setNodes(updated);
|
|
264
|
+
},
|
|
265
|
+
[selectedNodeId, setNodes]
|
|
266
|
+
);
|
|
267
|
+
const handleDeleteSelectedNode = useCallback(() => {
|
|
268
|
+
if (!selectedNode) return;
|
|
269
|
+
if (selectedNode.deletable === false) return;
|
|
270
|
+
deleteNode(selectedNode);
|
|
271
|
+
setSelectedNodeId(null);
|
|
272
|
+
}, [selectedNode, deleteNode]);
|
|
273
|
+
return /* @__PURE__ */ jsxs(
|
|
274
|
+
"div",
|
|
275
|
+
{
|
|
276
|
+
className: cn("flex flex-col flex-1 h-full w-full min-h-0", className),
|
|
277
|
+
children: [
|
|
278
|
+
!hideHeader && /* @__PURE__ */ jsxs(Card, { className: "h-14 shrink-0 border-0 rounded-none bg-gradient-to-r from-primary/20 to-transparent p-2 flex items-center justify-between border-b", children: [
|
|
279
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
280
|
+
onBack && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon", onClick: onBack, children: /* @__PURE__ */ jsx(ArrowLeft, { className: "size-5" }) }),
|
|
281
|
+
/* @__PURE__ */ jsx(
|
|
282
|
+
Input,
|
|
283
|
+
{
|
|
284
|
+
className: "font-semibold max-w-[300px]",
|
|
285
|
+
value: workflowName,
|
|
286
|
+
onChange: handleNameChange,
|
|
287
|
+
placeholder: tr(
|
|
288
|
+
"fluidgrids.components.workflowBuilderCore.workflowNamePlaceholder",
|
|
289
|
+
"Workflow Name"
|
|
290
|
+
),
|
|
291
|
+
disabled: readonly
|
|
292
|
+
}
|
|
293
|
+
)
|
|
294
|
+
] }),
|
|
295
|
+
!readonly && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
296
|
+
/* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: handleSave, children: [
|
|
297
|
+
/* @__PURE__ */ jsx(Save, { className: "size-4 mr-1" }),
|
|
298
|
+
tr("fluidgrids.components.workflowBuilderCore.save", "Save")
|
|
299
|
+
] }),
|
|
300
|
+
/* @__PURE__ */ jsxs(Button, { size: "sm", onClick: handleExecute, children: [
|
|
301
|
+
/* @__PURE__ */ jsx(Play, { className: "size-4 mr-1" }),
|
|
302
|
+
tr("fluidgrids.components.workflowBuilderCore.run", "Run")
|
|
303
|
+
] })
|
|
304
|
+
] })
|
|
305
|
+
] }),
|
|
306
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
|
|
307
|
+
/* @__PURE__ */ jsx("div", { className: "flex-1 h-full relative", ref: reactFlowWrapper, children: /* @__PURE__ */ jsxs(
|
|
308
|
+
ReactFlow,
|
|
309
|
+
{
|
|
310
|
+
nodes,
|
|
311
|
+
edges,
|
|
312
|
+
onNodesChange: readonly ? void 0 : onNodesChange,
|
|
313
|
+
onEdgesChange: readonly ? void 0 : onEdgesChange,
|
|
314
|
+
onConnect: readonly ? void 0 : onConnect,
|
|
315
|
+
onNodeClick: readonly ? void 0 : handleNodeClick,
|
|
316
|
+
onPaneClick: handlePaneClick,
|
|
317
|
+
onDragOver: readonly ? void 0 : handleDragOver,
|
|
318
|
+
onDrop: readonly ? void 0 : handleDrop,
|
|
319
|
+
nodeTypes: NODE_TYPES,
|
|
320
|
+
defaultEdgeOptions,
|
|
321
|
+
fitView: true,
|
|
322
|
+
snapToGrid: true,
|
|
323
|
+
snapGrid: [16, 16],
|
|
324
|
+
proOptions: { hideAttribution: true },
|
|
325
|
+
deleteKeyCode: readonly ? null : "Backspace",
|
|
326
|
+
children: [
|
|
327
|
+
/* @__PURE__ */ jsx(Background, { gap: 24 }),
|
|
328
|
+
/* @__PURE__ */ jsx(Controls, {}),
|
|
329
|
+
/* @__PURE__ */ jsx(MiniMap, {})
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
) }),
|
|
333
|
+
!hideSidebar && !readonly && /* @__PURE__ */ jsxs("div", { className: "w-60 shrink-0 border-l bg-card overflow-y-auto", children: [
|
|
334
|
+
/* @__PURE__ */ jsx("div", { className: "p-4 border-b", children: /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold", children: tr(
|
|
335
|
+
"fluidgrids.components.workflowBuilderCore.nodePropertiesHeading",
|
|
336
|
+
"Node Properties"
|
|
337
|
+
) }) }),
|
|
338
|
+
selectedNode ? /* @__PURE__ */ jsxs("div", { className: "p-4 space-y-4", children: [
|
|
339
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
340
|
+
/* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-muted-foreground mb-1", children: tr(
|
|
341
|
+
"fluidgrids.components.workflowBuilderCore.nodeIdLabel",
|
|
342
|
+
"Node ID"
|
|
343
|
+
) }),
|
|
344
|
+
/* @__PURE__ */ jsx("code", { className: "block text-xs bg-muted px-2 py-1 rounded font-mono break-all", children: selectedNode.id })
|
|
345
|
+
] }),
|
|
346
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
347
|
+
/* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-muted-foreground mb-1", children: tr(
|
|
348
|
+
"fluidgrids.components.workflowBuilderCore.nodeTypeLabel",
|
|
349
|
+
"Type"
|
|
350
|
+
) }),
|
|
351
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
352
|
+
/* @__PURE__ */ jsx(
|
|
353
|
+
"span",
|
|
354
|
+
{
|
|
355
|
+
className: "inline-block w-3 h-3 rounded-full shrink-0",
|
|
356
|
+
style: {
|
|
357
|
+
background: getNodeColor(
|
|
358
|
+
selectedNode.type || "default"
|
|
359
|
+
)
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
),
|
|
363
|
+
/* @__PURE__ */ jsx("code", { className: "text-xs font-mono", children: selectedNode.type })
|
|
364
|
+
] })
|
|
365
|
+
] }),
|
|
366
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
367
|
+
/* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-muted-foreground mb-1", children: tr(
|
|
368
|
+
"fluidgrids.components.workflowBuilderCore.nodeLabelLabel",
|
|
369
|
+
"Label"
|
|
370
|
+
) }),
|
|
371
|
+
/* @__PURE__ */ jsx(
|
|
372
|
+
Input,
|
|
373
|
+
{
|
|
374
|
+
value: selectedNode.data?.label ?? "",
|
|
375
|
+
onChange: (e) => handleSelectedNodeLabelChange(e.target.value),
|
|
376
|
+
className: "text-sm",
|
|
377
|
+
placeholder: tr(
|
|
378
|
+
"fluidgrids.components.workflowBuilderCore.nodeLabelPlaceholder",
|
|
379
|
+
"Node label"
|
|
380
|
+
)
|
|
381
|
+
}
|
|
382
|
+
)
|
|
383
|
+
] }),
|
|
384
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
385
|
+
/* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-muted-foreground mb-1", children: tr(
|
|
386
|
+
"fluidgrids.components.workflowBuilderCore.positionLabel",
|
|
387
|
+
"Position"
|
|
388
|
+
) }),
|
|
389
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-2 text-xs text-muted-foreground", children: [
|
|
390
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
391
|
+
"X:",
|
|
392
|
+
" ",
|
|
393
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono", children: Math.round(selectedNode.position.x) })
|
|
394
|
+
] }),
|
|
395
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
396
|
+
"Y:",
|
|
397
|
+
" ",
|
|
398
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono", children: Math.round(selectedNode.position.y) })
|
|
399
|
+
] })
|
|
400
|
+
] })
|
|
401
|
+
] }),
|
|
402
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
403
|
+
/* @__PURE__ */ jsx("label", { className: "block text-xs font-medium text-muted-foreground mb-1", children: tr(
|
|
404
|
+
"fluidgrids.components.workflowBuilderCore.connectionsLabel",
|
|
405
|
+
"Connections"
|
|
406
|
+
) }),
|
|
407
|
+
/* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: (() => {
|
|
408
|
+
const inbound = edges.filter(
|
|
409
|
+
(e) => e.target === selectedNode.id
|
|
410
|
+
);
|
|
411
|
+
const outbound = edges.filter(
|
|
412
|
+
(e) => e.source === selectedNode.id
|
|
413
|
+
);
|
|
414
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { children: [
|
|
415
|
+
inbound.length,
|
|
416
|
+
" inbound, ",
|
|
417
|
+
outbound.length,
|
|
418
|
+
" outbound"
|
|
419
|
+
] }) });
|
|
420
|
+
})() })
|
|
421
|
+
] }),
|
|
422
|
+
selectedNode.deletable !== false && /* @__PURE__ */ jsx("div", { className: "pt-2 border-t", children: /* @__PURE__ */ jsxs(
|
|
423
|
+
Button,
|
|
424
|
+
{
|
|
425
|
+
variant: "destructive",
|
|
426
|
+
size: "sm",
|
|
427
|
+
className: "w-full",
|
|
428
|
+
onClick: handleDeleteSelectedNode,
|
|
429
|
+
children: [
|
|
430
|
+
/* @__PURE__ */ jsx(Trash2, { className: "size-4 mr-1" }),
|
|
431
|
+
tr(
|
|
432
|
+
"fluidgrids.components.workflowBuilderCore.deleteNode",
|
|
433
|
+
"Delete Node"
|
|
434
|
+
)
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
) })
|
|
438
|
+
] }) : /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
439
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: tr(
|
|
440
|
+
"fluidgrids.components.workflowBuilderCore.noSelectionHint",
|
|
441
|
+
"Click a node on the canvas to view and edit its properties."
|
|
442
|
+
) }),
|
|
443
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground mt-2", children: tr(
|
|
444
|
+
"fluidgrids.components.workflowBuilderCore.dragPaletteHint",
|
|
445
|
+
"Drag nodes from the palette on the left to add them to the workflow."
|
|
446
|
+
) })
|
|
447
|
+
] })
|
|
448
|
+
] })
|
|
449
|
+
] }),
|
|
450
|
+
!hideLogsPanel && /* @__PURE__ */ jsxs("div", { className: "h-32 border-t bg-card p-2", children: [
|
|
451
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-medium mb-2", children: tr(
|
|
452
|
+
"fluidgrids.components.workflowBuilderCore.executionLogsHeading",
|
|
453
|
+
"Execution Logs"
|
|
454
|
+
) }),
|
|
455
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: tr(
|
|
456
|
+
"fluidgrids.components.workflowBuilderCore.executionLogsEmpty",
|
|
457
|
+
"Execution logs will appear here when you run the workflow"
|
|
458
|
+
) })
|
|
459
|
+
] })
|
|
460
|
+
]
|
|
461
|
+
}
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
function WorkflowBuilderCore(props) {
|
|
465
|
+
return /* @__PURE__ */ jsxs(ReactFlowProvider, { children: [
|
|
466
|
+
/* @__PURE__ */ jsx(FlowBuilderInner, { ...props }),
|
|
467
|
+
/* @__PURE__ */ jsx(Toaster, { richColors: true, position: "bottom-center", duration: 2e3 })
|
|
468
|
+
] });
|
|
469
|
+
}
|
|
470
|
+
function WorkflowBuilder({
|
|
471
|
+
workflowId,
|
|
472
|
+
workflowVersion,
|
|
473
|
+
initialWorkflow,
|
|
474
|
+
apiGatewayUrl,
|
|
475
|
+
globalApiUrl,
|
|
476
|
+
authToken,
|
|
477
|
+
workspaceId,
|
|
478
|
+
tenantId,
|
|
479
|
+
organizationId,
|
|
480
|
+
workspaceClient,
|
|
481
|
+
globalClient,
|
|
482
|
+
...coreProps
|
|
483
|
+
}) {
|
|
484
|
+
const workflow = initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);
|
|
485
|
+
return /* @__PURE__ */ jsx(
|
|
486
|
+
FluidGridsProvider,
|
|
487
|
+
{
|
|
488
|
+
apiGatewayUrl,
|
|
489
|
+
globalApiUrl,
|
|
490
|
+
authToken,
|
|
491
|
+
workspaceId,
|
|
492
|
+
tenantId,
|
|
493
|
+
organizationId,
|
|
494
|
+
workspaceClient,
|
|
495
|
+
globalClient,
|
|
496
|
+
children: /* @__PURE__ */ jsx(WorkflowBuilderCore, { workflow, ...coreProps })
|
|
497
|
+
}
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
function createDefaultWorkflow(id, version) {
|
|
501
|
+
return {
|
|
502
|
+
id: id || `workflow-${Date.now()}`,
|
|
503
|
+
workflowKey: id || `workflow-${Date.now()}`,
|
|
504
|
+
name: "Untitled Workflow",
|
|
505
|
+
version: version || "1",
|
|
506
|
+
nodes: [],
|
|
507
|
+
edges: [],
|
|
508
|
+
sidebar: {
|
|
509
|
+
active: "store-browse",
|
|
510
|
+
panels: {
|
|
511
|
+
nodeProperties: {
|
|
512
|
+
selectedNode: null
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
function WorkflowSearchRedirect() {
|
|
519
|
+
const { id } = useParams();
|
|
520
|
+
const { workflow, loading, error } = useWorkflowDefinition(void 0, id);
|
|
521
|
+
if (loading) {
|
|
522
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground", children: [
|
|
523
|
+
/* @__PURE__ */ jsx(Icon, { icon: "svg-spinners:ring-resize", className: "size-4" }),
|
|
524
|
+
"Opening workflow\u2026"
|
|
525
|
+
] });
|
|
526
|
+
}
|
|
527
|
+
if (error || !workflow) {
|
|
528
|
+
return /* @__PURE__ */ jsx(Navigate, { to: "../list", replace: true });
|
|
529
|
+
}
|
|
530
|
+
return /* @__PURE__ */ jsx(
|
|
531
|
+
Navigate,
|
|
532
|
+
{
|
|
533
|
+
to: `../workflow/${workflow.workflowKey}/${workflow.version}`,
|
|
534
|
+
replace: true
|
|
535
|
+
}
|
|
536
|
+
);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect };
|
|
540
|
+
//# sourceMappingURL=chunk-TVZ5UUGI.js.map
|
|
541
|
+
//# sourceMappingURL=chunk-TVZ5UUGI.js.map
|