orcasvn-react-diagrams 0.1.65 → 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 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;
@@ -9475,17 +9476,18 @@ function convertElementsToTree(elements) {
9475
9476
  return parsedElementsInTree;
9476
9477
  }
9477
9478
  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];
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,8 +9497,8 @@ 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, 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;
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]);
@@ -10167,8 +10169,9 @@ var Paper = function (props) {
10167
10169
  }
10168
10170
  else {
10169
10171
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10170
- setSelectedElementSVG(ref);
10171
- if (element) {
10172
+ // Select the element only if it is selectable
10173
+ if (element && element.selectable) {
10174
+ setSelectedElementSVG(ref);
10172
10175
  setSelectedElement(element);
10173
10176
  setAutoEnabledDraggingSelectedElement(false);
10174
10177
  paperEventEmitter.emitElementSelected(element);
@@ -10236,7 +10239,7 @@ var Paper = function (props) {
10236
10239
  //use the defined react element or the default Element component
10237
10240
  var ReactElement = element.reactElement || Element$1;
10238
10241
  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,
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,
10240
10243
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10241
10244
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
10242
10245
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
@@ -10271,6 +10274,13 @@ var Paper = function (props) {
10271
10274
  x: newX,
10272
10275
  y: newY
10273
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
+ }
10274
10284
  logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
10275
10285
  //Adjust position of element if it should move as a port on parent port area
10276
10286
  if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
@@ -10327,7 +10337,7 @@ var Paper = function (props) {
10327
10337
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10328
10338
  setMouseDownedOnPaper(false);
10329
10339
  } }))));
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]);
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]);
10331
10341
  var ElementsInTree = React.useMemo(function () {
10332
10342
  return elementsInTree.map(function (element, index) {
10333
10343
  return renderElementInTree(element);
@@ -10459,6 +10469,12 @@ var Editor = function (_a) {
10459
10469
  }
10460
10470
  return null;
10461
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]);
10462
10478
  var handleOnCreatingPortByLinking = React.useCallback(function (sourceElement, sourcePort, targetElement, position) {
10463
10479
  if (editorContext.onCreatingPortByLinkingHandler) {
10464
10480
  return editorContext.onCreatingPortByLinkingHandler(sourceElement, sourcePort, targetElement, position);
@@ -10479,7 +10495,7 @@ var Editor = function (_a) {
10479
10495
  }, [editorContext]);
10480
10496
  return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
10481
10497
  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) }))));
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) }))));
10483
10499
  };
10484
10500
 
10485
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.
@@ -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[];
@@ -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);
package/dist/esm/index.js CHANGED
@@ -480,7 +480,7 @@ function generateUniqueId() {
480
480
  }
481
481
 
