orcasvn-react-diagrams 0.1.65 → 0.1.67

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
@@ -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
- var _c = React.useState(objectX !== null && objectX !== void 0 ? objectX : 0), curX = _c[0], setCurX = _c[1];
7726
- var _d = React.useState(objectY !== null && objectY !== void 0 ? objectY : 0), curY = _d[0], setCurY = _d[1];
7727
- React.useEffect(function () {
7728
- if (objectX) {
7729
- setCurX(objectX);
7730
- }
7731
- }, [objectX]);
7732
- React.useEffect(function () {
7733
- if (objectY) {
7734
- setCurY(objectY);
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 _e = React.useState(draggingByDefault || false), draggingRect = _e[0], setDraggingRect = _e[1];
7740
- var _f = React.useState(false), draggingCircle = _f[0], setDraggingCircle = _f[1];
7741
- var _g = React.useState(0), startX = _g[0], setStartX = _g[1];
7742
- var _h = React.useState(0), startY = _h[0], setStartY = _h[1];
7743
- var _j = React.useState(0), xFromMouse = _j[0], setXFromMouse = _j[1];
7744
- var _k = React.useState(0), yFromMouse = _k[0], setYFromMouse = _k[1];
7745
- var _l = React.useState(0), lastMoveTime = _l[0], setLastMoveTime = _l[1];
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) => {
@@ -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 = (curX || 0) - mousePosition.x;
7770
- var yFromMouse_1 = (curY || 0) - mousePosition.y;
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,8 +7787,8 @@ 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);
@@ -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 - curX;
7842
- var newHeight = mousePosition.y - curY;
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, curX, curY, lastMoveTime, propContainer, getMousePosition, propMovingRate, propOnResize, propResizability, startX, startY]);
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;
@@ -9009,7 +9010,9 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9009
9010
  selectedPort.position = newPosition;
9010
9011
  onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(selectedPort, id, oldPosition, newPosition);
9011
9012
  setPorts(__spreadArray([], portsRef.current, true));
9012
- _paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
9013
+ if (_paperEventEmitterContext.emitter.listenerCount(EVENT_NAME.PORT_MOVED) > 0) {
9014
+ _paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
9015
+ }
9013
9016
  }
9014
9017
  };
9015
9018
  //Handle when mouse down on port
@@ -9198,11 +9201,11 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9198
9201
  //Re-render port again after rendered to automation rotate port
9199
9202
  //Because elementRef.current equals null in first render so automation rotate port is incorrect.
9200
9203
  //TODO: check if this is still needed -> Still needed
9201
- React.useLayoutEffect(function () {
9202
- if (elementRef.current) {
9203
- setPorts(function (prev) { return __spreadArray([], prev, true); });
9204
- }
9205
- }, []);
9204
+ // useLayoutEffect(() => {
9205
+ // if (elementRef.current) {
9206
+ // setPorts(prev => [...prev])
9207
+ // }
9208
+ // }, [])
9206
9209
  //log element render
9207
9210
  logger.debug('Rendering Element', id, x, y, width, height, cssClass, portPlaceholderShape, children, container, parentAbsolutePosition, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName, texts, ports, portSlideRailSVGClassName, portMoveableAreas, portDirection, defaultPortSize);
