@bian-womp/spark-workbench 0.2.72 → 0.2.74

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
@@ -280,7 +280,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
280
280
  }
281
281
  // Position and selection APIs for React Flow bridge
282
282
  setPositions(map, options) {
283
- this.positions = { ...map };
283
+ this.positions = { ...this.positions, ...map };
284
284
  this.emit("graphUiChanged", {
285
285
  def: this.def,
286
286
  change: { type: "moveNodes" },
@@ -2715,8 +2715,8 @@ function WorkbenchProvider({ wb, runner, registry, setRegistry, overrides, uiVer
2715
2715
  }, [wb, registry, overrides?.getDefaultNodeSize]);
2716
2716
  const updateEdgeType = React.useCallback((edgeId, typeId) => wb.updateEdgeType(edgeId, typeId), [wb]);
2717
2717
  const triggerExternal = React.useCallback((nodeId, event) => runner.triggerExternal(nodeId, event), [runner]);
2718
- // Helper to save runtime metadata to extData.runtime and workbench state
2719
- const saveRuntimeMetadata = React.useCallback(async () => {
2718
+ // Helper to save runtime metadata and UI state to extData
2719
+ const saveUiRuntimeMetadata = React.useCallback(async () => {
2720
2720
  try {
2721
2721
  const current = wb.getRuntimeState() ?? { nodes: {} };
2722
2722
  const metadata = { nodes: { ...current.nodes } };
@@ -2729,8 +2729,13 @@ function WorkbenchProvider({ wb, runner, registry, setRegistry, overrides, uiVer
2729
2729
  }
2730
2730
  // Save cleaned metadata to workbench state
2731
2731
  wb.setRuntimeState(metadata);
2732
- // Save to extData.runtime via runner (no snapshotFull)
2733
- await runner.setExtData?.({ runtime: metadata });
2732
+ // Get UI state
2733
+ const uiState = wb.getUIState();
2734
+ // Save both runtime and UI state to extData (merge to preserve both)
2735
+ await runner.setExtData?.({
2736
+ ...(uiState ? { ui: uiState } : {}),
2737
+ runtime: metadata,
2738
+ });
2734
2739
  }
2735
2740
  catch (err) {
2736
2741
  console.warn("[WorkbenchContext] Failed to save runtime metadata:", err);
@@ -3094,7 +3099,7 @@ function WorkbenchProvider({ wb, runner, registry, setRegistry, overrides, uiVer
3094
3099
  }
3095
3100
  if (!runner.isRunning()) {
3096
3101
  if (event.commit) {
3097
- await saveRuntimeMetadata();
3102
+ await saveUiRuntimeMetadata();
3098
3103
  const history = await runner.commit(reason).catch((err) => {
3099
3104
  console.error("[WorkbenchContext] Error committing:", err);
3100
3105
  return undefined;
@@ -3128,7 +3133,7 @@ function WorkbenchProvider({ wb, runner, registry, setRegistry, overrides, uiVer
3128
3133
  await runner.update(event.def, { dry: event.dry });
3129
3134
  }
3130
3135
  if (event.commit) {
3131
- await saveRuntimeMetadata();
3136
+ await saveUiRuntimeMetadata();
3132
3137
  const history = await runner
3133
3138
  .commit(event.reason ?? reason)
3134
3139
  .catch((err) => {
@@ -3149,7 +3154,7 @@ function WorkbenchProvider({ wb, runner, registry, setRegistry, overrides, uiVer
3149
3154
  setSelectedNodeId(sel.nodes?.[0]);
3150
3155
  setSelectedEdgeId(sel.edges?.[0]);
3151
3156
  if (sel.commit) {
3152
- await saveRuntimeMetadata();
3157
+ await saveUiRuntimeMetadata();
3153
3158
  const history = await runner
3154
3159
  .commit(sel.reason ?? "selection")
3155
3160
  .catch((err) => {
@@ -3181,7 +3186,7 @@ function WorkbenchProvider({ wb, runner, registry, setRegistry, overrides, uiVer
3181
3186
  reason = "viewport";
3182
3187
  }
3183
3188
  }
3184
- await saveRuntimeMetadata();
3189
+ await saveUiRuntimeMetadata();
3185
3190
  const history = await runner
3186
3191
  .commit(event.reason ?? reason)
3187
3192
  .catch((err) => {