@logicflow/layout 2.1.0-alpha.2 → 2.1.0-alpha.4

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.
Files changed (47) hide show
  1. package/.turbo/turbo-build.log +7 -6
  2. package/CHANGELOG.md +15 -0
  3. package/README.md +9 -2
  4. package/dist/index.min.js +1 -1
  5. package/dist/index.min.js.map +1 -1
  6. package/es/{dagre.d.ts → dagre/index.d.ts} +18 -20
  7. package/es/dagre/index.js +126 -0
  8. package/es/dagre/index.js.map +1 -0
  9. package/es/elkLayout/config.d.ts +26 -0
  10. package/es/elkLayout/config.js +27 -0
  11. package/es/elkLayout/config.js.map +1 -0
  12. package/es/elkLayout/index.d.ts +107 -0
  13. package/es/elkLayout/index.js +187 -0
  14. package/es/elkLayout/index.js.map +1 -0
  15. package/es/index.d.ts +1 -0
  16. package/es/index.js +1 -0
  17. package/es/index.js.map +1 -1
  18. package/es/utils/processEdge.d.ts +3 -0
  19. package/es/utils/processEdge.js +479 -0
  20. package/es/utils/processEdge.js.map +1 -0
  21. package/lib/{dagre.d.ts → dagre/index.d.ts} +18 -20
  22. package/lib/dagre/index.js +152 -0
  23. package/lib/dagre/index.js.map +1 -0
  24. package/lib/elkLayout/config.d.ts +26 -0
  25. package/lib/elkLayout/config.js +30 -0
  26. package/lib/elkLayout/config.js.map +1 -0
  27. package/lib/elkLayout/index.d.ts +107 -0
  28. package/lib/elkLayout/index.js +193 -0
  29. package/lib/elkLayout/index.js.map +1 -0
  30. package/lib/index.d.ts +1 -0
  31. package/lib/index.js +1 -0
  32. package/lib/index.js.map +1 -1
  33. package/lib/utils/processEdge.d.ts +3 -0
  34. package/lib/utils/processEdge.js +483 -0
  35. package/lib/utils/processEdge.js.map +1 -0
  36. package/package.json +3 -2
  37. package/src/dagre/index.ts +177 -0
  38. package/src/elkLayout/config.ts +26 -0
  39. package/src/elkLayout/index.ts +255 -0
  40. package/src/index.ts +2 -0
  41. package/src/utils/processEdge.ts +585 -0
  42. package/stats.html +1 -1
  43. package/es/dagre.js +0 -376
  44. package/es/dagre.js.map +0 -1
  45. package/lib/dagre.js +0 -402
  46. package/lib/dagre.js.map +0 -1
  47. package/src/dagre.ts +0 -438