9208
9211
  return (React.createElement(React.Fragment, null,
@@ -9475,34 +9478,46 @@ function convertElementsToTree(elements) {
9475
9478
  return parsedElementsInTree;
9476
9479
  }
9477
9480
  var Paper = function (props) {
9478
- var _a = React.useState([]), elements = _a[0], setElements = _a[1];
9479
- var _b = React.useState([]), elementsInTree = _b[0], setElementsInTree = _b[1];
9480
- var _c = React.useState(), selectedElement = _c[0], setSelectedElement = _c[1];
9481
- var _d = React.useState(false), autoEnabledDraggingSelectedElement = _d[0], setAutoEnabledDraggingSelectedElement = _d[1];
9482
- var _e = React.useState([]), links = _e[0], setLinks = _e[1];
9483
- var _f = React.useState(), selectedLink = _f[0], setSelectedLink = _f[1];
9484
- var _g = React.useState(null), tempLink = _g[0], setTempLink = _g[1];
9485
- var _h = React.useState([]), texts = _h[0], setTexts = _h[1];
9486
- var _j = React.useState(), selectedText = _j[0], setSelectedText = _j[1];
9487
- var _k = React.useState(null), selectedElementSVG = _k[0], setSelectedElementSVG = _k[1];
9488
- var _l = React.useState(false), mouseDownedOnPaper = _l[0], setMouseDownedOnPaper = _l[1];
9481
+ var _a, _b;
9482
+ var _c = React.useState({ elements: [], elementsInTree: [] }), elementsState = _c[0], setElementsState = _c[1];
9483
+ // const [elements, setElements] = React.useState<IElementState[]>([]);
9484
+ // const [elementsInTree, setElementsInTree] = React.useState<IElementInTreeState[]>([]);
9485
+ var _d = React.useState(), selectedElement = _d[0], setSelectedElement = _d[1];
9486
+ var _e = React.useState(false), autoEnabledDraggingSelectedElement = _e[0], setAutoEnabledDraggingSelectedElement = _e[1];
9487
+ var _f = React.useState([]), links = _f[0], setLinks = _f[1];
9488
+ var _g = React.useState(), selectedLink = _g[0], setSelectedLink = _g[1];
9489
+ var _h = React.useState(null), tempLink = _h[0], setTempLink = _h[1];
9490
+ var _j = React.useState([]), texts = _j[0], setTexts = _j[1];
9491
+ var _k = React.useState(), selectedText = _k[0], setSelectedText = _k[1];
9492
+ var _l = React.useState(null), selectedElementSVG = _l[0], setSelectedElementSVG = _l[1];
9493
+ var _m = React.useState(false), mouseDownedOnPaper = _m[0], setMouseDownedOnPaper = _m[1];
9489
9494
  var paperEventEmitter = React.useContext(paperEventEmitterContext);
9490
9495
  var zoom = useZoomContext().zoom;
9491
9496
  var zoomRef = React.useRef(zoom);
9492
9497
  var paperContainerRef = React.useRef(null);
9493
9498
  var tempLinkRef = React.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
9494
- var elementsRef = React.useRef(elements); //Cache elements to avoid re-render when elements changed
9499
+ var elementsRef = React.useRef([]); //Cache elements to avoid re-render when elements changed
9495
9500
  var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
9496
9501
  var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
9497
9502
  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, 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, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9503
+ 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]);
9504
+ var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp,
9505
+ //onPortsChanged,
9506
+ 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;
9507
+ var handleElementsState = React.useCallback(function (elements) {
9508
+ var elementsInTree = convertElementsToTree(elements);
9509
+ setElementsState({ elements: __spreadArray([], elements, true), elementsInTree: elementsInTree });
9510
+ elementsRef.current = __spreadArray([], elements, true);
9511
+ }, []);
9512
+ var rerenderWhenAnyElementChanged = React.useCallback(function () {
9513
+ setElementsState(function (prev) { return ({ elements: __spreadArray([], prev.elements, true), elementsInTree: __spreadArray([], prev.elementsInTree, true) }); });
9514
+ }, []);
9500
9515
  React.useEffect(function () {
9501
9516
  zoomRef.current = zoom;
9502
9517
  }, [zoom]);
9503
9518
  React.useEffect(function () {
9504
- setElements(__spreadArray([], props.elements, true));
9505
- }, [props.elements]);
9519
+ handleElementsState(props.elements);
9520
+ }, [handleElementsState, props.elements]);
9506
9521
  React.useEffect(function () {
9507
9522
  setLinks(__spreadArray([], props.links || [], true));
9508
9523
  }, [props.links]);
@@ -9511,16 +9526,16 @@ var Paper = function (props) {
9511
9526
  }, [props.texts]);
