@bian-womp/spark-workbench 0.2.84 → 0.2.85
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 +61 -32
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/core/InMemoryWorkbench.d.ts +11 -3
- package/lib/cjs/src/core/InMemoryWorkbench.d.ts.map +1 -1
- package/lib/esm/index.js +61 -32
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/core/InMemoryWorkbench.d.ts +11 -3
- package/lib/esm/src/core/InMemoryWorkbench.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -9,10 +9,14 @@ export type CopiedGraphData = {
|
|
|
9
9
|
typeId: string;
|
|
10
10
|
params?: Record<string, unknown>;
|
|
11
11
|
resolvedHandles?: Partial<ResolvedHandles>;
|
|
12
|
-
position
|
|
12
|
+
position?: {
|
|
13
13
|
x: number;
|
|
14
14
|
y: number;
|
|
15
15
|
};
|
|
16
|
+
size?: {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
16
20
|
inputs?: Record<string, unknown>;
|
|
17
21
|
originalNodeId: string;
|
|
18
22
|
}>;
|
|
@@ -54,12 +58,16 @@ export declare class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
54
58
|
}): void;
|
|
55
59
|
addNode(node: Omit<GraphNodeDefinition, "nodeId"> & {
|
|
56
60
|
nodeId?: string;
|
|
61
|
+
}, options?: {
|
|
62
|
+
inputs?: Record<string, unknown>;
|
|
57
63
|
position?: {
|
|
58
64
|
x: number;
|
|
59
65
|
y: number;
|
|
60
66
|
};
|
|
61
|
-
|
|
62
|
-
|
|
67
|
+
size?: {
|
|
68
|
+
width: number;
|
|
69
|
+
height: number;
|
|
70
|
+
};
|
|
63
71
|
copyOutputsFrom?: string;
|
|
64
72
|
dry?: boolean;
|
|
65
73
|
commit?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/core/InMemoryWorkbench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACT,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,QAAQ,EAIT,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAElB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3C,QAAQ,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"InMemoryWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/core/InMemoryWorkbench.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -157,9 +157,11 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
157
157
|
const defNodeIds = new Set(this._def.nodes.map((n) => n.nodeId));
|
|
158
158
|
const defEdgeIds = new Set(this._def.edges.map((e) => e.id));
|
|
159
159
|
const filteredPositions = Object.fromEntries(Object.entries(this.positions).filter(([id]) => defNodeIds.has(id)));
|
|
160
|
+
const filteredSizes = Object.fromEntries(Object.entries(this.sizes).filter(([id]) => defNodeIds.has(id)));
|
|
160
161
|
const filteredNodes = this.selection.nodes.filter((id) => defNodeIds.has(id));
|
|
161
162
|
const filteredEdges = this.selection.edges.filter((id) => defEdgeIds.has(id));
|
|
162
163
|
this.positions = filteredPositions;
|
|
164
|
+
this.sizes = filteredSizes;
|
|
163
165
|
this.selection = { nodes: filteredNodes, edges: filteredEdges };
|
|
164
166
|
this.emit("graphChanged", { def: this._def });
|
|
165
167
|
this.refreshValidation();
|
|
@@ -216,8 +218,10 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
216
218
|
params: node.params,
|
|
217
219
|
resolvedHandles: node.resolvedHandles,
|
|
218
220
|
});
|
|
219
|
-
if (
|
|
220
|
-
this.positions[id] =
|
|
221
|
+
if (options?.position)
|
|
222
|
+
this.positions[id] = options.position;
|
|
223
|
+
if (options?.size)
|
|
224
|
+
this.sizes[id] = options.size;
|
|
221
225
|
this.emit("graphChanged", {
|
|
222
226
|
def: this._def,
|
|
223
227
|
change: {
|
|
@@ -235,6 +239,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
235
239
|
this._def.nodes = this._def.nodes.filter((n) => n.nodeId !== nodeId);
|
|
236
240
|
this._def.edges = this._def.edges.filter((e) => e.source.nodeId !== nodeId && e.target.nodeId !== nodeId);
|
|
237
241
|
delete this.positions[nodeId];
|
|
242
|
+
delete this.sizes[nodeId];
|
|
238
243
|
delete this.nodeNames[nodeId];
|
|
239
244
|
this.emit("graphChanged", {
|
|
240
245
|
def: this._def,
|
|
@@ -301,14 +306,16 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
301
306
|
return { ...this.positions };
|
|
302
307
|
}
|
|
303
308
|
setSizes(sizes, options) {
|
|
309
|
+
const updatedSizes = { ...this.sizes };
|
|
304
310
|
for (const [nodeId, size] of Object.entries(sizes)) {
|
|
305
311
|
if (size) {
|
|
306
|
-
|
|
312
|
+
updatedSizes[nodeId] = size;
|
|
307
313
|
}
|
|
308
314
|
else {
|
|
309
|
-
|
|
315
|
+
delete updatedSizes[nodeId];
|
|
310
316
|
}
|
|
311
317
|
}
|
|
318
|
+
this.sizes = updatedSizes;
|
|
312
319
|
this.emit("graphUiChanged", {
|
|
313
320
|
change: { type: "resizeNodes" },
|
|
314
321
|
...options,
|
|
@@ -466,6 +473,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
466
473
|
if (selection.nodes.length === 0)
|
|
467
474
|
return null;
|
|
468
475
|
const positions = this.getPositions();
|
|
476
|
+
const sizes = this.getSizes();
|
|
469
477
|
const selectedNodeSet = new Set(selection.nodes);
|
|
470
478
|
// Collect nodes to copy
|
|
471
479
|
const nodesToCopy = this.def.nodes.filter((n) => selectedNodeSet.has(n.nodeId));
|
|
@@ -477,15 +485,16 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
477
485
|
let maxX = -Infinity;
|
|
478
486
|
let maxY = -Infinity;
|
|
479
487
|
nodesToCopy.forEach((node) => {
|
|
480
|
-
const pos = positions[node.nodeId]
|
|
481
|
-
const size = getNodeSize?.(node.nodeId, node.typeId)
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
488
|
+
const pos = positions[node.nodeId];
|
|
489
|
+
const size = sizes[node.nodeId] || getNodeSize?.(node.nodeId, node.typeId);
|
|
490
|
+
if (pos) {
|
|
491
|
+
minX = Math.min(minX, pos.x);
|
|
492
|
+
minY = Math.min(minY, pos.y);
|
|
493
|
+
if (size) {
|
|
494
|
+
maxX = Math.max(maxX, pos.x + size.width);
|
|
495
|
+
maxY = Math.max(maxY, pos.y + size.height);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
489
498
|
});
|
|
490
499
|
const bounds = { minX, minY, maxX, maxY };
|
|
491
500
|
const centerX = (bounds.minX + bounds.maxX) / 2;
|
|
@@ -495,7 +504,8 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
495
504
|
const allInputs = runner.getInputs(this.def);
|
|
496
505
|
const selectedEdgeSet = new Set(selection.edges);
|
|
497
506
|
const copiedNodes = nodesToCopy.map((node) => {
|
|
498
|
-
const pos = positions[node.nodeId]
|
|
507
|
+
const pos = positions[node.nodeId];
|
|
508
|
+
const size = sizes[node.nodeId];
|
|
499
509
|
// Get all inbound edges for this node
|
|
500
510
|
const inboundEdges = this.def.edges.filter((e) => e.target.nodeId === node.nodeId);
|
|
501
511
|
// Build set of handles that have inbound edges
|
|
@@ -512,10 +522,13 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
512
522
|
typeId: node.typeId,
|
|
513
523
|
params: node.params,
|
|
514
524
|
resolvedHandles: node.resolvedHandles,
|
|
515
|
-
position:
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
525
|
+
position: pos
|
|
526
|
+
? {
|
|
527
|
+
x: pos.x - centerX,
|
|
528
|
+
y: pos.y - centerY,
|
|
529
|
+
}
|
|
530
|
+
: undefined,
|
|
531
|
+
size,
|
|
519
532
|
inputs: inputsToCopy,
|
|
520
533
|
originalNodeId: node.nodeId,
|
|
521
534
|
};
|
|
@@ -550,6 +563,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
550
563
|
if (selection.nodes.length === 0)
|
|
551
564
|
return [];
|
|
552
565
|
const positions = this.getPositions();
|
|
566
|
+
const sizes = this.getSizes();
|
|
553
567
|
const newNodes = [];
|
|
554
568
|
// Get inputs without bindings (literal values only)
|
|
555
569
|
const allInputs = runner.getInputs(this.def) || {};
|
|
@@ -558,7 +572,8 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
558
572
|
const n = this.def.nodes.find((n) => n.nodeId === nodeId);
|
|
559
573
|
if (!n)
|
|
560
574
|
continue;
|
|
561
|
-
const pos = positions[nodeId]
|
|
575
|
+
const pos = positions[nodeId];
|
|
576
|
+
const size = sizes[nodeId];
|
|
562
577
|
const inboundHandles = new Set(this.def.edges
|
|
563
578
|
.filter((e) => e.target.nodeId === nodeId)
|
|
564
579
|
.map((e) => e.target.handle));
|
|
@@ -566,10 +581,11 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
566
581
|
const newNodeId = this.addNode({
|
|
567
582
|
typeId: n.typeId,
|
|
568
583
|
params: n.params,
|
|
569
|
-
position: { x: pos.x + 24, y: pos.y + 24 },
|
|
570
584
|
resolvedHandles: n.resolvedHandles,
|
|
571
585
|
}, {
|
|
572
586
|
inputs: inputsWithoutBindings,
|
|
587
|
+
position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,
|
|
588
|
+
size,
|
|
573
589
|
copyOutputsFrom: nodeId,
|
|
574
590
|
dry: true,
|
|
575
591
|
});
|
|
@@ -616,8 +632,10 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
616
632
|
const coerced = await coerceIfNeeded(outputTypeId, inType, unwrap(outputValue));
|
|
617
633
|
newNodeId = this.addNode({
|
|
618
634
|
typeId: singleTarget.nodeTypeId,
|
|
635
|
+
}, {
|
|
636
|
+
inputs: { [singleTarget.inputHandle]: coerced },
|
|
619
637
|
position: { x: pos.x + 180, y: pos.y },
|
|
620
|
-
}
|
|
638
|
+
});
|
|
621
639
|
}
|
|
622
640
|
else if (isArray && arrTarget) {
|
|
623
641
|
const nodeDesc = registry.nodes.get(arrTarget.nodeTypeId);
|
|
@@ -625,8 +643,10 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
625
643
|
const coerced = await coerceIfNeeded(outputTypeId, inType, unwrap(outputValue));
|
|
626
644
|
newNodeId = this.addNode({
|
|
627
645
|
typeId: arrTarget.nodeTypeId,
|
|
646
|
+
}, {
|
|
628
647
|
position: { x: pos.x + 180, y: pos.y },
|
|
629
|
-
|
|
648
|
+
inputs: { [arrTarget.inputHandle]: coerced },
|
|
649
|
+
});
|
|
630
650
|
}
|
|
631
651
|
else if (isArray && elemTarget) {
|
|
632
652
|
const nodeDesc = registry.nodes.get(elemTarget.nodeTypeId);
|
|
@@ -642,8 +662,10 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
642
662
|
const row = Math.floor(idx / COLS);
|
|
643
663
|
newNodeId = this.addNode({
|
|
644
664
|
typeId: elemTarget.nodeTypeId,
|
|
665
|
+
}, {
|
|
645
666
|
position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },
|
|
646
|
-
|
|
667
|
+
inputs: { [elemTarget.inputHandle]: coercedItems[idx] },
|
|
668
|
+
});
|
|
647
669
|
}
|
|
648
670
|
}
|
|
649
671
|
if (newNodeId) {
|
|
@@ -665,7 +687,8 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
665
687
|
const n = this.def.nodes.find((n) => n.nodeId === nodeId);
|
|
666
688
|
if (!n)
|
|
667
689
|
return undefined;
|
|
668
|
-
const pos = this.getPositions()[nodeId]
|
|
690
|
+
const pos = this.getPositions()[nodeId];
|
|
691
|
+
const size = this.getSizes()[nodeId];
|
|
669
692
|
// Get inputs without bindings (literal values only)
|
|
670
693
|
const allInputs = runner.getInputs(this.def)[nodeId] || {};
|
|
671
694
|
const inboundHandles = new Set(this.def.edges
|
|
@@ -675,10 +698,11 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
675
698
|
const newNodeId = this.addNode({
|
|
676
699
|
typeId: n.typeId,
|
|
677
700
|
params: n.params,
|
|
678
|
-
position: { x: pos.x + 24, y: pos.y + 24 },
|
|
679
701
|
resolvedHandles: n.resolvedHandles,
|
|
680
702
|
}, {
|
|
681
703
|
inputs: inputsWithoutBindings,
|
|
704
|
+
position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,
|
|
705
|
+
size,
|
|
682
706
|
copyOutputsFrom: nodeId,
|
|
683
707
|
dry: true,
|
|
684
708
|
});
|
|
@@ -696,17 +720,19 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
696
720
|
const n = this.def.nodes.find((n) => n.nodeId === nodeId);
|
|
697
721
|
if (!n)
|
|
698
722
|
return undefined;
|
|
699
|
-
const pos = this.getPositions()[nodeId]
|
|
723
|
+
const pos = this.getPositions()[nodeId];
|
|
724
|
+
const size = this.getSizes()[nodeId];
|
|
700
725
|
// Get all inputs (including those with bindings, since edges will be duplicated)
|
|
701
726
|
const inputs = runner.getInputs(this.def)[nodeId] || {};
|
|
702
727
|
// Add the duplicated node
|
|
703
728
|
const newNodeId = this.addNode({
|
|
704
729
|
typeId: n.typeId,
|
|
705
730
|
params: n.params,
|
|
706
|
-
position: { x: pos.x + 24, y: pos.y + 24 },
|
|
707
731
|
resolvedHandles: n.resolvedHandles,
|
|
708
732
|
}, {
|
|
709
733
|
inputs,
|
|
734
|
+
position: pos ? { x: pos.x + 24, y: pos.y + 24 } : undefined,
|
|
735
|
+
size,
|
|
710
736
|
copyOutputsFrom: nodeId,
|
|
711
737
|
dry: true,
|
|
712
738
|
});
|
|
@@ -740,12 +766,15 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
740
766
|
typeId: nodeData.typeId,
|
|
741
767
|
params: nodeData.params,
|
|
742
768
|
resolvedHandles: nodeData.resolvedHandles,
|
|
743
|
-
position: {
|
|
744
|
-
x: nodeData.position.x + center.x,
|
|
745
|
-
y: nodeData.position.y + center.y,
|
|
746
|
-
},
|
|
747
769
|
}, {
|
|
748
770
|
inputs: nodeData.inputs,
|
|
771
|
+
position: nodeData.position
|
|
772
|
+
? {
|
|
773
|
+
x: nodeData.position.x + center.x,
|
|
774
|
+
y: nodeData.position.y + center.y,
|
|
775
|
+
}
|
|
776
|
+
: undefined,
|
|
777
|
+
size: nodeData.size,
|
|
749
778
|
copyOutputsFrom: nodeData.originalNodeId,
|
|
750
779
|
dry: true,
|
|
751
780
|
});
|
|
@@ -5158,7 +5187,7 @@ const WorkbenchCanvas = React.forwardRef(({ showValues, toString, toElement, get
|
|
|
5158
5187
|
setNodeMenuOpen(false);
|
|
5159
5188
|
setSelectionMenuOpen(false);
|
|
5160
5189
|
};
|
|
5161
|
-
const addNodeAt = useCallback(async (typeId, opts) => wb.addNode({ typeId
|
|
5190
|
+
const addNodeAt = useCallback(async (typeId, opts) => wb.addNode({ typeId }, { inputs: opts.inputs, position: opts.position, commit: true }), [wb]);
|
|
5162
5191
|
const onCloseMenu = useCallback(() => {
|
|
5163
5192
|
setMenuOpen(false);
|
|
5164
5193
|
}, []);
|