@multiplatform.one/node-graph 7.7.4 → 7.8.0

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.
Files changed (49) hide show
  1. package/dist/cjs/model/history.cjs +8 -4
  2. package/dist/cjs/model/history.native.js +8 -4
  3. package/dist/cjs/model/history.native.js.map +1 -1
  4. package/dist/cjs/native/GraphToolbar.cjs +21 -7
  5. package/dist/cjs/native/GraphToolbar.native.js +21 -7
  6. package/dist/cjs/native/GraphToolbar.native.js.map +1 -1
  7. package/dist/cjs/react-flow/useGraphController.cjs +9 -17
  8. package/dist/cjs/react-flow/useGraphController.native.js +10 -18
  9. package/dist/cjs/react-flow/useGraphController.native.js.map +1 -1
  10. package/dist/esm/model/history.mjs +8 -4
  11. package/dist/esm/model/history.mjs.map +1 -1
  12. package/dist/esm/model/history.native.js +8 -4
  13. package/dist/esm/model/history.native.js.map +1 -1
  14. package/dist/esm/native/GraphToolbar.mjs +18 -4
  15. package/dist/esm/native/GraphToolbar.mjs.map +1 -1
  16. package/dist/esm/native/GraphToolbar.native.js +18 -4
  17. package/dist/esm/native/GraphToolbar.native.js.map +1 -1
  18. package/dist/esm/react-flow/useGraphController.mjs +9 -17
  19. package/dist/esm/react-flow/useGraphController.mjs.map +1 -1
  20. package/dist/esm/react-flow/useGraphController.native.js +10 -18
  21. package/dist/esm/react-flow/useGraphController.native.js.map +1 -1
  22. package/dist/jsx/model/history.mjs +8 -4
  23. package/dist/jsx/model/history.mjs.map +1 -1
  24. package/dist/jsx/model/history.native.js +8 -4
  25. package/dist/jsx/model/history.native.js.map +1 -1
  26. package/dist/jsx/native/GraphToolbar.mjs +18 -4
  27. package/dist/jsx/native/GraphToolbar.mjs.map +1 -1
  28. package/dist/jsx/native/GraphToolbar.native.js +21 -7
  29. package/dist/jsx/native/GraphToolbar.native.js.map +1 -1
  30. package/dist/jsx/react-flow/useGraphController.mjs +9 -17
  31. package/dist/jsx/react-flow/useGraphController.mjs.map +1 -1
  32. package/dist/jsx/react-flow/useGraphController.native.js +10 -18
  33. package/dist/jsx/react-flow/useGraphController.native.js.map +1 -1
  34. package/package.json +7 -6
  35. package/src/NodeGraph.historyBridge.spec.tsx +87 -0
  36. package/src/bench/Perf200.stories.tsx +43 -11
  37. package/src/interaction/Lasso.stories.tsx +22 -7
  38. package/src/layout/AutoLayout.stories.spec.tsx +26 -0
  39. package/src/layout/AutoLayout.stories.tsx +22 -12
  40. package/src/model/history.spec.ts +19 -0
  41. package/src/model/history.ts +17 -6
  42. package/src/native/GraphToolbar.spec.tsx +53 -0
  43. package/src/native/GraphToolbar.tsx +18 -14
  44. package/src/react-flow/useGraphController.ts +14 -12
  45. package/types/model/history.d.ts +3 -2
  46. package/types/model/history.d.ts.map +1 -1
  47. package/types/native/GraphToolbar.d.ts +4 -10
  48. package/types/native/GraphToolbar.d.ts.map +1 -1
  49. package/types/react-flow/useGraphController.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["startTransition","useCallback","useEffect","useMemo","useRef","useState","applyCommand","createHistory","validateConnection","validateDrop","layout","reconcilePositions","FINE_PORT_PITCH","portSpacing","preserveFlowState","toFlowEdges","toFlowNodes","applyEdgeChanges","applyNodeChanges","warned","Set","warnOnce","message","process","env","NODE_ENV","has","add","console","warn","resetControllerWarnings","clear","defaultGraphNodeType","emptyDocument","version","nodes","edges","positionsOf","out","node","id","position","dragDeltas","document","live","deltas","to","dx","x","dy","y","useGraphController","options","schema","controlledDocument","defaultDocument","onDocumentChange","onConnectionRefused","readOnly","size","coarsePointer","nodeType","readMeasuredSizes","controlled","ownDocument","setOwnDocument","history","historyVersion","setHistoryVersion","portSpacingPx","mapping","setNodes","setEdges","nodesRef","current","documentRef","schemaRef","previous","commit","command","next","onNodesChange","changes","layoutTouchedRef","change","type","dragEnded","some","dragging","Object","keys","length","t","onEdgesChange","removed","filter","map","ids","connectionContext","connection","source","target","sourceHandle","targetHandle","port","isValidConnection","ctx","ok","onConnect","verdict","kind","defaultEdgeKind","spec","edge","data","defaultData","measuredRef","layoutGenerationRef","layoutRunner","setLayoutRunner","lastLayoutMs","setLastLayoutMs","layoutPending","setLayoutPending","relayout","layoutOptions","generation","result","measured","touched","runner","ms","positions","undo","commands","redo","canUndo","canRedo","names","includes","applyGraphCommand"],"sources":["../../../src/react-flow/useGraphController.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["startTransition","useCallback","useEffect","useMemo","useRef","useState","applyCommand","createHistory","validateConnection","validateDrop","layout","reconcilePositions","FINE_PORT_PITCH","portSpacing","preserveFlowState","toFlowEdges","toFlowNodes","applyEdgeChanges","applyNodeChanges","warned","Set","warnOnce","message","process","env","NODE_ENV","has","add","console","warn","resetControllerWarnings","clear","defaultGraphNodeType","emptyDocument","version","nodes","edges","positionsOf","out","node","id","position","dragDeltas","document","live","deltas","to","dx","x","dy","y","useGraphController","options","schema","controlledDocument","defaultDocument","onDocumentChange","onConnectionRefused","readOnly","size","coarsePointer","nodeType","readMeasuredSizes","controlled","ownDocument","setOwnDocument","history","historyVersion","setHistoryVersion","portSpacingPx","mapping","setNodes","setEdges","nodesRef","current","documentRef","schemaRef","previous","commit","command","next","onNodesChange","changes","layoutTouchedRef","change","type","dragEnded","some","dragging","Object","keys","length","t","onEdgesChange","removed","filter","map","ids","connectionContext","connection","source","target","sourceHandle","targetHandle","port","isValidConnection","ctx","ok","onConnect","verdict","kind","defaultEdgeKind","spec","edge","data","defaultData","measuredRef","layoutGenerationRef","layoutRunner","setLayoutRunner","lastLayoutMs","setLastLayoutMs","layoutPending","setLayoutPending","relayout","layoutOptions","generation","result","measured","touched","runner","ms","positions","publishHistoryChange","undo","redo","canUndo","canRedo","names","includes","applyGraphCommand"],"sources":["../../../src/react-flow/useGraphController.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -332,32 +332,24 @@ function useGraphController(options) {
332
332
  });
