orcasvn-react-diagrams 0.1.22 → 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 +410 -164
  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 +412 -166
  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,11 +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
9351
  _paperEventEmitterContext.emitPortSelected(port, id);
9198
- };
9352
+ }, [_paperEventEmitterContext]);
9199
9353
  //From one point find another point on the line segment so that the distance between the two points is the shortest.
9200
9354
  var findNearestPointOnSegment = function (position, linePoints) {
9201
9355
  var beginPosition = linePoints[0], endPosition = linePoints[1];
@@ -9313,67 +9467,72 @@ var Element = function (props) {
9313
9467
  if (newPosition) {
9314
9468
  selectedPort.position = newPosition;
9315
9469
  onPortMoved === null || onPortMoved === void 0 ? void 0 : onPortMoved(selectedPort, id, oldPosition, newPosition);
9316
- setPorts(__spreadArray([], ports, true));
9470
+ setPorts(__spreadArray([], portsRef.current, true));
9317
9471
  _paperEventEmitterContext.emitPortMoved(selectedPort, id, oldPosition, newPosition);
9318
9472
  }
9319
9473
  };
9320
9474
  //Handle when mouse down on port
9321
- var handlePortMouseDown = function (portId, e) {
9475
+ var handlePortMouseDown = React$1.useCallback(function (portId, e) {
9322
9476
  e.stopPropagation();
9323
- 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;
9324
9480
  _paperEventEmitterContext.emitPortMouseDown(e, port, id);
9325
9481
  onPortMouseDown === null || onPortMouseDown === void 0 ? void 0 : onPortMouseDown(e, port, id);
9326
- };
9482
+ }, [_paperEventEmitterContext]);
9327
9483
  //Handle when mouse up on port
9328
- var handlePortMouseUp = function (portId, e) {
9484
+ var handlePortMouseUp = React$1.useCallback(function (portId, e) {
9329
9485
  e.stopPropagation();
9330
- 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;
9331
9489
  _paperEventEmitterContext.emitPortMouseUp(e, port, id);
9332
9490
  onPortMouseUp === null || onPortMouseUp === void 0 ? void 0 : onPortMouseUp(e, port, id);
9333
9491
  //Remove port placeholder if mouse up on port
9334
9492
  if (potentialPortPosition) {
9335
9493
  setPotentialPortPosition(undefined);
9336
9494
  }
9337
- };
9495
+ }, [_paperEventEmitterContext, potentialPortPosition]);
9338
9496
  //Update state when label of port is moved
9339
- var handlePortLabelMoved = function (offsetX, offsetY, port, index) {
9340
- if (!port.label)
9341
- return;
9342
- var labelPos = port.label.position || PORT_LABEL_POSITION;
9497
+ var handlePortLabelMoved = React$1.useCallback(function (offsetX, offsetY, portId) {
9343
9498
  setPorts(function (prevPorts) {
9344
- var newPorts = __spreadArray([], prevPorts, true);
9345
- var newLabelPosition = {
9346
- x: labelPos.x + offsetX,
9347
- y: labelPos.y + offsetY
9348
- };
9349
- newPorts[index].label.position = newLabelPosition;
9350
- 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
+ });
9351
9509
  });
9352
- };
9510
+ }, []);
9353
9511
  //Update state when label of port is resized
9354
- var handlePortLabelResized = function (width, height, port, index) {
9355
- if (!port.label)
9356
- return;
9512
+ var handlePortLabelResized = React$1.useCallback(function (width, height, portId) {
9357
9513
  setPorts(function (prevPorts) {
9358
- var newPorts = __spreadArray([], prevPorts, true);
9359
- var newLabelSize = {
9360
- width: width,
9361
- height: height
9362
- };
9363
- newPorts[index].label.size = newLabelSize;
9364
- 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
+ });
9365
9523
  });
9366
- };
9524
+ }, []);
9367
9525
  //Update state when label of port is changed content
