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