@yurialvesbordin/graphium 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +37 -2
- package/dist/Graphium.d.ts +156 -0
- package/dist/Graphium.d.ts.map +1 -0
- package/dist/Graphium.js +413 -0
- package/dist/Graphium.js.map +1 -0
- package/dist/core/FocusController.d.ts +16 -0
- package/dist/core/FocusController.d.ts.map +1 -0
- package/dist/core/FocusController.js +53 -0
- package/dist/core/FocusController.js.map +1 -0
- package/dist/core/GraphEditor.d.ts +61 -0
- package/dist/core/GraphEditor.d.ts.map +1 -0
- package/dist/core/GraphEditor.js +165 -0
- package/dist/core/GraphEditor.js.map +1 -0
- package/dist/core/GraphModel.d.ts +166 -0
- package/dist/core/GraphModel.d.ts.map +1 -0
- package/dist/core/GraphModel.js +730 -0
- package/dist/core/GraphModel.js.map +1 -0
- package/dist/core/SelectionController.d.ts +26 -0
- package/dist/core/SelectionController.d.ts.map +1 -0
- package/dist/core/SelectionController.js +78 -0
- package/dist/core/SelectionController.js.map +1 -0
- package/dist/core/colors.d.ts +27 -0
- package/dist/core/colors.d.ts.map +1 -0
- package/dist/core/colors.js +141 -0
- package/dist/core/colors.js.map +1 -0
- package/dist/core/events.d.ts +21 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +64 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/handles.d.ts +60 -0
- package/dist/core/handles.d.ts.map +1 -0
- package/dist/core/handles.js +116 -0
- package/dist/core/handles.js.map +1 -0
- package/dist/core/theme.d.ts +9 -0
- package/dist/core/theme.d.ts.map +1 -0
- package/dist/core/theme.js +167 -0
- package/dist/core/theme.js.map +1 -0
- package/dist/core/themes.d.ts +9 -0
- package/dist/core/themes.d.ts.map +1 -0
- package/dist/core/themes.js +103 -0
- package/dist/core/themes.js.map +1 -0
- package/dist/core/types.d.ts +287 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction/InteractionBinder.d.ts +43 -0
- package/dist/interaction/InteractionBinder.d.ts.map +1 -0
- package/dist/interaction/InteractionBinder.js +121 -0
- package/dist/interaction/InteractionBinder.js.map +1 -0
- package/dist/interaction/PointerController.d.ts +83 -0
- package/dist/interaction/PointerController.d.ts.map +1 -0
- package/dist/interaction/PointerController.js +294 -0
- package/dist/interaction/PointerController.js.map +1 -0
- package/dist/physics/PhysicsEngine.d.ts +82 -0
- package/dist/physics/PhysicsEngine.d.ts.map +1 -0
- package/dist/physics/PhysicsEngine.js +469 -0
- package/dist/physics/PhysicsEngine.js.map +1 -0
- package/dist/physics/SpatialHash.d.ts +36 -0
- package/dist/physics/SpatialHash.d.ts.map +1 -0
- package/dist/physics/SpatialHash.js +126 -0
- package/dist/physics/SpatialHash.js.map +1 -0
- package/dist/physics/presets.d.ts +14 -0
- package/dist/physics/presets.d.ts.map +1 -0
- package/dist/physics/presets.js +108 -0
- package/dist/physics/presets.js.map +1 -0
- package/dist/render/Camera.d.ts +55 -0
- package/dist/render/Camera.d.ts.map +1 -0
- package/dist/render/Camera.js +94 -0
- package/dist/render/Camera.js.map +1 -0
- package/dist/render/LabelLayer.d.ts +32 -0
- package/dist/render/LabelLayer.d.ts.map +1 -0
- package/dist/render/LabelLayer.js +142 -0
- package/dist/render/LabelLayer.js.map +1 -0
- package/dist/render/RenderLoop.d.ts +67 -0
- package/dist/render/RenderLoop.d.ts.map +1 -0
- package/dist/render/RenderLoop.js +126 -0
- package/dist/render/RenderLoop.js.map +1 -0
- package/dist/render/Renderer.d.ts +73 -0
- package/dist/render/Renderer.d.ts.map +1 -0
- package/dist/render/Renderer.js +512 -0
- package/dist/render/Renderer.js.map +1 -0
- package/dist/render/TextureAtlas.d.ts +51 -0
- package/dist/render/TextureAtlas.d.ts.map +1 -0
- package/dist/render/TextureAtlas.js +160 -0
- package/dist/render/TextureAtlas.js.map +1 -0
- package/dist/render/ViewportController.d.ts +34 -0
- package/dist/render/ViewportController.d.ts.map +1 -0
- package/dist/render/ViewportController.js +57 -0
- package/dist/render/ViewportController.js.map +1 -0
- package/dist/render/geometry.d.ts +19 -0
- package/dist/render/geometry.d.ts.map +1 -0
- package/dist/render/geometry.js +71 -0
- package/dist/render/geometry.js.map +1 -0
- package/dist/render/shaders.d.ts +13 -0
- package/dist/render/shaders.d.ts.map +1 -0
- package/dist/render/shaders.js +183 -0
- package/dist/render/shaders.js.map +1 -0
- package/package.json +73 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owns the focus mode: dims every node and link that is not adjacent to
|
|
3
|
+
* the focused node and restores the graph on unfocus.
|
|
4
|
+
*/
|
|
5
|
+
import { GraphModel } from './GraphModel.js';
|
|
6
|
+
import type { NodeId } from './types.js';
|
|
7
|
+
export declare class FocusController {
|
|
8
|
+
private readonly model;
|
|
9
|
+
private readonly invalidate;
|
|
10
|
+
constructor(model: GraphModel, invalidate: () => void);
|
|
11
|
+
/** Dims every node and link that is not adjacent to the focus node. */
|
|
12
|
+
focus(id: NodeId | number): void;
|
|
13
|
+
/** Removes all dimming applied by focus. */
|
|
14
|
+
unfocus(): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=FocusController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FocusController.d.ts","sourceRoot":"","sources":["../../src/core/FocusController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAsB,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,IAAI;IAGzC,uEAAuE;IACvE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BhC,4CAA4C;IAC5C,OAAO,IAAI,IAAI;CAWhB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owns the focus mode: dims every node and link that is not adjacent to
|
|
3
|
+
* the focused node and restores the graph on unfocus.
|
|
4
|
+
*/
|
|
5
|
+
import { LINK_DIM, NODE_DIM } from './GraphModel.js';
|
|
6
|
+
export class FocusController {
|
|
7
|
+
constructor(model, invalidate) {
|
|
8
|
+
this.model = model;
|
|
9
|
+
this.invalidate = invalidate;
|
|
10
|
+
}
|
|
11
|
+
/** Dims every node and link that is not adjacent to the focus node. */
|
|
12
|
+
focus(id) {
|
|
13
|
+
const index = this.model.nodeIndexOf(id);
|
|
14
|
+
if (index < 0) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const model = this.model;
|
|
18
|
+
const neighbors = new Set([index]);
|
|
19
|
+
for (let link = 0; link < model.linkCount; link++) {
|
|
20
|
+
const touches = model.source[link] === index || model.target[link] === index;
|
|
21
|
+
if (touches) {
|
|
22
|
+
neighbors.add(model.source[link]);
|
|
23
|
+
neighbors.add(model.target[link]);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
model.linkFlags[link] |= LINK_DIM;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (let node = 0; node < model.nodeCount; node++) {
|
|
30
|
+
if (!neighbors.has(node)) {
|
|
31
|
+
model.flags[node] |= NODE_DIM;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
model.flags[node] &= ~NODE_DIM;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
model.appearanceRevision++;
|
|
38
|
+
this.invalidate();
|
|
39
|
+
}
|
|
40
|
+
/** Removes all dimming applied by focus. */
|
|
41
|
+
unfocus() {
|
|
42
|
+
const model = this.model;
|
|
43
|
+
for (let node = 0; node < model.nodeCount; node++) {
|
|
44
|
+
model.flags[node] &= ~NODE_DIM;
|
|
45
|
+
}
|
|
46
|
+
for (let link = 0; link < model.linkCount; link++) {
|
|
47
|
+
model.linkFlags[link] &= ~LINK_DIM;
|
|
48
|
+
}
|
|
49
|
+
model.appearanceRevision++;
|
|
50
|
+
this.invalidate();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=FocusController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FocusController.js","sourceRoot":"","sources":["../../src/core/FocusController.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAc,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGjE,MAAM,OAAO,eAAe;IAC1B,YACmB,KAAiB,EACjB,UAAsB;QADtB,UAAK,GAAL,KAAK,CAAY;QACjB,eAAU,GAAV,UAAU,CAAY;IACtC,CAAC;IAEJ,uEAAuE;IACvE,KAAK,CAAC,EAAmB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;YAC7E,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YACpC,CAAC;QACH,CAAC;QACD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACjC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,4CAA4C;IAC5C,OAAO;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACjC,CAAC;QACD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAClD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,CAAC;QACD,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owns every graph data mutation: node and link CRUD, per element property
|
|
3
|
+
* updates, custom data attachment and JSON export.
|
|
4
|
+
*/
|
|
5
|
+
import type { Emitter } from './events.js';
|
|
6
|
+
import { GraphModel } from './GraphModel.js';
|
|
7
|
+
import type { PhysicsEngine } from '../physics/PhysicsEngine.js';
|
|
8
|
+
import type { GraphData, LinkId, LinkOptions, NodeId, NodeOptions, NodeStateName } from './types.js';
|
|
9
|
+
/** Collaborators and hooks the editor needs from the main facade. */
|
|
10
|
+
export interface GraphEditorDeps {
|
|
11
|
+
model: GraphModel;
|
|
12
|
+
physics: PhysicsEngine;
|
|
13
|
+
events: Emitter;
|
|
14
|
+
resetAutoFit(): void;
|
|
15
|
+
invalidate(): void;
|
|
16
|
+
}
|
|
17
|
+
export declare class GraphEditor {
|
|
18
|
+
private readonly deps;
|
|
19
|
+
private linkCounter;
|
|
20
|
+
constructor(deps: GraphEditorDeps);
|
|
21
|
+
/** Adds one node. */
|
|
22
|
+
addNode(id: NodeId, options?: NodeOptions): void;
|
|
23
|
+
/** Adds many nodes in one call. */
|
|
24
|
+
addNodes(nodes: Array<NodeOptions & {
|
|
25
|
+
id: NodeId;
|
|
26
|
+
}>): void;
|
|
27
|
+
/** Links two nodes, reusing an existing link with the same auto id. */
|
|
28
|
+
link(source: NodeId, target: NodeId, options?: LinkOptions): void;
|
|
29
|
+
/** Adds many links in one call. */
|
|
30
|
+
addLinks(links: Array<LinkOptions & {
|
|
31
|
+
source: NodeId;
|
|
32
|
+
target: NodeId;
|
|
33
|
+
}>): void;
|
|
34
|
+
/** Replaces the entire graph with the supplied data payload. */
|
|
35
|
+
setData(data: GraphData): void;
|
|
36
|
+
/** Removes one node together with its links. */
|
|
37
|
+
removeNode(id: NodeId): boolean;
|
|
38
|
+
/** Removes one link by id. */
|
|
39
|
+
removeLink(id: LinkId): boolean;
|
|
40
|
+
/** Removes every node and link while keeping the current theme. */
|
|
41
|
+
clear(): void;
|
|
42
|
+
/** Moves a node to a world position. */
|
|
43
|
+
setNodePosition(id: NodeId | number, x: number, y: number): void;
|
|
44
|
+
/** Locks or unlocks a node in the solver. */
|
|
45
|
+
setNodeFixed(id: NodeId | number, fixed: boolean): void;
|
|
46
|
+
/** Assigns a visual state to a node. */
|
|
47
|
+
setNodeState(id: NodeId | number, state: NodeStateName): void;
|
|
48
|
+
/** Updates node appearance properties. */
|
|
49
|
+
setNodeAppearance(id: NodeId | number, options: NodeOptions): void;
|
|
50
|
+
/** Updates link appearance properties. */
|
|
51
|
+
setLinkAppearance(id: LinkId | number, options: LinkOptions): void;
|
|
52
|
+
/** Sets the node image and starts the asynchronous load. */
|
|
53
|
+
setNodeImage(id: NodeId | number, url: string | null, mode?: 'cover' | 'contain'): void;
|
|
54
|
+
/** Replaces the custom data object attached to a node. */
|
|
55
|
+
setNodeData(id: NodeId | number, data: Record<string, unknown>): void;
|
|
56
|
+
/** Replaces the custom data object attached to a link. */
|
|
57
|
+
setLinkData(id: LinkId | number, data: Record<string, unknown>): void;
|
|
58
|
+
/** Exports the current graph as a plain JSON friendly object. */
|
|
59
|
+
toJSON(): GraphData;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=GraphEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphEditor.d.ts","sourceRoot":"","sources":["../../src/core/GraphEditor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErG,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,IAAI,IAAI,CAAC;IACrB,UAAU,IAAI,IAAI,CAAC;CACpB;AAED,qBAAa,WAAW;IAGV,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,WAAW,CAAK;gBAEK,IAAI,EAAE,eAAe;IAElD,qBAAqB;IACrB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IASpD,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAQ1D,uEAAuE;IACvE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IAOrE,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAU9E,gEAAgE;IAChE,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAQ9B,gDAAgD;IAChD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS/B,8BAA8B;IAC9B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS/B,mEAAmE;IACnE,KAAK,IAAI,IAAI;IAOb,wCAAwC;IACxC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAShE,6CAA6C;IAC7C,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IASvD,wCAAwC;IACxC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAQ7D,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAQlE,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAQlE,4DAA4D;IAC5D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,GAAE,OAAO,GAAG,SAAmB,GAAG,IAAI;IAQhG,0DAA0D;IAC1D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWrE,0DAA0D;IAC1D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWrE,iEAAiE;IACjE,MAAM,IAAI,SAAS;CAcpB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Owns every graph data mutation: node and link CRUD, per element property
|
|
3
|
+
* updates, custom data attachment and JSON export.
|
|
4
|
+
*/
|
|
5
|
+
export class GraphEditor {
|
|
6
|
+
constructor(deps) {
|
|
7
|
+
this.deps = deps;
|
|
8
|
+
this.linkCounter = 0;
|
|
9
|
+
}
|
|
10
|
+
/** Adds one node. */
|
|
11
|
+
addNode(id, options = {}) {
|
|
12
|
+
if (id === undefined || id === null) {
|
|
13
|
+
throw new Error('Graphium requires a node id.');
|
|
14
|
+
}
|
|
15
|
+
this.deps.model.addNode(id, options);
|
|
16
|
+
this.deps.physics.wake();
|
|
17
|
+
this.deps.invalidate();
|
|
18
|
+
}
|
|
19
|
+
/** Adds many nodes in one call. */
|
|
20
|
+
addNodes(nodes) {
|
|
21
|
+
for (let index = 0; index < nodes.length; index++) {
|
|
22
|
+
this.deps.model.addNode(nodes[index].id ?? index, nodes[index]);
|
|
23
|
+
}
|
|
24
|
+
this.deps.physics.wake();
|
|
25
|
+
this.deps.invalidate();
|
|
26
|
+
}
|
|
27
|
+
/** Links two nodes, reusing an existing link with the same auto id. */
|
|
28
|
+
link(source, target, options = {}) {
|
|
29
|
+
const autoId = options.id ?? `${String(source)}~${String(target)}~${this.linkCounter++}`;
|
|
30
|
+
this.deps.model.addLink(autoId, source, target, options);
|
|
31
|
+
this.deps.physics.wake();
|
|
32
|
+
this.deps.invalidate();
|
|
33
|
+
}
|
|
34
|
+
/** Adds many links in one call. */
|
|
35
|
+
addLinks(links) {
|
|
36
|
+
for (let index = 0; index < links.length; index++) {
|
|
37
|
+
const config = links[index];
|
|
38
|
+
const linkId = config.id ?? `${String(config.source)}~${String(config.target)}~${this.linkCounter++}`;
|
|
39
|
+
this.deps.model.addLink(linkId, config.source, config.target, config);
|
|
40
|
+
}
|
|
41
|
+
this.deps.physics.wake();
|
|
42
|
+
this.deps.invalidate();
|
|
43
|
+
}
|
|
44
|
+
/** Replaces the entire graph with the supplied data payload. */
|
|
45
|
+
setData(data) {
|
|
46
|
+
this.deps.model.setData(data);
|
|
47
|
+
this.deps.physics.reset();
|
|
48
|
+
this.deps.resetAutoFit();
|
|
49
|
+
this.deps.events.emit('dataupdated', { nodeCount: this.deps.model.nodeCount, linkCount: this.deps.model.linkCount });
|
|
50
|
+
this.deps.invalidate();
|
|
51
|
+
}
|
|
52
|
+
/** Removes one node together with its links. */
|
|
53
|
+
removeNode(id) {
|
|
54
|
+
const removed = this.deps.model.removeNode(id);
|
|
55
|
+
if (removed) {
|
|
56
|
+
this.deps.physics.wake();
|
|
57
|
+
this.deps.invalidate();
|
|
58
|
+
}
|
|
59
|
+
return removed;
|
|
60
|
+
}
|
|
61
|
+
/** Removes one link by id. */
|
|
62
|
+
removeLink(id) {
|
|
63
|
+
const removed = this.deps.model.removeLink(id);
|
|
64
|
+
if (removed) {
|
|
65
|
+
this.deps.physics.wake();
|
|
66
|
+
this.deps.invalidate();
|
|
67
|
+
}
|
|
68
|
+
return removed;
|
|
69
|
+
}
|
|
70
|
+
/** Removes every node and link while keeping the current theme. */
|
|
71
|
+
clear() {
|
|
72
|
+
this.deps.model.clear();
|
|
73
|
+
this.deps.physics.reset();
|
|
74
|
+
this.deps.resetAutoFit();
|
|
75
|
+
this.deps.invalidate();
|
|
76
|
+
}
|
|
77
|
+
/** Moves a node to a world position. */
|
|
78
|
+
setNodePosition(id, x, y) {
|
|
79
|
+
const index = this.deps.model.nodeIndexOf(id);
|
|
80
|
+
if (index >= 0) {
|
|
81
|
+
this.deps.model.setNodePosition(index, x, y, true);
|
|
82
|
+
this.deps.physics.wake();
|
|
83
|
+
this.deps.invalidate();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Locks or unlocks a node in the solver. */
|
|
87
|
+
setNodeFixed(id, fixed) {
|
|
88
|
+
const index = this.deps.model.nodeIndexOf(id);
|
|
89
|
+
if (index >= 0) {
|
|
90
|
+
this.deps.model.setNodeFixed(index, fixed);
|
|
91
|
+
this.deps.physics.wake();
|
|
92
|
+
this.deps.invalidate();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Assigns a visual state to a node. */
|
|
96
|
+
setNodeState(id, state) {
|
|
97
|
+
const index = this.deps.model.nodeIndexOf(id);
|
|
98
|
+
if (index >= 0) {
|
|
99
|
+
this.deps.model.setNodeState(index, state);
|
|
100
|
+
this.deps.invalidate();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/** Updates node appearance properties. */
|
|
104
|
+
setNodeAppearance(id, options) {
|
|
105
|
+
const index = this.deps.model.nodeIndexOf(id);
|
|
106
|
+
if (index >= 0) {
|
|
107
|
+
this.deps.model.updateNode(index, options);
|
|
108
|
+
this.deps.invalidate();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Updates link appearance properties. */
|
|
112
|
+
setLinkAppearance(id, options) {
|
|
113
|
+
const index = this.deps.model.linkIndexOf(id);
|
|
114
|
+
if (index >= 0) {
|
|
115
|
+
this.deps.model.updateLink(index, options);
|
|
116
|
+
this.deps.invalidate();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** Sets the node image and starts the asynchronous load. */
|
|
120
|
+
setNodeImage(id, url, mode = 'cover') {
|
|
121
|
+
const index = this.deps.model.nodeIndexOf(id);
|
|
122
|
+
if (index >= 0) {
|
|
123
|
+
this.deps.model.updateNode(index, { image: url, imageMode: mode });
|
|
124
|
+
this.deps.invalidate();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/** Replaces the custom data object attached to a node. */
|
|
128
|
+
setNodeData(id, data) {
|
|
129
|
+
const index = this.deps.model.nodeIndexOf(id);
|
|
130
|
+
if (index >= 0) {
|
|
131
|
+
const userData = this.deps.model.nodeUserData(index);
|
|
132
|
+
for (const key of Object.keys(userData)) {
|
|
133
|
+
delete userData[key];
|
|
134
|
+
}
|
|
135
|
+
Object.assign(userData, data);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Replaces the custom data object attached to a link. */
|
|
139
|
+
setLinkData(id, data) {
|
|
140
|
+
const index = this.deps.model.linkIndexOf(id);
|
|
141
|
+
if (index >= 0) {
|
|
142
|
+
const userData = this.deps.model.linkUserData(index);
|
|
143
|
+
for (const key of Object.keys(userData)) {
|
|
144
|
+
delete userData[key];
|
|
145
|
+
}
|
|
146
|
+
Object.assign(userData, data);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** Exports the current graph as a plain JSON friendly object. */
|
|
150
|
+
toJSON() {
|
|
151
|
+
const nodes = [];
|
|
152
|
+
const model = this.deps.model;
|
|
153
|
+
for (let index = 0; index < model.nodeCount; index++) {
|
|
154
|
+
const snapshot = model.nodeSnapshot(index);
|
|
155
|
+
nodes.push({ id: snapshot.id, x: snapshot.x, y: snapshot.y, label: snapshot.label, radius: snapshot.radius, color: snapshot.color, fixed: snapshot.fixed });
|
|
156
|
+
}
|
|
157
|
+
const links = [];
|
|
158
|
+
for (let index = 0; index < model.linkCount; index++) {
|
|
159
|
+
const snapshot = model.linkSnapshot(index);
|
|
160
|
+
links.push({ id: snapshot.id, source: snapshot.source, target: snapshot.target, color: snapshot.color, curvature: snapshot.curvature, width: snapshot.width });
|
|
161
|
+
}
|
|
162
|
+
return { nodes, links };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=GraphEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphEditor.js","sourceRoot":"","sources":["../../src/core/GraphEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stores the whole graph in contiguous TypedArrays so physics, picking and
|
|
3
|
+
* rendering all run with zero per-frame allocations. External string ids map
|
|
4
|
+
* to dense integer indices through hash maps, and swap-remove keeps every
|
|
5
|
+
* mutation O(links) in the worst case while preserving cache locality.
|
|
6
|
+
*/
|
|
7
|
+
import type { LinkId, LinkOptions, LinkSnapshot, NodeId, NodeOptions, NodeSnapshot, NodeStateName, ThemeResolved } from './types.js';
|
|
8
|
+
export declare const NODE_FIXED = 1;
|
|
9
|
+
export declare const NODE_SELECTED = 2;
|
|
10
|
+
export declare const NODE_DRAGGED = 4;
|
|
11
|
+
export declare const NODE_HIDDEN = 8;
|
|
12
|
+
export declare const NODE_DISABLED = 16;
|
|
13
|
+
export declare const NODE_DIM = 32;
|
|
14
|
+
export declare const LINK_SELECTED = 1;
|
|
15
|
+
export declare const LINK_HIDDEN = 2;
|
|
16
|
+
export declare const LINK_DIM = 4;
|
|
17
|
+
export declare const STATE_NORMAL = 0;
|
|
18
|
+
export declare const STATE_HOVER = 1;
|
|
19
|
+
export declare const STATE_SELECTED = 2;
|
|
20
|
+
export declare const STATE_DRAGGING = 3;
|
|
21
|
+
export declare const STATE_FIXED = 4;
|
|
22
|
+
export declare const STATE_DISABLED = 5;
|
|
23
|
+
export declare const STYLE_SOLID = 0;
|
|
24
|
+
export declare const STYLE_DASHED = 1;
|
|
25
|
+
export interface GraphModelOptions {
|
|
26
|
+
nodeCapacity?: number;
|
|
27
|
+
linkCapacity?: number;
|
|
28
|
+
theme: ThemeResolved;
|
|
29
|
+
}
|
|
30
|
+
export declare class GraphModel {
|
|
31
|
+
readonly nodeDefaults: Required<NonNullable<ThemeOptionsNode>>;
|
|
32
|
+
readonly linkDefaults: Required<ThemeOptionsEdgeShape>;
|
|
33
|
+
nodeCount: number;
|
|
34
|
+
linkCount: number;
|
|
35
|
+
topologyRevision: number;
|
|
36
|
+
positionRevision: number;
|
|
37
|
+
appearanceRevision: number;
|
|
38
|
+
palette: number[];
|
|
39
|
+
private nodeIds;
|
|
40
|
+
private linkIds;
|
|
41
|
+
private nodeIndexById;
|
|
42
|
+
private linkIndexById;
|
|
43
|
+
private nodeData;
|
|
44
|
+
private linkData;
|
|
45
|
+
x: Float32Array;
|
|
46
|
+
y: Float32Array;
|
|
47
|
+
px: Float32Array;
|
|
48
|
+
py: Float32Array;
|
|
49
|
+
vx: Float32Array;
|
|
50
|
+
vy: Float32Array;
|
|
51
|
+
fx: Float32Array;
|
|
52
|
+
fy: Float32Array;
|
|
53
|
+
radius: Float32Array;
|
|
54
|
+
visualRadius: Float32Array;
|
|
55
|
+
mass: Float32Array;
|
|
56
|
+
degree: Int32Array;
|
|
57
|
+
color: Uint32Array;
|
|
58
|
+
borderColor: Uint32Array;
|
|
59
|
+
borderWidth: Float32Array;
|
|
60
|
+
nodeOpacity: Float32Array;
|
|
61
|
+
nodeImage: Array<string | null>;
|
|
62
|
+
nodeImageMode: Uint8Array;
|
|
63
|
+
nodeLabel: Array<string | null>;
|
|
64
|
+
flags: Uint8Array;
|
|
65
|
+
state: Uint8Array;
|
|
66
|
+
source: Int32Array;
|
|
67
|
+
target: Int32Array;
|
|
68
|
+
restLength: Float32Array;
|
|
69
|
+
linkStrength: Float32Array;
|
|
70
|
+
linkWidth: Float32Array;
|
|
71
|
+
linkColor: Uint32Array;
|
|
72
|
+
linkFlags: Uint8Array;
|
|
73
|
+
linkOpacity: Float32Array;
|
|
74
|
+
linkCurvature: Float32Array;
|
|
75
|
+
linkStyle: Uint8Array;
|
|
76
|
+
dashLength: Float32Array;
|
|
77
|
+
dashGap: Float32Array;
|
|
78
|
+
dashOffset: Float32Array;
|
|
79
|
+
dashWorldScale: Uint8Array;
|
|
80
|
+
arrowMode: Int8Array;
|
|
81
|
+
arrowSize: Float32Array;
|
|
82
|
+
arrowWidth: Float32Array;
|
|
83
|
+
private nodeCapacity;
|
|
84
|
+
private linkCapacity;
|
|
85
|
+
constructor(options: GraphModelOptions);
|
|
86
|
+
/** Resolves a node id or raw index into a dense index, or returns -1. */
|
|
87
|
+
nodeIndexOf(idOrIndex: NodeId | number): number;
|
|
88
|
+
/** Resolves a link id or raw index into a dense index, or returns -1. */
|
|
89
|
+
linkIndexOf(idOrIndex: LinkId | number): number;
|
|
90
|
+
/** Returns the external id attached to a dense node index. */
|
|
91
|
+
nodeIdAt(index: number): NodeId | undefined;
|
|
92
|
+
/** Returns the external id attached to a dense link index. */
|
|
93
|
+
linkIdAt(index: number): LinkId | undefined;
|
|
94
|
+
/** Adds a node or updates an existing one and returns its dense index. */
|
|
95
|
+
addNode(id: NodeId, options?: NodeOptions): number;
|
|
96
|
+
/** Adds a link or updates an existing one and returns its dense index. */
|
|
97
|
+
addLink(id: LinkId, sourceId: NodeId, targetId: NodeId, options?: LinkOptions): number;
|
|
98
|
+
/** Applies node level appearance and physics properties to an index. */
|
|
99
|
+
private applyNodeOptions;
|
|
100
|
+
/** Applies link level appearance and physics properties to an index. */
|
|
101
|
+
private applyLinkOptions;
|
|
102
|
+
/** Writes a visual state code and keeps the flag mask synchronized. */
|
|
103
|
+
setNodeState(index: number, value: NodeStateName | number): void;
|
|
104
|
+
/** Updates node appearance properties without touching topology. */
|
|
105
|
+
updateNode(index: number, options: NodeOptions): void;
|
|
106
|
+
/** Updates link appearance properties without touching topology. */
|
|
107
|
+
updateLink(index: number, options: LinkOptions): void;
|
|
108
|
+
/** Sets node world position and optionally resets Verlet history. */
|
|
109
|
+
setNodePosition(index: number, x: number, y: number, resetPrevious?: boolean): void;
|
|
110
|
+
/** Locks or unlocks a node inside the physics solver. */
|
|
111
|
+
setNodeFixed(index: number, fixed: boolean): void;
|
|
112
|
+
/** Toggles the selected flag of a node. */
|
|
113
|
+
setNodeSelected(index: number, selected: boolean): void;
|
|
114
|
+
/** Toggles the selected flag of a link. */
|
|
115
|
+
setLinkSelected(index: number, selected: boolean): void;
|
|
116
|
+
/** Removes a link using swap-remove and returns whether it existed. */
|
|
117
|
+
removeLink(id: LinkId): boolean;
|
|
118
|
+
/** Removes every link touching a node before the node itself is removed. */
|
|
119
|
+
removeLinksOf(index: number): void;
|
|
120
|
+
/** Removes a node using swap-remove and reindexes surviving links. */
|
|
121
|
+
removeNode(id: NodeId): boolean;
|
|
122
|
+
/** Replaces the whole graph with the supplied data payload. */
|
|
123
|
+
setData(data: {
|
|
124
|
+
nodes?: Array<NodeOptions & {
|
|
125
|
+
id: NodeId;
|
|
126
|
+
}>;
|
|
127
|
+
links?: Array<LinkOptions & {
|
|
128
|
+
source: NodeId;
|
|
129
|
+
target: NodeId;
|
|
130
|
+
}>;
|
|
131
|
+
}): void;
|
|
132
|
+
/** Clears topology while keeping allocated storage and current theme. */
|
|
133
|
+
clear(): void;
|
|
134
|
+
/** Builds a readable snapshot object for one node. */
|
|
135
|
+
nodeSnapshot(index: number): NodeSnapshot;
|
|
136
|
+
/** Builds a readable snapshot object for one link. */
|
|
137
|
+
linkSnapshot(index: number): LinkSnapshot;
|
|
138
|
+
/** Returns the custom data object attached to a node. */
|
|
139
|
+
nodeUserData(index: number): Record<string, unknown>;
|
|
140
|
+
/** Returns the custom data object attached to a link. */
|
|
141
|
+
linkUserData(index: number): Record<string, unknown>;
|
|
142
|
+
/** Doubles node storage when the dense count would overflow. */
|
|
143
|
+
private ensureNodeCapacity;
|
|
144
|
+
/** Doubles link storage when the dense count would overflow. */
|
|
145
|
+
private ensureLinkCapacity;
|
|
146
|
+
}
|
|
147
|
+
interface ThemeOptionsNode {
|
|
148
|
+
radius?: number;
|
|
149
|
+
color?: number;
|
|
150
|
+
borderColor?: number;
|
|
151
|
+
borderWidth?: number;
|
|
152
|
+
borderOpacity?: number;
|
|
153
|
+
opacity?: number;
|
|
154
|
+
}
|
|
155
|
+
interface ThemeOptionsEdgeShape {
|
|
156
|
+
color: number;
|
|
157
|
+
width: number;
|
|
158
|
+
opacity: number;
|
|
159
|
+
curvature: number;
|
|
160
|
+
style: number;
|
|
161
|
+
arrow: number;
|
|
162
|
+
arrowSize: number;
|
|
163
|
+
arrowWidth: number;
|
|
164
|
+
}
|
|
165
|
+
export {};
|
|
166
|
+
//# sourceMappingURL=GraphModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphModel.d.ts","sourceRoot":"","sources":["../../src/core/GraphModel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAiB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEpJ,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,QAAQ,KAAK,CAAC;AAE3B,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,YAAY,IAAI,CAAC;AAkD9B,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACvD,SAAS,SAAK;IACd,SAAS,SAAK;IACd,gBAAgB,SAAK;IACrB,gBAAgB,SAAK;IACrB,kBAAkB,SAAK;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,QAAQ,CAAsC;IAEtD,CAAC,EAAE,YAAY,CAAC;IAChB,CAAC,EAAE,YAAY,CAAC;IAChB,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,YAAY,CAAC;IAC1B,WAAW,EAAE,YAAY,CAAC;IAC1B,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChC,aAAa,EAAE,UAAU,CAAC;IAC1B,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAElB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,YAAY,CAAC;IAC1B,aAAa,EAAE,YAAY,CAAC;IAC5B,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,EAAE,YAAY,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,YAAY,CAAC;IACzB,cAAc,EAAE,UAAU,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC;IACxB,UAAU,EAAE,YAAY,CAAC;IAEzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,iBAAiB;IA+DtC,yEAAyE;IACzE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAO/C,yEAAyE;IACzE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAO/C,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,0EAA0E;IAC1E,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM;IAmCtD,0EAA0E;IAC1E,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,MAAM;IA+B1F,wEAAwE;IACxE,OAAO,CAAC,gBAAgB;IAqExB,wEAAwE;IACxE,OAAO,CAAC,gBAAgB;IAqDxB,uEAAuE;IACvE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;IAiBhE,oEAAoE;IACpE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAMrD,oEAAoE;IACpE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAMrD,qEAAqE;IACrE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe,GAAG,IAAI;IAe1F,yDAAyD;IACzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAkBjD,2CAA2C;IAC3C,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAgBvD,2CAA2C;IAC3C,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAYvD,uEAAuE;IACvE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAsC/B,4EAA4E;IAC5E,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQlC,sEAAsE;IACtE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAqD/B,+DAA+D;IAC/D,OAAO,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,GAAG,IAAI;IAerI,yEAAyE;IACzE,KAAK,IAAI,IAAI;IAcb,sDAAsD;IACtD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IA0BzC,sDAAsD;IACtD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;IAyBzC,yDAAyD;IACzD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpD,yDAAyD;IACzD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpD,gEAAgE;IAChE,OAAO,CAAC,kBAAkB;IAgC1B,gEAAgE;IAChE,OAAO,CAAC,kBAAkB;CA2B3B;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB"}
|