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