9512
9527
  React.useEffect(function () {
9513
9528
  var off = manuallyTriggerRenderElementHandler(function (elementId) {
9514
- var newElements = __spreadArray([], elements, true);
9515
- setElements(newElements);
9516
- if (onElementsChanged) {
9517
- onElementsChanged(newElements);
9518
- }
9529
+ rerenderWhenAnyElementChanged();
9530
+ //setElementsState(prevElementsState => ({ ...prevElementsState }));
9531
+ // if (onElementsChanged) {
9532
+ // onElementsChanged(newElements)
9533
+ // }
9519
9534
  });
9520
9535
  return function () {
9521
9536
  off();
9522
9537
  };
9523
- }, [manuallyTriggerRenderElementHandler, onElementsChanged, elements, selectedElement]);
9538
+ }, [manuallyTriggerRenderElementHandler, rerenderWhenAnyElementChanged]);
9524
9539
  React.useEffect(function () {
9525
9540
  var offs = [];
9526
9541
  offs.push(manuallySelectElementHandler === null || manuallySelectElementHandler === void 0 ? void 0 : manuallySelectElementHandler(function (element) {
@@ -9555,15 +9570,15 @@ var Paper = function (props) {
9555
9570
  };
9556
9571
  }
9557
9572
  }, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
9558
- var updateElementsTree = React.useCallback(function () {
9559
- var parsedElementsInTree = convertElementsToTree(elements);
9560
- setElementsInTree(parsedElementsInTree);
9561
- }, [elements]);
9562
- //Cache elements to avoid re-render when elements changed
9563
- React.useEffect(function () {
9564
- elementsRef.current = elements;
9565
- updateElementsTree();
9566
- }, [elements, updateElementsTree]);
9573
+ // const updateElementsTree = useCallback(() => {
9574
+ // const parsedElementsInTree = convertElementsToTree(element)
9575
+ // setElementsInTree(parsedElementsInTree)
9576
+ // }, [elements])
9577
+ // //Cache elements to avoid re-render when elements changed
9578
+ // useEffect(() => {
9579
+ // elementsRef.current = elements;
9580
+ // updateElementsTree();
9581
+ // }, [elements, updateElementsTree])
9567
9582
  //Cache links to avoid re-render when links changed
9568
9583
  React.useEffect(function () {
9569
9584
  linksRef.current = links;
@@ -9614,7 +9629,7 @@ var Paper = function (props) {
9614
9629
  var _a;
9615
9630
  return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
9616
9631
  logger.info('onParentChanged');
9617
- updateElementsTree();
9632
+ handleElementsState(elementsRef.current);
9618
9633
  });
9619
9634
  });
9620
9635
  //Listen a new port added, then re-render the element component
@@ -9622,25 +9637,21 @@ var Paper = function (props) {
9622
9637
  var _a;
9623
9638
  return (_a = element.onAddedPort) === null || _a === void 0 ? void 0 : _a.call(element, function (newPort) {
9624
9639
  logger.info("A new port has been added to element ".concat(element.id));
9625
- var prevElements = elementsRef.current;
9626
- var newElements = prevElements.map(function (ele) {
9640
+ elementsRef.current.forEach(function (ele) {
9627
9641
  if (ele.id === element.id) {
9628
9642
  ele.ports = __spreadArray([], (ele.ports || []), true);
9629
9643
  }
9630
- return ele;
9631
9644
  });
9632
9645
  //Set state to re-render component
9633
- setElements(newElements);
9634
- if (onElementsChanged) {
9635
- onElementsChanged(newElements);
9636
- }
9646
+ // setElements(newElements)
9647
+ rerenderWhenAnyElementChanged();
9637
9648
  });
9638
9649
  });
9639
9650
  return function () {
9640
9651
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9641
9652
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9642
9653
  };
9643
- }, [updateElementsTree, onElementsChanged]);
9654
+ }, [handleElementsState, rerenderWhenAnyElementChanged]);
9644
9655
  // //Update elements tree when length of elements change
9645
9656
  // useEffect(() => {
9646
9657
  // updateElementsTree();
@@ -9666,7 +9677,7 @@ var Paper = function (props) {
9666
9677
  var newElements = prevElements.filter(function (e) { return !deletedElementIds_1.includes(e.id); });
9667
9678
  onElementDeleted === null || onElementDeleted === void 0 ? void 0 : onElementDeleted(selectedElement);
9668
9679
  //Set state to re-render component
9669
- setElements(newElements);
9680
+ handleElementsState(newElements);
9670
9681
  if (onElementsChanged) {
9671
9682
  onElementsChanged(newElements);
9672
9683
  }
@@ -9688,7 +9699,7 @@ var Paper = function (props) {
9688
9699
  return function () {
9689
9700
  listener.off();
9690
9701
  };
9691
- }, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted]);
9702
+ }, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted, handleElementsState]);
9692
9703
  //Listen command delete selected for link
9693
9704
  React.useEffect(function () {
9694
9705
  var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
@@ -9823,6 +9834,7 @@ var Paper = function (props) {
9823
9834
  }
9824
9835
  }, [onLinksChanged]);
