@inditextech/weave-sdk 2.21.1 → 2.23.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.
package/dist/sdk.node.js CHANGED
@@ -17910,7 +17910,10 @@ const getPositionRelativeToContainerOnPosition = (instance) => {
17910
17910
  let position = instance.getStage().getRelativePointerPosition();
17911
17911
  if (!position) return position;
17912
17912
  const container = containerOverCursor(instance, [], position);
17913
- if (container) position = container?.getRelativePointerPosition();
17913
+ if (container) if (container.getAttrs().containerId) {
17914
+ const containerNode = container.findOne(`#${container.getAttrs().containerId}`);
17915
+ if (containerNode) position = containerNode?.getRelativePointerPosition();
17916
+ } else position = container?.getRelativePointerPosition();
17914
17917
  if (!position) return position;
17915
17918
  return position;
17916
17919
  };
@@ -18648,12 +18651,8 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18648
18651
  this.isCtrlMetaPressed = false;
18649
18652
  this.isSpaceKeyPressed = false;
18650
18653
  this.isDoubleTap = false;
18651
- this.tapStart = {
18652
- x: 0,
18653
- y: 0,
18654
- time: 0
18655
- };
18656
- this.lastTapTime = 0;
18654
+ this.tapStart = null;
18655
+ this.previousTap = null;
18657
18656
  this.active = false;
18658
18657
  this.didMove = false;
18659
18658
  this.selecting = false;
@@ -18661,6 +18660,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
18661
18660
  this.enabled = false;
18662
18661
  this.pointers = {};
18663
18662
  this.panLoopId = null;
18663
+ this.tapTimeoutId = null;
18664
18664
  }
18665
18665
  getName() {
18666
18666
  return WEAVE_NODES_SELECTION_KEY;
@@ -19001,9 +19001,6 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19001
19001
  }
19002
19002
  this.active = true;
19003
19003
  });
