orcasvn-react-diagrams 0.1.52 → 0.1.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -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
  }
@@ -1710,9 +1715,9 @@ var paperEventEmitterContext = React.createContext({
1710
1715
  });
1711
1716
 
1712
1717
  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];
1718
+ 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;
1719
+ var _d = React.useState(false), isSelected = _d[0], setIsSelected = _d[1];
1720
+ var _e = React.useState(false), isEditing = _e[0], setIsEditing = _e[1];
1716
1721
  var absolutePosition = React.useMemo(function () {
1717
1722
  var _a, _b;
1718
1723
  return {
@@ -1721,7 +1726,7 @@ var Text = React.forwardRef(function (_a, ref) {
1721
1726
  };
1722
1727
  }, [x, y, parentAbsolutePosition === null || parentAbsolutePosition === void 0 ? void 0 : parentAbsolutePosition.x, parentAbsolutePosition === null || parentAbsolutePosition === void 0 ? void 0 : parentAbsolutePosition.y]);
1723
1728
  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;
1729
+ var _f = React.useContext(paperEventEmitterContext), onPaperClicked = _f.onPaperClicked, emitTextSelected = _f.emitTextSelected, onPortSelected = _f.onPortSelected, onElementSelected = _f.onElementSelected, onTextSelected = _f.onTextSelected;
1725
1730
  React.useEffect(function () {
1726
1731
  var paperClickListener = onPaperClicked(function (ev) {
1727
1732
  var _a;
@@ -1754,6 +1759,8 @@ var Text = React.forwardRef(function (_a, ref) {
1754
1759
  }, []);
1755
1760
  //Handle click on svg element
1756
1761
  var handleClick = function (ev) {
1762
+ if (!selectable)
1763
+ return;
1757
1764
  ev.stopPropagation();
1758
1765
  var position = {
1759
1766
  x: x,
@@ -7914,7 +7921,7 @@ var Port1 = React.forwardRef(function (props, ref) {
7914
7921
  var renderLabel = function (label) {
7915
7922
  var content = label.content, size = label.size;
7916
7923
  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) {
7924
+ 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
7925
  if (onPortLabelMoved) {
7919
7926
  var relativePosInSideEle = transformAbsPositionToRelativePositionInsideElement({ x: xOnPaper, y: yOnPaper }, parentAbsolutePosition);
7920
7927
  var newXPort = relativePosInSideEle.x - x;
@@ -8055,6 +8062,55 @@ function addPointToList(point, listPoints, path) {
8055
8062
  var addedIndex = getAddIndex(0, listPoints.length - 1);
8056
8063
  listPoints.splice(addedIndex, 0, point);
8057
8064
  return __spreadArray([], listPoints, true);
8065
+ }
8066
+ // Parse the d attribute of a path element and extract points from path commands
8067
+ function getPointsFromPathData(dAttribute) {
8068
+ var points = [];
8069
+ // Remove extra whitespace and split by command letters
8070
+ var cleanD = dAttribute.replace(/\s+/g, ' ').trim();
8071
+ // Regular expression to match path commands (M, L, C, etc.) and their values
8072
+ var commandRegex = /([MLCZmlcz])\s*([^MLCZmlcz]*)/g;
8073
+ var match;
8074
+ while ((match = commandRegex.exec(cleanD)) !== null) {
8075
+ var command = match[1].toUpperCase();
8076
+ var values = match[2].trim();
8077
+ if (values) {
8078
+ var coords = values.split(/[\s,]+/).map(Number).filter(function (num) { return !isNaN(num); });
8079
+ switch (command) {
8080
+ case 'M': // Move to
8081
+ if (coords.length >= 2) {
8082
+ points.push({ x: coords[0], y: coords[1] });
8083
+ }
8084
+ break;
8085
+ case 'L': // Line to
8086
+ if (coords.length >= 2) {
8087
+ points.push({ x: coords[0], y: coords[1] });
8088
+ }
8089
+ break;
8090
+ case 'C': // Cubic bezier curve
8091
+ // For cubic curves, we take the end point (last 2 coordinates)
8092
+ if (coords.length >= 6) {
8093
+ points.push({ x: coords[4], y: coords[5] });
8094
+ }
8095
+ break;
8096
+ case 'Q': // Quadratic bezier curve
8097
+ // For quadratic curves, we take the end point (last 2 coordinates)
8098
+ if (coords.length >= 4) {
8099
+ points.push({ x: coords[2], y: coords[3] });
8100
+ }
8101
+ break;
8102
+ }
8103
+ }
8104
+ }
8105
+ return points;
8106
+ }
8107
+ // Get points from a path element's d attribute
8108
+ function getPointsFromPathElement(pathElement) {
8109
+ var dAttribute = pathElement.getAttribute('d');
8110
+ if (!dAttribute) {
8111
+ return [];
8112
+ }
8113
+ return getPointsFromPathData(dAttribute);
8058
8114
  }
8059
8115
 
8060
8116
  //Defined remove icon for element link, shown when element link is selected.
@@ -8074,7 +8130,7 @@ function CloseIcon(_a) {
8074
8130
  // 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
8131
  var IElementLink = function (_a) {
8076
8132
  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;
8133
+ 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
8134
  var _g = React.useState(path), pathStr = _g[0], setPathStr = _g[1];
8079
8135
  var _h = React.useState(pointsProp !== null && pointsProp !== void 0 ? pointsProp : []), points = _h[0], setPoints = _h[1];
8080
8136
  var _j = React.useState(false), isDragging = _j[0], setIsDragging = _j[1];
@@ -8088,6 +8144,8 @@ var IElementLink = function (_a) {
8088
8144
  var labelRef = React.useRef(null);
8089
8145
  var sourceLabelRef = React.useRef(null);
8090
8146
  var targetLabelRef = React.useRef(null);
8147
+ var isFirstRender = React.useRef(true);
8148
+ var onPointsChangedRef = React.useRef();
8091
8149
  var angleMarkerStart = '0';
8092
8150
  var angleMarkerEnd = '0';
8093
8151
  var markerStartPosition;
@@ -8117,6 +8175,18 @@ var IElementLink = function (_a) {
8117
8175
  elementSelectedListener.off();
8118
8176
  };
8119
8177
  }, []);
8178
+ // Store onPointsChanged in a ref to avoid unnecessary re-renders
8179
+ React.useEffect(function () {
8180
+ onPointsChangedRef.current = onPointsChanged;
8181
+ }, [onPointsChanged]);
8182
+ React.useEffect(function () {
8183
+ var _a;
8184
+ if (isFirstRender.current) {
8185
+ isFirstRender.current = false;
8186
+ return;
8187
+ }
8188
+ (_a = onPointsChangedRef.current) === null || _a === void 0 ? void 0 : _a.call(onPointsChangedRef, points, id);
8189
+ }, [points]);
8120
8190
  React.useLayoutEffect(function () {
8121
8191
  var pointsList = __spreadArray(__spreadArray([sourcePosition], points, true), [targetPosition], false);
8122
8192
  var _pathStr = createSmoothPathString(pointsList, undefined, false);
@@ -8292,7 +8362,7 @@ var IElementLink = function (_a) {
8292
8362
  position.x += relativePositionTo.x;
8293
8363
  position.y += relativePositionTo.y;
8294
8364
  }
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 }));
8365
+ 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
8366
  };
8297
8367
  if ((_b = pathRef.current) === null || _b === void 0 ? void 0 : _b.getAttribute('d')) {
8298
8368
  if (markerStart) {
@@ -8495,15 +8565,18 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8495
8565
  //Listen trigger of Delete key, handle delete port is selected
8496
8566
  React.useEffect(function () {
8497
8567
  var listener = _paperEventEmitterContext.onCommandDeleteSelectedPort(function () {
8568
+ var _a;
8498
8569
  if (selectedPort) {
8499
- setPorts(function (prev) { return prev.filter(function (p) { return p.id !== selectedPort.id; }); });
8570
+ var newPorts = portsRef.current.filter(function (p) { return p.id !== selectedPort.id; });
8571
+ setPorts(newPorts);
8500
8572
  setSelectedPort(undefined);
8573
+ (_a = props.onPortsChanged) === null || _a === void 0 ? void 0 : _a.call(props, newPorts, id);
8501
8574
  }
8502
8575
  });
8503
8576
  return function () {
8504
8577
  listener.off();
8505
8578
  };
8506
- }, [selectedPort]);
8579
+ }, [selectedPort, props.onPortsChanged]);
8507
8580
  React.useEffect(function () {
8508
8581
  //Listener onMouseDown event on #paper-container
8509
8582
  var eventListener = _paperEventEmitterContext.onPaperClicked(function (ev) {
@@ -8842,7 +8915,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8842
8915
  }), texts === null || texts === void 0 ? void 0 :
8843
8916
  texts.map(function (t, index) {
8844
8917
  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); } });
8918
+ 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
8919
  }),
8847
8920
  children)));
8848
8921
  });
@@ -9440,6 +9513,17 @@ var Paper = function (props) {
9440
9513
  props.onLinksChanged(newLinks);
9441
9514
  }
9442
9515
  }, [props.onLinksChanged, links]);
9516
+ var handlePointsOfLinkChange = React.useCallback(function (points, id) {
9517
+ //Update path of element link, that changed
9518
+ // const prevLinks = linksRef.current;
9519
+ var updatedLinkIndex = links.findIndex(function (l) { return l.id === id; });
9520
+ links[updatedLinkIndex].points = points;
9521
+ var newLinks = __spreadArray([], links, true);
9522
+ setLinks(newLinks);
9523
+ if (props.onLinksChanged) {
9524
+ props.onLinksChanged(newLinks);
9525
+ }
9526
+ }, [props.onLinksChanged, links]);
9443
9527
  var handlePortMoved = React.useCallback(function (port, elementId, oldPosition, newPosition) {
9444
9528
  var _a;
9445
9529
  var element = elementsRef.current.find(function (e) { return e.id === elementId; });
@@ -9548,6 +9632,13 @@ var Paper = function (props) {
9548
9632
  setTempLink(null);
9549
9633
  }
9550
9634
  }, [paperEventEmitter, createElementLink, props.onPortMouseUp, props.onLinksChanged]);
9635
+ var handlePortsChanged = React.useCallback(function (ports, elementId) {
9636
+ var element = elementsRef.current.find(function (e) { return e.id === elementId; });
9637
+ if (element) {
9638
+ //broadcast ports changed to parent component
9639
+ props.onPortsChanged(ports, element);
9640
+ }
9641
+ }, [props.onPortsChanged]);
9551
9642
  var handleLinkLabelMoved = React.useCallback(function (newX, newY, index, labelType) {
9552
9643
  var prevLinks = linksRef.current;
9553
9644
  var newLinks = __spreadArray([], prevLinks, true);
@@ -9798,7 +9889,7 @@ var Paper = function (props) {
9798
9889
  //use the defined react element or the default Element component
9799
9890
  var ReactElement = element.reactElement || Element$1;
9800
9891
  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,
9892
+ 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
9893
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9803
9894
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined },
9804
9895
  element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree),
@@ -9863,7 +9954,7 @@ var Paper = function (props) {
9863
9954
  paperEventEmitter.emitElementResized(selectedElement, oldSize, newSize);
9864
9955
  setMouseDownedOnPaper(false);
9865
9956
  } }))));