package/es/dagre.js DELETED
@@ -1,376 +0,0 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
13
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
14
- if (ar || !(i in from)) {
15
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
16
- ar[i] = from[i];
17
- }
18
- }
19
- return to.concat(ar || Array.prototype.slice.call(from));
20
- };
21
- import dagre, { graphlib } from 'dagre';
22
- /**
23
- * Dagre布局类 - LogicFlow自动布局插件
24
- * 基于dagre.js提供图的自动布局能力
25
- */
26
- var Dagre = /** @class */ (function () {
27
- function Dagre() {
28
- }
29
- /**
30
- * 插件初始化方法,由LogicFlow自动调用
31
- * @param lf - LogicFlow实例
32
- */
33
- Dagre.prototype.render = function (lf) {
34
- this.lf = lf;
35
- };
36
- /**
37
- * 执行布局算法,重新排列图中的节点和边
38
- * @param option - 布局配置选项
39
- */
40
- Dagre.prototype.layout = function (option) {
41
- var _this = this;
42
- if (option === void 0) { option = {}; }
43
- var _a = this.lf.graphModel, nodes = _a.nodes, edges = _a.edges, gridSize = _a.gridSize;
44
- // 根据网格大小调整节点间距
45
- var nodesep = 100;
46
- var ranksep = 150;
47
- if (gridSize > 20) {
48
- nodesep = gridSize * 2;
49
- ranksep = gridSize * 2;
50
- }
51
- // 合并默认配置和用户配置
52
- this.option = __assign({
53
- // 默认从左到右布局
54
- rankdir: 'LR',
55
- // 默认右下角对齐
56
- align: 'UL',
57
- // 紧凑树形排名算法
58
- ranker: 'tight-tree',
59
- // 层级间距
60
- ranksep: ranksep,
61
- // 同层节点间距
62
- nodesep: nodesep,
63
- // 图的水平边距
64
- marginx: 120,
65
- // 图的垂直边距
66
- marginy: 120 }, option);
67
- // 创建dagre图实例
68
- var g = new graphlib.Graph();
69
- g.setGraph(this.option);
70
- g.setDefaultEdgeLabel(function () { return ({}); });
71
- // 将LogicFlow节点添加到dagre图中
72
- nodes.forEach(function (node) {
73
- g.setNode(node.id, {
74
- width: node.width || 150,
75
- height: node.height || 50,
76
- id: node.id,
77
- });
78
- });
79
- // 将LogicFlow边添加到dagre图中
80
- edges.forEach(function (edge) {
81
- g.setEdge(edge.sourceNodeId, edge.targetNodeId, {
82
- id: edge.id,
83
- });
84
- });
85
- // 执行dagre布局算法
86
- dagre.layout(g);
87
- // 存储新的节点和边数据
88
- var newNodes = [];
89
- var newEdges = [];
90
- // 更新节点位置
91
- nodes.forEach(function (node) {
92
- var _a;
93
- var _b = g.node(node.id), x = _b.x, y = _b.y;
94
- var lfNode = node.getData();
95
- if (!lfNode) {
96
- throw new Error("\u5E03\u5C40\u9519\u8BEF\uFF1A\u627E\u4E0D\u5230ID\u4E3A ".concat(node.id, " \u7684\u8282\u70B9"));
97
- }
98
- // 更新节点坐标
99
- lfNode.x = x;
100
- lfNode.y = y;
101
- // 更新节点文本位置
102
- if ((_a = lfNode === null || lfNode === void 0 ? void 0 : lfNode.text) === null || _a === void 0 ? void 0 : _a.x) {
103
- lfNode.text.x = x;
104
- lfNode.text.y = y;
105
- }
106
- newNodes.push(lfNode);
107
- });
108
- // 处理边的路径和锚点
109
- edges.forEach(function (edge) {
110
- var lfEdge = edge.getData();
111
- if (!lfEdge) {
112
- return;
113
- }
114
- if (!option.isDefaultAnchor) {
115
- // 自定义锚点,不调整边的关联锚点,只清除路径相关数据,让LogicFlow自动计算
116
- delete lfEdge.pointsList;
117
- delete lfEdge.startPoint;
118
- delete lfEdge.endPoint;
119
- if (lfEdge.text && lfEdge.text.value) {
120
- lfEdge.text = lfEdge.text.value;
121
- }
122
- }
123
- else {
124
- // 默认锚点,重新计算路径以及边的起点和终点(节点默认锚点为上下左右)
125
- delete lfEdge.pointsList;
126
- delete lfEdge.startPoint;
127
- delete lfEdge.endPoint;
128
- delete lfEdge.sourceAnchorId;
129
- delete lfEdge.targetAnchorId;
130
- var model = _this.lf.getEdgeModelById(edge.id);
131
- if (model) {
132
- // 计算自定义折线路径
133
- lfEdge.pointsList = _this.calcPointsList(model, newNodes);
134
- }
135
- if (lfEdge.pointsList) {
136
- // 设置边的起点和终点
137
- var first = lfEdge.pointsList[0];
138
- var last = lfEdge.pointsList[lfEdge.pointsList.length - 1];
139
- lfEdge.startPoint = { x: first.x, y: first.y };
140
- lfEdge.endPoint = { x: last.x, y: last.y };
141
- }
142
- if (lfEdge.text && lfEdge.text.value) {
143
- // 保留文本内容
144
- lfEdge.text = lfEdge.text.value;
145
- }
146
- }
147
- newEdges.push(lfEdge);
148
- });
149
- // 将计算好的布局数据应用到画布
150
- this.lf.renderRawData({
151
- nodes: newNodes,
152
- edges: newEdges,
153
- });
154
- };
155
- /**
156
- * 计算字符串显示宽度(用于文本定位)
157
- * @param word - 要计算的文本
158
- * @returns 估算的文本像素宽度
159
- */
160
- Dagre.prototype.getBytesLength = function (word) {
161
- if (!word) {
162
- return 0;
163
- }
164
- var totalLength = 0;
165
- for (var i = 0; i < word.length; i++) {
166
- var c = word.charCodeAt(i);
167
- // 大写字母宽度加权
168
- if (word.match(/[A-Z]/)) {
169
- totalLength += 1.5;
170
- }
171
- // ASCII字符和半角字符
172
- else if ((c >= 0x0001 && c <= 0x007e) || (c >= 0xff60 && c <= 0xff9f)) {
173
- totalLength += 1;
174
- }
175
- // 其他字符(如中文)
176
- else {
177
- totalLength += 2;
178
- }
179
- }
180
- return totalLength;
181
- };
182
- /**
183
- * 优化折线路径点,移除冗余点
184
- * @param points - 原始路径点数组
185
- * @returns 优化后的路径点数组
186
- */
187
- Dagre.prototype.pointFilter = function (points) {
188
- var allPoints = __spreadArray([], points, true); // 创建副本避免修改原始数据
189
- var i = 1;
190
- // 删除直线上的中间点(保持路径简洁)
191
- while (i < allPoints.length - 1) {
192
- var pre = allPoints[i - 1];
193
- var current = allPoints[i];
194
- var next = allPoints[i + 1];
195
- // 如果三点共线,移除中间点
196
- if ((pre.x === current.x && current.x === next.x) || // 垂直线上的点
197
- (pre.y === current.y && current.y === next.y)) {
198
- // 水平线上的点
199
- allPoints.splice(i, 1);
200
- }
201
- else {
202
- i++;
203
- }
204
- }
205
- return allPoints;
206
- };
207
- /**
208
- * 计算边的折线路径点
209
- * @param model - 边模型
210
- * @param nodes - 节点数据数组
211
- * @returns 计算后的路径点数组,如果无法计算则返回undefined
212
- */
213
- Dagre.prototype.calcPointsList = function (model, nodes) {
214
- var pointsList = [];
215
- // 获取源节点和目标节点的模型与布局数据
216
- var sourceNodeModel = this.lf.getNodeModelById(model.sourceNodeId);
217
- var targetNodeModel = this.lf.getNodeModelById(model.targetNodeId);
218
- var newSourceNodeData = nodes.find(function (node) { return node.id === model.sourceNodeId; });
219
- var newTargetNodeData = nodes.find(function (node) { return node.id === model.targetNodeId; });
220
- // 数据验证
221
- if (!sourceNodeModel ||
222
- !targetNodeModel ||
223
- !newSourceNodeData ||
224
- !newTargetNodeData) {
225
- return undefined;
226
- }
227
- // 折线偏移量(用于创建合适的转折点)
228
- var offset = Number(model.offset) || 50;
229
- // 处理从左到右(LR)布局的边路径
230
- if (this.option.rankdir === 'LR' && model.modelType === 'polyline-edge') {
231
- // 正向连线:源节点在目标节点左侧
232
- if (newSourceNodeData.x < newTargetNodeData.x) {
233
- // 从源节点右侧中心出发
234
- pointsList.push({
235
- x: newSourceNodeData.x + sourceNodeModel.width / 2,
236
- y: newSourceNodeData.y,
237
- });
238
- // 向右延伸一段距离
239
- pointsList.push({
240
- x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
241
- y: newSourceNodeData.y,
242
- });
243
- // 垂直移动到目标节点的高度
244
- pointsList.push({
245
- x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
246
- y: newTargetNodeData.y,
247
- });
248
- // 连接到目标节点左侧中心
249
- pointsList.push({
250
- x: newTargetNodeData.x - targetNodeModel.width / 2,
251
- y: newTargetNodeData.y,
252
- });
253
- return this.pointFilter(pointsList);
254
- }
255
- // 反向连线:源节点在目标节点右侧
256
- if (newSourceNodeData.x > newTargetNodeData.x) {
257
- // 根据节点相对Y轴位置选择不同路径
258
- if (newSourceNodeData.y >= newTargetNodeData.y) {
259
- // 源节点在目标节点的右下方,从源节点上方出发
260
- pointsList.push({
261
- x: newSourceNodeData.x,
262
- y: newSourceNodeData.y + sourceNodeModel.height / 2,
263
- });
264
- pointsList.push({
265
- x: newSourceNodeData.x,
266
- y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
267
- });
268
- pointsList.push({
269
- x: newTargetNodeData.x,
270
- y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
271
- });
272
- pointsList.push({
273
- x: newTargetNodeData.x,
274
- y: newTargetNodeData.y + targetNodeModel.height / 2,
275
- });
276
- }
277
- else {
278
- // 源节点在目标节点的右上方,从源节点下方出发
279
- pointsList.push({
280
- x: newSourceNodeData.x,
281
- y: newSourceNodeData.y - sourceNodeModel.height / 2,
282
- });
283
- pointsList.push({
284
- x: newSourceNodeData.x,
285
- y: newSourceNodeData.y - sourceNodeModel.height / 2 - offset,
286
- });
287
- pointsList.push({
288
- x: newTargetNodeData.x,
289
- y: newSourceNodeData.y - sourceNodeModel.height / 2 - offset,
290
- });
291
- pointsList.push({
292
- x: newTargetNodeData.x,
293
- y: newTargetNodeData.y - targetNodeModel.height / 2,
294
- });
295
- }
296
- return this.pointFilter(pointsList);
297
- }
298
- }
299
- // 处理从上到下(TB)布局的边路径
300
- if (this.option.rankdir === 'TB' && model.modelType === 'polyline-edge') {
301
- // 正向连线:源节点在目标节点上方
302
- if (newSourceNodeData.y < newTargetNodeData.y) {
303
- // 从源节点底部中心出发
304
- pointsList.push({
305
- x: newSourceNodeData.x,
306
- y: newSourceNodeData.y + sourceNodeModel.height / 2,
307
- });
308
- // 向下延伸一段距离
309
- pointsList.push({
310
- x: newSourceNodeData.x,
311
- y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
312
- });
313
- // 水平移动到目标节点的位置
314
- pointsList.push({
315
- x: newTargetNodeData.x,
316
- y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
317
- });
318
- // 连接到目标节点顶部中心
319
- pointsList.push({
320
- x: newTargetNodeData.x,
321
- y: newTargetNodeData.y - targetNodeModel.height / 2,
322
- });
323
- return this.pointFilter(pointsList);
324
- }
325
- // 反向连线:源节点在目标节点下方
326
- if (newSourceNodeData.y > newTargetNodeData.y) {
327
- if (newSourceNodeData.x >= newTargetNodeData.x) {
328
- // 源节点在目标节点右下方,从源节点右侧出发
329
- pointsList.push({
330
- x: newSourceNodeData.x + sourceNodeModel.width / 2,
331
- y: newSourceNodeData.y,
332
- });
333
- pointsList.push({
334
- x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
335
- y: newSourceNodeData.y,
336
- });
337
- pointsList.push({
338
- x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
339
- y: newTargetNodeData.y,
340
- });
341
- pointsList.push({
342
- x: newTargetNodeData.x + targetNodeModel.width / 2,
343
- y: newTargetNodeData.y,
344
- });
345
- }
346
- else {
347
- // 源节点在目标节点左下方,从源节点左侧出发
348
- pointsList.push({
349
- x: newSourceNodeData.x - sourceNodeModel.width / 2,
350
- y: newSourceNodeData.y,
351
- });
352
- pointsList.push({
353
- x: newSourceNodeData.x - sourceNodeModel.width / 2 - offset,
354
- y: newSourceNodeData.y,
355
- });
356
- pointsList.push({
357
- x: newSourceNodeData.x - sourceNodeModel.width / 2 - offset,
358
- y: newTargetNodeData.y,
359
- });
360
- pointsList.push({
361
- x: newTargetNodeData.x - targetNodeModel.width / 2,
362
- y: newTargetNodeData.y,
363
- });
364
- }
365
- return this.pointFilter(pointsList);
366
- }
367
- }
368
- // 无法确定路径时返回undefined,让LogicFlow自行处理
369
- return undefined;
370
- };
371
- /** 插件名称,用于在LogicFlow中注册 */
372
- Dagre.pluginName = 'dagre';
373
- return Dagre;
374
- }());
375
- export { Dagre };
376
- //# sourceMappingURL=dagre.js.map
package/es/dagre.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"dagre.js","sourceRoot":"","sources":["../src/dagre.ts"],"names":[],"mappings":"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"}