@logicflow/layout 1.2.0-alpha.16 → 2.0.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/es/dagre.d.ts CHANGED
@@ -1,25 +1,73 @@
1
- import { DagreLayoutOptions } from '@antv/layout';
1
+ /**
2
+ * @fileoverview Dagre布局插件 - 提供自动化图形布局功能
3
+ *
4
+ * 本插件基于dagre.js实现LogicFlow的自动化布局功能,支持多种布局方向
5
+ * 可自动计算节点位置和连线路径,实现整洁的图形展示
6
+ */
7
+ import LogicFlow, { BaseEdgeModel } from '@logicflow/core';
8
+ import { GraphLabel } from 'dagre';
9
+ import NodeConfig = LogicFlow.NodeConfig;
10
+ import Point = LogicFlow.Point;
11
+ /**
12
+ * Dagre布局配置选项接口
13
+ * @interface DagreOption
14
+ * @extends GraphLabel - 继承dagre原生配置
15
+ */
16
+ export interface DagreOption extends GraphLabel {
17
+ /**
18
+ * 是否是默认锚点
19
+ * true: 会根据布局方向自动计算边的路径点
20
+ */
21
+ isDefaultAnchor?: boolean;
22
+ }
23
+ /**
24
+ * Dagre插件接口定义
25
+ */
26
+ export interface DagrePlugin {
27
+ /**
28
+ * 执行布局计算
29
+ * @param option - 布局配置选项
30
+ */
31
+ layout(option: DagreOption): void;
32
+ }
33
+ /**
34
+ * Dagre布局类 - LogicFlow自动布局插件
35
+ * 基于dagre.js提供图的自动布局能力
36
+ */
2
37
  export declare class Dagre {
38
+ /** 插件名称,用于在LogicFlow中注册 */
3
39
  static pluginName: string;
4
- lf: any;
5
- option: DagreLayoutOptions;
6
- render(lf: any): void;
40
+ /** LogicFlow实例引用 */
41
+ lf: LogicFlow;
42
+ /** 当前布局配置 */
43
+ option: DagreOption;
44
+ /**
45
+ * 插件初始化方法,由LogicFlow自动调用
46
+ * @param lf - LogicFlow实例
47
+ */
48
+ render(lf: LogicFlow): void;
49
+ /**
50
+ * 执行布局算法,重新排列图中的节点和边
51
+ * @param option - 布局配置选项
52
+ */
53
+ layout(option?: DagreOption): void;
54
+ /**
55
+ * 计算字符串显示宽度(用于文本定位)
56
+ * @param word - 要计算的文本
57
+ * @returns 估算的文本像素宽度
58
+ */
7
59
  getBytesLength(word: string): number;
8
60
  /**
9
- * option: {
10
- * rankdir: "TB", // layout 方向, 可选 TB, BT, LR, RL
11
- * align: undefined, // 节点对齐方式,可选 UL, UR, DL, DR
12
- * nodeSize: undefined, // 节点大小
13
- * nodesepFunc: undefined, // 节点水平间距(px)
14
- * ranksepFunc: undefined, // 每一层节点之间间距
15
- * nodesep: 40, // 节点水平间距(px) 注意:如果有grid,需要保证nodesep为grid的偶数倍
16
- * ranksep: 40, // 每一层节点之间间距 注意:如果有grid,需要保证ranksep为grid的偶数倍
17
- * controlPoints: false, // 是否保留布局连线的控制点
18
- * radial: false, // 是否基于 dagre 进行辐射布局
19
- * focusNode: null, // radial 为 true 时生效,关注的节点
20
- * };
61
+ * 优化折线路径点,移除冗余点
62
+ * @param points - 原始路径点数组
63
+ * @returns 优化后的路径点数组
64
+ */
65
+ pointFilter(points: Point[]): Point[];
66
+ /**
67
+ * 计算边的折线路径点
68
+ * @param model - 边模型
69
+ * @param nodes - 节点数据数组
70
+ * @returns 计算后的路径点数组,如果无法计算则返回undefined
21
71
  */
22
- layout(option?: {}): void;
23
- pointFilter(points: any): any;
24
- calcPointsList(model: any, nodes: any): any;
72
+ calcPointsList(model: BaseEdgeModel, nodes: NodeConfig[]): Point[] | undefined;
25
73
  }
