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

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 (313) hide show
  1. package/dist/_deprecated/old-constants.d.ts +1 -0
  2. package/dist/_deprecated/old-constants.js +1 -0
  3. package/dist/core/cache.d.ts +1 -0
  4. package/dist/core/cache.js +1 -0
  5. package/dist/core/constants.d.ts +2 -1
  6. package/dist/core/constants.js +1 -0
  7. package/dist/core/graph-engine.d.ts +64 -21
  8. package/dist/core/graph-engine.d.ts.map +1 -1
  9. package/dist/core/graph-engine.js +158 -77
  10. package/dist/core/graph-engine.js.map +1 -1
  11. package/dist/core/graph-layout.d.ts +23 -18
  12. package/dist/core/graph-layout.d.ts.map +1 -1
  13. package/dist/core/graph-layout.js +35 -19
  14. package/dist/core/graph-layout.js.map +1 -1
  15. package/dist/core/interaction-manager.d.ts +5 -4
  16. package/dist/core/interaction-manager.d.ts.map +1 -1
  17. package/dist/core/interaction-manager.js +10 -7
  18. package/dist/core/interaction-manager.js.map +1 -1
  19. package/dist/graph/arrow-graph.d.ts +70 -0
  20. package/dist/graph/arrow-graph.d.ts.map +1 -0
  21. package/dist/graph/arrow-graph.js +514 -0
  22. package/dist/graph/arrow-graph.js.map +1 -0
  23. package/dist/graph/classic-graph.d.ts +170 -0
  24. package/dist/graph/classic-graph.d.ts.map +1 -0
  25. package/dist/graph/classic-graph.js +391 -0
  26. package/dist/graph/classic-graph.js.map +1 -0
  27. package/dist/graph/edge.d.ts +8 -7
  28. package/dist/graph/edge.d.ts.map +1 -1
  29. package/dist/graph/edge.js +1 -0
  30. package/dist/graph/edge.js.map +1 -1
  31. package/dist/graph/functions/arrow-utils.d.ts +7 -0
  32. package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
  33. package/dist/graph/functions/arrow-utils.js +68 -0
  34. package/dist/graph/functions/arrow-utils.js.map +1 -0
  35. package/dist/graph/functions/create-graph-from-data.d.ts +4 -0
  36. package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
  37. package/dist/graph/functions/create-graph-from-data.js +13 -0
  38. package/dist/graph/functions/create-graph-from-data.js.map +1 -0
  39. package/dist/graph/graph-normalization.d.ts +11 -0
  40. package/dist/graph/graph-normalization.d.ts.map +1 -0
  41. package/dist/graph/graph-normalization.js +66 -0
  42. package/dist/graph/graph-normalization.js.map +1 -0
  43. package/dist/graph/graph.d.ts +63 -155
  44. package/dist/graph/graph.d.ts.map +1 -1
  45. package/dist/graph/graph.js +12 -300
  46. package/dist/graph/graph.js.map +1 -1
  47. package/dist/graph/node.d.ts +8 -7
  48. package/dist/graph/node.d.ts.map +1 -1
  49. package/dist/graph/node.js +3 -2
  50. package/dist/graph/node.js.map +1 -1
  51. package/dist/graph-data/arrow-graph-data-builder.d.ts +22 -0
  52. package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
  53. package/dist/graph-data/arrow-graph-data-builder.js +106 -0
  54. package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
  55. package/dist/graph-data/graph-data-builder.d.ts +7 -0
  56. package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
  57. package/dist/graph-data/graph-data-builder.js +2 -0
  58. package/dist/graph-data/graph-data-builder.js.map +1 -0
  59. package/dist/graph-data/graph-data.d.ts +41 -0
  60. package/dist/graph-data/graph-data.d.ts.map +1 -0
  61. package/dist/graph-data/graph-data.js +12 -0
  62. package/dist/graph-data/graph-data.js.map +1 -0
  63. package/dist/graph-data/plain-graph-data-builder.d.ts +21 -0
  64. package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
  65. package/dist/graph-data/plain-graph-data-builder.js +106 -0
  66. package/dist/graph-data/plain-graph-data-builder.js.map +1 -0
  67. package/dist/graph-style-schema.cdn.js +1 -1
  68. package/dist/graph-style-schema.json +1 -1
  69. package/dist/index.cjs +6905 -4576
  70. package/dist/index.cjs.map +4 -4
  71. package/dist/index.d.ts +36 -28
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +43 -29
  74. package/dist/index.js.map +1 -1
  75. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +1 -0
  76. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +1 -0
  77. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +1 -0
  78. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +1 -0
  79. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +1 -0
  80. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +1 -0
  81. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +1 -0
  82. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts.map +1 -1
  83. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +2 -2
  84. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -1
  85. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts +84 -0
  86. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -0
  87. package/dist/layers/common-layers/grid-layer/grid-layer.js +134 -0
  88. package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
  89. package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +1 -0
  90. package/dist/layers/common-layers/marker-layer/atlas-data-url.js +1 -0
  91. package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +1 -0
  92. package/dist/layers/common-layers/marker-layer/marker-layer.js +3 -2
  93. package/dist/layers/common-layers/marker-layer/marker-list.d.ts +1 -0
  94. package/dist/layers/common-layers/marker-layer/marker-list.js +1 -0
  95. package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +1 -0
  96. package/dist/layers/common-layers/marker-layer/marker-mapping.js +1 -0
  97. package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +1 -0
  98. package/dist/layers/common-layers/spline-layer/spline-layer.js +1 -0
  99. package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +1 -0
  100. package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +1 -0
  101. package/dist/layers/edge-attachment-helper.d.ts +4 -3
  102. package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
  103. package/dist/layers/edge-attachment-helper.js +4 -4
  104. package/dist/layers/edge-attachment-helper.js.map +1 -1
  105. package/dist/layers/edge-layer.d.ts +1 -0
  106. package/dist/layers/edge-layer.js +4 -3
  107. package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +1 -0
  108. package/dist/layers/edge-layers/arrow-2d-geometry.js +1 -0
  109. package/dist/layers/edge-layers/curved-edge-layer.d.ts +2 -1
  110. package/dist/layers/edge-layers/curved-edge-layer.js +2 -1
  111. package/dist/layers/edge-layers/edge-arrow-layer.d.ts +1 -0
  112. package/dist/layers/edge-layers/edge-arrow-layer.js +2 -1
  113. package/dist/layers/edge-layers/edge-label-layer.d.ts +2 -1
  114. package/dist/layers/edge-layers/edge-label-layer.js +2 -1
  115. package/dist/layers/edge-layers/flow-layer.d.ts +2 -1
  116. package/dist/layers/edge-layers/flow-layer.js +2 -1
  117. package/dist/layers/edge-layers/path-edge-layer.d.ts +1 -0
  118. package/dist/layers/edge-layers/path-edge-layer.js +1 -0
  119. package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +1 -0
  120. package/dist/layers/edge-layers/straight-line-edge-layer.js +1 -0
  121. package/dist/layers/graph-layer.d.ts +75 -17
  122. package/dist/layers/graph-layer.d.ts.map +1 -1
  123. package/dist/layers/graph-layer.js +450 -64
  124. package/dist/layers/graph-layer.js.map +1 -1
  125. package/dist/layers/node-layers/circle-layer.d.ts +1 -0
  126. package/dist/layers/node-layers/circle-layer.js +1 -0
  127. package/dist/layers/node-layers/image-layer.d.ts +1 -0
  128. package/dist/layers/node-layers/image-layer.js +1 -0
  129. package/dist/layers/node-layers/label-layer.d.ts +2 -1
  130. package/dist/layers/node-layers/label-layer.js +2 -1
  131. package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +1 -0
  132. package/dist/layers/node-layers/path-rounded-rectangle-layer.js +2 -1
  133. package/dist/layers/node-layers/rectangle-layer.d.ts +1 -0
  134. package/dist/layers/node-layers/rectangle-layer.js +1 -0
  135. package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +1 -0
  136. package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +1 -0
  137. package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +2 -1
  138. package/dist/layers/node-layers/rounded-rectangle-layer.js +3 -2
  139. package/dist/layers/node-layers/zoomable-marker-layer.d.ts +2 -1
  140. package/dist/layers/node-layers/zoomable-marker-layer.js +2 -1
  141. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +25 -0
  142. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -0
  143. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js +252 -0
  144. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
  145. package/dist/layouts/d3-dag/d3-dag-layout.d.ts +48 -62
  146. package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
  147. package/dist/layouts/d3-dag/d3-dag-layout.js +89 -273
  148. package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
  149. package/dist/layouts/d3-force/d3-force-layout.d.ts +22 -9
  150. package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
  151. package/dist/layouts/d3-force/d3-force-layout.js +42 -22
  152. package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
  153. package/dist/layouts/d3-force/worker.d.ts +1 -0
  154. package/dist/layouts/d3-force/worker.js +1 -0
  155. package/dist/layouts/experimental/force-multi-graph-layout.d.ts +21 -16
  156. package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
  157. package/dist/layouts/experimental/force-multi-graph-layout.js +49 -39
  158. package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
  159. package/dist/layouts/experimental/hive-plot-layout.d.ts +20 -16
  160. package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
  161. package/dist/layouts/experimental/hive-plot-layout.js +35 -35
  162. package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
  163. package/dist/layouts/experimental/radial-layout.d.ts +14 -8
  164. package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
  165. package/dist/layouts/experimental/radial-layout.js +33 -15
  166. package/dist/layouts/experimental/radial-layout.js.map +1 -1
  167. package/dist/layouts/gpu-force/gpu-force-layout.d.ts +13 -9
  168. package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
  169. package/dist/layouts/gpu-force/gpu-force-layout.js +61 -57
  170. package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
  171. package/dist/layouts/gpu-force/worker.d.ts +1 -0
  172. package/dist/layouts/gpu-force/worker.js +1 -0
  173. package/dist/layouts/simple-layout.d.ts +10 -26
  174. package/dist/layouts/simple-layout.d.ts.map +1 -1
  175. package/dist/layouts/simple-layout.js +15 -18
  176. package/dist/layouts/simple-layout.js.map +1 -1
  177. package/dist/loaders/dot-graph-loader.d.ts +26 -0
  178. package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
  179. package/dist/loaders/dot-graph-loader.js +669 -0
  180. package/dist/loaders/dot-graph-loader.js.map +1 -0
  181. package/dist/loaders/json-graph-loader.d.ts +7 -0
  182. package/dist/loaders/json-graph-loader.d.ts.map +1 -0
  183. package/dist/loaders/json-graph-loader.js +32 -0
  184. package/dist/loaders/json-graph-loader.js.map +1 -0
  185. package/dist/loaders/parsers/edge-parsers.d.ts +3 -0
  186. package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
  187. package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +2 -1
  188. package/dist/loaders/parsers/edge-parsers.js.map +1 -0
  189. package/dist/loaders/parsers/node-parsers.d.ts +3 -0
  190. package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
  191. package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +2 -1
  192. package/dist/loaders/parsers/node-parsers.js.map +1 -0
  193. package/dist/loaders/parsers/parse-json-graph.d.ts +30 -0
  194. package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
  195. package/dist/loaders/parsers/parse-json-graph.js +79 -0
  196. package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
  197. package/dist/style/graph-layer-stylesheet.d.ts +3 -2
  198. package/dist/style/graph-layer-stylesheet.js +1 -0
  199. package/dist/style/graph-style-accessor-map.d.ts +1 -0
  200. package/dist/style/graph-style-accessor-map.js +1 -0
  201. package/dist/style/graph-style-engine.d.ts +6 -3
  202. package/dist/style/graph-style-engine.d.ts.map +1 -1
  203. package/dist/style/graph-style-engine.js +7 -5
  204. package/dist/style/graph-style-engine.js.map +1 -1
  205. package/dist/style/graph-stylesheet.schema.d.ts +1 -0
  206. package/dist/style/graph-stylesheet.schema.js +1 -0
  207. package/dist/style/style-property.d.ts +1 -0
  208. package/dist/style/style-property.js +2 -1
  209. package/dist/style/{style-engine.d.ts → stylesheet-engine.d.ts} +5 -4
  210. package/dist/style/stylesheet-engine.d.ts.map +1 -0
  211. package/dist/style/{style-engine.js → stylesheet-engine.js} +4 -3
  212. package/dist/style/stylesheet-engine.js.map +1 -0
  213. package/dist/utils/collapsed-chains.d.ts +10 -9
  214. package/dist/utils/collapsed-chains.d.ts.map +1 -1
  215. package/dist/utils/collapsed-chains.js +2 -6
  216. package/dist/utils/collapsed-chains.js.map +1 -1
  217. package/dist/utils/layer-utils.d.ts +1 -0
  218. package/dist/utils/layer-utils.js +1 -0
  219. package/dist/utils/log.d.ts +1 -0
  220. package/dist/utils/log.js +1 -0
  221. package/dist/utils/node-boundary.d.ts +1 -0
  222. package/dist/utils/node-boundary.js +1 -0
  223. package/dist/utils/polygon-calculations.d.ts +1 -0
  224. package/dist/utils/polygon-calculations.js +1 -0
  225. package/dist/utils/rank-grid.d.ts +31 -0
  226. package/dist/utils/rank-grid.d.ts.map +1 -0
  227. package/dist/utils/rank-grid.js +307 -0
  228. package/dist/utils/rank-grid.js.map +1 -0
  229. package/package.json +7 -11
  230. package/src/_disabled/arrow-graph-data.ts.disabled +18 -0
  231. package/src/_disabled/columnar-graph-data-builder.ts.disabled +250 -0
  232. package/src/_disabled/graph-runtime-layout.ts.disabled +29 -0
  233. package/src/core/graph-engine.ts +201 -84
  234. package/src/core/graph-layout.ts +52 -29
  235. package/src/core/interaction-manager.ts +20 -20
  236. package/src/graph/arrow-graph.ts +648 -0
  237. package/src/graph/classic-graph.ts +447 -0
  238. package/src/graph/edge.ts +7 -7
  239. package/src/graph/functions/arrow-utils.ts +72 -0
  240. package/src/graph/functions/convert-arrow-graph-to-classic-graph.ts.disabled +47 -0
  241. package/src/graph/functions/convert-plain-graph-to-arrow-graph.ts.disabled +119 -0
  242. package/src/graph/functions/create-graph-from-data.ts +16 -0
  243. package/src/graph/functions/create-plain-graph-from-data.ts.disabled +176 -0
  244. package/src/graph/graph-normalization.ts +87 -0
  245. package/src/graph/graph.ts +68 -339
  246. package/src/graph/node.ts +9 -9
  247. package/src/graph/tabular-graph.ts.disabled +761 -0
  248. package/src/graph-data/arrow-graph-data-builder.ts +165 -0
  249. package/src/graph-data/graph-data-builder.ts +7 -0
  250. package/src/graph-data/graph-data.ts +57 -0
  251. package/src/graph-data/plain-graph-data-builder.ts +132 -0
  252. package/src/index.ts +53 -13
  253. package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +1 -2
  254. package/src/layers/common-layers/grid-layer/grid-layer.ts +237 -0
  255. package/src/layers/edge-attachment-helper.ts +22 -16
  256. package/src/layers/graph-layer.ts +642 -62
  257. package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +330 -0
  258. package/src/layouts/d3-dag/d3-dag-layout.ts +166 -396
  259. package/src/layouts/d3-force/d3-force-layout.ts +52 -30
  260. package/src/layouts/experimental/force-multi-graph-layout.ts +55 -49
  261. package/src/layouts/experimental/hive-plot-layout.ts +41 -42
  262. package/src/layouts/experimental/radial-layout.ts +39 -20
  263. package/src/layouts/gpu-force/gpu-force-layout.ts +72 -70
  264. package/src/layouts/simple-layout.ts +20 -44
  265. package/src/loaders/{create-graph.ts → deprecated/create-graph.ts.disabled} +6 -6
  266. package/src/loaders/deprecated/json-classic-graph-loader.ts.disabled +33 -0
  267. package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled} +3 -3
  268. package/src/loaders/{table-graph-loader.ts → deprecated/table-graph-loader.ts.disabled} +8 -8
  269. package/src/loaders/dot-graph-loader.ts +860 -0
  270. package/src/loaders/json-graph-loader.ts +48 -0
  271. package/src/loaders/parsers/create-graph-data.ts.disabled +45 -0
  272. package/src/loaders/{edge-parsers.ts → parsers/edge-parsers.ts} +2 -2
  273. package/src/loaders/{node-parsers.ts → parsers/node-parsers.ts} +2 -2
  274. package/src/loaders/parsers/parse-json-graph.ts +134 -0
  275. package/src/style/graph-style-engine.ts +5 -2
  276. package/src/style/{style-engine.ts → stylesheet-engine.ts} +3 -3
  277. package/src/utils/collapsed-chains.ts +11 -17
  278. package/src/utils/rank-grid.ts +426 -0
  279. package/dist/loaders/create-graph.d.ts +0 -12
  280. package/dist/loaders/create-graph.d.ts.map +0 -1
  281. package/dist/loaders/create-graph.js +0 -38
  282. package/dist/loaders/create-graph.js.map +0 -1
  283. package/dist/loaders/edge-parsers.d.ts +0 -2
  284. package/dist/loaders/edge-parsers.d.ts.map +0 -1
  285. package/dist/loaders/edge-parsers.js.map +0 -1
  286. package/dist/loaders/json-loader.d.ts +0 -7
  287. package/dist/loaders/json-loader.d.ts.map +0 -1
  288. package/dist/loaders/json-loader.js +0 -16
  289. package/dist/loaders/json-loader.js.map +0 -1
  290. package/dist/loaders/node-parsers.d.ts +0 -2
  291. package/dist/loaders/node-parsers.d.ts.map +0 -1
  292. package/dist/loaders/node-parsers.js.map +0 -1
  293. package/dist/loaders/simple-json-graph-loader.d.ts +0 -11
  294. package/dist/loaders/simple-json-graph-loader.d.ts.map +0 -1
  295. package/dist/loaders/simple-json-graph-loader.js +0 -20
  296. package/dist/loaders/simple-json-graph-loader.js.map +0 -1
  297. package/dist/loaders/table-graph-loader.d.ts +0 -16
  298. package/dist/loaders/table-graph-loader.d.ts.map +0 -1
  299. package/dist/loaders/table-graph-loader.js +0 -91
  300. package/dist/loaders/table-graph-loader.js.map +0 -1
  301. package/dist/style/style-engine.d.ts.map +0 -1
  302. package/dist/style/style-engine.js.map +0 -1
  303. package/dist/widgets/long-press-button.d.ts +0 -12
  304. package/dist/widgets/long-press-button.d.ts.map +0 -1
  305. package/dist/widgets/long-press-button.js +0 -31
  306. package/dist/widgets/long-press-button.js.map +0 -1
  307. package/dist/widgets/view-control-widget.d.ts +0 -77
  308. package/dist/widgets/view-control-widget.d.ts.map +0 -1
  309. package/dist/widgets/view-control-widget.js +0 -197
  310. package/dist/widgets/view-control-widget.js.map +0 -1
  311. package/src/loaders/json-loader.ts +0 -19
  312. package/src/widgets/long-press-button.tsx +0 -50
  313. package/src/widgets/view-control-widget.tsx +0 -339
