@plait/graph-viz 0.64.0 → 0.64.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/force-atlas/constants.mjs +6 -2
- package/esm2022/force-atlas/force-atlas.flavour.mjs +13 -8
- package/esm2022/force-atlas/node.flavour.mjs +2 -2
- package/esm2022/force-atlas/utils/draw.mjs +2 -2
- package/fesm2022/plait-graph-viz.mjs +18 -9
- package/fesm2022/plait-graph-viz.mjs.map +1 -1
- package/force-atlas/constants.d.ts +5 -1
- package/package.json +1 -1
|
@@ -34,7 +34,11 @@ export const DEFAULT_LINE_STYLES = {
|
|
|
34
34
|
[EdgeDirection.OUT]: '#6698FF',
|
|
35
35
|
[EdgeDirection.NONE]: `#eee`
|
|
36
36
|
},
|
|
37
|
-
opacity:
|
|
37
|
+
opacity: {
|
|
38
|
+
[EdgeDirection.IN]: 0.4,
|
|
39
|
+
[EdgeDirection.OUT]: 0.4,
|
|
40
|
+
[EdgeDirection.NONE]: 1
|
|
41
|
+
}
|
|
38
42
|
};
|
|
39
43
|
export const DEFAULT_EDGE_PARTICLE_SIZE = 4;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQVk7SUFDeEMsR0FBRyxjQUFjO0lBQ2pCLE1BQU0sRUFBRSxNQUFNO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFFcEMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEdBQUcsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxFQUFFLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsOEJBQThCLHdCQUF3QixvQ0FBb0MseUJBQXlCLGdCQUFnQiw0QkFBNEIsK0RBQStELENBQUM7QUFFdlEsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsd0JBQXdCLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxHQUFHLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsOEJBQThCLENBQUM7QUFFMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxTQUFTLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFZO0lBQ3hDLEdBQUcsY0FBYztJQUNqQixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLFdBQVcsRUFBRSxDQUFDO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDL0IsS0FBSyxFQUFFO1FBQ0gsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUztRQUM3QixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTO1FBQzlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07S0FDL0I7SUFDRCxPQUFPLEVBQUU7UUFDTCxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHO1FBQ3ZCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUc7UUFDeEIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztLQUMxQjtDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX1NUWUxFUyB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IEVkZ2VEaXJlY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURHRV9TVFlMRVM6IE9wdGlvbnMgPSB7XG4gICAgLi4uREVGQVVMVF9TVFlMRVMsXG4gICAgc3Ryb2tlOiAnI2RkZCdcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfU0laRSA9IDMwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BQ1RJVkVfTk9ERV9TSVpFX01VTFRJUExJRVIgPSAxLjI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9XQVZFX05PREVfU0laRV9NVUxUSVBMSUVSID0gMS41O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX0xBQkVMX01BUkdJTl9UT1AgPSA0O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX0xBQkVMX0ZPTlRfU0laRSA9IDEyO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX0xBQkVMX1dJRFRIID0gNzI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfTEFCRUxfSEVJR0hUID0gMjI7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfTEFCRUxfU1RZTEUgPSBgdXNlci1zZWxlY3Q6bm9uZTttYXgtd2lkdGg6JHtERUZBVUxUX05PREVfTEFCRUxfV0lEVEh9cHg7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6JHtERUZBVUxUX05PREVfTEFCRUxfSEVJR0hUfXB4O2ZvbnQtc2l6ZToke0RFRkFVTFRfTk9ERV9MQUJFTF9GT05UX1NJWkV9cHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2A7XG5cbmV4cG9ydCBjb25zdCBOT0RFX0xBQkVMX0NMQVNTX05BTUUgPSAnZm9yY2UtYXRsYXMtbm9kZS1sYWJlbCc7XG5cbmV4cG9ydCBjb25zdCBTRUNPTkRfREVQVEhfTk9ERV9BTFBIQSA9IDAuNTtcblxuZXhwb3J0IGNvbnN0IFNFQ09ORF9ERVBUSF9MSU5FX0FMUEhBID0gMC41O1xuXG5leHBvcnQgY29uc3QgQUNUSVZFX0JBQ0tHUk9VTkRfTk9ERV9BTFBIQSA9IDAuMTtcblxuZXhwb3J0IGNvbnN0IE5PREVfSUNPTl9DTEFTU19OQU1FID0gJ2ZvcmNlLWF0bGFzLW5vZGUtaWNvbic7XG5cbmV4cG9ydCBjb25zdCBBQ1RJVkVfTk9ERV9JQ09OX0NMQVNTX05BTUUgPSAnZm9yY2UtYXRsYXMtbm9kZS1pY29uLWFjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOT0RFX0lDT05fRk9OVF9TSVpFID0gMTY7XG5cbmV4cG9ydCBjb25zdCBBQ1RJVkVfTk9ERV9JQ09OX0ZPTlRfU0laRSA9IDE4O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX0JBQ0tHUk9VTkRfQ09MT1IgPSAnIzljOWNmYic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfSUNPTl9DT0xPUiA9ICcjZmZmJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9ERV9TVFlMRVM6IE9wdGlvbnMgPSB7XG4gICAgLi4uREVGQVVMVF9TVFlMRVMsXG4gICAgZmlsbDogREVGQVVMVF9OT0RFX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgc3Ryb2tlV2lkdGg6IDBcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfU0NBTElOR19SQVRJTyA9IDIwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSU5FX1NUWUxFUyA9IHtcbiAgICBjb2xvcjoge1xuICAgICAgICBbRWRnZURpcmVjdGlvbi5JTl06ICcjNzNEODk3JyxcbiAgICAgICAgW0VkZ2VEaXJlY3Rpb24uT1VUXTogJyM2Njk4RkYnLFxuICAgICAgICBbRWRnZURpcmVjdGlvbi5OT05FXTogYCNlZWVgXG4gICAgfSxcbiAgICBvcGFjaXR5OiB7XG4gICAgICAgIFtFZGdlRGlyZWN0aW9uLklOXTogMC40LFxuICAgICAgICBbRWRnZURpcmVjdGlvbi5PVVRdOiAwLjQsXG4gICAgICAgIFtFZGdlRGlyZWN0aW9uLk5PTkVdOiAxXG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRURHRV9QQVJUSUNMRV9TSVpFID0gNDtcbiJdfQ==
|
|
@@ -4,7 +4,7 @@ import Graph from 'graphology';
|
|
|
4
4
|
import circular from 'graphology-layout/circular';
|
|
5
5
|
import forceAtlas2 from 'graphology-layout-forceatlas2';
|
|
6
6
|
import { ForceAtlasElement } from '../interfaces';
|
|
7
|
-
import {
|
|
7
|
+
import { DEFAULT_NODE_SIZE } from './constants';
|
|
8
8
|
export class ForceAtlasFlavour extends CommonElementFlavour {
|
|
9
9
|
constructor() {
|
|
10
10
|
super();
|
|
@@ -26,13 +26,18 @@ export class ForceAtlasFlavour extends CommonElementFlavour {
|
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
28
|
circular.assign(this.graph);
|
|
29
|
+
const nodeCount = this.graph.nodes().length;
|
|
29
30
|
const settings = forceAtlas2.inferSettings(this.graph);
|
|
30
|
-
settings.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
settings.scalingRatio = 450;
|
|
32
|
+
if (nodeCount > 5) {
|
|
33
|
+
settings.gravity = 0.2;
|
|
34
|
+
settings.adjustSizes = false;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
settings.gravity = 0;
|
|
38
|
+
settings.adjustSizes = true;
|
|
39
|
+
}
|
|
40
|
+
const positions = forceAtlas2(this.graph, { iterations: 500, settings });
|
|
36
41
|
this.element.children?.forEach(child => {
|
|
37
42
|
if (ForceAtlasElement.isForceAtlasNodeElement(child)) {
|
|
38
43
|
const pos = positions[child.id];
|
|
@@ -50,4 +55,4 @@ export class ForceAtlasFlavour extends CommonElementFlavour {
|
|
|
50
55
|
super.destroy();
|
|
51
56
|
}
|
|
52
57
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtYXRsYXMuZmxhdm91ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvZm9yY2UtYXRsYXMuZmxhdm91ci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUEyRCxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG9CQUFtRDtJQUl0RjtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxJQUFJLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUNyQyxLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO2dCQUNuQyxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztRQUM1QixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUN2QixRQUFRLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDO2FBQU0sQ0FBQztZQUNKLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxVQUFVO1FBQ04sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQ1osS0FBK0QsRUFDL0QsUUFBa0UsSUFDbkUsQ0FBQztJQUVKLFVBQVUsQ0FBQyxlQUFrQyxFQUFFLGNBQWlDLElBQUcsQ0FBQztJQUVwRixPQUFPO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkVsZW1lbnRGbGF2b3VyIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPbkNvbnRleHRDaGFuZ2VkLCBQbGFpdEJvYXJkLCBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LCBjYWNoZVNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgR3JhcGggZnJvbSAnZ3JhcGhvbG9neSc7XG5pbXBvcnQgY2lyY3VsYXIgZnJvbSAnZ3JhcGhvbG9neS1sYXlvdXQvY2lyY3VsYXInO1xuaW1wb3J0IGZvcmNlQXRsYXMyIGZyb20gJ2dyYXBob2xvZ3ktbGF5b3V0LWZvcmNlYXRsYXMyJztcbmltcG9ydCB7IEZvcmNlQXRsYXNFbGVtZW50LCBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERFRkFVTFRfTk9ERV9TSVpFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgRm9yY2VBdGxhc0ZsYXZvdXIgZXh0ZW5kcyBDb21tb25FbGVtZW50Rmxhdm91cjxGb3JjZUF0bGFzRWxlbWVudCwgUGxhaXRCb2FyZD5cbiAgICBpbXBsZW1lbnRzIE9uQ29udGV4dENoYW5nZWQ8Rm9yY2VBdGxhc0VsZW1lbnQsIFBsYWl0Qm9hcmQ+IHtcbiAgICBncmFwaCE6IEdyYXBoPEZvcmNlQXRsYXNOb2RlRWxlbWVudD47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplR3JhcGgoKSB7XG4gICAgICAgIHRoaXMuZ3JhcGggPSBuZXcgR3JhcGg8Rm9yY2VBdGxhc05vZGVFbGVtZW50PigpO1xuICAgICAgICB0aGlzLmVsZW1lbnQuY2hpbGRyZW4/LmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgaWYgKEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc05vZGVFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGQ/LnNpemUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnNpemUgPSBERUZBVUxUX05PREVfU0laRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyh0aGlzLmJvYXJkLCBbY2hpbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5hZGROb2RlKGNoaWxkLmlkLCBjaGlsZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc0VkZ2VFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGguYWRkRWRnZShjaGlsZC5zb3VyY2UsIGNoaWxkLnRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjaXJjdWxhci5hc3NpZ24odGhpcy5ncmFwaCk7XG4gICAgICAgIGNvbnN0IG5vZGVDb3VudCA9IHRoaXMuZ3JhcGgubm9kZXMoKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZm9yY2VBdGxhczIuaW5mZXJTZXR0aW5ncyh0aGlzLmdyYXBoKTtcbiAgICAgICAgc2V0dGluZ3Muc2NhbGluZ1JhdGlvID0gNDUwO1xuICAgICAgICBpZiAobm9kZUNvdW50ID4gNSkge1xuICAgICAgICAgICAgc2V0dGluZ3MuZ3Jhdml0eSA9IDAuMjtcbiAgICAgICAgICAgIHNldHRpbmdzLmFkanVzdFNpemVzID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5ncmF2aXR5ID0gMDtcbiAgICAgICAgICAgIHNldHRpbmdzLmFkanVzdFNpemVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBmb3JjZUF0bGFzMih0aGlzLmdyYXBoLCB7IGl0ZXJhdGlvbnM6IDUwMCwgc2V0dGluZ3MgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzTm9kZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gcG9zaXRpb25zW2NoaWxkLmlkXTtcbiAgICAgICAgICAgICAgICBjaGlsZC5wb2ludHMgPSBbW3Bvcy54LCBwb3MueV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyYXBoKCk7XG4gICAgfVxuXG4gICAgb25Db250ZXh0Q2hhbmdlZChcbiAgICAgICAgdmFsdWU6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8Rm9yY2VBdGxhc0VsZW1lbnQsIFBsYWl0Qm9hcmQ+LFxuICAgICAgICBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzRWxlbWVudCwgUGxhaXRCb2FyZD5cbiAgICApIHt9XG5cbiAgICB1cGRhdGVUZXh0KHByZXZpb3VzRWxlbWVudDogRm9yY2VBdGxhc0VsZW1lbnQsIGN1cnJlbnRFbGVtZW50OiBGb3JjZUF0bGFzRWxlbWVudCkge31cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -19,7 +19,7 @@ export class ForceAtlasNodeFlavour extends CommonElementFlavour {
|
|
|
19
19
|
const selectElements = getSelectedElements(this.board);
|
|
20
20
|
const activeNodeId = selectElements[0]?.id;
|
|
21
21
|
const isActive = activeNodeId === this.element.id;
|
|
22
|
-
this.nodeGenerator.processDrawing(this.element,
|
|
22
|
+
this.nodeGenerator.processDrawing(this.element, this.getElementG(), {
|
|
23
23
|
isActive,
|
|
24
24
|
opacity: isFirstDepthNode(this.element.id, activeNodeId, parent) ? 1 : SECOND_DEPTH_NODE_ALPHA
|
|
25
25
|
});
|
|
@@ -54,4 +54,4 @@ export class ForceAtlasNodeFlavour extends CommonElementFlavour {
|
|
|
54
54
|
super.destroy();
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5mbGF2b3VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9ub2RlLmZsYXZvdXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFFSCxVQUFVLEVBQ1YsU0FBUyxFQUVULHFCQUFxQixFQUNyQixtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFHckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBdUQ7SUFLOUY7UUFDSSxLQUFLLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsVUFBVTtRQUNOLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJ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QUFDO0lBRTVGLE9BQU87UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uRWxlbWVudEZsYXZvdXIgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7XG4gICAgT25Db250ZXh0Q2hhbmdlZCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0Tm9kZSxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCBHcmFwaCBmcm9tICdncmFwaG9sb2d5JztcbmltcG9ydCB7IEZvcmNlQXRsYXNFbGVtZW50LCBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL25vZGUuZ2VuZXJhdG9yJztcbmltcG9ydCB7IGdldEVkZ2VHZW5lcmF0b3IsIGdldEVkZ2VHZW5lcmF0b3JEYXRhLCBnZXRFZGdlc0luU291cmNlT3JUYXJnZXQgfSBmcm9tICcuL3V0aWxzL2VkZ2UnO1xuaW1wb3J0IHsgZ2V0Tm9kZUdlbmVyYXRvciwgZ2V0Tm9kZXMsIGlzRmlyc3REZXB0aE5vZGUgfSBmcm9tICcuL3V0aWxzL25vZGUnO1xuaW1wb3J0IHsgU0VDT05EX0RFUFRIX05PREVfQUxQSEEgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzTm9kZUZsYXZvdXIgZXh0ZW5kcyBDb21tb25FbGVtZW50Rmxhdm91cjxGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+XG4gICAgaW1wbGVtZW50cyBPbkNvbnRleHRDaGFuZ2VkPEZvcmNlQXRsYXNOb2RlRWxlbWVudCwgUGxhaXRCb2FyZD4ge1xuICAgIGdyYXBoITogR3JhcGg8Tm9kZT47XG4gICAgbm9kZUdlbmVyYXRvciE6IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdlbmVyYXRvcigpIHtcbiAgICAgICAgdGhpcy5ub2RlR2VuZXJhdG9yID0gbmV3IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmdldFJlZigpLmFkZEdlbmVyYXRvcihGb3JjZUF0bGFzTm9kZUdlbmVyYXRvci5rZXksIHRoaXMubm9kZUdlbmVyYXRvcik7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVHZW5lcmF0b3IoKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gUGxhaXROb2RlLnBhcmVudCh0aGlzLmJvYXJkLCBQbGFpdEJvYXJkLmZpbmRQYXRoKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCkpIGFzIEZvcmNlQXRsYXNFbGVtZW50O1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU5vZGVJZCA9IHNlbGVjdEVsZW1lbnRzWzBdPy5pZDtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVOb2RlSWQgPT09IHRoaXMuZWxlbWVudC5pZDtcbiAgICAgICAgdGhpcy5ub2RlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKHRoaXMuZWxlbWVudCwgdGhpcy5nZXRFbGVtZW50RygpLCB7XG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIG9wYWNpdHk6IGlzRmlyc3REZXB0aE5vZGUodGhpcy5lbGVtZW50LmlkLCBhY3RpdmVOb2RlSWQsIHBhcmVudCkgPyAxIDogU0VDT05EX0RFUFRIX05PREVfQUxQSEFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Db250ZXh0Q2hhbmdlZChcbiAgICAgICAgdmFsdWU6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8Rm9yY2VBdGxhc05vZGVFbGVtZW50LCBQbGFpdEJvYXJkPixcbiAgICAgICAgcHJldmlvdXM6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8Rm9yY2VBdGxhc05vZGVFbGVtZW50LCBQbGFpdEJvYXJkPlxuICAgICkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHByZXZpb3VzICYmIHZhbHVlLnNlbGVjdGVkICE9PSBwcmV2aW91cy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdmFsdWUucGFyZW50IGFzIGFueTtcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyh0aGlzLmJvYXJkLCBbdmFsdWUuZWxlbWVudF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBnZXROb2RlcyhwYXJlbnQpO1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlR2VuZXJhdG9yID0gZ2V0Tm9kZUdlbmVyYXRvcihub2RlKTtcbiAgICAgICAgICAgICAgICBub2RlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0RGVwdGggPSBzZWxlY3RFbGVtZW50cy5sZW5ndGggPiAwICYmIGlzRmlyc3REZXB0aE5vZGUobm9kZS5pZCwgc2VsZWN0RWxlbWVudHNbMF0uaWQsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgbm9kZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyhub2RlLCB0aGlzLmdldEVsZW1lbnRHKCksIHtcbiAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IHNlbGVjdEVsZW1lbnRzPy5bMF0/LmlkID09PSBub2RlLmlkLFxuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiBzZWxlY3RFbGVtZW50cy5sZW5ndGggPT09IDAgPyAxIDogaXNGaXJzdERlcHRoID8gMSA6IFNFQ09ORF9ERVBUSF9OT0RFX0FMUEhBXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRlZEVkZ2VzID0gZ2V0RWRnZXNJblNvdXJjZU9yVGFyZ2V0KHZhbHVlLmVsZW1lbnQuaWQsIHBhcmVudCk7XG4gICAgICAgICAgICBhc3NvY2lhdGVkRWRnZXMuZm9yRWFjaChlZGdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlR2VuZXJhdG9yID0gZ2V0RWRnZUdlbmVyYXRvcihlZGdlKTtcbiAgICAgICAgICAgICAgICBlZGdlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBlZGdlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKGVkZ2UsIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudExvd2VySG9zdCh0aGlzLmJvYXJkKSwgZ2V0RWRnZUdlbmVyYXRvckRhdGEoZWRnZSwgdGhpcy5ib2FyZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVUZXh0KHByZXZpb3VzRWxlbWVudDogRm9yY2VBdGxhc05vZGVFbGVtZW50LCBjdXJyZW50RWxlbWVudDogRm9yY2VBdGxhc05vZGVFbGVtZW50KSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -71,7 +71,7 @@ export function drawEdge(startPoint, endPoint, direction, isMutual, isTargetSelf
|
|
|
71
71
|
}
|
|
72
72
|
path.setAttribute('fill', 'none');
|
|
73
73
|
path.setAttribute('stroke', DEFAULT_LINE_STYLES.color[direction]);
|
|
74
|
-
path.setAttribute('opacity', DEFAULT_LINE_STYLES.opacity.toString());
|
|
74
|
+
path.setAttribute('opacity', DEFAULT_LINE_STYLES.opacity[direction].toString());
|
|
75
75
|
g.append(path);
|
|
76
76
|
return {
|
|
77
77
|
g,
|
|
@@ -88,4 +88,4 @@ export function drawParticle(board, startPoint, direction) {
|
|
|
88
88
|
pointG.setAttribute('transform', `translate(${startPoint[0]}, ${startPoint[1]})`);
|
|
89
89
|
return pointG;
|
|
90
90
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvZHJhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQVMsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RILE9BQU8sUUFBUSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RELE9BQU8sRUFDSCw0QkFBNEIsRUFDNUIsbUNBQW1DLEVBQ25DLHdDQUF3QyxFQUN4QywwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBRXhCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RCxNQUFNLFVBQVUsUUFBUSxDQUNwQixLQUFpQixFQUNqQixJQUEyQixFQUMzQixLQUFZLEVBQ1osT0FBcUU7SUFFckUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBZTtRQUMzQixHQUFHLG1CQUFtQjtRQUN0QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDekIsQ0FBQztJQUNGLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksaUJBQWlCLENBQUM7SUFDOUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENB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ZWN0aW9uLCBOb2RlU3R5bGVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIGNyZWF0ZUZvcmVpZ25PYmplY3QsIGNyZWF0ZUcsIGNyZWF0ZVBhdGgsIGRyYXdDaXJjbGUsIG5vcm1hbGl6ZVBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IGdldEFycm93IGZyb20gJy4uLy4uL3BlcmZlY3QtYXJyb3dzL2dldC1hcnJvdyc7XG5pbXBvcnQge1xuICAgIEFDVElWRV9CQUNLR1JPVU5EX05PREVfQUxQSEEsXG4gICAgREVGQVVMVF9BQ1RJVkVfTk9ERV9TSVpFX01VTFRJUExJRVIsXG4gICAgREVGQVVMVF9BQ1RJVkVfV0FWRV9OT0RFX1NJWkVfTVVMVElQTElFUixcbiAgICBERUZBVUxUX0VER0VfUEFSVElDTEVfU0laRSxcbiAgICBERUZBVUxUX0xJTkVfU1RZTEVTLFxuICAgIERFRkFVTFRfTk9ERV9MQUJFTF9IRUlHSFQsXG4gICAgREVGQVVMVF9OT0RFX0xBQkVMX1NUWUxFLFxuICAgIERFRkFVTFRfTk9ERV9MQUJFTF9XSURUSCxcbiAgICBERUZBVUxUX05PREVfU0laRSxcbiAgICBERUZBVUxUX05PREVfU1RZTEVTLFxuICAgIE5PREVfTEFCRUxfQ0xBU1NfTkFNRSxcbiAgICBTRUNPTkRfREVQVEhfTk9ERV9BTFBIQVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgREVGQVVMVF9TVFlMRVMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdOb2RlKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG5vZGU6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgb3B0aW9uczogeyBpY29uRz86IFNWR0dFbGVtZW50OyBpc0FjdGl2ZTogYm9vbGVhbjsgb3BhY2l0eT86IG51bWJlciB9XG4pIHtcbiAgICBjb25zdCByb3VnaFNWRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgIGNvbnN0IG5vZGVTdHlsZXM6IE5vZGVTdHlsZXMgPSB7XG4gICAgICAgIC4uLkRFRkFVTFRfTk9ERV9TVFlMRVMsXG4gICAgICAgIC4uLihub2RlLnN0eWxlcyB8fCB7fSlcbiAgICB9O1xuICAgIGxldCB7IHgsIHkgfSA9IG5vcm1hbGl6ZVBvaW50KHBvaW50KTtcbiAgICBsZXQgZGlhbWV0ZXIgPSBub2RlLnNpemUgPz8gREVGQVVMVF9OT0RFX1NJWkU7XG4gICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUpIHtcbiAgICAgICAgZGlhbWV0ZXIgPSBkaWFtZXRlciAqIERFRkFVTFRfQUNUSVZFX05PREVfU0laRV9NVUxUSVBMSUVSO1xuICAgIH1cbiAgICBjb25zdCBub2RlRyA9IGRyYXdDaXJjbGUocm91Z2hTVkcsIFt4LCB5XSwgZGlhbWV0ZXIsIG5vZGVTdHlsZXMpO1xuICAgIGNvbnN0IGxhYmVsV2lkdGggPSBub2RlLnN0eWxlcz8ubGFiZWxXaWR0aCA/PyBERUZBVUxUX05PREVfTEFCRUxfV0lEVEg7XG4gICAgY29uc3QgbGFiZWxIZWlnaHQgPSBub2RlLnN0eWxlcz8ubGFiZWxIZWlnaHQgPz8gREVGQVVMVF9OT0RFX0xBQkVMX0hFSUdIVDtcbiAgICBjb25zdCB0ZXh0Rm9yZWlnbk9iamVjdCA9IGNyZWF0ZUZvcmVpZ25PYmplY3QoeCAtIGxhYmVsV2lkdGggLyAyLCB5LCBsYWJlbFdpZHRoLCBsYWJlbEhlaWdodCk7XG4gICAgY29uc3QgdGV4dENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRleHRDb250YWluZXIuY2xhc3NMaXN0LmFkZChOT0RFX0xBQkVMX0NMQVNTX05BTUUpO1xuICAgIHRleHRDb250YWluZXIuc2V0QXR0cmlidXRlKCdzdHlsZScsIERFRkFVTFRfTk9ERV9MQUJFTF9TVFlMRSk7XG4gICAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICB0ZXh0LmlubmVyVGV4dCA9IG5vZGUubGFiZWw7XG4gICAgdGV4dENvbnRhaW5lci5hcHBlbmQodGV4dCk7XG4gICAgdGV4dEZvcmVpZ25PYmplY3QuYXBwZW5kKHRleHRDb250YWluZXIpO1xuICAgIGlmIChvcHRpb25zLmlzQWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IHdhdmVEaWFtZXRlciA9IGRpYW1ldGVyICogREVGQVVMVF9BQ1RJVkVfV0FWRV9OT0RFX1NJWkVfTVVMVElQTElFUjtcbiAgICAgICAgY29uc3Qgd2F2ZUNpcmNsZSA9IGRyYXdDaXJjbGUocm91Z2hTVkcsIFt4LCB5XSwgd2F2ZURpYW1ldGVyLCBub2RlU3R5bGVzKTtcbiAgICAgICAgd2F2ZUNpcmNsZS5zZXRBdHRyaWJ1dGUoJ29wYWNpdHknLCBBQ1RJVkVfQkFDS0dST1VORF9OT0RFX0FMUEhBLnRvU3RyaW5nKCkpO1xuICAgICAgICBub2RlRy5hcHBlbmQod2F2ZUNpcmNsZSk7XG4gICAgICAgIHRleHRGb3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZSgneScsIGAke3kgKyB3YXZlRGlhbWV0ZXIgLyAyfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRGb3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZSgneScsIGAke3kgKyBkaWFtZXRlciAvIDJ9YCk7XG4gICAgICAgIG5vZGVHLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIChvcHRpb25zLm9wYWNpdHkgPz8gMSkudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmljb25HKSB7XG4gICAgICAgIG5vZGVHLmFwcGVuZChvcHRpb25zLmljb25HKTtcbiAgICB9XG4gICAgbm9kZUcuYXBwZW5kKHRleHRGb3JlaWduT2JqZWN0KTtcbiAgICByZXR1cm4gbm9kZUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RWRnZShzdGFydFBvaW50OiBQb2ludCwgZW5kUG9pbnQ6IFBvaW50LCBkaXJlY3Rpb246IEVkZ2VEaXJlY3Rpb24sIGlzTXV0dWFsOiBib29sZWFuLCBpc1RhcmdldFNlbGY/OiBib29sZWFuKSB7XG4gICAgY29uc3Qgbm9kZVJhZGl1cyA9IERFRkFVTFRfTk9ERV9TSVpFIC8gMjtcbiAgICBjb25zdCBhcnJvdyA9IGdldEFycm93KHN0YXJ0UG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSwge1xuICAgICAgICBzdHJldGNoOiAwLjQsXG4gICAgICAgIGZsaXA6IGRpcmVjdGlvbiA9PT0gRWRnZURpcmVjdGlvbi5OT05FID8gZmFsc2UgOiBpc011dHVhbCxcbiAgICAgICAgcGFkRW5kOiBub2RlUmFkaXVzLFxuICAgICAgICBwYWRTdGFydDogbm9kZVJhZGl1c1xuICAgIH0pO1xuICAgIGNvbnN0IFtzeCwgc3ksIGN4LCBjeSwgZXgsIGV5LCBhZSwgYXMsIGVjXSA9IGFycm93O1xuICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgY29uc3QgcGF0aCA9IGNyZWF0ZVBhdGgoKTtcbiAgICBpZiAoIWlzVGFyZ2V0U2VsZikge1xuICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGBNJHtzeH0sJHtzeX0gUSR7Y3h9LCR7Y3l9ICR7ZXh9LCR7ZXl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeCA9IHN0YXJ0UG9pbnRbMF07XG4gICAgICAgIGNvbnN0IHkgPSBzdGFydFBvaW50WzFdO1xuICAgICAgICBjb25zdCBiZXNzZWxYID0gNDA7XG4gICAgICAgIGNvbnN0IGJlc3NlbFkgPSA3NTtcbiAgICAgICAgY29uc3QgYW5nbGUgPSA1NTtcbiAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IG5vZGVSYWRpdXMgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSBub2RlUmFkaXVzICogTWF0aC5zaW4oYW5nbGVSYWQpO1xuICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgIGBNICR7eCAtIG9mZnNldFh9LCR7eSAtIG9mZnNldFl9XG4gICAgICAgICAgICBDICR7eCAtIGJlc3NlbFh9LCR7eSAtIGJlc3NlbFl9LCAke3ggKyBiZXNzZWxYfSAke3kgLSBiZXNzZWxZfVxuICAgICAgICAgICAgJHt4ICsgb2Zmc2V0WH0sJHt5IC0gb2Zmc2V0WX1gXG4gICAgICAgICk7XG4gICAgfVxuICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgREVGQVVMVF9MSU5FX1NUWUxFUy5jb2xvcltkaXJlY3Rpb25dKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIERFRkFVTFRfTElORV9TVFlMRVMub3BhY2l0eS50b1N0cmluZygpKTtcbiAgICBnLmFwcGVuZChwYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnLFxuICAgICAgICBwYXRoXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdQYXJ0aWNsZShib2FyZDogUGxhaXRCb2FyZCwgc3RhcnRQb2ludDogUG9pbnQsIGRpcmVjdGlvbjogRWRnZURpcmVjdGlvbikge1xuICAgIGNvbnN0IHJvdWdoU1ZHID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgY29uc3QgcG9pbnRHID0gZHJhd0NpcmNsZShyb3VnaFNWRywgWzAsIDBdLCBERUZBVUxUX0VER0VfUEFSVElDTEVfU0laRSwge1xuICAgICAgICAuLi5ERUZBVUxUX1NUWUxFUyxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAsXG4gICAgICAgIGZpbGw6IERFRkFVTFRfTElORV9TVFlMRVMuY29sb3JbZGlyZWN0aW9uXVxuICAgIH0pO1xuICAgIHBvaW50Ry5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtzdGFydFBvaW50WzBdfSwgJHtzdGFydFBvaW50WzFdfSlgKTtcbiAgICByZXR1cm4gcG9pbnRHO1xufVxuIl19
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvZHJhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQVMsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RILE9BQU8sUUFBUSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RELE9BQU8sRUFDSCw0QkFBNEIsRUFDNUIsbUNBQW1DLEVBQ25DLHdDQUF3QyxFQUN4QywwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIscUJBQXFCLEVBRXhCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RCxNQUFNLFVBQVUsUUFBUSxDQUNwQixLQUFpQixFQUNqQixJQUEyQixFQUMzQixLQUFZLEVBQ1osT0FBcUU7SUFFckUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBZTtRQUMzQixHQUFHLG1CQUFtQjtRQUN0QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDekIsQ0FBQztJQUNGLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksaUJBQWlCLENBQUM7SUFDOUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENB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bXBvcnQgeyBFZGdlRGlyZWN0aW9uLCBOb2RlU3R5bGVzIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIGNyZWF0ZUZvcmVpZ25PYmplY3QsIGNyZWF0ZUcsIGNyZWF0ZVBhdGgsIGRyYXdDaXJjbGUsIG5vcm1hbGl6ZVBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IGdldEFycm93IGZyb20gJy4uLy4uL3BlcmZlY3QtYXJyb3dzL2dldC1hcnJvdyc7XG5pbXBvcnQge1xuICAgIEFDVElWRV9CQUNLR1JPVU5EX05PREVfQUxQSEEsXG4gICAgREVGQVVMVF9BQ1RJVkVfTk9ERV9TSVpFX01VTFRJUExJRVIsXG4gICAgREVGQVVMVF9BQ1RJVkVfV0FWRV9OT0RFX1NJWkVfTVVMVElQTElFUixcbiAgICBERUZBVUxUX0VER0VfUEFSVElDTEVfU0laRSxcbiAgICBERUZBVUxUX0xJTkVfU1RZTEVTLFxuICAgIERFRkFVTFRfTk9ERV9MQUJFTF9IRUlHSFQsXG4gICAgREVGQVVMVF9OT0RFX0xBQkVMX1NUWUxFLFxuICAgIERFRkFVTFRfTk9ERV9MQUJFTF9XSURUSCxcbiAgICBERUZBVUxUX05PREVfU0laRSxcbiAgICBERUZBVUxUX05PREVfU1RZTEVTLFxuICAgIE5PREVfTEFCRUxfQ0xBU1NfTkFNRSxcbiAgICBTRUNPTkRfREVQVEhfTk9ERV9BTFBIQVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgREVGQVVMVF9TVFlMRVMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdOb2RlKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG5vZGU6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgb3B0aW9uczogeyBpY29uRz86IFNWR0dFbGVtZW50OyBpc0FjdGl2ZTogYm9vbGVhbjsgb3BhY2l0eT86IG51bWJlciB9XG4pIHtcbiAgICBjb25zdCByb3VnaFNWRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgIGNvbnN0IG5vZGVTdHlsZXM6IE5vZGVTdHlsZXMgPSB7XG4gICAgICAgIC4uLkRFRkFVTFRfTk9ERV9TVFlMRVMsXG4gICAgICAgIC4uLihub2RlLnN0eWxlcyB8fCB7fSlcbiAgICB9O1xuICAgIGxldCB7IHgsIHkgfSA9IG5vcm1hbGl6ZVBvaW50KHBvaW50KTtcbiAgICBsZXQgZGlhbWV0ZXIgPSBub2RlLnNpemUgPz8gREVGQVVMVF9OT0RFX1NJWkU7XG4gICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUpIHtcbiAgICAgICAgZGlhbWV0ZXIgPSBkaWFtZXRlciAqIERFRkFVTFRfQUNUSVZFX05PREVfU0laRV9NVUxUSVBMSUVSO1xuICAgIH1cbiAgICBjb25zdCBub2RlRyA9IGRyYXdDaXJjbGUocm91Z2hTVkcsIFt4LCB5XSwgZGlhbWV0ZXIsIG5vZGVTdHlsZXMpO1xuICAgIGNvbnN0IGxhYmVsV2lkdGggPSBub2RlLnN0eWxlcz8ubGFiZWxXaWR0aCA/PyBERUZBVUxUX05PREVfTEFCRUxfV0lEVEg7XG4gICAgY29uc3QgbGFiZWxIZWlnaHQgPSBub2RlLnN0eWxlcz8ubGFiZWxIZWlnaHQgPz8gREVGQVVMVF9OT0RFX0xBQkVMX0hFSUdIVDtcbiAgICBjb25zdCB0ZXh0Rm9yZWlnbk9iamVjdCA9IGNyZWF0ZUZvcmVpZ25PYmplY3QoeCAtIGxhYmVsV2lkdGggLyAyLCB5LCBsYWJlbFdpZHRoLCBsYWJlbEhlaWdodCk7XG4gICAgY29uc3QgdGV4dENvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRleHRDb250YWluZXIuY2xhc3NMaXN0LmFkZChOT0RFX0xBQkVMX0NMQVNTX05BTUUpO1xuICAgIHRleHRDb250YWluZXIuc2V0QXR0cmlidXRlKCdzdHlsZScsIERFRkFVTFRfTk9ERV9MQUJFTF9TVFlMRSk7XG4gICAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICB0ZXh0LmlubmVyVGV4dCA9IG5vZGUubGFiZWw7XG4gICAgdGV4dENvbnRhaW5lci5hcHBlbmQodGV4dCk7XG4gICAgdGV4dEZvcmVpZ25PYmplY3QuYXBwZW5kKHRleHRDb250YWluZXIpO1xuICAgIGlmIChvcHRpb25zLmlzQWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IHdhdmVEaWFtZXRlciA9IGRpYW1ldGVyICogREVGQVVMVF9BQ1RJVkVfV0FWRV9OT0RFX1NJWkVfTVVMVElQTElFUjtcbiAgICAgICAgY29uc3Qgd2F2ZUNpcmNsZSA9IGRyYXdDaXJjbGUocm91Z2hTVkcsIFt4LCB5XSwgd2F2ZURpYW1ldGVyLCBub2RlU3R5bGVzKTtcbiAgICAgICAgd2F2ZUNpcmNsZS5zZXRBdHRyaWJ1dGUoJ29wYWNpdHknLCBBQ1RJVkVfQkFDS0dST1VORF9OT0RFX0FMUEhBLnRvU3RyaW5nKCkpO1xuICAgICAgICBub2RlRy5hcHBlbmQod2F2ZUNpcmNsZSk7XG4gICAgICAgIHRleHRGb3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZSgneScsIGAke3kgKyB3YXZlRGlhbWV0ZXIgLyAyfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRGb3JlaWduT2JqZWN0LnNldEF0dHJpYnV0ZSgneScsIGAke3kgKyBkaWFtZXRlciAvIDJ9YCk7XG4gICAgICAgIG5vZGVHLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIChvcHRpb25zLm9wYWNpdHkgPz8gMSkudG9TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmljb25HKSB7XG4gICAgICAgIG5vZGVHLmFwcGVuZChvcHRpb25zLmljb25HKTtcbiAgICB9XG4gICAgbm9kZUcuYXBwZW5kKHRleHRGb3JlaWduT2JqZWN0KTtcbiAgICByZXR1cm4gbm9kZUc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RWRnZShzdGFydFBvaW50OiBQb2ludCwgZW5kUG9pbnQ6IFBvaW50LCBkaXJlY3Rpb246IEVkZ2VEaXJlY3Rpb24sIGlzTXV0dWFsOiBib29sZWFuLCBpc1RhcmdldFNlbGY/OiBib29sZWFuKSB7XG4gICAgY29uc3Qgbm9kZVJhZGl1cyA9IERFRkFVTFRfTk9ERV9TSVpFIC8gMjtcbiAgICBjb25zdCBhcnJvdyA9IGdldEFycm93KHN0YXJ0UG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSwge1xuICAgICAgICBzdHJldGNoOiAwLjQsXG4gICAgICAgIGZsaXA6IGRpcmVjdGlvbiA9PT0gRWRnZURpcmVjdGlvbi5OT05FID8gZmFsc2UgOiBpc011dHVhbCxcbiAgICAgICAgcGFkRW5kOiBub2RlUmFkaXVzLFxuICAgICAgICBwYWRTdGFydDogbm9kZVJhZGl1c1xuICAgIH0pO1xuICAgIGNvbnN0IFtzeCwgc3ksIGN4LCBjeSwgZXgsIGV5LCBhZSwgYXMsIGVjXSA9IGFycm93O1xuICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgY29uc3QgcGF0aCA9IGNyZWF0ZVBhdGgoKTtcbiAgICBpZiAoIWlzVGFyZ2V0U2VsZikge1xuICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGBNJHtzeH0sJHtzeX0gUSR7Y3h9LCR7Y3l9ICR7ZXh9LCR7ZXl9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeCA9IHN0YXJ0UG9pbnRbMF07XG4gICAgICAgIGNvbnN0IHkgPSBzdGFydFBvaW50WzFdO1xuICAgICAgICBjb25zdCBiZXNzZWxYID0gNDA7XG4gICAgICAgIGNvbnN0IGJlc3NlbFkgPSA3NTtcbiAgICAgICAgY29uc3QgYW5nbGUgPSA1NTtcbiAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IG5vZGVSYWRpdXMgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSBub2RlUmFkaXVzICogTWF0aC5zaW4oYW5nbGVSYWQpO1xuICAgICAgICBwYXRoLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgIGBNICR7eCAtIG9mZnNldFh9LCR7eSAtIG9mZnNldFl9XG4gICAgICAgICAgICBDICR7eCAtIGJlc3NlbFh9LCR7eSAtIGJlc3NlbFl9LCAke3ggKyBiZXNzZWxYfSAke3kgLSBiZXNzZWxZfVxuICAgICAgICAgICAgJHt4ICsgb2Zmc2V0WH0sJHt5IC0gb2Zmc2V0WX1gXG4gICAgICAgICk7XG4gICAgfVxuICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgREVGQVVMVF9MSU5FX1NUWUxFUy5jb2xvcltkaXJlY3Rpb25dKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIERFRkFVTFRfTElORV9TVFlMRVMub3BhY2l0eVtkaXJlY3Rpb25dLnRvU3RyaW5nKCkpO1xuICAgIGcuYXBwZW5kKHBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGcsXG4gICAgICAgIHBhdGhcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd1BhcnRpY2xlKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGFydFBvaW50OiBQb2ludCwgZGlyZWN0aW9uOiBFZGdlRGlyZWN0aW9uKSB7XG4gICAgY29uc3Qgcm91Z2hTVkcgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICBjb25zdCBwb2ludEcgPSBkcmF3Q2lyY2xlKHJvdWdoU1ZHLCBbMCwgMF0sIERFRkFVTFRfRURHRV9QQVJUSUNMRV9TSVpFLCB7XG4gICAgICAgIC4uLkRFRkFVTFRfU1RZTEVTLFxuICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgZmlsbDogREVGQVVMVF9MSU5FX1NUWUxFUy5jb2xvcltkaXJlY3Rpb25dXG4gICAgfSk7XG4gICAgcG9pbnRHLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3N0YXJ0UG9pbnRbMF19LCAke3N0YXJ0UG9pbnRbMV19KWApO1xuICAgIHJldHVybiBwb2ludEc7XG59XG4iXX0=
|
|
@@ -50,7 +50,11 @@ const DEFAULT_LINE_STYLES = {
|
|
|
50
50
|
[EdgeDirection.OUT]: '#6698FF',
|
|
51
51
|
[EdgeDirection.NONE]: `#eee`
|
|
52
52
|
},
|
|
53
|
-
opacity:
|
|
53
|
+
opacity: {
|
|
54
|
+
[EdgeDirection.IN]: 0.4,
|
|
55
|
+
[EdgeDirection.OUT]: 0.4,
|
|
56
|
+
[EdgeDirection.NONE]: 1
|
|
57
|
+
}
|
|
54
58
|
};
|
|
55
59
|
const DEFAULT_EDGE_PARTICLE_SIZE = 4;
|
|
56
60
|
|
|
@@ -87,13 +91,18 @@ class ForceAtlasFlavour extends CommonElementFlavour {
|
|
|
87
91
|
}
|
|
88
92
|
});
|
|
89
93
|
circular.assign(this.graph);
|
|
94
|
+
const nodeCount = this.graph.nodes().length;
|
|
90
95
|
const settings = forceAtlas2.inferSettings(this.graph);
|
|
91
|
-
settings.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
96
|
+
settings.scalingRatio = 450;
|
|
97
|
+
if (nodeCount > 5) {
|
|
98
|
+
settings.gravity = 0.2;
|
|
99
|
+
settings.adjustSizes = false;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
settings.gravity = 0;
|
|
103
|
+
settings.adjustSizes = true;
|
|
104
|
+
}
|
|
105
|
+
const positions = forceAtlas2(this.graph, { iterations: 500, settings });
|
|
97
106
|
this.element.children?.forEach(child => {
|
|
98
107
|
if (ForceAtlasElement.isForceAtlasNodeElement(child)) {
|
|
99
108
|
const pos = positions[child.id];
|
|
@@ -381,7 +390,7 @@ function drawEdge(startPoint, endPoint, direction, isMutual, isTargetSelf) {
|
|
|
381
390
|
}
|
|
382
391
|
path.setAttribute('fill', 'none');
|
|
383
392
|
path.setAttribute('stroke', DEFAULT_LINE_STYLES.color[direction]);
|
|
384
|
-
path.setAttribute('opacity', DEFAULT_LINE_STYLES.opacity.toString());
|
|
393
|
+
path.setAttribute('opacity', DEFAULT_LINE_STYLES.opacity[direction].toString());
|
|
385
394
|
g.append(path);
|
|
386
395
|
return {
|
|
387
396
|
g,
|
|
@@ -595,7 +604,7 @@ class ForceAtlasNodeFlavour extends CommonElementFlavour {
|
|
|
595
604
|
const selectElements = getSelectedElements(this.board);
|
|
596
605
|
const activeNodeId = selectElements[0]?.id;
|
|
597
606
|
const isActive = activeNodeId === this.element.id;
|
|
598
|
-
this.nodeGenerator.processDrawing(this.element,
|
|
607
|
+
this.nodeGenerator.processDrawing(this.element, this.getElementG(), {
|
|
599
608
|
isActive,
|
|
600
609
|
opacity: isFirstDepthNode(this.element.id, activeNodeId, parent) ? 1 : SECOND_DEPTH_NODE_ALPHA
|
|
601
610
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-graph-viz.mjs","sources":["../../../packages/graph-viz/src/constants/default.ts","../../../packages/graph-viz/src/force-atlas/types.ts","../../../packages/graph-viz/src/force-atlas/constants.ts","../../../packages/graph-viz/src/interfaces/element.ts","../../../packages/graph-viz/src/force-atlas/force-atlas.flavour.ts","../../../packages/graph-viz/src/perfect-arrows/utils.ts","../../../packages/graph-viz/src/perfect-arrows/get-arrow.ts","../../../packages/graph-viz/src/force-atlas/utils/draw.ts","../../../packages/graph-viz/src/force-atlas/generators/edge.generator.ts","../../../packages/graph-viz/src/force-atlas/utils/edge.ts","../../../packages/graph-viz/src/force-atlas/utils/node.ts","../../../packages/graph-viz/src/force-atlas/generators/node.generator.ts","../../../packages/graph-viz/src/force-atlas/node.flavour.ts","../../../packages/graph-viz/src/force-atlas/edge.flavour.ts","../../../packages/graph-viz/src/force-atlas/with-node-icon.ts","../../../packages/graph-viz/src/force-atlas/with-force-atlas.ts","../../../packages/graph-viz/src/force-atlas/core/node-icon-base.component.ts","../../../packages/graph-viz/src/public-api.ts","../../../packages/graph-viz/src/plait-graph-viz.ts"],"sourcesContent":["import { Options } from 'roughjs/bin/core';\n\nexport const DEFAULT_STYLES: Options = {\n fillStyle: 'solid',\n strokeWidth: 1\n};\n","import { GeneratorExtraData } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport enum EdgeDirection {\n IN,\n OUT,\n NONE\n}\n\nexport interface NodeStyles {\n stroke?: string;\n strokeWidth?: number;\n fill?: string;\n fillStyle?: string;\n activeStroke?: string;\n activeFill?: string;\n borderRadius?: number;\n hoverStroke?: string;\n}\n\nexport interface EdgeGeneratorData extends GeneratorExtraData {\n startPoint: Point;\n endPoint: Point;\n isSourceActive: boolean;\n isTargetActive: boolean;\n direction: EdgeDirection;\n isTargetSelf?: boolean;\n}\n\nexport interface NodeGeneratorData extends GeneratorExtraData {\n isActive: boolean;\n opacity: number;\n}\n\nexport interface NodeIconItem {\n name: string;\n fontSize?: number;\n color?: string;\n}\n","import { Options } from 'roughjs/bin/core';\nimport { DEFAULT_STYLES } from '../constants/default';\nimport { EdgeDirection } from './types';\n\nexport const DEFAULT_EDGE_STYLES: Options = {\n ...DEFAULT_STYLES,\n stroke: '#ddd'\n};\n\nexport const DEFAULT_NODE_SIZE = 30;\n\nexport const DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER = 1.2;\n\nexport const DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER = 1.5;\n\nexport const DEFAULT_NODE_LABEL_MARGIN_TOP = 4;\n\nexport const DEFAULT_NODE_LABEL_FONT_SIZE = 12;\n\nexport const DEFAULT_NODE_LABEL_WIDTH = 72;\n\nexport const DEFAULT_NODE_LABEL_HEIGHT = 22;\n\nexport const DEFAULT_NODE_LABEL_STYLE = `user-select:none;max-width:${DEFAULT_NODE_LABEL_WIDTH}px;text-align:center;line-height:${DEFAULT_NODE_LABEL_HEIGHT}px;font-size:${DEFAULT_NODE_LABEL_FONT_SIZE}px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;`;\n\nexport const NODE_LABEL_CLASS_NAME = 'force-atlas-node-label';\n\nexport const SECOND_DEPTH_NODE_ALPHA = 0.5;\n\nexport const SECOND_DEPTH_LINE_ALPHA = 0.5;\n\nexport const ACTIVE_BACKGROUND_NODE_ALPHA = 0.1;\n\nexport const NODE_ICON_CLASS_NAME = 'force-atlas-node-icon';\n\nexport const ACTIVE_NODE_ICON_CLASS_NAME = 'force-atlas-node-icon-active';\n\nexport const NODE_ICON_FONT_SIZE = 16;\n\nexport const ACTIVE_NODE_ICON_FONT_SIZE = 18;\n\nexport const DEFAULT_NODE_BACKGROUND_COLOR = '#9c9cfb';\n\nexport const DEFAULT_NODE_ICON_COLOR = '#fff';\n\nexport const DEFAULT_NODE_STYLES: Options = {\n ...DEFAULT_STYLES,\n fill: DEFAULT_NODE_BACKGROUND_COLOR,\n strokeWidth: 0\n};\n\nexport const DEFAULT_NODE_SCALING_RATIO = 20;\n\nexport const DEFAULT_LINE_STYLES = {\n color: {\n [EdgeDirection.IN]: '#73D897',\n [EdgeDirection.OUT]: '#6698FF',\n [EdgeDirection.NONE]: `#eee`\n },\n opacity: 0.4\n};\n\nexport const DEFAULT_EDGE_PARTICLE_SIZE = 4;\n","import { PlaitElement } from '@plait/core';\nimport { NodeIconItem } from '../force-atlas/types';\nexport interface ForceAtlasNodeElement extends PlaitElement {\n label: string;\n icon: string | NodeIconItem;\n size?: number;\n isActive?: boolean;\n}\n\nexport interface ForceAtlasEdgeElement extends PlaitElement {\n source: string;\n target: string;\n}\n\nexport interface ForceAtlasElement extends PlaitElement {\n children: (ForceAtlasNodeElement | ForceAtlasEdgeElement)[];\n}\n\nexport const ForceAtlasElement = {\n isForceAtlas: (value: any) => {\n return value?.type === 'force-atlas';\n },\n isForceAtlasNodeElement: (value: any): value is ForceAtlasNodeElement => {\n return value && value.label && value.icon;\n },\n isForceAtlasEdgeElement: (value: any): value is ForceAtlasEdgeElement => {\n return value && value.source && value.target;\n }\n};\n","import { CommonElementFlavour } from '@plait/common';\nimport { OnContextChanged, PlaitBoard, PlaitPluginElementContext, cacheSelectedElements } from '@plait/core';\nimport Graph from 'graphology';\nimport circular from 'graphology-layout/circular';\nimport forceAtlas2 from 'graphology-layout-forceatlas2';\nimport { ForceAtlasElement, ForceAtlasNodeElement } from '../interfaces';\nimport { DEFAULT_NODE_SCALING_RATIO, DEFAULT_NODE_SIZE } from './constants';\n\nexport class ForceAtlasFlavour extends CommonElementFlavour<ForceAtlasElement, PlaitBoard>\n implements OnContextChanged<ForceAtlasElement, PlaitBoard> {\n graph!: Graph<ForceAtlasNodeElement>;\n\n constructor() {\n super();\n }\n\n initializeGraph() {\n this.graph = new Graph<ForceAtlasNodeElement>();\n this.element.children?.forEach(child => {\n if (ForceAtlasElement.isForceAtlasNodeElement(child)) {\n if (typeof child?.size === 'undefined') {\n child.size = DEFAULT_NODE_SIZE;\n }\n if (child.isActive) {\n cacheSelectedElements(this.board, [child]);\n }\n this.graph.addNode(child.id, child);\n } else if (ForceAtlasElement.isForceAtlasEdgeElement(child)) {\n this.graph.addEdge(child.source, child.target);\n }\n });\n circular.assign(this.graph);\n const settings = forceAtlas2.inferSettings(this.graph);\n settings.strongGravityMode = false;\n settings.linLogMode = true;\n settings.gravity = 2;\n settings.adjustSizes = true;\n settings.scalingRatio = DEFAULT_NODE_SCALING_RATIO;\n const positions = forceAtlas2(this.graph, { iterations: 1000, settings });\n this.element.children?.forEach(child => {\n if (ForceAtlasElement.isForceAtlasNodeElement(child)) {\n const pos = positions[child.id];\n child.points = [[pos.x, pos.y]];\n }\n });\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGraph();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<ForceAtlasElement, PlaitBoard>,\n previous: PlaitPluginElementContext<ForceAtlasElement, PlaitBoard>\n ) {}\n\n updateText(previousElement: ForceAtlasElement, currentElement: ForceAtlasElement) {}\n\n destroy(): void {\n super.destroy();\n }\n}\n","// Credits to perfect-arrows\n// https://github.com/steveruizok/perfect-arrows/blob/master/src/lib/utils.ts\n\nconst PI = Math.PI;\n\n/**\n * Modulate a value between two ranges.\n * @param value\n * @param rangeA from [low, high]\n * @param rangeB to [low, high]\n * @param clamp\n */\nexport function modulate(value: number, rangeA: number[], rangeB: number[], clamp = false) {\n const [fromLow, fromHigh] = rangeA;\n const [toLow, toHigh] = rangeB;\n const result = toLow + ((value - fromLow) / (fromHigh - fromLow)) * (toHigh - toLow);\n if (clamp === true) {\n if (toLow < toHigh) {\n if (result < toLow) {\n return toLow;\n }\n if (result > toHigh) {\n return toHigh;\n }\n } else {\n if (result > toLow) {\n return toLow;\n }\n if (result < toHigh) {\n return toHigh;\n }\n }\n }\n return result;\n}\n\n/**\n * Rotate a point around a center.\n * @param x The x-axis coordinate of the point.\n * @param y The y-axis coordinate of the point.\n * @param cx The x-axis coordinate of the point to rotate round.\n * @param cy The y-axis coordinate of the point to rotate round.\n * @param angle The distance (in radians) to rotate.\n */\nexport function rotatePoint(x: number, y: number, cx: number, cy: number, angle: number) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n\n const px = x - cx;\n const py = y - cy;\n\n const nx = px * c - py * s;\n const ny = px * s + py * c;\n\n return [nx + cx, ny + cy];\n}\n\n/**\n * Get the distance between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n */\nexport function getDistance(x0: number, y0: number, x1: number, y1: number) {\n return Math.hypot(y1 - y0, x1 - x0);\n}\n\n/**\n * Get an angle (radians) between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n */\nexport function getAngle(x0: number, y0: number, x1: number, y1: number) {\n return Math.atan2(y1 - y0, x1 - x0);\n}\n\n/**\n * Move a point in an angle by a distance.\n * @param x0\n * @param y0\n * @param a angle (radians)\n * @param d distance\n */\nexport function projectPoint(x0: number, y0: number, a: number, d: number) {\n return [Math.cos(a) * d + x0, Math.sin(a) * d + y0];\n}\n\n/**\n * Get a point between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n * @param d Normalized\n */\nexport function getPointBetween(x0: number, y0: number, x1: number, y1: number, d = 0.5) {\n return [x0 + (x1 - x0) * d, y0 + (y1 - y0) * d];\n}\n\n/**\n * Get the sector of an angle (e.g. quadrant, octant)\n * @param a The angle to check.\n * @param s The number of sectors to check.\n */\nexport function getSector(a: number, s = 8) {\n return Math.floor(s * (0.5 + ((a / (PI * 2)) % s)));\n}\n\n/**\n * Get a normal value representing how close two points are from being at a 45 degree angle.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n */\nexport function getAngliness(x0: number, y0: number, x1: number, y1: number) {\n return Math.abs((x1 - x0) / 2 / ((y1 - y0) / 2));\n}\n","// Credits to perfect-arrows\n// https://github.com/steveruizok/perfect-arrows/blob/master/src/lib/getArrow.ts\n\nimport { getAngle, getDistance, getAngliness, projectPoint, getPointBetween, getSector, rotatePoint, modulate } from './utils';\n\nexport type ArrowOptions = {\n bow?: number;\n stretchMin?: number;\n stretchMax?: number;\n stretch?: number;\n padStart?: number;\n padEnd?: number;\n flip?: boolean;\n straights?: boolean;\n};\n\n/**\n * getArrow\n * Get the points for a linking line between two points.\n * @description Draw an arrow between two points.\n * @param x0 The x position of the \"from\" point.\n * @param y0 The y position of the \"from\" point.\n * @param x1 The x position of the \"to\" point.\n * @param y1 The y position of the \"to\" point.\n * @param options Additional options for computing the line.\n * @returns [sx, sy, cx, cy, e1, e2, ae, as, ac]\n * @example\n * const arrow = getArrow(0, 0, 100, 200, {\n bow: 0\n stretch: .5\n stretchMin: 0\n stretchMax: 420\n padStart: 0\n padEnd: 0\n flip: false\n straights: true\n * })\n * \n * const [\n * startX, startY, \n * controlX, controlY, \n * endX, endY, \n * endAngle, \n * startAngle,\n * controlAngle\n * ] = arrow\n */\nexport default function getArrow(x0: number, y0: number, x1: number, y1: number, options: ArrowOptions = {} as ArrowOptions): number[] {\n const { bow = 0, stretch = 0.5, stretchMin = 0, stretchMax = 420, padStart = 0, padEnd = 0, flip = false, straights = true } = options;\n\n const angle = getAngle(x0, y0, x1, y1);\n const dist = getDistance(x0, y0, x1, y1);\n const angliness = getAngliness(x0, y0, x1, y1);\n\n // Step 0 ⤜⤏ Should the arrow be straight?\n\n if (\n dist < (padStart + padEnd) * 2 || // Too short\n (bow === 0 && stretch === 0) || // No bow, no stretch\n (straights && [0, 1, Infinity].includes(angliness)) // 45 degree angle\n ) {\n // ⤜⤏ Arrow is straight! Just pad start and end points.\n\n // Padding distances\n const ps = Math.max(0, Math.min(dist - padStart, padStart));\n const pe = Math.max(0, Math.min(dist - ps, padEnd));\n\n // Move start point toward end point\n let [px0, py0] = projectPoint(x0, y0, angle, ps);\n\n // Move end point toward start point\n let [px1, py1] = projectPoint(x1, y1, angle + Math.PI, pe);\n\n // Get midpoint between new points\n const [mx, my] = getPointBetween(px0, py0, px1, py1, 0.5);\n\n return [px0, py0, mx, my, px1, py1, angle, angle, angle];\n }\n\n // ⤜⤏ Arrow is an arc!\n\n // Is the arc clockwise or counterclockwise?\n let rot = (getSector(angle) % 2 === 0 ? 1 : -1) * (flip ? -1 : 1);\n\n // Calculate how much the line should \"bow\" away from center\n const arc = bow + modulate(dist, [stretchMin, stretchMax], [1, 0], true) * stretch;\n\n // Step 1 ⤜⤏ Find padded points.\n\n // Get midpoint.\n const [mx, my] = getPointBetween(x0, y0, x1, y1, 0.5);\n\n // Get control point.\n let [cx, cy] = getPointBetween(x0, y0, x1, y1, 0.5 - arc);\n\n // Rotate control point (clockwise or counterclockwise).\n [cx, cy] = rotatePoint(cx, cy, mx, my, (Math.PI / 2) * rot);\n\n // Get padded start point.\n const a0 = getAngle(x0, y0, cx, cy);\n const [px0, py0] = projectPoint(x0, y0, a0, padStart);\n\n // Get padded end point.\n const a1 = getAngle(x1, y1, cx, cy);\n const [px1, py1] = projectPoint(x1, y1, a1, padEnd);\n\n // Step 2 ⤜⤏ Find start and end angles.\n\n // Start angle\n const as = getAngle(cx, cy, x0, y0);\n\n // End angle\n const ae = getAngle(cx, cy, x1, y1);\n\n // Step 3 ⤜⤏ Find control point for padded points.\n\n // Get midpoint between padded start / end points.\n const [mx1, my1] = getPointBetween(px0, py0, px1, py1, 0.5);\n\n // Get control point for padded start / end points.\n let [cx1, cy1] = getPointBetween(px0, py0, px1, py1, 0.5 - arc);\n\n // Rotate control point (clockwise or counterclockwise).\n [cx1, cy1] = rotatePoint(cx1, cy1, mx1, my1, (Math.PI / 2) * rot);\n\n // Finally, average the two control points.\n let [cx2, cy2] = getPointBetween(cx, cy, cx1, cy1, 0.5);\n\n return [px0, py0, cx2, cy2, px1, py1, ae, as, angle];\n}\n","import { EdgeDirection, NodeStyles } from '../types';\nimport { PlaitBoard, Point, createForeignObject, createG, createPath, drawCircle, normalizePoint } from '@plait/core';\nimport getArrow from '../../perfect-arrows/get-arrow';\nimport {\n ACTIVE_BACKGROUND_NODE_ALPHA,\n DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER,\n DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER,\n DEFAULT_EDGE_PARTICLE_SIZE,\n DEFAULT_LINE_STYLES,\n DEFAULT_NODE_LABEL_HEIGHT,\n DEFAULT_NODE_LABEL_STYLE,\n DEFAULT_NODE_LABEL_WIDTH,\n DEFAULT_NODE_SIZE,\n DEFAULT_NODE_STYLES,\n NODE_LABEL_CLASS_NAME,\n SECOND_DEPTH_NODE_ALPHA\n} from '../constants';\nimport { DEFAULT_STYLES } from '../../constants/default';\nimport { ForceAtlasNodeElement } from '../../interfaces';\n\nexport function drawNode(\n board: PlaitBoard,\n node: ForceAtlasNodeElement,\n point: Point,\n options: { iconG?: SVGGElement; isActive: boolean; opacity?: number }\n) {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const nodeStyles: NodeStyles = {\n ...DEFAULT_NODE_STYLES,\n ...(node.styles || {})\n };\n let { x, y } = normalizePoint(point);\n let diameter = node.size ?? DEFAULT_NODE_SIZE;\n if (options.isActive) {\n diameter = diameter * DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER;\n }\n const nodeG = drawCircle(roughSVG, [x, y], diameter, nodeStyles);\n const labelWidth = node.styles?.labelWidth ?? DEFAULT_NODE_LABEL_WIDTH;\n const labelHeight = node.styles?.labelHeight ?? DEFAULT_NODE_LABEL_HEIGHT;\n const textForeignObject = createForeignObject(x - labelWidth / 2, y, labelWidth, labelHeight);\n const textContainer = document.createElement('div');\n textContainer.classList.add(NODE_LABEL_CLASS_NAME);\n textContainer.setAttribute('style', DEFAULT_NODE_LABEL_STYLE);\n const text = document.createElement('span');\n text.innerText = node.label;\n textContainer.append(text);\n textForeignObject.append(textContainer);\n if (options.isActive) {\n const waveDiameter = diameter * DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER;\n const waveCircle = drawCircle(roughSVG, [x, y], waveDiameter, nodeStyles);\n waveCircle.setAttribute('opacity', ACTIVE_BACKGROUND_NODE_ALPHA.toString());\n nodeG.append(waveCircle);\n textForeignObject.setAttribute('y', `${y + waveDiameter / 2}`);\n } else {\n textForeignObject.setAttribute('y', `${y + diameter / 2}`);\n nodeG.setAttribute('opacity', (options.opacity ?? 1).toString());\n }\n if (options.iconG) {\n nodeG.append(options.iconG);\n }\n nodeG.append(textForeignObject);\n return nodeG;\n}\n\nexport function drawEdge(startPoint: Point, endPoint: Point, direction: EdgeDirection, isMutual: boolean, isTargetSelf?: boolean) {\n const nodeRadius = DEFAULT_NODE_SIZE / 2;\n const arrow = getArrow(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {\n stretch: 0.4,\n flip: direction === EdgeDirection.NONE ? false : isMutual,\n padEnd: nodeRadius,\n padStart: nodeRadius\n });\n const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow;\n const g = createG();\n const path = createPath();\n if (!isTargetSelf) {\n path.setAttribute('d', `M${sx},${sy} Q${cx},${cy} ${ex},${ey}`);\n } else {\n const x = startPoint[0];\n const y = startPoint[1];\n const besselX = 40;\n const besselY = 75;\n const angle = 55;\n const angleRad = (angle * Math.PI) / 180;\n const offsetX = nodeRadius * Math.cos(angleRad);\n const offsetY = nodeRadius * Math.sin(angleRad);\n path.setAttribute(\n 'd',\n `M ${x - offsetX},${y - offsetY}\n C ${x - besselX},${y - besselY}, ${x + besselX} ${y - besselY}\n ${x + offsetX},${y - offsetY}`\n );\n }\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', DEFAULT_LINE_STYLES.color[direction]);\n path.setAttribute('opacity', DEFAULT_LINE_STYLES.opacity.toString());\n g.append(path);\n return {\n g,\n path\n };\n}\n\nexport function drawParticle(board: PlaitBoard, startPoint: Point, direction: EdgeDirection) {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const pointG = drawCircle(roughSVG, [0, 0], DEFAULT_EDGE_PARTICLE_SIZE, {\n ...DEFAULT_STYLES,\n strokeWidth: 0,\n fill: DEFAULT_LINE_STYLES.color[direction]\n });\n pointG.setAttribute('transform', `translate(${startPoint[0]}, ${startPoint[1]})`);\n return pointG;\n}\n","import { PlaitBoard, createG } from '@plait/core';\nimport { Generator } from '@plait/common';\nimport { ForceAtlasEdgeElement } from '../../interfaces';\nimport { EdgeDirection, EdgeGeneratorData } from '../types';\nimport { drawEdge, drawParticle } from '../utils/draw';\nimport { playEdgeParticleAnimate } from '../utils/edge';\n\nexport class ForceAtlasEdgeGenerator extends Generator<ForceAtlasEdgeElement, EdgeGeneratorData> {\n static key = 'force-atlas-edge';\n particleAnimation?: { stop: () => void; start: () => void };\n constructor(board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: ForceAtlasEdgeElement): boolean {\n return true;\n }\n\n draw(element: ForceAtlasEdgeElement, data: EdgeGeneratorData) {\n const edgeG = createG();\n const edgeElement = drawEdge(\n data.startPoint,\n data.endPoint,\n data.direction,\n data.isSourceActive && data.isTargetActive,\n data.isTargetSelf\n );\n edgeG.append(edgeElement.g);\n if (data.direction !== EdgeDirection.NONE) {\n const particle = drawParticle(this.board, data.startPoint, data.direction);\n edgeElement.g.append(particle);\n this.particleAnimation = playEdgeParticleAnimate(edgeElement.path, particle);\n }\n return edgeG;\n }\n\n destroy(): void {\n super.destroy();\n this.particleAnimation?.stop();\n }\n}\n","import { PlaitBoard, PlaitElement, PlaitNode, getSelectedElements } from '@plait/core';\nimport { ForceAtlasEdgeElement, ForceAtlasElement, ForceAtlasNodeElement } from '../../interfaces';\nimport { EdgeDirection, EdgeGeneratorData } from '../types';\nimport { PlaitCommonElementRef, animate, linear } from '@plait/common';\nimport { ForceAtlasEdgeGenerator } from '../generators/edge.generator';\nimport { getIsNodeActive, getNodeById } from './node';\n\nexport function getEdges(forceAtlasElement: ForceAtlasElement, andCallBack?: (edge: ForceAtlasEdgeElement) => boolean) {\n return forceAtlasElement.children?.filter(\n f => ForceAtlasElement.isForceAtlasEdgeElement(f) && (andCallBack?.(f) ?? true)\n ) as ForceAtlasEdgeElement[];\n}\n\nexport function getEdgeById(id: string, forceAtlasElement: ForceAtlasElement) {\n const edge = getEdges(forceAtlasElement, e => e.id === id)?.[0];\n if (!edge) {\n throw new Error('can not find edge.');\n }\n return edge;\n}\n\nexport function getEdgesInSourceOrTarget(id: string, forceAtlasElement: ForceAtlasElement) {\n const edges = getEdges(forceAtlasElement, edge => edge.source === id || edge.target === id);\n return edges;\n}\n\nexport function getEdgeGenerator(edge: ForceAtlasEdgeElement) {\n const edgeRef = PlaitElement.getElementRef<PlaitCommonElementRef>(edge);\n return edgeRef.getGenerator<ForceAtlasEdgeGenerator>(ForceAtlasEdgeGenerator.key);\n}\n\nexport function getEdgeDirection(isSourceActive: boolean, isTargetActive: boolean) {\n if (isSourceActive) {\n return EdgeDirection.OUT;\n } else if (isTargetActive) {\n return EdgeDirection.IN;\n }\n return EdgeDirection.NONE;\n}\n\nexport function getEdgeGeneratorData(edge: ForceAtlasEdgeElement, board: PlaitBoard): EdgeGeneratorData {\n const forceAtlasElement = PlaitNode.parent(board, PlaitBoard.findPath(board, edge)) as ForceAtlasElement;\n const sourceNode = getNodeById(edge.source, forceAtlasElement);\n const targetNode = getNodeById(edge.target, forceAtlasElement);\n if (!sourceNode?.points || !targetNode?.points) {\n throw new Error(\"Source or target node doesn't have points\");\n }\n const startPoint = sourceNode.points[0];\n const endPoint = targetNode.points[0];\n const selectElements = getSelectedElements(board) as ForceAtlasNodeElement[];\n const isSourceActive = getIsNodeActive(sourceNode.id, selectElements);\n const isTargetActive = getIsNodeActive(targetNode.id, selectElements);\n const direction = getEdgeDirection(isSourceActive, isTargetActive);\n\n return {\n startPoint,\n endPoint,\n direction,\n isSourceActive,\n isTargetActive,\n isTargetSelf: sourceNode.id === targetNode.id\n };\n}\n\nexport function playEdgeParticleAnimate(path: SVGPathElement, pointG: SVGGElement) {\n const pathLength = path.getTotalLength();\n let anim = animate(\n (t: number) => {\n const point = path.getPointAtLength(t * pathLength);\n pointG.setAttribute('transform', `translate(${point.x}, ${point.y})`);\n },\n 1000,\n linear,\n () => {\n anim = playEdgeParticleAnimate(path, pointG);\n }\n );\n return {\n stop: () => {\n anim.stop();\n },\n start: () => {\n anim.start();\n }\n };\n}\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n Transforms,\n clearViewportOrigination,\n getRealScrollBarWidth,\n getSelectedElements,\n getViewBoxCenterPoint,\n normalizePoint\n} from '@plait/core';\nimport { ForceAtlasElement, ForceAtlasNodeElement } from '../../interfaces';\nimport { getEdges, getEdgesInSourceOrTarget } from './edge';\nimport { animate, linear, PlaitCommonElementRef } from '@plait/common';\nimport { ForceAtlasNodeGenerator } from '../generators/node.generator';\nimport { DEFAULT_NODE_ICON_COLOR, NODE_ICON_FONT_SIZE } from '../constants';\n\nexport function getNodes(forceAtlasElement: ForceAtlasElement, andBack?: (edge: ForceAtlasNodeElement) => boolean) {\n return forceAtlasElement.children?.filter(\n f => ForceAtlasElement.isForceAtlasNodeElement(f) && (andBack?.(f) ?? true)\n ) as ForceAtlasNodeElement[];\n}\n\nexport function getNodeById(id: string, forceAtlasElement: ForceAtlasElement) {\n const node = getNodes(forceAtlasElement, node => node.id === id)?.[0];\n if (!node) {\n throw new Error('can not find node.');\n }\n return node;\n}\n\nexport function getIsNodeActive(id: string, selectElements: ForceAtlasNodeElement[]) {\n return selectElements.some(node => node.id === id);\n}\n\nexport function isHitNode(node: ForceAtlasNodeElement, point: [Point, Point]) {\n const { x, y } = normalizePoint(node.points![0]);\n const size = node.size!;\n const hitFlowNode = RectangleClient.isHit(RectangleClient.getRectangleByPoints(point), {\n x: x - size / 2,\n y: y - size / 2,\n width: size,\n height: size\n });\n return hitFlowNode;\n}\n\nexport function getAssociatedNodesById(id: string, forceAtlasElement: ForceAtlasElement) {\n const edges = getEdgesInSourceOrTarget(id, forceAtlasElement);\n const nodes: ForceAtlasNodeElement[] = [];\n edges.forEach(edge => {\n nodes.push(getNodeById(edge.source, forceAtlasElement));\n nodes.push(getNodeById(edge.target, forceAtlasElement));\n });\n return nodes;\n}\n\nexport function getNodeGenerator(node: ForceAtlasNodeElement) {\n const edgeRef = PlaitElement.getElementRef<PlaitCommonElementRef>(node);\n return edgeRef.getGenerator<ForceAtlasNodeGenerator>(ForceAtlasNodeGenerator.key);\n}\n\nexport function isFirstDepthNode(currentNodeId: string, activeNodeId: string, forceAtlasElement: ForceAtlasElement) {\n const edges = getEdges(forceAtlasElement);\n return edges.some(\n s => (s.source === activeNodeId && s.target === currentNodeId) || (s.target === activeNodeId && s.source === currentNodeId)\n );\n}\n\nexport function getNodeIcon(node: ForceAtlasNodeElement) {\n const iconItem = typeof node.icon === 'object' && node.icon.name ? node.icon : null;\n return {\n name: iconItem ? iconItem.name : (node.icon as string),\n fontSize: (iconItem && iconItem.fontSize) || NODE_ICON_FONT_SIZE,\n color: (iconItem && iconItem.color) || DEFAULT_NODE_ICON_COLOR\n };\n}\n","import { PlaitBoard, createForeignObject, createG, normalizePoint } from '@plait/core';\nimport { Generator, RenderComponentRef } from '@plait/common';\nimport { ForceAtlasNodeElement } from '../../interfaces';\nimport { drawNode } from '../utils/draw';\nimport { NodeGeneratorData } from '../types';\nimport { ForceAtlasNodeIconBoard, NodeIconProps } from '../with-node-icon';\nimport { ACTIVE_NODE_ICON_CLASS_NAME, ACTIVE_NODE_ICON_FONT_SIZE, NODE_ICON_CLASS_NAME } from '../constants';\nimport { getNodeIcon } from '../utils/node';\n\nexport class ForceAtlasNodeGenerator extends Generator<ForceAtlasNodeElement, NodeGeneratorData> {\n static key = 'force-atlas-node';\n\n constructor(board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: ForceAtlasNodeElement): boolean {\n return true;\n }\n\n draw(element: ForceAtlasNodeElement, data: NodeGeneratorData) {\n const iconRef = this.drawIcon(element, data);\n return drawNode(this.board, element, element?.points?.[0] || [0, 0], { ...data, iconG: iconRef.iconG });\n }\n\n drawIcon(element: ForceAtlasNodeElement, data: NodeGeneratorData) {\n const iconG = createG();\n let { x, y } = normalizePoint(element.points?.[0] || [0, 0]);\n const size = element.size!;\n const foreignObject = createForeignObject(x - size / 2, y - size / 2, size, size);\n iconG.append(foreignObject);\n const container = document.createElement('div');\n container.classList.add(NODE_ICON_CLASS_NAME);\n if (data.isActive) {\n container.classList.add(ACTIVE_NODE_ICON_CLASS_NAME);\n }\n foreignObject.append(container);\n const nodeIcon = getNodeIcon(element);\n const props: NodeIconProps = {\n iconItem: {\n name: nodeIcon.name,\n fontSize: data.isActive ? ACTIVE_NODE_ICON_FONT_SIZE : nodeIcon.fontSize,\n color: nodeIcon.color\n },\n board: this.board,\n element: element\n };\n const ref = ((this.board as unknown) as ForceAtlasNodeIconBoard).renderNodeIcon(container, props);\n return { ref, iconG };\n }\n}\n","import { CommonElementFlavour } from '@plait/common';\nimport {\n OnContextChanged,\n PlaitBoard,\n PlaitNode,\n PlaitPluginElementContext,\n cacheSelectedElements,\n getSelectedElements\n} from '@plait/core';\nimport Graph from 'graphology';\nimport { ForceAtlasElement, ForceAtlasNodeElement } from '../interfaces';\nimport { ForceAtlasNodeGenerator } from './generators/node.generator';\nimport { getEdgeGenerator, getEdgeGeneratorData, getEdgesInSourceOrTarget } from './utils/edge';\nimport { getNodeGenerator, getNodes, isFirstDepthNode } from './utils/node';\nimport { SECOND_DEPTH_NODE_ALPHA } from './constants';\n\nexport class ForceAtlasNodeFlavour extends CommonElementFlavour<ForceAtlasNodeElement, PlaitBoard>\n implements OnContextChanged<ForceAtlasNodeElement, PlaitBoard> {\n graph!: Graph<Node>;\n nodeGenerator!: ForceAtlasNodeGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.nodeGenerator = new ForceAtlasNodeGenerator(this.board);\n this.getRef().addGenerator(ForceAtlasNodeGenerator.key, this.nodeGenerator);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n const parent = PlaitNode.parent(this.board, PlaitBoard.findPath(this.board, this.element)) as ForceAtlasElement;\n const selectElements = getSelectedElements(this.board);\n const activeNodeId = selectElements[0]?.id;\n const isActive = activeNodeId === this.element.id;\n this.nodeGenerator.processDrawing(this.element, isActive ? PlaitBoard.getElementActiveHost(this.board) : this.getElementG(), {\n isActive,\n opacity: isFirstDepthNode(this.element.id, activeNodeId, parent) ? 1 : SECOND_DEPTH_NODE_ALPHA\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<ForceAtlasNodeElement, PlaitBoard>,\n previous: PlaitPluginElementContext<ForceAtlasNodeElement, PlaitBoard>\n ) {\n if (value !== previous && value.selected !== previous.selected) {\n const parent = value.parent as any;\n if (value.selected) {\n cacheSelectedElements(this.board, [value.element]);\n }\n const selectElements = getSelectedElements(this.board);\n const nodes = getNodes(parent);\n nodes.forEach(node => {\n const nodeGenerator = getNodeGenerator(node);\n nodeGenerator.destroy();\n const isFirstDepth = selectElements.length > 0 && isFirstDepthNode(node.id, selectElements[0].id, parent);\n nodeGenerator.processDrawing(node, this.getElementG(), {\n isActive: selectElements?.[0]?.id === node.id,\n opacity: selectElements.length === 0 ? 1 : isFirstDepth ? 1 : SECOND_DEPTH_NODE_ALPHA\n });\n });\n\n const associatedEdges = getEdgesInSourceOrTarget(value.element.id, parent);\n associatedEdges.forEach(edge => {\n const edgeGenerator = getEdgeGenerator(edge);\n edgeGenerator.destroy();\n edgeGenerator.processDrawing(edge, PlaitBoard.getElementLowerHost(this.board), getEdgeGeneratorData(edge, this.board));\n });\n }\n }\n\n updateText(previousElement: ForceAtlasNodeElement, currentElement: ForceAtlasNodeElement) {}\n\n destroy(): void {\n super.destroy();\n }\n}\n","import { CommonElementFlavour } from '@plait/common';\nimport { OnContextChanged, PlaitBoard, PlaitPluginElementContext } from '@plait/core';\nimport Graph from 'graphology';\nimport { ForceAtlasEdgeElement } from '../interfaces';\nimport { ForceAtlasEdgeGenerator } from './generators/edge.generator';\nimport { getEdgeGeneratorData } from './utils/edge';\n\nexport class ForceAtlasEdgeFlavour extends CommonElementFlavour<ForceAtlasEdgeElement, PlaitBoard>\n implements OnContextChanged<ForceAtlasEdgeElement, PlaitBoard> {\n graph!: Graph<Node>;\n edgeGenerator!: ForceAtlasEdgeGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.edgeGenerator = new ForceAtlasEdgeGenerator(this.board);\n this.getRef().addGenerator(ForceAtlasEdgeGenerator.key, this.edgeGenerator);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.edgeGenerator.processDrawing(\n this.element,\n PlaitBoard.getElementLowerHost(this.board),\n getEdgeGeneratorData(this.element, this.board)\n );\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<ForceAtlasEdgeElement, PlaitBoard>,\n previous: PlaitPluginElementContext<ForceAtlasEdgeElement, PlaitBoard>\n ) {}\n\n updateText(previousElement: ForceAtlasEdgeElement, currentElement: ForceAtlasEdgeElement) {}\n\n destroy(): void {\n super.destroy();\n this.edgeGenerator.destroy();\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { ForceAtlasNodeElement } from '../interfaces/element';\nimport { RenderComponentRef } from '@plait/common';\nimport { NodeIconItem } from './types';\n\nexport interface ForceAtlasNodeIconBoard {\n renderNodeIcon: (container: Element | DocumentFragment, props: NodeIconProps) => RenderComponentRef<NodeIconProps>;\n}\n\nexport const withNodeIcon = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & ForceAtlasNodeIconBoard;\n\n newBoard.renderNodeIcon = (container: Element | DocumentFragment, props: NodeIconProps) => {\n throw new Error('No implementation for renderLabeIcon method.');\n };\n return newBoard;\n};\n\nexport interface NodeIconProps {\n board: PlaitBoard;\n iconItem: NodeIconItem;\n element: ForceAtlasNodeElement;\n}\n","import {\n isHitElement,\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n PlaitPluginElementContext,\n PlaitPluginKey,\n PlaitPointerType,\n Point,\n RectangleClient,\n Selection,\n setSelectionOptions,\n toHostPoint,\n toViewBoxPoint,\n WithHandPluginOptions\n} from '@plait/core';\nimport { ForceAtlasFlavour } from './force-atlas.flavour';\nimport { ForceAtlasNodeFlavour } from './node.flavour';\nimport { ForceAtlasEdgeFlavour } from './edge.flavour';\nimport { ForceAtlasElement } from '../interfaces';\nimport { isHitNode } from './utils/node';\nimport { withNodeIcon } from './with-node-icon';\n\nexport const withForceAtlas = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (ForceAtlasElement.isForceAtlas(context.element)) {\n return ForceAtlasFlavour;\n } else if (ForceAtlasElement.isForceAtlasNodeElement(context.element)) {\n return ForceAtlasNodeFlavour;\n } else if (ForceAtlasElement.isForceAtlasEdgeElement(context.element)) {\n return ForceAtlasEdgeFlavour;\n }\n return drawElement(context);\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (element.type === 'force-atlas') {\n return {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n } else if (ForceAtlasElement.isForceAtlasNodeElement(element)) {\n return RectangleClient.getRectangleByPoints(element.points || []);\n } else if (ForceAtlasElement.isForceAtlasEdgeElement(element)) {\n return {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n }\n return getRectangle(element);\n };\n\n board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n return isRectangleHit(element, selection);\n };\n board.isRectangleHit = (element, range) => {\n if (ForceAtlasElement.isForceAtlasNodeElement(element)) {\n return isHitNode(element, [range.anchor, range.focus]);\n }\n return isRectangleHit(element, range);\n };\n\n board.isHit = (element, point) => {\n if (ForceAtlasElement.isForceAtlasNodeElement(element)) {\n return isHitNode(element, [point, point]);\n }\n return isHit(element, point);\n };\n\n board.isInsidePoint = (element: PlaitElement, point: Point) => {\n return isInsidePoint(element, point);\n };\n\n setSelectionOptions(board, { isMultipleSelection: false, isPreventClearSelection: true });\n\n (board as PlaitOptionsBoard).setPluginOptions<WithHandPluginOptions>(PlaitPluginKey.withHand, {\n isHandMode: (board, event) => {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isHitTarget = isHitElement(board, point);\n return PlaitBoard.isPointer(board, PlaitPointerType.selection) && !isHitTarget;\n }\n });\n\n return withNodeIcon(board);\n};\n","import { PlaitBoard } from '@plait/core';\nimport { ForceAtlasNodeElement } from '../../interfaces/element';\nimport { DEFAULT_NODE_ICON_COLOR, NODE_ICON_CLASS_NAME, NODE_ICON_FONT_SIZE } from '../constants';\nimport { NodeIconItem } from '../types';\n\nexport abstract class ForceAtlasNodeIconBaseComponent {\n iconItem!: NodeIconItem;\n\n board!: PlaitBoard;\n\n element!: ForceAtlasNodeElement;\n\n abstract nativeElement(): HTMLElement;\n\n initialize() {\n if (!this.iconItem.fontSize) {\n this.iconItem.fontSize = NODE_ICON_FONT_SIZE;\n }\n if (!this.iconItem.color) {\n this.iconItem.color = DEFAULT_NODE_ICON_COLOR;\n }\n this.nativeElement().style.fontSize = `${this.iconItem.fontSize}px`;\n this.nativeElement().style.color = `${this.iconItem.color}`;\n this.nativeElement().classList.add(NODE_ICON_CLASS_NAME);\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './force-atlas/constants';\nexport * from './force-atlas/types';\nexport * from './force-atlas/with-force-atlas';\nexport * from './force-atlas/with-node-icon';\nexport * from './interfaces/index';\nexport * from './force-atlas/core/node-icon-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-graph-viz.mjs","sources":["../../../packages/graph-viz/src/constants/default.ts","../../../packages/graph-viz/src/force-atlas/types.ts","../../../packages/graph-viz/src/force-atlas/constants.ts","../../../packages/graph-viz/src/interfaces/element.ts","../../../packages/graph-viz/src/force-atlas/force-atlas.flavour.ts","../../../packages/graph-viz/src/perfect-arrows/utils.ts","../../../packages/graph-viz/src/perfect-arrows/get-arrow.ts","../../../packages/graph-viz/src/force-atlas/utils/draw.ts","../../../packages/graph-viz/src/force-atlas/generators/edge.generator.ts","../../../packages/graph-viz/src/force-atlas/utils/edge.ts","../../../packages/graph-viz/src/force-atlas/utils/node.ts","../../../packages/graph-viz/src/force-atlas/generators/node.generator.ts","../../../packages/graph-viz/src/force-atlas/node.flavour.ts","../../../packages/graph-viz/src/force-atlas/edge.flavour.ts","../../../packages/graph-viz/src/force-atlas/with-node-icon.ts","../../../packages/graph-viz/src/force-atlas/with-force-atlas.ts","../../../packages/graph-viz/src/force-atlas/core/node-icon-base.component.ts","../../../packages/graph-viz/src/public-api.ts","../../../packages/graph-viz/src/plait-graph-viz.ts"],"sourcesContent":["import { Options } from 'roughjs/bin/core';\n\nexport const DEFAULT_STYLES: Options = {\n fillStyle: 'solid',\n strokeWidth: 1\n};\n","import { GeneratorExtraData } from '@plait/common';\nimport { Point } from '@plait/core';\n\nexport enum EdgeDirection {\n IN,\n OUT,\n NONE\n}\n\nexport interface NodeStyles {\n stroke?: string;\n strokeWidth?: number;\n fill?: string;\n fillStyle?: string;\n activeStroke?: string;\n activeFill?: string;\n borderRadius?: number;\n hoverStroke?: string;\n}\n\nexport interface EdgeGeneratorData extends GeneratorExtraData {\n startPoint: Point;\n endPoint: Point;\n isSourceActive: boolean;\n isTargetActive: boolean;\n direction: EdgeDirection;\n isTargetSelf?: boolean;\n}\n\nexport interface NodeGeneratorData extends GeneratorExtraData {\n isActive: boolean;\n opacity: number;\n}\n\nexport interface NodeIconItem {\n name: string;\n fontSize?: number;\n color?: string;\n}\n","import { Options } from 'roughjs/bin/core';\nimport { DEFAULT_STYLES } from '../constants/default';\nimport { EdgeDirection } from './types';\n\nexport const DEFAULT_EDGE_STYLES: Options = {\n ...DEFAULT_STYLES,\n stroke: '#ddd'\n};\n\nexport const DEFAULT_NODE_SIZE = 30;\n\nexport const DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER = 1.2;\n\nexport const DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER = 1.5;\n\nexport const DEFAULT_NODE_LABEL_MARGIN_TOP = 4;\n\nexport const DEFAULT_NODE_LABEL_FONT_SIZE = 12;\n\nexport const DEFAULT_NODE_LABEL_WIDTH = 72;\n\nexport const DEFAULT_NODE_LABEL_HEIGHT = 22;\n\nexport const DEFAULT_NODE_LABEL_STYLE = `user-select:none;max-width:${DEFAULT_NODE_LABEL_WIDTH}px;text-align:center;line-height:${DEFAULT_NODE_LABEL_HEIGHT}px;font-size:${DEFAULT_NODE_LABEL_FONT_SIZE}px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;`;\n\nexport const NODE_LABEL_CLASS_NAME = 'force-atlas-node-label';\n\nexport const SECOND_DEPTH_NODE_ALPHA = 0.5;\n\nexport const SECOND_DEPTH_LINE_ALPHA = 0.5;\n\nexport const ACTIVE_BACKGROUND_NODE_ALPHA = 0.1;\n\nexport const NODE_ICON_CLASS_NAME = 'force-atlas-node-icon';\n\nexport const ACTIVE_NODE_ICON_CLASS_NAME = 'force-atlas-node-icon-active';\n\nexport const NODE_ICON_FONT_SIZE = 16;\n\nexport const ACTIVE_NODE_ICON_FONT_SIZE = 18;\n\nexport const DEFAULT_NODE_BACKGROUND_COLOR = '#9c9cfb';\n\nexport const DEFAULT_NODE_ICON_COLOR = '#fff';\n\nexport const DEFAULT_NODE_STYLES: Options = {\n ...DEFAULT_STYLES,\n fill: DEFAULT_NODE_BACKGROUND_COLOR,\n strokeWidth: 0\n};\n\nexport const DEFAULT_NODE_SCALING_RATIO = 20;\n\nexport const DEFAULT_LINE_STYLES = {\n color: {\n [EdgeDirection.IN]: '#73D897',\n [EdgeDirection.OUT]: '#6698FF',\n [EdgeDirection.NONE]: `#eee`\n },\n opacity: {\n [EdgeDirection.IN]: 0.4,\n [EdgeDirection.OUT]: 0.4,\n [EdgeDirection.NONE]: 1\n }\n};\n\nexport const DEFAULT_EDGE_PARTICLE_SIZE = 4;\n","import { PlaitElement } from '@plait/core';\nimport { NodeIconItem } from '../force-atlas/types';\nexport interface ForceAtlasNodeElement extends PlaitElement {\n label: string;\n icon: string | NodeIconItem;\n size?: number;\n isActive?: boolean;\n}\n\nexport interface ForceAtlasEdgeElement extends PlaitElement {\n source: string;\n target: string;\n}\n\nexport interface ForceAtlasElement extends PlaitElement {\n children: (ForceAtlasNodeElement | ForceAtlasEdgeElement)[];\n}\n\nexport const ForceAtlasElement = {\n isForceAtlas: (value: any) => {\n return value?.type === 'force-atlas';\n },\n isForceAtlasNodeElement: (value: any): value is ForceAtlasNodeElement => {\n return value && value.label && value.icon;\n },\n isForceAtlasEdgeElement: (value: any): value is ForceAtlasEdgeElement => {\n return value && value.source && value.target;\n }\n};\n","import { CommonElementFlavour } from '@plait/common';\nimport { OnContextChanged, PlaitBoard, PlaitPluginElementContext, cacheSelectedElements } from '@plait/core';\nimport Graph from 'graphology';\nimport circular from 'graphology-layout/circular';\nimport forceAtlas2 from 'graphology-layout-forceatlas2';\nimport { ForceAtlasElement, ForceAtlasNodeElement } from '../interfaces';\nimport { DEFAULT_NODE_SIZE } from './constants';\n\nexport class ForceAtlasFlavour extends CommonElementFlavour<ForceAtlasElement, PlaitBoard>\n implements OnContextChanged<ForceAtlasElement, PlaitBoard> {\n graph!: Graph<ForceAtlasNodeElement>;\n\n constructor() {\n super();\n }\n\n initializeGraph() {\n this.graph = new Graph<ForceAtlasNodeElement>();\n this.element.children?.forEach(child => {\n if (ForceAtlasElement.isForceAtlasNodeElement(child)) {\n if (typeof child?.size === 'undefined') {\n child.size = DEFAULT_NODE_SIZE;\n }\n if (child.isActive) {\n cacheSelectedElements(this.board, [child]);\n }\n this.graph.addNode(child.id, child);\n } else if (ForceAtlasElement.isForceAtlasEdgeElement(child)) {\n this.graph.addEdge(child.source, child.target);\n }\n });\n circular.assign(this.graph);\n const nodeCount = this.graph.nodes().length;\n const settings = forceAtlas2.inferSettings(this.graph);\n settings.scalingRatio = 450;\n if (nodeCount > 5) {\n settings.gravity = 0.2;\n settings.adjustSizes = false;\n } else {\n settings.gravity = 0;\n settings.adjustSizes = true;\n }\n const positions = forceAtlas2(this.graph, { iterations: 500, settings });\n this.element.children?.forEach(child => {\n if (ForceAtlasElement.isForceAtlasNodeElement(child)) {\n const pos = positions[child.id];\n child.points = [[pos.x, pos.y]];\n }\n });\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGraph();\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<ForceAtlasElement, PlaitBoard>,\n previous: PlaitPluginElementContext<ForceAtlasElement, PlaitBoard>\n ) {}\n\n updateText(previousElement: ForceAtlasElement, currentElement: ForceAtlasElement) {}\n\n destroy(): void {\n super.destroy();\n }\n}\n","// Credits to perfect-arrows\n// https://github.com/steveruizok/perfect-arrows/blob/master/src/lib/utils.ts\n\nconst PI = Math.PI;\n\n/**\n * Modulate a value between two ranges.\n * @param value\n * @param rangeA from [low, high]\n * @param rangeB to [low, high]\n * @param clamp\n */\nexport function modulate(value: number, rangeA: number[], rangeB: number[], clamp = false) {\n const [fromLow, fromHigh] = rangeA;\n const [toLow, toHigh] = rangeB;\n const result = toLow + ((value - fromLow) / (fromHigh - fromLow)) * (toHigh - toLow);\n if (clamp === true) {\n if (toLow < toHigh) {\n if (result < toLow) {\n return toLow;\n }\n if (result > toHigh) {\n return toHigh;\n }\n } else {\n if (result > toLow) {\n return toLow;\n }\n if (result < toHigh) {\n return toHigh;\n }\n }\n }\n return result;\n}\n\n/**\n * Rotate a point around a center.\n * @param x The x-axis coordinate of the point.\n * @param y The y-axis coordinate of the point.\n * @param cx The x-axis coordinate of the point to rotate round.\n * @param cy The y-axis coordinate of the point to rotate round.\n * @param angle The distance (in radians) to rotate.\n */\nexport function rotatePoint(x: number, y: number, cx: number, cy: number, angle: number) {\n const s = Math.sin(angle);\n const c = Math.cos(angle);\n\n const px = x - cx;\n const py = y - cy;\n\n const nx = px * c - py * s;\n const ny = px * s + py * c;\n\n return [nx + cx, ny + cy];\n}\n\n/**\n * Get the distance between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n */\nexport function getDistance(x0: number, y0: number, x1: number, y1: number) {\n return Math.hypot(y1 - y0, x1 - x0);\n}\n\n/**\n * Get an angle (radians) between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n */\nexport function getAngle(x0: number, y0: number, x1: number, y1: number) {\n return Math.atan2(y1 - y0, x1 - x0);\n}\n\n/**\n * Move a point in an angle by a distance.\n * @param x0\n * @param y0\n * @param a angle (radians)\n * @param d distance\n */\nexport function projectPoint(x0: number, y0: number, a: number, d: number) {\n return [Math.cos(a) * d + x0, Math.sin(a) * d + y0];\n}\n\n/**\n * Get a point between two points.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n * @param d Normalized\n */\nexport function getPointBetween(x0: number, y0: number, x1: number, y1: number, d = 0.5) {\n return [x0 + (x1 - x0) * d, y0 + (y1 - y0) * d];\n}\n\n/**\n * Get the sector of an angle (e.g. quadrant, octant)\n * @param a The angle to check.\n * @param s The number of sectors to check.\n */\nexport function getSector(a: number, s = 8) {\n return Math.floor(s * (0.5 + ((a / (PI * 2)) % s)));\n}\n\n/**\n * Get a normal value representing how close two points are from being at a 45 degree angle.\n * @param x0 The x-axis coordinate of the first point.\n * @param y0 The y-axis coordinate of the first point.\n * @param x1 The x-axis coordinate of the second point.\n * @param y1 The y-axis coordinate of the second point.\n */\nexport function getAngliness(x0: number, y0: number, x1: number, y1: number) {\n return Math.abs((x1 - x0) / 2 / ((y1 - y0) / 2));\n}\n","// Credits to perfect-arrows\n// https://github.com/steveruizok/perfect-arrows/blob/master/src/lib/getArrow.ts\n\nimport { getAngle, getDistance, getAngliness, projectPoint, getPointBetween, getSector, rotatePoint, modulate } from './utils';\n\nexport type ArrowOptions = {\n bow?: number;\n stretchMin?: number;\n stretchMax?: number;\n stretch?: number;\n padStart?: number;\n padEnd?: number;\n flip?: boolean;\n straights?: boolean;\n};\n\n/**\n * getArrow\n * Get the points for a linking line between two points.\n * @description Draw an arrow between two points.\n * @param x0 The x position of the \"from\" point.\n * @param y0 The y position of the \"from\" point.\n * @param x1 The x position of the \"to\" point.\n * @param y1 The y position of the \"to\" point.\n * @param options Additional options for computing the line.\n * @returns [sx, sy, cx, cy, e1, e2, ae, as, ac]\n * @example\n * const arrow = getArrow(0, 0, 100, 200, {\n bow: 0\n stretch: .5\n stretchMin: 0\n stretchMax: 420\n padStart: 0\n padEnd: 0\n flip: false\n straights: true\n * })\n * \n * const [\n * startX, startY, \n * controlX, controlY, \n * endX, endY, \n * endAngle, \n * startAngle,\n * controlAngle\n * ] = arrow\n */\nexport default function getArrow(x0: number, y0: number, x1: number, y1: number, options: ArrowOptions = {} as ArrowOptions): number[] {\n const { bow = 0, stretch = 0.5, stretchMin = 0, stretchMax = 420, padStart = 0, padEnd = 0, flip = false, straights = true } = options;\n\n const angle = getAngle(x0, y0, x1, y1);\n const dist = getDistance(x0, y0, x1, y1);\n const angliness = getAngliness(x0, y0, x1, y1);\n\n // Step 0 ⤜⤏ Should the arrow be straight?\n\n if (\n dist < (padStart + padEnd) * 2 || // Too short\n (bow === 0 && stretch === 0) || // No bow, no stretch\n (straights && [0, 1, Infinity].includes(angliness)) // 45 degree angle\n ) {\n // ⤜⤏ Arrow is straight! Just pad start and end points.\n\n // Padding distances\n const ps = Math.max(0, Math.min(dist - padStart, padStart));\n const pe = Math.max(0, Math.min(dist - ps, padEnd));\n\n // Move start point toward end point\n let [px0, py0] = projectPoint(x0, y0, angle, ps);\n\n // Move end point toward start point\n let [px1, py1] = projectPoint(x1, y1, angle + Math.PI, pe);\n\n // Get midpoint between new points\n const [mx, my] = getPointBetween(px0, py0, px1, py1, 0.5);\n\n return [px0, py0, mx, my, px1, py1, angle, angle, angle];\n }\n\n // ⤜⤏ Arrow is an arc!\n\n // Is the arc clockwise or counterclockwise?\n let rot = (getSector(angle) % 2 === 0 ? 1 : -1) * (flip ? -1 : 1);\n\n // Calculate how much the line should \"bow\" away from center\n const arc = bow + modulate(dist, [stretchMin, stretchMax], [1, 0], true) * stretch;\n\n // Step 1 ⤜⤏ Find padded points.\n\n // Get midpoint.\n const [mx, my] = getPointBetween(x0, y0, x1, y1, 0.5);\n\n // Get control point.\n let [cx, cy] = getPointBetween(x0, y0, x1, y1, 0.5 - arc);\n\n // Rotate control point (clockwise or counterclockwise).\n [cx, cy] = rotatePoint(cx, cy, mx, my, (Math.PI / 2) * rot);\n\n // Get padded start point.\n const a0 = getAngle(x0, y0, cx, cy);\n const [px0, py0] = projectPoint(x0, y0, a0, padStart);\n\n // Get padded end point.\n const a1 = getAngle(x1, y1, cx, cy);\n const [px1, py1] = projectPoint(x1, y1, a1, padEnd);\n\n // Step 2 ⤜⤏ Find start and end angles.\n\n // Start angle\n const as = getAngle(cx, cy, x0, y0);\n\n // End angle\n const ae = getAngle(cx, cy, x1, y1);\n\n // Step 3 ⤜⤏ Find control point for padded points.\n\n // Get midpoint between padded start / end points.\n const [mx1, my1] = getPointBetween(px0, py0, px1, py1, 0.5);\n\n // Get control point for padded start / end points.\n let [cx1, cy1] = getPointBetween(px0, py0, px1, py1, 0.5 - arc);\n\n // Rotate control point (clockwise or counterclockwise).\n [cx1, cy1] = rotatePoint(cx1, cy1, mx1, my1, (Math.PI / 2) * rot);\n\n // Finally, average the two control points.\n let [cx2, cy2] = getPointBetween(cx, cy, cx1, cy1, 0.5);\n\n return [px0, py0, cx2, cy2, px1, py1, ae, as, angle];\n}\n","import { EdgeDirection, NodeStyles } from '../types';\nimport { PlaitBoard, Point, createForeignObject, createG, createPath, drawCircle, normalizePoint } from '@plait/core';\nimport getArrow from '../../perfect-arrows/get-arrow';\nimport {\n ACTIVE_BACKGROUND_NODE_ALPHA,\n DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER,\n DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER,\n DEFAULT_EDGE_PARTICLE_SIZE,\n DEFAULT_LINE_STYLES,\n DEFAULT_NODE_LABEL_HEIGHT,\n DEFAULT_NODE_LABEL_STYLE,\n DEFAULT_NODE_LABEL_WIDTH,\n DEFAULT_NODE_SIZE,\n DEFAULT_NODE_STYLES,\n NODE_LABEL_CLASS_NAME,\n SECOND_DEPTH_NODE_ALPHA\n} from '../constants';\nimport { DEFAULT_STYLES } from '../../constants/default';\nimport { ForceAtlasNodeElement } from '../../interfaces';\n\nexport function drawNode(\n board: PlaitBoard,\n node: ForceAtlasNodeElement,\n point: Point,\n options: { iconG?: SVGGElement; isActive: boolean; opacity?: number }\n) {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const nodeStyles: NodeStyles = {\n ...DEFAULT_NODE_STYLES,\n ...(node.styles || {})\n };\n let { x, y } = normalizePoint(point);\n let diameter = node.size ?? DEFAULT_NODE_SIZE;\n if (options.isActive) {\n diameter = diameter * DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER;\n }\n const nodeG = drawCircle(roughSVG, [x, y], diameter, nodeStyles);\n const labelWidth = node.styles?.labelWidth ?? DEFAULT_NODE_LABEL_WIDTH;\n const labelHeight = node.styles?.labelHeight ?? DEFAULT_NODE_LABEL_HEIGHT;\n const textForeignObject = createForeignObject(x - labelWidth / 2, y, labelWidth, labelHeight);\n const textContainer = document.createElement('div');\n textContainer.classList.add(NODE_LABEL_CLASS_NAME);\n textContainer.setAttribute('style', DEFAULT_NODE_LABEL_STYLE);\n const text = document.createElement('span');\n text.innerText = node.label;\n textContainer.append(text);\n textForeignObject.append(textContainer);\n if (options.isActive) {\n const waveDiameter = diameter * DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER;\n const waveCircle = drawCircle(roughSVG, [x, y], waveDiameter, nodeStyles);\n waveCircle.setAttribute('opacity', ACTIVE_BACKGROUND_NODE_ALPHA.toString());\n nodeG.append(waveCircle);\n textForeignObject.setAttribute('y', `${y + waveDiameter / 2}`);\n } else {\n textForeignObject.setAttribute('y', `${y + diameter / 2}`);\n nodeG.setAttribute('opacity', (options.opacity ?? 1).toString());\n }\n if (options.iconG) {\n nodeG.append(options.iconG);\n }\n nodeG.append(textForeignObject);\n return nodeG;\n}\n\nexport function drawEdge(startPoint: Point, endPoint: Point, direction: EdgeDirection, isMutual: boolean, isTargetSelf?: boolean) {\n const nodeRadius = DEFAULT_NODE_SIZE / 2;\n const arrow = getArrow(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {\n stretch: 0.4,\n flip: direction === EdgeDirection.NONE ? false : isMutual,\n padEnd: nodeRadius,\n padStart: nodeRadius\n });\n const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow;\n const g = createG();\n const path = createPath();\n if (!isTargetSelf) {\n path.setAttribute('d', `M${sx},${sy} Q${cx},${cy} ${ex},${ey}`);\n } else {\n const x = startPoint[0];\n const y = startPoint[1];\n const besselX = 40;\n const besselY = 75;\n const angle = 55;\n const angleRad = (angle * Math.PI) / 180;\n const offsetX = nodeRadius * Math.cos(angleRad);\n const offsetY = nodeRadius * Math.sin(angleRad);\n path.setAttribute(\n 'd',\n `M ${x - offsetX},${y - offsetY}\n C ${x - besselX},${y - besselY}, ${x + besselX} ${y - besselY}\n ${x + offsetX},${y - offsetY}`\n );\n }\n path.setAttribute('fill', 'none');\n path.setAttribute('stroke', DEFAULT_LINE_STYLES.color[direction]);\n path.setAttribute('opacity', DEFAULT_LINE_STYLES.opacity[direction].toString());\n g.append(path);\n return {\n g,\n path\n };\n}\n\nexport function drawParticle(board: PlaitBoard, startPoint: Point, direction: EdgeDirection) {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const pointG = drawCircle(roughSVG, [0, 0], DEFAULT_EDGE_PARTICLE_SIZE, {\n ...DEFAULT_STYLES,\n strokeWidth: 0,\n fill: DEFAULT_LINE_STYLES.color[direction]\n });\n pointG.setAttribute('transform', `translate(${startPoint[0]}, ${startPoint[1]})`);\n return pointG;\n}\n","import { PlaitBoard, createG } from '@plait/core';\nimport { Generator } from '@plait/common';\nimport { ForceAtlasEdgeElement } from '../../interfaces';\nimport { EdgeDirection, EdgeGeneratorData } from '../types';\nimport { drawEdge, drawParticle } from '../utils/draw';\nimport { playEdgeParticleAnimate } from '../utils/edge';\n\nexport class ForceAtlasEdgeGenerator extends Generator<ForceAtlasEdgeElement, EdgeGeneratorData> {\n static key = 'force-atlas-edge';\n particleAnimation?: { stop: () => void; start: () => void };\n constructor(board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: ForceAtlasEdgeElement): boolean {\n return true;\n }\n\n draw(element: ForceAtlasEdgeElement, data: EdgeGeneratorData) {\n const edgeG = createG();\n const edgeElement = drawEdge(\n data.startPoint,\n data.endPoint,\n data.direction,\n data.isSourceActive && data.isTargetActive,\n data.isTargetSelf\n );\n edgeG.append(edgeElement.g);\n if (data.direction !== EdgeDirection.NONE) {\n const particle = drawParticle(this.board, data.startPoint, data.direction);\n edgeElement.g.append(particle);\n this.particleAnimation = playEdgeParticleAnimate(edgeElement.path, particle);\n }\n return edgeG;\n }\n\n destroy(): void {\n super.destroy();\n this.particleAnimation?.stop();\n }\n}\n","import { PlaitBoard, PlaitElement, PlaitNode, getSelectedElements } from '@plait/core';\nimport { ForceAtlasEdgeElement, ForceAtlasElement, ForceAtlasNodeElement } from '../../interfaces';\nimport { EdgeDirection, EdgeGeneratorData } from '../types';\nimport { PlaitCommonElementRef, animate, linear } from '@plait/common';\nimport { ForceAtlasEdgeGenerator } from '../generators/edge.generator';\nimport { getIsNodeActive, getNodeById } from './node';\n\nexport function getEdges(forceAtlasElement: ForceAtlasElement, andCallBack?: (edge: ForceAtlasEdgeElement) => boolean) {\n return forceAtlasElement.children?.filter(\n f => ForceAtlasElement.isForceAtlasEdgeElement(f) && (andCallBack?.(f) ?? true)\n ) as ForceAtlasEdgeElement[];\n}\n\nexport function getEdgeById(id: string, forceAtlasElement: ForceAtlasElement) {\n const edge = getEdges(forceAtlasElement, e => e.id === id)?.[0];\n if (!edge) {\n throw new Error('can not find edge.');\n }\n return edge;\n}\n\nexport function getEdgesInSourceOrTarget(id: string, forceAtlasElement: ForceAtlasElement) {\n const edges = getEdges(forceAtlasElement, edge => edge.source === id || edge.target === id);\n return edges;\n}\n\nexport function getEdgeGenerator(edge: ForceAtlasEdgeElement) {\n const edgeRef = PlaitElement.getElementRef<PlaitCommonElementRef>(edge);\n return edgeRef.getGenerator<ForceAtlasEdgeGenerator>(ForceAtlasEdgeGenerator.key);\n}\n\nexport function getEdgeDirection(isSourceActive: boolean, isTargetActive: boolean) {\n if (isSourceActive) {\n return EdgeDirection.OUT;\n } else if (isTargetActive) {\n return EdgeDirection.IN;\n }\n return EdgeDirection.NONE;\n}\n\nexport function getEdgeGeneratorData(edge: ForceAtlasEdgeElement, board: PlaitBoard): EdgeGeneratorData {\n const forceAtlasElement = PlaitNode.parent(board, PlaitBoard.findPath(board, edge)) as ForceAtlasElement;\n const sourceNode = getNodeById(edge.source, forceAtlasElement);\n const targetNode = getNodeById(edge.target, forceAtlasElement);\n if (!sourceNode?.points || !targetNode?.points) {\n throw new Error(\"Source or target node doesn't have points\");\n }\n const startPoint = sourceNode.points[0];\n const endPoint = targetNode.points[0];\n const selectElements = getSelectedElements(board) as ForceAtlasNodeElement[];\n const isSourceActive = getIsNodeActive(sourceNode.id, selectElements);\n const isTargetActive = getIsNodeActive(targetNode.id, selectElements);\n const direction = getEdgeDirection(isSourceActive, isTargetActive);\n\n return {\n startPoint,\n endPoint,\n direction,\n isSourceActive,\n isTargetActive,\n isTargetSelf: sourceNode.id === targetNode.id\n };\n}\n\nexport function playEdgeParticleAnimate(path: SVGPathElement, pointG: SVGGElement) {\n const pathLength = path.getTotalLength();\n let anim = animate(\n (t: number) => {\n const point = path.getPointAtLength(t * pathLength);\n pointG.setAttribute('transform', `translate(${point.x}, ${point.y})`);\n },\n 1000,\n linear,\n () => {\n anim = playEdgeParticleAnimate(path, pointG);\n }\n );\n return {\n stop: () => {\n anim.stop();\n },\n start: () => {\n anim.start();\n }\n };\n}\n","import {\n PlaitBoard,\n PlaitElement,\n Point,\n RectangleClient,\n Transforms,\n clearViewportOrigination,\n getRealScrollBarWidth,\n getSelectedElements,\n getViewBoxCenterPoint,\n normalizePoint\n} from '@plait/core';\nimport { ForceAtlasElement, ForceAtlasNodeElement } from '../../interfaces';\nimport { getEdges, getEdgesInSourceOrTarget } from './edge';\nimport { animate, linear, PlaitCommonElementRef } from '@plait/common';\nimport { ForceAtlasNodeGenerator } from '../generators/node.generator';\nimport { DEFAULT_NODE_ICON_COLOR, NODE_ICON_FONT_SIZE } from '../constants';\n\nexport function getNodes(forceAtlasElement: ForceAtlasElement, andBack?: (edge: ForceAtlasNodeElement) => boolean) {\n return forceAtlasElement.children?.filter(\n f => ForceAtlasElement.isForceAtlasNodeElement(f) && (andBack?.(f) ?? true)\n ) as ForceAtlasNodeElement[];\n}\n\nexport function getNodeById(id: string, forceAtlasElement: ForceAtlasElement) {\n const node = getNodes(forceAtlasElement, node => node.id === id)?.[0];\n if (!node) {\n throw new Error('can not find node.');\n }\n return node;\n}\n\nexport function getIsNodeActive(id: string, selectElements: ForceAtlasNodeElement[]) {\n return selectElements.some(node => node.id === id);\n}\n\nexport function isHitNode(node: ForceAtlasNodeElement, point: [Point, Point]) {\n const { x, y } = normalizePoint(node.points![0]);\n const size = node.size!;\n const hitFlowNode = RectangleClient.isHit(RectangleClient.getRectangleByPoints(point), {\n x: x - size / 2,\n y: y - size / 2,\n width: size,\n height: size\n });\n return hitFlowNode;\n}\n\nexport function getAssociatedNodesById(id: string, forceAtlasElement: ForceAtlasElement) {\n const edges = getEdgesInSourceOrTarget(id, forceAtlasElement);\n const nodes: ForceAtlasNodeElement[] = [];\n edges.forEach(edge => {\n nodes.push(getNodeById(edge.source, forceAtlasElement));\n nodes.push(getNodeById(edge.target, forceAtlasElement));\n });\n return nodes;\n}\n\nexport function getNodeGenerator(node: ForceAtlasNodeElement) {\n const edgeRef = PlaitElement.getElementRef<PlaitCommonElementRef>(node);\n return edgeRef.getGenerator<ForceAtlasNodeGenerator>(ForceAtlasNodeGenerator.key);\n}\n\nexport function isFirstDepthNode(currentNodeId: string, activeNodeId: string, forceAtlasElement: ForceAtlasElement) {\n const edges = getEdges(forceAtlasElement);\n return edges.some(\n s => (s.source === activeNodeId && s.target === currentNodeId) || (s.target === activeNodeId && s.source === currentNodeId)\n );\n}\n\nexport function getNodeIcon(node: ForceAtlasNodeElement) {\n const iconItem = typeof node.icon === 'object' && node.icon.name ? node.icon : null;\n return {\n name: iconItem ? iconItem.name : (node.icon as string),\n fontSize: (iconItem && iconItem.fontSize) || NODE_ICON_FONT_SIZE,\n color: (iconItem && iconItem.color) || DEFAULT_NODE_ICON_COLOR\n };\n}\n","import { PlaitBoard, createForeignObject, createG, normalizePoint } from '@plait/core';\nimport { Generator, RenderComponentRef } from '@plait/common';\nimport { ForceAtlasNodeElement } from '../../interfaces';\nimport { drawNode } from '../utils/draw';\nimport { NodeGeneratorData } from '../types';\nimport { ForceAtlasNodeIconBoard, NodeIconProps } from '../with-node-icon';\nimport { ACTIVE_NODE_ICON_CLASS_NAME, ACTIVE_NODE_ICON_FONT_SIZE, NODE_ICON_CLASS_NAME } from '../constants';\nimport { getNodeIcon } from '../utils/node';\n\nexport class ForceAtlasNodeGenerator extends Generator<ForceAtlasNodeElement, NodeGeneratorData> {\n static key = 'force-atlas-node';\n\n constructor(board: PlaitBoard) {\n super(board);\n }\n\n canDraw(element: ForceAtlasNodeElement): boolean {\n return true;\n }\n\n draw(element: ForceAtlasNodeElement, data: NodeGeneratorData) {\n const iconRef = this.drawIcon(element, data);\n return drawNode(this.board, element, element?.points?.[0] || [0, 0], { ...data, iconG: iconRef.iconG });\n }\n\n drawIcon(element: ForceAtlasNodeElement, data: NodeGeneratorData) {\n const iconG = createG();\n let { x, y } = normalizePoint(element.points?.[0] || [0, 0]);\n const size = element.size!;\n const foreignObject = createForeignObject(x - size / 2, y - size / 2, size, size);\n iconG.append(foreignObject);\n const container = document.createElement('div');\n container.classList.add(NODE_ICON_CLASS_NAME);\n if (data.isActive) {\n container.classList.add(ACTIVE_NODE_ICON_CLASS_NAME);\n }\n foreignObject.append(container);\n const nodeIcon = getNodeIcon(element);\n const props: NodeIconProps = {\n iconItem: {\n name: nodeIcon.name,\n fontSize: data.isActive ? ACTIVE_NODE_ICON_FONT_SIZE : nodeIcon.fontSize,\n color: nodeIcon.color\n },\n board: this.board,\n element: element\n };\n const ref = ((this.board as unknown) as ForceAtlasNodeIconBoard).renderNodeIcon(container, props);\n return { ref, iconG };\n }\n}\n","import { CommonElementFlavour } from '@plait/common';\nimport {\n OnContextChanged,\n PlaitBoard,\n PlaitNode,\n PlaitPluginElementContext,\n cacheSelectedElements,\n getSelectedElements\n} from '@plait/core';\nimport Graph from 'graphology';\nimport { ForceAtlasElement, ForceAtlasNodeElement } from '../interfaces';\nimport { ForceAtlasNodeGenerator } from './generators/node.generator';\nimport { getEdgeGenerator, getEdgeGeneratorData, getEdgesInSourceOrTarget } from './utils/edge';\nimport { getNodeGenerator, getNodes, isFirstDepthNode } from './utils/node';\nimport { SECOND_DEPTH_NODE_ALPHA } from './constants';\n\nexport class ForceAtlasNodeFlavour extends CommonElementFlavour<ForceAtlasNodeElement, PlaitBoard>\n implements OnContextChanged<ForceAtlasNodeElement, PlaitBoard> {\n graph!: Graph<Node>;\n nodeGenerator!: ForceAtlasNodeGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.nodeGenerator = new ForceAtlasNodeGenerator(this.board);\n this.getRef().addGenerator(ForceAtlasNodeGenerator.key, this.nodeGenerator);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n const parent = PlaitNode.parent(this.board, PlaitBoard.findPath(this.board, this.element)) as ForceAtlasElement;\n const selectElements = getSelectedElements(this.board);\n const activeNodeId = selectElements[0]?.id;\n const isActive = activeNodeId === this.element.id;\n this.nodeGenerator.processDrawing(this.element, this.getElementG(), {\n isActive,\n opacity: isFirstDepthNode(this.element.id, activeNodeId, parent) ? 1 : SECOND_DEPTH_NODE_ALPHA\n });\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<ForceAtlasNodeElement, PlaitBoard>,\n previous: PlaitPluginElementContext<ForceAtlasNodeElement, PlaitBoard>\n ) {\n if (value !== previous && value.selected !== previous.selected) {\n const parent = value.parent as any;\n if (value.selected) {\n cacheSelectedElements(this.board, [value.element]);\n }\n const selectElements = getSelectedElements(this.board);\n const nodes = getNodes(parent);\n nodes.forEach(node => {\n const nodeGenerator = getNodeGenerator(node);\n nodeGenerator.destroy();\n const isFirstDepth = selectElements.length > 0 && isFirstDepthNode(node.id, selectElements[0].id, parent);\n nodeGenerator.processDrawing(node, this.getElementG(), {\n isActive: selectElements?.[0]?.id === node.id,\n opacity: selectElements.length === 0 ? 1 : isFirstDepth ? 1 : SECOND_DEPTH_NODE_ALPHA\n });\n });\n\n const associatedEdges = getEdgesInSourceOrTarget(value.element.id, parent);\n associatedEdges.forEach(edge => {\n const edgeGenerator = getEdgeGenerator(edge);\n edgeGenerator.destroy();\n edgeGenerator.processDrawing(edge, PlaitBoard.getElementLowerHost(this.board), getEdgeGeneratorData(edge, this.board));\n });\n }\n }\n\n updateText(previousElement: ForceAtlasNodeElement, currentElement: ForceAtlasNodeElement) {}\n\n destroy(): void {\n super.destroy();\n }\n}\n","import { CommonElementFlavour } from '@plait/common';\nimport { OnContextChanged, PlaitBoard, PlaitPluginElementContext } from '@plait/core';\nimport Graph from 'graphology';\nimport { ForceAtlasEdgeElement } from '../interfaces';\nimport { ForceAtlasEdgeGenerator } from './generators/edge.generator';\nimport { getEdgeGeneratorData } from './utils/edge';\n\nexport class ForceAtlasEdgeFlavour extends CommonElementFlavour<ForceAtlasEdgeElement, PlaitBoard>\n implements OnContextChanged<ForceAtlasEdgeElement, PlaitBoard> {\n graph!: Graph<Node>;\n edgeGenerator!: ForceAtlasEdgeGenerator;\n\n constructor() {\n super();\n }\n\n initializeGenerator() {\n this.edgeGenerator = new ForceAtlasEdgeGenerator(this.board);\n this.getRef().addGenerator(ForceAtlasEdgeGenerator.key, this.edgeGenerator);\n }\n\n initialize(): void {\n super.initialize();\n this.initializeGenerator();\n this.edgeGenerator.processDrawing(\n this.element,\n PlaitBoard.getElementLowerHost(this.board),\n getEdgeGeneratorData(this.element, this.board)\n );\n }\n\n onContextChanged(\n value: PlaitPluginElementContext<ForceAtlasEdgeElement, PlaitBoard>,\n previous: PlaitPluginElementContext<ForceAtlasEdgeElement, PlaitBoard>\n ) {}\n\n updateText(previousElement: ForceAtlasEdgeElement, currentElement: ForceAtlasEdgeElement) {}\n\n destroy(): void {\n super.destroy();\n this.edgeGenerator.destroy();\n }\n}\n","import { PlaitBoard } from '@plait/core';\nimport { ForceAtlasNodeElement } from '../interfaces/element';\nimport { RenderComponentRef } from '@plait/common';\nimport { NodeIconItem } from './types';\n\nexport interface ForceAtlasNodeIconBoard {\n renderNodeIcon: (container: Element | DocumentFragment, props: NodeIconProps) => RenderComponentRef<NodeIconProps>;\n}\n\nexport const withNodeIcon = <T extends PlaitBoard = PlaitBoard>(board: T) => {\n const newBoard = board as T & ForceAtlasNodeIconBoard;\n\n newBoard.renderNodeIcon = (container: Element | DocumentFragment, props: NodeIconProps) => {\n throw new Error('No implementation for renderLabeIcon method.');\n };\n return newBoard;\n};\n\nexport interface NodeIconProps {\n board: PlaitBoard;\n iconItem: NodeIconItem;\n element: ForceAtlasNodeElement;\n}\n","import {\n isHitElement,\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n PlaitPluginElementContext,\n PlaitPluginKey,\n PlaitPointerType,\n Point,\n RectangleClient,\n Selection,\n setSelectionOptions,\n toHostPoint,\n toViewBoxPoint,\n WithHandPluginOptions\n} from '@plait/core';\nimport { ForceAtlasFlavour } from './force-atlas.flavour';\nimport { ForceAtlasNodeFlavour } from './node.flavour';\nimport { ForceAtlasEdgeFlavour } from './edge.flavour';\nimport { ForceAtlasElement } from '../interfaces';\nimport { isHitNode } from './utils/node';\nimport { withNodeIcon } from './with-node-icon';\n\nexport const withForceAtlas = (board: PlaitBoard) => {\n const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment } = board;\n\n board.drawElement = (context: PlaitPluginElementContext) => {\n if (ForceAtlasElement.isForceAtlas(context.element)) {\n return ForceAtlasFlavour;\n } else if (ForceAtlasElement.isForceAtlasNodeElement(context.element)) {\n return ForceAtlasNodeFlavour;\n } else if (ForceAtlasElement.isForceAtlasEdgeElement(context.element)) {\n return ForceAtlasEdgeFlavour;\n }\n return drawElement(context);\n };\n\n board.getRectangle = (element: PlaitElement) => {\n if (element.type === 'force-atlas') {\n return {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n } else if (ForceAtlasElement.isForceAtlasNodeElement(element)) {\n return RectangleClient.getRectangleByPoints(element.points || []);\n } else if (ForceAtlasElement.isForceAtlasEdgeElement(element)) {\n return {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n }\n return getRectangle(element);\n };\n\n board.isRectangleHit = (element: PlaitElement, selection: Selection) => {\n return isRectangleHit(element, selection);\n };\n board.isRectangleHit = (element, range) => {\n if (ForceAtlasElement.isForceAtlasNodeElement(element)) {\n return isHitNode(element, [range.anchor, range.focus]);\n }\n return isRectangleHit(element, range);\n };\n\n board.isHit = (element, point) => {\n if (ForceAtlasElement.isForceAtlasNodeElement(element)) {\n return isHitNode(element, [point, point]);\n }\n return isHit(element, point);\n };\n\n board.isInsidePoint = (element: PlaitElement, point: Point) => {\n return isInsidePoint(element, point);\n };\n\n setSelectionOptions(board, { isMultipleSelection: false, isPreventClearSelection: true });\n\n (board as PlaitOptionsBoard).setPluginOptions<WithHandPluginOptions>(PlaitPluginKey.withHand, {\n isHandMode: (board, event) => {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const isHitTarget = isHitElement(board, point);\n return PlaitBoard.isPointer(board, PlaitPointerType.selection) && !isHitTarget;\n }\n });\n\n return withNodeIcon(board);\n};\n","import { PlaitBoard } from '@plait/core';\nimport { ForceAtlasNodeElement } from '../../interfaces/element';\nimport { DEFAULT_NODE_ICON_COLOR, NODE_ICON_CLASS_NAME, NODE_ICON_FONT_SIZE } from '../constants';\nimport { NodeIconItem } from '../types';\n\nexport abstract class ForceAtlasNodeIconBaseComponent {\n iconItem!: NodeIconItem;\n\n board!: PlaitBoard;\n\n element!: ForceAtlasNodeElement;\n\n abstract nativeElement(): HTMLElement;\n\n initialize() {\n if (!this.iconItem.fontSize) {\n this.iconItem.fontSize = NODE_ICON_FONT_SIZE;\n }\n if (!this.iconItem.color) {\n this.iconItem.color = DEFAULT_NODE_ICON_COLOR;\n }\n this.nativeElement().style.fontSize = `${this.iconItem.fontSize}px`;\n this.nativeElement().style.color = `${this.iconItem.color}`;\n this.nativeElement().classList.add(NODE_ICON_CLASS_NAME);\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './force-atlas/constants';\nexport * from './force-atlas/types';\nexport * from './force-atlas/with-force-atlas';\nexport * from './force-atlas/with-node-icon';\nexport * from './interfaces/index';\nexport * from './force-atlas/core/node-icon-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|