@inditextech/weave-sdk 1.2.2 → 1.3.1

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/dist/sdk.node.js CHANGED
@@ -15008,6 +15008,7 @@ var require_lodash = __commonJS({ "../../node_modules/lodash/lodash.js"(exports,
15008
15008
  } else root$8._ = _;
15009
15009
  }).call(exports);
15010
15010
  } });
15011
+ var import_lodash$1 = __toESM(require_lodash());
15011
15012
  var import_lodash = __toESM(require_lodash(), 1);
15012
15013
 
15013
15014
  //#endregion
@@ -15110,12 +15111,12 @@ var WeaveStore = class {
15110
15111
  node: JSON.parse(JSON.stringify(nodeInfo.node))
15111
15112
  });
15112
15113
  }
15113
- if (!this.isRoomLoaded && !(0, import_lodash.isEmpty)(this.state.weave)) {
15114
+ if (!this.isRoomLoaded && !(0, import_lodash$1.isEmpty)(this.state.weave)) {
15114
15115
  this.instance.setupRenderer();
15115
15116
  this.isRoomLoaded = true;
15116
15117
  this.instance.emitEvent("onRoomLoaded", this.isRoomLoaded);
15117
15118
  }
15118
- if (this.isRoomLoaded && !(0, import_lodash.isEmpty)(this.state.weave)) this.instance.render();
15119
+ if (this.isRoomLoaded && !(0, import_lodash$1.isEmpty)(this.state.weave)) this.instance.render();
15119
15120
  });
15120
15121
  }
15121
15122
  canUndoStateStep() {
@@ -15129,10 +15130,12 @@ var WeaveStore = class {
15129
15130
  undoStateStep() {
15130
15131
  if (!this.supportsUndoManager) throw new Error("Undo manager not supported");
15131
15132
  this.undoManager.undo();
15133
+ this.instance.emitEvent("onUndoChange");
15132
15134
  }
15133
15135
  redoStateStep() {
15134
15136
  if (!this.supportsUndoManager) throw new Error("Undo manager not supported");
15135
15137
  this.undoManager.redo();
15138
+ this.instance.emitEvent("onRedoChange");
15136
15139
  }
15137
15140
  handleConnectionStatusChange(status) {
15138
15141
  this.instance.emitEvent("onStoreConnectionStatusChange", status);
@@ -17556,7 +17559,7 @@ var require_mergeWith = __commonJS({ "../../node_modules/lodash/mergeWith.js"(ex
17556
17559
  });
17557
17560
  module.exports = mergeWith;
17558
17561
  } });
17559
- var import_mergeWith = __toESM(require_mergeWith(), 1);
17562
+ var import_mergeWith = __toESM(require_mergeWith());
17560
17563
 
17561
17564
  //#endregion
17562
17565
  //#region src/utils.ts
@@ -18406,7 +18409,7 @@ var require_throttle = __commonJS({ "../../node_modules/lodash/throttle.js"(expo
18406
18409
  }
18407
18410
  module.exports = throttle;
18408
18411
  } });
18409
- var import_throttle = __toESM(require_throttle(), 1);
18412
+ var import_throttle = __toESM(require_throttle());
18410
18413
 
18411
18414
  //#endregion
18412
18415
  //#region src/nodes/stage/constants.ts
@@ -18495,6 +18498,16 @@ const WEAVE_STAGE_PANNING_DEFAULT_CONFIG = {
18495
18498
  edgePanSpeed: 10
18496
18499
  };
18497
18500
 
18501
+ //#endregion
18502
+ //#region src/plugins/nodes-multi-selection-feedback/constants.ts
18503
+ const WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY = "nodesMultiSelectionFeedback";
18504
+ const WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_LAYER_ID = "selectionLayer";
18505
+ const WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_DEFAULT_CONFIG = { style: {
18506
+ stroke: "#ff2c2cff",
18507
+ strokeWidth: 2,
18508
+ fill: "transparent"
18509
+ } };
18510
+
18498
18511
  //#endregion
18499
18512
  //#region src/plugins/nodes-selection/nodes-selection.ts
18500
18513
  var WeaveNodesSelectionPlugin = class extends WeavePlugin {
@@ -18508,6 +18521,8 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18508
18521
  y: 0
18509
18522
  };
18510
18523
  panLoopId = null;
18524
+ prevSelectedNodes = [];
18525
+ handledClickOrTap = false;
18511
18526
  constructor(params) {
18512
18527
  super();
18513
18528
  this.config = mergeExceptArrays(WEAVE_NODES_SELECTION_DEFAULT_CONFIG, params?.config ?? {});
@@ -18636,7 +18651,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18636
18651
  nodeHovered = targetNode;
18637
18652
  }
18638
18653
  targetNode?.handleMouseover();
18639
- }
18654
+ } else nodeHovered?.handleMouseout();
18640
18655
  });
18641
18656
  tr.on("mouseover", () => {
18642
18657
  stage.container().style.cursor = "grab";
@@ -18769,6 +18784,20 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18769
18784
  for (const node of selectedNodes) node.setAttrs({ isCloned: void 0 });
18770
18785
  tr.forceUpdate();
18771
18786
  });
18787
+ this.instance.addEventListener("onNodesChange", () => {
18788
+ const currentSelectedNodes = tr.nodes();
18789
+ const unselectedNodes = this.prevSelectedNodes.filter((node) => !currentSelectedNodes.map((node1) => node1.getAttrs().id).includes(node.getAttrs().id));
18790
+ if (currentSelectedNodes.length > 1) for (const node of currentSelectedNodes) node.handleSelectNode();
18791
+ if (currentSelectedNodes.length === 1) currentSelectedNodes[0].handleDeselectNode();
18792
+ for (const node of unselectedNodes) node.handleDeselectNode();
18793
+ this.prevSelectedNodes = tr.nodes();
18794
+ });
18795
+ this.instance.addEventListener("onUndoChange", () => {
18796
+ this.handleUndoRedoSelectionChange();
18797
+ });
18798
+ this.instance.addEventListener("onRedoChange", () => {
18799
+ this.handleUndoRedoSelectionChange();
18800
+ });
18772
18801
  this.tr = tr;
