orcasvn-react-diagrams 0.1.60 → 0.1.63

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
@@ -817,6 +817,8 @@ var EVENT_ELEMENT_MOUSE_MOVE = 'elementMouseMove';
817
817
  var EVENT_ELEMENT_MOUSE_LEAVE = 'elementMouseLeave';
818
818
  var EVENT_ELEMENT_MOUSE_UP = 'elementMouseUp';
819
819
  var EVENT_ELEMENT_MOUSE_DOWN = 'elementMouseDown';
820
+ var EVENT_ELEMENT_ADDED = 'elementAdded';
821
+ var EVENT_ELEMENT_REMOVED = 'elementRemoved';
820
822
  var EVENT_MANUALLY_SELECT_ELEMENT = 'manuallySelectElement';
821
823
  var EVENT_MANUALLY_TRIGGER_DRAGGING_ELEMENT = 'manuallyTriggerDraggingElement';
822
824
  var EVENT_LINK_SELECTED = 'linkSelected';
@@ -894,10 +896,12 @@ var EditorContext = /** @class */ (function () {
894
896
  }
895
897
  this._elements = __spreadArray(__spreadArray([], this._elements, true), [element], false);
896
898
  this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
899
+ this.onElementAddedHandler(element);
897
900
  };
898
901
  EditorContext.prototype.removeElement = function (elementId) {
899
902
  this._elements = this._elements.filter(function (e) { return e.id !== elementId; });
900
903
  this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
904
+ this.onElementRemovedHandler(elementId);
901
905
  };
902
906
  EditorContext.prototype.getLink = function (linkId) {
903
907
  return this._links.find(function (l) { return l.id === linkId; });
@@ -1048,6 +1052,20 @@ var EditorContext = /** @class */ (function () {
1048
1052
  EditorContext.prototype.onElementMouseDownHandler = function (ev, element, paperPosition) {
1049
1053
  this._eventEmitter.emit(EVENT_ELEMENT_MOUSE_DOWN, ev, element, paperPosition);
1050
1054
  };
1055
+ EditorContext.prototype.onElementAdded = function (callback) {
1056
+ return this.addEventListener(EVENT_ELEMENT_ADDED, callback);
1057
+ };
1058
+ /** @internal */
1059
+ EditorContext.prototype.onElementAddedHandler = function (element) {
1060
+ this._eventEmitter.emit(EVENT_ELEMENT_ADDED, element);
1061
+ };
1062
+ EditorContext.prototype.onElementRemoved = function (callback) {
1063
+ return this.addEventListener(EVENT_ELEMENT_REMOVED, callback);
1064
+ };
1065
+ /** @internal */
1066
+ EditorContext.prototype.onElementRemovedHandler = function (elementId) {
1067
+ this._eventEmitter.emit(EVENT_ELEMENT_REMOVED, elementId);
1068
+ };
1051
1069
  EditorContext.prototype.onLinkSelected = function (callback) {
1052
1070
  return this.addEventListener(EVENT_LINK_SELECTED, callback);
1053
1071
  };
@@ -8421,7 +8439,7 @@ var Port1 = React.forwardRef(function (props, ref) {
8421
8439
  else {
8422
8440
  return React.createElement(Circle, { onMouseDown: function (e) { return onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(id, e); }, onMouseUp: function (e) { return onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(id, e); }, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseMove: function (e) { return onMouseMove === null || onMouseMove === void 0 ? void 0 : onMouseMove(id, e); }, onClick: function (e) { return onSelected === null || onSelected === void 0 ? void 0 : onSelected(id, e); }, onContextMenu: function (e) { return onContextMenu === null || onContextMenu === void 0 ? void 0 : onContextMenu(id, e); }, ref: ref, x: x, y: y, positioningAnchor: exports.PositioningAnchor.Center, height: height, width: width, stroke: "black", fill: "black" }, children);
8423
8441
  }
8424
- }, [props]);
8442
+ }, [children, height, id, onContextMenu, onMouseDown, onMouseEnter, onMouseLeave, onMouseMove, onMouseUp, onSelected, props, ref, renderShape, rotationAngle, width, x, y]);
8425
8443
  return (React.createElement(React.Fragment, null,
8426
8444
  renderedShape,
8427
8445
  label && renderLabel(label)));
@@ -8770,10 +8788,14 @@ var ElementWrapper = React.forwardRef(function (_a, ref) {
8770
8788
  });
8771
8789
 
8772
8790
  var Element = React.forwardRef(function (props, forwardedRef) {
8773
- var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, cssClass = props.cssClass, portPlaceholderShape = props.portPlaceholderShape, children = props.children, container = props.container, parentAbsolutePosition = props.parentAbsolutePosition, textsPlaceHolderFlexStyle = props.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition = props.textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName = props.textsPlaceHolderClassName, texts = props.texts, portSlideRailSVGClassName = props.portSlideRailSVGClassName, portMoveableAreas = props.portMoveableAreas, portDirection = props.portDirection, defaultPortSize = props.defaultPortSize, onClick = props.onClick, onContextMenu = props.onContextMenu, renderShape = props.renderShape; props.onMoved; var onPortMoved = props.onPortMoved; props.onResized; var onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseDown = props.onMouseDown, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated, onPortContextMenu = props.onPortContextMenu; props.onPortsChanged;
8791
+ var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, cssClass = props.cssClass, portPlaceholderShape = props.portPlaceholderShape, children = props.children, container = props.container, parentAbsolutePosition = props.parentAbsolutePosition, textsPlaceHolderFlexStyle = props.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition = props.textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName = props.textsPlaceHolderClassName, texts = props.texts, portSlideRailSVGClassName = props.portSlideRailSVGClassName, portMoveableAreas = props.portMoveableAreas, portDirection = props.portDirection, defaultPortSize = props.defaultPortSize, onClick = props.onClick, onContextMenu = props.onContextMenu, renderShape = props.renderShape; props.onMoved; var onPortMoved = props.onPortMoved; props.onResized; var onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseDown = props.onMouseDown, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated, onPortContextMenu = props.onPortContextMenu, onPortsChanged = props.onPortsChanged, onManuallyTriggerRenderPort = props.onManuallyTriggerRenderPort;
8792
+ var propPorts = props.ports;
8774
8793
  var _a = React.useState(), selectedPort = _a[0], setSelectedPort = _a[1];
8775
8794
  var _b = React.useState(), hoveredPort = _b[0], setHoveredPort = _b[1];
8776
- var _c = React.useState([]), ports = _c[0], setPorts = _c[1];
8795
+ var _c = React.useState((propPorts === null || propPorts === void 0 ? void 0 : propPorts.map(function (p) {
8796
+ var portState = __assign(__assign({}, p), { ref: React.createRef() });
8797
+ return portState;
8798
+ })) || []), ports = _c[0], setPorts = _c[1];
8777
8799
  var _d = React.useState(false), someElementLinkStarted = _d[0], setSomeElementLinkStarted = _d[1];
8778
8800
  var _e = React.useState(), potentialPortPosition = _e[0], setPotentialPortPosition = _e[1];
8779
8801
  var _paperEventEmitterContext = React.useContext(paperEventEmitterContext);
@@ -8792,12 +8814,11 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8792
8814
  position.y += parentAbsolutePosition.y;
8793
8815
  }
8794
8816
  return position;
8795
- }, [x, y, parentAbsolutePosition === null || parentAbsolutePosition === void 0 ? void 0 : parentAbsolutePosition.x, parentAbsolutePosition === null || parentAbsolutePosition === void 0 ? void 0 : parentAbsolutePosition.y]);
8817
+ }, [x, y, parentAbsolutePosition]);
8796
8818
  var elementAbsPosition = React.useMemo(function () { return getElementAbsPosition(); }, [getElementAbsPosition]);
