orcasvn-react-diagrams 0.1.66 → 0.1.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -9010,7 +9010,9 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9010
9010
  selectedPort.position = newPosition;
9011
9011
  onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(selectedPort, id, oldPosition, newPosition);
9012
9012
  setPorts(__spreadArray([], portsRef.current, true));
9013
- _paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
9013
+ if (_paperEventEmitterContext.emitter.listenerCount(EVENT_NAME.PORT_MOVED) > 0) {
9014
+ _paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
9015
+ }
9014
9016
  }
9015
9017
  };
9016
9018
  //Handle when mouse down on port
@@ -9199,11 +9201,11 @@ var Element = React.forwardRef(function (props, forwardedRef) {
9199
9201
  //Re-render port again after rendered to automation rotate port
9200
9202
  //Because elementRef.current equals null in first render so automation rotate port is incorrect.
9201
9203
  //TODO: check if this is still needed -> Still needed
9202
- React.useLayoutEffect(function () {
9203
- if (elementRef.current) {
9204
- setPorts(function (prev) { return __spreadArray([], prev, true); });
9205
- }
9206
- }, []);
9204
+ // useLayoutEffect(() => {
9205
+ // if (elementRef.current) {
9206
+ // setPorts(prev => [...prev])
9207
+ // }
9208
+ // }, [])
9207
9209
  //log element render
9208
9210
  logger.debug('Rendering Element', id, x, y, width, height, cssClass, portPlaceholderShape, children, container, parentAbsolutePosition, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName, texts, ports, portSlideRailSVGClassName, portMoveableAreas, portDirection, defaultPortSize);
9209
9211
  return (React.createElement(React.Fragment, null,
@@ -9477,34 +9479,45 @@ function convertElementsToTree(elements) {
9477
9479
  }
9478
9480
  var Paper = function (props) {
9479
9481
  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];
9482
+ var _c = React.useState({ elements: [], elementsInTree: [] }), elementsState = _c[0], setElementsState = _c[1];
9483
+ // const [elements, setElements] = React.useState<IElementState[]>([]);
9484
+ // const [elementsInTree, setElementsInTree] = React.useState<IElementInTreeState[]>([]);
9485
+ var _d = React.useState(), selectedElement = _d[0], setSelectedElement = _d[1];
9486
+ var _e = React.useState(false), autoEnabledDraggingSelectedElement = _e[0], setAutoEnabledDraggingSelectedElement = _e[1];
9487
+ var _f = React.useState([]), links = _f[0], setLinks = _f[1];
9488
+ var _g = React.useState(), selectedLink = _g[0], setSelectedLink = _g[1];
9489
+ var _h = React.useState(null), tempLink = _h[0], setTempLink = _h[1];
9490
+ var _j = React.useState([]), texts = _j[0], setTexts = _j[1];
9491
+ var _k = React.useState(), selectedText = _k[0], setSelectedText = _k[1];
9492
+ var _l = React.useState(null), selectedElementSVG = _l[0], setSelectedElementSVG = _l[1];
9493
+ var _m = React.useState(false), mouseDownedOnPaper = _m[0], setMouseDownedOnPaper = _m[1];
9491
9494
  var paperEventEmitter = React.useContext(paperEventEmitterContext);
9492
9495
  var zoom = useZoomContext().zoom;
9493
9496
  var zoomRef = React.useRef(zoom);
9494
9497
  var paperContainerRef = React.useRef(null);
9495
9498
  var tempLinkRef = React.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
9496
- var elementsRef = React.useRef(elements); //Cache elements to avoid re-render when elements changed
9499
+ var elementsRef = React.useRef([]); //Cache elements to avoid re-render when elements changed
9497
9500
  var linksRef = React.useRef(links); //Cache links to avoid re-render when links changed
9498
9501
  var textsRef = React.useRef(texts); //Cache texts to avoid re-render when texts changed
9499
9502
  var size = props.size;
9500
9503
  var selectedElementAbsPosition = React.useMemo(function () { return selectedElement ? getAbsolutePosition(selectedElement) : null; }, [selectedElement, (_a = selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position) === null || _a === void 0 ? void 0 : _a.x, (_b = selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.position) === null || _b === void 0 ? void 0 : _b.y, selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size]);
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;
9504
+ var onPortMoved = props.onPortMoved, onPortSelected = props.onPortSelected, onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp,
9505
+ //onPortsChanged,
9506
+ onPortContextMenu = props.onPortContextMenu, onElementSelected = props.onElementSelected, onElementsChanged = props.onElementsChanged, onElementResized = props.onElementResized, onElementContextMenu = props.onElementContextMenu, onElementMouseUp = props.onElementMouseUp, onElementMouseDown = props.onElementMouseDown, onElementMouseMove = props.onElementMouseMove, onElementMoved = props.onElementMoved, onElementMouseLeave = props.onElementMouseLeave, onElementDeleted = props.onElementDeleted, onLinksChanged = props.onLinksChanged, onLinkSelected = props.onLinkSelected, onTextSelected = props.onTextSelected, onTextsChanged = props.onTextsChanged, manuallyTriggerRenderElementHandler = props.manuallyTriggerRenderElementHandler, manuallyTriggerRenderPortHandler = props.manuallyTriggerRenderPortHandler, onCreatingPortByLinking = props.onCreatingPortByLinking, onCreatingLink = props.onCreatingLink, onElementMoving = props.onElementMoving, manuallySelectElementHandler = props.manuallySelectElementHandler, manuallyTriggerDraggingElementHandler = props.manuallyTriggerDraggingElementHandler, manuallyTriggerStartedLinkingHandler = props.manuallyTriggerStartedLinkingHandler;
9507
+ var handleElementsState = React.useCallback(function (elements) {
9508
+ var elementsInTree = convertElementsToTree(elements);
9509
+ setElementsState({ elements: __spreadArray([], elements, true), elementsInTree: elementsInTree });
9510
+ elementsRef.current = __spreadArray([], elements, true);
9511
+ }, []);
9512
+ var rerenderWhenAnyElementChanged = React.useCallback(function () {
9513
+ setElementsState(function (prev) { return ({ elements: __spreadArray([], prev.elements, true), elementsInTree: __spreadArray([], prev.elementsInTree, true) }); });
9514
+ }, []);
9502
9515
  React.useEffect(function () {
9503
9516
  zoomRef.current = zoom;
9504
9517
  }, [zoom]);
9505
9518
  React.useEffect(function () {
9506
- setElements(__spreadArray([], props.elements, true));
9507
- }, [props.elements]);
9519
+ handleElementsState(props.elements);
9520
+ }, [handleElementsState, props.elements]);
9508
9521
  React.useEffect(function () {
9509
9522
  setLinks(__spreadArray([], props.links || [], true));
9510
9523
  }, [props.links]);
@@ -9513,16 +9526,16 @@ var Paper = function (props) {
9513
9526
  }, [props.texts]);
9514
9527
  React.useEffect(function () {
9515
9528
  var off = manuallyTriggerRenderElementHandler(function (elementId) {
9516
- var newElements = __spreadArray([], elements, true);
9517
- setElements(newElements);
9518
- if (onElementsChanged) {
9519
- onElementsChanged(newElements);
9520
- }
9529
+ rerenderWhenAnyElementChanged();
9530
+ //setElementsState(prevElementsState => ({ ...prevElementsState }));
9531
+ // if (onElementsChanged) {
9532
+ // onElementsChanged(newElements)
9533
+ // }
9521
9534
  });
9522
9535
  return function () {
9523
9536
  off();
9524
9537
  };
9525
- }, [manuallyTriggerRenderElementHandler, onElementsChanged, elements, selectedElement]);
9538
+ }, [manuallyTriggerRenderElementHandler, rerenderWhenAnyElementChanged]);
9526
9539
  React.useEffect(function () {
9527
9540
  var offs = [];
9528
9541
  offs.push(manuallySelectElementHandler === null || manuallySelectElementHandler === void 0 ? void 0 : manuallySelectElementHandler(function (element) {
@@ -9557,15 +9570,15 @@ var Paper = function (props) {
9557
9570
  };
9558
9571
  }
9559
9572
  }, [manuallyTriggerStartedLinkingHandler, paperEventEmitter]);
9560
- var updateElementsTree = React.useCallback(function () {
9561
- var parsedElementsInTree = convertElementsToTree(elements);
9562
- setElementsInTree(parsedElementsInTree);
9563
- }, [elements]);
9564
- //Cache elements to avoid re-render when elements changed
9565
- React.useEffect(function () {
9566
- elementsRef.current = elements;
9567
- updateElementsTree();
9568
- }, [elements, updateElementsTree]);
9573
+ // const updateElementsTree = useCallback(() => {
9574
+ // const parsedElementsInTree = convertElementsToTree(element)
9575
+ // setElementsInTree(parsedElementsInTree)
9576
+ // }, [elements])
9577
+ // //Cache elements to avoid re-render when elements changed
9578
+ // useEffect(() => {
9579
+ // elementsRef.current = elements;
9580
+ // updateElementsTree();
9581
+ // }, [elements, updateElementsTree])
9569
9582
  //Cache links to avoid re-render when links changed
9570
9583
  React.useEffect(function () {
9571
9584
  linksRef.current = links;
@@ -9616,7 +9629,7 @@ var Paper = function (props) {
9616
9629
  var _a;
9617
9630
  return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
9618
9631
  logger.info('onParentChanged');
9619
- updateElementsTree();
9632
+ handleElementsState(elementsRef.current);
9620
9633
  });
9621
9634
  });
9622
9635
  //Listen a new port added, then re-render the element component
@@ -9624,25 +9637,21 @@ var Paper = function (props) {
9624
9637
  var _a;
9625
9638
  return (_a = element.onAddedPort) === null || _a === void 0 ? void 0 : _a.call(element, function (newPort) {
9626
9639
  logger.info("A new port has been added to element ".concat(element.id));
9627
- var prevElements = elementsRef.current;
9628
- var newElements = prevElements.map(function (ele) {
9640
+ elementsRef.current.forEach(function (ele) {
9629
9641
  if (ele.id === element.id) {
9630
9642
  ele.ports = __spreadArray([], (ele.ports || []), true);
9631
9643
  }
9632
- return ele;
9633
9644
  });
9634
9645
  //Set state to re-render component
9635
- setElements(newElements);
9636
- if (onElementsChanged) {
9637
- onElementsChanged(newElements);
9638
- }
9646
+ // setElements(newElements)
9647
+ rerenderWhenAnyElementChanged();
9639
9648
  });
9640
9649
  });
9641
9650
  return function () {
9642
9651
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9643
9652
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9644
9653
  };
9645
- }, [updateElementsTree, onElementsChanged]);
9654
+ }, [handleElementsState, rerenderWhenAnyElementChanged]);
9646
9655
  // //Update elements tree when length of elements change
