@deck.gl-community/graph-layers 9.2.0-beta.2 → 9.2.0-beta.3

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 (232) hide show
  1. package/dist/core/graph-engine.d.ts +63 -21
  2. package/dist/core/graph-engine.d.ts.map +1 -1
  3. package/dist/core/graph-engine.js +155 -75
  4. package/dist/core/graph-engine.js.map +1 -1
  5. package/dist/core/graph-layout.d.ts +22 -18
  6. package/dist/core/graph-layout.d.ts.map +1 -1
  7. package/dist/core/graph-layout.js +33 -18
  8. package/dist/core/graph-layout.js.map +1 -1
  9. package/dist/core/interaction-manager.d.ts +2 -2
  10. package/dist/core/interaction-manager.d.ts.map +1 -1
  11. package/dist/core/interaction-manager.js +7 -5
  12. package/dist/core/interaction-manager.js.map +1 -1
  13. package/dist/graph/arrow-graph.d.ts +69 -0
  14. package/dist/graph/arrow-graph.d.ts.map +1 -0
  15. package/dist/graph/arrow-graph.js +513 -0
  16. package/dist/graph/arrow-graph.js.map +1 -0
  17. package/dist/graph/classic-graph.d.ts +169 -0
  18. package/dist/graph/classic-graph.d.ts.map +1 -0
  19. package/dist/graph/classic-graph.js +390 -0
  20. package/dist/graph/classic-graph.js.map +1 -0
  21. package/dist/graph/edge.d.ts +6 -6
  22. package/dist/graph/edge.d.ts.map +1 -1
  23. package/dist/graph/edge.js.map +1 -1
  24. package/dist/graph/functions/arrow-utils.d.ts +6 -0
  25. package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
  26. package/dist/graph/functions/arrow-utils.js +67 -0
  27. package/dist/graph/functions/arrow-utils.js.map +1 -0
  28. package/dist/graph/functions/create-graph-from-data.d.ts +3 -0
  29. package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
  30. package/dist/graph/functions/create-graph-from-data.js +12 -0
  31. package/dist/graph/functions/create-graph-from-data.js.map +1 -0
  32. package/dist/graph/graph-normalization.d.ts +10 -0
  33. package/dist/graph/graph-normalization.d.ts.map +1 -0
  34. package/dist/graph/graph-normalization.js +65 -0
  35. package/dist/graph/graph-normalization.js.map +1 -0
  36. package/dist/graph/graph.d.ts +62 -155
  37. package/dist/graph/graph.d.ts.map +1 -1
  38. package/dist/graph/graph.js +11 -300
  39. package/dist/graph/graph.js.map +1 -1
  40. package/dist/graph/node.d.ts +6 -6
  41. package/dist/graph/node.d.ts.map +1 -1
  42. package/dist/graph/node.js +2 -2
  43. package/dist/graph/node.js.map +1 -1
  44. package/dist/graph-data/arrow-graph-data-builder.d.ts +21 -0
  45. package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
  46. package/dist/graph-data/arrow-graph-data-builder.js +105 -0
  47. package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
  48. package/dist/graph-data/graph-data-builder.d.ts +6 -0
  49. package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
  50. package/dist/graph-data/graph-data-builder.js +1 -0
  51. package/dist/graph-data/graph-data-builder.js.map +1 -0
  52. package/dist/graph-data/graph-data.d.ts +40 -0
  53. package/dist/graph-data/graph-data.d.ts.map +1 -0
  54. package/dist/graph-data/graph-data.js +11 -0
  55. package/dist/graph-data/graph-data.js.map +1 -0
  56. package/dist/graph-data/plain-graph-data-builder.d.ts +20 -0
  57. package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
  58. package/dist/graph-data/plain-graph-data-builder.js +105 -0
  59. package/dist/graph-data/plain-graph-data-builder.js.map +1 -0
  60. package/dist/graph-style-schema.cdn.js +1 -1
  61. package/dist/graph-style-schema.json +1 -1
  62. package/dist/index.cjs +6905 -4576
  63. package/dist/index.cjs.map +4 -4
  64. package/dist/index.d.ts +14 -7
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +24 -11
  67. package/dist/index.js.map +1 -1
  68. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts.map +1 -1
  69. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +1 -2
  70. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -1
  71. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts +83 -0
  72. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -0
  73. package/dist/layers/common-layers/grid-layer/grid-layer.js +133 -0
  74. package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
  75. package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
  76. package/dist/layers/edge-attachment-helper.js +1 -2
  77. package/dist/layers/edge-attachment-helper.js.map +1 -1
  78. package/dist/layers/graph-layer.d.ts +68 -11
  79. package/dist/layers/graph-layer.d.ts.map +1 -1
  80. package/dist/layers/graph-layer.js +435 -50
  81. package/dist/layers/graph-layer.js.map +1 -1
  82. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +24 -0
  83. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -0
  84. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js +251 -0
  85. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
  86. package/dist/layouts/d3-dag/d3-dag-layout.d.ts +46 -61
  87. package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
  88. package/dist/layouts/d3-dag/d3-dag-layout.js +85 -270
  89. package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
  90. package/dist/layouts/d3-force/d3-force-layout.d.ts +20 -8
  91. package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
  92. package/dist/layouts/d3-force/d3-force-layout.js +39 -20
  93. package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
  94. package/dist/layouts/experimental/force-multi-graph-layout.d.ts +19 -15
  95. package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
  96. package/dist/layouts/experimental/force-multi-graph-layout.js +47 -38
  97. package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
  98. package/dist/layouts/experimental/hive-plot-layout.d.ts +18 -15
  99. package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
  100. package/dist/layouts/experimental/hive-plot-layout.js +33 -34
  101. package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
  102. package/dist/layouts/experimental/radial-layout.d.ts +12 -7
  103. package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
  104. package/dist/layouts/experimental/radial-layout.js +31 -14
  105. package/dist/layouts/experimental/radial-layout.js.map +1 -1
  106. package/dist/layouts/gpu-force/gpu-force-layout.d.ts +11 -8
  107. package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
  108. package/dist/layouts/gpu-force/gpu-force-layout.js +59 -56
  109. package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
  110. package/dist/layouts/simple-layout.d.ts +8 -25
  111. package/dist/layouts/simple-layout.d.ts.map +1 -1
  112. package/dist/layouts/simple-layout.js +13 -17
  113. package/dist/layouts/simple-layout.js.map +1 -1
  114. package/dist/loaders/dot-graph-loader.d.ts +25 -0
  115. package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
  116. package/dist/loaders/dot-graph-loader.js +668 -0
  117. package/dist/loaders/dot-graph-loader.js.map +1 -0
  118. package/dist/loaders/json-graph-loader.d.ts +6 -0
  119. package/dist/loaders/json-graph-loader.d.ts.map +1 -0
  120. package/dist/loaders/json-graph-loader.js +31 -0
  121. package/dist/loaders/json-graph-loader.js.map +1 -0
  122. package/dist/loaders/{edge-parsers.d.ts → parsers/edge-parsers.d.ts} +1 -1
  123. package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
  124. package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +1 -1
  125. package/dist/loaders/parsers/edge-parsers.js.map +1 -0
  126. package/dist/loaders/{node-parsers.d.ts → parsers/node-parsers.d.ts} +1 -1
  127. package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
  128. package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +1 -1
  129. package/dist/loaders/parsers/node-parsers.js.map +1 -0
  130. package/dist/loaders/parsers/parse-json-graph.d.ts +29 -0
  131. package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
  132. package/dist/loaders/parsers/parse-json-graph.js +78 -0
  133. package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
  134. package/dist/style/graph-style-engine.d.ts +4 -2
  135. package/dist/style/graph-style-engine.d.ts.map +1 -1
  136. package/dist/style/graph-style-engine.js +3 -2
  137. package/dist/style/graph-style-engine.js.map +1 -1
  138. package/dist/style/{style-engine.d.ts → stylesheet-engine.d.ts} +3 -3
  139. package/dist/style/stylesheet-engine.d.ts.map +1 -0
  140. package/dist/style/{style-engine.js → stylesheet-engine.js} +1 -1
  141. package/dist/style/stylesheet-engine.js.map +1 -0
  142. package/dist/utils/collapsed-chains.d.ts +8 -8
  143. package/dist/utils/collapsed-chains.d.ts.map +1 -1
  144. package/dist/utils/collapsed-chains.js +1 -6
  145. package/dist/utils/collapsed-chains.js.map +1 -1
  146. package/dist/utils/rank-grid.d.ts +30 -0
  147. package/dist/utils/rank-grid.d.ts.map +1 -0
  148. package/dist/utils/rank-grid.js +306 -0
  149. package/dist/utils/rank-grid.js.map +1 -0
  150. package/package.json +4 -8
  151. package/src/_disabled/arrow-graph-data.ts.disabled +18 -0
  152. package/src/_disabled/columnar-graph-data-builder.ts.disabled +250 -0
  153. package/src/_disabled/graph-runtime-layout.ts.disabled +29 -0
  154. package/src/core/graph-engine.ts +201 -84
  155. package/src/core/graph-layout.ts +52 -29
  156. package/src/core/interaction-manager.ts +20 -20
  157. package/src/graph/arrow-graph.ts +648 -0
  158. package/src/graph/classic-graph.ts +447 -0
  159. package/src/graph/edge.ts +7 -7
  160. package/src/graph/functions/arrow-utils.ts +72 -0
  161. package/src/graph/functions/convert-arrow-graph-to-classic-graph.ts.disabled +47 -0
  162. package/src/graph/functions/convert-plain-graph-to-arrow-graph.ts.disabled +119 -0
  163. package/src/graph/functions/create-graph-from-data.ts +16 -0
  164. package/src/graph/functions/create-plain-graph-from-data.ts.disabled +176 -0
  165. package/src/graph/graph-normalization.ts +87 -0
  166. package/src/graph/graph.ts +68 -339
  167. package/src/graph/node.ts +9 -9
  168. package/src/graph/tabular-graph.ts.disabled +761 -0
  169. package/src/graph-data/arrow-graph-data-builder.ts +165 -0
  170. package/src/graph-data/graph-data-builder.ts +7 -0
  171. package/src/graph-data/graph-data.ts +57 -0
  172. package/src/graph-data/plain-graph-data-builder.ts +132 -0
  173. package/src/index.ts +53 -13
  174. package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +1 -2
  175. package/src/layers/common-layers/grid-layer/grid-layer.ts +237 -0
  176. package/src/layers/edge-attachment-helper.ts +22 -16
  177. package/src/layers/graph-layer.ts +642 -62
  178. package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +330 -0
  179. package/src/layouts/d3-dag/d3-dag-layout.ts +166 -396
  180. package/src/layouts/d3-force/d3-force-layout.ts +52 -30
  181. package/src/layouts/experimental/force-multi-graph-layout.ts +55 -49
  182. package/src/layouts/experimental/hive-plot-layout.ts +41 -42
  183. package/src/layouts/experimental/radial-layout.ts +39 -20
  184. package/src/layouts/gpu-force/gpu-force-layout.ts +72 -70
  185. package/src/layouts/simple-layout.ts +20 -44
  186. package/src/loaders/{create-graph.ts → deprecated/create-graph.ts.disabled} +6 -6
  187. package/src/loaders/deprecated/json-classic-graph-loader.ts.disabled +33 -0
  188. package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled} +3 -3
  189. package/src/loaders/{table-graph-loader.ts → deprecated/table-graph-loader.ts.disabled} +8 -8
  190. package/src/loaders/dot-graph-loader.ts +860 -0
  191. package/src/loaders/json-graph-loader.ts +48 -0
  192. package/src/loaders/parsers/create-graph-data.ts.disabled +45 -0
  193. package/src/loaders/{edge-parsers.ts → parsers/edge-parsers.ts} +2 -2
  194. package/src/loaders/{node-parsers.ts → parsers/node-parsers.ts} +2 -2
  195. package/src/loaders/parsers/parse-json-graph.ts +134 -0
  196. package/src/style/graph-style-engine.ts +5 -2
  197. package/src/style/{style-engine.ts → stylesheet-engine.ts} +3 -3
  198. package/src/utils/collapsed-chains.ts +11 -17
  199. package/src/utils/rank-grid.ts +426 -0
  200. package/dist/loaders/create-graph.d.ts +0 -12
  201. package/dist/loaders/create-graph.d.ts.map +0 -1
  202. package/dist/loaders/create-graph.js +0 -38
  203. package/dist/loaders/create-graph.js.map +0 -1
  204. package/dist/loaders/edge-parsers.d.ts.map +0 -1
  205. package/dist/loaders/edge-parsers.js.map +0 -1
  206. package/dist/loaders/json-loader.d.ts +0 -7
  207. package/dist/loaders/json-loader.d.ts.map +0 -1
  208. package/dist/loaders/json-loader.js +0 -16
  209. package/dist/loaders/json-loader.js.map +0 -1
  210. package/dist/loaders/node-parsers.d.ts.map +0 -1
  211. package/dist/loaders/node-parsers.js.map +0 -1
  212. package/dist/loaders/simple-json-graph-loader.d.ts +0 -11
  213. package/dist/loaders/simple-json-graph-loader.d.ts.map +0 -1
  214. package/dist/loaders/simple-json-graph-loader.js +0 -20
  215. package/dist/loaders/simple-json-graph-loader.js.map +0 -1
  216. package/dist/loaders/table-graph-loader.d.ts +0 -16
  217. package/dist/loaders/table-graph-loader.d.ts.map +0 -1
  218. package/dist/loaders/table-graph-loader.js +0 -91
  219. package/dist/loaders/table-graph-loader.js.map +0 -1
  220. package/dist/style/style-engine.d.ts.map +0 -1
  221. package/dist/style/style-engine.js.map +0 -1
  222. package/dist/widgets/long-press-button.d.ts +0 -12
  223. package/dist/widgets/long-press-button.d.ts.map +0 -1
  224. package/dist/widgets/long-press-button.js +0 -31
  225. package/dist/widgets/long-press-button.js.map +0 -1
  226. package/dist/widgets/view-control-widget.d.ts +0 -77
  227. package/dist/widgets/view-control-widget.d.ts.map +0 -1
  228. package/dist/widgets/view-control-widget.js +0 -197
  229. package/dist/widgets/view-control-widget.js.map +0 -1
  230. package/src/loaders/json-loader.ts +0 -19
  231. package/src/widgets/long-press-button.tsx +0 -50
  232. package/src/widgets/view-control-widget.tsx +0 -339