8797
8819
  //Listen to manually trigger render event
8798
8820
  React.useEffect(function () {
8799
- var _a;
8800
- var off = (_a = props.onManuallyTriggerRenderPort) === null || _a === void 0 ? void 0 : _a.call(props, function (portId, elementId) {
8821
+ var off = onManuallyTriggerRenderPort === null || onManuallyTriggerRenderPort === void 0 ? void 0 : onManuallyTriggerRenderPort(function (portId, elementId) {
8801
8822
  if (elementId !== id)
8802
8823
  return;
8803
8824
  logger.info('onManuallyTriggerRenderPort', id);
@@ -8806,17 +8827,19 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8806
8827
  return function () {
8807
8828
  off === null || off === void 0 ? void 0 : off();
8808
8829
  };
8809
- }, [props.onManuallyTriggerRenderPort]);
8810
- //Update portsRef when ports changed
8811
- React.useEffect(function () {
8812
- portsRef.current = ports;
8813
- }, [ports]);
8830
+ }, [id, onManuallyTriggerRenderPort]);
8831
+ //Normalize port position
8832
+ var normalizePortPosition = React.useCallback(function (tempNewPosition) {
8833
+ var newPosition = correctPortPositionInElement(tempNewPosition, width, height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current || undefined);
8834
+ return newPosition || tempNewPosition;
8835
+ }, [width, height, portMoveableAreas, portSlideRailSVGClassName]);
8814
8836
  //Listen a new port is created, after add new port to ports state
8815
8837
  React.useEffect(function () {
8816
- logger.info('Ports changed', props.ports);
8817
8838
  setPorts(function (prev) {
8818
- var _a, _b;
8819
- return (_b = (_a = props.ports) === null || _a === void 0 ? void 0 : _a.map(function (p, index) {
8839
+ var _a;
8840
+ if (propPorts === undefined)
8841
+ return [];
8842
+ var newState = (_a = propPorts.map(function (p, index) {
8820
8843
  var prevPortState = prev.find(function (_p) { return _p.id === p.id; });
8821
8844
  var newPortState;
8822
8845
  //If port is existed, keep the ref of the port
@@ -8835,9 +8858,14 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8835
8858
  newPortState.ref = React.createRef();
8836
8859
  }
8837
8860
  return newPortState;
8838
- })) !== null && _b !== void 0 ? _b : [];
8861
+ })) !== null && _a !== void 0 ? _a : [];
8862
+ return newState;
8839
8863
  });
8840
- }, [props.ports]);
8864
+ }, [_paperEventEmitterContext, normalizePortPosition, id, onPortMoved, propPorts]);
8865
+ //Update portsRef when ports changed
8866
+ React.useEffect(function () {
8867
+ portsRef.current = ports;
8868
+ }, [ports]);
8841
8869
  //Normalize port position when element is resized
8842
8870
  React.useEffect(function () {
8843
8871
  var newPorts = portsRef.current.map(function (port) {
@@ -8848,22 +8876,21 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8848
8876
  return port;
8849
8877
  });
8850
8878
  setPorts(newPorts);
8851
- }, [width, height]);
8879
+ }, [width, height, _paperEventEmitterContext, id, onPortsChanged, normalizePortPosition, onPortMoved]);
8852
8880
  //Listen trigger of Delete key, handle delete port is selected
8853
8881
  React.useEffect(function () {
8854
8882
  var listener = _paperEventEmitterContext.onCommandDeleteSelectedPort(function () {
8855
- var _a;
8856
8883
  if (selectedPort) {
8857
8884
  var newPorts = portsRef.current.filter(function (p) { return p.id !== selectedPort.id; });
8858
8885
  setPorts(newPorts);
8859
8886
  setSelectedPort(undefined);
8860
- (_a = props.onPortsChanged) === null || _a === void 0 ? void 0 : _a.call(props, newPorts, id);
8887
+ onPortsChanged === null || onPortsChanged === void 0 ? void 0 : onPortsChanged(newPorts, id);
8861
8888
  }
8862
8889
  });
8863
8890
  return function () {
8864
8891
  listener.off();
8865
8892
  };
8866
- }, [selectedPort, props.onPortsChanged]);
8893
+ }, [_paperEventEmitterContext, id, onPortsChanged, selectedPort]);
8867
8894
  React.useEffect(function () {
8868
8895
  //Listener onMouseDown event on #paper-container
8869
8896
  var eventListener = _paperEventEmitterContext.onPaperClicked(function (ev) {
@@ -8872,16 +8899,10 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8872
8899
  return function () {
8873
8900
  eventListener.off();
8874
8901
  };
8875
- }, []);
8876
- //Normalize port position
8877
- var normalizePortPosition = React.useCallback(function (tempNewPosition) {
8878
- var newPosition = correctPortPositionInElement(tempNewPosition, width, height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current || undefined);
8879
- return newPosition || tempNewPosition;
8880
- }, [width, height, portMoveableAreas, portSlideRailSVGClassName, elementRef.current]);
8902
+ }, [_paperEventEmitterContext]);
8881
8903
  React.useEffect(function () {
8882
8904
  //listen element resize to update position of the ports by element size.
8883
8905
  var eleResizeListener = _paperEventEmitterContext.onElementResized(id, function () {
8884
- var _a;
8885
8906
  var isChanged = false;
8886
8907
  var newPorts = portsRef.current.map(function (port) {
8887
8908
  var newPosition = normalizePortPosition({ x: port.position.x, y: port.position.y });
@@ -8895,13 +8916,13 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8895
8916
  });
8896
8917
  setPorts(newPorts);
8897
8918
  if (isChanged) {
8898
- (_a = props.onPortsChanged) === null || _a === void 0 ? void 0 : _a.call(props, newPorts, id);
8919
+ onPortsChanged === null || onPortsChanged === void 0 ? void 0 : onPortsChanged(newPorts, id);
8899
8920
  }
8900
8921
  });
8901
8922
  return function () {
8902
8923
  eleResizeListener.off();
8903
8924
  };
8904
- }, [onPortMoved, normalizePortPosition, width, height, portMoveableAreas, portSlideRailSVGClassName]);
8925
+ }, [_paperEventEmitterContext, id, onPortsChanged, onPortMoved, normalizePortPosition, width, height, portMoveableAreas, portSlideRailSVGClassName]);
8905
8926
  //Listen creating element link started, ended.