333
333
  return result;
334
334
  }, [coarsePointer, commit, readOnly, size]);
335
- var undo = (0, import_react.useCallback)(function () {
336
- var next = history.undo(documentRef.current);
337
- setHistoryVersion(function (version) {
338
- return version + 1;
339
- });
335
+ var publishHistoryChange = (0, import_react.useCallback)(function (next, command) {
340
336
  if (next === documentRef.current) return;
341
337
  if (!controlled) setOwnDocument(next);
342
338
  documentRef.current = next;
343
- onDocumentChange === null || onDocumentChange === void 0 ? void 0 : onDocumentChange(next, {
344
- t: "batch",
345
- commands: []
339
+ onDocumentChange === null || onDocumentChange === void 0 ? void 0 : onDocumentChange(next, command);
340
+ }, [controlled, onDocumentChange]);
341
+ var undo = (0, import_react.useCallback)(function () {
342
+ history.undo(documentRef.current, publishHistoryChange);
343
+ setHistoryVersion(function (version) {
344
+ return version + 1;
346
345
  });
347
- }, [controlled, history, onDocumentChange]);
346
+ }, [history, publishHistoryChange]);
348
347
  var redo = (0, import_react.useCallback)(function () {
349
- var next = history.redo(documentRef.current);
348
+ history.redo(documentRef.current, publishHistoryChange);
350
349
  setHistoryVersion(function (version) {
351
350
  return version + 1;
352
351
  });
353
- if (next === documentRef.current) return;
354
- if (!controlled) setOwnDocument(next);
355
- documentRef.current = next;
356
- onDocumentChange === null || onDocumentChange === void 0 ? void 0 : onDocumentChange(next, {
357
- t: "batch",
358
- commands: []
359
- });
360
- }, [controlled, history, onDocumentChange]);
352
+ }, [history, publishHistoryChange]);
361
353
  return {
362
354
  document,
363
355
  nodes,
@@ -1 +1 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","useGraphController_exports","applyGraphCommand","defaultGraphNodeType","resetControllerWarnings","useGraphController","module","exports","import_react","require","import_model","import_layout","import_nodeMeasure","import_flowAdapter","import_xy","warned","Set","warnOnce","message","process","env","NODE_ENV","has","add","console","warn","clear","emptyDocument","version","nodes","edges","positionsOf","out","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","node","id","position","err","return","dragDeltas","document","live","deltas","dx","x","dy","y","options","schema","controlledDocument","defaultDocument","onDocumentChange","onConnectionRefused","readOnly","size","coarsePointer","nodeType","readMeasuredSizes","controlled","ownDocument","setOwnDocument","useState","_ref","history","useMemo","createHistory","historyVersion","setHistoryVersion","portSpacingPx","portSpacing","FINE_PORT_PITCH","mapping","setNodes","toFlowNodes","setEdges","toFlowEdges","nodesRef","useRef","current","documentRef","schemaRef","useEffect","previous","preserveFlowState","commit","useCallback","command","onNodesChange","changes","applyNodeChanges","layoutTouchedRef","change","type","dragEnded","some","change2","dragging","keys","length","t","onEdgesChange","applyEdgeChanges","removed","filter","map","ids","connectionContext","connection","source","sourceHandle","targetHandle","port","isValidConnection","ctx","validateConnection","ok","onConnect"],"sources":["../../../src/react-flow/useGraphController.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","useGraphController_exports","applyGraphCommand","defaultGraphNodeType","resetControllerWarnings","useGraphController","module","exports","import_react","require","import_model","import_layout","import_nodeMeasure","import_flowAdapter","import_xy","warned","Set","warnOnce","message","process","env","NODE_ENV","has","add","console","warn","clear","emptyDocument","version","nodes","edges","positionsOf","out","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","node","id","position","err","return","dragDeltas","document","live","deltas","dx","x","dy","y","options","schema","controlledDocument","defaultDocument","onDocumentChange","onConnectionRefused","readOnly","size","coarsePointer","nodeType","readMeasuredSizes","controlled","ownDocument","setOwnDocument","useState","_ref","history","useMemo","createHistory","historyVersion","setHistoryVersion","portSpacingPx","portSpacing","FINE_PORT_PITCH","mapping","setNodes","toFlowNodes","setEdges","toFlowEdges","nodesRef","useRef","current","documentRef","schemaRef","useEffect","previous","preserveFlowState","commit","useCallback","command","onNodesChange","changes","applyNodeChanges","layoutTouchedRef","change","type","dragEnded","some","change2","dragging","keys","length","t","onEdgesChange","applyEdgeChanges","removed","filter","map","ids","connectionContext","connection","source","sourceHandle","targetHandle","port","isValidConnection","ctx","validateConnection","ok","onConnect"],"sources":["../../../src/react-flow/useGraphController.ts"],"sourcesContent":[null],"mappings":"AAqBA,YAAS;;AAWT,IAAAA,SAAS,GAAAC,MAAA,CAAcC,cAAA;AAGvB,IAAAC,gBAAiB,GAAAF,MAAA,CAAAG,wBAA0B;AAG3C,IAAAC,iBAAS,GAAAJ,MAAiB,CAAAK,mBAAmB;AAG7C,IAAAC,YAAS,GAAAN,MAAA,CAAAO,SAAmB,CAAAC,cAAa;AACzC,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAAC,GAAkB;EAO3B,KAAM,IAAAC,IAAS,IAAAD,GAAA,EACfZ,SAAS,CAAAW,MAAS,EAAAE,IAAA,EAAuB;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AACvC;AACA,IAAAC,WAAW,GAAIA,CAAAC,EAAA,EAAAC,IAAU,EAAAC,MAAA,EAAAC,IAAA;EACzB,IAAAF,IAAO,IAAI,OAAOA,IAAA,wBAAAA,IAAA;IAElB,SAAQG,GAAK,IAAAhB,iBAAA,CAAAa,IAAA,GACf,KAAAX,YAAA,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EAGOnB,SAAS,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAgCI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EAC9C;EACF,OAAAE,EAAA;AA+DO;AAEP,IAAAM,YAAM,GAAAC,GAAgB,IAAER,WAAY,CAAAhB,SAAW,KAAO,YAAG;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAEzD,IAAAE,0BAE4C;AAC1ChB,QAAM,CAAAgB,0BAAiD;EACvDC,iBAAW,EAAQA,CAAA,KAAOA,iBAAe;EACzCC,oBAAO,EAAAA,CAAA,KAAAA,oBAAA;EACTC,uBAAA,EAAAA,CAAA,KAAAA,uBAAA;EAGAC,kBACE,EAAAA,CAAA,KAAAA;AAGA;AACAC,MAAA,CAAAC,OAAM,GAAmDT,YAAC,CAAAG,0BAAA;AAC1D,IAAAO,YAAW,GAAAC,OAAQ,QAAS;AAC1B,IAAAC,YAAW,GAAAD,OAAU,CAAE;AACvB,IAAAE,aAAS,GAAAF,OAAA;AACT,IAAAG,kBAAkB,GAAAH,OAAK,iCAAS;AAChC,IAAAI,kBAAkB,GAAAJ,OAAK,0BAAS;AAChC,IAAAK,SAAI,GAAOL,OAAK,iBAAU;AAC1B,IAAAM,MAAA,GAAO,eAAgB,IAAIC,GAAG,CAAG;AAAA,SACnCC,SAAAC,OAAA;EACA,IAAAC,OAAO,CAAAC,GAAA,CAAAC,QAAA;EACT,IAAAN,MAAA,CAAAO,GAAA,CAAAJ,OAAA;EAEOH,MAAA,CAASQ,GAAA,CAAAL,OAAA;EAGdM,OAAM,CAAAC,IAAA,oCAAAP,OAAA;AAAA;AACJ,SACAd,uBAAUA,CAAA;EAAAW,MACV,CAAAW,KAAA;AAAA;AACA,IACAvB,oBAAA;AAAA,IACAwB,aAAW;EAAAC,OACX,EAAO;EAAAC,KACP;EAAgBC,KAChB;AAAW;AACX,SACEC,YAAAF,KAAA;EAEJ,IAAAG,GAAM;EACN,IAAIC,yBAAc;IAAoBC,iBAAW;IAAAC,cAAA;EAC/C;IAAA,KACE,IAAAC,SAAA,GAAAP,KAAA,CAAAQ,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;MAEF,IAAAS,IAAA,GAAAH,KAAA,CAAAvC,KAAA;MACFgC,GAAA,CAAAU,IAAA,CAAAC,EAAA,IAAAD,IAAA,CAAAE,QAAA;IAEA;EAAsC,EACpC,OACEC,GAAA;IACJX,iBAAA;IACAC,cAAM,GAAWU,GAAA;EAEjB,UAAM;IACJ;MAAyC,KAAAZ,yBAAA,IAAAG,SAAA,CAAAU,MAAA;QAAAV,SAAA,CAAAU,MAAA;MAAA;IAAA;MAKxC,IAAAZ,iBAAA;QACH,MAAAC,cAAA;MACA;IAEA;EACA;EAAgB,OACdH,GAAO;AAAgC;AACT,SAChCe,WAAAC,QAAA,EAAAnB,KAAA;EAEA,IAAAoB,IAAO,GAAAlB,WAAe,CAAAF,KAAI;EAAA,IAAoCqB,MAC5D;EACF,IAAAjB,yBAAA;IAAAC,iBAAA;IAAAC,cAAA;EACA;IACA,KAAM,IAAAC,SAAW,GAAAY,QAAY,CAAAnB,KAAA,CAAAQ,MAAA,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;MAC7B,IAAAS,IAAS,GAAAH,KAAU,CAAAvC,KAAA;MACnB,IAAMR,EAAA,GAAAyD,IAAA,CAAAP,IAAc,CAAAC,EAAA;MACpB,KAAAnD,EAAA,EAAY;MAEZ,IAAM2D,EAAA,GAAA3D,EAAA,CAAA4D,CAAA,GAAYV,IAAA,CAAOE,QAAM,CAAAQ,CAAA;MAC/B,IAAAC,EAAU,GAAA7D,EAAA,CAAA8D,CAAA,GAAUZ,IAAA,CAAAE,QAAA,CAAAU,CAAA;MAgBpB,IAAAH,EAAU,MAAM,IAAAE,EAAA;MACdH,MAAM,CAAAR,IAAA,CAAAC,EAAU;QAChBS,CAAA,EAAAD,EAAS;QACTG,CAAA,EAAAD;MACE;IAEJ;EAAe,EACb,OAACR,GAAA;IACCX,iBAAM,GAAU;IAChBC,cAAM,GAAOU,GAAA;EACb;IACA;MACA,KAAAZ,yBAAsB,IAAAG,SAAA,CAAAU,MAAA;QACtBV,SAAA,CAAAU,MAAA,CAAmB;MACrB;IACA,CAAC;MACH,IAAAZ,iBAAA;QAEM,MAAAC,cAAgB;MACnB;IACC;EACA;EACA,OAAAe,MAAS;AAIT;AACE,SAAA7C,kBAAWA,CAAAkD,OAAU;EACnB;IAAAC,MAAI;IAAAR,QAAO,EAAAS,kBAAqB;IAAAC,eAAiB;IAAAC,gBAAmB;IAAEC,mBAAA;IAAAC,QAAA;IAAAC,IAAA;IAAAC,aAAA;IAAAC,QAAA,GAAA7D,oBAAA;IAAA8D;EAAA,IAAAV,OAAA;EAAA,IAAAW,UACxE,GAAAT,kBAAA;EAAA,IACFS,UAAA,IAAAR,eAAA;IACAzC,QAAI,8HAAU;EAEd;EAA0B,KAAAkD,WACvB,EAAWC,cAAO,IAAS,IAAA5D,YAAc,CAAA6D,QAAO,cAAa;IAAA,IAChEC,IAAA;IACA,OAAK,CAAAA,IAAA,GAAAZ,eAAW,aAAAA,eAAA,cAAAA,eAAA,GAAAD,kBAAA,cAAAa,IAAA,cAAAA,IAAA,GAAA3C,aAAA;EAChB;EACA,IAAAqB,QAAI,GAAOkB,UAAK,GAAQT,kBAAc,GAAAU,WAAA;EACtC,IAAAI,OAAO,GAAE,EAAG,EAAA/D,YAAa,CAAAgE,OAAQ,EACnC;IACC,OAAQ,IAAA9D,YAAQ,CAAA+D,aAAA,EAAAlB,OAAA,CAAAgB,OAAA;EACnB;EAEA;EACE;EACE;EACA;EACA,EACA;EACG,KAAAG,cAEG,EAAAC,iBAAgB,QAAAnE,YAAA,CAAA6D,QAAA;EAAA,IACpBO,aACM,GAAAb,aAAoB,OAAAnD,kBAAA,CAAAiE,WAAA;IAC5Bd;EACA,KAAAnD,kBAAY,CAAAkE,eAAoB;EAAS,IAC3CC,OAAA,OAAAvE,YAAA,CAAAgE,OAAA;IACA,OAAC;MACHV,IAAA;MAEAc,aAAM;MACHZ;IACC;EAIA,IACAF,IAAA,EAAOc,aACL,EAAsBZ,QACtB;EACiE,KAAAnC,KACjE,EAAAmD,QAAU,IAAM,IAAAxE,YAAW,CAAQ6D,QAAM,cAAW;IAAa,OACnE,IAAAxD,kBAAA,CAAAoE,WAAA,EAAAjC,QAAA,EAAAQ,MAAA,EAAAuB,OAAA;EAAA,EACF;EAAA,IACC,CAAAjD,KAAM,EAAAoD,QAAA,QAAA1E,YAAA,CAAA6D,QAAA;IACT,WAAAxD,kBAAA,CAAAsE,WAAA,EAAAnC,QAAA,EAAAQ,MAAA;EAEA;EAA0B,IACvB4B,QAAA,OAAkC5E,YAAA,CAAA6E,MAAA,EAAAxD,KAAA;EACjCuD,QAAI,CAAAE,OAAA,GAAUzD,KAAA;EACd,IAAA0D,WAAM,GAAM,IAAA/E,YAAkB,CAAA6E,MAAA,EAAArC,QAAU;EACxCuC,WAAK,CAAAD,OAAK,GAAOtC,QAAA;EAKjB,IAAAwC,SAAO,OAAAhF,YAAmB,CAAG6E,MAAE,EAAA7B,MAAA;EAAAgC,SACjC,CAAAF,OAAA,GAAA9B,MAAA;EAAA,EACA,EAAChD,YAAA,CAAAiF,SAAmB,cAAQ;IAC9B,IAAAH,OAAA,GAAAE,SAAA,CAAAF,OAAA;IAEAN,QAAM,WAAYU,QAAA;MACf,WAAA7E,kBAA2B,CAAA8E,iBAAA,MAAA9E,kBAAA,CAAAoE,WAAA,EAAAjC,QAAA,EAAAsC,OAAA,EAAAP,OAAA,GAAAW,QAAA;IAC1B;IACAR,QAAM,KAAArE,kBAAM,CAAkBsE,WAAU,EAAAnC,QAAA,EAAAsC,OAAA;EACxC,IACAtC,QAAM,EACNQ,MAAI,CAACb,EAAA,EACHoC,OAAA,CACA;EAAA,IACFa,MAAA,OAAApF,YAAA,CAAAqF,WAAA,YAAAC,OAAA;IACA,IAAAR,OAAM,GAAAC,WAAO,CAAAD,OAAgB;IAC7B,IAAA9C,IAAK,GAAA+B,OAAM,CAAAqB,MAAA,CAAAN,OAAA,EAAAQ,OAAA;IACXnB,iBAAc,WAAO/C,OAAoE;MACzF,OAAMA,OAAO;IAAA;IACqE,IAChF,CAAAsC,UAAA,EAAAE,cAAA,CAAA5B,IAAA;IAAA+C,WACA,CAAQD,OAAI,GAAA9C,IAAA;IAAAmB,gBACA,aAAAA,gBAAA,uBAAAA,gBAAA,CAAAnB,IAAA,EAAAsD,OAAA;EAAA,IAAA5B,UAAA,EAAAK,OAAA,EAAAZ,gBAIA,CAAgB;EAE9B,IAAAoC,aAAY,OAAAvF,YAAoB,CAAAqF,WAAO,YAAAG,OAAA;IACzC,IAAAxD,IAAA,OAAA1B,SAAA,CAAAmF,gBAAA,EAAAD,OAAA,EAAAZ,QAAA,CAAAE,OAAA;IACAF,QAAC,CAAQE,OAAA,GAAA9C,IAAA;IACXwC,QAAA,CAAAxC,IAAA;IAgBA,IAAM0D,gBAAc,CAAAZ,OAAO;MAC3B,IAAArD,yBAAsB;QAAAC,iBAAA;QAAAC,cAAA;MACtB,IAAM;QACA,SAAAC,SAAA,GAAmB4D,OAA2B,CAAA3D,MAAI,CAAAC,QAAA,KAAAC,KAAA,IAAAN,yBAAA,IAAAM,KAAA,GAAAH,SAAA,CAAAI,IAAA,IAAAC,IAAA,GAAAR,yBAAA;UACjD,IAAAkE,MAAA,GAAc5D,KAAA,CAAAvC,KAAA;UACd,IAAAmG,MAAA,CAAAC,IAAc,eAAe,EAAIF,gBAA4B,CAAAZ,OAAA,CAAA/D,GAAA,CAAA4E,MAAA,CAAAxD,EAAA;QAC9D;MAEN,EAAM,OAAAE,GAAA,EAAW;QACfX,iBAAO,GAAuC;QAC5CC,cAAe,GAAAU,GAAA;MACf,UAAI;QAEJ,IAAM;UACN,KAAAZ,yBAA2B,IAAAG,SAAI,CAAAU,MAAY;YAC3CV,SAAA,CAAAU,MAAqB;UAEjB;QACJ,UAAI;UACF,IAAAZ,iBAAsB;YACpB,MAAGC,cAAA;UACH;QAAA;MACA;IAC0D;IAC3D,IACH0B,QAAE;IACA,IAAAwC,SAAI,GAAAL,OAAA,CAAAM,IAAoB,WAAAC,OAAY;MACtC,OAAAA,OAAA,CAAAH,IAAA,mBAAAG,OAAA,CAAAC,QAAA;IAIA;IAEA,KAAAH,SAAM;IACN,IAAAnD,MAAA,GAAAH,UAAiB,CAAAwC,WAAU,CAAAD,OAAA,EAAA9C,IAAA;IAC3B,IAAAhE,MAAA,CAAAiI,IAAA,CAAAvD,MAAgB,EAAAwD,MAAO,KAAU;IACjCd,MAAA;MACAe,CAAA,aAAc;MAEdzD;IACA;EAIA,IACE0C,MAAA,EAA6D/B,QAC9D,CACD;EAAO,IACT+C,aAAA,OAAApG,YAAA,CAAAqF,WAAA,YAAAG,OAAA;IACA,IAACxD,IAAA,OAAA1B,SAAuB,CAAA+F,gBAAc,EAAAb,OAAA,EAAAlE,KAAA;IACxCoD,QAAA,CAAA1C,IAAA;IAEA,IAAMqB,QAAA;IACJ,IAACiD,OAA2B,GAAAd,OAAgC,CAAAe,MAAA,WAAAZ,MAAA;MAC1D,OAAIA,MAAS,CAAAC,IAAA,aAAY;IACzB,GAAAY,GAAI,CAAC,UAAAb,MAAY;MACjB,OAAAA,MAAY,CAAAxD,EAAA;IACZ;IACF,IAAAmE,OAAA,CAAAJ,MAAA;IACAd,MAAC;MACHe,CAAA;MAEAM,GAAM,EAAAH;IACJ;EACA,IACFlB,MAAI,EAEJ9D,KAAM,EACJ+B,QAAQ,CACR;EACF,IAAIqD,iBAAS,OAAA1G,YAAqB,CAAAqF,WAAA,YAAAsB,UAAA;IAElC,KAAOA,UAAA,CAAAC,MAAA,KAAAD,UAAA,CAAAjI,MAAA;IACL,KAAAiI,UAAA,CAAAE,YAAA,KAAAF,UAAA,CAAAG,YAAA;IACA;MACAtE,QAAA,EAAAuC,WAAA,CAAAD,OAAA;MACA9B,MAAA;MACA4D,MAAA;QACA1E,IAAA,EAAAyE,UAAA,CAAAC,MAAA;QACAG,IAAA,EAAAJ,UAAA,CAAAE;MACA;MACAnI,MAAA;QACAwD,IAAA,EAAAyE,UAAA,CAAAjI,MAAA;QAAAqI,IAAA,EAAAJ,UAAA,CAAAG;MAAA;IAGA;EAAmE,GACnE,CACA9D,MAAA,EACA;EAAA,IACAgE,iBAAA,OAAAhH,YAAA,CAAAqF,WAAA,YAAAsB,UAAA;IACA,IAAAtD,QAAA;IACF,IAAA4D,GAAA,GAAAP,iBAAA,CAAAC,UAAA;IACF,KAAAM,GAAA;IASA,OAAS,IAAA/G,YACP,CAAAgH,kBACoB,EAAAD,GAAA,EAAAE,EAAA;EACpB,IACAT,iBAAa,EACfrD,QAAA,CAGO;EAIL,IAAA+D,SAAO,OAAapH,YAAU,CAAAqF,WAAO,YAAAsB,UAAA;IACvC,IAAA7C,IAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/node-graph",
3
- "version": "7.7.4",
3
+ "version": "7.8.0",
4
4
  "description": "Node graph editor — React Flow on web, Tamagui knob-aware nodes, an Expo DOM host on native",
5
5
  "keywords": [
6
6
  "multiplatform",
@@ -83,8 +83,9 @@
83
83
  "@xyflow/react": "^12.11.5",
84
84
  "@xyflow/system": "0.0.81",
85
85
  "tamagui": "2.7.6",
86
- "@multiplatform.one/platform": "7.7.4",
87
- "@multiplatform.one/theme": "7.7.4"
86
+ "@multiplatform.one/theme": "7.8.0",
87
+ "@multiplatform.one/platform": "7.8.0",
88
+ "@multiplatform.one/forms": "7.8.0"
88
89
  },
89
90
  "devDependencies": {
90
91
  "@tamagui/build": "2.7.6",
@@ -97,8 +98,8 @@
97
98
  "react-dom": "19.2.5",
98
99
  "subset-font": "^2.7.0",
99
100
  "vitest": "^4.1.5",
100
- "@multiplatform.one/config": "7.7.4",
101
- "@multiplatform.one/test-utils": "7.7.4"
101
+ "@multiplatform.one/config": "7.8.0",
102
+ "@multiplatform.one/test-utils": "7.8.0"
102
103
  },
103
104
  "peerDependencies": {
104
105
  "expo": ">=55",
@@ -107,7 +108,7 @@
107
108
  "react-dom": "^19.1.0",
108
109
  "react-native": ">=0.83.0",
109
110
  "react-native-webview": ">=13.16.0",
110
- "@multiplatform.one/components": "7.7.4"
111
+ "@multiplatform.one/components": "^7.8.0"
111
112
  },
112
113
  "peerDependenciesMeta": {
113
114
  "@multiplatform.one/components": {
@@ -0,0 +1,87 @@
1
+ import { useState } from "react";
2
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
3
+ import { act, cleanup, renderHook } from "@testing-library/react";
4
+ import { afterEach, expect, it, vi } from "vitest";
5
+ import { NodeGraph } from "./NodeGraph.native";
6
+ import { demoDocument, demoSchema, type DemoNodeData } from "./react-flow/fixtures";
7
+ import type { BuiltinEdgeData } from "./edges/edgeKinds";
8
+ import type { GraphCommand } from "./model";
9
+ import { useGraphController } from "./react-flow/useGraphController";
10
+
11
+ const host = vi.hoisted(() => ({
12
+ props: undefined as
13
+ | undefined
14
+ | {
15
+ rev: number;
16
+ documentJson: string;
17
+ onCommit: (rev: number, commandsJson: string) => void;
18
+ },
19
+ }));
20
+ vi.mock("./native/NodeGraph.native", () => ({
21
+ NodeGraphNative: (props: NonNullable<typeof host.props>) => {
22
+ host.props = props;
23
+ return null;
24
+ },
25
+ }));
26
+
27
+ afterEach(cleanup);
28
+
29
+ type Command = GraphCommand<DemoNodeData, BuiltinEdgeData>;
30
+ const examples: Array<[string, Command[]]> = [
31
+ ["move", [{ t: "moveNodes", deltas: { a: { x: 10, y: 5 } } }]],
32
+ [
33
+ "coalesced moves",
34
+ [
35
+ { t: "moveNodes", deltas: { a: { x: 10, y: 5 } } },
36
+ { t: "moveNodes", deltas: { a: { x: 20, y: 10 } } },
37
+ ],
38
+ ],
39
+ ["connected node removal", [{ t: "removeNodes", ids: ["a"] }]],
40
+ ];
41
+
42
+ for (const controlled of [false, true])
43
+ it.each(examples)(
44
+ `publishes the actual ${controlled ? "controlled" : "uncontrolled"} native document for %s undo and redo`,
45
+ (_name, commands) => {
46
+ const initial = demoDocument();
47
+ const schema = demoSchema();
48
+ const onDocumentChange = vi.fn();
49
+ function Host() {
50
+ const [value, setValue] = useState(initial);
51
+ return (
52
+ <NodeGraph
53
+ schema={schema}
54
+ {...(controlled ? { document: value } : { defaultDocument: initial })}
55
+ onDocumentChange={(next, command) => {
56
+ onDocumentChange(next, command);
57
+ if (controlled) setValue(next);
58
+ }}
59
+ />
60
+ );
61
+ }
62
+ renderWithProviders(<Host />);
63
+ const { result } = renderHook(() =>
64
+ useGraphController({
65
+ schema,
66
+ defaultDocument: initial,
67
+ history: { now: () => 0 },
68
+ // Match NodeGraphDomInner's real serialized command-only transport.
69
+ onDocumentChange: (_next, command) =>
70
+ host.props!.onCommit(host.props!.rev + 1, JSON.stringify([command])),
71
+ }),
72
+ );
73
+ for (const command of commands) act(() => result.current.commit(command));
74
+ const changed = result.current.document;
75
+ expect(changed).not.toEqual(initial);
76
+ expect(onDocumentChange.mock.lastCall?.[0]).toEqual(changed);
77
+ act(() => result.current.undo());
78
+ expect(result.current.document).toEqual(initial);
79
+ expect(onDocumentChange.mock.lastCall?.[0]).toEqual(initial);
80
+ expect(JSON.parse(host.props!.documentJson)).toEqual(initial);
81
+ act(() => result.current.redo());
82
+ expect(result.current.document).toEqual(changed);
83
+ expect(onDocumentChange.mock.lastCall?.[0]).toEqual(changed);
84
+ expect(JSON.parse(host.props!.documentJson)).toEqual(changed);
85
+ expect(onDocumentChange).toHaveBeenCalledTimes(commands.length + 2);
86
+ },
87
+ );
@@ -48,6 +48,7 @@
48
48
 
49
49
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
50
50
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
51
+ import { pressTargetStyle } from "@multiplatform.one/theme";
51
52
  import { Button, SizableText, XStack, YStack } from "tamagui";
52
53
  import type { FrameStats } from "../bench/frameSampler";
53
54
  import { gestureEndMark, gestureStartMark } from "../bench/frameSampler";
@@ -73,6 +74,7 @@ const meta: Meta<typeof NodeGraph> = {
73
74
  parameters: {
74
75
  status: { type: "beta" },
75
76
  layout: "fullscreen",
77
+ nativeGallery: { scroll: false },
76
78
  docs: {
77
79
  description: {
78
80
  component:
@@ -253,20 +255,36 @@ function Bench({ variant }: { readonly variant: "tamagui" | "control" }) {
253
255
  }, [culling, layoutRunner, start, stop, variant]);
254
256
 
255
257
  return (
256
- <YStack width="100%" height={700} padding="$3" gap="$2">
258
+ <YStack
259
+ width="100%"
260
+ height={hasDomRealm ? 700 : undefined}
261
+ flex={hasDomRealm ? undefined : 1}
262
+ minHeight={0}
263
+ padding="$3"
264
+ gap="$2"
265
+ >
257
266
  <SizableText size="$2" opacity={0.7}>
258
- 200 nodes, ~400 edges, one seed. Start, then bracket each pan with Gesture start / Gesture
259
- end, then Stop. The readout's p95 and mean are over the BRACKETED frames only; the idle
260
- frames between pans are counted, not mixed in. A run where nothing moved is DISCARDED by the
261
- reporter and says so, rather than printing plausible numbers.
267
+ {hasDomRealm
268
+ ? "200 nodes, ~400 edges, one seed. Start, then bracket each pan with Gesture start / Gesture end, then Stop. The readout's p95 and mean are over the BRACKETED frames only; the idle frames between pans are counted, not mixed in. A run where nothing moved is DISCARDED by the reporter and says so, rather than printing plausible numbers."
269
+ : "Start, mark each pan with Gesture start / end, then Stop to read the result."}
262
270
  </SizableText>
263
271
  {/* OUTSIDE the canvas. These were children until milestone 6, which is why
264
272
  no device ever had a Start button. */}
265
273
  <XStack gap="$2" alignItems="center" flexWrap="wrap">
266
- <Button size="$2" disabled={sampling} onPress={() => start("run")}>
274
+ <Button
275
+ size="$2"
276
+ {...(hasDomRealm ? {} : pressTargetStyle())}
277
+ disabled={sampling}
278
+ onPress={() => start("run")}
279
+ >
267
280
  Start
268
281
  </Button>
269
- <Button size="$2" disabled={!sampling} onPress={() => stop("run")}>
282
+ <Button
283
+ size="$2"
284
+ {...(hasDomRealm ? {} : pressTargetStyle())}
285
+ disabled={!sampling}
286
+ onPress={() => stop("run")}
287
+ >
270
288
  Stop
271
289
  </Button>
272
290
  {/*
@@ -275,10 +293,19 @@ function Bench({ variant }: { readonly variant: "tamagui" | "control" }) {
275
293
  scripted pan and the next — which is exactly the caveat the m6 iOS
276
294
  number shipped with.
277
295
  */}
278
- <Button size="$2" disabled={!sampling} onPress={markGesture}>
296
+ <Button
297
+ size="$2"
298
+ {...(hasDomRealm ? {} : pressTargetStyle())}
299
+ disabled={!sampling}
300
+ onPress={markGesture}
301
+ >
279
302
  {inGesture ? "Gesture end" : "Gesture start"}
280
303
  </Button>
281
- <Button size="$2" onPress={() => graph.current?.relayout()}>
304
+ <Button
305
+ size="$2"
306
+ {...(hasDomRealm ? {} : pressTargetStyle())}
307
+ onPress={() => graph.current?.relayout()}
308
+ >
282
309
  Tidy
283
310
  </Button>
284
311
  {/*
@@ -286,7 +313,12 @@ function Bench({ variant }: { readonly variant: "tamagui" | "control" }) {
286
313
  now — but because a culling change inside a sampled window silently
287
314
  changes what the window measured.
288
315
  */}
289
- <Button size="$2" disabled={sampling} onPress={() => setCulling((on) => !on)}>
316
+ <Button
317
+ size="$2"
318
+ {...(hasDomRealm ? {} : pressTargetStyle())}
319
+ disabled={sampling}
320
+ onPress={() => setCulling((on) => !on)}
321
+ >
290
322
  {culling ? "Culling ON" : "Culling OFF"}
291
323
  </Button>
292
324
  </XStack>
@@ -306,7 +338,7 @@ function Bench({ variant }: { readonly variant: "tamagui" | "control" }) {
306
338
  <SizableText size="$2" fontFamily="$mono">
307
339
  {sampling ? "sampling…" : summarize(report)}
308
340
  </SizableText>
309
- <YStack flex={1}>
341
+ <YStack flex={1} minHeight={0}>
310
342
  {/*
311
343
  NO `key`. `onlyRenderVisibleElements` is an ordinary React Flow prop
312
344
  and flips in place; keying the canvas on it threw the canvas away and
@@ -63,6 +63,7 @@ const meta: Meta<typeof NodeGraph> = {
63
63
  parameters: {
64
64
  status: { type: "beta" },
65
65
  layout: "fullscreen",
66
+ nativeGallery: { scroll: false },
66
67
  docs: {
67
68
  description: {
68
69
  component:
@@ -95,7 +96,14 @@ function ToolbarModeStory() {
95
96
  }, []);
96
97
 
97
98
  return (
98
- <YStack width="100%" height={560} padding="$3" gap="$3">
99
+ <YStack
100
+ width="100%"
101
+ height={hasDomRealm ? 560 : undefined}
102
+ flex={hasDomRealm ? undefined : 1}
103
+ minHeight={0}
104
+ padding="$3"
105
+ gap="$3"
106
+ >
99
107
  <XStack alignItems="center" gap="$3" flexWrap="wrap">
100
108
  <GraphToolbar mode={mode} onModeChange={setMode} />
101
109
  <SizableText fontFamily="$mono" size="$2">
@@ -104,7 +112,7 @@ function ToolbarModeStory() {
104
112
  }`}
105
113
  </SizableText>
106
114
  </XStack>
107
- <YStack flex={1}>
115
+ <YStack flex={1} minHeight={0}>
108
116
  <NodeGraph
109
117
  schema={schema}
110
118
  defaultDocument={demoDocumentLarge(12)}
@@ -156,7 +164,14 @@ function LongPressStory() {
156
164
  }, []);
157
165
 
158
166
  return (
159
- <YStack width="100%" height={560} padding="$3" gap="$3">
167
+ <YStack
168
+ width="100%"
169
+ height={hasDomRealm ? 560 : undefined}
170
+ flex={hasDomRealm ? undefined : 1}
171
+ minHeight={0}
172
+ padding="$3"
173
+ gap="$3"
174
+ >
160
175
  <XStack alignItems="center" gap="$3" flexWrap="wrap">
161
176
  <GraphToolbar mode={mode} onModeChange={setMode} />
162
177
  <SizableText fontFamily="$mono" size="$2">
@@ -167,11 +182,11 @@ function LongPressStory() {
167
182
  {`selected: ${selected.length ? selected.join(", ") : "none"}`}
168
183
  </SizableText>
169
184
  <SizableText size="$2" opacity={0.7}>
170
- Hold for 350 ms without moving more than 10 px, then drag. The interceptor takes the move
171
- stream away from d3-zoom inside the canvas's own realm, so the marquee draws and the graph
172
- underneath does not pan. A second finger cancels: a pinch is not a lasso.
185
+ {hasDomRealm
186
+ ? "Hold for 350 ms without moving more than 10 px, then drag. The interceptor takes the move stream away from d3-zoom inside the canvas's own realm, so the marquee draws and the graph underneath does not pan. A second finger cancels: a pinch is not a lasso."
187
+ : "Hold briefly, then drag to select. A second finger cancels the selection gesture."}
173
188
  </SizableText>
174
- <YStack flex={1}>
189
+ <YStack flex={1} minHeight={0}>
175
190
  <NodeGraph
176
191
  schema={schema}
177
192
  defaultDocument={demoDocumentLarge(12)}
@@ -0,0 +1,26 @@
1
+ import type { ComponentType } from "react";
2
+ import { cleanup, fireEvent, screen } from "@testing-library/react";
3
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
4
+ import { afterEach, expect, it, vi } from "vitest";
5
+ import { Undo } from "./AutoLayout.stories";
6
+
7
+ vi.mock("../native/DomOnlyStory", () => ({ hasDomRealm: false }));
8
+ vi.mock("../NodeGraph", () => ({
9
+ NodeGraph: ({ interactionMode }: { interactionMode: string }) => (
10
+ <div data-testid="canvas" data-mode={interactionMode} />
11
+ ),
12
+ }));
13
+
14
+ afterEach(cleanup);
15
+
16
+ it("keeps useful native actions, omits the DOM-only stamp, and wires mode to the canvas", () => {
17
+ const Story = Undo.render as ComponentType;
18
+ renderWithProviders(<Story />);
19
+ expect(screen.queryByRole("button", { name: "Stamp positions" })).toBeNull();
20
+ expect(screen.queryByText("no stamp yet")).toBeNull();
21
+ for (const name of ["Tidy the graph", "Undo", "Redo"])
22
+ expect(screen.getByRole("button", { name })).toBeTruthy();
23
+ expect(screen.getByTestId("canvas").getAttribute("data-mode")).toBe("pan");
24
+ fireEvent.click(screen.getByRole("button", { name: "Select mode" }));
25
+ expect(screen.getByTestId("canvas").getAttribute("data-mode")).toBe("select");
26
+ });
@@ -37,8 +37,10 @@
37
37
 
38
38
  import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
39
39
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
40
- import { Button, SizableText, XStack, YStack } from "tamagui";
40
+ import { Button } from "@multiplatform.one/forms";
41
+ import { SizableText, XStack, YStack } from "tamagui";
41
42
  import type { GraphEventWire } from "../dom/wire";
43
+ import type { GraphInteractionMode } from "../interaction/useLassoSelect";
42
44
  import type { BuiltinEdgeData } from "../edges/edgeKinds";
43
45
  import type { GraphDocument } from "../model/index";
44
46
  import { GraphToolbar } from "../native/GraphToolbar";
@@ -59,6 +61,7 @@ const meta: Meta<typeof NodeGraph> = {
59
61
  parameters: {
60
62
  status: { type: "beta" },
61
63
  layout: "fullscreen",
64
+ nativeGallery: { scroll: false },
62
65
  docs: {
63
66
  description: {
64
67
  component:
@@ -154,6 +157,7 @@ function AutoLayoutPage({
154
157
  readonly fitView?: boolean;
155
158
  }) {
156
159
  const graph = useRef<NodeGraphHandle>(null);
160
+ const [mode, setMode] = useState<GraphInteractionMode>("pan");
157
161
  const [reading, setReading] = useState<LayoutReading | null>(null);
158
162
  const [pending, setPending] = useState(false);
159
163
  const [checksum, setChecksum] = useState<string | null>(null);
@@ -237,29 +241,34 @@ function AutoLayoutPage({
237
241
  const wrongRunner = reading?.runner === "inline" && typeof globalThis.Worker === "function";
238
242
 
239
243
  return (
240
- <YStack width="100%" height={640} padding="$3" gap="$2">
244
+ <YStack
245
+ width="100%"
246
+ height={hasDomRealm ? 640 : undefined}
247
+ flex={hasDomRealm ? undefined : 1}
248
+ minHeight={0}
249
+ padding="$3"
250
+ gap="$2"
251
+ >
241
252
  <SizableText size="$2" opacity={0.7}>
242
- Press Tidy. The readout is the assertion: `worker-blob` on web AND on device — the relayout
243
- runs inside the canvas, and on native the canvas is a WebView, which has a real Worker.
244
- `inline` on a platform that has Worker is a failed run, not a slow one.
253
+ {hasDomRealm
254
+ ? "Press Tidy. The readout is the assertion: `worker-blob` on web AND on device — the relayout runs inside the canvas, and on native the canvas is a WebView, which has a real Worker. `inline` on a platform that has Worker is a failed run, not a slow one."
255
+ : "Tidy rearranges the graph. Undo restores its previous layout."}
245
256
  </SizableText>
246
257
  {/* OUTSIDE the canvas. On native a child of <NodeGraph> is dropped, which
247
258
  is why this page had no Tidy button on any device until milestone 6. */}
248
259
  <XStack gap="$3" alignItems="center" flexWrap="wrap">
249
260
  <GraphToolbar
250
- mode="pan"
251
- onModeChange={() => undefined}
261
+ mode={mode}
262
+ onModeChange={setMode}
252
263
  onFitView={() => graph.current?.fitView()}
253
264
  onTidy={tidy}
254
265
  onUndo={() => graph.current?.undo()}
255
266
  onRedo={() => graph.current?.redo()}
256
267
  busy={pending}
257
268
  />
258
- {showChecksum ? (
269
+ {showChecksum && hasDomRealm ? (
259
270
  <>
260
- <Button size="$2" onPress={stamp}>
261
- Stamp positions
262
- </Button>
271
+ <Button onPress={stamp}>Stamp positions</Button>
263
272
  <SizableText size="$2" opacity={0.7}>
264
273
  {checksum === null ? "no stamp yet" : `checksum ${checksum}`}
265
274
  </SizableText>
@@ -297,11 +306,12 @@ function AutoLayoutPage({
297
306
  </SizableText>
298
307
  ) : null}
299
308
  </XStack>
300
- <YStack flex={1}>
309
+ <YStack flex={1} minHeight={0}>
301
310
  <NodeGraph
302
311
  schema={schema}
303
312
  defaultDocument={document}
304
313
  fitView={fitView}
314
+ interactionMode={mode}
305
315
  graphRef={graph}
306
316
  onGraphEvent={onGraphEvent}
307
317
  >
@@ -47,6 +47,25 @@ const relayout: GraphCommand<Nodes, Edges> = {
47
47
  positions: { a: { x: 0, y: 0 }, b: { x: 0, y: 60 } },
48
48
  };
49
49
 
50
+ it("reports the applied history command without notifying for an empty stack", () => {
51
+ const history = createHistory<Nodes, Edges>();
52
+ const applied: Array<[Doc, GraphCommand<Nodes, Edges>]> = [];
53
+ const observe = (next: Doc, command: GraphCommand<Nodes, Edges>) => applied.push([next, command]);
54
+ expect(history.undo(doc, observe)).toBe(doc);
55
+ expect(history.redo(doc, observe)).toBe(doc);
56
+ expect(applied).toEqual([]);
57
+ const changed = history.commit(doc, drag(6));
58
+ const undone = history.undo(changed, observe);
59
+ expect(undone).toEqual(doc);
60
+ expect(history.redo(undone, observe)).toEqual(changed);
61
+ expect(applied).toEqual([
62
+ [doc, drag(-6)],
63
+ [changed, drag(6)],
64
+ ]);
65
+ history.redo(changed, observe);
66
+ expect(applied).toHaveLength(2);
67
+ });
68
+
50
69
  describe("a 30-step drag", () => {
51
70
  // 20 ms a step, so the gesture runs 580 ms — LONGER than the 400 ms default.
52
71
  // That is deliberate: the window measures the gap since the last movement,
@@ -33,8 +33,15 @@ export interface HistoryOptions {
33
33
  export interface GraphHistory<N extends NodeKindDefs, E extends EdgeKindDefs> {
34
34
  /** Apply the command, record it, return the new document. */
35
35
  readonly commit: (doc: GraphDocument<N, E>, command: GraphCommand<N, E>) => GraphDocument<N, E>;
36
- readonly undo: (doc: GraphDocument<N, E>) => GraphDocument<N, E>;
37
- readonly redo: (doc: GraphDocument<N, E>) => GraphDocument<N, E>;
36
+ /** Notify command transports with the journal entry that produced the document. */
37
+ readonly undo: (
38
+ doc: GraphDocument<N, E>,
39
+ onApplied?: (next: GraphDocument<N, E>, command: GraphCommand<N, E>) => void,
40
+ ) => GraphDocument<N, E>;
41
+ readonly redo: (
42
+ doc: GraphDocument<N, E>,
43
+ onApplied?: (next: GraphDocument<N, E>, command: GraphCommand<N, E>) => void,
44
+ ) => GraphDocument<N, E>;
38
45
  readonly canUndo: () => boolean;
39
46
  readonly canRedo: () => boolean;
40
47
  readonly depth: () => number;
@@ -127,18 +134,22 @@ export function createHistory<N extends NodeKindDefs, E extends EdgeKindDefs>(
127
134
  return next;
128
135
  },
129
136
 
130
- undo(doc) {
137
+ undo(doc, onApplied) {
131
138
  const entry = past.pop();
132
139
  if (!entry) return doc;
133
140
  future.push(entry);
134
- return applyCommand(doc, entry.undo);
141
+ const next = applyCommand(doc, entry.undo);
142
+ onApplied?.(next, entry.undo);
143
+ return next;
135
144
  },
136
145
 
137
- redo(doc) {
146
+ redo(doc, onApplied) {
138
147
  const entry = future.pop();
139
148
  if (!entry) return doc;
140
149
  past.push(entry);
141
- return applyCommand(doc, entry.redo);
150
+ const next = applyCommand(doc, entry.redo);
151
+ onApplied?.(next, entry.redo);
152
+ return next;
142
153
  },
143
154
 
144
155
  canUndo: () => past.length > 0,