9647
9656
  // useEffect(() => {
9648
9657
  // updateElementsTree();
@@ -9668,7 +9677,7 @@ var Paper = function (props) {
9668
9677
  var newElements = prevElements.filter(function (e) { return !deletedElementIds_1.includes(e.id); });
9669
9678
  onElementDeleted === null || onElementDeleted === void 0 ? void 0 : onElementDeleted(selectedElement);
9670
9679
  //Set state to re-render component
9671
- setElements(newElements);
9680
+ handleElementsState(newElements);
9672
9681
  if (onElementsChanged) {
9673
9682
  onElementsChanged(newElements);
9674
9683
  }
@@ -9690,7 +9699,7 @@ var Paper = function (props) {
9690
9699
  return function () {
9691
9700
  listener.off();
9692
9701
  };
9693
- }, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted]);
9702
+ }, [selectedElement, onElementSelected, onElementsChanged, onLinksChanged, getChildOfElement, paperEventEmitter, onElementDeleted, handleElementsState]);
9694
9703
  //Listen command delete selected for link
9695
9704
  React.useEffect(function () {
9696
9705
  var listener = paperEventEmitter.onCommandDeleteSelectedLink(function () {
@@ -9825,6 +9834,7 @@ var Paper = function (props) {
9825
9834
  }
9826
9835
  }, [onLinksChanged]);
9827
9836
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9837
+ var _a;
9828
9838
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9829
9839
  if (element) {
9830
9840
  //set links equals a clone links to re-render links with new position
@@ -9854,7 +9864,7 @@ var Paper = function (props) {
9854
9864
  if (onLinksChanged) {
9855
9865
  onLinksChanged(newLinks);
9856
9866
  }
9857
- var newElements = elementsRef.current;
9867
+ //const newElements = elementsRef.current;
9858
9868
  // newElements[updatedElementIndex].ports = newElements[updatedElementIndex].ports?.map(p => {
9859
9869
  // if (p.id === port.id) {
9860
9870
  // p.position = newPosition
@@ -9863,28 +9873,25 @@ var Paper = function (props) {
9863
9873
  // })
9864
9874
  //Update port position in element, not re-render
9865
9875
  //To avoid re-render
9866
- setElements(function (prev) {
9867
- var _a;
9868
- var newElements = __spreadArray([], prev, true);
9869
- var updatedElement = newElements.find(function (e) { return e.id === elementId; });
9870
- if (updatedElement) {
9871
- updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9872
- if (p.id === port.id) {
9873
- p.position = newPosition;
9874
- }
9875
- return p;
9876
- });
9877
- }
9878
- return newElements;
9879
- });
9880
- if (onElementsChanged) {
9881
- onElementsChanged(newElements);
9876
+ // setElements(prev => {
9877
+ // const newElements = [...prev]
9878
+ var updatedElement = elementsRef.current.find(function (e) { return e.id === elementId; });
9879
+ if (updatedElement) {
9880
+ updatedElement.ports = (_a = updatedElement.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9881
+ if (p.id === port.id) {
9882
+ p.position = newPosition;
9883
+ }
9884
+ return p;
9885
+ });
9882
9886
  }
9887
+ rerenderWhenAnyElementChanged();
9888
+ // return newElements
9889
+ // });
9883
9890
  if (onPortMoved) {
9884
9891
  onPortMoved(newPosition, port, element);
9885
9892
  }
9886
9893
  }
9887
- }, [onPortMoved, onElementsChanged, onLinksChanged]);
9894
+ }, [onPortMoved, onLinksChanged, rerenderWhenAnyElementChanged]);
9888
9895
  //Handle creating a new element link