9368
- var handlePortLabelContentChanged = function (newValue, port, index) {
9369
- if (!port.label)
9370
- return;
9526
+ var handlePortLabelContentChanged = React$1.useCallback(function (ev, newValue, portId) {
9371
9527
  setPorts(function (prevPorts) {
9372
- var newPorts = __spreadArray([], prevPorts, true);
9373
- newPorts[index].label.content = newValue;
9374
- 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
+ });
9375
9534
  });
9376
- };
9535
+ }, []);
9377
9536
  function handleElementMouseMove(ev) {
9378
9537
  //ev.stopPropagation(); //Can't use stopPropagation here, because do not create tempLink
9379
9538
  if (someElementLinkStarted && elementRef.current) {
@@ -9419,10 +9578,24 @@ var Element = function (props) {
9419
9578
  //If an element link is being created, trigger onMouseUpAtLinkedPortPlaceholder when the mouse up the element.
9420
9579
  if (potentialPortPosition && elementLinkStarted.current) {
9421
9580
  var newElementLink = __assign(__assign({}, elementLinkStarted.current), { tempTargetPosition: undefined });
9422
- onMouseUpAtLinkedPortPlaceholder === null || onMouseUpAtLinkedPortPlaceholder === void 0 ? void 0 : onMouseUpAtLinkedPortPlaceholder(newElementLink, potentialPortPosition);
9581
+ onMouseUpAtLinkedPortPlaceholder === null || onMouseUpAtLinkedPortPlaceholder === void 0 ? void 0 : onMouseUpAtLinkedPortPlaceholder(newElementLink, potentialPortPosition, id);
9423
9582
  elementLinkStarted.current = undefined;
9424
9583
  }
9425
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]);
9426
9599
  //Get rotate angle of port by port direction is defined.
9427
9600
  var rotatePort = React$1.useCallback(function (x, y) {
9428
9601
  // console.info('calculating port rotation', x, y)
@@ -9468,7 +9641,7 @@ var Element = function (props) {
9468
9641
  if (renderShape)
9469
9642
  return renderShape(props);
9470
9643
  return null;
9471
- }, [props]);
9644
+ }, [props, renderShape]);
9472
9645
  //Re-render port again after rendered to automation rotate port
9473
9646
  //Because elementRef.current equals null in first render so automation rotate port is incorrect.
9474
9647
  //TODO: check if this is still needed -> Still needed
@@ -9480,7 +9653,7 @@ var Element = function (props) {
9480
9653
  //use selection frame
9481
9654
  useSelectionFrame({
9482
9655
  container: container,
9483
- 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,
9484
9657
  resizability: {
9485
9658
  enabled: false,
9486
9659
  keepRatio: false
@@ -9492,40 +9665,34 @@ var Element = function (props) {
9492
9665
  });
9493
9666
  useSelectionFrame({
9494
9667
  container: container,
9495
- 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,
9496
9669
  resizability: {
9497
9670
  enabled: false,
9498
9671
  keepRatio: false
9499
9672
  },
9500
9673
  });
9501
- 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; } },
9502
9675
  renderedShape,
9503
9676
  potentialPortPosition && (portPlaceholderShape
9504
9677
  ? React$1.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
9505
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 :
9506
9679
  ports.map(function (p, index) {
9507
- var _a, _b, _c, _d, _e, _f;
9680
+ var _a, _b, _c, _d, _e, _f, _g;
9508
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,
9509
9682
  // rotation={rotatePort(p)}
9510
- 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 () {
9511
- if (someElementLinkStarted)
9512
- setHoveredPort(p);
9513
- },
9683
+ calculateRotationAngle: rotatePort, label: p.label, onPortLabelMoved: handlePortLabelMoved, onPortLabelResized: handlePortLabelResized, onPortLabelContentChanged: handlePortLabelContentChanged, onSelected: handleSelectedPort, onMouseDown: handlePortMouseDown, onMouseUp: handlePortMouseUp, onMouseMove: handlePortMouseMove,
9514
9684
  // onMouseEnter={() => {
9515
9685
  // if (someElementLinkStarted) setHoveredPort(p)
9516
9686
  // }}
9517
- onMouseLeave: function () {
9518
- console.log('onMouseLeave');
9519
- if (someElementLinkStarted)
9520
- setHoveredPort(undefined);
9521
- }, renderShape: p.renderShape });
9687
+ onMouseLeave: handlePortMouseLeave, onManuallyTriggerRenderHandler: (_g = p.manuallyTriggerRenderHandler) === null || _g === void 0 ? void 0 : _g.bind(p), renderShape: p.renderShape });
9522
9688
  }),
