@bian-womp/spark-workbench 0.3.67 → 0.3.68
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/cjs/index.cjs +19 -3
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/misc/hooks.d.ts +2 -1
- package/lib/cjs/src/misc/hooks.d.ts.map +1 -1
- package/lib/esm/index.js +19 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/misc/hooks.d.ts +2 -1
- package/lib/esm/src/misc/hooks.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { OnConnect, OnEdgesChange, OnEdgesDelete, OnNodesChange, OnNodesDelete } from "@xyflow/react";
|
|
2
|
+
import type { ResolvedHandles } from "@bian-womp/spark-protocol";
|
|
2
3
|
import type { InMemoryWorkbench } from "../core/InMemoryWorkbench";
|
|
3
4
|
import { IGraphRunner } from "../runtime/IGraphRunner";
|
|
4
|
-
export declare function useWorkbenchBridge(wb: InMemoryWorkbench): {
|
|
5
|
+
export declare function useWorkbenchBridge(wb: InMemoryWorkbench, handlesMap?: Record<string, ResolvedHandles>): {
|
|
5
6
|
onConnect: OnConnect;
|
|
6
7
|
onNodesChange: OnNodesChange;
|
|
7
8
|
onEdgesChange: OnEdgesChange;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/misc/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/misc/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,iBAAiB,EACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;;;;;;EA8K7C;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,UAU1D;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,UAW5D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,UAoB3D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAwCpE;AAWD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GACpB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CA0BjC;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,CAyBvD"}
|
package/lib/esm/index.js
CHANGED
|
@@ -2540,7 +2540,7 @@ function layoutNode(args, overrides) {
|
|
|
2540
2540
|
};
|
|
2541
2541
|
}
|
|
2542
2542
|
|
|
2543
|
-
function useWorkbenchBridge(wb) {
|
|
2543
|
+
function useWorkbenchBridge(wb, handlesMap) {
|
|
2544
2544
|
const onConnect = useCallback((params) => {
|
|
2545
2545
|
if (!params.source || !params.target)
|
|
2546
2546
|
return;
|
|
@@ -2553,11 +2553,27 @@ function useWorkbenchBridge(wb) {
|
|
|
2553
2553
|
e.target.handle === params.targetHandle);
|
|
2554
2554
|
if (exists)
|
|
2555
2555
|
return;
|
|
2556
|
+
// Check if target input handle is a non-array type (typeId doesn't end with [])
|
|
2557
|
+
// If so, remove any existing connections to that handle before connecting
|
|
2558
|
+
const targetHandles = handlesMap?.[params.target];
|
|
2559
|
+
const targetTypeId = targetHandles
|
|
2560
|
+
? getInputTypeId(targetHandles.inputs, params.targetHandle)
|
|
2561
|
+
: undefined;
|
|
2562
|
+
const isArrayInput = targetTypeId?.endsWith("[]") ?? false;
|
|
2563
|
+
if (!isArrayInput) {
|
|
2564
|
+
// Find existing edges to this input handle
|
|
2565
|
+
const existingEdges = wb.def.edges.filter((e) => e.target.nodeId === params.target &&
|
|
2566
|
+
e.target.handle === params.targetHandle);
|
|
2567
|
+
// Remove existing edges (without committing yet)
|
|
2568
|
+
for (const edge of existingEdges) {
|
|
2569
|
+
wb.disconnect(edge.id, { commit: false });
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2556
2572
|
wb.connect({
|
|
2557
2573
|
source: { nodeId: params.source, handle: params.sourceHandle },
|
|
2558
2574
|
target: { nodeId: params.target, handle: params.targetHandle },
|
|
2559
2575
|
}, { commit: true });
|
|
2560
|
-
}, [wb]);
|
|
2576
|
+
}, [wb, handlesMap]);
|
|
2561
2577
|
const onNodesChange = useCallback((changes) => {
|
|
2562
2578
|
const positions = {};
|
|
2563
2579
|
let commit = false;
|
|
@@ -5999,7 +6015,7 @@ const WorkbenchCanvasComponent = React.forwardRef((props, ref) => {
|
|
|
5999
6015
|
}
|
|
6000
6016
|
},
|
|
6001
6017
|
}), []);
|
|
6002
|
-
const { onConnect, onNodesChange, onEdgesChange, onEdgesDelete, onNodesDelete, } = useWorkbenchBridge(wb);
|
|
6018
|
+
const { onConnect, onNodesChange, onEdgesChange, onEdgesDelete, onNodesDelete, } = useWorkbenchBridge(wb, handlesMap);
|
|
6003
6019
|
const ui = useMemo(() => wb.getUI(), [wb, uiVersion]);
|
|
6004
6020
|
const { nodeTypes, resolveNodeType } = useMemo(() => {
|
|
6005
6021
|
// Build nodeTypes map using UI extension registry
|