9866
- }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave, selectedElement, selectedElementAbsPosition]);
9957
+ }, [handlePortsChanged, handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave, selectedElement, selectedElementAbsPosition]);
9867
9958
  var ElementsInTree = React.useMemo(function () {
9868
9959
  return elementsInTree.map(function (element, index) {
9869
9960
  return renderElementInTree(element);
@@ -9882,13 +9973,13 @@ var Paper = function (props) {
9882
9973
  }, targetPosition: {
9883
9974
  x: getAbsolutePosition(link.targetElement).x + link.targetPort.position.x,
9884
9975
  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) }));
9976
+ }, 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
9977
  }),
9887
9978
  (tempLink === null || tempLink === void 0 ? void 0 : tempLink.tempTargetPosition) && React.createElement(ElementLink, { id: tempLink.id, points: tempLink.points, sourcePosition: {
9888
9979
  x: getAbsolutePosition(tempLink.sourceElement).x + tempLink.sourcePort.position.x,
9889
9980
  y: getAbsolutePosition(tempLink.sourceElement).y + tempLink.sourcePort.position.y
9890
9981
  }, 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 () {
9982
+ 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
9983
  setSelectedText(text);
9893
9984
  } })); })),
9894
9985
  React.createElement(BBoxDebugger, { elementSVG: selectedElementSVG }),