19004
- this.instance.addEventListener("onStateChange", () => {
19005
- this.triggerSelectedNodesEvent();
19006
- });
19007
19004
  this.instance.addEventListener("onNodeRemoved", (node) => {
19008
19005
  const selectedNodes = this.getSelectedNodes();
19009
19006
  const newSelectedNodes = selectedNodes.filter((actNode) => {
@@ -19051,14 +19048,14 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19051
19048
  return handler?.serialize(node);
19052
19049
  }).filter((node) => typeof node !== "undefined");
19053
19050
  this.instance.removeNodes(mappedSelectedNodes);
19054
- this.tr.nodes([]);
19051
+ this.selectNone();
19055
19052
  this.triggerSelectedNodesEvent();
19056
19053
  }
19057
19054
  updateSelectionRect() {
19058
19055
  const stage = this.instance.getStage();
19059
19056
  this.x2 = stage.getRelativePointerPosition()?.x ?? 0;
19060
19057
  this.y2 = stage.getRelativePointerPosition()?.y ?? 0;
19061
- this.getTransformer().nodes([]);
19058
+ this.selectNone();
19062
19059
  this.selectionRectangle.setAttrs({
19063
19060
  visible: true,
19064
19061
  x: Math.min(this.x1, this.x2),
@@ -19131,6 +19128,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19131
19128
  if (this.isAreaSelecting()) this.panLoopId = requestAnimationFrame(() => this.panLoop());
19132
19129
  }
19133
19130
  setTapStart(e) {
19131
+ this.taps = this.taps + 1;
19134
19132
  this.tapStart = {
19135
19133
  x: e.evt.clientX,
19136
19134
  y: e.evt.clientY,
@@ -19156,28 +19154,22 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19156
19154
  return true;
19157
19155
  }
19158
19156
  checkDoubleTap(e) {
19159
- if (!this.tapStart) return;
19157
+ if (!this.previousTap) return;
19160
19158
  const now$2 = performance.now();
19161
- const dx = e.evt.clientX - this.tapStart.x;
19162
- const dy = e.evt.clientY - this.tapStart.y;
19159
+ const dx = e.evt.clientX - this.previousTap.x;
19160
+ const dy = e.evt.clientY - this.previousTap.y;
19163
19161
  const dist = Math.hypot(dx, dy);
19164
19162
  const DOUBLE_TAP_DISTANCE = 10;
19165
19163
  const DOUBLE_TAP_TIME = 300;
19166
- this.isDoubleTap = false;
19167
- if (this.taps >= 1 && now$2 - this.lastTapTime < DOUBLE_TAP_TIME && dist < DOUBLE_TAP_DISTANCE) {
19164
+ if (this.tapTimeoutId) clearTimeout(this.tapTimeoutId);
19165
+ this.tapTimeoutId = setTimeout(() => {
19168
19166
  this.taps = 0;
19169
- this.lastTapTime = 0;
19170
- this.tapStart = {
19171
- x: 0,
19172
- y: 0,
19173
- time: 0
19174
- };
19167
+ this.tapStart = null;
19168
+ }, DOUBLE_TAP_TIME + 5);
19169
+ if (this.taps > 1 && now$2 - this.previousTap.time < DOUBLE_TAP_TIME && dist < DOUBLE_TAP_DISTANCE) {
19170
+ this.taps = 0;
19171
+ this.tapStart = null;
19175
19172
  this.isDoubleTap = true;
19176
- } else {
19177
- this.setTapStart(e);
19178
- this.taps = this.taps + 1;
19179
- this.lastTapTime = now$2;
19180
- this.isDoubleTap = false;
19181
19173
  }
19182
19174
  }
19183
19175
  hideSelectorArea() {
@@ -19257,7 +19249,7 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19257
19249
  const nodesSelected = this.tr.nodes();
19258
19250
  for (const node of nodesSelected) node.fire("onSelectionCleared", { bubbles: true });
19259
19251
  }
19260
- this.tr.nodes([]);
19252
+ this.selectNone();
19261
19253
  this.instance.emitEvent("onSelectionState", true);
19262
19254
  this.panLoopId = requestAnimationFrame(() => this.panLoop());
19263
19255
  });
@@ -19287,6 +19279,8 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19287
19279
  const moved = this.checkMoved(e);
19288
19280
  this.checkDoubleTap(e);
19289
19281
  delete this.pointers[e.evt.pointerId];
19282
+ this.previousTap = this.tapStart;
19283
+ if (stage.mode() !== WEAVE_STAGE_DEFAULT_MODE) return;
19290
19284
  if (stage.mode() === WEAVE_STAGE_DEFAULT_MODE) {
19291
19285
  this.getNodesEdgeSnappingPlugin()?.cleanupGuidelines();
19292
19286
  this.getNodesDistanceSnappingPlugin()?.cleanupGuidelines();
@@ -19302,13 +19296,6 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19302
19296
  }
19303
19297
  this.instance.emitEvent("onSelectionState", false);
19304
19298
  if (this.isDoubleTap) {
19305
- this.taps = 0;
19306
- this.lastTapTime = 0;
19307
- this.tapStart = {
19308
- x: 0,
19309
- y: 0,
19310
- time: 0
19311
- };
19312
19299
  this.hideSelectorArea();
19313
19300
  this.handleClickOrTap(e);
19314
19301
  return;
@@ -19403,6 +19390,8 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19403
19390
  }
19404
19391
  }
19405
19392
  syncSelection() {
19393
+ const stageMode = this.instance.getStage().mode();
19394
+ if (![WEAVE_STAGE_DEFAULT_MODE].includes(stageMode)) return;
19406
19395
  const newSelectedNodes = [];
19407
19396
  const actualSelectedNodes = this.tr.nodes();
19408
19397
  for (const node of actualSelectedNodes) {
@@ -19436,15 +19425,15 @@ var WeaveNodesSelectionPlugin = class extends WeavePlugin {
19436
19425
  if (e.evt.pointerType === "mouse" && e.evt.button && e.evt.button !== 0) return;
19437
19426
  let areNodesSelected = false;
19438
19427
  let nodeTargeted = selectedGroup && !(selectedGroup.getAttrs().active ?? false) ? selectedGroup : e.target;
19439
- if (nodeTargeted.getParent() instanceof Konva.Transformer) {
19440
- const mousePos = stage.getPointerPosition();
19441
- const intersections = stage.getAllIntersections(mousePos);
19442
- const nodesIntersected = intersections.filter((ele) => ele.getAttrs().nodeType);
19443
- let targetNode = null;
19444
- if (nodesIntersected.length > 0) targetNode = this.instance.getInstanceRecursive(nodesIntersected[nodesIntersected.length - 1]);
19445
- if (targetNode && targetNode.getAttrs().nodeType) nodeTargeted = targetNode;
19428
+ if (e.target === this.instance.getStage()) {
19429
+ this.getNodesSelectionFeedbackPlugin()?.cleanupSelectedHalos();
19430
+ return;
19431
+ }
19432
+ nodeTargeted = this.instance.getRealSelectedNode(nodeTargeted);
19433
+ if (!nodeTargeted.getAttrs().nodeType) {
19434
+ this.isDoubleTap = false;
19435
+ return;
19446
19436
  }
19447
- if (!nodeTargeted.getAttrs().nodeType) return;
19448
19437
  const metaPressed = e.evt.shiftKey || e.evt.ctrlKey || e.evt.metaKey;
19449
19438
  const nodeSelectedIndex = this.tr.nodes().findIndex((node) => {
19450
19439
  return node.getAttrs().id === nodeTargeted.getAttrs().id;
@@ -20754,19 +20743,7 @@ var WeaveNode = class {
20754
20743
  };
20755
20744
  }
20756
20745
  getRealSelectedNode(nodeTarget) {
20757
- const stage = this.instance.getStage();
20758
- let realNodeTarget = nodeTarget;
20759
- if (nodeTarget.getParent() instanceof Konva.Transformer) {
20760
- const mousePos = stage.getPointerPosition();
20761
- const intersections = stage.getAllIntersections(mousePos);
20762
- const nodesIntersected = intersections.filter((ele) => ele.getAttrs().nodeType);
20763
- if (nodesIntersected.length > 0) realNodeTarget = this.instance.getInstanceRecursive(nodesIntersected[nodesIntersected.length - 1]);
20764
- }
20765
- if (realNodeTarget.getAttrs().nodeId) {
20766
- const realNode = stage.findOne(`#${realNodeTarget.getAttrs().nodeId}`);
20767
- if (realNode) realNodeTarget = realNode;
20768
- }
20769
- return realNodeTarget;
20746
+ return this.instance.getRealSelectedNode(nodeTarget);
20770
20747
  }
20771
20748
  getNodesSelectionFeedbackPlugin() {
20772
20749
  const selectionFeedbackPlugin = this.instance.getPlugin(WEAVE_NODES_MULTI_SELECTION_FEEDBACK_PLUGIN_KEY);
@@ -21636,6 +21613,26 @@ var WeaveTargetingManager = class {
21636
21613
  container
21637
21614
  };
21638
21615
  }
21616
+ getRealSelectedNode = (nodeTarget) => {
21617
+ const stage = this.instance.getStage();
21618
+ let realNodeTarget = nodeTarget;
21619
+ if (nodeTarget.getParent() instanceof Konva.Transformer) {
21620
+ const mousePos = stage.getPointerPosition();
21621
+ const transformerLayer = nodeTarget.getParent()?.getParent();
21622
+ transformerLayer?.listening(false);
21623
+ const nodeIntersected = stage.getIntersection(mousePos ?? {
21624
+ x: 0,
21625
+ y: 0
21626
+ });
21627
+ transformerLayer?.listening(true);
21628
+ if (nodeIntersected) realNodeTarget = nodeIntersected;
21629
+ }
21630
+ if (realNodeTarget.getAttrs().nodeId) {
21631
+ const realNode = stage.findOne(`#${realNodeTarget.getAttrs().nodeId}`);
21632
+ if (realNode) realNodeTarget = realNode;
21633
+ }
21634
+ return realNodeTarget;
21635
+ };
21639
21636
  };
21640
21637
 
21641
21638
  //#endregion
@@ -22170,7 +22167,7 @@ var WeaveRegisterManager = class {
22170
22167
 
22171
22168
  //#endregion
22172
22169
  //#region package.json
22173
- var version = "2.21.1";
22170
+ var version = "2.23.0";
22174
22171
 
22175
22172
  //#endregion
22176
22173
  //#region src/managers/setup.ts
@@ -23562,6 +23559,9 @@ var Weave = class {
23562
23559
  selectionPlugin.setSelectedNodes(instanceNodes);
23563
23560
  }
23564
23561
  }
23562
+ getRealSelectedNode = (nodeTarget) => {
23563
+ return this.targetingManager.getRealSelectedNode(nodeTarget);
23564
+ };
23565
23565
  getCloningManager() {
23566
23566
  return this.cloningManager;
23567
23567
  }
@@ -23769,7 +23769,10 @@ var WeaveStageNode = class extends WeaveNode {
23769
23769
  isCmdCtrlPressed = false;
23770
23770
  globalEventsInitialized = false;
23771
23771
  onRender(props) {
23772
- const stage = new Konva.Stage({ ...props });
23772
+ const stage = new Konva.Stage({
23773
+ ...props,
23774
+ mode: "default"
23775
+ });
23773
23776
  setupUpscaleStage(this.instance, stage);
23774
23777
  this.wheelMousePressed = false;
23775
23778
  stage.isFocused = () => this.stageFocused;
@@ -24496,6 +24499,11 @@ var WeaveLineNode = class extends WeaveNode {
24496
24499
  //#endregion
24497
24500
  //#region src/nodes/text/constants.ts
24498
24501
  const WEAVE_TEXT_NODE_TYPE = "text";
24502
+ const WEAVE_STAGE_TEXT_EDITION_MODE = "text-edition";
24503
+ const WEAVE_TEXT_NODE_DEFAULT_CONFIG = {
24504
+ transform: { ...WEAVE_NODES_SELECTION_DEFAULT_CONFIG.selection },
24505
+ outline: { enabled: false }
24506
+ };
24499
24507
 
24500
24508
  //#endregion
24501
24509
  //#region src/actions/text-tool/constants.ts
@@ -24522,7 +24530,7 @@ var WeaveTextNode = class extends WeaveNode {
24522
24530
  constructor(params) {
24523
24531
  super();
24524
24532
  const { config } = params ?? {};
24525
- this.config = { transform: { ...config?.transform } };
24533
+ this.config = (0, import_lodash.merge)({}, WEAVE_TEXT_NODE_DEFAULT_CONFIG, config);
24526
24534
  this.keyPressHandler = void 0;
24527
24535
  this.editing = false;
24528
24536
  this.textArea = null;
@@ -24557,7 +24565,14 @@ var WeaveTextNode = class extends WeaveNode {
24557
24565
  onRender(props) {
24558
24566
  const text = new Konva.Text({
24559
24567
  ...props,
24560
- name: "node"
24568
+ name: "node",
24569
+ ...!this.config.outline.enabled && { strokeEnabled: false },
24570
+ ...this.config.outline.enabled && {
24571
+ strokeEnabled: true,
24572
+ stroke: this.config.outline.color,
24573
+ strokeWidth: this.config.outline.width,
24574
+ fillAfterStrokeEnabled: true
24575
+ }
24561
24576
  });
24562
24577
  this.setupDefaultNodeAugmentation(text);
24563
24578
  const defaultTransformerProperties = this.defaultGetTransformerProperties(this.config.transform);
@@ -24606,13 +24621,7 @@ var WeaveTextNode = class extends WeaveNode {
24606
24621
  text.dblClick = () => {
24607
24622
  if (this.editing) return;
24608
24623
  if (!(this.isSelecting() && this.isNodeSelected(text))) return;
24609
- const stage = this.instance.getStage();
24610
- const mousePos = stage.getPointerPosition();
24611
- if (mousePos) {
24612
- const elements = stage.getAllIntersections(mousePos);
24613
- const onlyTextElements = elements.filter((ele) => ele.getAttrs().nodeType === WEAVE_TEXT_NODE_TYPE);
24614
- if (onlyTextElements.length > 0) this.triggerEditMode(onlyTextElements[0]);
24615
- }
24624
+ this.triggerEditMode(text);
24616
24625
  };
24617
24626
  text.on("transform", (e) => {
24618
24627
  if (this.isSelecting() && this.isNodeSelected(text)) {
@@ -24644,7 +24653,16 @@ var WeaveTextNode = class extends WeaveNode {
24644
24653
  const actualLineHeight = nodeInstance.getAttrs().lineHeight;
24645
24654
  let updateNeeded = false;
24646
24655
  if (actualFontFamily !== nextProps.fontFamily || actualFontSize !== nextProps.fontSize || actualFontStyle !== nextProps.fontStyle || actualFontVariant !== nextProps.fontVariant || actualTextDecoration !== nextProps.textDecoration || actualLineHeight !== nextProps.lineHeight) updateNeeded = true;
24647
- nodeInstance.setAttrs({ ...nextProps });
24656
+ nodeInstance.setAttrs({
24657
+ ...nextProps,
24658
+ ...!this.config.outline.enabled && { strokeEnabled: false },
24659
+ ...this.config.outline.enabled && {
24660
+ strokeEnabled: true,
24661
+ stroke: this.config.outline.color,
24662
+ strokeWidth: this.config.outline.width,
24663
+ fillAfterStrokeEnabled: true
24664
+ }
24665
+ });
24648
24666
  let width = nextProps.width;
24649
24667
  let height = nextProps.height;
24650
24668
  if (nextProps.layout === TEXT_LAYOUT.AUTO_ALL) {
@@ -24663,10 +24681,12 @@ var WeaveTextNode = class extends WeaveNode {
24663
24681
  });
24664
24682
  if (updateNeeded) this.instance.updateNode(this.serialize(nodeInstance));
24665
24683
  if (this.editing) this.updateTextAreaDOM(nodeInstance);
24666
- const nodesSelectionPlugin = this.instance.getPlugin("nodesSelection");
24667
- if (nodesSelectionPlugin) {
24668
- const actualSelectedNodes = nodesSelectionPlugin.getSelectedNodes();
24669
- nodesSelectionPlugin.setSelectedNodes(actualSelectedNodes);
24684
+ if (!this.editing) {
24685
+ const nodesSelectionPlugin = this.instance.getPlugin("nodesSelection");
24686
+ if (nodesSelectionPlugin) {
24687
+ const actualSelectedNodes = nodesSelectionPlugin.getSelectedNodes();
24688
+ nodesSelectionPlugin.setSelectedNodes(actualSelectedNodes);
24689
+ }
24670
24690
  }
24671
24691
  }
24672
24692
  serialize(instance) {
@@ -24841,6 +24861,7 @@ var WeaveTextNode = class extends WeaveNode {
24841
24861
  textNode.visible(true);
24842
24862
  this.instance.updateNode(this.serialize(textNode));
24843
24863
  };
24864
+ const throttledUpdateTextNode = (0, import_lodash.throttle)(updateTextNode, 300);
24844
24865
  this.textArea.onfocus = () => {
24845
24866
  this.textAreaDomResize(textNode);
24846
24867
  };
@@ -24852,11 +24873,11 @@ var WeaveTextNode = class extends WeaveNode {
24852
24873
  };
24853
24874
  this.textArea.onpaste = () => {
24854
24875
  this.textAreaDomResize(textNode);
24855
- updateTextNode();
24876
+ throttledUpdateTextNode();
24856
24877
  };
24857
24878
  this.textArea.oninput = () => {
24858
24879
  this.textAreaDomResize(textNode);
24859
- updateTextNode();
24880
+ throttledUpdateTextNode();
24860
24881
  };
24861
24882
  this.textAreaSuperContainer.addEventListener("scroll", () => {
24862
24883
  if (this.textAreaSuperContainer) {
@@ -24945,14 +24966,13 @@ var WeaveTextNode = class extends WeaveNode {
24945
24966
  this.textArea.removeEventListener("keydown", handleKeyDown);
24946
24967
  this.textArea.removeEventListener("keyup", handleKeyUp);
24947
24968
  window.removeEventListener("pointerup", handleOutsideClick);
24948
- window.removeEventListener("pointerdown", handleOutsideClick);
24949
24969
  return;
24950
24970
  }
24951
24971
  };
24952
24972
  setTimeout(() => {
24953
24973
  window.addEventListener("pointerup", handleOutsideClick);
24954
- window.addEventListener("pointerdown", handleOutsideClick);
24955
24974
  }, 0);
24975
+ this.instance.getStage().mode(WEAVE_STAGE_TEXT_EDITION_MODE);
24956
24976
  this.editing = true;
24957
24977
  }
24958
24978
  updateTextAreaDOM(textNode) {
@@ -24986,6 +25006,7 @@ var WeaveTextNode = class extends WeaveNode {
24986
25006
  }
24987
25007
  removeTextAreaDOM(textNode) {
24988
25008
  this.instance.releaseMutexLock();
25009
+ this.instance.getStage().mode(WEAVE_STAGE_DEFAULT_MODE);
24989
25010
  this.editing = false;
24990
25011
  const stage = this.instance.getStage();
24991
25012
  delete window.weaveTextEditing[textNode.id()];
@@ -24995,11 +25016,7 @@ var WeaveTextNode = class extends WeaveNode {
24995
25016
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
24996
25017
  if (selectionPlugin) {
24997
25018
  this.instance.enablePlugin("nodesSelection");
24998
- const tr = selectionPlugin.getTransformer();
24999
- if (tr) {
25000
- tr.nodes([textNode]);
25001
- tr.show();
25002
- }
25019
+ selectionPlugin.setSelectedNodes([textNode]);
25003
25020
  this.instance.triggerAction(SELECTION_TOOL_ACTION_NAME);
25004
25021
  }
25005
25022
  stage.container().tabIndex = 1;
@@ -25041,6 +25058,7 @@ var WeaveTextNode = class extends WeaveNode {
25041
25058
  //#endregion
25042
25059
  //#region src/nodes/image/constants.ts
25043
25060
  const WEAVE_IMAGE_NODE_TYPE = "image";
25061
+ const WEAVE_STAGE_IMAGE_CROPPING_MODE = "image-cropping";
25044
25062
  const WEAVE_IMAGE_CROP_END_TYPE = {
25045
25063
  ["ACCEPT"]: "accept",
25046
25064
  ["CANCEL"]: "cancel"
@@ -25650,13 +25668,13 @@ var WeaveImageNode = class extends WeaveNode {
25650
25668
  triggerCrop(imageNode, options) {
25651
25669
  const stage = this.instance.getStage();
25652
25670
  if (imageNode.getAttrs().cropping ?? false) return;
25653
- if (!(this.isSelecting() && this.isNodeSelected(imageNode)) && !options.cmdCtrl.triggered) return;
25671
+ if (!(this.isSelecting() && this.isNodeSelected(imageNode))) return;
25654
25672
  const lockAcquired = this.instance.setMutexLock({
25655
25673
  nodeIds: [imageNode.id()],
25656
25674
  operation: "image-crop"
25657
25675
  });
25658
25676
  if (!lockAcquired) return;
25659
- stage.mode("cropping");
25677
+ stage.mode(WEAVE_STAGE_IMAGE_CROPPING_MODE);
25660
25678
  const image = stage.findOne(`#${imageNode.getAttrs().id}`);
25661
25679
  const internalImage = image?.findOne(`#${image.getAttrs().id}-image`);
25662
25680
  const cropGroup = image?.findOne(`#${image.getAttrs().id}-cropGroup`);
@@ -25805,17 +25823,23 @@ var WeaveImageNode = class extends WeaveNode {
25805
25823
  image: imageSource,
25806
25824
  visible: true
25807
25825
  });
25826
+ let sourceImageWidth = this.imageSource[id].width;
25827
+ let sourceImageHeight = this.imageSource[id].height;
25828
+ if (image.getAttrs().imageInfo) {
25829
+ sourceImageWidth = image.getAttrs().imageInfo.width;
25830
+ sourceImageHeight = image.getAttrs().imageInfo.height;
25831
+ }
25808
25832
  image.setAttr("imageInfo", {
25809
- width: this.imageSource[id].width,
25810
- height: this.imageSource[id].height
25833
+ width: sourceImageWidth,
25834
+ height: sourceImageHeight
25811
25835
  });
25812
25836
  internalImage.setAttr("imageInfo", {
25813
- width: this.imageSource[id].width,
25814
- height: this.imageSource[id].height
25837
+ width: sourceImageWidth,
25838
+ height: sourceImageHeight
25815
25839
  });
25816
25840
  if (!image.getAttrs().uncroppedImage) image.setAttr("uncroppedImage", {
25817
- width: this.imageSource[id].width,
25818
- height: this.imageSource[id].height
25841
+ width: sourceImageWidth,
25842
+ height: sourceImageHeight
25819
25843
  });
25820
25844
  this.imageState[id] = {
25821
25845
  loaded: true,
@@ -26131,8 +26155,7 @@ var WeaveImageNode = class extends WeaveNode {
26131
26155
  }
26132
26156
  this.cacheNode(nodeInstance);
26133
26157
  }
26134
- preloadImage(imageId, imageURL, { node, onLoad, onError }) {
26135
- const realImageURL = this.config.urlTransformer?.(imageURL ?? "", node) ?? imageURL;
26158
+ preloadImage(imageId, imageURL, { onLoad, onError }) {
26136
26159
  this.imageSource[imageId] = Konva.Util.createImageElement();
26137
26160
  this.imageSource[imageId].crossOrigin = this.config.crossOrigin;
26138
26161
  this.imageSource[imageId].onerror = (error) => {
@@ -26156,7 +26179,7 @@ var WeaveImageNode = class extends WeaveNode {
26156
26179
  error: false
26157
26180
  };
26158
26181
  try {
26159
- if (realImageURL) this.imageSource[imageId].src = realImageURL;
26182
+ if (imageURL) this.imageSource[imageId].src = imageURL;
26160
26183
  } catch (ex) {
26161
26184
  console.error(ex);
26162
26185
  }
@@ -26169,7 +26192,6 @@ var WeaveImageNode = class extends WeaveNode {
26169
26192
  const realImageURL = this.config.urlTransformer?.(imageProps.imageURL ?? "", image) ?? imageProps.imageURL;
26170
26193
  this.loadAsyncElement(id);
26171
26194
  this.preloadImage(id, realImageURL ?? "", {
26172
- node: image,
26173
26195
  onLoad: () => {
26174
26196
  if (image && imagePlaceholder && internalImage) {
26175
26197
  image.setAttrs({
@@ -26184,14 +26206,20 @@ var WeaveImageNode = class extends WeaveNode {
26184
26206
  image: imageSource,
26185
26207
  visible: true
26186
26208
  });
26209
+ let sourceImageWidth = this.imageSource[id].width;
26210
+ let sourceImageHeight = this.imageSource[id].height;
26211
+ if (image.getAttrs().imageInfo) {
26212
+ sourceImageWidth = image.getAttrs().imageInfo.width;
26213
+ sourceImageHeight = image.getAttrs().imageInfo.height;
26214
+ }
26187
26215
  internalImage.setAttr("imageInfo", {
26188
- width: this.imageSource[id].width,
26189
- height: this.imageSource[id].height
26216
+ width: sourceImageWidth,
26217
+ height: sourceImageHeight
26190
26218
  });
26191
26219
  internalImage.zIndex(0);
26192
26220
  image.setAttr("imageInfo", {
26193
- width: this.imageSource[id].width,
26194
- height: this.imageSource[id].height
26221
+ width: sourceImageWidth,
26222
+ height: sourceImageHeight
26195
26223
  });
26196
26224
  const imageRect = image.getClientRect({ relativeTo: this.instance.getStage() });
26197
26225
  if (!imageProps.cropInfo && !imageProps.uncroppedImage) image.setAttr("uncroppedImage", {
@@ -26252,6 +26280,9 @@ var WeaveImageNode = class extends WeaveNode {
26252
26280
  const internalImage = image?.findOne(`#${imageAttrs.id}-image`);
26253
26281
  if (!this.imageState[imageAttrs.id ?? ""]?.loaded) return;
26254
26282
  if (image && internalImage && !imageAttrs.adding && imageAttrs.cropInfo && imageAttrs.uncroppedImage) {
26283
+ const originalImageInfo = imageAttrs.imageInfo;
26284
+ const actualImageInfo = this.imageSource[imageAttrs.id ?? ""];
26285
+ const originalActualDiffScale = originalImageInfo ? actualImageInfo.width / originalImageInfo.width : 1;
26255
26286
  const actualScale = imageAttrs.uncroppedImage.width / imageAttrs.imageInfo.width;
26256
26287
  const cropScale = imageAttrs.cropInfo ? imageAttrs.cropInfo.scaleX : actualScale;
26257
26288
  internalImage.width(imageAttrs.uncroppedImage.width);
@@ -26260,10 +26291,10 @@ var WeaveImageNode = class extends WeaveNode {
26260
26291
  internalImage.scaleX(1);
26261
26292
  internalImage.scaleY(1);
26262
26293
  internalImage.crop({
26263
- x: imageAttrs.cropInfo.x / cropScale,
26264
- y: imageAttrs.cropInfo.y / cropScale,
26265
- width: imageAttrs.cropInfo.width / cropScale,
26266
- height: imageAttrs.cropInfo.height / cropScale
26294
+ x: imageAttrs.cropInfo.x / cropScale * originalActualDiffScale,
26295
+ y: imageAttrs.cropInfo.y / cropScale * originalActualDiffScale,
26296
+ width: imageAttrs.cropInfo.width / cropScale * originalActualDiffScale,
26297
+ height: imageAttrs.cropInfo.height / cropScale * originalActualDiffScale
26267
26298
  });
26268
26299
  internalImage.width(imageAttrs.cropSize.width * (actualScale / cropScale));
26269
26300
  internalImage.height(imageAttrs.cropSize.height * (actualScale / cropScale));
@@ -34358,7 +34389,6 @@ var WeaveStrokeToolAction = class extends WeaveAction {
34358
34389
  hitStrokeWidth: 16
34359
34390
  });
34360
34391
  delete finalLine.props.dragBoundFunc;
34361
- console.log("node", finalLine);
34362
34392
  this.instance.addNode(finalLine, this.container?.getAttrs().id);
34363
34393
  this.instance.emitEvent("onAddedStroke", { actionName: this.instance.getActiveAction() ?? WEAVE_STROKE_TOOL_ACTION_NAME });
34364
34394
  nodeCreated = true;
@@ -38782,5 +38812,5 @@ const setupCanvasBackend = async () => {
38782
38812
  };
38783
38813
 
38784
38814
  //#endregion
38785
- 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, CONNECTOR_TOOL_ACTION_NAME, CONNECTOR_TOOL_DEFAULT_CONFIG, CONNECTOR_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, LINE_TOOL_ACTION_NAME, LINE_TOOL_DEFAULT_CONFIG, LINE_TOOL_STATE, MEASURE_TOOL_ACTION_NAME, MEASURE_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_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_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_ANCHOR_POSITION, WEAVE_IMAGE_CROP_END_TYPE, WEAVE_IMAGE_DEFAULT_CONFIG, WEAVE_IMAGE_NODE_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_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_STAGE_PANNING_THROTTLE_MS, 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_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, WeaveImageNode, WeaveImageToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, 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, WeaveStrokeSingleNode, WeaveStrokeToolAction, WeaveTextNode, WeaveTextToolAction, WeaveUsersPointersPlugin, WeaveUsersPresencePlugin, WeaveUsersSelectionPlugin, WeaveVideoNode, WeaveVideoToolAction, WeaveZoomInToolAction, WeaveZoomOutToolAction, canComposite, clearContainerTargets, containerOverCursor, containsNodeDeep, defaultInitialState, getBoundingBox, getExportBoundingBox, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isServer, memoize, mergeExceptArrays, moveNodeToContainer, resetScale, setupCanvasBackend, setupSkiaBackend };
38815
+ 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, CONNECTOR_TOOL_ACTION_NAME, CONNECTOR_TOOL_DEFAULT_CONFIG, CONNECTOR_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, LINE_TOOL_ACTION_NAME, LINE_TOOL_DEFAULT_CONFIG, LINE_TOOL_STATE, MEASURE_TOOL_ACTION_NAME, MEASURE_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_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_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_ANCHOR_POSITION, WEAVE_IMAGE_CROP_END_TYPE, WEAVE_IMAGE_DEFAULT_CONFIG, WEAVE_IMAGE_NODE_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_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_IMAGE_CROPPING_MODE, 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_STAGE_PANNING_THROTTLE_MS, WEAVE_STAGE_TEXT_EDITION_MODE, 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, WeaveImageNode, WeaveImageToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, 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, WeaveStrokeSingleNode, WeaveStrokeToolAction, WeaveTextNode, WeaveTextToolAction, WeaveUsersPointersPlugin, WeaveUsersPresencePlugin, WeaveUsersSelectionPlugin, WeaveVideoNode, WeaveVideoToolAction, WeaveZoomInToolAction, WeaveZoomOutToolAction, canComposite, clearContainerTargets, containerOverCursor, containsNodeDeep, defaultInitialState, getBoundingBox, getExportBoundingBox, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isServer, memoize, mergeExceptArrays, moveNodeToContainer, resetScale, setupCanvasBackend, setupSkiaBackend };
38786
38816
  //# sourceMappingURL=sdk.node.js.map