@@ -0,0 +1,165 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ // eslint-disable-next-line import/no-unresolved
6
+ import * as arrow from 'apache-arrow';
7
+
8
+ import type {EdgeState, NodeState} from '../core/constants';
9
+ import type {GraphEdgeData, GraphNodeData,ArrowGraphData} from './graph-data';
10
+ import {
11
+ cloneRecord,
12
+ normalizeEdgeState,
13
+ normalizeNodeState,
14
+ normalizeVersion
15
+ } from '../graph/graph-normalization';
16
+
17
+ type Builder = ReturnType<typeof arrow.makeBuilder>;
18
+ type ArrowVector = ReturnType<Builder['toVector']>;
19
+ type ColumnArray = ReturnType<ArrowVector['toArray']>;
20
+ type ColumnBuilderMap = Map<string, Builder>;
21
+
22
+ export type ArrowGraphDataBuilderOptions = {
23
+ version?: number;
24
+ };
25
+
26
+ export class ArrowGraphDataBuilder {
27
+ private readonly nodeBuilders: ColumnBuilderMap = new Map();
28
+ private readonly edgeBuilders: ColumnBuilderMap = new Map();
29
+
30
+ private nodeLength = 0;
31
+ private edgeLength = 0;
32
+
33
+ private _version: number;
34
+
35
+ constructor(options: ArrowGraphDataBuilderOptions = {}) {
36
+ this._version = normalizeVersion(options.version);
37
+ }
38
+
39
+ get version(): number {
40
+ return this._version;
41
+ }
42
+
43
+ setVersion(version: unknown): void {
44
+ this._version = normalizeVersion(version);
45
+ }
46
+
47
+ addNode(node: GraphNodeData): number {
48
+ if (typeof node?.id === 'undefined') {
49
+ throw new Error('Graph node requires an "id" field.');
50
+ }
51
+
52
+ const index = this.nodeLength++;
53
+ const attributes = cloneRecord(node.attributes);
54
+
55
+ if (typeof node.label !== 'undefined') {
56
+ attributes.label = node.label;
57
+ }
58
+
59
+ if (typeof node.weight !== 'undefined') {
60
+ attributes.weight = node.weight;
61
+ }
62
+
63
+ const stateCandidate = node.state ?? (attributes.state as NodeState | undefined);
64
+ const selectableCandidate = node.selectable ?? (attributes.selectable as boolean | undefined);
65
+ const highlightCandidate =
66
+ node.highlightConnectedEdges ?? (attributes.highlightConnectedEdges as boolean | undefined);
67
+
68
+ this.appendUtf8(this.nodeBuilders, 'id', node.id);
69
+ this.appendUtf8(this.nodeBuilders, 'state', normalizeNodeState(stateCandidate));
70
+ this.appendBoolean(this.nodeBuilders, 'selectable', Boolean(selectableCandidate));
71
+ this.appendBoolean(this.nodeBuilders, 'highlightConnectedEdges', Boolean(highlightCandidate));
72
+ this.appendJson(this.nodeBuilders, 'data', attributes);
73
+
74
+ return index;
75
+ }
76
+
77
+ addEdge(edge: GraphEdgeData): number {
78
+ if (
79
+ typeof edge?.id === 'undefined' ||
80
+ typeof edge?.sourceId === 'undefined' ||
81
+ typeof edge?.targetId === 'undefined'
82
+ ) {
83
+ throw new Error('Graph edge requires "id", "sourceId", and "targetId" fields.');
84
+ }
85
+
86
+ const index = this.edgeLength++;
87
+ const attributes = cloneRecord(edge.attributes);
88
+
89
+ if (typeof edge.label !== 'undefined') {
90
+ attributes.label = edge.label;
91
+ }
92
+
93
+ if (typeof edge.weight !== 'undefined') {
94
+ attributes.weight = edge.weight;
95
+ }
96
+
97
+ const stateCandidate = edge.state ?? (attributes.state as EdgeState | undefined);
98
+ const directedCandidate = edge.directed ?? (attributes.directed as boolean | undefined);
99
+
100
+ this.appendUtf8(this.edgeBuilders, 'id', edge.id);
101
+ this.appendUtf8(this.edgeBuilders, 'sourceId', edge.sourceId);
102
+ this.appendUtf8(this.edgeBuilders, 'targetId', edge.targetId);
103
+ this.appendBoolean(this.edgeBuilders, 'directed', Boolean(directedCandidate));
104
+ this.appendUtf8(this.edgeBuilders, 'state', normalizeEdgeState(stateCandidate));
105
+ this.appendJson(this.edgeBuilders, 'data', attributes);
106
+
107
+ return index;
108
+ }
109
+
110
+ finish(): ArrowGraphData {
111
+ return {
112
+ shape: 'arrow-graph-data',
113
+ version: this._version,
114
+ nodes: tableFromBuilders(this.nodeBuilders),
115
+ edges: tableFromBuilders(this.edgeBuilders)
116
+ };
117
+ }
118
+
119
+ private appendUtf8(builders: ColumnBuilderMap, columnName: string, value: string | number): void {
120
+ const builder = this.getOrCreateBuilder(builders, columnName, () =>
121
+ arrow.makeBuilder({type: new arrow.Utf8(), nullValues: [null, undefined]})
122
+ );
123
+ builder.append(typeof value === 'number' ? String(value) : value);
124
+ }
125
+
126
+ private appendBoolean(builders: ColumnBuilderMap, columnName: string, value: boolean): void {
127
+ const builder = this.getOrCreateBuilder(builders, columnName, () =>
128
+ arrow.makeBuilder({type: new arrow.Bool(), nullValues: [null, undefined]})
129
+ );
130
+ builder.append(value);
131
+ }
132
+
133
+ private appendJson(builders: ColumnBuilderMap, columnName: string, value: Record<string, unknown>): void {
134
+ const builder = this.getOrCreateBuilder(builders, columnName, () =>
135
+ arrow.makeBuilder({type: new arrow.Utf8(), nullValues: [null, undefined]})
136
+ );
137
+ builder.append(JSON.stringify(value));
138
+ }
139
+
140
+ private getOrCreateBuilder(
141
+ builders: ColumnBuilderMap,
142
+ columnName: string,
143
+ factory: () => Builder
144
+ ): Builder {
145
+ let builder = builders.get(columnName);
146
+ if (!builder) {
147
+ builder = factory();
148
+ builders.set(columnName, builder);
149
+ }
150
+ return builder;
151
+ }
152
+ }
153
+
154
+ function tableFromBuilders(builders: ColumnBuilderMap): arrow.Table {
155
+ const columns: Record<string, ColumnArray> = {};
156
+
157
+ for (const [columnName, builder] of builders.entries()) {
158
+ builder.finish();
159
+ const vector = builder.toVector();
160
+ columns[columnName] = vector.toArray();
161
+ }
162
+
163
+ return arrow.tableFromArrays(columns);
164
+ }
165
+
@@ -0,0 +1,7 @@
1
+ import type { GraphData } from "./graph-data";
2
+
3
+ export interface GraphDataBuilder {
4
+ addNode(node: Record<string, unknown>): number;
5
+ addEdge(edge: Record<string, unknown>): number;
6
+ build(): GraphData;
7
+ }
@@ -0,0 +1,57 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {NodeState, EdgeState} from '../core/constants';
6
+ import * as arrow from 'apache-arrow';
7
+
8
+ /** Graph data types supported by this library */
9
+ export type GraphData = PlainGraphData | ArrowGraphData;
10
+
11
+ /** Graph data stored in Apache Arrow binary columnar tables */
12
+ export type ArrowGraphData = {
13
+ shape: 'arrow-graph-data';
14
+ version: number;
15
+ metadata?: Record<string, unknown>;
16
+ nodes: arrow.Table;
17
+ edges: arrow.Table;
18
+ };
19
+
20
+ export type PlainGraphData = {
21
+ shape: 'plain-graph-data';
22
+ version?: number;
23
+ metadata?: Record<string, unknown>;
24
+ nodes?: GraphNodeData[] | null;
25
+ edges?: GraphEdgeData[] | null;
26
+ };
27
+
28
+ export type GraphNodeData = {
29
+ id: string | number;
30
+ label?: string;
31
+ state?: NodeState;
32
+ selectable?: boolean;
33
+ highlightConnectedEdges?: boolean;
34
+ weight?: number;
35
+ attributes?: Record<string, unknown> | null | undefined;
36
+ };
37
+
38
+ export type GraphEdgeData = {
39
+ id: string | number;
40
+ sourceId: string | number;
41
+ targetId: string | number;
42
+ label?: string;
43
+ state?: EdgeState;
44
+ directed?: boolean;
45
+ weight?: number;
46
+ attributes?: Record<string, unknown> | null | undefined;
47
+ };
48
+
49
+ export function isArrowGraphData(value: unknown): value is ArrowGraphData {
50
+ const candidate = value as ArrowGraphData;
51
+ return typeof value === 'object' && candidate?.shape === 'arrow-graph-data';
52
+ }
53
+
54
+ export function isPlainGraphData(value: unknown): value is PlainGraphData {
55
+ const candidate = value as PlainGraphData;
56
+ return typeof value === 'object' && candidate?.shape === 'plain-graph-data';
57
+ }
@@ -0,0 +1,132 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {PlainGraphData, GraphEdgeData, GraphNodeData} from './graph-data';
6
+ import { GraphDataBuilder } from './graph-data-builder';
7
+ import {cloneRecord, normalizeVersion} from '../graph/graph-normalization';
8
+
9
+ export type PlainGraphDataBuilderOptions = {
10
+ version?: number;
11
+ };
12
+
13
+ export class PlainGraphDataBuilder implements GraphDataBuilder {
14
+ private readonly nodes: GraphNodeData[] = [];
15
+ private readonly edges: GraphEdgeData[] = [];
16
+
17
+ private _version: number;
18
+
19
+ constructor(options: PlainGraphDataBuilderOptions = {}) {
20
+ this._version = normalizeVersion(options.version);
21
+ }
22
+
23
+ get version(): number {
24
+ return this._version;
25
+ }
26
+
27
+ setVersion(version: unknown): void {
28
+ this._version = normalizeVersion(version);
29
+ }
30
+
31
+ get nodeCount(): number {
32
+ return this.nodes.length;
33
+ }
34
+
35
+ get edgeCount(): number {
36
+ return this.edges.length;
37
+ }
38
+
39
+ addNode(node: GraphNodeData): number {
40
+ if (typeof node?.id === 'undefined') {
41
+ throw new Error('Graph node requires an "id" field.');
42
+ }
43
+
44
+ const attributes = cloneRecord(node.attributes);
45
+ this._assignNodeAttributes(attributes, node);
46
+ const record: GraphNodeData = {
47
+ ...node,
48
+ attributes
49
+ };
50
+
51
+ this.nodes.push(record);
52
+ return this.nodes.length - 1;
53
+ }
54
+
55
+ addEdge(edge: GraphEdgeData): number {
56
+ if (
57
+ typeof edge?.id === 'undefined' ||
58
+ typeof edge?.sourceId === 'undefined' ||
59
+ typeof edge?.targetId === 'undefined'
60
+ ) {
61
+ throw new Error('Graph edge requires "id", "sourceId", and "targetId" fields.');
62
+ }
63
+
64
+ const attributes = cloneRecord(edge.attributes);
65
+ this._assignEdgeAttributes(attributes, edge);
66
+ const record: GraphEdgeData = {
67
+ ...edge,
68
+ attributes
69
+ };
70
+
71
+ this.edges.push(record);
72
+ return this.edges.length - 1;
73
+ }
74
+
75
+ private _assignNodeAttributes(target: Record<string, unknown>, node: GraphNodeData): void {
76
+ if (typeof node.label !== 'undefined') {
77
+ target.label = node.label;
78
+ }
79
+ if (typeof node.weight !== 'undefined') {
80
+ target.weight = node.weight;
81
+ }
82
+ if (typeof node.state !== 'undefined') {
83
+ target.state = node.state;
84
+ }
85
+ if (typeof node.selectable !== 'undefined') {
86
+ target.selectable = node.selectable;
87
+ }
88
+ if (typeof node.highlightConnectedEdges !== 'undefined') {
89
+ target.highlightConnectedEdges = node.highlightConnectedEdges;
90
+ }
91
+ }
92
+
93
+ private _assignEdgeAttributes(target: Record<string, unknown>, edge: GraphEdgeData): void {
94
+ if (typeof edge.label !== 'undefined') {
95
+ target.label = edge.label;
96
+ }
97
+ if (typeof edge.weight !== 'undefined') {
98
+ target.weight = edge.weight;
99
+ }
100
+ if (typeof edge.state !== 'undefined') {
101
+ target.state = edge.state;
102
+ }
103
+ if (typeof edge.directed !== 'undefined') {
104
+ target.directed = edge.directed;
105
+ }
106
+ }
107
+
108
+ build(): PlainGraphData {
109
+ return {
110
+ shape: 'plain-graph-data',
111
+ version: this._version,
112
+ nodes: this.nodes.map(cloneNodeData),
113
+ edges: this.edges.map(cloneEdgeData)
114
+ };
115
+ }
116
+ }
117
+
118
+ function cloneNodeData(node: GraphNodeData): GraphNodeData {
119
+ const attributes = cloneRecord(node.attributes);
120
+ return {
121
+ ...node,
122
+ attributes
123
+ };
124
+ }
125
+
126
+ function cloneEdgeData(edge: GraphEdgeData): GraphEdgeData {
127
+ const attributes = cloneRecord(edge.attributes);
128
+ return {
129
+ ...edge,
130
+ attributes
131
+ };
132
+ }
package/src/index.ts CHANGED
@@ -2,11 +2,37 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
+ // Graph Data - output from loaders, input to writers
6
+
7
+ export type {GraphData, PlainGraphData, ArrowGraphData /* , GraphNodeData, GraphEdgeData */} from './graph-data/graph-data';
8
+ export type {GraphDataBuilder /* , GraphDataBuilderOptions */} from './graph-data/graph-data-builder';
9
+ export {
10
+ ArrowGraphDataBuilder,
11
+ type ArrowGraphDataBuilderOptions
12
+ } from './graph-data/arrow-graph-data-builder';
13
+
14
+
5
15
  // core - Graph representation and layout