@@ -10021,6 +10112,9 @@ var Editor = function (_a) {
10021
10112
  var handlePortSelected = React.useCallback(function (port, element) {
10022
10113
  editorContext.onPortSelectedHandler(port, element);
10023
10114
  }, [editorContext]);
10115
+ var handlePortsChanged = React.useCallback(function (ports, element) {
10116
+ element.ports = ports;
10117
+ }, [editorContext]);
10024
10118
  var handleElementContextMenu = React.useCallback(function (element, event) {
10025
10119
  editorContext.onElementContextMenuHandler(element, event);
10026
10120
  }, [editorContext]);
@@ -10082,7 +10176,7 @@ var Editor = function (_a) {
10082
10176
  editorContext.onPaperMouseUpHandler(position);
10083
10177
  }, [editorContext]);
10084
10178
  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) })));
10179
+ 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
10180
  };
10087
10181
 
10088
10182
  exports.CircleRC = Circle;
@@ -10122,6 +10216,8 @@ exports.getElementRotationInfo = getElementRotationInfo;
10122
10216
  exports.getFirstIntersection = getFirstIntersection;
10123
10217
  exports.getFourVertexesOfBBoxFromElement = getFourVertexesOfBBoxFromElement;
10124
10218
  exports.getIntersectionPositions = getIntersectionPositions;
