@burdenoff/fluidgrids-fe-sdk 2026.1111.16 → 2026.1111.18
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/README.md +41 -0
- package/dist/AiStudioPage-BHVEU4Wp.js +774 -0
- package/dist/ApprovalInboxPage-dbBDSJ-f.js +558 -0
- package/dist/DataSinkDashboardPage-1h2QsMzH.js +270 -0
- package/dist/DataTablesPage-BZy2z0LB.js +1690 -0
- package/dist/EntityTagPicker-BqRNsLCQ.js +135 -0
- package/dist/{ExecutionDetailPage-D-0_POAf.js → ExecutionDetailPage-BdcZmLT4.js} +799 -4420
- package/dist/ExecutionDetailPage-DvQ667OE.d.ts +10 -0
- package/dist/ExecutionsListPage-BCUJoAIE.js +2742 -0
- package/dist/{FailureTriagePanel-BHiduL7A.js → FailureTriagePanel-B9hDQymi.js} +4 -97
- package/dist/{FluidGridsProvider-DmvFADFa.js → FluidGridsProvider-dvZSNtSW.js} +10 -350
- package/dist/HistoryPage-BLoRpJ1R.d.ts +6 -0
- package/dist/{HistoryPage-BbUgxx1I.js → HistoryPage-U0tqupBN.js} +6 -4
- package/dist/HumanRequestCard-D-ooVPDn.js +439 -0
- package/dist/{InsightsPage-s6f5bU-8.js → InsightsPage-CALo16eB.js} +17 -328
- package/dist/ManagedAiPolicyAuthority-BxwJ3ptd.js +40 -0
- package/dist/{ManagedAiPolicyAuthority-CGux_DaV.d.ts → ManagedAiPolicyAuthority-DM3t3wNr.d.ts} +1 -5
- package/dist/ManagedAiPolicyAuthorityContext-CNkxIOZ1.js +10 -0
- package/dist/{MissingNodesInstallModal-B-9gHy2K.js → MissingNodesInstallModal-CMybsI8h.js} +3 -2
- package/dist/{NodesPage-ClvhUfbh.js → NodesPage-Bf5PhfBK.js} +7 -3
- package/dist/NodesPage-DEbnz9iU.d.ts +6 -0
- package/dist/{PublishCustomNodeAction-D2F7oN0S.js → PublishCustomNodeAction-5XXnSA3H.js} +3 -45
- package/dist/QuotaExhaustedDialog-7IFSaLyi.js +54 -0
- package/dist/RunnerStatusPill-Ctg4TJcP.js +187 -0
- package/dist/RunnersPage-CLCOCclc.js +467 -0
- package/dist/{ManagedAiPolicyAuthority-DsSaz-vg.js → SettingsPage-CJLZvv4J.js} +743 -773
- package/dist/SettingsPage-DMHQFj5-.d.ts +9 -0
- package/dist/TagFilterSelect-DCBOH6Ou.js +41 -0
- package/dist/TaskQueuesPage-9VgSnLdL.js +951 -0
- package/dist/TemplateCard-DsC0KNH1.js +1416 -0
- package/dist/{TemplateConfigurationModal-D_Mvgxqa.js → TemplateConfigurationModal-BhGWIzpm.js} +3 -2
- package/dist/{TemplateDetailPanel-DfFfUcOe.js → TemplateDetailPanel-D4cUVr-m.js} +3 -3
- package/dist/TemplatePreview-FayF6jxh.js +231 -0
- package/dist/TemplatesPage-BG3H-6v6.d.ts +10 -0
- package/dist/{TemplatesPage-Cku13bav.js → TemplatesPage-CsDNT54N.js} +11 -228
- package/dist/VariablesPage-67WR_lVE.js +949 -0
- package/dist/{VersionDiffDialog-Dq2xlPFI.js → VersionDiffDialog-DSN0mU0f.js} +2 -1
- package/dist/WorkflowBuilder-CPnXEL5J.js +555 -0
- package/dist/{WorkflowSearchRedirect-CaoOOpEl.js → WorkflowBuilder-YXRysvZc.js} +19 -585
- package/dist/{WorkflowProposalCard-8Vr56kQa.js → WorkflowProposalCard-qrEeNyYG.js} +4 -405
- package/dist/WorkflowSearchRedirect-DwDNZ_q5.js +36 -0
- package/dist/WorkflowShareDialog-mbIwRQUY.js +168 -0
- package/dist/WorkflowsList-CcNDQge5.d.ts +6 -0
- package/dist/{WorkflowsList-B2j1Pehb.js → WorkflowsList-DiiGyZkT.js} +12 -6
- package/dist/agent-form-Bfvm32j1.js +83 -0
- package/dist/{agentTools-DJ5o2ekg.js → agentTools-8s_25Q_F.js} +3 -2
- package/dist/{ai-usage-D5p7ZeRR.js → ai-usage-glCwHyQz.js} +1 -1
- package/dist/api-BrCHB5oA.js +224 -0
- package/dist/api-C8e0iV-Q.js +55 -0
- package/dist/button-DG7y_FVJ.js +48 -0
- package/dist/{canvasNoteTools-D3zUdEeg.js → canvasNoteTools-B6pYARgU.js} +2 -2
- package/dist/client-C9XSzSXr.js +1147 -0
- package/dist/code-editor-field-9-GdVE_8.js +111 -0
- package/dist/{codec-client-DstqyzTN.js → codec-client-CJ95Rmqo.js} +1 -1
- package/dist/constants-B2lhWNoN.js +202 -0
- package/dist/constants-XdvUxeWK.d.ts +162 -0
- package/dist/dialog-Cjb4lB4D.js +105 -0
- package/dist/executions.d.ts +1 -1
- package/dist/executions.js +2 -1
- package/dist/feature-flags-DM5myWaD.js +296 -0
- package/dist/flags.d.ts +3 -0
- package/dist/flags.js +4 -0
- package/dist/{flow-builder-DEzT8TQu.js → flow-builder-CZDKRc6f.js} +662 -10716
- package/dist/{node-endpoint-configs-DHFGA5MQ.js → graphql-operation-types-kX-MMjgW.js} +1 -1194
- package/dist/{graphql-types-XcDLtFwU.js → graphql-types-CDKVWH2R.js} +2 -202
- package/dist/history.d.ts +1 -1
- package/dist/history.js +1 -1
- package/dist/{index-DRf25-D3.d.ts → index-6JR2vD9J.d.ts} +33 -215
- package/dist/index-72XFgvbn.d.ts +132 -0
- package/dist/index-BcdtKBM-.d.ts +56 -0
- package/dist/{index-B3BWqafN.d.ts → index-DjiFgEQl.d.ts} +5 -131
- package/dist/index.d.ts +13 -9
- package/dist/index.js +52 -5300
- package/dist/{node-detail-view-LNqeIqN-.js → node-detail-view-CV4ZRwqh.js} +13 -8
- package/dist/node-editor-tab-body-DU-dh35X.js +174 -0
- package/dist/node-endpoint-configs-B5bjNMDW.js +37 -0
- package/dist/node-registry-refresh-Dy0uRg9f.js +84 -0
- package/dist/nodes.d.ts +1 -1
- package/dist/nodes.js +1 -1
- package/dist/observability.d.ts +1 -1
- package/dist/observability.js +2 -1
- package/dist/popover-BJHvrFGR.js +472 -0
- package/dist/{quick-config-panel-D3ogsaFL.js → quick-config-panel-ws3pLvbt.js} +3 -2
- package/dist/rolldown-runtime-hDbaFkMy.js +18 -0
- package/dist/run-display-BycKYSU0.js +46 -0
- package/dist/run-list-links-ByYC0OlV.js +98 -0
- package/dist/schedule-panel-C0mfGQSD.js +7542 -0
- package/dist/settings.d.ts +2 -1
- package/dist/settings.js +2 -1
- package/dist/shared-CMfn30xT.js +196 -0
- package/dist/sidebar-node-editor-CR1PiZO-.js +177 -0
- package/dist/templates.d.ts +1 -1
- package/dist/templates.js +2 -1
- package/dist/theme-provider-B3mIuz2d.js +11 -0
- package/dist/{useAgentDefinitions-NFtLytDR.js → useAgentDefinitions-B0dam3_o.js} +3 -397
- package/dist/useConnections-Cs7LCWEM.js +401 -0
- package/dist/useDurableParity-CzUQMFJ3.js +415 -0
- package/dist/useEntityTags-DhnsZcTl.js +236 -0
- package/dist/{useExecutions-DAzeWHS6.js → useExecutions-9aLuOt1c.js} +4 -3
- package/dist/{useObservability-COCZ0hUS.js → useObservability-CfEw3ZFD.js} +2 -2
- package/dist/{useRunHistory-CsYUbouO.js → useRunHistory-B1xJDwl1.js} +4 -3
- package/dist/{WorkflowShareDialog-6RRDe-_v.js → useWorkflowCodeExport-Bu2QYJzA.js} +7 -210
- package/dist/{useWorkflows-w4Dx2fF2.js → useWorkflows-BlVVu8NM.js} +3 -2
- package/dist/utils-uaL5UVxb.js +65 -0
- package/dist/workflow-builder.d.ts +1 -1
- package/dist/workflow-builder.js +4 -2
- package/dist/workflow-host.d.ts +6 -0
- package/dist/workflow-host.js +9 -0
- package/dist/workflow-pages.d.ts +55 -0
- package/dist/workflow-pages.js +113 -0
- package/dist/workflows-list.d.ts +1 -1
- package/dist/workflows-list.js +1 -1
- package/package.json +13 -1
- package/dist/ExecutionDetailPage-MvsnOnE1.d.ts +0 -4
- package/dist/HistoryPage-BqUizaFv.d.ts +0 -3
- package/dist/NodesPage-C97-9K2Y.d.ts +0 -3
- package/dist/TemplatesPage-D0qnXzHh.d.ts +0 -4
- package/dist/WorkflowsList-0d5GSKdh.d.ts +0 -3
- package/dist/agent-form-BvMWhQ42.js +0 -496
|
@@ -1,566 +1,27 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
|
|
3
|
+
import { g as useWorkflowReloadStore, h as releaseLeaseKeptForReload, t as FlowBuilderPage } from "./flow-builder-CZDKRc6f.js";
|
|
4
|
+
import { n as registerLiveCanvasHandler } from "./liveCanvas-D5ytXDp8.js";
|
|
5
|
+
import { _ as throwIfResultError, n as getFluidGridsClient, x as getFluidGridsConfig } from "./client-C9XSzSXr.js";
|
|
6
|
+
import { Er as WorkflowDefinitionDocument } from "./graphql-operation-types-kX-MMjgW.js";
|
|
5
7
|
import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { t as cn } from "./cn-QqidFIgr.js";
|
|
9
|
-
import { i as Button } from "./PublishCustomNodeAction-D2F7oN0S.js";
|
|
10
|
-
import { l as useLazyWorkflowDefinition, m as useWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-w4Dx2fF2.js";
|
|
11
|
-
import { O as CreateWorkflowRefusalDialog } from "./WorkflowShareDialog-6RRDe-_v.js";
|
|
12
|
-
import { c as withoutGuidedTourIntent, l as decideMissingWorkflow, o as isGuidedTourIntent, s as pickGuidedTour, u as isCreateIntent } from "./firstWorkflow-C_h0KMB2.js";
|
|
8
|
+
import { At as useSaveStatusStore, Et as classifyCreateRefusal, J as paramsFromOperation, L as createConfiguredNode, Zt as codeBuildIdOf, dn as resolveNodeOperation, g as registerWorkflowNodeTypes, h as registerNodeManifests, m as refetchStoreNodes, nn as workflowFingerprint, o as NODE_CONFIGS, qt as rememberRevision, u as ensureNodeTypesLoaded, wt as blankWorkflowCreateInput } from "./FluidGridsProvider-dvZSNtSW.js";
|
|
9
|
+
import { F as mergeStickyNotes, H as useFlowStore } from "./node-operation-selection--oy-yEq_.js";
|
|
13
10
|
import { t as canvasFromDefinition } from "./definition-canvas--3MPHoP-.js";
|
|
14
|
-
import { n as
|
|
11
|
+
import { l as useLazyWorkflowDefinition, n as useCreateWorkflow } from "./useWorkflows-BlVVu8NM.js";
|
|
12
|
+
import { c as getWorkflowNodeTypes, o as buildNodeCheck, s as buildRequiredNodeTypes, v as useInstalledNodes } from "./TemplateCard-DsC0KNH1.js";
|
|
13
|
+
import { c as withoutGuidedTourIntent, l as decideMissingWorkflow, o as isGuidedTourIntent, s as pickGuidedTour, u as isCreateIntent } from "./firstWorkflow-C_h0KMB2.js";
|
|
14
|
+
import { f as BILLING_PLANS_PATH } from "./fluidgridsEvents-CNdcrUNN.js";
|
|
15
|
+
import { T as CreateWorkflowRefusalDialog } from "./useWorkflowCodeExport-Bu2QYJzA.js";
|
|
15
16
|
import { Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
16
|
-
import {
|
|
17
|
-
import { Background, Controls, Handle, MarkerType, MiniMap, Position, ReactFlow, ReactFlowProvider, useReactFlow } from "@xyflow/react";
|
|
17
|
+
import { useLocation, useNavigate, useParams } from "react-router";
|
|
18
18
|
import { Icon } from "@iconify/react";
|
|
19
19
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
-
import {
|
|
21
|
-
import { edgeColor, nodeCategoryColor } from "@burdenoff/fe-libs/shared/utils";
|
|
22
|
-
import { useShallow } from "zustand/shallow";
|
|
20
|
+
import { toast } from "sonner";
|
|
23
21
|
import { ErrorBoundary } from "@burdenoff/fe-libs/shared/components";
|
|
24
|
-
import { ThemeProvider } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
25
|
-
import { useTheme, useThemeOrNull } from "@burdenoff/fe-libs/shared/hooks/shell";
|
|
26
22
|
import "@xyflow/react/dist/style.css";
|
|
27
|
-
import { ArrowLeft, Play, Save, Trash2 } from "lucide-react";
|
|
28
23
|
import { usePlayTour, useSafeToursContext } from "@burdenoff/fe-libs/shared/tours";
|
|
29
24
|
|
|
30
|
-
// src/theme/EnsureThemeProvider.tsx
|
|
31
|
-
/**
|
|
32
|
-
* Give the SDK's components a fe-libs theme context when the host has none.
|
|
33
|
-
*
|
|
34
|
-
* Several SDK components (the toast host, theme toggles, editors) read the
|
|
35
|
-
* theme through fe-libs `useTheme`, which throws outside a `ThemeProvider`.
|
|
36
|
-
* The Burdenoff app shells always mount one, but a third-party page that
|
|
37
|
-
* renders `<WorkflowBuilder>` or `<FluidGridsRoot>` directly does not. This
|
|
38
|
-
* wrapper mounts the SDK's own provider only in that case: when the host
|
|
39
|
-
* already has a provider, its children render inside the host's context
|
|
40
|
-
* unchanged, so there is never a second provider fighting over the
|
|
41
|
-
* document's theme attributes.
|
|
42
|
-
*/
|
|
43
|
-
function EnsureThemeProvider({ children }) {
|
|
44
|
-
if (useThemeOrNull()) return /* @__PURE__ */ jsx(Fragment, { children });
|
|
45
|
-
return /* @__PURE__ */ jsx(ThemeProvider, { children });
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// src/builder/components/ui/sonner.tsx
|
|
49
|
-
const Toaster$1 = ({ ...props }) => {
|
|
50
|
-
const { resolvedTheme = "light" } = useTheme();
|
|
51
|
-
return /* @__PURE__ */ jsx(Toaster, {
|
|
52
|
-
theme: resolvedTheme,
|
|
53
|
-
className: "toaster group",
|
|
54
|
-
toastOptions: { classNames: {
|
|
55
|
-
toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
|
|
56
|
-
description: "group-[.toast]:text-muted-foreground",
|
|
57
|
-
actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
|
|
58
|
-
cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
|
|
59
|
-
} },
|
|
60
|
-
...props
|
|
61
|
-
});
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// src/components/WorkflowBuilderCore.tsx
|
|
65
|
-
const defaultEdgeOptions = {
|
|
66
|
-
type: "smoothstep",
|
|
67
|
-
markerEnd: {
|
|
68
|
-
type: MarkerType.ArrowClosed,
|
|
69
|
-
width: 21,
|
|
70
|
-
height: 21
|
|
71
|
-
},
|
|
72
|
-
style: { stroke: edgeColor("default") }
|
|
73
|
-
};
|
|
74
|
-
const handleStyle = {
|
|
75
|
-
width: 10,
|
|
76
|
-
height: 10,
|
|
77
|
-
background: "var(--color-node-handle-connected)",
|
|
78
|
-
border: "2px solid var(--color-node-bg)"
|
|
79
|
-
};
|
|
80
|
-
const baseNodeStyle = {
|
|
81
|
-
padding: "8px 16px",
|
|
82
|
-
borderRadius: "8px",
|
|
83
|
-
fontWeight: 500,
|
|
84
|
-
boxShadow: "var(--shadow-elevation-2)",
|
|
85
|
-
position: "relative",
|
|
86
|
-
color: "var(--color-action-primary-text)"
|
|
87
|
-
};
|
|
88
|
-
const NODE_CATEGORY_BY_TYPE = {
|
|
89
|
-
"trigger:api": "trigger",
|
|
90
|
-
end: "end",
|
|
91
|
-
"internal:if": "logic",
|
|
92
|
-
"internal:switch": "logic",
|
|
93
|
-
"internal:loop": "loop",
|
|
94
|
-
"internal:merge": "utility",
|
|
95
|
-
"internal:set": "data",
|
|
96
|
-
"internal:filter": "data",
|
|
97
|
-
"internal:aggregate": "data",
|
|
98
|
-
"internal:wait": "utility",
|
|
99
|
-
"internal:noop": "utility",
|
|
100
|
-
"internal:http": "integration"
|
|
101
|
-
};
|
|
102
|
-
function getNodeColor(type) {
|
|
103
|
-
return nodeCategoryColor(NODE_CATEGORY_BY_TYPE[type] ?? "default");
|
|
104
|
-
}
|
|
105
|
-
function TriggerNode({ data }) {
|
|
106
|
-
const tr = useTr();
|
|
107
|
-
const label = data.label;
|
|
108
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
109
|
-
style: {
|
|
110
|
-
...baseNodeStyle,
|
|
111
|
-
background: getNodeColor("trigger:api")
|
|
112
|
-
},
|
|
113
|
-
children: [label || tr("fluidgrids.components.workflowBuilderCore.triggerNodeLabel", "API Trigger"), /* @__PURE__ */ jsx(Handle, {
|
|
114
|
-
type: "source",
|
|
115
|
-
position: Position.Bottom,
|
|
116
|
-
style: handleStyle
|
|
117
|
-
})]
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
function EndNode({ data }) {
|
|
121
|
-
const tr = useTr();
|
|
122
|
-
const label = data.label;
|
|
123
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
124
|
-
style: {
|
|
125
|
-
...baseNodeStyle,
|
|
126
|
-
background: getNodeColor("end")
|
|
127
|
-
},
|
|
128
|
-
children: [/* @__PURE__ */ jsx(Handle, {
|
|
129
|
-
type: "target",
|
|
130
|
-
position: Position.Top,
|
|
131
|
-
style: handleStyle
|
|
132
|
-
}), label || tr("fluidgrids.components.workflowBuilderCore.endNodeLabel", "End")]
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
function ActionNode({ data, type }) {
|
|
136
|
-
const tr = useTr();
|
|
137
|
-
const label = data.label;
|
|
138
|
-
const color = getNodeColor(type || "default");
|
|
139
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
140
|
-
style: {
|
|
141
|
-
...baseNodeStyle,
|
|
142
|
-
background: color,
|
|
143
|
-
minWidth: 120,
|
|
144
|
-
textAlign: "center"
|
|
145
|
-
},
|
|
146
|
-
children: [
|
|
147
|
-
/* @__PURE__ */ jsx(Handle, {
|
|
148
|
-
type: "target",
|
|
149
|
-
position: Position.Top,
|
|
150
|
-
style: handleStyle
|
|
151
|
-
}),
|
|
152
|
-
label || tr("fluidgrids.components.workflowBuilderCore.actionNodeLabel", "Action"),
|
|
153
|
-
/* @__PURE__ */ jsx(Handle, {
|
|
154
|
-
type: "source",
|
|
155
|
-
position: Position.Bottom,
|
|
156
|
-
style: handleStyle
|
|
157
|
-
})
|
|
158
|
-
]
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
const NODE_TYPES = {
|
|
162
|
-
"trigger:api": TriggerNode,
|
|
163
|
-
end: EndNode,
|
|
164
|
-
"internal:if": ActionNode,
|
|
165
|
-
"internal:switch": ActionNode,
|
|
166
|
-
"internal:loop": ActionNode,
|
|
167
|
-
"internal:merge": ActionNode,
|
|
168
|
-
"internal:set": ActionNode,
|
|
169
|
-
"internal:filter": ActionNode,
|
|
170
|
-
"internal:aggregate": ActionNode,
|
|
171
|
-
"internal:wait": ActionNode,
|
|
172
|
-
"internal:noop": ActionNode,
|
|
173
|
-
"internal:http": ActionNode,
|
|
174
|
-
"internal:subworkflow": ActionNode,
|
|
175
|
-
default: ActionNode
|
|
176
|
-
};
|
|
177
|
-
let nodeIdCounter = 0;
|
|
178
|
-
function FlowBuilderInner({ workflow, readonly = false, hideHeader = false, hideSidebar = false, hideLogsPanel = false, onSave, onExecute, onNodeClick, onBack, className }) {
|
|
179
|
-
const reactFlowInstance = useReactFlow();
|
|
180
|
-
const tr = useTr();
|
|
181
|
-
useNodeSelectedEvent();
|
|
182
|
-
const setWorkflow = useFlowStore((s) => s.actions.setWorkflow);
|
|
183
|
-
const resetWorkflow = useFlowStore((s) => s.actions.resetWorkflow);
|
|
184
|
-
const deleteNode = useFlowStore((s) => s.actions.nodes.deleteNode);
|
|
185
|
-
const setNodes = useFlowStore((s) => s.actions.nodes.setNodes);
|
|
186
|
-
const [nodes, edges, onNodesChange, onEdgesChange, onConnect] = useFlowStore(useShallow((s) => [
|
|
187
|
-
s.workflow.nodes,
|
|
188
|
-
s.workflow.edges,
|
|
189
|
-
s.actions.nodes.onNodesChange,
|
|
190
|
-
s.actions.edges.onEdgesChange,
|
|
191
|
-
s.actions.edges.onConnect
|
|
192
|
-
]));
|
|
193
|
-
const canvasEdges = useCanvasEdges(nodes, edges);
|
|
194
|
-
const [workflowName, setWorkflowName] = useState(workflow?.name || "Untitled Workflow");
|
|
195
|
-
const [selectedNodeId, setSelectedNodeId] = useState(null);
|
|
196
|
-
const reactFlowWrapper = useRef(null);
|
|
197
|
-
useEffect(() => {
|
|
198
|
-
resetWorkflow();
|
|
199
|
-
if (workflow) {
|
|
200
|
-
setWorkflow(workflow);
|
|
201
|
-
setWorkflowName(workflow.name || "Untitled Workflow");
|
|
202
|
-
}
|
|
203
|
-
}, [
|
|
204
|
-
workflow,
|
|
205
|
-
resetWorkflow,
|
|
206
|
-
setWorkflow
|
|
207
|
-
]);
|
|
208
|
-
const handleNameChange = (e) => {
|
|
209
|
-
setWorkflowName(e.target.value);
|
|
210
|
-
setWorkflow({ name: e.target.value });
|
|
211
|
-
};
|
|
212
|
-
const handleSave = () => {
|
|
213
|
-
const savedWorkflow = {
|
|
214
|
-
id: workflow?.id || "",
|
|
215
|
-
workflowKey: workflow?.workflowKey || "",
|
|
216
|
-
name: workflowName,
|
|
217
|
-
version: workflow?.version || "1",
|
|
218
|
-
alias: workflow?.alias,
|
|
219
|
-
nodes,
|
|
220
|
-
edges,
|
|
221
|
-
sidebar: {
|
|
222
|
-
active: "none",
|
|
223
|
-
panels: { nodeProperties: { selectedNode: null } }
|
|
224
|
-
}
|
|
225
|
-
};
|
|
226
|
-
onSave?.(savedWorkflow);
|
|
227
|
-
};
|
|
228
|
-
const handleExecute = () => {
|
|
229
|
-
const runId = `run-${Date.now()}`;
|
|
230
|
-
onExecute?.(runId);
|
|
231
|
-
};
|
|
232
|
-
const handleNodeClick = useCallback((_event, node) => {
|
|
233
|
-
setSelectedNodeId(node.id);
|
|
234
|
-
onNodeClick?.(node);
|
|
235
|
-
}, [onNodeClick]);
|
|
236
|
-
const handlePaneClick = useCallback(() => {
|
|
237
|
-
setSelectedNodeId(null);
|
|
238
|
-
}, []);
|
|
239
|
-
const handleDragOver = useCallback((event) => {
|
|
240
|
-
event.preventDefault();
|
|
241
|
-
event.dataTransfer.dropEffect = "copy";
|
|
242
|
-
}, []);
|
|
243
|
-
const handleDrop = useCallback((event) => {
|
|
244
|
-
event.preventDefault();
|
|
245
|
-
const raw = event.dataTransfer.getData("application/json");
|
|
246
|
-
if (!raw) return;
|
|
247
|
-
let payload;
|
|
248
|
-
try {
|
|
249
|
-
payload = JSON.parse(raw);
|
|
250
|
-
} catch {
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
const nodeType = payload.type || payload.id || "default";
|
|
254
|
-
const label = payload.label || nodeType;
|
|
255
|
-
const bounds = reactFlowWrapper.current?.getBoundingClientRect();
|
|
256
|
-
if (!bounds) return;
|
|
257
|
-
const position = reactFlowInstance.screenToFlowPosition({
|
|
258
|
-
x: event.clientX - bounds.left,
|
|
259
|
-
y: event.clientY - bounds.top
|
|
260
|
-
});
|
|
261
|
-
nodeIdCounter += 1;
|
|
262
|
-
const newNode = {
|
|
263
|
-
id: `${nodeType}-${Date.now()}-${nodeIdCounter}`,
|
|
264
|
-
type: nodeType,
|
|
265
|
-
position,
|
|
266
|
-
data: { label }
|
|
267
|
-
};
|
|
268
|
-
const currentNodes = useFlowStore.getState().workflow.nodes;
|
|
269
|
-
setNodes([...currentNodes, newNode]);
|
|
270
|
-
}, [reactFlowInstance, setNodes]);
|
|
271
|
-
const selectedNode = selectedNodeId ? nodes.find((n) => n.id === selectedNodeId) : null;
|
|
272
|
-
const handleSelectedNodeLabelChange = useCallback((newLabel) => {
|
|
273
|
-
if (!selectedNodeId) return;
|
|
274
|
-
const updated = useFlowStore.getState().workflow.nodes.map((n) => n.id === selectedNodeId ? {
|
|
275
|
-
...n,
|
|
276
|
-
data: {
|
|
277
|
-
...n.data,
|
|
278
|
-
label: newLabel
|
|
279
|
-
}
|
|
280
|
-
} : n);
|
|
281
|
-
setNodes(updated);
|
|
282
|
-
}, [selectedNodeId, setNodes]);
|
|
283
|
-
const handleDeleteSelectedNode = useCallback(() => {
|
|
284
|
-
if (!selectedNode) return;
|
|
285
|
-
if (selectedNode.deletable === false) return;
|
|
286
|
-
deleteNode(selectedNode);
|
|
287
|
-
setSelectedNodeId(null);
|
|
288
|
-
}, [selectedNode, deleteNode]);
|
|
289
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
290
|
-
className: cn("flex flex-col flex-1 h-full w-full min-h-0", className),
|
|
291
|
-
children: [
|
|
292
|
-
!hideHeader && /* @__PURE__ */ jsxs(Card, {
|
|
293
|
-
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",
|
|
294
|
-
children: [/* @__PURE__ */ jsxs("div", {
|
|
295
|
-
className: "flex items-center gap-2",
|
|
296
|
-
children: [onBack && /* @__PURE__ */ jsx(Button, {
|
|
297
|
-
variant: "ghost",
|
|
298
|
-
size: "icon",
|
|
299
|
-
onClick: onBack,
|
|
300
|
-
children: /* @__PURE__ */ jsx(ArrowLeft, { className: "size-5" })
|
|
301
|
-
}), /* @__PURE__ */ jsx(Input, {
|
|
302
|
-
className: "font-semibold max-w-[300px]",
|
|
303
|
-
value: workflowName,
|
|
304
|
-
onChange: handleNameChange,
|
|
305
|
-
placeholder: tr("fluidgrids.components.workflowBuilderCore.workflowNamePlaceholder", "Workflow Name"),
|
|
306
|
-
disabled: readonly
|
|
307
|
-
})]
|
|
308
|
-
}), !readonly && /* @__PURE__ */ jsxs("div", {
|
|
309
|
-
className: "flex items-center gap-2",
|
|
310
|
-
children: [/* @__PURE__ */ jsxs(Button, {
|
|
311
|
-
"data-agent": "confirm",
|
|
312
|
-
variant: "outline",
|
|
313
|
-
size: "sm",
|
|
314
|
-
onClick: handleSave,
|
|
315
|
-
children: [/* @__PURE__ */ jsx(Save, { className: "size-4 mr-1" }), tr("fluidgrids.components.workflowBuilderCore.save", "Save")]
|
|
316
|
-
}), /* @__PURE__ */ jsxs(Button, {
|
|
317
|
-
"data-agent": "confirm",
|
|
318
|
-
size: "sm",
|
|
319
|
-
onClick: handleExecute,
|
|
320
|
-
children: [/* @__PURE__ */ jsx(Play, { className: "size-4 mr-1" }), tr("fluidgrids.components.workflowBuilderCore.run", "Run")]
|
|
321
|
-
})]
|
|
322
|
-
})]
|
|
323
|
-
}),
|
|
324
|
-
/* @__PURE__ */ jsxs("div", {
|
|
325
|
-
className: "flex flex-1 min-h-0 overflow-hidden",
|
|
326
|
-
children: [/* @__PURE__ */ jsxs("div", {
|
|
327
|
-
className: "flex-1 h-full relative",
|
|
328
|
-
ref: reactFlowWrapper,
|
|
329
|
-
children: [/* @__PURE__ */ jsxs(ReactFlow, {
|
|
330
|
-
nodes,
|
|
331
|
-
edges: canvasEdges,
|
|
332
|
-
onNodesChange: readonly ? void 0 : onNodesChange,
|
|
333
|
-
onEdgesChange: readonly ? void 0 : onEdgesChange,
|
|
334
|
-
onConnect: readonly ? void 0 : onConnect,
|
|
335
|
-
onNodeClick: readonly ? void 0 : handleNodeClick,
|
|
336
|
-
onPaneClick: handlePaneClick,
|
|
337
|
-
onDragOver: readonly ? void 0 : handleDragOver,
|
|
338
|
-
onDrop: readonly ? void 0 : handleDrop,
|
|
339
|
-
nodeTypes: NODE_TYPES,
|
|
340
|
-
defaultEdgeOptions,
|
|
341
|
-
fitView: true,
|
|
342
|
-
snapToGrid: true,
|
|
343
|
-
snapGrid: [16, 16],
|
|
344
|
-
proOptions: { hideAttribution: true },
|
|
345
|
-
deleteKeyCode: readonly ? null : "Backspace",
|
|
346
|
-
children: [
|
|
347
|
-
/* @__PURE__ */ jsx(Background, { gap: 24 }),
|
|
348
|
-
/* @__PURE__ */ jsx(Controls, {}),
|
|
349
|
-
/* @__PURE__ */ jsx(MiniMap, {})
|
|
350
|
-
]
|
|
351
|
-
}), /* @__PURE__ */ jsx(FluidGridsMark, {})]
|
|
352
|
-
}), !hideSidebar && !readonly && /* @__PURE__ */ jsxs("div", {
|
|
353
|
-
className: "w-60 shrink-0 border-l bg-card overflow-y-auto",
|
|
354
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
355
|
-
className: "p-4 border-b",
|
|
356
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
357
|
-
className: "text-sm font-semibold",
|
|
358
|
-
children: tr("fluidgrids.components.workflowBuilderCore.nodePropertiesHeading", "Node Properties")
|
|
359
|
-
})
|
|
360
|
-
}), selectedNode ? /* @__PURE__ */ jsxs("div", {
|
|
361
|
-
className: "p-4 space-y-4",
|
|
362
|
-
children: [
|
|
363
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
|
|
364
|
-
className: "block text-xs font-medium text-muted-foreground mb-1",
|
|
365
|
-
children: tr("fluidgrids.components.workflowBuilderCore.nodeIdLabel", "Node ID")
|
|
366
|
-
}), /* @__PURE__ */ jsx("code", {
|
|
367
|
-
className: "block text-xs bg-muted px-2 py-1 rounded font-mono break-all",
|
|
368
|
-
children: selectedNode.id
|
|
369
|
-
})] }),
|
|
370
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
|
|
371
|
-
className: "block text-xs font-medium text-muted-foreground mb-1",
|
|
372
|
-
children: tr("fluidgrids.components.workflowBuilderCore.nodeTypeLabel", "Type")
|
|
373
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
374
|
-
className: "flex items-center gap-2",
|
|
375
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
376
|
-
className: "inline-block w-3 h-3 rounded-full shrink-0",
|
|
377
|
-
style: { background: getNodeColor(selectedNode.type || "default") }
|
|
378
|
-
}), /* @__PURE__ */ jsx("code", {
|
|
379
|
-
className: "text-xs font-mono",
|
|
380
|
-
children: selectedNode.type
|
|
381
|
-
})]
|
|
382
|
-
})] }),
|
|
383
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
|
|
384
|
-
className: "block text-xs font-medium text-muted-foreground mb-1",
|
|
385
|
-
children: tr("fluidgrids.components.workflowBuilderCore.nodeLabelLabel", "Label")
|
|
386
|
-
}), /* @__PURE__ */ jsx(Input, {
|
|
387
|
-
value: selectedNode.data?.label ?? "",
|
|
388
|
-
onChange: (e) => handleSelectedNodeLabelChange(e.target.value),
|
|
389
|
-
className: "text-sm",
|
|
390
|
-
placeholder: tr("fluidgrids.components.workflowBuilderCore.nodeLabelPlaceholder", "Node label")
|
|
391
|
-
})] }),
|
|
392
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
|
|
393
|
-
className: "block text-xs font-medium text-muted-foreground mb-1",
|
|
394
|
-
children: tr("fluidgrids.components.workflowBuilderCore.positionLabel", "Position")
|
|
395
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
396
|
-
className: "grid grid-cols-2 gap-2 text-xs text-muted-foreground",
|
|
397
|
-
children: [/* @__PURE__ */ jsxs("div", { children: [
|
|
398
|
-
"X:",
|
|
399
|
-
" ",
|
|
400
|
-
/* @__PURE__ */ jsx("span", {
|
|
401
|
-
className: "font-mono",
|
|
402
|
-
children: Math.round(selectedNode.position.x)
|
|
403
|
-
})
|
|
404
|
-
] }), /* @__PURE__ */ jsxs("div", { children: [
|
|
405
|
-
"Y:",
|
|
406
|
-
" ",
|
|
407
|
-
/* @__PURE__ */ jsx("span", {
|
|
408
|
-
className: "font-mono",
|
|
409
|
-
children: Math.round(selectedNode.position.y)
|
|
410
|
-
})
|
|
411
|
-
] })]
|
|
412
|
-
})] }),
|
|
413
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("label", {
|
|
414
|
-
className: "block text-xs font-medium text-muted-foreground mb-1",
|
|
415
|
-
children: tr("fluidgrids.components.workflowBuilderCore.connectionsLabel", "Connections")
|
|
416
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
417
|
-
className: "text-xs text-muted-foreground",
|
|
418
|
-
children: (() => {
|
|
419
|
-
const inbound = edges.filter((e) => e.target === selectedNode.id);
|
|
420
|
-
const outbound = edges.filter((e) => e.source === selectedNode.id);
|
|
421
|
-
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { children: [
|
|
422
|
-
inbound.length,
|
|
423
|
-
" inbound, ",
|
|
424
|
-
outbound.length,
|
|
425
|
-
" outbound"
|
|
426
|
-
] }) });
|
|
427
|
-
})()
|
|
428
|
-
})] }),
|
|
429
|
-
selectedNode.deletable !== false && /* @__PURE__ */ jsx("div", {
|
|
430
|
-
className: "pt-2 border-t",
|
|
431
|
-
children: /* @__PURE__ */ jsxs(Button, {
|
|
432
|
-
variant: "destructive",
|
|
433
|
-
size: "sm",
|
|
434
|
-
className: "w-full",
|
|
435
|
-
onClick: handleDeleteSelectedNode,
|
|
436
|
-
children: [/* @__PURE__ */ jsx(Trash2, { className: "size-4 mr-1" }), tr("fluidgrids.components.workflowBuilderCore.deleteNode", "Delete Node")]
|
|
437
|
-
})
|
|
438
|
-
})
|
|
439
|
-
]
|
|
440
|
-
}) : /* @__PURE__ */ jsxs("div", {
|
|
441
|
-
className: "p-4",
|
|
442
|
-
children: [/* @__PURE__ */ jsx("p", {
|
|
443
|
-
className: "text-xs text-muted-foreground",
|
|
444
|
-
children: tr("fluidgrids.components.workflowBuilderCore.noSelectionHint", "Click a node on the canvas to view and edit its properties.")
|
|
445
|
-
}), /* @__PURE__ */ jsx("p", {
|
|
446
|
-
className: "text-xs text-muted-foreground mt-2",
|
|
447
|
-
children: tr("fluidgrids.components.workflowBuilderCore.dragPaletteHint", "Drag nodes from the palette on the left to add them to the workflow.")
|
|
448
|
-
})]
|
|
449
|
-
})]
|
|
450
|
-
})]
|
|
451
|
-
}),
|
|
452
|
-
!hideLogsPanel && /* @__PURE__ */ jsxs("div", {
|
|
453
|
-
className: "h-32 border-t bg-card p-2",
|
|
454
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
455
|
-
className: "text-sm font-medium mb-2",
|
|
456
|
-
children: tr("fluidgrids.components.workflowBuilderCore.executionLogsHeading", "Execution Logs")
|
|
457
|
-
}), /* @__PURE__ */ jsx("p", {
|
|
458
|
-
className: "text-xs text-muted-foreground",
|
|
459
|
-
children: tr("fluidgrids.components.workflowBuilderCore.executionLogsEmpty", "Execution logs will appear here when you run the workflow")
|
|
460
|
-
})]
|
|
461
|
-
})
|
|
462
|
-
]
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* Lightweight, local-only workflow canvas.
|
|
467
|
-
*
|
|
468
|
-
* Host events (`FluidGridsEventMap`): reports `node:selected` exactly like the
|
|
469
|
-
* full builder canvas. Save and Run only hand data to `onSave` / `onExecute`
|
|
470
|
-
* and call no backend, so it emits no `workflow:saved`, `run:started` or
|
|
471
|
-
* `error` events: the host performs those actions and already knows their
|
|
472
|
-
* outcome. Works without a host `ThemeProvider`.
|
|
473
|
-
*/
|
|
474
|
-
function WorkflowBuilderCore(props) {
|
|
475
|
-
return /* @__PURE__ */ jsx(EnsureThemeProvider, { children: /* @__PURE__ */ jsxs(ReactFlowProvider, { children: [/* @__PURE__ */ jsx(FlowBuilderInner, { ...props }), /* @__PURE__ */ jsx(Toaster$1, {
|
|
476
|
-
richColors: true,
|
|
477
|
-
position: "bottom-center",
|
|
478
|
-
duration: 2e3
|
|
479
|
-
})] }) });
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
// src/components/WorkflowBuilder.tsx
|
|
483
|
-
/**
|
|
484
|
-
* WorkflowBuilder - Standalone workflow builder component with Apollo client support
|
|
485
|
-
*
|
|
486
|
-
* Use this component when you want to embed the workflow builder in any React app.
|
|
487
|
-
* You can either:
|
|
488
|
-
* 1. Provide pre-configured Apollo clients (workspaceClient + globalClient) - Recommended
|
|
489
|
-
* 2. Provide URLs and let the component create clients internally
|
|
490
|
-
*
|
|
491
|
-
* It needs no host `ThemeProvider` (one is mounted only when the page has
|
|
492
|
-
* none). Host events: `onEvent` receives `node:selected`; Save and Run are
|
|
493
|
-
* local (they call `onSave` / `onExecute` and no backend), so they emit no
|
|
494
|
-
* `workflow:saved` / `run:started`. See `WorkflowBuilderCore`.
|
|
495
|
-
*
|
|
496
|
-
* @example Dual Client Injection (Recommended)
|
|
497
|
-
* ```tsx
|
|
498
|
-
* import { createFluidGridsClients } from '@fluidgrids/fe-sdk';
|
|
499
|
-
*
|
|
500
|
-
* const { workspaceClient, globalClient } = createFluidGridsClients({
|
|
501
|
-
* workspaceApiUrl: 'http://localhost:4000/workspaces/graphql',
|
|
502
|
-
* globalApiUrl: 'http://localhost:4000/global/graphql',
|
|
503
|
-
* authToken: token,
|
|
504
|
-
* workspaceId: 'ws-123',
|
|
505
|
-
* });
|
|
506
|
-
*
|
|
507
|
-
* <WorkflowBuilder
|
|
508
|
-
* workspaceClient={workspaceClient}
|
|
509
|
-
* globalClient={globalClient}
|
|
510
|
-
* workspaceId="ws-123"
|
|
511
|
-
* onSave={(workflow) => console.log(workflow)}
|
|
512
|
-
* />
|
|
513
|
-
* ```
|
|
514
|
-
*
|
|
515
|
-
* @example URL-based (Simpler, less flexible)
|
|
516
|
-
* ```tsx
|
|
517
|
-
* <WorkflowBuilder
|
|
518
|
-
* apiGatewayUrl="http://localhost:4000/workspaces/graphql"
|
|
519
|
-
* globalApiUrl="http://localhost:4000/global/graphql"
|
|
520
|
-
* authToken={token}
|
|
521
|
-
* workspaceId="ws-123"
|
|
522
|
-
* onSave={(workflow) => console.log(workflow)}
|
|
523
|
-
* />
|
|
524
|
-
* ```
|
|
525
|
-
*/
|
|
526
|
-
function WorkflowBuilder$1({ workflowId, workflowVersion, initialWorkflow, apiGatewayUrl, globalApiUrl, authToken, workspaceId, tenantId, productId, userId, workspaceToken, organizationId, workspaceClient, globalClient, theme, auth, onEvent, ...coreProps }) {
|
|
527
|
-
const workflow = initialWorkflow || createDefaultWorkflow(workflowId, workflowVersion);
|
|
528
|
-
return /* @__PURE__ */ jsx(FluidGridsProvider, {
|
|
529
|
-
apiGatewayUrl,
|
|
530
|
-
globalApiUrl,
|
|
531
|
-
authToken,
|
|
532
|
-
workspaceId,
|
|
533
|
-
tenantId,
|
|
534
|
-
productId,
|
|
535
|
-
userId,
|
|
536
|
-
workspaceToken,
|
|
537
|
-
organizationId,
|
|
538
|
-
workspaceClient,
|
|
539
|
-
globalClient,
|
|
540
|
-
theme,
|
|
541
|
-
auth,
|
|
542
|
-
onEvent,
|
|
543
|
-
children: /* @__PURE__ */ jsx(WorkflowBuilderCore, {
|
|
544
|
-
workflow,
|
|
545
|
-
...coreProps
|
|
546
|
-
})
|
|
547
|
-
});
|
|
548
|
-
}
|
|
549
|
-
function createDefaultWorkflow(id, version) {
|
|
550
|
-
return {
|
|
551
|
-
id: id || `workflow-${Date.now()}`,
|
|
552
|
-
workflowKey: id || `workflow-${Date.now()}`,
|
|
553
|
-
name: "Untitled Workflow",
|
|
554
|
-
version: version || "1",
|
|
555
|
-
nodes: [],
|
|
556
|
-
edges: [],
|
|
557
|
-
sidebar: {
|
|
558
|
-
active: "store-browse",
|
|
559
|
-
panels: { nodeProperties: { selectedNode: null } }
|
|
560
|
-
}
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
|
|
564
25
|
// src/builder/live/canvas-base.ts
|
|
565
26
|
let base = null;
|
|
566
27
|
/** The base for the open workflow, or `null` when none was recorded for it. */
|
|
@@ -1627,7 +1088,7 @@ function GuidedTourStarter({ ready }) {
|
|
|
1627
1088
|
}
|
|
1628
1089
|
|
|
1629
1090
|
// src/builder/app/workflow/work/page.tsx
|
|
1630
|
-
const LazyMissingNodesInstallModal = lazy(() => import("./MissingNodesInstallModal-
|
|
1091
|
+
const LazyMissingNodesInstallModal = lazy(() => import("./MissingNodesInstallModal-CMybsI8h.js").then((m) => ({ default: m.MissingNodesInstallModal })));
|
|
1631
1092
|
function WorkflowItem({ readonly = false }) {
|
|
1632
1093
|
if (readonly) {
|
|
1633
1094
|
const queryParams = new URLSearchParams(window.location.search);
|
|
@@ -1698,9 +1159,9 @@ function WorkflowItem({ readonly = false }) {
|
|
|
1698
1159
|
setInstalling(true);
|
|
1699
1160
|
setInstallErrors([]);
|
|
1700
1161
|
try {
|
|
1701
|
-
const { getGlobalStoreClient } = await import("./
|
|
1702
|
-
const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-
|
|
1703
|
-
const { getFluidGridsConfig } = await import("./
|
|
1162
|
+
const { getGlobalStoreClient } = await import("./node-registry-refresh-Dy0uRg9f.js").then((n) => n.a);
|
|
1163
|
+
const { InstallWorkflowNodeDocument } = await import("./FluidGridsProvider-dvZSNtSW.js").then((n) => n.y);
|
|
1164
|
+
const { getFluidGridsConfig } = await import("./client-C9XSzSXr.js").then((n) => n.b);
|
|
1704
1165
|
const storeClient = getGlobalStoreClient();
|
|
1705
1166
|
const cfg = getFluidGridsConfig();
|
|
1706
1167
|
for (let i = 0; i < nodesToInstall.length; i++) {
|
|
@@ -2130,31 +1591,4 @@ function WorkflowBuilder() {
|
|
|
2130
1591
|
});
|
|
2131
1592
|
}
|
|
2132
1593
|
|
|
2133
|
-
|
|
2134
|
-
/**
|
|
2135
|
-
* Global search indexes WorkflowDefinition by its database id, but the
|
|
2136
|
-
* builder route (`workflow/:workflowKey/:version`) is keyed by workflowKey +
|
|
2137
|
-
* version. This page bridges the two: it resolves the id to its current
|
|
2138
|
-
* workflowKey/version and redirects there.
|
|
2139
|
-
*/
|
|
2140
|
-
function WorkflowSearchRedirect() {
|
|
2141
|
-
const { id } = useParams();
|
|
2142
|
-
const { workflow, loading, error } = useWorkflowDefinition(void 0, id);
|
|
2143
|
-
if (loading) return /* @__PURE__ */ jsxs("div", {
|
|
2144
|
-
className: "flex h-full min-h-[40vh] items-center justify-center gap-2 text-sm text-muted-foreground",
|
|
2145
|
-
children: [/* @__PURE__ */ jsx(Icon, {
|
|
2146
|
-
icon: "svg-spinners:ring-resize",
|
|
2147
|
-
className: "size-4"
|
|
2148
|
-
}), "Opening workflow…"]
|
|
2149
|
-
});
|
|
2150
|
-
if (error || !workflow) return /* @__PURE__ */ jsx(Navigate, {
|
|
2151
|
-
to: "../list",
|
|
2152
|
-
replace: true
|
|
2153
|
-
});
|
|
2154
|
-
return /* @__PURE__ */ jsx(Navigate, {
|
|
2155
|
-
to: `../workflow/${workflow.workflowKey}/${workflow.version}`,
|
|
2156
|
-
replace: true
|
|
2157
|
-
});
|
|
2158
|
-
}
|
|
2159
|
-
|
|
2160
|
-
export { START_FIELD_PREFIX as a, START_OPERATION_PARAM as c, WorkflowBuilder$1 as d, WorkflowBuilderCore as f, GuidedTourStarter as i, readStartNodeRequest as l, WorkflowBuilder as n, START_NAME_PARAM as o, EnsureThemeProvider as p, WorkflowBuilder_exports as r, START_NODE_PARAM as s, WorkflowSearchRedirect as t, startNodeLink as u };
|
|
1594
|
+
export { START_NAME_PARAM as a, readStartNodeRequest as c, START_FIELD_PREFIX as i, startNodeLink as l, WorkflowBuilder_exports as n, START_NODE_PARAM as o, GuidedTourStarter as r, START_OPERATION_PARAM as s, WorkflowBuilder as t };
|