orcasvn-react-diagrams 0.1.23 → 0.1.24

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.
Files changed (39) hide show
  1. package/dist/cjs/index.js +411 -170
  2. package/dist/cjs/types/components/editor.d.ts +5 -3
  3. package/dist/cjs/types/components/elements/element.d.ts +2 -2
  4. package/dist/cjs/types/components/elements/elementWrapper.d.ts +1 -0
  5. package/dist/cjs/types/components/paper.d.ts +5 -2
  6. package/dist/cjs/types/contexts/paperEventEmitterContext.d.ts +5 -1
  7. package/dist/cjs/types/mocks/editorContextForOptimizeRerender.d.ts +2 -0
  8. package/dist/cjs/types/mocks/editorContextSingleElement.d.ts +2 -0
  9. package/dist/cjs/types/models/IEditorContext.d.ts +3 -0
  10. package/dist/cjs/types/models/IElement.d.ts +1 -0
  11. package/dist/cjs/types/models/IElementProps.d.ts +3 -2
  12. package/dist/cjs/types/models/IPort.d.ts +2 -0
  13. package/dist/cjs/types/models/IPortProps.d.ts +5 -4
  14. package/dist/cjs/types/models/callbackTypes.d.ts +2 -0
  15. package/dist/cjs/types/models/implementations/EditorContext.d.ts +3 -0
  16. package/dist/cjs/types/models/implementations/Element.d.ts +1 -0
  17. package/dist/cjs/types/models/implementations/Port.d.ts +4 -0
  18. package/dist/cjs/types/utils/constants.d.ts +2 -0
  19. package/dist/esm/index.js +413 -172
  20. package/dist/esm/index.js.map +1 -1
  21. package/dist/esm/types/components/editor.d.ts +5 -3
  22. package/dist/esm/types/components/elements/element.d.ts +2 -2
  23. package/dist/esm/types/components/elements/elementWrapper.d.ts +1 -0
  24. package/dist/esm/types/components/paper.d.ts +5 -2
  25. package/dist/esm/types/contexts/paperEventEmitterContext.d.ts +5 -1
  26. package/dist/esm/types/mocks/editorContextForOptimizeRerender.d.ts +2 -0
  27. package/dist/esm/types/mocks/editorContextSingleElement.d.ts +2 -0
  28. package/dist/esm/types/models/IEditorContext.d.ts +3 -0
  29. package/dist/esm/types/models/IElement.d.ts +1 -0
  30. package/dist/esm/types/models/IElementProps.d.ts +3 -2
  31. package/dist/esm/types/models/IPort.d.ts +2 -0
  32. package/dist/esm/types/models/IPortProps.d.ts +5 -4
  33. package/dist/esm/types/models/callbackTypes.d.ts +2 -0
  34. package/dist/esm/types/models/implementations/EditorContext.d.ts +3 -0
  35. package/dist/esm/types/models/implementations/Element.d.ts +1 -0
  36. package/dist/esm/types/models/implementations/Port.d.ts +4 -0
  37. package/dist/esm/types/utils/constants.d.ts +2 -0
  38. package/dist/index.d.ts +28 -9
  39. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -442,7 +442,8 @@ function generateUniqueId() {
442
442
  return v4();
443
443
  }
444
444
 