8906
8927
  React.useEffect(function () {
8907
8928
  var elementStartedListener = _paperEventEmitterContext.onElementLinkStarted(function (tempLink) {
@@ -8918,7 +8939,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8918
8939
  elementStartedListener.off();
8919
8940
  elementEndedListener.off();
8920
8941
  };
8921
- }, []);
8942
+ }, [id, _paperEventEmitterContext]);
8922
8943
  //Listen another port is selected
8923
8944
  React.useEffect(function () {
8924
8945
  var portSelectedListener = _paperEventEmitterContext.onPortSelected(function (port, elementId) {
@@ -8929,7 +8950,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8929
8950
  return function () {
8930
8951
  portSelectedListener.off();
8931
8952
  };
8932
- }, []);
8953
+ }, [_paperEventEmitterContext, id]);
8933
8954
  //Listen text is selected
8934
8955
  React.useEffect(function () {
8935
8956
  var textSelectedListener = _paperEventEmitterContext.onTextSelected(function (text) {
@@ -8938,7 +8959,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8938
8959
  return function () {
8939
8960
  textSelectedListener.off();
8940
8961
  };
8941
- }, []);
8962
+ }, [_paperEventEmitterContext]);
8942
8963
  //Listen another element is selected
8943
8964
  React.useEffect(function () {
8944
8965
  var portSelectedListener = _paperEventEmitterContext.onElementSelected(function (element) {
@@ -8947,7 +8968,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8947
8968
  return function () {
8948
8969
  portSelectedListener.off();
8949
8970
  };
8950
- }, []);
8971
+ }, [_paperEventEmitterContext]);
8951
8972
  var handleSelectedPort = React.useCallback(function (portId, e) {
8952
8973
  e.stopPropagation();
8953
8974
  logger.debug('Port selected', portId, e);
@@ -8956,9 +8977,9 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8956
8977
  return;
8957
8978
  setSelectedPort(port);
8958
8979
  _paperEventEmitterContext.emitPortSelected(port, id);
8959
- }, [_paperEventEmitterContext]);
8980
+ }, [id, _paperEventEmitterContext]);
8960
8981
  //Calculate the position of the 4 vertices of a rectangle relative to element
8961
- var calculateSlideRailRectSVGPositions = function (slideRailSVG) {
8982
+ var calculateSlideRailRectSVGPositions = React.useCallback(function (slideRailSVG) {
8962
8983
  var coordinates = getRectangleCorners(slideRailSVG);
8963
8984
  var ownerSVG = slideRailSVG.ownerSVGElement;
8964
8985
  var rotationAngle = getElementRotationInfo(ownerSVG);
@@ -8968,7 +8989,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8968
8989
  coordinates = getRotatedRectangleCoordinates(coordinates, rotationCenterX, rotationCenterY, rotationAngle);
8969
8990
  }
8970
8991
  return coordinates;
8971
- };
8992
+ }, [width, height]);
8972
8993
  var getSlideRailSVG = React.useCallback(function (portSlideRailSVGClassName) {
8973
8994
  var _a;
8974
8995
  var slideRailSVG = (_a = elementRef.current) === null || _a === void 0 ? void 0 : _a.querySelector(".".concat(portSlideRailSVGClassName));
@@ -9001,7 +9022,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9001
9022
  return;
9002
9023
  _paperEventEmitterContext.emitPortMouseDown(e, port, id);
9003
9024
  onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(e, port, id);
9004
- }, [_paperEventEmitterContext]);
9025
+ }, [id, onPortMouseDown, _paperEventEmitterContext]);
9005
9026
  //Handle when mouse up on port
9006
9027
  var handlePortMouseUp = React.useCallback(function (portId, e) {
9007
9028
  e.stopPropagation();
@@ -9014,7 +9035,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9014
9035
  if (potentialPortPosition) {
9015
9036
  setPotentialPortPosition(undefined);
9016
9037
  }
9017
- }, [_paperEventEmitterContext, potentialPortPosition]);
9038
+ }, [id, onPortMouseUp, _paperEventEmitterContext, potentialPortPosition]);
9018
9039
  //Update state when label of port is moved
9019
9040
  var handlePortLabelMoved = React.useCallback(function (newX, newY, portId) {
9020
9041
  setPorts(function (prevPorts) {
@@ -9168,7 +9189,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9168
9189
  break;
9169
9190
  }
9170
9191
  return rotationAngle;
9171
- }, [width, height, portSlideRailSVGClassName, portDirection, getSlideRailSVG, normalizePortPosition]);
9192
+ }, [width, height, portSlideRailSVGClassName, portDirection, getSlideRailSVG, normalizePortPosition, calculateSlideRailRectSVGPositions]);
9172
9193
  var renderedShape = React.useMemo(function () {
9173
9194
  if (renderShape)
9174
9195
  return renderShape(props);
@@ -9183,7 +9204,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9183
9204
  }
9184
9205
  }, []);
9185
9206
  //log element render