18773
18802
  this.trHover = trHover;
18774
18803
  this.selectionRectangle = selectionRectangle;
@@ -18795,6 +18824,18 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18795
18824
  stage.container().style.cursor = "default";
18796
18825
  });
18797
18826
  }
18827
+ handleUndoRedoSelectionChange() {
18828
+ const selectionLayer = this.instance.getSelectionLayer();
18829
+ const selectionFeedbackPlugin = this.getNodesSelectionFeedbackPlugin();
18830
+ if (selectionLayer && selectionFeedbackPlugin) {
18831
+ selectionLayer.find(`.selection-halo`).forEach((node) => node.destroy());
18832
+ selectionFeedbackPlugin.cleanupSelectedHalos();
18833
+ const currentSelectedNodes = this.tr.nodes();
18834
+ if (currentSelectedNodes.length > 1) for (const node of currentSelectedNodes) node.handleSelectNode();
18835
+ if (currentSelectedNodes.length === 1) currentSelectedNodes[0].handleDeselectNode();
18836
+ this.prevSelectedNodes = currentSelectedNodes;
18837
+ }
18838
+ }
18798
18839
  getLayer() {
18799
18840
  const stage = this.instance.getStage();
18800
18841
  return stage.findOne(`#${this.getLayerName()}`);
@@ -18972,6 +19013,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18972
19013
  });
