@plait/graph-viz 0.62.0-next.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +4 -0
  2. package/constants/default.d.ts +2 -0
  3. package/esm2022/constants/default.mjs +5 -0
  4. package/esm2022/force-atlas/constants.mjs +28 -0
  5. package/esm2022/force-atlas/edge.flavour.mjs +24 -0
  6. package/esm2022/force-atlas/force-atlas.flavour.mjs +51 -0
  7. package/esm2022/force-atlas/generators/edge.generator.mjs +29 -0
  8. package/esm2022/force-atlas/generators/node.generator.mjs +15 -0
  9. package/esm2022/force-atlas/node.flavour.mjs +55 -0
  10. package/esm2022/force-atlas/types.mjs +7 -0
  11. package/esm2022/force-atlas/utils/draw.mjs +70 -0
  12. package/esm2022/force-atlas/utils/edge.mjs +72 -0
  13. package/esm2022/force-atlas/utils/node.mjs +46 -0
  14. package/esm2022/force-atlas/with-force-atlas.mjs +70 -0
  15. package/esm2022/interfaces/element.mjs +12 -0
  16. package/esm2022/interfaces/index.mjs +2 -0
  17. package/esm2022/perfect-arrows/get-arrow.mjs +91 -0
  18. package/esm2022/perfect-arrows/utils.mjs +111 -0
  19. package/esm2022/plait-graph-viz.mjs +5 -0
  20. package/esm2022/public-api.mjs +8 -0
  21. package/fesm2022/plait-graph-viz.mjs +655 -0
  22. package/fesm2022/plait-graph-viz.mjs.map +1 -0
  23. package/force-atlas/constants.d.ts +19 -0
  24. package/force-atlas/edge.flavour.d.ts +15 -0
  25. package/force-atlas/force-atlas.flavour.d.ts +13 -0
  26. package/force-atlas/generators/edge.generator.d.ts +15 -0
  27. package/force-atlas/generators/node.generator.d.ts +10 -0
  28. package/force-atlas/node.flavour.d.ts +15 -0
  29. package/force-atlas/types.d.ts +28 -0
  30. package/force-atlas/utils/draw.d.ts +12 -0
  31. package/force-atlas/utils/edge.d.ts +14 -0
  32. package/force-atlas/utils/node.d.ts +10 -0
  33. package/force-atlas/with-force-atlas.d.ts +2 -0
  34. package/index.d.ts +5 -0
  35. package/interfaces/element.d.ts +19 -0
  36. package/interfaces/index.d.ts +1 -0
  37. package/package.json +32 -0
  38. package/perfect-arrows/get-arrow.d.ts +42 -0
  39. package/perfect-arrows/utils.d.ts +64 -0
  40. package/public-api.d.ts +4 -0