9186
- logger.debug('Rendering Element', id, x, y, width, height, cssClass, portPlaceholderShape, children, container, parentAbsolutePosition, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName, texts, portSlideRailSVGClassName, portMoveableAreas, portDirection, defaultPortSize);
9207
+ logger.debug('Rendering Element', id, x, y, width, height, cssClass, portPlaceholderShape, children, container, parentAbsolutePosition, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName, texts, ports, portSlideRailSVGClassName, portMoveableAreas, portDirection, defaultPortSize);
9187
9208
  return (React.createElement(React.Fragment, null,
9188
9209
  React.createElement(ElementWrapper, { ref: elementRef, x: x, y: y, cssClass: cssClass, onClick: function (e) { return onClick ? onClick(id, e, elementRef.current) : true; }, onMouseMove: handleElementMouseMove, onMouseLeave: handleElementMouseLeave, onMouseDown: handleElementMouseDown, onMouseUp: handleElementMouseUp, onContextMenu: function (e) { return onContextMenu ? onContextMenu(id, e, elementRef.current) : true; } },
9189
9210
  renderedShape,
@@ -9475,6 +9496,7 @@ var Paper = function (props) {
9475
9496
  var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
9476
9497
  var size = props.size;
9477
9498
  var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
9499
+ var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp, onPortsChanged = props.onPortsChanged, onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, onElementMouseLeave = props.onElementMouseLeave, onElementDeleted = props.onElementDeleted, onLinksChanged = props.onLinksChanged, onLinkSelected = props.onLinkSelected, onTextSelected = props.onTextSelected, onTextsChanged = props.onTextsChanged, manuallyTriggerRenderElementHandler = props.manuallyTriggerRenderElementHandler, manuallyTriggerRenderPortHandler = props.manuallyTriggerRenderPortHandler, onCreatingPortByLinking = props.onCreatingPortByLinking, onCreatingLink = props.onCreatingLink, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9478
9500
  React.useEffect(function () {
9479
9501
  zoomRef.current = zoom;
9480
9502
  }, [zoom]);
@@ -9488,40 +9510,37 @@ var Paper = function (props) {
9488
9510
  setTexts(props.texts);
9489
9511
  }, [props.texts]);
9490
9512
  React.useEffect(function () {
9491
- var off = props.manuallyTriggerRenderElementHandler(function (elementId) {
9513
+ var off = manuallyTriggerRenderElementHandler(function (elementId) {
9492
9514
  var newElements = __spreadArray([], elements, true);
9493
9515
  setElements(newElements);
9494
- if (props.onElementsChanged) {
9495
- props.onElementsChanged(newElements);
9516
+ if (onElementsChanged) {
9517
+ onElementsChanged(newElements);
9496
9518
  }
9497
9519
  });
9498
9520
  return function () {
9499
9521
  off();
9500
9522
  };
9501
- }, [props.manuallyTriggerRenderElementHandler, props.onElementsChanged, elements, selectedElement]);
9523
+ }, [manuallyTriggerRenderElementHandler, onElementsChanged, elements, selectedElement]);
9502
9524
  React.useEffect(function () {
9503
- var _a, _b;
9504
9525
  var offs = [];
9505
- offs.push((_a = props.manuallySelectElementHandler) === null || _a === void 0 ? void 0 : _a.call(props, function (element) {
9506
- var _a;
9526
+ offs.push(manuallySelectElementHandler === null || manuallySelectElementHandler === void 0 ? void 0 : manuallySelectElementHandler(function (element) {
9507
9527
  setSelectedElement(element || undefined);
9508
9528
  if (element) {
9509
- (_a = props.onElementSelected) === null || _a === void 0 ? void 0 : _a.call(props, element);
9529
+ onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
9510
9530
  }
9511
9531
  }));
9512
- offs.push((_b = props.manuallyTriggerDraggingElementHandler) === null || _b === void 0 ? void 0 : _b.call(props, function (element) {
9513
- var _a;
9532
+ offs.push(manuallyTriggerDraggingElementHandler === null || manuallyTriggerDraggingElementHandler === void 0 ? void 0 : manuallyTriggerDraggingElementHandler(function (element) {
9514
9533
  setSelectedElement(element);
9515
- (_a = props.onElementSelected) === null || _a === void 0 ? void 0 : _a.call(props, element);
9534
+ onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(element);
9516
9535
  setAutoEnabledDraggingSelectedElement(true);
9517
9536
  }));
9518
9537
  return function () {
9519
9538
  offs.forEach(function (off) { return off(); });
9520
9539
  };
9521
- }, [props.manuallySelectElementHandler, props.manuallyTriggerDraggingElementHandler, props.onElementSelected]);
9540
+ }, [manuallySelectElementHandler, manuallyTriggerDraggingElementHandler, onElementSelected]);
9522
9541
  React.useEffect(function () {
9523
- if (props.manuallyTriggerStartedLinkingHandler) {
9524
- var off_1 = props.manuallyTriggerStartedLinkingHandler(function (sourceElement, sourcePort) {
9542
+ if (manuallyTriggerStartedLinkingHandler) {
9543
+ var off_1 = manuallyTriggerStartedLinkingHandler(function (sourceElement, sourcePort) {
9525
9544
  var newLink = {
9526
9545
  id: generateUniqueId(),
9527
9546
  points: [],
@@ -9535,7 +9554,7 @@ var Paper = function (props) {
9535
9554
  off_1();
9536
9555
  };
9537
9556
  }
9538
- }, [props.manuallyTriggerStartedLinkingHandler]);
9557
+ }, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
9539
9558
  //Cache elements to avoid re-render when elements changed
9540
9559
  React.useEffect(function () {
9541
9560
  elementsRef.current = elements;
@@ -9551,10 +9570,10 @@ var Paper = function (props) {
9551
9570
  useKeyboardCommands({
9552
9571
  element: paperContainerRef.current
9553
9572
  });
9554
- var updateElementsTree = function () {
9573
+ var updateElementsTree = React.useCallback(function () {
9555
9574
  var parsedElementsInTree = convertElementsToTree(elements);
9556
9575
  setElementsInTree(parsedElementsInTree);
9557
- };
9576
+ }, [elements]);
9558
9577
  //Cache tempLink to avoid re-render when tempLink changed
9559
9578
  React.useEffect(function () {
9560
9579
  tempLinkRef.current = tempLink;
@@ -9576,20 +9595,19 @@ var Paper = function (props) {
9576
9595
  //Listen port is selected
9577
9596
  React.useEffect(function () {
9578
9597
  var portSelectedListener = paperEventEmitter.onPortSelected(function (port, elementId) {
9579
- var _a;
9580
9598
  setSelectedElement(undefined);
9581
9599
  setSelectedElementSVG(null);
9582
9600
  setSelectedLink(undefined);
9583
9601
  //broadcast selected port to parent component
9584
9602
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9585
9603
  if (element) {
9586
- (_a = props.onPortSelected) === null || _a === void 0 ? void 0 : _a.call(props, port, element);
9604
+ onPortSelected === null || onPortSelected === void 0 ? void 0 : onPortSelected(port, element);
9587
9605
  }
9588
9606
  });
9589
9607
  return function () {
9590
9608
  portSelectedListener.off();
9591
9609
  };
9592
- }, []);
9610
+ }, [paperEventEmitter, onPortSelected]);
9593
9611
  React.useEffect(function () {
9594
9612
  //Listen parent of elements changed, then update elements tree
9595
9613
  var parentChangedCancelers = elementsRef.current.map(function (element) {
@@ -9613,8 +9631,8 @@ var Paper = function (props) {
9613
9631
  });
9614
9632
  //Set state to re-render component
9615
9633
  setElements(newElements);
9616
- if (props.onElementsChanged) {
9617
- props.onElementsChanged(newElements);
9634
+ if (onElementsChanged) {
9635
+ onElementsChanged(newElements);
9618
9636
  }
9619
9637
  });
9620
9638
  });
@@ -9622,13 +9640,13 @@ var Paper = function (props) {
9622
9640
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9623
9641
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9624
9642
  };
9625
- }, [elements]);
9643
+ }, [elements, updateElementsTree, onElementsChanged]);
9626
9644
  //Update elements tree when length of elements change
9627
9645
  React.useEffect(function () {
9628
9646
  updateElementsTree();
9629
- }, [elements]);
9647
+ }, [elements, updateElementsTree]);
9630
9648
  //Get all child elements of the deleted element
9631
- var getChildOfElement = function (element) {
9649
+ var getChildOfElement = React.useCallback(function (element) {
9632
9650
  if (!element.childrenElementsInTree)
9633
9651
  return [];
9634
9652
  var childElms = element.childrenElementsInTree;
@@ -9636,10 +9654,9 @@ var Paper = function (props) {
9636
9654
  return __spreadArray(__spreadArray([], acc, true), getChildOfElement(ele), true);
9637
9655
  }, []);
9638
9656
  return __spreadArray(__spreadArray([], childElms, true), childOfChildElements, true);
9639
- };
9657
+ }, []);
9640
9658
  //Listen command delete selected for element
9641
9659
  React.useEffect(function () {
9642
- var _a;
9643
9660
  var listener = paperEventEmitter.onCommandDeleteSelectedElement(function () {
9644
9661
  if (selectedElement) {
9645
9662
  selectedElement.parentElement = undefined; //Remove parent element to avoid memory leak. This will remove the element from the parent element's childrenElements array.
@@ -9647,17 +9664,18 @@ var Paper = function (props) {
9647
9664
  var deletedElementIds_1 = __spreadArray(__spreadArray([], deletedChildElements, true), [selectedElement], false).map(function (e) { return e.id; });
9648
9665
  var prevElements = elementsRef.current;
9649
9666
  var newElements = prevElements.filter(function (e) { return !deletedElementIds_1.includes(e.id); });
9667
+ onElementDeleted === null || onElementDeleted === void 0 ? void 0 : onElementDeleted(selectedElement);
9650
9668
  //Set state to re-render component
9651
9669
  setElements(newElements);
9652
- if (props.onElementsChanged) {
9653
- props.onElementsChanged(newElements);
9670
+ if (onElementsChanged) {
9671
+ onElementsChanged(newElements);
9654
9672
  }
9655
9673
  //Update links
9656
9674
  var prevLinks = linksRef.current;
9657
9675
  var newLinks = prevLinks.filter(function (l) { return !deletedElementIds_1.includes(l.sourceElement.id) && !deletedElementIds_1.includes(l.targetElement.id); });
9658
9676
  setLinks(newLinks);
9659
- if (props.onLinksChanged) {
9660
- props.onLinksChanged(newLinks);
9677
+ if (onLinksChanged) {
9678
+ onLinksChanged(newLinks);
9661
9679
  }
9662
9680
  setSelectedElement(undefined);
9663
9681
  setSelectedElementSVG(null);
@@ -9665,56 +9683,54 @@ var Paper = function (props) {
9665
9683
  });
9666
9684
  //broadcast selected element to parent component
9667
9685
  if (selectedElement) {
9668
- (_a = props.onElementSelected) === null || _a === void 0 ? void 0 : _a.call(props, selectedElement);
9686
+ onElementSelected === null || onElementSelected === void 0 ? void 0 : onElementSelected(selectedElement);
9669
9687
  }
9670
9688
  return function () {
9671
9689
  listener.off();
9672
9690
  };
9673
- }, [selectedElement, props.onElementsChanged]);
9691
+ }, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted]);
9674
9692
  //Listen command delete selected for link
9675
9693
  React.useEffect(function () {
9676
- var _a;
9677
9694
  var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
9678
9695
  if (selectedLink) {
9679
9696
  var prevLinks = linksRef.current;
9680
9697
  var newLinks = prevLinks.filter(function (l) { return l.id !== selectedLink.id; });
9681
9698
  setLinks(links);
9682
9699
  setSelectedLink(undefined);
9683
- if (props.onLinksChanged) {
9684
- props.onLinksChanged(newLinks);
9700
+ if (onLinksChanged) {
9701
+ onLinksChanged(newLinks);
9685
9702
  }
9686
9703
  }
9687
9704
  });
9688
9705
  //broadcast selected link to parent component
9689
9706
  if (selectedLink) {
9690
- (_a = props.onLinkSelected) === null || _a === void 0 ? void 0 : _a.call(props, selectedLink);
9707
+ onLinkSelected === null || onLinkSelected === void 0 ? void 0 : onLinkSelected(selectedLink);
9691
9708
  }
9692
9709
  return function () {
9693
9710
  listener.off();
9694
9711
  };
9695
- }, [selectedLink, props.onLinksChanged]);
9712
+ }, [selectedLink, onLinksChanged, onLinkSelected, links, paperEventEmitter]);
9696
9713
  //Listen command delete selected for Text
9697
9714
  React.useEffect(function () {
9698
- var _a;
9699
9715
  var listener = paperEventEmitter.onCommandDeleteSelectedText(function () {
9700
9716
  if (selectedText) {
9701
9717
  var prevTexts = textsRef.current;
9702
9718
  var newTexts = prevTexts.filter(function (t) { return t.id !== selectedText.id; });
9703
9719
  setTexts(newTexts);
9704
- if (props.onTextsChanged) {
9705
- props.onTextsChanged(newTexts);
9720
+ if (onTextsChanged) {
9721
+ onTextsChanged(newTexts);
9706
9722
  }
9707
9723
  setSelectedText(undefined);
9708
9724
  }
9709
9725
  });
9710
9726
  //broadcast selected text to parent component
9711
9727
  if (selectedText) {
9712
- (_a = props.onTextSelected) === null || _a === void 0 ? void 0 : _a.call(props, selectedText);
9728
+ onTextSelected === null || onTextSelected === void 0 ? void 0 : onTextSelected(selectedText);
9713
9729
  }
9714
9730
  return function () {
9715
9731
  listener.off();
9716
9732
  };
9717
- }, [selectedText, props.onTextsChanged]);
9733
+ }, [selectedText, onTextsChanged, onTextSelected, texts, paperEventEmitter]);
9718
9734
  var handlePaperMouseMove = function (ev) {
9719
9735
  var _a;
9720
9736
  var _b = windowsPositionToPaperPosition({
@@ -9793,19 +9809,19 @@ var Paper = function (props) {
9793
9809
  links[updatedLinkIndex].path = path;
9794
9810
  var newLinks = __spreadArray([], links, true);
9795
9811
  setLinks(newLinks);
9796
- if (props.onLinksChanged) {
9797
- props.onLinksChanged(newLinks);
9812
+ if (onLinksChanged) {
9813
+ onLinksChanged(newLinks);
9798
9814
  }
9799
- }, [props.onLinksChanged, links]);
9815
+ }, [onLinksChanged, links]);
9800
9816
  var handlePointsOfLinkChange = React.useCallback(function (points, linkId) {
9801
9817
  var newLinks = __spreadArray([], linksRef.current, true);
9802
9818
  var updatedLinkIndex = newLinks.findIndex(function (l) { return l.id === linkId; });
9803
9819
  newLinks[updatedLinkIndex].points = points;
9804
9820
  setLinks(newLinks);
9805
- if (props.onLinksChanged) {
9806
- props.onLinksChanged(newLinks);
9821
+ if (onLinksChanged) {
9822
+ onLinksChanged(newLinks);
9807
9823
  }
9808
- }, [props.onLinksChanged]);
9824
+ }, [onLinksChanged]);
9809
9825
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9810
9826
  var _a;
9811
9827
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
@@ -9823,8 +9839,8 @@ var Paper = function (props) {
9823
9839
  return link;
9824
9840
  });
9825
9841
  setLinks(newLinks);
9826
- if (props.onLinksChanged) {
9827
- props.onLinksChanged(newLinks);
9842
+ if (onLinksChanged) {
9843
+ onLinksChanged(newLinks);
9828
9844
  }
9829
9845
  var newElements = elementsRef.current;
9830
9846
  var updatedElementIndex = newElements.findIndex(function (e) { return e.id === elementId; });
@@ -9837,17 +9853,16 @@ var Paper = function (props) {
9837
9853
  //Update port position in element, not re-render
9838
9854
  //To avoid re-render
9839
9855
  setElements(newElements);
9840
- if (props.onElementsChanged) {
9841
- props.onElementsChanged(newElements);
9856
+ if (onElementsChanged) {
9857
+ onElementsChanged(newElements);
9842
9858
  }
9843
- if (props.onPortMoved) {
9844
- props.onPortMoved(newPosition, port, element);
9859
+ if (onPortMoved) {
9860
+ onPortMoved(newPosition, port, element);
9845
9861
  }
9846
9862
  }
9847
- }, [props.onPortMoved, props.onElementsChanged, props.onLinksChanged]);
9863
+ }, [onPortMoved, onElementsChanged, onLinksChanged]);
9848
9864
  //Handle creating a new element link
9849
9865
  var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
9850
- var _a;
9851
9866
  ev.stopPropagation();
9852
9867
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9853
9868
  var paperPosition = windowsPositionToPaperPosition({
@@ -9857,7 +9872,7 @@ var Paper = function (props) {
9857
9872
  console.log(paperPosition);
9858
9873
  //broadcast port mouse down to parent component
9859
9874
  if (element) {
9860
- (_a = props.onPortMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, port, element, paperPosition);
9875
+ onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(port, element, paperPosition);
9861
9876
  }
9862
9877
  if (!tempLinkRef.current && element) {
9863
9878
  //handle create temp element link;
@@ -9870,13 +9885,13 @@ var Paper = function (props) {
9870
9885
  setTempLink(newLink);
9871
9886
  paperEventEmitter.emitElementLinkStarted(newLink);
9872
9887
  }
9873
- }, [paperEventEmitter, props.onPortMouseDown]);
9888
+ }, [paperEventEmitter, onPortMouseDown]);
9874
9889
  var createElementLink = React.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
9875
9890
  //if no onCreatingLink prop, no link will be created
9876
- if (!props.onCreatingLink) {
9891
+ if (!onCreatingLink) {
9877
9892
  return null;
9878
9893
  }
9879
- var newElementLink = props.onCreatingLink(sourcePort, sourceElement, targetPort, targetElement);
9894
+ var newElementLink = onCreatingLink(sourcePort, sourceElement, targetPort, targetElement);
9880
9895
  if (!newElementLink)
9881
9896
  return null;
9882
9897
  //Automatic bending, if is not defined points
@@ -9885,9 +9900,8 @@ var Paper = function (props) {
9885
9900
  newElementLink = automationAddPointsToLink(newElementLink, elements_1, MAX_LINK_KNOT_COUNT);
9886
9901
  }
9887
9902
  return newElementLink;
9888
- }, [props.onCreatingLink]);
9903
+ }, [onCreatingLink]);
9889
9904
  var handlePortMouseUp = React.useCallback(function (ev, port, elementId) {
9890
- var _a;
9891
9905
  ev.stopPropagation();
9892
9906
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9893
9907
  var paperPosition = windowsPositionToPaperPosition({
@@ -9896,7 +9910,7 @@ var Paper = function (props) {
9896
9910
  }, paperContainerRef.current, zoomRef.current);
9897
9911
  //broadcast port mouse down to parent component
9898
9912
  if (element) {
9899
- (_a = props.onPortMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, port, element, paperPosition);
9913
+ onPortMouseUp === null || onPortMouseUp === void 0 ? void 0 : onPortMouseUp(port, element, paperPosition);
9900
9914
  }
9901
9915
  //Create new element link, if has tempLink
9902
9916
  if (tempLinkRef.current) {
@@ -9904,7 +9918,7 @@ var Paper = function (props) {
9904
9918
  var isMouseUpOnNotSelf = tempLinkRef.current.sourcePort.id !== port.id || tempLinkRef.current.sourceElement.id !== elementId;
9905
9919
  var newElementLink = null;
9906
9920
  if (isMouseUpOnNotSelf) {
9907
- var _b = tempLinkRef.current, sourcePort = _b.sourcePort, sourceElement = _b.sourceElement;
9921
+ var _a = tempLinkRef.current, sourcePort = _a.sourcePort, sourceElement = _a.sourceElement;
9908
9922
  var targetElement = elementsRef.current.find(function (e) { return e.id === elementId; });
9909
9923
  newElementLink = createElementLink(sourcePort, sourceElement, port, targetElement);
9910
9924
  }
@@ -9912,8 +9926,8 @@ var Paper = function (props) {
9912
9926
  var prevLinks = linksRef.current;
9913
9927
  var newLinks = __spreadArray(__spreadArray([], prevLinks, true), [newElementLink], false);
9914
9928
  setLinks(newLinks);
9915
- if (props.onLinksChanged) {
9916
- props.onLinksChanged(newLinks);
9929
+ if (onLinksChanged) {
9930
+ onLinksChanged(newLinks);
9917
9931
  }
9918
9932
  paperEventEmitter.emitElementLinkEnded(newElementLink);
9919
9933
  }
@@ -9922,14 +9936,14 @@ var Paper = function (props) {
9922
9936
  }
9923
9937
  setTempLink(null);
9924
9938
  }
9925
- }, [paperEventEmitter, createElementLink, props.onPortMouseUp, props.onLinksChanged]);
9939
+ }, [paperEventEmitter, createElementLink, onPortMouseUp, onLinksChanged]);
9926
9940
  var handlePortsChanged = React.useCallback(function (ports, elementId) {
9927
9941
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9928
9942
  if (element) {
9929
9943
  //broadcast ports changed to parent component
9930
- props.onPortsChanged(ports, element);
9944
+ onPortsChanged(ports, element);
9931
9945
  }
9932
- }, [props.onPortsChanged]);
9946
+ }, [onPortsChanged]);
9933
9947
  var handleLinkLabelMoved = React.useCallback(function (newX, newY, index, labelType) {
9934
9948
  var prevLinks = linksRef.current;
9935
9949
  var newLinks = __spreadArray([], prevLinks, true);
@@ -9953,10 +9967,10 @@ var Paper = function (props) {
9953
9967
  }
9954
9968
  }
9955
9969
  setLinks(newLinks);
9956
- if (props.onLinksChanged) {
9957
- props.onLinksChanged(newLinks);
9970
+ if (onLinksChanged) {
9971
+ onLinksChanged(newLinks);
9958
9972
  }
9959
- }, [props.onLinksChanged]);
9973
+ }, [onLinksChanged]);
9960
9974
  var handleLinkLabelResized = React.useCallback(function (width, height, index, labelType) {
9961
9975
  var prevLinks = linksRef.current;
9962
9976
  var newLinks = __spreadArray([], prevLinks, true);
@@ -9988,10 +10002,10 @@ var Paper = function (props) {
9988
10002
  }
9989
10003
  }
9990
10004
  setLinks(newLinks);
9991
- if (props.onLinksChanged) {
9992
- props.onLinksChanged(newLinks);
10005
+ if (onLinksChanged) {
10006
+ onLinksChanged(newLinks);
9993
10007
  }
9994
- }, [props.onLinksChanged]);
10008
+ }, [onLinksChanged]);
9995
10009
  var handleLinkLabelContentChanged = React.useCallback(function (newValue, index, labelType) {
9996
10010
  var prevLinks = linksRef.current;
9997
10011
  var newLinks = __spreadArray([], prevLinks, true);
@@ -10011,10 +10025,10 @@ var Paper = function (props) {
10011
10025
  }
10012
10026
  }
10013
10027
  setLinks(newLinks);
10014
- if (props.onLinksChanged) {
10015
- props.onLinksChanged(newLinks);
10028
+ if (onLinksChanged) {
10029
+ onLinksChanged(newLinks);
10016
10030
  }
10017
- }, [props.onLinksChanged]);
10031
+ }, [onLinksChanged]);
10018
10032
  var handleSelectLink = function (link, index) {
10019
10033
  setSelectedLink(link);
10020
10034
  };