9825
9836
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9837
+ var _a;
9826
9838
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9827
9839
  if (element) {
9828
9840
  //set links equals a clone links to re-render links with new position
@@ -9852,7 +9864,7 @@ var Paper = function (props) {
9852
9864
  if (onLinksChanged) {
9853
9865
  onLinksChanged(newLinks);
9854
9866
  }
9855
- var newElements = elementsRef.current;
9867
+ //const newElements = elementsRef.current;
9856
9868
  // newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
9857
9869
  // if (p.id === port.id) {
9858
9870
  // p.position = newPosition
@@ -9861,28 +9873,25 @@ var Paper = function (props) {
9861
9873
  // })
9862
9874
  //Update port position in element, not re-render
9863
9875
  //To avoid re-render
9864
- setElements(function (prev) {
9865
- var _a;
9866
- var newElements = __spreadArray([], prev, true);
9867
- var updatedElement = newElements.find(function (e) { return e.id === elementId; });
9868
- if (updatedElement) {
9869
- updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9870
- if (p.id === port.id) {
9871
- p.position = newPosition;
9872
- }
9873
- return p;
9874
- });
9875
- }
9876
- return newElements;
9877
- });
9878
- if (onElementsChanged) {
9879
- onElementsChanged(newElements);
9876
+ // setElements(prev => {
9877
+ // const newElements = [...prev]
9878
+ var updatedElement = elementsRef.current.find(function (e) { return e.id === elementId; });
9879
+ if (updatedElement) {
9880
+ updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9881
+ if (p.id === port.id) {
9882
+ p.position = newPosition;
9883
+ }
9884
+ return p;
9885
+ });
9880
9886
  }
9887
+ rerenderWhenAnyElementChanged();
9888
+ // return newElements
9889
+ // });
9881
9890
  if (onPortMoved) {
9882
9891
  onPortMoved(newPosition, port, element);
9883
9892
  }
9884
9893
  }
9885
- }, [onPortMoved, onElementsChanged, onLinksChanged]);
9894
+ }, [onPortMoved, onLinksChanged, rerenderWhenAnyElementChanged]);
9886
9895
  //Handle creating a new element link
9887
9896
  var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
9888
9897
  ev.stopPropagation();
@@ -9918,8 +9927,8 @@ var Paper = function (props) {
9918
9927
  return null;
9919
9928
  //Automatic bending, if is not defined points
9920
9929
  if (!newElementLink.points || newElementLink.points.length === 0) {
9921
- var elements_1 = elementsRef.current;
9922
- newElementLink = automationAddPointsToLink(newElementLink, elements_1, MAX_LINK_KNOT_COUNT);
9930
+ var elements = elementsRef.current;
9931
+ newElementLink = automationAddPointsToLink(newElementLink, elements, MAX_LINK_KNOT_COUNT);
9923
9932
  }
9924
9933
  return newElementLink;
9925
9934
  }, [onCreatingLink]);
@@ -9959,13 +9968,13 @@ var Paper = function (props) {
9959
9968
  setTempLink(null);
9960
9969
  }
9961
9970
  }, [paperEventEmitter, createElementLink, onPortMouseUp, onLinksChanged]);
