orcasvn-react-diagrams 0.1.47 → 0.1.48

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/cjs/index.js CHANGED
@@ -1208,24 +1208,39 @@ var PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH = 20;
1208
1208
  var PORT_DEFAULT_SIZE = 20;
1209
1209
 
1210
1210
  var SelectionFrame = function (props) {
1211
- var _a, _b;
1212
- var propTargetSVGElement = props.targetSVGElement, propWidth = props.width, propHeight = props.height, propFramePadding = props.framePadding,
1211
+ var propTargetSVGElement = props.targetSVGElement, propWidth = props.width, propHeight = props.height, propFramePadding = props.framePadding, x = props.x, y = props.y,
1213
1212
  // movingOffsetThreshold: propMovingOffsetThreshold,
1214
1213
  propMovingRate = props.movingRate, propOnMouseDown = props.onMouseDown, propOnMouseUp = props.onMouseUp, propOnMove = props.onMove, propContainer = props.container, propResizability = props.resizability, propOnResize = props.onResize, PropDragDropHandlerElement = props.dragDropHandlerElement, propStrokeWidth = props.strokeWidth, propAnchor = props.anchor;
1215
1214
  var bbox = propTargetSVGElement === null || propTargetSVGElement === void 0 ? void 0 : propTargetSVGElement.getBBox();
1216
- var _c = React.useState(propWidth || (bbox === null || bbox === void 0 ? void 0 : bbox.width) || MIN_ELEMENT_SIZE), width = _c[0], setWidth = _c[1];
1217
- var _d = React.useState(propHeight || (bbox === null || bbox === void 0 ? void 0 : bbox.height) || MIN_ELEMENT_SIZE), height = _d[0], setHeight = _d[1];
1218
- var _e = React.useState((_a = props.x) !== null && _a !== void 0 ? _a : 0), x = _e[0], setX = _e[1];
1219
- var _f = React.useState((_b = props.y) !== null && _b !== void 0 ? _b : 0), y = _f[0], setY = _f[1];
1215
+ var _a = React.useState(propWidth || (bbox === null || bbox === void 0 ? void 0 : bbox.width) || MIN_ELEMENT_SIZE), width = _a[0], setWidth = _a[1];
1216
+ var _b = React.useState(propHeight || (bbox === null || bbox === void 0 ? void 0 : bbox.height) || MIN_ELEMENT_SIZE), height = _b[0], setHeight = _b[1];
1217
+ React.useEffect(function () {
1218
+ if (propWidth) {
1219
+ setWidth(propWidth);
1220
+ }
1221
+ }, [x]);
1222
+ var _c = React.useState(x !== null && x !== void 0 ? x : 0), curX = _c[0], setX = _c[1];
1223
+ var _d = React.useState(y !== null && y !== void 0 ? y : 0), curY = _d[0], setY = _d[1];
1224
+ React.useEffect(function () {
1225
+ if (x) {
1226
+ setX(x);
1227
+ }
1228
+ }, [x]);
1229
+ React.useEffect(function () {
1230
+ if (y) {
1231
+ setY(y);
1232
+ }
1233
+ }, [y]);
1220
1234
  var framePadding = propFramePadding || 0;
1221
1235
  var r = 5;
1222
- var _g = React.useState(false), draggingRect = _g[0], setDraggingRect = _g[1];
1223
- var _h = React.useState(false), draggingCircle = _h[0], setDraggingCircle = _h[1];
1224
- var _j = React.useState(0), startX = _j[0], setStartX = _j[1];
1225
- var _k = React.useState(0), startY = _k[0], setStartY = _k[1];
1226
- var _l = React.useState(0), xFromMouse = _l[0], setXFromMouse = _l[1];
1227
- var _m = React.useState(0), yFromMouse = _m[0], setYFromMouse = _m[1];
1228
- var _o = React.useState(0), lastMoveTime = _o[0], setLastMoveTime = _o[1];
1236
+ var _e = React.useState(false), draggingRect = _e[0], setDraggingRect = _e[1];
1237
+ var _f = React.useState(false), draggingCircle = _f[0], setDraggingCircle = _f[1];
1238
+ var _g = React.useState(0), startX = _g[0], setStartX = _g[1];
1239
+ var _h = React.useState(0), startY = _h[0], setStartY = _h[1];
1240
+ var _j = React.useState(0), xFromMouse = _j[0], setXFromMouse = _j[1];
1241
+ var _k = React.useState(0), yFromMouse = _k[0], setYFromMouse = _k[1];
1242
+ var _l = React.useState(0), lastMoveTime = _l[0], setLastMoveTime = _l[1];
1243
+ //set x by props.x
1229
1244
  var getMousePosition = function (event) {
1230
1245
  var elementBounding = propContainer.getBoundingClientRect();
1231
1246
  //Coordinates of mouse on paper.
@@ -1242,8 +1257,8 @@ var SelectionFrame = function (props) {
1242
1257
  setStartX(event.clientX);
1243
1258
  setStartY(event.clientY);
1244
1259
  var mousePosition = getMousePosition(event);
1245
- var xFromMouse_1 = x - mousePosition.x;
1246
- var yFromMouse_1 = y - mousePosition.y;
1260
+ var xFromMouse_1 = (curX || 0) - mousePosition.x;
1261
+ var yFromMouse_1 = (curY || 0) - mousePosition.y;
1247
1262
  setXFromMouse(xFromMouse_1);
1248
1263
  setYFromMouse(yFromMouse_1);
1249
1264
  }
@@ -1334,7 +1349,7 @@ var SelectionFrame = function (props) {
1334
1349
  container.removeEventListener('mousemove', circleHandleMouseMove);
1335
1350
  container.removeEventListener('mouseup', circleHandleMouseUp);
1336
1351
  };
1337
- }, [draggingCircle, width, height, lastMoveTime, propContainer, propMovingRate, propOnResize, propResizability, startX, startY]);
1352
+ }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, propMovingRate, propOnResize, propResizability, startX, startY]);
1338
1353
  var rectangleSize = Math.max(width, height);