445
- var Element$1 = /** @class */ (function () {
445
+ var MANUALLY_TRIGGER_RENDER$1 = 'manuallyTriggerRender';
446
+ var Element$2 = /** @class */ (function () {
446
447
  function Element(x, y, width, height, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
447
448
  if (portMovealeAreas === void 0) { portMovealeAreas = []; }
448
449
  this.resizability = {
@@ -468,9 +469,23 @@ var Element$1 = /** @class */ (function () {
468
469
  }
469
470
  Element.prototype.manuallyTriggerRender = function () {
470
471
  //TODO: Implement this
472
+ this._eventEmitter.emit(MANUALLY_TRIGGER_RENDER$1);
473
+ };
474
+ Element.prototype.manuallyTriggerRenderHandler = function (callback) {
475
+ var _this = this;
476
+ //TODO: Implement this
477
+ this._eventEmitter.on(MANUALLY_TRIGGER_RENDER$1, callback);
478
+ var canceller = function () {
479
+ _this._eventEmitter.off(MANUALLY_TRIGGER_RENDER$1, callback);
480
+ };
481
+ return canceller;
471
482
  };
472
483
  Element.prototype.manuallyTriggerRenderPort = function (portId) {
473
484
  //TODO: Implement this
485
+ var port = this.getPort(portId);
486
+ if (port) {
487
+ port.manuallyTriggerRender();
488
+ }
474
489
  };
475
490
  Object.defineProperty(Element.prototype, "id", {
476
491
  get: function () {
@@ -657,9 +672,12 @@ var CustomShape = React$1.forwardRef(function (props, ref) {
657
672
  return (React$1.createElement(ShapeWrapper, __assign({}, props, { ref: ref }), props.children));
658
673
  });
659
674
 
675
+ var MANUALLY_TRIGGER_RENDER = 'manuallyTriggerRender';
660
676
  var Port$1 = /** @class */ (function () {
661
677
  function Port(x, y, label, shapeRenderer, width, height) {
662
678
  var _this = this;
679
+ //internal properties
680
+ this._eventEmitter = new EventEmitter();
663
681
  this._id = generateUniqueId();
664
682
  this.position = { x: x, y: y };
665
683
  if (!height) {
@@ -685,6 +703,18 @@ var Port$1 = /** @class */ (function () {
685
703
  enumerable: false,
686
704
  configurable: true
687
705
  });
706
+ Port.prototype.manuallyTriggerRender = function () {
707
+ //TODO: Implement this
708
+ this._eventEmitter.emit(MANUALLY_TRIGGER_RENDER);
709
+ };
710
+ Port.prototype.manuallyTriggerRenderHandler = function (callback) {
711
+ var _this = this;
712
+ this._eventEmitter.on(MANUALLY_TRIGGER_RENDER, callback);
713
+ var canceller = function () {
714
+ _this._eventEmitter.off(MANUALLY_TRIGGER_RENDER, callback);
715
+ };
716
+ return canceller;
717
+ };
688
718
  return Port;
689
719
  }());
690
720
 
@@ -750,6 +780,9 @@ var Text$2 = /** @class */ (function () {
750
780
  }());
751
781
 
752
782
  var EVENT_PAPER_CLICKED = 'paperClicked';
783
+ var EVENT_PAPER_MOUSE_MOVED = 'paperMouseMoved';
784
+ var EVENT_PAPER_MOUSE_DOWN = 'paperMouseDown';
785
+ var EVENT_PAPER_MOUSE_UP = 'paperMouseUp';
753
786
  var EVENT_PORT_MOVED = 'portMoved';
754
787
  var EVENT_PORT_SELECTED = 'portSelected';
755
788
  var EVENT_ELEMENT_CONTEXT_MENU = 'elementContextMenu';
@@ -825,6 +858,42 @@ var EditorContext = /** @class */ (function () {
825
858
  EditorContext.prototype.onPaperClickedHandler = function (position) {
826
859
  this._eventEmitter.emit(EVENT_PAPER_CLICKED, position);
827
860
  };
861
+ EditorContext.prototype.onPaperMouseMoved = function (callback) {
862
+ var _this = this;
863
+ this._eventEmitter.on(EVENT_PAPER_CLICKED, callback);
864
+ var off = function () {
865
+ _this._eventEmitter.off(EVENT_PAPER_CLICKED, callback);
866
+ };
867
+ return off;
868
+ };
869
+ /** @internal */
870
+ EditorContext.prototype.onPaperMouseMovedHandler = function (position) {
871
+ this._eventEmitter.emit(EVENT_PAPER_MOUSE_MOVED, position);
872
+ };
873
+ EditorContext.prototype.onPaperMouseDown = function (callback) {
874
+ var _this = this;
875
+ this._eventEmitter.on(EVENT_PAPER_MOUSE_DOWN, callback);
876
+ var off = function () {
877
+ _this._eventEmitter.off(EVENT_PAPER_MOUSE_DOWN, callback);
878
+ };
879
+ return off;
880
+ };
881
+ /** @internal */
882
+ EditorContext.prototype.onPaperMouseDownHandler = function (position) {
883
+ this._eventEmitter.emit(EVENT_PAPER_MOUSE_DOWN, position);
884
+ };
885
+ EditorContext.prototype.onPaperMouseUp = function (callback) {
886
+ var _this = this;
887
+ this._eventEmitter.on(EVENT_PAPER_MOUSE_UP, callback);
888
+ var off = function () {
889
+ _this._eventEmitter.off(EVENT_PAPER_MOUSE_UP, callback);
890
+ };
891
+ return off;
892
+ };
893
+ /** @internal */
894
+ EditorContext.prototype.onPaperMouseUpHandler = function (position) {
895
+ this._eventEmitter.emit(EVENT_PAPER_MOUSE_UP, position);
896
+ };
828
897
  EditorContext.prototype.onPortMoved = function (callback) {
829
898
  var _this = this;
830
899
  this._eventEmitter.on(EVENT_PORT_MOVED, callback);
@@ -923,9 +992,21 @@ var EditorContext = /** @class */ (function () {
923
992
  };
924
993
  EditorContext.prototype.triggerRenderElement = function (elementId) {
925
994
  //TODO: to be implemented
995
+ var element = this.getElement(elementId);
996
+ if (element) {
997
+ element.manuallyTriggerRender();
998
+ }
926
999
  };
927
1000
  EditorContext.prototype.triggerRenderPort = function (portId, elementId) {
1001
+ var _a;
928
1002
  //TODO: to be implemented
1003
+ var element = this.getElement(elementId);
1004
+ if (element) {
1005
+ var port = (_a = element.ports) === null || _a === void 0 ? void 0 : _a.find(function (p) { return p.id === portId; });
1006
+ if (port) {
1007
+ port.manuallyTriggerRender();
1008
+ }
1009
+ }
929
1010
  };
930
1011
  return EditorContext;
931
1012
  }());
@@ -1046,11 +1127,13 @@ var EVENT_NAME = {
1046
1127
  ELEMENT_RESIZED: 'element_resized',
1047
1128
  ELEMENT_DELETED: 'element_deleted',
1048
1129
  ELEMENT_SELECTED: 'element_selected',
1130
+ COMMAND_RENDER_ELEMENT: 'command_render_element',
1049
1131
  //PORT
1050
1132
  PORT_MOUSE_DOWN: 'port_mouse_down',
1051
1133
  PORT_MOUSE_UP: 'port_mouse_up',
1052
1134
  PORT_MOVED: 'port_moved',
1053
1135
  PORT_SELECTED: 'port_selected',
1136
+ COMMAND_RENDER_PORT: 'command_render_port',
1054
1137
  //COMMAND
1055
1138
  COMMAND_DELETE_SELECTED_PORT: 'command_delete_selected_port',
1056
1139
  COMMAND_DELETE_SELECTED_LINK: 'command_delete_selected_link',
@@ -1123,7 +1206,7 @@ var SelectionFrame = function (props) {
1123
1206
  if (Date.now() - lastMoveTime < (props.movingRate || 0)) {
1124
1207
  return;
1125
1208
  }
1126
- console.info('Selection frame moved by: ', offsetX, offsetY);
1209
+ // console.info('Selection frame moved by: ', offsetX, offsetY);
1127
1210
  if (props.onMove) {
1128
1211
  props.onMove(offsetX, offsetY);
1129
1212
  setLastMoveTime(Date.now());
@@ -1399,6 +1482,18 @@ var onElementSelected = function (callback) {
1399
1482
  off: off
1400
1483
  };
1401
1484
  };
1485
+ var emitCommandRenderElement = function (elementId) {
1486
+ eventEmitter.emit(EVENT_NAME.COMMAND_RENDER_ELEMENT, elementId);
1487
+ };
1488
+ var onCommandRenderElement = function (callback) {
1489
+ eventEmitter.on(EVENT_NAME.COMMAND_RENDER_ELEMENT, callback);
1490
+ var off = function () {
1491
+ eventEmitter.off(EVENT_NAME.COMMAND_RENDER_ELEMENT, callback);
1492
+ };
1493
+ return {
1494
+ off: off
1495
+ };
1496
+ };
1402
1497
  var emitPortSelected = function (port, elementId) {
1403
1498
  eventEmitter.emit(EVENT_NAME.PORT_SELECTED, port, elementId);
1404
1499
  };
@@ -1411,6 +1506,18 @@ var onPortSelected = function (callback) {
1411
1506
  off: off
1412
1507
  };
1413
1508
  };
1509
+ var emitCommandRenderPort = function (portId, elementId) {
1510
+ eventEmitter.emit(EVENT_NAME.COMMAND_RENDER_PORT, portId, elementId);
1511
+ };
1512
+ var onCommandRenderPort = function (callback) {
1513
+ eventEmitter.on(EVENT_NAME.COMMAND_RENDER_PORT, callback);
1514
+ var off = function () {
1515
+ eventEmitter.off(EVENT_NAME.COMMAND_RENDER_PORT, callback);
1516
+ };
1517
+ return {
1518
+ off: off
1519
+ };
1520
+ };
1414
1521
  var emitTextSelected = function (text) {
1415
1522
  eventEmitter.emit(EVENT_NAME.TEXT_SELECTED, text);
1416
1523
  };
@@ -1441,6 +1548,8 @@ var paperEventEmitterContext = React$1.createContext({
1441
1548
  onElementResized: onElementResized,
1442
1549
  emitElementSelected: emitElementSelected,
1443
1550
  onElementSelected: onElementSelected,
1551
+ emitCommandRenderElement: emitCommandRenderElement,
1552
+ onCommandRenderElement: onCommandRenderElement,
1444
1553
  emitCommandDeleteSelectedPort: emitCommandDeleteSelectedPort,
1445
1554
  onCommandDeleteSelectedPort: onCommandDeleteSelectedPort,
1446
1555
  emitCommandDeleteSelectedElement: emitCommandDeleteSelectedElement,
@@ -1455,6 +1564,8 @@ var paperEventEmitterContext = React$1.createContext({
1455
1564
  onElementLinkEnded: onElementLinkEnded,
1456
1565
  emitTextSelected: emitTextSelected,
1457
1566
  onTextSelected: onTextSelected,
1567
+ emitCommandRenderPort: emitCommandRenderPort,
1568
+ onCommandRenderPort: onCommandRenderPort,
1458
1569
  });
1459
1570
 
1460
1571
  var Text = React$1.forwardRef(function (_a, ref) {
@@ -1587,17 +1698,29 @@ var Text = React$1.forwardRef(function (_a, ref) {
1587
1698
  var Text$1 = React$1.memo(Text);
1588
1699
 
1589
1700
  var Port1 = React$1.forwardRef(function (props, ref) {
1590
- var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, container = props.container, label = props.label, onPortLabelMoved = props.onPortLabelMoved, onPortLabelResized = props.onPortLabelResized, onPortLabelContentChanged = props.onPortLabelContentChanged, onSelected = props.onSelected, onMouseDown = props.onMouseDown, onMouseUp = props.onMouseUp, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onMouseMove = props.onMouseMove, calculateRotationAngle = props.calculateRotationAngle, renderShape = props.renderShape;
1701
+ var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, container = props.container, label = props.label, onPortLabelMoved = props.onPortLabelMoved, onPortLabelResized = props.onPortLabelResized, onPortLabelContentChanged = props.onPortLabelContentChanged, onSelected = props.onSelected, onMouseDown = props.onMouseDown, onMouseUp = props.onMouseUp, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onMouseMove = props.onMouseMove, calculateRotationAngle = props.calculateRotationAngle, onManuallyTriggerRenderHandler = props.onManuallyTriggerRenderHandler, renderShape = props.renderShape;
1702
+ var _a = React$1.useState(false); _a[0]; var setUpdated = _a[1];
1591
1703
  var textRef = React$1.useRef(null);
1704
+ React$1.useEffect(function () {
1705
+ var off = onManuallyTriggerRenderHandler === null || onManuallyTriggerRenderHandler === void 0 ? void 0 : onManuallyTriggerRenderHandler(function () {
1706
+ setUpdated(function (prev) { return !prev; });
1707
+ });
1708
+ return function () {
1709
+ off === null || off === void 0 ? void 0 : off();
1710
+ };
1711
+ }, []);
1592
1712
  var rotationAngle = React$1.useMemo(function () {
1593
1713
  if (!calculateRotationAngle)
1594
1714
  return 0;
1595
1715
  return calculateRotationAngle(x, y);
1596
1716
  }, [calculateRotationAngle, x, y]);
1717
+ React$1.useEffect(function () {
1718
+ console.info('Testing - rendering Port ' + id);
1719
+ });
1597
1720
  var renderLabel = function (label) {
1598
1721
  var content = label.content, size = label.size;
1599
1722
  var position = label.position || PORT_LABEL_POSITION;
1600
- return React$1.createElement(Text$1, { id: label.id, ref: textRef, x: x + position.x, y: y + position.y, width: size.width, height: size.height, content: content, fontSize: label.fontSize, border: label.border, container: container, onMoved: onPortLabelMoved, onResized: onPortLabelResized, onContentChanged: onPortLabelContentChanged });
1723
+ return React$1.createElement(Text$1, { id: label.id, ref: textRef, x: x + position.x, y: y + position.y, width: size.width, height: size.height, content: content, fontSize: label.fontSize, border: label.border, container: container, onMoved: function (x, y) { return onPortLabelMoved === null || onPortLabelMoved === void 0 ? void 0 : onPortLabelMoved(x, y, id); }, onResized: function (width, height) { return onPortLabelResized === null || onPortLabelResized === void 0 ? void 0 : onPortLabelResized(width, height, id); }, onContentChanged: function (ev, newValue) { return onPortLabelContentChanged === null || onPortLabelContentChanged === void 0 ? void 0 : onPortLabelContentChanged(ev, newValue, id); } });
1601
1724
  };
1602
1725
  var renderedShape = React$1.useMemo(function () {
1603
1726
  if (renderShape) {
@@ -1605,7 +1728,7 @@ var Port1 = React$1.forwardRef(function (props, ref) {
1605
1728
  return (React$1.createElement(RenderShape, __assign({ ref: ref }, props, { rotation: rotationAngle })));
1606
1729
  }
1607
1730
  else {
1608
- return React$1.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: onMouseMove, onClick: function (e) { return onSelected === null || onSelected === void 0 ? void 0 : onSelected(id, e); }, ref: ref, x: x, y: y, positioningAnchor: exports.PositioningAnchor.Center, height: height, width: width, stroke: "black", fill: "black" });
1731
+ return React$1.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); }, ref: ref, x: x, y: y, positioningAnchor: exports.PositioningAnchor.Center, height: height, width: width, stroke: "black", fill: "black" });
1609
1732
  }
1610
1733
  }, [props]);
1611
1734
  return (React$1.createElement(React$1.Fragment, null,
@@ -7798,7 +7921,7 @@ var Ruler = function (_a) {
7798
7921
  };
7799
7922
 
7800
7923
  var ElementWrapper = React$1.forwardRef(function (_a, ref) {
7801
- var x = _a.x, y = _a.y, children = _a.children; _a.portPlaceholders; _a.ports; var onClick = _a.onClick, onContextMenu = _a.onContextMenu, onMouseMove = _a.onMouseMove, onMouseLeave = _a.onMouseLeave, onMouseUp = _a.onMouseUp;
7924
+ var x = _a.x, y = _a.y, cssClass = _a.cssClass, children = _a.children; _a.portPlaceholders; _a.ports; var onClick = _a.onClick, onContextMenu = _a.onContextMenu, onMouseMove = _a.onMouseMove, onMouseLeave = _a.onMouseLeave, onMouseUp = _a.onMouseUp;
7802
7925
  var handleMouseDown = function (ev) {
7803
7926
  ev.stopPropagation();
7804
7927
  };
@@ -7812,7 +7935,7 @@ var ElementWrapper = React$1.forwardRef(function (_a, ref) {
7812
7935
  onContextMenu(ev);
7813
7936
  }
7814
7937
  };
7815
- return (React$1.createElement("svg", { x: x, y: y, onClick: handleClick, onContextMenu: handleClick, onMouseDown: handleMouseDown, ref: ref, style: { overflow: "visible" }, onMouseMove: onMouseMove, onMouseLeave: onMouseLeave, onMouseUp: onMouseUp }, children));
7938
+ return (React$1.createElement("svg", { className: cssClass, x: x, y: y, onClick: handleClick, onContextMenu: handleClick, onMouseDown: handleMouseDown, ref: ref, style: { overflow: "visible" }, onMouseMove: onMouseMove, onMouseLeave: onMouseLeave, onMouseUp: onMouseUp }, children));
7816
7939
  });
7817
7940
 
7818
7941
  // Calculate the position of the 4 vertices of a rectangle relative to its parent svg
@@ -9082,34 +9205,62 @@ var Flexbox$1 = /*@__PURE__*/getDefaultExportFromCjs(bundleExports);
9082
9205
 
9083
9206
  var Element = function (props) {
9084
9207
  var _a, _b, _c;
9085
- var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, portPlaceholderShape = props.portPlaceholderShape, children = props.children, container = props.container, 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; props.onMouseMove; props.onMouseLeave; props.onMouseUp; var onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
9208
+ 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, onManuallyTriggerRenderHandler = props.onManuallyTriggerRenderHandler, 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; props.onMouseMove; props.onMouseLeave; props.onMouseUp; var onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
9086
9209
  var _d = React$1.useState(), selectedPort = _d[0], setSelectedPort = _d[1];
9087
9210
  var _e = React$1.useState(), hoveredPort = _e[0], setHoveredPort = _e[1];
9088
- var _f = React$1.useState((_b = (_a = props.ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
9089
- return __assign(__assign({}, p), { id: p.id, ref: React$1.createRef() });
9090
- })) !== null && _b !== void 0 ? _b : []), ports = _f[0], setPorts = _f[1];
9211
+ var _f = React$1.useState((_a = props.ports) !== null && _a !== void 0 ? _a : []), ports = _f[0], setPorts = _f[1];
9091
9212
  var _g = React$1.useState(false), someElementLinkStarted = _g[0], setSomeElementLinkStarted = _g[1];
9092
9213
  var _h = React$1.useState(), potentialPortPosition = _h[0], setPotentialPortPosition = _h[1];
9214
+ var _j = React$1.useState(false); _j[0]; var setUpdated = _j[1];
9093
9215
  var _paperEventEmitterContext = React$1.useContext(paperEventEmitterContext);
9094
9216
  var elementRef = React$1.useRef(null);
9095
9217
  var elementLinkStarted = React$1.useRef();
9218
+ var portsRef = React$1.useRef(ports);
9219
+ //Listen to manually trigger render event
9220
+ React$1.useEffect(function () {
9221
+ var off = onManuallyTriggerRenderHandler === null || onManuallyTriggerRenderHandler === void 0 ? void 0 : onManuallyTriggerRenderHandler(function () {
9222
+ console.log('Manually trigger render element', id);
9223
+ setUpdated(function (prev) { return !prev; });
9224
+ });
9225
+ return function () {
9226
+ off === null || off === void 0 ? void 0 : off();
9227
+ };
9228
+ }, []);
9229
+ //Update portsRef when ports changed
9230
+ React$1.useEffect(function () {
9231
+ portsRef.current = ports;
9232
+ }, [ports]);
9233
+ React$1.useEffect(function () {
9234
+ var _a;
9235
+ console.info('Rendering Element ' + id + ' with text ' + ((_a = texts === null || texts === void 0 ? void 0 : texts[0]) === null || _a === void 0 ? void 0 : _a.content));
9236
+ });
9096
9237
  //Listen a new port is created, after add new port to ports state
9097
9238
  React$1.useEffect(function () {
9239
+ console.info('Ports changed', props.ports);
9098
9240
  setPorts(function (prev) {
9099
9241
  var _a, _b;
9100
9242
  return (_b = (_a = props.ports) === null || _a === void 0 ? void 0 : _a.map(function (p, index) {
9101
- var _a, _b;
9102
- var position = p.position;
9103
- //Handle the case when the port is created.
9104
- if (!((_a = prev[index]) === null || _a === void 0 ? void 0 : _a.ref)) {
9105
- position = normalizePortPosition(position);
9106
- onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(p, id, p.position, position);
9107
- _paperEventEmitterContext.emitPortMoved(p, id, p.position, position);
9108
- }
9109
- return __assign(__assign({}, p), { position: position, id: p.id, ref: ((_b = prev[index]) === null || _b === void 0 ? void 0 : _b.ref) || React$1.createRef() });
9243
+ var prevPortState = prev.find(function (_p) { return _p.id === p.id; });
9244
+ var newPortState;
9245
+ //If port is existed, keep the ref of the port
9246
+ if (prevPortState) {
9247
+ newPortState = prevPortState;
9248
+ }
9249
+ else {
9250
+ newPortState = p;
9251
+ }
9252
+ //Handle the case new port is created and the ref of the port is not defined
9253
+ if (!newPortState.ref) {
9254
+ var newPosition = normalizePortPosition(newPortState.position);
9255
+ onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(p, id, newPortState.position, newPosition);
9256
+ _paperEventEmitterContext.emitPortMoved(p, id, newPortState.position, newPosition);
9257
+ newPortState.position = newPosition;
9258
+ newPortState.ref = React$1.createRef();
9259
+ }
9260
+ return newPortState;
9110
9261
  })) !== null && _b !== void 0 ? _b : [];
9111
9262
  });
9112
- }, [(_c = props.ports) === null || _c === void 0 ? void 0 : _c.length]);
9263
+ }, [props.ports]);
9113
9264
  //Listen trigger of Delete key, handle delete port is selected
9114
9265
  React$1.useEffect(function () {
9115
9266
  var listener = _paperEventEmitterContext.onCommandDeleteSelectedPort(function () {
@@ -9129,7 +9280,7 @@ var Element = function (props) {
9129
9280
  });
9130
9281
  //listen element resize to update position of the ports by element size.
9131
9282
  var eleResizeListener = _paperEventEmitterContext.onElementResized(id, function () {
9132
- var newPorts = ports.map(function (port) {
9283
+ var newPorts = portsRef.current.map(function (port) {
9133
9284
  var newPosition = normalizePortPosition({ x: port.position.x, y: port.position.y });
9134
9285
  //Check port moved
9135
9286
  if (port.position.x !== newPosition.x || port.position.y !== newPosition.y) {
@@ -9144,7 +9295,7 @@ var Element = function (props) {
9144
9295
  eventListener.off();
9145
9296
  eleResizeListener.off();
9146
9297
  };
9147
- }, [ports, onPortMoved]);
9298
+ }, [onPortMoved]);
9148
9299
  //Listen creating element link started, ended.
9149
9300
  React$1.useEffect(function () {
9150
9301
  var elementStartedListener = _paperEventEmitterContext.onElementLinkStarted(function (tempLink) {
@@ -9191,16 +9342,14 @@ var Element = function (props) {
9191
9342
  portSelectedListener.off();
9192
9343
  };
9193
9344
  }, []);
9194
- var handleSelectedPort = function (port, e) {
9345
+ var handleSelectedPort = React$1.useCallback(function (portId, e) {
9195
9346
  e.stopPropagation();
9347
+ var port = portsRef.current.find(function (p) { return p.id === portId; });
9348
+ if (!port)
9349
+ return;
9196
9350
  setSelectedPort(port);
9197
- if (props.ports) {
9198
- var orgPort = props.ports.find(function (p) { return p.id === port.id; });
9199
- if (orgPort) {
9200
- _paperEventEmitterContext.emitPortSelected(orgPort, id);
9201
- }
9202
- }
9203
- };
9351
+ _paperEventEmitterContext.emitPortSelected(port, id);
9352
+ }, [_paperEventEmitterContext]);
9204
9353
  //From one point find another point on the line segment so that the distance between the two points is the shortest.
9205
9354
  var findNearestPointOnSegment = function (position, linePoints) {
9206
9355
  var beginPosition = linePoints[0], endPosition = linePoints[1];
@@ -9318,67 +9467,72 @@ var Element = function (props) {
9318
9467
  if (newPosition) {
9319
9468
  selectedPort.position = newPosition;
9320
9469
  onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(selectedPort, id, oldPosition, newPosition);
9321
- setPorts(__spreadArray([], ports, true));
9470
+ setPorts(__spreadArray([], portsRef.current, true));
9322
9471
  _paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
9323
9472
  }
9324
9473
  };
9325
9474
  //Handle when mouse down on port
9326
- var handlePortMouseDown = function (portId, e) {
9475
+ var handlePortMouseDown = React$1.useCallback(function (portId, e) {
9327
9476
  e.stopPropagation();
9328
- var port = ports.find(function (p) { return p.id === portId; });
9477
+ var port = portsRef.current.find(function (p) { return p.id === portId; });
9478
+ if (!port)
9479
+ return;
9329
9480
  _paperEventEmitterContext.emitPortMouseDown(e, port, id);
9330
9481
  onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(e, port, id);
9331
- };
9482
+ }, [_paperEventEmitterContext]);
9332
9483
  //Handle when mouse up on port
9333
- var handlePortMouseUp = function (portId, e) {
9484
+ var handlePortMouseUp = React$1.useCallback(function (portId, e) {
9334
9485
  e.stopPropagation();
9335
- var port = ports.find(function (p) { return p.id === portId; });
9486
+ var port = portsRef.current.find(function (p) { return p.id === portId; });
9487
+ if (!port)
9488
+ return;
9336
9489
  _paperEventEmitterContext.emitPortMouseUp(e, port, id);
9337
9490
  onPortMouseUp === null || onPortMouseUp === void 0 ? void 0 : onPortMouseUp(e, port, id);
9338
9491
  //Remove port placeholder if mouse up on port
9339
9492
  if (potentialPortPosition) {
9340
9493
  setPotentialPortPosition(undefined);
9341
9494
  }
9342
- };
9495
+ }, [_paperEventEmitterContext, potentialPortPosition]);
9343
9496
  //Update state when label of port is moved
9344
- var handlePortLabelMoved = function (offsetX, offsetY, port, index) {
9345
- if (!port.label)
9346
- return;
9347
- var labelPos = port.label.position || PORT_LABEL_POSITION;
9497
+ var handlePortLabelMoved = React$1.useCallback(function (offsetX, offsetY, portId) {
9348
9498
  setPorts(function (prevPorts) {
9349
- var newPorts = __spreadArray([], prevPorts, true);
9350
- var newLabelPosition = {
9351
- x: labelPos.x + offsetX,
9352
- y: labelPos.y + offsetY
9353
- };
9354
- newPorts[index].label.position = newLabelPosition;
9355
- return newPorts;
9499
+ return prevPorts.map(function (p) {
9500
+ if (p.id === portId && p.label) {
9501
+ if (!p.label.position) {
9502
+ p.label.position = PORT_LABEL_POSITION;
9503
+ }
9504
+ p.label.position.x += offsetX;
9505
+ p.label.position.y += offsetY;
9506
+ }
9507
+ return p;
9508
+ });
9356
9509
  });
9357
- };
9510
+ }, []);
9358
9511
  //Update state when label of port is resized
9359
- var handlePortLabelResized = function (width, height, port, index) {
9360
- if (!port.label)
9361
- return;
9512
+ var handlePortLabelResized = React$1.useCallback(function (width, height, portId) {
9362
9513
  setPorts(function (prevPorts) {
9363
- var newPorts = __spreadArray([], prevPorts, true);
9364
- var newLabelSize = {
9365
- width: width,
9366
- height: height
9367
- };
9368
- newPorts[index].label.size = newLabelSize;
9369
- return newPorts;
9514
+ return prevPorts.map(function (p) {
9515
+ if (p.id === portId && p.label) {
9516
+ p.label.size = {
9517
+ width: width,
9518
+ height: height
9519
+ };
9520
+ }
9521
+ return p;
9522
+ });
9370
9523
  });
9371
- };
9524
+ }, []);
9372
9525
  //Update state when label of port is changed content
9373
- var handlePortLabelContentChanged = function (newValue, port, index) {
9374
- if (!port.label)
9375
- return;
9526
+ var handlePortLabelContentChanged = React$1.useCallback(function (ev, newValue, portId) {
9376
9527
  setPorts(function (prevPorts) {
9377
- var newPorts = __spreadArray([], prevPorts, true);
9378
- newPorts[index].label.content = newValue;
9379
- return newPorts;
9528
+ return prevPorts.map(function (p) {
9529
+ if (p.id === portId && p.label) {
9530
+ p.label.content = newValue;
9531
+ }
9532
+ return p;
9533
+ });
9380
9534
  });
9381
- };
9535
+ }, []);
9382
9536
  function handleElementMouseMove(ev) {
9383
9537
  //ev.stopPropagation(); //Can't use stopPropagation here, because do not create tempLink
9384
9538
  if (someElementLinkStarted && elementRef.current) {
@@ -9424,10 +9578,24 @@ var Element = function (props) {
9424
9578
  //If an element link is being created, trigger onMouseUpAtLinkedPortPlaceholder when the mouse up the element.
9425
9579
  if (potentialPortPosition && elementLinkStarted.current) {
9426
9580
  var newElementLink = __assign(__assign({}, elementLinkStarted.current), { tempTargetPosition: undefined });
9427
- onMouseUpAtLinkedPortPlaceholder === null || onMouseUpAtLinkedPortPlaceholder === void 0 ? void 0 : onMouseUpAtLinkedPortPlaceholder(newElementLink, potentialPortPosition);
9581
+ onMouseUpAtLinkedPortPlaceholder === null || onMouseUpAtLinkedPortPlaceholder === void 0 ? void 0 : onMouseUpAtLinkedPortPlaceholder(newElementLink, potentialPortPosition, id);
9428
9582
  elementLinkStarted.current = undefined;
9429
9583
  }
9430
9584
  };
9585
+ //Handle when mouse move on port
9586
+ var handlePortMouseMove = React$1.useCallback(function (portId) {
9587
+ if (someElementLinkStarted) {
9588
+ var port = portsRef.current.find(function (p) { return p.id === portId; });
9589
+ if (!port)
9590
+ return;
9591
+ setHoveredPort(port);
9592
+ }
9593
+ }, [someElementLinkStarted]);
9594
+ //Handle when mouse leave on port
9595
+ var handlePortMouseLeave = React$1.useCallback(function () {
9596
+ if (someElementLinkStarted)
9597
+ setHoveredPort(undefined);
9598
+ }, [someElementLinkStarted]);
9431
9599
  //Get rotate angle of port by port direction is defined.
9432
9600
  var rotatePort = React$1.useCallback(function (x, y) {
9433
9601
  // console.info('calculating port rotation', x, y)
@@ -9473,7 +9641,7 @@ var Element = function (props) {
9473
9641
  if (renderShape)
9474
9642
  return renderShape(props);
9475
9643
  return null;
9476
- }, [props]);
9644
+ }, [props, renderShape]);
9477
9645
  //Re-render port again after rendered to automation rotate port
9478
9646
  //Because elementRef.current equals null in first render so automation rotate port is incorrect.
9479
9647
  //TODO: check if this is still needed -> Still needed
@@ -9485,7 +9653,7 @@ var Element = function (props) {
9485
9653
  //use selection frame
9486
9654
  useSelectionFrame({
9487
9655
  container: container,
9488
- targetSVGElement: (selectedPort === null || selectedPort === void 0 ? void 0 : selectedPort.ref.current) || undefined,
9656
+ targetSVGElement: ((_b = selectedPort === null || selectedPort === void 0 ? void 0 : selectedPort.ref) === null || _b === void 0 ? void 0 : _b.current) || undefined,
9489
9657
  resizability: {
9490
9658
  enabled: false,
9491
9659
  keepRatio: false
@@ -9497,40 +9665,34 @@ var Element = function (props) {
9497
9665
  });
9498
9666
  useSelectionFrame({
9499
9667
  container: container,
9500
- targetSVGElement: (hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.ref.current) || undefined,
9668
+ targetSVGElement: ((_c = hoveredPort === null || hoveredPort === void 0 ? void 0 : hoveredPort.ref) === null || _c === void 0 ? void 0 : _c.current) || undefined,
9501
9669
  resizability: {
9502
9670
  enabled: false,
9503
9671
  keepRatio: false
9504
9672
  },
9505
9673
  });
9506
- return (React$1.createElement(ElementWrapper, { ref: elementRef, x: x, y: y, onClick: function (e) { return onClick ? onClick(id, e, elementRef.current) : true; }, onMouseMove: handleElementMouseMove, onMouseLeave: handleElementMouseLeave, onMouseUp: handleElementMouseUp, onContextMenu: function (e) { return onContextMenu ? onContextMenu(id, e, elementRef.current) : true; } },
9674
+ return (React$1.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, onMouseUp: handleElementMouseUp, onContextMenu: function (e) { return onContextMenu ? onContextMenu(id, e, elementRef.current) : true; } },
9507
9675
  renderedShape,
9508
9676
  potentialPortPosition && (portPlaceholderShape
9509
9677
  ? React$1.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
9510
9678
  : React$1.createElement("rect", { x: potentialPortPosition.x - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, y: potentialPortPosition.y - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, width: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, height: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, rx: PORT_PLACEHOLDER_DEFAULT_SIZE, ry: PORT_PLACEHOLDER_DEFAULT_SIZE, stroke: PORT_PLACEHOLDER_DEFAULT_STROKE, fill: "none", strokeWidth: 3 })), ports === null || ports === void 0 ? void 0 :
9511
9679
  ports.map(function (p, index) {
9512
- var _a, _b, _c, _d, _e, _f;
9680
+ var _a, _b, _c, _d, _e, _f, _g;
9513
9681
  return React$1.createElement(Port, { key: p.id, ref: p.ref, id: p.id, x: p.position.x, y: p.position.y, width: (_c = (_b = (_a = p.size) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : defaultPortSize) !== null && _c !== void 0 ? _c : PORT_DEFAULT_SIZE, height: (_f = (_e = (_d = p.size) === null || _d === void 0 ? void 0 : _d.height) !== null && _e !== void 0 ? _e : defaultPortSize) !== null && _f !== void 0 ? _f : PORT_DEFAULT_SIZE, container: container,
9514
9682
  // rotation={rotatePort(p)}
9515
- calculateRotationAngle: rotatePort, label: p.label, onPortLabelMoved: function (x, y) { return handlePortLabelMoved(x, y, p, index); }, onPortLabelResized: function (w, h) { return handlePortLabelResized(w, h, p, index); }, onPortLabelContentChanged: function (ev, newValue) { return handlePortLabelContentChanged(newValue, p, index); }, onSelected: function (portId, event) { return handleSelectedPort(p, event); }, onMouseDown: handlePortMouseDown, onMouseUp: handlePortMouseUp, onMouseMove: function () {
9516
- if (someElementLinkStarted)
9517
- setHoveredPort(p);
9518
- },
9683
+ calculateRotationAngle: rotatePort, label: p.label, onPortLabelMoved: handlePortLabelMoved, onPortLabelResized: handlePortLabelResized, onPortLabelContentChanged: handlePortLabelContentChanged, onSelected: handleSelectedPort, onMouseDown: handlePortMouseDown, onMouseUp: handlePortMouseUp, onMouseMove: handlePortMouseMove,
9519
9684
  // onMouseEnter={() => {
9520
9685
  // if (someElementLinkStarted) setHoveredPort(p)
9521
9686
  // }}
9522
- onMouseLeave: function () {
9523
- console.log('onMouseLeave');
9524
- if (someElementLinkStarted)
9525
- setHoveredPort(undefined);
9526
- }, renderShape: p.renderShape });
9687
+ onMouseLeave: handlePortMouseLeave, onManuallyTriggerRenderHandler: (_g = p.manuallyTriggerRenderHandler) === null || _g === void 0 ? void 0 : _g.bind(p), renderShape: p.renderShape });
9527
9688
  }),
9528
9689
  React$1.createElement(Flexbox$1, { className: textsPlaceHolderClassName, style: textsPlaceHolderFlexStyle, x: textsPlaceHolderFlexboxPosition === null || textsPlaceHolderFlexboxPosition === void 0 ? void 0 : textsPlaceHolderFlexboxPosition.x, y: textsPlaceHolderFlexboxPosition === null || textsPlaceHolderFlexboxPosition === void 0 ? void 0 : textsPlaceHolderFlexboxPosition.y }, texts === null || texts === void 0 ? void 0 : texts.map(function (t, index) {
9529
9690
  var _a, _b;
9530
- return React$1.createElement(Text$1, { id: t.id, key: index, content: t.content, x: (_a = t.position) === null || _a === void 0 ? void 0 : _a.x, y: (_b = t.position) === null || _b === void 0 ? void 0 : _b.y, width: t.size.width, height: t.size.height, align: t.align, fontSize: t.fontSize, border: t.border, container: container, style: t.style, onContentChanged: function (ev, newContent) { return onTextUpdated === null || onTextUpdated === void 0 ? void 0 : onTextUpdated(t.id, newContent); } });
9691
+ return React$1.createElement(Text$1, { id: t.id, key: index, content: t.content, x: (_a = t.position) === null || _a === void 0 ? void 0 : _a.x, y: (_b = t.position) === null || _b === void 0 ? void 0 : _b.y, width: t.size.width, height: t.size.height, align: t.align, fontSize: t.fontSize, border: t.border, container: container, style: t.style, onContentChanged: function (ev, newContent) { return onTextUpdated === null || onTextUpdated === void 0 ? void 0 : onTextUpdated(id, t.id, newContent); } });
9531
9692
  })),
9532
9693
  children));
9533
- };
9694
+ };
9695
+ var Element$1 = React$1.memo(Element);
9534
9696
 
9535
9697
  var createRect = function (x, y, width, height, strokeWidth, transformOrigin, transform) {
9536
9698
  var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
@@ -9766,13 +9928,23 @@ var Paper = function (props) {
9766
9928
  var _d = React$1.useState(), selectedElement = _d[0], setSelectedElement = _d[1];
9767
9929
  var _e = React$1.useState((_a = props.links) !== null && _a !== void 0 ? _a : []), links = _e[0], setLinks = _e[1];
9768
9930
  var _f = React$1.useState(), selectedLink = _f[0], setSelectedLink = _f[1];
9769
- var _g = React$1.useState(), tempLink = _g[0], setTempLink = _g[1];
9931
+ var _g = React$1.useState(null), tempLink = _g[0], setTempLink = _g[1];
9770
9932
  var _h = React$1.useState(props.texts), texts = _h[0], setTexts = _h[1];
9771
9933
  var _j = React$1.useState(), selectedText = _j[0], setSelectedText = _j[1];
9772
9934
  var _k = React$1.useState(null), selectedElementSVG = _k[0], setSelectedElementSVG = _k[1];
9773
9935
  var _l = React$1.useState(false), mouseDownedOnPaper = _l[0], setMouseDownedOnPaper = _l[1];
9774
9936
  var paperEventEmitter = React$1.useContext(paperEventEmitterContext);
9775
9937
  var paperContainerRef = React$1.useRef(null);
9938
+ var tempLinkRef = React$1.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
9939
+ var elementsRef = React$1.useRef(elements); //Cache elements to avoid re-render when elements changed
9940
+ var size = props.size;
9941
+ React$1.useEffect(function () {
9942
+ console.log('Render Paper');
9943
+ });
9944
+ //Cache elements to avoid re-render when elements changed
9945
+ React$1.useEffect(function () {
9946
+ elementsRef.current = elements;
9947
+ }, [elements]);
9776
9948
  useKeyboardCommands({
9777
9949
  element: paperContainerRef.current
9778
9950
  });
@@ -9780,6 +9952,10 @@ var Paper = function (props) {
9780
9952
  var parsedElementsInTree = convertElementsToTree(elements);
9781
9953
  setElementsInTree(parsedElementsInTree);
9782
9954
  };
9955
+ //Cache tempLink to avoid re-render when tempLink changed
9956
+ React$1.useEffect(function () {
9957
+ tempLinkRef.current = tempLink;
9958
+ }, [tempLink]);
9783
9959
  //Listen text is selected
9784
9960
  React$1.useEffect(function () {
9785
9961
  var textSelectedListener = paperEventEmitter.onTextSelected(function (text) {
@@ -9802,7 +9978,7 @@ var Paper = function (props) {
9802
9978
  setSelectedElementSVG(null);
9803
9979
  setSelectedLink(undefined);
9804
9980
  //broadcast selected port to parent component
9805
- var element = elements.find(function (e) { return e.id === elementId; });
9981
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9806
9982
  if (element) {
9807
9983
  (_a = props.onPortSelected) === null || _a === void 0 ? void 0 : _a.call(props, port, element);
9808
9984
  }
@@ -9813,16 +9989,17 @@ var Paper = function (props) {
9813
9989
  }, []);
9814
9990
  React$1.useEffect(function () {
9815
9991
  //Listen parent of elements changed, then update elements tree
9816
- var parentChangedCancelers = elements.map(function (element) {
9992
+ var parentChangedCancelers = elementsRef.current.map(function (element) {
9817
9993
  var _a;
9818
9994
  return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
9819
9995
  updateElementsTree();
9820
9996
  });
9821
9997
  });
9822
9998
  //Listen a new port added, then re-render the element component
9823
- var addedPortCancelers = elements.map(function (element) {
9999
+ var addedPortCancelers = elementsRef.current.map(function (element) {
9824
10000
  var _a;
9825
10001
  return (_a = element.onAddedPort) === null || _a === void 0 ? void 0 : _a.call(element, function (newPort) {
10002
+ console.log("A new port has been added to element ".concat(element.id));
9826
10003
  //Set state to re-render component
9827
10004
  setElements(function (prev) { return prev.map(function (ele) {
9828
10005
  if (ele.id === element.id) {
@@ -9836,11 +10013,11 @@ var Paper = function (props) {
9836
10013
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9837
10014
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9838
10015
  };
9839
- }, elements);
10016
+ }, []);
9840
10017
  //Update elements tree when length of elements change
9841
10018
  React$1.useEffect(function () {
9842
10019
  updateElementsTree();
9843
- }, [elements.length]);
10020
+ }, [elements]);
9844
10021
  //Get all child elements of the deleted element
9845
10022
  var getDeletedChildElements = function (deletedElement) {
9846
10023
  if (!deletedElement.childrenElements)
@@ -9906,9 +10083,9 @@ var Paper = function (props) {
9906
10083
  listener.off();
9907
10084
  };
9908
10085
  }, [selectedText]);
9909
- var size = props.size;
9910
10086
  //Automatically add points on the link so that the link does not cross elements, default maximum 10 points
9911
- var automationAddPointsToLink = function (eleLink, limitPoint) {
10087
+ var automationAddPointsToLink = React$1.useCallback(function (eleLink, limitPoint) {
10088
+ if (limitPoint === void 0) { limitPoint = 10; }
9912
10089
  var sourceElement = eleLink.sourceElement, sourcePort = eleLink.sourcePort, targetElement = eleLink.targetElement, targetPort = eleLink.targetPort;
9913
10090
  var sourcePosition = {
9914
10091
  x: sourceElement.position.x + sourcePort.position.x,
@@ -9936,10 +10113,12 @@ var Paper = function (props) {
9936
10113
  var appendedPoints = generatePositions(replacementPosition, targetPosition, elements);
9937
10114
  return __spreadArray(__spreadArray(__spreadArray([], prependedPoints, true), [replacementPosition], false), appendedPoints, true);
9938
10115
  }
10116
+ var elements = elementsRef.current;
9939
10117
  var points = generatePositions(sourcePosition, targetPosition, elements);
9940
10118
  return __assign(__assign({}, eleLink), { points: points });
9941
- };
10119
+ }, []);
9942
10120
  var handlePaperMouseMove = function (ev) {
10121
+ var _a;
9943
10122
  //if there is a temp link, update the temp target point
9944
10123
  if (tempLink) {
9945
10124
  var currentTarget = ev.currentTarget;
@@ -9958,24 +10137,35 @@ var Paper = function (props) {
9958
10137
  };
9959
10138
  setTempLink(function (prev) { return (__assign(__assign({}, prev), { tempTargetPosition: tempTargetPosition_1 })); });
9960
10139
  }
10140
+ //broadcast mouse moved position to parent component
10141
+ (_a = props.onPaperMouseMoved) === null || _a === void 0 ? void 0 : _a.call(props, {
10142
+ x: ev.clientX,
10143
+ y: ev.clientY
10144
+ });
9961
10145
  };
9962
10146
  var handleMouseDownOnPaper = function (ev) {
9963
- var _a;
10147
+ var _a, _b;
9964
10148
  setMouseDownedOnPaper(true);
9965
10149
  (_a = props.onPaperClicked) === null || _a === void 0 ? void 0 : _a.call(props, {
9966
10150
  x: ev.clientX,
9967
10151
  y: ev.clientY
9968
10152
  });
9969
10153
  paperEventEmitter.emitPaperClicked(ev);
10154
+ //broadcast mouse moved position to parent component
10155
+ (_b = props.onPaperMouseDown) === null || _b === void 0 ? void 0 : _b.call(props, {
10156
+ x: ev.clientX,
10157
+ y: ev.clientY
10158
+ });
9970
10159
  };
9971
10160
  var handleMouseUpOnPaper = function (ev) {
10161
+ var _a;
9972
10162
  if (mouseDownedOnPaper) {
9973
10163
  setSelectedElement(undefined);
9974
10164
  setSelectedElementSVG(null);
9975
10165
  }
9976
10166
  //clear temp link if exists
9977
10167
  if (tempLink) {
9978
- setTempLink(undefined);
10168
+ setTempLink(null);
9979
10169
  paperEventEmitter.emitElementLinkEnded();
9980
10170
  }
9981
10171
  //Clear selected text
@@ -9983,6 +10173,11 @@ var Paper = function (props) {
9983
10173
  setSelectedText(undefined);
9984
10174
  }
9985
10175
  setMouseDownedOnPaper(false);
10176
+ //broadcast mouse moved position to parent component
10177
+ (_a = props.onPaperMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, {
10178
+ x: ev.clientX,
10179
+ y: ev.clientY
10180
+ });
9986
10181
  };
9987
10182
  var handlePathChange = React$1.useCallback(function (path, id) {
9988
10183
  //Update path of element link, that changed
@@ -9992,42 +10187,44 @@ var Paper = function (props) {
9992
10187
  return __spreadArray([], prevLinks, true);
9993
10188
  });
9994
10189
  }, []);
9995
- var handlePortMoved = function (port, elementId, oldPosition, newPosition) {
9996
- var element = elements.find(function (e) { return e.id === elementId; });
9997
- if (props.onPortMoved) {
9998
- props.onPortMoved(newPosition, port, element);
9999
- }
10000
- //set links equals a clone links to re-render links with new position
10001
- setLinks(function (prev) { return prev.map(function (link) {
10002
- var _a, _b;
10003
- if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
10004
- link.sourcePort.position = newPosition;
10005
- }
10006
- if (((_a = link.targetElement) === null || _a === void 0 ? void 0 : _a.id) === elementId && ((_b = link.targetPort) === null || _b === void 0 ? void 0 : _b.id) === port.id) {
10007
- link.targetPort.position = newPosition;
10008
- }
10009
- return link;
10010
- }); });
10011
- //Update port position in element, not re-render
10012
- setElements(function (prevElements) {
10013
- var _a;
10014
- var updatedElementIndex = prevElements.findIndex(function (e) { return e.id === elementId; });
10015
- prevElements[updatedElementIndex].ports = (_a = prevElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
10016
- if (p.id === port.id) {
10017
- p.position = newPosition;
10190
+ var handlePortMoved = React$1.useCallback(function (port, elementId, oldPosition, newPosition) {
10191
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10192
+ if (element) {
10193
+ //set links equals a clone links to re-render links with new position
10194
+ setLinks(function (prev) { return prev.map(function (link) {
10195
+ var _a, _b;
10196
+ if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
10197
+ link.sourcePort.position = newPosition;
10018
10198
  }
10019
- return p;
10199
+ if (((_a = link.targetElement) === null || _a === void 0 ? void 0 : _a.id) === elementId && ((_b = link.targetPort) === null || _b === void 0 ? void 0 : _b.id) === port.id) {
10200
+ link.targetPort.position = newPosition;
10201
+ }
10202
+ return link;
10203
+ }); });
10204
+ //Update port position in element, not re-render
10205
+ setElements(function (prevElements) {
10206
+ var _a;
10207
+ var updatedElementIndex = prevElements.findIndex(function (e) { return e.id === elementId; });
10208
+ prevElements[updatedElementIndex].ports = (_a = prevElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
10209
+ if (p.id === port.id) {
10210
+ p.position = newPosition;
10211
+ }
10212
+ return p;
10213
+ });
10214
+ return prevElements;
10020
10215
  });
10021
- return prevElements;
10022
- });
10023
- };
10216
+ if (props.onPortMoved) {
10217
+ props.onPortMoved(newPosition, port, element);
10218
+ }
10219
+ }
10220
+ }, [props.onPortMoved]);
10024
10221
  //Handle creating a new element link
10025
- var handlePortMouseDown = function (ev, port, elementId) {
10222
+ var handlePortMouseDown = React$1.useCallback(function (ev, port, elementId) {
10026
10223
  ev.stopPropagation();
10027
10224
  //Return if creating a new element link
10028
- if (tempLink)
10225
+ if (tempLinkRef.current)
10029
10226
  return;
10030
- var sourceElement = elements.find(function (e) { return e.id === elementId; });
10227
+ var sourceElement = elementsRef.current.find(function (e) { return e.id === elementId; });
10031
10228
  //handle create temp element link;
10032
10229
  var newLink = {
10033
10230
  id: generateUniqueId(),
@@ -10037,8 +10234,8 @@ var Paper = function (props) {
10037
10234
  };
10038
10235
  setTempLink(newLink);
10039
10236
  paperEventEmitter.emitElementLinkStarted(newLink);
10040
- };
10041
- var createElementLink = function (sourcePort, sourceElement, targetPort, targetElement) {
10237
+ }, [paperEventEmitter]);
10238
+ var createElementLink = React$1.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
10042
10239
  //if no onCreatingLink prop, no link will be created
10043
10240
  if (!props.onCreatingLink) {
10044
10241
  return null;
@@ -10051,17 +10248,17 @@ var Paper = function (props) {
10051
10248
  newElementLink = automationAddPointsToLink(newElementLink, MAX_LINK_KNOT_COUNT);
10052
10249
  }
10053
10250
  return newElementLink;
10054
- };
10055
- var handlePortMouseUp = function (ev, port, elementId) {
10251
+ }, [props.onCreatingLink, automationAddPointsToLink]);
10252
+ var handlePortMouseUp = React$1.useCallback(function (ev, port, elementId) {
10056
10253
  ev.stopPropagation();
10057
10254
  //Create new element link, if has tempLink
10058
- if (tempLink) {
10255
+ if (tempLinkRef.current) {
10059
10256
  //Check if mouse up point is mouse down point or not
10060
- var isMouseUpOnNotSelf = tempLink.sourcePort.id !== port.id || tempLink.sourceElement.id !== elementId;
10257
+ var isMouseUpOnNotSelf = tempLinkRef.current.sourcePort.id !== port.id || tempLinkRef.current.sourceElement.id !== elementId;
10061
10258
  var newElementLink_1 = null;
10062
10259
  if (isMouseUpOnNotSelf) {
10063
- var sourcePort = tempLink.sourcePort, sourceElement = tempLink.sourceElement;
10064
- var targetElement = elements.find(function (e) { return e.id === elementId; });
10260
+ var _a = tempLinkRef.current, sourcePort = _a.sourcePort, sourceElement = _a.sourceElement;
10261
+ var targetElement = elementsRef.current.find(function (e) { return e.id === elementId; });
10065
10262
  newElementLink_1 = createElementLink(sourcePort, sourceElement, port, targetElement);
10066
10263
  }
10067
10264
  if (newElementLink_1) {
@@ -10071,9 +10268,9 @@ var Paper = function (props) {
10071
10268
  else {
10072
10269
  paperEventEmitter.emitElementLinkEnded();
10073
10270
  }
10074
- setTempLink(undefined);
10271
+ setTempLink(null);
10075
10272
  }
10076
- };
10273
+ }, [paperEventEmitter, createElementLink]);
10077
10274
  var handleLinkLabelMoved = React$1.useCallback(function (offsetX, offsetY, index, labelType) {
10078
10275
  setLinks(function (prevLinks) {
10079
10276
  var newLinks = __spreadArray([], prevLinks, true);
@@ -10259,8 +10456,11 @@ var Paper = function (props) {
10259
10456
  });
10260
10457
  };
10261
10458
  }, []);
10262
- var handleMouseUpAtLinkedPortPlaceholder = function (link, position, targetElement) {
10263
- console.log("A port could have been created at position ".concat(JSON.stringify(position), " on element ").concat(targetElement.id));
10459
+ var handleMouseUpAtLinkedPortPlaceholder = React$1.useCallback(function (link, position, targetElementId) {
10460
+ var targetElement = elementsRef.current.find(function (e) { return e.id === targetElementId; });
10461
+ if (!targetElement)
10462
+ return;
10463
+ console.log("A port could have been created at position ".concat(JSON.stringify(position), " on element ").concat(targetElementId, " by linking from element ").concat(link.sourceElement.id));
10264
10464
  if (props.onCreatingPortByLinking) {
10265
10465
  var sourcePort = link.sourcePort, sourceElement = link.sourceElement;
10266
10466
  //Handle create port via onCreatingPortByLinking prop
@@ -10274,20 +10474,20 @@ var Paper = function (props) {
10274
10474
  if (newElementLink_2) {
10275
10475
  setLinks(function (prev) { return __spreadArray(__spreadArray([], prev, true), [newElementLink_2], false); });
10276
10476
  paperEventEmitter.emitElementLinkEnded(newElementLink_2);
10277
- setTempLink(undefined);
10477
+ setTempLink(null);
10278
10478
  return;
10279
10479
  }
10280
10480
  }
10281
10481
  }
10282
10482
  //Clear tempLink
10283
- setTempLink(undefined);
10483
+ setTempLink(null);
10284
10484
  paperEventEmitter.emitElementLinkEnded();
10285
- };
10286
- var handleElementTextChange = function (element, textId, newContent) {
10485
+ }, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter]);
10486
+ var handleElementTextChange = React$1.useCallback(function (elementId, textId, newContent) {
10287
10487
  setElements(function (prevElms) {
10288
10488
  return prevElms.map(function (curEle) {
10289
10489
  //Find changed text of element to update the content for it.
10290
- if (curEle.id === element.id && curEle.texts) {
10490
+ if (curEle.id === elementId && curEle.texts) {
10291
10491
  var updatedTextId = curEle.texts.findIndex(function (t) { return t.id === textId; });
10292
10492
  if (updatedTextId !== undefined) {
10293
10493
  curEle.texts[updatedTextId].content = newContent;
@@ -10296,41 +10496,53 @@ var Paper = function (props) {
10296
10496
  return curEle;
10297
10497
  });
10298
10498
  });
10299
- };
10300
- var handleElementClicked = function (id, e, ref, element) {
10499
+ }, []);
10500
+ var handleElementClicked = React$1.useCallback(function (elementId, e, ref) {
10301
10501
  e.stopPropagation();
10502
+ var tempLink = tempLinkRef.current;
10302
10503
  if (tempLink) {
10303
10504
  //Clear tempLink
10304
- setTempLink(undefined);
10505
+ setTempLink(null);
10305
10506
  paperEventEmitter.emitElementLinkEnded();
10306
10507
  }
10307
10508
  else {
10509
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10308
10510
  setSelectedElementSVG(ref);
10309
- setSelectedElement(element);
10310
- paperEventEmitter.emitElementSelected(element);
10511
+ if (element) {
10512
+ setSelectedElement(element);
10513
+ paperEventEmitter.emitElementSelected(element);
10514
+ }
10311
10515
  }
10312
10516
  setMouseDownedOnPaper(false);
10313
- };
10314
- var renderElementInTree = function (element) {
10315
- var _a, _b;
10517
+ }, [paperEventEmitter]);
10518
+ var handleContextMenu = React$1.useCallback(function (elementId, e, ref) {
10519
+ var _a;
10520
+ e.preventDefault();
10521
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10522
+ if (element) {
10523
+ handleElementClicked(elementId, e, ref);
10524
+ (_a = props.onElementContextMenu) === null || _a === void 0 ? void 0 : _a.call(props, element, e);
10525
+ }
10526
+ }, [props.onElementContextMenu, handleElementClicked]);
10527
+ var renderElementInTree = React$1.useCallback(function (element) {
10528
+ var _a, _b, _c;
10316
10529
  //use the defined react element or the default Element component
10317
- var ReactElement = element.reactElement || Element;
10318
- return (React$1.createElement("g", { key: element.id }, React$1.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, height: element.size.height, width: element.size.width, x: (_a = element.relativePosition) === null || _a === void 0 ? void 0 : _a.x, y: (_b = element.relativePosition) === null || _b === void 0 ? void 0 : _b.y, onClick: function (id, e, ref) {
10319
- handleElementClicked(id, e, ref, element);
10320
- }, onContextMenu: function (id, e, ref) {
10321
- var _a;
10322
- handleElementClicked(id, e, ref, element);
10323
- (_a = props.onElementContextMenu) === null || _a === void 0 ? void 0 : _a.call(props, element, e);
10324
- }, 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,
10325
- // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10326
- onMouseUpAtLinkedPortPlaceholder: function (elementLink, position) { return handleMouseUpAtLinkedPortPlaceholder(elementLink, position, element); }, onTextUpdated: function (textId, newContent) { return handleElementTextChange(element, textId, newContent); }, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition }, element.childrenElements && element.childrenElements.map(renderElementInTree))));
10327
- };
10530
+ var ReactElement = element.reactElement || Element$1;
10531
+ console.log("Render element ".concat(element.id));
10532
+ return (React$1.createElement("g", { key: element.id },
10533
+ React$1.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, height: element.size.height, width: element.size.width, x: (_a = element.relativePosition) === null || _a === void 0 ? void 0 : _a.x, y: (_b = element.relativePosition) === null || _b === void 0 ? void 0 : _b.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, 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,
10534
+ // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10535
+ onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderHandler: (_c = element.manuallyTriggerRenderHandler) === null || _c === void 0 ? void 0 : _c.bind(element), textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition }, element.childrenElements && element.childrenElements.map(renderElementInTree))));
10536
+ }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange]);
10537
+ var ElementsInTree = React$1.useMemo(function () {
10538
+ return elementsInTree.map(function (element, index) {
10539
+ return renderElementInTree(element);
10540
+ });
10541
+ }, [elementsInTree, renderElementInTree]);
10328
10542
  return (React$1.createElement("div", { style: { position: "relative" } },
10329
10543
  React$1.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
10330
10544
  React$1.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
10331
- paperContainerRef.current ? elementsInTree.map(function (element, index) {
10332
- return renderElementInTree(element);
10333
- }) : "",
10545
+ paperContainerRef.current ? ElementsInTree : "",
10334
10546
  links && links.map(function (link, index) {
10335
10547
  var _a, _b, _c, _d;
10336
10548
  return (React$1.createElement(ElementLink, { key: link.id, id: link.id, path: link.path, sourcePosition: {
@@ -10350,10 +10562,17 @@ var Paper = function (props) {
10350
10562
  } })); })),
10351
10563
  React$1.createElement(BBoxDebugger, { elementSVG: selectedElementSVG }),
10352
10564
  React$1.createElement(LinkDebugger, { links: links, svgContainer: paperContainerRef.current })));
10353
- };
10565
+ };
10566
+ var Paper$1 = React$1.memo(Paper);
10354
10567
 
10355
10568
  function Editor(_a) {
10356
- var editorContext = _a.editorContext;
10569
+ var editorContext = _a.editorContext, width = _a.width, height = _a.height;
10570
+ if (!width) {
10571
+ width = 3000;
10572
+ }
10573
+ if (!height) {
10574
+ height = 3000;
10575
+ }
10357
10576
  var handlePaperClicked = React$1.useCallback(function (position) {
10358
10577
  editorContext.onPaperClickedHandler(position);
10359
10578
  }, [editorContext]);
@@ -10381,15 +10600,37 @@ function Editor(_a) {
10381
10600
  var handleTextSelected = React$1.useCallback(function (text) {
10382
10601
  editorContext.onTextSelectedHandler(text);
10383
10602
  }, [editorContext]);
10384
- return (React$1.createElement(React$1.Fragment, null,
10385
- React$1.createElement(Paper, { size: { width: 3000, height: 3000 }, elements: editorContext.elements, links: editorContext.links, texts: editorContext.texts, onPaperClicked: handlePaperClicked, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onCreatingLink: editorContext.onCreatingLinkHandler, onCreatingPortByLinking: editorContext.onCreatingPortByLinkingHandler, onLinkSelected: handleLinkSelected, onTextSelected: handleTextSelected })));
10603
+ var handleOnCreatingLink = React$1.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
10604
+ if (editorContext.onCreatingLinkHandler) {
10605
+ return editorContext.onCreatingLinkHandler(sourcePort, sourceElement, targetPort, targetElement);
10606
+ }
10607
+ return null;
10608
+ }, [editorContext]);
10609
+ var handleOnCreatingPortByLinking = React$1.useCallback(function (sourceElement, sourcePort, targetElement, position) {
10610
+ if (editorContext.onCreatingPortByLinkingHandler) {
10611
+ return editorContext.onCreatingPortByLinkingHandler(sourceElement, sourcePort, targetElement, position);
10612
+ }
10613
+ return null;
10614
+ }, [editorContext]);
10615
+ var handlePaperMouseMoved = React$1.useCallback(function (position) {
10616
+ editorContext.onPaperMouseMovedHandler(position);
10617
+ }, [editorContext]);
10618
+ var handlePaperMouseDown = React$1.useCallback(function (position) {
10619
+ editorContext.onPaperMouseDownHandler(position);
10620
+ }, [editorContext]);
10621
+ var handlePaperMouseUp = React$1.useCallback(function (position) {
10622
+ editorContext.onPaperMouseUpHandler(position);
10623
+ }, [editorContext]);
10624
+ if (editorContext)
10625
+ return (React$1.createElement(Paper$1, { size: { width: width, height: height }, elements: editorContext.elements, links: editorContext.links, texts: editorContext.texts, onPaperClicked: handlePaperClicked, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onTextSelected: handleTextSelected, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseDown, onPaperMouseDown: handlePaperMouseUp }));
10626
+ return null;
10386
10627
  }
10387
10628
 
10388
10629
  exports.CircleRC = Circle;
10389
10630
  exports.CrescentRC = Crescent;
10390
10631
  exports.CustomShapeRC = CustomShape;
10391
10632
  exports.EditorContext = EditorContext;
10392
- exports.Element = Element$1;
10633
+ exports.Element = Element$2;
10393
10634
  exports.ElementLink = ElementLink$1;
10394
10635
  exports.ElementLinkRC = ElementLink;
10395
10636
  exports.Port = Port$1;