10219
+ exports.getPointsFromPathData = getPointsFromPathData;
10220
+ exports.getPointsFromPathElement = getPointsFromPathElement;
10125
10221
  exports.getPortAbsolutePosition = getPortAbsolutePosition;
10126
10222
  exports.getRectangleCorners = getRectangleCorners;
10127
10223
  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;
@@ -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;
@@ -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
  }
@@ -7,12 +7,13 @@ export default class Text implements IText {
7
7
  private readonly _id;
8
8
  content: string;
9
9
  editable: boolean;
10
+ selectable?: boolean;
10
11
  size: ISize;
11
12
  position?: IPosition;
12
13
  align?: TextAlign;
13
14
  fontSize?: number;
14
15
  border?: string;
15
16
  style?: IFlexboxType;
16
- constructor(id: string | null, content: string, width: number, height: number, editable: boolean, x?: number, y?: number, align?: TextAlign, fontSize?: number, border?: string, style?: IFlexboxType);
17
+ constructor(id: string | null, content: string, width: number, height: number, editable: boolean, selectable?: boolean, x?: number, y?: number, align?: TextAlign, fontSize?: number, border?: string, style?: IFlexboxType);
17
18
  get id(): string;
18
19
  }
@@ -8,4 +8,6 @@ export declare function pathDataToD(pathData: IPathCommand[], decimals?: number)
8
8
  export declare function createSmoothPathString(points: IPosition[], smoothing?: number, close?: boolean): string;
9
9
  export declare function dist(p1: IPosition, p2: IPosition): number;
10
10
  export declare function addPointToList(point: IPosition, listPoints: IPosition[], path: SVGPathElement): IPosition[];
11
+ export declare function getPointsFromPathData(dAttribute: string): IPosition[];
12
+ export declare function getPointsFromPathElement(pathElement: SVGPathElement): IPosition[];
11
13
  export {};