@plait/graph-viz 0.62.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/constants/default.d.ts +2 -0
- package/esm2022/constants/default.mjs +5 -0
- package/esm2022/force-atlas/constants.mjs +34 -0
- package/esm2022/force-atlas/core/node-icon-base.component.mjs +15 -0
- package/esm2022/force-atlas/edge.flavour.mjs +25 -0
- package/esm2022/force-atlas/force-atlas.flavour.mjs +53 -0
- package/esm2022/force-atlas/generators/edge.generator.mjs +30 -0
- package/esm2022/force-atlas/generators/node.generator.mjs +44 -0
- package/esm2022/force-atlas/node.flavour.mjs +55 -0
- package/esm2022/force-atlas/types.mjs +7 -0
- package/esm2022/force-atlas/utils/draw.mjs +73 -0
- package/esm2022/force-atlas/utils/edge.mjs +72 -0
- package/esm2022/force-atlas/utils/node.mjs +55 -0
- package/esm2022/force-atlas/with-force-atlas.mjs +71 -0
- package/esm2022/force-atlas/with-node-icon.mjs +8 -0
- package/esm2022/interfaces/element.mjs +12 -0
- package/esm2022/interfaces/index.mjs +2 -0
- package/esm2022/perfect-arrows/get-arrow.mjs +91 -0
- package/esm2022/perfect-arrows/utils.mjs +111 -0
- package/esm2022/plait-graph-viz.mjs +5 -0
- package/esm2022/public-api.mjs +10 -0
- package/fesm2022/plait-graph-viz.mjs +724 -0
- package/fesm2022/plait-graph-viz.mjs.map +1 -0
- package/force-atlas/constants.d.ts +25 -0
- package/force-atlas/core/node-icon-base.component.d.ts +10 -0
- package/force-atlas/edge.flavour.d.ts +15 -0
- package/force-atlas/force-atlas.flavour.d.ts +13 -0
- package/force-atlas/generators/edge.generator.d.ts +15 -0
- package/force-atlas/generators/node.generator.d.ts +15 -0
- package/force-atlas/node.flavour.d.ts +15 -0
- package/force-atlas/types.d.ts +33 -0
- package/force-atlas/utils/draw.d.ts +13 -0
- package/force-atlas/utils/edge.d.ts +14 -0
- package/force-atlas/utils/node.d.ts +15 -0
- package/force-atlas/with-force-atlas.d.ts +2 -0
- package/force-atlas/with-node-icon.d.ts +13 -0
- package/index.d.ts +5 -0
- package/interfaces/element.d.ts +20 -0
- package/interfaces/index.d.ts +1 -0
- package/package.json +34 -0
- package/perfect-arrows/get-arrow.d.ts +42 -0
- package/perfect-arrows/utils.d.ts +64 -0
- package/public-api.d.ts +6 -0
package/README.md
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const DEFAULT_STYLES = {
|
|
2
|
+
fillStyle: 'solid',
|
|
3
|
+
strokeWidth: 1
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvY29uc3RhbnRzL2RlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFZO0lBQ25DLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLFdBQVcsRUFBRSxDQUFDO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NUWUxFUzogT3B0aW9ucyA9IHtcbiAgICBmaWxsU3R5bGU6ICdzb2xpZCcsXG4gICAgc3Ryb2tlV2lkdGg6IDFcbn07XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DEFAULT_STYLES } from '../constants/default';
|
|
2
|
+
import { EdgeDirection } from './types';
|
|
3
|
+
export const DEFAULT_EDGE_STYLES = {
|
|
4
|
+
...DEFAULT_STYLES,
|
|
5
|
+
stroke: '#ddd'
|
|
6
|
+
};
|
|
7
|
+
export const DEFAULT_NODE_SIZE = 30;
|
|
8
|
+
export const DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER = 1.2;
|
|
9
|
+
export const DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER = 1.5;
|
|
10
|
+
export const DEFAULT_NODE_LABEL_MARGIN_TOP = 4;
|
|
11
|
+
export const DEFAULT_NODE_LABEL_FONT_SIZE = 12;
|
|
12
|
+
export const SECOND_DEPTH_NODE_ALPHA = 0.5;
|
|
13
|
+
export const SECOND_DEPTH_LINE_ALPHA = 0.5;
|
|
14
|
+
export const ACTIVE_BACKGROUND_NODE_ALPHA = 0.1;
|
|
15
|
+
export const NODE_ICON_CLASS_NAME = 'force-atlas-node-icon';
|
|
16
|
+
export const ACTIVE_NODE_ICON_CLASS_NAME = 'force-atlas-node-icon-active';
|
|
17
|
+
export const NODE_ICON_FONT_SIZE = 16;
|
|
18
|
+
export const ACTIVE_NODE_ICON_FONT_SIZE = 18;
|
|
19
|
+
export const DEFAULT_NODE_BACKGROUND_COLOR = '#9c9cfb';
|
|
20
|
+
export const DEFAULT_NODE_ICON_COLOR = '#fff';
|
|
21
|
+
export const DEFAULT_NODE_STYLES = {
|
|
22
|
+
...DEFAULT_STYLES,
|
|
23
|
+
fill: DEFAULT_NODE_BACKGROUND_COLOR,
|
|
24
|
+
strokeWidth: 0
|
|
25
|
+
};
|
|
26
|
+
export const DEFAULT_NODE_SCALING_RATIO = 20;
|
|
27
|
+
export const DEFAULT_LINE_STYLES = {
|
|
28
|
+
color: {
|
|
29
|
+
[EdgeDirection.IN]: '#73D897',
|
|
30
|
+
[EdgeDirection.OUT]: '#6698FF',
|
|
31
|
+
[EdgeDirection.NONE]: `#ddd`
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQVk7SUFDeEMsR0FBRyxjQUFjO0lBQ2pCLE1BQU0sRUFBRSxNQUFNO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFFcEMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEdBQUcsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLHVCQUF1QixDQUFDO0FBRTVELE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLDhCQUE4QixDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsU0FBUyxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBWTtJQUN4QyxHQUFHLGNBQWM7SUFDakIsSUFBSSxFQUFFLDZCQUE2QjtJQUNuQyxXQUFXLEVBQUUsQ0FBQztDQUNqQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQy9CLEtBQUssRUFBRTtRQUNILENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVM7UUFDN0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUztRQUM5QixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNO0tBQy9CO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IERFRkFVTFRfU1RZTEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgRWRnZURpcmVjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9FREdFX1NUWUxFUzogT3B0aW9ucyA9IHtcbiAgICAuLi5ERUZBVUxUX1NUWUxFUyxcbiAgICBzdHJva2U6ICcjZGRkJ1xufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9ERV9TSVpFID0gMzA7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9OT0RFX1NJWkVfTVVMVElQTElFUiA9IDEuMjtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUNUSVZFX1dBVkVfTk9ERV9TSVpFX01VTFRJUExJRVIgPSAxLjU7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfTEFCRUxfTUFSR0lOX1RPUCA9IDQ7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfTEFCRUxfRk9OVF9TSVpFID0gMTI7XG5cbmV4cG9ydCBjb25zdCBTRUNPTkRfREVQVEhfTk9ERV9BTFBIQSA9IDAuNTtcblxuZXhwb3J0IGNvbnN0IFNFQ09ORF9ERVBUSF9MSU5FX0FMUEhBID0gMC41O1xuXG5leHBvcnQgY29uc3QgQUNUSVZFX0JBQ0tHUk9VTkRfTk9ERV9BTFBIQSA9IDAuMTtcblxuZXhwb3J0IGNvbnN0IE5PREVfSUNPTl9DTEFTU19OQU1FID0gJ2ZvcmNlLWF0bGFzLW5vZGUtaWNvbic7XG5cbmV4cG9ydCBjb25zdCBBQ1RJVkVfTk9ERV9JQ09OX0NMQVNTX05BTUUgPSAnZm9yY2UtYXRsYXMtbm9kZS1pY29uLWFjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBOT0RFX0lDT05fRk9OVF9TSVpFID0gMTY7XG5cbmV4cG9ydCBjb25zdCBBQ1RJVkVfTk9ERV9JQ09OX0ZPTlRfU0laRSA9IDE4O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX0JBQ0tHUk9VTkRfQ09MT1IgPSAnIzljOWNmYic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfSUNPTl9DT0xPUiA9ICcjZmZmJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9ERV9TVFlMRVM6IE9wdGlvbnMgPSB7XG4gICAgLi4uREVGQVVMVF9TVFlMRVMsXG4gICAgZmlsbDogREVGQVVMVF9OT0RFX0JBQ0tHUk9VTkRfQ09MT1IsXG4gICAgc3Ryb2tlV2lkdGg6IDBcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfU0NBTElOR19SQVRJTyA9IDIwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9MSU5FX1NUWUxFUyA9IHtcbiAgICBjb2xvcjoge1xuICAgICAgICBbRWRnZURpcmVjdGlvbi5JTl06ICcjNzNEODk3JyxcbiAgICAgICAgW0VkZ2VEaXJlY3Rpb24uT1VUXTogJyM2Njk4RkYnLFxuICAgICAgICBbRWRnZURpcmVjdGlvbi5OT05FXTogYCNkZGRgXG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DEFAULT_NODE_ICON_COLOR, NODE_ICON_CLASS_NAME, NODE_ICON_FONT_SIZE } from '../constants';
|
|
2
|
+
export class ForceAtlasNodeIconBaseComponent {
|
|
3
|
+
initialize() {
|
|
4
|
+
if (!this.iconItem.fontSize) {
|
|
5
|
+
this.iconItem.fontSize = NODE_ICON_FONT_SIZE;
|
|
6
|
+
}
|
|
7
|
+
if (!this.iconItem.color) {
|
|
8
|
+
this.iconItem.color = DEFAULT_NODE_ICON_COLOR;
|
|
9
|
+
}
|
|
10
|
+
this.nativeElement().style.fontSize = `${this.iconItem.fontSize}px`;
|
|
11
|
+
this.nativeElement().style.color = `${this.iconItem.color}`;
|
|
12
|
+
this.nativeElement().classList.add(NODE_ICON_CLASS_NAME);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1pY29uLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9jb3JlL25vZGUtaWNvbi1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHbEcsTUFBTSxPQUFnQiwrQkFBK0I7SUFTakQsVUFBVTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLG1CQUFtQixDQUFDO1FBQ2pELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9OT0RFX0lDT05fQ09MT1IsIE5PREVfSUNPTl9DTEFTU19OQU1FLCBOT0RFX0lDT05fRk9OVF9TSVpFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE5vZGVJY29uSXRlbSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZvcmNlQXRsYXNOb2RlSWNvbkJhc2VDb21wb25lbnQge1xuICAgIGljb25JdGVtITogTm9kZUljb25JdGVtO1xuXG4gICAgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgZWxlbWVudCE6IEZvcmNlQXRsYXNOb2RlRWxlbWVudDtcblxuICAgIGFic3RyYWN0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQ7XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICBpZiAoIXRoaXMuaWNvbkl0ZW0uZm9udFNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuaWNvbkl0ZW0uZm9udFNpemUgPSBOT0RFX0lDT05fRk9OVF9TSVpFO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pY29uSXRlbS5jb2xvcikge1xuICAgICAgICAgICAgdGhpcy5pY29uSXRlbS5jb2xvciA9IERFRkFVTFRfTk9ERV9JQ09OX0NPTE9SO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCgpLnN0eWxlLmZvbnRTaXplID0gYCR7dGhpcy5pY29uSXRlbS5mb250U2l6ZX1weGA7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCgpLnN0eWxlLmNvbG9yID0gYCR7dGhpcy5pY29uSXRlbS5jb2xvcn1gO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKE5PREVfSUNPTl9DTEFTU19OQU1FKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CommonElementFlavour } from '@plait/common';
|
|
2
|
+
import { PlaitBoard } from '@plait/core';
|
|
3
|
+
import { ForceAtlasEdgeGenerator } from './generators/edge.generator';
|
|
4
|
+
import { getEdgeGeneratorData } from './utils/edge';
|
|
5
|
+
export class ForceAtlasEdgeFlavour extends CommonElementFlavour {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
}
|
|
9
|
+
initializeGenerator() {
|
|
10
|
+
this.edgeGenerator = new ForceAtlasEdgeGenerator(this.board);
|
|
11
|
+
this.getRef().addGenerator(ForceAtlasEdgeGenerator.key, this.edgeGenerator);
|
|
12
|
+
}
|
|
13
|
+
initialize() {
|
|
14
|
+
super.initialize();
|
|
15
|
+
this.initializeGenerator();
|
|
16
|
+
this.edgeGenerator.processDrawing(this.element, PlaitBoard.getElementLowerHost(this.board), getEdgeGeneratorData(this.element, this.board));
|
|
17
|
+
}
|
|
18
|
+
onContextChanged(value, previous) { }
|
|
19
|
+
updateText(previousElement, currentElement) { }
|
|
20
|
+
destroy() {
|
|
21
|
+
super.destroy();
|
|
22
|
+
this.edgeGenerator.destroy();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5mbGF2b3VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9lZGdlLmZsYXZvdXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBb0IsVUFBVSxFQUE2QixNQUFNLGFBQWEsQ0FBQztBQUd0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG9CQUF1RDtJQUs5RjtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxVQUFVO1FBQ04sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUM3QixJQUFJLENBQUMsT0FBTyxFQUNaLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQzFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNqRCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUNaLEtBQW1FLEVBQ25FLFFBQXNFLElBQ3ZFLENBQUM7SUFFSixVQUFVLENBQUMsZUFBc0MsRUFBRSxjQUFxQyxJQUFHLENBQUM7SUFFNUYsT0FBTztRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkVsZW1lbnRGbGF2b3VyIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPbkNvbnRleHRDaGFuZ2VkLCBQbGFpdEJvYXJkLCBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IEdyYXBoIGZyb20gJ2dyYXBob2xvZ3knO1xuaW1wb3J0IHsgRm9yY2VBdGxhc0VkZ2VFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3JjZUF0bGFzRWRnZUdlbmVyYXRvciB9IGZyb20gJy4vZ2VuZXJhdG9ycy9lZGdlLmdlbmVyYXRvcic7XG5pbXBvcnQgeyBnZXRFZGdlR2VuZXJhdG9yRGF0YSB9IGZyb20gJy4vdXRpbHMvZWRnZSc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzRWRnZUZsYXZvdXIgZXh0ZW5kcyBDb21tb25FbGVtZW50Rmxhdm91cjxGb3JjZUF0bGFzRWRnZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+XG4gICAgaW1wbGVtZW50cyBPbkNvbnRleHRDaGFuZ2VkPEZvcmNlQXRsYXNFZGdlRWxlbWVudCwgUGxhaXRCb2FyZD4ge1xuICAgIGdyYXBoITogR3JhcGg8Tm9kZT47XG4gICAgZWRnZUdlbmVyYXRvciE6IEZvcmNlQXRsYXNFZGdlR2VuZXJhdG9yO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdlbmVyYXRvcigpIHtcbiAgICAgICAgdGhpcy5lZGdlR2VuZXJhdG9yID0gbmV3IEZvcmNlQXRsYXNFZGdlR2VuZXJhdG9yKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmdldFJlZigpLmFkZEdlbmVyYXRvcihGb3JjZUF0bGFzRWRnZUdlbmVyYXRvci5rZXksIHRoaXMuZWRnZUdlbmVyYXRvcik7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVHZW5lcmF0b3IoKTtcbiAgICAgICAgdGhpcy5lZGdlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50TG93ZXJIb3N0KHRoaXMuYm9hcmQpLFxuICAgICAgICAgICAgZ2V0RWRnZUdlbmVyYXRvckRhdGEodGhpcy5lbGVtZW50LCB0aGlzLmJvYXJkKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG9uQ29udGV4dENoYW5nZWQoXG4gICAgICAgIHZhbHVlOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PEZvcmNlQXRsYXNFZGdlRWxlbWVudCwgUGxhaXRCb2FyZD4sXG4gICAgICAgIHByZXZpb3VzOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PEZvcmNlQXRsYXNFZGdlRWxlbWVudCwgUGxhaXRCb2FyZD5cbiAgICApIHt9XG5cbiAgICB1cGRhdGVUZXh0KHByZXZpb3VzRWxlbWVudDogRm9yY2VBdGxhc0VkZ2VFbGVtZW50LCBjdXJyZW50RWxlbWVudDogRm9yY2VBdGxhc0VkZ2VFbGVtZW50KSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmVkZ2VHZW5lcmF0b3IuZGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { CommonElementFlavour } from '@plait/common';
|
|
2
|
+
import { cacheSelectedElements } from '@plait/core';
|
|
3
|
+
import Graph from 'graphology';
|
|
4
|
+
import circular from 'graphology-layout/circular';
|
|
5
|
+
import forceAtlas2 from 'graphology-layout-forceatlas2';
|
|
6
|
+
import { ForceAtlasElement } from '../interfaces';
|
|
7
|
+
import { DEFAULT_NODE_SCALING_RATIO, DEFAULT_NODE_SIZE } from './constants';
|
|
8
|
+
export class ForceAtlasFlavour extends CommonElementFlavour {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
}
|
|
12
|
+
initializeGraph() {
|
|
13
|
+
this.graph = new Graph();
|
|
14
|
+
this.element.children?.forEach(child => {
|
|
15
|
+
if (ForceAtlasElement.isForceAtlasNodeElement(child)) {
|
|
16
|
+
if (typeof child?.size === 'undefined') {
|
|
17
|
+
child.size = DEFAULT_NODE_SIZE;
|
|
18
|
+
}
|
|
19
|
+
if (child.isActive) {
|
|
20
|
+
cacheSelectedElements(this.board, [child]);
|
|
21
|
+
}
|
|
22
|
+
this.graph.addNode(child.id, child);
|
|
23
|
+
}
|
|
24
|
+
else if (ForceAtlasElement.isForceAtlasEdgeElement(child)) {
|
|
25
|
+
this.graph.addEdge(child.source, child.target);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
circular.assign(this.graph);
|
|
29
|
+
const settings = forceAtlas2.inferSettings(this.graph);
|
|
30
|
+
settings.strongGravityMode = false;
|
|
31
|
+
settings.linLogMode = true;
|
|
32
|
+
settings.gravity = 2;
|
|
33
|
+
settings.adjustSizes = true;
|
|
34
|
+
settings.scalingRatio = DEFAULT_NODE_SCALING_RATIO;
|
|
35
|
+
const positions = forceAtlas2(this.graph, { iterations: 1000, settings });
|
|
36
|
+
this.element.children?.forEach(child => {
|
|
37
|
+
if (ForceAtlasElement.isForceAtlasNodeElement(child)) {
|
|
38
|
+
const pos = positions[child.id];
|
|
39
|
+
child.points = [[pos.x, pos.y]];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
initialize() {
|
|
44
|
+
super.initialize();
|
|
45
|
+
this.initializeGraph();
|
|
46
|
+
}
|
|
47
|
+
onContextChanged(value, previous) { }
|
|
48
|
+
updateText(previousElement, currentElement) { }
|
|
49
|
+
destroy() {
|
|
50
|
+
super.destroy();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtYXRsYXMuZmxhdm91ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvZm9yY2UtYXRsYXMuZmxhdm91ci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUEyRCxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG9CQUFtRDtJQUl0RjtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxJQUFJLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUNyQyxLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO2dCQUNuQyxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxRQUFRLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQzNCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxZQUFZLEdBQUcsMEJBQTBCLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVTtRQUNOLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQixDQUNaLEtBQStELEVBQy9ELFFBQWtFLElBQ25FLENBQUM7SUFFSixVQUFVLENBQUMsZUFBa0MsRUFBRSxjQUFpQyxJQUFHLENBQUM7SUFFcEYsT0FBTztRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25FbGVtZW50Rmxhdm91ciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgT25Db250ZXh0Q2hhbmdlZCwgUGxhaXRCb2FyZCwgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCwgY2FjaGVTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IEdyYXBoIGZyb20gJ2dyYXBob2xvZ3knO1xuaW1wb3J0IGNpcmN1bGFyIGZyb20gJ2dyYXBob2xvZ3ktbGF5b3V0L2NpcmN1bGFyJztcbmltcG9ydCBmb3JjZUF0bGFzMiBmcm9tICdncmFwaG9sb2d5LWxheW91dC1mb3JjZWF0bGFzMic7XG5pbXBvcnQgeyBGb3JjZUF0bGFzRWxlbWVudCwgRm9yY2VBdGxhc05vZGVFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfU0NBTElOR19SQVRJTywgREVGQVVMVF9OT0RFX1NJWkUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzRmxhdm91ciBleHRlbmRzIENvbW1vbkVsZW1lbnRGbGF2b3VyPEZvcmNlQXRsYXNFbGVtZW50LCBQbGFpdEJvYXJkPlxuICAgIGltcGxlbWVudHMgT25Db250ZXh0Q2hhbmdlZDxGb3JjZUF0bGFzRWxlbWVudCwgUGxhaXRCb2FyZD4ge1xuICAgIGdyYXBoITogR3JhcGg8Rm9yY2VBdGxhc05vZGVFbGVtZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVHcmFwaCgpIHtcbiAgICAgICAgdGhpcy5ncmFwaCA9IG5ldyBHcmFwaDxGb3JjZUF0bGFzTm9kZUVsZW1lbnQ+KCk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzTm9kZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZD8uc2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2l6ZSA9IERFRkFVTFRfTk9ERV9TSVpFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKHRoaXMuYm9hcmQsIFtjaGlsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLmFkZE5vZGUoY2hpbGQuaWQsIGNoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzRWRnZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5hZGRFZGdlKGNoaWxkLnNvdXJjZSwgY2hpbGQudGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNpcmN1bGFyLmFzc2lnbih0aGlzLmdyYXBoKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBmb3JjZUF0bGFzMi5pbmZlclNldHRpbmdzKHRoaXMuZ3JhcGgpO1xuICAgICAgICBzZXR0aW5ncy5zdHJvbmdHcmF2aXR5TW9kZSA9IGZhbHNlO1xuICAgICAgICBzZXR0aW5ncy5saW5Mb2dNb2RlID0gdHJ1ZTtcbiAgICAgICAgc2V0dGluZ3MuZ3Jhdml0eSA9IDI7XG4gICAgICAgIHNldHRpbmdzLmFkanVzdFNpemVzID0gdHJ1ZTtcbiAgICAgICAgc2V0dGluZ3Muc2NhbGluZ1JhdGlvID0gREVGQVVMVF9OT0RFX1NDQUxJTkdfUkFUSU87XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvcmNlQXRsYXMyKHRoaXMuZ3JhcGgsIHsgaXRlcmF0aW9uczogMTAwMCwgc2V0dGluZ3MgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzTm9kZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gcG9zaXRpb25zW2NoaWxkLmlkXTtcbiAgICAgICAgICAgICAgICBjaGlsZC5wb2ludHMgPSBbW3Bvcy54LCBwb3MueV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUdyYXBoKCk7XG4gICAgfVxuXG4gICAgb25Db250ZXh0Q2hhbmdlZChcbiAgICAgICAgdmFsdWU6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8Rm9yY2VBdGxhc0VsZW1lbnQsIFBsYWl0Qm9hcmQ+LFxuICAgICAgICBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzRWxlbWVudCwgUGxhaXRCb2FyZD5cbiAgICApIHt9XG5cbiAgICB1cGRhdGVUZXh0KHByZXZpb3VzRWxlbWVudDogRm9yY2VBdGxhc0VsZW1lbnQsIGN1cnJlbnRFbGVtZW50OiBGb3JjZUF0bGFzRWxlbWVudCkge31cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createG } from '@plait/core';
|
|
2
|
+
import { Generator } from '@plait/common';
|
|
3
|
+
import { EdgeDirection } from '../types';
|
|
4
|
+
import { drawEdge, drawParticle } from '../utils/draw';
|
|
5
|
+
import { playEdgeParticleAnimate } from '../utils/edge';
|
|
6
|
+
export class ForceAtlasEdgeGenerator extends Generator {
|
|
7
|
+
static { this.key = 'force-atlas-edge'; }
|
|
8
|
+
constructor(board) {
|
|
9
|
+
super(board);
|
|
10
|
+
}
|
|
11
|
+
canDraw(element) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
draw(element, data) {
|
|
15
|
+
const edgeG = createG();
|
|
16
|
+
const edgeElement = drawEdge(data.startPoint, data.endPoint, data.direction, data.isSourceActive && data.isTargetActive);
|
|
17
|
+
edgeG.append(edgeElement.g);
|
|
18
|
+
if (data.direction !== EdgeDirection.NONE) {
|
|
19
|
+
const particle = drawParticle(this.board, data.startPoint, data.direction);
|
|
20
|
+
edgeElement.g.append(particle);
|
|
21
|
+
this.particleAnimation = playEdgeParticleAnimate(edgeElement.path, particle);
|
|
22
|
+
}
|
|
23
|
+
return edgeG;
|
|
24
|
+
}
|
|
25
|
+
destroy() {
|
|
26
|
+
super.destroy();
|
|
27
|
+
this.particleAnimation?.stop();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL2ZvcmNlLWF0bGFzL2dlbmVyYXRvcnMvZWRnZS5nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsU0FBbUQ7YUFDckYsUUFBRyxHQUFHLGtCQUFrQixDQUFDO0lBRWhDLFlBQVksS0FBaUI7UUFDekIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBOEI7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE4QixFQUFFLElBQXVCO1FBQ3hELE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6SCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTztRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIGNyZWF0ZUcgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBHZW5lcmF0b3IgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IEZvcmNlQXRsYXNFZGdlRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRnZURpcmVjdGlvbiwgRWRnZUdlbmVyYXRvckRhdGEgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkcmF3RWRnZSwgZHJhd1BhcnRpY2xlIH0gZnJvbSAnLi4vdXRpbHMvZHJhdyc7XG5pbXBvcnQgeyBwbGF5RWRnZVBhcnRpY2xlQW5pbWF0ZSB9IGZyb20gJy4uL3V0aWxzL2VkZ2UnO1xuXG5leHBvcnQgY2xhc3MgRm9yY2VBdGxhc0VkZ2VHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3I8Rm9yY2VBdGxhc0VkZ2VFbGVtZW50LCBFZGdlR2VuZXJhdG9yRGF0YT4ge1xuICAgIHN0YXRpYyBrZXkgPSAnZm9yY2UtYXRsYXMtZWRnZSc7XG4gICAgcGFydGljbGVBbmltYXRpb24/OiB7IHN0b3A6ICgpID0+IHZvaWQ7IHN0YXJ0OiAoKSA9PiB2b2lkIH07XG4gICAgY29uc3RydWN0b3IoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgc3VwZXIoYm9hcmQpO1xuICAgIH1cblxuICAgIGNhbkRyYXcoZWxlbWVudDogRm9yY2VBdGxhc0VkZ2VFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRyYXcoZWxlbWVudDogRm9yY2VBdGxhc0VkZ2VFbGVtZW50LCBkYXRhOiBFZGdlR2VuZXJhdG9yRGF0YSkge1xuICAgICAgICBjb25zdCBlZGdlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgY29uc3QgZWRnZUVsZW1lbnQgPSBkcmF3RWRnZShkYXRhLnN0YXJ0UG9pbnQsIGRhdGEuZW5kUG9pbnQsIGRhdGEuZGlyZWN0aW9uLCBkYXRhLmlzU291cmNlQWN0aXZlICYmIGRhdGEuaXNUYXJnZXRBY3RpdmUpO1xuICAgICAgICBlZGdlRy5hcHBlbmQoZWRnZUVsZW1lbnQuZyk7XG4gICAgICAgIGlmIChkYXRhLmRpcmVjdGlvbiAhPT0gRWRnZURpcmVjdGlvbi5OT05FKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0aWNsZSA9IGRyYXdQYXJ0aWNsZSh0aGlzLmJvYXJkLCBkYXRhLnN0YXJ0UG9pbnQsIGRhdGEuZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIGVkZ2VFbGVtZW50LmcuYXBwZW5kKHBhcnRpY2xlKTtcbiAgICAgICAgICAgIHRoaXMucGFydGljbGVBbmltYXRpb24gPSBwbGF5RWRnZVBhcnRpY2xlQW5pbWF0ZShlZGdlRWxlbWVudC5wYXRoLCBwYXJ0aWNsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVkZ2VHO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNsZUFuaW1hdGlvbj8uc3RvcCgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createForeignObject, createG, normalizePoint } from '@plait/core';
|
|
2
|
+
import { Generator } from '@plait/common';
|
|
3
|
+
import { drawNode } from '../utils/draw';
|
|
4
|
+
import { ACTIVE_NODE_ICON_CLASS_NAME, ACTIVE_NODE_ICON_FONT_SIZE, NODE_ICON_CLASS_NAME } from '../constants';
|
|
5
|
+
import { getNodeIcon } from '../utils/node';
|
|
6
|
+
export class ForceAtlasNodeGenerator extends Generator {
|
|
7
|
+
static { this.key = 'force-atlas-node'; }
|
|
8
|
+
constructor(board) {
|
|
9
|
+
super(board);
|
|
10
|
+
}
|
|
11
|
+
canDraw(element) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
draw(element, data) {
|
|
15
|
+
const iconRef = this.drawIcon(element, data);
|
|
16
|
+
return drawNode(this.board, element, element?.points?.[0] || [0, 0], { ...data, iconG: iconRef.iconG });
|
|
17
|
+
}
|
|
18
|
+
drawIcon(element, data) {
|
|
19
|
+
const iconG = createG();
|
|
20
|
+
let { x, y } = normalizePoint(element.points?.[0] || [0, 0]);
|
|
21
|
+
const size = element.size;
|
|
22
|
+
const foreignObject = createForeignObject(x - size / 2, y - size / 2, size, size);
|
|
23
|
+
iconG.append(foreignObject);
|
|
24
|
+
const container = document.createElement('div');
|
|
25
|
+
container.classList.add(NODE_ICON_CLASS_NAME);
|
|
26
|
+
if (data.isActive) {
|
|
27
|
+
container.classList.add(ACTIVE_NODE_ICON_CLASS_NAME);
|
|
28
|
+
}
|
|
29
|
+
foreignObject.append(container);
|
|
30
|
+
const nodeIcon = getNodeIcon(element);
|
|
31
|
+
const props = {
|
|
32
|
+
iconItem: {
|
|
33
|
+
name: nodeIcon.name,
|
|
34
|
+
fontSize: data.isActive ? ACTIVE_NODE_ICON_FONT_SIZE : nodeIcon.fontSize,
|
|
35
|
+
color: nodeIcon.color
|
|
36
|
+
},
|
|
37
|
+
board: this.board,
|
|
38
|
+
element: element
|
|
39
|
+
};
|
|
40
|
+
const ref = this.board.renderNodeIcon(container, props);
|
|
41
|
+
return { ref, iconG };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL2ZvcmNlLWF0bGFzL2dlbmVyYXRvcnMvbm9kZS5nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1QyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsU0FBbUQ7YUFDckYsUUFBRyxHQUFHLGtCQUFrQixDQUFDO0lBRWhDLFlBQVksS0FBaUI7UUFDekIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBOEI7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE4QixFQUFFLElBQXVCO1FBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQThCLEVBQUUsSUFBdUI7UUFDNUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUssQ0FBQztRQUMzQixNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEYsS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1QixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQWtCO1lBQ3pCLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ3hFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSzthQUN4QjtZQUNELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixPQUFPLEVBQUUsT0FBTztTQUNuQixDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUssSUFBSSxDQUFDLEtBQTZDLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBjcmVhdGVGb3JlaWduT2JqZWN0LCBjcmVhdGVHLCBub3JtYWxpemVQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEdlbmVyYXRvciwgUmVuZGVyQ29tcG9uZW50UmVmIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRyYXdOb2RlIH0gZnJvbSAnLi4vdXRpbHMvZHJhdyc7XG5pbXBvcnQgeyBOb2RlR2VuZXJhdG9yRGF0YSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEZvcmNlQXRsYXNOb2RlSWNvbkJvYXJkLCBOb2RlSWNvblByb3BzIH0gZnJvbSAnLi4vd2l0aC1ub2RlLWljb24nO1xuaW1wb3J0IHsgQUNUSVZFX05PREVfSUNPTl9DTEFTU19OQU1FLCBBQ1RJVkVfTk9ERV9JQ09OX0ZPTlRfU0laRSwgTk9ERV9JQ09OX0NMQVNTX05BTUUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0Tm9kZUljb24gfSBmcm9tICcuLi91dGlscy9ub2RlJztcblxuZXhwb3J0IGNsYXNzIEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yPEZvcmNlQXRsYXNOb2RlRWxlbWVudCwgTm9kZUdlbmVyYXRvckRhdGE+IHtcbiAgICBzdGF0aWMga2V5ID0gJ2ZvcmNlLWF0bGFzLW5vZGUnO1xuXG4gICAgY29uc3RydWN0b3IoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICAgICAgc3VwZXIoYm9hcmQpO1xuICAgIH1cblxuICAgIGNhbkRyYXcoZWxlbWVudDogRm9yY2VBdGxhc05vZGVFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGRyYXcoZWxlbWVudDogRm9yY2VBdGxhc05vZGVFbGVtZW50LCBkYXRhOiBOb2RlR2VuZXJhdG9yRGF0YSkge1xuICAgICAgICBjb25zdCBpY29uUmVmID0gdGhpcy5kcmF3SWNvbihlbGVtZW50LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuIGRyYXdOb2RlKHRoaXMuYm9hcmQsIGVsZW1lbnQsIGVsZW1lbnQ/LnBvaW50cz8uWzBdIHx8IFswLCAwXSwgeyAuLi5kYXRhLCBpY29uRzogaWNvblJlZi5pY29uRyB9KTtcbiAgICB9XG5cbiAgICBkcmF3SWNvbihlbGVtZW50OiBGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIGRhdGE6IE5vZGVHZW5lcmF0b3JEYXRhKSB7XG4gICAgICAgIGNvbnN0IGljb25HID0gY3JlYXRlRygpO1xuICAgICAgICBsZXQgeyB4LCB5IH0gPSBub3JtYWxpemVQb2ludChlbGVtZW50LnBvaW50cz8uWzBdIHx8IFswLCAwXSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBlbGVtZW50LnNpemUhO1xuICAgICAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gY3JlYXRlRm9yZWlnbk9iamVjdCh4IC0gc2l6ZSAvIDIsIHkgLSBzaXplIC8gMiwgc2l6ZSwgc2l6ZSk7XG4gICAgICAgIGljb25HLmFwcGVuZChmb3JlaWduT2JqZWN0KTtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKE5PREVfSUNPTl9DTEFTU19OQU1FKTtcbiAgICAgICAgaWYgKGRhdGEuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKEFDVElWRV9OT0RFX0lDT05fQ0xBU1NfTkFNRSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yZWlnbk9iamVjdC5hcHBlbmQoY29udGFpbmVyKTtcbiAgICAgICAgY29uc3Qgbm9kZUljb24gPSBnZXROb2RlSWNvbihlbGVtZW50KTtcbiAgICAgICAgY29uc3QgcHJvcHM6IE5vZGVJY29uUHJvcHMgPSB7XG4gICAgICAgICAgICBpY29uSXRlbToge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5vZGVJY29uLm5hbWUsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGRhdGEuaXNBY3RpdmUgPyBBQ1RJVkVfTk9ERV9JQ09OX0ZPTlRfU0laRSA6IG5vZGVJY29uLmZvbnRTaXplLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBub2RlSWNvbi5jb2xvclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvYXJkOiB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWYgPSAoKHRoaXMuYm9hcmQgYXMgdW5rbm93bikgYXMgRm9yY2VBdGxhc05vZGVJY29uQm9hcmQpLnJlbmRlck5vZGVJY29uKGNvbnRhaW5lciwgcHJvcHMpO1xuICAgICAgICByZXR1cm4geyByZWYsIGljb25HIH07XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { CommonElementFlavour } from '@plait/common';
|
|
2
|
+
import { PlaitBoard, PlaitNode, cacheSelectedElements, getSelectedElements } from '@plait/core';
|
|
3
|
+
import { ForceAtlasNodeGenerator } from './generators/node.generator';
|
|
4
|
+
import { getEdgeGenerator, getEdgeGeneratorData, getEdgesInSourceOrTarget } from './utils/edge';
|
|
5
|
+
import { getAssociatedNodesById, getNodeGenerator, isFirstDepthNode } from './utils/node';
|
|
6
|
+
export class ForceAtlasNodeFlavour extends CommonElementFlavour {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
}
|
|
10
|
+
initializeGenerator() {
|
|
11
|
+
this.nodeGenerator = new ForceAtlasNodeGenerator(this.board);
|
|
12
|
+
this.getRef().addGenerator(ForceAtlasNodeGenerator.key, this.nodeGenerator);
|
|
13
|
+
}
|
|
14
|
+
initialize() {
|
|
15
|
+
super.initialize();
|
|
16
|
+
this.initializeGenerator();
|
|
17
|
+
const parent = PlaitNode.parent(this.board, PlaitBoard.findPath(this.board, this.element));
|
|
18
|
+
const selectElements = getSelectedElements(this.board);
|
|
19
|
+
const activeNodeId = selectElements[0]?.id;
|
|
20
|
+
const isActive = activeNodeId === this.element.id;
|
|
21
|
+
this.nodeGenerator.processDrawing(this.element, isActive ? PlaitBoard.getElementActiveHost(this.board) : this.getElementG(), {
|
|
22
|
+
isActive,
|
|
23
|
+
isFirstDepth: isFirstDepthNode(this.element.id, activeNodeId, parent)
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
onContextChanged(value, previous) {
|
|
27
|
+
if (value !== previous && value.selected !== previous.selected) {
|
|
28
|
+
const parent = value.parent;
|
|
29
|
+
if (value.selected) {
|
|
30
|
+
cacheSelectedElements(this.board, [value.element]);
|
|
31
|
+
}
|
|
32
|
+
const selectElements = getSelectedElements(this.board);
|
|
33
|
+
const associatedNodes = getAssociatedNodesById(value.element.id, parent);
|
|
34
|
+
associatedNodes.forEach(node => {
|
|
35
|
+
const nodeGenerator = getNodeGenerator(node);
|
|
36
|
+
nodeGenerator.destroy();
|
|
37
|
+
nodeGenerator.processDrawing(node, this.getElementG(), {
|
|
38
|
+
isActive: selectElements?.[0]?.id === node.id,
|
|
39
|
+
isFirstDepth: selectElements.length > 0 && isFirstDepthNode(node.id, selectElements[0].id, parent)
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const associatedEdges = getEdgesInSourceOrTarget(value.element.id, parent);
|
|
43
|
+
associatedEdges.forEach(edge => {
|
|
44
|
+
const edgeGenerator = getEdgeGenerator(edge);
|
|
45
|
+
edgeGenerator.destroy();
|
|
46
|
+
edgeGenerator.processDrawing(edge, PlaitBoard.getElementLowerHost(this.board), getEdgeGeneratorData(edge, this.board));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
updateText(previousElement, currentElement) { }
|
|
51
|
+
destroy() {
|
|
52
|
+
super.destroy();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5mbGF2b3VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9ub2RlLmZsYXZvdXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFFSCxVQUFVLEVBQ1YsU0FBUyxFQUVULHFCQUFxQixFQUNyQixtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFHckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxRixNQUFNLE9BQU8scUJBQXNCLFNBQVEsb0JBQXVEO0lBSzlGO1FBQ0ksS0FBSyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELFVBQVU7UUFDTixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQXNC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dXIgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7XG4gICAgT25Db250ZXh0Q2hhbmdlZCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0Tm9kZSxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCBHcmFwaCBmcm9tICdncmFwaG9sb2d5JztcbmltcG9ydCB7IEZvcmNlQXRsYXNFbGVtZW50LCBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL25vZGUuZ2VuZXJhdG9yJztcbmltcG9ydCB7IGdldEVkZ2VHZW5lcmF0b3IsIGdldEVkZ2VHZW5lcmF0b3JEYXRhLCBnZXRFZGdlc0luU291cmNlT3JUYXJnZXQgfSBmcm9tICcuL3V0aWxzL2VkZ2UnO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZE5vZGVzQnlJZCwgZ2V0Tm9kZUdlbmVyYXRvciwgaXNGaXJzdERlcHRoTm9kZSB9IGZyb20gJy4vdXRpbHMvbm9kZSc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzTm9kZUZsYXZvdXIgZXh0ZW5kcyBDb21tb25FbGVtZW50Rmxhdm91cjxGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+XG4gICAgaW1wbGVtZW50cyBPbkNvbnRleHRDaGFuZ2VkPEZvcmNlQXRsYXNOb2RlRWxlbWVudCwgUGxhaXRCb2FyZD4ge1xuICAgIGdyYXBoITogR3JhcGg8Tm9kZT47XG4gICAgbm9kZUdlbmVyYXRvciE6IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUdlbmVyYXRvcigpIHtcbiAgICAgICAgdGhpcy5ub2RlR2VuZXJhdG9yID0gbmV3IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yKHRoaXMuYm9hcmQpO1xuICAgICAgICB0aGlzLmdldFJlZigpLmFkZEdlbmVyYXRvcihGb3JjZUF0bGFzTm9kZUdlbmVyYXRvci5rZXksIHRoaXMubm9kZUdlbmVyYXRvcik7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVHZW5lcmF0b3IoKTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gUGxhaXROb2RlLnBhcmVudCh0aGlzLmJvYXJkLCBQbGFpdEJvYXJkLmZpbmRQYXRoKHRoaXMuYm9hcmQsIHRoaXMuZWxlbWVudCkpIGFzIEZvcmNlQXRsYXNFbGVtZW50O1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU5vZGVJZCA9IHNlbGVjdEVsZW1lbnRzWzBdPy5pZDtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVOb2RlSWQgPT09IHRoaXMuZWxlbWVudC5pZDtcbiAgICAgICAgdGhpcy5ub2RlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKHRoaXMuZWxlbWVudCwgaXNBY3RpdmUgPyBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KHRoaXMuYm9hcmQpIDogdGhpcy5nZXRFbGVtZW50RygpLCB7XG4gICAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICAgIGlzRmlyc3REZXB0aDogaXNGaXJzdERlcHRoTm9kZSh0aGlzLmVsZW1lbnQuaWQsIGFjdGl2ZU5vZGVJZCwgcGFyZW50KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKFxuICAgICAgICB2YWx1ZTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+LFxuICAgICAgICBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+XG4gICAgKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gcHJldmlvdXMgJiYgdmFsdWUuc2VsZWN0ZWQgIT09IHByZXZpb3VzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB2YWx1ZS5wYXJlbnQgYXMgYW55O1xuICAgICAgICAgICAgaWYgKHZhbHVlLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKHRoaXMuYm9hcmQsIFt2YWx1ZS5lbGVtZW50XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGVkTm9kZXMgPSBnZXRBc3NvY2lhdGVkTm9kZXNCeUlkKHZhbHVlLmVsZW1lbnQuaWQsIHBhcmVudCk7XG4gICAgICAgICAgICBhc3NvY2lhdGVkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlR2VuZXJhdG9yID0gZ2V0Tm9kZUdlbmVyYXRvcihub2RlKTtcbiAgICAgICAgICAgICAgICBub2RlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBub2RlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKG5vZGUsIHRoaXMuZ2V0RWxlbWVudEcoKSwge1xuICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogc2VsZWN0RWxlbWVudHM/LlswXT8uaWQgPT09IG5vZGUuaWQsXG4gICAgICAgICAgICAgICAgICAgIGlzRmlyc3REZXB0aDogc2VsZWN0RWxlbWVudHMubGVuZ3RoID4gMCAmJiBpc0ZpcnN0RGVwdGhOb2RlKG5vZGUuaWQsIHNlbGVjdEVsZW1lbnRzWzBdLmlkLCBwYXJlbnQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRlZEVkZ2VzID0gZ2V0RWRnZXNJblNvdXJjZU9yVGFyZ2V0KHZhbHVlLmVsZW1lbnQuaWQsIHBhcmVudCk7XG4gICAgICAgICAgICBhc3NvY2lhdGVkRWRnZXMuZm9yRWFjaChlZGdlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGdlR2VuZXJhdG9yID0gZ2V0RWRnZUdlbmVyYXRvcihlZGdlKTtcbiAgICAgICAgICAgICAgICBlZGdlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBlZGdlR2VuZXJhdG9yLnByb2Nlc3NEcmF3aW5nKGVkZ2UsIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudExvd2VySG9zdCh0aGlzLmJvYXJkKSwgZ2V0RWRnZUdlbmVyYXRvckRhdGEoZWRnZSwgdGhpcy5ib2FyZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVUZXh0KHByZXZpb3VzRWxlbWVudDogRm9yY2VBdGxhc05vZGVFbGVtZW50LCBjdXJyZW50RWxlbWVudDogRm9yY2VBdGxhc05vZGVFbGVtZW50KSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export var EdgeDirection;
|
|
2
|
+
(function (EdgeDirection) {
|
|
3
|
+
EdgeDirection[EdgeDirection["IN"] = 0] = "IN";
|
|
4
|
+
EdgeDirection[EdgeDirection["OUT"] = 1] = "OUT";
|
|
5
|
+
EdgeDirection[EdgeDirection["NONE"] = 2] = "NONE";
|
|
6
|
+
})(EdgeDirection || (EdgeDirection = {}));
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL2ZvcmNlLWF0bGFzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDckIsNkNBQUUsQ0FBQTtJQUNGLCtDQUFHLENBQUE7SUFDSCxpREFBSSxDQUFBO0FBQ1IsQ0FBQyxFQUpXLGFBQWEsS0FBYixhQUFhLFFBSXhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhdG9yRXh0cmFEYXRhIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGVudW0gRWRnZURpcmVjdGlvbiB7XG4gICAgSU4sXG4gICAgT1VULFxuICAgIE5PTkVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb2RlU3R5bGVzIHtcbiAgICBzdHJva2U/OiBzdHJpbmc7XG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XG4gICAgZmlsbD86IHN0cmluZztcbiAgICBmaWxsU3R5bGU/OiBzdHJpbmc7XG4gICAgYWN0aXZlU3Ryb2tlPzogc3RyaW5nO1xuICAgIGFjdGl2ZUZpbGw/OiBzdHJpbmc7XG4gICAgYm9yZGVyUmFkaXVzPzogbnVtYmVyO1xuICAgIGhvdmVyU3Ryb2tlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VHZW5lcmF0b3JEYXRhIGV4dGVuZHMgR2VuZXJhdG9yRXh0cmFEYXRhIHtcbiAgICBzdGFydFBvaW50OiBQb2ludDtcbiAgICBlbmRQb2ludDogUG9pbnQ7XG4gICAgaXNTb3VyY2VBY3RpdmU6IGJvb2xlYW47XG4gICAgaXNUYXJnZXRBY3RpdmU6IGJvb2xlYW47XG4gICAgZGlyZWN0aW9uOiBFZGdlRGlyZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVHZW5lcmF0b3JEYXRhIGV4dGVuZHMgR2VuZXJhdG9yRXh0cmFEYXRhIHtcbiAgICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBpc0ZpcnN0RGVwdGg6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUljb25JdGVtIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZm9udFNpemU/OiBudW1iZXI7XG4gICAgY29sb3I/OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { EdgeDirection } from '../types';
|
|
2
|
+
import { NS, PlaitBoard, createG, createPath, drawCircle, normalizePoint } from '@plait/core';
|
|
3
|
+
import getArrow from '../../perfect-arrows/get-arrow';
|
|
4
|
+
import { ACTIVE_BACKGROUND_NODE_ALPHA, DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER, DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER, DEFAULT_LINE_STYLES, DEFAULT_NODE_LABEL_FONT_SIZE, DEFAULT_NODE_LABEL_MARGIN_TOP, DEFAULT_NODE_SIZE, DEFAULT_NODE_STYLES, SECOND_DEPTH_NODE_ALPHA } from '../constants';
|
|
5
|
+
import { DEFAULT_STYLES } from '../../constants/default';
|
|
6
|
+
export function drawNode(board, node, point, options) {
|
|
7
|
+
const roughSVG = PlaitBoard.getRoughSVG(board);
|
|
8
|
+
const nodeStyles = {
|
|
9
|
+
...DEFAULT_NODE_STYLES,
|
|
10
|
+
...(node.styles || {})
|
|
11
|
+
};
|
|
12
|
+
let { x, y } = normalizePoint(point);
|
|
13
|
+
let diameter = node.size ?? DEFAULT_NODE_SIZE;
|
|
14
|
+
if (options.isActive) {
|
|
15
|
+
diameter = diameter * DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER;
|
|
16
|
+
}
|
|
17
|
+
const nodeG = drawCircle(roughSVG, [x, y], diameter, nodeStyles);
|
|
18
|
+
if (options.iconG) {
|
|
19
|
+
nodeG.append(options.iconG);
|
|
20
|
+
}
|
|
21
|
+
const text = document.createElementNS(NS, 'text');
|
|
22
|
+
text.textContent = node.label || '';
|
|
23
|
+
text.setAttribute('text-anchor', `middle`);
|
|
24
|
+
text.setAttribute('dominant-baseline', `hanging`);
|
|
25
|
+
text.setAttribute('x', `${x}`);
|
|
26
|
+
text.setAttribute('font-size', `${DEFAULT_NODE_LABEL_FONT_SIZE}px`);
|
|
27
|
+
text.setAttribute('style', `user-select: none;`);
|
|
28
|
+
if (options.isActive) {
|
|
29
|
+
const waveDiameter = diameter * DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER;
|
|
30
|
+
const waveCircle = drawCircle(roughSVG, [x, y], waveDiameter, nodeStyles);
|
|
31
|
+
waveCircle.setAttribute('opacity', ACTIVE_BACKGROUND_NODE_ALPHA.toString());
|
|
32
|
+
nodeG.append(waveCircle);
|
|
33
|
+
text.setAttribute('y', `${y + waveDiameter / 2 + DEFAULT_NODE_LABEL_MARGIN_TOP}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
if (!options.isFirstDepth) {
|
|
37
|
+
nodeG.setAttribute('opacity', SECOND_DEPTH_NODE_ALPHA.toString());
|
|
38
|
+
}
|
|
39
|
+
text.setAttribute('y', `${y + diameter / 2 + DEFAULT_NODE_LABEL_MARGIN_TOP}`);
|
|
40
|
+
}
|
|
41
|
+
nodeG.append(text);
|
|
42
|
+
return nodeG;
|
|
43
|
+
}
|
|
44
|
+
export function drawEdge(startPoint, endPoint, direction, isMutual) {
|
|
45
|
+
const arrow = getArrow(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {
|
|
46
|
+
stretch: 0.4,
|
|
47
|
+
flip: direction === EdgeDirection.NONE ? false : isMutual,
|
|
48
|
+
padEnd: DEFAULT_NODE_SIZE / 2,
|
|
49
|
+
padStart: DEFAULT_NODE_SIZE / 2
|
|
50
|
+
});
|
|
51
|
+
const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow;
|
|
52
|
+
const g = createG();
|
|
53
|
+
const path = createPath();
|
|
54
|
+
path.setAttribute('d', `M${sx},${sy} Q${cx},${cy} ${ex},${ey}`);
|
|
55
|
+
path.setAttribute('fill', 'none');
|
|
56
|
+
path.setAttribute('stroke', DEFAULT_LINE_STYLES.color[direction]);
|
|
57
|
+
g.append(path);
|
|
58
|
+
return {
|
|
59
|
+
g,
|
|
60
|
+
path
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function drawParticle(board, startPoint, direction) {
|
|
64
|
+
const roughSVG = PlaitBoard.getRoughSVG(board);
|
|
65
|
+
const pointG = drawCircle(roughSVG, [0, 0], 5, {
|
|
66
|
+
...DEFAULT_STYLES,
|
|
67
|
+
strokeWidth: 0,
|
|
68
|
+
fill: DEFAULT_LINE_STYLES.color[direction]
|
|
69
|
+
});
|
|
70
|
+
pointG.setAttribute('transform', `translate(${startPoint[0]}, ${startPoint[1]})`);
|
|
71
|
+
return pointG;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvZHJhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUE4QixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUgsT0FBTyxRQUFRLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEQsT0FBTyxFQUNILDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsd0NBQXdDLEVBQ3hDLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQzFCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd6RCxNQUFNLFVBQVUsUUFBUSxDQUNwQixLQUFpQixFQUNqQixJQUEyQixFQUMzQixLQUFZLEVBQ1osT0FBMEU7SUFFMUUsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxNQUFNLFVBQVUsR0FBZTtRQUMzQixHQUFHLG1CQUFtQjtRQUN0QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDekIsQ0FBQztJQUNGLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksaUJBQWlCLENBQUM7SUFDOUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsUUFBUSxHQUFHLFFBQVEsR0FB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dHlwZXMnO1xuaW1wb3J0IHsgTlMsIFBsYWl0Qm9hcmQsIFBvaW50LCBjcmVhdGVGb3JlaWduT2JqZWN0LCBjcmVhdGVHLCBjcmVhdGVQYXRoLCBkcmF3Q2lyY2xlLCBub3JtYWxpemVQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCBnZXRBcnJvdyBmcm9tICcuLi8uLi9wZXJmZWN0LWFycm93cy9nZXQtYXJyb3cnO1xuaW1wb3J0IHtcbiAgICBBQ1RJVkVfQkFDS0dST1VORF9OT0RFX0FMUEhBLFxuICAgIERFRkFVTFRfQUNUSVZFX05PREVfU0laRV9NVUxUSVBMSUVSLFxuICAgIERFRkFVTFRfQUNUSVZFX1dBVkVfTk9ERV9TSVpFX01VTFRJUExJRVIsXG4gICAgREVGQVVMVF9MSU5FX1NUWUxFUyxcbiAgICBERUZBVUxUX05PREVfTEFCRUxfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfTk9ERV9MQUJFTF9NQVJHSU5fVE9QLFxuICAgIERFRkFVTFRfTk9ERV9TSVpFLFxuICAgIERFRkFVTFRfTk9ERV9TVFlMRVMsXG4gICAgU0VDT05EX0RFUFRIX05PREVfQUxQSEFcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IERFRkFVTFRfU1RZTEVTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgRm9yY2VBdGxhc05vZGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Tm9kZShcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBub2RlOiBGb3JjZUF0bGFzTm9kZUVsZW1lbnQsXG4gICAgcG9pbnQ6IFBvaW50LFxuICAgIG9wdGlvbnM6IHsgaWNvbkc/OiBTVkdHRWxlbWVudDsgaXNBY3RpdmU6IGJvb2xlYW47IGlzRmlyc3REZXB0aDogYm9vbGVhbiB9XG4pIHtcbiAgICBjb25zdCByb3VnaFNWRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgIGNvbnN0IG5vZGVTdHlsZXM6IE5vZGVTdHlsZXMgPSB7XG4gICAgICAgIC4uLkRFRkFVTFRfTk9ERV9TVFlMRVMsXG4gICAgICAgIC4uLihub2RlLnN0eWxlcyB8fCB7fSlcbiAgICB9O1xuICAgIGxldCB7IHgsIHkgfSA9IG5vcm1hbGl6ZVBvaW50KHBvaW50KTtcbiAgICBsZXQgZGlhbWV0ZXIgPSBub2RlLnNpemUgPz8gREVGQVVMVF9OT0RFX1NJWkU7XG4gICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUpIHtcbiAgICAgICAgZGlhbWV0ZXIgPSBkaWFtZXRlciAqIERFRkFVTFRfQUNUSVZFX05PREVfU0laRV9NVUxUSVBMSUVSO1xuICAgIH1cbiAgICBjb25zdCBub2RlRyA9IGRyYXdDaXJjbGUocm91Z2hTVkcsIFt4LCB5XSwgZGlhbWV0ZXIsIG5vZGVTdHlsZXMpO1xuICAgIGlmIChvcHRpb25zLmljb25HKSB7XG4gICAgICAgIG5vZGVHLmFwcGVuZChvcHRpb25zLmljb25HKTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywgJ3RleHQnKTtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gbm9kZS5sYWJlbCB8fCAnJztcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgndGV4dC1hbmNob3InLCBgbWlkZGxlYCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2RvbWluYW50LWJhc2VsaW5lJywgYGhhbmdpbmdgKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgneCcsIGAke3h9YCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsIGAke0RFRkFVTFRfTk9ERV9MQUJFTF9GT05UX1NJWkV9cHhgKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgdXNlci1zZWxlY3Q6IG5vbmU7YCk7XG4gICAgaWYgKG9wdGlvbnMuaXNBY3RpdmUpIHtcbiAgICAgICAgY29uc3Qgd2F2ZURpYW1ldGVyID0gZGlhbWV0ZXIgKiBERUZBVUxUX0FDVElWRV9XQVZFX05PREVfU0laRV9NVUxUSVBMSUVSO1xuICAgICAgICBjb25zdCB3YXZlQ2lyY2xlID0gZHJhd0NpcmNsZShyb3VnaFNWRywgW3gsIHldLCB3YXZlRGlhbWV0ZXIsIG5vZGVTdHlsZXMpO1xuICAgICAgICB3YXZlQ2lyY2xlLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIEFDVElWRV9CQUNLR1JPVU5EX05PREVfQUxQSEEudG9TdHJpbmcoKSk7XG4gICAgICAgIG5vZGVHLmFwcGVuZCh3YXZlQ2lyY2xlKTtcbiAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHt5ICsgd2F2ZURpYW1ldGVyIC8gMiArIERFRkFVTFRfTk9ERV9MQUJFTF9NQVJHSU5fVE9QfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5pc0ZpcnN0RGVwdGgpIHtcbiAgICAgICAgICAgIG5vZGVHLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIFNFQ09ORF9ERVBUSF9OT0RFX0FMUEhBLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRleHQuc2V0QXR0cmlidXRlKCd5JywgYCR7eSArIGRpYW1ldGVyIC8gMiArIERFRkFVTFRfTk9ERV9MQUJFTF9NQVJHSU5fVE9QfWApO1xuICAgIH1cbiAgICBub2RlRy5hcHBlbmQodGV4dCk7XG4gICAgcmV0dXJuIG5vZGVHO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd0VkZ2Uoc3RhcnRQb2ludDogUG9pbnQsIGVuZFBvaW50OiBQb2ludCwgZGlyZWN0aW9uOiBFZGdlRGlyZWN0aW9uLCBpc011dHVhbDogYm9vbGVhbikge1xuICAgIGNvbnN0IGFycm93ID0gZ2V0QXJyb3coc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdLCB7XG4gICAgICAgIHN0cmV0Y2g6IDAuNCxcbiAgICAgICAgZmxpcDogZGlyZWN0aW9uID09PSBFZGdlRGlyZWN0aW9uLk5PTkUgPyBmYWxzZSA6IGlzTXV0dWFsLFxuICAgICAgICBwYWRFbmQ6IERFRkFVTFRfTk9ERV9TSVpFIC8gMixcbiAgICAgICAgcGFkU3RhcnQ6IERFRkFVTFRfTk9ERV9TSVpFIC8gMlxuICAgIH0pO1xuICAgIGNvbnN0IFtzeCwgc3ksIGN4LCBjeSwgZXgsIGV5LCBhZSwgYXMsIGVjXSA9IGFycm93O1xuICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgY29uc3QgcGF0aCA9IGNyZWF0ZVBhdGgoKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIGBNJHtzeH0sJHtzeX0gUSR7Y3h9LCR7Y3l9ICR7ZXh9LCR7ZXl9YCk7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCBERUZBVUxUX0xJTkVfU1RZTEVTLmNvbG9yW2RpcmVjdGlvbl0pO1xuICAgIGcuYXBwZW5kKHBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGcsXG4gICAgICAgIHBhdGhcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd1BhcnRpY2xlKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGFydFBvaW50OiBQb2ludCwgZGlyZWN0aW9uOiBFZGdlRGlyZWN0aW9uKSB7XG4gICAgY29uc3Qgcm91Z2hTVkcgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICBjb25zdCBwb2ludEcgPSBkcmF3Q2lyY2xlKHJvdWdoU1ZHLCBbMCwgMF0sIDUsIHtcbiAgICAgICAgLi4uREVGQVVMVF9TVFlMRVMsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICBmaWxsOiBERUZBVUxUX0xJTkVfU1RZTEVTLmNvbG9yW2RpcmVjdGlvbl1cbiAgICB9KTtcbiAgICBwb2ludEcuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7c3RhcnRQb2ludFswXX0sICR7c3RhcnRQb2ludFsxXX0pYCk7XG4gICAgcmV0dXJuIHBvaW50Rztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { PlaitBoard, PlaitElement, PlaitNode, getSelectedElements } from '@plait/core';
|
|
2
|
+
import { ForceAtlasElement } from '../../interfaces';
|
|
3
|
+
import { EdgeDirection } from '../types';
|
|
4
|
+
import { animate, linear } from '@plait/common';
|
|
5
|
+
import { ForceAtlasEdgeGenerator } from '../generators/edge.generator';
|
|
6
|
+
import { getIsNodeActive, getNodeById } from './node';
|
|
7
|
+
export function getEdges(forceAtlasElement, andCallBack) {
|
|
8
|
+
return forceAtlasElement.children?.filter(f => ForceAtlasElement.isForceAtlasEdgeElement(f) && (andCallBack?.(f) ?? true));
|
|
9
|
+
}
|
|
10
|
+
export function getEdgeById(id, forceAtlasElement) {
|
|
11
|
+
const edge = getEdges(forceAtlasElement, e => e.id === id)?.[0];
|
|
12
|
+
if (!edge) {
|
|
13
|
+
throw new Error('can not find edge.');
|
|
14
|
+
}
|
|
15
|
+
return edge;
|
|
16
|
+
}
|
|
17
|
+
export function getEdgesInSourceOrTarget(id, forceAtlasElement) {
|
|
18
|
+
const edges = getEdges(forceAtlasElement, edge => edge.source === id || edge.target === id);
|
|
19
|
+
return edges;
|
|
20
|
+
}
|
|
21
|
+
export function getEdgeGenerator(edge) {
|
|
22
|
+
const edgeRef = PlaitElement.getElementRef(edge);
|
|
23
|
+
return edgeRef.getGenerator(ForceAtlasEdgeGenerator.key);
|
|
24
|
+
}
|
|
25
|
+
export function getEdgeDirection(isSourceActive, isTargetActive) {
|
|
26
|
+
if (isSourceActive) {
|
|
27
|
+
return EdgeDirection.OUT;
|
|
28
|
+
}
|
|
29
|
+
else if (isTargetActive) {
|
|
30
|
+
return EdgeDirection.IN;
|
|
31
|
+
}
|
|
32
|
+
return EdgeDirection.NONE;
|
|
33
|
+
}
|
|
34
|
+
export function getEdgeGeneratorData(edge, board) {
|
|
35
|
+
const forceAtlasElement = PlaitNode.parent(board, PlaitBoard.findPath(board, edge));
|
|
36
|
+
const sourceNode = getNodeById(edge.source, forceAtlasElement);
|
|
37
|
+
const targetNode = getNodeById(edge.target, forceAtlasElement);
|
|
38
|
+
if (!sourceNode?.points || !targetNode?.points) {
|
|
39
|
+
throw new Error("Source or target node doesn't have points");
|
|
40
|
+
}
|
|
41
|
+
const startPoint = sourceNode.points[0];
|
|
42
|
+
const endPoint = targetNode.points[0];
|
|
43
|
+
const selectElements = getSelectedElements(board);
|
|
44
|
+
const isSourceActive = getIsNodeActive(sourceNode.id, selectElements);
|
|
45
|
+
const isTargetActive = getIsNodeActive(targetNode.id, selectElements);
|
|
46
|
+
const direction = getEdgeDirection(isSourceActive, isTargetActive);
|
|
47
|
+
return {
|
|
48
|
+
startPoint,
|
|
49
|
+
endPoint,
|
|
50
|
+
direction,
|
|
51
|
+
isSourceActive,
|
|
52
|
+
isTargetActive
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function playEdgeParticleAnimate(path, pointG) {
|
|
56
|
+
const pathLength = path.getTotalLength();
|
|
57
|
+
let anim = animate((t) => {
|
|
58
|
+
const point = path.getPointAtLength(t * pathLength);
|
|
59
|
+
pointG.setAttribute('transform', `translate(${point.x}, ${point.y})`);
|
|
60
|
+
}, 1000, linear, () => {
|
|
61
|
+
anim = playEdgeParticleAnimate(path, pointG);
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
stop: () => {
|
|
65
|
+
anim.stop();
|
|
66
|
+
},
|
|
67
|
+
start: () => {
|
|
68
|
+
anim.start();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvZWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUF5QixpQkFBaUIsRUFBeUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRyxPQUFPLEVBQUUsYUFBYSxFQUFxQixNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQXlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFdEQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxpQkFBb0MsRUFBRSxXQUFzRDtJQUNqSCxPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQ3JDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FDdkQsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFVLEVBQUUsaUJBQW9DO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENB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R0FBRyxFQUFFO1FBQ0QsSUFBSSxHQUFHLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQ0osQ0FBQztJQUNGLE9BQU87UUFDSCxJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXROb2RlLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRm9yY2VBdGxhc0VkZ2VFbGVtZW50LCBGb3JjZUF0bGFzRWxlbWVudCwgRm9yY2VBdGxhc05vZGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFZGdlRGlyZWN0aW9uLCBFZGdlR2VuZXJhdG9yRGF0YSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFBsYWl0Q29tbW9uRWxlbWVudFJlZiwgYW5pbWF0ZSwgbGluZWFyIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBGb3JjZUF0bGFzRWRnZUdlbmVyYXRvciB9IGZyb20gJy4uL2dlbmVyYXRvcnMvZWRnZS5nZW5lcmF0b3InO1xuaW1wb3J0IHsgZ2V0SXNOb2RlQWN0aXZlLCBnZXROb2RlQnlJZCB9IGZyb20gJy4vbm9kZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGdlcyhmb3JjZUF0bGFzRWxlbWVudDogRm9yY2VBdGxhc0VsZW1lbnQsIGFuZENhbGxCYWNrPzogKGVkZ2U6IEZvcmNlQXRsYXNFZGdlRWxlbWVudCkgPT4gYm9vbGVhbikge1xuICAgIHJldHVybiBmb3JjZUF0bGFzRWxlbWVudC5jaGlsZHJlbj8uZmlsdGVyKFxuICAgICAgICBmID0+IEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc0VkZ2VFbGVtZW50KGYpICYmIChhbmRDYWxsQmFjaz8uKGYpID8/IHRydWUpXG4gICAgKSBhcyBGb3JjZUF0bGFzRWRnZUVsZW1lbnRbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkZ2VCeUlkKGlkOiBzdHJpbmcsIGZvcmNlQXRsYXNFbGVtZW50OiBGb3JjZUF0bGFzRWxlbWVudCkge1xuICAgIGNvbnN0IGVkZ2UgPSBnZXRFZGdlcyhmb3JjZUF0bGFzRWxlbWVudCwgZSA9PiBlLmlkID09PSBpZCk/LlswXTtcbiAgICBpZiAoIWVkZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW4gbm90IGZpbmQgZWRnZS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVkZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGdlc0luU291cmNlT3JUYXJnZXQoaWQ6IHN0cmluZywgZm9yY2VBdGxhc0VsZW1lbnQ6IEZvcmNlQXRsYXNFbGVtZW50KSB7XG4gICAgY29uc3QgZWRnZXMgPSBnZXRFZGdlcyhmb3JjZUF0bGFzRWxlbWVudCwgZWRnZSA9PiBlZGdlLnNvdXJjZSA9PT0gaWQgfHwgZWRnZS50YXJnZXQgPT09IGlkKTtcbiAgICByZXR1cm4gZWRnZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGdlR2VuZXJhdG9yKGVkZ2U6IEZvcmNlQXRsYXNFZGdlRWxlbWVudCkge1xuICAgIGNvbnN0IGVkZ2VSZWYgPSBQbGFpdEVsZW1lbnQuZ2V0RWxlbWVudFJlZjxQbGFpdENvbW1vbkVsZW1lbnRSZWY+KGVkZ2UpO1xuICAgIHJldHVybiBlZGdlUmVmLmdldEdlbmVyYXRvcjxGb3JjZUF0bGFzRWRnZUdlbmVyYXRvcj4oRm9yY2VBdGxhc0VkZ2VHZW5lcmF0b3Iua2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkZ2VEaXJlY3Rpb24oaXNTb3VyY2VBY3RpdmU6IGJvb2xlYW4sIGlzVGFyZ2V0QWN0aXZlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzU291cmNlQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBFZGdlRGlyZWN0aW9uLk9VVDtcbiAgICB9IGVsc2UgaWYgKGlzVGFyZ2V0QWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBFZGdlRGlyZWN0aW9uLklOO1xuICAgIH1cbiAgICByZXR1cm4gRWRnZURpcmVjdGlvbi5OT05FO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRnZUdlbmVyYXRvckRhdGEoZWRnZTogRm9yY2VBdGxhc0VkZ2VFbGVtZW50LCBib2FyZDogUGxhaXRCb2FyZCk6IEVkZ2VHZW5lcmF0b3JEYXRhIHtcbiAgICBjb25zdCBmb3JjZUF0bGFzRWxlbWVudCA9IFBsYWl0Tm9kZS5wYXJlbnQoYm9hcmQsIFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVkZ2UpKSBhcyBGb3JjZUF0bGFzRWxlbWVudDtcbiAgICBjb25zdCBzb3VyY2VOb2RlID0gZ2V0Tm9kZUJ5SWQoZWRnZS5zb3VyY2UsIGZvcmNlQXRsYXNFbGVtZW50KTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gZ2V0Tm9kZUJ5SWQoZWRnZS50YXJnZXQsIGZvcmNlQXRsYXNFbGVtZW50KTtcbiAgICBpZiAoIXNvdXJjZU5vZGU/LnBvaW50cyB8fCAhdGFyZ2V0Tm9kZT8ucG9pbnRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNvdXJjZSBvciB0YXJnZXQgbm9kZSBkb2Vzbid0IGhhdmUgcG9pbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdGFydFBvaW50ID0gc291cmNlTm9kZS5wb2ludHNbMF07XG4gICAgY29uc3QgZW5kUG9pbnQgPSB0YXJnZXROb2RlLnBvaW50c1swXTtcbiAgICBjb25zdCBzZWxlY3RFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIEZvcmNlQXRsYXNOb2RlRWxlbWVudFtdO1xuICAgIGNvbnN0IGlzU291cmNlQWN0aXZlID0gZ2V0SXNOb2RlQWN0aXZlKHNvdXJjZU5vZGUuaWQsIHNlbGVjdEVsZW1lbnRzKTtcbiAgICBjb25zdCBpc1RhcmdldEFjdGl2ZSA9IGdldElzTm9kZUFjdGl2ZSh0YXJnZXROb2RlLmlkLCBzZWxlY3RFbGVtZW50cyk7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RWRnZURpcmVjdGlvbihpc1NvdXJjZUFjdGl2ZSwgaXNUYXJnZXRBY3RpdmUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0UG9pbnQsXG4gICAgICAgIGVuZFBvaW50LFxuICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIGlzU291cmNlQWN0aXZlLFxuICAgICAgICBpc1RhcmdldEFjdGl2ZVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5RWRnZVBhcnRpY2xlQW5pbWF0ZShwYXRoOiBTVkdQYXRoRWxlbWVudCwgcG9pbnRHOiBTVkdHRWxlbWVudCkge1xuICAgIGNvbnN0IHBhdGhMZW5ndGggPSBwYXRoLmdldFRvdGFsTGVuZ3RoKCk7XG4gICAgbGV0IGFuaW0gPSBhbmltYXRlKFxuICAgICAgICAodDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHBhdGguZ2V0UG9pbnRBdExlbmd0aCh0ICogcGF0aExlbmd0aCk7XG4gICAgICAgICAgICBwb2ludEcuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cG9pbnQueH0sICR7cG9pbnQueX0pYCk7XG4gICAgICAgIH0sXG4gICAgICAgIDEwMDAsXG4gICAgICAgIGxpbmVhcixcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgYW5pbSA9IHBsYXlFZGdlUGFydGljbGVBbmltYXRlKHBhdGgsIHBvaW50Ryk7XG4gICAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3A6ICgpID0+IHtcbiAgICAgICAgICAgIGFuaW0uc3RvcCgpO1xuICAgICAgICB9LFxuICAgICAgICBzdGFydDogKCkgPT4ge1xuICAgICAgICAgICAgYW5pbS5zdGFydCgpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PlaitElement, RectangleClient, normalizePoint } from '@plait/core';
|
|
2
|
+
import { ForceAtlasElement } from '../../interfaces';
|
|
3
|
+
import { getEdges, getEdgesInSourceOrTarget } from './edge';
|
|
4
|
+
import { ForceAtlasNodeGenerator } from '../generators/node.generator';
|
|
5
|
+
import { DEFAULT_NODE_ICON_COLOR, NODE_ICON_FONT_SIZE } from '../constants';
|
|
6
|
+
export function getNodes(forceAtlasElement, andBack) {
|
|
7
|
+
return forceAtlasElement.children?.filter(f => ForceAtlasElement.isForceAtlasNodeElement(f) && (andBack?.(f) ?? true));
|
|
8
|
+
}
|
|
9
|
+
export function getNodeById(id, forceAtlasElement) {
|
|
10
|
+
const node = getNodes(forceAtlasElement, node => node.id === id)?.[0];
|
|
11
|
+
if (!node) {
|
|
12
|
+
throw new Error('can not find node.');
|
|
13
|
+
}
|
|
14
|
+
return node;
|
|
15
|
+
}
|
|
16
|
+
export function getIsNodeActive(id, selectElements) {
|
|
17
|
+
return selectElements.some(node => node.id === id);
|
|
18
|
+
}
|
|
19
|
+
export function isHitNode(node, point) {
|
|
20
|
+
const { x, y } = normalizePoint(node.points[0]);
|
|
21
|
+
const size = node.size;
|
|
22
|
+
const hitFlowNode = RectangleClient.isHit(RectangleClient.getRectangleByPoints(point), {
|
|
23
|
+
x: x - size / 2,
|
|
24
|
+
y: y - size / 2,
|
|
25
|
+
width: size,
|
|
26
|
+
height: size
|
|
27
|
+
});
|
|
28
|
+
return hitFlowNode;
|
|
29
|
+
}
|
|
30
|
+
export function getAssociatedNodesById(id, forceAtlasElement) {
|
|
31
|
+
const edges = getEdgesInSourceOrTarget(id, forceAtlasElement);
|
|
32
|
+
const nodes = [];
|
|
33
|
+
edges.forEach(edge => {
|
|
34
|
+
nodes.push(getNodeById(edge.source, forceAtlasElement));
|
|
35
|
+
nodes.push(getNodeById(edge.target, forceAtlasElement));
|
|
36
|
+
});
|
|
37
|
+
return nodes;
|
|
38
|
+
}
|
|
39
|
+
export function getNodeGenerator(node) {
|
|
40
|
+
const edgeRef = PlaitElement.getElementRef(node);
|
|
41
|
+
return edgeRef.getGenerator(ForceAtlasNodeGenerator.key);
|
|
42
|
+
}
|
|
43
|
+
export function isFirstDepthNode(currentNodeId, activeNodeId, forceAtlasElement) {
|
|
44
|
+
const edges = getEdges(forceAtlasElement);
|
|
45
|
+
return edges.some(s => (s.source === activeNodeId && s.target === currentNodeId) || (s.target === activeNodeId && s.source === currentNodeId));
|
|
46
|
+
}
|
|
47
|
+
export function getNodeIcon(node) {
|
|
48
|
+
const iconItem = typeof node.icon === 'object' && node.icon.name ? node.icon : null;
|
|
49
|
+
return {
|
|
50
|
+
name: iconItem ? iconItem.name : node.icon,
|
|
51
|
+
fontSize: (iconItem && iconItem.fontSize) || NODE_ICON_FONT_SIZE,
|
|
52
|
+
color: (iconItem && iconItem.color) || DEFAULT_NODE_ICON_COLOR
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFTLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVFLE1BQU0sVUFBVSxRQUFRLENBQUMsaUJBQW9DLEVBQUUsT0FBa0Q7SUFDN0csT0FBTyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUNyQyxDQUFDLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQ25ELENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBVSxFQUFFLGlCQUFvQztJQUN4RSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQs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QUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRFbGVtZW50LCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBub3JtYWxpemVQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEZvcmNlQXRsYXNFbGVtZW50LCBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldEVkZ2VzLCBnZXRFZGdlc0luU291cmNlT3JUYXJnZXQgfSBmcm9tICcuL2VkZ2UnO1xuaW1wb3J0IHsgUGxhaXRDb21tb25FbGVtZW50UmVmIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUdlbmVyYXRvciB9IGZyb20gJy4uL2dlbmVyYXRvcnMvbm9kZS5nZW5lcmF0b3InO1xuaW1wb3J0IHsgREVGQVVMVF9OT0RFX0lDT05fQ09MT1IsIE5PREVfSUNPTl9GT05UX1NJWkUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9kZXMoZm9yY2VBdGxhc0VsZW1lbnQ6IEZvcmNlQXRsYXNFbGVtZW50LCBhbmRCYWNrPzogKGVkZ2U6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCkgPT4gYm9vbGVhbikge1xuICAgIHJldHVybiBmb3JjZUF0bGFzRWxlbWVudC5jaGlsZHJlbj8uZmlsdGVyKFxuICAgICAgICBmID0+IEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc05vZGVFbGVtZW50KGYpICYmIChhbmRCYWNrPy4oZikgPz8gdHJ1ZSlcbiAgICApIGFzIEZvcmNlQXRsYXNOb2RlRWxlbWVudFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZywgZm9yY2VBdGxhc0VsZW1lbnQ6IEZvcmNlQXRsYXNFbGVtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGVzKGZvcmNlQXRsYXNFbGVtZW50LCBub2RlID0+IG5vZGUuaWQgPT09IGlkKT8uWzBdO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbiBub3QgZmluZCBub2RlLicpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElzTm9kZUFjdGl2ZShpZDogc3RyaW5nLCBzZWxlY3RFbGVtZW50czogRm9yY2VBdGxhc05vZGVFbGVtZW50W10pIHtcbiAgICByZXR1cm4gc2VsZWN0RWxlbWVudHMuc29tZShub2RlID0+IG5vZGUuaWQgPT09IGlkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSGl0Tm9kZShub2RlOiBGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIHBvaW50OiBbUG9pbnQsIFBvaW50XSkge1xuICAgIGNvbnN0IHsgeCwgeSB9ID0gbm9ybWFsaXplUG9pbnQobm9kZS5wb2ludHMhWzBdKTtcbiAgICBjb25zdCBzaXplID0gbm9kZS5zaXplITtcbiAgICBjb25zdCBoaXRGbG93Tm9kZSA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdChSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnQpLCB7XG4gICAgICAgIHg6IHggLSBzaXplIC8gMixcbiAgICAgICAgeTogeSAtIHNpemUgLyAyLFxuICAgICAgICB3aWR0aDogc2l6ZSxcbiAgICAgICAgaGVpZ2h0OiBzaXplXG4gICAgfSk7XG4gICAgcmV0dXJuIGhpdEZsb3dOb2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXNzb2NpYXRlZE5vZGVzQnlJZChpZDogc3RyaW5nLCBmb3JjZUF0bGFzRWxlbWVudDogRm9yY2VBdGxhc0VsZW1lbnQpIHtcbiAgICBjb25zdCBlZGdlcyA9IGdldEVkZ2VzSW5Tb3VyY2VPclRhcmdldChpZCwgZm9yY2VBdGxhc0VsZW1lbnQpO1xuICAgIGNvbnN0IG5vZGVzOiBGb3JjZUF0bGFzTm9kZUVsZW1lbnRbXSA9IFtdO1xuICAgIGVkZ2VzLmZvckVhY2goZWRnZSA9PiB7XG4gICAgICAgIG5vZGVzLnB1c2goZ2V0Tm9kZUJ5SWQoZWRnZS5zb3VyY2UsIGZvcmNlQXRsYXNFbGVtZW50KSk7XG4gICAgICAgIG5vZGVzLnB1c2goZ2V0Tm9kZUJ5SWQoZWRnZS50YXJnZXQsIGZvcmNlQXRsYXNFbGVtZW50KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9kZUdlbmVyYXRvcihub2RlOiBGb3JjZUF0bGFzTm9kZUVsZW1lbnQpIHtcbiAgICBjb25zdCBlZGdlUmVmID0gUGxhaXRFbGVtZW50LmdldEVsZW1lbnRSZWY8UGxhaXRDb21tb25FbGVtZW50UmVmPihub2RlKTtcbiAgICByZXR1cm4gZWRnZVJlZi5nZXRHZW5lcmF0b3I8Rm9yY2VBdGxhc05vZGVHZW5lcmF0b3I+KEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yLmtleSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpcnN0RGVwdGhOb2RlKGN1cnJlbnROb2RlSWQ6IHN0cmluZywgYWN0aXZlTm9kZUlkOiBzdHJpbmcsIGZvcmNlQXRsYXNFbGVtZW50OiBGb3JjZUF0bGFzRWxlbWVudCkge1xuICAgIGNvbnN0IGVkZ2VzID0gZ2V0RWRnZXMoZm9yY2VBdGxhc0VsZW1lbnQpO1xuICAgIHJldHVybiBlZGdlcy5zb21lKFxuICAgICAgICBzID0+IChzLnNvdXJjZSA9PT0gYWN0aXZlTm9kZUlkICYmIHMudGFyZ2V0ID09PSBjdXJyZW50Tm9kZUlkKSB8fCAocy50YXJnZXQgPT09IGFjdGl2ZU5vZGVJZCAmJiBzLnNvdXJjZSA9PT0gY3VycmVudE5vZGVJZClcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9kZUljb24obm9kZTogRm9yY2VBdGxhc05vZGVFbGVtZW50KSB7XG4gICAgY29uc3QgaWNvbkl0ZW0gPSB0eXBlb2Ygbm9kZS5pY29uID09PSAnb2JqZWN0JyAmJiBub2RlLmljb24ubmFtZSA/IG5vZGUuaWNvbiA6IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogaWNvbkl0ZW0gPyBpY29uSXRlbS5uYW1lIDogKG5vZGUuaWNvbiBhcyBzdHJpbmcpLFxuICAgICAgICBmb250U2l6ZTogKGljb25JdGVtICYmIGljb25JdGVtLmZvbnRTaXplKSB8fCBOT0RFX0lDT05fRk9OVF9TSVpFLFxuICAgICAgICBjb2xvcjogKGljb25JdGVtICYmIGljb25JdGVtLmNvbG9yKSB8fCBERUZBVUxUX05PREVfSUNPTl9DT0xPUlxuICAgIH07XG59XG4iXX0=
|