@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
@@ -0,0 +1,479 @@
1
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
+ if (ar || !(i in from)) {
4
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
+ ar[i] = from[i];
6
+ }
7
+ }
8
+ return to.concat(ar || Array.prototype.slice.call(from));
9
+ };
10
+ var SegmentDirection;
11
+ (function (SegmentDirection) {
12
+ SegmentDirection["HORIZONTAL"] = "horizontal";
13
+ SegmentDirection["VERTICAL"] = "vertical";
14
+ })(SegmentDirection || (SegmentDirection = {}));
15
+ export function processEdges(lf, rankdir, isDefaultAnchor, edges, newNodes) {
16
+ var newEdges = [];
17
+ // 处理边的路径和锚点
18
+ edges.forEach(function (edgeModel) {
19
+ var lfEdge = edgeModel.getData();
20
+ if (!lfEdge) {
21
+ throw new Error("\u5E03\u5C40\u9519\u8BEF\uFF1A\u627E\u4E0D\u5230ID\u4E3A ".concat(edgeModel.id, " \u7684\u8FB9"));
22
+ }
23
+ if (!isDefaultAnchor) {
24
+ // 自定义锚点,不调整边的关联锚点,只清除路径相关数据,让LogicFlow自动计算
25
+ delete lfEdge.pointsList;
26
+ delete lfEdge.startPoint;
27
+ delete lfEdge.endPoint;
28
+ if (typeof lfEdge.text === 'object' && lfEdge.text && lfEdge.text.value) {
29
+ lfEdge.text = lfEdge.text.value;
30
+ }
31
+ }
32
+ else {
33
+ // 默认锚点,重新计算路径以及边的起点和终点(节点默认锚点为上下左右)
34
+ delete lfEdge.pointsList;
35
+ delete lfEdge.startPoint;
36
+ delete lfEdge.endPoint;
37
+ delete lfEdge.sourceAnchorId;
38
+ delete lfEdge.targetAnchorId;
39
+ lfEdge.pointsList = calcPointsList(lf, rankdir, edgeModel, newNodes);
40
+ if (lfEdge.pointsList) {
41
+ // 设置边的起点和终点
42
+ var first = lfEdge.pointsList[0];
43
+ var last = lfEdge.pointsList[lfEdge.pointsList.length - 1];
44
+ lfEdge.startPoint = { x: first.x, y: first.y };
45
+ lfEdge.endPoint = { x: last.x, y: last.y };
46
+ }
47
+ if (typeof lfEdge.text === 'object' && lfEdge.text && lfEdge.text.value) {
48
+ // 保留文本内容
49
+ lfEdge.text = lfEdge.text.value;
50
+ }
51
+ }
52
+ newEdges.push(lfEdge);
53
+ });
54
+ return newEdges;
55
+ }
56
+ /**
57
+ * 优化折线路径点,移除冗余点
58
+ * @param points - 原始路径点数组
59
+ * @returns 优化后的路径点数组
60
+ */
61
+ function pointFilter(points) {
62
+ var allPoints = __spreadArray([], points, true); // 创建副本避免修改原始数据
63
+ var i = 1;
64
+ // 删除直线上的中间点(保持路径简洁)
65
+ while (i < allPoints.length - 1) {
66
+ var pre = allPoints[i - 1];
67
+ var current = allPoints[i];
68
+ var next = allPoints[i + 1];
69
+ // 如果三点共线,移除中间点
70
+ if ((pre.x === current.x && current.x === next.x) || // 垂直线上的点
71
+ (pre.y === current.y && current.y === next.y)) {
72
+ // 水平线上的点
73
+ allPoints.splice(i, 1);
74
+ }
75
+ else {
76
+ i++;
77
+ }
78
+ }
79
+ return allPoints;
80
+ }
81
+ /**
82
+ * 计算边的折线路径点
83
+ * @param model - 边模型
84
+ * @param nodes - 节点数据数组
85
+ * @returns 计算后的路径点数组,如果无法计算则返回undefined
86
+ */
87
+ function calcPointsList(lf, rankdir, model, nodes) {
88
+ var pointsList = [];
89
+ // 获取源节点和目标节点的模型与布局数据
90
+ var sourceNodeModel = lf.getNodeModelById(model.sourceNodeId);
91
+ var targetNodeModel = lf.getNodeModelById(model.targetNodeId);
92
+ var newSourceNodeData = nodes.find(function (node) { return node.id === model.sourceNodeId; });
93
+ var newTargetNodeData = nodes.find(function (node) { return node.id === model.targetNodeId; });
94
+ // 数据验证
95
+ if (!sourceNodeModel ||
96
+ !targetNodeModel ||
97
+ !newSourceNodeData ||
98
+ !newTargetNodeData) {
99
+ return undefined;
100
+ }
101
+ // 折线偏移量(用于创建合适的转折点)
102
+ var offset = Number(model.offset) || 50;
103
+ // 处理从左到右(LR)布局的边路径,折线
104
+ if (rankdir === 'LR' && model.modelType === 'polyline-edge') {
105
+ // 正向连线:源节点在目标节点左侧
106
+ if (newSourceNodeData.x <= newTargetNodeData.x) {
107
+ // 从源节点右侧中心出发
108
+ pointsList.push({
109
+ x: newSourceNodeData.x + sourceNodeModel.width / 2,
110
+ y: newSourceNodeData.y,
111
+ });
112
+ // 向右延伸一段距离
113
+ pointsList.push({
114
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
115
+ y: newSourceNodeData.y,
116
+ });
117
+ // 垂直移动到目标节点的高度
118
+ pointsList.push({
119
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
120
+ y: newTargetNodeData.y,
121
+ });
122
+ // 连接到目标节点左侧中心
123
+ pointsList.push({
124
+ x: newTargetNodeData.x - targetNodeModel.width / 2,
125
+ y: newTargetNodeData.y,
126
+ });
127
+ return pointFilter(pointsList);
128
+ }
129
+ // 反向连线:源节点在目标节点右侧
130
+ if (newSourceNodeData.x > newTargetNodeData.x) {
131
+ // 根据节点相对Y轴位置选择不同路径
132
+ if (newSourceNodeData.y >= newTargetNodeData.y) {
133
+ // 源节点在目标节点的右下方,从源节点上方出发
134
+ pointsList.push({
135
+ x: newSourceNodeData.x,
136
+ y: newSourceNodeData.y + sourceNodeModel.height / 2,
137
+ });
138
+ pointsList.push({
139
+ x: newSourceNodeData.x,
140
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
141
+ });
142
+ pointsList.push({
143
+ x: newTargetNodeData.x,
144
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
145
+ });
146
+ pointsList.push({
147
+ x: newTargetNodeData.x,
148
+ y: newTargetNodeData.y + targetNodeModel.height / 2,
149
+ });
150
+ }
151
+ else {
152
+ // 源节点在目标节点的右上方,从源节点下方出发
153
+ pointsList.push({
154
+ x: newSourceNodeData.x,
155
+ y: newSourceNodeData.y - sourceNodeModel.height / 2,
156
+ });
157
+ pointsList.push({
158
+ x: newSourceNodeData.x,
159
+ y: newSourceNodeData.y - sourceNodeModel.height / 2 - offset,
160
+ });
161
+ pointsList.push({
162
+ x: newTargetNodeData.x,
163
+ y: newSourceNodeData.y - sourceNodeModel.height / 2 - offset,
164
+ });
165
+ pointsList.push({
166
+ x: newTargetNodeData.x,
167
+ y: newTargetNodeData.y - targetNodeModel.height / 2,
168
+ });
169
+ }
170
+ return pointFilter(pointsList);
171
+ }
172
+ }
173
+ // 处理从上到下(TB)布局的边路径, 折线
174
+ if (rankdir === 'TB' && model.modelType === 'polyline-edge') {
175
+ // 正向连线:源节点在目标节点上方
176
+ if (newSourceNodeData.y <= newTargetNodeData.y) {
177
+ // 从源节点底部中心出发
178
+ pointsList.push({
179
+ x: newSourceNodeData.x,
180
+ y: newSourceNodeData.y + sourceNodeModel.height / 2,
181
+ });
182
+ // 向下延伸一段距离
183
+ pointsList.push({
184
+ x: newSourceNodeData.x,
185
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
186
+ });
187
+ // 水平移动到目标节点的位置
188
+ pointsList.push({
189
+ x: newTargetNodeData.x,
190
+ y: newSourceNodeData.y + sourceNodeModel.height / 2 + offset,
191
+ });
192
+ // 连接到目标节点顶部中心
193
+ pointsList.push({
194
+ x: newTargetNodeData.x,
195
+ y: newTargetNodeData.y - targetNodeModel.height / 2,
196
+ });
197
+ return pointFilter(pointsList);
198
+ }
199
+ // 反向连线:源节点在目标节点下方
200
+ if (newSourceNodeData.y > newTargetNodeData.y) {
201
+ if (newSourceNodeData.x >= newTargetNodeData.x) {
202
+ // 源节点在目标节点右下方,从源节点右侧出发
203
+ pointsList.push({
204
+ x: newSourceNodeData.x + sourceNodeModel.width / 2,
205
+ y: newSourceNodeData.y,
206
+ });
207
+ pointsList.push({
208
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
209
+ y: newSourceNodeData.y,
210
+ });
211
+ pointsList.push({
212
+ x: newSourceNodeData.x + sourceNodeModel.width / 2 + offset,
213
+ y: newTargetNodeData.y,
214
+ });
215
+ pointsList.push({
216
+ x: newTargetNodeData.x + targetNodeModel.width / 2,
217
+ y: newTargetNodeData.y,
218
+ });
219
+ }
220
+ else {
221
+ // 源节点在目标节点左下方,从源节点左侧出发
222
+ pointsList.push({
223
+ x: newSourceNodeData.x - sourceNodeModel.width / 2,
224
+ y: newSourceNodeData.y,
225
+ });
226
+ pointsList.push({
227
+ x: newSourceNodeData.x - sourceNodeModel.width / 2 - offset,
228
+ y: newSourceNodeData.y,
229
+ });
230
+ pointsList.push({
231
+ x: newSourceNodeData.x - sourceNodeModel.width / 2 - offset,
232
+ y: newTargetNodeData.y,
233
+ });
234
+ pointsList.push({
235
+ x: newTargetNodeData.x - targetNodeModel.width / 2,
236
+ y: newTargetNodeData.y,
237
+ });
238
+ }
239
+ return pointFilter(pointsList);
240
+ }
241
+ }
242
+ // 处理从左到右(LR)布局的边路径, 贝塞尔曲线
243
+ if (rankdir === 'LR' && model.modelType === 'bezier-edge') {
244
+ var startPoint = {
245
+ x: newSourceNodeData.x + sourceNodeModel.width / 2,
246
+ y: newSourceNodeData.y,
247
+ };
248
+ var endPoint = {
249
+ x: newTargetNodeData.x - targetNodeModel.width / 2,
250
+ y: newTargetNodeData.y,
251
+ };
252
+ var sNext = { x: 0, y: 0 };
253
+ var ePre = { x: 0, y: 0 };
254
+ // 正向连线:源节点在目标节点左侧
255
+ if (newSourceNodeData.x < newTargetNodeData.x) {
256
+ var result = getBezierControlPoints({
257
+ start: startPoint,
258
+ end: endPoint,
259
+ sourceNode: {
260
+ x: newSourceNodeData.x,
261
+ y: newSourceNodeData.y,
262
+ width: sourceNodeModel.width,
263
+ height: sourceNodeModel.height,
264
+ },
265
+ targetNode: {
266
+ x: newTargetNodeData.x,
267
+ y: newTargetNodeData.y,
268
+ width: targetNodeModel.width,
269
+ height: targetNodeModel.height,
270
+ },
271
+ offset: offset,
272
+ });
273
+ sNext = result.sNext;
274
+ ePre = result.ePre;
275
+ }
276
+ // 反向连线:源节点在目标节点右侧
277
+ if (newSourceNodeData.x > newTargetNodeData.x) {
278
+ if (newSourceNodeData.y >= newTargetNodeData.y) {
279
+ // 源节点在目标节点的右下方
280
+ sNext = {
281
+ x: newSourceNodeData.x +
282
+ sourceNodeModel.width / 2 +
283
+ offset +
284
+ targetNodeModel.width / 2,
285
+ y: newSourceNodeData.y +
286
+ sourceNodeModel.height +
287
+ targetNodeModel.height,
288
+ };
289
+ ePre = {
290
+ x: newTargetNodeData.x -
291
+ targetNodeModel.width / 2 -
292
+ offset -
293
+ sourceNodeModel.width / 2,
294
+ y: newTargetNodeData.y +
295
+ sourceNodeModel.height +
296
+ targetNodeModel.height,
297
+ };
298
+ }
299
+ else {
300
+ // 源节点在目标节点的右上方
301
+ sNext = {
302
+ x: newSourceNodeData.x +
303
+ sourceNodeModel.width / 2 +
304
+ offset +
305
+ targetNodeModel.width / 2,
306
+ y: newSourceNodeData.y -
307
+ sourceNodeModel.height -
308
+ targetNodeModel.height,
309
+ };
310
+ ePre = {
311
+ x: newTargetNodeData.x -
312
+ targetNodeModel.width / 2 -
313
+ offset -
314
+ sourceNodeModel.width / 2,
315
+ y: newTargetNodeData.y -
316
+ sourceNodeModel.height -
317
+ targetNodeModel.height,
318
+ };
319
+ }
320
+ }
321
+ pointsList.push(startPoint, sNext, ePre, endPoint);
322
+ return pointsList;
323
+ }
324
+ // 处理从上到下(TB)布局的边路径, 贝塞尔曲线
325
+ if (rankdir === 'TB' && model.modelType === 'bezier-edge') {
326
+ var startPoint = {
327
+ x: newSourceNodeData.x,
328
+ y: newSourceNodeData.y + sourceNodeModel.height / 2,
329
+ };
330
+ var endPoint = {
331
+ x: newTargetNodeData.x,
332
+ y: newTargetNodeData.y - targetNodeModel.height / 2,
333
+ };
334
+ var sNext = { x: 0, y: 0 };
335
+ var ePre = { x: 0, y: 0 };
336
+ if (newSourceNodeData.y <= newTargetNodeData.y) {
337
+ // 正向连线:源节点在目标节点上方
338
+ var result = getBezierControlPoints({
339
+ start: startPoint,
340
+ end: endPoint,
341
+ sourceNode: {
342
+ x: newSourceNodeData.x,
343
+ y: newSourceNodeData.y,
344
+ width: sourceNodeModel.width,
345
+ height: sourceNodeModel.height,
346
+ },
347
+ targetNode: {
348
+ x: newTargetNodeData.x,
349
+ y: newTargetNodeData.y,
350
+ width: targetNodeModel.width,
351
+ height: targetNodeModel.height,
352
+ },
353
+ offset: offset,
354
+ });
355
+ sNext = result.sNext;
356
+ ePre = result.ePre;
357
+ }
358
+ if (newSourceNodeData.y > newTargetNodeData.y) {
359
+ // 反向连线:源节点在目标节点下方
360
+ if (newSourceNodeData.x >= newTargetNodeData.x) {
361
+ // 源节点在目标节点右下方
362
+ sNext = {
363
+ x: newSourceNodeData.x +
364
+ sourceNodeModel.width / 2 +
365
+ offset +
366
+ targetNodeModel.width / 2,
367
+ y: newSourceNodeData.y +
368
+ sourceNodeModel.height +
369
+ targetNodeModel.height,
370
+ };
371
+ ePre = {
372
+ x: newTargetNodeData.x +
373
+ targetNodeModel.width / 2 +
374
+ offset +
375
+ sourceNodeModel.width / 2,
376
+ y: newTargetNodeData.y -
377
+ sourceNodeModel.height -
378
+ targetNodeModel.height,
379
+ };
380
+ }
381
+ else {
382
+ // 源节点在目标节点左下方
383
+ sNext = {
384
+ x: newSourceNodeData.x -
385
+ sourceNodeModel.width / 2 -
386
+ offset -
387
+ targetNodeModel.width / 2,
388
+ y: newSourceNodeData.y +
389
+ sourceNodeModel.height +
390
+ targetNodeModel.height,
391
+ };
392
+ ePre = {
393
+ x: newTargetNodeData.x -
394
+ targetNodeModel.width / 2 -
395
+ offset -
396
+ sourceNodeModel.width / 2,
397
+ y: newTargetNodeData.y -
398
+ sourceNodeModel.height -
399
+ targetNodeModel.height,
400
+ };
401
+ }
402
+ }
403
+ pointsList.push(startPoint, sNext, ePre, endPoint);
404
+ return pointsList;
405
+ }
406
+ // 无法确定路径时返回undefined,让LogicFlow自行处理
407
+ return undefined;
408
+ }
409
+ // bezier曲线
410
+ var getBezierControlPoints = function (_a) {
411
+ var start = _a.start, end = _a.end, sourceNode = _a.sourceNode, targetNode = _a.targetNode, offset = _a.offset;
412
+ var sBBox = getNodeBBox(sourceNode);
413
+ var tBBox = getNodeBBox(targetNode);
414
+ var sExpendBBox = getExpandedBBox(sBBox, offset);
415
+ var tExpendBBox = getExpandedBBox(tBBox, offset);
416
+ var sNext = getExpandedBBoxPoint(sExpendBBox, sBBox, start);
417
+ var ePre = getExpandedBBoxPoint(tExpendBBox, tBBox, end);
418
+ return {
419
+ sNext: sNext,
420
+ ePre: ePre,
421
+ };
422
+ };
423
+ /* 获取节点bbox */
424
+ var getNodeBBox = function (node) {
425
+ var x = node.x, y = node.y, width = node.width, height = node.height;
426
+ return {
427
+ minX: x - width / 2,
428
+ minY: y - height / 2,
429
+ maxX: x + width / 2,
430
+ maxY: y + height / 2,
431
+ x: x,
432
+ y: y,
433
+ width: width,
434
+ height: height,
435
+ centerX: x,
436
+ centerY: y,
437
+ };
438
+ };
439
+ /* 扩展的bbox,保证起始点的下一个点一定在node的垂直方向,不会与线重合, offset是点与线的垂直距离 */
440
+ var getExpandedBBox = function (bbox, offset) {
441
+ if (bbox.width === 0 && bbox.height === 0) {
442
+ return bbox;
443
+ }
444
+ return {
445
+ x: bbox.x,
446
+ y: bbox.y,
447
+ centerX: bbox.centerX,
448
+ centerY: bbox.centerY,
449
+ minX: bbox.minX - offset,
450
+ minY: bbox.minY - offset,
451
+ maxX: bbox.maxX + offset,
452
+ maxY: bbox.maxY + offset,
453
+ height: bbox.height + 2 * offset,
454
+ width: bbox.width + 2 * offset,
455
+ };
456
+ };
457
+ /* 判断点与中心点边的方向:是否水平,true水平,false垂直 */
458
+ var pointDirection = function (point, bbox) {
459
+ var dx = Math.abs(point.x - bbox.centerX);
460
+ var dy = Math.abs(point.y - bbox.centerY);
461
+ return dx / bbox.width > dy / bbox.height
462
+ ? SegmentDirection.HORIZONTAL
463
+ : SegmentDirection.VERTICAL;
464
+ };
465
+ /* 获取扩展图形上的点,即起始终点相邻的点,上一个或者下一个节点 */
466
+ var getExpandedBBoxPoint = function (expendBBox, bbox, point) {
467
+ var direction = pointDirection(point, bbox);
468
+ if (direction === SegmentDirection.HORIZONTAL) {
469
+ return {
470
+ x: point.x > expendBBox.centerX ? expendBBox.maxX : expendBBox.minX,
471
+ y: point.y,
472
+ };
473
+ }
474
+ return {
475
+ x: point.x,
476
+ y: point.y > expendBBox.centerY ? expendBBox.maxY : expendBBox.minY,
477
+ };
478
+ };
479
+ //# sourceMappingURL=processEdge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processEdge.js","sourceRoot":"","sources":["../../src/utils/processEdge.ts"],"names":[],"mappings":";;;;;;;;;AA4CA,IAAK,gBAGJ;AAHD,WAAK,gBAAgB;IACnB,6CAAyB,CAAA;IACzB,yCAAqB,CAAA;AACvB,CAAC,EAHI,gBAAgB,KAAhB,gBAAgB,QAGpB;AAED,MAAM,UAAU,YAAY,CAC1B,EAAa,EACb,OAA2B,EAC3B,eAAoC,EACpC,KAAsB,EACtB,QAAsB;IAEtB,IAAM,QAAQ,GAAiB,EAAE,CAAA;IACjC,YAAY;IACZ,KAAK,CAAC,OAAO,CAAC,UAAC,SAAS;QACtB,IAAM,MAAM,GAAe,SAAS,CAAC,OAAO,EAAE,CAAA;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mEAAe,SAAS,CAAC,EAAE,kBAAK,CAAC,CAAA;QACnD,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,2CAA2C;YAC3C,OAAO,MAAM,CAAC,UAAU,CAAA;YACxB,OAAO,MAAM,CAAC,UAAU,CAAA;YACxB,OAAO,MAAM,CAAC,QAAQ,CAAA;YACtB,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAA;YACjC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,OAAO,MAAM,CAAC,UAAU,CAAA;YACxB,OAAO,MAAM,CAAC,UAAU,CAAA;YACxB,OAAO,MAAM,CAAC,QAAQ,CAAA;YACtB,OAAO,MAAM,CAAC,cAAc,CAAA;YAC5B,OAAO,MAAM,CAAC,cAAc,CAAA;YAE5B,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;YAEpE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,YAAY;gBACZ,IAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBAClC,IAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBAC5D,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAA;gBAC9C,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA;YAC5C,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxE,SAAS;gBACT,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAA;YACjC,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,MAAe;IAClC,IAAM,SAAS,qBAAO,MAAM,OAAC,CAAA,CAAC,eAAe;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAA;IAET,oBAAoB;IACpB,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAM,GAAG,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC5B,IAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAE7B,eAAe;QACf,IACE,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS;YAC1D,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAC7C,CAAC;YACD,SAAS;YACT,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,CAAC,EAAE,CAAA;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CACrB,EAAa,EACb,OAA2B,EAC3B,KAAoB,EACpB,KAAmB;IAEnB,IAAM,UAAU,GAAY,EAAE,CAAA;IAE9B,qBAAqB;IACrB,IAAM,eAAe,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC/D,IAAM,eAAe,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC/D,IAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAClC,UAAC,IAAgB,IAAK,OAAA,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,YAAY,EAA9B,CAA8B,CACrD,CAAA;IACD,IAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAClC,UAAC,IAAgB,IAAK,OAAA,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,YAAY,EAA9B,CAA8B,CACrD,CAAA;IAED,OAAO;IACP,IACE,CAAC,eAAe;QAChB,CAAC,eAAe;QAChB,CAAC,iBAAiB;QAClB,CAAC,iBAAiB,EAClB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,oBAAoB;IACpB,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAEzC,sBAAsB;IACtB,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;QAC5D,kBAAkB;QAClB,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC/C,aAAa;YACb,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;gBAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;aACvB,CAAC,CAAA;YACF,WAAW;YACX,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;gBAC3D,CAAC,EAAE,iBAAiB,CAAC,CAAC;aACvB,CAAC,CAAA;YACF,eAAe;YACf,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;gBAC3D,CAAC,EAAE,iBAAiB,CAAC,CAAC;aACvB,CAAC,CAAA;YACF,cAAc;YACd,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;gBAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;aACvB,CAAC,CAAA;YAEF,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC;QAED,kBAAkB;QAClB,IAAI,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC9C,mBAAmB;YACnB,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBAC/C,wBAAwB;gBACxB,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;iBACpD,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;iBAC7D,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;iBAC7D,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;iBACpD,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,wBAAwB;gBACxB,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;iBACpD,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;iBAC7D,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;iBAC7D,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;iBACpD,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;QAC5D,kBAAkB;QAClB,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC/C,aAAa;YACb,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;aACpD,CAAC,CAAA;YACF,WAAW;YACX,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;aAC7D,CAAC,CAAA;YACF,eAAe;YACf,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;aAC7D,CAAC,CAAA;YACF,cAAc;YACd,UAAU,CAAC,IAAI,CAAC;gBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC;gBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;aACpD,CAAC,CAAA;YAEF,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC;QAED,kBAAkB;QAClB,IAAI,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBAC/C,uBAAuB;gBACvB,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;oBAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;oBAC3D,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;oBAC3D,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;oBAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;YACJ,CAAC;iBAAM,CAAC;gBACN,uBAAuB;gBACvB,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;oBAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;oBAC3D,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;oBAC3D,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;oBAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;iBACvB,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,WAAW,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;QAC1D,IAAM,UAAU,GAAG;YACjB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;YAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;SACvB,CAAA;QACD,IAAM,QAAQ,GAAG;YACf,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC;YAClD,CAAC,EAAE,iBAAiB,CAAC,CAAC;SACvB,CAAA;QACD,IAAI,KAAK,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QACjC,IAAI,IAAI,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAChC,kBAAkB;QAClB,IAAI,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAM,MAAM,GAAG,sBAAsB,CAAC;gBACpC,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,QAAQ;gBACb,UAAU,EAAE;oBACV,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,KAAK,EAAE,eAAe,CAAC,KAAK;oBAC5B,MAAM,EAAE,eAAe,CAAC,MAAM;iBAC/B;gBACD,UAAU,EAAE;oBACV,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,KAAK,EAAE,eAAe,CAAC,KAAK;oBAC5B,MAAM,EAAE,eAAe,CAAC,MAAM;iBAC/B;gBACD,MAAM,QAAA;aACP,CAAC,CAAA;YACF,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YACpB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC;QACD,kBAAkB;QAClB,IAAI,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC9C,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBAC/C,eAAe;gBACf,KAAK,GAAG;oBACN,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;gBACD,IAAI,GAAG;oBACL,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,eAAe;gBACf,KAAK,GAAG;oBACN,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;gBACD,IAAI,GAAG;oBACL,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;YACH,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAClD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;QAC1D,IAAM,UAAU,GAAG;YACjB,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;SACpD,CAAA;QACD,IAAM,QAAQ,GAAG;YACf,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;SACpD,CAAA;QACD,IAAI,KAAK,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QACjC,IAAI,IAAI,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAChC,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC/C,kBAAkB;YAClB,IAAM,MAAM,GAAG,sBAAsB,CAAC;gBACpC,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,QAAQ;gBACb,UAAU,EAAE;oBACV,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,KAAK,EAAE,eAAe,CAAC,KAAK;oBAC5B,MAAM,EAAE,eAAe,CAAC,MAAM;iBAC/B;gBACD,UAAU,EAAE;oBACV,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC;oBACtB,KAAK,EAAE,eAAe,CAAC,KAAK;oBAC5B,MAAM,EAAE,eAAe,CAAC,MAAM;iBAC/B;gBACD,MAAM,QAAA;aACP,CAAC,CAAA;YACF,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YACpB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC;QACD,IAAI,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC;YAC9C,kBAAkB;YAClB,IAAI,iBAAiB,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBAC/C,cAAc;gBACd,KAAK,GAAG;oBACN,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;gBACD,IAAI,GAAG;oBACL,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,cAAc;gBACd,KAAK,GAAG;oBACN,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;gBACD,IAAI,GAAG;oBACL,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,KAAK,GAAG,CAAC;wBACzB,MAAM;wBACN,eAAe,CAAC,KAAK,GAAG,CAAC;oBAC3B,CAAC,EACC,iBAAiB,CAAC,CAAC;wBACnB,eAAe,CAAC,MAAM;wBACtB,eAAe,CAAC,MAAM;iBACzB,CAAA;YACH,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAClD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,oCAAoC;IACpC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,WAAW;AACX,IAAM,sBAAsB,GAAG,UAAC,EAY/B;QAXC,KAAK,WAAA,EACL,GAAG,SAAA,EACH,UAAU,gBAAA,EACV,UAAU,gBAAA,EACV,MAAM,YAAA;IAQN,IAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC,IAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;IACrC,IAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAClD,IAAM,WAAW,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAClD,IAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC7D,IAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC1D,OAAO;QACL,KAAK,OAAA;QACL,IAAI,MAAA;KACL,CAAA;AACH,CAAC,CAAA;AAED,cAAc;AACd,IAAM,WAAW,GAAG,UAAC,IAAkB;IAC7B,IAAA,CAAC,GAAuB,IAAI,EAA3B,EAAE,CAAC,GAAoB,IAAI,EAAxB,EAAE,KAAK,GAAa,IAAI,MAAjB,EAAE,MAAM,GAAK,IAAI,OAAT,CAAS;IACpC,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC;QACnB,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC;QACpB,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC;QACnB,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC;QACpB,CAAC,GAAA;QACD,CAAC,GAAA;QACD,KAAK,OAAA;QACL,MAAM,QAAA;QACN,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;KACX,CAAA;AACH,CAAC,CAAA;AAED,4DAA4D;AAC5D,IAAM,eAAe,GAAG,UAAC,IAAe,EAAE,MAAc;IACtD,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,CAAC,EAAE,IAAI,CAAC,CAAC;QACT,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM;QACxB,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM;QACxB,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM;QAChC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM;KAC/B,CAAA;AACH,CAAC,CAAA;AAED,qCAAqC;AACrC,IAAM,cAAc,GAAG,UAAC,KAAY,EAAE,IAAe;IACnD,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3C,IAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3C,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;QACvC,CAAC,CAAC,gBAAgB,CAAC,UAAU;QAC7B,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAA;AAC/B,CAAC,CAAA;AAED,oCAAoC;AACpC,IAAM,oBAAoB,GAAG,UAC3B,UAAqB,EACrB,IAAe,EACf,KAAY;IAEZ,IAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAC7C,IAAI,SAAS,KAAK,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAC9C,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI;YACnE,CAAC,EAAE,KAAK,CAAC,CAAC;SACX,CAAA;IACH,CAAC;IACD,OAAO;QACL,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI;KACpE,CAAA;AACH,CAAC,CAAA"}
@@ -4,10 +4,14 @@
4
4
  * 本插件基于dagre.js实现LogicFlow的自动化布局功能,支持多种布局方向