@@ -10067,20 +10081,20 @@ var Paper = function (props) {
10067
10081
  var newLinks = __spreadArray([], prevLinks, true);
10068
10082
  newLinks.splice(index, 1);
10069
10083
  setLinks(newLinks);
10070
- if (props.onLinksChanged) {
10071
- props.onLinksChanged(newLinks);
10084
+ if (onLinksChanged) {
10085
+ onLinksChanged(newLinks);
10072
10086
  }
10073
10087
  };
10074
- }, [props.onLinksChanged]);
10088
+ }, [onLinksChanged]);
10075
10089
  var handleMouseUpAtLinkedPortPlaceholder = React.useCallback(function (link, position, targetElementId) {
10076
10090
  var targetElement = elementsRef.current.find(function (e) { return e.id === targetElementId; });
10077
10091
  if (!targetElement)
10078
10092
  return;
10079
10093
  logger.info("A port could have been created at position ".concat(JSON.stringify(position), " on element ").concat(targetElementId, " by linking from element ").concat(link.sourceElement.id));
10080
- if (props.onCreatingPortByLinking) {
10094
+ if (onCreatingPortByLinking) {
10081
10095
  var sourcePort = link.sourcePort, sourceElement = link.sourceElement;
10082
10096
  //Handle create port via onCreatingPortByLinking prop
10083
- var targetPort = props.onCreatingPortByLinking(sourceElement, sourcePort, targetElement, position);
10097
+ var targetPort = onCreatingPortByLinking(sourceElement, sourcePort, targetElement, position);
10084
10098
  if (targetPort) {
10085
10099
  //Add new port to target element
10086
10100
  targetElement.addPort(targetPort);
@@ -10091,8 +10105,8 @@ var Paper = function (props) {
10091
10105
  var prevLinks = linksRef.current;
10092
10106
  var newLinks = __spreadArray(__spreadArray([], prevLinks, true), [newElementLink], false);
10093
10107
  setLinks(newLinks);
10094
- if (props.onLinksChanged) {
10095
- props.onLinksChanged(newLinks);
10108
+ if (onLinksChanged) {
10109
+ onLinksChanged(newLinks);
10096
10110
  }
10097
10111
  paperEventEmitter.emitElementLinkEnded(newElementLink);
10098
10112
  setTempLink(null);
@@ -10103,7 +10117,7 @@ var Paper = function (props) {
10103
10117
  //Clear tempLink
10104
10118
  setTempLink(null);
10105
10119
  paperEventEmitter.emitElementLinkEnded();
10106
- }, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter, props.onLinksChanged]);
10120
+ }, [onCreatingPortByLinking, createElementLink, paperEventEmitter, onLinksChanged]);
10107
10121
  var handleElementTextChange = React.useCallback(function (elementId, textId, newContent) {
10108
10122
  var prevElms = elementsRef.current;
10109
10123
  var newElements = prevElms.map(function (curEle) {
@@ -10117,10 +10131,10 @@ var Paper = function (props) {
10117
10131
  return curEle;
10118
10132
  });
10119
10133
  setElements(newElements);
10120
- if (props.onElementsChanged) {
10121
- props.onElementsChanged(newElements);
10134
+ if (onElementsChanged) {
10135
+ onElementsChanged(newElements);
10122
10136
  }
10123
- }, [props.onElementsChanged]);
10137
+ }, [onElementsChanged]);
10124
10138
  var handleElementClicked = React.useCallback(function (elementId, e, ref) {
10125
10139
  e.stopPropagation();
10126
10140
  var tempLink = tempLinkRef.current;
@@ -10141,73 +10155,67 @@ var Paper = function (props) {
10141
10155
  setMouseDownedOnPaper(false);
10142
10156
  }, [paperEventEmitter]);
10143
10157
  var handlePortContextMenu = React.useCallback(function (port, elementId, e) {
10144
- var _a;
10145
10158
  e.preventDefault();
10146
10159
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10147
10160
  if (element) {
10148
- (_a = props.onPortContextMenu) === null || _a === void 0 ? void 0 : _a.call(props, port, element, e);
10161
+ onPortContextMenu === null || onPortContextMenu === void 0 ? void 0 : onPortContextMenu(port, element, e);
10149
10162
  }
10150
- }, [props.onPortContextMenu]);
10163
+ }, [onPortContextMenu]);
10151
10164
  var handleContextMenu = React.useCallback(function (elementId, e, ref) {
10152
- var _a;
10153
10165
  e.preventDefault();
10154
10166
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10155
10167
  if (element) {
10156
10168
  handleElementClicked(elementId, e, ref);
10157
- (_a = props.onElementContextMenu) === null || _a === void 0 ? void 0 : _a.call(props, element, e);
10169
+ onElementContextMenu === null || onElementContextMenu === void 0 ? void 0 : onElementContextMenu(element, e);
10158
10170
  }
10159
- }, [props.onElementContextMenu, handleElementClicked]);
10171
+ }, [onElementContextMenu, handleElementClicked]);
10160
10172
  var handleMouseUp = React.useCallback(function (ev, elementId) {
10161
- var _a;
10162
10173
  var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
10163
10174
  var paperPosition = windowsPositionToPaperPosition({
10164
10175
  x: ev.clientX,
10165
10176
  y: ev.clientY
10166
10177
  }, paperContainerRef.current, zoomRef.current);
10167
10178
  if (element) {
10168
- (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, element, paperPosition);
10179
+ onElementMouseUp === null || onElementMouseUp === void 0 ? void 0 : onElementMouseUp(ev, element, paperPosition);
10169
10180
  }
10170
- }, [props.onElementMouseUp]);
10181
+ }, [onElementMouseUp]);
10171
10182
  var handleMouseDown = React.useCallback(function (ev, elementId) {
10172
- var _a;
10173
10183
  var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
10174
10184
  var paperPosition = windowsPositionToPaperPosition({
10175
10185
  x: ev.clientX,
10176
10186
  y: ev.clientY
10177
10187
  }, paperContainerRef.current, zoomRef.current);
10178
10188
  if (element) {
10179
- (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, element, paperPosition);
10189
+ onElementMouseDown === null || onElementMouseDown === void 0 ? void 0 : onElementMouseDown(ev, element, paperPosition);
10180
10190
  }
10181
- }, [props.onElementMouseDown]);
10191
+ }, [onElementMouseDown]);
10182
10192
  var handleMouseMove = React.useCallback(function (ev, elementId) {
10183
- var _a;
10184
10193
  var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
10185
10194
  var paperPosition = windowsPositionToPaperPosition({
10186
10195
  x: ev.clientX,
10187
10196
  y: ev.clientY
10188
10197
  }, paperContainerRef.current, zoomRef.current);
10189
10198
  if (element) {
10190
- (_a = props.onElementMouseMove) === null || _a === void 0 ? void 0 : _a.call(props, ev, element, paperPosition);
10199
+ onElementMouseMove === null || onElementMouseMove === void 0 ? void 0 : onElementMouseMove(ev, element, paperPosition);
10191
10200
  }
10192
- }, [props.onElementMouseMove]);
10201
+ }, [onElementMouseMove]);
10193
10202
  var handleMouseLeave = React.useCallback(function (ev, elementId) {
10194
- var _a;
10195
10203
  var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
10196
10204
  var paperPosition = windowsPositionToPaperPosition({
10197
10205
  x: ev.clientX,
10198
10206
  y: ev.clientY
10199
10207
  }, paperContainerRef.current, zoomRef.current);
10200
10208
  if (element) {
10201
- (_a = props.onElementMouseLeave) === null || _a === void 0 ? void 0 : _a.call(props, ev, element, paperPosition);
10209
+ onElementMouseLeave === null || onElementMouseLeave === void 0 ? void 0 : onElementMouseLeave(ev, element, paperPosition);
10202
10210
  }
10203
- }, [props.onElementMouseLeave]);
10211
+ }, [onElementMouseLeave]);
10204
10212
  var renderElementInTree = React.useCallback(function (element) {
10205
10213
  //use the defined react element or the default Element component
10206
10214
  var ReactElement = element.reactElement || Element$1;
10207
10215
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
10208
10216
  React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, ref: function (refDOM) { return element.DOM = refDOM; }, height: element.size.height, width: element.size.width, x: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu,
10209
10217
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10210
- onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
10218
+ onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
10211
10219
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
10212
10220
  !!paperContainerRef.current && !!selectedElement && selectedElement.id === element.id &&
10213
10221
  React.createElement(SelectionFrame, { key: selectedElement.id, container: paperContainerRef.current, targetSVGElement: selectedElementSVG || undefined, resizability: (selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.resizability) || {
@@ -10299,7 +10307,7 @@ var Paper = function (props) {
10299
10307
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10300
10308
  setMouseDownedOnPaper(false);
10301
10309
  } }))));
