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
|
|
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
|
|
1217
|
-
var
|
|
1218
|
-
|
|
1219
|
-
|
|
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
|
|
1223
|
-
var
|
|
1224
|
-
var
|
|
1225
|
-
var
|
|
1226
|
-
var
|
|
1227
|
-
var
|
|
1228
|
-
var
|
|
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 =
|
|
1246
|
-
var yFromMouse_1 =
|
|
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
|
|
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",
|
|
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 },
|
|
9849
|
-
|
|
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 },
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { forwardRef, useMemo, useState, useCallback,
|
|
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
|
|
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
|
|
1213
|
-
var
|
|
1214
|
-
|
|
1215
|
-
|
|
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
|
|
1219
|
-
var
|
|
1220
|
-
var
|
|
1221
|
-
var
|
|
1222
|
-
var
|
|
1223
|
-
var
|
|
1224
|
-
var
|
|
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 =
|
|
1242
|
-
var yFromMouse_1 =
|
|
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
|
|
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",
|
|
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 },
|
|
9845
|
-
|
|
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 },
|