6
- export {Graph} from './graph/graph';
16
+ export type {Graph, NodeInterface, EdgeInterface} from './graph/graph';
7
17
  export {Node} from './graph/node';
8
18
  export {Edge} from './graph/edge';
9
19
 
20
+ export {ClassicGraph} from './graph/classic-graph';
21
+ export {ArrowGraph} from './graph/arrow-graph';
22
+ // export {
23
+ // TabularGraph,
24
+ // TabularNode,
25
+ // TabularEdge,
26
+ // type NodeIndex,
27
+ // type EdgeIndex,
28
+ // type TabularGraphSource,
29
+ // type TabularGraphAccessors,
30
+ // type TabularNodeAccessors,
31
+ // type TabularEdgeAccessors
32
+ // } from './graph/tabular-graph';
33
+
34
+ // Graph Engine
35
+
10
36
  export {GraphEngine} from './core/graph-engine';
11
37
 
12
38
  // graph-layers layouts
@@ -20,6 +46,7 @@ export {GraphLayout} from './core/graph-layout';
20
46
  export {SimpleLayout} from './layouts/simple-layout';
21
47
  export {D3ForceLayout} from './layouts/d3-force/d3-force-layout';
22
48
  export {D3DagLayout} from './layouts/d3-dag/d3-dag-layout';