1339
1354
  var leftX = framePadding;
1340
1355
  var topY = framePadding;
@@ -1368,7 +1383,7 @@ var useSelectionFrame = function (props) {
1368
1383
  };
1369
1384
  }
1370
1385
  }
1371
- }, [props.targetSVGElement, props.container]);
1386
+ }, [props]);
1372
1387
  };
1373
1388
 
1374
1389
  var eventEmitter = new EventEmitter();
@@ -8027,7 +8042,7 @@ function CloseIcon(_a) {
8027
8042
  return (React.createElement("svg", { width: 20, height: 20, viewBox: "0 0 24.00 24.00", xmlns: "http://www.w3.org/2000/svg", fill: "#ff0000", transform: "rotate(0)", onMouseDown: function (ev) { ev.stopPropagation(); }, onClick: onClick, cursor: 'pointer' },
8028
8043
  React.createElement("g", { id: "SVGRepo_bgCarrier", strokeWidth: "0", transform: "translate(3.84,3.84), scale(0.68)" },
8029
8044
  React.createElement("rect", { x: "0", y: "0", width: "24.00", height: "24.00", rx: "12", fill: "#ffffff", strokeWidth: "0" })),
8030
- React.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round", stroke: "#CCCCCC", "stroke-width": "0.048" }),
8045
+ React.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round", stroke: "#CCCCCC", strokeWidth: "0.048" }),
8031
8046
  React.createElement("g", { id: "SVGRepo_iconCarrier" },
8032
8047
  React.createElement("g", null,
8033
8048
  React.createElement("path", { fill: "none", d: "M0 0h24v24H0z" }),
@@ -9140,7 +9155,7 @@ var Paper = function (props) {
9140
9155
  var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
9141
9156
  var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
9142
9157
  var size = props.size;
9143
- var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement]);
9158
+ var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
9144
9159
  React.useEffect(function () {
9145
9160
  setElements(props.elements);
9146
9161
  }, [props.elements]);
@@ -9160,7 +9175,7 @@ var Paper = function (props) {
9160
9175
  return function () {
9161
9176
  off();
9162
9177
  };
9163
- }, [props.onManuallyTriggerRenderElement, props.onElementsChanged, elements]);
9178
+ }, [props.onManuallyTriggerRenderElement, props.onElementsChanged, elements, selectedElement]);
9164
9179
  //Cache elements to avoid re-render when elements changed
9165
9180
  React.useEffect(function () {
9166
9181
  elementsRef.current = elements;
@@ -9625,78 +9640,6 @@ var Paper = function (props) {
9625
9640
  }
9626
9641
  return element;
9627
9642
  };
9628
- //use selection frame
9629
- useSelectionFrame({
9630
- container: paperContainerRef.current,
9631
- targetSVGElement: selectedElementSVG || undefined,
9632
- resizability: (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.resizability) || {
9633
- enabled: true,
9634
- keepRatio: true
9635
- },
9636
- x: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x,
9637
- y: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y,
9638
- width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width,
9639
- height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height,
9640
- //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
9641
- onMouseDown: function (ev) {
9642
- var _a;
9643
- if (selectedElement) {
9644
- (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9645
- }
9646
- },
9647
- onMouseUp: function (ev) {
9648
- var _a;
9649
- if (selectedElement) {
9650
- (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9651
- }
9652
- },
9653
- onMove: function (newX, newY) {
9654
- if (!selectedElement)
9655
- return;
9656
- var oldPosition = __assign({}, selectedElement.position);
9657
- var newPosition = {
9658
- x: newX,
9659
- y: newY
9660
- };
9661
- logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(newPosition)));
9662
- //Adjust position of element if it should move as a port on parent port area
9663
- if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
9664
- newPosition = adjustElementPositionOnParentPortArea(selectedElement, newPosition, true);
9665
- updateElementPosition(selectedElement, newPosition.x, newPosition.y, true);
9666
- }
9667
- else {
9668
- updateElementPosition(selectedElement, newPosition.x, newPosition.y, false);
9669
- }
9670
- //let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
9671
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9672
- logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
9673
- //Set state to re-render UI with new position
9674
- setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
9675
- if (props.onElementMoved) {
9676
- props.onElementMoved(selectedElement.position, selectedElement, indexSelectedElement);
9677
- }
9678
- paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
9679
- setMouseDownedOnPaper(false);
9680
- },
9681
- onResize: function (width, height) {
9682
- if (!selectedElement)
9683
- return;
9684
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9685
- var oldSize = selectedElement.size;
9686
- var newSize = { width: width, height: height };
9687
- elements[indexSelectedElement].size = newSize;
9688
- var newElements = __spreadArray([], elements, true);
9689
- setElements(newElements);
9690
- if (props.onElementsChanged) {
9691
- props.onElementsChanged(newElements);
9692
- }
9693
- if (props.onElementResized) {
9694
- props.onElementResized(newSize, selectedElement, indexSelectedElement);
9695
- }
9696
- paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
9697
- setMouseDownedOnPaper(false);
9698
- }
9699
- });
9700
9643
  /*
9701
9644
  Cache to avoid re-initializing the function when the component re-renders to
9702
9645
  avoid causing the components using it to re-render unnecessarily
@@ -9845,13 +9788,75 @@ var Paper = function (props) {
9845
9788
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
9846
9789
  React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, ref: function (refDOM) { return element.DOM = refDOM; }, height: element.size.height, width: element.size.width, x: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
9847
9790
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9848
- onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
9849
- }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave]);
9791
+ onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
9792
+ element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
9793
+ !!paperContainerRef.current && !!selectedElement && selectedElement.id === element.id &&
9794
+ React.createElement(SelectionFrame, { container: paperContainerRef.current, targetSVGElement: selectedElementSVG || undefined, resizability: (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.resizability) || {
9795
+ enabled: true,
9796
+ keepRatio: true
9797
+ }, x: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, y: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y, width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width, height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height,
9798
+ //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
9799
+ onMouseDown: function (ev) {
9800
+ var _a;
9801
+ if (selectedElement) {
9802
+ (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9803
+ }
9804
+ }, onMouseUp: function (ev) {
9805
+ var _a;
9806
+ if (selectedElement) {
9807
+ (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9808
+ }
9809
+ }, onMove: function (newX, newY) {
9810
+ if (!selectedElement)
9811
+ return;
9812
+ var oldPosition = __assign({}, selectedElement.position);
9813
+ var newPosition = {
9814
+ x: newX,
9815
+ y: newY
9816
+ };
9817
+ logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(newPosition)));
9818
+ //Adjust position of element if it should move as a port on parent port area
9819
+ if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
9820
+ newPosition = adjustElementPositionOnParentPortArea(selectedElement, newPosition, true);
9821
+ updateElementPosition(selectedElement, newPosition.x, newPosition.y, true);
9822
+ }
9823
+ else {
9824
+ updateElementPosition(selectedElement, newPosition.x, newPosition.y, false);
9825
+ }
9826
+ //let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
9827
+ var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9828
+ logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
9829
+ //Set state to re-render UI with new position
9830
+ setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
9831
+ if (props.onElementMoved) {
9832
+ props.onElementMoved(selectedElement.position, selectedElement, indexSelectedElement);
9833
+ }
9834
+ paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
9835
+ setMouseDownedOnPaper(false);
9836
+ }, onResize: function (width, height) {
9837
+ if (!selectedElement)
9838
+ return;
9839
+ var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9840
+ var oldSize = selectedElement.size;
9841
+ var newSize = { width: width, height: height };
9842
+ elements[indexSelectedElement].size = newSize;
9843
+ var newElements = __spreadArray([], elements, true);
9844
+ setElements(newElements);
9845
+ if (props.onElementsChanged) {
9846
+ props.onElementsChanged(newElements);
9847
+ }
9848
+ if (props.onElementResized) {
9849
+ props.onElementResized(newSize, selectedElement, indexSelectedElement);
9850
+ }
9851
+ paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
9852
+ setMouseDownedOnPaper(false);
9853
+ } }))));
9854
+ }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave, selectedElement, selectedElementAbsPosition]);
9850
9855
  var ElementsInTree = React.useMemo(function () {
9851
9856
  return elementsInTree.map(function (element, index) {
9852
9857
  return renderElementInTree(element);
9853
9858
  });
9854
- }, [elementsInTree, renderElementInTree]);
9859
+ }, [elementsInTree, renderElementInTree, selectedElement]);
9855
9860
  return (React.createElement("div", { style: { position: "relative" } },
9856
9861
  React.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
9857
9862
  React.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
@@ -0,0 +1,2 @@
1
+ import { EditorContext } from "../models/implementations/EditorContext";
2
+ export declare const editorContext: EditorContext;
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, useMemo, useState, useCallback, useEffect, createContext, useRef, useContext, memo, useLayoutEffect, useImperativeHandle } from 'react';
1
+ import React, { forwardRef, useMemo, useEffect, useState, useCallback, createContext, useRef, useContext, memo, useLayoutEffect, useImperativeHandle } from 'react';
2
2
  import require$$0 from 'react-dom';
3
3
 
4
4
  var PositioningAnchor;
@@ -1204,24 +1204,39 @@ var PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH = 20;
1204
1204
  var PORT_DEFAULT_SIZE = 20;
1205
1205
 
1206
1206
  var SelectionFrame = function (props) {
1207
- var _a, _b;
1208
- var propTargetSVGElement = props.targetSVGElement, propWidth = props.width, propHeight = props.height, propFramePadding = props.framePadding,
1207
+ var propTargetSVGElement = props.targetSVGElement, propWidth = props.width, propHeight = props.height, propFramePadding = props.framePadding, x = props.x, y = props.y,
1209
1208
  // movingOffsetThreshold: propMovingOffsetThreshold,
1210
1209
  propMovingRate = props.movingRate, propOnMouseDown = props.onMouseDown, propOnMouseUp = props.onMouseUp, propOnMove = props.onMove, propContainer = props.container, propResizability = props.resizability, propOnResize = props.onResize, PropDragDropHandlerElement = props.dragDropHandlerElement, propStrokeWidth = props.strokeWidth, propAnchor = props.anchor;
1211
1210
  var bbox = propTargetSVGElement === null || propTargetSVGElement === void 0 ? void 0 : propTargetSVGElement.getBBox();
1212
- var _c = React.useState(propWidth || (bbox === null || bbox === void 0 ? void 0 : bbox.width) || MIN_ELEMENT_SIZE), width = _c[0], setWidth = _c[1];
1213
- var _d = React.useState(propHeight || (bbox === null || bbox === void 0 ? void 0 : bbox.height) || MIN_ELEMENT_SIZE), height = _d[0], setHeight = _d[1];
1214
- var _e = React.useState((_a = props.x) !== null && _a !== void 0 ? _a : 0), x = _e[0], setX = _e[1];
1215
- var _f = React.useState((_b = props.y) !== null && _b !== void 0 ? _b : 0), y = _f[0], setY = _f[1];
1211
+ var _a = React.useState(propWidth || (bbox === null || bbox === void 0 ? void 0 : bbox.width) || MIN_ELEMENT_SIZE), width = _a[0], setWidth = _a[1];
1212
+ var _b = React.useState(propHeight || (bbox === null || bbox === void 0 ? void 0 : bbox.height) || MIN_ELEMENT_SIZE), height = _b[0], setHeight = _b[1];
1213
+ useEffect(function () {
1214
+ if (propWidth) {
1215
+ setWidth(propWidth);
1216
+ }
1217
+ }, [x]);
1218
+ var _c = React.useState(x !== null && x !== void 0 ? x : 0), curX = _c[0], setX = _c[1];
1219
+ var _d = React.useState(y !== null && y !== void 0 ? y : 0), curY = _d[0], setY = _d[1];
1220
+ useEffect(function () {
1221
+ if (x) {
1222
+ setX(x);
1223
+ }
1224
+ }, [x]);
1225
+ useEffect(function () {
1226
+ if (y) {
1227
+ setY(y);
1228
+ }
1229
+ }, [y]);
1216
1230
  var framePadding = propFramePadding || 0;
1217
1231
  var r = 5;
1218
- var _g = React.useState(false), draggingRect = _g[0], setDraggingRect = _g[1];
1219
- var _h = React.useState(false), draggingCircle = _h[0], setDraggingCircle = _h[1];
1220
- var _j = React.useState(0), startX = _j[0], setStartX = _j[1];
1221
- var _k = React.useState(0), startY = _k[0], setStartY = _k[1];
1222
- var _l = useState(0), xFromMouse = _l[0], setXFromMouse = _l[1];
1223
- var _m = useState(0), yFromMouse = _m[0], setYFromMouse = _m[1];
1224
- var _o = React.useState(0), lastMoveTime = _o[0], setLastMoveTime = _o[1];
1232
+ var _e = React.useState(false), draggingRect = _e[0], setDraggingRect = _e[1];
1233
+ var _f = React.useState(false), draggingCircle = _f[0], setDraggingCircle = _f[1];
1234
+ var _g = React.useState(0), startX = _g[0], setStartX = _g[1];
1235
+ var _h = React.useState(0), startY = _h[0], setStartY = _h[1];
1236
+ var _j = useState(0), xFromMouse = _j[0], setXFromMouse = _j[1];
1237
+ var _k = useState(0), yFromMouse = _k[0], setYFromMouse = _k[1];
1238
+ var _l = React.useState(0), lastMoveTime = _l[0], setLastMoveTime = _l[1];
1239
+ //set x by props.x
1225
1240
  var getMousePosition = function (event) {
1226
1241
  var elementBounding = propContainer.getBoundingClientRect();
1227
1242
  //Coordinates of mouse on paper.
@@ -1238,8 +1253,8 @@ var SelectionFrame = function (props) {
1238
1253
  setStartX(event.clientX);
1239
1254
  setStartY(event.clientY);
1240
1255
  var mousePosition = getMousePosition(event);
1241
- var xFromMouse_1 = x - mousePosition.x;
1242
- var yFromMouse_1 = y - mousePosition.y;
1256
+ var xFromMouse_1 = (curX || 0) - mousePosition.x;
1257
+ var yFromMouse_1 = (curY || 0) - mousePosition.y;
1243
1258
  setXFromMouse(xFromMouse_1);
1244
1259
  setYFromMouse(yFromMouse_1);
1245
1260
  }
@@ -1330,7 +1345,7 @@ var SelectionFrame = function (props) {
1330
1345
  container.removeEventListener('mousemove', circleHandleMouseMove);
1331
1346
  container.removeEventListener('mouseup', circleHandleMouseUp);
1332
1347
  };
1333
- }, [draggingCircle, width, height, lastMoveTime, propContainer, propMovingRate, propOnResize, propResizability, startX, startY]);
1348
+ }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, propMovingRate, propOnResize, propResizability, startX, startY]);
1334
1349
  var rectangleSize = Math.max(width, height);
1335
1350
  var leftX = framePadding;
1336
1351
  var topY = framePadding;
@@ -1364,7 +1379,7 @@ var useSelectionFrame = function (props) {
1364
1379
  };
1365
1380
  }
1366
1381
  }
1367
- }, [props.targetSVGElement, props.container]);
1382
+ }, [props]);
1368
1383
  };
1369
1384
 
1370
1385
  var eventEmitter = new EventEmitter();
@@ -8023,7 +8038,7 @@ function CloseIcon(_a) {
8023
8038
  return (React.createElement("svg", { width: 20, height: 20, viewBox: "0 0 24.00 24.00", xmlns: "http://www.w3.org/2000/svg", fill: "#ff0000", transform: "rotate(0)", onMouseDown: function (ev) { ev.stopPropagation(); }, onClick: onClick, cursor: 'pointer' },
8024
8039
  React.createElement("g", { id: "SVGRepo_bgCarrier", strokeWidth: "0", transform: "translate(3.84,3.84), scale(0.68)" },
8025
8040
  React.createElement("rect", { x: "0", y: "0", width: "24.00", height: "24.00", rx: "12", fill: "#ffffff", strokeWidth: "0" })),
8026
- React.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round", stroke: "#CCCCCC", "stroke-width": "0.048" }),
8041
+ React.createElement("g", { id: "SVGRepo_tracerCarrier", strokeLinecap: "round", strokeLinejoin: "round", stroke: "#CCCCCC", strokeWidth: "0.048" }),
8027
8042
  React.createElement("g", { id: "SVGRepo_iconCarrier" },
8028
8043
  React.createElement("g", null,
8029
8044
  React.createElement("path", { fill: "none", d: "M0 0h24v24H0z" }),
@@ -9136,7 +9151,7 @@ var Paper = function (props) {
9136
9151
  var linksRef = useRef(links); //Cache links to avoid re-render when links changed
9137
9152
  var textsRef = useRef(texts); //Cache texts to avoid re-render when texts changed
9138
9153
  var size = props.size;
9139
- var selectedElementAbsPosition = useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement]);
9154
+ var selectedElementAbsPosition = useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
9140
9155
  useEffect(function () {
9141
9156
  setElements(props.elements);
9142
9157
  }, [props.elements]);
@@ -9156,7 +9171,7 @@ var Paper = function (props) {
9156
9171
  return function () {
9157
9172
  off();
9158
9173
  };
9159
- }, [props.onManuallyTriggerRenderElement, props.onElementsChanged, elements]);
9174
+ }, [props.onManuallyTriggerRenderElement, props.onElementsChanged, elements, selectedElement]);
9160
9175
  //Cache elements to avoid re-render when elements changed
9161
9176
  useEffect(function () {
9162
9177
  elementsRef.current = elements;
@@ -9621,78 +9636,6 @@ var Paper = function (props) {
9621
9636
  }
9622
9637
  return element;
9623
9638
  };
9624
- //use selection frame
9625
- useSelectionFrame({
9626
- container: paperContainerRef.current,
9627
- targetSVGElement: selectedElementSVG || undefined,
9628
- resizability: (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.resizability) || {
9629
- enabled: true,
9630
- keepRatio: true
9631
- },
9632
- x: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x,
9633
- y: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y,
9634
- width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width,
9635
- height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height,
9636
- //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
9637
- onMouseDown: function (ev) {
9638
- var _a;
9639
- if (selectedElement) {
9640
- (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9641
- }
9642
- },
9643
- onMouseUp: function (ev) {
9644
- var _a;
9645
- if (selectedElement) {
9646
- (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9647
- }
9648
- },
9649
- onMove: function (newX, newY) {
9650
- if (!selectedElement)
9651
- return;
9652
- var oldPosition = __assign({}, selectedElement.position);
9653
- var newPosition = {
9654
- x: newX,
9655
- y: newY
9656
- };
9657
- logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(newPosition)));
9658
- //Adjust position of element if it should move as a port on parent port area
9659
- if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
9660
- newPosition = adjustElementPositionOnParentPortArea(selectedElement, newPosition, true);
9661
- updateElementPosition(selectedElement, newPosition.x, newPosition.y, true);
9662
- }
9663
- else {
9664
- updateElementPosition(selectedElement, newPosition.x, newPosition.y, false);
9665
- }
9666
- //let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
9667
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9668
- logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
9669
- //Set state to re-render UI with new position
9670
- setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
9671
- if (props.onElementMoved) {
9672
- props.onElementMoved(selectedElement.position, selectedElement, indexSelectedElement);
9673
- }
9674
- paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
9675
- setMouseDownedOnPaper(false);
9676
- },
9677
- onResize: function (width, height) {
9678
- if (!selectedElement)
9679
- return;
9680
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9681
- var oldSize = selectedElement.size;
9682
- var newSize = { width: width, height: height };
9683
- elements[indexSelectedElement].size = newSize;
9684
- var newElements = __spreadArray([], elements, true);
9685
- setElements(newElements);
9686
- if (props.onElementsChanged) {
9687
- props.onElementsChanged(newElements);
9688
- }
9689
- if (props.onElementResized) {
9690
- props.onElementResized(newSize, selectedElement, indexSelectedElement);
9691
- }
9692
- paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
9693
- setMouseDownedOnPaper(false);
9694
- }
9695
- });
9696
9639
  /*
9697
9640
  Cache to avoid re-initializing the function when the component re-renders to
9698
9641
  avoid causing the components using it to re-render unnecessarily
@@ -9841,13 +9784,75 @@ var Paper = function (props) {
9841
9784
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
9842
9785
  React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, ref: function (refDOM) { return element.DOM = refDOM; }, height: element.size.height, width: element.size.width, x: element.positionAnchor === PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
9843
9786
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9844
- onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
9845
- }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave]);
9787
+ onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
9788
+ element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
9789
+ !!paperContainerRef.current && !!selectedElement && selectedElement.id === element.id &&
9790
+ React.createElement(SelectionFrame, { container: paperContainerRef.current, targetSVGElement: selectedElementSVG || undefined, resizability: (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.resizability) || {
9791
+ enabled: true,
9792
+ keepRatio: true
9793
+ }, x: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, y: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y, width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width, height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height,
9794
+ //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
9795
+ onMouseDown: function (ev) {
9796
+ var _a;
9797
+ if (selectedElement) {
9798
+ (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9799
+ }
9800
+ }, onMouseUp: function (ev) {
9801
+ var _a;
9802
+ if (selectedElement) {
9803
+ (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9804
+ }
9805
+ }, onMove: function (newX, newY) {
9806
+ if (!selectedElement)
9807
+ return;
9808
+ var oldPosition = __assign({}, selectedElement.position);
9809
+ var newPosition = {
9810
+ x: newX,
9811
+ y: newY
9812
+ };
9813
+ logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(newPosition)));
9814
+ //Adjust position of element if it should move as a port on parent port area
9815
+ if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
9816
+ newPosition = adjustElementPositionOnParentPortArea(selectedElement, newPosition, true);
9817
+ updateElementPosition(selectedElement, newPosition.x, newPosition.y, true);
9818
+ }
9819
+ else {
9820
+ updateElementPosition(selectedElement, newPosition.x, newPosition.y, false);
9821
+ }
9822
+ //let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
9823
+ var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9824
+ logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
9825
+ //Set state to re-render UI with new position
9826
+ setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
9827
+ if (props.onElementMoved) {
9828
+ props.onElementMoved(selectedElement.position, selectedElement, indexSelectedElement);
9829
+ }
9830
+ paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
9831
+ setMouseDownedOnPaper(false);
9832
+ }, onResize: function (width, height) {
9833
+ if (!selectedElement)
9834
+ return;
9835
+ var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
9836
+ var oldSize = selectedElement.size;
9837
+ var newSize = { width: width, height: height };
9838
+ elements[indexSelectedElement].size = newSize;
9839
+ var newElements = __spreadArray([], elements, true);
9840
+ setElements(newElements);
9841
+ if (props.onElementsChanged) {
9842
+ props.onElementsChanged(newElements);
9843
+ }
9844
+ if (props.onElementResized) {
9845
+ props.onElementResized(newSize, selectedElement, indexSelectedElement);
9846
+ }
9847
+ paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
9848
+ setMouseDownedOnPaper(false);
9849
+ } }))));
9850
+ }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave, selectedElement, selectedElementAbsPosition]);
9846
9851
  var ElementsInTree = useMemo(function () {
9847
9852
  return elementsInTree.map(function (element, index) {
9848
9853
  return renderElementInTree(element);
9849
9854
  });
9850
- }, [elementsInTree, renderElementInTree]);
9855
+ }, [elementsInTree, renderElementInTree, selectedElement]);
9851
9856
  return (React.createElement("div", { style: { position: "relative" } },
9852
9857
  React.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
9853
9858
  React.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },