orcasvn-react-diagrams 0.1.52 → 0.1.54

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 (35) hide show
  1. package/dist/cjs/index.js +192 -36
  2. package/dist/cjs/types/components/paper.d.ts +1 -0
  3. package/dist/cjs/types/components/shapes/rectangle.d.ts +1 -0
  4. package/dist/cjs/types/components/shapes/rectangularFrame.d.ts +1 -0
  5. package/dist/cjs/types/contexts/editorConfigurationContext.d.ts +4 -0
  6. package/dist/cjs/types/models/IEditorConfiguration.d.ts +3 -0
  7. package/dist/cjs/types/models/IEditorContext.d.ts +2 -0
  8. package/dist/cjs/types/models/IElementLinkProps.d.ts +1 -0
  9. package/dist/cjs/types/models/IElementProps.d.ts +1 -0
  10. package/dist/cjs/types/models/IText.d.ts +1 -0
  11. package/dist/cjs/types/models/ITextProps.d.ts +1 -0
  12. package/dist/cjs/types/models/implementations/EditorContext.d.ts +4 -1
  13. package/dist/cjs/types/models/implementations/Element.d.ts +1 -1
  14. package/dist/cjs/types/models/implementations/ElementLink.d.ts +1 -1
  15. package/dist/cjs/types/models/implementations/Text.d.ts +2 -1
  16. package/dist/cjs/types/utils/pathUtil.d.ts +2 -0
  17. package/dist/esm/index.js +192 -38
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/types/components/paper.d.ts +1 -0
  20. package/dist/esm/types/components/shapes/rectangle.d.ts +1 -0
  21. package/dist/esm/types/components/shapes/rectangularFrame.d.ts +1 -0
  22. package/dist/esm/types/contexts/editorConfigurationContext.d.ts +4 -0
  23. package/dist/esm/types/models/IEditorConfiguration.d.ts +3 -0
  24. package/dist/esm/types/models/IEditorContext.d.ts +2 -0
  25. package/dist/esm/types/models/IElementLinkProps.d.ts +1 -0
  26. package/dist/esm/types/models/IElementProps.d.ts +1 -0
  27. package/dist/esm/types/models/IText.d.ts +1 -0
  28. package/dist/esm/types/models/ITextProps.d.ts +1 -0
  29. package/dist/esm/types/models/implementations/EditorContext.d.ts +4 -1
  30. package/dist/esm/types/models/implementations/Element.d.ts +1 -1
  31. package/dist/esm/types/models/implementations/ElementLink.d.ts +1 -1
  32. package/dist/esm/types/models/implementations/Text.d.ts +2 -1
  33. package/dist/esm/types/utils/pathUtil.d.ts +2 -0
  34. package/dist/index.d.ts +22 -6
  35. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -731,6 +731,7 @@ var Port$1 = /** @class */ (function () {
731
731
  }());
732
732
 
733
733
  var ElementLink$1 = /** @class */ (function () {
734
+ // constructor(id: string | null, sourceElement: IElement, sourcePort: IPort, targetElement: IElement, targetPort: IPort, tempTargetPosition: IPosition, points?: IPosition[]);
734
735
  function ElementLink(id, sourceElement, sourcePort, targetElement, targetPort, tempTargetPosition, points, path, markerStart, markerEnd, markerDistanceFromPort, markerSize, label, sourceLabel, targetLabel) {
735
736
  this.id = id || generateUniqueId();
736
737
  this.sourceElement = sourceElement;
@@ -769,7 +770,7 @@ var ElementLink$1 = /** @class */ (function () {
769
770
  }());
770
771
 
771
772
  var Text$2 = /** @class */ (function () {
772
- function Text(id, content, width, height, editable, x, y, align, fontSize, border, style) {
773
+ function Text(id, content, width, height, editable, selectable, x, y, align, fontSize, border, style) {
773
774
  this._id = id || generateUniqueId();
774
775
  this.content = content;
775
776
  this.align = align;
@@ -778,6 +779,10 @@ var Text$2 = /** @class */ (function () {
778
779
  this.size = { width: width, height: height };
779
780
  this.style = style;
780
781
  this.editable = editable;
782
+ this.selectable = selectable;
783
+ if (selectable === undefined) {
784
+ this.selectable = true; // Default to true if not specified
785
+ }
781
786
  if (x && y) {
782
787
  this.position = { x: x, y: y };
783
788
  }
@@ -814,7 +819,7 @@ var EVENT_ELEMENT_MOUSE_DOWN = 'elementMouseDown';
814
819
  var EVENT_LINK_SELECTED = 'linkSelected';
815
820
  var EVENT_TEXT_SELECTED = 'textSelected';
816
821
  var EditorContext = /** @class */ (function () {
817
- function EditorContext(elements, links, texts) {
822
+ function EditorContext(elements, links, texts, configuration) {
818
823
  var _this = this;
819
824
  /** @internal */
820
825
  this.onEditorContextUpdated = function (callback) {
@@ -827,6 +832,7 @@ var EditorContext = /** @class */ (function () {
827
832
  this._elements = elements;
828
833
  this._links = links;
829
834
  this._texts = texts;
835
+ this._configuration = configuration || {};
830
836
  this._eventEmitter = new EventEmitter();
831
837
  }
832
838
  EditorContext.prototype.addEventListener = function (event, callback) {
@@ -867,6 +873,13 @@ var EditorContext = /** @class */ (function () {
867
873
  enumerable: false,
868
874
  configurable: true
869
875
  });
876
+ Object.defineProperty(EditorContext.prototype, "configuration", {
877
+ get: function () {
878
+ return this._configuration;
879
+ },
880
+ enumerable: false,
881
+ configurable: true
882
+ });
870
883
  EditorContext.prototype.getElement = function (elementId) {
871
884
  return this._elements.find(function (e) { return e.id === elementId; });
872
885
  };
@@ -1105,8 +1118,20 @@ var Rectangle = React.forwardRef(function (props, ref) {
1105
1118
  scaledWidth = scaledWidth / heightRatio;
1106
1119
  }
1107
1120
  var sw = props.stroke ? (props.strokeWidth || 1) : 0;
1121
+ var strokeDasharray;
1122
+ var strokeLinecap = undefined;
1123
+ if (props.strokeStyle === 'dashed') {
1124
+ strokeDasharray = '8, 4';
1125
+ }
1126
+ else if (props.strokeStyle === 'dotted') {
1127
+ strokeDasharray = '0, 4';
1128
+ strokeLinecap = 'round';
1129
+ }
1130
+ else {
1131
+ strokeDasharray = undefined;
1132
+ }
1108
1133
  return (React.createElement(ShapeWrapper, __assign({}, props, { ref: ref, height: props.height, width: props.width }),
1109
- React.createElement("rect", { className: "rect-border ".concat(props.portMoveableAreaCssClass), vectorEffect: "non-scaling-stroke", width: scaledWidth, height: scaledHeight, fill: props.fill || "transparent", stroke: props.stroke || "none", strokeWidth: sw }),
1134
+ React.createElement("rect", { className: "rect-border ".concat(props.portMoveableAreaCssClass), vectorEffect: "non-scaling-stroke", width: scaledWidth, height: scaledHeight, fill: props.fill || "transparent", stroke: props.stroke || "none", strokeWidth: sw, strokeDasharray: strokeDasharray, strokeLinecap: strokeLinecap }),
1110
1135
  props.children));
1111
1136
  });
1112
1137
 
@@ -1128,10 +1153,22 @@ var RectangularFrame = React.forwardRef(function (props, ref) {
1128
1153
  var fw = props.frameColor ? (props.frameWidth || 1) : 0;
1129
1154
  var scaledFw = scaledWidth / props.width * fw;
1130
1155
  var sw = props.stroke ? (props.strokeWidth || 1) : 0;
1156
+ var strokeDasharray;
1157
+ var strokeLinecap = undefined;
1158
+ if (props.strokeStyle === 'dashed') {
1159
+ strokeDasharray = '8, 4';
1160
+ }
1161
+ else if (props.strokeStyle === 'dotted') {
1162
+ strokeDasharray = '0, 4';
1163
+ strokeLinecap = 'round';
1164
+ }
1165
+ else {
1166
+ strokeDasharray = undefined;
1167
+ }
1131
1168
  return (React.createElement(ShapeWrapper, __assign({}, props, { ref: ref, height: props.height, width: props.width }),
1132
- React.createElement("rect", { vectorEffect: "non-scaling-stroke", className: "rectangular-frame-outer-border ".concat(props.portMoveableAreaCssClass), x: vbX, y: vbY, width: scaledWidth, height: scaledHeight, fill: "none", stroke: props.stroke || "none", strokeWidth: sw }),
1169
+ React.createElement("rect", { vectorEffect: "non-scaling-stroke", className: "rectangular-frame-outer-border ".concat(props.portMoveableAreaCssClass), x: vbX, y: vbY, width: scaledWidth, height: scaledHeight, fill: "none", stroke: props.stroke || "none", strokeWidth: sw, strokeDasharray: strokeDasharray, strokeLinecap: strokeLinecap }),
1133
1170
  React.createElement("rect", { vectorEffect: "non-scaling-stroke", className: 'rectangular-frame-hallway', x: vbX + scaledFw / 2, y: vbY + scaledFw / 2, width: scaledWidth - scaledFw, height: scaledHeight - scaledFw, stroke: props.frameColor || "none", strokeWidth: fw, fill: props.fill || "transparent" }),
1134
- React.createElement("rect", { vectorEffect: "non-scaling-stroke", className: 'rectangular-frame-inner-border', x: vbX + scaledFw, y: vbY + scaledFw, width: scaledWidth - scaledFw * 2, height: scaledHeight - scaledFw * 2, stroke: props.stroke || "none", strokeWidth: sw, fill: props.fill || "transparent" }),
1171
+ React.createElement("rect", { vectorEffect: "non-scaling-stroke", className: 'rectangular-frame-inner-border', x: vbX + scaledFw, y: vbY + scaledFw, width: scaledWidth - scaledFw * 2, height: scaledHeight - scaledFw * 2, stroke: props.stroke || "none", strokeWidth: sw, fill: props.fill || "transparent", strokeDasharray: strokeDasharray, strokeLinecap: strokeLinecap }),
1135
1172
  props.children));
1136
1173
  });
1137
1174
 
@@ -1709,10 +1746,21 @@ var paperEventEmitterContext = React.createContext({
1709
1746
  onCommandRenderPort: onCommandRenderPort,
1710
1747
  });
1711
1748
 
1749
+ var editorConfigurationContext = React.createContext(null);
1750
+ var useEditorConfiguration = function () {
1751
+ var context = React.useContext(editorConfigurationContext);
1752
+ if (!context) {
1753
+ throw new Error("useEditorConfiguration must be used within an EditorConfigurationProvider");
1754
+ }
1755
+ return context;
1756
+ };
1757
+ var EditorConfigurationContextProvider = editorConfigurationContext.Provider;
1758
+
1712
1759
  var Text = React.forwardRef(function (_a, ref) {
1713
- var id = _a.id, content = _a.content, x = _a.x, y = _a.y, width = _a.width, height = _a.height, editable = _a.editable, _b = _a.align, align = _b === void 0 ? exports.TextAlign.left : _b, fontSizeProp = _a.fontSize, border = _a.border, container = _a.container, parentAbsolutePosition = _a.parentAbsolutePosition, onSelected = _a.onSelected, onMoved = _a.onMoved, onResized = _a.onResized, onContentChanged = _a.onContentChanged;
1714
- var _c = React.useState(false), isSelected = _c[0], setIsSelected = _c[1];
1715
- var _d = React.useState(false), isEditing = _d[0], setIsEditing = _d[1];
1760
+ var id = _a.id, content = _a.content, x = _a.x, y = _a.y, width = _a.width, height = _a.height, editable = _a.editable, _b = _a.selectable, selectable = _b === void 0 ? true : _b, _c = _a.align, align = _c === void 0 ? exports.TextAlign.left : _c, fontSizeProp = _a.fontSize, border = _a.border, container = _a.container, parentAbsolutePosition = _a.parentAbsolutePosition, onSelected = _a.onSelected, onMoved = _a.onMoved, onResized = _a.onResized, onContentChanged = _a.onContentChanged;
1761
+ var _d = React.useState(false), isSelected = _d[0], setIsSelected = _d[1];
1762
+ var _e = React.useState(false), isEditing = _e[0], setIsEditing = _e[1];
1763
+ var textFontSize = useEditorConfiguration().textFontSize;
1716
1764
  var absolutePosition = React.useMemo(function () {
1717
1765
  var _a, _b;
1718
1766
  return {
@@ -1721,7 +1769,7 @@ var Text = React.forwardRef(function (_a, ref) {
1721
1769
  };
1722
1770
  }, [x, y, parentAbsolutePosition === null || parentAbsolutePosition === void 0 ? void 0 : parentAbsolutePosition.x, parentAbsolutePosition === null || parentAbsolutePosition === void 0 ? void 0 : parentAbsolutePosition.y]);
1723
1771
  var svgRef = React.useRef();
1724
- var _e = React.useContext(paperEventEmitterContext), onPaperClicked = _e.onPaperClicked, emitTextSelected = _e.emitTextSelected, onPortSelected = _e.onPortSelected, onElementSelected = _e.onElementSelected, onTextSelected = _e.onTextSelected;
1772
+ var _f = React.useContext(paperEventEmitterContext), onPaperClicked = _f.onPaperClicked, emitTextSelected = _f.emitTextSelected, onPortSelected = _f.onPortSelected, onElementSelected = _f.onElementSelected, onTextSelected = _f.onTextSelected;
1725
1773
  React.useEffect(function () {
1726
1774
  var paperClickListener = onPaperClicked(function (ev) {
1727
1775
  var _a;
@@ -1754,6 +1802,8 @@ var Text = React.forwardRef(function (_a, ref) {
1754
1802
  }, []);
1755
1803
  //Handle click on svg element
1756
1804
  var handleClick = function (ev) {
1805
+ if (!selectable)
1806
+ return;
1757
1807
  ev.stopPropagation();
1758
1808
  var position = {
1759
1809
  x: x,
@@ -1803,9 +1853,12 @@ var Text = React.forwardRef(function (_a, ref) {
1803
1853
  return 'left';
1804
1854
  }
1805
1855
  }, [align]);
1806
- var fontSize = fontSizeProp || TEXT_FONT_SIZE;
1856
+ var fontSize = fontSizeProp || textFontSize || TEXT_FONT_SIZE;
1807
1857
  var borderStyle = border || 'none';
1808
- return (React.createElement("svg", { style: { overflow: "visible" }, x: x, y: y, ref: function (node) {
1858
+ return (React.createElement("svg", { style: {
1859
+ overflow: "visible",
1860
+ pointerEvents: selectable ? undefined : 'none',
1861
+ }, x: x, y: y, ref: function (node) {
1809
1862
  svgRef.current = node;
1810
1863
  if (typeof ref === 'function') {
1811
1864
  ref(node);
@@ -7914,7 +7967,7 @@ var Port1 = React.forwardRef(function (props, ref) {
7914
7967
  var renderLabel = function (label) {
7915
7968
  var content = label.content, size = label.size;
7916
7969
  var position = label.position || PORT_LABEL_POSITION;
7917
- return React.createElement(Text$1, { id: label.id, ref: textRef, x: x + position.x, y: y + position.y, parentAbsolutePosition: parentAbsolutePosition, width: size.width, height: size.height, editable: label.editable, content: content, fontSize: label.fontSize, border: label.border, container: container, onMoved: function (xOnPaper, yOnPaper) {
7970
+ return React.createElement(Text$1, { id: label.id, ref: textRef, x: x + position.x, y: y + position.y, parentAbsolutePosition: parentAbsolutePosition, width: size.width, height: size.height, editable: label.editable, selectable: label.selectable, content: content, fontSize: label.fontSize, border: label.border, container: container, onMoved: function (xOnPaper, yOnPaper) {
7918
7971
  if (onPortLabelMoved) {
7919
7972
  var relativePosInSideEle = transformAbsPositionToRelativePositionInsideElement({ x: xOnPaper, y: yOnPaper }, parentAbsolutePosition);
7920
7973
  var newXPort = relativePosInSideEle.x - x;
@@ -8055,6 +8108,55 @@ function addPointToList(point, listPoints, path) {
8055
8108
  var addedIndex = getAddIndex(0, listPoints.length - 1);
8056
8109
  listPoints.splice(addedIndex, 0, point);
8057
8110
  return __spreadArray([], listPoints, true);
8111
+ }
8112
+ // Parse the d attribute of a path element and extract points from path commands
8113
+ function getPointsFromPathData(dAttribute) {
8114
+ var points = [];
8115
+ // Remove extra whitespace and split by command letters
8116
+ var cleanD = dAttribute.replace(/\s+/g, ' ').trim();
8117
+ // Regular expression to match path commands (M, L, C, etc.) and their values
8118
+ var commandRegex = /([MLCZmlcz])\s*([^MLCZmlcz]*)/g;
8119
+ var match;
8120
+ while ((match = commandRegex.exec(cleanD)) !== null) {
8121
+ var command = match[1].toUpperCase();
8122
+ var values = match[2].trim();
8123
+ if (values) {
8124
+ var coords = values.split(/[\s,]+/).map(Number).filter(function (num) { return !isNaN(num); });
8125
+ switch (command) {
8126
+ case 'M': // Move to
8127
+ if (coords.length >= 2) {
8128
+ points.push({ x: coords[0], y: coords[1] });
8129
+ }
8130
+ break;
8131
+ case 'L': // Line to
8132
+ if (coords.length >= 2) {
8133
+ points.push({ x: coords[0], y: coords[1] });
8134
+ }
8135
+ break;
8136
+ case 'C': // Cubic bezier curve
8137
+ // For cubic curves, we take the end point (last 2 coordinates)
8138
+ if (coords.length >= 6) {
8139
+ points.push({ x: coords[4], y: coords[5] });
8140
+ }
8141
+ break;
8142
+ case 'Q': // Quadratic bezier curve
8143
+ // For quadratic curves, we take the end point (last 2 coordinates)
8144
+ if (coords.length >= 4) {
8145
+ points.push({ x: coords[2], y: coords[3] });
8146
+ }
8147
+ break;
8148
+ }
8149
+ }
8150
+ }
8151
+ return points;
8152
+ }
8153
+ // Get points from a path element's d attribute
8154
+ function getPointsFromPathElement(pathElement) {
8155
+ var dAttribute = pathElement.getAttribute('d');
8156
+ if (!dAttribute) {
8157
+ return [];
8158
+ }
8159
+ return getPointsFromPathData(dAttribute);
8058
8160
  }
8059
8161
 
8060
8162
  //Defined remove icon for element link, shown when element link is selected.
@@ -8074,7 +8176,7 @@ function CloseIcon(_a) {
8074
8176
  // const makerEnd = <path d="M0 0 L 20 10 L0 20 Z" fill="blue"></path>//<path d="M0 0 L 10 5 L0 10 Z"></path>
8075
8177
  var IElementLink = function (_a) {
8076
8178
  var _b, _c;
8077
- var id = _a.id, path = _a.path, stroke = _a.stroke, _d = _a.strokeWidth, strokeWidth = _d === void 0 ? 4 : _d, pointsProp = _a.points, sourcePosition = _a.sourcePosition, targetPosition = _a.targetPosition, onPathChanged = _a.onPathChanged, onClickDelete = _a.onClickDelete, onSelected = _a.onSelected, onDeselected = _a.onDeselected, container = _a.container, markerStart = _a.markerStart, markerEnd = _a.markerEnd, _e = _a.markerDistanceFromPort, markerDistanceFromPort = _e === void 0 ? LINK_MARKER_DISTANCE_FROM_PORT : _e, _f = _a.markerSize, markerSize = _f === void 0 ? LINK_MARKER_SIZE : _f, label = _a.label, sourceLabel = _a.sourceLabel, targetLabel = _a.targetLabel, onLabelMoved = _a.onLabelMoved, onLabelResized = _a.onLabelResized, onLabelContentChanged = _a.onLabelContentChanged;
8179
+ var id = _a.id, path = _a.path, stroke = _a.stroke, _d = _a.strokeWidth, strokeWidth = _d === void 0 ? 4 : _d, pointsProp = _a.points, sourcePosition = _a.sourcePosition, targetPosition = _a.targetPosition, onPathChanged = _a.onPathChanged, onClickDelete = _a.onClickDelete, onSelected = _a.onSelected, onDeselected = _a.onDeselected, onPointsChanged = _a.onPointsChanged, container = _a.container, markerStart = _a.markerStart, markerEnd = _a.markerEnd, _e = _a.markerDistanceFromPort, markerDistanceFromPort = _e === void 0 ? LINK_MARKER_DISTANCE_FROM_PORT : _e, _f = _a.markerSize, markerSize = _f === void 0 ? LINK_MARKER_SIZE : _f, label = _a.label, sourceLabel = _a.sourceLabel, targetLabel = _a.targetLabel, onLabelMoved = _a.onLabelMoved, onLabelResized = _a.onLabelResized, onLabelContentChanged = _a.onLabelContentChanged;
8078
8180
  var _g = React.useState(path), pathStr = _g[0], setPathStr = _g[1];
8079
8181
  var _h = React.useState(pointsProp !== null && pointsProp !== void 0 ? pointsProp : []), points = _h[0], setPoints = _h[1];
8080
8182
  var _j = React.useState(false), isDragging = _j[0], setIsDragging = _j[1];
@@ -8088,6 +8190,8 @@ var IElementLink = function (_a) {
8088
8190
  var labelRef = React.useRef(null);
8089
8191
  var sourceLabelRef = React.useRef(null);
8090
8192
  var targetLabelRef = React.useRef(null);
8193
+ var isFirstRender = React.useRef(true);
8194
+ var onPointsChangedRef = React.useRef();
8091
8195
  var angleMarkerStart = '0';
8092
8196
  var angleMarkerEnd = '0';
8093
8197
  var markerStartPosition;
@@ -8117,6 +8221,18 @@ var IElementLink = function (_a) {
8117
8221
  elementSelectedListener.off();
8118
8222
  };
8119
8223
  }, []);
8224
+ // Store onPointsChanged in a ref to avoid unnecessary re-renders
8225
+ React.useEffect(function () {
8226
+ onPointsChangedRef.current = onPointsChanged;
8227
+ }, [onPointsChanged]);
8228
+ React.useEffect(function () {
8229
+ var _a;
8230
+ if (isFirstRender.current) {
8231
+ isFirstRender.current = false;
8232
+ return;
8233
+ }
8234
+ (_a = onPointsChangedRef.current) === null || _a === void 0 ? void 0 : _a.call(onPointsChangedRef, points, id);
8235
+ }, [points]);
8120
8236
  React.useLayoutEffect(function () {
8121
8237
  var pointsList = __spreadArray(__spreadArray([sourcePosition], points, true), [targetPosition], false);
8122
8238
  var _pathStr = createSmoothPathString(pointsList, undefined, false);
@@ -8292,7 +8408,7 @@ var IElementLink = function (_a) {
8292
8408
  position.x += relativePositionTo.x;
8293
8409
  position.y += relativePositionTo.y;
8294
8410
  }
8295
- return (React.createElement(Text$1, { id: label.id, x: position.x, y: position.y, width: size.width, height: size.height, editable: label.editable, content: content, fontSize: label.fontSize, border: label.border, ref: curLabelRef, container: container, onSelected: function () { return setSelectedLabelRef(curLabelRef); }, onMoved: handleLabelMoved, onResized: handleLabelResized, onContentChanged: handleLabelContentChanged }));
8411
+ return (React.createElement(Text$1, { id: label.id, x: position.x, y: position.y, width: size.width, height: size.height, editable: label.editable, selectable: label.selectable, content: content, fontSize: label.fontSize, border: label.border, ref: curLabelRef, container: container, onSelected: function () { return setSelectedLabelRef(curLabelRef); }, onMoved: handleLabelMoved, onResized: handleLabelResized, onContentChanged: handleLabelContentChanged }));
8296
8412
  };
8297
8413
  if ((_b = pathRef.current) === null || _b === void 0 ? void 0 : _b.getAttribute('d')) {
8298
8414
  if (markerStart) {
@@ -8495,15 +8611,18 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8495
8611
  //Listen trigger of Delete key, handle delete port is selected
8496
8612
  React.useEffect(function () {
8497
8613
  var listener = _paperEventEmitterContext.onCommandDeleteSelectedPort(function () {
8614
+ var _a;
8498
8615
  if (selectedPort) {
8499
- setPorts(function (prev) { return prev.filter(function (p) { return p.id !== selectedPort.id; }); });
8616
+ var newPorts = portsRef.current.filter(function (p) { return p.id !== selectedPort.id; });
8617
+ setPorts(newPorts);
8500
8618
  setSelectedPort(undefined);
8619
+ (_a = props.onPortsChanged) === null || _a === void 0 ? void 0 : _a.call(props, newPorts, id);
8501
8620
  }
8502
8621
  });
8503
8622
  return function () {
8504
8623
  listener.off();
8505
8624
  };
8506
- }, [selectedPort]);
8625
+ }, [selectedPort, props.onPortsChanged]);
8507
8626
  React.useEffect(function () {
8508
8627
  //Listener onMouseDown event on #paper-container
8509
8628
  var eventListener = _paperEventEmitterContext.onPaperClicked(function (ev) {
@@ -8842,7 +8961,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8842
8961
  }), texts === null || texts === void 0 ? void 0 :
8843
8962
  texts.map(function (t, index) {
8844
8963
  var _a, _b;
8845
- return React.createElement(Text$1, { id: t.id, key: index, content: t.content, x: ((_a = t.position) === null || _a === void 0 ? void 0 : _a.x) || 0, y: ((_b = t.position) === null || _b === void 0 ? void 0 : _b.y) || 0, width: t.size.width, height: t.size.height, editable: t.editable, align: t.align, fontSize: t.fontSize, border: t.border, container: container, style: t.style, parentAbsolutePosition: elementAbsPosition, onContentChanged: function (ev, newContent) { return onTextUpdated === null || onTextUpdated === void 0 ? void 0 : onTextUpdated(id, t.id, newContent); } });
8964
+ return React.createElement(Text$1, { id: t.id, key: index, content: t.content, x: ((_a = t.position) === null || _a === void 0 ? void 0 : _a.x) || 0, y: ((_b = t.position) === null || _b === void 0 ? void 0 : _b.y) || 0, width: t.size.width, height: t.size.height, editable: t.editable, selectable: t.selectable, align: t.align, fontSize: t.fontSize, border: t.border, container: container, style: t.style, parentAbsolutePosition: elementAbsPosition, onContentChanged: function (ev, newContent) { return onTextUpdated === null || onTextUpdated === void 0 ? void 0 : onTextUpdated(id, t.id, newContent); } });
8846
8965
  }),
8847
8966
  children)));
8848
8967
  });
@@ -9368,13 +9487,13 @@ var Paper = function (props) {
9368
9487
  }, [selectedText, props.onTextsChanged]);
9369
9488
  var handlePaperMouseMove = function (ev) {
9370
9489
  var _a;
9490
+ var currentTarget = ev.currentTarget;
9491
+ // Get the mouse position relative to the paper container
9492
+ var paperRect = currentTarget.getBoundingClientRect();
9493
+ var xPosOnPaper = ev.clientX - paperRect.left;
9494
+ var yPosOnPaper = ev.clientY - paperRect.top;
9371
9495
  //if there is a temp link, update the temp target point
9372
9496
  if (tempLink) {
9373
- var currentTarget = ev.currentTarget;
9374
- //get offset x,y of the temp target point relative paper container
9375
- var rect = currentTarget.getBoundingClientRect();
9376
- var offsetX = ev.clientX - rect.left;
9377
- var offsetY = ev.clientY - rect.top;
9378
9497
  var sourceElementAbsPosition = getAbsolutePosition(tempLink.sourceElement);
9379
9498
  var sourcePosition = {
9380
9499
  x: sourceElementAbsPosition.x + tempLink.sourcePort.position.x,
@@ -9382,19 +9501,24 @@ var Paper = function (props) {
9382
9501
  };
9383
9502
  //reduce the position of offset to the direction of the source point 1 unit to avoid the link to reach the current mouse position
9384
9503
  var tempTargetPosition_1 = {
9385
- x: offsetX - (offsetX > sourcePosition.x ? 1 : -1),
9386
- y: offsetY - (offsetY > sourcePosition.y ? 1 : -1)
9504
+ x: xPosOnPaper - (xPosOnPaper > sourcePosition.x ? 1 : -1),
9505
+ y: yPosOnPaper - (yPosOnPaper > sourcePosition.y ? 1 : -1)
9387
9506
  };
9388
9507
  setTempLink(function (prev) { return (__assign(__assign({}, prev), { tempTargetPosition: tempTargetPosition_1 })); });
9389
9508
  }
9390
9509
  //broadcast mouse moved position to parent component
9391
9510
  (_a = props.onPaperMouseMoved) === null || _a === void 0 ? void 0 : _a.call(props, {
9392
- x: ev.clientX,
9393
- y: ev.clientY
9511
+ x: xPosOnPaper,
9512
+ y: yPosOnPaper
9394
9513
  });
9395
9514
  };
9396
9515
  var handleMouseDownOnPaper = function (ev) {
9397
9516
  var _a, _b;
9517
+ var currentTarget = ev.currentTarget;
9518
+ // Get the mouse position relative to the paper container
9519
+ var paperRect = currentTarget.getBoundingClientRect();
9520
+ var xPosOnPaper = ev.clientX - paperRect.left;
9521
+ var yPosOnPaper = ev.clientY - paperRect.top;
9398
9522
  setMouseDownedOnPaper(true);
9399
9523
  (_a = props.onPaperClicked) === null || _a === void 0 ? void 0 : _a.call(props, {
9400
9524
  x: ev.clientX,
@@ -9403,12 +9527,17 @@ var Paper = function (props) {
9403
9527
  paperEventEmitter.emitPaperClicked(ev);
9404
9528
  //broadcast mouse moved position to parent component
9405
9529
  (_b = props.onPaperMouseDown) === null || _b === void 0 ? void 0 : _b.call(props, {
9406
- x: ev.clientX,
9407
- y: ev.clientY
9530
+ x: xPosOnPaper,
9531
+ y: yPosOnPaper
9408
9532
  });
9409
9533
  };
9410
9534
  var handleMouseUpOnPaper = function (ev) {
9411
9535
  var _a;
9536
+ var currentTarget = ev.currentTarget;
9537
+ // Get the mouse position relative to the paper container
9538
+ var paperRect = currentTarget.getBoundingClientRect();
9539
+ var xPosOnPaper = ev.clientX - paperRect.left;
9540
+ var yPosOnPaper = ev.clientY - paperRect.top;
9412
9541
  if (mouseDownedOnPaper) {
9413
9542
  setSelectedElement(undefined);
9414
9543
  setSelectedElementSVG(null);
@@ -9425,8 +9554,8 @@ var Paper = function (props) {
9425
9554
  setMouseDownedOnPaper(false);
9426
9555
  //broadcast mouse moved position to parent component
9427
9556
  (_a = props.onPaperMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, {
9428
- x: ev.clientX,
9429
- y: ev.clientY
9557
+ x: xPosOnPaper,
9558
+ y: yPosOnPaper
9430
9559
  });
9431
9560
  };
9432
9561
  var handlePathChange = React.useCallback(function (path, id) {
@@ -9440,6 +9569,17 @@ var Paper = function (props) {
9440
9569
  props.onLinksChanged(newLinks);
9441
9570
  }
9442
9571
  }, [props.onLinksChanged, links]);
9572
+ var handlePointsOfLinkChange = React.useCallback(function (points, id) {
9573
+ //Update path of element link, that changed
9574
+ // const prevLinks = linksRef.current;
9575
+ var updatedLinkIndex = links.findIndex(function (l) { return l.id === id; });
9576
+ links[updatedLinkIndex].points = points;
9577
+ var newLinks = __spreadArray([], links, true);
9578
+ setLinks(newLinks);
9579
+ if (props.onLinksChanged) {
9580
+ props.onLinksChanged(newLinks);
9581
+ }
9582
+ }, [props.onLinksChanged, links]);
9443
9583
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9444
9584
  var _a;
9445
9585
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
@@ -9548,6 +9688,13 @@ var Paper = function (props) {
9548
9688
  setTempLink(null);
9549
9689
  }
9550
9690
  }, [paperEventEmitter, createElementLink, props.onPortMouseUp, props.onLinksChanged]);
9691
+ var handlePortsChanged = React.useCallback(function (ports, elementId) {
9692
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9693
+ if (element) {
9694
+ //broadcast ports changed to parent component
9695
+ props.onPortsChanged(ports, element);
9696
+ }
9697
+ }, [props.onPortsChanged]);
9551
9698
  var handleLinkLabelMoved = React.useCallback(function (newX, newY, index, labelType) {
9552
9699
  var prevLinks = linksRef.current;
9553
9700
  var newLinks = __spreadArray([], prevLinks, true);
@@ -9798,7 +9945,7 @@ var Paper = function (props) {
9798
9945
  //use the defined react element or the default Element component
9799
9946
  var ReactElement = element.reactElement || Element$1;
9800
9947
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
9801
- React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, ref: function (refDOM) { return element.DOM = refDOM; }, height: element.size.height, width: element.size.width, x: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
9948
+ React.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, ref: function (refDOM) { return element.DOM = refDOM; }, height: element.size.height, width: element.size.width, x: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === exports.PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseLeave: handleMouseLeave, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortsChanged: handlePortsChanged,
9802
9949
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9803
9950
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
9804
9951
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
@@ -9863,7 +10010,7 @@ var Paper = function (props) {
9863
10010
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
9864
10011
  setMouseDownedOnPaper(false);
9865
10012
  } }))));
9866
- }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave, selectedElement, selectedElementAbsPosition]);
10013
+ }, [handlePortsChanged, handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave, selectedElement, selectedElementAbsPosition]);
9867
10014
  var ElementsInTree = React.useMemo(function () {
9868
10015
  return elementsInTree.map(function (element, index) {
9869
10016
  return renderElementInTree(element);
@@ -9882,13 +10029,13 @@ var Paper = function (props) {
9882
10029
  }, targetPosition: {
9883
10030
  x: getAbsolutePosition(link.targetElement).x + link.targetPort.position.x,
9884
10031
  y: getAbsolutePosition(link.targetElement).y + link.targetPort.position.y
9885
- }, points: link.points, onPathChanged: handlePathChange, onClickDelete: handleClickLinkDelete(link, index), onSelected: function () { return handleSelectLink(link); }, onDeselected: function () { return handleDeselectLink(); }, container: paperContainerRef.current, markerStart: link.markerStart, markerEnd: link.markerEnd, markerDistanceFromPort: link.markerDistanceFromPort, markerSize: link.markerSize, label: link.label, sourceLabel: link.sourceLabel, targetLabel: link.targetLabel, onLabelMoved: onLabelMoved(index), onLabelResized: onLabelResized(index), onLabelContentChanged: onLabelContentChanged(index) }));
10032
+ }, points: link.points, onPathChanged: handlePathChange, onPointsChanged: handlePointsOfLinkChange, onClickDelete: handleClickLinkDelete(link, index), onSelected: function () { return handleSelectLink(link); }, onDeselected: function () { return handleDeselectLink(); }, container: paperContainerRef.current, markerStart: link.markerStart, markerEnd: link.markerEnd, markerDistanceFromPort: link.markerDistanceFromPort, markerSize: link.markerSize, label: link.label, sourceLabel: link.sourceLabel, targetLabel: link.targetLabel, onLabelMoved: onLabelMoved(index), onLabelResized: onLabelResized(index), onLabelContentChanged: onLabelContentChanged(index) }));
9886
10033
  }),
9887
10034
  (tempLink === null || tempLink === void 0 ? void 0 : tempLink.tempTargetPosition) && React.createElement(ElementLink, { id: tempLink.id, points: tempLink.points, sourcePosition: {
9888
10035
  x: getAbsolutePosition(tempLink.sourceElement).x + tempLink.sourcePort.position.x,
9889
10036
  y: getAbsolutePosition(tempLink.sourceElement).y + tempLink.sourcePort.position.y
9890
10037
  }, targetPosition: tempLink.tempTargetPosition, container: paperContainerRef.current, markerStart: tempLink.markerStart, markerEnd: tempLink.markerEnd, markerDistanceFromPort: tempLink.markerDistanceFromPort, markerSize: tempLink.markerSize }),
9891
- texts.map(function (text, index) { return (React.createElement(Text$1, { key: text.id, id: text.id, x: text.position.x, y: text.position.y, width: text.size.width, height: text.size.height, editable: text.editable, fontSize: text.fontSize, border: text.border, container: paperContainerRef.current, content: text.content, align: text.align, onSelected: function () {
10038
+ texts.map(function (text, index) { return (React.createElement(Text$1, { key: text.id, id: text.id, x: text.position.x, y: text.position.y, width: text.size.width, height: text.size.height, editable: text.editable, selectable: text.selectable, fontSize: text.fontSize, border: text.border, container: paperContainerRef.current, content: text.content, align: text.align, onSelected: function () {
9892
10039
  setSelectedText(text);
9893
10040
  } })); })),
9894
10041
  React.createElement(BBoxDebugger, { elementSVG: selectedElementSVG }),
@@ -10021,6 +10168,9 @@ var Editor = function (_a) {
10021
10168
  var handlePortSelected = React.useCallback(function (port, element) {
10022
10169
  editorContext.onPortSelectedHandler(port, element);
10023
10170
  }, [editorContext]);
10171
+ var handlePortsChanged = React.useCallback(function (ports, element) {
10172
+ element.ports = ports;
10173
+ }, [editorContext]);
10024
10174
  var handleElementContextMenu = React.useCallback(function (element, event) {
10025
10175
  editorContext.onElementContextMenuHandler(element, event);
10026
10176
  }, [editorContext]);
@@ -10052,6 +10202,7 @@ var Editor = function (_a) {
10052
10202
  editorContext.onLinkSelectedHandler(link);
10053
10203
  }, [editorContext]);
10054
10204
  var handleLinksChanged = React.useCallback(function (links) {
10205
+ console.log(links);
10055
10206
  editorContext.links = links;
10056
10207
  }, [editorContext]);
10057
10208
  var handleTextSelected = React.useCallback(function (text) {
@@ -10073,16 +10224,19 @@ var Editor = function (_a) {
10073
10224
  return null;
10074
10225
  }, [editorContext]);
10075
10226
  var handlePaperMouseMoved = React.useCallback(function (position) {
10227
+ console.log("handlePaperMouseMoved", position);
10076
10228
  editorContext.onPaperMouseMovedHandler(position);
10077
10229
  }, [editorContext]);
10078
10230
  var handlePaperMouseDown = React.useCallback(function (position) {
10231
+ console.log("handlePaperMouseDown", position);
10079
10232
  editorContext.onPaperMouseDownHandler(position);
10080
10233
  }, [editorContext]);
10081
10234
  var handlePaperMouseUp = React.useCallback(function (position) {
10082
10235
  editorContext.onPaperMouseUpHandler(position);
10083
10236
  }, [editorContext]);
10084
- return (React.createElement(ZoomContextProvider, null,
10085
- React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, onManuallyTriggerRenderElement: editorContext.onManuallyTriggerRenderElement.bind(editorContext), onManuallyTriggerRenderPort: editorContext.onManuallyTriggerRenderPort.bind(editorContext) })));
10237
+ return (React.createElement(EditorConfigurationContextProvider, { value: editorContext.configuration },
10238
+ React.createElement(ZoomContextProvider, null,
10239
+ React.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onPortsChanged: handlePortsChanged, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onElementMouseLeave: handleElementMouseLeave, onElementMouseMove: handleElementMouseMove, onElementMouseDown: handleElementMouseDown, onElementMouseUp: handleElementMouseUp, onElementsChanged: handleElementsChanged, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onLinksChanged: handleLinksChanged, onTextSelected: handleTextSelected, onTextsChanged: handleTextsChanged, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, onManuallyTriggerRenderElement: editorContext.onManuallyTriggerRenderElement.bind(editorContext), onManuallyTriggerRenderPort: editorContext.onManuallyTriggerRenderPort.bind(editorContext) }))));
10086
10240
  };
10087
10241
 
10088
10242
  exports.CircleRC = Circle;
@@ -10122,6 +10276,8 @@ exports.getElementRotationInfo = getElementRotationInfo;
10122
10276
  exports.getFirstIntersection = getFirstIntersection;
10123
10277
  exports.getFourVertexesOfBBoxFromElement = getFourVertexesOfBBoxFromElement;
10124
10278
  exports.getIntersectionPositions = getIntersectionPositions;
10279
+ exports.getPointsFromPathData = getPointsFromPathData;
10280
+ exports.getPointsFromPathElement = getPointsFromPathElement;
10125
10281
  exports.getPortAbsolutePosition = getPortAbsolutePosition;
10126
10282
  exports.getRectangleCorners = getRectangleCorners;
10127
10283
  exports.getRelativePosition = getRelativePosition;
@@ -21,6 +21,7 @@ interface PaperProps {
21
21
  onPortMouseUp?: (port: IPort, element: IElement) => void;
22
22
  onPortMoved?: (position: IPosition, port: IPort, element: IElement) => void;
23
23
  onPortSelected?: (port: IPort, element: IElement) => void;
24
+ onPortsChanged: (ports: IPort[], element: IElement) => void;
24
25
  onElementContextMenu?: (element: IElement, mouseEvent: React.MouseEvent<SVGElement>) => void;
25
26
  onElementMoved?: (position: IPosition, element: IElement, index: number) => void;
26
27
  onElementResized?: (size: ISize, element: IElement, index: number) => void;
@@ -4,6 +4,7 @@ interface RectangleProps extends IShape {
4
4
  fill?: string;
5
5
  stroke?: string;
6
6
  strokeWidth?: number;
7
+ strokeStyle?: string;
7
8
  }
8
9
  declare const Rectangle: React.ForwardRefExoticComponent<RectangleProps & React.RefAttributes<SVGSVGElement>>;
9
10
  export default Rectangle;
@@ -6,6 +6,7 @@ interface RectangularFrameProps extends IShape {
6
6
  strokeWidth?: number;
7
7
  frameColor?: string;
8
8
  frameWidth?: number;
9
+ strokeStyle?: string;
9
10
  }
10
11
  declare const RectangularFrame: React.ForwardRefExoticComponent<RectangularFrameProps & React.RefAttributes<SVGSVGElement>>;
11
12
  export default RectangularFrame;
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { IEditorConfiguration } from "../models/IEditorConfiguration";
3
+ export declare const useEditorConfiguration: () => IEditorConfiguration;
4
+ export declare const EditorConfigurationContextProvider: import("react").Provider<IEditorConfiguration | null>;
@@ -0,0 +1,3 @@
1
+ export interface IEditorConfiguration {
2
+ textFontSize?: number;
3
+ }
@@ -1,4 +1,5 @@
1
1
  /// <reference types="react" />
2
+ import { IEditorConfiguration } from "./IEditorConfiguration";
2
3
  import IElement from "./IElement";
3
4
  import IElementLink from "./IElementLink";
4
5
  import IPort from "./IPort";
@@ -9,6 +10,7 @@ export default interface IEditorContext {
9
10
  elements: IElement[];
10
11
  links: IElementLink[];
11
12
  texts: IPaperText[];
13
+ configuration: IEditorConfiguration;
12
14
  onCreatingPortByLinkingHandler?: (sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null;
13
15
  onCreatingLinkHandler?: (sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null;
14
16
  onPaperClicked: (callback: (position: IPosition) => void) => (() => void);
@@ -21,6 +21,7 @@ export default interface IElementLinkProps {
21
21
  markerDistanceFromPort?: number;
22
22
  markerSize?: number;
23
23
  onPathChanged?: (path: string, id: string) => void;
24
+ onPointsChanged?: (points: IPosition[], id: string) => void;
24
25
  onClickDelete?: (ev: React.MouseEvent) => void;
25
26
  onSelected?: () => void;
26
27
  onDeselected?: () => void;
@@ -29,6 +29,7 @@ interface IElementProps {
29
29
  onPortMoved?: onPortMovedHandler;
30
30
  onPortMouseDown?: onPortMouseDownHandler;
31
31
  onPortMouseUp?: onPortMouseUpHandler;
32
+ onPortsChanged?: (ports: IPort[], elementId: string) => void;
32
33
  portPlaceholderShape?: JSX.Element;
33
34
  onMouseMove?: (event: React.MouseEvent, elementId: string) => void;
34
35
  onMouseLeave?: (event: React.MouseEvent, elementId: string) => void;
@@ -7,6 +7,7 @@ export default interface IText {
7
7
  content: string;
8
8
  size: ISize;
9
9
  editable: boolean;
10
+ selectable?: boolean;
10
11
  position?: IPosition;
11
12
  align?: TextAlign;
12
13
  fontSize?: number;
@@ -12,6 +12,7 @@ export default interface ITextProps {
12
12
  parentAbsolutePosition?: IPosition;
13
13
  height: number;
14
14
  width: number;
15
+ selectable?: boolean;
15
16
  align?: TextAlign;
16
17
  fontSize?: number;
17
18
  border?: string;
@@ -6,14 +6,16 @@ import IPosition from "../position";
6
6
  import IPort from "../IPort";
7
7
  import ISize from "../size";
8
8
  import IEditorContext from "../IEditorContext";
9
+ import { IEditorConfiguration } from "../IEditorConfiguration";
9
10
  export declare class EditorContext implements IEditorContext {
10
11
  private _elements;
11
12
  private _links;
12
13
  private _texts;
13
14
  private _eventEmitter;
15
+ private _configuration;
14
16
  onCreatingPortByLinkingHandler?: ((sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null) | undefined;
15
17
  onCreatingLinkHandler?: ((sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null) | undefined;
16
- constructor(elements: IElement[], links: IElementLink[], texts: IPaperText[]);
18
+ constructor(elements: IElement[], links: IElementLink[], texts: IPaperText[], configuration?: IEditorConfiguration);
17
19
  private addEventListener;
18
20
  get elements(): IElement[];
19
21
  get links(): IElementLink[];
@@ -21,6 +23,7 @@ export declare class EditorContext implements IEditorContext {
21
23
  set elements(value: IElement[]);
22
24
  set links(value: IElementLink[]);
23
25
  set texts(value: IPaperText[]);
26
+ get configuration(): IEditorConfiguration;
24
27
  getElement(elementId: string): IElement | undefined;
25
28
  addElement(element: IElement): void;
26
29
  removeElement(elementId: string): void;
@@ -37,7 +37,7 @@ export default class Element implements IElement {
37
37
  textsPlaceHolderFlexStyle?: IFlexboxType;
38
38
  textsPlaceHolderFlexboxPosition?: IPosition;
39
39
  _eventEmitter: EventEmitter;
40
- constructor(id: string | null, x: number, y: number, width: number, height: number, cssClass?: string, renderShape?: (props: IElementProps) => JSX.Element, texts?: IText[], ports?: IPort[], portMovealeAreas?: IPosition[][], portSlideRailSVGClassName?: string, portDirection?: SubObjectDirection, parentElement?: Element, textsPlaceHolderClassName?: string, textsPlaceHolderFlexStyle?: IFlexboxType, textsPlaceHolderFlexboxPosition?: IPosition);
40
+ constructor(id: string | null, x: number, y: number, width: number, height: number, cssClass?: string, renderShape?: (props: IElementProps) => JSX.Element, texts?: IText[], ports?: IPort[], portMovealeAreas?: IPosition[][], portSlideRailSVGClassName?: string, portDirection?: SubObjectDirection, parentElement?: IElement, textsPlaceHolderClassName?: string, textsPlaceHolderFlexStyle?: IFlexboxType, textsPlaceHolderFlexboxPosition?: IPosition);
41
41
  get id(): string;
42
42
  get size(): ISize;
43
43
  set size(value: ISize);
@@ -20,5 +20,5 @@ export default class ElementLink implements IElementLink {
20
20
  label?: IText;
21
21
  sourceLabel?: IText;
22
22
  targetLabel?: IText;
23
- constructor(id: string | null, sourceElement: IElement, sourcePort: IPort, targetElement: IElement, targetPort: IPort, tempTargetPosition: IPosition, points?: IPosition[]);
23
+ constructor(id: string | null, sourceElement: IElement, sourcePort: IPort, targetElement?: IElement, targetPort?: IPort, tempTargetPosition?: IPosition, points?: IPosition[], path?: string, markerStart?: JSX.Element, markerEnd?: JSX.Element, markerDistanceFromPort?: number, markerSize?: number, label?: IText, sourceLabel?: IText, targetLabel?: IText);
24
24
  }