@inditextech/weave-sdk 3.2.3 → 3.2.4

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
@@ -21971,7 +21971,7 @@ var WeaveRegisterManager = class {
21971
21971
 
21972
21972
  //#endregion
21973
21973
  //#region package.json
21974
- var version = "3.2.3";
21974
+ var version = "3.2.4";
21975
21975
 
21976
21976
  //#endregion
21977
21977
  //#region src/managers/setup.ts
@@ -25722,13 +25722,57 @@ var WeaveImageCrop = class WeaveImageCrop {
25722
25722
  };
25723
25723
 
25724
25724
  //#endregion
25725
- //#region src/nodes/image/utils.ts
25726
- const extractCursorUrl = (cursor, fallback) => {
25725
+ //#region src/utils/cursors.ts
25726
+ const doPreloadCursors = async (cursorsToPreload, setCursor, getFallbackCursor, resetCursors) => {
25727
+ resetCursors();
25728
+ const promiseHandler = (state, value, src) => new Promise((resolveInt, rejectInt) => {
25729
+ const img = Konva.Util.createImageElement();
25730
+ img.onload = () => {
25731
+ const canvas = document.createElement("canvas");
25732
+ canvas.width = img.width;
25733
+ canvas.height = img.height;
25734
+ const ctx = canvas.getContext("2d");
25735
+ ctx?.drawImage(img, 0, 0);
25736
+ const dataURL = canvas.toDataURL("image/png");
25737
+ const tokens = value.split(" ");
25738
+ tokens[0] = `url(${dataURL})`;
25739
+ setCursor(state, tokens.join(" "));
25740
+ resolveInt();
25741
+ };
25742
+ img.onerror = () => {
25743
+ setCursor(state, getFallbackCursor(state));
25744
+ rejectInt(new Error(`Failed to load cursor: ${src}`));
25745
+ };
25746
+ img.src = src;
25747
+ });
25748
+ return new Promise((resolve) => {
25749
+ (async () => {
25750
+ const cursors = Object.keys(cursorsToPreload);
25751
+ const cursorUrls = [];
25752
+ for (const cursorKey of cursors) {
25753
+ const cursorValue = cursorsToPreload[cursorKey];
25754
+ const { preload, cursor } = extractCursorUrl(cursorValue);
25755
+ if (preload) cursorUrls.push({
25756
+ state: cursorKey,
25757
+ value: cursorValue,
25758
+ src: cursor
25759
+ });
25760
+ }
25761
+ if (cursorUrls.length > 0) {
25762
+ const cursorsPreloading = [];
25763
+ for (const { state, value, src } of cursorUrls) cursorsPreloading.push(promiseHandler(state, value, src));
25764
+ await Promise.allSettled(cursorsPreloading);
25765
+ }
25766
+ resolve();
25767
+ })();
25768
+ });
25769
+ };
25770
+ const extractCursorUrl = (cursor) => {
25727
25771
  const lower = cursor.toLowerCase();
25728
25772
  const start = lower.indexOf("url(");
25729
25773
  if (start === -1) return {
25730
25774
  preload: false,
25731
- cursor
25775
+ cursor: null
25732
25776
  };
25733
25777
  let i = start + 4;
25734
25778
  const len = cursor.length;
@@ -25741,25 +25785,20 @@ const extractCursorUrl = (cursor, fallback) => {
25741
25785
  let buf = "";
25742
25786
  for (; i < len; i++) {
25743
25787
  const ch = cursor[i];
25744
- if (quote) {
25745
- if (ch === quote) {
25746
- i++;
25747
- break;
25748
- }
25749
- buf += ch;
25750
- } else {
25788
+ if (quote && ch === quote) {
25789
+ i++;
25790
+ break;
25791
+ }
25792
+ if (quote) buf += ch;
25793
+ else {
25751
25794
  if (ch === ")") break;
25752
25795
  buf += ch;
25753
25796
  }
25754
25797
  }
25755
25798
  const url = buf.trim();
25756
- if (!url) return {
25799
+ if (!url || url && !isAllowedUrl(url)) return {
25757
25800
  preload: false,
25758
- cursor: fallback
25759
- };
25760
- if (!isAllowedUrl(url)) return {
25761
- preload: false,
25762
- cursor: fallback
25801
+ cursor: null
25763
25802
  };
25764
25803
  return {
25765
25804
  preload: true,
@@ -25782,6 +25821,8 @@ var WeaveImageNode = class extends WeaveNode {
25782
25821
  imageTryoutAttempts = {};
25783
25822
  imageTryoutIds = {};
25784
25823
  nodeType = WEAVE_IMAGE_NODE_TYPE;
25824
+ cursorsFallback = { loading: "wait" };
25825
+ cursors = {};
25785
25826
  constructor(params) {
25786
25827
  super();
25787
25828
  const { config } = params ?? {};
@@ -25800,31 +25841,15 @@ var WeaveImageNode = class extends WeaveNode {
25800
25841
  this.imageFallback = {};
25801
25842
  }
25802
25843
  preloadCursors() {
25803
- const promiseHandler = (src) => new Promise((resolveInt, rejectInt) => {
25804
- const img = Konva.Util.createImageElement();
25805
- img.onload = () => {
25806
- resolveInt();
25807
- };
25808
- img.onerror = () => {
25809
- rejectInt(new Error(`Failed to load cursor image: ${src}`));
25810
- };
25811
- img.src = src;
25812
- });
25813
25844
  return new Promise((resolve) => {
25814
25845
  (async () => {
25815
- const cursors = Object.keys(this.config.style.cursor);
25816
- const cursorUrls = [];
25817
- const cursorFallback = { loading: "wait" };
25818
- for (const cursorKey of cursors) {
25819
- const cursorValue = this.config.style.cursor[cursorKey];
25820
- const { preload, cursor } = extractCursorUrl(cursorValue, cursorFallback[cursorKey]);
25821
- if (preload) cursorUrls.push({ src: cursor });
25822
- }
25823
- if (cursorUrls.length > 0) {
25824
- const cursorsPreloading = [];
25825
- for (const { src } of cursorUrls) cursorsPreloading.push(promiseHandler(src));
25826
- await Promise.allSettled(cursorsPreloading);
25827
- }
25846
+ await doPreloadCursors(this.config.style.cursor, (state, cursor) => {
25847
+ this.cursors[state] = cursor;
25848
+ }, (state) => {
25849
+ return this.cursorsFallback[state] || "default";
25850
+ }, () => {
25851
+ this.cursors = {};
25852
+ });
25828
25853
  resolve();
25829
25854
  })();
25830
25855
  });
@@ -25908,7 +25933,7 @@ var WeaveImageNode = class extends WeaveNode {
25908
25933
  });
25909
25934
  this.setupDefaultNodeAugmentation(image);
25910
25935
  image.defineMousePointer = () => {
25911
- if (this.imageState[id]?.status === "loading") return this.config.style.cursor.loading;
25936
+ if (this.imageState[id]?.status === "loading") return this.cursors["loading"];
25912
25937
  const selectedNodes = this.getSelectionPlugin()?.getSelectedNodes() ?? [];
25913
25938
  if (this.isSelecting() && selectedNodes.includes(image)) return "grab";
25914
25939
  return "pointer";
@@ -25991,15 +26016,17 @@ var WeaveImageNode = class extends WeaveNode {
25991
26016
  image.dblClick = () => {
25992
26017
  if (this.imageState[id]?.loaded && !this.imageState[id]?.error) this.config.onDblClick?.(this, image);
25993
26018
  };
25994
- if (this.imageSource[id] && imageProps.imageURL) {
26019
+ const hasFinalImageLoaded = this.imageSource[id] && imageProps.imageURL;
26020
+ const hasFallbackAndFinalImageNotLoaded = !imageProps.imageURL && this.imageFallback[id] && this.config.useFallbackImage;
26021
+ if (hasFinalImageLoaded || hasFallbackAndFinalImageNotLoaded) {
25995
26022
  imagePlaceholder?.destroy();
25996
- const imageSource = this.imageSource[id];
26023
+ const imageSource = hasFallbackAndFinalImageNotLoaded ? this.imageFallback[id] : this.imageSource[id];
25997
26024
  internalImage.setAttrs({
25998
26025
  image: imageSource,
25999
26026
  visible: true
26000
26027
  });
26001
- let sourceImageWidth = this.imageSource[id].width;
26002
- let sourceImageHeight = this.imageSource[id].height;
26028
+ let sourceImageWidth = imageSource.width;
26029
+ let sourceImageHeight = imageSource.height;
26003
26030
  if (image.getAttrs().imageInfo) {
26004
26031
  sourceImageWidth = image.getAttrs().imageInfo.width;
26005
26032
  sourceImageHeight = image.getAttrs().imageInfo.height;
@@ -26017,7 +26044,7 @@ var WeaveImageNode = class extends WeaveNode {
26017
26044
  height: sourceImageHeight
26018
26045
  });
26019
26046
  this.imageState[id] = {
26020
- status: "loaded",
26047
+ status: hasFallbackAndFinalImageNotLoaded ? "loading" : "loaded",
26021
26048
  loaded: true,
26022
26049
  error: false
26023
26050
  };
@@ -26620,12 +26647,16 @@ var WeaveImageNode = class extends WeaveNode {
26620
26647
  const nodeId = nodeInstance.getAttrs().id ?? "";
26621
26648
  const isMoveContainer = nodeInstance.getAttr("onMoveContainer");
26622
26649
  nodeInstance.setAttr("onMoveContainer", void 0);
26650
+ if (this.imageTryoutIds[nodeId]) {
26651
+ clearTimeout(this.imageTryoutIds[nodeId]);
26652
+ delete this.imageTryoutIds[nodeId];
26653
+ }
26623
26654
  if (!isMoveContainer) {
26624
26655
  delete this.imageSource[nodeId];
26625
26656
  delete this.imageState[nodeId];
26657
+ delete this.imageTryoutAttempts[nodeId];
26658
+ delete this.imageFallback[nodeId];
26626
26659
  }
26627
- delete this.imageTryoutAttempts[nodeId];
26628
- delete this.imageFallback[nodeId];
26629
26660
  nodeInstance.destroy();
26630
26661
  }
26631
26662
  };
@@ -36050,50 +36081,17 @@ var WeaveCommentToolAction = class extends WeaveAction {
36050
36081
  opacity: 1
36051
36082
  };
36052
36083
  }
36053
- extractCursorUrl(cursor) {
36054
- const lower = cursor.toLowerCase();
36055
- const start = lower.indexOf("url(");
36056
- if (start === -1) return null;
36057
- let i = start + 4;
36058
- const len = cursor.length;
36059
- while (i < len && /\s/.test(cursor[i])) i++;
36060
- let quote = null;
36061
- if (cursor[i] === "\"" || cursor[i] === "'") {
36062
- quote = cursor[i];
36063
- i++;
36064
- }
36065
- let buf = "";
36066
- for (; i < len; i++) {
36067
- const ch = cursor[i];
36068
- if (quote) {
36069
- if (ch === quote) {
36070
- i++;
36071
- break;
36072
- }
36073
- buf += ch;
36074
- } else {
36075
- if (ch === ")") break;
36076
- buf += ch;
36077
- }
36078
- }
36079
- const url = buf.trim();
36080
- if (!url) return null;
36081
- return this.isAllowedUrl(url) ? url : null;
36082
- }
36083
- isAllowedUrl(value) {
36084
- if (/^https?:\/\//i.test(value)) return true;
36085
- if (/^(javascript|data|blob|ftp):/i.test(value)) return false;
36086
- return true;
36087
- }
36088
36084
  preloadCursors() {
36089
36085
  const stage = this.instance.getStage();
36090
- const cursorUrls = [{
36091
- src: this.extractCursorUrl(this.config.style.cursor.add) ?? "",
36092
- cursor: this.config.style.cursor.add
36093
- }, {
36094
- src: this.extractCursorUrl(this.config.style.cursor.block) ?? "",
36095
- cursor: this.config.style.cursor.block
36096
- }];
36086
+ const cursorUrls = [];
36087
+ for (const cursorKey in this.config.style.cursor) {
36088
+ const cursorValue = this.config.style.cursor[cursorKey];
36089
+ const { preload, cursor } = extractCursorUrl(this.config.style.cursor.add) ?? "";
36090
+ if (preload) cursorUrls.push({
36091
+ src: cursor,
36092
+ cursor: cursorValue
36093
+ });
36094
+ }
36097
36095
  const actualCursor = stage.container().style.cursor;
36098
36096
  cursorUrls.forEach(({ src, cursor }) => {
36099
36097
  const img = Konva.Util.createImageElement();
@@ -39847,4 +39845,4 @@ function getJSONFromYjsBinary(actualState) {
39847
39845
  }
39848
39846
 
39849
39847
  //#endregion
39850
- 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, 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_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_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_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_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, WeaveImagesToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, WeaveMoveToolAction, WeaveNode, WeaveNodesDistanceSnappingPlugin, WeaveNodesEdgeSnappingPlugin, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeavePenToolAction, WeavePlugin, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveRenderer, 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, downscaleImageFile, downscaleImageFromURL, getBoundingBox, getDownscaleRatio, getExportBoundingBox, getImageSizeFromFile, getJSONFromYjsBinary, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isArray, isIOS, isInShadowDOM, isNodeInSelection, isObject, isServer, loadImageSource, mapJsonToYjsArray, mapJsonToYjsElements, mapJsonToYjsMap, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, weavejsToYjsBinary };
39848
+ 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, 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_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_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_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_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_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, WeaveImageNode, WeaveImageToolAction, WeaveImagesToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, WeaveMoveToolAction, WeaveNode, WeaveNodesDistanceSnappingPlugin, WeaveNodesEdgeSnappingPlugin, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeavePenToolAction, WeavePlugin, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveRenderer, 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, downscaleImageFile, downscaleImageFromURL, getBoundingBox, getDownscaleRatio, getExportBoundingBox, getImageSizeFromFile, getJSONFromYjsBinary, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isArray, isIOS, isInShadowDOM, isNodeInSelection, isObject, isServer, loadImageSource, mapJsonToYjsArray, mapJsonToYjsElements, mapJsonToYjsMap, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, weavejsToYjsBinary };
package/dist/sdk.node.js CHANGED
@@ -21970,7 +21970,7 @@ var WeaveRegisterManager = class {
21970
21970
 
21971
21971
  //#endregion
21972
21972
  //#region package.json
21973
- var version = "3.2.3";
21973
+ var version = "3.2.4";
21974
21974
 
21975
21975
  //#endregion
21976
21976
  //#region src/managers/setup.ts
@@ -25721,13 +25721,57 @@ var WeaveImageCrop = class WeaveImageCrop {
25721
25721
  };
25722
25722
 
25723
25723
  //#endregion
25724
- //#region src/nodes/image/utils.ts
25725
- const extractCursorUrl = (cursor, fallback) => {
25724
+ //#region src/utils/cursors.ts
25725
+ const doPreloadCursors = async (cursorsToPreload, setCursor, getFallbackCursor, resetCursors) => {
25726
+ resetCursors();
25727
+ const promiseHandler = (state, value, src) => new Promise((resolveInt, rejectInt) => {
25728
+ const img = Konva.Util.createImageElement();
25729
+ img.onload = () => {
25730
+ const canvas = document.createElement("canvas");
25731
+ canvas.width = img.width;
25732
+ canvas.height = img.height;
25733
+ const ctx = canvas.getContext("2d");
25734
+ ctx?.drawImage(img, 0, 0);
25735
+ const dataURL = canvas.toDataURL("image/png");
25736
+ const tokens = value.split(" ");
25737
+ tokens[0] = `url(${dataURL})`;
25738
+ setCursor(state, tokens.join(" "));
25739
+ resolveInt();
25740
+ };
25741
+ img.onerror = () => {
25742
+ setCursor(state, getFallbackCursor(state));
25743
+ rejectInt(new Error(`Failed to load cursor: ${src}`));
25744
+ };
25745
+ img.src = src;
25746
+ });
25747
+ return new Promise((resolve) => {
25748
+ (async () => {
25749
+ const cursors = Object.keys(cursorsToPreload);
25750
+ const cursorUrls = [];
25751
+ for (const cursorKey of cursors) {
25752
+ const cursorValue = cursorsToPreload[cursorKey];
25753
+ const { preload, cursor } = extractCursorUrl(cursorValue);
25754
+ if (preload) cursorUrls.push({
25755
+ state: cursorKey,
25756
+ value: cursorValue,
25757
+ src: cursor
25758
+ });
25759
+ }
25760
+ if (cursorUrls.length > 0) {
25761
+ const cursorsPreloading = [];
25762
+ for (const { state, value, src } of cursorUrls) cursorsPreloading.push(promiseHandler(state, value, src));
25763
+ await Promise.allSettled(cursorsPreloading);
25764
+ }
25765
+ resolve();
25766
+ })();
25767
+ });
25768
+ };
25769
+ const extractCursorUrl = (cursor) => {
25726
25770
  const lower = cursor.toLowerCase();
25727
25771
  const start = lower.indexOf("url(");
25728
25772
  if (start === -1) return {
25729
25773
  preload: false,
25730
- cursor
25774
+ cursor: null
25731
25775
  };
25732
25776
  let i = start + 4;
25733
25777
  const len = cursor.length;
@@ -25740,25 +25784,20 @@ const extractCursorUrl = (cursor, fallback) => {
25740
25784
  let buf = "";
25741
25785
  for (; i < len; i++) {
25742
25786
  const ch = cursor[i];
25743
- if (quote) {
25744
- if (ch === quote) {
25745
- i++;
25746
- break;
25747
- }
25748
- buf += ch;
25749
- } else {
25787
+ if (quote && ch === quote) {
25788
+ i++;
25789
+ break;
25790
+ }
25791
+ if (quote) buf += ch;
25792
+ else {
25750
25793
  if (ch === ")") break;
25751
25794
  buf += ch;
25752
25795
  }
25753
25796
  }
25754
25797
  const url = buf.trim();
25755
- if (!url) return {
25798
+ if (!url || url && !isAllowedUrl(url)) return {
25756
25799
  preload: false,
25757
- cursor: fallback
25758
- };
25759
- if (!isAllowedUrl(url)) return {
25760
- preload: false,
25761
- cursor: fallback
25800
+ cursor: null
25762
25801
  };
25763
25802
  return {
25764
25803
  preload: true,
@@ -25781,6 +25820,8 @@ var WeaveImageNode = class extends WeaveNode {
25781
25820
  imageTryoutAttempts = {};
25782
25821
  imageTryoutIds = {};
25783
25822
  nodeType = WEAVE_IMAGE_NODE_TYPE;
25823
+ cursorsFallback = { loading: "wait" };
25824
+ cursors = {};
25784
25825
  constructor(params) {
25785
25826
  super();
25786
25827
  const { config } = params ?? {};
@@ -25799,31 +25840,15 @@ var WeaveImageNode = class extends WeaveNode {
25799
25840
  this.imageFallback = {};
25800
25841
  }
25801
25842
  preloadCursors() {
25802
- const promiseHandler = (src) => new Promise((resolveInt, rejectInt) => {
25803
- const img = Konva.Util.createImageElement();
25804
- img.onload = () => {
25805
- resolveInt();
25806
- };
25807
- img.onerror = () => {
25808
- rejectInt(new Error(`Failed to load cursor image: ${src}`));
25809
- };
25810
- img.src = src;
25811
- });
25812
25843
  return new Promise((resolve) => {
25813
25844
  (async () => {
25814
- const cursors = Object.keys(this.config.style.cursor);
25815
- const cursorUrls = [];
25816
- const cursorFallback = { loading: "wait" };
25817
- for (const cursorKey of cursors) {
25818
- const cursorValue = this.config.style.cursor[cursorKey];
25819
- const { preload, cursor } = extractCursorUrl(cursorValue, cursorFallback[cursorKey]);
25820
- if (preload) cursorUrls.push({ src: cursor });
25821
- }
25822
- if (cursorUrls.length > 0) {
25823
- const cursorsPreloading = [];
25824
- for (const { src } of cursorUrls) cursorsPreloading.push(promiseHandler(src));
25825
- await Promise.allSettled(cursorsPreloading);
25826
- }
25845
+ await doPreloadCursors(this.config.style.cursor, (state, cursor) => {
25846
+ this.cursors[state] = cursor;
25847
+ }, (state) => {
25848
+ return this.cursorsFallback[state] || "default";
25849
+ }, () => {
25850
+ this.cursors = {};
25851
+ });
25827
25852
  resolve();
25828
25853
  })();
25829
25854
  });
@@ -25907,7 +25932,7 @@ var WeaveImageNode = class extends WeaveNode {
25907
25932
  });
25908
25933
  this.setupDefaultNodeAugmentation(image);
25909
25934
  image.defineMousePointer = () => {
25910
- if (this.imageState[id]?.status === "loading") return this.config.style.cursor.loading;
25935
+ if (this.imageState[id]?.status === "loading") return this.cursors["loading"];
25911
25936
  const selectedNodes = this.getSelectionPlugin()?.getSelectedNodes() ?? [];
25912
25937
  if (this.isSelecting() && selectedNodes.includes(image)) return "grab";
25913
25938
  return "pointer";
@@ -25990,15 +26015,17 @@ var WeaveImageNode = class extends WeaveNode {
25990
26015
  image.dblClick = () => {
25991
26016
  if (this.imageState[id]?.loaded && !this.imageState[id]?.error) this.config.onDblClick?.(this, image);
25992
26017
  };
25993
- if (this.imageSource[id] && imageProps.imageURL) {
26018
+ const hasFinalImageLoaded = this.imageSource[id] && imageProps.imageURL;
26019
+ const hasFallbackAndFinalImageNotLoaded = !imageProps.imageURL && this.imageFallback[id] && this.config.useFallbackImage;
26020
+ if (hasFinalImageLoaded || hasFallbackAndFinalImageNotLoaded) {
25994
26021
  imagePlaceholder?.destroy();
25995
- const imageSource = this.imageSource[id];
26022
+ const imageSource = hasFallbackAndFinalImageNotLoaded ? this.imageFallback[id] : this.imageSource[id];
25996
26023
  internalImage.setAttrs({
25997
26024
  image: imageSource,
25998
26025
  visible: true
25999
26026
  });
26000
- let sourceImageWidth = this.imageSource[id].width;
26001
- let sourceImageHeight = this.imageSource[id].height;
26027
+ let sourceImageWidth = imageSource.width;
26028
+ let sourceImageHeight = imageSource.height;
26002
26029
  if (image.getAttrs().imageInfo) {
26003
26030
  sourceImageWidth = image.getAttrs().imageInfo.width;
26004
26031
  sourceImageHeight = image.getAttrs().imageInfo.height;
@@ -26016,7 +26043,7 @@ var WeaveImageNode = class extends WeaveNode {
26016
26043
  height: sourceImageHeight
26017
26044
  });
26018
26045
  this.imageState[id] = {
26019
- status: "loaded",
26046
+ status: hasFallbackAndFinalImageNotLoaded ? "loading" : "loaded",
26020
26047
  loaded: true,
26021
26048
  error: false
26022
26049
  };
@@ -26619,12 +26646,16 @@ var WeaveImageNode = class extends WeaveNode {
26619
26646
  const nodeId = nodeInstance.getAttrs().id ?? "";
26620
26647
  const isMoveContainer = nodeInstance.getAttr("onMoveContainer");
26621
26648
  nodeInstance.setAttr("onMoveContainer", void 0);
26649
+ if (this.imageTryoutIds[nodeId]) {
26650
+ clearTimeout(this.imageTryoutIds[nodeId]);
26651
+ delete this.imageTryoutIds[nodeId];
26652
+ }
26622
26653
  if (!isMoveContainer) {
26623
26654
  delete this.imageSource[nodeId];
26624
26655
  delete this.imageState[nodeId];
26656
+ delete this.imageTryoutAttempts[nodeId];
26657
+ delete this.imageFallback[nodeId];
26625
26658
  }
26626
- delete this.imageTryoutAttempts[nodeId];
26627
- delete this.imageFallback[nodeId];
26628
26659
  nodeInstance.destroy();
26629
26660
  }
26630
26661
  };
@@ -36049,50 +36080,17 @@ var WeaveCommentToolAction = class extends WeaveAction {
36049
36080
  opacity: 1
36050
36081
  };
36051
36082
  }
36052
- extractCursorUrl(cursor) {
36053
- const lower = cursor.toLowerCase();
36054
- const start = lower.indexOf("url(");
36055
- if (start === -1) return null;
36056
- let i = start + 4;
36057
- const len = cursor.length;
36058
- while (i < len && /\s/.test(cursor[i])) i++;
36059
- let quote = null;
36060
- if (cursor[i] === "\"" || cursor[i] === "'") {
36061
- quote = cursor[i];
36062
- i++;
36063
- }
36064
- let buf = "";
36065
- for (; i < len; i++) {
36066
- const ch = cursor[i];
36067
- if (quote) {
36068
- if (ch === quote) {
36069
- i++;
36070
- break;
36071
- }
36072
- buf += ch;
36073
- } else {
36074
- if (ch === ")") break;
36075
- buf += ch;
36076
- }
36077
- }
36078
- const url = buf.trim();
36079
- if (!url) return null;
36080
- return this.isAllowedUrl(url) ? url : null;
36081
- }
36082
- isAllowedUrl(value) {
36083
- if (/^https?:\/\//i.test(value)) return true;
36084
- if (/^(javascript|data|blob|ftp):/i.test(value)) return false;
36085
- return true;
36086
- }
36087
36083
  preloadCursors() {
36088
36084
  const stage = this.instance.getStage();
36089
- const cursorUrls = [{
36090
- src: this.extractCursorUrl(this.config.style.cursor.add) ?? "",
36091
- cursor: this.config.style.cursor.add
36092
- }, {
36093
- src: this.extractCursorUrl(this.config.style.cursor.block) ?? "",
36094
- cursor: this.config.style.cursor.block
36095
- }];
36085
+ const cursorUrls = [];
36086
+ for (const cursorKey in this.config.style.cursor) {
36087
+ const cursorValue = this.config.style.cursor[cursorKey];
36088
+ const { preload, cursor } = extractCursorUrl(this.config.style.cursor.add) ?? "";
36089
+ if (preload) cursorUrls.push({
36090
+ src: cursor,
36091
+ cursor: cursorValue
36092
+ });
36093
+ }
36096
36094
  const actualCursor = stage.container().style.cursor;
36097
36095
  cursorUrls.forEach(({ src, cursor }) => {
36098
36096
  const img = Konva.Util.createImageElement();
@@ -39811,4 +39809,4 @@ const setupCanvasBackend = async () => {
39811
39809
  };
39812
39810
 
39813
39811
  //#endregion
39814
- 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, 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_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_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_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_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, WeaveImagesToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, WeaveMoveToolAction, WeaveNode, WeaveNodesDistanceSnappingPlugin, WeaveNodesEdgeSnappingPlugin, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeavePenToolAction, WeavePlugin, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveRenderer, 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, downscaleImageFile, downscaleImageFromURL, getBoundingBox, getDownscaleRatio, getExportBoundingBox, getImageSizeFromFile, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isServer, loadImageSource, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, setupCanvasBackend, setupSkiaBackend };
39812
+ 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, 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_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_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_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_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_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, WeaveImageNode, WeaveImageToolAction, WeaveImagesToolAction, WeaveLayerNode, WeaveLineNode, WeaveLineToolAction, WeaveMeasureNode, WeaveMeasureToolAction, WeaveMoveToolAction, WeaveNode, WeaveNodesDistanceSnappingPlugin, WeaveNodesEdgeSnappingPlugin, WeaveNodesMultiSelectionFeedbackPlugin, WeaveNodesSelectionPlugin, WeavePenToolAction, WeavePlugin, WeaveRectangleNode, WeaveRectangleToolAction, WeaveRegularPolygonNode, WeaveRegularPolygonToolAction, WeaveRenderer, 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, downscaleImageFile, downscaleImageFromURL, getBoundingBox, getDownscaleRatio, getExportBoundingBox, getImageSizeFromFile, getPositionRelativeToContainerOnPosition, getSelectedNodesMetadata, getStageClickPoint, getTargetAndSkipNodes, getTargetedNode, getTopmostShadowHost, getVisibleNodes, getVisibleNodesInViewport, hasFrames, hasImages, intersectArrays, isIOS, isInShadowDOM, isNodeInSelection, isServer, loadImageSource, memoize, mergeExceptArrays, moveNodeToContainer, moveNodeToContainerNT, resetScale, setupCanvasBackend, setupSkiaBackend };