orcasvn-react-diagrams 0.1.45 → 0.1.47

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
@@ -808,6 +808,7 @@ var EVENT_ELEMENT_SELECTED = 'elementSelected';
808
808
  var EVENT_ELEMENT_MOUSE_MOVE = 'elementMouseMove';
809
809
  var EVENT_ELEMENT_MOUSE_LEAVE = 'elementMouseLeave';
810
810
  var EVENT_ELEMENT_MOUSE_UP = 'elementMouseUp';
811
+ var EVENT_ELEMENT_MOUSE_DOWN = 'elementMouseDown';
811
812
  var EVENT_LINK_SELECTED = 'linkSelected';
812
813
  var EVENT_TEXT_SELECTED = 'textSelected';
813
814
  var EditorContext = /** @class */ (function () {
@@ -1014,6 +1015,13 @@ var EditorContext = /** @class */ (function () {
1014
1015
  EditorContext.prototype.onElementMouseUpHandler = function (ev, element) {
1015
1016
  this._eventEmitter.emit(EVENT_ELEMENT_MOUSE_UP, ev, element);
1016
1017
  };
1018
+ EditorContext.prototype.onElementMouseDown = function (callback) {
1019
+ return this.addEventListener(EVENT_ELEMENT_MOUSE_DOWN, callback);
1020
+ };
1021
+ /** @internal */
1022
+ EditorContext.prototype.onElementMouseDownHandler = function (ev, element) {
1023
+ this._eventEmitter.emit(EVENT_ELEMENT_MOUSE_DOWN, ev, element);
1024
+ };
1017
1025
  EditorContext.prototype.onLinkSelected = function (callback) {
1018
1026
  return this.addEventListener(EVENT_LINK_SELECTED, callback);
1019
1027
  };
@@ -1203,7 +1211,7 @@ var SelectionFrame = function (props) {
1203
1211
  var _a, _b;
1204
1212
  var propTargetSVGElement = props.targetSVGElement, propWidth = props.width, propHeight = props.height, propFramePadding = props.framePadding,
1205
1213
  // movingOffsetThreshold: propMovingOffsetThreshold,
1206
- propMovingRate = props.movingRate, propOnMove = props.onMove, propContainer = props.container, propResizability = props.resizability, propOnResize = props.onResize, PropDragDropHandlerElement = props.dragDropHandlerElement, propStrokeWidth = props.strokeWidth, propAnchor = props.anchor;
1214
+ propMovingRate = props.movingRate, propOnMouseDown = props.onMouseDown, propOnMouseUp = props.onMouseUp, propOnMove = props.onMove, propContainer = props.container, propResizability = props.resizability, propOnResize = props.onResize, PropDragDropHandlerElement = props.dragDropHandlerElement, propStrokeWidth = props.strokeWidth, propAnchor = props.anchor;
1207
1215
  var bbox = propTargetSVGElement === null || propTargetSVGElement === void 0 ? void 0 : propTargetSVGElement.getBBox();
1208
1216
  var _c = React.useState(propWidth || (bbox === null || bbox === void 0 ? void 0 : bbox.width) || MIN_ELEMENT_SIZE), width = _c[0], setWidth = _c[1];
1209
1217
  var _d = React.useState(propHeight || (bbox === null || bbox === void 0 ? void 0 : bbox.height) || MIN_ELEMENT_SIZE), height = _d[0], setHeight = _d[1];
@@ -1239,6 +1247,9 @@ var SelectionFrame = function (props) {
1239
1247
  setXFromMouse(xFromMouse_1);
1240
1248
  setYFromMouse(yFromMouse_1);
1241
1249
  }
1250
+ if (propOnMouseDown) {
1251
+ propOnMouseDown(event);
1252
+ }
1242
1253
  };
1243
1254
  var rectHandleMouseMove = React.useCallback(function (event) {
1244
1255
  var mouseEvent = event;
@@ -1333,7 +1344,7 @@ var SelectionFrame = function (props) {
1333
1344
  }
1334
1345
  return (React.createElement(React.Fragment, null,
1335
1346
  PropDragDropHandlerElement && React.createElement(PropDragDropHandlerElement, { dragging: draggingRect, onMouseDown: addRectHandleMouseDown }),
1336
- React.createElement("rect", { vectorEffect: "non-scaling-stroke", x: leftX, y: topY, width: width, height: height, fill: 'none', stroke: 'blue', strokeWidth: propStrokeWidth || 5, cursor: draggingRect ? 'grabbing' : 'grab', onMouseDown: addRectHandleMouseDown }),
1347
+ React.createElement("rect", { vectorEffect: "non-scaling-stroke", x: leftX, y: topY, width: width, height: height, fill: 'none', stroke: 'blue', strokeWidth: propStrokeWidth || 5, cursor: draggingRect ? 'grabbing' : 'grab', onMouseDown: addRectHandleMouseDown, onMouseUp: propOnMouseUp }),
1337
1348
  propResizability.enabled ?
1338
1349
  (React.createElement("circle", { cursor: 'se-resize', cx: leftX + width, cy: topY + height, r: r, fill: 'blue', stroke: 'blue', onMouseDown: circleHandleMouseDown })) : null));
1339
1350
  };
@@ -8359,10 +8370,11 @@ var Ruler = function (_a) {
8359
8370
  };
8360
8371
 
8361
8372
  var ElementWrapper = React.forwardRef(function (_a, ref) {
8362
- 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;
8363
- var handleMouseDown = function (ev) {
8364
- ev.stopPropagation();
8365
- };
8373
+ // const handleMouseDown = (ev: React.MouseEvent<SVGElement>) => {
8374
+ // ev.stopPropagation();
8375
+ // onMouseDown?.(ev);
8376
+ // }
8377
+ 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, onMouseDown = _a.onMouseDown;
8366
8378
  var handleClick = function (ev) {
8367
8379
  if (ev.type === 'click') {
8368
8380
  if (onClick)
@@ -8373,12 +8385,12 @@ var ElementWrapper = React.forwardRef(function (_a, ref) {
8373
8385
  onContextMenu(ev);
8374
8386
  }
8375
8387
  };
8376
- return (React.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));
8388
+ return (React.createElement("svg", { className: cssClass, x: x, y: y, onClick: handleClick, onContextMenu: handleClick, onMouseDown: onMouseDown, ref: ref, style: { overflow: "visible" }, onMouseMove: onMouseMove, onMouseLeave: onMouseLeave, onMouseUp: onMouseUp }, children));
8377
8389
  });
8378
8390
 
8379
8391
  var Element = React.forwardRef(function (props, forwardedRef) {
8380
8392
  var _a, _b;
8381
- 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, parentAbsolutePosition = props.parentAbsolutePosition; props.textsPlaceHolderFlexStyle; props.textsPlaceHolderFlexboxPosition; props.textsPlaceHolderClassName; var 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, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
8393
+ 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, parentAbsolutePosition = props.parentAbsolutePosition; props.textsPlaceHolderFlexStyle; props.textsPlaceHolderFlexboxPosition; props.textsPlaceHolderClassName; var 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, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseDown = props.onMouseDown, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
8382
8394
  var _c = React.useState(), selectedPort = _c[0], setSelectedPort = _c[1];
8383
8395
  var _d = React.useState(), hoveredPort = _d[0], setHoveredPort = _d[1];
8384
8396
  var _e = React.useState([]), ports = _e[0], setPorts = _e[1];
@@ -8679,6 +8691,10 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8679
8691
  setPotentialPortPosition(undefined);
8680
8692
  }
8681
8693
  }
8694
+ var handleElementMouseDown = function (ev) {
8695
+ ev.stopPropagation();
8696
+ onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(ev, id);
8697
+ };
8682
8698
  var handleElementMouseUp = function (ev) {
8683
8699
  ev.stopPropagation();
8684
8700
  onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(ev, id);
@@ -8780,7 +8796,7 @@ var Element = React.forwardRef(function (props, forwardedRef) {
8780
8796
  keepRatio: false
8781
8797
  },
8782
8798
  });
8783
- return (React.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; } },
8799
+ return (React.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, onMouseDown: handleElementMouseDown, onMouseUp: handleElementMouseUp, onContextMenu: function (e) { return onContextMenu ? onContextMenu(id, e, elementRef.current) : true; } },
8784
8800
  renderedShape,
8785
8801
  potentialPortPosition && (portPlaceholderShape
8786
8802
  ? React.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
@@ -9622,6 +9638,18 @@ var Paper = function (props) {
9622
9638
  width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width,
9623
9639
  height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height,
9624
9640
  //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
9641
+ onMouseDown: function (ev) {
9642
+ var _a;
9643
+ if (selectedElement) {
9644
+ (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9645
+ }
9646
+ },
9647
+ onMouseUp: function (ev) {
9648
+ var _a;
9649
+ if (selectedElement) {
9650
+ (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9651
+ }
9652
+ },
9625
9653
  onMove: function (newX, newY) {
9626
9654
  if (!selectedElement)
9627
9655
  return;
@@ -9790,6 +9818,13 @@ var Paper = function (props) {
9790
9818
  (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, element);
9791
9819
  }
9792
9820
  }, [props.onElementMouseUp]);
9821
+ var handleMouseDown = React.useCallback(function (ev, elementId) {
9822
+ var _a;
9823
+ var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
9824
+ if (element) {
9825
+ (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, element);
9826
+ }
9827
+ }, [props.onElementMouseDown]);
9793
9828
  var handleMouseMove = React.useCallback(function (ev, elementId) {
9794
9829
  var _a;
9795
9830
  var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
@@ -9808,7 +9843,7 @@ var Paper = function (props) {
9808
9843
  //use the defined react element or the default Element component
9809
9844
  var ReactElement = element.reactElement || Element$1;
9810
9845
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
9811
- 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, 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,
9846
+ 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,
9812
9847
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9813
9848
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
9814
9849
  }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave]);
@@ -9910,6 +9945,9 @@ var Editor = function (_a) {
9910
9945
  var handleElementMouseMove = React.useCallback(function (ev, element) {
9911
9946
  editorContext.onElementMouseMoveHandler(ev, element);
9912
9947
  }, [editorContext]);
9948
+ var handleElementMouseDown = React.useCallback(function (ev, element) {
9949
+ editorContext.onElementMouseDownHandler(ev, element);
9950
+ }, [editorContext]);
9913
9951
  var handleElementMouseUp = React.useCallback(function (ev, element) {
9914
9952
  editorContext.onElementMouseUpHandler(ev, element);
9915
9953
  }, [editorContext]);
@@ -9949,7 +9987,7 @@ var Editor = function (_a) {
9949
9987
  var handlePaperMouseUp = React.useCallback(function (position) {
9950
9988
  editorContext.onPaperMouseUpHandler(position);
9951
9989
  }, [editorContext]);
9952
- return (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, 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) }));
9990
+ return (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) }));
9953
9991
  };
9954
9992
 
9955
9993
  exports.CircleRC = Circle;
@@ -12,6 +12,7 @@ interface IElementWrapper {
12
12
  onMouseMove?: (event: React.MouseEvent) => void;
13
13
  onMouseLeave?: (event: React.MouseEvent) => void;
14
14
  onMouseUp?: (event: React.MouseEvent) => void;
15
+ onMouseDown?: (event: React.MouseEvent) => void;
15
16
  }
16
17
  declare const ElementWrapper: React.ForwardRefExoticComponent<IElementWrapper & React.RefAttributes<SVGSVGElement>>;
17
18
  export default ElementWrapper;
@@ -26,6 +26,7 @@ interface PaperProps {
26
26
  onElementResized?: (size: ISize, element: IElement, index: number) => void;
27
27
  onElementSelected?: (element: IElement) => void;
28
28
  onElementDeleted?: (element: IElement) => void;
29
+ onElementMouseDown?: (ev: React.MouseEvent, element: IElement) => void;
29
30
  onElementMouseUp?: (ev: React.MouseEvent, element: IElement) => void;
30
31
  onElementMouseMove?: (ev: React.MouseEvent, element: IElement) => void;
31
32
  onElementMouseLeave?: (ev: React.MouseEvent, element: IElement) => void;
@@ -26,6 +26,7 @@ export default interface IEditorContext {
26
26
  onElementMouseLeave: (callback: (ev: React.MouseEvent, element: IElement) => void) => (() => void);
27
27
  onElementMouseMove: (callback: (ev: React.MouseEvent, element: IElement) => void) => (() => void);
28
28
  onElementMouseUp: (callback: (ev: React.MouseEvent, element: IElement) => void) => (() => void);
29
+ onElementMouseDown: (callback: (ev: React.MouseEvent, element: IElement) => void) => (() => void);
29
30
  onLinkSelected: (callback: (link: IElementLink) => void) => (() => void);
30
31
  onTextSelected: (callback: (text: IText) => void) => (() => void);
31
32
  getElement(elementId: string): IElement | undefined;
@@ -32,6 +32,7 @@ interface IElementProps {
32
32
  portPlaceholderShape?: JSX.Element;
33
33
  onMouseMove?: (event: React.MouseEvent, elementId: string) => void;
34
34
  onMouseLeave?: (event: React.MouseEvent, elementId: string) => void;
35
+ onMouseDown?: (event: React.MouseEvent, elementId: string) => void;
35
36
  onMouseUp?: (event: React.MouseEvent, elementId: string) => void;
36
37
  onMouseUpAtLinkedPortPlaceholder?: (link: IElementLink, position: IPosition, targetElementId: string) => void;
37
38
  onTextUpdated?: (elmentId: string, textId: string, newTextContent: string) => void;
@@ -8,6 +8,8 @@ interface ISelectionFrameProps {
8
8
  width?: number;
9
9
  height?: number;
10
10
  targetSVGElement?: SVGSVGElement;
11
+ onMouseDown?: (event: React.MouseEvent<SVGRectElement>) => void;
12
+ onMouseUp?: (event: React.MouseEvent<SVGRectElement>) => void;
11
13
  onMove?: (x: number, y: number) => void;
12
14
  onResize?: (width: number, height: number) => void;
13
15
  resizability: IResizability;
@@ -45,6 +45,7 @@ export declare class EditorContext implements IEditorContext {
45
45
  onElementMouseMove(callback: (ev: React.MouseEvent, element: IElement) => void): () => void;
46
46
  onElementMouseLeave(callback: (ev: React.MouseEvent, element: IElement) => void): () => void;
47
47
  onElementMouseUp(callback: (ev: React.MouseEvent, element: IElement) => void): () => void;
48
+ onElementMouseDown(callback: (ev: React.MouseEvent, element: IElement) => void): () => void;
48
49
  onLinkSelected(callback: (link: IElementLink) => void): () => void;
49
50
  onTextSelected(callback: (text: IText) => void): () => void;
50
51
  triggerRenderElement(elementId: string): void;
package/dist/esm/index.js CHANGED
@@ -804,6 +804,7 @@ var EVENT_ELEMENT_SELECTED = 'elementSelected';
804
804
  var EVENT_ELEMENT_MOUSE_MOVE = 'elementMouseMove';
805
805
  var EVENT_ELEMENT_MOUSE_LEAVE = 'elementMouseLeave';
806
806
  var EVENT_ELEMENT_MOUSE_UP = 'elementMouseUp';
807
+ var EVENT_ELEMENT_MOUSE_DOWN = 'elementMouseDown';
807
808
  var EVENT_LINK_SELECTED = 'linkSelected';
808
809
  var EVENT_TEXT_SELECTED = 'textSelected';
809
810
  var EditorContext = /** @class */ (function () {
@@ -1010,6 +1011,13 @@ var EditorContext = /** @class */ (function () {
1010
1011
  EditorContext.prototype.onElementMouseUpHandler = function (ev, element) {
1011
1012
  this._eventEmitter.emit(EVENT_ELEMENT_MOUSE_UP, ev, element);
1012
1013
  };
1014
+ EditorContext.prototype.onElementMouseDown = function (callback) {
1015
+ return this.addEventListener(EVENT_ELEMENT_MOUSE_DOWN, callback);
1016
+ };
1017
+ /** @internal */
1018
+ EditorContext.prototype.onElementMouseDownHandler = function (ev, element) {
1019
+ this._eventEmitter.emit(EVENT_ELEMENT_MOUSE_DOWN, ev, element);
1020
+ };
1013
1021
  EditorContext.prototype.onLinkSelected = function (callback) {
1014
1022
  return this.addEventListener(EVENT_LINK_SELECTED, callback);
1015
1023
  };
@@ -1199,7 +1207,7 @@ var SelectionFrame = function (props) {
1199
1207
  var _a, _b;
1200
1208
  var propTargetSVGElement = props.targetSVGElement, propWidth = props.width, propHeight = props.height, propFramePadding = props.framePadding,
1201
1209
  // movingOffsetThreshold: propMovingOffsetThreshold,
1202
- propMovingRate = props.movingRate, propOnMove = props.onMove, propContainer = props.container, propResizability = props.resizability, propOnResize = props.onResize, PropDragDropHandlerElement = props.dragDropHandlerElement, propStrokeWidth = props.strokeWidth, propAnchor = props.anchor;
1210
+ propMovingRate = props.movingRate, propOnMouseDown = props.onMouseDown, propOnMouseUp = props.onMouseUp, propOnMove = props.onMove, propContainer = props.container, propResizability = props.resizability, propOnResize = props.onResize, PropDragDropHandlerElement = props.dragDropHandlerElement, propStrokeWidth = props.strokeWidth, propAnchor = props.anchor;
1203
1211
  var bbox = propTargetSVGElement === null || propTargetSVGElement === void 0 ? void 0 : propTargetSVGElement.getBBox();
1204
1212
  var _c = React.useState(propWidth || (bbox === null || bbox === void 0 ? void 0 : bbox.width) || MIN_ELEMENT_SIZE), width = _c[0], setWidth = _c[1];
1205
1213
  var _d = React.useState(propHeight || (bbox === null || bbox === void 0 ? void 0 : bbox.height) || MIN_ELEMENT_SIZE), height = _d[0], setHeight = _d[1];
@@ -1235,6 +1243,9 @@ var SelectionFrame = function (props) {
1235
1243
  setXFromMouse(xFromMouse_1);
1236
1244
  setYFromMouse(yFromMouse_1);
1237
1245
  }
1246
+ if (propOnMouseDown) {
1247
+ propOnMouseDown(event);
1248
+ }
1238
1249
  };
1239
1250
  var rectHandleMouseMove = useCallback(function (event) {
1240
1251
  var mouseEvent = event;
@@ -1329,7 +1340,7 @@ var SelectionFrame = function (props) {
1329
1340
  }
1330
1341
  return (React.createElement(React.Fragment, null,
1331
1342
  PropDragDropHandlerElement && React.createElement(PropDragDropHandlerElement, { dragging: draggingRect, onMouseDown: addRectHandleMouseDown }),
1332
- React.createElement("rect", { vectorEffect: "non-scaling-stroke", x: leftX, y: topY, width: width, height: height, fill: 'none', stroke: 'blue', strokeWidth: propStrokeWidth || 5, cursor: draggingRect ? 'grabbing' : 'grab', onMouseDown: addRectHandleMouseDown }),
1343
+ React.createElement("rect", { vectorEffect: "non-scaling-stroke", x: leftX, y: topY, width: width, height: height, fill: 'none', stroke: 'blue', strokeWidth: propStrokeWidth || 5, cursor: draggingRect ? 'grabbing' : 'grab', onMouseDown: addRectHandleMouseDown, onMouseUp: propOnMouseUp }),
1333
1344
  propResizability.enabled ?
1334
1345
  (React.createElement("circle", { cursor: 'se-resize', cx: leftX + width, cy: topY + height, r: r, fill: 'blue', stroke: 'blue', onMouseDown: circleHandleMouseDown })) : null));
1335
1346
  };
@@ -8355,10 +8366,11 @@ var Ruler = function (_a) {
8355
8366
  };
8356
8367
 
8357
8368
  var ElementWrapper = forwardRef(function (_a, ref) {
8358
- 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;
8359
- var handleMouseDown = function (ev) {
8360
- ev.stopPropagation();
8361
- };
8369
+ // const handleMouseDown = (ev: React.MouseEvent<SVGElement>) => {
8370
+ // ev.stopPropagation();
8371
+ // onMouseDown?.(ev);
8372
+ // }
8373
+ 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, onMouseDown = _a.onMouseDown;
8362
8374
  var handleClick = function (ev) {
8363
8375
  if (ev.type === 'click') {
8364
8376
  if (onClick)
@@ -8369,12 +8381,12 @@ var ElementWrapper = forwardRef(function (_a, ref) {
8369
8381
  onContextMenu(ev);
8370
8382
  }
8371
8383
  };
8372
- return (React.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));
8384
+ return (React.createElement("svg", { className: cssClass, x: x, y: y, onClick: handleClick, onContextMenu: handleClick, onMouseDown: onMouseDown, ref: ref, style: { overflow: "visible" }, onMouseMove: onMouseMove, onMouseLeave: onMouseLeave, onMouseUp: onMouseUp }, children));
8373
8385
  });
8374
8386
 
8375
8387
  var Element = forwardRef(function (props, forwardedRef) {
8376
8388
  var _a, _b;
8377
- 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, parentAbsolutePosition = props.parentAbsolutePosition; props.textsPlaceHolderFlexStyle; props.textsPlaceHolderFlexboxPosition; props.textsPlaceHolderClassName; var 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, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
8389
+ 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, parentAbsolutePosition = props.parentAbsolutePosition; props.textsPlaceHolderFlexStyle; props.textsPlaceHolderFlexboxPosition; props.textsPlaceHolderClassName; var 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, onMouseMove = props.onMouseMove, onMouseLeave = props.onMouseLeave, onMouseUp = props.onMouseUp, onMouseDown = props.onMouseDown, onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
8378
8390
  var _c = useState(), selectedPort = _c[0], setSelectedPort = _c[1];
8379
8391
  var _d = useState(), hoveredPort = _d[0], setHoveredPort = _d[1];
8380
8392
  var _e = useState([]), ports = _e[0], setPorts = _e[1];
@@ -8675,6 +8687,10 @@ var Element = forwardRef(function (props, forwardedRef) {
8675
8687
  setPotentialPortPosition(undefined);
8676
8688
  }
8677
8689
  }
8690
+ var handleElementMouseDown = function (ev) {
8691
+ ev.stopPropagation();
8692
+ onMouseDown === null || onMouseDown === void 0 ? void 0 : onMouseDown(ev, id);
8693
+ };
8678
8694
  var handleElementMouseUp = function (ev) {
8679
8695
  ev.stopPropagation();
8680
8696
  onMouseUp === null || onMouseUp === void 0 ? void 0 : onMouseUp(ev, id);
@@ -8776,7 +8792,7 @@ var Element = forwardRef(function (props, forwardedRef) {
8776
8792
  keepRatio: false
8777
8793
  },
8778
8794
  });
8779
- return (React.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; } },
8795
+ return (React.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, onMouseDown: handleElementMouseDown, onMouseUp: handleElementMouseUp, onContextMenu: function (e) { return onContextMenu ? onContextMenu(id, e, elementRef.current) : true; } },
8780
8796
  renderedShape,
8781
8797
  potentialPortPosition && (portPlaceholderShape
8782
8798
  ? React.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
@@ -9618,6 +9634,18 @@ var Paper = function (props) {
9618
9634
  width: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.width,
9619
9635
  height: selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.size.height,
9620
9636
  //movingOffsetThreshold: ELEMENT_MOVING_OFFSET_THRESHOLD,
9637
+ onMouseDown: function (ev) {
9638
+ var _a;
9639
+ if (selectedElement) {
9640
+ (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9641
+ }
9642
+ },
9643
+ onMouseUp: function (ev) {
9644
+ var _a;
9645
+ if (selectedElement) {
9646
+ (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, selectedElement);
9647
+ }
9648
+ },
9621
9649
  onMove: function (newX, newY) {
9622
9650
  if (!selectedElement)
9623
9651
  return;
@@ -9786,6 +9814,13 @@ var Paper = function (props) {
9786
9814
  (_a = props.onElementMouseUp) === null || _a === void 0 ? void 0 : _a.call(props, ev, element);
9787
9815
  }
9788
9816
  }, [props.onElementMouseUp]);
9817
+ var handleMouseDown = useCallback(function (ev, elementId) {
9818
+ var _a;
9819
+ var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
9820
+ if (element) {
9821
+ (_a = props.onElementMouseDown) === null || _a === void 0 ? void 0 : _a.call(props, ev, element);
9822
+ }
9823
+ }, [props.onElementMouseDown]);
9789
9824
  var handleMouseMove = useCallback(function (ev, elementId) {
9790
9825
  var _a;
9791
9826
  var element = elementsRef.current.find(function (ele) { return ele.id === elementId; });
@@ -9804,7 +9839,7 @@ var Paper = function (props) {
9804
9839
  //use the defined react element or the default Element component
9805
9840
  var ReactElement = element.reactElement || Element$1;
9806
9841
  return (React.createElement("g", { id: "group-of-element-".concat(element.id), key: element.id },
9807
- 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 === PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === PositioningAnchor.Center ? element.position.y - element.size.height / 2 : element.position.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, onMouseUp: handleMouseUp, 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,
9842
+ 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 === PositioningAnchor.Center ? element.position.x - element.size.width / 2 : element.position.x, y: element.positionAnchor === 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,
9808
9843
  // portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
9809
9844
  onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition, parentAbsolutePosition: element.parentElement ? getAbsolutePosition(element.parentElement) : undefined }, element.childrenElementsInTree && element.childrenElementsInTree.map(renderElementInTree))));
9810
9845
  }, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange, handleMouseUp, handleMouseMove, handleMouseLeave]);
@@ -9906,6 +9941,9 @@ var Editor = function (_a) {
9906
9941
  var handleElementMouseMove = useCallback(function (ev, element) {
9907
9942
  editorContext.onElementMouseMoveHandler(ev, element);
9908
9943
  }, [editorContext]);
9944
+ var handleElementMouseDown = useCallback(function (ev, element) {
9945
+ editorContext.onElementMouseDownHandler(ev, element);
9946
+ }, [editorContext]);
9909
9947
  var handleElementMouseUp = useCallback(function (ev, element) {
9910
9948
  editorContext.onElementMouseUpHandler(ev, element);
9911
9949
  }, [editorContext]);
@@ -9945,7 +9983,7 @@ var Editor = function (_a) {
9945
9983
  var handlePaperMouseUp = useCallback(function (position) {
9946
9984
  editorContext.onPaperMouseUpHandler(position);
9947
9985
  }, [editorContext]);
9948
- return (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, 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) }));
9986
+ return (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) }));
9949
9987
  };
9950
9988
 
9951
9989
  export { Circle as CircleRC, Crescent as CrescentRC, CustomShape as CustomShapeRC, EditorContext, Element$2 as Element, ElementLink$1 as ElementLink, ElementLink as ElementLinkRC, Port$1 as Port, Port as PortRC, PositioningAnchor, Rectangle as RectangleRC, RectangularFrame as RectangularFrameRC, ResizingDirection, ShapeWrapper as ShapeWrapperRC, SubObjectDirection, Text$2 as Text, TextAlign, Text$1 as TextRC, addPointToList, calculateAngleWithOx, checkPointContainsPolygon, checkPositionOnLine, checkSamePosition, configureLogger, correctPortPositionInElement, createSmoothPathString, Editor as default, degreeToRadian, diamondEdgeInsideSquare, dist, findNearestPointOnSegment, findNearestPosition, findNearestProjectedPoint, generateSubstitutePosition, generateUniqueId, getAbsolutePosition, getCurvePathData, getElementRotationInfo, getFirstIntersection, getFourVertexesOfBBoxFromElement, getIntersectionPositions, getPortAbsolutePosition, getRectangleCorners, getRelativePosition, getRotatedRectangleCoordinates, getRotatedSVGBBox, getSVGBBoxOutsideTransformedParent, makePolygonOfElement, pathDataToD, removeDuplicatePosition, transformAbsPositionToElementRelativePosition, transformAbsPositionToRelativePositionInsideElement };