@inditextech/weave-sdk 5.0.0-SNAPSHOT.397.1 → 5.0.0-SNAPSHOT.409.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.js CHANGED
@@ -3501,13 +3501,34 @@ function getBoundingBox(nodes, config) {
3501
3501
  height: maxY - minY
3502
3502
  };
3503
3503
  }
3504
+ /**
3505
+ * Builds an array of Weave node IDs from `groupId` up to the root,
3506
+ * including only nodes that have a `nodeType` attribute (actual Weave nodes,
3507
+ * not Konva stage/layer). Used as the multi-stop set for `getInstanceRecursive`
3508
+ * and group-context ancestor checks.
3509
+ */
3510
+ function buildAncestorGroupIds(groupId, stage) {
3511
+ const ids = [];
3512
+ let cur = stage.findOne(`#${groupId}`) ?? null;
3513
+ while (cur) {
3514
+ const id = cur.getAttrs().id;
3515
+ if (id && cur.getAttrs().nodeType) ids.push(id);
3516
+ cur = cur.getParent();
3517
+ }
3518
+ return ids;
3519
+ }
3504
3520
  function getTargetedNode(instance) {
3505
3521
  const stage = instance.getStage();
3506
3522
  let selectedGroup = void 0;
3507
3523
  const mousePos = stage.getPointerPosition();
3508
3524
  if (mousePos) {
3509
3525
  const inter = stage.getIntersection(mousePos);
3510
- if (inter) selectedGroup = instance.getInstanceRecursive(inter);
3526
+ if (inter) {
3527
+ const selectionPlugin = instance.getPlugin("nodesSelection");
3528
+ const activeGroupContext = selectionPlugin?.getActiveGroupContext() ?? void 0;
3529
+ const stopIds = activeGroupContext ? buildAncestorGroupIds(activeGroupContext, stage) : void 0;
3530
+ selectedGroup = instance.getInstanceRecursive(inter, [], stopIds);
3531
+ }
3511
3532
  }
3512
3533
  return selectedGroup;
3513
3534
  }
