orcasvn-react-diagrams 0.1.63 → 0.1.66
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 +122 -86
- package/dist/cjs/types/components/paper.d.ts +1 -0
- package/dist/cjs/types/mocks/diamondElement.d.ts +1 -1
- package/dist/cjs/types/mocks/rectangularFrameElement.d.ts +1 -1
- package/dist/cjs/types/models/IEditorContext.d.ts +1 -0
- package/dist/cjs/types/models/IElement.d.ts +1 -0
- package/dist/cjs/types/models/IElementProps.d.ts +1 -0
- package/dist/cjs/types/models/implementations/EditorContext.d.ts +1 -0
- package/dist/cjs/types/models/implementations/Element.d.ts +2 -1
- package/dist/esm/index.js +122 -86
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/paper.d.ts +1 -0
- package/dist/esm/types/mocks/diamondElement.d.ts +1 -1
- package/dist/esm/types/mocks/rectangularFrameElement.d.ts +1 -1
- package/dist/esm/types/models/IEditorContext.d.ts +1 -0
- package/dist/esm/types/models/IElement.d.ts +1 -0
- package/dist/esm/types/models/IElementProps.d.ts +1 -0
- package/dist/esm/types/models/implementations/EditorContext.d.ts +1 -0
- package/dist/esm/types/models/implementations/Element.d.ts +2 -1
- package/dist/index.d.ts +6 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -484,7 +484,7 @@ function generateUniqueId() {
|
|
|
484
484
|
}
|
|
485
485
|
|
|
486
486
|
var Element$2 = /** @class */ (function () {
|
|
487
|
-
function Element(id, x, y, width, height, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
|
|
487
|
+
function Element(id, x, y, width, height, selectable, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
|
|
488
488
|
if (portMovealeAreas === void 0) { portMovealeAreas = []; }
|
|
489
489
|
this.positionAnchor = exports.PositioningAnchor.TopLeft;
|
|
490
490
|
this._childrenElements = [];
|
|
@@ -497,6 +497,7 @@ var Element$2 = /** @class */ (function () {
|
|
|
497
497
|
this._id = id || generateUniqueId();
|
|
498
498
|
this._position = { x: x, y: y };
|
|
499
499
|
this._size = { width: width, height: height };
|
|
500
|
+
this.selectable = selectable === undefined ? true : selectable;
|
|
500
501
|
this.cssClass = cssClass;
|
|
501
502
|
this.renderShape = renderShape;
|
|
502
503
|
this.texts = texts;
|
|
@@ -7722,27 +7723,27 @@ var SelectionFrame = function (props) {
|
|
|
7722
7723
|
setHeight(propHeight);
|
|
7723
7724
|
}
|
|
7724
7725
|
}, [objectY, propHeight]);
|
|
7725
|
-
|
|
7726
|
-
|
|
7727
|
-
|
|
7728
|
-
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
}, [objectX]);
|
|
7732
|
-
|
|
7733
|
-
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
}, [objectY]);
|
|
7726
|
+
// const [curX, setCurX] = React.useState<number>(objectX ?? 0)
|
|
7727
|
+
// const [curY, setCurY] = React.useState<number>(objectY ?? 0)
|
|
7728
|
+
// useEffect(() => {
|
|
7729
|
+
// if (objectX) {
|
|
7730
|
+
// setCurX(objectX);
|
|
7731
|
+
// }
|
|
7732
|
+
// }, [objectX]);
|
|
7733
|
+
// useEffect(() => {
|
|
7734
|
+
// if (objectY) {
|
|
7735
|
+
// setCurY(objectY);
|
|
7736
|
+
// }
|
|
7737
|
+
// }, [objectY]);
|
|
7737
7738
|
var framePadding = propFramePadding || 0;
|
|
7738
7739
|
var r = 5;
|
|
7739
|
-
var
|
|
7740
|
-
var
|
|
7741
|
-
var
|
|
7742
|
-
var
|
|
7743
|
-
var
|
|
7744
|
-
var
|
|
7745
|
-
var
|
|
7740
|
+
var _c = React.useState(draggingByDefault || false), draggingRect = _c[0], setDraggingRect = _c[1];
|
|
7741
|
+
var _d = React.useState(false), draggingCircle = _d[0], setDraggingCircle = _d[1];
|
|
7742
|
+
var _e = React.useState(0), startX = _e[0], setStartX = _e[1];
|
|
7743
|
+
var _f = React.useState(0), startY = _f[0], setStartY = _f[1];
|
|
7744
|
+
var _g = React.useState(0), xFromMouse = _g[0], setXFromMouse = _g[1];
|
|
7745
|
+
var _h = React.useState(0), yFromMouse = _h[0], setYFromMouse = _h[1];
|
|
7746
|
+
var _j = React.useState(0), lastMoveTime = _j[0], setLastMoveTime = _j[1];
|
|
7746
7747
|
// const { onStartDraggingElement } = useContext(paperEventEmitterContext);
|
|
7747
7748
|
// useEffect(() => {
|
|
7748
7749
|
// const { off } = onStartDraggingElement((element) => {
|
|
@@ -7752,13 +7753,13 @@ var SelectionFrame = function (props) {
|
|
|
7752
7753
|
// off();
|
|
7753
7754
|
// }
|
|
7754
7755
|
// }, [])
|
|
7755
|
-
var getMousePosition = function (event) {
|
|
7756
|
+
var getMousePosition = React.useCallback(function (event) {
|
|
7756
7757
|
var position = windowsPositionToPaperPosition({
|
|
7757
7758
|
x: event.clientX,
|
|
7758
7759
|
y: event.clientY
|
|
7759
7760
|
}, propContainer, zoom);
|
|
7760
7761
|
return position;
|
|
7761
|
-
};
|
|
7762
|
+
}, [propContainer, zoom]);
|
|
7762
7763
|
var addRectHandleMouseDown = function (event) {
|
|
7763
7764
|
event.stopPropagation();
|
|
7764
7765
|
if (!draggingCircle) {
|
|
@@ -7766,8 +7767,8 @@ var SelectionFrame = function (props) {
|
|
|
7766
7767
|
setStartX(event.clientX);
|
|
7767
7768
|
setStartY(event.clientY);
|
|
7768
7769
|
var mousePosition = getMousePosition(event);
|
|
7769
|
-
var xFromMouse_1 = (
|
|
7770
|
-
var yFromMouse_1 = (
|
|
7770
|
+
var xFromMouse_1 = (objectX || 0) - mousePosition.x;
|
|
7771
|
+
var yFromMouse_1 = (objectY || 0) - mousePosition.y;
|
|
7771
7772
|
setXFromMouse(xFromMouse_1);
|
|
7772
7773
|
setYFromMouse(yFromMouse_1);
|
|
7773
7774
|
}
|
|
@@ -7786,15 +7787,15 @@ var SelectionFrame = function (props) {
|
|
|
7786
7787
|
var newX = mousePosition.x + xFromMouse;
|
|
7787
7788
|
var newY = mousePosition.y + yFromMouse;
|
|
7788
7789
|
if (propOnMove) {
|
|
7789
|
-
setCurX(newX)
|
|
7790
|
-
setCurY(newY)
|
|
7790
|
+
// setCurX(newX)
|
|
7791
|
+
// setCurY(newY)
|
|
7791
7792
|
propOnMove(newX, newY);
|
|
7792
7793
|
setLastMoveTime(Date.now());
|
|
7793
7794
|
setStartX(mouseEvent.clientX);
|
|
7794
7795
|
setStartY(mouseEvent.clientY);
|
|
7795
7796
|
}
|
|
7796
7797
|
}
|
|
7797
|
-
}, [draggingRect, propOnMove,
|
|
7798
|
+
}, [draggingRect, propOnMove, getMousePosition, propMovingRate, lastMoveTime, xFromMouse, yFromMouse]);
|
|
7798
7799
|
React.useEffect(function () {
|
|
7799
7800
|
var addRectHandleMouseUp = function () {
|
|
7800
7801
|
setDraggingRect(false);
|
|
@@ -7838,8 +7839,8 @@ var SelectionFrame = function (props) {
|
|
|
7838
7839
|
// setStartX(mouseEvent.clientX);
|
|
7839
7840
|
// setStartY(mouseEvent.clientY);
|
|
7840
7841
|
setLastMoveTime(Date.now());
|
|
7841
|
-
var newWidth = mousePosition.x -
|
|
7842
|
-
var newHeight = mousePosition.y -
|
|
7842
|
+
var newWidth = mousePosition.x - objectX;
|
|
7843
|
+
var newHeight = mousePosition.y - objectY;
|
|
7843
7844
|
if (propResizability.keepRatio) {
|
|
7844
7845
|
var ratio = Math.max(Math.abs(newWidth / width), Math.abs(newHeight / height));
|
|
7845
7846
|
newWidth = newWidth > 0 ? ratio * width : -ratio * width;
|
|
@@ -7880,7 +7881,7 @@ var SelectionFrame = function (props) {
|
|
|
7880
7881
|
//logging the end of the circle handle mouse move
|
|
7881
7882
|
logger.debug('SelectionFrame: circleHandleMouseMove ended', container);
|
|
7882
7883
|
};
|
|
7883
|
-
}, [draggingCircle, width, height,
|
|
7884
|
+
}, [draggingCircle, width, height, objectX, objectY, lastMoveTime, propContainer, getMousePosition, propMovingRate, propOnResize, propResizability, startX, startY]);
|
|
7884
7885
|
var rectangleSize = Math.max(width, height);
|
|
7885
7886
|
var leftX = framePadding;
|
|
7886
7887
|
var topY = framePadding;
|
|
@@ -9475,17 +9476,18 @@ function convertElementsToTree(elements) {
|
|
|
9475
9476
|
return parsedElementsInTree;
|
|
9476
9477
|
}
|
|
9477
9478
|
var Paper = function (props) {
|
|
9478
|
-
var _a
|
|
9479
|
-
var
|
|
9480
|
-
var
|
|
9481
|
-
var
|
|
9482
|
-
var
|
|
9483
|
-
var
|
|
9484
|
-
var
|
|
9485
|
-
var
|
|
9486
|
-
var
|
|
9487
|
-
var
|
|
9488
|
-
var
|
|
9479
|
+
var _a, _b;
|
|
9480
|
+
var _c = React.useState([]), elements = _c[0], setElements = _c[1];
|
|
9481
|
+
var _d = React.useState([]), elementsInTree = _d[0], setElementsInTree = _d[1];
|
|
9482
|
+
var _e = React.useState(), selectedElement = _e[0], setSelectedElement = _e[1];
|
|
9483
|
+
var _f = React.useState(false), autoEnabledDraggingSelectedElement = _f[0], setAutoEnabledDraggingSelectedElement = _f[1];
|
|
9484
|
+
var _g = React.useState([]), links = _g[0], setLinks = _g[1];
|
|
9485
|
+
var _h = React.useState(), selectedLink = _h[0], setSelectedLink = _h[1];
|
|
9486
|
+
var _j = React.useState(null), tempLink = _j[0], setTempLink = _j[1];
|
|
9487
|
+
var _k = React.useState([]), texts = _k[0], setTexts = _k[1];
|
|
9488
|
+
var _l = React.useState(), selectedText = _l[0], setSelectedText = _l[1];
|
|
9489
|
+
var _m = React.useState(null), selectedElementSVG = _m[0], setSelectedElementSVG = _m[1];
|
|
9490
|
+
var _o = React.useState(false), mouseDownedOnPaper = _o[0], setMouseDownedOnPaper = _o[1];
|
|
9489
9491
|
var paperEventEmitter = React.useContext(paperEventEmitterContext);
|
|
9490
9492
|
var zoom = useZoomContext().zoom;
|
|
9491
9493
|
var zoomRef = React.useRef(zoom);
|
|
@@ -9495,19 +9497,19 @@ var Paper = function (props) {
|
|
|
9495
9497
|
var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
|
|
9496
9498
|
var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
|
|
9497
9499
|
var size = props.size;
|
|
9498
|
-
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]);
|
|
9499
|
-
var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, onElementMouseLeave = props.onElementMouseLeave, onElementDeleted = props.onElementDeleted, onLinksChanged = props.onLinksChanged, onLinkSelected = props.onLinkSelected, onTextSelected = props.onTextSelected, onTextsChanged = props.onTextsChanged, manuallyTriggerRenderElementHandler = props.manuallyTriggerRenderElementHandler, manuallyTriggerRenderPortHandler = props.manuallyTriggerRenderPortHandler, onCreatingPortByLinking = props.onCreatingPortByLinking, onCreatingLink = props.onCreatingLink, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
|
|
9500
|
+
var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, (_a = selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position) === null || _a === void 0 ? void 0 : _a.x, (_b = selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position) === null || _b === void 0 ? void 0 : _b.y, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
|
|
9501
|
+
var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementResized = props.onElementResized, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, onElementMoved = props.onElementMoved, onElementMouseLeave = props.onElementMouseLeave, onElementDeleted = props.onElementDeleted, onLinksChanged = props.onLinksChanged, onLinkSelected = props.onLinkSelected, onTextSelected = props.onTextSelected, onTextsChanged = props.onTextsChanged, manuallyTriggerRenderElementHandler = props.manuallyTriggerRenderElementHandler, manuallyTriggerRenderPortHandler = props.manuallyTriggerRenderPortHandler, onCreatingPortByLinking = props.onCreatingPortByLinking, onCreatingLink = props.onCreatingLink, onElementMoving = props.onElementMoving, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
|
|
9500
9502
|
React.useEffect(function () {
|
|
9501
9503
|
zoomRef.current = zoom;
|
|
9502
9504
|
}, [zoom]);
|
|
9503
9505
|
React.useEffect(function () {
|
|
9504
|
-
setElements(props.elements);
|
|
9506
|
+
setElements(__spreadArray([], props.elements, true));
|
|
9505
9507
|
}, [props.elements]);
|
|
9506
9508
|
React.useEffect(function () {
|
|
9507
|
-
setLinks(props.links || []);
|
|
9509
|
+
setLinks(__spreadArray([], props.links || [], true));
|
|
9508
9510
|
}, [props.links]);
|
|
9509
9511
|
React.useEffect(function () {
|
|
9510
|
-
setTexts(props.texts);
|
|
9512
|
+
setTexts(__spreadArray([], props.texts, true));
|
|
9511
9513
|
}, [props.texts]);
|
|
9512
9514
|
React.useEffect(function () {
|
|
9513
9515
|
var off = manuallyTriggerRenderElementHandler(function (elementId) {
|
|
@@ -9555,10 +9557,15 @@ var Paper = function (props) {
|
|
|
9555
9557
|
};
|
|
9556
9558
|
}
|
|
9557
9559
|
}, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
|
|
9560
|
+
var updateElementsTree = React.useCallback(function () {
|
|
9561
|
+
var parsedElementsInTree = convertElementsToTree(elements);
|
|
9562
|
+
setElementsInTree(parsedElementsInTree);
|
|
9563
|
+
}, [elements]);
|
|
9558
9564
|
//Cache elements to avoid re-render when elements changed
|
|
9559
9565
|
React.useEffect(function () {
|
|
9560
9566
|
elementsRef.current = elements;
|
|
9561
|
-
|
|
9567
|
+
updateElementsTree();
|
|
9568
|
+
}, [elements, updateElementsTree]);
|
|
9562
9569
|
//Cache links to avoid re-render when links changed
|
|
9563
9570
|
React.useEffect(function () {
|
|
9564
9571
|
linksRef.current = links;
|
|
@@ -9570,10 +9577,6 @@ var Paper = function (props) {
|
|
|
9570
9577
|
useKeyboardCommands({
|
|
9571
9578
|
element: paperContainerRef.current
|
|
9572
9579
|
});
|
|
9573
|
-
var updateElementsTree = React.useCallback(function () {
|
|
9574
|
-
var parsedElementsInTree = convertElementsToTree(elements);
|
|
9575
|
-
setElementsInTree(parsedElementsInTree);
|
|
9576
|
-
}, [elements]);
|
|
9577
9580
|
//Cache tempLink to avoid re-render when tempLink changed
|
|
9578
9581
|
React.useEffect(function () {
|
|
9579
9582
|
tempLinkRef.current = tempLink;
|
|
@@ -9581,17 +9584,16 @@ var Paper = function (props) {
|
|
|
9581
9584
|
//Listen text is selected
|
|
9582
9585
|
React.useEffect(function () {
|
|
9583
9586
|
var textSelectedListener = paperEventEmitter.onTextSelected(function (text) {
|
|
9584
|
-
var _a;
|
|
9585
9587
|
setSelectedElement(undefined);
|
|
9586
9588
|
setSelectedElementSVG(null);
|
|
9587
9589
|
setSelectedLink(undefined);
|
|
9588
9590
|
//broadcast selected text to parent component
|
|
9589
|
-
|
|
9591
|
+
onTextSelected === null || onTextSelected === void 0 ? void 0 : onTextSelected(text);
|
|
9590
9592
|
});
|
|
9591
9593
|
return function () {
|
|
9592
9594
|
textSelectedListener.off();
|
|
9593
9595
|
};
|
|
9594
|
-
}, []);
|
|
9596
|
+
}, [paperEventEmitter, onTextSelected]);
|
|
9595
9597
|
//Listen port is selected
|
|
9596
9598
|
React.useEffect(function () {
|
|
9597
9599
|
var portSelectedListener = paperEventEmitter.onPortSelected(function (port, elementId) {
|
|
@@ -9640,11 +9642,11 @@ var Paper = function (props) {
|
|
|
9640
9642
|
parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
|
|
9641
9643
|
addedPortCancelers.forEach(function (canceller) { return canceller(); });
|
|
9642
9644
|
};
|
|
9643
|
-
}, [
|
|
9644
|
-
//Update elements tree when length of elements change
|
|
9645
|
-
|
|
9646
|
-
|
|
9647
|
-
}, [elements, updateElementsTree])
|
|
9645
|
+
}, [updateElementsTree, onElementsChanged]);
|
|
9646
|
+
// //Update elements tree when length of elements change
|
|
9647
|
+
// useEffect(() => {
|
|
9648
|
+
// updateElementsTree();
|
|
9649
|
+
// }, [elements, updateElementsTree])
|
|
9648
9650
|
//Get all child elements of the deleted element
|
|
9649
9651
|
var getChildOfElement = React.useCallback(function (element) {
|
|
9650
9652
|
if (!element.childrenElementsInTree)
|
|
@@ -9823,7 +9825,6 @@ var Paper = function (props) {
|
|
|
9823
9825
|
}
|
|
9824
9826
|
}, [onLinksChanged]);
|
|
9825
9827
|
var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
|
|
9826
|
-
var _a;
|
|
9827
9828
|
var element = elementsRef.current.find(function (e) { return e.id === elementId; });
|
|
9828
9829
|
if (element) {
|
|
9829
9830
|
//set links equals a clone links to re-render links with new position
|
|
@@ -9838,21 +9839,44 @@ var Paper = function (props) {
|
|
|
9838
9839
|
}
|
|
9839
9840
|
return link;
|
|
9840
9841
|
});
|
|
9841
|
-
setLinks(
|
|
9842
|
+
setLinks(function (prev) {
|
|
9843
|
+
return prev.map(function (link) {
|
|
9844
|
+
var _a, _b;
|
|
9845
|
+
if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
|
|
9846
|
+
link.sourcePort.position = newPosition;
|
|
9847
|
+
}
|
|
9848
|
+
if (((_a = link.targetElement) === null || _a === void 0 ? void 0 : _a.id) === elementId && ((_b = link.targetPort) === null || _b === void 0 ? void 0 : _b.id) === port.id) {
|
|
9849
|
+
link.targetPort.position = newPosition;
|
|
9850
|
+
}
|
|
9851
|
+
return link;
|
|
9852
|
+
});
|
|
9853
|
+
});
|
|
9842
9854
|
if (onLinksChanged) {
|
|
9843
9855
|
onLinksChanged(newLinks);
|
|
9844
9856
|
}
|
|
9845
9857
|
var newElements = elementsRef.current;
|
|
9846
|
-
|
|
9847
|
-
|
|
9848
|
-
|
|
9849
|
-
|
|
9850
|
-
|
|
9851
|
-
|
|
9852
|
-
});
|
|
9858
|
+
// newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
|
|
9859
|
+
// if (p.id === port.id) {
|
|
9860
|
+
// p.position = newPosition
|
|
9861
|
+
// }
|
|
9862
|
+
// return p
|
|
9863
|
+
// })
|
|
9853
9864
|
//Update port position in element, not re-render
|
|
9854
9865
|
//To avoid re-render
|
|
9855
|
-
setElements(
|
|
9866
|
+
setElements(function (prev) {
|
|
9867
|
+
var _a;
|
|
9868
|
+
var newElements = __spreadArray([], prev, true);
|
|
9869
|
+
var updatedElement = newElements.find(function (e) { return e.id === elementId; });
|
|
9870
|
+
if (updatedElement) {
|
|
9871
|
+
updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
|
|
9872
|
+
if (p.id === port.id) {
|
|
9873
|
+
p.position = newPosition;
|
|
9874
|
+
}
|
|
9875
|
+
return p;
|
|
9876
|
+
});
|
|
9877
|
+
}
|
|
9878
|
+
return newElements;
|
|
9879
|
+
});
|
|
9856
9880
|
if (onElementsChanged) {
|
|
9857
9881
|
onElementsChanged(newElements);
|
|
9858
9882
|
}
|
|
@@ -10145,8 +10169,9 @@ var Paper = function (props) {
|
|
|
10145
10169
|
}
|
|
10146
10170
|
else {
|
|
10147
10171
|
var element = elementsRef.current.find(function (e) { return e.id === elementId; });
|
|
10148
|
-
|
|
10149
|
-
if (element) {
|
|
10172
|
+
// Select the element only if it is selectable
|
|
10173
|
+
if (element && element.selectable) {
|
|
10174
|
+
setSelectedElementSVG(ref);
|
|
10150
10175
|
setSelectedElement(element);
|
|
10151
10176
|
setAutoEnabledDraggingSelectedElement(false);
|
|
10152
10177
|
paperEventEmitter.emitElementSelected(element);
|
|
@@ -10210,10 +10235,11 @@ var Paper = function (props) {
|
|
|
10210
10235
|
}
|
|
10211
10236
|
}, [onElementMouseLeave]);
|
|
10212
10237
|
var renderElementInTree = React.useCallback(function (element) {
|
|
10238
|
+
logger.info("Rendering element tree for element ".concat(element.id));
|
|
10213
10239
|
//use the defined react element or the default Element component
|
|
10214
10240
|
var ReactElement = element.reactElement || Element$1;
|
|
10215
10241
|
return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
|
|
10216
|
-
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, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu,
|
|
10242
|
+
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, selectable: element.selectable, 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, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu,
|
|
10217
10243
|
// portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
|
|
10218
10244
|
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
|
|
10219
10245
|
element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
|
|
@@ -10224,25 +10250,22 @@ var Paper = function (props) {
|
|
|
10224
10250
|
}, objectX: selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, objectY: 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, zoom: zoom, draggingByDefault: autoEnabledDraggingSelectedElement,
|
|
10225
10251
|
//movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
|
|
10226
10252
|
onMouseDown: function (ev) {
|
|
10227
|
-
var _a;
|
|
10228
10253
|
if (selectedElement) {
|
|
10229
10254
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10230
10255
|
x: ev.clientX,
|
|
10231
10256
|
y: ev.clientY
|
|
10232
10257
|
}, paperContainerRef.current, zoomRef.current);
|
|
10233
|
-
|
|
10258
|
+
onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, selectedElement, paperPosition);
|
|
10234
10259
|
}
|
|
10235
10260
|
}, onMouseUp: function (ev) {
|
|
10236
|
-
var _a;
|
|
10237
10261
|
if (selectedElement) {
|
|
10238
10262
|
var paperPosition = windowsPositionToPaperPosition({
|
|
10239
10263
|
x: ev.clientX,
|
|
10240
10264
|
y: ev.clientY
|
|
10241
10265
|
}, paperContainerRef.current, zoomRef.current);
|
|
10242
|
-
|
|
10266
|
+
onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, selectedElement, paperPosition);
|
|
10243
10267
|
}
|
|
10244
10268
|
}, onMove: function (newX, newY) {
|
|
10245
|
-
var _a;
|
|
10246
10269
|
if (!selectedElement)
|
|
10247
10270
|
return;
|
|
10248
10271
|
var oldPosition = __assign({}, selectedElement.position);
|
|
@@ -10251,6 +10274,13 @@ var Paper = function (props) {
|
|
|
10251
10274
|
x: newX,
|
|
10252
10275
|
y: newY
|
|
10253
10276
|
};
|
|
10277
|
+
//Call onElementMoving to check if the element should be moved or not
|
|
10278
|
+
if (onElementMoving) {
|
|
10279
|
+
var isSkip = onElementMoving(selectedElement, paperPosition);
|
|
10280
|
+
if (!isSkip) {
|
|
10281
|
+
return;
|
|
10282
|
+
}
|
|
10283
|
+
}
|
|
10254
10284
|
logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
|
|
10255
10285
|
//Adjust position of element if it should move as a port on parent port area
|
|
10256
10286
|
if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
|
|
@@ -10279,13 +10309,13 @@ var Paper = function (props) {
|
|
|
10279
10309
|
}
|
|
10280
10310
|
return link;
|
|
10281
10311
|
});
|
|
10282
|
-
|
|
10312
|
+
onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
|
|
10283
10313
|
// End updating the position of links connected to the selected element
|
|
10284
10314
|
//Set state to re-render UI with new position
|
|
10285
10315
|
setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
|
|
10286
|
-
if (
|
|
10316
|
+
if (onElementMoved) {
|
|
10287
10317
|
console.log('onElementMoved', selectedElement.position, paperPosition);
|
|
10288
|
-
|
|
10318
|
+
onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
|
|
10289
10319
|
}
|
|
10290
10320
|
paperEventEmitter.emitElementMoved(selectedElement, oldPosition, selectedElement.position);
|
|
10291
10321
|
setMouseDownedOnPaper(false);
|
|
@@ -10298,16 +10328,16 @@ var Paper = function (props) {
|
|
|
10298
10328
|
elements[indexSelectedElement].size = newSize;
|
|
10299
10329
|
var newElements = __spreadArray([], elements, true);
|
|
10300
10330
|
setElements(newElements);
|
|
10301
|
-
if (
|
|
10302
|
-
|
|
10331
|
+
if (onElementsChanged) {
|
|
10332
|
+
onElementsChanged(newElements);
|
|
10303
10333
|
}
|
|
10304
|
-
if (
|
|
10305
|
-
|
|
10334
|
+
if (onElementResized) {
|
|
10335
|
+
onElementResized(newSize, selectedElement, indexSelectedElement);
|
|
10306
10336
|
}
|
|
10307
10337
|
paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
|
|
10308
10338
|
setMouseDownedOnPaper(false);
|
|
10309
10339
|
} }))));
|
|
10310
|
-
}, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange,
|
|
10340
|
+
}, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, selectedElement, selectedElementSVG, selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y, zoom, autoEnabledDraggingSelectedElement, elements, getChildOfElement, paperEventEmitter, onElementResized, onElementsChanged, onElementMoved, onElementMouseDown, onElementMouseUp, onLinksChanged, onElementMoving]);
|
|
10311
10341
|
var ElementsInTree = React.useMemo(function () {
|
|
10312
10342
|
return elementsInTree.map(function (element, index) {
|
|
10313
10343
|
return renderElementInTree(element);
|
|
@@ -10439,6 +10469,12 @@ var Editor = function (_a) {
|
|
|
10439
10469
|
}
|
|
10440
10470
|
return null;
|
|
10441
10471
|
}, [editorContext]);
|
|
10472
|
+
var handleOnElementMoving = React.useCallback(function (element, newPaperPosition) {
|
|
10473
|
+
if (editorContext.onElementMovingHandler) {
|
|
10474
|
+
return editorContext.onElementMovingHandler(element, newPaperPosition);
|
|
10475
|
+
}
|
|
10476
|
+
return true;
|
|
10477
|
+
}, [editorContext]);
|
|
10442
10478
|
var handleOnCreatingPortByLinking = React.useCallback(function (sourceElement, sourcePort, targetElement, position) {
|
|
10443
10479
|
if (editorContext.onCreatingPortByLinkingHandler) {
|
|
10444
10480
|
return editorContext.onCreatingPortByLinkingHandler(sourceElement, sourcePort, targetElement, position);
|
|
@@ -10459,7 +10495,7 @@ var Editor = function (_a) {
|
|
|
10459
10495
|
}, [editorContext]);
|
|
10460
10496
|
return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
|
|
10461
10497
|
React.createElement(ZoomContextProvider, null,
|
|
10462
|
-
React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementDeleted: handleElementRemoved, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, manuallyTriggerRenderElementHandler: editorContext.manuallyTriggerRenderElementHandler.bind(editorContext), manuallyTriggerRenderPortHandler: editorContext.manuallyTriggerRenderPortHandler.bind(editorContext), manuallySelectElementHandler: editorContext.manuallySelectElementHandler.bind(editorContext), manuallyTriggerDraggingElementHandler: editorContext.manuallyTriggerDraggingElementHandler.bind(editorContext), manuallyTriggerStartedLinkingHandler: editorContext.manuallyTriggerStartedLinkingHandler.bind(editorContext) }))));
|
|
10498
|
+
React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementDeleted: handleElementRemoved, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onElementMoving: handleOnElementMoving, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, manuallyTriggerRenderElementHandler: editorContext.manuallyTriggerRenderElementHandler.bind(editorContext), manuallyTriggerRenderPortHandler: editorContext.manuallyTriggerRenderPortHandler.bind(editorContext), manuallySelectElementHandler: editorContext.manuallySelectElementHandler.bind(editorContext), manuallyTriggerDraggingElementHandler: editorContext.manuallyTriggerDraggingElementHandler.bind(editorContext), manuallyTriggerStartedLinkingHandler: editorContext.manuallyTriggerStartedLinkingHandler.bind(editorContext) }))));
|
|
10463
10499
|
};
|
|
10464
10500
|
|
|
10465
10501
|
exports.CircleRC = Circle;
|
|
@@ -41,6 +41,7 @@ interface PaperProps {
|
|
|
41
41
|
manuallyTriggerRenderPortHandler: (callback: (portId: string, elementId: string) => void) => () => void;
|
|
42
42
|
onCreatingPortByLinking?: (sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null;
|
|
43
43
|
onCreatingLink?: (sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null;
|
|
44
|
+
onElementMoving?: (element: IElement, newPaperPosition: IPosition) => boolean;
|
|
44
45
|
manuallySelectElementHandler?: (callback: (element: IElement | null) => void) => (() => void);
|
|
45
46
|
manuallyTriggerDraggingElementHandler?: (callback: (element: IElement) => void) => (() => void);
|
|
46
47
|
manuallyTriggerStartedLinkingHandler?: (callback: (sourceElement: IElement, sourcePort: IPort) => void) => (() => void);
|
|
@@ -7,5 +7,5 @@ export default class DiamondElement extends Element {
|
|
|
7
7
|
resizability: IResizability;
|
|
8
8
|
get size(): ISize;
|
|
9
9
|
set size(value: ISize);
|
|
10
|
-
constructor(x: number, y: number, width: number, height: number, cssClass?: string, texts?: IText[], ports?: IPort[]);
|
|
10
|
+
constructor(x: number, y: number, width: number, height: number, selectable?: boolean, cssClass?: string, texts?: IText[], ports?: IPort[]);
|
|
11
11
|
}
|
|
@@ -7,5 +7,5 @@ import IPosition from '../models/position';
|
|
|
7
7
|
export default class RectangularFrameElement extends Element {
|
|
8
8
|
resizability: IResizability;
|
|
9
9
|
defaultPortSize?: number | undefined;
|
|
10
|
-
constructor(x: number, y: number, width: number, height: number, cssClass?: string, texts?: IText[], ports?: IPort[], textsPlaceHolderClassName?: string, textsPlaceHolderFlexStyle?: IFlexboxType, textsPlaceHolderFlexboxPosition?: IPosition);
|
|
10
|
+
constructor(x: number, y: number, width: number, height: number, selectable?: boolean, cssClass?: string, texts?: IText[], ports?: IPort[], textsPlaceHolderClassName?: string, textsPlaceHolderFlexStyle?: IFlexboxType, textsPlaceHolderFlexboxPosition?: IPosition);
|
|
11
11
|
}
|
|
@@ -13,6 +13,7 @@ export default interface IEditorContext {
|
|
|
13
13
|
configuration: IEditorConfiguration;
|
|
14
14
|
onCreatingPortByLinkingHandler?: (sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null;
|
|
15
15
|
onCreatingLinkHandler?: (sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null;
|
|
16
|
+
onElementMovingHandler?: (element: IElement, newPaperPosition: IPosition) => boolean;
|
|
16
17
|
onPaperClicked: (callback: (paperPosition: IPosition) => void) => (() => void);
|
|
17
18
|
onPaperMouseMoved: (callback: (paperPosition: IPosition) => void) => (() => void);
|
|
18
19
|
onPaperMouseUp: (callback: (paperPosition: IPosition) => void) => (() => void);
|
|
@@ -13,6 +13,7 @@ export default interface IElement {
|
|
|
13
13
|
position: IPosition;
|
|
14
14
|
positionAnchor?: PositioningAnchor;
|
|
15
15
|
size: ISize;
|
|
16
|
+
selectable?: boolean;
|
|
16
17
|
moveAsPortOnParent?: boolean;
|
|
17
18
|
/**
|
|
18
19
|
* @deprecated This property is deprecated and will be removed in future versions.
|
|
@@ -15,6 +15,7 @@ export declare class EditorContext implements IEditorContext {
|
|
|
15
15
|
private _configuration;
|
|
16
16
|
onCreatingPortByLinkingHandler?: ((sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null) | undefined;
|
|
17
17
|
onCreatingLinkHandler?: ((sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null) | undefined;
|
|
18
|
+
onElementMovingHandler?: (element: IElement, newPaperPosition: IPosition) => boolean;
|
|
18
19
|
constructor(elements: IElement[], links: IElementLink[], texts: IPaperText[], configuration?: IEditorConfiguration);
|
|
19
20
|
private addEventListener;
|
|
20
21
|
get elements(): IElement[];
|
|
@@ -17,6 +17,7 @@ export default class Element implements IElement {
|
|
|
17
17
|
protected _size: ISize;
|
|
18
18
|
private _parentElement?;
|
|
19
19
|
private _childrenElements;
|
|
20
|
+
selectable?: boolean | undefined;
|
|
20
21
|
cssClass?: string;
|
|
21
22
|
moveAsPortOnParent?: boolean | undefined;
|
|
22
23
|
/**
|
|
@@ -37,7 +38,7 @@ export default class Element implements IElement {
|
|
|
37
38
|
textsPlaceHolderFlexStyle?: IFlexboxType;
|
|
38
39
|
textsPlaceHolderFlexboxPosition?: IPosition;
|
|
39
40
|
_eventEmitter: EventEmitter;
|
|
40
|
-
constructor(id: string | null, x: number, y: number, width: number, height: number, cssClass?: string, renderShape?: (props: IElementProps) => JSX.Element, texts?: IText[], ports?: IPort[], portMovealeAreas?: IPosition[][], portSlideRailSVGClassName?: string, portDirection?: SubObjectDirection, parentElement?: IElement, textsPlaceHolderClassName?: string, textsPlaceHolderFlexStyle?: IFlexboxType, textsPlaceHolderFlexboxPosition?: IPosition);
|
|
41
|
+
constructor(id: string | null, x: number, y: number, width: number, height: number, selectable?: boolean, cssClass?: string, renderShape?: (props: IElementProps) => JSX.Element, texts?: IText[], ports?: IPort[], portMovealeAreas?: IPosition[][], portSlideRailSVGClassName?: string, portDirection?: SubObjectDirection, parentElement?: IElement, textsPlaceHolderClassName?: string, textsPlaceHolderFlexStyle?: IFlexboxType, textsPlaceHolderFlexboxPosition?: IPosition);
|
|
41
42
|
get id(): string;
|
|
42
43
|
get size(): ISize;
|
|
43
44
|
set size(value: ISize);
|