49
+ export {CollapsableD3DagLayout} from './layouts/d3-dag/collapsable-d3-dag-layout';
23
50
  export {GPUForceLayout} from './layouts/gpu-force/gpu-force-layout';
24
51
  export {RadialLayout} from './layouts/experimental/radial-layout';
25
52
  export {ForceMultiGraphLayout} from './layouts/experimental/force-multi-graph-layout';
@@ -29,9 +56,11 @@ export type {Marker, NodeState, NodeType, EdgeType, EdgeDecoratorType, LayoutSta
29
56
 
30
57
  // deck.gl components
31
58
  export {GraphLayer} from './layers/graph-layer';
59
+ export type {RankGridConfig} from './layers/graph-layer';
32
60
  export {EdgeLayer} from './layers/edge-layer';
33
- export {StyleEngine} from './style/style-engine';
34
- export {GraphStyleEngine} from './style/graph-style-engine';
61
+ export {GridLayer, type GridLayerProps, type GridLineDatum} from './layers/common-layers/grid-layer/grid-layer';
62
+ export {StylesheetEngine} from './style/stylesheet-engine';
63
+ export {GraphStylesheetEngine, GraphStyleEngine} from './style/graph-style-engine';
35
64
  export type {
36
65
  GraphStylesheet,
37
66
  GraphStylesheetInput,
@@ -49,19 +78,30 @@ export {
49
78
  type GraphLayerNodeStyle
50
79
  } from './style/graph-layer-stylesheet';
51
80
 
52
- // Widgets
53
-
54
- export {ViewControlWidget} from './widgets/view-control-widget';
55
-
56
- // graph format loaders
57
- export {loadSimpleJSONGraph} from './loaders/simple-json-graph-loader';
58
-
59
81
  // utils
60
82
  export {mixedGetPosition} from './utils/layer-utils';
61
83
  export {log} from './utils/log';
84
+ export {
85
+ mapRanksToYPositions,
86
+ selectRankLines,
87
+ type RankAccessor,
88
+ type LabelAccessor,
89
+ type RankPosition,
90
+ type MapRanksToYPositionsOptions,
91
+ type SelectRankLinesOptions
92
+ } from './utils/rank-grid';
62
93
 
63
- // DEPRECATED
64
- export {createGraph} from './loaders/create-graph';
65
- export {JSONLoader} from './loaders/simple-json-graph-loader';
94
+ // graph format loaders
95
+ export {
96
+ JSONGraphLoader,
97
+ type JSONGraphLoaderOptions,
98
+ } from './loaders/json-graph-loader';
99
+
100
+ export {
101
+ DOTGraphLoader,
102
+ type DOTGraphLoaderOptions,
103
+ type DOTGraphLoaderMetadata,
104
+ } from './loaders/dot-graph-loader';
66
105
 
106
+ // Deprecated exports
67
107
  export {MARKER_TYPE, NODE_STATE,EDGE_STATE,NODE_TYPE,EDGE_TYPE,EDGE_DECORATOR_TYPE,LAYOUT_STATE} from './_deprecated/old-constants';
@@ -4,7 +4,6 @@
4
4
 
5
5
  // import {Buffer, Transform} from '@luma.gl/core';
6
6
  import {LineLayer} from '@deck.gl/layers';
7
- import {window} from 'global';
8
7
 
9
8
  import {vs} from './flow-path-layer-vertex.glsl';
10
9
  import {fs} from './flow-path-layer-fragment.glsl';
@@ -42,7 +41,7 @@ export class FlowPathLayer extends LineLayer {
42
41
  this.setupTransformFeedback();
43
42
  this.setState({
44
43
  ...this.state,
45
- animation: window.requestAnimationFrame(this.animate.bind(this))
44
+ animation: globalThis.window.requestAnimationFrame(this.animate.bind(this))
46
45
  });
47
46
  }
48
47