package/es/dagre.js CHANGED
@@ -9,13 +9,159 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
- import { DagreLayout } from '@antv/layout';
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
+ */
13
26
  var Dagre = /** @class */ (function () {
14
27
  function Dagre() {
15
28
  }
29
+ /**
30
+ * 插件初始化方法,由LogicFlow自动调用
31
+ * @param lf - LogicFlow实例
32
+ */
16
33
  Dagre.prototype.render = function (lf) {
17
34
  this.lf = lf;
18
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
+ }
120
+ else {
121
+ // 默认锚点,重新计算路径以及边的起点和终点(节点默认锚点为上下左右)
122
+ delete lfEdge.pointsList;
123
+ delete lfEdge.startPoint;
124
+ delete lfEdge.endPoint;
125
+ delete lfEdge.sourceAnchorId;
126
+ delete lfEdge.targetAnchorId;
127
+ var model = _this.lf.getEdgeModelById(edge.id);
128
+ if (model) {
129
+ // 计算自定义折线路径
130
+ lfEdge.pointsList = _this.calcPointsList(model, newNodes);
131
+ }
132
+ if (lfEdge.pointsList) {
133
+ // 设置边的起点和终点
134
+ var first = lfEdge.pointsList[0];
135
+ var last = lfEdge.pointsList[lfEdge.pointsList.length - 1];
136
+ lfEdge.startPoint = { x: first.x, y: first.y };
137
+ lfEdge.endPoint = { x: last.x, y: last.y };
138
+ // 调整边标签位置
139
+ if (lfEdge.text && lfEdge.text.value) {
140
+ lfEdge.text = {
141
+ x: last.x - _this.getBytesLength(lfEdge.text.value) * 6 - 10,
142
+ y: last.y,
143
+ value: lfEdge.text.value,
144
+ };
145
+ }
146
+ }
147
+ else if (lfEdge.text && lfEdge.text.value) {
148
+ // 没有自定义路径时保留文本内容
149
+ lfEdge.text = lfEdge.text.value;
150
+ }
151
+ }
152
+ newEdges.push(lfEdge);
153
+ });
154
+ // 将计算好的布局数据应用到画布
155
+ this.lf.renderRawData({
156
+ nodes: newNodes,
157
+ edges: newEdges,
158
+ });
159
+ };
160
+ /**
161
+ * 计算字符串显示宽度(用于文本定位)
162
+ * @param word - 要计算的文本
163
+ * @returns 估算的文本像素宽度
164
+ */
19
165
  Dagre.prototype.getBytesLength = function (word) {
20
166
  if (!word) {
21
167
  return 0;
@@ -23,12 +169,15 @@ var Dagre = /** @class */ (function () {
23
169
  var totalLength = 0;
24
170
  for (var i = 0; i < word.length; i++) {
25
171
  var c = word.charCodeAt(i);
26
- if ((word.match(/[A-Z]/))) {
172
+ // 大写字母宽度加权
173
+ if (word.match(/[A-Z]/)) {
27
174
  totalLength += 1.5;
28
175
  }
176
+ // ASCII字符和半角字符
29
177
  else if ((c >= 0x0001 && c <= 0x007e) || (c >= 0xff60 && c <= 0xff9f)) {
30
178
  totalLength += 1;
31
179
  }
180
+ // 其他字符(如中文)
32
181
  else {
33
182
  totalLength += 2;
34
183
  }
@@ -36,103 +185,22 @@ var Dagre = /** @class */ (function () {
36
185
  return totalLength;
37
186
  };
38
187
  /**
39
- * option: {
40
- * rankdir: "TB", // layout 方向, 可选 TB, BT, LR, RL
41
- * align: undefined, // 节点对齐方式,可选 UL, UR, DL, DR
42
- * nodeSize: undefined, // 节点大小
43
- * nodesepFunc: undefined, // 节点水平间距(px)
44
- * ranksepFunc: undefined, // 每一层节点之间间距
45
- * nodesep: 40, // 节点水平间距(px) 注意:如果有grid,需要保证nodesep为grid的偶数倍
46
- * ranksep: 40, // 每一层节点之间间距 注意:如果有grid,需要保证ranksep为grid的偶数倍
47
- * controlPoints: false, // 是否保留布局连线的控制点
48
- * radial: false, // 是否基于 dagre 进行辐射布局
49
- * focusNode: null, // radial 为 true 时生效,关注的节点
50
- * };
188
+ * 优化折线路径点,移除冗余点
189
+ * @param points - 原始路径点数组
190
+ * @returns 优化后的路径点数组
51
191
  */
52
- Dagre.prototype.layout = function (option) {
53
- var _this = this;
54
- if (option === void 0) { option = {}; }
55
- var _a = this.lf.graphModel, nodes = _a.nodes, edges = _a.edges, gridSize = _a.gridSize;
56
- // 为了保证生成的节点在girdSize上,需要处理一下。
57
- var nodesep = 40;
58
- var ranksep = 40;
59
- if (gridSize > 20) {
60
- nodesep = gridSize * 2;
61
- ranksep = gridSize * 2;
62
- }
63
- this.option = __assign({ type: 'dagre', rankdir: 'LR',
64
- // align: 'UL',
65
- // align: 'UR',
66
- align: 'DR', nodesep: nodesep,
67
- ranksep: ranksep, begin: [120, 120] }, option);
68
- var layoutInstance = new DagreLayout(this.option);
69
- var layoutData = layoutInstance.layout({
70
- nodes: nodes.map(function (node) { return ({
71
- id: node.id,
72
- size: {
73
- width: node.width,
74
- height: node.height,
75
- },
76
- model: node,
77
- }); }),
78
- edges: edges.map(function (edge) { return ({
79
- source: edge.sourceNodeId,
80
- target: edge.targetNodeId,
81
- model: edge,
82
- }); }),
83
- });
84
- var newGraphData = {
85
- nodes: [],
86
- edges: [],
87
- };
88
- layoutData.nodes.forEach(function (node) {
89
- // @ts-ignore: pass node data
90
- var model = node.model;
91
- var data = model.getData();
92
- // @ts-ignore: pass node data
93
- data.x = node.x;
94
- // @ts-ignore: pass node data
95
- data.y = node.y;
96
- newGraphData.nodes.push(data);
97
- });
98
- layoutData.edges.forEach(function (edge) {
99
- // @ts-ignore: pass edge data
100
- var model = edge.model;
101
- var data = model.getData();
102
- data.pointsList = _this.calcPointsList(model, newGraphData.nodes);
103
- if (data.pointsList) {
104
- var first = data.pointsList[0];
105
- var last = data.pointsList[data.pointsList.length - 1];
106
- data.startPoint = { x: first.x, y: first.y };
107
- data.endPoint = { x: last.x, y: last.y };
108
- if (data.text && data.text.value) {
109
- data.text = {
110
- x: last.x - _this.getBytesLength(data.text.value) * 6 - 10,
111
- y: last.y,
112
- value: data.text.value,
113
- };
114
- }
115
- }
116
- else {
117
- data.startPoint = undefined;
118
- data.endPoint = undefined;
119
- if (data.text && data.text.value) {
120
- data.text = data.text.value;
121
- }
122
- }
123
- newGraphData.edges.push(data);
124
- });
125
- this.lf.render(newGraphData);
126
- };
127
192
  Dagre.prototype.pointFilter = function (points) {
128
- var allPoints = points;
193
+ var allPoints = __spreadArray([], points, true); // 创建副本避免修改原始数据
129
194
  var i = 1;
195
+ // 删除直线上的中间点(保持路径简洁)
130
196
  while (i < allPoints.length - 1) {
131
197
  var pre = allPoints[i - 1];
132
198
  var current = allPoints[i];
133
199
  var next = allPoints[i + 1];
134
- if ((pre.x === current.x && current.x === next.x)
135
- || (pre.y === current.y && current.y === next.y)) {
200
+ // 如果三点共线,移除中间点
201
+ if ((pre.x === current.x && current.x === next.x) || // 垂直线上的点
202
+ (pre.y === current.y && current.y === next.y)) {
203
+ // 水平线上的点
136
204
  allPoints.splice(i, 1);
137
205
  }
138
206
  else {
@@ -141,48 +209,70 @@ var Dagre = /** @class */ (function () {
141
209
  }
142
210
  return allPoints;
143
211
  };
212
+ /**
213
+ * 计算边的折线路径点
214
+ * @param model - 边模型
215
+ * @param nodes - 节点数据数组
216
+ * @returns 计算后的路径点数组,如果无法计算则返回undefined
217
+ */
144
218
  Dagre.prototype.calcPointsList = function (model, nodes) {
145
- // 在节点确认从左向右后,通过计算来保证节点连线清晰。
146
- // TODO: 避障
147
219
  var pointsList = [];
220
+ // 获取源节点和目标节点的模型与布局数据
221
+ var sourceNodeModel = this.lf.getNodeModelById(model.sourceNodeId);
222
+ var targetNodeModel = this.lf.getNodeModelById(model.targetNodeId);
223
+ var newSourceNodeData = nodes.find(function (node) { return node.id === model.sourceNodeId; });
224
+ var newTargetNodeData = nodes.find(function (node) { return node.id === model.targetNodeId; });
225
+ // 数据验证
226
+ if (!sourceNodeModel ||
227
+ !targetNodeModel ||
228
+ !newSourceNodeData ||
229
+ !newTargetNodeData) {
230
+ return undefined;
231
+ }
232
+ // 折线偏移量(用于创建合适的转折点)
233
+ var offset = Number(model.offset) || 50;
234
+ // 处理从左到右(LR)布局的边路径
148
235
  if (this.option.rankdir === 'LR' && model.modelType === 'polyline-edge') {
149
- var sourceNodeModel = this.lf.getNodeModelById(model.sourceNodeId);
150
- var targetNodeModel = this.lf.getNodeModelById(model.targetNodeId);
151
- var newSourceNodeData = nodes.find(function (node) { return node.id === model.sourceNodeId; });
152
- var newTargetNodeData = nodes.find(function (node) { return node.id === model.targetNodeId; });
236
+ // 正向连线:源节点在目标节点左侧
153
237
  if (newSourceNodeData.x < newTargetNodeData.x) {
238
+ // 从源节点右侧中心出发
154
239
  pointsList.push({
155
240
  x: newSourceNodeData.x + sourceNodeModel.width / 2,
156
241
  y: newSourceNodeData.y,
157
242
  });
243
+ // 向右延伸一段距离
158
244
  pointsList.push({
159
- x: newSourceNodeData.x + sourceNodeModel.width / 2 + (model.offset || 50),
245
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
160
246
  y: newSourceNodeData.y,
161
247
  });
248
+ // 垂直移动到目标节点的高度
162
249
  pointsList.push({
163
- x: newSourceNodeData.x + sourceNodeModel.width / 2 + (model.offset || 50),
250
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
164
251
  y: newTargetNodeData.y,
165
252
  });
253
+ // 连接到目标节点左侧中心
166
254
  pointsList.push({
167
255
  x: newTargetNodeData.x - targetNodeModel.width / 2,
168
256
  y: newTargetNodeData.y,
169
257
  });
170
258
  return this.pointFilter(pointsList);
171
259
  }
172
- // 向回连线
260
+ // 反向连线:源节点在目标节点右侧
173
261
  if (newSourceNodeData.x > newTargetNodeData.x) {
262
+ // 根据节点相对Y轴位置选择不同路径
174
263
  if (newSourceNodeData.y >= newTargetNodeData.y) {
264
+ // 源节点在目标节点的右下方,从源节点上方出发
175
265
  pointsList.push({
176
266
  x: newSourceNodeData.x,
177
267
  y: newSourceNodeData.y + sourceNodeModel.height / 2,
178
268
  });
179
269
  pointsList.push({
180
270
  x: newSourceNodeData.x,
181
- y: newSourceNodeData.y + sourceNodeModel.height / 2 + (model.offset || 50),
271
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
182
272
  });
183
273
  pointsList.push({
184
274
  x: newTargetNodeData.x,
185
- y: newSourceNodeData.y + sourceNodeModel.height / 2 + (model.offset || 50),
275
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
186
276
  });
187
277
  pointsList.push({
188
278
  x: newTargetNodeData.x,
@@ -190,17 +280,18 @@ var Dagre = /** @class */ (function () {
190
280
  });
191
281
  }
192
282
  else {
283
+ // 源节点在目标节点的右上方,从源节点下方出发
193
284
  pointsList.push({
194
285
  x: newSourceNodeData.x,
195
286
  y: newSourceNodeData.y - sourceNodeModel.height / 2,
196
287
  });
197
288
  pointsList.push({
198
289
  x: newSourceNodeData.x,
199
- y: newSourceNodeData.y - sourceNodeModel.height / 2 - (model.offset || 50),
290
+ y: newSourceNodeData.y - sourceNodeModel.height / 2 - offset,
200
291
  });
201
292
  pointsList.push({
202
293
  x: newTargetNodeData.x,
203
- y: newSourceNodeData.y - sourceNodeModel.height / 2 - (model.offset || 50),
294
+ y: newSourceNodeData.y - sourceNodeModel.height / 2 - offset,
204
295
  });
205
296
  pointsList.push({
206
297
  x: newTargetNodeData.x,
@@ -210,9 +301,81 @@ var Dagre = /** @class */ (function () {
210
301
  return this.pointFilter(pointsList);
211
302
  }
212
303
  }
304
+ // 处理从上到下(TB)布局的边路径
305
+ if (this.option.rankdir === 'TB' && model.modelType === 'polyline-edge') {
306
+ // 正向连线:源节点在目标节点上方
307
+ if (newSourceNodeData.y < newTargetNodeData.y) {
308
+ // 从源节点底部中心出发
309
+ pointsList.push({
310
+ x: newSourceNodeData.x,
311
+ y: newSourceNodeData.y + sourceNodeModel.height / 2,
312
+ });
313
+ // 向下延伸一段距离
314
+ pointsList.push({
315
+ x: newSourceNodeData.x,
316
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
317
+ });
318
+ // 水平移动到目标节点的位置
319
+ pointsList.push({
320
+ x: newTargetNodeData.x,
321
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
322
+ });
323
+ // 连接到目标节点顶部中心
324
+ pointsList.push({
325
+ x: newTargetNodeData.x,
326
+ y: newTargetNodeData.y - targetNodeModel.height / 2,
327
+ });
328
+ return this.pointFilter(pointsList);
329
+ }
330
+ // 反向连线:源节点在目标节点下方
331
+ if (newSourceNodeData.y > newTargetNodeData.y) {
332
+ if (newSourceNodeData.x >= newTargetNodeData.x) {
333
+ // 源节点在目标节点右下方,从源节点右侧出发
334
+ pointsList.push({
335
+ x: newSourceNodeData.x + sourceNodeModel.width / 2,
336
+ y: newSourceNodeData.y,
337
+ });
338
+ pointsList.push({
339
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
340
+ y: newSourceNodeData.y,
341
+ });
342
+ pointsList.push({
343
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
344
+ y: newTargetNodeData.y,
345
+ });
346
+ pointsList.push({
347
+ x: newTargetNodeData.x + targetNodeModel.width / 2,
348
+ y: newTargetNodeData.y,
349
+ });
350
+ }
351
+ else {
352
+ // 源节点在目标节点左下方,从源节点左侧出发
353
+ pointsList.push({
354
+ x: newSourceNodeData.x - sourceNodeModel.width / 2,
355
+ y: newSourceNodeData.y,
356
+ });
357
+ pointsList.push({
358
+ x: newSourceNodeData.x - sourceNodeModel.width / 2 - offset,
359
+ y: newSourceNodeData.y,
360
+ });
361
+ pointsList.push({
362
+ x: newSourceNodeData.x - sourceNodeModel.width / 2 - offset,
363
+ y: newTargetNodeData.y,
364
+ });
365
+ pointsList.push({
366
+ x: newTargetNodeData.x - targetNodeModel.width / 2,
367
+ y: newTargetNodeData.y,
368
+ });
369
+ }
370
+ return this.pointFilter(pointsList);
371
+ }
372
+ }
373
+ // 无法确定路径时返回undefined,让LogicFlow自行处理
213
374
  return undefined;
214
375
  };
376
+ /** 插件名称,用于在LogicFlow中注册 */
215
377
  Dagre.pluginName = 'dagre';
216
378
  return Dagre;
217
379
  }());
218
380
  export { Dagre };
381
+ //# sourceMappingURL=dagre.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dagre.js","sourceRoot":"","sources":["../src/dagre.ts"],"names":[],"mappings":"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"}
package/es/index.js CHANGED
@@ -1 +1,2 @@
1
1
  export * from './dagre';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
package/lib/dagre.d.ts ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @fileoverview Dagre布局插件 - 提供自动化图形布局功能
3
+ *
4
+ * 本插件基于dagre.js实现LogicFlow的自动化布局功能,支持多种布局方向
5
+ * 可自动计算节点位置和连线路径,实现整洁的图形展示
6
+ */
7
+ import LogicFlow, { BaseEdgeModel } from '@logicflow/core';
8
+ import { GraphLabel } from 'dagre';
9
+ import NodeConfig = LogicFlow.NodeConfig;
10
+ import Point = LogicFlow.Point;
11
+ /**
12
+ * Dagre布局配置选项接口
13
+ * @interface DagreOption
14
+ * @extends GraphLabel - 继承dagre原生配置
15
+ */
16
+ export interface DagreOption extends GraphLabel {
17
+ /**
18
+ * 是否是默认锚点
19
+ * true: 会根据布局方向自动计算边的路径点
20
+ */
21
+ isDefaultAnchor?: boolean;
22
+ }
23
+ /**
24
+ * Dagre插件接口定义
25
+ */
26
+ export interface DagrePlugin {
27
+ /**
28
+ * 执行布局计算
29
+ * @param option - 布局配置选项
30
+ */
31
+ layout(option: DagreOption): void;
32
+ }
33
+ /**
34
+ * Dagre布局类 - LogicFlow自动布局插件
35
+ * 基于dagre.js提供图的自动布局能力
36
+ */
37
+ export declare class Dagre {
38
+ /** 插件名称,用于在LogicFlow中注册 */
39
+ static pluginName: string;
40
+ /** LogicFlow实例引用 */
41
+ lf: LogicFlow;
42
+ /** 当前布局配置 */
43
+ option: DagreOption;
44
+ /**
45
+ * 插件初始化方法,由LogicFlow自动调用
46
+ * @param lf - LogicFlow实例
47
+ */
48
+ render(lf: LogicFlow): void;
49
+ /**
50
+ * 执行布局算法,重新排列图中的节点和边
51
+ * @param option - 布局配置选项
52
+ */
53
+ layout(option?: DagreOption): void;
54
+ /**
55
+ * 计算字符串显示宽度(用于文本定位)
56
+ * @param word - 要计算的文本
57
+ * @returns 估算的文本像素宽度
58
+ */
59
+ getBytesLength(word: string): number;
60
+ /**
61
+ * 优化折线路径点,移除冗余点
62
+ * @param points - 原始路径点数组
63
+ * @returns 优化后的路径点数组
64
+ */
65
+ pointFilter(points: Point[]): Point[];
66
+ /**
67
+ * 计算边的折线路径点
68
+ * @param model - 边模型
69
+ * @param nodes - 节点数据数组
70
+ * @returns 计算后的路径点数组,如果无法计算则返回undefined
71
+ */
72
+ calcPointsList(model: BaseEdgeModel, nodes: NodeConfig[]): Point[] | undefined;
73
+ }