9523
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) {
9524
9690
  var _a, _b;
9525
- 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); } });
9526
9692
  })),
9527
9693
  children));
9528
- };
9694
+ };
9695
+ var Element$1 = React$1.memo(Element);
9529
9696
 
9530
9697
  var createRect = function (x, y, width, height, strokeWidth, transformOrigin, transform) {
9531
9698
  var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
@@ -9761,13 +9928,23 @@ var Paper = function (props) {
9761
9928
  var _d = React$1.useState(), selectedElement = _d[0], setSelectedElement = _d[1];
9762
9929
  var _e = React$1.useState((_a = props.links) !== null && _a !== void 0 ? _a : []), links = _e[0], setLinks = _e[1];
9763
9930
  var _f = React$1.useState(), selectedLink = _f[0], setSelectedLink = _f[1];
9764
- var _g = React$1.useState(), tempLink = _g[0], setTempLink = _g[1];
9931
+ var _g = React$1.useState(null), tempLink = _g[0], setTempLink = _g[1];
9765
9932
  var _h = React$1.useState(props.texts), texts = _h[0], setTexts = _h[1];
9766
9933
  var _j = React$1.useState(), selectedText = _j[0], setSelectedText = _j[1];
9767
9934
  var _k = React$1.useState(null), selectedElementSVG = _k[0], setSelectedElementSVG = _k[1];
9768
9935
  var _l = React$1.useState(false), mouseDownedOnPaper = _l[0], setMouseDownedOnPaper = _l[1];
9769
9936
  var paperEventEmitter = React$1.useContext(paperEventEmitterContext);
9770
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]);
9771
9948
  useKeyboardCommands({
9772
9949
  element: paperContainerRef.current
9773
9950
  });
@@ -9775,6 +9952,10 @@ var Paper = function (props) {
9775
9952
  var parsedElementsInTree = convertElementsToTree(elements);
9776
9953
  setElementsInTree(parsedElementsInTree);
9777
9954
  };
9955
+ //Cache tempLink to avoid re-render when tempLink changed
9956
+ React$1.useEffect(function () {
9957
+ tempLinkRef.current = tempLink;
9958
+ }, [tempLink]);
9778
9959
  //Listen text is selected