482
482
  var Element$2 = /** @class */ (function () {
483
- function Element(id, x, y, width, height, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
483
+ function Element(id, x, y, width, height, selectable, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
484
484
  if (portMovealeAreas === void 0) { portMovealeAreas = []; }
485
485
  this.positionAnchor = PositioningAnchor.TopLeft;
486
486
  this._childrenElements = [];
@@ -493,6 +493,7 @@ var Element$2 = /** @class */ (function () {
493
493
  this._id = id || generateUniqueId();
494
494
  this._position = { x: x, y: y };
495
495
  this._size = { width: width, height: height };
496
+ this.selectable = selectable === undefined ? true : selectable;
496
497
  this.cssClass = cssClass;
497
498
  this.renderShape = renderShape;
498
499
  this.texts = texts;
@@ -7718,27 +7719,27 @@ var SelectionFrame = function (props) {
7718
7719
  setHeight(propHeight);
7719
7720
  }
7720
7721
  }, [objectY, propHeight]);
7721
- var _c = React.useState(objectX !== null && objectX !== void 0 ? objectX : 0), curX = _c[0], setCurX = _c[1];
7722
- var _d = React.useState(objectY !== null && objectY !== void 0 ? objectY : 0), curY = _d[0], setCurY = _d[1];
7723
- useEffect(function () {
7724
- if (objectX) {
7725
- setCurX(objectX);
7726
- }
7727
- }, [objectX]);
7728
- useEffect(function () {
7729
- if (objectY) {
7730
- setCurY(objectY);
7731
- }
7732
- }, [objectY]);
7722
+ // const [curX, setCurX] = React.useState<number>(objectX ?? 0)
7723
+ // const [curY, setCurY] = React.useState<number>(objectY ?? 0)
7724
+ // useEffect(() => {
7725
+ // if (objectX) {
7726
+ // setCurX(objectX);
7727
+ // }
7728
+ // }, [objectX]);
7729
+ // useEffect(() => {
7730
+ // if (objectY) {
7731
+ // setCurY(objectY);
7732
+ // }
7733
+ // }, [objectY]);
7733
7734
  var framePadding = propFramePadding || 0;
7734
7735
  var r = 5;
7735
- var _e = React.useState(draggingByDefault || false), draggingRect = _e[0], setDraggingRect = _e[1];
7736
- var _f = React.useState(false), draggingCircle = _f[0], setDraggingCircle = _f[1];
7737
- var _g = React.useState(0), startX = _g[0], setStartX = _g[1];
7738
- var _h = React.useState(0), startY = _h[0], setStartY = _h[1];
7739
- var _j = useState(0), xFromMouse = _j[0], setXFromMouse = _j[1];
7740
- var _k = useState(0), yFromMouse = _k[0], setYFromMouse = _k[1];
7741
- var _l = React.useState(0), lastMoveTime = _l[0], setLastMoveTime = _l[1];
7736
+ var _c = React.useState(draggingByDefault || false), draggingRect = _c[0], setDraggingRect = _c[1];
7737
+ var _d = React.useState(false), draggingCircle = _d[0], setDraggingCircle = _d[1];
7738
+ var _e = React.useState(0), startX = _e[0], setStartX = _e[1];
7739
+ var _f = React.useState(0), startY = _f[0], setStartY = _f[1];
7740
+ var _g = useState(0), xFromMouse = _g[0], setXFromMouse = _g[1];
7741
+ var _h = useState(0), yFromMouse = _h[0], setYFromMouse = _h[1];
7742
+ var _j = React.useState(0), lastMoveTime = _j[0], setLastMoveTime = _j[1];
7742
7743
  // const { onStartDraggingElement } = useContext(paperEventEmitterContext);
7743
7744
  // useEffect(() => {
7744
7745
  // const { off } = onStartDraggingElement((element) => {
@@ -7762,8 +7763,8 @@ var SelectionFrame = function (props) {
7762
7763
  setStartX(event.clientX);
7763
7764
  setStartY(event.clientY);
7764
7765
  var mousePosition = getMousePosition(event);
7765
- var xFromMouse_1 = (curX || 0) - mousePosition.x;
7766
- var yFromMouse_1 = (curY || 0) - mousePosition.y;
7766
+ var xFromMouse_1 = (objectX || 0) - mousePosition.x;
7767
+ var yFromMouse_1 = (objectY || 0) - mousePosition.y;
7767
7768
  setXFromMouse(xFromMouse_1);
7768
7769
  setYFromMouse(yFromMouse_1);
7769
7770
  }
@@ -7782,8 +7783,8 @@ var SelectionFrame = function (props) {
7782
7783
  var newX = mousePosition.x + xFromMouse;
7783
7784
  var newY = mousePosition.y + yFromMouse;
7784
7785
  if (propOnMove) {
7785
- setCurX(newX);
7786
- setCurY(newY);
7786
+ // setCurX(newX)
7787
+ // setCurY(newY)
7787
7788
  propOnMove(newX, newY);
7788
7789
  setLastMoveTime(Date.now());
7789
7790
  setStartX(mouseEvent.clientX);
@@ -7834,8 +7835,8 @@ var SelectionFrame = function (props) {
7834
7835
  // setStartX(mouseEvent.clientX);
7835
7836
  // setStartY(mouseEvent.clientY);
7836
7837
  setLastMoveTime(Date.now());
7837
- var newWidth = mousePosition.x - curX;
7838
- var newHeight = mousePosition.y - curY;
7838
+ var newWidth = mousePosition.x - objectX;
7839
+ var newHeight = mousePosition.y - objectY;
7839
7840
  if (propResizability.keepRatio) {
7840
7841
  var ratio = Math.max(Math.abs(newWidth / width), Math.abs(newHeight / height));
7841
7842
  newWidth = newWidth > 0 ? ratio * width : -ratio * width;
@@ -7876,7 +7877,7 @@ var SelectionFrame = function (props) {
7876
7877
  //logging the end of the circle handle mouse move
7877
7878
  logger.debug('SelectionFrame: circleHandleMouseMove ended', container);
7878
7879
  };
7879
- }, [draggingCircle, width, height, curX, curY, lastMoveTime, propContainer, getMousePosition, propMovingRate, propOnResize, propResizability, startX, startY]);
7880
+ }, [draggingCircle, width, height, objectX, objectY, lastMoveTime, propContainer, getMousePosition, propMovingRate, propOnResize, propResizability, startX, startY]);
7880
7881
  var rectangleSize = Math.max(width, height);
7881
7882
  var leftX = framePadding;
7882
7883
  var topY = framePadding;
@@ -9471,17 +9472,18 @@ function convertElementsToTree(elements) {
9471
9472
  return parsedElementsInTree;
9472
9473
  }
9473
9474
  var Paper = function (props) {
9474
- var _a = React.useState([]), elements = _a[0], setElements = _a[1];
9475
- var _b = React.useState([]), elementsInTree = _b[0], setElementsInTree = _b[1];
9476
- var _c = React.useState(), selectedElement = _c[0], setSelectedElement = _c[1];
9477
- var _d = React.useState(false), autoEnabledDraggingSelectedElement = _d[0], setAutoEnabledDraggingSelectedElement = _d[1];
9478
- var _e = useState([]), links = _e[0], setLinks = _e[1];
9479
- var _f = useState(), selectedLink = _f[0], setSelectedLink = _f[1];
9480
- var _g = useState(null), tempLink = _g[0], setTempLink = _g[1];
9481
- var _h = useState([]), texts = _h[0], setTexts = _h[1];
9482
- var _j = useState(), selectedText = _j[0], setSelectedText = _j[1];
9483
- var _k = useState(null), selectedElementSVG = _k[0], setSelectedElementSVG = _k[1];
9484
- var _l = React.useState(false), mouseDownedOnPaper = _l[0], setMouseDownedOnPaper = _l[1];
9475
+ var _a, _b;
9476
+ var _c = React.useState([]), elements = _c[0], setElements = _c[1];
9477
+ var _d = React.useState([]), elementsInTree = _d[0], setElementsInTree = _d[1];
9478
+ var _e = React.useState(), selectedElement = _e[0], setSelectedElement = _e[1];
9479
+ var _f = React.useState(false), autoEnabledDraggingSelectedElement = _f[0], setAutoEnabledDraggingSelectedElement = _f[1];
9480
+ var _g = useState([]), links = _g[0], setLinks = _g[1];
9481
+ var _h = useState(), selectedLink = _h[0], setSelectedLink = _h[1];
9482
+ var _j = useState(null), tempLink = _j[0], setTempLink = _j[1];
9483
+ var _k = useState([]), texts = _k[0], setTexts = _k[1];
9484
+ var _l = useState(), selectedText = _l[0], setSelectedText = _l[1];
9485
+ var _m = useState(null), selectedElementSVG = _m[0], setSelectedElementSVG = _m[1];
9486
+ var _o = React.useState(false), mouseDownedOnPaper = _o[0], setMouseDownedOnPaper = _o[1];
9485
9487
  var paperEventEmitter = useContext(paperEventEmitterContext);
9486
9488
  var zoom = useZoomContext().zoom;
9487
9489
  var zoomRef = useRef(zoom);
@@ -9491,8 +9493,8 @@ var Paper = function (props) {
9491
9493
  var linksRef = useRef(links); //Cache links to avoid re-render when links changed
9492
9494
  var textsRef = useRef(texts); //Cache texts to avoid re-render when texts changed
9493
9495
  var size = props.size;
9494
- 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]);
9495
- 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;
9496
+ var selectedElementAbsPosition = 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]);
9497
+ 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;
9496
9498
  useEffect(function () {
9497
9499
  zoomRef.current = zoom;
9498
9500
  }, [zoom]);
@@ -10163,8 +10165,9 @@ var Paper = function (props) {
10163
10165
  }
10164
10166
  else {
10165
10167
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10166
- setSelectedElementSVG(ref);
10167
- if (element) {
10168
+ // Select the element only if it is selectable
10169
+ if (element && element.selectable) {
10170
+ setSelectedElementSVG(ref);
10168
10171
  setSelectedElement(element);
10169
10172
  setAutoEnabledDraggingSelectedElement(false);
10170
10173
  paperEventEmitter.emitElementSelected(element);
@@ -10232,7 +10235,7 @@ var Paper = function (props) {
10232
10235
  //use the defined react element or the default Element component
10233
10236
  var ReactElement = element.reactElement || Element$1;
10234
10237
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
10235
- 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, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu,
10238
+ 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, 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,
10236
10239
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10237
10240
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
10238
10241
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
@@ -10267,6 +10270,13 @@ var Paper = function (props) {
10267
10270
  x: newX,
10268
10271
  y: newY
10269
10272
  };
10273
+ //Call onElementMoving to check if the element should be moved or not
10274
+ if (onElementMoving) {
10275
+ var isSkip = onElementMoving(selectedElement, paperPosition);
10276
+ if (!isSkip) {
10277
+ return;
10278
+ }
10279
+ }
10270
10280
  logger.info("Element ".concat(selectedElement.id, " is dragging to position ").concat(JSON.stringify(paperPosition)));
10271
10281
  //Adjust position of element if it should move as a port on parent port area
10272
10282
  if (selectedElement.moveAsPortOnParent && selectedElement.parentElement) {
@@ -10323,7 +10333,7 @@ var Paper = function (props) {
10323
10333
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10324
10334
  setMouseDownedOnPaper(false);
10325
10335
  } }))));
10326
- }, [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]);
10336
+ }, [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]);
10327
10337
  var ElementsInTree = useMemo(function () {
10328
10338
  return elementsInTree.map(function (element, index) {
10329
10339
  return renderElementInTree(element);
@@ -10455,6 +10465,12 @@ var Editor = function (_a) {
10455
10465
  }
10456
10466
  return null;
10457
10467
  }, [editorContext]);
10468
+ var handleOnElementMoving = useCallback(function (element, newPaperPosition) {
10469
+ if (editorContext.onElementMovingHandler) {
10470
+ return editorContext.onElementMovingHandler(element, newPaperPosition);
10471
+ }
10472
+ return true;
10473
+ }, [editorContext]);
10458
10474
  var handleOnCreatingPortByLinking = useCallback(function (sourceElement, sourcePort, targetElement, position) {
10459
10475
  if (editorContext.onCreatingPortByLinkingHandler) {
10460
10476
  return editorContext.onCreatingPortByLinkingHandler(sourceElement, sourcePort, targetElement, position);
@@ -10475,7 +10491,7 @@ var Editor = function (_a) {
10475
10491
  }, [editorContext]);
10476
10492
  return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
10477
10493
  React.createElement(ZoomContextProvider, null,
10478
- 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) }))));
10494
+ 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) }))));
10479
10495
  };
