@foblex/flow-elk-layout 18.5.0
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 +155 -0
- package/esm2022/foblex-flow-elk-layout.mjs +5 -0
- package/esm2022/lib/configurations/default-elk-layout-engine-options.mjs +12 -0
- package/esm2022/lib/configurations/index.mjs +2 -0
- package/esm2022/lib/engines/elk-layout-engine.mjs +149 -0
- package/esm2022/lib/engines/index.mjs +2 -0
- package/esm2022/lib/enums/e-elk-layout-algorithm.mjs +16 -0
- package/esm2022/lib/enums/index.mjs +2 -0
- package/esm2022/lib/index.mjs +5 -0
- package/esm2022/lib/models/i-elk-layout-edge.mjs +2 -0
- package/esm2022/lib/models/i-elk-layout-engine-options.mjs +2 -0
- package/esm2022/lib/models/i-elk-layout-instance.mjs +2 -0
- package/esm2022/lib/models/i-elk-layout-module.mjs +2 -0
- package/esm2022/lib/models/i-elk-layout-node.mjs +2 -0
- package/esm2022/lib/models/i-elk-layout-positioned-node.mjs +2 -0
- package/esm2022/lib/models/i-elk-layout-response.mjs +2 -0
- package/esm2022/lib/models/index.mjs +8 -0
- package/esm2022/public-api.mjs +2 -0
- package/fesm2022/foblex-flow-elk-layout.mjs +179 -0
- package/fesm2022/foblex-flow-elk-layout.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/configurations/default-elk-layout-engine-options.d.ts +2 -0
- package/lib/configurations/index.d.ts +1 -0
- package/lib/engines/elk-layout-engine.d.ts +18 -0
- package/lib/engines/index.d.ts +1 -0
- package/lib/enums/e-elk-layout-algorithm.d.ts +14 -0
- package/lib/enums/index.d.ts +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/models/i-elk-layout-edge.d.ts +5 -0
- package/lib/models/i-elk-layout-engine-options.d.ts +5 -0
- package/lib/models/i-elk-layout-instance.d.ts +3 -0
- package/lib/models/i-elk-layout-module.d.ts +4 -0
- package/lib/models/i-elk-layout-node.d.ts +7 -0
- package/lib/models/i-elk-layout-positioned-node.d.ts +4 -0
- package/lib/models/i-elk-layout-response.d.ts +4 -0
- package/lib/models/index.d.ts +7 -0
- package/package.json +53 -0
- package/public-api.d.ts +1 -0
- package/schematics/collection.json +15 -0
- package/schematics/ng-add/index.d.ts +3 -0
- package/schematics/ng-add/index.js +107 -0
- package/schematics/ng-add/index.js.map +1 -0
- package/schematics/ng-add/schema.json +13 -0
- package/schematics/shared/foblex-flow-dependencies.d.ts +4 -0
- package/schematics/shared/foblex-flow-dependencies.js +11 -0
- package/schematics/shared/foblex-flow-dependencies.js.map +1 -0
- package/schematics/shared/i-ng-add-schema.d.ts +3 -0
- package/schematics/shared/i-ng-add-schema.js +3 -0
- package/schematics/shared/i-ng-add-schema.js.map +1 -0
- package/schematics/shared/package-json.d.ts +2 -0
- package/schematics/shared/package-json.js +18 -0
- package/schematics/shared/package-json.js.map +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# @foblex/flow-elk-layout
|
|
2
|
+
|
|
3
|
+
`@foblex/flow-elk-layout` adds a manual layout adapter for [ELK.js](https://github.com/kieler/elkjs) in [Foblex Flow](https://flow.foblex.com).
|
|
4
|
+
|
|
5
|
+
Use this package when you need richer layout strategies than a simple directed tree and want access to layered, radial, force-style, or other ELK.js algorithms while still rendering and interacting through Foblex Flow.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
The easiest path is:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
ng add @foblex/flow-elk-layout
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
If your app already manages Flow styles on its own, you can skip the default theme wiring:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
ng add @foblex/flow-elk-layout --skipTheme
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
For Nx workspaces:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
nx g @foblex/flow-elk-layout:add
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`ng add` ensures these packages are present and only adds the missing ones:
|
|
28
|
+
|
|
29
|
+
- `@foblex/flow`
|
|
30
|
+
- `@foblex/platform`
|
|
31
|
+
- `@foblex/mediator`
|
|
32
|
+
- `@foblex/2d`
|
|
33
|
+
- `@foblex/utils`
|
|
34
|
+
- the ELK.js package itself
|
|
35
|
+
|
|
36
|
+
It also adds `node_modules/@foblex/flow/styles/default.scss` to application styles when the theme entry is missing.
|
|
37
|
+
|
|
38
|
+
If you prefer manual installation:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install @foblex/flow @foblex/flow-elk-layout @foblex/platform@^1.0.4 @foblex/mediator@^1.1.3 @foblex/2d@^1.2.2 @foblex/utils@^1.1.1
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The underlying `elkjs` package is shipped as a runtime dependency of this package, so you do not need to install it separately.
|
|
45
|
+
|
|
46
|
+
## What The Engine Does
|
|
47
|
+
|
|
48
|
+
`ElkLayoutEngine` calculates node positions from:
|
|
49
|
+
|
|
50
|
+
- node ids
|
|
51
|
+
- optional node sizes
|
|
52
|
+
- source/target connections
|
|
53
|
+
- shared layout options such as direction, spacing, and algorithm
|
|
54
|
+
- optional ELK.js-specific `layoutOptions`
|
|
55
|
+
|
|
56
|
+
The engine returns only calculated node positions. Your app remains responsible for state management and for applying those positions to your own graph model.
|
|
57
|
+
|
|
58
|
+
For non-directional algorithms such as force, radial, random, or packing-oriented modes, the example integration can switch connectors into calculate mode so connection anchors follow the actual node geometry instead of a fixed left/right or top/bottom rule.
|
|
59
|
+
|
|
60
|
+
## Minimal Setup
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
import { Component, inject } from '@angular/core';
|
|
64
|
+
import {
|
|
65
|
+
EFLayoutDirection,
|
|
66
|
+
IFLayoutConnection,
|
|
67
|
+
IFLayoutNode,
|
|
68
|
+
provideFLayout,
|
|
69
|
+
} from '@foblex/flow';
|
|
70
|
+
import {
|
|
71
|
+
EElkLayoutAlgorithm,
|
|
72
|
+
ElkLayoutEngine,
|
|
73
|
+
} from '@foblex/flow-elk-layout';
|
|
74
|
+
|
|
75
|
+
@Component({
|
|
76
|
+
standalone: true,
|
|
77
|
+
providers: [provideFLayout(ElkLayoutEngine)],
|
|
78
|
+
template: '',
|
|
79
|
+
})
|
|
80
|
+
export class WorkflowLayoutExample {
|
|
81
|
+
private readonly _layout = inject(ElkLayoutEngine);
|
|
82
|
+
|
|
83
|
+
protected async relayout(): Promise<void> {
|
|
84
|
+
const nodes: IFLayoutNode[] = [
|
|
85
|
+
{ id: 'A' },
|
|
86
|
+
{ id: 'B' },
|
|
87
|
+
{ id: 'C' },
|
|
88
|
+
];
|
|
89
|
+
const connections: IFLayoutConnection[] = [
|
|
90
|
+
{ source: 'A', target: 'B' },
|
|
91
|
+
{ source: 'A', target: 'C' },
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
const result = await this._layout.calculate(nodes, connections, {
|
|
95
|
+
direction: EFLayoutDirection.TOP_BOTTOM,
|
|
96
|
+
algorithm: EElkLayoutAlgorithm.LAYERED,
|
|
97
|
+
nodeGap: 32,
|
|
98
|
+
layerGap: 48,
|
|
99
|
+
layoutOptions: {
|
|
100
|
+
'elk.layered.spacing.nodeNodeBetweenLayers': '64',
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
const positions = new Map(result.nodes.map((node) => [node.id, node.position]));
|
|
105
|
+
|
|
106
|
+
console.log(positions.get('A'));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Main Options
|
|
112
|
+
|
|
113
|
+
- `direction`: `EFLayoutDirection`
|
|
114
|
+
- `algorithm`: `EElkLayoutAlgorithm`
|
|
115
|
+
- `nodeGap`: spacing between nodes
|
|
116
|
+
- `layerGap`: spacing between layout layers
|
|
117
|
+
- `defaultNodeSize`: fallback size when a node does not provide `size`
|
|
118
|
+
- `layoutOptions`: raw ELK.js options passed through to the engine
|
|
119
|
+
|
|
120
|
+
Available algorithms:
|
|
121
|
+
|
|
122
|
+
- `EElkLayoutAlgorithm.FIXED`
|
|
123
|
+
- `EElkLayoutAlgorithm.BOX`
|
|
124
|
+
- `EElkLayoutAlgorithm.RANDOM`
|
|
125
|
+
- `EElkLayoutAlgorithm.LAYERED`
|
|
126
|
+
- `EElkLayoutAlgorithm.STRESS`
|
|
127
|
+
- `EElkLayoutAlgorithm.MRTREE`
|
|
128
|
+
- `EElkLayoutAlgorithm.RADIAL`
|
|
129
|
+
- `EElkLayoutAlgorithm.FORCE`
|
|
130
|
+
- `EElkLayoutAlgorithm.DISCO`
|
|
131
|
+
- `EElkLayoutAlgorithm.SPORE_OVERLAP`
|
|
132
|
+
- `EElkLayoutAlgorithm.SPORE_COMPACTION`
|
|
133
|
+
- `EElkLayoutAlgorithm.RECT_PACKING`
|
|
134
|
+
|
|
135
|
+
## Typical Integration Flow
|
|
136
|
+
|
|
137
|
+
1. Build your own graph data.
|
|
138
|
+
2. Convert it to `IFLayoutNode[]` and `IFLayoutConnection[]`.
|
|
139
|
+
3. Call `calculate(...)`.
|
|
140
|
+
4. Merge returned positions into your view model.
|
|
141
|
+
5. Render nodes in `f-flow`.
|
|
142
|
+
|
|
143
|
+
## Example
|
|
144
|
+
|
|
145
|
+
- Live example: [https://flow.foblex.com/examples/elkjs-layout](https://flow.foblex.com/examples/elkjs-layout)
|
|
146
|
+
- Example source: [libs/f-examples/plugins/elk-layout](https://github.com/Foblex/f-flow/tree/main/libs/f-examples/plugins/elk-layout)
|
|
147
|
+
|
|
148
|
+
## When To Choose ELK.js
|
|
149
|
+
|
|
150
|
+
Choose ELK.js when you want:
|
|
151
|
+
|
|
152
|
+
- more layout algorithms
|
|
153
|
+
- richer spacing and routing controls
|
|
154
|
+
- denser or less tree-like graphs
|
|
155
|
+
- an engine you can tune further through raw ELK.js options
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ibGV4LWZsb3ctZWxrLWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9mb2JsZXgtZmxvdy1lbGstbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SizeExtensions } from '@foblex/2d';
|
|
2
|
+
import { EFLayoutDirection } from '@foblex/flow';
|
|
3
|
+
import { EElkLayoutAlgorithm } from '../enums';
|
|
4
|
+
export const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS = {
|
|
5
|
+
direction: EFLayoutDirection.TOP_BOTTOM,
|
|
6
|
+
nodeGap: 48,
|
|
7
|
+
layerGap: 48,
|
|
8
|
+
algorithm: EElkLayoutAlgorithm.LAYERED,
|
|
9
|
+
defaultNodeSize: SizeExtensions.initialize(120, 72),
|
|
10
|
+
layoutOptions: {},
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1lbGstbGF5b3V0LWVuZ2luZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9jb25maWd1cmF0aW9ucy9kZWZhdWx0LWVsay1sYXlvdXQtZW5naW5lLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUE0QjtJQUN4RSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsVUFBVTtJQUN2QyxPQUFPLEVBQUUsRUFBRTtJQUNYLFFBQVEsRUFBRSxFQUFFO0lBQ1osU0FBUyxFQUFFLG1CQUFtQixDQUFDLE9BQU87SUFDdEMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxhQUFhLEVBQUUsRUFBRTtDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2l6ZUV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IEVGTGF5b3V0RGlyZWN0aW9uIH0gZnJvbSAnQGZvYmxleC9mbG93JztcbmltcG9ydCB7IEVFbGtMYXlvdXRBbGdvcml0aG0gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBJRWxrTGF5b3V0RW5naW5lT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VMS19MQVlPVVRfRU5HSU5FX09QVElPTlM6IElFbGtMYXlvdXRFbmdpbmVPcHRpb25zID0ge1xuICBkaXJlY3Rpb246IEVGTGF5b3V0RGlyZWN0aW9uLlRPUF9CT1RUT00sXG4gIG5vZGVHYXA6IDQ4LFxuICBsYXllckdhcDogNDgsXG4gIGFsZ29yaXRobTogRUVsa0xheW91dEFsZ29yaXRobS5MQVlFUkVELFxuICBkZWZhdWx0Tm9kZVNpemU6IFNpemVFeHRlbnNpb25zLmluaXRpYWxpemUoMTIwLCA3MiksXG4gIGxheW91dE9wdGlvbnM6IHt9LFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './default-elk-layout-engine-options';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2NvbmZpZ3VyYXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtZWxrLWxheW91dC1lbmdpbmUtb3B0aW9ucyc7XG4iXX0=
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { PointExtensions, SizeExtensions } from '@foblex/2d';
|
|
3
|
+
import { EFLayoutDirection, FLayoutEngine, mergeLayoutNodes, } from '@foblex/flow';
|
|
4
|
+
import { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS } from '../configurations';
|
|
5
|
+
import { EElkLayoutAlgorithm } from '../enums';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ElkLayoutEngine extends FLayoutEngine {
|
|
8
|
+
_elkCtor;
|
|
9
|
+
constructor() {
|
|
10
|
+
super(DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS);
|
|
11
|
+
}
|
|
12
|
+
mergeOptions(currentOptions, nextOptions = {}) {
|
|
13
|
+
return {
|
|
14
|
+
...currentOptions,
|
|
15
|
+
...nextOptions,
|
|
16
|
+
defaultNodeSize: nextOptions.defaultNodeSize
|
|
17
|
+
? SizeExtensions.initialize(nextOptions.defaultNodeSize.width, nextOptions.defaultNodeSize.height)
|
|
18
|
+
: SizeExtensions.initialize(currentOptions.defaultNodeSize.width, currentOptions.defaultNodeSize.height),
|
|
19
|
+
layoutOptions: {
|
|
20
|
+
...(currentOptions.layoutOptions || {}),
|
|
21
|
+
...(nextOptions.layoutOptions || {}),
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async calculate(nodes, connections, options) {
|
|
26
|
+
const layoutOptions = this.resolveLayoutOptions(options);
|
|
27
|
+
const elkModule = await this._loadElk();
|
|
28
|
+
const layout = (await new elkModule.default().layout(this._buildLayoutConfiguration(nodes, connections, layoutOptions)));
|
|
29
|
+
const positions = new Map();
|
|
30
|
+
layout.children?.forEach((node) => {
|
|
31
|
+
positions.set(node.id, PointExtensions.initialize(node.x, node.y));
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
nodes: mergeLayoutNodes(nodes, positions),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
_buildLayoutConfiguration(nodes, connections, options) {
|
|
38
|
+
const layoutOptions = {
|
|
39
|
+
'elk.algorithm': this._mapAlgorithm(options.algorithm),
|
|
40
|
+
'elk.direction': this._mapDirection(options.direction),
|
|
41
|
+
'spacing.nodeNode': `${options.nodeGap}`,
|
|
42
|
+
'spacing.nodeNodeBetweenLayers': `${options.layerGap}`,
|
|
43
|
+
...(options.layoutOptions || {}),
|
|
44
|
+
};
|
|
45
|
+
const graphNodes = nodes.map((node) => this._buildGraphNode(node, options.defaultNodeSize));
|
|
46
|
+
const graphEdges = connections.reduce((result, connection, index) => {
|
|
47
|
+
if (!graphNodes.some((node) => node.id === connection.source)) {
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
if (!graphNodes.some((node) => node.id === connection.target)) {
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
result.push({
|
|
54
|
+
id: this._createEdgeId(connection, index),
|
|
55
|
+
sources: [connection.source],
|
|
56
|
+
targets: [connection.target],
|
|
57
|
+
});
|
|
58
|
+
return result;
|
|
59
|
+
}, []);
|
|
60
|
+
return {
|
|
61
|
+
id: 'root',
|
|
62
|
+
layoutOptions,
|
|
63
|
+
children: graphNodes,
|
|
64
|
+
edges: graphEdges,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
_buildGraphNode(node, defaultNodeSize) {
|
|
68
|
+
const size = node.size ?? defaultNodeSize;
|
|
69
|
+
const graphNode = {
|
|
70
|
+
id: node.id,
|
|
71
|
+
width: size.width,
|
|
72
|
+
height: size.height,
|
|
73
|
+
};
|
|
74
|
+
const position = this._getNodePosition(node);
|
|
75
|
+
if (!position) {
|
|
76
|
+
return graphNode;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
...graphNode,
|
|
80
|
+
x: position.x,
|
|
81
|
+
y: position.y,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
_loadElk() {
|
|
85
|
+
if (!this._elkCtor) {
|
|
86
|
+
this._elkCtor = import('elkjs/lib/elk.bundled');
|
|
87
|
+
}
|
|
88
|
+
return this._elkCtor;
|
|
89
|
+
}
|
|
90
|
+
_getNodePosition(node) {
|
|
91
|
+
const positionedNode = node;
|
|
92
|
+
if (!positionedNode.position) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
return positionedNode.position;
|
|
96
|
+
}
|
|
97
|
+
_mapAlgorithm(algorithm) {
|
|
98
|
+
switch (algorithm) {
|
|
99
|
+
case EElkLayoutAlgorithm.FIXED:
|
|
100
|
+
return 'fixed';
|
|
101
|
+
case EElkLayoutAlgorithm.BOX:
|
|
102
|
+
return 'box';
|
|
103
|
+
case EElkLayoutAlgorithm.RANDOM:
|
|
104
|
+
return 'random';
|
|
105
|
+
case EElkLayoutAlgorithm.LAYERED:
|
|
106
|
+
return 'layered';
|
|
107
|
+
case EElkLayoutAlgorithm.STRESS:
|
|
108
|
+
return 'stress';
|
|
109
|
+
case EElkLayoutAlgorithm.MRTREE:
|
|
110
|
+
return 'mrtree';
|
|
111
|
+
case EElkLayoutAlgorithm.RADIAL:
|
|
112
|
+
return 'radial';
|
|
113
|
+
case EElkLayoutAlgorithm.FORCE:
|
|
114
|
+
return 'force';
|
|
115
|
+
case EElkLayoutAlgorithm.DISCO:
|
|
116
|
+
return 'disco';
|
|
117
|
+
case EElkLayoutAlgorithm.SPORE_OVERLAP:
|
|
118
|
+
return 'sporeOverlap';
|
|
119
|
+
case EElkLayoutAlgorithm.SPORE_COMPACTION:
|
|
120
|
+
return 'sporeCompaction';
|
|
121
|
+
case EElkLayoutAlgorithm.RECT_PACKING:
|
|
122
|
+
return 'rectpacking';
|
|
123
|
+
default:
|
|
124
|
+
return 'layered';
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
_createEdgeId(connection, index) {
|
|
128
|
+
return `${connection.source}->${connection.target}-${index}`;
|
|
129
|
+
}
|
|
130
|
+
_mapDirection(direction) {
|
|
131
|
+
switch (direction) {
|
|
132
|
+
case EFLayoutDirection.BOTTOM_TOP:
|
|
133
|
+
return 'UP';
|
|
134
|
+
case EFLayoutDirection.LEFT_RIGHT:
|
|
135
|
+
return 'RIGHT';
|
|
136
|
+
case EFLayoutDirection.RIGHT_LEFT:
|
|
137
|
+
return 'LEFT';
|
|
138
|
+
case EFLayoutDirection.TOP_BOTTOM:
|
|
139
|
+
default:
|
|
140
|
+
return 'DOWN';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
144
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine });
|
|
145
|
+
}
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine, decorators: [{
|
|
147
|
+
type: Injectable
|
|
148
|
+
}], ctorParameters: () => [] });
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxrLWxheW91dC1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2VuZ2luZXMvZWxrLWxheW91dC1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFLYixnQkFBZ0IsR0FDakIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQVUvQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxhQUFzQztJQUNqRSxRQUFRLENBQTZCO0lBRTdDO1FBQ0UsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVrQixZQUFZLENBQzdCLGNBQXVDLEVBQ3ZDLGNBQWdELEVBQUU7UUFFbEQsT0FBTztZQUNMLEdBQUcsY0FBYztZQUNqQixHQUFHLFdBQVc7WUFDZCxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWU7Z0JBQzFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUN2QixXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssRUFDakMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQ25DO2dCQUNILENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUN2QixjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssRUFDcEMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQ3RDO1lBQ0wsYUFBYSxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxjQUFjLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxDQUFD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QUFLLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztZQUNsQztnQkFDRSxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQzt3R0F2TFUsZUFBZTs0R0FBZixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVBvaW50LCBQb2ludEV4dGVuc2lvbnMsIFNpemVFeHRlbnNpb25zIH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQge1xuICBFRkxheW91dERpcmVjdGlvbixcbiAgRkxheW91dEVuZ2luZSxcbiAgSUZMYXlvdXRDYWxjdWxhdGlvbk9wdGlvbnMsXG4gIElGTGF5b3V0Q29ubmVjdGlvbixcbiAgSUZMYXlvdXROb2RlLFxuICBJRkxheW91dFJlc3VsdCxcbiAgbWVyZ2VMYXlvdXROb2Rlcyxcbn0gZnJvbSAnQGZvYmxleC9mbG93JztcbmltcG9ydCB7IERFRkFVTFRfRUxLX0xBWU9VVF9FTkdJTkVfT1BUSU9OUyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcbmltcG9ydCB7IEVFbGtMYXlvdXRBbGdvcml0aG0gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQge1xuICBJRWxrTGF5b3V0RWRnZSxcbiAgSUVsa0xheW91dEVuZ2luZU9wdGlvbnMsXG4gIElFbGtMYXlvdXRNb2R1bGUsXG4gIElFbGtMYXlvdXROb2RlLFxuICBJRWxrTGF5b3V0UmVzcG9uc2UsXG59IGZyb20gJy4uL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbGtMYXlvdXRFbmdpbmUgZXh0ZW5kcyBGTGF5b3V0RW5naW5lPElFbGtMYXlvdXRFbmdpbmVPcHRpb25zPiB7XG4gIHByaXZhdGUgX2Vsa0N0b3I/OiBQcm9taXNlPElFbGtMYXlvdXRNb2R1bGU+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihERUZBVUxUX0VMS19MQVlPVVRfRU5HSU5FX09QVElPTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG1lcmdlT3B0aW9ucyhcbiAgICBjdXJyZW50T3B0aW9uczogSUVsa0xheW91dEVuZ2luZU9wdGlvbnMsXG4gICAgbmV4dE9wdGlvbnM6IFBhcnRpYWw8SUVsa0xheW91dEVuZ2luZU9wdGlvbnM+ID0ge30sXG4gICk6IElFbGtMYXlvdXRFbmdpbmVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY3VycmVudE9wdGlvbnMsXG4gICAgICAuLi5uZXh0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHROb2RlU2l6ZTogbmV4dE9wdGlvbnMuZGVmYXVsdE5vZGVTaXplXG4gICAgICAgID8gU2l6ZUV4dGVuc2lvbnMuaW5pdGlhbGl6ZShcbiAgICAgICAgICAgIG5leHRPcHRpb25zLmRlZmF1bHROb2RlU2l6ZS53aWR0aCxcbiAgICAgICAgICAgIG5leHRPcHRpb25zLmRlZmF1bHROb2RlU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgKVxuICAgICAgICA6IFNpemVFeHRlbnNpb25zLmluaXRpYWxpemUoXG4gICAgICAgICAgICBjdXJyZW50T3B0aW9ucy5kZWZhdWx0Tm9kZVNpemUud2lkdGgsXG4gICAgICAgICAgICBjdXJyZW50T3B0aW9ucy5kZWZhdWx0Tm9kZVNpemUuaGVpZ2h0LFxuICAgICAgICAgICksXG4gICAgICBsYXlvdXRPcHRpb25zOiB7XG4gICAgICAgIC4uLihjdXJyZW50T3B0aW9ucy5sYXlvdXRPcHRpb25zIHx8IHt9KSxcbiAgICAgICAgLi4uKG5leHRPcHRpb25zLmxheW91dE9wdGlvbnMgfHwge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGNhbGN1bGF0ZShcbiAgICBub2RlczogSUZMYXlvdXROb2RlW10sXG4gICAgY29ubmVjdGlvbnM6IElGTGF5b3V0Q29ubmVjdGlvbltdLFxuICAgIG9wdGlvbnM/OiBJRkxheW91dENhbGN1bGF0aW9uT3B0aW9uczxJRWxrTGF5b3V0RW5naW5lT3B0aW9ucz4sXG4gICk6IFByb21pc2U8SUZMYXlvdXRSZXN1bHQ+IHtcbiAgICBjb25zdCBsYXlvdXRPcHRpb25zID0gdGhpcy5yZXNvbHZlTGF5b3V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBlbGtNb2R1bGUgPSBhd2FpdCB0aGlzLl9sb2FkRWxrKCk7XG4gICAgY29uc3QgbGF5b3V0ID0gKGF3YWl0IG5ldyBlbGtNb2R1bGUuZGVmYXVsdCgpLmxheW91dChcbiAgICAgIHRoaXMuX2J1aWxkTGF5b3V0Q29uZmlndXJhdGlvbihub2RlcywgY29ubmVjdGlvbnMsIGxheW91dE9wdGlvbnMpLFxuICAgICkpIGFzIElFbGtMYXlvdXRSZXNwb25zZTtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgSVBvaW50PigpO1xuXG4gICAgbGF5b3V0LmNoaWxkcmVuPy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBwb3NpdGlvbnMuc2V0KG5vZGUuaWQsIFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKG5vZGUueCwgbm9kZS55KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9kZXM6IG1lcmdlTGF5b3V0Tm9kZXMobm9kZXMsIHBvc2l0aW9ucyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkTGF5b3V0Q29uZmlndXJhdGlvbihcbiAgICBub2RlczogSUZMYXlvdXROb2RlW10sXG4gICAgY29ubmVjdGlvbnM6IElGTGF5b3V0Q29ubmVjdGlvbltdLFxuICAgIG9wdGlvbnM6IElFbGtMYXlvdXRFbmdpbmVPcHRpb25zLFxuICApOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYXlvdXRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNoaWxkcmVuOiBJRWxrTGF5b3V0Tm9kZVtdO1xuICAgIGVkZ2VzOiBJRWxrTGF5b3V0RWRnZVtdO1xuICB9IHtcbiAgICBjb25zdCBsYXlvdXRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2Vsay5hbGdvcml0aG0nOiB0aGlzLl9tYXBBbGdvcml0aG0ob3B0aW9ucy5hbGdvcml0aG0pLFxuICAgICAgJ2Vsay5kaXJlY3Rpb24nOiB0aGlzLl9tYXBEaXJlY3Rpb24ob3B0aW9ucy5kaXJlY3Rpb24pLFxuICAgICAgJ3NwYWNpbmcubm9kZU5vZGUnOiBgJHtvcHRpb25zLm5vZGVHYXB9YCxcbiAgICAgICdzcGFjaW5nLm5vZGVOb2RlQmV0d2VlbkxheWVycyc6IGAke29wdGlvbnMubGF5ZXJHYXB9YCxcbiAgICAgIC4uLihvcHRpb25zLmxheW91dE9wdGlvbnMgfHwge30pLFxuICAgIH07XG4gICAgY29uc3QgZ3JhcGhOb2RlcyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gdGhpcy5fYnVpbGRHcmFwaE5vZGUobm9kZSwgb3B0aW9ucy5kZWZhdWx0Tm9kZVNpemUpKTtcbiAgICBjb25zdCBncmFwaEVkZ2VzID0gY29ubmVjdGlvbnMucmVkdWNlPElFbGtMYXlvdXRFZGdlW10+KChyZXN1bHQsIGNvbm5lY3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWdyYXBoTm9kZXMuc29tZSgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ3JhcGhOb2Rlcy5zb21lKChub2RlKSA9PiBub2RlLmlkID09PSBjb25uZWN0aW9uLnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBpZDogdGhpcy5fY3JlYXRlRWRnZUlkKGNvbm5lY3Rpb24sIGluZGV4KSxcbiAgICAgICAgc291cmNlczogW2Nvbm5lY3Rpb24uc291cmNlXSxcbiAgICAgICAgdGFyZ2V0czogW2Nvbm5lY3Rpb24udGFyZ2V0XSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogJ3Jvb3QnLFxuICAgICAgbGF5b3V0T3B0aW9ucyxcbiAgICAgIGNoaWxkcmVuOiBncmFwaE5vZGVzLFxuICAgICAgZWRnZXM6IGdyYXBoRWRnZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkR3JhcGhOb2RlKFxuICAgIG5vZGU6IElGTGF5b3V0Tm9kZSxcbiAgICBkZWZhdWx0Tm9kZVNpemU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgKTogSUVsa0xheW91dE5vZGUge1xuICAgIGNvbnN0IHNpemUgPSBub2RlLnNpemUgPz8gZGVmYXVsdE5vZGVTaXplO1xuICAgIGNvbnN0IGdyYXBoTm9kZTogSUVsa0xheW91dE5vZGUgPSB7XG4gICAgICBpZDogbm9kZS5pZCxcbiAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxuICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcbiAgICB9O1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fZ2V0Tm9kZVBvc2l0aW9uKG5vZGUpO1xuXG4gICAgaWYgKCFwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGdyYXBoTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ3JhcGhOb2RlLFxuICAgICAgeDogcG9zaXRpb24ueCxcbiAgICAgIHk6IHBvc2l0aW9uLnksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRFbGsoKTogUHJvbWlzZTxJRWxrTGF5b3V0TW9kdWxlPiB7XG4gICAgaWYgKCF0aGlzLl9lbGtDdG9yKSB7XG4gICAgICB0aGlzLl9lbGtDdG9yID0gaW1wb3J0KCdlbGtqcy9saWIvZWxrLmJ1bmRsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZWxrQ3RvcjtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVQb3NpdGlvbihub2RlOiBJRkxheW91dE5vZGUpOiBJUG9pbnQgfCBudWxsIHtcbiAgICBjb25zdCBwb3NpdGlvbmVkTm9kZSA9IG5vZGUgYXMgSUZMYXlvdXROb2RlICYgeyBwb3NpdGlvbj86IElQb2ludCB9O1xuXG4gICAgaWYgKCFwb3NpdGlvbmVkTm9kZS5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uZWROb2RlLnBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwQWxnb3JpdGhtKGFsZ29yaXRobTogRUVsa0xheW91dEFsZ29yaXRobSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChhbGdvcml0aG0pIHtcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5GSVhFRDpcbiAgICAgICAgcmV0dXJuICdmaXhlZCc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uQk9YOlxuICAgICAgICByZXR1cm4gJ2JveCc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uUkFORE9NOlxuICAgICAgICByZXR1cm4gJ3JhbmRvbSc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uTEFZRVJFRDpcbiAgICAgICAgcmV0dXJuICdsYXllcmVkJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5TVFJFU1M6XG4gICAgICAgIHJldHVybiAnc3RyZXNzJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5NUlRSRUU6XG4gICAgICAgIHJldHVybiAnbXJ0cmVlJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5SQURJQUw6XG4gICAgICAgIHJldHVybiAncmFkaWFsJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5GT1JDRTpcbiAgICAgICAgcmV0dXJuICdmb3JjZSc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uRElTQ086XG4gICAgICAgIHJldHVybiAnZGlzY28nO1xuICAgICAgY2FzZSBFRWxrTGF5b3V0QWxnb3JpdGhtLlNQT1JFX09WRVJMQVA6XG4gICAgICAgIHJldHVybiAnc3BvcmVPdmVybGFwJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5TUE9SRV9DT01QQUNUSU9OOlxuICAgICAgICByZXR1cm4gJ3Nwb3JlQ29tcGFjdGlvbic7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uUkVDVF9QQUNLSU5HOlxuICAgICAgICByZXR1cm4gJ3JlY3RwYWNraW5nJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnbGF5ZXJlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRWRnZUlkKGNvbm5lY3Rpb246IElGTGF5b3V0Q29ubmVjdGlvbiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2Nvbm5lY3Rpb24uc291cmNlfS0+JHtjb25uZWN0aW9uLnRhcmdldH0tJHtpbmRleH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwRGlyZWN0aW9uKGRpcmVjdGlvbjogRUZMYXlvdXREaXJlY3Rpb24pOiAnRE9XTicgfCAnVVAnIHwgJ1JJR0hUJyB8ICdMRUZUJyB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgRUZMYXlvdXREaXJlY3Rpb24uQk9UVE9NX1RPUDpcbiAgICAgICAgcmV0dXJuICdVUCc7XG4gICAgICBjYXNlIEVGTGF5b3V0RGlyZWN0aW9uLkxFRlRfUklHSFQ6XG4gICAgICAgIHJldHVybiAnUklHSFQnO1xuICAgICAgY2FzZSBFRkxheW91dERpcmVjdGlvbi5SSUdIVF9MRUZUOlxuICAgICAgICByZXR1cm4gJ0xFRlQnO1xuICAgICAgY2FzZSBFRkxheW91dERpcmVjdGlvbi5UT1BfQk9UVE9NOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdET1dOJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './elk-layout-engine';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2VuZ2luZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWxrLWxheW91dC1lbmdpbmUnO1xuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export var EElkLayoutAlgorithm;
|
|
2
|
+
(function (EElkLayoutAlgorithm) {
|
|
3
|
+
EElkLayoutAlgorithm["FIXED"] = "fixed";
|
|
4
|
+
EElkLayoutAlgorithm["BOX"] = "box";
|
|
5
|
+
EElkLayoutAlgorithm["RANDOM"] = "random";
|
|
6
|
+
EElkLayoutAlgorithm["LAYERED"] = "layered";
|
|
7
|
+
EElkLayoutAlgorithm["STRESS"] = "stress";
|
|
8
|
+
EElkLayoutAlgorithm["MRTREE"] = "mrtree";
|
|
9
|
+
EElkLayoutAlgorithm["RADIAL"] = "radial";
|
|
10
|
+
EElkLayoutAlgorithm["FORCE"] = "force";
|
|
11
|
+
EElkLayoutAlgorithm["DISCO"] = "disco";
|
|
12
|
+
EElkLayoutAlgorithm["SPORE_OVERLAP"] = "sporeOverlap";
|
|
13
|
+
EElkLayoutAlgorithm["SPORE_COMPACTION"] = "sporeCompaction";
|
|
14
|
+
EElkLayoutAlgorithm["RECT_PACKING"] = "rectpacking";
|
|
15
|
+
})(EElkLayoutAlgorithm || (EElkLayoutAlgorithm = {}));
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZS1lbGstbGF5b3V0LWFsZ29yaXRobS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9saWIvZW51bXMvZS1lbGstbGF5b3V0LWFsZ29yaXRobS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxtQkFhWDtBQWJELFdBQVksbUJBQW1CO0lBQzdCLHNDQUFlLENBQUE7SUFDZixrQ0FBVyxDQUFBO0lBQ1gsd0NBQWlCLENBQUE7SUFDakIsMENBQW1CLENBQUE7SUFDbkIsd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsc0NBQWUsQ0FBQTtJQUNmLHNDQUFlLENBQUE7SUFDZixxREFBOEIsQ0FBQTtJQUM5QiwyREFBb0MsQ0FBQTtJQUNwQyxtREFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBYlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQWE5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVFbGtMYXlvdXRBbGdvcml0aG0ge1xuICBGSVhFRCA9ICdmaXhlZCcsXG4gIEJPWCA9ICdib3gnLFxuICBSQU5ET00gPSAncmFuZG9tJyxcbiAgTEFZRVJFRCA9ICdsYXllcmVkJyxcbiAgU1RSRVNTID0gJ3N0cmVzcycsXG4gIE1SVFJFRSA9ICdtcnRyZWUnLFxuICBSQURJQUwgPSAncmFkaWFsJyxcbiAgRk9SQ0UgPSAnZm9yY2UnLFxuICBESVNDTyA9ICdkaXNjbycsXG4gIFNQT1JFX09WRVJMQVAgPSAnc3BvcmVPdmVybGFwJyxcbiAgU1BPUkVfQ09NUEFDVElPTiA9ICdzcG9yZUNvbXBhY3Rpb24nLFxuICBSRUNUX1BBQ0tJTkcgPSAncmVjdHBhY2tpbmcnLFxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './e-elk-layout-algorithm';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2VudW1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2UtZWxrLWxheW91dC1hbGdvcml0aG0nO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './configurations';
|
|
2
|
+
export * from './engines';
|
|
3
|
+
export * from './enums';
|
|
4
|
+
export * from './models';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vZW5naW5lcyc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LWVkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL21vZGVscy9pLWVsay1sYXlvdXQtZWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0RWRnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZXM6IHN0cmluZ1tdO1xuICB0YXJnZXRzOiBzdHJpbmdbXTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LWVuZ2luZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9tb2RlbHMvaS1lbGstbGF5b3V0LWVuZ2luZS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRkxheW91dEFsZ29yaXRobU9wdGlvbnMgfSBmcm9tICdAZm9ibGV4L2Zsb3cnO1xuaW1wb3J0IHsgRUVsa0xheW91dEFsZ29yaXRobSB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0RW5naW5lT3B0aW9ucyBleHRlbmRzIElGTGF5b3V0QWxnb3JpdGhtT3B0aW9uczxFRWxrTGF5b3V0QWxnb3JpdGhtPiB7XG4gIGxheW91dE9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LWluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9tb2RlbHMvaS1lbGstbGF5b3V0LWluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElFbGtMYXlvdXRJbnN0YW5jZSB7XG4gIGxheW91dChjb25maWc6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+O1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9saWIvbW9kZWxzL2ktZWxrLWxheW91dC1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFbGtMYXlvdXRJbnN0YW5jZSB9IGZyb20gJy4vaS1lbGstbGF5b3V0LWluc3RhbmNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0TW9kdWxlIHtcbiAgZGVmYXVsdDogbmV3ICgpID0+IElFbGtMYXlvdXRJbnN0YW5jZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL21vZGVscy9pLWVsay1sYXlvdXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LXBvc2l0aW9uZWQtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9saWIvbW9kZWxzL2ktZWxrLWxheW91dC1wb3NpdGlvbmVkLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQb2ludCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElFbGtMYXlvdXRQb3NpdGlvbmVkTm9kZSBleHRlbmRzIElQb2ludCB7XG4gIGlkOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9tb2RlbHMvaS1lbGstbGF5b3V0LXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRWxrTGF5b3V0UG9zaXRpb25lZE5vZGUgfSBmcm9tICcuL2ktZWxrLWxheW91dC1wb3NpdGlvbmVkLW5vZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElFbGtMYXlvdXRSZXNwb25zZSB7XG4gIGNoaWxkcmVuPzogSUVsa0xheW91dFBvc2l0aW9uZWROb2RlW107XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './i-elk-layout-edge';
|
|
2
|
+
export * from './i-elk-layout-engine-options';
|
|
3
|
+
export * from './i-elk-layout-instance';
|
|
4
|
+
export * from './i-elk-layout-module';
|
|
5
|
+
export * from './i-elk-layout-node';
|
|
6
|
+
export * from './i-elk-layout-positioned-node';
|
|
7
|
+
export * from './i-elk-layout-response';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pLWVsay1sYXlvdXQtZWRnZSc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1lbmdpbmUtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1pbnN0YW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pLWVsay1sYXlvdXQtbm9kZSc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1wb3NpdGlvbmVkLW5vZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pLWVsay1sYXlvdXQtcmVzcG9uc2UnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './lib';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWInO1xuIl19
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { SizeExtensions, PointExtensions } from '@foblex/2d';
|
|
2
|
+
import { EFLayoutDirection, FLayoutEngine, mergeLayoutNodes } from '@foblex/flow';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { Injectable } from '@angular/core';
|
|
5
|
+
|
|
6
|
+
var EElkLayoutAlgorithm;
|
|
7
|
+
(function (EElkLayoutAlgorithm) {
|
|
8
|
+
EElkLayoutAlgorithm["FIXED"] = "fixed";
|
|
9
|
+
EElkLayoutAlgorithm["BOX"] = "box";
|
|
10
|
+
EElkLayoutAlgorithm["RANDOM"] = "random";
|
|
11
|
+
EElkLayoutAlgorithm["LAYERED"] = "layered";
|
|
12
|
+
EElkLayoutAlgorithm["STRESS"] = "stress";
|
|
13
|
+
EElkLayoutAlgorithm["MRTREE"] = "mrtree";
|
|
14
|
+
EElkLayoutAlgorithm["RADIAL"] = "radial";
|
|
15
|
+
EElkLayoutAlgorithm["FORCE"] = "force";
|
|
16
|
+
EElkLayoutAlgorithm["DISCO"] = "disco";
|
|
17
|
+
EElkLayoutAlgorithm["SPORE_OVERLAP"] = "sporeOverlap";
|
|
18
|
+
EElkLayoutAlgorithm["SPORE_COMPACTION"] = "sporeCompaction";
|
|
19
|
+
EElkLayoutAlgorithm["RECT_PACKING"] = "rectpacking";
|
|
20
|
+
})(EElkLayoutAlgorithm || (EElkLayoutAlgorithm = {}));
|
|
21
|
+
|
|
22
|
+
const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS = {
|
|
23
|
+
direction: EFLayoutDirection.TOP_BOTTOM,
|
|
24
|
+
nodeGap: 48,
|
|
25
|
+
layerGap: 48,
|
|
26
|
+
algorithm: EElkLayoutAlgorithm.LAYERED,
|
|
27
|
+
defaultNodeSize: SizeExtensions.initialize(120, 72),
|
|
28
|
+
layoutOptions: {},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
class ElkLayoutEngine extends FLayoutEngine {
|
|
32
|
+
_elkCtor;
|
|
33
|
+
constructor() {
|
|
34
|
+
super(DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS);
|
|
35
|
+
}
|
|
36
|
+
mergeOptions(currentOptions, nextOptions = {}) {
|
|
37
|
+
return {
|
|
38
|
+
...currentOptions,
|
|
39
|
+
...nextOptions,
|
|
40
|
+
defaultNodeSize: nextOptions.defaultNodeSize
|
|
41
|
+
? SizeExtensions.initialize(nextOptions.defaultNodeSize.width, nextOptions.defaultNodeSize.height)
|
|
42
|
+
: SizeExtensions.initialize(currentOptions.defaultNodeSize.width, currentOptions.defaultNodeSize.height),
|
|
43
|
+
layoutOptions: {
|
|
44
|
+
...(currentOptions.layoutOptions || {}),
|
|
45
|
+
...(nextOptions.layoutOptions || {}),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async calculate(nodes, connections, options) {
|
|
50
|
+
const layoutOptions = this.resolveLayoutOptions(options);
|
|
51
|
+
const elkModule = await this._loadElk();
|
|
52
|
+
const layout = (await new elkModule.default().layout(this._buildLayoutConfiguration(nodes, connections, layoutOptions)));
|
|
53
|
+
const positions = new Map();
|
|
54
|
+
layout.children?.forEach((node) => {
|
|
55
|
+
positions.set(node.id, PointExtensions.initialize(node.x, node.y));
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
nodes: mergeLayoutNodes(nodes, positions),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
_buildLayoutConfiguration(nodes, connections, options) {
|
|
62
|
+
const layoutOptions = {
|
|
63
|
+
'elk.algorithm': this._mapAlgorithm(options.algorithm),
|
|
64
|
+
'elk.direction': this._mapDirection(options.direction),
|
|
65
|
+
'spacing.nodeNode': `${options.nodeGap}`,
|
|
66
|
+
'spacing.nodeNodeBetweenLayers': `${options.layerGap}`,
|
|
67
|
+
...(options.layoutOptions || {}),
|
|
68
|
+
};
|
|
69
|
+
const graphNodes = nodes.map((node) => this._buildGraphNode(node, options.defaultNodeSize));
|
|
70
|
+
const graphEdges = connections.reduce((result, connection, index) => {
|
|
71
|
+
if (!graphNodes.some((node) => node.id === connection.source)) {
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
if (!graphNodes.some((node) => node.id === connection.target)) {
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
result.push({
|
|
78
|
+
id: this._createEdgeId(connection, index),
|
|
79
|
+
sources: [connection.source],
|
|
80
|
+
targets: [connection.target],
|
|
81
|
+
});
|
|
82
|
+
return result;
|
|
83
|
+
}, []);
|
|
84
|
+
return {
|
|
85
|
+
id: 'root',
|
|
86
|
+
layoutOptions,
|
|
87
|
+
children: graphNodes,
|
|
88
|
+
edges: graphEdges,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
_buildGraphNode(node, defaultNodeSize) {
|
|
92
|
+
const size = node.size ?? defaultNodeSize;
|
|
93
|
+
const graphNode = {
|
|
94
|
+
id: node.id,
|
|
95
|
+
width: size.width,
|
|
96
|
+
height: size.height,
|
|
97
|
+
};
|
|
98
|
+
const position = this._getNodePosition(node);
|
|
99
|
+
if (!position) {
|
|
100
|
+
return graphNode;
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
...graphNode,
|
|
104
|
+
x: position.x,
|
|
105
|
+
y: position.y,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
_loadElk() {
|
|
109
|
+
if (!this._elkCtor) {
|
|
110
|
+
this._elkCtor = import('elkjs/lib/elk.bundled');
|
|
111
|
+
}
|
|
112
|
+
return this._elkCtor;
|
|
113
|
+
}
|
|
114
|
+
_getNodePosition(node) {
|
|
115
|
+
const positionedNode = node;
|
|
116
|
+
if (!positionedNode.position) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
return positionedNode.position;
|
|
120
|
+
}
|
|
121
|
+
_mapAlgorithm(algorithm) {
|
|
122
|
+
switch (algorithm) {
|
|
123
|
+
case EElkLayoutAlgorithm.FIXED:
|
|
124
|
+
return 'fixed';
|
|
125
|
+
case EElkLayoutAlgorithm.BOX:
|
|
126
|
+
return 'box';
|
|
127
|
+
case EElkLayoutAlgorithm.RANDOM:
|
|
128
|
+
return 'random';
|
|
129
|
+
case EElkLayoutAlgorithm.LAYERED:
|
|
130
|
+
return 'layered';
|
|
131
|
+
case EElkLayoutAlgorithm.STRESS:
|
|
132
|
+
return 'stress';
|
|
133
|
+
case EElkLayoutAlgorithm.MRTREE:
|
|
134
|
+
return 'mrtree';
|
|
135
|
+
case EElkLayoutAlgorithm.RADIAL:
|
|
136
|
+
return 'radial';
|
|
137
|
+
case EElkLayoutAlgorithm.FORCE:
|
|
138
|
+
return 'force';
|
|
139
|
+
case EElkLayoutAlgorithm.DISCO:
|
|
140
|
+
return 'disco';
|
|
141
|
+
case EElkLayoutAlgorithm.SPORE_OVERLAP:
|
|
142
|
+
return 'sporeOverlap';
|
|
143
|
+
case EElkLayoutAlgorithm.SPORE_COMPACTION:
|
|
144
|
+
return 'sporeCompaction';
|
|
145
|
+
case EElkLayoutAlgorithm.RECT_PACKING:
|
|
146
|
+
return 'rectpacking';
|
|
147
|
+
default:
|
|
148
|
+
return 'layered';
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
_createEdgeId(connection, index) {
|
|
152
|
+
return `${connection.source}->${connection.target}-${index}`;
|
|
153
|
+
}
|
|
154
|
+
_mapDirection(direction) {
|
|
155
|
+
switch (direction) {
|
|
156
|
+
case EFLayoutDirection.BOTTOM_TOP:
|
|
157
|
+
return 'UP';
|
|
158
|
+
case EFLayoutDirection.LEFT_RIGHT:
|
|
159
|
+
return 'RIGHT';
|
|
160
|
+
case EFLayoutDirection.RIGHT_LEFT:
|
|
161
|
+
return 'LEFT';
|
|
162
|
+
case EFLayoutDirection.TOP_BOTTOM:
|
|
163
|
+
default:
|
|
164
|
+
return 'DOWN';
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
168
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine });
|
|
169
|
+
}
|
|
170
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine, decorators: [{
|
|
171
|
+
type: Injectable
|
|
172
|
+
}], ctorParameters: () => [] });
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Generated bundle index. Do not edit.
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
export { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS, EElkLayoutAlgorithm, ElkLayoutEngine };
|
|
179
|
+
//# sourceMappingURL=foblex-flow-elk-layout.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foblex-flow-elk-layout.mjs","sources":["../../../libs/f-layout/elk/src/lib/enums/e-elk-layout-algorithm.ts","../../../libs/f-layout/elk/src/lib/configurations/default-elk-layout-engine-options.ts","../../../libs/f-layout/elk/src/lib/engines/elk-layout-engine.ts","../../../libs/f-layout/elk/src/foblex-flow-elk-layout.ts"],"sourcesContent":["export enum EElkLayoutAlgorithm {\n FIXED = 'fixed',\n BOX = 'box',\n RANDOM = 'random',\n LAYERED = 'layered',\n STRESS = 'stress',\n MRTREE = 'mrtree',\n RADIAL = 'radial',\n FORCE = 'force',\n DISCO = 'disco',\n SPORE_OVERLAP = 'sporeOverlap',\n SPORE_COMPACTION = 'sporeCompaction',\n RECT_PACKING = 'rectpacking',\n}\n","import { SizeExtensions } from '@foblex/2d';\nimport { EFLayoutDirection } from '@foblex/flow';\nimport { EElkLayoutAlgorithm } from '../enums';\nimport { IElkLayoutEngineOptions } from '../models';\n\nexport const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS: IElkLayoutEngineOptions = {\n direction: EFLayoutDirection.TOP_BOTTOM,\n nodeGap: 48,\n layerGap: 48,\n algorithm: EElkLayoutAlgorithm.LAYERED,\n defaultNodeSize: SizeExtensions.initialize(120, 72),\n layoutOptions: {},\n};\n","import { Injectable } from '@angular/core';\nimport { IPoint, PointExtensions, SizeExtensions } from '@foblex/2d';\nimport {\n EFLayoutDirection,\n FLayoutEngine,\n IFLayoutCalculationOptions,\n IFLayoutConnection,\n IFLayoutNode,\n IFLayoutResult,\n mergeLayoutNodes,\n} from '@foblex/flow';\nimport { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS } from '../configurations';\nimport { EElkLayoutAlgorithm } from '../enums';\nimport {\n IElkLayoutEdge,\n IElkLayoutEngineOptions,\n IElkLayoutModule,\n IElkLayoutNode,\n IElkLayoutResponse,\n} from '../models';\n\n@Injectable()\nexport class ElkLayoutEngine extends FLayoutEngine<IElkLayoutEngineOptions> {\n private _elkCtor?: Promise<IElkLayoutModule>;\n\n public constructor() {\n super(DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS);\n }\n\n protected override mergeOptions(\n currentOptions: IElkLayoutEngineOptions,\n nextOptions: Partial<IElkLayoutEngineOptions> = {},\n ): IElkLayoutEngineOptions {\n return {\n ...currentOptions,\n ...nextOptions,\n defaultNodeSize: nextOptions.defaultNodeSize\n ? SizeExtensions.initialize(\n nextOptions.defaultNodeSize.width,\n nextOptions.defaultNodeSize.height,\n )\n : SizeExtensions.initialize(\n currentOptions.defaultNodeSize.width,\n currentOptions.defaultNodeSize.height,\n ),\n layoutOptions: {\n ...(currentOptions.layoutOptions || {}),\n ...(nextOptions.layoutOptions || {}),\n },\n };\n }\n\n public override async calculate(\n nodes: IFLayoutNode[],\n connections: IFLayoutConnection[],\n options?: IFLayoutCalculationOptions<IElkLayoutEngineOptions>,\n ): Promise<IFLayoutResult> {\n const layoutOptions = this.resolveLayoutOptions(options);\n const elkModule = await this._loadElk();\n const layout = (await new elkModule.default().layout(\n this._buildLayoutConfiguration(nodes, connections, layoutOptions),\n )) as IElkLayoutResponse;\n const positions = new Map<string, IPoint>();\n\n layout.children?.forEach((node) => {\n positions.set(node.id, PointExtensions.initialize(node.x, node.y));\n });\n\n return {\n nodes: mergeLayoutNodes(nodes, positions),\n };\n }\n\n private _buildLayoutConfiguration(\n nodes: IFLayoutNode[],\n connections: IFLayoutConnection[],\n options: IElkLayoutEngineOptions,\n ): {\n id: string;\n layoutOptions: Record<string, string>;\n children: IElkLayoutNode[];\n edges: IElkLayoutEdge[];\n } {\n const layoutOptions: Record<string, string> = {\n 'elk.algorithm': this._mapAlgorithm(options.algorithm),\n 'elk.direction': this._mapDirection(options.direction),\n 'spacing.nodeNode': `${options.nodeGap}`,\n 'spacing.nodeNodeBetweenLayers': `${options.layerGap}`,\n ...(options.layoutOptions || {}),\n };\n const graphNodes = nodes.map((node) => this._buildGraphNode(node, options.defaultNodeSize));\n const graphEdges = connections.reduce<IElkLayoutEdge[]>((result, connection, index) => {\n if (!graphNodes.some((node) => node.id === connection.source)) {\n return result;\n }\n\n if (!graphNodes.some((node) => node.id === connection.target)) {\n return result;\n }\n\n result.push({\n id: this._createEdgeId(connection, index),\n sources: [connection.source],\n targets: [connection.target],\n });\n\n return result;\n }, []);\n\n return {\n id: 'root',\n layoutOptions,\n children: graphNodes,\n edges: graphEdges,\n };\n }\n\n private _buildGraphNode(\n node: IFLayoutNode,\n defaultNodeSize: { width: number; height: number },\n ): IElkLayoutNode {\n const size = node.size ?? defaultNodeSize;\n const graphNode: IElkLayoutNode = {\n id: node.id,\n width: size.width,\n height: size.height,\n };\n const position = this._getNodePosition(node);\n\n if (!position) {\n return graphNode;\n }\n\n return {\n ...graphNode,\n x: position.x,\n y: position.y,\n };\n }\n\n private _loadElk(): Promise<IElkLayoutModule> {\n if (!this._elkCtor) {\n this._elkCtor = import('elkjs/lib/elk.bundled');\n }\n\n return this._elkCtor;\n }\n\n private _getNodePosition(node: IFLayoutNode): IPoint | null {\n const positionedNode = node as IFLayoutNode & { position?: IPoint };\n\n if (!positionedNode.position) {\n return null;\n }\n\n return positionedNode.position;\n }\n\n private _mapAlgorithm(algorithm: EElkLayoutAlgorithm): string {\n switch (algorithm) {\n case EElkLayoutAlgorithm.FIXED:\n return 'fixed';\n case EElkLayoutAlgorithm.BOX:\n return 'box';\n case EElkLayoutAlgorithm.RANDOM:\n return 'random';\n case EElkLayoutAlgorithm.LAYERED:\n return 'layered';\n case EElkLayoutAlgorithm.STRESS:\n return 'stress';\n case EElkLayoutAlgorithm.MRTREE:\n return 'mrtree';\n case EElkLayoutAlgorithm.RADIAL:\n return 'radial';\n case EElkLayoutAlgorithm.FORCE:\n return 'force';\n case EElkLayoutAlgorithm.DISCO:\n return 'disco';\n case EElkLayoutAlgorithm.SPORE_OVERLAP:\n return 'sporeOverlap';\n case EElkLayoutAlgorithm.SPORE_COMPACTION:\n return 'sporeCompaction';\n case EElkLayoutAlgorithm.RECT_PACKING:\n return 'rectpacking';\n default:\n return 'layered';\n }\n }\n\n private _createEdgeId(connection: IFLayoutConnection, index: number): string {\n return `${connection.source}->${connection.target}-${index}`;\n }\n\n private _mapDirection(direction: EFLayoutDirection): 'DOWN' | 'UP' | 'RIGHT' | 'LEFT' {\n switch (direction) {\n case EFLayoutDirection.BOTTOM_TOP:\n return 'UP';\n case EFLayoutDirection.LEFT_RIGHT:\n return 'RIGHT';\n case EFLayoutDirection.RIGHT_LEFT:\n return 'LEFT';\n case EFLayoutDirection.TOP_BOTTOM:\n default:\n return 'DOWN';\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './default-elk-layout-engine-options';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FLayoutEngine, IFLayoutCalculationOptions, IFLayoutConnection, IFLayoutNode, IFLayoutResult } from '@foblex/flow';
|
|
2
|
+
import { IElkLayoutEngineOptions } from '../models';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class ElkLayoutEngine extends FLayoutEngine<IElkLayoutEngineOptions> {
|
|
5
|
+
private _elkCtor?;
|
|
6
|
+
constructor();
|
|
7
|
+
protected mergeOptions(currentOptions: IElkLayoutEngineOptions, nextOptions?: Partial<IElkLayoutEngineOptions>): IElkLayoutEngineOptions;
|
|
8
|
+
calculate(nodes: IFLayoutNode[], connections: IFLayoutConnection[], options?: IFLayoutCalculationOptions<IElkLayoutEngineOptions>): Promise<IFLayoutResult>;
|
|
9
|
+
private _buildLayoutConfiguration;
|
|
10
|
+
private _buildGraphNode;
|
|
11
|
+
private _loadElk;
|
|
12
|
+
private _getNodePosition;
|
|
13
|
+
private _mapAlgorithm;
|
|
14
|
+
private _createEdgeId;
|
|
15
|
+
private _mapDirection;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElkLayoutEngine, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ElkLayoutEngine>;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './elk-layout-engine';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare enum EElkLayoutAlgorithm {
|
|
2
|
+
FIXED = "fixed",
|
|
3
|
+
BOX = "box",
|
|
4
|
+
RANDOM = "random",
|
|
5
|
+
LAYERED = "layered",
|
|
6
|
+
STRESS = "stress",
|
|
7
|
+
MRTREE = "mrtree",
|
|
8
|
+
RADIAL = "radial",
|
|
9
|
+
FORCE = "force",
|
|
10
|
+
DISCO = "disco",
|
|
11
|
+
SPORE_OVERLAP = "sporeOverlap",
|
|
12
|
+
SPORE_COMPACTION = "sporeCompaction",
|
|
13
|
+
RECT_PACKING = "rectpacking"
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './e-elk-layout-algorithm';
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './i-elk-layout-edge';
|
|
2
|
+
export * from './i-elk-layout-engine-options';
|
|
3
|
+
export * from './i-elk-layout-instance';
|
|
4
|
+
export * from './i-elk-layout-module';
|
|
5
|
+
export * from './i-elk-layout-node';
|
|
6
|
+
export * from './i-elk-layout-positioned-node';
|
|
7
|
+
export * from './i-elk-layout-response';
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@foblex/flow-elk-layout",
|
|
3
|
+
"version": "18.5.0",
|
|
4
|
+
"description": "ELK.js layout engine adapter for Foblex Flow.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"types": "index.d.ts",
|
|
7
|
+
"author": "Siarhei Huzarevich",
|
|
8
|
+
"homepage": "https://flow.foblex.com",
|
|
9
|
+
"docs": "https://flow.foblex.com/examples/elkjs-layout",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/Foblex/f-flow.git"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"private": false,
|
|
16
|
+
"keywords": [
|
|
17
|
+
"angular",
|
|
18
|
+
"flow",
|
|
19
|
+
"elk",
|
|
20
|
+
"layout",
|
|
21
|
+
"graph",
|
|
22
|
+
"diagram",
|
|
23
|
+
"foblex"
|
|
24
|
+
],
|
|
25
|
+
"schematics": "./schematics/collection.json",
|
|
26
|
+
"ng-add": {
|
|
27
|
+
"save": "dependencies"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"@angular/common": ">=17.3.0",
|
|
31
|
+
"@angular/core": ">=17.3.0",
|
|
32
|
+
"@foblex/2d": "^1.2.2",
|
|
33
|
+
"@foblex/flow": "^18.4.0"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"elkjs": "^0.9.3",
|
|
37
|
+
"tslib": "^2.3.0"
|
|
38
|
+
},
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"module": "fesm2022/foblex-flow-elk-layout.mjs",
|
|
41
|
+
"typings": "index.d.ts",
|
|
42
|
+
"exports": {
|
|
43
|
+
"./package.json": {
|
|
44
|
+
"default": "./package.json"
|
|
45
|
+
},
|
|
46
|
+
".": {
|
|
47
|
+
"types": "./index.d.ts",
|
|
48
|
+
"esm2022": "./esm2022/foblex-flow-elk-layout.mjs",
|
|
49
|
+
"esm": "./esm2022/foblex-flow-elk-layout.mjs",
|
|
50
|
+
"default": "./fesm2022/foblex-flow-elk-layout.mjs"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
package/public-api.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"ng-add": {
|
|
5
|
+
"description": "Installs @foblex/flow-elk-layout and the required Foblex Flow dependencies",
|
|
6
|
+
"factory": "./ng-add/index#ngAdd",
|
|
7
|
+
"schema": "./ng-add/schema.json"
|
|
8
|
+
},
|
|
9
|
+
"add": {
|
|
10
|
+
"description": "Installs @foblex/flow-elk-layout and the required Foblex Flow dependencies (alias for Nx users)",
|
|
11
|
+
"factory": "./ng-add/index#ngAdd",
|
|
12
|
+
"schema": "./ng-add/schema.json"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ngAdd = ngAdd;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
6
|
+
const utility_1 = require("@schematics/angular/utility");
|
|
7
|
+
const dependencies_1 = require("@schematics/angular/utility/dependencies");
|
|
8
|
+
const foblex_flow_dependencies_1 = require("../shared/foblex-flow-dependencies");
|
|
9
|
+
const package_json_1 = require("../shared/package-json");
|
|
10
|
+
const DEFAULT_THEME_STYLE_PATH = 'node_modules/@foblex/flow/styles/default.scss';
|
|
11
|
+
const KNOWN_THEME_STYLE_PATHS = new Set([
|
|
12
|
+
DEFAULT_THEME_STYLE_PATH,
|
|
13
|
+
'@foblex/flow/styles/default.scss',
|
|
14
|
+
]);
|
|
15
|
+
function ngAdd(options) {
|
|
16
|
+
const installationState = { hasNewDependencies: false };
|
|
17
|
+
return (0, schematics_1.chain)([
|
|
18
|
+
addDependencies(installationState),
|
|
19
|
+
addDefaultTheme(options),
|
|
20
|
+
installDependencies(installationState),
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
function addDependencies(installationState) {
|
|
24
|
+
return (tree, context) => {
|
|
25
|
+
context.logger.info('Installing dependencies for @foblex/flow-elk-layout...');
|
|
26
|
+
foblex_flow_dependencies_1.FoblexFlowDependencies.forEach((dependency) => {
|
|
27
|
+
if ((0, package_json_1.hasPackageJsonDependency)(tree, dependency.name)) {
|
|
28
|
+
context.logger.info(`Skipped "${dependency.name}" because it is already present in package.json`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
(0, dependencies_1.addPackageJsonDependency)(tree, {
|
|
32
|
+
type: dependencies_1.NodeDependencyType.Default,
|
|
33
|
+
name: dependency.name,
|
|
34
|
+
version: dependency.version,
|
|
35
|
+
});
|
|
36
|
+
installationState.hasNewDependencies = true;
|
|
37
|
+
context.logger.info(`Added "${dependency.name}" to package.json`);
|
|
38
|
+
});
|
|
39
|
+
return tree;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function addDefaultTheme(options) {
|
|
43
|
+
if (options.skipTheme) {
|
|
44
|
+
return (_tree, context) => {
|
|
45
|
+
context.logger.info('Skipped adding the default @foblex/flow theme.');
|
|
46
|
+
return _tree;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return (0, utility_1.updateWorkspace)((workspace) => {
|
|
50
|
+
for (const [, project] of workspace.projects) {
|
|
51
|
+
if (project.extensions['projectType'] !== 'application') {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
addStyleToTarget(project.targets.get('build'));
|
|
55
|
+
addStyleToTarget(project.targets.get('test'));
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function addStyleToTarget(target) {
|
|
60
|
+
var _a;
|
|
61
|
+
if (!target) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
ensureThemeInStyles(((_a = target.options) !== null && _a !== void 0 ? _a : (target.options = {})));
|
|
65
|
+
if (!target.configurations) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
Object.values(target.configurations).forEach((configuration) => {
|
|
69
|
+
if (!configuration) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
ensureThemeInStyles(configuration);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function ensureThemeInStyles(options) {
|
|
76
|
+
const styles = Array.isArray(options['styles']) ? [...options['styles']] : [];
|
|
77
|
+
if (styles.some(isThemeStyleEntry)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
styles.push(DEFAULT_THEME_STYLE_PATH);
|
|
81
|
+
options['styles'] = styles;
|
|
82
|
+
}
|
|
83
|
+
function isThemeStyleEntry(entry) {
|
|
84
|
+
if (typeof entry === 'string') {
|
|
85
|
+
return KNOWN_THEME_STYLE_PATHS.has(entry);
|
|
86
|
+
}
|
|
87
|
+
if (!entry || typeof entry !== 'object' || Array.isArray(entry)) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const input = entry['input'];
|
|
91
|
+
return typeof input === 'string' && KNOWN_THEME_STYLE_PATHS.has(input);
|
|
92
|
+
}
|
|
93
|
+
function installDependencies(installationState) {
|
|
94
|
+
return (_tree, context) => {
|
|
95
|
+
if (installationState.hasNewDependencies) {
|
|
96
|
+
context.addTask(new tasks_1.NodePackageInstallTask());
|
|
97
|
+
context.logger.info('Installed missing Foblex Flow dependencies.');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
context.logger.info('Skipped dependency installation because all required Foblex Flow packages are already present.');
|
|
101
|
+
}
|
|
102
|
+
context.logger.info('ELK.js support is ready.');
|
|
103
|
+
context.logger.info('Next step: provide ElkLayoutEngine and call calculate(...) in your flow component.');
|
|
104
|
+
return _tree;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/f-layout/elk/schematics/ng-add/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "FoblexFlowElkLayoutNgAddSchema",
|
|
4
|
+
"title": "@foblex/flow-elk-layout ng-add options",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"skipTheme": {
|
|
8
|
+
"type": "boolean",
|
|
9
|
+
"description": "Do not add the default @foblex/flow theme to application styles.",
|
|
10
|
+
"default": false
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FoblexFlowDependencies = void 0;
|
|
4
|
+
exports.FoblexFlowDependencies = [
|
|
5
|
+
{ name: '@foblex/flow', version: '^18.4.0' },
|
|
6
|
+
{ name: '@foblex/platform', version: '^1.0.4' },
|
|
7
|
+
{ name: '@foblex/mediator', version: '^1.1.3' },
|
|
8
|
+
{ name: '@foblex/2d', version: '^1.2.2' },
|
|
9
|
+
{ name: '@foblex/utils', version: '^1.1.1' },
|
|
10
|
+
];
|
|
11
|
+
//# sourceMappingURL=foblex-flow-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foblex-flow-dependencies.js","sourceRoot":"","sources":["../../../../libs/f-layout/elk/schematics/shared/foblex-flow-dependencies.ts"],"names":[],"mappings":";;;AAAa,QAAA,sBAAsB,GAAG;IACpC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;IAC5C,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC/C,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC/C,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE;IACzC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE;CAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i-ng-add-schema.js","sourceRoot":"","sources":["../../../../libs/f-layout/elk/schematics/shared/i-ng-add-schema.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasPackageJsonDependency = hasPackageJsonDependency;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const PACKAGE_JSON_PATH = '/package.json';
|
|
6
|
+
function hasPackageJsonDependency(tree, packageName) {
|
|
7
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
8
|
+
const packageJson = readPackageJson(tree);
|
|
9
|
+
return Boolean((_f = (_d = (_b = (_a = packageJson.dependencies) === null || _a === void 0 ? void 0 : _a[packageName]) !== null && _b !== void 0 ? _b : (_c = packageJson.devDependencies) === null || _c === void 0 ? void 0 : _c[packageName]) !== null && _d !== void 0 ? _d : (_e = packageJson.peerDependencies) === null || _e === void 0 ? void 0 : _e[packageName]) !== null && _f !== void 0 ? _f : (_g = packageJson.optionalDependencies) === null || _g === void 0 ? void 0 : _g[packageName]);
|
|
10
|
+
}
|
|
11
|
+
function readPackageJson(tree) {
|
|
12
|
+
const packageJsonBuffer = tree.read(PACKAGE_JSON_PATH);
|
|
13
|
+
if (!packageJsonBuffer) {
|
|
14
|
+
throw new schematics_1.SchematicsException('Could not find package.json in the workspace root.');
|
|
15
|
+
}
|
|
16
|
+
return JSON.parse(packageJsonBuffer.toString('utf-8'));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=package-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../../../libs/f-layout/elk/schematics/shared/package-json.ts"],"names":[],"mappings":";;AAWA,4DASC;AApBD,2DAAuE;AASvE,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,SAAgB,wBAAwB,CAAC,IAAU,EAAE,WAAmB;;IACtE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAE1C,OAAO,OAAO,CACZ,MAAA,MAAA,MAAA,MAAA,WAAW,CAAC,YAAY,0CAAG,WAAW,CAAC,mCACrC,MAAA,WAAW,CAAC,eAAe,0CAAG,WAAW,CAAC,mCAC1C,MAAA,WAAW,CAAC,gBAAgB,0CAAG,WAAW,CAAC,mCAC3C,MAAA,WAAW,CAAC,oBAAoB,0CAAG,WAAW,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAEvD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,gCAAmB,CAAC,oDAAoD,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAiB,CAAC;AACzE,CAAC"}
|