9779
9960
  React$1.useEffect(function () {
9780
9961
  var textSelectedListener = paperEventEmitter.onTextSelected(function (text) {
@@ -9797,7 +9978,7 @@ var Paper = function (props) {
9797
9978
  setSelectedElementSVG(null);
9798
9979
  setSelectedLink(undefined);
9799
9980
  //broadcast selected port to parent component
9800
- var element = elements.find(function (e) { return e.id === elementId; });
9981
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9801
9982
  if (element) {
9802
9983
  (_a = props.onPortSelected) === null || _a === void 0 ? void 0 : _a.call(props, port, element);
9803
9984
  }
@@ -9808,16 +9989,17 @@ var Paper = function (props) {
9808
9989
  }, []);
9809
9990
  React$1.useEffect(function () {
9810
9991
  //Listen parent of elements changed, then update elements tree
9811
- var parentChangedCancelers = elements.map(function (element) {
9992
+ var parentChangedCancelers = elementsRef.current.map(function (element) {
9812
9993
  var _a;
9813
9994
  return (_a = element.onParentChanged) === null || _a === void 0 ? void 0 : _a.call(element, function (newPa, oldPa) {
9814
9995
  updateElementsTree();
9815
9996
  });
9816
9997
  });
9817
9998
  //Listen a new port added, then re-render the element component
9818
- var addedPortCancelers = elements.map(function (element) {
9999
+ var addedPortCancelers = elementsRef.current.map(function (element) {
9819
10000
  var _a;
9820
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));
9821
10003
  //Set state to re-render component
9822
10004
  setElements(function (prev) { return prev.map(function (ele) {
9823
10005
  if (ele.id === element.id) {
@@ -9831,11 +10013,11 @@ var Paper = function (props) {
9831
10013
  parentChangedCancelers.forEach(function (canceller) { return canceller === null || canceller === void 0 ? void 0 : canceller(); });
9832
10014
  addedPortCancelers.forEach(function (canceller) { return canceller(); });
9833
10015
  };
9834
- }, elements);
10016
+ }, []);
9835
10017
  //Update elements tree when length of elements change
9836
10018
  React$1.useEffect(function () {
9837
10019
  updateElementsTree();
9838
- }, [elements.length]);
10020
+ }, [elements]);
9839
10021
  //Get all child elements of the deleted element
9840
10022
  var getDeletedChildElements = function (deletedElement) {
9841
10023
  if (!deletedElement.childrenElements)
@@ -9901,9 +10083,9 @@ var Paper = function (props) {
9901
10083
  listener.off();
9902
10084
  };
9903
10085
  }, [selectedText]);
9904
- var size = props.size;
9905
10086
  //Automatically add points on the link so that the link does not cross elements, default maximum 10 points
9906
- var automationAddPointsToLink = function (eleLink, limitPoint) {
10087
+ var automationAddPointsToLink = React$1.useCallback(function (eleLink, limitPoint) {
10088
+ if (limitPoint === void 0) { limitPoint = 10; }
9907
10089
  var sourceElement = eleLink.sourceElement, sourcePort = eleLink.sourcePort, targetElement = eleLink.targetElement, targetPort = eleLink.targetPort;
9908
10090
  var sourcePosition = {
9909
10091
  x: sourceElement.position.x + sourcePort.position.x,
@@ -9931,10 +10113,12 @@ var Paper = function (props) {
9931
10113
  var appendedPoints = generatePositions(replacementPosition, targetPosition, elements);
9932
10114
  return __spreadArray(__spreadArray(__spreadArray([], prependedPoints, true), [replacementPosition], false), appendedPoints, true);
9933
10115
  }
10116
+ var elements = elementsRef.current;
9934
10117
  var points = generatePositions(sourcePosition, targetPosition, elements);
9935
10118
  return __assign(__assign({}, eleLink), { points: points });
9936
- };
10119
+ }, []);
9937
10120
  var handlePaperMouseMove = function (ev) {
10121
+ var _a;
9938
10122
  //if there is a temp link, update the temp target point
9939
10123
  if (tempLink) {
9940
10124
  var currentTarget = ev.currentTarget;
@@ -9953,24 +10137,35 @@ var Paper = function (props) {
9953
10137
  };
9954
10138
  setTempLink(function (prev) { return (__assign(__assign({}, prev), { tempTargetPosition: tempTargetPosition_1 })); });
9955
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
+ });
9956
10145
  };
9957
10146
  var handleMouseDownOnPaper = function (ev) {
9958
- var _a;
10147
+ var _a, _b;
9959
10148
  setMouseDownedOnPaper(true);
9960
10149
  (_a = props.onPaperClicked) === null || _a === void 0 ? void 0 : _a.call(props, {
9961
10150
  x: ev.clientX,
9962
10151
  y: ev.clientY
9963
10152
  });
9964
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
+ });
9965
10159
  };
9966
10160
  var handleMouseUpOnPaper = function (ev) {
10161
+ var _a;
9967
10162
  if (mouseDownedOnPaper) {
9968
10163
  setSelectedElement(undefined);
9969
10164
  setSelectedElementSVG(null);
9970
10165
  }
9971
10166
  //clear temp link if exists
9972
10167
  if (tempLink) {
9973
- setTempLink(undefined);
10168
+ setTempLink(null);
9974
10169
  paperEventEmitter.emitElementLinkEnded();
9975
10170
  }
9976
10171
  //Clear selected text
@@ -9978,6 +10173,11 @@ var Paper = function (props) {
9978
10173
  setSelectedText(undefined);
9979
10174
  }
9980
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
+ });
9981
10181
  };
9982
10182
  var handlePathChange = React$1.useCallback(function (path, id) {
9983
10183
  //Update path of element link, that changed
@@ -9987,42 +10187,44 @@ var Paper = function (props) {
9987
10187
  return __spreadArray([], prevLinks, true);
9988
10188
  });
9989
10189
  }, []);
9990
- var handlePortMoved = function (port, elementId, oldPosition, newPosition) {
9991
- var element = elements.find(function (e) { return e.id === elementId; });
9992
- if (props.onPortMoved) {
9993
- props.onPortMoved(newPosition, port, element);
9994
- }
9995
- //set links equals a clone links to re-render links with new position
9996
- setLinks(function (prev) { return prev.map(function (link) {
9997
- var _a, _b;
9998
- if (link.sourceElement.id === elementId && link.sourcePort.id === port.id) {
9999
- link.sourcePort.position = newPosition;
10000
- }
10001
- 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) {
10002
- link.targetPort.position = newPosition;
10003
- }
10004
- return link;
10005
- }); });
10006
- //Update port position in element, not re-render
10007
- setElements(function (prevElements) {
10008
- var _a;
10009
- var updatedElementIndex = prevElements.findIndex(function (e) { return e.id === elementId; });
10010
- prevElements[updatedElementIndex].ports = (_a = prevElements[updatedElementIndex].ports) === null || _a === void 0 ? void 0 : _a.map(function (p) {
10011
- if (p.id === port.id) {
10012
- 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;
10013
10198
  }
10014
- 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;
10015
10215
  });
10016
- return prevElements;
10017
- });
10018
- };
10216
+ if (props.onPortMoved) {
10217
+ props.onPortMoved(newPosition, port, element);
10218
+ }
10219
+ }
10220
+ }, [props.onPortMoved]);
10019
10221
  //Handle creating a new element link