18973
19014
  stage.on("pointerdown", (e) => {
18974
19015
  this.setTapStart(e);
19016
+ this.handledClickOrTap = false;
18975
19017
  this.pointers[e.evt.pointerId] = e.evt;
18976
19018
  if (e.evt.pointerType === "touch" && Object.keys(this.pointers).length > 1) return;
18977
19019
  if (e.evt.pointerType === "mouse" && e.evt.button !== 0) return;
@@ -19087,7 +19129,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19087
19129
  }
19088
19130
  if (contextMenuPlugin?.isContextMenuVisible()) this.stopPanLoop();
19089
19131
  const selectedGroup = getTargetedNode(this.instance);
19090
- if (!moved && selectedGroup?.getParent() instanceof Konva.Transformer) {
19132
+ if (!moved && selectedGroup?.getParent() instanceof Konva.Transformer && !this.handledClickOrTap) {
19091
19133
  this.selecting = false;
19092
19134
  this.stopPanLoop();
19093
19135
  this.hideSelectorArea();
@@ -19180,6 +19222,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19180
19222
  }
19181
19223
  handleClickOrTap(e) {
19182
19224
  const stage = this.instance.getStage();
19225
+ this.handledClickOrTap = true;
19183
19226
  e.cancelBubble = true;
19184
19227
  if (!this.enabled) return;
19185
19228
  if (this.instance.getActiveAction() !== SELECTION_TOOL_ACTION_NAME) return;
@@ -19311,6 +19354,10 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19311
19354
  this.getLayer()?.hide();
19312
19355
  this.enabled = false;
19313
19356
  }
19357
+ getNodesSelectionFeedbackPlugin() {
19358
+ const selectionFeedbackPlugin = this.instance.getPlugin(WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY);
19359
+ return selectionFeedbackPlugin;
19360
+ }
19314
19361
  getContextMenuPlugin() {
19315
19362
  const contextMenuPlugin = this.instance.getPlugin(WEAVE_CONTEXT_MENU_PLUGIN_KEY);
19316
19363
  return contextMenuPlugin;
@@ -19831,6 +19878,8 @@ var WeaveNode = class {
19831
19878
  node.resetCrop = function() {};
19832
19879
  node.handleMouseover = function() {};
19833
19880
  node.handleMouseout = function() {};
19881
+ node.handleSelectNode = function() {};
19882
+ node.handleDeselectNode = function() {};
19834
19883
  }
19835
19884
  isNodeSelected(ele) {
19836
19885
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
@@ -19854,6 +19903,7 @@ var WeaveNode = class {
19854
19903
  return;
19855
19904
  }
19856
19905
  selectionPlugin.getHoverTransformer().nodes([node]);
19906
+ selectionPlugin.getHoverTransformer().moveToTop();
19857
19907
  }
19858
19908
  hideHoverState() {
19859
19909
  const selectionPlugin = this.getSelectionPlugin();
@@ -19882,6 +19932,7 @@ var WeaveNode = class {
19882
19932
  let transforming = false;
19883
19933
  node.on("transformstart", (e) => {
19884
19934
  transforming = true;
19935
+ this.getNodesSelectionFeedbackPlugin()?.hideSelectionHalo(node);
19885
19936
  this.instance.emitEvent("onTransform", e.target);
19886
19937
  });
19887
19938
  const handleTransform = (e) => {
@@ -19891,7 +19942,7 @@ var WeaveNode = class {
19891
19942
  if (nodesSelectionPlugin && this.isSelecting() && this.isNodeSelected(node$1)) nodesSelectionPlugin.getTransformer().forceUpdate();
19892
19943
  if (nodesEdgeSnappingPlugin && transforming && this.isSelecting() && this.isNodeSelected(node$1)) nodesEdgeSnappingPlugin.evaluateGuidelines(e);
19893
19944
  };
19894
- node.on("transform", (0, import_lodash.throttle)(handleTransform, 100));
19945
+ node.on("transform", (0, import_lodash$1.throttle)(handleTransform, 100));
19895
19946
  node.on("transformend", (e) => {
19896
19947
  const node$1 = e.target;
19897
19948
  this.instance.emitEvent("onTransform", null);
@@ -19901,8 +19952,10 @@ var WeaveNode = class {
19901
19952
  if (nodesSnappingPlugin) nodesSnappingPlugin.cleanupGuidelines();
19902
19953
  if (nodesSelectionPlugin) nodesSelectionPlugin.getTransformer().forceUpdate();
19903
19954
  this.scaleReset(node$1);
19955
+ this.getNodesSelectionFeedbackPlugin()?.hideSelectionHalo(node$1);
19904
19956
  const nodeHandler = this.instance.getNodeHandler(node$1.getAttrs().nodeType);
19905
19957
  if (nodeHandler) this.instance.updateNode(nodeHandler.serialize(node$1));
19958
+ this.getNodesSelectionPlugin()?.getHoverTransformer().forceUpdate();
19906
19959
  });
19907
19960
  const stage = this.instance.getStage();
19908
19961
  let originalPosition = null;
@@ -19917,6 +19970,7 @@ var WeaveNode = class {
19917
19970
  });
19918
19971
  node.on("dragstart", (e) => {
19919
19972
  const nodeTarget = e.target;
19973
+ this.getNodesSelectionFeedbackPlugin()?.hideSelectionHalo(nodeTarget);
19920
19974
  this.didMove = false;
19921
19975
  if (e.evt?.buttons === 0) {
19922
19976
  nodeTarget.stopDrag();
@@ -19980,9 +20034,10 @@ var WeaveNode = class {
19980
20034
  if (layerToMove && !hasFrames(realNodeTarget) && realNodeTarget.isDragging()) layerToMove.fire(WEAVE_NODE_CUSTOM_EVENTS.onTargetEnter, { bubbles: true });
19981
20035
  }
19982
20036
  };
19983
- node.on("dragmove", (0, import_lodash.throttle)(handleDragMove, 100));
20037
+ node.on("dragmove", (0, import_lodash$1.throttle)(handleDragMove, 100));
19984
20038
  node.on("dragend", (e) => {
19985
20039
  const nodeTarget = e.target;
20040
+ this.getNodesSelectionFeedbackPlugin()?.hideSelectionHalo(nodeTarget);
19986
20041
  e.cancelBubble = true;
19987
20042
  if (nodeTarget.getAttrs().isCloneOrigin && originalPosition) {
19988
20043
  nodeTarget.setAbsolutePosition(originalPosition);
@@ -20026,6 +20081,12 @@ var WeaveNode = class {
20026
20081
  node.handleMouseout = () => {
20027
20082
  this.handleMouseout(node);
20028
20083
  };
20084
+ node.handleSelectNode = () => {
20085
+ this.getNodesSelectionFeedbackPlugin()?.createSelectionHalo(node);
20086
+ };
20087
+ node.handleDeselectNode = () => {
20088
+ this.getNodesSelectionFeedbackPlugin()?.destroySelectionHalo(node);
20089
+ };
20029
20090
  node.on("pointerover", (e) => {
20030
20091
  const doCancelBubble = this.handleMouseOver(e.target);
20031
20092
  if (doCancelBubble) e.cancelBubble = true;
@@ -20204,6 +20265,10 @@ var WeaveNode = class {
20204
20265
  }
20205
20266
  return realNodeTarget;
20206
20267
  }
20268
+ getNodesSelectionFeedbackPlugin() {
20269
+ const selectionFeedbackPlugin = this.instance.getPlugin(WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY);
20270
+ return selectionFeedbackPlugin;
20271
+ }
20207
20272
  };
20208
20273
 
20209
20274
  //#endregion
@@ -20719,6 +20784,7 @@ var WeaveGroupsManager = class {
20719
20784
  const groupNode = stage.findOne(`#${groupId}`);
20720
20785
  if (groupHandler && groupNode) this.instance.updateNode(groupHandler.serialize(groupNode));
20721
20786
  setTimeout(() => {
20787
+ this.getNodesMultiSelectionFeedbackPlugin()?.cleanupSelectedHalos();
20722
20788
  const groupNode$1 = stage.findOne(`#${groupId}`);
20723
20789
  const selectionPlugin$1 = this.instance.getPlugin("nodesSelection");
20724
20790
  if (groupNode$1 && selectionPlugin$1) {
@@ -20797,6 +20863,7 @@ var WeaveGroupsManager = class {
20797
20863
  this.instance.removeNode(groupNode);
20798
20864
  }
20799
20865
  setTimeout(() => {
20866
+ this.getNodesMultiSelectionFeedbackPlugin()?.cleanupSelectedHalos();
20800
20867
  const firstElement = newLayer.findOne(`#${newChildId}`);
20801
20868
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
20802
20869
  if (firstElement && selectionPlugin) selectionPlugin.setSelectedNodes([firstElement]);
@@ -20815,6 +20882,9 @@ var WeaveGroupsManager = class {
20815
20882
  rotation
20816
20883
  };
20817
20884
  }
20885
+ getNodesMultiSelectionFeedbackPlugin() {
20886
+ return this.instance.getPlugin(WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY);
20887
+ }
20818
20888
  };
20819
20889
 
20820
20890
  //#endregion
@@ -21636,7 +21706,7 @@ var WeaveRegisterManager = class {
21636
21706
 
21637
21707
  //#endregion
21638
21708
  //#region package.json
21639
- var version = "1.2.2";
21709
+ var version = "1.3.1";
21640
21710
 
21641
21711
  //#endregion
21642
21712
  //#region src/managers/setup.ts
@@ -23117,7 +23187,7 @@ var WeaveTextNode = class extends WeaveNode {
23117
23187
  text.on("transformstart", (e) => {
23118
23188
  this.instance.emitEvent("onTransform", e.target);
23119
23189
  });
23120
- text.on("transform", (0, import_lodash.throttle)(handleTextTransform, 50));
23190
+ text.on("transform", (0, import_lodash$1.throttle)(handleTextTransform, 50));
23121
23191
  text.on("transformend", () => {
23122
23192
  this.instance.emitEvent("onTransform", null);
23123
23193
  });
@@ -24054,6 +24124,14 @@ var WeaveImageNode = class extends WeaveNode {
24054
24124
  width: this.imageSource[id].width,
24055
24125
  height: this.imageSource[id].height
24056
24126
  });
24127
+ if (!image.getAttrs().uncroppedImage) image.setAttr("uncroppedImage", {
24128
+ width: this.imageSource[id].width,
24129
+ height: this.imageSource[id].height
24130
+ });
24131
+ this.imageState[id] = {
24132
+ loaded: true,
24133
+ error: false
24134
+ };
24057
24135
  this.instance.updateNode(this.serialize(image));
24058
24136
  } else {
24059
24137
  this.updatePlaceholderSize(image, imagePlaceholder);
@@ -24280,7 +24358,7 @@ var WeaveImageNode = class extends WeaveNode {
24280
24358
  const imageAttrs = image.getAttrs();
24281
24359
  const internalImage = image?.findOne(`#${imageAttrs.id}-image`);
24282
24360
  if (!this.imageState[imageAttrs.id ?? ""]?.loaded) return;
24283
- if (image && internalImage && !imageAttrs.adding && imageAttrs.cropInfo) {
24361
+ if (image && internalImage && !imageAttrs.adding && imageAttrs.cropInfo && imageAttrs.uncroppedImage) {
24284
24362
  const actualScale = imageAttrs.uncroppedImage.width / imageAttrs.imageInfo.width;
24285
24363
  const cropScale = imageAttrs.cropInfo ? imageAttrs.cropInfo.scaleX : actualScale;
24286
24364
  internalImage.width(imageAttrs.uncroppedImage.width);
@@ -24297,7 +24375,7 @@ var WeaveImageNode = class extends WeaveNode {
24297
24375
  internalImage.width(imageAttrs.cropSize.width * (actualScale / cropScale));
24298
24376
  internalImage.height(imageAttrs.cropSize.height * (actualScale / cropScale));
24299
24377
  }
24300
- if (image && internalImage && !imageAttrs.adding && !imageAttrs.cropInfo) {
24378
+ if (image && internalImage && !imageAttrs.adding && !imageAttrs.cropInfo && imageAttrs.uncroppedImage) {
24301
24379
  internalImage.width(imageAttrs.uncroppedImage.width);
24302
24380
  internalImage.height(imageAttrs.uncroppedImage.height);
24303
24381
  internalImage.rotation(0);
@@ -26412,7 +26490,7 @@ var WeaveStageZoomPlugin = class extends WeavePlugin {
26412
26490
  this.config.zoomSteps = [minimumZoom, ...this.config.zoomSteps];
26413
26491
  }
26414
26492
  };
26415
- mainLayer?.on("draw", (0, import_lodash.throttle)(handleDraw, 50));
26493
+ mainLayer?.on("draw", (0, import_lodash$1.throttle)(handleDraw, 50));
26416
26494
  this.setZoom(this.config.zoomSteps[this.actualStep]);
26417
26495
  }
26418
26496
  setZoom(scale, centered = true, pointer) {
@@ -30123,7 +30201,7 @@ var WeaveStageGridPlugin = class extends WeavePlugin {
30123
30201
  if (!this.enabled || !(this.isSpaceKeyPressed || this.isMouseMiddleButtonPressed || this.moveToolActive)) return;
30124
30202
  this.onRender();
30125
30203
  };
30126
- stage.on("pointermove", (0, import_lodash.throttle)(handleMouseMove, 50));
30204
+ stage.on("pointermove", (0, import_lodash$1.throttle)(handleMouseMove, 50));
30127
30205
  stage.on("pointermove", () => {
30128
30206
  if (this.enabled) this.onRender();
30129
30207
  });
@@ -30445,6 +30523,7 @@ var WeaveStagePanningPlugin = class extends WeavePlugin {
30445
30523
  this.isDragging = false;
30446
30524
  this.enableMove = false;
30447
30525
  this.panning = false;
30526
+ this.cleanupEdgeMoveIntervals();
30448
30527
  });
30449
30528
  const handleWheel = (e) => {
30450
30529
  const performPanning = !this.isCtrlOrMetaPressed && !e.ctrlKey;
@@ -30478,14 +30557,14 @@ var WeaveStagePanningPlugin = class extends WeavePlugin {
30478
30557
  let isNearBottom = false;
30479
30558
  for (const targetId in this.panEdgeTargets) {
30480
30559
  const target = this.panEdgeTargets[targetId];
30481
- isNearLeft = pos.x < offset * stage.scaleX();
30560
+ isNearLeft = pos.x < offset / stage.scaleX();
30482
30561
  if (isNearLeft) target.x(target.x() - speed / stage.scaleX());
30483
- isNearRight = pos.x > stage.width() - offset * stage.scaleX();
30562
+ isNearRight = pos.x > stage.width() - offset / stage.scaleX();
30484
30563
  if (isNearRight) target.x(target.x() + speed / stage.scaleX());
30485
- isNearTop = pos.y < offset * stage.scaleY();
30486
- if (isNearTop) target.y(target.y() - speed / stage.scaleX());
30487
- isNearBottom = pos.y > stage.height() - offset * stage.scaleY();
30488
- if (isNearBottom) target.y(target.y() + speed / stage.scaleX());
30564
+ isNearTop = pos.y < offset;
30565
+ if (isNearTop) target.y(target.y() - speed / stage.scaleY());
30566
+ isNearBottom = pos.y > stage.height() - offset;
30567
+ if (isNearBottom) target.y(target.y() + speed / stage.scaleY());
30489
30568
  }
30490
30569
  this.getStageGridPlugin()?.renderGrid();
30491
30570
  let dx = 0;
@@ -30699,7 +30778,7 @@ var WeaveStageMinimapPlugin = class extends WeavePlugin {
30699
30778
  this.setupMinimap();
30700
30779
  }
30701
30780
  onInit() {
30702
- const throttledUpdateMinimap = (0, import_lodash.throttle)(async () => {
30781
+ const throttledUpdateMinimap = (0, import_lodash$1.throttle)(async () => {
30703
30782
  await this.updateMinimapContent();
30704
30783
  this.updateMinimapViewportReference();
30705
30784
  }, 100);
@@ -30810,6 +30889,144 @@ var WeaveStageResizePlugin = class extends WeavePlugin {
30810
30889
  }
30811
30890
  };
30812
30891
 
30892
+ //#endregion
30893
+ //#region src/plugins/nodes-multi-selection-feedback/nodes-multi-selection-feedback.ts
30894
+ var WeaveNodesMultiSelectionFeedbackPlugin = class extends WeavePlugin {
30895
+ selectedHalos = {};
30896
+ constructor(params) {
30897
+ super();
30898
+ this.config = mergeExceptArrays(WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_DEFAULT_CONFIG, params?.config ?? {});
30899
+ this.selectedHalos = {};
30900
+ }
30901
+ getName() {
30902
+ return WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY;
30903
+ }
30904
+ getLayerName() {
30905
+ return WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_LAYER_ID;
30906
+ }
30907
+ initLayer() {
30908
+ const stage = this.instance.getStage();
30909
+ const findLayer = stage.findOne(`#${this.getLayerName()}`);
30910
+ if (!findLayer) {
30911
+ const layer = new Konva.Layer({ id: this.getLayerName() });
30912
+ stage.add(layer);
30913
+ }
30914
+ }
30915
+ getSelectedHalos() {
30916
+ return this.selectedHalos;
30917
+ }
30918
+ cleanupSelectedHalos() {
30919
+ const keys = Object.keys(this.selectedHalos);
30920
+ keys.forEach((key) => {
30921
+ this.selectedHalos[key].destroy();
30922
+ delete this.selectedHalos[key];
30923
+ });
30924
+ }
30925
+ getNodeRectInfo(node) {
30926
+ const stage = node.getStage();
30927
+ if (!stage) return null;
30928
+ const clone = node.clone();
30929
+ const box = clone.getClientRect({
30930
+ skipTransform: true,
30931
+ skipStroke: true,
30932
+ relativeTo: node.getParent() ?? this.instance.getMainLayer()
30933
+ });
30934
+ const localBox = clone.getClientRect({
30935
+ skipTransform: true,
30936
+ skipStroke: true
30937
+ });
30938
+ const transform = clone.getAbsoluteTransform();
30939
+ const corners = [
30940
+ {
30941
+ x: localBox.x,
30942
+ y: localBox.y
30943
+ },
30944
+ {
30945
+ x: localBox.x + localBox.width,
30946
+ y: localBox.y
30947
+ },
30948
+ {
30949
+ x: localBox.x + localBox.width,
30950
+ y: localBox.y + localBox.height
30951
+ },
30952
+ {
30953
+ x: localBox.x,
30954
+ y: localBox.y + localBox.height
30955
+ }
30956
+ ].map((p) => transform.point(p));
30957
+ return {
30958
+ x: corners[0].x,
30959
+ y: corners[0].y,
30960
+ width: box.width * clone.scaleX(),
30961
+ height: box.height * clone.scaleY(),
30962
+ rotation: clone.rotation()
30963
+ };
30964
+ }
30965
+ createSelectionHalo(node) {
30966
+ const nodeId = node.getAttrs().id ?? "";
30967
+ if (this.selectedHalos[nodeId]) return;
30968
+ const info = this.getNodeRectInfo(node);
30969
+ if (info) {
30970
+ const parent = node.getParent();
30971
+ if (node.getAttrs().nodeId) {
30972
+ const realParent = this.instance.getStage().findOne(`#${node.getAttrs().nodeId}`);
30973
+ if (realParent) {
30974
+ info.x += realParent.x();
30975
+ info.y += realParent.y();
30976
+ }
30977
+ }
30978
+ if (parent && parent.getAttrs().nodeId) {
30979
+ const realParent = this.instance.getStage().findOne(`#${parent.getAttrs().nodeId}`);
30980
+ if (realParent) {
30981
+ info.x += realParent.x();
30982
+ info.y += realParent.y();
30983
+ }
30984
+ }
30985
+ this.selectedHalos[nodeId] = new Konva.Rect({
30986
+ id: `${nodeId}-selection-halo`,
30987
+ name: "selection-halo",
30988
+ x: info.x,
30989
+ y: info.y,
30990
+ width: info.width,
30991
+ height: info.height,
30992
+ rotation: info.rotation,
30993
+ stroke: this.config.style.stroke,
30994
+ strokeWidth: this.config.style.strokeWidth,
30995
+ fill: this.config.style.fill,
30996
+ draggable: false,
30997
+ listening: false
30998
+ });
30999
+ this.instance.getSelectionLayer()?.add(this.selectedHalos[nodeId]);
31000
+ }
31001
+ }
31002
+ destroySelectionHalo(node) {
31003
+ const nodeId = node.getAttrs().id ?? "";
31004
+ if (this.selectedHalos[nodeId]) {
31005
+ this.selectedHalos[nodeId].destroy();
31006
+ delete this.selectedHalos[nodeId];
31007
+ }
31008
+ }
31009
+ hideSelectionHalo(node) {
31010
+ const selectionLayer = this.instance.getSelectionLayer();
31011
+ if (selectionLayer) {
31012
+ const groupHalo = selectionLayer.findOne(`#${node.getAttrs().id}-selection-halo`);
31013
+ if (groupHalo) groupHalo.hide();
31014
+ }
31015
+ }
31016
+ getLayer() {
31017
+ const stage = this.instance.getStage();
31018
+ return stage.findOne(`#${this.getLayerName()}`);
31019
+ }
31020
+ enable() {
31021
+ this.getLayer()?.show();
31022
+ this.enabled = true;
31023
+ }
31024
+ disable() {
31025
+ this.getLayer()?.hide();
31026
+ this.enabled = false;
31027
+ }
31028
+ };
31029
+
30813
31030
  //#endregion
30814
31031
  //#region src/plugins/connected-users/constants.ts
30815
31032
  const WEAVE_CONNECTED_USERS_KEY = "connectedUsers";
@@ -30854,7 +31071,7 @@ var WeaveConnectedUsersPlugin = class extends WeavePlugin {
30854
31071
  newConnectedUsers[userInformation.id] = userInformation;
30855
31072
  }
30856
31073
  }
30857
- if (!(0, import_lodash.isEqual)(this.connectedUsers, newConnectedUsers)) this.instance.emitEvent("onConnectedUsersChange", newConnectedUsers);
31074
+ if (!(0, import_lodash$1.isEqual)(this.connectedUsers, newConnectedUsers)) this.instance.emitEvent("onConnectedUsersChange", newConnectedUsers);
30858
31075
  this.connectedUsers = newConnectedUsers;
30859
31076
  });
30860
31077
  }
@@ -31095,7 +31312,7 @@ var WeaveUsersPointersPlugin = class extends WeavePlugin {
31095
31312
  for (let i = 0; i < inactiveUsers.length; i++) delete this.usersPointers[inactiveUsers[i]];
31096
31313
  this.renderPointers();
31097
31314
  });
31098
- const sendAwarenessUpdateThrottled = (0, import_lodash.throttle)(this.sendAwarenessUpdate.bind(this), this.config.awarenessThrottleMs);
31315
+ const sendAwarenessUpdateThrottled = (0, import_lodash$1.throttle)(this.sendAwarenessUpdate.bind(this), this.config.awarenessThrottleMs);
31099
31316
  stage.on("dragmove", () => {
31100
31317
  const mousePos = stage.getRelativePointerPosition();
31101
31318
  if (mousePos) sendAwarenessUpdateThrottled(mousePos);
@@ -32323,9 +32540,11 @@ var WeaveStageKeyboardMovePlugin = class extends WeavePlugin {
32323
32540
 
32324
32541
  //#endregion
32325
32542
  //#region src/index.node.ts
32326
- global._weave_isServerSide = true;
32327
- global._weave_serverSideBackend = void 0;
32543
+ if (typeof window === "undefined") {
32544
+ global._weave_isServerSide = true;
32545
+ global._weave_serverSideBackend = void 0;
32546
+ }
32328
32547
 
32329
32548
  //#endregion
32330
- export { ALIGN_NODES_ALIGN_TO, ALIGN_NODES_TOOL_ACTION_NAME, ALIGN_NODES_TOOL_STATE, ARROW_TOOL_ACTION_NAME, ARROW_TOOL_STATE, BRUSH_TOOL_ACTION_NAME, BRUSH_TOOL_DEFAULT_CONFIG, BRUSH_TOOL_STATE, COPY_PASTE_NODES_PLUGIN_STATE, ELLIPSE_TOOL_ACTION_NAME, ELLIPSE_TOOL_STATE, ERASER_TOOL_ACTION_NAME, ERASER_TOOL_STATE, FRAME_TOOL_ACTION_NAME, FRAME_TOOL_STATE, GUIDE_DISTANCE_LINE_DEFAULT_CONFIG, GUIDE_ENTER_SNAPPING_TOLERANCE, GUIDE_EXIT_SNAPPING_TOLERANCE, GUIDE_HORIZONTAL_LINE_NAME, GUIDE_LINE_DEFAULT_CONFIG, GUIDE_LINE_DRAG_SNAPPING_THRESHOLD, GUIDE_LINE_NAME, GUIDE_LINE_TRANSFORM_SNAPPING_THRESHOLD, GUIDE_ORIENTATION, GUIDE_VERTICAL_LINE_NAME, IMAGE_TOOL_ACTION_NAME, IMAGE_TOOL_STATE, MOVE_TOOL_ACTION_NAME, MOVE_TOOL_STATE, NODE_SNAP, NODE_SNAP_HORIZONTAL, NODE_SNAP_VERTICAL, PEN_TOOL_ACTION_NAME, PEN_TOOL_STATE, RECTANGLE_TOOL_ACTION_NAME, RECTANGLE_TOOL_STATE, REGULAR_POLYGON_TOOL_ACTION_NAME, REGULAR_POLYGON_TOOL_STATE, SELECTION_TOOL_ACTION_NAME, SELECTION_TOOL_STATE, STAGE_MINIMAP_DEFAULT_CONFIG, STAR_TOOL_ACTION_NAME, STAR_TOOL_STATE, TEXT_LAYOUT, TEXT_TOOL_ACTION_NAME, TEXT_TOOL_STATE, VIDEO_TOOL_ACTION_NAME, VIDEO_TOOL_STATE, WEAVE_ARROW_NODE_TYPE, WEAVE_COMMENTS_RENDERER_KEY, WEAVE_COMMENTS_TOOL_LAYER_ID, WEAVE_COMMENT_CREATE_ACTION, WEAVE_COMMENT_NODE_ACTION, WEAVE_COMMENT_NODE_DEFAULTS, WEAVE_COMMENT_NODE_TYPE, WEAVE_COMMENT_STATUS, WEAVE_COMMENT_TOOL_ACTION_NAME, WEAVE_COMMENT_TOOL_DEFAULT_CONFIG, WEAVE_COMMENT_TOOL_STATE, WEAVE_COMMENT_VIEW_ACTION, WEAVE_COPY_PASTE_CONFIG_DEFAULT, WEAVE_COPY_PASTE_NODES_KEY, WEAVE_COPY_PASTE_PASTE_CATCHER_ID, WEAVE_COPY_PASTE_PASTE_MODES, WEAVE_DEFAULT_USER_INFO_FUNCTION, WEAVE_ELLIPSE_NODE_TYPE, WEAVE_FRAME_DEFAULT_BACKGROUND_COLOR, WEAVE_FRAME_NODE_DEFAULT_CONFIG, WEAVE_FRAME_NODE_DEFAULT_PROPS, WEAVE_FRAME_NODE_TYPE, WEAVE_GRID_DEFAULT_COLOR, WEAVE_GRID_DEFAULT_DOT_MAX_DOTS_PER_AXIS, WEAVE_GRID_DEFAULT_MAJOR_DOT_RATIO, WEAVE_GRID_DEFAULT_MAJOR_EVERY, WEAVE_GRID_DEFAULT_MAJOR_LINE_RATIO, WEAVE_GRID_DEFAULT_ORIGIN_COLOR, WEAVE_GRID_DEFAULT_RADIUS, WEAVE_GRID_DEFAULT_SIZE, WEAVE_GRID_DEFAULT_STROKE, WEAVE_GRID_DEFAULT_TYPE, WEAVE_GRID_LAYER_ID, WEAVE_GRID_TYPES, WEAVE_GROUP_NODE_TYPE, WEAVE_IMAGE_CROP_END_TYPE, WEAVE_IMAGE_DEFAULT_CONFIG, WEAVE_IMAGE_NODE_TYPE, WEAVE_LAYER_NODE_TYPE, WEAVE_LINE_NODE_TYPE, WEAVE_NODES_DISTANCE_SNAPPING_PLUGIN_KEY, WEAVE_NODES_EDGE_SNAPPING_PLUGIN_KEY, WEAVE_NODES_SELECTION_DEFAULT_CONFIG, WEAVE_NODES_SELECTION_KEY, WEAVE_NODES_SELECTION_LAYER_ID, WEAVE_RECTANGLE_NODE_TYPE, WEAVE_REGULAR_POLYGON_NODE_TYPE, WEAVE_STAGE_DEFAULT_MODE, WEAVE_STAGE_GRID_PLUGIN_KEY, WEAVE_STAGE_KEYBOARD_MOVE_DEFAULT_CONFIG, WEAVE_STAGE_KEYBOARD_MOVE_KEY, WEAVE_STAGE_MINIMAP_KEY, WEAVE_STAGE_NODE_TYPE, WEAVE_STAGE_PANNING_DEFAULT_CONFIG, WEAVE_STAGE_PANNING_KEY, WEAVE_STAR_NODE_TYPE, WEAVE_STROKE_NODE_DEFAULT_CONFIG, WEAVE_STROKE_NODE_TYPE, WEAVE_TEXT_NODE_TYPE, WEAVE_USERS_POINTERS_CONFIG_DEFAULT_PROPS, WEAVE_USERS_POINTERS_KEY, WEAVE_USERS_SELECTION_KEY, WEAVE_USER_POINTER_KEY, WEAVE_USER_SELECTION_KEY, WEAVE_VIDEO_DEFAULT_CONFIG, WEAVE_VIDEO_NODE_TYPE, Weave, WeaveAction, WeaveAlignNodesToolAction, WeaveArrowNode, WeaveArrowToolAction, WeaveBrushToolAction, WeaveCommentNode, WeaveCommentToolAction, WeaveCommentsRendererPlugin, WeaveConnectedUsersPlugin, WeaveContextMenuPlugin, WeaveCopyPasteNodesPlugin, WeaveEllipseNode, WeaveEllipseToolAction, WeaveEraserToolAction, WeaveExportNodesToolAction, WeaveExportStageToolAction, WeaveFitToScreenToolAction, WeaveFitToSelectionToolAction, WeaveFrameNode, WeaveFrameToolAction, WeaveGroupNode, WeaveImageNode, WeaveImageToolAction, WeaveLayerNode, WeaveLineNode, WeaveMoveToolAction, WeaveNode, WeaveNodesDistanceSnappingPlugin, WeaveNodesEdgeSnappingPlugin, WeaveNodesSelectionPlugin, WeavePenToolAction, WeavePlugin, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveSelectionToolAction, WeaveStageDropAreaPlugin, WeaveStageGridPlugin, WeaveStageKeyboardMovePlugin, WeaveStageMinimapPlugin, WeaveStageNode, WeaveStagePanningPlugin, WeaveStageResizePlugin, WeaveStageZoomPlugin, WeaveStarNode, WeaveStarToolAction, WeaveStore, WeaveStrokeNode, WeaveTextNode, WeaveTextToolAction, WeaveUsersPointersPlugin, WeaveUsersSelectionPlugin, WeaveVideoNode, WeaveVideoToolAction, WeaveZoomInToolAction, WeaveZoomOutToolAction, canComposite, clearContainerTargets, containerOverCursor, containsNodeDeep, getBoundingBox, getExportBoundingBox, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isServer, memoize, mergeExceptArrays, moveNodeToContainer, resetScale, setupCanvasBackend, setupSkiaBackend };
32549
+ export { ALIGN_NODES_ALIGN_TO, ALIGN_NODES_TOOL_ACTION_NAME, ALIGN_NODES_TOOL_STATE, ARROW_TOOL_ACTION_NAME, ARROW_TOOL_STATE, BRUSH_TOOL_ACTION_NAME, BRUSH_TOOL_DEFAULT_CONFIG, BRUSH_TOOL_STATE, COPY_PASTE_NODES_PLUGIN_STATE, ELLIPSE_TOOL_ACTION_NAME, ELLIPSE_TOOL_STATE, ERASER_TOOL_ACTION_NAME, ERASER_TOOL_STATE, FRAME_TOOL_ACTION_NAME, FRAME_TOOL_STATE, GUIDE_DISTANCE_LINE_DEFAULT_CONFIG, GUIDE_ENTER_SNAPPING_TOLERANCE, GUIDE_EXIT_SNAPPING_TOLERANCE, GUIDE_HORIZONTAL_LINE_NAME, GUIDE_LINE_DEFAULT_CONFIG, GUIDE_LINE_DRAG_SNAPPING_THRESHOLD, GUIDE_LINE_NAME, GUIDE_LINE_TRANSFORM_SNAPPING_THRESHOLD, GUIDE_ORIENTATION, GUIDE_VERTICAL_LINE_NAME, IMAGE_TOOL_ACTION_NAME, IMAGE_TOOL_STATE, MOVE_TOOL_ACTION_NAME, MOVE_TOOL_STATE, NODE_SNAP, NODE_SNAP_HORIZONTAL, NODE_SNAP_VERTICAL, PEN_TOOL_ACTION_NAME, PEN_TOOL_STATE, RECTANGLE_TOOL_ACTION_NAME, RECTANGLE_TOOL_STATE, REGULAR_POLYGON_TOOL_ACTION_NAME, REGULAR_POLYGON_TOOL_STATE, SELECTION_TOOL_ACTION_NAME, SELECTION_TOOL_STATE, STAGE_MINIMAP_DEFAULT_CONFIG, STAR_TOOL_ACTION_NAME, STAR_TOOL_STATE, TEXT_LAYOUT, TEXT_TOOL_ACTION_NAME, TEXT_TOOL_STATE, VIDEO_TOOL_ACTION_NAME, VIDEO_TOOL_STATE, WEAVE_ARROW_NODE_TYPE, WEAVE_COMMENTS_RENDERER_KEY, WEAVE_COMMENTS_TOOL_LAYER_ID, WEAVE_COMMENT_CREATE_ACTION, WEAVE_COMMENT_NODE_ACTION, WEAVE_COMMENT_NODE_DEFAULTS, WEAVE_COMMENT_NODE_TYPE, WEAVE_COMMENT_STATUS, WEAVE_COMMENT_TOOL_ACTION_NAME, WEAVE_COMMENT_TOOL_DEFAULT_CONFIG, WEAVE_COMMENT_TOOL_STATE, WEAVE_COMMENT_VIEW_ACTION, WEAVE_COPY_PASTE_CONFIG_DEFAULT, WEAVE_COPY_PASTE_NODES_KEY, WEAVE_COPY_PASTE_PASTE_CATCHER_ID, WEAVE_COPY_PASTE_PASTE_MODES, WEAVE_DEFAULT_USER_INFO_FUNCTION, WEAVE_ELLIPSE_NODE_TYPE, WEAVE_FRAME_DEFAULT_BACKGROUND_COLOR, WEAVE_FRAME_NODE_DEFAULT_CONFIG, WEAVE_FRAME_NODE_DEFAULT_PROPS, WEAVE_FRAME_NODE_TYPE, WEAVE_GRID_DEFAULT_COLOR, WEAVE_GRID_DEFAULT_DOT_MAX_DOTS_PER_AXIS, WEAVE_GRID_DEFAULT_MAJOR_DOT_RATIO, WEAVE_GRID_DEFAULT_MAJOR_EVERY, WEAVE_GRID_DEFAULT_MAJOR_LINE_RATIO, WEAVE_GRID_DEFAULT_ORIGIN_COLOR, WEAVE_GRID_DEFAULT_RADIUS, WEAVE_GRID_DEFAULT_SIZE, WEAVE_GRID_DEFAULT_STROKE, WEAVE_GRID_DEFAULT_TYPE, WEAVE_GRID_LAYER_ID, WEAVE_GRID_TYPES, WEAVE_GROUP_NODE_TYPE, WEAVE_IMAGE_CROP_END_TYPE, WEAVE_IMAGE_DEFAULT_CONFIG, WEAVE_IMAGE_NODE_TYPE, WEAVE_LAYER_NODE_TYPE, WEAVE_LINE_NODE_TYPE, WEAVE_NODES_DISTANCE_SNAPPING_PLUGIN_KEY, WEAVE_NODES_EDGE_SNAPPING_PLUGIN_KEY, WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_DEFAULT_CONFIG, WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY, WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_LAYER_ID, WEAVE_NODES_SELECTION_DEFAULT_CONFIG, WEAVE_NODES_SELECTION_KEY, WEAVE_NODES_SELECTION_LAYER_ID, WEAVE_RECTANGLE_NODE_TYPE, WEAVE_REGULAR_POLYGON_NODE_TYPE, WEAVE_STAGE_DEFAULT_MODE, WEAVE_STAGE_GRID_PLUGIN_KEY, WEAVE_STAGE_KEYBOARD_MOVE_DEFAULT_CONFIG, WEAVE_STAGE_KEYBOARD_MOVE_KEY, WEAVE_STAGE_MINIMAP_KEY, WEAVE_STAGE_NODE_TYPE, WEAVE_STAGE_PANNING_DEFAULT_CONFIG, WEAVE_STAGE_PANNING_KEY, WEAVE_STAR_NODE_TYPE, WEAVE_STROKE_NODE_DEFAULT_CONFIG, WEAVE_STROKE_NODE_TYPE, WEAVE_TEXT_NODE_TYPE, WEAVE_USERS_POINTERS_CONFIG_DEFAULT_PROPS, WEAVE_USERS_POINTERS_KEY, WEAVE_USERS_SELECTION_KEY, WEAVE_USER_POINTER_KEY, WEAVE_USER_SELECTION_KEY, WEAVE_VIDEO_DEFAULT_CONFIG, WEAVE_VIDEO_NODE_TYPE, Weave, WeaveAction, WeaveAlignNodesToolAction, WeaveArrowNode, WeaveArrowToolAction, WeaveBrushToolAction, WeaveCommentNode, WeaveCommentToolAction, WeaveCommentsRendererPlugin, WeaveConnectedUsersPlugin, WeaveContextMenuPlugin, WeaveCopyPasteNodesPlugin, WeaveEllipseNode, WeaveEllipseToolAction, WeaveEraserToolAction, WeaveExportNodesToolAction, WeaveExportStageToolAction, WeaveFitToScreenToolAction, WeaveFitToSelectionToolAction, WeaveFrameNode, WeaveFrameToolAction, WeaveGroupNode, WeaveImageNode, WeaveImageToolAction, WeaveLayerNode, WeaveLineNode, WeaveMoveToolAction, WeaveNode, WeaveNodesDistanceSnappingPlugin, WeaveNodesEdgeSnappingPlugin, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeavePenToolAction, WeavePlugin, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveSelectionToolAction, WeaveStageDropAreaPlugin, WeaveStageGridPlugin, WeaveStageKeyboardMovePlugin, WeaveStageMinimapPlugin, WeaveStageNode, WeaveStagePanningPlugin, WeaveStageResizePlugin, WeaveStageZoomPlugin, WeaveStarNode, WeaveStarToolAction, WeaveStore, WeaveStrokeNode, WeaveTextNode, WeaveTextToolAction, WeaveUsersPointersPlugin, WeaveUsersSelectionPlugin, WeaveVideoNode, WeaveVideoToolAction, WeaveZoomInToolAction, WeaveZoomOutToolAction, canComposite, clearContainerTargets, containerOverCursor, containsNodeDeep, getBoundingBox, getExportBoundingBox, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isServer, memoize, mergeExceptArrays, moveNodeToContainer, resetScale, setupCanvasBackend, setupSkiaBackend };
32331
32550
  //# sourceMappingURL=sdk.node.js.map