9889
9896
  var handlePortMouseDown = React.useCallback(function (ev, port, elementId) {
9890
9897
  ev.stopPropagation();
@@ -9920,8 +9927,8 @@ var Paper = function (props) {
9920
9927
  return null;
9921
9928
  //Automatic bending, if is not defined points
9922
9929
  if (!newElementLink.points || newElementLink.points.length === 0) {
9923
- var elements_1 = elementsRef.current;
9924
- newElementLink = automationAddPointsToLink(newElementLink, elements_1, MAX_LINK_KNOT_COUNT);
9930
+ var elements = elementsRef.current;
9931
+ newElementLink = automationAddPointsToLink(newElementLink, elements, MAX_LINK_KNOT_COUNT);
9925
9932
  }
9926
9933
  return newElementLink;
9927
9934
  }, [onCreatingLink]);
@@ -9961,13 +9968,13 @@ var Paper = function (props) {
9961
9968
  setTempLink(null);
9962
9969
  }
9963
9970
  }, [paperEventEmitter, createElementLink, onPortMouseUp, onLinksChanged]);
9964
- var handlePortsChanged = React.useCallback(function (ports, elementId) {
9965
- var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9966
- if (element) {
9967
- //broadcast ports changed to parent component
9968
- onPortsChanged(ports, element);
9969
- }
9970
- }, [onPortsChanged]);
9971
+ // const handlePortsChanged = useCallback((ports: IPort[], elementId: string) => {
9972
+ // const element = elementsRef.current.find(e => e.id === elementId);
9973
+ // if (element) {
9974
+ // //broadcast ports changed to parent component
9975
+ // onPortsChanged(ports, element);
9976
+ // }
9977
+ // }, [onPortsChanged])
9971
9978
  var handleLinkLabelMoved = React.useCallback(function (newX, newY, index, labelType) {
9972
9979
  var prevLinks = linksRef.current;
9973
9980
  var newLinks = __spreadArray([], prevLinks, true);
@@ -10143,8 +10150,8 @@ var Paper = function (props) {
10143
10150
  paperEventEmitter.emitElementLinkEnded();
10144
10151
  }, [onCreatingPortByLinking, createElementLink, paperEventEmitter, onLinksChanged]);
10145
10152
  var handleElementTextChange = React.useCallback(function (elementId, textId, newContent) {
10146
- var prevElms = elementsRef.current;
10147
- var newElements = prevElms.map(function (curEle) {
10153
+ // const prevElms = elementsRef.current;
10154
+ elementsRef.current.forEach(function (curEle) {
10148
10155
  //Find changed text of element to update the content for it.
10149
10156
  if (curEle.id === elementId && curEle.texts) {
10150
10157
  var updatedTextId = curEle.texts.findIndex(function (t) { return t.id === textId; });
@@ -10152,13 +10159,9 @@ var Paper = function (props) {
10152
10159
  curEle.texts[updatedTextId].content = newContent;
10153
10160
  }
10154
10161
  }
10155
- return curEle;
10156
10162
  });
10157
- setElements(newElements);
10158
- if (onElementsChanged) {
10159
- onElementsChanged(newElements);
10160
- }
10161
- }, [onElementsChanged]);
10163
+ rerenderWhenAnyElementChanged();
10164
+ }, [rerenderWhenAnyElementChanged]);
10162
10165
  var handleElementClicked = React.useCallback(function (elementId, e, ref) {
10163
10166
  e.stopPropagation();
10164
10167
  var tempLink = tempLinkRef.current;
@@ -10239,7 +10242,9 @@ var Paper = function (props) {
10239
10242
  //use the defined react element or the default Element component
10240
10243
  var ReactElement = element.reactElement || Element$1;
10241
10244
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
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,
10245
+ React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, ref: function (refDOM) { return element.DOM = refDOM; }, height: element.size.height, width: element.size.width, x: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, selectable: element.selectable, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
10246
+ // onPortsChanged={handlePortsChanged}
10247
+ onPortContextMenu: handlePortContextMenu,
10243
10248
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10244
10249
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: manuallyTriggerRenderPortHandler, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
10245
10250
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
@@ -10291,7 +10296,7 @@ var Paper = function (props) {
10291
10296
  updateElementPosition(selectedElement, paperPosition.x, paperPosition.y, false);
10292
10297
  }
10293
10298
  //let newElementPosition = updateElementPosition(selectedElement, newPosition.x, newPosition.y, true)
10294
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
10299
+ var indexSelectedElement = elementsRef.current.findIndex(function (e) { return e.id === selectedElement.id; });
10295
10300
  logger.info("Element ".concat(selectedElement.id, " is moving to relative position ").concat(JSON.stringify(selectedElement.position)));
10296
10301
  // Start updating the position of links connected to the selected element
10297
10302
  var childElements = getChildOfElement(selectedElement);
@@ -10312,7 +10317,7 @@ var Paper = function (props) {
10312
10317
  onLinksChanged === null || onLinksChanged === void 0 ? void 0 : onLinksChanged(newLinks);
10313
10318
  // End updating the position of links connected to the selected element
10314
10319
  //Set state to re-render UI with new position
10315
- setElementsInTree(function (prev) { return __spreadArray([], prev, true); });
10320
+ rerenderWhenAnyElementChanged();
10316
10321
  if (onElementMoved) {
10317
10322
  console.log('onElementMoved', selectedElement.position, paperPosition);
10318
10323
  onElementMoved(selectedElement.position, selectedElement, indexSelectedElement, paperPosition);
@@ -10322,27 +10327,23 @@ var Paper = function (props) {
10322
10327
  }, onResize: function (width, height) {
10323
10328
  if (!selectedElement)
10324
10329
  return;
10325
- var indexSelectedElement = elements.findIndex(function (e) { return e.id === selectedElement.id; });
10330
+ var indexSelectedElement = elementsRef.current.findIndex(function (e) { return e.id === selectedElement.id; });
10326
10331
  var oldSize = selectedElement.size;
10327
10332
  var newSize = { width: width, height: height };
10328
- elements[indexSelectedElement].size = newSize;
10329
- var newElements = __spreadArray([], elements, true);
10330
- setElements(newElements);
10331
- if (onElementsChanged) {
10332
- onElementsChanged(newElements);
10333
- }
10333
+ elementsRef.current[indexSelectedElement].size = newSize;
10334
+ rerenderWhenAnyElementChanged();
10334
10335
  if (onElementResized) {
10335
10336
  onElementResized(newSize, selectedElement, indexSelectedElement);
10336
10337
  }
10337
10338
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
10338
10339
  setMouseDownedOnPaper(false);
10339
10340
  } }))));
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]);
10341
+ }, [manuallyTriggerRenderPortHandler, handleElementClicked, handleContextMenu, handleMouseUp, handleMouseDown, handleMouseMove, handleMouseLeave, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handlePortContextMenu, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, selectedElement, selectedElementSVG, selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.x, selectedElementAbsPosition === null || selectedElementAbsPosition === void 0 ? void 0 : selectedElementAbsPosition.y, zoom, autoEnabledDraggingSelectedElement, getChildOfElement, paperEventEmitter, onElementResized, onElementMoved, onElementMouseDown, onElementMouseUp, onLinksChanged, onElementMoving, rerenderWhenAnyElementChanged]);
10341
10342
  var ElementsInTree = React.useMemo(function () {
10342
- return elementsInTree.map(function (element, index) {
10343
+ return elementsState.elementsInTree.map(function (element, index) {
10343
10344
  return renderElementInTree(element);
10344
10345
  });
10345
- }, [elementsInTree, renderElementInTree]);
10346
+ }, [elementsState.elementsInTree, renderElementInTree]);
10346
10347
  return (React.createElement("div", { style: { position: "relative" } },
10347
10348
  React.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
10348
10349
  React.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
@@ -10418,9 +10419,6 @@ var Editor = function (_a) {
10418
10419
  var handlePortSelected = React.useCallback(function (port, element) {
10419
10420
  editorContext.onPortSelectedHandler(port, element);
10420
10421
  }, [editorContext]);
10421
- var handlePortsChanged = React.useCallback(function (ports, element) {
10422
- element.ports = ports;
10423
- }, []);
10424
10422
  var handlePortContextMenu = React.useCallback(function (port, element, event) {
10425
10423
  editorContext.onPortContextMenuHandler(port, element, event);
10426
10424
  }, [editorContext]);
@@ -10495,7 +10493,9 @@ var Editor = function (_a) {
10495
10493
  }, [editorContext]);
10496
10494
  return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
10497
10495
  React.createElement(ZoomContextProvider, null,
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) }))));
10496
+ React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected,
10497
+ //onPortsChanged={handlePortsChanged}
10498
+ onPortContextMenu: handlePortContextMenu, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementDeleted: handleElementRemoved, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onElementMoving: handleOnElementMoving, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, manuallyTriggerRenderElementHandler: editorContext.manuallyTriggerRenderElementHandler.bind(editorContext), manuallyTriggerRenderPortHandler: editorContext.manuallyTriggerRenderPortHandler.bind(editorContext), manuallySelectElementHandler: editorContext.manuallySelectElementHandler.bind(editorContext), manuallyTriggerDraggingElementHandler: editorContext.manuallyTriggerDraggingElementHandler.bind(editorContext), manuallyTriggerStartedLinkingHandler: editorContext.manuallyTriggerStartedLinkingHandler.bind(editorContext) }))));
10499
10499
  };
10500
10500
 
10501
10501
  exports.CircleRC = Circle;
@@ -21,7 +21,6 @@ interface PaperProps {
21
21
  onPortMouseUp?: (port: IPort, element: IElement, paperPosition: IPosition) => void;
22
22
  onPortMoved?: (relativePosition: IPosition, port: IPort, element: IElement) => void;
23
23
  onPortSelected?: (port: IPort, element: IElement) => void;
24
- onPortsChanged: (ports: IPort[], element: IElement) => void;
25
24
  onPortContextMenu?: (port: IPort, element: IElement, mouseEvent: React.MouseEvent<SVGElement>) => void;
26
25
  onElementContextMenu?: (element: IElement, mouseEvent: React.MouseEvent<SVGElement>) => void;
27
26
  onElementMoved?: (relativePosition: IPosition, element: IElement, index: number, paperPosition: IPosition) => void;