@bian-womp/spark-workbench 0.3.88 → 0.3.89
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/lib/src/adapters/cli/index.d.ts +22 -0
- package/lib/src/adapters/cli/index.d.ts.map +1 -0
- package/lib/src/adapters/cli/index.js +50 -0
- package/lib/src/adapters/cli/index.js.map +1 -0
- package/lib/src/core/AbstractWorkbench.d.ts +40 -0
- package/lib/src/core/AbstractWorkbench.d.ts.map +1 -0
- package/lib/src/core/AbstractWorkbench.js +15 -0
- package/lib/src/core/AbstractWorkbench.js.map +1 -0
- package/lib/src/core/InMemoryWorkbench.d.ts +304 -0
- package/lib/src/core/InMemoryWorkbench.d.ts.map +1 -0
- package/lib/src/core/InMemoryWorkbench.js +1016 -0
- package/lib/src/core/InMemoryWorkbench.js.map +1 -0
- package/lib/src/core/contracts.d.ts +172 -0
- package/lib/src/core/contracts.d.ts.map +1 -0
- package/lib/src/core/contracts.js +2 -0
- package/lib/src/core/contracts.js.map +1 -0
- package/lib/src/core/ui-extensions.d.ts +85 -0
- package/lib/src/core/ui-extensions.d.ts.map +1 -0
- package/lib/src/core/ui-extensions.js +111 -0
- package/lib/src/core/ui-extensions.js.map +1 -0
- package/lib/src/examples/cli.d.ts +2 -0
- package/lib/src/examples/cli.d.ts.map +1 -0
- package/lib/src/examples/cli.js +244 -0
- package/lib/src/examples/cli.js.map +1 -0
- package/lib/src/examples/reactflow/App.d.ts +2 -0
- package/lib/src/examples/reactflow/App.d.ts.map +1 -0
- package/lib/src/examples/reactflow/App.js +20 -0
- package/lib/src/examples/reactflow/App.js.map +1 -0
- package/lib/src/index.d.ts +30 -0
- package/lib/src/index.d.ts.map +1 -0
- package/lib/src/index.js +30 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/misc/DebugEvents.d.ts +7 -0
- package/lib/src/misc/DebugEvents.d.ts.map +1 -0
- package/lib/src/misc/DebugEvents.js +51 -0
- package/lib/src/misc/DebugEvents.js.map +1 -0
- package/lib/src/misc/DefaultEdge.d.ts +5 -0
- package/lib/src/misc/DefaultEdge.d.ts.map +1 -0
- package/lib/src/misc/DefaultEdge.js +15 -0
- package/lib/src/misc/DefaultEdge.js.map +1 -0
- package/lib/src/misc/DefaultNode.d.ts +5 -0
- package/lib/src/misc/DefaultNode.d.ts.map +1 -0
- package/lib/src/misc/DefaultNode.js +25 -0
- package/lib/src/misc/DefaultNode.js.map +1 -0
- package/lib/src/misc/DefaultNodeContent.d.ts +4 -0
- package/lib/src/misc/DefaultNodeContent.d.ts.map +1 -0
- package/lib/src/misc/DefaultNodeContent.js +58 -0
- package/lib/src/misc/DefaultNodeContent.js.map +1 -0
- package/lib/src/misc/DefaultNodeHeader.d.ts +13 -0
- package/lib/src/misc/DefaultNodeHeader.d.ts.map +1 -0
- package/lib/src/misc/DefaultNodeHeader.js +78 -0
- package/lib/src/misc/DefaultNodeHeader.js.map +1 -0
- package/lib/src/misc/Inspector.d.ts +12 -0
- package/lib/src/misc/Inspector.d.ts.map +1 -0
- package/lib/src/misc/Inspector.js +253 -0
- package/lib/src/misc/Inspector.js.map +1 -0
- package/lib/src/misc/IssueBadge.d.ts +7 -0
- package/lib/src/misc/IssueBadge.d.ts.map +1 -0
- package/lib/src/misc/IssueBadge.js +7 -0
- package/lib/src/misc/IssueBadge.js.map +1 -0
- package/lib/src/misc/KeyboardShortcutToast.d.ts +16 -0
- package/lib/src/misc/KeyboardShortcutToast.d.ts.map +1 -0
- package/lib/src/misc/KeyboardShortcutToast.js +40 -0
- package/lib/src/misc/KeyboardShortcutToast.js.map +1 -0
- package/lib/src/misc/NodeHandles.d.ts +18 -0
- package/lib/src/misc/NodeHandles.d.ts.map +1 -0
- package/lib/src/misc/NodeHandles.js +67 -0
- package/lib/src/misc/NodeHandles.js.map +1 -0
- package/lib/src/misc/SelectionActiveSync.d.ts +10 -0
- package/lib/src/misc/SelectionActiveSync.d.ts.map +1 -0
- package/lib/src/misc/SelectionActiveSync.js +21 -0
- package/lib/src/misc/SelectionActiveSync.js.map +1 -0
- package/lib/src/misc/WorkbenchCanvas.d.ts +23 -0
- package/lib/src/misc/WorkbenchCanvas.d.ts.map +1 -0
- package/lib/src/misc/WorkbenchCanvas.js +669 -0
- package/lib/src/misc/WorkbenchCanvas.js.map +1 -0
- package/lib/src/misc/WorkbenchStudio.d.ts +43 -0
- package/lib/src/misc/WorkbenchStudio.d.ts.map +1 -0
- package/lib/src/misc/WorkbenchStudio.js +463 -0
- package/lib/src/misc/WorkbenchStudio.js.map +1 -0
- package/lib/src/misc/constants.d.ts +4 -0
- package/lib/src/misc/constants.d.ts.map +1 -0
- package/lib/src/misc/constants.js +5 -0
- package/lib/src/misc/constants.js.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.d.ts +133 -0
- package/lib/src/misc/context/WorkbenchContext.d.ts.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.js +9 -0
- package/lib/src/misc/context/WorkbenchContext.js.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.provider.d.ts +12 -0
- package/lib/src/misc/context/WorkbenchContext.provider.d.ts.map +1 -0
- package/lib/src/misc/context/WorkbenchContext.provider.js +995 -0
- package/lib/src/misc/context/WorkbenchContext.provider.js.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuButton.d.ts +8 -0
- package/lib/src/misc/context-menu/ContextMenuButton.d.ts.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuButton.js +10 -0
- package/lib/src/misc/context-menu/ContextMenuButton.js.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts +85 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.js +2 -0
- package/lib/src/misc/context-menu/ContextMenuHandlers.js.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts +45 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts.map +1 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.js +182 -0
- package/lib/src/misc/context-menu/ContextMenuHelpers.js.map +1 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.d.ts +3 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.d.ts.map +1 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.js +111 -0
- package/lib/src/misc/context-menu/DefaultContextMenu.js.map +1 -0
- package/lib/src/misc/context-menu/NodeContextMenu.d.ts +3 -0
- package/lib/src/misc/context-menu/NodeContextMenu.d.ts.map +1 -0
- package/lib/src/misc/context-menu/NodeContextMenu.js +51 -0
- package/lib/src/misc/context-menu/NodeContextMenu.js.map +1 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.d.ts +3 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.d.ts.map +1 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.js +47 -0
- package/lib/src/misc/context-menu/SelectionContextMenu.js.map +1 -0
- package/lib/src/misc/hooks.d.ts +18 -0
- package/lib/src/misc/hooks.d.ts.map +1 -0
- package/lib/src/misc/hooks.js +275 -0
- package/lib/src/misc/hooks.js.map +1 -0
- package/lib/src/misc/layout.d.ts +117 -0
- package/lib/src/misc/layout.d.ts.map +1 -0
- package/lib/src/misc/layout.js +205 -0
- package/lib/src/misc/layout.js.map +1 -0
- package/lib/src/misc/load.d.ts +5 -0
- package/lib/src/misc/load.d.ts.map +1 -0
- package/lib/src/misc/load.js +106 -0
- package/lib/src/misc/load.js.map +1 -0
- package/lib/src/misc/mapping.d.ts +128 -0
- package/lib/src/misc/mapping.d.ts.map +1 -0
- package/lib/src/misc/mapping.js +270 -0
- package/lib/src/misc/mapping.js.map +1 -0
- package/lib/src/misc/merge-utils.d.ts +12 -0
- package/lib/src/misc/merge-utils.d.ts.map +1 -0
- package/lib/src/misc/merge-utils.js +51 -0
- package/lib/src/misc/merge-utils.js.map +1 -0
- package/lib/src/misc/thumbnail-utils.d.ts +53 -0
- package/lib/src/misc/thumbnail-utils.d.ts.map +1 -0
- package/lib/src/misc/thumbnail-utils.js +629 -0
- package/lib/src/misc/thumbnail-utils.js.map +1 -0
- package/lib/src/misc/types.d.ts +18 -0
- package/lib/src/misc/types.d.ts.map +1 -0
- package/lib/src/misc/types.js +2 -0
- package/lib/src/misc/types.js.map +1 -0
- package/lib/src/misc/value.d.ts +16 -0
- package/lib/src/misc/value.d.ts.map +1 -0
- package/lib/src/misc/value.js +114 -0
- package/lib/src/misc/value.js.map +1 -0
- package/lib/src/misc/viewport-utils.d.ts +6 -0
- package/lib/src/misc/viewport-utils.d.ts.map +1 -0
- package/lib/src/misc/viewport-utils.js +18 -0
- package/lib/src/misc/viewport-utils.js.map +1 -0
- package/lib/src/runtime/AbstractGraphRunner.d.ts +61 -0
- package/lib/src/runtime/AbstractGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/AbstractGraphRunner.js +63 -0
- package/lib/src/runtime/AbstractGraphRunner.js.map +1 -0
- package/lib/src/runtime/IGraphRunner.d.ts +100 -0
- package/lib/src/runtime/IGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/IGraphRunner.js +2 -0
- package/lib/src/runtime/IGraphRunner.js.map +1 -0
- package/lib/src/runtime/LocalGraphRunner.d.ts +60 -0
- package/lib/src/runtime/LocalGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/LocalGraphRunner.js +294 -0
- package/lib/src/runtime/LocalGraphRunner.js.map +1 -0
- package/lib/src/runtime/RemoteGraphRunner.d.ts +109 -0
- package/lib/src/runtime/RemoteGraphRunner.d.ts.map +1 -0
- package/lib/src/runtime/RemoteGraphRunner.js +696 -0
- package/lib/src/runtime/RemoteGraphRunner.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { getInputTypeId, isInputPrivate, getInputHandleMetadata, } from "@bian-womp/spark-graph";
|
|
2
|
+
import cx from "classnames";
|
|
3
|
+
import { formatDeclaredTypeSignature } from "./value";
|
|
4
|
+
import { layoutNode, createHandleBounds, createHandleLayout, estimateNodeSize, } from "./layout";
|
|
5
|
+
export function toReactFlow(def, positions, sizes, registry, opts) {
|
|
6
|
+
const EDGE_STYLE_MISSING = { stroke: "#f59e0b", strokeWidth: 2 }; // amber-500
|
|
7
|
+
const EDGE_STYLE_ERROR = { stroke: "#ef4444", strokeWidth: 2 };
|
|
8
|
+
const EDGE_STYLE_RUNNING = { stroke: "#3b82f6" };
|
|
9
|
+
// Build a map of valid handles per node up-front and cache handle data
|
|
10
|
+
const validHandleMap = {};
|
|
11
|
+
for (const n of def.nodes) {
|
|
12
|
+
const { inputs, outputs } = opts.handles[n.nodeId] || {
|
|
13
|
+
inputs: {},
|
|
14
|
+
outputs: {},
|
|
15
|
+
};
|
|
16
|
+
const inputOrder = Object.keys(inputs).filter((k) => !isInputPrivate(inputs, k));
|
|
17
|
+
const outputOrder = Object.keys(outputs);
|
|
18
|
+
validHandleMap[n.nodeId] = {
|
|
19
|
+
inputs: new Set(inputOrder),
|
|
20
|
+
outputs: new Set(outputOrder),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Track which inputs are connected (for UI) and which handles are missing (for layout)
|
|
24
|
+
const connectedInputs = {};
|
|
25
|
+
const missingInputsByNode = {};
|
|
26
|
+
const missingOutputsByNode = {};
|
|
27
|
+
for (const e of def.edges) {
|
|
28
|
+
const tgtId = e.target.nodeId;
|
|
29
|
+
const tgtHandle = e.target.handle;
|
|
30
|
+
if (!connectedInputs[tgtId])
|
|
31
|
+
connectedInputs[tgtId] = new Set();
|
|
32
|
+
connectedInputs[tgtId].add(tgtHandle);
|
|
33
|
+
const tgtValid = !!validHandleMap[tgtId]?.inputs.has(tgtHandle);
|
|
34
|
+
if (!tgtValid) {
|
|
35
|
+
(missingInputsByNode[tgtId] || (missingInputsByNode[tgtId] = new Set())).add(tgtHandle);
|
|
36
|
+
}
|
|
37
|
+
const srcId = e.source.nodeId;
|
|
38
|
+
const srcHandle = e.source.handle;
|
|
39
|
+
const srcValid = !!validHandleMap[srcId]?.outputs.has(srcHandle);
|
|
40
|
+
if (!srcValid) {
|
|
41
|
+
(missingOutputsByNode[srcId] || (missingOutputsByNode[srcId] = new Set())).add(srcHandle);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Get layout function overrides from UI registry
|
|
45
|
+
const layoutNodeOverride = opts.ui?.getLayoutNode() ?? layoutNode;
|
|
46
|
+
const createHandleBoundsFn = opts.ui?.getCreateHandleBounds() ?? createHandleBounds;
|
|
47
|
+
const createHandleLayoutFn = opts.ui?.getCreateHandleLayout() ?? createHandleLayout;
|
|
48
|
+
const estimateNodeSizeFn = opts.ui?.getEstimateNodeSize() ?? estimateNodeSize;
|
|
49
|
+
const computeLayout = (node, overrides, missingInputs, missingOutputs) => {
|
|
50
|
+
return layoutNodeOverride
|
|
51
|
+
? layoutNodeOverride({
|
|
52
|
+
node,
|
|
53
|
+
registry,
|
|
54
|
+
showValues: opts.showValues,
|
|
55
|
+
overrides,
|
|
56
|
+
missingInputs,
|
|
57
|
+
missingOutputs,
|
|
58
|
+
})
|
|
59
|
+
: layoutNode({
|
|
60
|
+
node,
|
|
61
|
+
registry,
|
|
62
|
+
showValues: opts.showValues,
|
|
63
|
+
overrides,
|
|
64
|
+
missingInputs,
|
|
65
|
+
missingOutputs,
|
|
66
|
+
}, {
|
|
67
|
+
estimateNodeSize: estimateNodeSizeFn,
|
|
68
|
+
createHandleBounds: createHandleBoundsFn,
|
|
69
|
+
createHandleLayout: createHandleLayoutFn,
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
const nodes = def.nodes.map((n) => {
|
|
73
|
+
const effectiveHandles = opts.handles[n.nodeId] || {
|
|
74
|
+
inputs: {},
|
|
75
|
+
outputs: {},
|
|
76
|
+
};
|
|
77
|
+
const { inputs: inputSource, outputs: outputSource } = effectiveHandles;
|
|
78
|
+
const overrideSize = opts.getDefaultNodeSize?.(n.typeId);
|
|
79
|
+
const customSize = sizes?.[n.nodeId];
|
|
80
|
+
const sizeOverrides = customSize
|
|
81
|
+
? { ...overrideSize, width: customSize.width, height: customSize.height }
|
|
82
|
+
: overrideSize;
|
|
83
|
+
const extraInputs = Array.from(missingInputsByNode[n.nodeId] || []);
|
|
84
|
+
const extraOutputs = Array.from(missingOutputsByNode[n.nodeId] || []);
|
|
85
|
+
const geom = computeLayout(n, sizeOverrides, extraInputs, extraOutputs);
|
|
86
|
+
const renderWidth = customSize?.width ?? geom.width;
|
|
87
|
+
const renderHeight = customSize?.height ?? geom.height;
|
|
88
|
+
const initialGeom = customSize ? computeLayout(n, overrideSize, extraInputs, extraOutputs) : geom;
|
|
89
|
+
const inputHandles = geom.inputOrder.map((id) => ({
|
|
90
|
+
id,
|
|
91
|
+
typeId: getInputTypeId(inputSource, id) ?? "unknown",
|
|
92
|
+
}));
|
|
93
|
+
const outputHandles = geom.outputOrder.map((id) => ({
|
|
94
|
+
id,
|
|
95
|
+
typeId: formatDeclaredTypeSignature(outputSource[id]) ?? "unknown",
|
|
96
|
+
}));
|
|
97
|
+
const handleLayout = geom.handleLayout;
|
|
98
|
+
const handles = geom.handles;
|
|
99
|
+
const handleMetadata = {};
|
|
100
|
+
for (const handleId of Object.keys(inputSource)) {
|
|
101
|
+
handleMetadata[handleId] = getInputHandleMetadata(inputSource, handleId);
|
|
102
|
+
}
|
|
103
|
+
const baseData = {
|
|
104
|
+
typeId: n.typeId,
|
|
105
|
+
params: n.params,
|
|
106
|
+
inputHandles,
|
|
107
|
+
outputHandles,
|
|
108
|
+
handles: opts.handles[n.nodeId],
|
|
109
|
+
inputConnected: Object.fromEntries(inputHandles.map((h) => [h.id, !!connectedInputs[n.nodeId]?.has(h.id)])),
|
|
110
|
+
handleLayout,
|
|
111
|
+
showValues: opts.showValues,
|
|
112
|
+
renderWidth,
|
|
113
|
+
renderHeight,
|
|
114
|
+
initialWidth: initialGeom.width,
|
|
115
|
+
initialHeight: initialGeom.height,
|
|
116
|
+
inputValues: opts.inputs?.[n.nodeId],
|
|
117
|
+
inputDefaults: {
|
|
118
|
+
...opts.handles?.[n.nodeId]?.inputDefaults,
|
|
119
|
+
...opts.inputDefaults?.[n.nodeId],
|
|
120
|
+
},
|
|
121
|
+
outputValues: opts.outputs?.[n.nodeId],
|
|
122
|
+
handleMetadata,
|
|
123
|
+
status: opts.nodeStatus?.[n.nodeId],
|
|
124
|
+
validation: {
|
|
125
|
+
inputs: opts.nodeValidation?.inputs?.[n.nodeId] ?? [],
|
|
126
|
+
outputs: opts.nodeValidation?.outputs?.[n.nodeId] ?? [],
|
|
127
|
+
issues: opts.nodeValidation?.issues?.[n.nodeId] ?? [],
|
|
128
|
+
},
|
|
129
|
+
toString: opts.toString,
|
|
130
|
+
toElement: opts.toElement,
|
|
131
|
+
};
|
|
132
|
+
const customNodeData = opts.customData?.nodes;
|
|
133
|
+
const mergedData = customNodeData?.[n.nodeId] ? { ...baseData, custom: customNodeData[n.nodeId] } : baseData;
|
|
134
|
+
return {
|
|
135
|
+
id: n.nodeId,
|
|
136
|
+
data: mergedData,
|
|
137
|
+
position: positions[n.nodeId] ?? { x: 0, y: 0 },
|
|
138
|
+
type: opts.resolveNodeType?.(n.typeId) ?? "spark-default",
|
|
139
|
+
selected: opts.selectedNodeIds ? opts.selectedNodeIds.has(n.nodeId) : undefined,
|
|
140
|
+
measured: {
|
|
141
|
+
width: renderWidth,
|
|
142
|
+
height: renderHeight,
|
|
143
|
+
},
|
|
144
|
+
handles,
|
|
145
|
+
width: renderWidth,
|
|
146
|
+
height: renderHeight,
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
const edges = def.edges.map((e) => {
|
|
150
|
+
const st = opts.edgeStatus?.[e.id];
|
|
151
|
+
const isRunning = (st?.activeRuns || 0) > 0;
|
|
152
|
+
const hasError = !!st?.lastError;
|
|
153
|
+
const isInvalidEdge = !!opts.edgeValidation?.[e.id];
|
|
154
|
+
const sourceMissing = !validHandleMap[e.source.nodeId]?.outputs.has(e.source.handle);
|
|
155
|
+
const targetMissing = !validHandleMap[e.target.nodeId]?.inputs.has(e.target.handle);
|
|
156
|
+
const isMissing = sourceMissing || targetMissing;
|
|
157
|
+
const style = isMissing
|
|
158
|
+
? EDGE_STYLE_MISSING
|
|
159
|
+
: hasError || isInvalidEdge
|
|
160
|
+
? EDGE_STYLE_ERROR
|
|
161
|
+
: isRunning
|
|
162
|
+
? EDGE_STYLE_RUNNING
|
|
163
|
+
: undefined;
|
|
164
|
+
const edgeTypeId = e.typeId || undefined;
|
|
165
|
+
// Get handle type information from cached handles
|
|
166
|
+
const sourceHandles = opts.handles[e.source.nodeId];
|
|
167
|
+
const targetHandles = opts.handles[e.target.nodeId];
|
|
168
|
+
const sourceNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);
|
|
169
|
+
const targetNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);
|
|
170
|
+
const sourceHandleTypeId = sourceHandles?.outputs[e.source.handle]
|
|
171
|
+
? (formatDeclaredTypeSignature(sourceHandles.outputs[e.source.handle]) ?? "unknown")
|
|
172
|
+
: "unknown";
|
|
173
|
+
const targetHandleTypeId = targetHandles?.inputs[e.target.handle]
|
|
174
|
+
? (getInputTypeId(targetHandles.inputs, e.target.handle) ?? "unknown")
|
|
175
|
+
: "unknown";
|
|
176
|
+
const baseEdgeData = {
|
|
177
|
+
sourceNodeId: e.source.nodeId,
|
|
178
|
+
sourceNodeTypeId: sourceNode?.typeId || "unknown",
|
|
179
|
+
sourceHandle: e.source.handle,
|
|
180
|
+
sourceHandleTypeId,
|
|
181
|
+
targetNodeId: e.target.nodeId,
|
|
182
|
+
targetNodeTypeId: targetNode?.typeId || "unknown",
|
|
183
|
+
targetHandle: e.target.handle,
|
|
184
|
+
targetHandleTypeId,
|
|
185
|
+
edgeTypeId,
|
|
186
|
+
isRunning,
|
|
187
|
+
hasError,
|
|
188
|
+
isInvalid: isInvalidEdge,
|
|
189
|
+
isMissing,
|
|
190
|
+
};
|
|
191
|
+
const customEdgeData = opts.customData?.edges;
|
|
192
|
+
const mergedEdgeData = customEdgeData?.[e.id] ? { ...baseEdgeData, custom: customEdgeData[e.id] } : baseEdgeData;
|
|
193
|
+
return {
|
|
194
|
+
id: e.id,
|
|
195
|
+
source: e.source.nodeId,
|
|
196
|
+
target: e.target.nodeId,
|
|
197
|
+
sourceHandle: e.source.handle,
|
|
198
|
+
targetHandle: e.target.handle,
|
|
199
|
+
selected: opts.selectedEdgeIds ? opts.selectedEdgeIds.has(e.id) : undefined,
|
|
200
|
+
animated: isRunning && !isMissing,
|
|
201
|
+
style,
|
|
202
|
+
label: edgeTypeId,
|
|
203
|
+
type: "default",
|
|
204
|
+
data: mergedEdgeData,
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
return { nodes, edges };
|
|
208
|
+
}
|
|
209
|
+
// Shared node container border class composition for consistent visuals
|
|
210
|
+
export function getNodeBorderClassNames(args) {
|
|
211
|
+
const selected = !!args.selected;
|
|
212
|
+
const status = args.status || {};
|
|
213
|
+
const issues = args.validation?.issues ?? [];
|
|
214
|
+
const hasError = !!status.lastError;
|
|
215
|
+
const hasValidationError = issues.some((i) => i.level === "error");
|
|
216
|
+
const hasValidationWarning = !hasValidationError && issues.length > 0;
|
|
217
|
+
const isRunning = (status.activeRuns || 0) > 0;
|
|
218
|
+
const isInvalid = !!status.invalidated && !isRunning && !hasError;
|
|
219
|
+
// Keep border width constant to avoid layout reflow on selection toggles
|
|
220
|
+
const borderWidth = "border";
|
|
221
|
+
const borderStyle = isInvalid ? "border-dashed" : "border-solid";
|
|
222
|
+
const severity = hasError || hasValidationError ? "red" : hasValidationWarning ? "amber" : isRunning ? "blue" : "gray";
|
|
223
|
+
const borderBySeverity = {
|
|
224
|
+
red: "border-red-500",
|
|
225
|
+
amber: "border-amber-500",
|
|
226
|
+
blue: "border-blue-500",
|
|
227
|
+
gray: "border-gray-500 dark:border-gray-400",
|
|
228
|
+
};
|
|
229
|
+
const ringBySeverity = {
|
|
230
|
+
red: "ring-2 ring-red-300 dark:ring-red-900",
|
|
231
|
+
amber: "ring-2 ring-amber-300 dark:ring-amber-900",
|
|
232
|
+
blue: "ring-2 ring-blue-200 dark:ring-blue-900",
|
|
233
|
+
gray: "ring-2 ring-gray-300 dark:ring-gray-500",
|
|
234
|
+
};
|
|
235
|
+
const borderColor = borderBySeverity[severity];
|
|
236
|
+
const ring = isRunning
|
|
237
|
+
? ringBySeverity.blue
|
|
238
|
+
: selected
|
|
239
|
+
? ringBySeverity[severity === "blue" ? "gray" : severity]
|
|
240
|
+
: "";
|
|
241
|
+
return [borderWidth, borderStyle, borderColor, ring].join(" ").trim();
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Shared utility to generate handle className based on validation and value state.
|
|
245
|
+
* - Linked handles (with inbound edges) get black borders
|
|
246
|
+
* - Handles with values (but not linked) get darker gray borders
|
|
247
|
+
* - Handles with only defaults (no value, not linked) get lighter gray borders
|
|
248
|
+
* - Validation errors (red/amber) take precedence over value-based styling.
|
|
249
|
+
*/
|
|
250
|
+
export function getHandleClassName(args) {
|
|
251
|
+
const { kind, id, validation } = args;
|
|
252
|
+
const vIssues = (kind === "input" ? validation.inputs : validation.outputs)?.filter((v) => v.handle === id) || [];
|
|
253
|
+
const hasAny = vIssues.length > 0;
|
|
254
|
+
const hasErr = vIssues.some((v) => v.level === "error");
|
|
255
|
+
// Determine border color based on priority:
|
|
256
|
+
// 1. Validation errors (red/amber) - highest priority
|
|
257
|
+
// 2. Gray border
|
|
258
|
+
let borderColor;
|
|
259
|
+
if (hasAny && hasErr) {
|
|
260
|
+
borderColor = "!border-red-500";
|
|
261
|
+
}
|
|
262
|
+
else if (hasAny) {
|
|
263
|
+
borderColor = "!border-amber-500";
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
borderColor = "!border-gray-500 dark:!border-gray-400";
|
|
267
|
+
}
|
|
268
|
+
return cx("!w-3 !h-3 !bg-white/50 !dark:bg-stone-900 wb-nodrag wb-nowheel", borderColor, kind === "output" && "!rounded-none");
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../../src/misc/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { WorkbenchUIState } from "./types";
|
|
2
|
+
import type { GraphDefinition } from "@bian-womp/spark-protocol";
|
|
3
|
+
/**
|
|
4
|
+
* Merge UI state from source into target, remapping node IDs using nodeIdMap.
|
|
5
|
+
* Preserves target state and adds/updates source state with remapped IDs.
|
|
6
|
+
* If anchorPos and sourceDef are provided, positions will be offset relative to anchorPos.
|
|
7
|
+
*/
|
|
8
|
+
export declare function mergeUIState(targetUI: WorkbenchUIState | null | undefined, sourceUI: WorkbenchUIState | null | undefined, nodeIdMap: Record<string, string>, anchorPos?: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}, sourceDef?: GraphDefinition): WorkbenchUIState;
|
|
12
|
+
//# sourceMappingURL=merge-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-utils.d.ts","sourceRoot":"","sources":["../../../src/misc/merge-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC7C,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC7C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,SAAS,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EACpC,SAAS,CAAC,EAAE,eAAe,GAC1B,gBAAgB,CA2DlB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { offsetImportedPositions } from "@bian-womp/spark-graph";
|
|
2
|
+
/**
|
|
3
|
+
* Merge UI state from source into target, remapping node IDs using nodeIdMap.
|
|
4
|
+
* Preserves target state and adds/updates source state with remapped IDs.
|
|
5
|
+
* If anchorPos and sourceDef are provided, positions will be offset relative to anchorPos.
|
|
6
|
+
*/
|
|
7
|
+
export function mergeUIState(targetUI, sourceUI, nodeIdMap, anchorPos, sourceDef) {
|
|
8
|
+
const result = {
|
|
9
|
+
...targetUI,
|
|
10
|
+
};
|
|
11
|
+
if (!sourceUI)
|
|
12
|
+
return result;
|
|
13
|
+
// Merge positions with optional offset
|
|
14
|
+
if (sourceUI.positions) {
|
|
15
|
+
if (anchorPos && sourceDef) {
|
|
16
|
+
// Apply offset when anchorPos and sourceDef are provided
|
|
17
|
+
result.positions = offsetImportedPositions(targetUI?.positions ?? {}, sourceUI.positions, sourceDef, nodeIdMap, anchorPos);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
// Simple remapping without offset
|
|
21
|
+
result.positions = {
|
|
22
|
+
...(targetUI?.positions || {}),
|
|
23
|
+
...Object.fromEntries(Object.entries(sourceUI.positions).map(([oldId, pos]) => [nodeIdMap[oldId] || oldId, pos])),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// Merge selection: remap node IDs and edge IDs
|
|
28
|
+
if (sourceUI.selection) {
|
|
29
|
+
const remappedNodes = (sourceUI.selection.nodes || []).map((id) => nodeIdMap[id] || id).filter((id) => id); // Filter out invalid mappings
|
|
30
|
+
const remappedEdges = sourceUI.selection.edges || []; // Edge IDs don't need remapping typically
|
|
31
|
+
result.selection = {
|
|
32
|
+
nodes: [...(targetUI?.selection?.nodes || []), ...remappedNodes],
|
|
33
|
+
edges: [...(targetUI?.selection?.edges || []), ...remappedEdges],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// Merge nodeNames: remap node IDs
|
|
37
|
+
if (sourceUI.nodeNames) {
|
|
38
|
+
result.nodeNames = {
|
|
39
|
+
...(targetUI?.nodeNames || {}),
|
|
40
|
+
...Object.fromEntries(Object.entries(sourceUI.nodeNames).map(([oldId, name]) => [nodeIdMap[oldId] || oldId, name])),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (sourceUI.sizes) {
|
|
44
|
+
result.sizes = {
|
|
45
|
+
...(targetUI?.sizes || {}),
|
|
46
|
+
...Object.fromEntries(Object.entries(sourceUI.sizes).map(([oldId, size]) => [nodeIdMap[oldId] || oldId, size])),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=merge-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-utils.js","sourceRoot":"","sources":["../../../src/misc/merge-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow thumbnail capture utility
|
|
3
|
+
* Captures React Flow canvas as SVG image
|
|
4
|
+
*/
|
|
5
|
+
export interface ThumbnailOptions {
|
|
6
|
+
/**
|
|
7
|
+
* If true, export the whole graph instead of just the viewport. Default: true
|
|
8
|
+
*/
|
|
9
|
+
ignoreViewport?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Padding to add when exporting whole graph (in pixels). Default: 40
|
|
12
|
+
*/
|
|
13
|
+
padding?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Whether to export handles. Default: true
|
|
16
|
+
*/
|
|
17
|
+
exportHandles?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Whether to export node titles. Default: true
|
|
20
|
+
*/
|
|
21
|
+
exportNodeTitle?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to export background dot pattern. Default: true
|
|
24
|
+
*/
|
|
25
|
+
exportBackgroundPattern?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Background color of nodes. Default: "#f3f4f6"
|
|
28
|
+
*/
|
|
29
|
+
nodeBackgroundColor?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Color of background dot pattern. Default: "#f1f1f1"
|
|
32
|
+
*/
|
|
33
|
+
backgroundPatternColor?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Background color of the SVG. Default: "#ffffff"
|
|
36
|
+
*/
|
|
37
|
+
backgroundColor?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Captures a React Flow container element as an SVG image and returns data URL
|
|
41
|
+
* @param containerElement - The React Flow container DOM element
|
|
42
|
+
* @param options - Options for thumbnail capture
|
|
43
|
+
* @returns Promise resolving to SVG data URL string, or null if capture fails
|
|
44
|
+
*/
|
|
45
|
+
export declare function captureCanvasThumbnail(containerElement: HTMLElement | null, options?: ThumbnailOptions): Promise<string | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Captures a React Flow container element as an SVG image and downloads it
|
|
48
|
+
* @param containerElement - The React Flow container DOM element
|
|
49
|
+
* @param options - Options for thumbnail capture
|
|
50
|
+
* @returns Promise resolving to true if successful, false otherwise
|
|
51
|
+
*/
|
|
52
|
+
export declare function downloadCanvasThumbnail(containerElement: HTMLElement | null, options?: ThumbnailOptions): Promise<boolean>;
|
|
53
|
+
//# sourceMappingURL=thumbnail-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnail-utils.d.ts","sourceRoot":"","sources":["../../../src/misc/thumbnail-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2DH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA0mBD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,gBAAgB,EAAE,WAAW,GAAG,IAAI,EACpC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4HxB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,gBAAgB,EAAE,WAAW,GAAG,IAAI,EACpC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAoBlB"}
|