@@ -3648,7 +3669,7 @@ function getVisibleNodes({ instance, skipNodes, referenceLayer }) {
3648
3669
  nodes.forEach((node) => {
3649
3670
  const actualNodeParent = instance.getNodeContainer(node);
3650
3671
  if (actualNodeParent?.getAttrs().id !== referenceLayer?.getAttrs().id) return;
3651
- if (node.getParent()?.getAttrs().nodeType === "group") return;
3672
+ if (node.getParent()?.getAttrs().nodeType === "group" && node.getParent()?.getAttrs().id !== referenceLayer?.getAttrs().id) return;
3652
3673
  if (skipNodes.includes(node.getParent()?.getAttrs().nodeId)) return;
3653
3674
  if (skipNodes.includes(node.getAttrs().id ?? "")) return;
3654
3675
  if (node.getAttrs().nodeType === "connector") return;
@@ -4826,6 +4847,7 @@ function handleClickOrTap(ctx, e) {
4826
4847
  let areNodesSelected = false;
4827
4848
  let nodeTargeted = selectedGroup && !(selectedGroup.getAttrs().active ?? false) ? selectedGroup : e.target;
4828
4849
  if (e.target === weave.getStage()) {
4850
+ if (ctx.getActiveGroupContext() !== null) ctx.exitGroupContext();
4829
4851
  ctx.getGesture().resetDoubleTap();
4830
4852
  ctx.getNodesSelectionFeedbackPlugin()?.cleanupSelectedHalos();
4831
4853
  return;
@@ -4835,6 +4857,18 @@ function handleClickOrTap(ctx, e) {
4835
4857
  ctx.getGesture().resetDoubleTap();
4836
4858
  return;
4837
4859
  }
4860
+ const activeGroupContext = ctx.getActiveGroupContext();
4861
+ if (activeGroupContext !== null) {
4862
+ const isInsideActiveGroup = isNodeInsideGroup(nodeTargeted, activeGroupContext, stage);
4863
+ if (isInsideActiveGroup) {
4864
+ const parentId = nodeTargeted.getParent()?.getAttrs().id ?? "";
4865
+ if (parentId !== activeGroupContext) ctx.enterGroupContext(parentId);
4866
+ }
4867
+ if (!isInsideActiveGroup) {
4868
+ ctx.exitGroupContext();
4869
+ nodeTargeted = weave.getInstanceRecursive(nodeTargeted);
4870
+ }
4871
+ }
4838
4872
  const metaPressed = e.evt.shiftKey || e.evt.ctrlKey || e.evt.metaKey;
4839
4873
  const nodeSelectedIndex = tr.nodes().findIndex((node) => {
4840
4874
  return node.getAttrs().id === nodeTargeted.getAttrs().id;
@@ -4858,6 +4892,13 @@ function handleClickOrTap(ctx, e) {
4858
4892
  if (realNode) nodeTargeted = realNode;
4859
4893
  }
4860
4894
  if (typeof nodeTargeted.getAttrs().isContainerPrincipal !== "undefined" && !nodeTargeted.getAttrs().isContainerPrincipal) return;
4895
+ let cur = nodeTargeted;
4896
+ let p = cur.getParent();
4897
+ while (p?.getAttrs().nodeType === "group" && activeGroupContext !== p.getAttrs().id && !isAncestorOfActiveGroup(p, activeGroupContext, stage)) {
4898
+ cur = p;
4899
+ p = cur.getParent();
4900
+ }
4901
+ nodeTargeted = cur;
4861
4902
  if (ctx.getGesture().isDoubleTap && !metaPressed) {
4862
4903
  ctx.getGesture().resetDoubleTap();
4863
4904
  nodeTargeted.dblClick();
@@ -4889,6 +4930,40 @@ function handleClickOrTap(ctx, e) {
4889
4930
  }
4890
4931
  ctx.triggerSelectedNodesEvent();
4891
4932
  }
4933
+ /**
4934
+ * Returns true if `node` is anywhere within the group hierarchy rooted at
4935
+ * `groupId`: either a descendant of the active group itself, or a descendant
4936
+ * of any ancestor group in the path from `groupId` to the root.
4937
+ * Used to decide whether a click should keep the current group context active.
4938
+ */
4939
+ function isNodeInsideGroup(node, groupId, stage) {
4940
+ const groupNode = stage.findOne(`#${groupId}`);
4941
+ if (!groupNode) return false;
4942
+ const containerIds = new Set(buildAncestorGroupIds(groupId, stage));
4943
+ let current = node;
4944
+ while (current) {
4945
+ if (containerIds.has(current.getAttrs().id ?? "")) return true;
4946
+ current = current.getParent();
4947
+ }
4948
+ return false;
4949
+ }
4950
+ /**
4951
+ * Returns true if `node` is a (strict) ancestor of the active group — i.e.
4952
+ * it appears in the parent chain above `activeGroupId`, not at the group
4953
+ * itself and not below it.
4954
+ */
4955
+ function isAncestorOfActiveGroup(node, activeGroupId, stage) {
4956
+ if (!node || !activeGroupId) return false;
4957
+ const nodeId = node.getAttrs().id ?? "";
4958
+ const activeGroupNode = stage.findOne(`#${activeGroupId}`);
4959
+ if (!activeGroupNode) return false;
4960
+ let cur = activeGroupNode.getParent();
4961
+ while (cur) {
4962
+ if ((cur.getAttrs().id ?? "") === nodeId) return true;
4963
+ cur = cur.getParent();
4964
+ }
4965
+ return false;
4966
+ }
4892
4967
 
4893
4968
  //#endregion
4894
4969
  //#region src/plugins/nodes-selection/events/keyboard.ts
@@ -4902,6 +4977,13 @@ function registerKeyboardHandlers(ctx) {
4902
4977
  const signal = ctx.getWeaveInstance().getEventsController().signal;
4903
4978
  stage.container().addEventListener("keydown", (e) => {
4904
4979
  if (e.code === "Space") ctx.setSpaceKeyPressed(true);
4980
+ if (e.code === "Escape") {
4981
+ if (ctx.getActiveGroupContext() !== null) {
4982
+ ctx.exitGroupContext();
4983
+ e.stopPropagation();
4984
+ return;
4985
+ }
4986
+ }
4905
4987
  if (e.code === "Backspace" || e.code === "Delete") {
4906
4988
  Promise.resolve().then(() => {
4907
4989
  ctx.removeSelectedNodes();
@@ -4965,6 +5047,8 @@ function handlePointerDown(ctx, e) {
4965
5047
  const nodesSelected = tr.nodes();
4966
5048
  for (const node of nodesSelected) node.fire("onSelectionCleared", { bubbles: true });
4967
5049
  }
5050
+ const activeGroupContext = ctx.getActiveGroupContext();
5051
+ if (activeGroupContext !== null) ctx.exitGroupContext();
4968
5052
  ctx.selectNone();
4969
5053
  ctx.triggerSelectedNodesEvent();
4970
5054
  ctx.getWeaveInstance().emitEvent("onSelectionState", true);
@@ -5112,6 +5196,8 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
5112
5196
  gesture = new GestureDetector();
5113
5197
  _handledClickOrTap = false;
5114
5198
  dragSelectedNodes = [];
5199
+ _activeGroupContext = null;
5200
+ onRender = void 0;
5115
5201
  constructor(params) {
5116
5202
  super();
5117
5203
  this.config = mergeExceptArrays(WEAVE_NODES_SELECTION_DEFAULT_CONFIG, params?.config ?? {});
@@ -5136,6 +5222,8 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
5136
5222
  this.enabled = false;
5137
5223
  this.pointers = {};
5138
5224
  this.dragSelectedNodes = [];
5225
+ this._handledClickOrTap = false;
5226
+ this._activeGroupContext = null;
5139
5227
  }
5140
5228
  getName() {
5141
5229
  return WEAVE_NODES_SELECTION_KEY;
@@ -5257,6 +5345,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
5257
5345
  this.active = true;
5258
5346
  });
5259
5347
  this.instance.addEventListener("onNodeRemoved", (node) => {
5348
+ if (this._activeGroupContext === node.id) this.exitGroupContext();
5260
5349
  const selectedNodes = this.getSelectedNodes();
5261
5350
  const newSelectedNodes = selectedNodes.filter((actNode) => actNode.getAttrs().id !== node.id);
5262
5351
  this.setSelectedNodes(newSelectedNodes);
@@ -5265,6 +5354,31 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
5265
5354
  stage.container().style.cursor = "default";
5266
5355
  });
5267
5356
  }
5357
+ getActiveGroupContext() {
5358
+ return this._activeGroupContext;
5359
+ }
5360
+ enterGroupContext(groupId) {
5361
+ const stage = this.instance.getStage();
5362
+ const groupNode = stage.findOne(`#${groupId}`);
5363
+ if (!groupNode) return;
5364
+ this._activeGroupContext = groupId;
5365
+ groupNode.getChildren().forEach((child) => {
5366
+ child.setAttr("draggable", true);
5367
+ });
5368
+ this.selectNone();
5369
+ this.instance.emitEvent("onGroupContextChange", groupId);
5370
+ }
5371
+ exitGroupContext() {
5372
+ if (this._activeGroupContext === null) return;
5373
+ const stage = this.instance.getStage();
5374
+ const groupNode = stage.findOne(`#${this._activeGroupContext}`);
5375
+ if (groupNode) groupNode.getChildren().forEach((child) => {
5376
+ child.setAttr("draggable", false);
5377
+ });
5378
+ this._activeGroupContext = null;
5379
+ this.selectNone();
5380
+ this.instance.emitEvent("onGroupContextChange", null);
5381
+ }
5268
5382
  getLayer() {
5269
5383
  const stage = this.instance.getStage();
5270
5384
  return stage.findOne(`#${this.getLayerName()}`);
@@ -6215,10 +6329,27 @@ var WeaveNode = class {
6215
6329
  this.hideHoverState();
6216
6330
  return;
6217
6331
  }
6332
+ if (this.isHoverSuppressedByGroupContext(node, selectionPlugin)) {
6333
+ this.hideHoverState();
6334
+ return;
6335
+ }
6218
6336
  if (node?.canBeHovered?.()) selectionPlugin.getHoverTransformer().nodes([node]);
6219
6337
  else selectionPlugin.getHoverTransformer().nodes([]);
6220
6338
  selectionPlugin.getHoverTransformer().moveToTop();
6221
6339
  }
6340
+ isHoverSuppressedByGroupContext(node, selectionPlugin) {
6341
+ const activeGroupId = selectionPlugin.getActiveGroupContext();
6342
+ if (activeGroupId === null) return false;
6343
+ const activeGroupNode = this.instance.getStage().findOne(`#${activeGroupId}`);
6344
+ if (!activeGroupNode) return false;
6345
+ const hoveredId = node.getAttrs().id ?? "";
6346
+ let current = activeGroupNode;
6347
+ while (current) {
6348
+ if ((current.getAttrs().id ?? "") === hoveredId) return true;
6349
+ current = current.getParent();
6350
+ }
6351
+ return false;
6352
+ }
6222
6353
  hideHoverState() {
6223
6354
  const selectionPlugin = this.getSelectionPlugin();
6224
6355
  if (!selectionPlugin) return;
@@ -6476,7 +6607,8 @@ var WeaveNode = class {
6476
6607
  }
6477
6608
  this.instance.emitEvent("onDrag", null);
6478
6609
  const realNodeTarget = this.getRealSelectedNode(nodeTarget);
6479
- if (this.isSelecting() && this.getSelectionPlugin()?.getSelectedNodes().length === 1 && (realNodeTarget.getAttrs().lockToContainer === void 0 || !realNodeTarget.getAttrs().lockToContainer)) this.instance.stateTransactional(() => {
6610
+ const isInGroupContext = (this.getSelectionPlugin()?.getActiveGroupContext() ?? null) !== null;
6611
+ if (!isInGroupContext && this.isSelecting() && this.getSelectionPlugin()?.getSelectedNodes().length === 1 && (realNodeTarget.getAttrs().lockToContainer === void 0 || !realNodeTarget.getAttrs().lockToContainer)) this.instance.stateTransactional(() => {
6480
6612
  clearContainerTargets(this.instance);
6481
6613
  const layerToMove = containerOverCursor(this.instance, [realNodeTarget]);
6482
6614
  let containerToMove = this.instance.getMainLayer();
@@ -6564,7 +6696,19 @@ var WeaveNode = class {
6564
6696
  const user = this.instance.getStore().getUser();
6565
6697
  const activeAction = this.instance.getActiveAction();
6566
6698
  const isNodeSelectionEnabled = this.getSelectionPlugin()?.isEnabled();
6567
- const realNode = this.instance.getInstanceRecursive(node);
6699
+ const activeGroupCtx = this.getSelectionPlugin()?.getActiveGroupContext() ?? void 0;
6700
+ let realNode;
6701
+ if (activeGroupCtx) {
6702
+ const stage$1 = this.instance.getStage();
6703
+ const stopIds = [];
6704
+ let cur = stage$1.findOne(`#${activeGroupCtx}`) ?? null;
6705
+ while (cur) {
6706
+ const id = cur.getAttrs().id;
6707
+ if (id) stopIds.push(id);
6708
+ cur = cur.getParent();
6709
+ }
6710
+ realNode = this.instance.getInstanceRecursive(node, [], stopIds);
6711
+ } else realNode = this.instance.getInstanceRecursive(node);
6568
6712
  const canBeTargeted = realNode.getAttrs().canBeTargeted !== false;
6569
6713
  const isLocked = realNode.getAttrs().locked ?? false;
6570
6714
  const isMutexLocked = realNode.getAttrs().mutexLocked && realNode.getAttrs().mutexUserId !== user.id;
@@ -9518,7 +9662,7 @@ var WeaveRegisterManager = class {
9518
9662
 
9519
9663
  //#endregion
9520
9664
  //#region package.json
9521
- var version = "5.0.0-SNAPSHOT.397.1";
9665
+ var version = "5.0.0-SNAPSHOT.409.1";
9522
9666
 
9523
9667
  //#endregion
9524
9668
  //#region src/managers/setup.ts
@@ -9612,13 +9756,18 @@ var WeaveStageManager = class {
9612
9756
  const stage = this.getStage();
9613
9757
  return stage.findOne(`#${WEAVE_UTILITY_LAYER_ID}`);
9614
9758
  }
9615
- getInstanceRecursive(instance, filterInstanceType = []) {
9759
+ getInstanceRecursive(instance, filterInstanceType = [], stopAtGroupId) {
9616
9760
  const attributes = instance.getAttrs();
9761
+ if (stopAtGroupId) {
9762
+ const parentId = instance.getParent()?.getAttrs().id ?? "";
9763
+ const matches = Array.isArray(stopAtGroupId) ? stopAtGroupId.includes(parentId) : parentId === stopAtGroupId;
9764
+ if (matches) return instance;
9765
+ }
9617
9766
  if (instance.getParent() && instance.getParent()?.getAttrs().nodeType && ![
9618
9767
  "stage",
9619
9768
  "layer",
9620
9769
  ...filterInstanceType
9621
- ].includes(instance.getParent()?.getAttrs().nodeType)) return this.getInstanceRecursive(instance.getParent());
9770
+ ].includes(instance.getParent()?.getAttrs().nodeType)) return this.getInstanceRecursive(instance.getParent(), filterInstanceType, stopAtGroupId);
9622
9771
  if (attributes.id === "mainLayer") return this.instance.getMainLayer();
9623
9772
  if (attributes.id === "stage") return this.instance.getMainLayer();
9624
9773
  return instance;
@@ -10828,6 +10977,12 @@ var Weave = class {
10828
10977
  this.stageManager.initStage();
10829
10978
  this.status = WEAVE_INSTANCE_STATUS.CONNECTING_TO_ROOM;
10830
10979
  this.emitEvent("onInstanceStatus", this.status);
10980
+ this.emitEvent("onUndoManagerStatusChange", {
10981
+ canUndo: false,
10982
+ canRedo: false,
10983
+ redoStackLength: 0,
10984
+ undoStackLength: 0
10985
+ });
10831
10986
  this.addEventListener("onStoreConnectionStatusChange", this.handleStoreConnectionStatusChange.bind(this));
10832
10987
  }
10833
10988
  async destroy() {
@@ -10957,8 +11112,8 @@ var Weave = class {
10957
11112
  getStageConfiguration() {
10958
11113
  return this.stageManager.getConfiguration();
10959
11114
  }
10960
- getInstanceRecursive(instance, filterInstanceType = []) {
10961
- return this.stageManager.getInstanceRecursive(instance, filterInstanceType);
11115
+ getInstanceRecursive(instance, filterInstanceType = [], stopAtGroupId) {
11116
+ return this.stageManager.getInstanceRecursive(instance, filterInstanceType, stopAtGroupId);
10962
11117
  }
10963
11118
  getContainerNodes() {
10964
11119
  return this.stageManager.getContainerNodes();
@@ -11926,6 +12081,25 @@ var WeaveGroupNode = class extends WeaveNode {
11926
12081
  y: 1
11927
12082
  });
11928
12083
  });
12084
+ group.dblClick = () => {
12085
+ const selectionPlugin = this.instance.getPlugin("nodesSelection");
12086
+ if (!selectionPlugin) return;
12087
+ const groupId = group.getAttrs().id ?? "";
12088
+ selectionPlugin.enterGroupContext(groupId);
12089
+ const stage = this.instance.getStage();
12090
+ const mousePos = stage.getPointerPosition();
12091
+ if (!mousePos) return;
12092
+ const selectionLayer = stage.findOne("#" + selectionPlugin.getLayerName());
12093
+ selectionLayer?.listening(false);
12094
+ const intersected = stage.getIntersection(mousePos);
12095
+ selectionLayer?.listening(true);
12096
+ if (!intersected) return;
12097
+ const directChild = this.instance.getInstanceRecursive(intersected, [], groupId);
12098
+ if (directChild.getParent()?.getAttrs().id === groupId) {
12099
+ selectionPlugin.setSelectedNodes([directChild]);
12100
+ selectionPlugin.triggerSelectedNodesEvent();
12101
+ }
12102
+ };
11929
12103
  return group;
11930
12104
  }
11931
12105
  onUpdate(nodeInstance, nextProps) {
@@ -12130,6 +12304,7 @@ var WeaveShapeLabelEditor = class {
12130
12304
  this.instance.releaseMutexLock();
12131
12305
  this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
12132
12306
  this.editing = false;
12307
+ const editedGroupId = this.editingGroup?.id() ?? null;
12133
12308
  if (this.editingGroup) {
12134
12309
  const liveGroup = this.instance.getStage().findOne(`#${this.editingGroup.id()}`);
12135
12310
  const labelNode = liveGroup?.findOne(`#${labelId(this.editingGroup.id())}`);
@@ -12145,7 +12320,13 @@ var WeaveShapeLabelEditor = class {
12145
12320
  this.editingTextBounds = null;
12146
12321
  this.instance.getStage().off(".weaveLabelEdit");
12147
12322
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
12148
- if (selectionPlugin) this.instance.enablePlugin("nodesSelection");
12323
+ if (selectionPlugin) {
12324
+ this.instance.enablePlugin("nodesSelection");
12325
+ if (editedGroupId) requestAnimationFrame(() => {
12326
+ const liveGroup = this.instance.getStage().findOne(`#${editedGroupId}`);
12327
+ if (liveGroup) selectionPlugin.setSelectedNodes([liveGroup]);
12328
+ });
12329
+ }
12149
12330
  }
12150
12331
  updateTextAreaPosition(group, textBounds) {
12151
12332
  if (!this.editing || !this.textArea) return;
@@ -32190,19 +32371,40 @@ var WeaveNodesSnappingGuides = class {
32190
32371
  const stage = this.instance.getStage();
32191
32372
  const scaleX = stage.scaleX();
32192
32373
  const scaleY = stage.scaleY();
32193
- let finalContainer = container;
32194
- if (container !== stage) finalContainer = container.getParent();
32195
- const pos = finalContainer.position();
32196
- const rect = finalContainer.getClientRect({ relativeTo: stage });
32197
- const x = finalContainer === stage ? -pos.x / scaleX : rect.x;
32198
- const y = finalContainer === stage ? -pos.y / scaleX : rect.y;
32199
- const width = finalContainer === stage ? stage.width() / scaleX : rect.width;
32200
- const height = finalContainer === stage ? stage.height() / scaleY : rect.height;
32374
+ const mainLayer = this.instance.getMainLayer();
32375
+ if (container === stage || container === mainLayer) {
32376
+ const pos$1 = stage.position();
32377
+ return {
32378
+ x: -pos$1.x / scaleX,
32379
+ y: -pos$1.y / scaleY,
32380
+ width: stage.width() / scaleX,
32381
+ height: stage.height() / scaleY
32382
+ };
32383
+ }
32384
+ let frameNode = null;
32385
+ let cur = container;
32386
+ while (cur && cur !== mainLayer && cur !== stage) {
32387
+ if (cur.getAttrs().nodeType === "frame") {
32388
+ frameNode = cur;
32389
+ break;
32390
+ }
32391
+ cur = cur.getParent();
32392
+ }
32393
+ if (frameNode) {
32394
+ const rect = frameNode.getClientRect({ relativeTo: stage });
32395
+ return {
32396
+ x: rect.x,
32397
+ y: rect.y,
32398
+ width: rect.width,
32399
+ height: rect.height
32400
+ };
32401
+ }
32402
+ const pos = stage.position();
32201
32403
  return {
32202
- x,
32203
- y,
32204
- width,
32205
- height
32404
+ x: -pos.x / scaleX,
32405
+ y: -pos.y / scaleY,
32406
+ width: stage.width() / scaleX,
32407
+ height: stage.height() / scaleY
32206
32408
  };
32207
32409
  }
32208
32410
  renderSnapGuides(container, snap) {
@@ -32214,8 +32416,11 @@ var WeaveNodesSnappingGuides = class {
32214
32416
  if (snap.containerId !== "mainLayer") {
32215
32417
  const containerNode = stage.findOne(`#${snap.containerId}`);
32216
32418
  if (containerNode) {
32217
- const containerPos = containerNode.getClientRect({ relativeTo: stage });
32218
- value = containerPos.x + snap.guide;
32419
+ const canvasPt = containerNode.getAbsoluteTransform().point({
32420
+ x: snap.guide,
32421
+ y: 0
32422
+ });
32423
+ value = stage.getAbsoluteTransform().copy().invert().point(canvasPt).x;
32219
32424
  }
32220
32425
  }
32221
32426
  this.layer.add(new Konva.Line({
@@ -32238,8 +32443,11 @@ var WeaveNodesSnappingGuides = class {
32238
32443
  if (snap.containerId !== "mainLayer") {
32239
32444
  const containerNode = stage.findOne(`#${snap.containerId}`);
32240
32445
  if (containerNode) {
32241
- const containerPos = containerNode.getClientRect({ relativeTo: stage });
32242
- value = containerPos.y + snap.guide;
32446
+ const canvasPt = containerNode.getAbsoluteTransform().point({
32447
+ x: 0,
32448
+ y: snap.guide
32449
+ });
32450
+ value = stage.getAbsoluteTransform().copy().invert().point(canvasPt).y;
32243
32451
  }
32244
32452
  }
32245
32453
  this.layer.add(new Konva.Line({
@@ -32705,6 +32913,10 @@ var WeaveNodesSnappingPlugin = class extends WeavePlugin {
32705
32913
  this.relativeToId = containerNode.id();
32706
32914
  }
32707
32915
  }
32916
+ if (container !== this.instance.getMainLayer() && !container.getAttrs().nodeId && container.getAttrs().nodeType === "group") {
32917
+ this.relativeTo = container;
32918
+ this.relativeToId = container.id();
32919
+ }
32708
32920
  if (!this.relativeTo) return;
32709
32921
  this.visibleNodes = getVisibleNodes({
32710
32922
  instance: this.instance,
@@ -32735,8 +32947,8 @@ var WeaveNodesSnappingPlugin = class extends WeavePlugin {
32735
32947
  y: -1 * (relativeTo.getAttrs().containerCompensationY ?? 0)
32736
32948
  };
32737
32949
  const diff = {
32738
- x: Math.abs(nodeBox.x - node.x()),
32739
- y: Math.abs(nodeBox.y - node.y())
32950
+ x: node.x() - nodeBox.x,
32951
+ y: node.y() - nodeBox.y
32740
32952
  };
32741
32953
  this.selectionOffsets.push({
32742
32954
  x: nodeBox.x - nodesBox.x + diff.x + containerCompensation.x,
@@ -32930,4 +33142,4 @@ function getJSONFromYjsBinary(actualState) {
32930
33142
  }
32931
33143
 
32932
33144
  //#endregion
32933
- export { ALIGN_NODES_ALIGN_TO, ALIGN_NODES_TOOL_ACTION_NAME, ALIGN_NODES_TOOL_STATE, BRUSH_TOOL_ACTION_NAME, BRUSH_TOOL_DEFAULT_CONFIG, BRUSH_TOOL_STATE, CONNECTOR_TOOL_ACTION_NAME, CONNECTOR_TOOL_DEFAULT_CONFIG, CONNECTOR_TOOL_STATE, COPY_PASTE_NODES_PLUGIN_STATE, DEFAULT_GUIDE_TOOL_ACTION_CONFIG, DEFAULT_SNAPPING_MANAGER_CONFIG, ELLIPSE_TOOL_ACTION_NAME, ELLIPSE_TOOL_STATE, ERASER_TOOL_ACTION_NAME, ERASER_TOOL_STATE, FRAME_TOOL_ACTION_NAME, FRAME_TOOL_STATE, GUIDE_DISTANCE_NAME, GUIDE_DISTANCE_ORIGIN, GUIDE_KIND, GUIDE_NAME, GUIDE_ORIENTATION, GUIDE_STATE, GUIDE_TOOL_ACTION_NAME, GUIDE_TOOL_STATE, LINE_TOOL_ACTION_NAME, LINE_TOOL_DEFAULT_CONFIG, LINE_TOOL_STATE, MEASURE_TOOL_ACTION_NAME, MEASURE_TOOL_STATE, MOVE_ORIENTATION, MOVE_TOOL_ACTION_NAME, MOVE_TOOL_STATE, PEN_TOOL_ACTION_NAME, PEN_TOOL_STATE, POLYGON_TOOL_ACTION_NAME, POLYGON_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_ARROW_TOOL_ACTION_NAME, WEAVE_ARROW_TOOL_STATE, 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_CONNECTOR_NODE_ANCHOR_ORIGIN, WEAVE_CONNECTOR_NODE_DECORATOR_TYPE, WEAVE_CONNECTOR_NODE_DEFAULT_CONFIG, WEAVE_CONNECTOR_NODE_LINE_ORIGIN, WEAVE_CONNECTOR_NODE_LINE_TYPE, WEAVE_CONNECTOR_NODE_TYPE, 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_CONFIG, WEAVE_GRID_DOT_TYPES, WEAVE_GRID_LAYER_ID, WEAVE_GRID_TYPES, WEAVE_GROUP_NODE_TYPE, WEAVE_IMAGES_TOOL_ACTION_NAME, WEAVE_IMAGES_TOOL_DEFAULT_CONFIG, WEAVE_IMAGES_TOOL_STATE, WEAVE_IMAGES_TOOL_UPLOAD_TYPE, WEAVE_IMAGE_CROP_ANCHOR_POSITION, WEAVE_IMAGE_CROP_END_TYPE, WEAVE_IMAGE_DEFAULT_CONFIG, WEAVE_IMAGE_NODE_TYPE, WEAVE_IMAGE_TOOL_ACTION_NAME, WEAVE_IMAGE_TOOL_CONFIG_DEFAULT, WEAVE_IMAGE_TOOL_STATE, WEAVE_IMAGE_TOOL_UPLOAD_TYPE, WEAVE_LAYER_NODE_TYPE, WEAVE_LINE_NODE_DEFAULT_CONFIG, WEAVE_LINE_NODE_TYPE, WEAVE_MEASURE_NODE_DEFAULT_CONFIG, WEAVE_MEASURE_NODE_TYPE, WEAVE_MEASURE_TOOL_DEFAULT_CONFIG, 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_NODES_SNAPPING_PLUGIN_KEY, WEAVE_POLYGON_NODE_TYPE, WEAVE_POLYGON_PRESETS, WEAVE_RECTANGLE_NODE_TYPE, WEAVE_REGULAR_POLYGON_NODE_TYPE, WEAVE_SHAPE_LABEL_DEFAULTS, WEAVE_STAGE_DEFAULT_MODE, WEAVE_STAGE_DROP_AREA_KEY, WEAVE_STAGE_GRID_PLUGIN_KEY, WEAVE_STAGE_IMAGE_CROPPING_MODE, WEAVE_STAGE_KEYBOARD_MOVE_DEFAULT_CONFIG, WEAVE_STAGE_KEYBOARD_MOVE_KEY, WEAVE_STAGE_KEYBOARD_MOVE_ORIENTATION, WEAVE_STAGE_MINIMAP_KEY, WEAVE_STAGE_NODE_TYPE, WEAVE_STAGE_PANNING_DEFAULT_CONFIG, WEAVE_STAGE_PANNING_KEY, WEAVE_STAGE_PANNING_THROTTLE_MS, WEAVE_STAGE_SHAPE_LABEL_EDITION_MODE, WEAVE_STAGE_TEXT_EDITION_MODE, WEAVE_STAGE_ZOOM_DEFAULT_CONFIG, WEAVE_STAGE_ZOOM_KEY, WEAVE_STAGE_ZOOM_TYPE, WEAVE_STAR_NODE_TYPE, WEAVE_STROKE_NODE_DEFAULT_CONFIG, WEAVE_STROKE_NODE_TYPE, WEAVE_STROKE_SINGLE_NODE_DEFAULT_CONFIG, WEAVE_STROKE_SINGLE_NODE_TIP_SIDE, WEAVE_STROKE_SINGLE_NODE_TIP_TYPE, WEAVE_STROKE_SINGLE_NODE_TYPE, WEAVE_STROKE_TOOL_ACTION_NAME, WEAVE_STROKE_TOOL_ACTION_NAME_ALIASES, WEAVE_STROKE_TOOL_DEFAULT_CONFIG, WEAVE_STROKE_TOOL_STATE, WEAVE_TEXT_NODE_DEFAULT_CONFIG, WEAVE_TEXT_NODE_TYPE, WEAVE_USERS_POINTERS_CONFIG_DEFAULT_PROPS, WEAVE_USERS_POINTERS_KEY, WEAVE_USERS_PRESENCE_CONFIG_DEFAULT_PROPS, WEAVE_USERS_PRESENCE_PLUGIN_KEY, WEAVE_USERS_SELECTION_KEY, WEAVE_USER_POINTER_KEY, WEAVE_USER_PRESENCE_KEY, WEAVE_USER_SELECTION_KEY, WEAVE_VIDEO_DEFAULT_CONFIG, WEAVE_VIDEO_NODE_TYPE, Weave, WeaveAction, WeaveAlignNodesToolAction, WeaveArrowNode, WeaveArrowToolAction, WeaveBrushToolAction, WeaveCommentNode, WeaveCommentToolAction, WeaveCommentsRendererPlugin, WeaveConnectedUsersPlugin, WeaveConnectorNode, WeaveConnectorToolAction, WeaveContextMenuPlugin, WeaveCopyPasteNodesPlugin, WeaveEllipseNode, WeaveEllipseToolAction, WeaveEraserToolAction, WeaveExportNodesToolAction, WeaveExportStageToolAction, WeaveFitToScreenToolAction, WeaveFitToSelectionToolAction, WeaveFrameNode, WeaveFrameToolAction, WeaveGroupNode, WeaveGuideToolAction, WeaveImageNode, WeaveImageToolAction, WeaveImagesToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, WeaveMoveToolAction, WeaveNode, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeaveNodesSnappingPlugin, WeavePenToolAction, WeavePlugin, WeavePolygonNode, WeavePolygonToolAction, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveRenderer, WeaveSelectionToolAction, WeaveStageDropAreaPlugin, WeaveStageGridPlugin, WeaveStageKeyboardMovePlugin, WeaveStageMinimapPlugin, WeaveStageNode, WeaveStagePanningPlugin, WeaveStageResizePlugin, WeaveStageZoomPlugin, WeaveStarNode, WeaveStarToolAction, WeaveStateManipulation, WeaveStore, WeaveStrokeNode, WeaveStrokeSingleNode, WeaveStrokeToolAction, WeaveTextNode, WeaveTextToolAction, WeaveUsersPointersPlugin, WeaveUsersPresencePlugin, WeaveUsersSelectionPlugin, WeaveVideoNode, WeaveVideoToolAction, WeaveZoomInToolAction, WeaveZoomOutToolAction, canComposite, clearContainerTargets, computeEllipseLabelMinSize, computePolygonLabelMinSize, computeRectangleLabelMinSize, containerOverCursor, containsNodeDeep, defaultInitialState, downscaleImageFile, downscaleImageFromURL, getBoundingBox, getDownscaleRatio, getExportBoundingBox, getImageSizeFromFile, getJSONFromYjsBinary, getSelectedNodesMetadata, getShapeLabelSchemaFields, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, instantiatePreset, intersectArrays, isArray, isIOS, isInShadowDOM, isNodeInSelection, isNumber, isObject, isServer, labelId, loadImageSource, mapJsonToYjsArray, mapJsonToYjsElements, mapJsonToYjsMap, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, spreadLabelProps, weavejsToYjsBinary };
33145
+ export { ALIGN_NODES_ALIGN_TO, ALIGN_NODES_TOOL_ACTION_NAME, ALIGN_NODES_TOOL_STATE, BRUSH_TOOL_ACTION_NAME, BRUSH_TOOL_DEFAULT_CONFIG, BRUSH_TOOL_STATE, CONNECTOR_TOOL_ACTION_NAME, CONNECTOR_TOOL_DEFAULT_CONFIG, CONNECTOR_TOOL_STATE, COPY_PASTE_NODES_PLUGIN_STATE, DEFAULT_GUIDE_TOOL_ACTION_CONFIG, DEFAULT_SNAPPING_MANAGER_CONFIG, ELLIPSE_TOOL_ACTION_NAME, ELLIPSE_TOOL_STATE, ERASER_TOOL_ACTION_NAME, ERASER_TOOL_STATE, FRAME_TOOL_ACTION_NAME, FRAME_TOOL_STATE, GUIDE_DISTANCE_NAME, GUIDE_DISTANCE_ORIGIN, GUIDE_KIND, GUIDE_NAME, GUIDE_ORIENTATION, GUIDE_STATE, GUIDE_TOOL_ACTION_NAME, GUIDE_TOOL_STATE, LINE_TOOL_ACTION_NAME, LINE_TOOL_DEFAULT_CONFIG, LINE_TOOL_STATE, MEASURE_TOOL_ACTION_NAME, MEASURE_TOOL_STATE, MOVE_ORIENTATION, MOVE_TOOL_ACTION_NAME, MOVE_TOOL_STATE, PEN_TOOL_ACTION_NAME, PEN_TOOL_STATE, POLYGON_TOOL_ACTION_NAME, POLYGON_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_ARROW_TOOL_ACTION_NAME, WEAVE_ARROW_TOOL_STATE, 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_CONNECTOR_NODE_ANCHOR_ORIGIN, WEAVE_CONNECTOR_NODE_DECORATOR_TYPE, WEAVE_CONNECTOR_NODE_DEFAULT_CONFIG, WEAVE_CONNECTOR_NODE_LINE_ORIGIN, WEAVE_CONNECTOR_NODE_LINE_TYPE, WEAVE_CONNECTOR_NODE_TYPE, 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_CONFIG, WEAVE_GRID_DOT_TYPES, WEAVE_GRID_LAYER_ID, WEAVE_GRID_TYPES, WEAVE_GROUP_NODE_TYPE, WEAVE_IMAGES_TOOL_ACTION_NAME, WEAVE_IMAGES_TOOL_DEFAULT_CONFIG, WEAVE_IMAGES_TOOL_STATE, WEAVE_IMAGES_TOOL_UPLOAD_TYPE, WEAVE_IMAGE_CROP_ANCHOR_POSITION, WEAVE_IMAGE_CROP_END_TYPE, WEAVE_IMAGE_DEFAULT_CONFIG, WEAVE_IMAGE_NODE_TYPE, WEAVE_IMAGE_TOOL_ACTION_NAME, WEAVE_IMAGE_TOOL_CONFIG_DEFAULT, WEAVE_IMAGE_TOOL_STATE, WEAVE_IMAGE_TOOL_UPLOAD_TYPE, WEAVE_LAYER_NODE_TYPE, WEAVE_LINE_NODE_DEFAULT_CONFIG, WEAVE_LINE_NODE_TYPE, WEAVE_MEASURE_NODE_DEFAULT_CONFIG, WEAVE_MEASURE_NODE_TYPE, WEAVE_MEASURE_TOOL_DEFAULT_CONFIG, 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_NODES_SNAPPING_PLUGIN_KEY, WEAVE_POLYGON_NODE_TYPE, WEAVE_POLYGON_PRESETS, WEAVE_RECTANGLE_NODE_TYPE, WEAVE_REGULAR_POLYGON_NODE_TYPE, WEAVE_SHAPE_LABEL_DEFAULTS, WEAVE_STAGE_DEFAULT_MODE, WEAVE_STAGE_DROP_AREA_KEY, WEAVE_STAGE_GRID_PLUGIN_KEY, WEAVE_STAGE_IMAGE_CROPPING_MODE, WEAVE_STAGE_KEYBOARD_MOVE_DEFAULT_CONFIG, WEAVE_STAGE_KEYBOARD_MOVE_KEY, WEAVE_STAGE_KEYBOARD_MOVE_ORIENTATION, WEAVE_STAGE_MINIMAP_KEY, WEAVE_STAGE_NODE_TYPE, WEAVE_STAGE_PANNING_DEFAULT_CONFIG, WEAVE_STAGE_PANNING_KEY, WEAVE_STAGE_PANNING_THROTTLE_MS, WEAVE_STAGE_SHAPE_LABEL_EDITION_MODE, WEAVE_STAGE_TEXT_EDITION_MODE, WEAVE_STAGE_ZOOM_DEFAULT_CONFIG, WEAVE_STAGE_ZOOM_KEY, WEAVE_STAGE_ZOOM_TYPE, WEAVE_STAR_NODE_TYPE, WEAVE_STROKE_NODE_DEFAULT_CONFIG, WEAVE_STROKE_NODE_TYPE, WEAVE_STROKE_SINGLE_NODE_DEFAULT_CONFIG, WEAVE_STROKE_SINGLE_NODE_TIP_SIDE, WEAVE_STROKE_SINGLE_NODE_TIP_TYPE, WEAVE_STROKE_SINGLE_NODE_TYPE, WEAVE_STROKE_TOOL_ACTION_NAME, WEAVE_STROKE_TOOL_ACTION_NAME_ALIASES, WEAVE_STROKE_TOOL_DEFAULT_CONFIG, WEAVE_STROKE_TOOL_STATE, WEAVE_TEXT_NODE_DEFAULT_CONFIG, WEAVE_TEXT_NODE_TYPE, WEAVE_USERS_POINTERS_CONFIG_DEFAULT_PROPS, WEAVE_USERS_POINTERS_KEY, WEAVE_USERS_PRESENCE_CONFIG_DEFAULT_PROPS, WEAVE_USERS_PRESENCE_PLUGIN_KEY, WEAVE_USERS_SELECTION_KEY, WEAVE_USER_POINTER_KEY, WEAVE_USER_PRESENCE_KEY, WEAVE_USER_SELECTION_KEY, WEAVE_VIDEO_DEFAULT_CONFIG, WEAVE_VIDEO_NODE_TYPE, Weave, WeaveAction, WeaveAlignNodesToolAction, WeaveArrowNode, WeaveArrowToolAction, WeaveBrushToolAction, WeaveCommentNode, WeaveCommentToolAction, WeaveCommentsRendererPlugin, WeaveConnectedUsersPlugin, WeaveConnectorNode, WeaveConnectorToolAction, WeaveContextMenuPlugin, WeaveCopyPasteNodesPlugin, WeaveEllipseNode, WeaveEllipseToolAction, WeaveEraserToolAction, WeaveExportNodesToolAction, WeaveExportStageToolAction, WeaveFitToScreenToolAction, WeaveFitToSelectionToolAction, WeaveFrameNode, WeaveFrameToolAction, WeaveGroupNode, WeaveGuideToolAction, WeaveImageNode, WeaveImageToolAction, WeaveImagesToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, WeaveMoveToolAction, WeaveNode, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeaveNodesSnappingPlugin, WeavePenToolAction, WeavePlugin, WeavePolygonNode, WeavePolygonToolAction, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveRenderer, WeaveSelectionToolAction, WeaveStageDropAreaPlugin, WeaveStageGridPlugin, WeaveStageKeyboardMovePlugin, WeaveStageMinimapPlugin, WeaveStageNode, WeaveStagePanningPlugin, WeaveStageResizePlugin, WeaveStageZoomPlugin, WeaveStarNode, WeaveStarToolAction, WeaveStateManipulation, WeaveStore, WeaveStrokeNode, WeaveStrokeSingleNode, WeaveStrokeToolAction, WeaveTextNode, WeaveTextToolAction, WeaveUsersPointersPlugin, WeaveUsersPresencePlugin, WeaveUsersSelectionPlugin, WeaveVideoNode, WeaveVideoToolAction, WeaveZoomInToolAction, WeaveZoomOutToolAction, buildAncestorGroupIds, canComposite, clearContainerTargets, computeEllipseLabelMinSize, computePolygonLabelMinSize, computeRectangleLabelMinSize, containerOverCursor, containsNodeDeep, defaultInitialState, downscaleImageFile, downscaleImageFromURL, getBoundingBox, getDownscaleRatio, getExportBoundingBox, getImageSizeFromFile, getJSONFromYjsBinary, getSelectedNodesMetadata, getShapeLabelSchemaFields, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, instantiatePreset, intersectArrays, isArray, isIOS, isInShadowDOM, isNodeInSelection, isNumber, isObject, isServer, labelId, loadImageSource, mapJsonToYjsArray, mapJsonToYjsElements, mapJsonToYjsMap, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, spreadLabelProps, weavejsToYjsBinary };