5
5
  * 可自动计算节点位置和连线路径,实现整洁的图形展示
6
6
  */
7
- import LogicFlow, { BaseEdgeModel } from '@logicflow/core';
7
+ import LogicFlow, { BaseNodeModel, BaseEdgeModel } from '@logicflow/core';
8
8
  import { GraphLabel } from 'dagre';
9
- import NodeConfig = LogicFlow.NodeConfig;
10
- import Point = LogicFlow.Point;
9
+ type BaseNodeData = {
10
+ x: number;
11
+ y: number;
12
+ width: number;
13
+ height: number;
14
+ };
11
15
  /**
12
16
  * Dagre布局配置选项接口
13
17
  * @interface DagreOption
@@ -52,22 +56,16 @@ export declare class Dagre {
52
56
  */
53
57
  layout(option?: DagreOption): void;
54
58
  /**
55
- * 计算字符串显示宽度(用于文本定位)
56
- * @param word - 要计算的文本
57
- * @returns 估算的文本像素宽度
59
+ * 使用 Dagre 布局
60
+ * @param nodes - 节点数据
61
+ * @param edges - 边数据
58
62
  */
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;
63
+ applyDagreLayout(nodes: BaseNodeModel[], edges: BaseEdgeModel[]): void;
64
+ convertLayoutDataToLf(nodes: BaseNodeModel[], edges: BaseEdgeModel[], layoutData: {
65
+ node: (id: string) => BaseNodeData;
66
+ }): {
67
+ nodes: LogicFlow.NodeConfig<LogicFlow.PropertiesType>[];
68
+ edges: LogicFlow.EdgeConfig<LogicFlow.PropertiesType>[];
69
+ };
73
70
  }
71
+ export {};