@inditextech/weave-sdk 5.0.0-SNAPSHOT.413.1 → 5.1.0-SNAPSHOT.424.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
@@ -3716,6 +3716,9 @@ function getStageClickPoint(instance, pointerPos) {
3716
3716
  function isNumber(value) {
3717
3717
  return typeof value === "number" && !Number.isNaN(value);
3718
3718
  }
3719
+ function sleep(ms) {
3720
+ return new Promise((resolve) => setTimeout(resolve, ms));
3721
+ }
3719
3722
 
3720
3723
  //#endregion
3721
3724
  //#region src/plugins/users-selection/constants.ts
@@ -6608,7 +6611,12 @@ var WeaveNode = class {
6608
6611
  this.instance.emitEvent("onDrag", null);
6609
6612
  const realNodeTarget = this.getRealSelectedNode(nodeTarget);
6610
6613
  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(() => {
6614
+ const shouldUpdateMove = this.isSelecting() && this.getSelectionPlugin()?.getSelectedNodes().length === 1 && (realNodeTarget.getAttrs().lockToContainer === void 0 || !realNodeTarget.getAttrs().lockToContainer);
6615
+ if (isInGroupContext && shouldUpdateMove) {
6616
+ if (realNodeTarget.getAttrs().isCloned) this.instance.getCloningManager().removeClone(realNodeTarget);
6617
+ this.instance.updateNodeNT(this.serialize(realNodeTarget));
6618
+ }
6619
+ if (!isInGroupContext && shouldUpdateMove) this.instance.stateTransactional(() => {
6612
6620
  clearContainerTargets(this.instance);
6613
6621
  const layerToMove = containerOverCursor(this.instance, [realNodeTarget]);
6614
6622
  let containerToMove = this.instance.getMainLayer();
@@ -8555,14 +8563,17 @@ var WeaveGroupsManager = class {
8555
8563
  if (konvaGroup) {
8556
8564
  const nodePos = konvaGroup.getAbsolutePosition();
8557
8565
  const nodeRotation = konvaGroup.getAbsoluteRotation();
8566
+ const newId = v4_default();
8558
8567
  konvaGroup.moveTo(groupInstance);
8559
8568
  konvaGroup.setAbsolutePosition(nodePos);
8560
8569
  konvaGroup.rotation(nodeRotation);
8561
8570
  konvaGroup.zIndex(index);
8562
- konvaGroup.setAttr("id", v4_default());
8571
+ konvaGroup.setAttr("id", newId);
8563
8572
  konvaGroup.setAttr("draggable", false);
8564
8573
  const handler = this.instance.getNodeHandler("group");
8565
8574
  if (handler) {
8575
+ this.instance.removeNodeNT(groupChild, { emitUserChangeEvent: false });
8576
+ konvaGroup.setAttr("id", groupChild.key);
8566
8577
  const stateNode = handler.serialize(konvaGroup);
8567
8578
  this.instance.addNodeNT(stateNode, groupId, { emitUserChangeEvent: false });
8568
8579
  }
@@ -8573,20 +8584,22 @@ var WeaveGroupsManager = class {
8573
8584
  if (konvaNode) {
8574
8585
  const nodePos = konvaNode.getAbsolutePosition();
8575
8586
  const nodeRotation = konvaNode.getAbsoluteRotation();
8587
+ const newId = v4_default();
8576
8588
  konvaNode.moveTo(groupInstance);
8577
8589
  konvaNode.setAbsolutePosition(nodePos);
8578
8590
  konvaNode.rotation(nodeRotation);
8579
8591
  konvaNode.zIndex(index);
8580
- konvaNode.setAttr("id", v4_default());
8592
+ konvaNode.setAttr("id", newId);
8581
8593
  konvaNode.setAttr("draggable", false);
8582
8594
  const handler = this.instance.getNodeHandler(konvaNode.getAttrs().nodeType);
8583
8595
  if (handler) {
8596
+ this.instance.removeNodeNT(node, { emitUserChangeEvent: false });
8597
+ konvaNode.setAttr("id", node.key);
8584
8598
  const stateNode = handler.serialize(konvaNode);
8585
8599
  this.instance.addNodeNT(stateNode, groupId, { emitUserChangeEvent: false });
8586
8600
  }
8587
8601
  }
8588
8602
  }
8589
- this.instance.removeNodes(sortedNodesByZIndex);
8590
8603
  groupInstance.destroy();
8591
8604
  const groupNode = stage.findOne(`#${groupId}`);
8592
8605
  if (groupHandler && groupNode) {
@@ -8604,7 +8617,7 @@ var WeaveGroupsManager = class {
8604
8617
  tr.show();
8605
8618
  tr.forceUpdate();
8606
8619
  }
8607
- }, 0);
8620
+ }, 10);
8608
8621
  });
8609
8622
  }
8610
8623
  unGroup(group) {
@@ -9688,7 +9701,7 @@ var WeaveRegisterManager = class {
9688
9701
 
9689
9702
  //#endregion
9690
9703
  //#region package.json
9691
- var version = "5.0.0-SNAPSHOT.413.1";
9704
+ var version = "5.1.0-SNAPSHOT.424.1";
9692
9705
 
9693
9706
  //#endregion
9694
9707
  //#region src/managers/setup.ts
@@ -10130,7 +10143,8 @@ var WeaveExportManager = class {
10130
10143
  fill: backgroundColor
10131
10144
  });
10132
10145
  const exportGroup = new Konva.Group();
10133
- if (!exportArea) {
10146
+ if (exportArea) mainLayer.add(background);
10147
+ else {
10134
10148
  exportGroup.add(background);
10135
10149
  for (const node of nodes) {
10136
10150
  const clonedNode = node.clone({ id: v4_default() });
@@ -10142,7 +10156,7 @@ var WeaveExportManager = class {
10142
10156
  exportGroup.add(clonedNode);
10143
10157
  }
10144
10158
  mainLayer.add(exportGroup);
10145
- } else mainLayer.add(background);
10159
+ }
10146
10160
  const backgroundRect = background.getClientRect();
10147
10161
  stage.batchDraw();
10148
10162
  const { pixelRatio: finalPixelRatio } = this.fitKonvaPixelRatio(Math.round(backgroundRect.width), Math.round(backgroundRect.height), pixelRatio);
@@ -15219,8 +15233,8 @@ var WeaveImageNode = class extends WeaveNode {
15219
15233
  if (this.config.imageFallback.enabled) {
15220
15234
  const imageFallbackId = this.config.imageFallback.getId(params);
15221
15235
  let finalDataURL = "";
15222
- if (!dataURL) finalDataURL = this.config.imageFallback.getDataURL(imageFallbackId);
15223
- else finalDataURL = dataURL;
15236
+ if (dataURL) finalDataURL = dataURL;
15237
+ else finalDataURL = this.config.imageFallback.getDataURL(imageFallbackId);
15224
15238
  this.imageFallbackURL[imageFallbackId] = finalDataURL;
15225
15239
  }
15226
15240
  }
@@ -15241,7 +15255,7 @@ var WeaveImageNode = class extends WeaveNode {
15241
15255
  this.setupNotUsedImagesCleanup();
15242
15256
  };
15243
15257
  const bindedCleanupHandler = cleanupHandler.bind(this);
15244
- if (!this.notUsedImagesCleanup) this.notUsedImagesCleanup = setTimeout(bindedCleanupHandler, this.config.cleanup.intervalMs);
15258
+ this.notUsedImagesCleanup ??= setTimeout(bindedCleanupHandler, this.config.cleanup.intervalMs);
15245
15259
  }
15246
15260
  preloadCursors() {
15247
15261
  return new Promise((resolve) => {
@@ -15324,6 +15338,7 @@ var WeaveImageNode = class extends WeaveNode {
15324
15338
  const imageProps = props;
15325
15339
  const { id } = imageProps;
15326
15340
  const groupImageProps = { ...imageProps };
15341
+ delete groupImageProps.name;
15327
15342
  delete groupImageProps.children;
15328
15343
  delete groupImageProps.imageProperties;
15329
15344
  delete groupImageProps.zIndex;
@@ -15420,8 +15435,9 @@ var WeaveImageNode = class extends WeaveNode {
15420
15435
  image.dblClick = () => {
15421
15436
  if (this.imageState[id]?.loaded && !this.imageState[id]?.error) this.config.onDblClick?.(this, image);
15422
15437
  };
15423
- const hasFinalImageLoaded = this.imageSource[id] && imageProps.imageURL;
15424
- const hasFallbackAndFinalImageNotLoaded = !imageProps.imageURL && this.imageFallback[id] !== void 0 && this.config.imageFallback.enabled;
15438
+ const isImageFullyLoaded = this.imageState[id]?.status === "loaded" && this.imageState[id]?.loaded === true && !this.imageState[id]?.error;
15439
+ const hasFinalImageLoaded = this.imageSource[id] && imageProps.imageURL && isImageFullyLoaded;
15440
+ const hasFallbackAndFinalImageNotLoaded = !isImageFullyLoaded && this.imageFallback[id] !== void 0 && this.config.imageFallback.enabled;
15425
15441
  if (hasFinalImageLoaded || hasFallbackAndFinalImageNotLoaded) {
15426
15442
  imagePlaceholder?.destroy();
15427
15443
  const imageSource = hasFallbackAndFinalImageNotLoaded ? this.imageFallback[id] : this.imageSource[id];
@@ -15452,6 +15468,8 @@ var WeaveImageNode = class extends WeaveNode {
15452
15468
  loaded: true,
15453
15469
  error: false
15454
15470
  };
15471
+ if (hasFallbackAndFinalImageNotLoaded && imageProps.imageURL) this.loadImage(imageProps, image, false);
15472
+ if (hasFallbackAndFinalImageNotLoaded && !imageProps.imageURL) this.loadImage(imageProps, image, this.config.imageFallback.enabled);
15455
15473
  this.updateImageCrop(image);
15456
15474
  } else {
15457
15475
  this.updatePlaceholderSize(image);
@@ -25288,7 +25306,7 @@ var WeaveImagesToolAction = class extends WeaveAction {
25288
25306
  initInitialized = false;
25289
25307
  initialized = false;
25290
25308
  initialCursor = null;
25291
- nodesIds = [];
25309
+ nodesIds = new Set();
25292
25310
  toAdd = 0;
25293
25311
  imagesFile = [];
25294
25312
  imagesURL = [];
@@ -25516,15 +25534,15 @@ var WeaveImagesToolAction = class extends WeaveAction {
25516
25534
  let imagePositionX = originPoint.x;
25517
25535
  let imagePositionY = originPoint.y;
25518
25536
  let maxHeight = 0;
25519
- this.nodesIds = [];
25537
+ this.nodesIds = new Set();
25520
25538
  const images = [];
25521
25539
  const checkAddedImages = ({ nodeId }) => {
25522
- if (this.nodesIds.includes(nodeId)) this.handleImageAdded();
25540
+ if (this.nodesIds.has(nodeId)) this.handleImageAdded();
25523
25541
  if (this.getImagesAdded() <= 0) {
25524
25542
  this.setState(WEAVE_IMAGES_TOOL_STATE.FINISHED);
25525
25543
  this.cancelAction();
25526
25544
  this.instance.removeEventListener("onAddedImage", checkAddedImages);
25527
- this.instance.emitEvent("onAddedImages", { nodesIds: this.nodesIds });
25545
+ this.instance.emitEvent("onAddedImages", { nodesIds: Array.from(this.nodesIds) });
25528
25546
  }
25529
25547
  };
25530
25548
  this.instance.addEventListener("onAddedImage", checkAddedImages);
@@ -25568,7 +25586,7 @@ var WeaveImagesToolAction = class extends WeaveAction {
25568
25586
  x: imagePositionX,
25569
25587
  y: imagePositionY
25570
25588
  }));
25571
- this.nodesIds.push(nodeId);
25589
+ this.nodesIds.add(nodeId);
25572
25590
  maxHeight = Math.max(maxHeight, height);
25573
25591
  imagePositionX += imagesPadding + width;
25574
25592
  if ((i + 1) % layoutColumns === 0) {
@@ -25602,7 +25620,7 @@ var WeaveImagesToolAction = class extends WeaveAction {
25602
25620
  x: imagePositionX,
25603
25621
  y: imagePositionY
25604
25622
  }));
25605
- this.nodesIds.push(nodeId);
25623
+ this.nodesIds.add(nodeId);
25606
25624
  maxHeight = Math.max(maxHeight, image.height);
25607
25625
  imagePositionX += imagesPadding + image.width;
25608
25626
  if ((i + 1) % layoutColumns === 0) {
@@ -25611,8 +25629,8 @@ var WeaveImagesToolAction = class extends WeaveAction {
25611
25629
  maxHeight = 0;
25612
25630
  }
25613
25631
  }
25614
- if (this.nodesIds.length > 0) {
25615
- this.toAdd = this.nodesIds.length;
25632
+ if (this.nodesIds.size > 0) {
25633
+ this.toAdd = this.nodesIds.size;
25616
25634
  await Promise.allSettled(images);
25617
25635
  } else {
25618
25636
  this.setState(WEAVE_IMAGES_TOOL_STATE.FINISHED);
@@ -25627,19 +25645,19 @@ var WeaveImagesToolAction = class extends WeaveAction {
25627
25645
  if (selectionPlugin) selectionPlugin.setSelectedNodes([]);
25628
25646
  if (params?.position) this.setState(WEAVE_IMAGES_TOOL_STATE.SELECTED_POSITION);
25629
25647
  if (params?.container) this.container = params.container;
25630
- this.nodesIds = [];
25648
+ this.nodesIds = new Set();
25631
25649
  this.forceMainContainer = params.forceMainContainer ?? false;
25632
25650
  if (params.type === WEAVE_IMAGES_TOOL_UPLOAD_TYPE.FILE) {
25633
25651
  this.uploadType = WEAVE_IMAGES_TOOL_UPLOAD_TYPE.FILE;
25634
25652
  this.onStartUploading = params.onStartUploading;
25635
25653
  this.onFinishedUploading = params.onFinishedUploading;
25636
25654
  this.uploadImageFunction = params.uploadImageFunction;
25637
- this.nodesIds = [];
25655
+ this.nodesIds = new Set();
25638
25656
  this.imagesFile = params.images;
25639
25657
  }
25640
25658
  if (params.type === WEAVE_IMAGES_TOOL_UPLOAD_TYPE.IMAGE_URL) {
25641
25659
  this.uploadType = WEAVE_IMAGES_TOOL_UPLOAD_TYPE.IMAGE_URL;
25642
- this.nodesIds = [];
25660
+ this.nodesIds = new Set();
25643
25661
  this.imagesURL = params.images;
25644
25662
  }
25645
25663
  if (![WEAVE_IMAGES_TOOL_UPLOAD_TYPE.FILE, WEAVE_IMAGES_TOOL_UPLOAD_TYPE.IMAGE_URL].includes(params.type)) {
@@ -25660,21 +25678,28 @@ var WeaveImagesToolAction = class extends WeaveAction {
25660
25678
  }
25661
25679
  }
25662
25680
  }
25663
- cleanup() {
25681
+ async waitForImagesToBeAdded(nodesIds) {
25664
25682
  const stage = this.instance.getStage();
25665
- this.tempPointerFeedbackNode?.destroy();
25666
- this.tempPointerFeedbackNode = null;
25667
- this.instance.getUtilityLayer()?.batchDraw();
25668
25683
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
25669
25684
  if (selectionPlugin) {
25670
25685
  const addedNodes = [];
25671
- for (const nodeId of this.nodesIds) {
25686
+ for (const nodeId of Array.from(nodesIds)) {
25672
25687
  const node = stage.findOne(`#${nodeId}`);
25673
25688
  if (node) addedNodes.push(node);
25674
25689
  }
25675
25690
  selectionPlugin.setSelectedNodes(addedNodes);
25676
25691
  this.instance.triggerAction(SELECTION_TOOL_ACTION_NAME);
25677
25692
  }
25693
+ }
25694
+ cleanup() {
25695
+ const stage = this.instance.getStage();
25696
+ this.tempPointerFeedbackNode?.destroy();
25697
+ this.tempPointerFeedbackNode = null;
25698
+ this.instance.getUtilityLayer()?.batchDraw();
25699
+ const nodesIds = this.nodesIds;
25700
+ this.nodesIds = new Set();
25701
+ this.toAdd = 0;
25702
+ this.waitForImagesToBeAdded(nodesIds);
25678
25703
  this.instance.emitEvent("onFinishedImages");
25679
25704
  this.instance.endDrag(WEAVE_IMAGES_TOOL_ACTION_NAME);
25680
25705
  stage.container().style.cursor = "default";
@@ -25684,8 +25709,6 @@ var WeaveImagesToolAction = class extends WeaveAction {
25684
25709
  this.container = void 0;
25685
25710
  this.stageClickPoint = null;
25686
25711
  this.clickPoint = null;
25687
- this.nodesIds = [];
25688
- this.toAdd = 0;
25689
25712
  this.setState(WEAVE_IMAGES_TOOL_STATE.IDLE);
25690
25713
  }
25691
25714
  setCursor() {
@@ -33192,4 +33215,4 @@ function getJSONFromYjsBinary(actualState) {
33192
33215
  }
33193
33216
 
33194
33217
  //#endregion
33195
- 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 };
33218
+ 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, sleep, spreadLabelProps, weavejsToYjsBinary };
package/dist/sdk.node.js CHANGED
@@ -3715,6 +3715,9 @@ function getStageClickPoint(instance, pointerPos) {
3715
3715
  function isNumber(value) {
3716
3716
  return typeof value === "number" && !Number.isNaN(value);
3717
3717
  }
3718
+ function sleep(ms) {
3719
+ return new Promise((resolve) => setTimeout(resolve, ms));
3720
+ }
3718
3721
 
3719
3722
  //#endregion
3720
3723
  //#region src/plugins/users-selection/constants.ts
@@ -6607,7 +6610,12 @@ var WeaveNode = class {
6607
6610
  this.instance.emitEvent("onDrag", null);
6608
6611
  const realNodeTarget = this.getRealSelectedNode(nodeTarget);
6609
6612
  const isInGroupContext = (this.getSelectionPlugin()?.getActiveGroupContext() ?? null) !== null;
6610
- if (!isInGroupContext && this.isSelecting() && this.getSelectionPlugin()?.getSelectedNodes().length === 1 && (realNodeTarget.getAttrs().lockToContainer === void 0 || !realNodeTarget.getAttrs().lockToContainer)) this.instance.stateTransactional(() => {
6613
+ const shouldUpdateMove = this.isSelecting() && this.getSelectionPlugin()?.getSelectedNodes().length === 1 && (realNodeTarget.getAttrs().lockToContainer === void 0 || !realNodeTarget.getAttrs().lockToContainer);
6614
+ if (isInGroupContext && shouldUpdateMove) {
6615
+ if (realNodeTarget.getAttrs().isCloned) this.instance.getCloningManager().removeClone(realNodeTarget);
6616
+ this.instance.updateNodeNT(this.serialize(realNodeTarget));
6617
+ }
6618
+ if (!isInGroupContext && shouldUpdateMove) this.instance.stateTransactional(() => {
6611
6619
  clearContainerTargets(this.instance);
6612
6620
  const layerToMove = containerOverCursor(this.instance, [realNodeTarget]);
6613
6621
  let containerToMove = this.instance.getMainLayer();
@@ -8554,14 +8562,17 @@ var WeaveGroupsManager = class {
8554
8562
  if (konvaGroup) {
8555
8563
  const nodePos = konvaGroup.getAbsolutePosition();
8556
8564
  const nodeRotation = konvaGroup.getAbsoluteRotation();
8565
+ const newId = v4_default();
8557
8566
  konvaGroup.moveTo(groupInstance);
8558
8567
  konvaGroup.setAbsolutePosition(nodePos);
8559
8568
  konvaGroup.rotation(nodeRotation);
8560
8569
  konvaGroup.zIndex(index);
8561
- konvaGroup.setAttr("id", v4_default());
8570
+ konvaGroup.setAttr("id", newId);
8562
8571
  konvaGroup.setAttr("draggable", false);
8563
8572
  const handler = this.instance.getNodeHandler("group");
8564
8573
  if (handler) {
8574
+ this.instance.removeNodeNT(groupChild, { emitUserChangeEvent: false });
8575
+ konvaGroup.setAttr("id", groupChild.key);
8565
8576
  const stateNode = handler.serialize(konvaGroup);
8566
8577
  this.instance.addNodeNT(stateNode, groupId, { emitUserChangeEvent: false });
8567
8578
  }
@@ -8572,20 +8583,22 @@ var WeaveGroupsManager = class {
8572
8583
  if (konvaNode) {
8573
8584
  const nodePos = konvaNode.getAbsolutePosition();
8574
8585
  const nodeRotation = konvaNode.getAbsoluteRotation();
8586
+ const newId = v4_default();
8575
8587
  konvaNode.moveTo(groupInstance);
8576
8588
  konvaNode.setAbsolutePosition(nodePos);
8577
8589
  konvaNode.rotation(nodeRotation);
8578
8590
  konvaNode.zIndex(index);
8579
- konvaNode.setAttr("id", v4_default());
8591
+ konvaNode.setAttr("id", newId);
8580
8592
  konvaNode.setAttr("draggable", false);
8581
8593
  const handler = this.instance.getNodeHandler(konvaNode.getAttrs().nodeType);
8582
8594
  if (handler) {
8595
+ this.instance.removeNodeNT(node, { emitUserChangeEvent: false });
8596
+ konvaNode.setAttr("id", node.key);
8583
8597
  const stateNode = handler.serialize(konvaNode);
8584
8598
  this.instance.addNodeNT(stateNode, groupId, { emitUserChangeEvent: false });
8585
8599
  }
8586
8600
  }
8587
8601
  }
8588
- this.instance.removeNodes(sortedNodesByZIndex);
8589
8602
  groupInstance.destroy();
8590
8603
  const groupNode = stage.findOne(`#${groupId}`);
8591
8604
  if (groupHandler && groupNode) {
@@ -8603,7 +8616,7 @@ var WeaveGroupsManager = class {
8603
8616
  tr.show();
8604
8617
  tr.forceUpdate();
8605
8618
  }
8606
- }, 0);
8619
+ }, 10);
8607
8620
  });
8608
8621
  }
8609
8622
  unGroup(group) {
@@ -9687,7 +9700,7 @@ var WeaveRegisterManager = class {
9687
9700
 
9688
9701
  //#endregion
9689
9702
  //#region package.json
9690
- var version = "5.0.0-SNAPSHOT.413.1";
9703
+ var version = "5.1.0-SNAPSHOT.424.1";
9691
9704
 
9692
9705
  //#endregion
9693
9706
  //#region src/managers/setup.ts
@@ -10129,7 +10142,8 @@ var WeaveExportManager = class {
10129
10142
  fill: backgroundColor
10130
10143
  });
10131
10144
  const exportGroup = new Konva.Group();
10132
- if (!exportArea) {
10145
+ if (exportArea) mainLayer.add(background);
10146
+ else {
10133
10147
  exportGroup.add(background);
10134
10148
  for (const node of nodes) {
10135
10149
  const clonedNode = node.clone({ id: v4_default() });
@@ -10141,7 +10155,7 @@ var WeaveExportManager = class {
10141
10155
  exportGroup.add(clonedNode);
10142
10156
  }
10143
10157
  mainLayer.add(exportGroup);
10144
- } else mainLayer.add(background);
10158
+ }
10145
10159
  const backgroundRect = background.getClientRect();
10146
10160
  stage.batchDraw();
10147
10161
  const { pixelRatio: finalPixelRatio } = this.fitKonvaPixelRatio(Math.round(backgroundRect.width), Math.round(backgroundRect.height), pixelRatio);
@@ -15218,8 +15232,8 @@ var WeaveImageNode = class extends WeaveNode {
15218
15232
  if (this.config.imageFallback.enabled) {
15219
15233
  const imageFallbackId = this.config.imageFallback.getId(params);
15220
15234
  let finalDataURL = "";
15221
- if (!dataURL) finalDataURL = this.config.imageFallback.getDataURL(imageFallbackId);
15222
- else finalDataURL = dataURL;
15235
+ if (dataURL) finalDataURL = dataURL;
15236
+ else finalDataURL = this.config.imageFallback.getDataURL(imageFallbackId);
15223
15237
  this.imageFallbackURL[imageFallbackId] = finalDataURL;
15224
15238
  }
15225
15239
  }
@@ -15240,7 +15254,7 @@ var WeaveImageNode = class extends WeaveNode {
15240
15254
  this.setupNotUsedImagesCleanup();
15241
15255
  };
15242
15256
  const bindedCleanupHandler = cleanupHandler.bind(this);
15243
- if (!this.notUsedImagesCleanup) this.notUsedImagesCleanup = setTimeout(bindedCleanupHandler, this.config.cleanup.intervalMs);
15257
+ this.notUsedImagesCleanup ??= setTimeout(bindedCleanupHandler, this.config.cleanup.intervalMs);
15244
15258
  }
15245
15259
  preloadCursors() {
15246
15260
  return new Promise((resolve) => {
@@ -15323,6 +15337,7 @@ var WeaveImageNode = class extends WeaveNode {
15323
15337
  const imageProps = props;
15324
15338
  const { id } = imageProps;
15325
15339
  const groupImageProps = { ...imageProps };
15340
+ delete groupImageProps.name;
15326
15341
  delete groupImageProps.children;
15327
15342
  delete groupImageProps.imageProperties;
15328
15343
  delete groupImageProps.zIndex;
@@ -15419,8 +15434,9 @@ var WeaveImageNode = class extends WeaveNode {
15419
15434
  image.dblClick = () => {
15420
15435
  if (this.imageState[id]?.loaded && !this.imageState[id]?.error) this.config.onDblClick?.(this, image);
15421
15436
  };
15422
- const hasFinalImageLoaded = this.imageSource[id] && imageProps.imageURL;
15423
- const hasFallbackAndFinalImageNotLoaded = !imageProps.imageURL && this.imageFallback[id] !== void 0 && this.config.imageFallback.enabled;
15437
+ const isImageFullyLoaded = this.imageState[id]?.status === "loaded" && this.imageState[id]?.loaded === true && !this.imageState[id]?.error;
15438
+ const hasFinalImageLoaded = this.imageSource[id] && imageProps.imageURL && isImageFullyLoaded;
15439
+ const hasFallbackAndFinalImageNotLoaded = !isImageFullyLoaded && this.imageFallback[id] !== void 0 && this.config.imageFallback.enabled;
15424
15440
  if (hasFinalImageLoaded || hasFallbackAndFinalImageNotLoaded) {
15425
15441
  imagePlaceholder?.destroy();
15426
15442
  const imageSource = hasFallbackAndFinalImageNotLoaded ? this.imageFallback[id] : this.imageSource[id];
@@ -15451,6 +15467,8 @@ var WeaveImageNode = class extends WeaveNode {
15451
15467
  loaded: true,
15452
15468
  error: false
15453
15469
  };
15470
+ if (hasFallbackAndFinalImageNotLoaded && imageProps.imageURL) this.loadImage(imageProps, image, false);
15471
+ if (hasFallbackAndFinalImageNotLoaded && !imageProps.imageURL) this.loadImage(imageProps, image, this.config.imageFallback.enabled);
15454
15472
  this.updateImageCrop(image);
15455
15473
  } else {
15456
15474
  this.updatePlaceholderSize(image);
@@ -25287,7 +25305,7 @@ var WeaveImagesToolAction = class extends WeaveAction {
25287
25305
  initInitialized = false;
25288
25306
  initialized = false;
25289
25307
  initialCursor = null;
25290
- nodesIds = [];
25308
+ nodesIds = new Set();
25291
25309
  toAdd = 0;
25292
25310
  imagesFile = [];
25293
25311
  imagesURL = [];
@@ -25515,15 +25533,15 @@ var WeaveImagesToolAction = class extends WeaveAction {
25515
25533
  let imagePositionX = originPoint.x;
25516
25534
  let imagePositionY = originPoint.y;
25517
25535
  let maxHeight = 0;
25518
- this.nodesIds = [];
25536
+ this.nodesIds = new Set();
25519
25537
  const images = [];
25520
25538
  const checkAddedImages = ({ nodeId }) => {
25521
- if (this.nodesIds.includes(nodeId)) this.handleImageAdded();
25539
+ if (this.nodesIds.has(nodeId)) this.handleImageAdded();
25522
25540
  if (this.getImagesAdded() <= 0) {
25523
25541
  this.setState(WEAVE_IMAGES_TOOL_STATE.FINISHED);
25524
25542
  this.cancelAction();
25525
25543
  this.instance.removeEventListener("onAddedImage", checkAddedImages);
25526
- this.instance.emitEvent("onAddedImages", { nodesIds: this.nodesIds });
25544
+ this.instance.emitEvent("onAddedImages", { nodesIds: Array.from(this.nodesIds) });
25527
25545
  }
25528
25546
  };
25529
25547
  this.instance.addEventListener("onAddedImage", checkAddedImages);
@@ -25567,7 +25585,7 @@ var WeaveImagesToolAction = class extends WeaveAction {
25567
25585
  x: imagePositionX,
25568
25586
  y: imagePositionY
25569
25587
  }));
25570
- this.nodesIds.push(nodeId);
25588
+ this.nodesIds.add(nodeId);
25571
25589
  maxHeight = Math.max(maxHeight, height);
25572
25590
  imagePositionX += imagesPadding + width;
25573
25591
  if ((i + 1) % layoutColumns === 0) {
@@ -25601,7 +25619,7 @@ var WeaveImagesToolAction = class extends WeaveAction {
25601
25619
  x: imagePositionX,
25602
25620
  y: imagePositionY
25603
25621
  }));
25604
- this.nodesIds.push(nodeId);
25622
+ this.nodesIds.add(nodeId);
25605
25623
  maxHeight = Math.max(maxHeight, image.height);
25606
25624
  imagePositionX += imagesPadding + image.width;
25607
25625
  if ((i + 1) % layoutColumns === 0) {
@@ -25610,8 +25628,8 @@ var WeaveImagesToolAction = class extends WeaveAction {
25610
25628
  maxHeight = 0;
25611
25629
  }
25612
25630
  }
25613
- if (this.nodesIds.length > 0) {
25614
- this.toAdd = this.nodesIds.length;
25631
+ if (this.nodesIds.size > 0) {
25632
+ this.toAdd = this.nodesIds.size;
25615
25633
  await Promise.allSettled(images);
25616
25634
  } else {
25617
25635
  this.setState(WEAVE_IMAGES_TOOL_STATE.FINISHED);
@@ -25626,19 +25644,19 @@ var WeaveImagesToolAction = class extends WeaveAction {
25626
25644
  if (selectionPlugin) selectionPlugin.setSelectedNodes([]);
25627
25645
  if (params?.position) this.setState(WEAVE_IMAGES_TOOL_STATE.SELECTED_POSITION);
25628
25646
  if (params?.container) this.container = params.container;
25629
- this.nodesIds = [];
25647
+ this.nodesIds = new Set();
25630
25648
  this.forceMainContainer = params.forceMainContainer ?? false;
25631
25649
  if (params.type === WEAVE_IMAGES_TOOL_UPLOAD_TYPE.FILE) {
25632
25650
  this.uploadType = WEAVE_IMAGES_TOOL_UPLOAD_TYPE.FILE;
25633
25651
  this.onStartUploading = params.onStartUploading;
25634
25652
  this.onFinishedUploading = params.onFinishedUploading;
25635
25653
  this.uploadImageFunction = params.uploadImageFunction;
25636
- this.nodesIds = [];
25654
+ this.nodesIds = new Set();
25637
25655
  this.imagesFile = params.images;
25638
25656
  }
25639
25657
  if (params.type === WEAVE_IMAGES_TOOL_UPLOAD_TYPE.IMAGE_URL) {
25640
25658
  this.uploadType = WEAVE_IMAGES_TOOL_UPLOAD_TYPE.IMAGE_URL;
25641
- this.nodesIds = [];
25659
+ this.nodesIds = new Set();
25642
25660
  this.imagesURL = params.images;
25643
25661
  }
25644
25662
  if (![WEAVE_IMAGES_TOOL_UPLOAD_TYPE.FILE, WEAVE_IMAGES_TOOL_UPLOAD_TYPE.IMAGE_URL].includes(params.type)) {
@@ -25659,21 +25677,28 @@ var WeaveImagesToolAction = class extends WeaveAction {
25659
25677
  }
25660
25678
  }
25661
25679
  }
25662
- cleanup() {
25680
+ async waitForImagesToBeAdded(nodesIds) {
25663
25681
  const stage = this.instance.getStage();
25664
- this.tempPointerFeedbackNode?.destroy();
25665
- this.tempPointerFeedbackNode = null;
25666
- this.instance.getUtilityLayer()?.batchDraw();
25667
25682
  const selectionPlugin = this.instance.getPlugin("nodesSelection");
25668
25683
  if (selectionPlugin) {
25669
25684
  const addedNodes = [];
25670
- for (const nodeId of this.nodesIds) {
25685
+ for (const nodeId of Array.from(nodesIds)) {
25671
25686
  const node = stage.findOne(`#${nodeId}`);
25672
25687
  if (node) addedNodes.push(node);
25673
25688
  }
25674
25689
  selectionPlugin.setSelectedNodes(addedNodes);
25675
25690
  this.instance.triggerAction(SELECTION_TOOL_ACTION_NAME);
25676
25691
  }
25692
+ }
25693
+ cleanup() {
25694
+ const stage = this.instance.getStage();
25695
+ this.tempPointerFeedbackNode?.destroy();
25696
+ this.tempPointerFeedbackNode = null;
25697
+ this.instance.getUtilityLayer()?.batchDraw();
25698
+ const nodesIds = this.nodesIds;
25699
+ this.nodesIds = new Set();
25700
+ this.toAdd = 0;
25701
+ this.waitForImagesToBeAdded(nodesIds);
25677
25702
  this.instance.emitEvent("onFinishedImages");
25678
25703
  this.instance.endDrag(WEAVE_IMAGES_TOOL_ACTION_NAME);
25679
25704
  stage.container().style.cursor = "default";
@@ -25683,8 +25708,6 @@ var WeaveImagesToolAction = class extends WeaveAction {
25683
25708
  this.container = void 0;
25684
25709
  this.stageClickPoint = null;
25685
25710
  this.clickPoint = null;
25686
- this.nodesIds = [];
25687
- this.toAdd = 0;
25688
25711
  this.setState(WEAVE_IMAGES_TOOL_STATE.IDLE);
25689
25712
  }
25690
25713
  setCursor() {
@@ -33172,4 +33195,4 @@ const setupCanvasBackend = async () => {
33172
33195
  };
33173
33196
 
33174
33197
  //#endregion
33175
- 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, getSelectedNodesMetadata, getShapeLabelSchemaFields, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, instantiatePreset, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isNumber, isServer, labelId, loadImageSource, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, setupCanvasBackend, setupSkiaBackend, spreadLabelProps };
33198
+ 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, getSelectedNodesMetadata, getShapeLabelSchemaFields, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, instantiatePreset, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isNumber, isServer, labelId, loadImageSource, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, setupCanvasBackend, setupSkiaBackend, sleep, spreadLabelProps };