@bian-womp/spark-workbench 0.2.66 → 0.2.67

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 CHANGED
@@ -131,6 +131,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
131
131
  edges: [],
132
132
  };
133
133
  this.viewport = null;
134
+ this.copiedData = null;
134
135
  }
135
136
  setRegistry(registry) {
136
137
  this.registry = registry;
@@ -519,6 +520,18 @@ class InMemoryWorkbench extends AbstractWorkbench {
519
520
  });
520
521
  return { nodeIdMap, edgeIds };
521
522
  }
523
+ /**
524
+ * Get the currently copied graph data.
525
+ */
526
+ getCopiedData() {
527
+ return this.copiedData;
528
+ }
529
+ /**
530
+ * Set the copied graph data (used for paste functionality).
531
+ */
532
+ setCopiedData(data) {
533
+ this.copiedData = data;
534
+ }
522
535
  }
523
536
 
524
537
  class CLIWorkbench {
@@ -4380,15 +4393,39 @@ const WorkbenchCanvas = React.forwardRef(({ showValues, toString, toElement, get
4380
4393
  }, [runner]);
4381
4394
  const nodeIds = React.useMemo(() => Array.from(registry.nodes.keys()), [registry, registryVersion]);
4382
4395
  const defaultContextMenuHandlers = React.useMemo(() => {
4383
- const baseHandlers = createDefaultContextMenuHandlers(addNodeAt, onCloseMenu);
4396
+ // Get storage from override or use workbench's internal storage
4397
+ const storage = overrides?.getCopiedDataStorage
4398
+ ? overrides.getCopiedDataStorage()
4399
+ : {
4400
+ get: () => wb.getCopiedData(),
4401
+ set: (data) => wb.setCopiedData(data),
4402
+ };
4403
+ const baseHandlers = createDefaultContextMenuHandlers(addNodeAt, onCloseMenu,
4404
+ // Paste handler - checks storage dynamically when called
4405
+ // Only provide handler if storage has data or might have data (for dynamic checking)
4406
+ (position) => {
4407
+ const data = storage.get();
4408
+ if (!data)
4409
+ return;
4410
+ wb.pasteCopiedData(data, position);
4411
+ onCloseMenu();
4412
+ });
4384
4413
  if (overrides?.getDefaultContextMenuHandlers) {
4385
4414
  return overrides.getDefaultContextMenuHandlers(wb, baseHandlers);
4386
4415
  }
4387
4416
  return baseHandlers;
4388
4417
  }, [addNodeAt, onCloseMenu, overrides, wb]);
4389
4418
  const selectionContextMenuHandlers = React.useMemo(() => {
4390
- const baseHandlers = createSelectionContextMenuHandlers(wb, onCloseSelectionMenu, overrides?.getDefaultNodeSize, undefined, // onCopyResult - will be provided by overrides
4391
- runner);
4419
+ // Get storage from override or use workbench's internal storage
4420
+ const storage = overrides?.getCopiedDataStorage
4421
+ ? overrides.getCopiedDataStorage()
4422
+ : {
4423
+ get: () => wb.getCopiedData(),
4424
+ set: (data) => wb.setCopiedData(data),
4425
+ };
4426
+ const baseHandlers = createSelectionContextMenuHandlers(wb, onCloseSelectionMenu, overrides?.getDefaultNodeSize, (data) => {
4427
+ storage.set(data);
4428
+ }, runner);
4392
4429
  if (overrides?.getSelectionContextMenuHandlers) {
4393
4430
  const selection = wb.getSelection();
4394
4431
  return overrides.getSelectionContextMenuHandlers(wb, selection, baseHandlers, {
@@ -4400,7 +4437,16 @@ const WorkbenchCanvas = React.forwardRef(({ showValues, toString, toElement, get
4400
4437
  const nodeContextMenuHandlers = React.useMemo(() => {
4401
4438
  if (!nodeAtMenu)
4402
4439
  return null;
4403
- const baseHandlers = createNodeContextMenuHandlers(nodeAtMenu, wb, runner, registry, outputsMap, outputTypesMap, onCloseNodeMenu, overrides?.getDefaultNodeSize);
4440
+ // Get storage from override or use workbench's internal storage
4441
+ const storage = overrides?.getCopiedDataStorage
4442
+ ? overrides.getCopiedDataStorage()
4443
+ : {
4444
+ get: () => wb.getCopiedData(),
4445
+ set: (data) => wb.setCopiedData(data),
4446
+ };
4447
+ const baseHandlers = createNodeContextMenuHandlers(nodeAtMenu, wb, runner, registry, outputsMap, outputTypesMap, onCloseNodeMenu, overrides?.getDefaultNodeSize, (data) => {
4448
+ storage.set(data);
4449
+ });
4404
4450
  if (overrides?.getNodeContextMenuHandlers) {
4405
4451
  return overrides.getNodeContextMenuHandlers(wb, nodeAtMenu, baseHandlers);
4406
4452
  }
@@ -4415,6 +4461,7 @@ const WorkbenchCanvas = React.forwardRef(({ showValues, toString, toElement, get
4415
4461
  onCloseNodeMenu,
4416
4462
  overrides?.getDefaultNodeSize,
4417
4463
  overrides?.getNodeContextMenuHandlers,
4464
+ overrides?.getCopiedDataStorage,
4418
4465
  ]);
4419
4466
  const canRunPull = React.useMemo(() => engineKind()?.toString() === "pull", [engineKind]);
4420
4467
  const bakeableOutputs = React.useMemo(() => {