9962
- var handlePortsChanged = React.useCallback(function (ports, elementId) {
9963
- var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9964
- if (element) {
9965
- //broadcast ports changed to parent component
9966
- onPortsChanged(ports, element);
9967
- }
9968
- }, [onPortsChanged]);
9971
+ // const handlePortsChanged = useCallback((ports: IPort[], elementId: string) => {
9972
+ // const element = elementsRef.current.find(e => e.id === elementId);
9973
+ // if (element) {
9974
+ // //broadcast ports changed to parent component
9975
+ // onPortsChanged(ports, element);
9976
+ // }
9977
+ // }, [onPortsChanged])
9969
9978
  var handleLinkLabelMoved = React.useCallback(function (newX, newY, index, labelType) {
9970
9979
  var prevLinks = linksRef.current;
9971
9980
  var newLinks = __spreadArray([], prevLinks, true);
@@ -10141,8 +10150,8 @@ var Paper = function (props) {
10141
10150
  paperEventEmitter.emitElementLinkEnded();
10142
10151
  }, [onCreatingPortByLinking, createElementLink, paperEventEmitter, onLinksChanged]);
10143
10152
  var handleElementTextChange = React.useCallback(function (elementId, textId, newContent) {
10144
- var prevElms = elementsRef.current;
10145
- var newElements = prevElms.map(function (curEle) {
10153
+ // const prevElms = elementsRef.current;
10154
+ elementsRef.current.forEach(function (curEle) {
10146
10155
  //Find changed text of element to update the content for it.
10147
10156
  if (curEle.id === elementId && curEle.texts) {
10148
10157
  var updatedTextId = curEle.texts.findIndex(function (t) { return t.id === textId; });
@@ -10150,13 +10159,9 @@ var Paper = function (props) {
10150
10159
  curEle.texts[updatedTextId].content = newContent;
10151
10160
  }
10152
10161
  }
10153
- return curEle;
10154
10162
  });
10155
- setElements(newElements);
10156
- if (onElementsChanged) {
10157
- onElementsChanged(newElements);
10158
- }
10159
- }, [onElementsChanged]);
10163
+ rerenderWhenAnyElementChanged();
10164
+ }, [rerenderWhenAnyElementChanged]);
10160
10165
  var handleElementClicked = React.useCallback(function (elementId, e, ref) {
10161
10166
  e.stopPropagation();
10162
10167
  var tempLink = tempLinkRef.current;
@@ -10167,8 +10172,9 @@ var Paper = function (props) {
10167
10172
  }
10168
10173
  else {
10169
10174
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10170
- setSelectedElementSVG(ref);
10171
- if (element) {
10175
+ // Select the element only if it is selectable
10176
+ if (element && element.selectable) {
10177
+ setSelectedElementSVG(ref);
10172
10178
  setSelectedElement(element);
10173
10179
  setAutoEnabledDraggingSelectedElement(false);
10174
10180
  paperEventEmitter.emitElementSelected(element);
@@ -10236,7 +10242,9 @@ var Paper = function (props) {
10236
10242
  //use the defined react element or the default Element component
10237
10243
  var ReactElement = element.reactElement || Element$1;
10238
10244
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
10239
- 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,
10245
+ 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,
10246
+ // onPortsChanged={handlePortsChanged}
10247
+ onPortContextMenu: handlePortContextMenu,
10240
10248
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10241
10249
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
10242
10250
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
@@ -10271,6 +10279,13 @@ var Paper = function (props) {
10271
10279
  x: newX,
10272
10280
  y: newY
10273
10281
  };
10282
+ //Call onElementMoving to check if the element should be moved or not
10283
+ if (onElementMoving) {
10284
+ var isSkip = onElementMoving(selectedElement, paperPosition);
10285
+ if (!isSkip) {
10286
+ return;
10287
+ }
10288
+ }
10274
10289
  logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
10275
10290
  //Adjust position of element if it should move as a port on parent port area
10276
10291
  if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
@@ -10281,7 +10296,7 @@ var Paper = function (props) {
10281
10296
  updateElementPosition(selectedElement, paperPosition.x, paperPosition.y, false);
10282
10297
  }
10283
10298
  //let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
10284
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
10299
+ var indexSelectedElement = elementsRef.current.findIndex(function (e) { return e.id === selectedElement.id; });
10285
10300
  logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
10286
10301
  // Start updating the position of links connected to the selected element
10287
10302
  var childElements = getChildOfElement(selectedElement);
@@ -10302,7 +10317,7 @@ var Paper = function (props) {
10302
10317
  onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
10303
10318
  // End updating the position of links connected to the selected element
10304
10319
  //Set state to re-render UI with new position
10305
- setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
10320
+ rerenderWhenAnyElementChanged();
10306
10321
  if (onElementMoved) {
10307
10322
  console.log('onElementMoved', selectedElement.position, paperPosition);
10308
10323
  onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
@@ -10312,27 +10327,23 @@ var Paper = function (props) {
10312
10327
  }, onResize: function (width, height) {
10313
10328
  if (!selectedElement)
10314
10329
  return;
10315
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
10330
+ var indexSelectedElement = elementsRef.current.findIndex(function (e) { return e.id === selectedElement.id; });
10316
10331
  var oldSize = selectedElement.size;
10317
10332
  var newSize = { width: width, height: height };
10318
- elements[indexSelectedElement].size = newSize;
10319
- var newElements = __spreadArray([], elements, true);
10320
- setElements(newElements);
10321
- if (onElementsChanged) {
10322
- onElementsChanged(newElements);
10323
- }
10333
+ elementsRef.current[indexSelectedElement].size = newSize;
10334
+ rerenderWhenAnyElementChanged();
10324
10335
  if (onElementResized) {
10325
10336
  onElementResized(newSize, selectedElement, indexSelectedElement);
10326
10337
  }
10327
10338
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10328
10339
  setMouseDownedOnPaper(false);
10329
10340
  } }))));
10330
- }, [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]);
10341
+ }, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, 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, getChildOfElement, paperEventEmitter, onElementResized, onElementMoved, onElementMouseDown, onElementMouseUp, onLinksChanged, onElementMoving, rerenderWhenAnyElementChanged]);
10331
10342
  var ElementsInTree = React.useMemo(function () {
10332
- return elementsInTree.map(function (element, index) {
10343
+ return elementsState.elementsInTree.map(function (element, index) {
10333
10344
  return renderElementInTree(element);
10334
10345
  });
10335
- }, [elementsInTree, renderElementInTree]);
10346
+ }, [elementsState.elementsInTree, renderElementInTree]);
10336
10347
  return (React.createElement("div", { style: { position: "relative" } },
10337
10348
  React.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
10338
10349
  React.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
@@ -10408,9 +10419,6 @@ var Editor = function (_a) {
10408
10419
  var handlePortSelected = React.useCallback(function (port, element) {
10409
10420
  editorContext.onPortSelectedHandler(port, element);
10410
10421
  }, [editorContext]);
10411
- var handlePortsChanged = React.useCallback(function (ports, element) {
10412
- element.ports = ports;
10413
- }, []);
10414
10422
  var handlePortContextMenu = React.useCallback(function (port, element, event) {
10415
10423
  editorContext.onPortContextMenuHandler(port, element, event);
10416
10424
  }, [editorContext]);
@@ -10459,6 +10467,12 @@ var Editor = function (_a) {
10459
10467
  }
10460
10468
  return null;
10461
10469
  }, [editorContext]);
10470
+ var handleOnElementMoving = React.useCallback(function (element, newPaperPosition) {
10471
+ if (editorContext.onElementMovingHandler) {
10472
+ return editorContext.onElementMovingHandler(element, newPaperPosition);
10473
+ }
10474
+ return true;
10475
+ }, [editorContext]);
10462
10476
  var handleOnCreatingPortByLinking = React.useCallback(function (sourceElement, sourcePort, targetElement, position) {
10463
10477
  if (editorContext.onCreatingPortByLinkingHandler) {
10464
10478
  return editorContext.onCreatingPortByLinkingHandler(sourceElement, sourcePort, targetElement, position);
@@ -10479,7 +10493,9 @@ var Editor = function (_a) {
10479
10493
  }, [editorContext]);
10480
10494
  return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
10481
10495
  React.createElement(ZoomContextProvider, null,
10482
- 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) }))));
10496
+ 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,
10497
+ //onPortsChanged={handlePortsChanged}
10498
+ 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) }))));
10483
10499
  };