package/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # @plait/graph-viz
2
+
3
+ #### Dependence
4
+ - `@plait/core`
@@ -0,0 +1,2 @@
1
+ import { Options } from 'roughjs/bin/core';
2
+ export declare const DEFAULT_STYLES: Options;
@@ -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,28 @@
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 = 60;
8
+ export const DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER = 1.2;
9
+ export const DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER = 1.6;
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 DEFAULT_NODE_STYLES = {
16
+ ...DEFAULT_STYLES,
17
+ fill: '#6698FF',
18
+ strokeWidth: 0
19
+ };
20
+ export const DEFAULT_NODE_SCALING_RATIO = 600;
21
+ export const DEFAULT_LINE_STYLES = {
22
+ color: {
23
+ [EdgeDirection.IN]: '#73D897',
24
+ [EdgeDirection.OUT]: '#6698FF',
25
+ [EdgeDirection.NONE]: `#ddd`
26
+ }
27
+ };
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQVk7SUFDeEMsR0FBRyxjQUFjO0lBQ2pCLE1BQU0sRUFBRSxNQUFNO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsR0FBRyxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLEdBQUcsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsRUFBRSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFZO0lBQ3hDLEdBQUcsY0FBYztJQUNqQixJQUFJLEVBQUUsU0FBUztJQUNmLFdBQVcsRUFBRSxDQUFDO0NBQ2pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxHQUFHLENBQUM7QUFFOUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7SUFDL0IsS0FBSyxFQUFFO1FBQ0gsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUztRQUM3QixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTO1FBQzlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07S0FDL0I7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9TVFlMRVMgfSBmcm9tICcuLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBFZGdlRGlyZWN0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VER0VfU1RZTEVTOiBPcHRpb25zID0ge1xuICAgIC4uLkRFRkFVTFRfU1RZTEVTLFxuICAgIHN0cm9rZTogJyNkZGQnXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX1NJWkUgPSA2MDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9OT0RFX1NJWkVfTVVMVElQTElFUiA9IDEuMjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0FDVElWRV9XQVZFX05PREVfU0laRV9NVUxUSVBMSUVSID0gMS42O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTk9ERV9MQUJFTF9NQVJHSU5fVE9QID0gNDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfTEFCRUxfRk9OVF9TSVpFID0gMTI7XG5cbmV4cG9ydCBjb25zdCBTRUNPTkRfREVQVEhfTk9ERV9BTFBIQSA9IDAuNTtcbmV4cG9ydCBjb25zdCBTRUNPTkRfREVQVEhfTElORV9BTFBIQSA9IDAuNTtcbmV4cG9ydCBjb25zdCBBQ1RJVkVfQkFDS0dST1VORF9OT0RFX0FMUEhBID0gMC4xO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9OT0RFX1NUWUxFUzogT3B0aW9ucyA9IHtcbiAgICAuLi5ERUZBVUxUX1NUWUxFUyxcbiAgICBmaWxsOiAnIzY2OThGRicsXG4gICAgc3Ryb2tlV2lkdGg6IDBcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX05PREVfU0NBTElOR19SQVRJTyA9IDYwMDtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElORV9TVFlMRVMgPSB7XG4gICAgY29sb3I6IHtcbiAgICAgICAgW0VkZ2VEaXJlY3Rpb24uSU5dOiAnIzczRDg5NycsXG4gICAgICAgIFtFZGdlRGlyZWN0aW9uLk9VVF06ICcjNjY5OEZGJyxcbiAgICAgICAgW0VkZ2VEaXJlY3Rpb24uTk9ORV06IGAjZGRkYFxuICAgIH1cbn07XG4iXX0=
@@ -0,0 +1,24 @@
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
+ }
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5mbGF2b3VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9lZGdlLmZsYXZvdXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBb0IsVUFBVSxFQUE2QixNQUFNLGFBQWEsQ0FBQztBQUd0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG9CQUF1RDtJQUs5RjtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxVQUFVO1FBQ04sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUM3QixJQUFJLENBQUMsT0FBTyxFQUNaLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQzFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNqRCxDQUFDO0lBQ04sQ0FBQztJQUVELGdCQUFnQixDQUNaLEtBQW1FLEVBQ25FLFFBQXNFLElBQ3ZFLENBQUM7SUFFSixVQUFVLENBQUMsZUFBc0MsRUFBRSxjQUFxQyxJQUFHLENBQUM7SUFFNUYsT0FBTztRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25FbGVtZW50Rmxhdm91ciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgT25Db250ZXh0Q2hhbmdlZCwgUGxhaXRCb2FyZCwgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCBHcmFwaCBmcm9tICdncmFwaG9sb2d5JztcbmltcG9ydCB7IEZvcmNlQXRsYXNFZGdlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRm9yY2VBdGxhc0VkZ2VHZW5lcmF0b3IgfSBmcm9tICcuL2dlbmVyYXRvcnMvZWRnZS5nZW5lcmF0b3InO1xuaW1wb3J0IHsgZ2V0RWRnZUdlbmVyYXRvckRhdGEgfSBmcm9tICcuL3V0aWxzL2VkZ2UnO1xuXG5leHBvcnQgY2xhc3MgRm9yY2VBdGxhc0VkZ2VGbGF2b3VyIGV4dGVuZHMgQ29tbW9uRWxlbWVudEZsYXZvdXI8Rm9yY2VBdGxhc0VkZ2VFbGVtZW50LCBQbGFpdEJvYXJkPlxuICAgIGltcGxlbWVudHMgT25Db250ZXh0Q2hhbmdlZDxGb3JjZUF0bGFzRWRnZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+IHtcbiAgICBncmFwaCE6IEdyYXBoPE5vZGU+O1xuICAgIGVkZ2VHZW5lcmF0b3IhOiBGb3JjZUF0bGFzRWRnZUdlbmVyYXRvcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVHZW5lcmF0b3IoKSB7XG4gICAgICAgIHRoaXMuZWRnZUdlbmVyYXRvciA9IG5ldyBGb3JjZUF0bGFzRWRnZUdlbmVyYXRvcih0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5nZXRSZWYoKS5hZGRHZW5lcmF0b3IoRm9yY2VBdGxhc0VkZ2VHZW5lcmF0b3Iua2V5LCB0aGlzLmVkZ2VHZW5lcmF0b3IpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplR2VuZXJhdG9yKCk7XG4gICAgICAgIHRoaXMuZWRnZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyhcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudExvd2VySG9zdCh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgIGdldEVkZ2VHZW5lcmF0b3JEYXRhKHRoaXMuZWxlbWVudCwgdGhpcy5ib2FyZClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKFxuICAgICAgICB2YWx1ZTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzRWRnZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+LFxuICAgICAgICBwcmV2aW91czogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzRWRnZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+XG4gICAgKSB7fVxuXG4gICAgdXBkYXRlVGV4dChwcmV2aW91c0VsZW1lbnQ6IEZvcmNlQXRsYXNFZGdlRWxlbWVudCwgY3VycmVudEVsZW1lbnQ6IEZvcmNlQXRsYXNFZGdlRWxlbWVudCkge31cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,51 @@
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.adjustSizes = true;
31
+ settings.scalingRatio = DEFAULT_NODE_SCALING_RATIO;
32
+ settings.barnesHutOptimize = true;
33
+ const positions = forceAtlas2(this.graph, { iterations: 500, settings });
34
+ this.element.children?.forEach(child => {
35
+ if (ForceAtlasElement.isForceAtlasNodeElement(child)) {
36
+ const pos = positions[child.id];
37
+ child.points = [[pos.x, pos.y]];
38
+ }
39
+ });
40
+ }
41
+ initialize() {
42
+ super.initialize();
43
+ this.initializeGraph();
44
+ }
45
+ onContextChanged(value, previous) { }
46
+ updateText(previousElement, currentElement) { }
47
+ destroy() {
48
+ super.destroy();
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yY2UtYXRsYXMuZmxhdm91ci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvZm9yY2UtYXRsYXMuZmxhdm91ci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUEyRCxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3RyxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDL0IsT0FBTyxRQUFRLE1BQU0sNEJBQTRCLENBQUM7QUFDbEQsT0FBTyxXQUFXLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUUsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG9CQUFtRDtJQUl0RjtRQUNJLEtBQUssRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxJQUFJLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUNyQyxLQUFLLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO2dCQUNuQyxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNqQixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUM7aUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixRQUFRLENBQUMsWUFBWSxHQUFHLDBCQUEwQixDQUFDO1FBQ25ELFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLElBQUksaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVTtRQUNOLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGdCQUFnQixDQUNaLEtBQStELEVBQy9ELFFBQWtFLElBQ25FLENBQUM7SUFFSixVQUFVLENBQUMsZUFBa0MsRUFBRSxjQUFpQyxJQUFHLENBQUM7SUFFcEYsT0FBTztRQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25FbGVtZW50Rmxhdm91ciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgT25Db250ZXh0Q2hhbmdlZCwgUGxhaXRCb2FyZCwgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCwgY2FjaGVTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IEdyYXBoIGZyb20gJ2dyYXBob2xvZ3knO1xuaW1wb3J0IGNpcmN1bGFyIGZyb20gJ2dyYXBob2xvZ3ktbGF5b3V0L2NpcmN1bGFyJztcbmltcG9ydCBmb3JjZUF0bGFzMiBmcm9tICdncmFwaG9sb2d5LWxheW91dC1mb3JjZWF0bGFzMic7XG5pbXBvcnQgeyBGb3JjZUF0bGFzRWxlbWVudCwgRm9yY2VBdGxhc05vZGVFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfU0NBTElOR19SQVRJTywgREVGQVVMVF9OT0RFX1NJWkUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzRmxhdm91ciBleHRlbmRzIENvbW1vbkVsZW1lbnRGbGF2b3VyPEZvcmNlQXRsYXNFbGVtZW50LCBQbGFpdEJvYXJkPlxuICAgIGltcGxlbWVudHMgT25Db250ZXh0Q2hhbmdlZDxGb3JjZUF0bGFzRWxlbWVudCwgUGxhaXRCb2FyZD4ge1xuICAgIGdyYXBoITogR3JhcGg8Rm9yY2VBdGxhc05vZGVFbGVtZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVHcmFwaCgpIHtcbiAgICAgICAgdGhpcy5ncmFwaCA9IG5ldyBHcmFwaDxGb3JjZUF0bGFzTm9kZUVsZW1lbnQ+KCk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzTm9kZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZD8uc2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuc2l6ZSA9IERFRkFVTFRfTk9ERV9TSVpFO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKHRoaXMuYm9hcmQsIFtjaGlsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyYXBoLmFkZE5vZGUoY2hpbGQuaWQsIGNoaWxkKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzRWRnZUVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmFwaC5hZGRFZGdlKGNoaWxkLnNvdXJjZSwgY2hpbGQudGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNpcmN1bGFyLmFzc2lnbih0aGlzLmdyYXBoKTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBmb3JjZUF0bGFzMi5pbmZlclNldHRpbmdzKHRoaXMuZ3JhcGgpO1xuICAgICAgICBzZXR0aW5ncy5hZGp1c3RTaXplcyA9IHRydWU7XG4gICAgICAgIHNldHRpbmdzLnNjYWxpbmdSYXRpbyA9IERFRkFVTFRfTk9ERV9TQ0FMSU5HX1JBVElPO1xuICAgICAgICBzZXR0aW5ncy5iYXJuZXNIdXRPcHRpbWl6ZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvcmNlQXRsYXMyKHRoaXMuZ3JhcGgsIHsgaXRlcmF0aW9uczogNTAwLCBzZXR0aW5ncyB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50LmNoaWxkcmVuPy5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGlmIChGb3JjZUF0bGFzRWxlbWVudC5pc0ZvcmNlQXRsYXNOb2RlRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBwb3NpdGlvbnNbY2hpbGQuaWRdO1xuICAgICAgICAgICAgICAgIGNoaWxkLnBvaW50cyA9IFtbcG9zLngsIHBvcy55XV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplR3JhcGgoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKFxuICAgICAgICB2YWx1ZTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxGb3JjZUF0bGFzRWxlbWVudCwgUGxhaXRCb2FyZD4sXG4gICAgICAgIHByZXZpb3VzOiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0PEZvcmNlQXRsYXNFbGVtZW50LCBQbGFpdEJvYXJkPlxuICAgICkge31cblxuICAgIHVwZGF0ZVRleHQocHJldmlvdXNFbGVtZW50OiBGb3JjZUF0bGFzRWxlbWVudCwgY3VycmVudEVsZW1lbnQ6IEZvcmNlQXRsYXNFbGVtZW50KSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,29 @@
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
+ this.particleAnimation?.stop();
27
+ }
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS5nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL2ZvcmNlLWF0bGFzL2dlbmVyYXRvcnMvZWRnZS5nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQXFCLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsU0FBbUQ7YUFDckYsUUFBRyxHQUFHLGtCQUFrQixDQUFDO0lBRWhDLFlBQVksS0FBaUI7UUFDekIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBOEI7UUFDbEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE4QixFQUFFLElBQXVCO1FBQ3hELE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6SCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNFLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgY3JlYXRlRyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEdlbmVyYXRvciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgRm9yY2VBdGxhc0VkZ2VFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFZGdlRGlyZWN0aW9uLCBFZGdlR2VuZXJhdG9yRGF0YSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGRyYXdFZGdlLCBkcmF3UGFydGljbGUgfSBmcm9tICcuLi91dGlscy9kcmF3JztcbmltcG9ydCB7IHBsYXlFZGdlUGFydGljbGVBbmltYXRlIH0gZnJvbSAnLi4vdXRpbHMvZWRnZSc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzRWRnZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvcjxGb3JjZUF0bGFzRWRnZUVsZW1lbnQsIEVkZ2VHZW5lcmF0b3JEYXRhPiB7XG4gICAgc3RhdGljIGtleSA9ICdmb3JjZS1hdGxhcy1lZGdlJztcbiAgICBwYXJ0aWNsZUFuaW1hdGlvbj86IHsgc3RvcDogKCkgPT4gdm9pZDsgc3RhcnQ6ICgpID0+IHZvaWQgfTtcbiAgICBjb25zdHJ1Y3Rvcihib2FyZDogUGxhaXRCb2FyZCkge1xuICAgICAgICBzdXBlcihib2FyZCk7XG4gICAgfVxuXG4gICAgY2FuRHJhdyhlbGVtZW50OiBGb3JjZUF0bGFzRWRnZUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZHJhdyhlbGVtZW50OiBGb3JjZUF0bGFzRWRnZUVsZW1lbnQsIGRhdGE6IEVkZ2VHZW5lcmF0b3JEYXRhKSB7XG4gICAgICAgIGNvbnN0IGVkZ2VHID0gY3JlYXRlRygpO1xuICAgICAgICBjb25zdCBlZGdlRWxlbWVudCA9IGRyYXdFZGdlKGRhdGEuc3RhcnRQb2ludCwgZGF0YS5lbmRQb2ludCwgZGF0YS5kaXJlY3Rpb24sIGRhdGEuaXNTb3VyY2VBY3RpdmUgJiYgZGF0YS5pc1RhcmdldEFjdGl2ZSk7XG4gICAgICAgIGVkZ2VHLmFwcGVuZChlZGdlRWxlbWVudC5nKTtcbiAgICAgICAgaWYgKGRhdGEuZGlyZWN0aW9uICE9PSBFZGdlRGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpY2xlID0gZHJhd1BhcnRpY2xlKHRoaXMuYm9hcmQsIGRhdGEuc3RhcnRQb2ludCwgZGF0YS5kaXJlY3Rpb24pO1xuICAgICAgICAgICAgZWRnZUVsZW1lbnQuZy5hcHBlbmQocGFydGljbGUpO1xuICAgICAgICAgICAgdGhpcy5wYXJ0aWNsZUFuaW1hdGlvbiA9IHBsYXlFZGdlUGFydGljbGVBbmltYXRlKGVkZ2VFbGVtZW50LnBhdGgsIHBhcnRpY2xlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWRnZUc7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXJ0aWNsZUFuaW1hdGlvbj8uc3RvcCgpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import { Generator } from '@plait/common';
2
+ import { drawNode } from '../utils/draw';
3
+ export class ForceAtlasNodeGenerator extends Generator {
4
+ static { this.key = 'force-atlas-node'; }
5
+ constructor(board) {
6
+ super(board);
7
+ }
8
+ canDraw(element) {
9
+ return true;
10
+ }
11
+ draw(element, data) {
12
+ return drawNode(this.board, element, element?.points?.[0] || [0, 0], data);
13
+ }
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL2ZvcmNlLWF0bGFzL2dlbmVyYXRvcnMvbm9kZS5nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxTQUFtRDthQUNyRixRQUFHLEdBQUcsa0JBQWtCLENBQUM7SUFDaEMsWUFBWSxLQUFpQjtRQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUE4QjtRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQThCLEVBQUUsSUFBdUI7UUFDeEQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRyYXdOb2RlIH0gZnJvbSAnLi4vdXRpbHMvZHJhdyc7XG5pbXBvcnQgeyBOb2RlR2VuZXJhdG9yRGF0YSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yPEZvcmNlQXRsYXNOb2RlRWxlbWVudCwgTm9kZUdlbmVyYXRvckRhdGE+IHtcbiAgICBzdGF0aWMga2V5ID0gJ2ZvcmNlLWF0bGFzLW5vZGUnO1xuICAgIGNvbnN0cnVjdG9yKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHN1cGVyKGJvYXJkKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCwgZGF0YTogTm9kZUdlbmVyYXRvckRhdGEpIHtcbiAgICAgICAgcmV0dXJuIGRyYXdOb2RlKHRoaXMuYm9hcmQsIGVsZW1lbnQsIGVsZW1lbnQ/LnBvaW50cz8uWzBdIHx8IFswLCAwXSwgZGF0YSk7XG4gICAgfVxufVxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5mbGF2b3VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JhcGgtdml6L3NyYy9mb3JjZS1hdGxhcy9ub2RlLmZsYXZvdXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFFSCxVQUFVLEVBQ1YsU0FBUyxFQUVULHFCQUFxQixFQUNyQixtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFHckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUxRixNQUFNLE9BQU8scUJBQXNCLFNBQVEsb0JBQXVEO0lBSzlGO1FBQ0ksS0FBSyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELFVBQVU7UUFDTixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQXNCLENBQUM7UUFDaEgsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsWUFBWSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDekgsUUFBUTtZQUNSLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDO1NBQ3hFLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0IsQ0FDWixLQUFtRSxFQUNuRSxRQUFzRTtRQUV0RSxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQWEsQ0FBQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDakIscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUNuRCxRQUFRLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO29CQUM3QyxZQUFZLEVBQUUsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQztpQkFDckcsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzRSxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0MsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMzSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLGVBQXNDLEVBQUUsY0FBcUMsSUFBRyxDQUFDO0lBRTVGLE9BQU87UUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uRWxlbWVudEZsYXZvdXIgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7XG4gICAgT25Db250ZXh0Q2hhbmdlZCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0Tm9kZSxcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCBHcmFwaCBmcm9tICdncmFwaG9sb2d5JztcbmltcG9ydCB7IEZvcmNlQXRsYXNFbGVtZW50LCBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3JzL25vZGUuZ2VuZXJhdG9yJztcbmltcG9ydCB7IGdldEVkZ2VHZW5lcmF0b3IsIGdldEVkZ2VHZW5lcmF0b3JEYXRhLCBnZXRFZGdlc0luU291cmNlT3JUYXJnZXQgfSBmcm9tICcuL3V0aWxzL2VkZ2UnO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZE5vZGVzQnlJZCwgZ2V0Tm9kZUdlbmVyYXRvciwgaXNGaXJzdERlcHRoTm9kZSB9IGZyb20gJy4vdXRpbHMvbm9kZSc7XG5cbmV4cG9ydCBjbGFzcyBGb3JjZUF0bGFzTm9kZUZsYXZvdXIgZXh0ZW5kcyBDb21tb25FbGVtZW50Rmxhdm91cjxGb3JjZUF0bGFzTm9kZUVsZW1lbnQsIFBsYWl0Qm9hcmQ+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/OiBzdHJpbmc7XG4gICAgYm9yZGVyUmFkaXVzPzogbnVtYmVyO1xuICAgIGhvdmVyU3Ryb2tlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VHZW5lcmF0b3JEYXRhIGV4dGVuZHMgR2VuZXJhdG9yRXh0cmFEYXRhIHtcbiAgICBzdGFydFBvaW50OiBQb2ludDtcbiAgICBlbmRQb2ludDogUG9pbnQ7XG4gICAgaXNTb3VyY2VBY3RpdmU6IGJvb2xlYW47XG4gICAgaXNUYXJnZXRBY3RpdmU6IGJvb2xlYW47XG4gICAgZGlyZWN0aW9uOiBFZGdlRGlyZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVHZW5lcmF0b3JEYXRhIGV4dGVuZHMgR2VuZXJhdG9yRXh0cmFEYXRhIHtcbiAgICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBpc0ZpcnN0RGVwdGg6IGJvb2xlYW47XG59XG4iXX0=
@@ -0,0 +1,70 @@
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
+ let nodeStyles = {
9
+ ...DEFAULT_NODE_STYLES,
10
+ ...(node.styles || {})
11
+ };
12
+ let { x, y } = normalizePoint(point);
13
+ let nodeRadius = (node.size ?? DEFAULT_NODE_SIZE) / 2;
14
+ if (options.isActive) {
15
+ nodeRadius = nodeRadius * DEFAULT_ACTIVE_NODE_SIZE_MULTIPLIER;
16
+ }
17
+ const nodeG = drawCircle(roughSVG, [0, 0], nodeRadius, nodeStyles);
18
+ nodeG.setAttribute('transform', `translate(${x}, ${y})`);
19
+ const text = document.createElementNS(NS, 'text');
20
+ text.textContent = node.label || '';
21
+ text.setAttribute('text-anchor', `middle`);
22
+ text.setAttribute('dominant-baseline', `hanging`);
23
+ text.setAttribute('x', `0`);
24
+ text.setAttribute('font-size', `${DEFAULT_NODE_LABEL_FONT_SIZE}px`);
25
+ if (options.isActive) {
26
+ const waveRadius = nodeRadius * DEFAULT_ACTIVE_WAVE_NODE_SIZE_MULTIPLIER;
27
+ const waveCircle = drawCircle(roughSVG, [0, 0], waveRadius, DEFAULT_NODE_STYLES);
28
+ waveCircle.setAttribute('opacity', ACTIVE_BACKGROUND_NODE_ALPHA.toString());
29
+ nodeG.append(waveCircle);
30
+ text.setAttribute('y', `${waveRadius / 2 + DEFAULT_NODE_LABEL_MARGIN_TOP}`);
31
+ }
32
+ else {
33
+ if (!options.isFirstDepth) {
34
+ nodeG.setAttribute('opacity', SECOND_DEPTH_NODE_ALPHA.toString());
35
+ }
36
+ text.setAttribute('y', `${nodeRadius / 2 + DEFAULT_NODE_LABEL_MARGIN_TOP}`);
37
+ }
38
+ nodeG.append(text);
39
+ return nodeG;
40
+ }
41
+ export function drawEdge(startPoint, endPoint, direction, isMutual) {
42
+ const arrow = getArrow(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {
43
+ stretch: 0.4,
44
+ flip: direction === EdgeDirection.NONE ? false : isMutual,
45
+ padEnd: DEFAULT_NODE_SIZE / 4,
46
+ padStart: DEFAULT_NODE_SIZE / 4
47
+ });
48
+ const [sx, sy, cx, cy, ex, ey, ae, as, ec] = arrow;
49
+ const g = createG();
50
+ const path = createPath();
51
+ path.setAttribute('d', `M${sx},${sy} Q${cx},${cy} ${ex},${ey}`);
52
+ path.setAttribute('fill', 'none');
53
+ path.setAttribute('stroke', DEFAULT_LINE_STYLES.color[direction]);
54
+ g.append(path);
55
+ return {
56
+ g,
57
+ path
58
+ };
59
+ }
60
+ export function drawParticle(board, startPoint, direction) {
61
+ const roughSVG = PlaitBoard.getRoughSVG(board);
62
+ const pointG = drawCircle(roughSVG, [0, 0], 5, {
63
+ ...DEFAULT_STYLES,
64
+ strokeWidth: 0,
65
+ fill: DEFAULT_LINE_STYLES.color[direction]
66
+ });
67
+ pointG.setAttribute('transform', `translate(${startPoint[0]}, ${startPoint[1]})`);
68
+ return pointG;
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvZHJhdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFTLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRyxPQUFPLFFBQVEsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsNEJBQTRCLEVBQzVCLG1DQUFtQyxFQUNuQyx3Q0FBd0MsRUFDeEMsbUJBQW1CLEVBQ25CLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0IsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDMUIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE1BQU0sVUFBVSxRQUFRLENBQ3BCLEtBQWlCLEVBQ2pCLElBQTJCLEVBQzNCLEtBQVksRUFDWixPQUFxRDtJQUVyRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLElBQUksVUFBVSxHQUFlO1FBQ3pCLEdBQUcsbUJBQW1CO1FBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztLQUN6QixDQUFDO0lBQ0YsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25C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QUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsT0FBTztRQUNILENBQUM7UUFDRCxJQUFJO0tBQ1AsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWlCLEVBQUUsVUFBaUIsRUFBRSxTQUF3QjtJQUN2RixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQzNDLEdBQUcsY0FBYztRQUNqQixXQUFXLEVBQUUsQ0FBQztRQUNkLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0tBQzdDLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEYsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVkZ2VEaXJlY3Rpb24sIE5vZGVTdHlsZXMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBOUywgUGxhaXRCb2FyZCwgUG9pbnQsIGNyZWF0ZUcsIGNyZWF0ZVBhdGgsIGRyYXdDaXJjbGUsIG5vcm1hbGl6ZVBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IGdldEFycm93IGZyb20gJy4uLy4uL3BlcmZlY3QtYXJyb3dzL2dldC1hcnJvdyc7XG5pbXBvcnQge1xuICAgIEFDVElWRV9CQUNLR1JPVU5EX05PREVfQUxQSEEsXG4gICAgREVGQVVMVF9BQ1RJVkVfTk9ERV9TSVpFX01VTFRJUExJRVIsXG4gICAgREVGQVVMVF9BQ1RJVkVfV0FWRV9OT0RFX1NJWkVfTVVMVElQTElFUixcbiAgICBERUZBVUxUX0xJTkVfU1RZTEVTLFxuICAgIERFRkFVTFRfTk9ERV9MQUJFTF9GT05UX1NJWkUsXG4gICAgREVGQVVMVF9OT0RFX0xBQkVMX01BUkdJTl9UT1AsXG4gICAgREVGQVVMVF9OT0RFX1NJWkUsXG4gICAgREVGQVVMVF9OT0RFX1NUWUxFUyxcbiAgICBTRUNPTkRfREVQVEhfTk9ERV9BTFBIQVxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgREVGQVVMVF9TVFlMRVMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdCc7XG5pbXBvcnQgeyBGb3JjZUF0bGFzTm9kZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdOb2RlKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG5vZGU6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgb3B0aW9uczogeyBpc0FjdGl2ZTogYm9vbGVhbjsgaXNGaXJzdERlcHRoOiBib29sZWFuIH1cbikge1xuICAgIGNvbnN0IHJvdWdoU1ZHID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgbGV0IG5vZGVTdHlsZXM6IE5vZGVTdHlsZXMgPSB7XG4gICAgICAgIC4uLkRFRkFVTFRfTk9ERV9TVFlMRVMsXG4gICAgICAgIC4uLihub2RlLnN0eWxlcyB8fCB7fSlcbiAgICB9O1xuICAgIGxldCB7IHgsIHkgfSA9IG5vcm1hbGl6ZVBvaW50KHBvaW50KTtcbiAgICBsZXQgbm9kZVJhZGl1cyA9IChub2RlLnNpemUgPz8gREVGQVVMVF9OT0RFX1NJWkUpIC8gMjtcbiAgICBpZiAob3B0aW9ucy5pc0FjdGl2ZSkge1xuICAgICAgICBub2RlUmFkaXVzID0gbm9kZVJhZGl1cyAqIERFRkFVTFRfQUNUSVZFX05PREVfU0laRV9NVUxUSVBMSUVSO1xuICAgIH1cbiAgICBjb25zdCBub2RlRyA9IGRyYXdDaXJjbGUocm91Z2hTVkcsIFswLCAwXSwgbm9kZVJhZGl1cywgbm9kZVN0eWxlcyk7XG4gICAgbm9kZUcuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7eH0sICR7eX0pYCk7XG4gICAgY29uc3QgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywgJ3RleHQnKTtcbiAgICB0ZXh0LnRleHRDb250ZW50ID0gbm9kZS5sYWJlbCB8fCAnJztcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgndGV4dC1hbmNob3InLCBgbWlkZGxlYCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2RvbWluYW50LWJhc2VsaW5lJywgYGhhbmdpbmdgKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgneCcsIGAwYCk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsIGAke0RFRkFVTFRfTk9ERV9MQUJFTF9GT05UX1NJWkV9cHhgKTtcbiAgICBpZiAob3B0aW9ucy5pc0FjdGl2ZSkge1xuICAgICAgICBjb25zdCB3YXZlUmFkaXVzID0gbm9kZVJhZGl1cyAqIERFRkFVTFRfQUNUSVZFX1dBVkVfTk9ERV9TSVpFX01VTFRJUExJRVI7XG4gICAgICAgIGNvbnN0IHdhdmVDaXJjbGUgPSBkcmF3Q2lyY2xlKHJvdWdoU1ZHLCBbMCwgMF0sIHdhdmVSYWRpdXMsIERFRkFVTFRfTk9ERV9TVFlMRVMpO1xuICAgICAgICB3YXZlQ2lyY2xlLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIEFDVElWRV9CQUNLR1JPVU5EX05PREVfQUxQSEEudG9TdHJpbmcoKSk7XG4gICAgICAgIG5vZGVHLmFwcGVuZCh3YXZlQ2lyY2xlKTtcbiAgICAgICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3knLCBgJHt3YXZlUmFkaXVzIC8gMiArIERFRkFVTFRfTk9ERV9MQUJFTF9NQVJHSU5fVE9QfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5pc0ZpcnN0RGVwdGgpIHtcbiAgICAgICAgICAgIG5vZGVHLnNldEF0dHJpYnV0ZSgnb3BhY2l0eScsIFNFQ09ORF9ERVBUSF9OT0RFX0FMUEhBLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRleHQuc2V0QXR0cmlidXRlKCd5JywgYCR7bm9kZVJhZGl1cyAvIDIgKyBERUZBVUxUX05PREVfTEFCRUxfTUFSR0lOX1RPUH1gKTtcbiAgICB9XG4gICAgbm9kZUcuYXBwZW5kKHRleHQpO1xuICAgIHJldHVybiBub2RlRztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdFZGdlKHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQsIGRpcmVjdGlvbjogRWRnZURpcmVjdGlvbiwgaXNNdXR1YWw6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBhcnJvdyA9IGdldEFycm93KHN0YXJ0UG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSwge1xuICAgICAgICBzdHJldGNoOiAwLjQsXG4gICAgICAgIGZsaXA6IGRpcmVjdGlvbiA9PT0gRWRnZURpcmVjdGlvbi5OT05FID8gZmFsc2UgOiBpc011dHVhbCxcbiAgICAgICAgcGFkRW5kOiBERUZBVUxUX05PREVfU0laRSAvIDQsXG4gICAgICAgIHBhZFN0YXJ0OiBERUZBVUxUX05PREVfU0laRSAvIDRcbiAgICB9KTtcbiAgICBjb25zdCBbc3gsIHN5LCBjeCwgY3ksIGV4LCBleSwgYWUsIGFzLCBlY10gPSBhcnJvdztcbiAgICBjb25zdCBnID0gY3JlYXRlRygpO1xuICAgIGNvbnN0IHBhdGggPSBjcmVhdGVQYXRoKCk7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2QnLCBgTSR7c3h9LCR7c3l9IFEke2N4fSwke2N5fSAke2V4fSwke2V5fWApO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgREVGQVVMVF9MSU5FX1NUWUxFUy5jb2xvcltkaXJlY3Rpb25dKTtcbiAgICBnLmFwcGVuZChwYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnLFxuICAgICAgICBwYXRoXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdQYXJ0aWNsZShib2FyZDogUGxhaXRCb2FyZCwgc3RhcnRQb2ludDogUG9pbnQsIGRpcmVjdGlvbjogRWRnZURpcmVjdGlvbikge1xuICAgIGNvbnN0IHJvdWdoU1ZHID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgY29uc3QgcG9pbnRHID0gZHJhd0NpcmNsZShyb3VnaFNWRywgWzAsIDBdLCA1LCB7XG4gICAgICAgIC4uLkRFRkFVTFRfU1RZTEVTLFxuICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgZmlsbDogREVGQVVMVF9MSU5FX1NUWUxFUy5jb2xvcltkaXJlY3Rpb25dXG4gICAgfSk7XG4gICAgcG9pbnRHLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke3N0YXJ0UG9pbnRbMF19LCAke3N0YXJ0UG9pbnRbMV19KWApO1xuICAgIHJldHVybiBwb2ludEc7XG59XG4iXX0=
@@ -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,46 @@
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
+ export function getNodes(forceAtlasElement, andBack) {
6
+ return forceAtlasElement.children?.filter(f => ForceAtlasElement.isForceAtlasNodeElement(f) && (andBack?.(f) ?? true));
7
+ }
8
+ export function getNodeById(id, forceAtlasElement) {
9
+ const node = getNodes(forceAtlasElement, node => node.id === id)?.[0];
10
+ if (!node) {
11
+ throw new Error('can not find node.');
12
+ }
13
+ return node;
14
+ }
15
+ export function getIsNodeActive(id, selectElements) {
16
+ return selectElements.some(node => node.id === id);
17
+ }
18
+ export function isHitNode(node, point) {
19
+ const { x, y } = normalizePoint(node.points[0]);
20
+ const size = node.size;
21
+ const hitFlowNode = RectangleClient.isHit(RectangleClient.getRectangleByPoints(point), {
22
+ x: x - size / 2,
23
+ y: y - size / 2,
24
+ width: size,
25
+ height: size
26
+ });
27
+ return hitFlowNode;
28
+ }
29
+ export function getAssociatedNodesById(id, forceAtlasElement) {
30
+ const edges = getEdgesInSourceOrTarget(id, forceAtlasElement);
31
+ const nodes = [];
32
+ edges.forEach(edge => {
33
+ nodes.push(getNodeById(edge.source, forceAtlasElement));
34
+ nodes.push(getNodeById(edge.target, forceAtlasElement));
35
+ });
36
+ return nodes;
37
+ }
38
+ export function getNodeGenerator(node) {
39
+ const edgeRef = PlaitElement.getElementRef(node);
40
+ return edgeRef.getGenerator(ForceAtlasNodeGenerator.key);
41
+ }
42
+ export function isFirstDepthNode(currentNodeId, activeNodeId, forceAtlasElement) {
43
+ const edges = getEdges(forceAtlasElement);
44
+ return edges.some(s => (s.source === activeNodeId && s.target === currentNodeId) || (s.target === activeNodeId && s.source === currentNodeId));
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvdXRpbHMvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFTLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFdkUsTUFBTSxVQUFVLFFBQVEsQ0FBQyxpQkFBb0MsRUFBRSxPQUFrRDtJQUM3RyxPQUFPLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQ3JDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FDbkQsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFVLEVBQUUsaUJBQW9DO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEVBQVUsRUFBRSxjQUF1QztJQUMvRSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQTJCLEVBQUUsS0FBcUI7SUFDeEUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFLLENBQUM7SUFDeEIsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkYsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDZixLQUFLLEVBQUUsSUFBSTtRQUNYLE1BQU0sRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUFVLEVBQUUsaUJBQW9DO0lBQ25GLE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7SUFDMUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqQixLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBMkI7SUFDeEQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBd0IsSUFBSSxDQUFDLENBQUM7SUFDeEUsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUEwQix1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLGFBQXFCLEVBQUUsWUFBb0IsRUFBRSxpQkFBb0M7SUFDOUcsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxhQUFhLENBQUMsQ0FDOUgsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIG5vcm1hbGl6ZVBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRm9yY2VBdGxhc0VsZW1lbnQsIEZvcmNlQXRsYXNOb2RlRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0RWRnZXMsIGdldEVkZ2VzSW5Tb3VyY2VPclRhcmdldCB9IGZyb20gJy4vZWRnZSc7XG5pbXBvcnQgeyBQbGFpdENvbW1vbkVsZW1lbnRSZWYgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IEZvcmNlQXRsYXNOb2RlR2VuZXJhdG9yIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy9ub2RlLmdlbmVyYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2Rlcyhmb3JjZUF0bGFzRWxlbWVudDogRm9yY2VBdGxhc0VsZW1lbnQsIGFuZEJhY2s/OiAoZWRnZTogRm9yY2VBdGxhc05vZGVFbGVtZW50KSA9PiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGZvcmNlQXRsYXNFbGVtZW50LmNoaWxkcmVuPy5maWx0ZXIoXG4gICAgICAgIGYgPT4gRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzTm9kZUVsZW1lbnQoZikgJiYgKGFuZEJhY2s/LihmKSA/PyB0cnVlKVxuICAgICkgYXMgRm9yY2VBdGxhc05vZGVFbGVtZW50W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlQnlJZChpZDogc3RyaW5nLCBmb3JjZUF0bGFzRWxlbWVudDogRm9yY2VBdGxhc0VsZW1lbnQpIHtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZXMoZm9yY2VBdGxhc0VsZW1lbnQsIG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpPy5bMF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCBmaW5kIG5vZGUuJyk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNOb2RlQWN0aXZlKGlkOiBzdHJpbmcsIHNlbGVjdEVsZW1lbnRzOiBGb3JjZUF0bGFzTm9kZUVsZW1lbnRbXSkge1xuICAgIHJldHVybiBzZWxlY3RFbGVtZW50cy5zb21lKG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIaXROb2RlKG5vZGU6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCwgcG9pbnQ6IFtQb2ludCwgUG9pbnRdKSB7XG4gICAgY29uc3QgeyB4LCB5IH0gPSBub3JtYWxpemVQb2ludChub2RlLnBvaW50cyFbMF0pO1xuICAgIGNvbnN0IHNpemUgPSBub2RlLnNpemUhO1xuICAgIGNvbnN0IGhpdEZsb3dOb2RlID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludCksIHtcbiAgICAgICAgeDogeCAtIHNpemUgLyAyLFxuICAgICAgICB5OiB5IC0gc2l6ZSAvIDIsXG4gICAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgICBoZWlnaHQ6IHNpemVcbiAgICB9KTtcbiAgICByZXR1cm4gaGl0Rmxvd05vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBc3NvY2lhdGVkTm9kZXNCeUlkKGlkOiBzdHJpbmcsIGZvcmNlQXRsYXNFbGVtZW50OiBGb3JjZUF0bGFzRWxlbWVudCkge1xuICAgIGNvbnN0IGVkZ2VzID0gZ2V0RWRnZXNJblNvdXJjZU9yVGFyZ2V0KGlkLCBmb3JjZUF0bGFzRWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZXM6IEZvcmNlQXRsYXNOb2RlRWxlbWVudFtdID0gW107XG4gICAgZWRnZXMuZm9yRWFjaChlZGdlID0+IHtcbiAgICAgICAgbm9kZXMucHVzaChnZXROb2RlQnlJZChlZGdlLnNvdXJjZSwgZm9yY2VBdGxhc0VsZW1lbnQpKTtcbiAgICAgICAgbm9kZXMucHVzaChnZXROb2RlQnlJZChlZGdlLnRhcmdldCwgZm9yY2VBdGxhc0VsZW1lbnQpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlR2VuZXJhdG9yKG5vZGU6IEZvcmNlQXRsYXNOb2RlRWxlbWVudCkge1xuICAgIGNvbnN0IGVkZ2VSZWYgPSBQbGFpdEVsZW1lbnQuZ2V0RWxlbWVudFJlZjxQbGFpdENvbW1vbkVsZW1lbnRSZWY+KG5vZGUpO1xuICAgIHJldHVybiBlZGdlUmVmLmdldEdlbmVyYXRvcjxGb3JjZUF0bGFzTm9kZUdlbmVyYXRvcj4oRm9yY2VBdGxhc05vZGVHZW5lcmF0b3Iua2V5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyc3REZXB0aE5vZGUoY3VycmVudE5vZGVJZDogc3RyaW5nLCBhY3RpdmVOb2RlSWQ6IHN0cmluZywgZm9yY2VBdGxhc0VsZW1lbnQ6IEZvcmNlQXRsYXNFbGVtZW50KSB7XG4gICAgY29uc3QgZWRnZXMgPSBnZXRFZGdlcyhmb3JjZUF0bGFzRWxlbWVudCk7XG4gICAgcmV0dXJuIGVkZ2VzLnNvbWUoXG4gICAgICAgIHMgPT4gKHMuc291cmNlID09PSBhY3RpdmVOb2RlSWQgJiYgcy50YXJnZXQgPT09IGN1cnJlbnROb2RlSWQpIHx8IChzLnRhcmdldCA9PT0gYWN0aXZlTm9kZUlkICYmIHMuc291cmNlID09PSBjdXJyZW50Tm9kZUlkKVxuICAgICk7XG59XG4iXX0=
@@ -0,0 +1,70 @@
1
+ import { PlaitPluginKey, RectangleClient } from '@plait/core';
2
+ import { ForceAtlasFlavour } from './force-atlas.flavour';
3
+ import { ForceAtlasNodeFlavour } from './node.flavour';
4
+ import { ForceAtlasEdgeFlavour } from './edge.flavour';
5
+ import { ForceAtlasElement } from '../interfaces';
6
+ import { isHitNode } from './utils/node';
7
+ export const withForceAtlas = (board) => {
8
+ const { drawElement, getRectangle, isRectangleHit, isHit, isInsidePoint, isMovable, isAlign, getRelatedFragment } = board;
9
+ board.drawElement = (context) => {
10
+ if (ForceAtlasElement.isForceAtlas(context.element)) {
11
+ return ForceAtlasFlavour;
12
+ }
13
+ else if (ForceAtlasElement.isForceAtlasNodeElement(context.element)) {
14
+ return ForceAtlasNodeFlavour;
15
+ }
16
+ else if (ForceAtlasElement.isForceAtlasEdgeElement(context.element)) {
17
+ return ForceAtlasEdgeFlavour;
18
+ }
19
+ return drawElement(context);
20
+ };
21
+ board.getRectangle = (element) => {
22
+ if (element.type === 'force-atlas') {
23
+ return {
24
+ width: 0,
25
+ height: 0,
26
+ x: 0,
27
+ y: 0
28
+ };
29
+ }
30
+ else if (ForceAtlasElement.isForceAtlasNodeElement(element)) {
31
+ return RectangleClient.getRectangleByPoints(element.points || []);
32
+ }
33
+ else if (ForceAtlasElement.isForceAtlasEdgeElement(element)) {
34
+ return {
35
+ width: 0,
36
+ height: 0,
37
+ x: 0,
38
+ y: 0
39
+ };
40
+ }
41
+ return getRectangle(element);
42
+ };
43
+ board.isRectangleHit = (element, selection) => {
44
+ return isRectangleHit(element, selection);
45
+ };
46
+ board.isRectangleHit = (element, range) => {
47
+ if (ForceAtlasElement.isForceAtlasNodeElement(element)) {
48
+ return isHitNode(element, [range.anchor, range.focus]);
49
+ }
50
+ return isRectangleHit(element, range);
51
+ };
52
+ board.isHit = (element, point) => {
53
+ if (ForceAtlasElement.isForceAtlasNodeElement(element)) {
54
+ return isHitNode(element, [point, point]);
55
+ }
56
+ return isHit(element, point);
57
+ };
58
+ board.isInsidePoint = (element, point) => {
59
+ return isInsidePoint(element, point);
60
+ };
61
+ board.isMovable = element => {
62
+ if (ForceAtlasElement.isForceAtlasNodeElement(element)) {
63
+ return true;
64
+ }
65
+ return isMovable(element);
66
+ };
67
+ board.setPluginOptions(PlaitPluginKey.withSelection, { isMultiple: false });
68
+ return board;
69
+ };
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1mb3JjZS1hdGxhcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvZm9yY2UtYXRsYXMvd2l0aC1mb3JjZS1hdGxhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsY0FBYyxFQUVkLGVBQWUsRUFHbEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFMUgsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtRQUN2RCxJQUFJLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPLGlCQUFpQixDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8scUJBQXFCLENBQUM7UUFDakMsQ0FBQzthQUFNLElBQUksaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDcEUsT0FBTyxxQkFBcUIsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFlBQVksR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDakMsT0FBTztnQkFDSCxLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsQ0FBQztnQkFDVCxDQUFDLEVBQUUsQ0FBQztnQkFDSixDQUFDLEVBQUUsQ0FBQzthQUNQLENBQUM7UUFDTixDQUFDO2FBQU0sSUFBSSxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLElBQUksaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxPQUFPO2dCQUNILEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxDQUFDO2dCQUNULENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2FBQ1AsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsT0FBcUIsRUFBRSxTQUFvQixFQUFFLEVBQUU7UUFDbkUsT0FBTyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUNGLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JELE9BQU8sU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzdCLElBQUksaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEtBQVksRUFBRSxFQUFFO1FBQzFELE9BQU8sYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ3hCLElBQUksaUJBQWlCLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDO0lBRUQsS0FBMkIsQ0FBQyxnQkFBZ0IsQ0FBb0IsY0FBYyxDQUFDLGFBQWEsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRXRILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUGxhaXRPcHRpb25zQm9hcmQsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCxcbiAgICBQbGFpdFBsdWdpbktleSxcbiAgICBQb2ludCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgU2VsZWN0aW9uLFxuICAgIFdpdGhQbHVnaW5PcHRpb25zXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEZvcmNlQXRsYXNGbGF2b3VyIH0gZnJvbSAnLi9mb3JjZS1hdGxhcy5mbGF2b3VyJztcbmltcG9ydCB7IEZvcmNlQXRsYXNOb2RlRmxhdm91ciB9IGZyb20gJy4vbm9kZS5mbGF2b3VyJztcbmltcG9ydCB7IEZvcmNlQXRsYXNFZGdlRmxhdm91ciB9IGZyb20gJy4vZWRnZS5mbGF2b3VyJztcbmltcG9ydCB7IEZvcmNlQXRsYXNFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0hpdE5vZGUgfSBmcm9tICcuL3V0aWxzL25vZGUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aEZvcmNlQXRsYXMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IGRyYXdFbGVtZW50LCBnZXRSZWN0YW5nbGUsIGlzUmVjdGFuZ2xlSGl0LCBpc0hpdCwgaXNJbnNpZGVQb2ludCwgaXNNb3ZhYmxlLCBpc0FsaWduLCBnZXRSZWxhdGVkRnJhZ21lbnQgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuZHJhd0VsZW1lbnQgPSAoY29udGV4dDogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzKGNvbnRleHQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBGb3JjZUF0bGFzRmxhdm91cjtcbiAgICAgICAgfSBlbHNlIGlmIChGb3JjZUF0bGFzRWxlbWVudC5pc0ZvcmNlQXRsYXNOb2RlRWxlbWVudChjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gRm9yY2VBdGxhc05vZGVGbGF2b3VyO1xuICAgICAgICB9IGVsc2UgaWYgKEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc0VkZ2VFbGVtZW50KGNvbnRleHQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBGb3JjZUF0bGFzRWRnZUZsYXZvdXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXRSZWN0YW5nbGUgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdmb3JjZS1hdGxhcycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChGb3JjZUF0bGFzRWxlbWVudC5pc0ZvcmNlQXRsYXNOb2RlRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyB8fCBbXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoRm9yY2VBdGxhc0VsZW1lbnQuaXNGb3JjZUF0bGFzRWRnZUVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc1JlY3RhbmdsZUhpdCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdChlbGVtZW50LCBzZWxlY3Rpb24pO1xuICAgIH07XG4gICAgYm9hcmQuaXNSZWN0YW5nbGVIaXQgPSAoZWxlbWVudCwgcmFuZ2UpID0+IHtcbiAgICAgICAgaWYgKEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc05vZGVFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNIaXROb2RlKGVsZW1lbnQsIFtyYW5nZS5hbmNob3IsIHJhbmdlLmZvY3VzXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0KGVsZW1lbnQsIHJhbmdlKTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNIaXQgPSAoZWxlbWVudCwgcG9pbnQpID0+IHtcbiAgICAgICAgaWYgKEZvcmNlQXRsYXNFbGVtZW50LmlzRm9yY2VBdGxhc05vZGVFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNIaXROb2RlKGVsZW1lbnQsIFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNIaXQoZWxlbWVudCwgcG9pbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc0luc2lkZVBvaW50ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgIHJldHVybiBpc0luc2lkZVBvaW50KGVsZW1lbnQsIHBvaW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaXNNb3ZhYmxlID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChGb3JjZUF0bGFzRWxlbWVudC5pc0ZvcmNlQXRsYXNOb2RlRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTW92YWJsZShlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgKGJvYXJkIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5zZXRQbHVnaW5PcHRpb25zPFdpdGhQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7IGlzTXVsdGlwbGU6IGZhbHNlIH0pO1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ export const ForceAtlasElement = {
2
+ isForceAtlas: (value) => {
3
+ return value?.type === 'force-atlas';
4
+ },
5
+ isForceAtlasNodeElement: (value) => {
6
+ return value && value.label && value.icon;
7
+ },
8
+ isForceAtlasEdgeElement: (value) => {
9
+ return value && value.source && value.target;
10
+ }
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyYXBoLXZpei9zcmMvaW50ZXJmYWNlcy9lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUM3QixZQUFZLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtRQUN6QixPQUFPLEtBQUssRUFBRSxJQUFJLEtBQUssYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFDRCx1QkFBdUIsRUFBRSxDQUFDLEtBQVUsRUFBa0MsRUFBRTtRQUNwRSxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDOUMsQ0FBQztJQUNELHVCQUF1QixFQUFFLENBQUMsS0FBVSxFQUFrQyxFQUFFO1FBQ3BFLE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmV4cG9ydCBpbnRlcmZhY2UgRm9yY2VBdGxhc05vZGVFbGVtZW50IGV4dGVuZHMgUGxhaXRFbGVtZW50IHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGljb246IHN0cmluZztcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JjZUF0bGFzRWRnZUVsZW1lbnQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHRhcmdldDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcmNlQXRsYXNFbGVtZW50IGV4dGVuZHMgUGxhaXRFbGVtZW50IHtcbiAgICBjaGlsZHJlbjogKEZvcmNlQXRsYXNOb2RlRWxlbWVudCB8IEZvcmNlQXRsYXNFZGdlRWxlbWVudClbXTtcbn1cblxuZXhwb3J0IGNvbnN0IEZvcmNlQXRsYXNFbGVtZW50ID0ge1xuICAgIGlzRm9yY2VBdGxhczogKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlPy50eXBlID09PSAnZm9yY2UtYXRsYXMnO1xuICAgIH0sXG4gICAgaXNGb3JjZUF0bGFzTm9kZUVsZW1lbnQ6ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgRm9yY2VBdGxhc05vZGVFbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmxhYmVsICYmIHZhbHVlLmljb247XG4gICAgfSxcbiAgICBpc0ZvcmNlQXRsYXNFZGdlRWxlbWVudDogKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBGb3JjZUF0bGFzRWRnZUVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuc291cmNlICYmIHZhbHVlLnRhcmdldDtcbiAgICB9XG59O1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './element';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmFwaC12aXovc3JjL2ludGVyZmFjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VsZW1lbnQnO1xuIl19