orcasvn-react-diagrams 0.1.26 → 0.1.28
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 +179 -109
- package/dist/cjs/types/components/editor.d.ts +2 -2
- package/dist/cjs/types/components/paper.d.ts +2 -0
- package/dist/cjs/types/models/IEditorContext.d.ts +2 -0
- package/dist/cjs/types/models/IElement.d.ts +0 -3
- package/dist/cjs/types/models/IElementProps.d.ts +1 -1
- package/dist/cjs/types/models/IPort.d.ts +0 -2
- package/dist/cjs/types/models/IPortProps.d.ts +0 -1
- package/dist/cjs/types/models/implementations/EditorContext.d.ts +2 -0
- package/dist/cjs/types/models/implementations/Element.d.ts +0 -3
- package/dist/cjs/types/models/implementations/Port.d.ts +0 -2
- package/dist/cjs/types/utils/positionUtil.d.ts +21 -0
- package/dist/esm/index.js +179 -109
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/editor.d.ts +2 -2
- package/dist/esm/types/components/paper.d.ts +2 -0
- package/dist/esm/types/models/IEditorContext.d.ts +2 -0
- package/dist/esm/types/models/IElement.d.ts +0 -3
- package/dist/esm/types/models/IElementProps.d.ts +1 -1
- package/dist/esm/types/models/IPort.d.ts +0 -2
- package/dist/esm/types/models/IPortProps.d.ts +0 -1
- package/dist/esm/types/models/implementations/EditorContext.d.ts +2 -0
- package/dist/esm/types/models/implementations/Element.d.ts +0 -3
- package/dist/esm/types/models/implementations/Port.d.ts +0 -2
- package/dist/esm/types/utils/positionUtil.d.ts +21 -0
- package/dist/index.d.ts +6 -13
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -442,7 +442,6 @@ function generateUniqueId() {
|
|
|
442
442
|
return v4();
|
|
443
443
|
}
|
|
444
444
|
|
|
445
|
-
var MANUALLY_TRIGGER_RENDER$1 = 'manuallyTriggerRender';
|
|
446
445
|
var Element$2 = /** @class */ (function () {
|
|
447
446
|
function Element(x, y, width, height, cssClass, renderShape, texts, ports, portMovealeAreas, portSlideRailSVGClassName, portDirection, parentElement, textsPlaceHolderClassName, textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition) {
|
|
448
447
|
if (portMovealeAreas === void 0) { portMovealeAreas = []; }
|
|
@@ -467,27 +466,26 @@ var Element$2 = /** @class */ (function () {
|
|
|
467
466
|
this.textsPlaceHolderFlexStyle = textsPlaceHolderFlexStyle;
|
|
468
467
|
this.textsPlaceHolderFlexboxPosition = textsPlaceHolderFlexboxPosition;
|
|
469
468
|
}
|
|
470
|
-
Element.prototype.manuallyTriggerRender = function () {
|
|
471
|
-
//TODO: Implement this
|
|
472
|
-
this._eventEmitter.emit(MANUALLY_TRIGGER_RENDER$1);
|
|
473
|
-
};
|
|
474
|
-
Element.prototype.manuallyTriggerRenderHandler = function (callback) {
|
|
475
|
-
var _this = this;
|
|
476
|
-
//TODO: Implement this
|
|
477
|
-
this._eventEmitter.on(MANUALLY_TRIGGER_RENDER$1, callback);
|
|
478
|
-
var canceller = function () {
|
|
479
|
-
_this._eventEmitter.off(MANUALLY_TRIGGER_RENDER$1, callback);
|
|
480
|
-
};
|
|
481
|
-
return canceller;
|
|
482
|
-
};
|
|
483
|
-
Element.prototype.manuallyTriggerRenderPort = function (portId) {
|
|
484
|
-
//TODO: Implement this
|
|
485
|
-
var port = this.getPort(portId);
|
|
486
|
-
if (port) {
|
|
487
|
-
port.manuallyTriggerRender();
|
|
488
|
-
}
|
|
489
|
-
};
|
|
490
469
|
Object.defineProperty(Element.prototype, "id", {
|
|
470
|
+
// public manuallyTriggerRender() {
|
|
471
|
+
// //TODO: Implement this
|
|
472
|
+
// this._eventEmitter.emit(MANUALLY_TRIGGER_RENDER);
|
|
473
|
+
// }
|
|
474
|
+
// public manuallyTriggerRenderHandler(callback: () => void) {
|
|
475
|
+
// //TODO: Implement this
|
|
476
|
+
// this._eventEmitter.on(MANUALLY_TRIGGER_RENDER, callback);
|
|
477
|
+
// const canceller = () => {
|
|
478
|
+
// this._eventEmitter.off(MANUALLY_TRIGGER_RENDER, callback);
|
|
479
|
+
// }
|
|
480
|
+
// return canceller;
|
|
481
|
+
// }
|
|
482
|
+
// public manuallyTriggerRenderPort(portId: string) {
|
|
483
|
+
// //TODO: Implement this
|
|
484
|
+
// const port = this.getPort(portId);
|
|
485
|
+
// if (port) {
|
|
486
|
+
// port.manuallyTriggerRender();
|
|
487
|
+
// }
|
|
488
|
+
// }
|
|
491
489
|
get: function () {
|
|
492
490
|
return this._id;
|
|
493
491
|
},
|
|
@@ -672,7 +670,6 @@ var CustomShape = React$1.forwardRef(function (props, ref) {
|
|
|
672
670
|
return (React$1.createElement(ShapeWrapper, __assign({}, props, { ref: ref }), props.children));
|
|
673
671
|
});
|
|
674
672
|
|
|
675
|
-
var MANUALLY_TRIGGER_RENDER = 'manuallyTriggerRender';
|
|
676
673
|
var Port$1 = /** @class */ (function () {
|
|
677
674
|
function Port(x, y, label, shapeRenderer, width, height) {
|
|
678
675
|
var _this = this;
|
|
@@ -703,18 +700,6 @@ var Port$1 = /** @class */ (function () {
|
|
|
703
700
|
enumerable: false,
|
|
704
701
|
configurable: true
|
|
705
702
|
});
|
|
706
|
-
Port.prototype.manuallyTriggerRender = function () {
|
|
707
|
-
//TODO: Implement this
|
|
708
|
-
this._eventEmitter.emit(MANUALLY_TRIGGER_RENDER);
|
|
709
|
-
};
|
|
710
|
-
Port.prototype.manuallyTriggerRenderHandler = function (callback) {
|
|
711
|
-
var _this = this;
|
|
712
|
-
this._eventEmitter.on(MANUALLY_TRIGGER_RENDER, callback);
|
|
713
|
-
var canceller = function () {
|
|
714
|
-
_this._eventEmitter.off(MANUALLY_TRIGGER_RENDER, callback);
|
|
715
|
-
};
|
|
716
|
-
return canceller;
|
|
717
|
-
};
|
|
718
703
|
return Port;
|
|
719
704
|
}());
|
|
720
705
|
|
|
@@ -779,6 +764,9 @@ var Text$2 = /** @class */ (function () {
|
|
|
779
764
|
return Text;
|
|
780
765
|
}());
|
|
781
766
|
|
|
767
|
+
var EVENT_MANUALLY_RENDER_ELEMENT = 'manuallyRenderElement';
|
|
768
|
+
var EVENT_MANUALLY_RENDER_PORT = 'manuallyRenderPort';
|
|
769
|
+
var EVENT_EDITOR_CONTEXT_UPDATED = 'editorContextUpdated';
|
|
782
770
|
var EVENT_PAPER_CLICKED = 'paperClicked';
|
|
783
771
|
var EVENT_PAPER_MOUSE_MOVED = 'paperMouseMoved';
|
|
784
772
|
var EVENT_PAPER_MOUSE_DOWN = 'paperMouseDown';
|
|
@@ -793,6 +781,15 @@ var EVENT_LINK_SELECTED = 'linkSelected';
|
|
|
793
781
|
var EVENT_TEXT_SELECTED = 'textSelected';
|
|
794
782
|
var EditorContext = /** @class */ (function () {
|
|
795
783
|
function EditorContext(elements, links, texts) {
|
|
784
|
+
var _this = this;
|
|
785
|
+
/** @internal */
|
|
786
|
+
this.onEditorContextUpdated = function (callback) {
|
|
787
|
+
_this._eventEmitter.on(EVENT_EDITOR_CONTEXT_UPDATED, callback);
|
|
788
|
+
var off = function () {
|
|
789
|
+
_this._eventEmitter.off(EVENT_EDITOR_CONTEXT_UPDATED, callback);
|
|
790
|
+
};
|
|
791
|
+
return off;
|
|
792
|
+
};
|
|
796
793
|
this._elements = elements;
|
|
797
794
|
this._links = links;
|
|
798
795
|
this._texts = texts;
|
|
@@ -832,27 +829,33 @@ var EditorContext = /** @class */ (function () {
|
|
|
832
829
|
};
|
|
833
830
|
EditorContext.prototype.addElement = function (element) {
|
|
834
831
|
this._elements = __spreadArray(__spreadArray([], this._elements, true), [element], false);
|
|
832
|
+
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
835
833
|
};
|
|
836
834
|
EditorContext.prototype.removeElement = function (elementId) {
|
|
837
835
|
this._elements = this._elements.filter(function (e) { return e.id !== elementId; });
|
|
836
|
+
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
838
837
|
};
|
|
839
838
|
EditorContext.prototype.getLink = function (linkId) {
|
|
840
839
|
return this._links.find(function (l) { return l.id === linkId; });
|
|
841
840
|
};
|
|
842
841
|
EditorContext.prototype.addLink = function (link) {
|
|
843
842
|
this._links = __spreadArray(__spreadArray([], this._links, true), [link], false);
|
|
843
|
+
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
844
844
|
};
|
|
845
845
|
EditorContext.prototype.removeLink = function (linkId) {
|
|
846
846
|
this._links = this._links.filter(function (l) { return l.id !== linkId; });
|
|
847
|
+
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
847
848
|
};
|
|
848
849
|
EditorContext.prototype.getText = function (textId) {
|
|
849
850
|
return this._texts.find(function (t) { return t.id === textId; });
|
|
850
851
|
};
|
|
851
852
|
EditorContext.prototype.addText = function (text) {
|
|
852
853
|
this._texts = __spreadArray(__spreadArray([], this._texts, true), [text], false);
|
|
854
|
+
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
853
855
|
};
|
|
854
856
|
EditorContext.prototype.removeText = function (textId) {
|
|
855
857
|
this._texts = this._texts.filter(function (t) { return t.id !== textId; });
|
|
858
|
+
this._eventEmitter.emit(EVENT_EDITOR_CONTEXT_UPDATED);
|
|
856
859
|
};
|
|
857
860
|
EditorContext.prototype.onPaperClicked = function (callback) {
|
|
858
861
|
return this.addEventListener(EVENT_PAPER_CLICKED, callback);
|
|
@@ -939,22 +942,16 @@ var EditorContext = /** @class */ (function () {
|
|
|
939
942
|
this._eventEmitter.emit(EVENT_TEXT_SELECTED, text);
|
|
940
943
|
};
|
|
941
944
|
EditorContext.prototype.triggerRenderElement = function (elementId) {
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
}
|
|
945
|
+
this._eventEmitter.emit(EVENT_MANUALLY_RENDER_ELEMENT, elementId);
|
|
946
|
+
};
|
|
947
|
+
EditorContext.prototype.onManuallyTriggerRenderElement = function (callback) {
|
|
948
|
+
return this.addEventListener(EVENT_MANUALLY_RENDER_ELEMENT, callback);
|
|
947
949
|
};
|
|
948
950
|
EditorContext.prototype.triggerRenderPort = function (portId, elementId) {
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
var port = (_a = element.ports) === null || _a === void 0 ? void 0 : _a.find(function (p) { return p.id === portId; });
|
|
954
|
-
if (port) {
|
|
955
|
-
port.manuallyTriggerRender();
|
|
956
|
-
}
|
|
957
|
-
}
|
|
951
|
+
this._eventEmitter.emit(EVENT_MANUALLY_RENDER_PORT, portId, elementId);
|
|
952
|
+
};
|
|
953
|
+
EditorContext.prototype.onManuallyTriggerRenderPort = function (callback) {
|
|
954
|
+
return this.addEventListener(EVENT_MANUALLY_RENDER_PORT, callback);
|
|
958
955
|
};
|
|
959
956
|
return EditorContext;
|
|
960
957
|
}());
|
|
@@ -1646,17 +1643,19 @@ var Text = React$1.forwardRef(function (_a, ref) {
|
|
|
1646
1643
|
var Text$1 = React$1.memo(Text);
|
|
1647
1644
|
|
|
1648
1645
|
var Port1 = React$1.forwardRef(function (props, ref) {
|
|
1649
|
-
var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, container = props.container, label = props.label, onPortLabelMoved = props.onPortLabelMoved, onPortLabelResized = props.onPortLabelResized, onPortLabelContentChanged = props.onPortLabelContentChanged, onSelected = props.onSelected, onMouseDown = props.onMouseDown, onMouseUp = props.onMouseUp, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onMouseMove = props.onMouseMove, calculateRotationAngle = props.calculateRotationAngle,
|
|
1650
|
-
|
|
1646
|
+
var id = props.id, x = props.x, y = props.y, width = props.width, height = props.height, container = props.container, label = props.label, onPortLabelMoved = props.onPortLabelMoved, onPortLabelResized = props.onPortLabelResized, onPortLabelContentChanged = props.onPortLabelContentChanged, onSelected = props.onSelected, onMouseDown = props.onMouseDown, onMouseUp = props.onMouseUp, onMouseEnter = props.onMouseEnter, onMouseLeave = props.onMouseLeave, onMouseMove = props.onMouseMove, calculateRotationAngle = props.calculateRotationAngle,
|
|
1647
|
+
// onManuallyTriggerRenderHandler,
|
|
1648
|
+
renderShape = props.renderShape;
|
|
1649
|
+
var _a = React$1.useState(false); _a[0]; _a[1];
|
|
1651
1650
|
var textRef = React$1.useRef(null);
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
}, [])
|
|
1651
|
+
// useEffect(() => {
|
|
1652
|
+
// const off = onManuallyTriggerRenderHandler?.(() => {
|
|
1653
|
+
// setUpdated(prev => !prev);
|
|
1654
|
+
// });
|
|
1655
|
+
// return () => {
|
|
1656
|
+
// off?.();
|
|
1657
|
+
// }
|
|
1658
|
+
// }, [])
|
|
1660
1659
|
var rotationAngle = React$1.useMemo(function () {
|
|
1661
1660
|
if (!calculateRotationAngle)
|
|
1662
1661
|
return 0;
|
|
@@ -7414,6 +7413,44 @@ var findNearestPosition = function (listPositions, targetPosition) {
|
|
|
7414
7413
|
}
|
|
7415
7414
|
return nearestPoint;
|
|
7416
7415
|
};
|
|
7416
|
+
/**
|
|
7417
|
+
* From one point find projected Point on the line segment.
|
|
7418
|
+
* @param position
|
|
7419
|
+
* @param linePoints
|
|
7420
|
+
* @returns
|
|
7421
|
+
*/
|
|
7422
|
+
var findNearestPointOnSegment = function (position, linePoints) {
|
|
7423
|
+
var beginPosition = linePoints[0], endPosition = linePoints[1];
|
|
7424
|
+
var point = Flatten$1.point(position.x, position.y);
|
|
7425
|
+
var segment = Flatten$1.segment(Flatten$1.point(beginPosition.x, beginPosition.y), Flatten$1.point(endPosition.x, endPosition.y));
|
|
7426
|
+
var _a = point.distanceTo(segment); _a[0]; var segmentFromPointToSegment = _a[1];
|
|
7427
|
+
return {
|
|
7428
|
+
x: segmentFromPointToSegment.pe.x,
|
|
7429
|
+
y: segmentFromPointToSegment.pe.y
|
|
7430
|
+
};
|
|
7431
|
+
};
|
|
7432
|
+
/**
|
|
7433
|
+
* From 1 point find projected Point on the line segments so that the distance between 2 points is shortest.
|
|
7434
|
+
* @param position
|
|
7435
|
+
* @param lines
|
|
7436
|
+
* @returns
|
|
7437
|
+
*/
|
|
7438
|
+
var findNearestProjectedPoint = function (position, lines) {
|
|
7439
|
+
var possiblePoints = lines.map(function (p) { return findNearestPointOnSegment(position, p); });
|
|
7440
|
+
var nearestPoint = findNearestPosition(possiblePoints, position);
|
|
7441
|
+
return nearestPoint;
|
|
7442
|
+
};
|
|
7443
|
+
/**
|
|
7444
|
+
* Check if a point is inside a polygon
|
|
7445
|
+
* @param position
|
|
7446
|
+
* @param polygonPoints
|
|
7447
|
+
* @returns
|
|
7448
|
+
*/
|
|
7449
|
+
var checkPointContainsPolygon = function (position, polygonPoints) {
|
|
7450
|
+
var polygon = new Flatten$1.Polygon();
|
|
7451
|
+
polygon.addFace(polygonPoints.map(function (p) { return Flatten$1.point(p.x, p.y); }));
|
|
7452
|
+
return polygon.contains(Flatten$1.point(position.x, position.y));
|
|
7453
|
+
};
|
|
7417
7454
|
/**
|
|
7418
7455
|
* @param ele : IElement
|
|
7419
7456
|
* @returns Flatten.Polygon
|
|
@@ -9153,34 +9190,42 @@ var Flexbox$1 = /*@__PURE__*/getDefaultExportFromCjs(bundleExports);
|
|
|
9153
9190
|
|
|
9154
9191
|
var Element = function (props) {
|
|
9155
9192
|
var _a, _b, _c;
|
|
9156
|
-
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,
|
|
9193
|
+
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, textsPlaceHolderFlexStyle = props.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition = props.textsPlaceHolderFlexboxPosition, textsPlaceHolderClassName = props.textsPlaceHolderClassName, texts = props.texts, portSlideRailSVGClassName = props.portSlideRailSVGClassName, portMoveableAreas = props.portMoveableAreas, portDirection = props.portDirection, defaultPortSize = props.defaultPortSize, onClick = props.onClick, onContextMenu = props.onContextMenu, renderShape = props.renderShape; props.onMoved; var onPortMoved = props.onPortMoved; props.onResized; var onPortMouseDown = props.onPortMouseDown, onPortMouseUp = props.onPortMouseUp; props.onMouseMove; props.onMouseLeave; props.onMouseUp; var onMouseUpAtLinkedPortPlaceholder = props.onMouseUpAtLinkedPortPlaceholder, onTextUpdated = props.onTextUpdated;
|
|
9157
9194
|
var _d = React$1.useState(), selectedPort = _d[0], setSelectedPort = _d[1];
|
|
9158
9195
|
var _e = React$1.useState(), hoveredPort = _e[0], setHoveredPort = _e[1];
|
|
9159
9196
|
var _f = React$1.useState((_a = props.ports) !== null && _a !== void 0 ? _a : []), ports = _f[0], setPorts = _f[1];
|
|
9160
9197
|
var _g = React$1.useState(false), someElementLinkStarted = _g[0], setSomeElementLinkStarted = _g[1];
|
|
9161
9198
|
var _h = React$1.useState(), potentialPortPosition = _h[0], setPotentialPortPosition = _h[1];
|
|
9162
|
-
var _j = React$1.useState(false); _j[0];
|
|
9199
|
+
var _j = React$1.useState(false); _j[0]; _j[1];
|
|
9163
9200
|
var _paperEventEmitterContext = React$1.useContext(paperEventEmitterContext);
|
|
9164
9201
|
var elementRef = React$1.useRef(null);
|
|
9165
9202
|
var elementLinkStarted = React$1.useRef();
|
|
9166
9203
|
var portsRef = React$1.useRef(ports);
|
|
9204
|
+
React$1.useEffect(function () {
|
|
9205
|
+
return function () {
|
|
9206
|
+
var _a;
|
|
9207
|
+
console.log('un mount', (_a = texts === null || texts === void 0 ? void 0 : texts[0]) === null || _a === void 0 ? void 0 : _a.content);
|
|
9208
|
+
};
|
|
9209
|
+
}, []);
|
|
9167
9210
|
//Listen to manually trigger render event
|
|
9168
9211
|
React$1.useEffect(function () {
|
|
9169
|
-
var off =
|
|
9170
|
-
|
|
9171
|
-
|
|
9212
|
+
var off = props.onManuallyTriggerRenderPort(function (portId, elementId) {
|
|
9213
|
+
if (elementId !== id)
|
|
9214
|
+
return;
|
|
9215
|
+
console.log('onManuallyTriggerRenderPort', id);
|
|
9216
|
+
setPorts(function (prev) { return __spreadArray([], prev, true); });
|
|
9172
9217
|
});
|
|
9173
9218
|
return function () {
|
|
9174
|
-
off
|
|
9219
|
+
off();
|
|
9175
9220
|
};
|
|
9176
|
-
}, []);
|
|
9221
|
+
}, [props.onManuallyTriggerRenderPort]);
|
|
9177
9222
|
//Update portsRef when ports changed
|
|
9178
9223
|
React$1.useEffect(function () {
|
|
9179
9224
|
portsRef.current = ports;
|
|
9180
9225
|
}, [ports]);
|
|
9181
9226
|
React$1.useEffect(function () {
|
|
9182
9227
|
var _a;
|
|
9183
|
-
console.info('Rendering Element ' +
|
|
9228
|
+
console.info('Rendering Element ' + ((_a = texts === null || texts === void 0 ? void 0 : texts[0]) === null || _a === void 0 ? void 0 : _a.content) || id);
|
|
9184
9229
|
});
|
|
9185
9230
|
//Listen a new port is created, after add new port to ports state
|
|
9186
9231
|
React$1.useEffect(function () {
|
|
@@ -9298,29 +9343,6 @@ var Element = function (props) {
|
|
|
9298
9343
|
setSelectedPort(port);
|
|
9299
9344
|
_paperEventEmitterContext.emitPortSelected(port, id);
|
|
9300
9345
|
}, [_paperEventEmitterContext]);
|
|
9301
|
-
//From one point find another point on the line segment so that the distance between the two points is the shortest.
|
|
9302
|
-
var findNearestPointOnSegment = function (position, linePoints) {
|
|
9303
|
-
var beginPosition = linePoints[0], endPosition = linePoints[1];
|
|
9304
|
-
var point = Flatten$1.point(position.x, position.y);
|
|
9305
|
-
var segment = Flatten$1.segment(Flatten$1.point(beginPosition.x, beginPosition.y), Flatten$1.point(endPosition.x, endPosition.y));
|
|
9306
|
-
var _a = point.distanceTo(segment); _a[0]; var segmentFromPointToSegment = _a[1];
|
|
9307
|
-
return {
|
|
9308
|
-
x: segmentFromPointToSegment.pe.x,
|
|
9309
|
-
y: segmentFromPointToSegment.pe.y
|
|
9310
|
-
};
|
|
9311
|
-
};
|
|
9312
|
-
//From 1 point find another point on the line segment so that the distance between 2 points is shortest.
|
|
9313
|
-
var findNearestProjectedPoint = function (position, linePositions) {
|
|
9314
|
-
var possiblePoints = linePositions.map(function (p) { return findNearestPointOnSegment(position, p); });
|
|
9315
|
-
var nearestPoint = findNearestPosition(possiblePoints, position);
|
|
9316
|
-
return nearestPoint;
|
|
9317
|
-
};
|
|
9318
|
-
//Check if a point is inside a polygon
|
|
9319
|
-
var checkPointContainsPolygon = function (position, polygonPoints) {
|
|
9320
|
-
var polygon = new Flatten$1.Polygon();
|
|
9321
|
-
polygon.addFace(polygonPoints.map(function (p) { return Flatten$1.point(p.x, p.y); }));
|
|
9322
|
-
return polygon.contains(Flatten$1.point(position.x, position.y));
|
|
9323
|
-
};
|
|
9324
9346
|
//Normalize a point so that it can lie exactly on an area
|
|
9325
9347
|
var normalizePortPositionOnMoveableAreas = function (moveableAreas, position) {
|
|
9326
9348
|
var lines = moveableAreas.filter(function (area) { return area.length === 2; });
|
|
@@ -9625,14 +9647,16 @@ var Element = function (props) {
|
|
|
9625
9647
|
? React$1.createElement("svg", { x: potentialPortPosition.x, y: potentialPortPosition.y }, portPlaceholderShape)
|
|
9626
9648
|
: React$1.createElement("rect", { x: potentialPortPosition.x - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, y: potentialPortPosition.y - PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH / 2, width: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, height: PORT_PLACEHOLDER_DEFAULT_STROKE_WIDTH, rx: PORT_PLACEHOLDER_DEFAULT_SIZE, ry: PORT_PLACEHOLDER_DEFAULT_SIZE, stroke: PORT_PLACEHOLDER_DEFAULT_STROKE, fill: "none", strokeWidth: 3 })), ports === null || ports === void 0 ? void 0 :
|
|
9627
9649
|
ports.map(function (p, index) {
|
|
9628
|
-
var _a, _b, _c, _d, _e, _f
|
|
9650
|
+
var _a, _b, _c, _d, _e, _f;
|
|
9629
9651
|
return React$1.createElement(Port, { key: p.id, ref: p.ref, id: p.id, x: p.position.x, y: p.position.y, width: (_c = (_b = (_a = p.size) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : defaultPortSize) !== null && _c !== void 0 ? _c : PORT_DEFAULT_SIZE, height: (_f = (_e = (_d = p.size) === null || _d === void 0 ? void 0 : _d.height) !== null && _e !== void 0 ? _e : defaultPortSize) !== null && _f !== void 0 ? _f : PORT_DEFAULT_SIZE, container: container,
|
|
9630
9652
|
// rotation={rotatePort(p)}
|
|
9631
9653
|
calculateRotationAngle: rotatePort, label: p.label, onPortLabelMoved: handlePortLabelMoved, onPortLabelResized: handlePortLabelResized, onPortLabelContentChanged: handlePortLabelContentChanged, onSelected: handleSelectedPort, onMouseDown: handlePortMouseDown, onMouseUp: handlePortMouseUp, onMouseMove: handlePortMouseMove,
|
|
9632
9654
|
// onMouseEnter={() => {
|
|
9633
9655
|
// if (someElementLinkStarted) setHoveredPort(p)
|
|
9634
9656
|
// }}
|
|
9635
|
-
onMouseLeave: handlePortMouseLeave,
|
|
9657
|
+
onMouseLeave: handlePortMouseLeave,
|
|
9658
|
+
// onManuallyTriggerRenderHandler={p.manuallyTriggerRenderHandler?.bind(p)}
|
|
9659
|
+
renderShape: p.renderShape });
|
|
9636
9660
|
}),
|
|
9637
9661
|
React$1.createElement(Flexbox$1, { className: textsPlaceHolderClassName, style: textsPlaceHolderFlexStyle, x: textsPlaceHolderFlexboxPosition === null || textsPlaceHolderFlexboxPosition === void 0 ? void 0 : textsPlaceHolderFlexboxPosition.x, y: textsPlaceHolderFlexboxPosition === null || textsPlaceHolderFlexboxPosition === void 0 ? void 0 : textsPlaceHolderFlexboxPosition.y }, texts === null || texts === void 0 ? void 0 : texts.map(function (t, index) {
|
|
9638
9662
|
var _a, _b;
|
|
@@ -9870,17 +9894,16 @@ function convertElementsToTree(elements) {
|
|
|
9870
9894
|
return parsedElementsInTree;
|
|
9871
9895
|
}
|
|
9872
9896
|
var Paper = function (props) {
|
|
9873
|
-
var _a;
|
|
9874
|
-
var _b = React$1.useState(
|
|
9875
|
-
var _c = React$1.useState(
|
|
9876
|
-
var _d = React$1.useState(),
|
|
9877
|
-
var _e = React$1.useState(
|
|
9878
|
-
var _f = React$1.useState(),
|
|
9879
|
-
var _g = React$1.useState(
|
|
9880
|
-
var _h = React$1.useState(
|
|
9881
|
-
var _j = React$1.useState(),
|
|
9882
|
-
var _k = React$1.useState(
|
|
9883
|
-
var _l = React$1.useState(false), mouseDownedOnPaper = _l[0], setMouseDownedOnPaper = _l[1];
|
|
9897
|
+
var _a = React$1.useState([]), elements = _a[0], setElements = _a[1];
|
|
9898
|
+
var _b = React$1.useState([]), elementsInTree = _b[0], setElementsInTree = _b[1];
|
|
9899
|
+
var _c = React$1.useState(), selectedElement = _c[0], setSelectedElement = _c[1];
|
|
9900
|
+
var _d = React$1.useState([]), links = _d[0], setLinks = _d[1];
|
|
9901
|
+
var _e = React$1.useState(), selectedLink = _e[0], setSelectedLink = _e[1];
|
|
9902
|
+
var _f = React$1.useState(null), tempLink = _f[0], setTempLink = _f[1];
|
|
9903
|
+
var _g = React$1.useState([]), texts = _g[0], setTexts = _g[1];
|
|
9904
|
+
var _h = React$1.useState(), selectedText = _h[0], setSelectedText = _h[1];
|
|
9905
|
+
var _j = React$1.useState(null), selectedElementSVG = _j[0], setSelectedElementSVG = _j[1];
|
|
9906
|
+
var _k = React$1.useState(false), mouseDownedOnPaper = _k[0], setMouseDownedOnPaper = _k[1];
|
|
9884
9907
|
var paperEventEmitter = React$1.useContext(paperEventEmitterContext);
|
|
9885
9908
|
var paperContainerRef = React$1.useRef(null);
|
|
9886
9909
|
var tempLinkRef = React$1.useRef(tempLink); //Cache tempLink to avoid re-render when tempLink changed
|
|
@@ -9889,6 +9912,24 @@ var Paper = function (props) {
|
|
|
9889
9912
|
React$1.useEffect(function () {
|
|
9890
9913
|
console.log('Render Paper');
|
|
9891
9914
|
});
|
|
9915
|
+
React$1.useEffect(function () {
|
|
9916
|
+
setElements(props.elements);
|
|
9917
|
+
}, [props.elements]);
|
|
9918
|
+
React$1.useEffect(function () {
|
|
9919
|
+
setLinks(props.links || []);
|
|
9920
|
+
}, [props.links]);
|
|
9921
|
+
React$1.useEffect(function () {
|
|
9922
|
+
setTexts(props.texts);
|
|
9923
|
+
}, [props.texts]);
|
|
9924
|
+
React$1.useEffect(function () {
|
|
9925
|
+
var off = props.onManuallyTriggerRenderElement(function (elementId) {
|
|
9926
|
+
console.log('onManuallyTriggerRenderElement');
|
|
9927
|
+
setElements(function (prev) { return __spreadArray([], prev, true); });
|
|
9928
|
+
});
|
|
9929
|
+
return function () {
|
|
9930
|
+
off();
|
|
9931
|
+
};
|
|
9932
|
+
}, [props.onManuallyTriggerRenderElement]);
|
|
9892
9933
|
//Cache elements to avoid re-render when elements changed
|
|
9893
9934
|
React$1.useEffect(function () {
|
|
9894
9935
|
elementsRef.current = elements;
|
|
@@ -10473,15 +10514,21 @@ var Paper = function (props) {
|
|
|
10473
10514
|
}
|
|
10474
10515
|
}, [props.onElementContextMenu, handleElementClicked]);
|
|
10475
10516
|
var renderElementInTree = React$1.useCallback(function (element) {
|
|
10476
|
-
var _a, _b
|
|
10517
|
+
var _a, _b;
|
|
10477
10518
|
//use the defined react element or the default Element component
|
|
10478
10519
|
var ReactElement = element.reactElement || Element$1;
|
|
10479
10520
|
console.log("Render element ".concat(element.id));
|
|
10480
10521
|
return (React$1.createElement("g", { key: element.id },
|
|
10481
10522
|
React$1.createElement(ReactElement, { key: "element-".concat(element.id), id: element.id, height: element.size.height, width: element.size.width, x: (_a = element.relativePosition) === null || _a === void 0 ? void 0 : _a.x, y: (_b = element.relativePosition) === null || _b === void 0 ? void 0 : _b.y, onClick: handleElementClicked, onContextMenu: handleContextMenu, container: paperContainerRef.current, renderShape: element.renderShape, cssClass: element.cssClass, texts: element.texts, ports: element.ports, portMoveableAreas: element.portMoveableAreas, portSlideRailSVGClassName: element.portSlideRailSVGClassName, portDirection: element.portDirection, defaultPortSize: element.defaultPortSize, onPortMoved: handlePortMoved, onPortMouseDown: handlePortMouseDown, onPortMouseUp: handlePortMouseUp,
|
|
10482
10523
|
// portPlaceholderShape={(<Circle x={0} y={0} width={10} height={10} fill='red' positioningAnchor={PositioningAnchor.Center} />)}
|
|
10483
|
-
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange,
|
|
10524
|
+
onMouseUpAtLinkedPortPlaceholder: handleMouseUpAtLinkedPortPlaceholder, onTextUpdated: handleElementTextChange, onManuallyTriggerRenderPort: props.onManuallyTriggerRenderPort, textsPlaceHolderClassName: element.textsPlaceHolderClassName, textsPlaceHolderFlexStyle: element.textsPlaceHolderFlexStyle, textsPlaceHolderFlexboxPosition: element.textsPlaceHolderFlexboxPosition }, element.childrenElements && element.childrenElements.map(renderElementInTree))));
|
|
10484
10525
|
}, [handleElementClicked, handleContextMenu, handlePortMoved, handlePortMouseDown, handlePortMouseUp, handleMouseUpAtLinkedPortPlaceholder, handleElementTextChange]);
|
|
10526
|
+
React$1.useEffect(function () {
|
|
10527
|
+
console.log('elementsInTree');
|
|
10528
|
+
}, [elementsInTree]);
|
|
10529
|
+
React$1.useEffect(function () {
|
|
10530
|
+
console.log('renderElementInTree');
|
|
10531
|
+
}, [renderElementInTree]);
|
|
10485
10532
|
var ElementsInTree = React$1.useMemo(function () {
|
|
10486
10533
|
return elementsInTree.map(function (element, index) {
|
|
10487
10534
|
return renderElementInTree(element);
|
|
@@ -10513,14 +10560,39 @@ var Paper = function (props) {
|
|
|
10513
10560
|
};
|
|
10514
10561
|
var Paper$1 = React$1.memo(Paper);
|
|
10515
10562
|
|
|
10516
|
-
function
|
|
10563
|
+
var Editor = function (_a) {
|
|
10517
10564
|
var editorContext = _a.editorContext, width = _a.width, height = _a.height;
|
|
10565
|
+
var _b = React$1.useState([]), elements = _b[0], setElements = _b[1];
|
|
10566
|
+
var _c = React$1.useState([]), links = _c[0], setLinks = _c[1];
|
|
10567
|
+
var _d = React$1.useState([]), texts = _d[0], setTexts = _d[1];
|
|
10518
10568
|
if (!width) {
|
|
10519
10569
|
width = 3000;
|
|
10520
10570
|
}
|
|
10521
10571
|
if (!height) {
|
|
10522
10572
|
height = 3000;
|
|
10523
10573
|
}
|
|
10574
|
+
var setEditorStates = React$1.useCallback(function (ctx) {
|
|
10575
|
+
setElements(__spreadArray([], ctx.elements, true));
|
|
10576
|
+
setLinks(__spreadArray([], ctx.links, true));
|
|
10577
|
+
setTexts(__spreadArray([], ctx.texts, true));
|
|
10578
|
+
}, []);
|
|
10579
|
+
React$1.useEffect(function () {
|
|
10580
|
+
if (editorContext) {
|
|
10581
|
+
setEditorStates(editorContext);
|
|
10582
|
+
}
|
|
10583
|
+
}, [editorContext, setEditorStates]);
|
|
10584
|
+
React$1.useEffect(function () {
|
|
10585
|
+
var offs = [];
|
|
10586
|
+
if (editorContext) {
|
|
10587
|
+
offs.push(editorContext.onEditorContextUpdated(function () {
|
|
10588
|
+
console.log("onEditorContextUpdated");
|
|
10589
|
+
setEditorStates(editorContext);
|
|
10590
|
+
}));
|
|
10591
|
+
}
|
|
10592
|
+
return function () {
|
|
10593
|
+
offs.forEach(function (off) { return off(); });
|
|
10594
|
+
};
|
|
10595
|
+
}, [editorContext, setEditorStates]);
|
|
10524
10596
|
var handlePaperClicked = React$1.useCallback(function (position) {
|
|
10525
10597
|
editorContext.onPaperClickedHandler(position);
|
|
10526
10598
|
}, [editorContext]);
|
|
@@ -10569,10 +10641,8 @@ function Editor(_a) {
|
|
|
10569
10641
|
var handlePaperMouseUp = React$1.useCallback(function (position) {
|
|
10570
10642
|
editorContext.onPaperMouseUpHandler(position);
|
|
10571
10643
|
}, [editorContext]);
|
|
10572
|
-
|
|
10573
|
-
|
|
10574
|
-
return null;
|
|
10575
|
-
}
|
|
10644
|
+
return (React$1.createElement(Paper$1, { key: "paper", size: { width: width, height: height }, elements: elements, links: links, texts: texts, onPaperClicked: handlePaperClicked, onPortMoved: handlePortMoved, onPortSelected: handlePortSelected, onElementContextMenu: handleElementContextMenu, onElementMoved: handleElementMoved, onElementResized: handleElementResized, onElementSelected: handleElementSelected, onCreatingLink: handleOnCreatingLink, onCreatingPortByLinking: handleOnCreatingPortByLinking, onLinkSelected: handleLinkSelected, onTextSelected: handleTextSelected, onPaperMouseMoved: handlePaperMouseMoved, onPaperMouseUp: handlePaperMouseUp, onPaperMouseDown: handlePaperMouseDown, onManuallyTriggerRenderElement: editorContext.onManuallyTriggerRenderElement.bind(editorContext), onManuallyTriggerRenderPort: editorContext.onManuallyTriggerRenderPort.bind(editorContext) }));
|
|
10645
|
+
};
|
|
10576
10646
|
|
|
10577
10647
|
exports.CircleRC = Circle;
|
|
10578
10648
|
exports.CrescentRC = Crescent;
|
|
@@ -25,6 +25,8 @@ interface PaperProps {
|
|
|
25
25
|
onElementSelected?: (element: IElement) => void;
|
|
26
26
|
onLinkSelected?: (link: IElementLink) => void;
|
|
27
27
|
onTextSelected?: (text: IText) => void;
|
|
28
|
+
onManuallyTriggerRenderElement: (callback: (elementId: string) => void) => () => void;
|
|
29
|
+
onManuallyTriggerRenderPort: (callback: (portId: string, elementId: string) => void) => () => void;
|
|
28
30
|
onCreatingPortByLinking?: (sourceElement: IElement, sourcePort: IPort, targetElement: IElement, position: IPosition) => IPort | null;
|
|
29
31
|
onCreatingLink?: (sourcePort: IPort, sourceElement: IElement, targetPort: IPort, targetElement: IElement) => IElementLink | null;
|
|
30
32
|
}
|
|
@@ -34,4 +34,6 @@ export default interface IEditorContext {
|
|
|
34
34
|
removeText(textId: string): void;
|
|
35
35
|
triggerRenderElement(elementId: string): void;
|
|
36
36
|
triggerRenderPort(portId: string, elementId: string): void;
|
|
37
|
+
onManuallyTriggerRenderElement: (callback: (elementId: string) => void) => (() => void);
|
|
38
|
+
onManuallyTriggerRenderPort: (callback: (portId: string, elementId: string) => void) => (() => void);
|
|
37
39
|
}
|
|
@@ -26,13 +26,10 @@ export default interface IElement {
|
|
|
26
26
|
defaultPortSize?: number;
|
|
27
27
|
parentElement?: IElement;
|
|
28
28
|
onParentChanged?: (callback: (oldParent?: IElement, newParent?: IElement) => void) => (() => void);
|
|
29
|
-
manuallyTriggerRender: () => void;
|
|
30
29
|
addPort: (newPort: IPort) => void;
|
|
31
30
|
onAddedPort: (callback: (newPort: IPort) => void) => (() => void);
|
|
32
31
|
deletePort: (id: string) => void;
|
|
33
32
|
onDeletedPort: (callback: (id: string) => void) => (() => void);
|
|
34
|
-
manuallyTriggerRenderPort: (portId: string) => void;
|
|
35
|
-
manuallyTriggerRenderHandler?: (callback: () => void) => (() => void);
|
|
36
33
|
textsPlaceHolderClassName?: string;
|
|
37
34
|
textsPlaceHolderFlexStyle?: IFlexboxType;
|
|
38
35
|
textsPlaceHolderFlexboxPosition?: IPosition;
|
|
@@ -35,7 +35,7 @@ interface IElementProps {
|
|
|
35
35
|
onMouseUp?: (event: React.MouseEvent) => void;
|
|
36
36
|
onMouseUpAtLinkedPortPlaceholder?: (link: IElementLink, position: IPosition, targetElementId: string) => void;
|
|
37
37
|
onTextUpdated?: (elmentId: string, textId: string, newTextContent: string) => void;
|
|
38
|
-
|
|
38
|
+
onManuallyTriggerRenderPort: (callback: (portId: string, elementId: string) => void) => () => void;
|
|
39
39
|
textsPlaceHolderClassName?: string;
|
|
40
40
|
textsPlaceHolderFlexStyle?: IFlexboxType;
|
|
41
41
|
textsPlaceHolderFlexboxPosition?: IPosition;
|
|
@@ -9,6 +9,4 @@ export default interface IPort {
|
|
|
9
9
|
size?: ISize;
|
|
10
10
|
label?: IText;
|
|
11
11
|
renderShape?: React.ForwardRefExoticComponent<IPortProps & React.RefAttributes<SVGSVGElement>>;
|
|
12
|
-
manuallyTriggerRender: () => void;
|
|
13
|
-
manuallyTriggerRenderHandler?: (callback: () => void) => () => void;
|
|
14
12
|
}
|
|
@@ -25,5 +25,4 @@ export interface IPortProps {
|
|
|
25
25
|
onPortLabelContentChanged?: (ev: React.ChangeEvent, newValue: string, portId: string) => void;
|
|
26
26
|
renderShape?: React.ForwardRefExoticComponent<IPortProps & React.RefAttributes<SVGSVGElement>>;
|
|
27
27
|
calculateRotationAngle?: (x: number, y: number) => number;
|
|
28
|
-
onManuallyTriggerRenderHandler?: (callback: () => void) => () => void;
|
|
29
28
|
}
|
|
@@ -40,5 +40,7 @@ export declare class EditorContext implements IEditorContext {
|
|
|
40
40
|
onLinkSelected(callback: (link: IElementLink) => void): () => void;
|
|
41
41
|
onTextSelected(callback: (text: IText) => void): () => void;
|
|
42
42
|
triggerRenderElement(elementId: string): void;
|
|
43
|
+
onManuallyTriggerRenderElement(callback: (elementId: string) => void): () => void;
|
|
43
44
|
triggerRenderPort(portId: string, elementId: string): void;
|
|
45
|
+
onManuallyTriggerRenderPort(callback: (portId: string, elementId: string) => void): () => void;
|
|
44
46
|
}
|
|
@@ -34,9 +34,6 @@ export default class Element implements IElement {
|
|
|
34
34
|
textsPlaceHolderFlexboxPosition?: IPosition;
|
|
35
35
|
_eventEmitter: EventEmitter;
|
|
36
36
|
constructor(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);
|
|
37
|
-
manuallyTriggerRender(): void;
|
|
38
|
-
manuallyTriggerRenderHandler(callback: () => void): () => void;
|
|
39
|
-
manuallyTriggerRenderPort(portId: string): void;
|
|
40
37
|
get id(): string;
|
|
41
38
|
get size(): ISize;
|
|
42
39
|
set size(value: ISize);
|
|
@@ -11,6 +11,27 @@ export declare function removeDuplicatePosition<T extends IPosition>(positions:
|
|
|
11
11
|
* Find the closest point from a list of points to the destination point
|
|
12
12
|
*/
|
|
13
13
|
export declare const findNearestPosition: (listPositions: IPosition[], targetPosition: IPosition) => IPosition;
|
|
14
|
+
/**
|
|
15
|
+
* From one point find projected Point on the line segment.
|
|
16
|
+
* @param position
|
|
17
|
+
* @param linePoints
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
20
|
+
export declare const findNearestPointOnSegment: (position: IPosition, linePoints: IPosition[]) => IPosition;
|
|
21
|
+
/**
|
|
22
|
+
* From 1 point find projected Point on the line segments so that the distance between 2 points is shortest.
|
|
23
|
+
* @param position
|
|
24
|
+
* @param lines
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
export declare const findNearestProjectedPoint: (position: IPosition, lines: IPosition[][]) => IPosition;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a point is inside a polygon
|
|
30
|
+
* @param position
|
|
31
|
+
* @param polygonPoints
|
|
32
|
+
* @returns
|
|
33
|
+
*/
|
|
34
|
+
export declare const checkPointContainsPolygon: (position: IPosition, polygonPoints: IPosition[]) => boolean;
|
|
14
35
|
/**
|
|
15
36
|
* @param ele : IElement
|
|
16
37
|
* @returns Flatten.Polygon
|