@yurialvesbordin/graphium 0.0.0-stage → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +112 -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,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":"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"}
|