10020
- var handlePortMouseDown = function (ev, port, elementId) {
10222
+ var handlePortMouseDown = React$1.useCallback(function (ev, port, elementId) {
10021
10223
  ev.stopPropagation();
10022
10224
  //Return if creating a new element link
10023
- if (tempLink)
10225
+ if (tempLinkRef.current)
10024
10226
  return;
10025
- var sourceElement = elements.find(function (e) { return e.id === elementId; });
10227
+ var sourceElement = elementsRef.current.find(function (e) { return e.id === elementId; });
10026
10228
  //handle create temp element link;
10027
10229
  var newLink = {
10028
10230
  id: generateUniqueId(),
@@ -10032,8 +10234,8 @@ var Paper = function (props) {
10032
10234
  };
10033
10235
  setTempLink(newLink);
10034
10236
  paperEventEmitter.emitElementLinkStarted(newLink);
10035
- };
10036
- var createElementLink = function (sourcePort, sourceElement, targetPort, targetElement) {
10237
+ }, [paperEventEmitter]);
10238
+ var createElementLink = React$1.useCallback(function (sourcePort, sourceElement, targetPort, targetElement) {
10037
10239
  //if no onCreatingLink prop, no link will be created
10038
10240
  if (!props.onCreatingLink) {
10039
10241
  return null;
@@ -10046,17 +10248,17 @@ var Paper = function (props) {
10046
10248
  newElementLink = automationAddPointsToLink(newElementLink, MAX_LINK_KNOT_COUNT);
10047
10249
  }
10048
10250
  return newElementLink;
10049
- };
10050
- var handlePortMouseUp = function (ev, port, elementId) {
10251
+ }, [props.onCreatingLink, automationAddPointsToLink]);
10252
+ var handlePortMouseUp = React$1.useCallback(function (ev, port, elementId) {
10051
10253
  ev.stopPropagation();
10052
10254
  //Create new element link, if has tempLink
10053
- if (tempLink) {
10255
+ if (tempLinkRef.current) {
10054
10256
  //Check if mouse up point is mouse down point or not
10055
- 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;
10056
10258
  var newElementLink_1 = null;
10057
10259
  if (isMouseUpOnNotSelf) {
10058
- var sourcePort = tempLink.sourcePort, sourceElement = tempLink.sourceElement;
10059
- 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; });
10060
10262
  newElementLink_1 = createElementLink(sourcePort, sourceElement, port, targetElement);
10061
10263
  }
10062
10264
  if (newElementLink_1) {
@@ -10066,9 +10268,9 @@ var Paper = function (props) {
10066
10268
  else {
10067
10269
  paperEventEmitter.emitElementLinkEnded();
10068
10270
  }
10069
- setTempLink(undefined);
10271
+ setTempLink(null);
10070
10272
  }
10071
- };
10273
+ }, [paperEventEmitter, createElementLink]);
10072
10274
  var handleLinkLabelMoved = React$1.useCallback(function (offsetX, offsetY, index, labelType) {
10073
10275
  setLinks(function (prevLinks) {
10074
10276
  var newLinks = __spreadArray([], prevLinks, true);
@@ -10254,8 +10456,11 @@ var Paper = function (props) {
10254
10456
  });
10255
10457
  };
10256
10458
  }, []);
10257
- var handleMouseUpAtLinkedPortPlaceholder = function (link, position, targetElement) {
10258
- 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));
10259
10464
  if (props.onCreatingPortByLinking) {
10260
10465
  var sourcePort = link.sourcePort, sourceElement = link.sourceElement;
10261
10466
  //Handle create port via onCreatingPortByLinking prop
@@ -10269,20 +10474,20 @@ var Paper = function (props) {
10269
10474
  if (newElementLink_2) {
10270
10475
  setLinks(function (prev) { return __spreadArray(__spreadArray([], prev, true), [newElementLink_2], false); });
10271
10476
  paperEventEmitter.emitElementLinkEnded(newElementLink_2);
10272
- setTempLink(undefined);
10477
+ setTempLink(null);
10273
10478
  return;
10274
10479
  }
10275
10480
  }
10276
10481
  }
10277
10482
  //Clear tempLink
10278
- setTempLink(undefined);
10483
+ setTempLink(null);
10279
10484
  paperEventEmitter.emitElementLinkEnded();
10280
- };
10281
- var handleElementTextChange = function (element, textId, newContent) {
10485
+ }, [props.onCreatingPortByLinking, createElementLink, paperEventEmitter]);
10486
+ var handleElementTextChange = React$1.useCallback(function (elementId, textId, newContent) {
10282
10487
  setElements(function (prevElms) {
10283
10488
  return prevElms.map(function (curEle) {
10284
10489
  //Find changed text of element to update the content for it.
10285
- if (curEle.id === element.id && curEle.texts) {
10490
+ if (curEle.id === elementId && curEle.texts) {
10286
10491
  var updatedTextId = curEle.texts.findIndex(function (t) { return t.id === textId; });
10287
10492
  if (updatedTextId !== undefined) {
10288
10493
  curEle.texts[updatedTextId].content = newContent;
@@ -10291,41 +10496,53 @@ var Paper = function (props) {
10291
10496
  return curEle;
10292
10497
  });
10293
10498
  });
10294
- };
10295
- var handleElementClicked = function (id, e, ref, element) {
10499
+ }, []);
10500
+ var handleElementClicked = React$1.useCallback(function (elementId, e, ref) {
10296
10501
  e.stopPropagation();
10502
+ var tempLink = tempLinkRef.current;
10297
10503
  if (tempLink) {
10298
10504
  //Clear tempLink
10299
- setTempLink(undefined);
10505
+ setTempLink(null);
10300
10506
  paperEventEmitter.emitElementLinkEnded();
10301
10507
  }
10302
10508
  else {
10509
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
10303
10510
  setSelectedElementSVG(ref);
10304
- setSelectedElement(element);
10305
- paperEventEmitter.emitElementSelected(element);
10511
+ if (element) {
10512
+ setSelectedElement(element);
10513
+ paperEventEmitter.emitElementSelected(element);
10514
+ }
10306
10515
  }
10307
10516
  setMouseDownedOnPaper(false);
10308
- };
10309
- var renderElementInTree = function (element) {
10310
- 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;
10311
10529
  //use the defined react element or the default Element component
10312
- var ReactElement = element.reactElement || Element;
10313
- 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) {
10314
- handleElementClicked(id, e, ref, element);
10315
- }, onContextMenu: function (id, e, ref) {
10316
- var _a;
10317
- handleElementClicked(id, e, ref, element);
10318
- (_a = props.onElementContextMenu) === null || _a === void 0 ? void 0 : _a.call(props, element, e);
10319
- }, 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,
10320
- // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
10321
- 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))));
10322
- };
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]);
10323
10542
  return (React$1.createElement("div", { style: { position: "relative" } },
10324
10543
  React$1.createElement(Ruler, { squareSize: 100, border: '1px dashed grey' }),
10325
10544
  React$1.createElement("svg", { tabIndex: 0, width: size.width, height: size.height, ref: paperContainerRef, id: "paper-container", onMouseMove: handlePaperMouseMove, onMouseDown: handleMouseDownOnPaper, onMouseUp: handleMouseUpOnPaper },
10326
- paperContainerRef.current ? elementsInTree.map(function (element, index) {
10327
- return renderElementInTree(element);
10328
- }) : "",
10545
+ paperContainerRef.current ? ElementsInTree : "",
10329
10546
  links && links.map(function (link, index) {
10330
10547
  var _a, _b, _c, _d;
10331
10548
  return (React$1.createElement(ElementLink, { key: link.id, id: link.id, path: link.path, sourcePosition: {
@@ -10345,10 +10562,17 @@ var Paper = function (props) {
10345
10562
  } })); })),
10346
10563
  React$1.createElement(BBoxDebugger, { elementSVG: selectedElementSVG }),
10347
10564
  React$1.createElement(LinkDebugger, { links: links, svgContainer: paperContainerRef.current })));
10348
- };
10565
+ };
10566
+ var Paper$1 = React$1.memo(Paper);
10349
10567
 
10350
10568
  function Editor(_a) {
10351
- 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
+ }
10352
10576
  var handlePaperClicked = React$1.useCallback(function (position) {
10353
10577
  editorContext.onPaperClickedHandler(position);
10354
10578
  }, [editorContext]);
@@ -10376,15 +10600,37 @@ function Editor(_a) {
10376
10600
  var handleTextSelected = React$1.useCallback(function (text) {
10377
10601
  editorContext.onTextSelectedHandler(text);
10378
10602
  }, [editorContext]);
10379
- return (React$1.createElement(React$1.Fragment, null,
10380
- 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;
10381
10627
  }
10382
10628
 
10383
10629
  exports.CircleRC = Circle;
10384
10630
  exports.CrescentRC = Crescent;
10385
10631
  exports.CustomShapeRC = CustomShape;
10386
10632
  exports.EditorContext = EditorContext;
10387
- exports.Element = Element$1;
10633
+ exports.Element = Element$2;
10388
10634
  exports.ElementLink = ElementLink$1;
10389
10635
  exports.ElementLinkRC = ElementLink;
10390
10636
  exports.Port = Port$1;