@flowgram.ai/free-layout-core 0.4.19 → 0.5.1
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/esm/index.js +260 -114
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.mts +46 -45
- package/dist/index.d.ts +46 -45
- package/dist/index.js +258 -113
- package/dist/index.js.map +1 -1
- package/dist/typings/index.d.mts +1 -1
- package/dist/typings/index.d.ts +1 -1
- package/dist/typings/workflow-drag.d.mts +1 -1
- package/dist/typings/workflow-drag.d.ts +1 -1
- package/dist/typings/workflow-drag.js.map +1 -1
- package/dist/typings/workflow-json.d.mts +1 -1
- package/dist/typings/workflow-json.d.ts +1 -1
- package/dist/typings/workflow-line.d.mts +1 -1
- package/dist/typings/workflow-line.d.ts +1 -1
- package/dist/typings/workflow-node.d.mts +1 -1
- package/dist/typings/workflow-node.d.ts +1 -1
- package/dist/typings/workflow-registry.d.mts +1 -1
- package/dist/typings/workflow-registry.d.ts +1 -1
- package/dist/typings/workflow-sub-canvas.d.mts +1 -1
- package/dist/typings/workflow-sub-canvas.d.ts +1 -1
- package/dist/{workflow-node-entity-GyY_PHY6.d.ts → workflow-node-entity-Cnte2phX.d.ts} +27 -13
- package/dist/{workflow-node-entity-DtPEYn6-.d.mts → workflow-node-entity-lKu00Aj4.d.mts} +27 -13
- package/package.json +9 -9
package/dist/esm/index.js
CHANGED
|
@@ -776,16 +776,8 @@ var WorkflowLineRenderData = class extends EntityData3 {
|
|
|
776
776
|
* WARNING: 这个方法,必须在 requestAnimationFrame / useLayoutEffect 中调用,否则会引起浏览器强制重排
|
|
777
777
|
*/
|
|
778
778
|
updatePosition() {
|
|
779
|
-
this.data.position.from = this.entity.
|
|
780
|
-
|
|
781
|
-
this.data.position.to = this.entity.info.drawingTo;
|
|
782
|
-
} else {
|
|
783
|
-
this.data.position.to = this.entity.to?.ports?.getInputPoint(this.entity.info.toPort) ?? {
|
|
784
|
-
x: this.data.position.from.x,
|
|
785
|
-
y: this.data.position.from.y,
|
|
786
|
-
location: this.data.position.from.location === "right" ? "left" : "top"
|
|
787
|
-
};
|
|
788
|
-
}
|
|
779
|
+
this.data.position.from = this.entity.drawingFrom || this.entity.fromPort.point;
|
|
780
|
+
this.data.position.to = this.entity.drawingTo || this.entity.toPort.point;
|
|
789
781
|
this.data.version = [
|
|
790
782
|
this.lineType,
|
|
791
783
|
this.data.position.from.x,
|
|
@@ -850,10 +842,11 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
850
842
|
to: opts.to,
|
|
851
843
|
drawingTo: opts.drawingTo,
|
|
852
844
|
fromPort: opts.fromPort,
|
|
845
|
+
drawingFrom: opts.drawingFrom,
|
|
853
846
|
toPort: opts.toPort,
|
|
854
847
|
data: opts.data
|
|
855
848
|
});
|
|
856
|
-
if (opts.drawingTo) {
|
|
849
|
+
if (opts.drawingTo || opts.drawingFrom) {
|
|
857
850
|
this.isDrawing = true;
|
|
858
851
|
}
|
|
859
852
|
this.onEntityChange(() => {
|
|
@@ -988,6 +981,30 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
988
981
|
}
|
|
989
982
|
this.fireChange();
|
|
990
983
|
}
|
|
984
|
+
setFromPort(fromPort) {
|
|
985
|
+
if (!this.isDrawing) {
|
|
986
|
+
throw new Error("[setFromPort] only support drawing line.");
|
|
987
|
+
}
|
|
988
|
+
if (this.fromPort === fromPort) {
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
991
|
+
const prePort = this.fromPort;
|
|
992
|
+
if (fromPort && fromPort.portType === "output" && this.linesManager.canAddLine(fromPort, this.toPort, true)) {
|
|
993
|
+
const { node, portID } = fromPort;
|
|
994
|
+
this._from = node;
|
|
995
|
+
this.info.drawingFrom = void 0;
|
|
996
|
+
this.info.from = node.id;
|
|
997
|
+
this.info.fromPort = portID;
|
|
998
|
+
} else {
|
|
999
|
+
this._from = void 0;
|
|
1000
|
+
this.info.from = void 0;
|
|
1001
|
+
this.info.fromPort = "";
|
|
1002
|
+
}
|
|
1003
|
+
if (prePort) {
|
|
1004
|
+
prePort.validate();
|
|
1005
|
+
}
|
|
1006
|
+
this.fireChange();
|
|
1007
|
+
}
|
|
991
1008
|
/**
|
|
992
1009
|
* 设置线条画线时的目标位置
|
|
993
1010
|
*/
|
|
@@ -1004,6 +1021,22 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
1004
1021
|
this.fireChange();
|
|
1005
1022
|
}
|
|
1006
1023
|
}
|
|
1024
|
+
set drawingFrom(pos) {
|
|
1025
|
+
const oldDrawingFrom = this.info.drawingFrom;
|
|
1026
|
+
if (!pos) {
|
|
1027
|
+
this.info.drawingFrom = void 0;
|
|
1028
|
+
this.fireChange();
|
|
1029
|
+
return;
|
|
1030
|
+
}
|
|
1031
|
+
if (!oldDrawingFrom || pos.x !== oldDrawingFrom.x || pos.y !== oldDrawingFrom.y) {
|
|
1032
|
+
this.info.from = void 0;
|
|
1033
|
+
this.info.drawingFrom = pos;
|
|
1034
|
+
this.fireChange();
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
get drawingFrom() {
|
|
1038
|
+
return this.info.drawingFrom;
|
|
1039
|
+
}
|
|
1007
1040
|
/**
|
|
1008
1041
|
* 获取线条正在画线的位置
|
|
1009
1042
|
*/
|
|
@@ -1042,6 +1075,9 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
1042
1075
|
return this.getData(WorkflowLineRenderData).calcDistance(pos);
|
|
1043
1076
|
}
|
|
1044
1077
|
get fromPort() {
|
|
1078
|
+
if (!this.from) {
|
|
1079
|
+
return void 0;
|
|
1080
|
+
}
|
|
1045
1081
|
return this.from.ports.getPortEntityByKey("output", this.info.fromPort);
|
|
1046
1082
|
}
|
|
1047
1083
|
get toPort() {
|
|
@@ -1082,7 +1118,7 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
1082
1118
|
* @deprecated
|
|
1083
1119
|
*/
|
|
1084
1120
|
get vertical() {
|
|
1085
|
-
const fromLocation = this.fromPort
|
|
1121
|
+
const fromLocation = this.fromPort?.location;
|
|
1086
1122
|
const toLocation = this.toPort?.location;
|
|
1087
1123
|
if (toLocation) {
|
|
1088
1124
|
return toLocation === "top";
|
|
@@ -1108,7 +1144,7 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
1108
1144
|
initInfo(info) {
|
|
1109
1145
|
if (!isEqual2(info, this.info)) {
|
|
1110
1146
|
this.info = info;
|
|
1111
|
-
this._from = this.document.getNode(info.from);
|
|
1147
|
+
this._from = info.from ? this.document.getNode(info.from) : void 0;
|
|
1112
1148
|
this._to = info.to ? this.document.getNode(info.to) : void 0;
|
|
1113
1149
|
this._lineData = info.data;
|
|
1114
1150
|
this.fireChange();
|
|
@@ -1142,7 +1178,7 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends Entity2 {
|
|
|
1142
1178
|
this._node = domUtils.createDivWithClass("gedit-flow-activity-line");
|
|
1143
1179
|
this._node.dataset.testid = "sdk.workflow.canvas.line";
|
|
1144
1180
|
this._node.dataset.lineId = this.id;
|
|
1145
|
-
this._node.dataset.fromNodeId = this.from
|
|
1181
|
+
this._node.dataset.fromNodeId = this.from?.id ?? "";
|
|
1146
1182
|
this._node.dataset.fromPortId = this.fromPort?.id ?? "";
|
|
1147
1183
|
this._node.dataset.toNodeId = this.to?.id ?? "";
|
|
1148
1184
|
this._node.dataset.toPortId = this.toPort?.id ?? "";
|
|
@@ -1324,10 +1360,17 @@ var WorkflowHoverService = class {
|
|
|
1324
1360
|
}
|
|
1325
1361
|
/**
|
|
1326
1362
|
* 获取被 hover 的节点或线条
|
|
1363
|
+
* @deprecated use 'someHovered' instead
|
|
1327
1364
|
*/
|
|
1328
1365
|
get hoveredNode() {
|
|
1329
1366
|
return this.entityManager.getEntityById(this.hoveredKey);
|
|
1330
1367
|
}
|
|
1368
|
+
/**
|
|
1369
|
+
* 获取被 hover 的节点或线条
|
|
1370
|
+
*/
|
|
1371
|
+
get someHovered() {
|
|
1372
|
+
return this.entityManager.getEntityById(this.hoveredKey);
|
|
1373
|
+
}
|
|
1331
1374
|
};
|
|
1332
1375
|
__decorateClass([
|
|
1333
1376
|
inject2(EntityManager)
|
|
@@ -1345,7 +1388,8 @@ import {
|
|
|
1345
1388
|
Emitter as Emitter6,
|
|
1346
1389
|
DisposableCollection as DisposableCollection2,
|
|
1347
1390
|
Rectangle as Rectangle8,
|
|
1348
|
-
delay as delay2
|
|
1391
|
+
delay as delay2,
|
|
1392
|
+
Point
|
|
1349
1393
|
} from "@flowgram.ai/utils";
|
|
1350
1394
|
import {
|
|
1351
1395
|
FlowNodeTransformData as FlowNodeTransformData6,
|
|
@@ -1405,10 +1449,11 @@ function initFormDataFromJSON(node, json, isFirstCreate) {
|
|
|
1405
1449
|
// src/workflow-document-option.ts
|
|
1406
1450
|
var WorkflowDocumentOptions = Symbol("WorkflowDocumentOptions");
|
|
1407
1451
|
var WorkflowDocumentOptionsDefault = {
|
|
1408
|
-
cursors: {
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1452
|
+
// cursors: {
|
|
1453
|
+
// grab: 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC40ODczIDIuNjIzNzhDOS45MDczMSAyLjYyMzc4IDkuNDM3MTMgMy4wOTM5NiA5LjQzNzEzIDMuNjczOTZWNS4xNDM3NkM5LjM5NDI4IDQuNDAyNzQgOC43Nzk3OCAzLjgxNTA0IDguMDI4MDIgMy44MTUwNEM3LjI0ODQ4IDMuODE1MDQgNi42MTY1MyA0LjQ0Njk5IDYuNjE2NTMgNS4yMjY1M1YxMS44Mjg5TDUuNjc0MTggMTEuMDA0OUM1LjE1NDg3IDEwLjU1MDkgNC40MDk1IDEwLjQ2MzYgMy43OTkzOCAxMC43ODU1TDMuNjk2OTQgMTAuODM5NkMzLjA2MjE3IDExLjE3NDUgMi45MjI2IDEyLjAyMjggMy40MTY2MiAxMi41NDM0TDcuMzM5NTkgMTYuNjc3NVYxNy4zMjU5QzcuMzM5NTkgMTcuNzg2MiA3LjcxMjY5IDE4LjE1OTMgOC4xNzI5MiAxOC4xNTkzSDEzLjgwODRDMTQuMjY4NyAxOC4xNTkzIDE0LjY0MTcgMTcuNzg2MiAxNC42NDE3IDE3LjMyNTlWMTYuNzkzNUMxNS44MDk0IDE1LjY0ODUgMTYuNDY3MyAxNC4wODE5IDE2LjQ2NzMgMTIuNDQ2NVYxMS40OTY3TDE2LjQ2NzEgNi42MzY4NUMxNi40NjcxIDUuOTU2MyAxNS45MTU0IDUuNDA0NjEgMTUuMjM0OCA1LjQwNDYxQzE0LjU1NDMgNS40MDQ2MSAxNC4wMDI2IDUuOTU2MyAxNC4wMDI2IDYuNjM2ODVMMTQuMDAyMSA1LjA0NzI4QzE0LjAwMjEgNC4zNjY3MyAxMy40NTA0IDMuODE1MDQgMTIuNzY5OCAzLjgxNTA0QzEyLjA4OTMgMy44MTUwNCAxMS41Mzc2IDQuMzY2NzMgMTEuNTM3NiA1LjA0NzI4TDExLjUzNzUgMy42NzM5NUMxMS41Mzc1IDMuMDkzOTYgMTEuMDY3MyAyLjYyMzc4IDEwLjQ4NzMgMi42MjM3OFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3NCAxLjM3NDAyQzExLjM2MTIgMS4zNzQwMiAxMi4xMjExIDEuODYxMTggMTIuNTEwNSAyLjU3ODY4QzEyLjU5NTggMi41Njk4MyAxMi42ODIzIDIuNTY1MjggMTIuNzcgMi41NjUyOEMxMy44Mjc4IDIuNTY1MjggMTQuNzMxMSAzLjIyNzAxIDE1LjA4ODUgNC4xNTkxMUMxNS4xMzcgNC4xNTYyOSAxNS4xODU4IDQuMTU0ODYgMTUuMjM1IDQuMTU0ODZDMTYuNjA1OSA0LjE1NDg2IDE3LjcxNzIgNS4yNjYxOSAxNy43MTcyIDYuNjM3MDlMMTcuNzE3NCAxMi40NDY3QzE3LjcxNzQgMTQuMjM1NSAxNy4wNjQ0IDE1Ljk1NTkgMTUuODkxOSAxNy4yOTA0VjE3LjMyNjJDMTUuODkxOSAxOC40NzY4IDE0Ljk1OTEgMTkuNDA5NSAxMy44MDg1IDE5LjQwOTVIOC4xNzMwNkM3LjAyMjQ3IDE5LjQwOTUgNi4wODk3MyAxOC40NzY4IDYuMDg5NzMgMTcuMzI2MlYxNy4xNzY0TDIuNTEwMDMgMTMuNDA0MUMxLjQ0NTk5IDEyLjI4MjggMS43NDY2IDEwLjQ1NTUgMy4xMTM3OSA5LjczNDI0TDMuMjE2MjQgOS42ODAxOUMzLjg5MTY4IDkuMzIzODMgNC42NjE4NSA5LjI1NDAxIDUuMzY2NjYgOS40NTE5OFY1LjIyNjc4QzUuMzY2NjYgMy43NTY4NyA2LjU1ODI2IDIuNTY1MjggOC4wMjgxNiAyLjU2NTI4QzguMTcyOTMgMi41NjUyOCA4LjMxNDk5IDIuNTc2ODQgOC40NTM0NyAyLjU5OTA3QzguODM5NDMgMS44NzA0MiA5LjYwNTQ2IDEuMzc0MDIgMTAuNDg3NCAxLjM3NDAyWk0xMi40NDc2IDMuODU3ODdWOS40NzY0NkMxMi40NDc2IDkuNzI4NTIgMTIuMjQzMyA5LjkzMjg1IDExLjk5MTMgOS45MzI4NUMxMS43MzkyIDkuOTMyODUgMTEuNTM0OSA5LjcyODUyIDExLjUzNDkgOS40NzY0NlYzLjc5NjU1QzExLjUzNDkgMy43Nzk1NiAxMS41MzU4IDMuNzYyNzcgMTEuNTM3NiAzLjc0NjI2VjMuNjc0MkMxMS41Mzc2IDMuNDMyODIgMTEuNDU2MiAzLjIxMDQ2IDExLjMxOTMgMy4wMzMwOUMxMS4xMjcyIDIuNzg0MjggMTAuODI2MSAyLjYyNDAyIDEwLjQ4NzQgMi42MjQwMkMxMC4xMjM4IDIuNjI0MDIgOS44MDMzMiAyLjgwODg2IDkuNjE0ODMgMy4wODk3QzkuNTAyNjkgMy4yNTY3OSA5LjQzNzI2IDMuNDU3ODUgOS40MzcyNiAzLjY3NDJWMy43ODU3M0M5LjQzNzM1IDMuNzg5MzMgOS40MzczOSAzLjc5Mjk0IDkuNDM3MzkgMy43OTY1NVY5LjkwMTdDOS40MzczOSAxMC4xNTM3IDkuMjMzMDYgMTAuMzU4MSA4Ljk4MTAxIDEwLjM1ODFDOC43Mjg5NSAxMC4zNTgxIDguNTI0NjIgMTAuMTUzNyA4LjUyNDYyIDkuOTAxN1YzLjkwNTA3QzguNDE3NzMgMy44NjQ5IDguMzA0NjggMy44MzczMiA4LjE4NzI2IDMuODI0MTVDOC4xMzUwNCAzLjgxODI5IDguMDgxOTUgMy44MTUyOCA4LjAyODE2IDMuODE1MjhDNy4yNDg2MSAzLjgxNTI4IDYuNjE2NjYgNC40NDcyMyA2LjYxNjY2IDUuMjI2NzhWMTEuODI5Mkw1LjY3NDMxIDExLjAwNTJDNS41Nzg2OCAxMC45MjE2IDUuNDc1MzcgMTAuODUwNCA1LjM2NjY2IDEwLjc5MTlDNC44ODUwNiAxMC41MzI5IDQuMjk3MjggMTAuNTIzMSAzLjc5OTUyIDEwLjc4NThMMy42OTcwNyAxMC44Mzk4QzMuMDYyMzEgMTEuMTc0NyAyLjkyMjczIDEyLjAyMzEgMy40MTY3NSAxMi41NDM3TDcuMzM5NzMgMTYuNjc3N1YxNy4zMjYyQzcuMzM5NzMgMTcuNzg2NCA3LjcxMjgyIDE4LjE1OTUgOC4xNzMwNiAxOC4xNTk1SDEzLjgwODVDMTQuMjY4OCAxOC4xNTk1IDE0LjY0MTkgMTcuNzg2NCAxNC42NDE5IDE3LjMyNjJWMTYuNzkzOEMxNS43Mzc5IDE1LjcxOSAxNi4zODQ3IDE0LjI3MjggMTYuNDYgMTIuNzQ3QzE2LjQ2NDEgMTIuNjY0MSAxNi40NjY1IDEyLjU4MDkgMTYuNDY3MiAxMi40OTc1TDE2LjQ2NzQgMTIuNDQ2N0wxNi40NjcyIDYuNjM3MDlDMTYuNDY3MiA1Ljk2MjMgMTUuOTI0OCA1LjQxNDE5IDE1LjI1MjIgNS40MDQ5N0wxNS4yMzUgNS40MDQ4NkMxNS4xMjQ2IDUuNDA0ODYgMTUuMDE3NyA1LjQxOTM2IDE0LjkxNTkgNS40NDY1NlY5LjYwMjI2QzE0LjkxNTkgOS44NTQzMSAxNC43MTE2IDEwLjA1ODYgMTQuNDU5NSAxMC4wNTg2QzE0LjIwNzUgMTAuMDU4NiAxNC4wMDMxIDkuODU0MzEgMTQuMDAzMSA5LjYwMjI2VjYuNjA1MTRDMTQuMDAyOSA2LjYxNTc2IDE0LjAwMjcgNi42MjY0MSAxNC4wMDI3IDYuNjM3MDlWOS4yNzcwNUwxNC4wMDIyIDUuMDQ3NTJDMTQuMDAyMiA0Ljg2OTEzIDEzLjk2NDMgNC42OTk2IDEzLjg5NjEgNC41NDY1M0MxMy43MDY0IDQuMTIwNzIgMTMuMjgyMiAzLjgyMjM1IDEyLjc4NzYgMy44MTU0MUwxMi43NyAzLjgxNTI4QzEyLjY1ODQgMy44MTUyOCAxMi41NTA0IDMuODMwMSAxMi40NDc2IDMuODU3ODdaIiBmaWxsPSIjMUQxQzIzIi8+Cjwvc3ZnPg=="), auto',
|
|
1454
|
+
// grabbing:
|
|
1455
|
+
// 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjYxODE3IDUuNTk4NzVDNi42MTgxNyA0LjgxOTIgNy4yNTAxMiA0LjE4NzI2IDguMDI5NjcgNC4xODcyNkM4Ljc3ODczIDQuMTg3MjYgOS4zOTE1MiA0Ljc3MDc1IDkuNDM4MjkgNS41MDgwMUM5LjQ1OTkyIDQuOTQ3MSA5LjkyMTQ3IDQuNDk5MDIgMTAuNDg3NyA0LjQ5OTAyQzExLjA2NzcgNC40OTkwMiAxMS41Mzc4IDQuOTY5MiAxMS41Mzc4IDUuNTQ5MTlWOC43NjI0NkwxMS41Mzc5IDYuNzExNUMxMS41Mzc5IDYuMDMwOTUgMTIuMDg5NiA1LjQ3OTI2IDEyLjc3MDIgNS40NzkyNkMxMy40NTA3IDUuNDc5MjYgMTQuMDAyNCA2LjAzMDk1IDE0LjAwMjQgNi43MTE1TDE0LjAwMjQgOC43NjI0NkwxNC4wMDI5IDguMDE5ODNDMTQuMDAyOSA3LjMzOTI5IDE0LjU1NDYgNi43ODc1OSAxNS4yMzUyIDYuNzg3NTlDMTUuOTE1NyA2Ljc4NzU5IDE2LjQ2NzQgNy4zMzkyOCAxNi40Njc0IDguMDE5ODNWMTEuNDk3TDE2LjQ2NzUgMTIuNDQ2N0MxNi40Njc1IDE0LjA4MjEgMTUuODA5NiAxNS42NDg3IDE0LjY0MiAxNi43OTM4VjE3LjMyNjJDMTQuNjQyIDE3Ljc4NjQgMTQuMjY4OSAxOC4xNTk1IDEzLjgwODcgMTguMTU5NUg4LjE3MzE3QzcuNzEyOTMgMTguMTU5NSA3LjMzOTg0IDE3Ljc4NjQgNy4zMzk4NCAxNy4zMjYyVjE1Ljk0MjRMNS4zNDU2MiAxNC43NTM0QzQuNTg5MjQgMTQuMzAyNCA0LjEyNTkxIDEzLjQ4NjcgNC4xMjU4OSAxMi42MDYxTDQuMTI1ODMgOS4yODM4M0M0LjEyNTgyIDguOTU0MjcgNC4zMjAwMyA4LjY1NTY2IDQuNjIxMjkgOC41MjIwNUw2LjYxODE3IDcuNjM2MzRWNS41OTg3NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3OCAzLjI0OTAyQzExLjI3OTYgMy4yNDkwMiAxMS45Nzc4IDMuNjQ5MDIgMTIuMzkxNyA0LjI1Nzk2QzEyLjUxNTEgNC4yMzkwNiAxMi42NDE2IDQuMjI5MjYgMTIuNzcwMyA0LjIyOTI2QzEzLjcyMjQgNC4yMjkyNiAxNC41NDkzIDQuNzY1MzEgMTQuOTY1NyA1LjU1MjA3QzE1LjA1NDMgNS41NDI1IDE1LjE0NDIgNS41Mzc1OSAxNS4yMzUzIDUuNTM3NTlDMTYuNjA2MiA1LjUzNzU5IDE3LjcxNzYgNi42NDg5MyAxNy43MTc2IDguMDE5ODNMMTcuNzE3NyAxMi40NDY3QzE3LjcxNzcgMTQuMjM1NSAxNy4wNjQ3IDE1Ljk1NTkgMTUuODkyMSAxNy4yOTA0VjE3LjMyNjJDMTUuODkyMSAxOC40NzY4IDE0Ljk1OTQgMTkuNDA5NSAxMy44MDg4IDE5LjQwOTVIOC4xNzMzMkM3LjAyMjczIDE5LjQwOTUgNi4wODk5OCAxOC40NzY4IDYuMDg5OTggMTcuMzI2MlYxNi42NTI0TDQuNzA1NjMgMTUuODI3QzMuNTcxMDYgMTUuMTUwNSAyLjg3NjA3IDEzLjkyNzEgMi44NzYwNCAxMi42MDYxTDIuODc1OTggOS4yODM4NUMyLjg3NTk2IDguNDU5OTYgMy4zNjE0OSA3LjcxMzQ1IDQuMTE0NjIgNy4zNzk0TDUuMzY4MzIgNi44MjMzM1Y1LjU5ODc1QzUuMzY4MzIgNC4xMjg4NSA2LjU1OTkxIDIuOTM3MjYgOC4wMjk4MiAyLjkzNzI2QzguNjA4MzEgMi45MzcyNiA5LjE0MzU1IDMuMTIxNyA5LjU4MDA1IDMuNDM1MDVDOS44NTg1MyAzLjMxNTMyIDEwLjE2NTQgMy4yNDkwMiAxMC40ODc4IDMuMjQ5MDJaTTEyLjQ0NzkgNS41MjE4NlY5LjQ3NTU3QzEyLjQ0NzkgOS43Mjc2MiAxMi4yNDM2IDkuOTMxOTUgMTEuOTkxNiA5LjkzMTk1QzExLjc1NjggOS45MzE5NSAxMS41NjM0IDkuNzU0NjUgMTEuNTM4IDkuNTI2NjNDMTEuNTM2MSA5LjUwOTg3IDExLjUzNTIgOS40OTI4MyAxMS41MzUyIDkuNDc1NTdWNS40NzE1OEMxMS41MTU0IDUuMjAwODMgMTEuMzkzIDQuOTU4NTggMTEuMjA2NiA0Ljc4MzU4QzExLjAxODggNC42MDcxMSAxMC43NjU5IDQuNDk5MDIgMTAuNDg3OCA0LjQ5OTAyQzEwLjQ3NjYgNC40OTkwMiAxMC40NjU0IDQuNDk5MTkgMTAuNDU0MiA0LjQ5OTU0QzkuOTAzNDcgNC41MTY4NCA5LjQ1OTY0IDQuOTU4MjQgOS40Mzg0NCA1LjUwODAxQzkuNDM4MiA1LjUwNDMgOS40Mzc5NSA1LjUwMDU4IDkuNDM3NjkgNS40OTY4OFY5LjkwMjQzQzkuNDM3NjkgMTAuMTU0NSA5LjIzMzM2IDEwLjM1ODggOC45ODEzMSAxMC4zNTg4QzguNzI5MjUgMTAuMzU4OCA4LjUyNDkyIDEwLjE1NDUgOC41MjQ5MiA5LjkwMjQzVjQuMjc2NTNDOC4zNzA4NiA0LjIxODgyIDguMjA0MDIgNC4xODcyNiA4LjAyOTgyIDQuMTg3MjZDNy4yNTAyNyA0LjE4NzI2IDYuNjE4MzIgNC44MTkyIDYuNjE4MzIgNS41OTg3NUw2LjYxODI3IDkuOTc1OTlDNi42MTgyNyAxMC4yMjggNi40MTM5NCAxMC40MzI0IDYuMTYxODkgMTAuNDMyNEM1LjkwOTgzIDEwLjQzMjQgNS43MDU1IDEwLjIyOCA1LjcwNTUgOS45NzU5OVY4LjA0MTIyTDQuNjIxNDQgOC41MjIwNUM0LjMyMDE4IDguNjU1NjYgNC4xMjU5NyA4Ljk1NDI3IDQuMTI1OTggOS4yODM4M0w0LjEyNjA0IDEyLjYwNjFDNC4xMjYwNiAxMy40ODY3IDQuNTg5MzkgMTQuMzAyNCA1LjM0NTc2IDE0Ljc1MzRMNy4zMzk5OCAxNS45NDI0VjE3LjMyNjJDNy4zMzk5OCAxNy43ODY0IDcuNzEzMDggMTguMTU5NSA4LjE3MzMyIDE4LjE1OTVIMTMuODA4OEMxNC4yNjkgMTguMTU5NSAxNC42NDIxIDE3Ljc4NjQgMTQuNjQyMSAxNy4zMjYyVjE2Ljc5MzhDMTUuNzM4MSAxNS43MTkgMTYuMzg1IDE0LjI3MjggMTYuNDYwMyAxMi43NDdDMTYuNDY0NiAxMi42NiAxNi40NjcgMTIuNTcyOCAxNi40Njc2IDEyLjQ4NTRMMTYuNDY3NyAxMi40NDY3TDE2LjQ2NzYgOC4wMTk4M0MxNi40Njc2IDcuMzQ1MDQgMTUuOTI1MiA2Ljc5NjkzIDE1LjI1MjUgNi43ODc3MUwxNS4yMzUzIDYuNzg3NTlDMTUuMTI1IDYuNzg3NTkgMTUuMDE4IDYuODAyMSAxNC45MTYyIDYuODI5MzFWOS42MDEzNkMxNC45MTYyIDkuODUzNDIgMTQuNzExOSAxMC4wNTc3IDE0LjQ1OTggMTAuMDU3N0MxNC4yMDc4IDEwLjA1NzcgMTQuMDAzNCA5Ljg1MzQxIDE0LjAwMzQgOS42MDEzNlY3Ljk4OTg1QzE0LjAwMzIgNy45OTk4MiAxNC4wMDMxIDguMDA5ODEgMTQuMDAzMSA4LjAxOTgzTDE0LjAwMzQgOS42MDEzNkwxNC4wMDI1IDYuNzExNUMxNC4wMDI1IDYuNDQ5NzQgMTMuOTIwOSA2LjIwNzA1IDEzLjc4MTggNi4wMDc0OEMxMy41NjIgNS42OTI0MiAxMy4xOTg5IDUuNDg0ODMgMTIuNzg3IDUuNDc5MzdMMTIuNzcwMyA1LjQ3OTI2QzEyLjY1ODggNS40NzkyNiAxMi41NTA3IDUuNDk0MDggMTIuNDQ3OSA1LjUyMTg2WiIgZmlsbD0iIzFEMUMyMyIvPgo8L3N2Zz4="), auto',
|
|
1456
|
+
// },
|
|
1412
1457
|
fromNodeJSON(node, json, isFirstCreate) {
|
|
1413
1458
|
initFormDataFromJSON(node, json, isFirstCreate);
|
|
1414
1459
|
return;
|
|
@@ -1509,6 +1554,9 @@ var WorkflowLinesManager = class {
|
|
|
1509
1554
|
getAllLines() {
|
|
1510
1555
|
return this.entityManager.getEntities(WorkflowLineEntity);
|
|
1511
1556
|
}
|
|
1557
|
+
getAllAvailableLines() {
|
|
1558
|
+
return this.getAllLines().filter((l) => !l.isDrawing && !l.isHidden);
|
|
1559
|
+
}
|
|
1512
1560
|
hasLine(portInfo) {
|
|
1513
1561
|
return !!this.entityManager.getEntityById(
|
|
1514
1562
|
WorkflowLineEntity.portInfoToLineId(portInfo)
|
|
@@ -1530,7 +1578,7 @@ var WorkflowLinesManager = class {
|
|
|
1530
1578
|
return this.createLine(newPortInfo);
|
|
1531
1579
|
}
|
|
1532
1580
|
createLine(options) {
|
|
1533
|
-
const { from, to, drawingTo, fromPort, toPort, data } = options;
|
|
1581
|
+
const { from, to, drawingTo, fromPort, drawingFrom, toPort, data } = options;
|
|
1534
1582
|
const available = Boolean(from && to);
|
|
1535
1583
|
const key = options.key || WorkflowLineEntity.portInfoToLineId(options);
|
|
1536
1584
|
let line = this.entityManager.getEntityById(key);
|
|
@@ -1539,12 +1587,12 @@ var WorkflowLinesManager = class {
|
|
|
1539
1587
|
line.validate();
|
|
1540
1588
|
return line;
|
|
1541
1589
|
}
|
|
1542
|
-
const fromNode = this.entityManager.getEntityById(from)
|
|
1590
|
+
const fromNode = from ? this.entityManager.getEntityById(from).getData(WorkflowNodeLinesData) : void 0;
|
|
1543
1591
|
const toNode = to ? this.entityManager.getEntityById(to).getData(WorkflowNodeLinesData) : void 0;
|
|
1544
|
-
if (!fromNode) {
|
|
1592
|
+
if (!fromNode && !toNode) {
|
|
1545
1593
|
return;
|
|
1546
1594
|
}
|
|
1547
|
-
this.isDrawing = Boolean(drawingTo);
|
|
1595
|
+
this.isDrawing = Boolean(drawingTo || drawingFrom);
|
|
1548
1596
|
line = this.entityManager.createEntity(WorkflowLineEntity, {
|
|
1549
1597
|
id: key,
|
|
1550
1598
|
document: this.document,
|
|
@@ -1554,16 +1602,15 @@ var WorkflowLinesManager = class {
|
|
|
1554
1602
|
toPort,
|
|
1555
1603
|
to,
|
|
1556
1604
|
drawingTo,
|
|
1605
|
+
drawingFrom,
|
|
1557
1606
|
data
|
|
1558
1607
|
});
|
|
1559
1608
|
this.registerData(line);
|
|
1560
|
-
fromNode
|
|
1609
|
+
fromNode?.addLine(line);
|
|
1561
1610
|
toNode?.addLine(line);
|
|
1562
1611
|
line.onDispose(() => {
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
}
|
|
1566
|
-
fromNode.removeLine(line);
|
|
1612
|
+
this.isDrawing = false;
|
|
1613
|
+
fromNode?.removeLine(line);
|
|
1567
1614
|
toNode?.removeLine(line);
|
|
1568
1615
|
});
|
|
1569
1616
|
line.onDispose(() => {
|
|
@@ -1686,7 +1733,7 @@ var WorkflowLinesManager = class {
|
|
|
1686
1733
|
return this.lineColor.default;
|
|
1687
1734
|
}
|
|
1688
1735
|
canAddLine(fromPort, toPort, silent) {
|
|
1689
|
-
if (fromPort === toPort || fromPort.node === toPort.node || fromPort.portType !== "output" || toPort.portType !== "input" || toPort.disabled) {
|
|
1736
|
+
if (fromPort === toPort || fromPort.node === toPort.node || fromPort.portType !== "output" || toPort.portType !== "input" || fromPort.disabled || toPort.disabled) {
|
|
1690
1737
|
return false;
|
|
1691
1738
|
}
|
|
1692
1739
|
const fromCanAdd = fromPort.node.getNodeRegistry().canAddLine;
|
|
@@ -1714,8 +1761,8 @@ var WorkflowLinesManager = class {
|
|
|
1714
1761
|
}
|
|
1715
1762
|
return true;
|
|
1716
1763
|
}
|
|
1717
|
-
canReset(
|
|
1718
|
-
if (this.options && this.options.canResetLine && !this.options.canResetLine(
|
|
1764
|
+
canReset(oldLine, newLineInfo) {
|
|
1765
|
+
if (this.options && this.options.canResetLine && !this.options.canResetLine(oldLine, newLineInfo, this)) {
|
|
1719
1766
|
return false;
|
|
1720
1767
|
}
|
|
1721
1768
|
return true;
|
|
@@ -1724,9 +1771,14 @@ var WorkflowLinesManager = class {
|
|
|
1724
1771
|
* 根据鼠标位置找到 port
|
|
1725
1772
|
* @param pos
|
|
1726
1773
|
*/
|
|
1727
|
-
getPortFromMousePos(pos) {
|
|
1774
|
+
getPortFromMousePos(pos, portType) {
|
|
1728
1775
|
const allNodes = this.getSortedNodes().reverse();
|
|
1729
|
-
const allPorts = allNodes.map((node) =>
|
|
1776
|
+
const allPorts = allNodes.map((node) => {
|
|
1777
|
+
if (!portType) {
|
|
1778
|
+
return node.ports.allPorts;
|
|
1779
|
+
}
|
|
1780
|
+
return portType === "input" ? node.ports.inputPorts : node.ports.outputPorts;
|
|
1781
|
+
}).flat();
|
|
1730
1782
|
const targetPort = allPorts.find((port) => port.isHovered(pos.x, pos.y));
|
|
1731
1783
|
if (targetPort) {
|
|
1732
1784
|
const containNodes = this.getContainNodesFromMousePos(pos);
|
|
@@ -2946,18 +2998,30 @@ var WorkflowDragService = class {
|
|
|
2946
2998
|
line.highlightColor = color;
|
|
2947
2999
|
this.hoverService.clearHovered();
|
|
2948
3000
|
}
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
3001
|
+
checkDraggingPort(isDrawingTo, line, draggingNode, draggingPort, originLine) {
|
|
3002
|
+
let successDrawing = false;
|
|
3003
|
+
if (isDrawingTo) {
|
|
3004
|
+
successDrawing = !!(draggingPort && // 同一条线条则不用在判断 canAddLine
|
|
3005
|
+
(originLine?.toPort === draggingPort || draggingPort.portType === "input" && this.linesManager.canAddLine(line.fromPort, draggingPort, true)));
|
|
3006
|
+
} else {
|
|
3007
|
+
successDrawing = !!(draggingPort && // 同一条线条则不用在判断 canAddLine
|
|
3008
|
+
(originLine?.fromPort === draggingPort || draggingPort.portType === "output" && this.linesManager.canAddLine(draggingPort, line.toPort, true)));
|
|
3009
|
+
}
|
|
3010
|
+
if (successDrawing) {
|
|
3011
|
+
this.hoverService.updateHoveredKey(draggingPort.id);
|
|
3012
|
+
if (isDrawingTo) {
|
|
3013
|
+
line.setToPort(draggingPort);
|
|
3014
|
+
} else {
|
|
3015
|
+
line.setFromPort(draggingPort);
|
|
3016
|
+
}
|
|
2953
3017
|
this._onDragLineEventEmitter.fire({
|
|
2954
3018
|
type: "onDrag",
|
|
2955
|
-
onDragNodeId:
|
|
3019
|
+
onDragNodeId: draggingNode.id
|
|
2956
3020
|
});
|
|
2957
3021
|
return {
|
|
2958
3022
|
hasError: false
|
|
2959
3023
|
};
|
|
2960
|
-
} else if (this.isContainer(
|
|
3024
|
+
} else if (this.isContainer(draggingNode)) {
|
|
2961
3025
|
return {
|
|
2962
3026
|
hasError: false
|
|
2963
3027
|
};
|
|
@@ -3023,16 +3087,18 @@ var WorkflowDragService = class {
|
|
|
3023
3087
|
* @param opts
|
|
3024
3088
|
* @param event
|
|
3025
3089
|
*/
|
|
3026
|
-
async startDrawingLine(
|
|
3027
|
-
const
|
|
3028
|
-
|
|
3090
|
+
async startDrawingLine(port, event, originLine) {
|
|
3091
|
+
const isDrawingTo = port.portType === "output";
|
|
3092
|
+
const isInActivePort = !originLine && port.isErrorPort() && port.disabled;
|
|
3093
|
+
if (originLine?.disabled || isInActivePort || this.playgroundConfig.readonly || this.playgroundConfig.disabled) {
|
|
3029
3094
|
return { dragSuccess: false, newLine: void 0 };
|
|
3030
3095
|
}
|
|
3031
3096
|
this.selectService.clear();
|
|
3032
3097
|
const config = this.playgroundConfig;
|
|
3033
3098
|
const deferred = new PromiseDeferred();
|
|
3034
3099
|
const preCursor = config.cursor;
|
|
3035
|
-
let line
|
|
3100
|
+
let line;
|
|
3101
|
+
let newLineInfo;
|
|
3036
3102
|
const startTime = Date.now();
|
|
3037
3103
|
let dragSuccess = false;
|
|
3038
3104
|
const dragger = new PlaygroundDrag({
|
|
@@ -3043,16 +3109,29 @@ var WorkflowDragService = class {
|
|
|
3043
3109
|
}
|
|
3044
3110
|
dragSuccess = true;
|
|
3045
3111
|
const pos = config.getPosFromMouseEvent(event);
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
|
|
3049
|
-
|
|
3050
|
-
|
|
3051
|
-
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3112
|
+
if (isDrawingTo) {
|
|
3113
|
+
line = this.linesManager.createLine({
|
|
3114
|
+
from: port.node.id,
|
|
3115
|
+
fromPort: port.portID,
|
|
3116
|
+
data: originLine?.lineData,
|
|
3117
|
+
drawingTo: {
|
|
3118
|
+
x: pos.x,
|
|
3119
|
+
y: pos.y,
|
|
3120
|
+
location: port.location === "right" ? "left" : "top"
|
|
3121
|
+
}
|
|
3122
|
+
});
|
|
3123
|
+
} else {
|
|
3124
|
+
line = this.linesManager.createLine({
|
|
3125
|
+
to: port.node.id,
|
|
3126
|
+
toPort: port.portID,
|
|
3127
|
+
data: originLine?.lineData,
|
|
3128
|
+
drawingFrom: {
|
|
3129
|
+
x: pos.x,
|
|
3130
|
+
y: pos.y,
|
|
3131
|
+
location: port.location === "left" ? "right" : "bottom"
|
|
3132
|
+
}
|
|
3133
|
+
});
|
|
3134
|
+
}
|
|
3056
3135
|
if (!line) {
|
|
3057
3136
|
return;
|
|
3058
3137
|
}
|
|
@@ -3063,49 +3142,15 @@ var WorkflowDragService = class {
|
|
|
3063
3142
|
if (!line) {
|
|
3064
3143
|
return;
|
|
3065
3144
|
}
|
|
3066
|
-
lineErrorReset = false;
|
|
3067
3145
|
const dragPos = config.getPosFromMouseEvent(e);
|
|
3068
|
-
|
|
3069
|
-
toPort = this.linesManager.getPortFromMousePos(dragPos);
|
|
3070
|
-
if (!toPort) {
|
|
3071
|
-
line.setToPort(void 0);
|
|
3072
|
-
} else if (!this.linesManager.canAddLine(fromPort, toPort, true)) {
|
|
3073
|
-
line.highlightColor = this.linesManager.lineColor.error;
|
|
3074
|
-
lineErrorReset = true;
|
|
3075
|
-
line.setToPort(void 0);
|
|
3076
|
-
} else {
|
|
3077
|
-
line.setToPort(toPort);
|
|
3078
|
-
}
|
|
3079
|
-
this._onDragLineEventEmitter.fire({
|
|
3080
|
-
type: "onDrag"
|
|
3081
|
-
});
|
|
3082
|
-
this.setLineColor(line, originLine?.lockedColor || this.linesManager.lineColor.drawing);
|
|
3083
|
-
if (toNode && this.canBuildContainerLine(toNode, dragPos)) {
|
|
3084
|
-
toPort = this.getNearestPort(toNode, dragPos);
|
|
3085
|
-
const { hasError } = this.handleDragOnNode(toNode, fromPort, line, toPort, originLine);
|
|
3086
|
-
lineErrorReset = hasError;
|
|
3087
|
-
}
|
|
3088
|
-
if (line.toPort) {
|
|
3089
|
-
line.drawingTo = {
|
|
3090
|
-
x: line.toPort.point.x,
|
|
3091
|
-
y: line.toPort.point.y,
|
|
3092
|
-
location: line.toPort.location
|
|
3093
|
-
};
|
|
3094
|
-
} else {
|
|
3095
|
-
line.drawingTo = {
|
|
3096
|
-
x: dragPos.x,
|
|
3097
|
-
y: dragPos.y,
|
|
3098
|
-
location: reverseLocation(line.fromPort.location)
|
|
3099
|
-
};
|
|
3100
|
-
}
|
|
3101
|
-
originLine?.validate();
|
|
3102
|
-
line.validate();
|
|
3146
|
+
newLineInfo = this.updateDrawingLine(isDrawingTo, line, dragPos, originLine);
|
|
3103
3147
|
},
|
|
3104
3148
|
// eslint-disable-next-line complexity
|
|
3105
3149
|
onDragEnd: async (e) => {
|
|
3106
3150
|
const dragPos = config.getPosFromMouseEvent(e);
|
|
3107
3151
|
const onDragLineEndCallbacks = Array.from(this._onDragLineEndCallbacks.values());
|
|
3108
3152
|
config.updateCursor(preCursor);
|
|
3153
|
+
const { fromPort, toPort, hasError } = newLineInfo || {};
|
|
3109
3154
|
await Promise.all(
|
|
3110
3155
|
onDragLineEndCallbacks.map(
|
|
3111
3156
|
(callback) => callback({
|
|
@@ -3130,36 +3175,32 @@ var WorkflowDragService = class {
|
|
|
3130
3175
|
deferred.resolve({ dragSuccess });
|
|
3131
3176
|
};
|
|
3132
3177
|
if (dragSuccess) {
|
|
3133
|
-
if (originLine && originLine.toPort === toPort) {
|
|
3178
|
+
if (originLine && originLine.toPort === toPort && originLine.fromPort === fromPort) {
|
|
3134
3179
|
return end();
|
|
3135
3180
|
}
|
|
3136
|
-
if (toPort && toPort.portType !== "input") {
|
|
3181
|
+
if (toPort && toPort.portType !== "input" || fromPort && fromPort.portType !== "output") {
|
|
3137
3182
|
return end();
|
|
3138
3183
|
}
|
|
3139
|
-
const
|
|
3184
|
+
const newLinePortInfo = toPort && fromPort ? {
|
|
3140
3185
|
from: fromPort.node.id,
|
|
3141
3186
|
fromPort: fromPort.portID,
|
|
3142
3187
|
to: toPort.node.id,
|
|
3143
3188
|
toPort: toPort.portID,
|
|
3144
3189
|
data: originLine?.lineData
|
|
3145
3190
|
} : void 0;
|
|
3146
|
-
const isReset = originLine &&
|
|
3147
|
-
if (isReset && !this.linesManager.canReset(
|
|
3148
|
-
originLine.fromPort,
|
|
3149
|
-
originLine.toPort,
|
|
3150
|
-
toPort
|
|
3151
|
-
)) {
|
|
3191
|
+
const isReset = originLine && newLinePortInfo;
|
|
3192
|
+
if (isReset && !this.linesManager.canReset(originLine, newLinePortInfo)) {
|
|
3152
3193
|
return end();
|
|
3153
3194
|
}
|
|
3154
|
-
if (originLine && (!this.linesManager.canRemove(originLine,
|
|
3195
|
+
if (originLine && (!this.linesManager.canRemove(originLine, newLinePortInfo, false) || hasError)) {
|
|
3155
3196
|
return end();
|
|
3156
3197
|
} else {
|
|
3157
3198
|
originLine?.dispose();
|
|
3158
3199
|
}
|
|
3159
|
-
if (!
|
|
3200
|
+
if (!newLinePortInfo || !this.linesManager.canAddLine(fromPort, toPort, false)) {
|
|
3160
3201
|
return end();
|
|
3161
3202
|
}
|
|
3162
|
-
const newLine = this.linesManager.createLine(
|
|
3203
|
+
const newLine = this.linesManager.createLine(newLinePortInfo);
|
|
3163
3204
|
if (!newLine) {
|
|
3164
3205
|
end();
|
|
3165
3206
|
}
|
|
@@ -3176,14 +3217,109 @@ var WorkflowDragService = class {
|
|
|
3176
3217
|
await dragger.start(clientX, clientY, config);
|
|
3177
3218
|
return deferred.promise;
|
|
3178
3219
|
}
|
|
3220
|
+
updateDrawingLine(isDrawingTo, line, dragPos, originLine) {
|
|
3221
|
+
let hasError = false;
|
|
3222
|
+
const mouseNode = this.linesManager.getNodeFromMousePos(dragPos);
|
|
3223
|
+
let toNode;
|
|
3224
|
+
let toPort;
|
|
3225
|
+
let fromPort;
|
|
3226
|
+
let fromNode;
|
|
3227
|
+
if (isDrawingTo) {
|
|
3228
|
+
fromPort = line.fromPort;
|
|
3229
|
+
toNode = mouseNode;
|
|
3230
|
+
toPort = this.linesManager.getPortFromMousePos(dragPos, "input");
|
|
3231
|
+
if (toNode && this.canBuildContainerLine(toNode, dragPos)) {
|
|
3232
|
+
toPort = this.getNearestPort(toNode, dragPos, "input");
|
|
3233
|
+
hasError = this.checkDraggingPort(isDrawingTo, line, toNode, toPort, originLine).hasError;
|
|
3234
|
+
}
|
|
3235
|
+
if (!toPort) {
|
|
3236
|
+
line.setToPort(void 0);
|
|
3237
|
+
} else if (!this.linesManager.canAddLine(fromPort, toPort, true)) {
|
|
3238
|
+
hasError = true;
|
|
3239
|
+
line.setToPort(void 0);
|
|
3240
|
+
} else {
|
|
3241
|
+
line.setToPort(toPort);
|
|
3242
|
+
}
|
|
3243
|
+
if (line.toPort) {
|
|
3244
|
+
line.drawingTo = {
|
|
3245
|
+
x: line.toPort.point.x,
|
|
3246
|
+
y: line.toPort.point.y,
|
|
3247
|
+
location: line.toPort.location
|
|
3248
|
+
};
|
|
3249
|
+
} else {
|
|
3250
|
+
line.drawingTo = {
|
|
3251
|
+
x: dragPos.x,
|
|
3252
|
+
y: dragPos.y,
|
|
3253
|
+
location: reverseLocation(line.fromPort.location)
|
|
3254
|
+
};
|
|
3255
|
+
}
|
|
3256
|
+
} else {
|
|
3257
|
+
toPort = line.toPort;
|
|
3258
|
+
fromNode = mouseNode;
|
|
3259
|
+
fromPort = this.linesManager.getPortFromMousePos(dragPos, "output");
|
|
3260
|
+
if (fromNode && this.canBuildContainerLine(fromNode, dragPos)) {
|
|
3261
|
+
fromPort = this.getNearestPort(fromNode, dragPos, "output");
|
|
3262
|
+
hasError = this.checkDraggingPort(
|
|
3263
|
+
isDrawingTo,
|
|
3264
|
+
line,
|
|
3265
|
+
fromNode,
|
|
3266
|
+
fromPort,
|
|
3267
|
+
originLine
|
|
3268
|
+
).hasError;
|
|
3269
|
+
}
|
|
3270
|
+
if (!fromPort) {
|
|
3271
|
+
line.setFromPort(void 0);
|
|
3272
|
+
} else if (!this.linesManager.canAddLine(fromPort, toPort, true)) {
|
|
3273
|
+
hasError = true;
|
|
3274
|
+
line.setFromPort(void 0);
|
|
3275
|
+
} else {
|
|
3276
|
+
line.setFromPort(fromPort);
|
|
3277
|
+
}
|
|
3278
|
+
if (line.fromPort) {
|
|
3279
|
+
line.drawingFrom = {
|
|
3280
|
+
x: line.fromPort.point.x,
|
|
3281
|
+
y: line.fromPort.point.y,
|
|
3282
|
+
location: line.fromPort.location
|
|
3283
|
+
};
|
|
3284
|
+
} else {
|
|
3285
|
+
line.drawingFrom = {
|
|
3286
|
+
x: dragPos.x,
|
|
3287
|
+
y: dragPos.y,
|
|
3288
|
+
location: reverseLocation(line.toPort.location)
|
|
3289
|
+
};
|
|
3290
|
+
}
|
|
3291
|
+
}
|
|
3292
|
+
this._onDragLineEventEmitter.fire({
|
|
3293
|
+
type: "onDrag"
|
|
3294
|
+
});
|
|
3295
|
+
if (hasError) {
|
|
3296
|
+
this.setLineColor(line, this.linesManager.lineColor.error);
|
|
3297
|
+
} else {
|
|
3298
|
+
this.setLineColor(line, originLine?.lockedColor || this.linesManager.lineColor.drawing);
|
|
3299
|
+
}
|
|
3300
|
+
originLine?.validate();
|
|
3301
|
+
line.validate();
|
|
3302
|
+
return {
|
|
3303
|
+
fromPort,
|
|
3304
|
+
toPort,
|
|
3305
|
+
hasError
|
|
3306
|
+
};
|
|
3307
|
+
}
|
|
3179
3308
|
/**
|
|
3180
3309
|
* 重新连接线条
|
|
3181
3310
|
* @param line
|
|
3182
3311
|
* @param e
|
|
3183
3312
|
*/
|
|
3184
3313
|
async resetLine(line, e) {
|
|
3185
|
-
const { fromPort } = line;
|
|
3186
|
-
const
|
|
3314
|
+
const { fromPort, toPort } = line;
|
|
3315
|
+
const mousePos = this.playgroundConfig.getPosFromMouseEvent(e);
|
|
3316
|
+
const distanceFrom = Point.getDistance(fromPort.point, mousePos);
|
|
3317
|
+
const distanceTo = Point.getDistance(toPort.point, mousePos);
|
|
3318
|
+
const { dragSuccess } = await this.startDrawingLine(
|
|
3319
|
+
distanceTo <= distanceFrom || !this.document.options.twoWayConnection ? fromPort : toPort,
|
|
3320
|
+
e,
|
|
3321
|
+
line
|
|
3322
|
+
);
|
|
3187
3323
|
if (!dragSuccess) {
|
|
3188
3324
|
this.selectService.select(line);
|
|
3189
3325
|
}
|
|
@@ -3205,17 +3341,27 @@ var WorkflowDragService = class {
|
|
|
3205
3341
|
return true;
|
|
3206
3342
|
}
|
|
3207
3343
|
const { padding, bounds } = node.transform;
|
|
3208
|
-
const
|
|
3209
|
-
|
|
3344
|
+
const DEFAULT_DELTA = 10;
|
|
3345
|
+
const leftDelta = padding.left * 2 / 3 || DEFAULT_DELTA;
|
|
3346
|
+
const rightDelta = padding.right * 2 / 3 || DEFAULT_DELTA;
|
|
3347
|
+
const bottomDelta = padding.bottom * 2 / 3 || DEFAULT_DELTA;
|
|
3348
|
+
const topDelta = padding.top * 2 / 3 || DEFAULT_DELTA;
|
|
3349
|
+
const rectangles = [
|
|
3350
|
+
new Rectangle8(bounds.x, bounds.y, leftDelta, bounds.height),
|
|
3351
|
+
// left
|
|
3352
|
+
new Rectangle8(bounds.x, bounds.y, bounds.width, topDelta),
|
|
3353
|
+
// top
|
|
3354
|
+
new Rectangle8(bounds.x, bounds.y + bounds.height - bottomDelta, bounds.width, bottomDelta),
|
|
3355
|
+
// bottom
|
|
3356
|
+
new Rectangle8(bounds.x + bounds.width - rightDelta, bounds.y, rightDelta, bounds.height)
|
|
3357
|
+
// right
|
|
3358
|
+
];
|
|
3359
|
+
return rectangles.some((rect) => rect.contains(mousePos.x, mousePos.y));
|
|
3210
3360
|
}
|
|
3211
3361
|
/** 获取最近的 port */
|
|
3212
|
-
getNearestPort(node, mousePos) {
|
|
3362
|
+
getNearestPort(node, mousePos, portType = "input") {
|
|
3213
3363
|
const portsData = node.ports;
|
|
3214
|
-
const distanceSortedPorts = portsData.inputPorts.sort((a, b) =>
|
|
3215
|
-
const aDistance = Math.abs(mousePos.y - a.point.y);
|
|
3216
|
-
const bDistance = Math.abs(mousePos.y - b.point.y);
|
|
3217
|
-
return aDistance - bDistance;
|
|
3218
|
-
});
|
|
3364
|
+
const distanceSortedPorts = (portType === "input" ? portsData.inputPorts : portsData.outputPorts).sort((a, b) => Point.getDistance(mousePos, a.point) - Point.getDistance(mousePos, b.point));
|
|
3219
3365
|
return distanceSortedPorts[0];
|
|
3220
3366
|
}
|
|
3221
3367
|
};
|
|
@@ -3487,8 +3633,8 @@ function useNodeRender(nodeFromProps) {
|
|
|
3487
3633
|
}, []);
|
|
3488
3634
|
const getExtInfo = useCallback(() => node.getExtInfo(), [node]);
|
|
3489
3635
|
const updateExtInfo = useCallback(
|
|
3490
|
-
(data) => {
|
|
3491
|
-
node.updateExtInfo(data);
|
|
3636
|
+
(data, fullUpdate) => {
|
|
3637
|
+
node.updateExtInfo(data, fullUpdate);
|
|
3492
3638
|
},
|
|
3493
3639
|
[node]
|
|
3494
3640
|
);
|
|
@@ -3523,7 +3669,7 @@ function useNodeRender(nodeFromProps) {
|
|
|
3523
3669
|
if (form) {
|
|
3524
3670
|
form.updateFormValues(values);
|
|
3525
3671
|
} else {
|
|
3526
|
-
updateExtInfo(values);
|
|
3672
|
+
updateExtInfo(values, true);
|
|
3527
3673
|
}
|
|
3528
3674
|
},
|
|
3529
3675
|
node,
|