10302
- }, [handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, props, 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]);
10310
+ }, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortsChanged, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, props, 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]);
10303
10311
  var ElementsInTree = React.useMemo(function () {
10304
10312
  return elementsInTree.map(function (element, index) {
10305
10313
  return renderElementInTree(element);
@@ -10382,7 +10390,7 @@ var Editor = function (_a) {
10382
10390
  }, [editorContext]);
10383
10391
  var handlePortsChanged = React.useCallback(function (ports, element) {
10384
10392
  element.ports = ports;
10385
- }, [editorContext]);
10393
+ }, []);
10386
10394
  var handlePortContextMenu = React.useCallback(function (port, element, event) {
10387
10395
  editorContext.onPortContextMenuHandler(port, element, event);
10388
10396
  }, [editorContext]);
@@ -10446,9 +10454,12 @@ var Editor = function (_a) {
10446
10454
  var handlePaperMouseUp = React.useCallback(function (position) {
10447
10455
  editorContext.onPaperMouseUpHandler(position);
10448
10456
  }, [editorContext]);
10457
+ var handleElementRemoved = React.useCallback(function (element) {
10458
+ editorContext.onElementRemovedHandler(element.id);
10459
+ }, [editorContext]);
10449
10460
  return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
10450
10461
  React.createElement(ZoomContextProvider, null,
10451
- 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, 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) }))));
10462
+ React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onPortsChanged: handlePortsChanged, onPortContextMenu: handlePortContextMenu, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementDeleted: handleElementRemoved, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, manuallyTriggerRenderElementHandler: editorContext.manuallyTriggerRenderElementHandler.bind(editorContext), manuallyTriggerRenderPortHandler: editorContext.manuallyTriggerRenderPortHandler.bind(editorContext), manuallySelectElementHandler: editorContext.manuallySelectElementHandler.bind(editorContext), manuallyTriggerDraggingElementHandler: editorContext.manuallyTriggerDraggingElementHandler.bind(editorContext), manuallyTriggerStartedLinkingHandler: editorContext.manuallyTriggerStartedLinkingHandler.bind(editorContext) }))));
10452
10463
  };
10453
10464
 
10454
10465
  exports.CircleRC = Circle;