@@ -4,9 +4,7 @@
4
4
 
5
5
  import type {Bounds2D} from '@math.gl/types';
6
6
 
7
- import type {Graph} from '../graph/graph';
8
- import type {Node} from '../graph/node';
9
- import type {Edge} from '../graph/edge';
7
+ import type {Graph, NodeInterface, EdgeInterface} from '../graph/graph';
10
8
 
11
9
  import isEqual from 'lodash.isequal';
12
10
  import {log} from '../utils/log';
@@ -18,16 +16,30 @@ export type GraphLayoutEventDetail = {
18
16
  bounds: Bounds2D | null;
19
17
  };
20
18
 
21
- export type GraphLayoutProps = {};
19
+ export type GraphLayoutProps = {
20
+ onLayoutStart?: (detail?: GraphLayoutEventDetail) => void;
21
+ onLayoutChange?: (detail?: GraphLayoutEventDetail) => void;
22
+ onLayoutDone?: (detail?: GraphLayoutEventDetail) => void;
23
+ onLayoutError?: (error?: unknown) => void;
24
+ };
25
+
22
26
 
23
- /** All the layout classes are extended from this base layout class. */
24
27
  export abstract class GraphLayout<
25
- OptionsT extends GraphLayoutProps = GraphLayoutProps
26
- > extends EventTarget {
27
- /** Name of the layout. */
28
- protected readonly _name: string = 'GraphLayout';
29
- /** Extra configuration options of the layout. */
30
- protected _options: OptionsT;
28
+ PropsT extends GraphLayoutProps = GraphLayoutProps
29
+ > {
30
+ static defaultProps: Readonly<Required<GraphLayoutProps>> = {
31
+ onLayoutStart: undefined,
32
+ onLayoutChange: undefined,
33
+ onLayoutDone: undefined,
34
+ onLayoutError: undefined
35
+ };
36
+
37
+ get [Symbol.toStringTag](): string {
38
+ return 'GraphLayout';
39
+ }
40
+
41
+ /** Extra configuration props of the layout. */
42
+ protected props: Required<PropsT>;
31
43
 
32
44
  /**
33
45
  * Last computed layout bounds in local layout coordinates.
@@ -42,11 +54,22 @@ export abstract class GraphLayout<
42
54
 
43
55
  /**
44
56
  * Constructor of GraphLayout
45
- * @param options extra configuration options of the layout
57
+ * @param props extra configuration props of the layout
46
58
  */
47
- constructor(options: OptionsT) {
48
- super();
49
- this._options = options;
59
+ constructor(props: PropsT, defaultProps?: Required<PropsT>) {
60
+ this.props = {
61
+ ...GraphLayout.defaultProps,
62
+ ...defaultProps,
63
+ ...props
64
+ };
65
+ }
66
+
67
+ getProps(): PropsT {
68
+ return {...this.props};
69
+ }
70
+
71
+ setProps(props: Partial<PropsT>): void {
72
+ this.props = {...this.props, ...props};
50
73
  }
51
74
 
52
75
  /**
@@ -58,18 +81,18 @@ export abstract class GraphLayout<
58
81
  if (!layout || !(layout instanceof GraphLayout)) {
59
82
  return false;
60
83
  }
61
- return this._name === layout._name && isEqual(this._options, layout._options);
84
+ return this instanceof layout.constructor && isEqual(this.props, layout.props);
62
85
  }
63
86
 
64
87
  // Accessors
65
88
 
66
89
  /** access the position of the node in the layout */
67
- getNodePosition(node: Node): [number, number] {
90
+ getNodePosition(node: NodeInterface): [number, number] {
68
91
  return [0, 0];
69
92
  }
70
93
 
71
94
  /** access the layout information of the edge */
72
- getEdgePosition(edge: Edge) {
95
+ getEdgePosition(edge: EdgeInterface) {
73
96
  return {
74
97
  type: 'line',
75
98
  sourcePosition: [0, 0],
@@ -84,13 +107,13 @@ export abstract class GraphLayout<
84
107
  * @param x x coordinate
85
108
  * @param y y coordinate
86
109
  */
87
- lockNodePosition(node: Node, x: number, y: number) {}
110
+ lockNodePosition(node: NodeInterface, x: number, y: number) {}
88
111
 
89
112
  /**
90
113
  * Unlock the node, the node will be able to move freely.
91
114
  * @param {Object} node Node to be unlocked
92
115
  */
93
- unlockNodePosition(node: Node) {}
116
+ unlockNodePosition(node: NodeInterface) {}
94
117
 
95
118
  /** Returns the last computed layout bounds, if available. */
96
119
  getBounds(): Bounds2D | null {
@@ -100,9 +123,9 @@ export abstract class GraphLayout<
100
123
  /** virtual functions: will be implemented in the child class */
101
124
 
102
125
  /** first time to pass the graph data into this layout */
103
- abstract initializeGraph(graph: Graph);
126
+ abstract initializeGraph(graph: Graph): void;
104
127
  /** update the existing graph */
105
- abstract updateGraph(graph: Graph);
128
+ abstract updateGraph(graph: Graph): void;
106
129
  /** start the layout calculation */
107
130
  abstract start();
108
131
  /** update the layout calculation */
@@ -194,7 +217,7 @@ export abstract class GraphLayout<
194
217
 
195
218
  /** @fires GraphLayout#onLayoutStart */
196
219
  protected _onLayoutStart = (): void => {
197
- log.log(0, `GraphLayout(${this._name}): start`)();
220
+ log.log(0, `GraphLayout(${this}): start`)();
198
221
  this._updateBounds();
199
222
  this._updateState('calculating');
200
223
 
@@ -204,12 +227,12 @@ export abstract class GraphLayout<
204
227
  * @type {CustomEvent}
205
228
  */
206
229
  const detail: GraphLayoutEventDetail = {bounds: this._bounds};
207
- this.dispatchEvent(new CustomEvent<GraphLayoutEventDetail>('onLayoutStart', {detail}));
230
+ this.props.onLayoutStart?.(detail);
208
231
  };
209
232
 
210
233
  /** @fires GraphLayout#onLayoutChange */
211
234
  protected _onLayoutChange = (): void => {
212
- log.log(0, `GraphLayout(${this._name}): update`)();
235
+ log.log(0, `GraphLayout(${this}): update`)();
213
236
  this._updateBounds();
214
237
  this._updateState('calculating');
215
238
 
@@ -219,12 +242,12 @@ export abstract class GraphLayout<
219
242
  * @type {CustomEvent}
220
243
  */
221
244
  const detail: GraphLayoutEventDetail = {bounds: this._bounds};
222
- this.dispatchEvent(new CustomEvent<GraphLayoutEventDetail>('onLayoutChange', {detail}));
245
+ this.props.onLayoutChange?.(detail);
223
246
  };
224
247
 
225
248
  /** @fires GraphLayout#onLayoutDone */
226
249
  protected _onLayoutDone = (): void => {
227
- log.log(0, `GraphLayout(${this._name}): end`)();
250
+ log.log(0, `GraphLayout(${this}): end`)();
228
251
  this._updateBounds();
229
252
  this._updateState('done');
230
253
 
@@ -234,7 +257,7 @@ export abstract class GraphLayout<
234
257
  * @type {CustomEvent}
235
258
  */
236
259
  const detail: GraphLayoutEventDetail = {bounds: this._bounds};
237
- this.dispatchEvent(new CustomEvent<GraphLayoutEventDetail>('onLayoutDone', {detail}));
260
+ this.props.onLayoutDone?.(detail);
238
261
  };
239
262
 
240
263
  /** @fires GraphLayout#onLayoutError */
@@ -246,6 +269,6 @@ export abstract class GraphLayout<
246
269
  * @event GraphLayout#onLayoutError
247
270
  * @type {CustomEvent}
248
271
  */
249
- this.dispatchEvent(new CustomEvent('onLayoutError'));
272
+ this.props.onLayoutError?.();
250
273
  };
251
274
  }
@@ -3,9 +3,8 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {EdgeState, NodeState} from './constants';
6
- import {Edge} from '../graph/edge';
7
- import {Node} from '../graph/node';
8
6
  import {GraphEngine} from './graph-engine';
7
+ import type {EdgeInterface, NodeInterface} from '../graph/graph';
9
8
  import {log} from '../utils/log';
10
9
  import {
11
10
  resolveChainInteractionSource,
@@ -32,13 +31,13 @@ const NODE_TO_EDGE_STATE_MAP: Record<NodeState, EdgeState> = {
32
31
  selected: 'selected'
33
32
  };
34
33
 
35
- function shouldEdgeBeSelected(edge: Edge): boolean {
34
+ function shouldEdgeBeSelected(edge: EdgeInterface): boolean {
36
35
  return edge
37
36
  .getConnectedNodes()
38
37
  .some((node) => node.getState() === 'selected' && node.shouldHighlightConnectedEdges());
39
38
  }
40
39
 
41
- function setNodeState(node: Node, state: NodeState) {
40
+ function setNodeState(node: NodeInterface, state: NodeState) {
42
41
  node.setState(state);
43
42
  if (node.shouldHighlightConnectedEdges()) {
44
43
  node.getConnectedEdges().forEach((edge) => {
@@ -55,7 +54,7 @@ interface EventMap {
55
54
  onClick?: (info: unknown, event: Event) => void;
56
55
  onHover?: (info: unknown) => void;
57
56
  onMouseEnter?: (info: unknown) => void;
58
- onMouseLeave?: (node: Node) => void;
57
+ onMouseLeave?: (node: NodeInterface) => void;
59
58
  onDragStart?: (info: unknown) => void;
60
59
  onDrag?: (info: unknown) => void;
61
60
  onDragEnd?: (info: unknown) => void;
@@ -72,8 +71,8 @@ export interface InteractionManagerProps {
72
71
  export class InteractionManager {
73
72
  public notifyCallback: Function;
74
73
  private _lastInteraction = 0;
75
- private _lastHoveredNode: Node | null = null;
76
- private _lastSelectedNode: Node | null = null;
74
+ private _lastHoveredNode: NodeInterface | null = null;
75
+ private _lastSelectedNode: NodeInterface | null = null;
77
76
 
78
77
  public nodeEvents: EventMap = undefined!;
79
78
  public edgeEvents: EventMap = undefined!;
@@ -118,7 +117,7 @@ export class InteractionManager {
118
117
  }
119
118
 
120
119
  if (object.isNode) {
121
- const node = object as Node;
120
+ const node = object as NodeInterface;
122
121
  const chainId = node.getPropertyValue('collapsedChainId');
123
122
  const collapsedNodeIds = node.getPropertyValue('collapsedNodeIds');
124
123
  const representativeId = node.getPropertyValue('collapsedChainRepresentativeId');
@@ -161,7 +160,7 @@ export class InteractionManager {
161
160
  }
162
161
  }
163
162
 
164
- if ((object as Node).isSelectable()) {
163
+ if (node.isSelectable()) {
165
164
  if (this._lastSelectedNode) {
166
165
  setNodeState(this._lastSelectedNode, 'default');
167
166
  }
@@ -176,7 +175,7 @@ export class InteractionManager {
176
175
  }
177
176
  }
178
177
 
179
- if (object.isEdge && this.edgeEvents.onClick) {
178
+ if ((object as EdgeInterface).isEdge && this.edgeEvents.onClick) {
180
179
  this.edgeEvents.onClick(info, event);
181
180
  }
182
181
  }
@@ -186,10 +185,9 @@ export class InteractionManager {
186
185
 
187
186
  if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === 'selected')) {
188
187
  // reset the last hovered node's state
189
- const newState =
190
- this._lastSelectedNode !== null && this._lastSelectedNode.id === this._lastHoveredNode?.id
191
- ? 'selected'
192
- : 'default';
188
+ const lastSelectedId = this._lastSelectedNode?.getId();
189
+ const lastHoveredId = this._lastHoveredNode?.getId();
190
+ const newState = lastSelectedId !== undefined && lastSelectedId === lastHoveredId ? 'selected' : 'default';
193
191
  setNodeState(lastHoveredNode, newState);
194
192
  }
195
193
  // trigger the callback if exists
@@ -200,7 +198,7 @@ export class InteractionManager {
200
198
 
201
199
  _mouseEnterNode(info): void {
202
200
  // set the node's state to hover
203
- setNodeState(info.object as Node, 'hover');
201
+ setNodeState(info.object as NodeInterface, 'hover');
204
202
  // trigger the callback if exists
205
203
  if (this.nodeEvents.onMouseEnter) {
206
204
  this.nodeEvents.onMouseEnter(info);
@@ -223,7 +221,9 @@ export class InteractionManager {
223
221
 
224
222
  // hover over on a node
225
223
  if (info.object.isNode) {
226
- const isSameNode = this._lastHoveredNode && this._lastHoveredNode.id === info.object.id;
224
+ const lastHoveredId = this._lastHoveredNode?.getId();
225
+ const currentId = (info.object as NodeInterface).getId();
226
+ const isSameNode = lastHoveredId !== undefined && lastHoveredId === currentId;
227
227
  // stay in the same node
228
228
  if (isSameNode) {
229
229
  return;
@@ -262,9 +262,9 @@ export class InteractionManager {
262
262
  const bounds = info.layer.context.viewport.getBounds(); // [minX, minY, maxX, maxY]
263
263
  const x = Math.min(Math.max(coordinates[0], bounds[0]), bounds[2]);
264
264
  const y = Math.min(Math.max(coordinates[1], bounds[1]), bounds[3]);
265
- this.engine.lockNodePosition(info.object, x, y);
265
+ this.engine.lockNodePosition(info.object as NodeInterface, x, y);
266
266
 
267
- setNodeState(info.object, 'dragging');
267
+ setNodeState(info.object as NodeInterface, 'dragging');
268
268
  this._lastInteraction = Date.now();
269
269
  this.notifyCallback();
270
270
  if (this.nodeEvents.onDrag) {
@@ -279,7 +279,7 @@ export class InteractionManager {
279
279
  if (this.resumeLayoutAfterDragging) {
280
280
  this.engine.resume();
281
281
  }
282
- setNodeState(info.object, 'default');
283
- this.engine.unlockNodePosition(info.object);
282
+ setNodeState(info.object as NodeInterface, 'default');
283
+ this.engine.unlockNodePosition(info.object as NodeInterface);
284
284
  }
285
285
  }