@logicflow/extension 2.2.0 → 2.2.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/README.md +16 -0
- package/dist/index.css +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/es/NodeResize/node/RectResize.d.ts +0 -6
- package/es/NodeResize/node/RectResize.js +2 -11
- package/es/bpmn-elements-adapter/json2xml.d.ts +2 -1
- package/es/bpmn-elements-adapter/json2xml.js +18 -4
- package/es/bpmn-elements-adapter/xml2json.js +2 -7
- package/es/components/control/index.d.ts +1 -0
- package/es/components/control/index.js +24 -11
- package/es/components/mini-map/index.js +1 -1
- package/es/dynamic-group/model.d.ts +2 -1
- package/es/dynamic-group/model.js +28 -11
- package/es/dynamic-group/node.js +1 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +1 -0
- package/es/index.js +2 -0
- package/es/insert-node-in-polyline/index.js +11 -35
- package/es/materials/curved-edge/index.js +49 -21
- package/es/materials/group/GroupNode.d.ts +0 -6
- package/es/materials/group/GroupNode.js +1 -6
- package/es/pool/LaneModel.d.ts +90 -0
- package/es/pool/LaneModel.js +252 -0
- package/es/pool/LaneView.d.ts +40 -0
- package/es/pool/LaneView.js +202 -0
- package/es/pool/PoolModel.d.ts +120 -0
- package/es/pool/PoolModel.js +586 -0
- package/es/pool/PoolView.d.ts +17 -0
- package/es/pool/PoolView.js +76 -0
- package/es/pool/constant.d.ts +15 -0
- package/es/pool/constant.js +17 -0
- package/es/pool/index.d.ts +89 -0
- package/es/pool/index.js +524 -0
- package/es/pool/utils.d.ts +19 -0
- package/es/pool/utils.js +33 -0
- package/es/style/index.css +1 -1
- package/es/style/raw.d.ts +1 -1
- package/es/style/raw.js +1 -1
- package/es/tools/label/LabelOverlay.js +3 -3
- package/es/tools/label/mediumEditor.d.ts +1 -1
- package/es/tools/label/mediumEditor.js +89 -52
- package/es/tools/snapshot/index.d.ts +7 -3
- package/es/tools/snapshot/index.js +72 -77
- package/lib/NodeResize/node/RectResize.d.ts +0 -6
- package/lib/NodeResize/node/RectResize.js +1 -10
- package/lib/bpmn-elements-adapter/json2xml.d.ts +2 -1
- package/lib/bpmn-elements-adapter/json2xml.js +19 -4
- package/lib/bpmn-elements-adapter/xml2json.js +2 -7
- package/lib/components/control/index.d.ts +1 -0
- package/lib/components/control/index.js +24 -11
- package/lib/components/mini-map/index.js +1 -1
- package/lib/dynamic-group/model.d.ts +2 -1
- package/lib/dynamic-group/model.js +28 -11
- package/lib/dynamic-group/node.js +1 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -0
- package/lib/insert-node-in-polyline/index.js +10 -34
- package/lib/materials/curved-edge/index.js +49 -21
- package/lib/materials/group/GroupNode.d.ts +0 -6
- package/lib/materials/group/GroupNode.js +1 -6
- package/lib/pool/LaneModel.d.ts +90 -0
- package/lib/pool/LaneModel.js +255 -0
- package/lib/pool/LaneView.d.ts +40 -0
- package/lib/pool/LaneView.js +205 -0
- package/lib/pool/PoolModel.d.ts +120 -0
- package/lib/pool/PoolModel.js +589 -0
- package/lib/pool/PoolView.d.ts +17 -0
- package/lib/pool/PoolView.js +79 -0
- package/lib/pool/constant.d.ts +15 -0
- package/lib/pool/constant.js +20 -0
- package/lib/pool/index.d.ts +89 -0
- package/lib/pool/index.js +527 -0
- package/lib/pool/utils.d.ts +19 -0
- package/lib/pool/utils.js +38 -0
- package/lib/style/index.css +1 -1
- package/lib/style/raw.d.ts +1 -1
- package/lib/style/raw.js +1 -1
- package/lib/tools/label/LabelOverlay.js +2 -2
- package/lib/tools/label/mediumEditor.d.ts +1 -1
- package/lib/tools/label/mediumEditor.js +91 -53
- package/lib/tools/snapshot/index.d.ts +7 -3
- package/lib/tools/snapshot/index.js +72 -77
- package/package.json +10 -7
- package/.turbo/turbo-build.log +0 -38
- package/CHANGELOG.md +0 -1766
- package/__test__/bpmn-adapter.test.js +0 -227
- package/es/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
- package/es/materials/curved-edge/__test__/curved-edge.test.js +0 -18
- package/jest.config.js +0 -198
- package/lib/materials/curved-edge/__test__/curved-edge.test.d.ts +0 -1
- package/lib/materials/curved-edge/__test__/curved-edge.test.js +0 -20
- package/rollup.config.js +0 -52
- package/src/NodeResize/BasicShape/Ellipse.tsx +0 -22
- package/src/NodeResize/BasicShape/Polygon.tsx +0 -24
- package/src/NodeResize/BasicShape/Rect.tsx +0 -44
- package/src/NodeResize/control/Control.tsx +0 -537
- package/src/NodeResize/control/ControlGroup.tsx +0 -76
- package/src/NodeResize/control/Util.ts +0 -206
- package/src/NodeResize/index.ts +0 -26
- package/src/NodeResize/node/DiamondResize.tsx +0 -149
- package/src/NodeResize/node/EllipseResize.tsx +0 -140
- package/src/NodeResize/node/HtmlResize.tsx +0 -125
- package/src/NodeResize/node/RectResize.tsx +0 -146
- package/src/NodeResize/node/index.ts +0 -4
- package/src/bpmn/constant.ts +0 -56
- package/src/bpmn/events/EndEvent.ts +0 -73
- package/src/bpmn/events/StartEvent.ts +0 -52
- package/src/bpmn/events/index.ts +0 -2
- package/src/bpmn/flow/SequenceFlow.ts +0 -25
- package/src/bpmn/flow/index.ts +0 -1
- package/src/bpmn/gateways/ExclusiveGateway.ts +0 -71
- package/src/bpmn/gateways/index.ts +0 -1
- package/src/bpmn/getBpmnId.ts +0 -31
- package/src/bpmn/index.ts +0 -60
- package/src/bpmn/tasks/ServiceTask.ts +0 -63
- package/src/bpmn/tasks/UserTask.ts +0 -64
- package/src/bpmn/tasks/index.ts +0 -2
- package/src/bpmn-adapter/bpmnIds.ts +0 -31
- package/src/bpmn-adapter/index.ts +0 -835
- package/src/bpmn-adapter/json2xml.ts +0 -127
- package/src/bpmn-adapter/xml2json.ts +0 -544
- package/src/bpmn-elements/README.md +0 -223
- package/src/bpmn-elements/__tests__/definition.test.js +0 -72
- package/src/bpmn-elements/index.d.ts +0 -26
- package/src/bpmn-elements/index.ts +0 -107
- package/src/bpmn-elements/presets/Event/EndEventFactory.ts +0 -114
- package/src/bpmn-elements/presets/Event/IntermediateCatchEvent.ts +0 -108
- package/src/bpmn-elements/presets/Event/IntermediateThrowEvent.ts +0 -109
- package/src/bpmn-elements/presets/Event/StartEventFactory.ts +0 -114
- package/src/bpmn-elements/presets/Event/boundaryEventFactory.ts +0 -117
- package/src/bpmn-elements/presets/Event/index.ts +0 -14
- package/src/bpmn-elements/presets/Flow/flow.d.ts +0 -6
- package/src/bpmn-elements/presets/Flow/index.ts +0 -8
- package/src/bpmn-elements/presets/Flow/manhattan.ts +0 -691
- package/src/bpmn-elements/presets/Flow/sequenceFlow.ts +0 -65
- package/src/bpmn-elements/presets/Gateway/gateway.ts +0 -107
- package/src/bpmn-elements/presets/Gateway/index.ts +0 -23
- package/src/bpmn-elements/presets/Pool/Lane.ts +0 -211
- package/src/bpmn-elements/presets/Pool/Pool.ts +0 -284
- package/src/bpmn-elements/presets/Pool/index.ts +0 -89
- package/src/bpmn-elements/presets/Task/index.ts +0 -122
- package/src/bpmn-elements/presets/Task/subProcess.ts +0 -189
- package/src/bpmn-elements/presets/Task/task.ts +0 -193
- package/src/bpmn-elements/presets/icons.ts +0 -155
- package/src/bpmn-elements/utils.ts +0 -52
- package/src/bpmn-elements-adapter/README.md +0 -293
- package/src/bpmn-elements-adapter/__tests__/adapter_in.test.js +0 -528
- package/src/bpmn-elements-adapter/__tests__/adapter_out.test.js +0 -569
- package/src/bpmn-elements-adapter/constant.ts +0 -76
- package/src/bpmn-elements-adapter/index.ts +0 -1134
- package/src/bpmn-elements-adapter/json2xml.ts +0 -91
- package/src/bpmn-elements-adapter/xml2json.ts +0 -548
- package/src/components/context-menu/index.ts +0 -253
- package/src/components/control/index.ts +0 -141
- package/src/components/dnd-panel/index.ts +0 -137
- package/src/components/highlight/index.ts +0 -227
- package/src/components/menu/index.ts +0 -748
- package/src/components/mini-map/index.ts +0 -686
- package/src/components/selection-select/index.ts +0 -387
- package/src/dynamic-group/index.ts +0 -775
- package/src/dynamic-group/model.ts +0 -562
- package/src/dynamic-group/node.ts +0 -288
- package/src/dynamic-group/utils.ts +0 -46
- package/src/index.less +0 -1
- package/src/index.ts +0 -45
- package/src/insert-node-in-polyline/edge.ts +0 -175
- package/src/insert-node-in-polyline/index.ts +0 -187
- package/src/materials/curved-edge/__test__/curved-edge.test.ts +0 -46
- package/src/materials/curved-edge/index.ts +0 -185
- package/src/materials/group/GroupNode.ts +0 -442
- package/src/materials/group/index.ts +0 -542
- package/src/materials/node-selection/index.ts +0 -380
- package/src/mindmap/fakerRoot.ts +0 -19
- package/src/mindmap/index.ts +0 -328
- package/src/mindmap/markContent.ts +0 -81
- package/src/mindmap/markContentOption.ts +0 -81
- package/src/mindmap/markEntity.ts +0 -82
- package/src/mindmap/markRoot.ts +0 -83
- package/src/mindmap/theme.ts +0 -11
- package/src/rect-label-node/RectLabelNodeView.ts +0 -33
- package/src/rect-label-node/index.ts +0 -15
- package/src/style/index.less +0 -342
- package/src/style/raw.ts +0 -295
- package/src/tools/auto-layout/index.ts +0 -282
- package/src/tools/flow-path/index.ts +0 -233
- package/src/tools/label/Label.tsx +0 -357
- package/src/tools/label/LabelModel.ts +0 -83
- package/src/tools/label/LabelOverlay.tsx +0 -158
- package/src/tools/label/algorithm.ts +0 -42
- package/src/tools/label/index.ts +0 -479
- package/src/tools/label/mediumEditor.ts +0 -94
- package/src/tools/label/utils.ts +0 -395
- package/src/tools/proximity-connect/index.ts +0 -435
- package/src/tools/snapshot/README.md +0 -145
- package/src/tools/snapshot/index.ts +0 -718
- package/src/tools/snapshot/utils.ts +0 -163
- package/src/turbo-adapter/index.ts +0 -212
- package/stats.html +0 -4842
- package/tsconfig.json +0 -18
|
@@ -41,6 +41,9 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
41
41
|
return ar;
|
|
42
42
|
};
|
|
43
43
|
import { PolylineEdge, PolylineEdgeModel, h } from '@logicflow/core';
|
|
44
|
+
// 方向组合到圆弧象限的映射。
|
|
45
|
+
// key 由进入方向(dir1)和离开方向(dir2)拼接,例如 'tr' 表示从上(t)到右(r)的拐角。
|
|
46
|
+
// 通过该映射确定在拐点处应该绘制的圆弧象限,用于计算中间控制点。
|
|
44
47
|
var directionMap = {
|
|
45
48
|
tr: 'tl',
|
|
46
49
|
lb: 'tl',
|
|
@@ -51,13 +54,17 @@ var directionMap = {
|
|
|
51
54
|
bl: 'br',
|
|
52
55
|
rt: 'br',
|
|
53
56
|
};
|
|
57
|
+
// 过滤折线中的共线中间点,减少不必要的顶点
|
|
54
58
|
function pointFilter(points) {
|
|
59
|
+
// 原地修改传入的数组
|
|
55
60
|
var all = points;
|
|
61
|
+
// 从第二个点开始,检查三点是否共线
|
|
56
62
|
var i = 1;
|
|
57
63
|
while (i < all.length - 1) {
|
|
58
64
|
var _a = __read(all[i - 1], 2), x = _a[0], y = _a[1];
|
|
59
65
|
var _b = __read(all[i], 2), x1 = _b[0], y1 = _b[1];
|
|
60
66
|
var _c = __read(all[i + 1], 2), x2 = _c[0], y2 = _c[1];
|
|
67
|
+
// 如果三点在同一条水平或垂直直线上,删除中间点
|
|
61
68
|
if ((x === x1 && x1 === x2) || (y === y1 && y1 === y2)) {
|
|
62
69
|
all.splice(i, 1);
|
|
63
70
|
}
|
|
@@ -65,6 +72,7 @@ function pointFilter(points) {
|
|
|
65
72
|
i++;
|
|
66
73
|
}
|
|
67
74
|
}
|
|
75
|
+
// 返回精简后的点集
|
|
68
76
|
return all;
|
|
69
77
|
}
|
|
70
78
|
function getMidPoints(cur, key, orientation, radius) {
|
|
@@ -119,34 +127,54 @@ function getMidPoints(cur, key, orientation, radius) {
|
|
|
119
127
|
return [];
|
|
120
128
|
}
|
|
121
129
|
}
|
|
122
|
-
|
|
130
|
+
/**
|
|
131
|
+
* 生成局部路径片段(包含圆角)
|
|
132
|
+
* - 输入为上一个顶点、当前拐点、下一个顶点,计算方向组合并选择圆弧象限
|
|
133
|
+
* - 将圆角半径限制在相邻两段长度的一半以内,避免过度弯曲
|
|
134
|
+
* @param prevPoint 上一个顶点
|
|
135
|
+
* @param cornerPoint 当前拐点(圆角所在拐点)
|
|
136
|
+
* @param nextPoint 下一个顶点
|
|
137
|
+
* @param cornerRadius 圆角半径上限
|
|
138
|
+
* @returns 局部 path 字符串(包含 L/Q 操作)
|
|
139
|
+
*/
|
|
140
|
+
function getPartialPath(prevPoint, cornerPoint, nextPoint, cornerRadius) {
|
|
123
141
|
var _a;
|
|
124
|
-
|
|
125
|
-
var
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
// 轴对齐容差(像素),用于消除微小误差
|
|
143
|
+
var epsilon = 1;
|
|
144
|
+
var resolveDir = function (a, b) {
|
|
145
|
+
var dx = b[0] - a[0];
|
|
146
|
+
var dy = b[1] - a[1];
|
|
147
|
+
var adx = Math.abs(dx);
|
|
148
|
+
var ady = Math.abs(dy);
|
|
149
|
+
if (ady <= epsilon && adx > epsilon) {
|
|
150
|
+
return dx < 0 ? 'l' : 'r';
|
|
151
|
+
}
|
|
152
|
+
if (adx <= epsilon && ady > epsilon) {
|
|
153
|
+
return dy < 0 ? 't' : 'b';
|
|
154
|
+
}
|
|
155
|
+
if (adx <= epsilon && ady <= epsilon) {
|
|
156
|
+
return '';
|
|
157
|
+
}
|
|
158
|
+
// 非严格对齐时,选择更接近的轴
|
|
159
|
+
return adx < ady ? (dx < 0 ? 'l' : 'r') : dy < 0 ? 't' : 'b';
|
|
160
|
+
};
|
|
161
|
+
var dir1 = resolveDir(prevPoint, cornerPoint);
|
|
162
|
+
var dir2 = resolveDir(cornerPoint, nextPoint);
|
|
163
|
+
var r = Math.min(Math.hypot(cornerPoint[0] - prevPoint[0], cornerPoint[1] - prevPoint[1]) /
|
|
164
|
+
2, Math.hypot(nextPoint[0] - cornerPoint[0], nextPoint[1] - cornerPoint[1]) /
|
|
165
|
+
2, cornerRadius) || (1 / 5) * cornerRadius;
|
|
139
166
|
var key = "".concat(dir1).concat(dir2);
|
|
140
167
|
var orientation = directionMap[key] || '-';
|
|
141
|
-
var path =
|
|
168
|
+
var path = '';
|
|
142
169
|
if (orientation === '-') {
|
|
143
|
-
|
|
170
|
+
// 仅移动到当前拐点,由下一次迭代决定如何从拐点继续(直线或圆角)
|
|
171
|
+
path += "L ".concat(cornerPoint[0], " ").concat(cornerPoint[1]);
|
|
144
172
|
}
|
|
145
173
|
else {
|
|
146
|
-
var _b = __read(getMidPoints(
|
|
174
|
+
var _b = __read(getMidPoints(cornerPoint, key, orientation, r), 2), mid1 = _b[0], mid2 = _b[1];
|
|
147
175
|
if (mid1 && mid2) {
|
|
148
|
-
path += "L ".concat(mid1[0], " ").concat(mid1[1], " Q ").concat(
|
|
149
|
-
_a = __read(mid2, 2),
|
|
176
|
+
path += "L ".concat(mid1[0], " ").concat(mid1[1], " Q ").concat(cornerPoint[0], " ").concat(cornerPoint[1], " ").concat(mid2[0], " ").concat(mid2[1]);
|
|
177
|
+
_a = __read(mid2, 2), cornerPoint[0] = _a[0], cornerPoint[1] = _a[1];
|
|
150
178
|
}
|
|
151
179
|
}
|
|
152
180
|
return path;
|
|
@@ -35,12 +35,6 @@ export declare class GroupNodeModel extends RectResizeModel {
|
|
|
35
35
|
*/
|
|
36
36
|
childrenLastFoldStatus: Record<string, boolean>;
|
|
37
37
|
initNodeData(data: any): void;
|
|
38
|
-
getResizeOutlineStyle(): {
|
|
39
|
-
fill: string;
|
|
40
|
-
stroke: string;
|
|
41
|
-
strokeWidth: number;
|
|
42
|
-
strokeDasharray: string;
|
|
43
|
-
};
|
|
44
38
|
/**
|
|
45
39
|
* 折叠分组
|
|
46
40
|
* 1. 折叠分组的宽高
|
|
@@ -104,11 +104,6 @@ var GroupNodeModel = /** @class */ (function (_super) {
|
|
|
104
104
|
});
|
|
105
105
|
// this.foldGroup(this.isFolded);
|
|
106
106
|
};
|
|
107
|
-
GroupNodeModel.prototype.getResizeOutlineStyle = function () {
|
|
108
|
-
var style = _super.prototype.getResizeOutlineStyle.call(this);
|
|
109
|
-
style.stroke = 'none';
|
|
110
|
-
return style;
|
|
111
|
-
};
|
|
112
107
|
/**
|
|
113
108
|
* 折叠分组
|
|
114
109
|
* 1. 折叠分组的宽高
|
|
@@ -414,7 +409,7 @@ var GroupNode = /** @class */ (function (_super) {
|
|
|
414
409
|
x: model.x - model.width / 2 + 5,
|
|
415
410
|
y: model.y - model.height / 2 + 5,
|
|
416
411
|
onClick: function () {
|
|
417
|
-
;
|
|
412
|
+
console.log('fold click');
|
|
418
413
|
model.foldGroup(!model.properties.isFolded);
|
|
419
414
|
},
|
|
420
415
|
}),
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基于DynamicGroup重新实现的泳道节点组件
|
|
3
|
+
* 继承DynamicGroupNodeModel和DynamicGroupNode,提供泳道特定功能
|
|
4
|
+
*/
|
|
5
|
+
import LogicFlow from '@logicflow/core';
|
|
6
|
+
import { DynamicGroupNodeModel } from '../dynamic-group';
|
|
7
|
+
export declare class LaneModel extends DynamicGroupNodeModel {
|
|
8
|
+
readonly isLane: boolean;
|
|
9
|
+
defaultZIndex: number;
|
|
10
|
+
initNodeData(data: LogicFlow.NodeConfig): void;
|
|
11
|
+
setAttributes(): void;
|
|
12
|
+
setZIndex(zIndex: number): void;
|
|
13
|
+
/**
|
|
14
|
+
* 重写折叠方法 - 泳道不支持折叠
|
|
15
|
+
*/
|
|
16
|
+
toggleCollapse(): void;
|
|
17
|
+
/**
|
|
18
|
+
* 获取所属泳池ID
|
|
19
|
+
*/
|
|
20
|
+
getPoolId(): string | null;
|
|
21
|
+
/**
|
|
22
|
+
* 获取所属泳池模型
|
|
23
|
+
*/
|
|
24
|
+
getPoolModel(): any;
|
|
25
|
+
/**
|
|
26
|
+
* 动态修改泳道属性
|
|
27
|
+
*/
|
|
28
|
+
changeAttribute({ width, height, x, y }: any): void;
|
|
29
|
+
/**
|
|
30
|
+
* 重写获取数据方法,添加泳道特定属性
|
|
31
|
+
*/
|
|
32
|
+
getData(): LogicFlow.NodeData;
|
|
33
|
+
/**
|
|
34
|
+
* 重写 isAllowAppendIn,禁止 Lane 嵌套
|
|
35
|
+
*/
|
|
36
|
+
isAllowAppendIn(nodeData: LogicFlow.NodeData): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* 获取需要移动的节点
|
|
39
|
+
* @param groupModel
|
|
40
|
+
*/
|
|
41
|
+
getNodesInGroup(groupModel: DynamicGroupNodeModel): string[];
|
|
42
|
+
getNodeStyle(): {
|
|
43
|
+
[x: string]: unknown;
|
|
44
|
+
fill?: string | undefined;
|
|
45
|
+
stroke?: string | undefined;
|
|
46
|
+
strokeWidth?: number | undefined;
|
|
47
|
+
radius?: number | undefined;
|
|
48
|
+
rx?: number | undefined;
|
|
49
|
+
ry?: number | undefined;
|
|
50
|
+
width?: number | undefined;
|
|
51
|
+
height?: number | undefined;
|
|
52
|
+
path?: string | undefined;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 获取文本样式
|
|
56
|
+
*/
|
|
57
|
+
getTextStyle(): {
|
|
58
|
+
[x: string]: unknown;
|
|
59
|
+
fill?: string | undefined;
|
|
60
|
+
stroke?: string | undefined;
|
|
61
|
+
strokeWidth?: number | undefined;
|
|
62
|
+
radius?: number | undefined;
|
|
63
|
+
rx?: number | undefined;
|
|
64
|
+
ry?: number | undefined;
|
|
65
|
+
width?: number | undefined;
|
|
66
|
+
height?: number | undefined;
|
|
67
|
+
path?: string | undefined;
|
|
68
|
+
overflowMode?: "default" | "autoWrap" | "ellipsis" | undefined;
|
|
69
|
+
textWidth?: number | undefined; /**
|
|
70
|
+
* 获取子泳道
|
|
71
|
+
*/
|
|
72
|
+
background?: LogicFlow.CommonTheme | undefined;
|
|
73
|
+
wrapPadding?: string | undefined;
|
|
74
|
+
color?: string | undefined;
|
|
75
|
+
fontSize: number;
|
|
76
|
+
lineHeight?: number | undefined;
|
|
77
|
+
textAnchor?: "middle" | "start" | "end" | undefined;
|
|
78
|
+
dominantBaseline?: "middle" | "central" | "auto" | "text-bottom" | "alphabetic" | "ideographic" | "mathematical" | "hanging" | "text-top" | undefined;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* 获取子泳道
|
|
82
|
+
*/
|
|
83
|
+
getSubNodes(): any[];
|
|
84
|
+
/**
|
|
85
|
+
* 初始化文本位置 - 根据布局方向设置文本位置
|
|
86
|
+
*/
|
|
87
|
+
updateTextPosition(): void;
|
|
88
|
+
}
|
|
89
|
+
declare const _default: null;
|
|
90
|
+
export default _default;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
var __assign = (this && this.__assign) || function () {
|
|
17
|
+
__assign = Object.assign || function(t) {
|
|
18
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
19
|
+
s = arguments[i];
|
|
20
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
21
|
+
t[p] = s[p];
|
|
22
|
+
}
|
|
23
|
+
return t;
|
|
24
|
+
};
|
|
25
|
+
return __assign.apply(this, arguments);
|
|
26
|
+
};
|
|
27
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
28
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
29
|
+
if (!m) return o;
|
|
30
|
+
var i = m.call(o), r, ar = [], e;
|
|
31
|
+
try {
|
|
32
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
33
|
+
}
|
|
34
|
+
catch (error) { e = { error: error }; }
|
|
35
|
+
finally {
|
|
36
|
+
try {
|
|
37
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
38
|
+
}
|
|
39
|
+
finally { if (e) throw e.error; }
|
|
40
|
+
}
|
|
41
|
+
return ar;
|
|
42
|
+
};
|
|
43
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
44
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
45
|
+
if (ar || !(i in from)) {
|
|
46
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
47
|
+
ar[i] = from[i];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
51
|
+
};
|
|
52
|
+
import { DynamicGroupNodeModel } from '../dynamic-group';
|
|
53
|
+
import { forEach } from 'lodash-es';
|
|
54
|
+
import { laneConfig } from './constant';
|
|
55
|
+
var LaneModel = /** @class */ (function (_super) {
|
|
56
|
+
__extends(LaneModel, _super);
|
|
57
|
+
function LaneModel() {
|
|
58
|
+
var _this = _super.apply(this, __spreadArray([], __read(arguments), false)) || this;
|
|
59
|
+
_this.isLane = true;
|
|
60
|
+
_this.defaultZIndex = -1;
|
|
61
|
+
return _this;
|
|
62
|
+
}
|
|
63
|
+
LaneModel.prototype.initNodeData = function (data) {
|
|
64
|
+
var _a;
|
|
65
|
+
_super.prototype.initNodeData.call(this, data);
|
|
66
|
+
// 泳道特定配置
|
|
67
|
+
this.width = data.width || laneConfig.defaultWidth;
|
|
68
|
+
this.height = data.height || laneConfig.defaultHeight;
|
|
69
|
+
this.draggable = true; // 允许拖拽(实际拖拽逻辑由泳池控制)
|
|
70
|
+
this.resizable = true; // 允许调整大小
|
|
71
|
+
this.rotatable = false; // 禁止旋转
|
|
72
|
+
// 设置泳道层级
|
|
73
|
+
// 如果传入了zIndex,使用传入的值,否则默认为2
|
|
74
|
+
// 泳道层级应该比所属泳池高,确保显示在泳池上方
|
|
75
|
+
this.defaultZIndex = data.zIndex || -1;
|
|
76
|
+
this.setZIndex(this.defaultZIndex);
|
|
77
|
+
this.autoToFront = true;
|
|
78
|
+
this.text.editable = true;
|
|
79
|
+
this.style.stroke = '#000';
|
|
80
|
+
this.style.strokeWidth = 1;
|
|
81
|
+
// 泳道属性配置
|
|
82
|
+
this.properties = __assign(__assign({}, this.properties), { processRef: '', panels: ['processRef'], direction: ((_a = data.properties) === null || _a === void 0 ? void 0 : _a.direction) || 'vertical' });
|
|
83
|
+
// 设置折叠尺寸(泳道不支持折叠,设置为与正常尺寸相同)
|
|
84
|
+
this.collapsedWidth = this.width;
|
|
85
|
+
this.collapsedHeight = this.height;
|
|
86
|
+
this.expandWidth = this.width;
|
|
87
|
+
this.expandHeight = this.height;
|
|
88
|
+
};
|
|
89
|
+
LaneModel.prototype.setAttributes = function () {
|
|
90
|
+
_super.prototype.setAttributes.call(this);
|
|
91
|
+
this.updateTextPosition();
|
|
92
|
+
};
|
|
93
|
+
LaneModel.prototype.setZIndex = function (zIndex) {
|
|
94
|
+
this.zIndex = Math.min(zIndex, this.defaultZIndex) || this.defaultZIndex;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* 重写折叠方法 - 泳道不支持折叠
|
|
98
|
+
*/
|
|
99
|
+
LaneModel.prototype.toggleCollapse = function () {
|
|
100
|
+
// 泳道不支持折叠功能,保持展开状态
|
|
101
|
+
this.isCollapsed = false;
|
|
102
|
+
this.setProperties({ isCollapsed: false });
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* 获取所属泳池ID
|
|
106
|
+
*/
|
|
107
|
+
LaneModel.prototype.getPoolId = function () {
|
|
108
|
+
var _this = this;
|
|
109
|
+
try {
|
|
110
|
+
// 检查graphModel是否存在
|
|
111
|
+
if (!this.graphModel) {
|
|
112
|
+
console.warn('GraphModel is not available');
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
// 安全地获取泳池ID
|
|
116
|
+
var poolModel = this.graphModel.nodes.find(function (node) {
|
|
117
|
+
return node.children && node.children.has(_this.id);
|
|
118
|
+
});
|
|
119
|
+
return (poolModel === null || poolModel === void 0 ? void 0 : poolModel.id) || null;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error('Error getting pool ID:', error);
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* 获取所属泳池模型
|
|
128
|
+
*/
|
|
129
|
+
LaneModel.prototype.getPoolModel = function () {
|
|
130
|
+
try {
|
|
131
|
+
var poolId = this.getPoolId();
|
|
132
|
+
if (!poolId) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
// 检查graphModel是否存在
|
|
136
|
+
if (!this.graphModel) {
|
|
137
|
+
console.warn('GraphModel is not available for getting pool model');
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
var poolModel = this.graphModel.getNodeModelById(poolId);
|
|
141
|
+
return poolModel || null;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
console.error('Error getting pool model:', error);
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* 动态修改泳道属性
|
|
150
|
+
*/
|
|
151
|
+
LaneModel.prototype.changeAttribute = function (_a) {
|
|
152
|
+
var width = _a.width, height = _a.height, x = _a.x, y = _a.y;
|
|
153
|
+
if (width)
|
|
154
|
+
this.width = width; // 更新宽度
|
|
155
|
+
if (height)
|
|
156
|
+
this.height = height; // 更新高度
|
|
157
|
+
if (x)
|
|
158
|
+
this.x = x; // 更新X坐标
|
|
159
|
+
if (y)
|
|
160
|
+
this.y = y; // 更新Y坐标
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* 重写获取数据方法,添加泳道特定属性
|
|
164
|
+
*/
|
|
165
|
+
LaneModel.prototype.getData = function () {
|
|
166
|
+
var data = _super.prototype.getData.call(this);
|
|
167
|
+
// const poolModel = this.getPoolModel()
|
|
168
|
+
return __assign(__assign({}, data), { properties: __assign(__assign({}, data.properties), { width: this.width, height: this.height, processRef: this.properties.processRef, direction: this.properties.direction }) });
|
|
169
|
+
};
|
|
170
|
+
/**
|
|
171
|
+
* 重写 isAllowAppendIn,禁止 Lane 嵌套
|
|
172
|
+
*/
|
|
173
|
+
LaneModel.prototype.isAllowAppendIn = function (nodeData) {
|
|
174
|
+
// 禁止 Lane 节点被添加到 Lane 中
|
|
175
|
+
return String(nodeData.type) !== 'lane';
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* 获取需要移动的节点
|
|
179
|
+
* @param groupModel
|
|
180
|
+
*/
|
|
181
|
+
LaneModel.prototype.getNodesInGroup = function (groupModel) {
|
|
182
|
+
var _this = this;
|
|
183
|
+
var nodeIds = [];
|
|
184
|
+
var parent = groupModel.properties.parent, isDragging = groupModel.isDragging;
|
|
185
|
+
if (isDragging && parent) {
|
|
186
|
+
nodeIds.push(parent);
|
|
187
|
+
}
|
|
188
|
+
forEach(Array.from(groupModel.children), function (nodeId) {
|
|
189
|
+
var nodeModel = _this.graphModel.getNodeModelById(nodeId);
|
|
190
|
+
// 只有非 Lane 类型的节点才会被带动
|
|
191
|
+
if (nodeModel &&
|
|
192
|
+
!nodeModel.isDragging &&
|
|
193
|
+
String(nodeModel.type) !== 'lane') {
|
|
194
|
+
nodeIds.push(nodeId);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
return nodeIds;
|
|
198
|
+
};
|
|
199
|
+
LaneModel.prototype.getNodeStyle = function () {
|
|
200
|
+
var style = _super.prototype.getNodeStyle.call(this);
|
|
201
|
+
style.strokeWidth = 2;
|
|
202
|
+
return style;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* 获取文本样式
|
|
206
|
+
*/
|
|
207
|
+
LaneModel.prototype.getTextStyle = function () {
|
|
208
|
+
var _a = this.properties.isHorizontal, isHorizontal = _a === void 0 ? false : _a;
|
|
209
|
+
var style = _super.prototype.getTextStyle.call(this);
|
|
210
|
+
style.overflowMode = 'ellipsis';
|
|
211
|
+
style.strokeWidth = 2;
|
|
212
|
+
style.textWidth = isHorizontal ? this.height : this.width;
|
|
213
|
+
style.textHeight = isHorizontal ? this.width : this.height;
|
|
214
|
+
if (isHorizontal) {
|
|
215
|
+
style.transform = 'rotate(-90deg)';
|
|
216
|
+
style.textAlign = 'center';
|
|
217
|
+
}
|
|
218
|
+
return style;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* 获取子泳道
|
|
222
|
+
*/
|
|
223
|
+
LaneModel.prototype.getSubNodes = function () {
|
|
224
|
+
var _this = this;
|
|
225
|
+
var children = [];
|
|
226
|
+
Array.from(this.children).forEach(function (childId) {
|
|
227
|
+
var childModel = _this.graphModel.getNodeModelById(childId);
|
|
228
|
+
if (childModel) {
|
|
229
|
+
children.push(childModel);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
return children;
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* 初始化文本位置 - 根据布局方向设置文本位置
|
|
236
|
+
*/
|
|
237
|
+
LaneModel.prototype.updateTextPosition = function () {
|
|
238
|
+
if (this.properties.isHorizontal) {
|
|
239
|
+
// 横向泳池:文本显示在左侧标题区域
|
|
240
|
+
this.text.x = this.x - this.width / 2 + laneConfig.titleSize / 2;
|
|
241
|
+
this.text.y = this.y;
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// 纵向泳池:文本显示在顶部标题区域
|
|
245
|
+
this.text.x = this.x;
|
|
246
|
+
this.text.y = this.y - this.height / 2 + laneConfig.titleSize / 2;
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
return LaneModel;
|
|
250
|
+
}(DynamicGroupNodeModel));
|
|
251
|
+
export { LaneModel };
|
|
252
|
+
export default null;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基于DynamicGroup重新实现的泳道节点组件
|
|
3
|
+
* 继承DynamicGroupNodeModel和DynamicGroupNode,提供泳道特定功能
|
|
4
|
+
*/
|
|
5
|
+
import { h } from '@logicflow/core';
|
|
6
|
+
import { DynamicGroupNode } from '../dynamic-group';
|
|
7
|
+
export declare class LaneView extends DynamicGroupNode {
|
|
8
|
+
getAppendAreaShape(): h.JSX.Element | null;
|
|
9
|
+
getShape(): import("preact").VNode<import("preact").ClassAttributes<HTMLElement>>;
|
|
10
|
+
/**
|
|
11
|
+
* 获取操作图标
|
|
12
|
+
*/
|
|
13
|
+
getOperateIcons(): (import("preact").VNode<import("preact").ClassAttributes<HTMLElement> & {
|
|
14
|
+
cursor: string;
|
|
15
|
+
onClick: () => void;
|
|
16
|
+
}> | import("preact").VNode<import("preact").ClassAttributes<HTMLElement> & {
|
|
17
|
+
cursor: string;
|
|
18
|
+
onClick: () => void;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
transform: string;
|
|
22
|
+
}>)[];
|
|
23
|
+
addBeforeLaneIcon(isHorizontal: boolean, callback: () => void): import("preact").VNode<import("preact").ClassAttributes<HTMLElement> & {
|
|
24
|
+
cursor: string;
|
|
25
|
+
onClick: () => void;
|
|
26
|
+
}>;
|
|
27
|
+
addAfterLaneIcon(isHorizontal: boolean, callback: () => void): import("preact").VNode<import("preact").ClassAttributes<HTMLElement> & {
|
|
28
|
+
cursor: string;
|
|
29
|
+
onClick: () => void;
|
|
30
|
+
}>;
|
|
31
|
+
deleteLaneIcon(callback: () => void): import("preact").VNode<import("preact").ClassAttributes<HTMLElement> & {
|
|
32
|
+
cursor: string;
|
|
33
|
+
onClick: () => void;
|
|
34
|
+
width: number;
|
|
35
|
+
height: number;
|
|
36
|
+
transform: string;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
declare const _default: null;
|
|
40
|
+
export default _default;
|