@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/index.js
CHANGED
|
@@ -818,16 +818,8 @@ var WorkflowLineRenderData = class extends import_core7.EntityData {
|
|
|
818
818
|
* WARNING: 这个方法,必须在 requestAnimationFrame / useLayoutEffect 中调用,否则会引起浏览器强制重排
|
|
819
819
|
*/
|
|
820
820
|
updatePosition() {
|
|
821
|
-
this.data.position.from = this.entity.
|
|
822
|
-
|
|
823
|
-
this.data.position.to = this.entity.info.drawingTo;
|
|
824
|
-
} else {
|
|
825
|
-
this.data.position.to = this.entity.to?.ports?.getInputPoint(this.entity.info.toPort) ?? {
|
|
826
|
-
x: this.data.position.from.x,
|
|
827
|
-
y: this.data.position.from.y,
|
|
828
|
-
location: this.data.position.from.location === "right" ? "left" : "top"
|
|
829
|
-
};
|
|
830
|
-
}
|
|
821
|
+
this.data.position.from = this.entity.drawingFrom || this.entity.fromPort.point;
|
|
822
|
+
this.data.position.to = this.entity.drawingTo || this.entity.toPort.point;
|
|
831
823
|
this.data.version = [
|
|
832
824
|
this.lineType,
|
|
833
825
|
this.data.position.from.x,
|
|
@@ -892,10 +884,11 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
892
884
|
to: opts.to,
|
|
893
885
|
drawingTo: opts.drawingTo,
|
|
894
886
|
fromPort: opts.fromPort,
|
|
887
|
+
drawingFrom: opts.drawingFrom,
|
|
895
888
|
toPort: opts.toPort,
|
|
896
889
|
data: opts.data
|
|
897
890
|
});
|
|
898
|
-
if (opts.drawingTo) {
|
|
891
|
+
if (opts.drawingTo || opts.drawingFrom) {
|
|
899
892
|
this.isDrawing = true;
|
|
900
893
|
}
|
|
901
894
|
this.onEntityChange(() => {
|
|
@@ -1030,6 +1023,30 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
1030
1023
|
}
|
|
1031
1024
|
this.fireChange();
|
|
1032
1025
|
}
|
|
1026
|
+
setFromPort(fromPort) {
|
|
1027
|
+
if (!this.isDrawing) {
|
|
1028
|
+
throw new Error("[setFromPort] only support drawing line.");
|
|
1029
|
+
}
|
|
1030
|
+
if (this.fromPort === fromPort) {
|
|
1031
|
+
return;
|
|
1032
|
+
}
|
|
1033
|
+
const prePort = this.fromPort;
|
|
1034
|
+
if (fromPort && fromPort.portType === "output" && this.linesManager.canAddLine(fromPort, this.toPort, true)) {
|
|
1035
|
+
const { node, portID } = fromPort;
|
|
1036
|
+
this._from = node;
|
|
1037
|
+
this.info.drawingFrom = void 0;
|
|
1038
|
+
this.info.from = node.id;
|
|
1039
|
+
this.info.fromPort = portID;
|
|
1040
|
+
} else {
|
|
1041
|
+
this._from = void 0;
|
|
1042
|
+
this.info.from = void 0;
|
|
1043
|
+
this.info.fromPort = "";
|
|
1044
|
+
}
|
|
1045
|
+
if (prePort) {
|
|
1046
|
+
prePort.validate();
|
|
1047
|
+
}
|
|
1048
|
+
this.fireChange();
|
|
1049
|
+
}
|
|
1033
1050
|
/**
|
|
1034
1051
|
* 设置线条画线时的目标位置
|
|
1035
1052
|
*/
|
|
@@ -1046,6 +1063,22 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
1046
1063
|
this.fireChange();
|
|
1047
1064
|
}
|
|
1048
1065
|
}
|
|
1066
|
+
set drawingFrom(pos) {
|
|
1067
|
+
const oldDrawingFrom = this.info.drawingFrom;
|
|
1068
|
+
if (!pos) {
|
|
1069
|
+
this.info.drawingFrom = void 0;
|
|
1070
|
+
this.fireChange();
|
|
1071
|
+
return;
|
|
1072
|
+
}
|
|
1073
|
+
if (!oldDrawingFrom || pos.x !== oldDrawingFrom.x || pos.y !== oldDrawingFrom.y) {
|
|
1074
|
+
this.info.from = void 0;
|
|
1075
|
+
this.info.drawingFrom = pos;
|
|
1076
|
+
this.fireChange();
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
get drawingFrom() {
|
|
1080
|
+
return this.info.drawingFrom;
|
|
1081
|
+
}
|
|
1049
1082
|
/**
|
|
1050
1083
|
* 获取线条正在画线的位置
|
|
1051
1084
|
*/
|
|
@@ -1084,6 +1117,9 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
1084
1117
|
return this.getData(WorkflowLineRenderData).calcDistance(pos);
|
|
1085
1118
|
}
|
|
1086
1119
|
get fromPort() {
|
|
1120
|
+
if (!this.from) {
|
|
1121
|
+
return void 0;
|
|
1122
|
+
}
|
|
1087
1123
|
return this.from.ports.getPortEntityByKey("output", this.info.fromPort);
|
|
1088
1124
|
}
|
|
1089
1125
|
get toPort() {
|
|
@@ -1124,7 +1160,7 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
1124
1160
|
* @deprecated
|
|
1125
1161
|
*/
|
|
1126
1162
|
get vertical() {
|
|
1127
|
-
const fromLocation = this.fromPort
|
|
1163
|
+
const fromLocation = this.fromPort?.location;
|
|
1128
1164
|
const toLocation = this.toPort?.location;
|
|
1129
1165
|
if (toLocation) {
|
|
1130
1166
|
return toLocation === "top";
|
|
@@ -1150,7 +1186,7 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
1150
1186
|
initInfo(info) {
|
|
1151
1187
|
if (!(0, import_lodash_es2.isEqual)(info, this.info)) {
|
|
1152
1188
|
this.info = info;
|
|
1153
|
-
this._from = this.document.getNode(info.from);
|
|
1189
|
+
this._from = info.from ? this.document.getNode(info.from) : void 0;
|
|
1154
1190
|
this._to = info.to ? this.document.getNode(info.to) : void 0;
|
|
1155
1191
|
this._lineData = info.data;
|
|
1156
1192
|
this.fireChange();
|
|
@@ -1184,7 +1220,7 @@ var _WorkflowLineEntity = class _WorkflowLineEntity extends import_core8.Entity
|
|
|
1184
1220
|
this._node = import_utils8.domUtils.createDivWithClass("gedit-flow-activity-line");
|
|
1185
1221
|
this._node.dataset.testid = "sdk.workflow.canvas.line";
|
|
1186
1222
|
this._node.dataset.lineId = this.id;
|
|
1187
|
-
this._node.dataset.fromNodeId = this.from
|
|
1223
|
+
this._node.dataset.fromNodeId = this.from?.id ?? "";
|
|
1188
1224
|
this._node.dataset.fromPortId = this.fromPort?.id ?? "";
|
|
1189
1225
|
this._node.dataset.toNodeId = this.to?.id ?? "";
|
|
1190
1226
|
this._node.dataset.toPortId = this.toPort?.id ?? "";
|
|
@@ -1366,10 +1402,17 @@ var WorkflowHoverService = class {
|
|
|
1366
1402
|
}
|
|
1367
1403
|
/**
|
|
1368
1404
|
* 获取被 hover 的节点或线条
|
|
1405
|
+
* @deprecated use 'someHovered' instead
|
|
1369
1406
|
*/
|
|
1370
1407
|
get hoveredNode() {
|
|
1371
1408
|
return this.entityManager.getEntityById(this.hoveredKey);
|
|
1372
1409
|
}
|
|
1410
|
+
/**
|
|
1411
|
+
* 获取被 hover 的节点或线条
|
|
1412
|
+
*/
|
|
1413
|
+
get someHovered() {
|
|
1414
|
+
return this.entityManager.getEntityById(this.hoveredKey);
|
|
1415
|
+
}
|
|
1373
1416
|
};
|
|
1374
1417
|
__decorateClass([
|
|
1375
1418
|
(0, import_inversify2.inject)(import_core10.EntityManager)
|
|
@@ -1470,10 +1513,11 @@ function initFormDataFromJSON(node, json, isFirstCreate) {
|
|
|
1470
1513
|
// src/workflow-document-option.ts
|
|
1471
1514
|
var WorkflowDocumentOptions = Symbol("WorkflowDocumentOptions");
|
|
1472
1515
|
var WorkflowDocumentOptionsDefault = {
|
|
1473
|
-
cursors: {
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1516
|
+
// cursors: {
|
|
1517
|
+
// grab: 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC40ODczIDIuNjIzNzhDOS45MDczMSAyLjYyMzc4IDkuNDM3MTMgMy4wOTM5NiA5LjQzNzEzIDMuNjczOTZWNS4xNDM3NkM5LjM5NDI4IDQuNDAyNzQgOC43Nzk3OCAzLjgxNTA0IDguMDI4MDIgMy44MTUwNEM3LjI0ODQ4IDMuODE1MDQgNi42MTY1MyA0LjQ0Njk5IDYuNjE2NTMgNS4yMjY1M1YxMS44Mjg5TDUuNjc0MTggMTEuMDA0OUM1LjE1NDg3IDEwLjU1MDkgNC40MDk1IDEwLjQ2MzYgMy43OTkzOCAxMC43ODU1TDMuNjk2OTQgMTAuODM5NkMzLjA2MjE3IDExLjE3NDUgMi45MjI2IDEyLjAyMjggMy40MTY2MiAxMi41NDM0TDcuMzM5NTkgMTYuNjc3NVYxNy4zMjU5QzcuMzM5NTkgMTcuNzg2MiA3LjcxMjY5IDE4LjE1OTMgOC4xNzI5MiAxOC4xNTkzSDEzLjgwODRDMTQuMjY4NyAxOC4xNTkzIDE0LjY0MTcgMTcuNzg2MiAxNC42NDE3IDE3LjMyNTlWMTYuNzkzNUMxNS44MDk0IDE1LjY0ODUgMTYuNDY3MyAxNC4wODE5IDE2LjQ2NzMgMTIuNDQ2NVYxMS40OTY3TDE2LjQ2NzEgNi42MzY4NUMxNi40NjcxIDUuOTU2MyAxNS45MTU0IDUuNDA0NjEgMTUuMjM0OCA1LjQwNDYxQzE0LjU1NDMgNS40MDQ2MSAxNC4wMDI2IDUuOTU2MyAxNC4wMDI2IDYuNjM2ODVMMTQuMDAyMSA1LjA0NzI4QzE0LjAwMjEgNC4zNjY3MyAxMy40NTA0IDMuODE1MDQgMTIuNzY5OCAzLjgxNTA0QzEyLjA4OTMgMy44MTUwNCAxMS41Mzc2IDQuMzY2NzMgMTEuNTM3NiA1LjA0NzI4TDExLjUzNzUgMy42NzM5NUMxMS41Mzc1IDMuMDkzOTYgMTEuMDY3MyAyLjYyMzc4IDEwLjQ4NzMgMi42MjM3OFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3NCAxLjM3NDAyQzExLjM2MTIgMS4zNzQwMiAxMi4xMjExIDEuODYxMTggMTIuNTEwNSAyLjU3ODY4QzEyLjU5NTggMi41Njk4MyAxMi42ODIzIDIuNTY1MjggMTIuNzcgMi41NjUyOEMxMy44Mjc4IDIuNTY1MjggMTQuNzMxMSAzLjIyNzAxIDE1LjA4ODUgNC4xNTkxMUMxNS4xMzcgNC4xNTYyOSAxNS4xODU4IDQuMTU0ODYgMTUuMjM1IDQuMTU0ODZDMTYuNjA1OSA0LjE1NDg2IDE3LjcxNzIgNS4yNjYxOSAxNy43MTcyIDYuNjM3MDlMMTcuNzE3NCAxMi40NDY3QzE3LjcxNzQgMTQuMjM1NSAxNy4wNjQ0IDE1Ljk1NTkgMTUuODkxOSAxNy4yOTA0VjE3LjMyNjJDMTUuODkxOSAxOC40NzY4IDE0Ljk1OTEgMTkuNDA5NSAxMy44MDg1IDE5LjQwOTVIOC4xNzMwNkM3LjAyMjQ3IDE5LjQwOTUgNi4wODk3MyAxOC40NzY4IDYuMDg5NzMgMTcuMzI2MlYxNy4xNzY0TDIuNTEwMDMgMTMuNDA0MUMxLjQ0NTk5IDEyLjI4MjggMS43NDY2IDEwLjQ1NTUgMy4xMTM3OSA5LjczNDI0TDMuMjE2MjQgOS42ODAxOUMzLjg5MTY4IDkuMzIzODMgNC42NjE4NSA5LjI1NDAxIDUuMzY2NjYgOS40NTE5OFY1LjIyNjc4QzUuMzY2NjYgMy43NTY4NyA2LjU1ODI2IDIuNTY1MjggOC4wMjgxNiAyLjU2NTI4QzguMTcyOTMgMi41NjUyOCA4LjMxNDk5IDIuNTc2ODQgOC40NTM0NyAyLjU5OTA3QzguODM5NDMgMS44NzA0MiA5LjYwNTQ2IDEuMzc0MDIgMTAuNDg3NCAxLjM3NDAyWk0xMi40NDc2IDMuODU3ODdWOS40NzY0NkMxMi40NDc2IDkuNzI4NTIgMTIuMjQzMyA5LjkzMjg1IDExLjk5MTMgOS45MzI4NUMxMS43MzkyIDkuOTMyODUgMTEuNTM0OSA5LjcyODUyIDExLjUzNDkgOS40NzY0NlYzLjc5NjU1QzExLjUzNDkgMy43Nzk1NiAxMS41MzU4IDMuNzYyNzcgMTEuNTM3NiAzLjc0NjI2VjMuNjc0MkMxMS41Mzc2IDMuNDMyODIgMTEuNDU2MiAzLjIxMDQ2IDExLjMxOTMgMy4wMzMwOUMxMS4xMjcyIDIuNzg0MjggMTAuODI2MSAyLjYyNDAyIDEwLjQ4NzQgMi42MjQwMkMxMC4xMjM4IDIuNjI0MDIgOS44MDMzMiAyLjgwODg2IDkuNjE0ODMgMy4wODk3QzkuNTAyNjkgMy4yNTY3OSA5LjQzNzI2IDMuNDU3ODUgOS40MzcyNiAzLjY3NDJWMy43ODU3M0M5LjQzNzM1IDMuNzg5MzMgOS40MzczOSAzLjc5Mjk0IDkuNDM3MzkgMy43OTY1NVY5LjkwMTdDOS40MzczOSAxMC4xNTM3IDkuMjMzMDYgMTAuMzU4MSA4Ljk4MTAxIDEwLjM1ODFDOC43Mjg5NSAxMC4zNTgxIDguNTI0NjIgMTAuMTUzNyA4LjUyNDYyIDkuOTAxN1YzLjkwNTA3QzguNDE3NzMgMy44NjQ5IDguMzA0NjggMy44MzczMiA4LjE4NzI2IDMuODI0MTVDOC4xMzUwNCAzLjgxODI5IDguMDgxOTUgMy44MTUyOCA4LjAyODE2IDMuODE1MjhDNy4yNDg2MSAzLjgxNTI4IDYuNjE2NjYgNC40NDcyMyA2LjYxNjY2IDUuMjI2NzhWMTEuODI5Mkw1LjY3NDMxIDExLjAwNTJDNS41Nzg2OCAxMC45MjE2IDUuNDc1MzcgMTAuODUwNCA1LjM2NjY2IDEwLjc5MTlDNC44ODUwNiAxMC41MzI5IDQuMjk3MjggMTAuNTIzMSAzLjc5OTUyIDEwLjc4NThMMy42OTcwNyAxMC44Mzk4QzMuMDYyMzEgMTEuMTc0NyAyLjkyMjczIDEyLjAyMzEgMy40MTY3NSAxMi41NDM3TDcuMzM5NzMgMTYuNjc3N1YxNy4zMjYyQzcuMzM5NzMgMTcuNzg2NCA3LjcxMjgyIDE4LjE1OTUgOC4xNzMwNiAxOC4xNTk1SDEzLjgwODVDMTQuMjY4OCAxOC4xNTk1IDE0LjY0MTkgMTcuNzg2NCAxNC42NDE5IDE3LjMyNjJWMTYuNzkzOEMxNS43Mzc5IDE1LjcxOSAxNi4zODQ3IDE0LjI3MjggMTYuNDYgMTIuNzQ3QzE2LjQ2NDEgMTIuNjY0MSAxNi40NjY1IDEyLjU4MDkgMTYuNDY3MiAxMi40OTc1TDE2LjQ2NzQgMTIuNDQ2N0wxNi40NjcyIDYuNjM3MDlDMTYuNDY3MiA1Ljk2MjMgMTUuOTI0OCA1LjQxNDE5IDE1LjI1MjIgNS40MDQ5N0wxNS4yMzUgNS40MDQ4NkMxNS4xMjQ2IDUuNDA0ODYgMTUuMDE3NyA1LjQxOTM2IDE0LjkxNTkgNS40NDY1NlY5LjYwMjI2QzE0LjkxNTkgOS44NTQzMSAxNC43MTE2IDEwLjA1ODYgMTQuNDU5NSAxMC4wNTg2QzE0LjIwNzUgMTAuMDU4NiAxNC4wMDMxIDkuODU0MzEgMTQuMDAzMSA5LjYwMjI2VjYuNjA1MTRDMTQuMDAyOSA2LjYxNTc2IDE0LjAwMjcgNi42MjY0MSAxNC4wMDI3IDYuNjM3MDlWOS4yNzcwNUwxNC4wMDIyIDUuMDQ3NTJDMTQuMDAyMiA0Ljg2OTEzIDEzLjk2NDMgNC42OTk2IDEzLjg5NjEgNC41NDY1M0MxMy43MDY0IDQuMTIwNzIgMTMuMjgyMiAzLjgyMjM1IDEyLjc4NzYgMy44MTU0MUwxMi43NyAzLjgxNTI4QzEyLjY1ODQgMy44MTUyOCAxMi41NTA0IDMuODMwMSAxMi40NDc2IDMuODU3ODdaIiBmaWxsPSIjMUQxQzIzIi8+Cjwvc3ZnPg=="), auto',
|
|
1518
|
+
// grabbing:
|
|
1519
|
+
// 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjYxODE3IDUuNTk4NzVDNi42MTgxNyA0LjgxOTIgNy4yNTAxMiA0LjE4NzI2IDguMDI5NjcgNC4xODcyNkM4Ljc3ODczIDQuMTg3MjYgOS4zOTE1MiA0Ljc3MDc1IDkuNDM4MjkgNS41MDgwMUM5LjQ1OTkyIDQuOTQ3MSA5LjkyMTQ3IDQuNDk5MDIgMTAuNDg3NyA0LjQ5OTAyQzExLjA2NzcgNC40OTkwMiAxMS41Mzc4IDQuOTY5MiAxMS41Mzc4IDUuNTQ5MTlWOC43NjI0NkwxMS41Mzc5IDYuNzExNUMxMS41Mzc5IDYuMDMwOTUgMTIuMDg5NiA1LjQ3OTI2IDEyLjc3MDIgNS40NzkyNkMxMy40NTA3IDUuNDc5MjYgMTQuMDAyNCA2LjAzMDk1IDE0LjAwMjQgNi43MTE1TDE0LjAwMjQgOC43NjI0NkwxNC4wMDI5IDguMDE5ODNDMTQuMDAyOSA3LjMzOTI5IDE0LjU1NDYgNi43ODc1OSAxNS4yMzUyIDYuNzg3NTlDMTUuOTE1NyA2Ljc4NzU5IDE2LjQ2NzQgNy4zMzkyOCAxNi40Njc0IDguMDE5ODNWMTEuNDk3TDE2LjQ2NzUgMTIuNDQ2N0MxNi40Njc1IDE0LjA4MjEgMTUuODA5NiAxNS42NDg3IDE0LjY0MiAxNi43OTM4VjE3LjMyNjJDMTQuNjQyIDE3Ljc4NjQgMTQuMjY4OSAxOC4xNTk1IDEzLjgwODcgMTguMTU5NUg4LjE3MzE3QzcuNzEyOTMgMTguMTU5NSA3LjMzOTg0IDE3Ljc4NjQgNy4zMzk4NCAxNy4zMjYyVjE1Ljk0MjRMNS4zNDU2MiAxNC43NTM0QzQuNTg5MjQgMTQuMzAyNCA0LjEyNTkxIDEzLjQ4NjcgNC4xMjU4OSAxMi42MDYxTDQuMTI1ODMgOS4yODM4M0M0LjEyNTgyIDguOTU0MjcgNC4zMjAwMyA4LjY1NTY2IDQuNjIxMjkgOC41MjIwNUw2LjYxODE3IDcuNjM2MzRWNS41OTg3NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3OCAzLjI0OTAyQzExLjI3OTYgMy4yNDkwMiAxMS45Nzc4IDMuNjQ5MDIgMTIuMzkxNyA0LjI1Nzk2QzEyLjUxNTEgNC4yMzkwNiAxMi42NDE2IDQuMjI5MjYgMTIuNzcwMyA0LjIyOTI2QzEzLjcyMjQgNC4yMjkyNiAxNC41NDkzIDQuNzY1MzEgMTQuOTY1NyA1LjU1MjA3QzE1LjA1NDMgNS41NDI1IDE1LjE0NDIgNS41Mzc1OSAxNS4yMzUzIDUuNTM3NTlDMTYuNjA2MiA1LjUzNzU5IDE3LjcxNzYgNi42NDg5MyAxNy43MTc2IDguMDE5ODNMMTcuNzE3NyAxMi40NDY3QzE3LjcxNzcgMTQuMjM1NSAxNy4wNjQ3IDE1Ljk1NTkgMTUuODkyMSAxNy4yOTA0VjE3LjMyNjJDMTUuODkyMSAxOC40NzY4IDE0Ljk1OTQgMTkuNDA5NSAxMy44MDg4IDE5LjQwOTVIOC4xNzMzMkM3LjAyMjczIDE5LjQwOTUgNi4wODk5OCAxOC40NzY4IDYuMDg5OTggMTcuMzI2MlYxNi42NTI0TDQuNzA1NjMgMTUuODI3QzMuNTcxMDYgMTUuMTUwNSAyLjg3NjA3IDEzLjkyNzEgMi44NzYwNCAxMi42MDYxTDIuODc1OTggOS4yODM4NUMyLjg3NTk2IDguNDU5OTYgMy4zNjE0OSA3LjcxMzQ1IDQuMTE0NjIgNy4zNzk0TDUuMzY4MzIgNi44MjMzM1Y1LjU5ODc1QzUuMzY4MzIgNC4xMjg4NSA2LjU1OTkxIDIuOTM3MjYgOC4wMjk4MiAyLjkzNzI2QzguNjA4MzEgMi45MzcyNiA5LjE0MzU1IDMuMTIxNyA5LjU4MDA1IDMuNDM1MDVDOS44NTg1MyAzLjMxNTMyIDEwLjE2NTQgMy4yNDkwMiAxMC40ODc4IDMuMjQ5MDJaTTEyLjQ0NzkgNS41MjE4NlY5LjQ3NTU3QzEyLjQ0NzkgOS43Mjc2MiAxMi4yNDM2IDkuOTMxOTUgMTEuOTkxNiA5LjkzMTk1QzExLjc1NjggOS45MzE5NSAxMS41NjM0IDkuNzU0NjUgMTEuNTM4IDkuNTI2NjNDMTEuNTM2MSA5LjUwOTg3IDExLjUzNTIgOS40OTI4MyAxMS41MzUyIDkuNDc1NTdWNS40NzE1OEMxMS41MTU0IDUuMjAwODMgMTEuMzkzIDQuOTU4NTggMTEuMjA2NiA0Ljc4MzU4QzExLjAxODggNC42MDcxMSAxMC43NjU5IDQuNDk5MDIgMTAuNDg3OCA0LjQ5OTAyQzEwLjQ3NjYgNC40OTkwMiAxMC40NjU0IDQuNDk5MTkgMTAuNDU0MiA0LjQ5OTU0QzkuOTAzNDcgNC41MTY4NCA5LjQ1OTY0IDQuOTU4MjQgOS40Mzg0NCA1LjUwODAxQzkuNDM4MiA1LjUwNDMgOS40Mzc5NSA1LjUwMDU4IDkuNDM3NjkgNS40OTY4OFY5LjkwMjQzQzkuNDM3NjkgMTAuMTU0NSA5LjIzMzM2IDEwLjM1ODggOC45ODEzMSAxMC4zNTg4QzguNzI5MjUgMTAuMzU4OCA4LjUyNDkyIDEwLjE1NDUgOC41MjQ5MiA5LjkwMjQzVjQuMjc2NTNDOC4zNzA4NiA0LjIxODgyIDguMjA0MDIgNC4xODcyNiA4LjAyOTgyIDQuMTg3MjZDNy4yNTAyNyA0LjE4NzI2IDYuNjE4MzIgNC44MTkyIDYuNjE4MzIgNS41OTg3NUw2LjYxODI3IDkuOTc1OTlDNi42MTgyNyAxMC4yMjggNi40MTM5NCAxMC40MzI0IDYuMTYxODkgMTAuNDMyNEM1LjkwOTgzIDEwLjQzMjQgNS43MDU1IDEwLjIyOCA1LjcwNTUgOS45NzU5OVY4LjA0MTIyTDQuNjIxNDQgOC41MjIwNUM0LjMyMDE4IDguNjU1NjYgNC4xMjU5NyA4Ljk1NDI3IDQuMTI1OTggOS4yODM4M0w0LjEyNjA0IDEyLjYwNjFDNC4xMjYwNiAxMy40ODY3IDQuNTg5MzkgMTQuMzAyNCA1LjM0NTc2IDE0Ljc1MzRMNy4zMzk5OCAxNS45NDI0VjE3LjMyNjJDNy4zMzk5OCAxNy43ODY0IDcuNzEzMDggMTguMTU5NSA4LjE3MzMyIDE4LjE1OTVIMTMuODA4OEMxNC4yNjkgMTguMTU5NSAxNC42NDIxIDE3Ljc4NjQgMTQuNjQyMSAxNy4zMjYyVjE2Ljc5MzhDMTUuNzM4MSAxNS43MTkgMTYuMzg1IDE0LjI3MjggMTYuNDYwMyAxMi43NDdDMTYuNDY0NiAxMi42NiAxNi40NjcgMTIuNTcyOCAxNi40Njc2IDEyLjQ4NTRMMTYuNDY3NyAxMi40NDY3TDE2LjQ2NzYgOC4wMTk4M0MxNi40Njc2IDcuMzQ1MDQgMTUuOTI1MiA2Ljc5NjkzIDE1LjI1MjUgNi43ODc3MUwxNS4yMzUzIDYuNzg3NTlDMTUuMTI1IDYuNzg3NTkgMTUuMDE4IDYuODAyMSAxNC45MTYyIDYuODI5MzFWOS42MDEzNkMxNC45MTYyIDkuODUzNDIgMTQuNzExOSAxMC4wNTc3IDE0LjQ1OTggMTAuMDU3N0MxNC4yMDc4IDEwLjA1NzcgMTQuMDAzNCA5Ljg1MzQxIDE0LjAwMzQgOS42MDEzNlY3Ljk4OTg1QzE0LjAwMzIgNy45OTk4MiAxNC4wMDMxIDguMDA5ODEgMTQuMDAzMSA4LjAxOTgzTDE0LjAwMzQgOS42MDEzNkwxNC4wMDI1IDYuNzExNUMxNC4wMDI1IDYuNDQ5NzQgMTMuOTIwOSA2LjIwNzA1IDEzLjc4MTggNi4wMDc0OEMxMy41NjIgNS42OTI0MiAxMy4xOTg5IDUuNDg0ODMgMTIuNzg3IDUuNDc5MzdMMTIuNzcwMyA1LjQ3OTI2QzEyLjY1ODggNS40NzkyNiAxMi41NTA3IDUuNDk0MDggMTIuNDQ3OSA1LjUyMTg2WiIgZmlsbD0iIzFEMUMyMyIvPgo8L3N2Zz4="), auto',
|
|
1520
|
+
// },
|
|
1477
1521
|
fromNodeJSON(node, json, isFirstCreate) {
|
|
1478
1522
|
initFormDataFromJSON(node, json, isFirstCreate);
|
|
1479
1523
|
return;
|
|
@@ -1574,6 +1618,9 @@ var WorkflowLinesManager = class {
|
|
|
1574
1618
|
getAllLines() {
|
|
1575
1619
|
return this.entityManager.getEntities(WorkflowLineEntity);
|
|
1576
1620
|
}
|
|
1621
|
+
getAllAvailableLines() {
|
|
1622
|
+
return this.getAllLines().filter((l) => !l.isDrawing && !l.isHidden);
|
|
1623
|
+
}
|
|
1577
1624
|
hasLine(portInfo) {
|
|
1578
1625
|
return !!this.entityManager.getEntityById(
|
|
1579
1626
|
WorkflowLineEntity.portInfoToLineId(portInfo)
|
|
@@ -1595,7 +1642,7 @@ var WorkflowLinesManager = class {
|
|
|
1595
1642
|
return this.createLine(newPortInfo);
|
|
1596
1643
|
}
|
|
1597
1644
|
createLine(options) {
|
|
1598
|
-
const { from, to, drawingTo, fromPort, toPort, data } = options;
|
|
1645
|
+
const { from, to, drawingTo, fromPort, drawingFrom, toPort, data } = options;
|
|
1599
1646
|
const available = Boolean(from && to);
|
|
1600
1647
|
const key = options.key || WorkflowLineEntity.portInfoToLineId(options);
|
|
1601
1648
|
let line = this.entityManager.getEntityById(key);
|
|
@@ -1604,12 +1651,12 @@ var WorkflowLinesManager = class {
|
|
|
1604
1651
|
line.validate();
|
|
1605
1652
|
return line;
|
|
1606
1653
|
}
|
|
1607
|
-
const fromNode = this.entityManager.getEntityById(from)
|
|
1654
|
+
const fromNode = from ? this.entityManager.getEntityById(from).getData(WorkflowNodeLinesData) : void 0;
|
|
1608
1655
|
const toNode = to ? this.entityManager.getEntityById(to).getData(WorkflowNodeLinesData) : void 0;
|
|
1609
|
-
if (!fromNode) {
|
|
1656
|
+
if (!fromNode && !toNode) {
|
|
1610
1657
|
return;
|
|
1611
1658
|
}
|
|
1612
|
-
this.isDrawing = Boolean(drawingTo);
|
|
1659
|
+
this.isDrawing = Boolean(drawingTo || drawingFrom);
|
|
1613
1660
|
line = this.entityManager.createEntity(WorkflowLineEntity, {
|
|
1614
1661
|
id: key,
|
|
1615
1662
|
document: this.document,
|
|
@@ -1619,16 +1666,15 @@ var WorkflowLinesManager = class {
|
|
|
1619
1666
|
toPort,
|
|
1620
1667
|
to,
|
|
1621
1668
|
drawingTo,
|
|
1669
|
+
drawingFrom,
|
|
1622
1670
|
data
|
|
1623
1671
|
});
|
|
1624
1672
|
this.registerData(line);
|
|
1625
|
-
fromNode
|
|
1673
|
+
fromNode?.addLine(line);
|
|
1626
1674
|
toNode?.addLine(line);
|
|
1627
1675
|
line.onDispose(() => {
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
}
|
|
1631
|
-
fromNode.removeLine(line);
|
|
1676
|
+
this.isDrawing = false;
|
|
1677
|
+
fromNode?.removeLine(line);
|
|
1632
1678
|
toNode?.removeLine(line);
|
|
1633
1679
|
});
|
|
1634
1680
|
line.onDispose(() => {
|
|
@@ -1751,7 +1797,7 @@ var WorkflowLinesManager = class {
|
|
|
1751
1797
|
return this.lineColor.default;
|
|
1752
1798
|
}
|
|
1753
1799
|
canAddLine(fromPort, toPort, silent) {
|
|
1754
|
-
if (fromPort === toPort || fromPort.node === toPort.node || fromPort.portType !== "output" || toPort.portType !== "input" || toPort.disabled) {
|
|
1800
|
+
if (fromPort === toPort || fromPort.node === toPort.node || fromPort.portType !== "output" || toPort.portType !== "input" || fromPort.disabled || toPort.disabled) {
|
|
1755
1801
|
return false;
|
|
1756
1802
|
}
|
|
1757
1803
|
const fromCanAdd = fromPort.node.getNodeRegistry().canAddLine;
|
|
@@ -1779,8 +1825,8 @@ var WorkflowLinesManager = class {
|
|
|
1779
1825
|
}
|
|
1780
1826
|
return true;
|
|
1781
1827
|
}
|
|
1782
|
-
canReset(
|
|
1783
|
-
if (this.options && this.options.canResetLine && !this.options.canResetLine(
|
|
1828
|
+
canReset(oldLine, newLineInfo) {
|
|
1829
|
+
if (this.options && this.options.canResetLine && !this.options.canResetLine(oldLine, newLineInfo, this)) {
|
|
1784
1830
|
return false;
|
|
1785
1831
|
}
|
|
1786
1832
|
return true;
|
|
@@ -1789,9 +1835,14 @@ var WorkflowLinesManager = class {
|
|
|
1789
1835
|
* 根据鼠标位置找到 port
|
|
1790
1836
|
* @param pos
|
|
1791
1837
|
*/
|
|
1792
|
-
getPortFromMousePos(pos) {
|
|
1838
|
+
getPortFromMousePos(pos, portType) {
|
|
1793
1839
|
const allNodes = this.getSortedNodes().reverse();
|
|
1794
|
-
const allPorts = allNodes.map((node) =>
|
|
1840
|
+
const allPorts = allNodes.map((node) => {
|
|
1841
|
+
if (!portType) {
|
|
1842
|
+
return node.ports.allPorts;
|
|
1843
|
+
}
|
|
1844
|
+
return portType === "input" ? node.ports.inputPorts : node.ports.outputPorts;
|
|
1845
|
+
}).flat();
|
|
1795
1846
|
const targetPort = allPorts.find((port) => port.isHovered(pos.x, pos.y));
|
|
1796
1847
|
if (targetPort) {
|
|
1797
1848
|
const containNodes = this.getContainNodesFromMousePos(pos);
|
|
@@ -2995,18 +3046,30 @@ var WorkflowDragService = class {
|
|
|
2995
3046
|
line.highlightColor = color;
|
|
2996
3047
|
this.hoverService.clearHovered();
|
|
2997
3048
|
}
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3049
|
+
checkDraggingPort(isDrawingTo, line, draggingNode, draggingPort, originLine) {
|
|
3050
|
+
let successDrawing = false;
|
|
3051
|
+
if (isDrawingTo) {
|
|
3052
|
+
successDrawing = !!(draggingPort && // 同一条线条则不用在判断 canAddLine
|
|
3053
|
+
(originLine?.toPort === draggingPort || draggingPort.portType === "input" && this.linesManager.canAddLine(line.fromPort, draggingPort, true)));
|
|
3054
|
+
} else {
|
|
3055
|
+
successDrawing = !!(draggingPort && // 同一条线条则不用在判断 canAddLine
|
|
3056
|
+
(originLine?.fromPort === draggingPort || draggingPort.portType === "output" && this.linesManager.canAddLine(draggingPort, line.toPort, true)));
|
|
3057
|
+
}
|
|
3058
|
+
if (successDrawing) {
|
|
3059
|
+
this.hoverService.updateHoveredKey(draggingPort.id);
|
|
3060
|
+
if (isDrawingTo) {
|
|
3061
|
+
line.setToPort(draggingPort);
|
|
3062
|
+
} else {
|
|
3063
|
+
line.setFromPort(draggingPort);
|
|
3064
|
+
}
|
|
3002
3065
|
this._onDragLineEventEmitter.fire({
|
|
3003
3066
|
type: "onDrag",
|
|
3004
|
-
onDragNodeId:
|
|
3067
|
+
onDragNodeId: draggingNode.id
|
|
3005
3068
|
});
|
|
3006
3069
|
return {
|
|
3007
3070
|
hasError: false
|
|
3008
3071
|
};
|
|
3009
|
-
} else if (this.isContainer(
|
|
3072
|
+
} else if (this.isContainer(draggingNode)) {
|
|
3010
3073
|
return {
|
|
3011
3074
|
hasError: false
|
|
3012
3075
|
};
|
|
@@ -3072,16 +3135,18 @@ var WorkflowDragService = class {
|
|
|
3072
3135
|
* @param opts
|
|
3073
3136
|
* @param event
|
|
3074
3137
|
*/
|
|
3075
|
-
async startDrawingLine(
|
|
3076
|
-
const
|
|
3077
|
-
|
|
3138
|
+
async startDrawingLine(port, event, originLine) {
|
|
3139
|
+
const isDrawingTo = port.portType === "output";
|
|
3140
|
+
const isInActivePort = !originLine && port.isErrorPort() && port.disabled;
|
|
3141
|
+
if (originLine?.disabled || isInActivePort || this.playgroundConfig.readonly || this.playgroundConfig.disabled) {
|
|
3078
3142
|
return { dragSuccess: false, newLine: void 0 };
|
|
3079
3143
|
}
|
|
3080
3144
|
this.selectService.clear();
|
|
3081
3145
|
const config = this.playgroundConfig;
|
|
3082
3146
|
const deferred = new import_utils16.PromiseDeferred();
|
|
3083
3147
|
const preCursor = config.cursor;
|
|
3084
|
-
let line
|
|
3148
|
+
let line;
|
|
3149
|
+
let newLineInfo;
|
|
3085
3150
|
const startTime = Date.now();
|
|
3086
3151
|
let dragSuccess = false;
|
|
3087
3152
|
const dragger = new import_core15.PlaygroundDrag({
|
|
@@ -3092,16 +3157,29 @@ var WorkflowDragService = class {
|
|
|
3092
3157
|
}
|
|
3093
3158
|
dragSuccess = true;
|
|
3094
3159
|
const pos = config.getPosFromMouseEvent(event);
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
|
|
3104
|
-
|
|
3160
|
+
if (isDrawingTo) {
|
|
3161
|
+
line = this.linesManager.createLine({
|
|
3162
|
+
from: port.node.id,
|
|
3163
|
+
fromPort: port.portID,
|
|
3164
|
+
data: originLine?.lineData,
|
|
3165
|
+
drawingTo: {
|
|
3166
|
+
x: pos.x,
|
|
3167
|
+
y: pos.y,
|
|
3168
|
+
location: port.location === "right" ? "left" : "top"
|
|
3169
|
+
}
|
|
3170
|
+
});
|
|
3171
|
+
} else {
|
|
3172
|
+
line = this.linesManager.createLine({
|
|
3173
|
+
to: port.node.id,
|
|
3174
|
+
toPort: port.portID,
|
|
3175
|
+
data: originLine?.lineData,
|
|
3176
|
+
drawingFrom: {
|
|
3177
|
+
x: pos.x,
|
|
3178
|
+
y: pos.y,
|
|
3179
|
+
location: port.location === "left" ? "right" : "bottom"
|
|
3180
|
+
}
|
|
3181
|
+
});
|
|
3182
|
+
}
|
|
3105
3183
|
if (!line) {
|
|
3106
3184
|
return;
|
|
3107
3185
|
}
|
|
@@ -3112,49 +3190,15 @@ var WorkflowDragService = class {
|
|
|
3112
3190
|
if (!line) {
|
|
3113
3191
|
return;
|
|
3114
3192
|
}
|
|
3115
|
-
lineErrorReset = false;
|
|
3116
3193
|
const dragPos = config.getPosFromMouseEvent(e);
|
|
3117
|
-
|
|
3118
|
-
toPort = this.linesManager.getPortFromMousePos(dragPos);
|
|
3119
|
-
if (!toPort) {
|
|
3120
|
-
line.setToPort(void 0);
|
|
3121
|
-
} else if (!this.linesManager.canAddLine(fromPort, toPort, true)) {
|
|
3122
|
-
line.highlightColor = this.linesManager.lineColor.error;
|
|
3123
|
-
lineErrorReset = true;
|
|
3124
|
-
line.setToPort(void 0);
|
|
3125
|
-
} else {
|
|
3126
|
-
line.setToPort(toPort);
|
|
3127
|
-
}
|
|
3128
|
-
this._onDragLineEventEmitter.fire({
|
|
3129
|
-
type: "onDrag"
|
|
3130
|
-
});
|
|
3131
|
-
this.setLineColor(line, originLine?.lockedColor || this.linesManager.lineColor.drawing);
|
|
3132
|
-
if (toNode && this.canBuildContainerLine(toNode, dragPos)) {
|
|
3133
|
-
toPort = this.getNearestPort(toNode, dragPos);
|
|
3134
|
-
const { hasError } = this.handleDragOnNode(toNode, fromPort, line, toPort, originLine);
|
|
3135
|
-
lineErrorReset = hasError;
|
|
3136
|
-
}
|
|
3137
|
-
if (line.toPort) {
|
|
3138
|
-
line.drawingTo = {
|
|
3139
|
-
x: line.toPort.point.x,
|
|
3140
|
-
y: line.toPort.point.y,
|
|
3141
|
-
location: line.toPort.location
|
|
3142
|
-
};
|
|
3143
|
-
} else {
|
|
3144
|
-
line.drawingTo = {
|
|
3145
|
-
x: dragPos.x,
|
|
3146
|
-
y: dragPos.y,
|
|
3147
|
-
location: reverseLocation(line.fromPort.location)
|
|
3148
|
-
};
|
|
3149
|
-
}
|
|
3150
|
-
originLine?.validate();
|
|
3151
|
-
line.validate();
|
|
3194
|
+
newLineInfo = this.updateDrawingLine(isDrawingTo, line, dragPos, originLine);
|
|
3152
3195
|
},
|
|
3153
3196
|
// eslint-disable-next-line complexity
|
|
3154
3197
|
onDragEnd: async (e) => {
|
|
3155
3198
|
const dragPos = config.getPosFromMouseEvent(e);
|
|
3156
3199
|
const onDragLineEndCallbacks = Array.from(this._onDragLineEndCallbacks.values());
|
|
3157
3200
|
config.updateCursor(preCursor);
|
|
3201
|
+
const { fromPort, toPort, hasError } = newLineInfo || {};
|
|
3158
3202
|
await Promise.all(
|
|
3159
3203
|
onDragLineEndCallbacks.map(
|
|
3160
3204
|
(callback) => callback({
|
|
@@ -3179,36 +3223,32 @@ var WorkflowDragService = class {
|
|
|
3179
3223
|
deferred.resolve({ dragSuccess });
|
|
3180
3224
|
};
|
|
3181
3225
|
if (dragSuccess) {
|
|
3182
|
-
if (originLine && originLine.toPort === toPort) {
|
|
3226
|
+
if (originLine && originLine.toPort === toPort && originLine.fromPort === fromPort) {
|
|
3183
3227
|
return end();
|
|
3184
3228
|
}
|
|
3185
|
-
if (toPort && toPort.portType !== "input") {
|
|
3229
|
+
if (toPort && toPort.portType !== "input" || fromPort && fromPort.portType !== "output") {
|
|
3186
3230
|
return end();
|
|
3187
3231
|
}
|
|
3188
|
-
const
|
|
3232
|
+
const newLinePortInfo = toPort && fromPort ? {
|
|
3189
3233
|
from: fromPort.node.id,
|
|
3190
3234
|
fromPort: fromPort.portID,
|
|
3191
3235
|
to: toPort.node.id,
|
|
3192
3236
|
toPort: toPort.portID,
|
|
3193
3237
|
data: originLine?.lineData
|
|
3194
3238
|
} : void 0;
|
|
3195
|
-
const isReset = originLine &&
|
|
3196
|
-
if (isReset && !this.linesManager.canReset(
|
|
3197
|
-
originLine.fromPort,
|
|
3198
|
-
originLine.toPort,
|
|
3199
|
-
toPort
|
|
3200
|
-
)) {
|
|
3239
|
+
const isReset = originLine && newLinePortInfo;
|
|
3240
|
+
if (isReset && !this.linesManager.canReset(originLine, newLinePortInfo)) {
|
|
3201
3241
|
return end();
|
|
3202
3242
|
}
|
|
3203
|
-
if (originLine && (!this.linesManager.canRemove(originLine,
|
|
3243
|
+
if (originLine && (!this.linesManager.canRemove(originLine, newLinePortInfo, false) || hasError)) {
|
|
3204
3244
|
return end();
|
|
3205
3245
|
} else {
|
|
3206
3246
|
originLine?.dispose();
|
|
3207
3247
|
}
|
|
3208
|
-
if (!
|
|
3248
|
+
if (!newLinePortInfo || !this.linesManager.canAddLine(fromPort, toPort, false)) {
|
|
3209
3249
|
return end();
|
|
3210
3250
|
}
|
|
3211
|
-
const newLine = this.linesManager.createLine(
|
|
3251
|
+
const newLine = this.linesManager.createLine(newLinePortInfo);
|
|
3212
3252
|
if (!newLine) {
|
|
3213
3253
|
end();
|
|
3214
3254
|
}
|
|
@@ -3225,14 +3265,109 @@ var WorkflowDragService = class {
|
|
|
3225
3265
|
await dragger.start(clientX, clientY, config);
|
|
3226
3266
|
return deferred.promise;
|
|
3227
3267
|
}
|
|
3268
|
+
updateDrawingLine(isDrawingTo, line, dragPos, originLine) {
|
|
3269
|
+
let hasError = false;
|
|
3270
|
+
const mouseNode = this.linesManager.getNodeFromMousePos(dragPos);
|
|
3271
|
+
let toNode;
|
|
3272
|
+
let toPort;
|
|
3273
|
+
let fromPort;
|
|
3274
|
+
let fromNode;
|
|
3275
|
+
if (isDrawingTo) {
|
|
3276
|
+
fromPort = line.fromPort;
|
|
3277
|
+
toNode = mouseNode;
|
|
3278
|
+
toPort = this.linesManager.getPortFromMousePos(dragPos, "input");
|
|
3279
|
+
if (toNode && this.canBuildContainerLine(toNode, dragPos)) {
|
|
3280
|
+
toPort = this.getNearestPort(toNode, dragPos, "input");
|
|
3281
|
+
hasError = this.checkDraggingPort(isDrawingTo, line, toNode, toPort, originLine).hasError;
|
|
3282
|
+
}
|
|
3283
|
+
if (!toPort) {
|
|
3284
|
+
line.setToPort(void 0);
|
|
3285
|
+
} else if (!this.linesManager.canAddLine(fromPort, toPort, true)) {
|
|
3286
|
+
hasError = true;
|
|
3287
|
+
line.setToPort(void 0);
|
|
3288
|
+
} else {
|
|
3289
|
+
line.setToPort(toPort);
|
|
3290
|
+
}
|
|
3291
|
+
if (line.toPort) {
|
|
3292
|
+
line.drawingTo = {
|
|
3293
|
+
x: line.toPort.point.x,
|
|
3294
|
+
y: line.toPort.point.y,
|
|
3295
|
+
location: line.toPort.location
|
|
3296
|
+
};
|
|
3297
|
+
} else {
|
|
3298
|
+
line.drawingTo = {
|
|
3299
|
+
x: dragPos.x,
|
|
3300
|
+
y: dragPos.y,
|
|
3301
|
+
location: reverseLocation(line.fromPort.location)
|
|
3302
|
+
};
|
|
3303
|
+
}
|
|
3304
|
+
} else {
|
|
3305
|
+
toPort = line.toPort;
|
|
3306
|
+
fromNode = mouseNode;
|
|
3307
|
+
fromPort = this.linesManager.getPortFromMousePos(dragPos, "output");
|
|
3308
|
+
if (fromNode && this.canBuildContainerLine(fromNode, dragPos)) {
|
|
3309
|
+
fromPort = this.getNearestPort(fromNode, dragPos, "output");
|
|
3310
|
+
hasError = this.checkDraggingPort(
|
|
3311
|
+
isDrawingTo,
|
|
3312
|
+
line,
|
|
3313
|
+
fromNode,
|
|
3314
|
+
fromPort,
|
|
3315
|
+
originLine
|
|
3316
|
+
).hasError;
|
|
3317
|
+
}
|
|
3318
|
+
if (!fromPort) {
|
|
3319
|
+
line.setFromPort(void 0);
|
|
3320
|
+
} else if (!this.linesManager.canAddLine(fromPort, toPort, true)) {
|
|
3321
|
+
hasError = true;
|
|
3322
|
+
line.setFromPort(void 0);
|
|
3323
|
+
} else {
|
|
3324
|
+
line.setFromPort(fromPort);
|
|
3325
|
+
}
|
|
3326
|
+
if (line.fromPort) {
|
|
3327
|
+
line.drawingFrom = {
|
|
3328
|
+
x: line.fromPort.point.x,
|
|
3329
|
+
y: line.fromPort.point.y,
|
|
3330
|
+
location: line.fromPort.location
|
|
3331
|
+
};
|
|
3332
|
+
} else {
|
|
3333
|
+
line.drawingFrom = {
|
|
3334
|
+
x: dragPos.x,
|
|
3335
|
+
y: dragPos.y,
|
|
3336
|
+
location: reverseLocation(line.toPort.location)
|
|
3337
|
+
};
|
|
3338
|
+
}
|
|
3339
|
+
}
|
|
3340
|
+
this._onDragLineEventEmitter.fire({
|
|
3341
|
+
type: "onDrag"
|
|
3342
|
+
});
|
|
3343
|
+
if (hasError) {
|
|
3344
|
+
this.setLineColor(line, this.linesManager.lineColor.error);
|
|
3345
|
+
} else {
|
|
3346
|
+
this.setLineColor(line, originLine?.lockedColor || this.linesManager.lineColor.drawing);
|
|
3347
|
+
}
|
|
3348
|
+
originLine?.validate();
|
|
3349
|
+
line.validate();
|
|
3350
|
+
return {
|
|
3351
|
+
fromPort,
|
|
3352
|
+
toPort,
|
|
3353
|
+
hasError
|
|
3354
|
+
};
|
|
3355
|
+
}
|
|
3228
3356
|
/**
|
|
3229
3357
|
* 重新连接线条
|
|
3230
3358
|
* @param line
|
|
3231
3359
|
* @param e
|
|
3232
3360
|
*/
|
|
3233
3361
|
async resetLine(line, e) {
|
|
3234
|
-
const { fromPort } = line;
|
|
3235
|
-
const
|
|
3362
|
+
const { fromPort, toPort } = line;
|
|
3363
|
+
const mousePos = this.playgroundConfig.getPosFromMouseEvent(e);
|
|
3364
|
+
const distanceFrom = import_utils16.Point.getDistance(fromPort.point, mousePos);
|
|
3365
|
+
const distanceTo = import_utils16.Point.getDistance(toPort.point, mousePos);
|
|
3366
|
+
const { dragSuccess } = await this.startDrawingLine(
|
|
3367
|
+
distanceTo <= distanceFrom || !this.document.options.twoWayConnection ? fromPort : toPort,
|
|
3368
|
+
e,
|
|
3369
|
+
line
|
|
3370
|
+
);
|
|
3236
3371
|
if (!dragSuccess) {
|
|
3237
3372
|
this.selectService.select(line);
|
|
3238
3373
|
}
|
|
@@ -3254,17 +3389,27 @@ var WorkflowDragService = class {
|
|
|
3254
3389
|
return true;
|
|
3255
3390
|
}
|
|
3256
3391
|
const { padding, bounds } = node.transform;
|
|
3257
|
-
const
|
|
3258
|
-
|
|
3392
|
+
const DEFAULT_DELTA = 10;
|
|
3393
|
+
const leftDelta = padding.left * 2 / 3 || DEFAULT_DELTA;
|
|
3394
|
+
const rightDelta = padding.right * 2 / 3 || DEFAULT_DELTA;
|
|
3395
|
+
const bottomDelta = padding.bottom * 2 / 3 || DEFAULT_DELTA;
|
|
3396
|
+
const topDelta = padding.top * 2 / 3 || DEFAULT_DELTA;
|
|
3397
|
+
const rectangles = [
|
|
3398
|
+
new import_utils16.Rectangle(bounds.x, bounds.y, leftDelta, bounds.height),
|
|
3399
|
+
// left
|
|
3400
|
+
new import_utils16.Rectangle(bounds.x, bounds.y, bounds.width, topDelta),
|
|
3401
|
+
// top
|
|
3402
|
+
new import_utils16.Rectangle(bounds.x, bounds.y + bounds.height - bottomDelta, bounds.width, bottomDelta),
|
|
3403
|
+
// bottom
|
|
3404
|
+
new import_utils16.Rectangle(bounds.x + bounds.width - rightDelta, bounds.y, rightDelta, bounds.height)
|
|
3405
|
+
// right
|
|
3406
|
+
];
|
|
3407
|
+
return rectangles.some((rect) => rect.contains(mousePos.x, mousePos.y));
|
|
3259
3408
|
}
|
|
3260
3409
|
/** 获取最近的 port */
|
|
3261
|
-
getNearestPort(node, mousePos) {
|
|
3410
|
+
getNearestPort(node, mousePos, portType = "input") {
|
|
3262
3411
|
const portsData = node.ports;
|
|
3263
|
-
const distanceSortedPorts = portsData.inputPorts.sort((a, b) =>
|
|
3264
|
-
const aDistance = Math.abs(mousePos.y - a.point.y);
|
|
3265
|
-
const bDistance = Math.abs(mousePos.y - b.point.y);
|
|
3266
|
-
return aDistance - bDistance;
|
|
3267
|
-
});
|
|
3412
|
+
const distanceSortedPorts = (portType === "input" ? portsData.inputPorts : portsData.outputPorts).sort((a, b) => import_utils16.Point.getDistance(mousePos, a.point) - import_utils16.Point.getDistance(mousePos, b.point));
|
|
3268
3413
|
return distanceSortedPorts[0];
|
|
3269
3414
|
}
|
|
3270
3415
|
};
|
|
@@ -3536,8 +3681,8 @@ function useNodeRender(nodeFromProps) {
|
|
|
3536
3681
|
}, []);
|
|
3537
3682
|
const getExtInfo = (0, import_react2.useCallback)(() => node.getExtInfo(), [node]);
|
|
3538
3683
|
const updateExtInfo = (0, import_react2.useCallback)(
|
|
3539
|
-
(data) => {
|
|
3540
|
-
node.updateExtInfo(data);
|
|
3684
|
+
(data, fullUpdate) => {
|
|
3685
|
+
node.updateExtInfo(data, fullUpdate);
|
|
3541
3686
|
},
|
|
3542
3687
|
[node]
|
|
3543
3688
|
);
|
|
@@ -3572,7 +3717,7 @@ function useNodeRender(nodeFromProps) {
|
|
|
3572
3717
|
if (form) {
|
|
3573
3718
|
form.updateFormValues(values);
|
|
3574
3719
|
} else {
|
|
3575
|
-
updateExtInfo(values);
|
|
3720
|
+
updateExtInfo(values, true);
|
|
3576
3721
|
}
|
|
3577
3722
|
},
|
|
3578
3723
|
node,
|