10484
10500
 
10485
10501
  exports.CircleRC = Circle;
@@ -21,7 +21,6 @@ interface PaperProps {
21
21
  onPortMouseUp?: (port: IPort, element: IElement, paperPosition: IPosition) => void;
22
22
  onPortMoved?: (relativePosition: IPosition, port: IPort, element: IElement) => void;
23
23
  onPortSelected?: (port: IPort, element: IElement) => void;
24
- onPortsChanged: (ports: IPort[], element: IElement) => void;
25
24
  onPortContextMenu?: (port: IPort, element: IElement, mouseEvent: React.MouseEvent<SVGElement>) => void;
26
25
  onElementContextMenu?: (element: IElement, mouseEvent: React.MouseEvent<SVGElement>) => void;
27
26
  onElementMoved?: (relativePosition: IPosition, element: IElement, index: number, paperPosition: IPosition) => void;
@@ -41,6 +40,7 @@ interface PaperProps {
41
40
  manuallyTriggerRenderPortHandler: (callback: (portId: string, elementId: string) => void) => () => void;
42
41
  onCreatingPortByLinking?: (sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null;
43
42
  onCreatingLink?: (sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null;
43
+ onElementMoving?: (element: IElement, newPaperPosition: IPosition) => boolean;
44
44
  manuallySelectElementHandler?: (callback: (element: IElement | null) => void) => (() => void);
45
45
  manuallyTriggerDraggingElementHandler?: (callback: (element: IElement) => void) => (() => void);
46
46
  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.
@@ -12,6 +12,7 @@ interface IElementProps {
12
12
  y: number;
13
13
  width: number;
14
14
  height: number;
15
+ selectable?: boolean;
15
16
  cssClass?: string;
16
17
  renderShape?: (props: IElementProps) => JSX.Element;
17
18
  children?: React.ReactNode;
@@ -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[];