10480
10496
 
10481
10497
  export { Circle as CircleRC, Crescent as CrescentRC, CustomShape as CustomShapeRC, EditorContext, Element$2 as Element, ElementLink$1 as ElementLink, ElementLink as ElementLinkRC, Port$1 as Port, Port as PortRC, PositioningAnchor, Rectangle as RectangleRC, RectangularFrame as RectangularFrameRC, ResizingDirection, ShapeWrapper as ShapeWrapperRC, SubObjectDirection, Text$2 as Text, TextAlign, Text$1 as TextRC, addPointToList, automationAddPointsToLink, calculateAngleWithOx, checkPointContainsPolygon, checkPositionOnLine, checkSamePosition, configureLogger, correctPortPositionInElement, createSmoothPathString, Editor as default, degreeToRadian, diamondEdgeInsideSquare, dist, findNearestPointOnSegment, findNearestPosition, findNearestProjectedPoint, generateSubstitutePosition, generateUniqueId, getAbsolutePosition, getCurvePathData, getElementRotationInfo, getFirstIntersection, getFourVertexesOfBBoxFromElement, getIntersectionPositions, getPointsFromPathData, getPointsFromPathElement, getPortAbsolutePosition, getRectangleCorners, getRotatedRectangleCoordinates, getRotatedSVGBBox, getSVGBBoxOutsideTransformedParent, makePolygonOfElement, pathDataToD, removeDuplicatePosition, transformAbsPositionToElementRelativePosition, transformAbsPositionToRelativePositionInsideElement, windowsPositionToPaperPosition };