@deck.gl-community/graph-layers 9.1.1 → 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 (354) hide show
  1. package/dist/_deprecated/old-constants.d.ts +107 -0
  2. package/dist/_deprecated/old-constants.d.ts.map +1 -0
  3. package/dist/_deprecated/old-constants.js +111 -0
  4. package/dist/_deprecated/old-constants.js.map +1 -0
  5. package/dist/core/cache.d.ts +0 -1
  6. package/dist/core/cache.js +0 -1
  7. package/dist/core/constants.d.ts +12 -100
  8. package/dist/core/constants.d.ts.map +1 -1
  9. package/dist/core/constants.js +3 -44
  10. package/dist/core/constants.js.map +1 -1
  11. package/dist/core/graph-engine.d.ts +63 -20
  12. package/dist/core/graph-engine.d.ts.map +1 -1
  13. package/dist/core/graph-engine.js +163 -72
  14. package/dist/core/graph-engine.js.map +1 -1
  15. package/dist/core/graph-layout.d.ts +63 -32
  16. package/dist/core/graph-layout.d.ts.map +1 -1
  17. package/dist/core/graph-layout.js +118 -36
  18. package/dist/core/graph-layout.js.map +1 -1
  19. package/dist/core/interaction-manager.d.ts +7 -5
  20. package/dist/core/interaction-manager.d.ts.map +1 -1
  21. package/dist/core/interaction-manager.js +64 -20
  22. package/dist/core/interaction-manager.js.map +1 -1
  23. package/dist/graph/arrow-graph.d.ts +69 -0
  24. package/dist/graph/arrow-graph.d.ts.map +1 -0
  25. package/dist/graph/arrow-graph.js +513 -0
  26. package/dist/graph/arrow-graph.js.map +1 -0
  27. package/dist/graph/classic-graph.d.ts +169 -0
  28. package/dist/graph/classic-graph.d.ts.map +1 -0
  29. package/dist/graph/classic-graph.js +390 -0
  30. package/dist/graph/classic-graph.js.map +1 -0
  31. package/dist/graph/edge.d.ts +12 -12
  32. package/dist/graph/edge.d.ts.map +1 -1
  33. package/dist/graph/edge.js +3 -6
  34. package/dist/graph/edge.js.map +1 -1
  35. package/dist/graph/functions/arrow-utils.d.ts +6 -0
  36. package/dist/graph/functions/arrow-utils.d.ts.map +1 -0
  37. package/dist/graph/functions/arrow-utils.js +67 -0
  38. package/dist/graph/functions/arrow-utils.js.map +1 -0
  39. package/dist/graph/functions/create-graph-from-data.d.ts +3 -0
  40. package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -0
  41. package/dist/graph/functions/create-graph-from-data.js +12 -0
  42. package/dist/graph/functions/create-graph-from-data.js.map +1 -0
  43. package/dist/graph/graph-normalization.d.ts +10 -0
  44. package/dist/graph/graph-normalization.d.ts.map +1 -0
  45. package/dist/graph/graph-normalization.js +65 -0
  46. package/dist/graph/graph-normalization.js.map +1 -0
  47. package/dist/graph/graph.d.ts +62 -156
  48. package/dist/graph/graph.d.ts.map +1 -1
  49. package/dist/graph/graph.js +11 -301
  50. package/dist/graph/graph.js.map +1 -1
  51. package/dist/graph/node.d.ts +12 -13
  52. package/dist/graph/node.d.ts.map +1 -1
  53. package/dist/graph/node.js +5 -7
  54. package/dist/graph/node.js.map +1 -1
  55. package/dist/graph-data/arrow-graph-data-builder.d.ts +21 -0
  56. package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -0
  57. package/dist/graph-data/arrow-graph-data-builder.js +105 -0
  58. package/dist/graph-data/arrow-graph-data-builder.js.map +1 -0
  59. package/dist/graph-data/graph-data-builder.d.ts +6 -0
  60. package/dist/graph-data/graph-data-builder.d.ts.map +1 -0
  61. package/dist/graph-data/graph-data-builder.js +1 -0
  62. package/dist/graph-data/graph-data-builder.js.map +1 -0
  63. package/dist/graph-data/graph-data.d.ts +40 -0
  64. package/dist/graph-data/graph-data.d.ts.map +1 -0
  65. package/dist/graph-data/graph-data.js +11 -0
  66. package/dist/graph-data/graph-data.js.map +1 -0
  67. package/dist/graph-data/plain-graph-data-builder.d.ts +20 -0
  68. package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -0
  69. package/dist/graph-data/plain-graph-data-builder.js +105 -0
  70. package/dist/graph-data/plain-graph-data-builder.js.map +1 -0
  71. package/dist/graph-style-schema.cdn.d.ts +2 -0
  72. package/dist/graph-style-schema.cdn.js +2 -0
  73. package/dist/graph-style-schema.json +12 -0
  74. package/dist/index.cjs +7851 -3250
  75. package/dist/index.cjs.map +4 -4
  76. package/dist/index.d.ts +35 -22
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +42 -25
  79. package/dist/index.js.map +1 -1
  80. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +0 -1
  81. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +0 -1
  82. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +0 -1
  83. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +0 -1
  84. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +0 -1
  85. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +0 -1
  86. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +0 -1
  87. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts.map +1 -1
  88. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +1 -3
  89. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js.map +1 -1
  90. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts +83 -0
  91. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -0
  92. package/dist/layers/common-layers/grid-layer/grid-layer.js +133 -0
  93. package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -0
  94. package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +0 -1
  95. package/dist/layers/common-layers/marker-layer/atlas-data-url.js +0 -1
  96. package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +0 -1
  97. package/dist/layers/common-layers/marker-layer/marker-layer.js +2 -3
  98. package/dist/layers/common-layers/marker-layer/marker-list.d.ts +2 -63
  99. package/dist/layers/common-layers/marker-layer/marker-list.d.ts.map +1 -1
  100. package/dist/layers/common-layers/marker-layer/marker-list.js +1 -65
  101. package/dist/layers/common-layers/marker-layer/marker-list.js.map +1 -1
  102. package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +0 -1
  103. package/dist/layers/common-layers/marker-layer/marker-mapping.js +0 -1
  104. package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +0 -1
  105. package/dist/layers/common-layers/spline-layer/spline-layer.js +0 -1
  106. package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +0 -1
  107. package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +0 -1
  108. package/dist/layers/edge-attachment-helper.d.ts +15 -0
  109. package/dist/layers/edge-attachment-helper.d.ts.map +1 -0
  110. package/dist/layers/edge-attachment-helper.js +229 -0
  111. package/dist/layers/edge-attachment-helper.js.map +1 -0
  112. package/dist/layers/edge-layer.d.ts +1 -5
  113. package/dist/layers/edge-layer.d.ts.map +1 -1
  114. package/dist/layers/edge-layer.js +9 -11
  115. package/dist/layers/edge-layer.js.map +1 -1
  116. package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +4 -0
  117. package/dist/layers/edge-layers/arrow-2d-geometry.d.ts.map +1 -0
  118. package/dist/layers/edge-layers/arrow-2d-geometry.js +42 -0
  119. package/dist/layers/edge-layers/arrow-2d-geometry.js.map +1 -0
  120. package/dist/layers/edge-layers/curved-edge-layer.d.ts +1 -2
  121. package/dist/layers/edge-layers/curved-edge-layer.js +1 -2
  122. package/dist/layers/edge-layers/edge-arrow-layer.d.ts +21 -0
  123. package/dist/layers/edge-layers/edge-arrow-layer.d.ts.map +1 -0
  124. package/dist/layers/edge-layers/edge-arrow-layer.js +131 -0
  125. package/dist/layers/edge-layers/edge-arrow-layer.js.map +1 -0
  126. package/dist/layers/edge-layers/edge-label-layer.d.ts +1 -2
  127. package/dist/layers/edge-layers/edge-label-layer.js +1 -2
  128. package/dist/layers/edge-layers/flow-layer.d.ts +1 -2
  129. package/dist/layers/edge-layers/flow-layer.js +1 -2
  130. package/dist/layers/edge-layers/path-edge-layer.d.ts +0 -1
  131. package/dist/layers/edge-layers/path-edge-layer.js +0 -1
  132. package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +0 -1
  133. package/dist/layers/edge-layers/straight-line-edge-layer.js +0 -1
  134. package/dist/layers/graph-layer.d.ts +85 -29
  135. package/dist/layers/graph-layer.d.ts.map +1 -1
  136. package/dist/layers/graph-layer.js +635 -94
  137. package/dist/layers/graph-layer.js.map +1 -1
  138. package/dist/layers/node-layers/circle-layer.d.ts +0 -1
  139. package/dist/layers/node-layers/circle-layer.js +0 -1
  140. package/dist/layers/node-layers/image-layer.d.ts +0 -1
  141. package/dist/layers/node-layers/image-layer.js +0 -1
  142. package/dist/layers/node-layers/label-layer.d.ts +1 -2
  143. package/dist/layers/node-layers/label-layer.js +1 -2
  144. package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +0 -1
  145. package/dist/layers/node-layers/path-rounded-rectangle-layer.js +1 -2
  146. package/dist/layers/node-layers/rectangle-layer.d.ts +0 -1
  147. package/dist/layers/node-layers/rectangle-layer.js +0 -1
  148. package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +0 -1
  149. package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +0 -1
  150. package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +1 -2
  151. package/dist/layers/node-layers/rounded-rectangle-layer.js +2 -3
  152. package/dist/layers/node-layers/zoomable-marker-layer.d.ts +1 -2
  153. package/dist/layers/node-layers/zoomable-marker-layer.js +1 -2
  154. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts +24 -0
  155. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -0
  156. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js +251 -0
  157. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -0
  158. package/dist/layouts/d3-dag/d3-dag-layout.d.ts +102 -0
  159. package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -0
  160. package/dist/layouts/d3-dag/d3-dag-layout.js +531 -0
  161. package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -0
  162. package/dist/layouts/d3-force/d3-force-layout.d.ts +23 -11
  163. package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
  164. package/dist/layouts/d3-force/d3-force-layout.js +63 -29
  165. package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
  166. package/dist/layouts/d3-force/worker.d.ts +0 -1
  167. package/dist/layouts/d3-force/worker.js +0 -1
  168. package/dist/layouts/experimental/force-multi-graph-layout.d.ts +25 -20
  169. package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
  170. package/dist/layouts/experimental/force-multi-graph-layout.js +60 -47
  171. package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
  172. package/dist/layouts/experimental/hive-plot-layout.d.ts +26 -20
  173. package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
  174. package/dist/layouts/experimental/hive-plot-layout.js +43 -39
  175. package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
  176. package/dist/layouts/experimental/radial-layout.d.ts +20 -12
  177. package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
  178. package/dist/layouts/experimental/radial-layout.js +41 -19
  179. package/dist/layouts/experimental/radial-layout.js.map +1 -1
  180. package/dist/layouts/gpu-force/gpu-force-layout.d.ts +15 -12
  181. package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
  182. package/dist/layouts/gpu-force/gpu-force-layout.js +71 -59
  183. package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
  184. package/dist/layouts/gpu-force/worker.d.ts +0 -1
  185. package/dist/layouts/gpu-force/worker.js +0 -1
  186. package/dist/layouts/simple-layout.d.ts +21 -31
  187. package/dist/layouts/simple-layout.d.ts.map +1 -1
  188. package/dist/layouts/simple-layout.js +33 -26
  189. package/dist/layouts/simple-layout.js.map +1 -1
  190. package/dist/loaders/dot-graph-loader.d.ts +25 -0
  191. package/dist/loaders/dot-graph-loader.d.ts.map +1 -0
  192. package/dist/loaders/dot-graph-loader.js +668 -0
  193. package/dist/loaders/dot-graph-loader.js.map +1 -0
  194. package/dist/loaders/json-graph-loader.d.ts +6 -0
  195. package/dist/loaders/json-graph-loader.d.ts.map +1 -0
  196. package/dist/loaders/json-graph-loader.js +31 -0
  197. package/dist/loaders/json-graph-loader.js.map +1 -0
  198. package/dist/loaders/parsers/edge-parsers.d.ts +2 -0
  199. package/dist/loaders/parsers/edge-parsers.d.ts.map +1 -0
  200. package/dist/loaders/{edge-parsers.js → parsers/edge-parsers.js} +2 -3
  201. package/dist/loaders/parsers/edge-parsers.js.map +1 -0
  202. package/dist/loaders/parsers/node-parsers.d.ts +2 -0
  203. package/dist/loaders/parsers/node-parsers.d.ts.map +1 -0
  204. package/dist/loaders/{node-parsers.js → parsers/node-parsers.js} +2 -3
  205. package/dist/loaders/parsers/node-parsers.js.map +1 -0
  206. package/dist/loaders/parsers/parse-json-graph.d.ts +29 -0
  207. package/dist/loaders/parsers/parse-json-graph.d.ts.map +1 -0
  208. package/dist/loaders/parsers/parse-json-graph.js +78 -0
  209. package/dist/loaders/parsers/parse-json-graph.js.map +1 -0
  210. package/dist/style/graph-layer-stylesheet.d.ts +34 -0
  211. package/dist/style/graph-layer-stylesheet.d.ts.map +1 -0
  212. package/dist/style/graph-layer-stylesheet.js +39 -0
  213. package/dist/style/graph-layer-stylesheet.js.map +1 -0
  214. package/dist/style/graph-style-accessor-map.d.ts +93 -0
  215. package/dist/style/graph-style-accessor-map.d.ts.map +1 -0
  216. package/dist/style/graph-style-accessor-map.js +93 -0
  217. package/dist/style/graph-style-accessor-map.js.map +1 -0
  218. package/dist/style/graph-style-engine.d.ts +12 -0
  219. package/dist/style/graph-style-engine.d.ts.map +1 -0
  220. package/dist/style/graph-style-engine.js +164 -0
  221. package/dist/style/graph-style-engine.js.map +1 -0
  222. package/dist/style/graph-stylesheet.schema.d.ts +310 -0
  223. package/dist/style/graph-stylesheet.schema.d.ts.map +1 -0
  224. package/dist/style/graph-stylesheet.schema.js +237 -0
  225. package/dist/style/graph-stylesheet.schema.js.map +1 -0
  226. package/dist/style/style-property.d.ts +2 -3
  227. package/dist/style/style-property.d.ts.map +1 -1
  228. package/dist/style/style-property.js +224 -48
  229. package/dist/style/style-property.js.map +1 -1
  230. package/dist/style/stylesheet-engine.d.ts +33 -0
  231. package/dist/style/stylesheet-engine.d.ts.map +1 -0
  232. package/dist/style/stylesheet-engine.js +121 -0
  233. package/dist/style/stylesheet-engine.js.map +1 -0
  234. package/dist/utils/collapsed-chains.d.ts +17 -0
  235. package/dist/utils/collapsed-chains.d.ts.map +1 -0
  236. package/dist/utils/collapsed-chains.js +192 -0
  237. package/dist/utils/collapsed-chains.js.map +1 -0
  238. package/dist/utils/layer-utils.d.ts +0 -1
  239. package/dist/utils/layer-utils.d.ts.map +1 -1
  240. package/dist/utils/layer-utils.js +0 -1
  241. package/dist/utils/log.d.ts +2 -1
  242. package/dist/utils/log.d.ts.map +1 -1
  243. package/dist/utils/log.js +12 -2
  244. package/dist/utils/log.js.map +1 -1
  245. package/dist/utils/node-boundary.d.ts +10 -0
  246. package/dist/utils/node-boundary.d.ts.map +1 -0
  247. package/dist/utils/node-boundary.js +130 -0
  248. package/dist/utils/node-boundary.js.map +1 -0
  249. package/dist/utils/polygon-calculations.d.ts +0 -1
  250. package/dist/utils/polygon-calculations.js +0 -1
  251. package/dist/utils/rank-grid.d.ts +30 -0
  252. package/dist/utils/rank-grid.d.ts.map +1 -0
  253. package/dist/utils/rank-grid.js +306 -0
  254. package/dist/utils/rank-grid.js.map +1 -0
  255. package/package.json +25 -13
  256. package/src/_deprecated/old-constants.ts +122 -0
  257. package/src/_disabled/arrow-graph-data.ts.disabled +18 -0
  258. package/src/_disabled/columnar-graph-data-builder.ts.disabled +250 -0
  259. package/src/_disabled/graph-runtime-layout.ts.disabled +29 -0
  260. package/src/core/constants.ts +21 -43
  261. package/src/core/graph-engine.ts +212 -80
  262. package/src/core/graph-layout.ts +175 -47
  263. package/src/core/interaction-manager.ts +93 -33
  264. package/src/graph/arrow-graph.ts +648 -0
  265. package/src/graph/classic-graph.ts +447 -0
  266. package/src/graph/edge.ts +13 -13
  267. package/src/graph/functions/arrow-utils.ts +72 -0
  268. package/src/graph/functions/convert-arrow-graph-to-classic-graph.ts.disabled +47 -0
  269. package/src/graph/functions/convert-plain-graph-to-arrow-graph.ts.disabled +119 -0
  270. package/src/graph/functions/create-graph-from-data.ts +16 -0
  271. package/src/graph/functions/create-plain-graph-from-data.ts.disabled +176 -0
  272. package/src/graph/graph-normalization.ts +87 -0
  273. package/src/graph/graph.ts +68 -339
  274. package/src/graph/node.ts +15 -15
  275. package/src/graph/tabular-graph.ts.disabled +761 -0
  276. package/src/graph-data/arrow-graph-data-builder.ts +165 -0
  277. package/src/graph-data/graph-data-builder.ts +7 -0
  278. package/src/graph-data/graph-data.ts +57 -0
  279. package/src/graph-data/plain-graph-data-builder.ts +132 -0
  280. package/src/index.ts +82 -17
  281. package/src/layers/common-layers/flow-path-layer/flow-path-layer.ts +1 -2
  282. package/src/layers/common-layers/grid-layer/grid-layer.ts +237 -0
  283. package/src/layers/common-layers/marker-layer/marker-list.ts +62 -64
  284. package/src/layers/edge-attachment-helper.ts +361 -0
  285. package/src/layers/edge-layer.ts +6 -7
  286. package/src/layers/edge-layers/arrow-2d-geometry.ts +51 -0
  287. package/src/layers/edge-layers/edge-arrow-layer.ts +171 -0
  288. package/src/layers/graph-layer.ts +928 -130
  289. package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +330 -0
  290. package/src/layouts/d3-dag/d3-dag-layout.ts +739 -0
  291. package/src/layouts/d3-force/d3-force-layout.ts +83 -39
  292. package/src/layouts/experimental/force-multi-graph-layout.ts +72 -57
  293. package/src/layouts/experimental/hive-plot-layout.ts +60 -49
  294. package/src/layouts/experimental/radial-layout.ts +57 -26
  295. package/src/layouts/gpu-force/gpu-force-layout.ts +86 -72
  296. package/src/layouts/simple-layout.ts +51 -52
  297. package/src/loaders/{create-graph.ts → deprecated/create-graph.ts.disabled} +6 -6
  298. package/src/loaders/deprecated/json-classic-graph-loader.ts.disabled +33 -0
  299. package/src/loaders/{simple-json-graph-loader.ts → deprecated/simple-json-graph-loader.ts.disabled} +4 -4
  300. package/src/loaders/{table-graph-loader.ts → deprecated/table-graph-loader.ts.disabled} +9 -9
  301. package/src/loaders/dot-graph-loader.ts +860 -0
  302. package/src/loaders/json-graph-loader.ts +48 -0
  303. package/src/loaders/parsers/create-graph-data.ts.disabled +45 -0
  304. package/src/loaders/{edge-parsers.ts → parsers/edge-parsers.ts} +3 -3
  305. package/src/loaders/{node-parsers.ts → parsers/node-parsers.ts} +3 -3
  306. package/src/loaders/parsers/parse-json-graph.ts +134 -0
  307. package/src/style/graph-layer-stylesheet.ts +99 -0
  308. package/src/style/graph-style-accessor-map.ts +103 -0
  309. package/src/style/graph-style-engine.ts +232 -0
  310. package/src/style/graph-stylesheet.schema.ts +344 -0
  311. package/src/style/style-property.ts +314 -51
  312. package/src/style/stylesheet-engine.ts +168 -0
  313. package/src/utils/collapsed-chains.ts +255 -0
  314. package/src/utils/log.ts +15 -1
  315. package/src/utils/node-boundary.ts +238 -0
  316. package/src/utils/rank-grid.ts +426 -0
  317. package/dist/loaders/create-graph.d.ts +0 -13
  318. package/dist/loaders/create-graph.d.ts.map +0 -1
  319. package/dist/loaders/create-graph.js +0 -39
  320. package/dist/loaders/create-graph.js.map +0 -1
  321. package/dist/loaders/edge-parsers.d.ts +0 -3
  322. package/dist/loaders/edge-parsers.d.ts.map +0 -1
  323. package/dist/loaders/edge-parsers.js.map +0 -1
  324. package/dist/loaders/json-loader.d.ts +0 -8
  325. package/dist/loaders/json-loader.d.ts.map +0 -1
  326. package/dist/loaders/json-loader.js +0 -17
  327. package/dist/loaders/json-loader.js.map +0 -1
  328. package/dist/loaders/node-parsers.d.ts +0 -3
  329. package/dist/loaders/node-parsers.d.ts.map +0 -1
  330. package/dist/loaders/node-parsers.js.map +0 -1
  331. package/dist/loaders/simple-json-graph-loader.d.ts +0 -12
  332. package/dist/loaders/simple-json-graph-loader.d.ts.map +0 -1
  333. package/dist/loaders/simple-json-graph-loader.js +0 -21
  334. package/dist/loaders/simple-json-graph-loader.js.map +0 -1
  335. package/dist/loaders/table-graph-loader.d.ts +0 -17
  336. package/dist/loaders/table-graph-loader.d.ts.map +0 -1
  337. package/dist/loaders/table-graph-loader.js +0 -92
  338. package/dist/loaders/table-graph-loader.js.map +0 -1
  339. package/dist/style/style-sheet.d.ts +0 -11
  340. package/dist/style/style-sheet.d.ts.map +0 -1
  341. package/dist/style/style-sheet.js +0 -253
  342. package/dist/style/style-sheet.js.map +0 -1
  343. package/dist/widgets/long-press-button.d.ts +0 -13
  344. package/dist/widgets/long-press-button.d.ts.map +0 -1
  345. package/dist/widgets/long-press-button.js +0 -32
  346. package/dist/widgets/long-press-button.js.map +0 -1
  347. package/dist/widgets/view-control-widget.d.ts +0 -78
  348. package/dist/widgets/view-control-widget.d.ts.map +0 -1
  349. package/dist/widgets/view-control-widget.js +0 -195
  350. package/dist/widgets/view-control-widget.js.map +0 -1
  351. package/src/loaders/json-loader.ts +0 -19
  352. package/src/style/style-sheet.ts +0 -277
  353. package/src/widgets/long-press-button.tsx +0 -50
  354. package/src/widgets/view-control-widget.tsx +0 -337
@@ -2,11 +2,11 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';
5
+ import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
6
+ import type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';
7
+ import {log} from '../../utils/log';
6
8
 
7
- import {EDGE_TYPE} from '../../core/constants';
8
-
9
- export type D3ForceLayoutOptions = GraphLayoutOptions & {
9
+ export type D3ForceLayoutOptions = GraphLayoutProps & {
10
10
  alpha?: number;
11
11
  resumeAlpha?: number;
12
12
  nBodyStrength?: number;
@@ -16,39 +16,38 @@ export type D3ForceLayoutOptions = GraphLayoutOptions & {
16
16
  };
17
17
 
18
18
  export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
19
- static defaultOptions: Required<D3ForceLayoutOptions> = {
19
+ static defaultProps = {
20
+ ...GraphLayout.defaultProps,
20
21
  alpha: 0.3,
21
22
  resumeAlpha: 0.1,
22
23
  nBodyStrength: -900,
23
24
  nBodyDistanceMin: 100,
24
25
  nBodyDistanceMax: 400,
25
26
  getCollisionRadius: 0
26
- };
27
+ } as const satisfies Readonly<Required<D3ForceLayoutOptions>>;
27
28
 
28
29
  protected readonly _name = 'D3';
29
- private _positionsByNodeId = new Map();
30
- private _graph: any;
31
- private _worker: any;
30
+ private _positionsByNodeId = new Map<string | number, any>();
31
+ private _graph: Graph | null = null;
32
+ private _worker: Worker | null = null;
32
33
 
33
- constructor(options?: D3ForceLayoutOptions) {
34
- super(options);
35
-
36
- this._options = {
37
- ...D3ForceLayout.defaultOptions,
38
- ...options
39
- };
34
+ constructor(props?: D3ForceLayoutOptions) {
35
+ super(props, D3ForceLayout.defaultProps);
40
36
  }
41
37
 
42
- initializeGraph(graph) {
38
+ initializeGraph(graph: Graph) {
43
39
  this._graph = graph;
44
40
  }
45
41
 
46
42
  // for streaming new data on the same graph
47
- updateGraph(graph) {
43
+ updateGraph(graph: Graph) {
48
44
  this._graph = graph;
49
45
 
50
46
  this._positionsByNodeId = new Map(
51
- this._graph.getNodes().map((node) => [node.id, this._positionsByNodeId.get(node.id)])
47
+ Array.from(this._graph.getNodes(), (node) => {
48
+ const id = node.getId();
49
+ return [id, this._positionsByNodeId.get(id)];
50
+ })
52
51
  );
53
52
  }
54
53
 
@@ -70,20 +69,34 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
70
69
 
71
70
  this._worker = new Worker(new URL('./worker.js', import.meta.url).href);
72
71
 
72
+ if (!this._graph) {
73
+ return;
74
+ }
75
+
76
+ const options = {...this.props};
77
+ delete options.onLayoutStart;
78
+ delete options.onLayoutChange;
79
+ delete options.onLayoutDone;
80
+ delete options.onLayoutError;
81
+
73
82
  this._worker.postMessage({
74
- nodes: this._graph.getNodes().map((node) => ({
75
- id: node.id,
76
- ...this._positionsByNodeId.get(node.id)
77
- })),
78
- edges: this._graph.getEdges().map((edge) => ({
79
- id: edge.id,
83
+ nodes: Array.from(this._graph.getNodes(), (node) => {
84
+ const id = node.getId();
85
+ return {
86
+ id,
87
+ ...this._positionsByNodeId.get(id)
88
+ };
89
+ }),
90
+ edges: Array.from(this._graph.getEdges(), (edge) => ({
91
+ id: edge.getId(),
80
92
  source: edge.getSourceNodeId(),
81
93
  target: edge.getTargetNodeId()
82
94
  })),
83
- options: this._options
95
+ options
84
96
  });
85
97
 
86
98
  this._worker.onmessage = (event) => {
99
+ log.log(0, 'D3ForceLayout: worker message', event.data?.type, event.data);
87
100
  if (event.data.type !== 'end') {
88
101
  return;
89
102
  }
@@ -106,26 +119,44 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
106
119
  }
107
120
 
108
121
  stop() {
109
- this._worker.terminate();
122
+ if (this._worker) {
123
+ this._worker.terminate();
124
+ this._worker = null;
125
+ }
110
126
  }
111
127
 
112
- getEdgePosition = (edge) => {
128
+ getEdgePosition = (edge: EdgeInterface) => {
129
+ if (!this._graph) {
130
+ return null;
131
+ }
132
+
113
133
  const sourceNode = this._graph.findNode(edge.getSourceNodeId());
114
134
  const targetNode = this._graph.findNode(edge.getTargetNodeId());
115
- if (!this.getNodePosition(sourceNode) || !this.getNodePosition(targetNode)) {
135
+ if (!sourceNode || !targetNode) {
136
+ return null;
137
+ }
138
+
139
+ const sourcePosition = this.getNodePosition(sourceNode);
140
+ const targetPosition = this.getNodePosition(targetNode);
141
+
142
+ if (!sourcePosition || !targetPosition) {
116
143
  return null;
117
144
  }
118
145
 
119
146
  return {
120
- type: EDGE_TYPE.LINE,
121
- sourcePosition: this.getNodePosition(sourceNode),
122
- targetPosition: this.getNodePosition(targetNode),
147
+ type: 'line',
148
+ sourcePosition,
149
+ targetPosition,
123
150
  controlPoints: []
124
151
  };
125
152
  };
126
153
 
127
- getNodePosition = (node) => {
128
- const d3Node = this._positionsByNodeId.get(node.id);
154
+ getNodePosition = (node: NodeInterface | null) => {
155
+ if (!node) {
156
+ return null;
157
+ }
158
+
159
+ const d3Node = this._positionsByNodeId.get(node.getId());
129
160
  if (d3Node) {
130
161
  return d3Node.coordinates;
131
162
  }
@@ -133,9 +164,10 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
133
164
  return null;
134
165
  };
135
166
 
136
- lockNodePosition = (node, x, y) => {
137
- const d3Node = this._positionsByNodeId.get(node.id);
138
- this._positionsByNodeId.set(node.id, {
167
+ lockNodePosition = (node: NodeInterface, x: number, y: number) => {
168
+ const id = node.getId();
169
+ const d3Node = this._positionsByNodeId.get(id);
170
+ this._positionsByNodeId.set(id, {
139
171
  ...d3Node,
140
172
  x,
141
173
  y,
@@ -147,9 +179,21 @@ export class D3ForceLayout extends GraphLayout<D3ForceLayoutOptions> {
147
179
  this._onLayoutDone();
148
180
  };
149
181
 
150
- unlockNodePosition = (node) => {
151
- const d3Node = this._positionsByNodeId.get(node.id);
182
+ unlockNodePosition = (node: NodeInterface) => {
183
+ const id = node.getId();
184
+ const d3Node = this._positionsByNodeId.get(id);
185
+ if (!d3Node) {
186
+ return;
187
+ }
152
188
  d3Node.fx = null;
153
189
  d3Node.fy = null;
154
190
  };
191
+
192
+ protected override _updateBounds(): void {
193
+ const positions = Array.from(
194
+ this._positionsByNodeId.values(),
195
+ (data) => data?.coordinates as [number, number] | null | undefined
196
+ );
197
+ this._bounds = this._calculateBounds(positions);
198
+ }
155
199
  }
@@ -2,43 +2,38 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';
6
- import {Node} from '../../graph/node';
7
- import {EDGE_TYPE} from '../../core/constants';
8
- import {Graph} from '../../graph/graph';
5
+ import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
6
+ import type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';
9
7
  import * as d3 from 'd3-force';
10
8
 
11
- export type ForceMultiGraphLayoutOptions = GraphLayoutOptions & {
9
+ export type ForceMultiGraphLayoutProps = GraphLayoutProps & {
12
10
  alpha?: number;
13
11
  nBodyStrength?: number;
14
12
  nBodyDistanceMin?: number;
15
13
  nBodyDistanceMax?: number;
16
14
  };
17
15
 
18
- export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOptions> {
19
- static defaultOptions = {
16
+ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutProps> {
17
+ static defaultProps = {
18
+ ...GraphLayout.defaultProps,
20
19
  alpha: 3,
21
20
  nBodyStrength: -1200,
22
21
  nBodyDistanceMin: 100,
23
22
  nBodyDistanceMax: 1400
24
- };
23
+ } as const satisfies Readonly<Required<ForceMultiGraphLayoutProps>>;
25
24
 
26
25
  _name = 'ForceMultiGraphLayout';
27
- _graph: Graph;
26
+ _graph: Graph | null = null;
28
27
 
29
28
  // d3 part
30
29
  // custom graph data
31
- _d3Graph = {nodes: [], edges: []};
32
- _nodeMap = {};
33
- _edgeMap = {};
34
- _simulator;
30
+ _d3Graph: {nodes: any[]; edges: any[]} = {nodes: [], edges: []};
31
+ _nodeMap = new Map<string | number, any>();
32
+ _edgeMap = new Map<string | number, any>();
33
+ _simulator: d3.Simulation<any, undefined> | null = null;
35
34
 
36
- constructor(options: ForceMultiGraphLayoutOptions = {}) {
37
- super(options);
38
- this._options = {
39
- ...ForceMultiGraphLayout.defaultOptions,
40
- ...options
41
- };
35
+ constructor(props: ForceMultiGraphLayoutProps = {}) {
36
+ super(props, ForceMultiGraphLayout.defaultProps);
42
37
  }
43
38
 
44
39
  initializeGraph(graph: Graph): void {
@@ -49,8 +44,10 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
49
44
  if (d3Edge.isVirtual) {
50
45
  return 1 / d3Edge.edgeCount;
51
46
  }
52
- const sourceDegree = this._graph.getDegree(d3Edge.source.id);
53
- const targetDegree = this._graph.getDegree(d3Edge.target.id);
47
+ const sourceNode = this._graph?.findNode(d3Edge.source.id);
48
+ const targetNode = this._graph?.findNode(d3Edge.target.id);
49
+ const sourceDegree = sourceNode?.getDegree() ?? 0;
50
+ const targetDegree = targetNode?.getDegree() ?? 0;
54
51
  return 1 / Math.min(sourceDegree, targetDegree);
55
52
  };
56
53
 
@@ -59,7 +56,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
59
56
  this._simulator.on('tick', null).on('end', null);
60
57
  this._simulator = null;
61
58
  }
62
- const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax} = this._options;
59
+ const {alpha, nBodyStrength, nBodyDistanceMin, nBodyDistanceMax} = this.props;
63
60
 
64
61
  const g = this._d3Graph;
65
62
  this._simulator = d3
@@ -68,6 +65,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
68
65
  'edge',
69
66
  d3
70
67
  .forceLink(g.edges)
68
+ // @ts-ignore TODO id not defined?
71
69
  .id((n) => n.id)
72
70
  .strength(this._strength)
73
71
  )
@@ -98,25 +96,30 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
98
96
  this._simulator.stop();
99
97
  }
100
98
 
101
- updateGraph(graph) {
99
+ update(): void {}
100
+
101
+ updateGraph(graph: Graph) {
102
102
  this._graph = graph;
103
103
 
104
104
  // nodes
105
- const newNodeMap = {};
106
- const newD3Nodes = graph.getNodes().map((node) => {
107
- const oldD3Node = this._nodeMap[node.id];
108
- const newD3Node = oldD3Node ? oldD3Node : {id: node.id};
109
- newNodeMap[node.id] = newD3Node;
105
+ const newNodeMap = new Map<string | number, any>();
106
+ const nodes = Array.from(graph.getNodes());
107
+ const newD3Nodes = nodes.map((node) => {
108
+ const id = node.getId();
109
+ const oldD3Node = this._nodeMap.get(id);
110
+ const newD3Node = oldD3Node ? oldD3Node : {id};
111
+ newNodeMap.set(id, newD3Node);
110
112
  return newD3Node;
111
113
  });
112
114
 
113
115
  // edges
114
116
  // bucket edges between the same source/target node pairs.
115
- const nodePairs = graph.getEdges().reduce((res, edge) => {
116
- const nodes = [edge.getSourceNodeId(), edge.getTargetNodeId()];
117
+ const edges = Array.from(graph.getEdges());
118
+ const nodePairs = edges.reduce((res, edge) => {
119
+ const endpoints = [edge.getSourceNodeId(), edge.getTargetNodeId()];
117
120
  // sort the node ids to count the edges with the same pair
118
121
  // but different direction (a -> b or b -> a)
119
- const pairId = nodes.sort().toString();
122
+ const pairId = endpoints.sort().toString();
120
123
  // push this edge into the bucket
121
124
  if (!res[pairId]) {
122
125
  res[pairId] = [edge];
@@ -129,8 +132,8 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
129
132
  // go through each pair of edges,
130
133
  // if only one edge between two nodes, create a straight line
131
134
  // otherwise, create one virtual node and two edges for each edge
132
- const newD3Edges = [];
133
- const newEdgeMap = {};
135
+ const newD3Edges: any[] = [];
136
+ const newEdgeMap = new Map<string | number, any>();
134
137
 
135
138
  Object.keys(nodePairs).forEach((pairId) => {
136
139
  const betweenEdges = nodePairs[pairId];
@@ -138,39 +141,40 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
138
141
  if (betweenEdges.length === 1) {
139
142
  // do nothing, this is a real edge
140
143
  const newD3Edge = {
141
- type: EDGE_TYPE.LINE,
144
+ type: 'line',
142
145
  id: firstEdge.getId(),
143
- source: newNodeMap[firstEdge.getSourceNodeId()],
144
- target: newNodeMap[firstEdge.getTargetNodeId()],
146
+ source: newNodeMap.get(firstEdge.getSourceNodeId()),
147
+ target: newNodeMap.get(firstEdge.getTargetNodeId()),
145
148
  isVirtual: false
146
149
  };
147
- newEdgeMap[firstEdge.getId()] = newD3Edge;
150
+ newEdgeMap.set(firstEdge.getId(), newD3Edge);
148
151
  newD3Edges.push(newD3Edge);
149
152
  return;
150
153
  }
151
154
 
152
155
  // else reduce to one virtual edge
153
156
  const newD3Edge = {
154
- type: EDGE_TYPE.LINE,
157
+ type: 'line',
155
158
  id: pairId,
156
- source: newNodeMap[firstEdge.getSourceNodeId()],
157
- target: newNodeMap[firstEdge.getTargetNodeId()],
159
+ source: newNodeMap.get(firstEdge.getSourceNodeId()),
160
+ target: newNodeMap.get(firstEdge.getTargetNodeId()),
158
161
  isVirtual: true,
159
162
  edgeCount: betweenEdges.length
160
163
  };
161
- newEdgeMap[pairId] = newD3Edge;
164
+ newEdgeMap.set(pairId, newD3Edge);
162
165
  newD3Edges.push(newD3Edge);
163
166
 
164
167
  betweenEdges.forEach((e, idx) => {
165
- newEdgeMap[e.id] = {
166
- type: EDGE_TYPE.SPLINE_CURVE,
167
- id: e.id,
168
- source: newNodeMap[e.getSourceNodeId()],
169
- target: newNodeMap[e.getTargetNodeId()],
168
+ const edgeId = e.getId();
169
+ newEdgeMap.set(edgeId, {
170
+ type: 'spline-curve',
171
+ id: edgeId,
172
+ source: newNodeMap.get(e.getSourceNodeId()),
173
+ target: newNodeMap.get(e.getTargetNodeId()),
170
174
  virtualEdgeId: pairId,
171
175
  isVirtual: true,
172
176
  index: idx
173
- };
177
+ });
174
178
  });
175
179
  });
176
180
 
@@ -180,8 +184,8 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
180
184
  this._d3Graph.edges = newD3Edges;
181
185
  }
182
186
 
183
- getNodePosition = (node: Node): [number, number] => {
184
- const d3Node = this._nodeMap[node.id];
187
+ getNodePosition = (node: NodeInterface): [number, number] => {
188
+ const d3Node = this._nodeMap.get(node.getId());
185
189
  if (d3Node) {
186
190
  return [d3Node.x, d3Node.y];
187
191
  }
@@ -189,19 +193,22 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
189
193
  return [0, 0];
190
194
  };
191
195
 
192
- getEdgePosition = (edge) => {
193
- const d3Edge = this._edgeMap[edge.id];
196
+ getEdgePosition = (edge: EdgeInterface) => {
197
+ const d3Edge = this._edgeMap.get(edge.getId());
194
198
  if (d3Edge) {
195
199
  if (!d3Edge.isVirtual) {
196
200
  return {
197
- type: EDGE_TYPE.LINE,
201
+ type: 'line',
198
202
  sourcePosition: [d3Edge.source.x, d3Edge.source.y],
199
203
  targetPosition: [d3Edge.target.x, d3Edge.target.y],
200
204
  controlPoints: []
201
205
  };
202
206
  }
203
207
  // else, check the referenced virtual edge
204
- const virtualEdge = this._edgeMap[d3Edge.virtualEdgeId];
208
+ const virtualEdge = this._edgeMap.get(d3Edge.virtualEdgeId);
209
+ if (!virtualEdge) {
210
+ return null;
211
+ }
205
212
  const edgeCount = virtualEdge.edgeCount;
206
213
  // get the position of source and target nodes
207
214
  const sourcePosition = [virtualEdge.source.x, virtualEdge.source.y];
@@ -222,7 +229,7 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
222
229
  (symmetricShape ? Math.floor(index / 2 + 1) : Math.ceil(index / 2));
223
230
  const controlPoint = computeControlPoint(sourcePosition, targetPosition, direction, offset);
224
231
  return {
225
- type: EDGE_TYPE.SPLINE_CURVE,
232
+ type: 'spline-curve',
226
233
  sourcePosition,
227
234
  targetPosition,
228
235
  controlPoints: [controlPoint]
@@ -230,20 +237,28 @@ export class ForceMultiGraphLayout extends GraphLayout<ForceMultiGraphLayoutOpti
230
237
  }
231
238
  // default value
232
239
  return {
233
- type: EDGE_TYPE.LINE,
240
+ type: 'line',
234
241
  sourcePosition: [0, 0],
235
242
  targetPosition: [0, 0],
236
243
  controlPoints: []
237
244
  };
238
245
  };
239
246
 
240
- lockNodePosition = (node, x, y) => {
241
- const d3Node = this._nodeMap[node.id];
247
+ lockNodePosition = (node: NodeInterface, x: number, y: number) => {
248
+ const d3Node = this._nodeMap.get(node.getId());
249
+ if (!d3Node) {
250
+ return;
251
+ }
242
252
  d3Node.x = x;
243
253
  d3Node.y = y;
244
254
  this._onLayoutChange();
245
255
  this._onLayoutDone();
246
256
  };
257
+
258
+ protected override _updateBounds(): void {
259
+ const positions = Array.from(this._nodeMap.values(), (node) => this._normalizePosition(node));
260
+ this._bounds = this._calculateBounds(positions);
261
+ }
247
262
  }
248
263
 
249
264
  /**
@@ -2,54 +2,47 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {GraphLayout, GraphLayoutOptions} from '../../core/graph-layout';
6
- import {Node} from '../../graph/node';
7
- import {EDGE_TYPE} from '../../core/constants';
8
- import {Graph} from '../../graph/graph';
5
+ import {GraphLayout, GraphLayoutProps} from '../../core/graph-layout';
6
+ import type {Graph, NodeInterface, EdgeInterface} from '../../graph/graph';
9
7
 
10
- export type HivePlotLayoutOptions = GraphLayoutOptions & {
8
+ export type HivePlotLayoutProps = GraphLayoutProps & {
11
9
  innerRadius?: number;
12
10
  outerRadius?: number;
13
- getNodeAxis?: (node: Node) => any;
11
+ getNodeAxis?: (node: NodeInterface) => any;
14
12
  };
15
13
 
16
- export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
17
- static defaultOptions = {
14
+ export class HivePlotLayout extends GraphLayout<HivePlotLayoutProps> {
15
+ static defaultProps = {
16
+ ...GraphLayout.defaultProps,
18
17
  innerRadius: 100,
19
18
  outerRadius: 500,
20
- getNodeAxis: (node: Node) => node.getPropertyValue('group')
21
- } as const satisfies Readonly<Required<HivePlotLayoutOptions>>;
19
+ getNodeAxis: (node: NodeInterface) => node.getPropertyValue('group')
20
+ } as const satisfies Readonly<Required<HivePlotLayoutProps>>;
22
21
 
23
22
  _name = 'HivePlot';
24
- _graph: Graph;
25
- _totalAxis: number;
26
- _axis: Record<string, any>;
27
- _nodeMap = {};
28
- _nodePositionMap = {};
29
-
30
- constructor(options: HivePlotLayoutOptions = {}) {
31
- super(options);
32
- this._options = {
33
- ...HivePlotLayout.defaultOptions,
34
- ...options
35
- };
23
+ _graph: Graph | null = null;
24
+ _totalAxis: number = 0;
25
+ _axis: Record<string, NodeInterface[]> = {};
26
+ _nodeMap = new Map<string | number, NodeInterface>();
27
+ _nodePositionMap = new Map<string | number, [number, number]>();
28
+
29
+ constructor(props: HivePlotLayoutProps = {}) {
30
+ super(props, HivePlotLayout.defaultProps);
36
31
  }
37
32
 
38
33
  initializeGraph(graph: Graph) {
39
34
  this.updateGraph(graph);
40
35
  }
41
36
 
42
- updateGraph(graph) {
43
- const {getNodeAxis, innerRadius, outerRadius} = this._options;
37
+ updateGraph(graph: Graph) {
38
+ const {getNodeAxis, innerRadius, outerRadius} = this.props;
44
39
  this._graph = graph;
45
- this._nodeMap = graph.getNodes().reduce((res, node) => {
46
- res[node.getId()] = node;
47
- return res;
48
- }, {});
40
+ const nodes = Array.from(graph.getNodes());
41
+ this._nodeMap = new Map(nodes.map((node) => [node.getId(), node]));
49
42
 
50
43
  // bucket nodes into few axis
51
44
 
52
- this._axis = graph.getNodes().reduce((res, node) => {
45
+ this._axis = nodes.reduce((res, node) => {
53
46
  const axis = getNodeAxis(node);
54
47
  if (!res[axis]) {
55
48
  res[axis] = [];
@@ -78,7 +71,8 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
78
71
  const angleInterval = 360 / Object.keys(this._axis).length;
79
72
 
80
73
  // calculate positions
81
- this._nodePositionMap = Object.keys(this._axis).reduce((res, axis, axisIdx) => {
74
+ this._nodePositionMap = new Map();
75
+ Object.keys(this._axis).forEach((axis, axisIdx) => {
82
76
  const axisAngle = angleInterval * axisIdx;
83
77
  const bucketedNodes = this._axis[axis];
84
78
  const interval = (outerRadius - innerRadius) / bucketedNodes.length;
@@ -87,36 +81,46 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
87
81
  const radius = innerRadius + idx * interval;
88
82
  const x = Math.cos((axisAngle / 180) * Math.PI) * radius + center[0];
89
83
  const y = Math.sin((axisAngle / 180) * Math.PI) * radius + center[1];
90
- res[node.getId()] = [x, y];
84
+ this._nodePositionMap.set(node.getId(), [x, y]);
91
85
  });
92
- return res;
93
- }, {});
86
+ });
94
87
  }
95
88
 
96
89
  start() {
90
+ this._onLayoutStart();
97
91
  this._onLayoutChange();
98
92
  this._onLayoutDone();
99
93
  }
100
94
 
101
- getNodePosition = (node) => this._nodePositionMap[node.getId()];
95
+ stop() {}
96
+
97
+ update() {}
102
98
 
103
- getEdgePosition = (edge) => {
104
- const {getNodeAxis} = this._options;
99
+ resume() {}
100
+
101
+ getNodePosition = (node: NodeInterface) => this._nodePositionMap.get(node.getId());
102
+
103
+ getEdgePosition = (edge: EdgeInterface) => {
104
+ const {getNodeAxis} = this.props;
105
105
  const sourceNodeId = edge.getSourceNodeId();
106
106
  const targetNodeId = edge.getTargetNodeId();
107
107
 
108
- const sourcePosition = this._nodePositionMap[sourceNodeId];
109
- const targetPosition = this._nodePositionMap[targetNodeId];
108
+ const sourcePosition = this._nodePositionMap.get(sourceNodeId);
109
+ const targetPosition = this._nodePositionMap.get(targetNodeId);
110
+
111
+ if (!sourcePosition || !targetPosition) {
112
+ return null;
113
+ }
110
114
 
111
- const sourceNode = this._nodeMap[sourceNodeId];
112
- const targetNode = this._nodeMap[targetNodeId];
115
+ const sourceNode = this._nodeMap.get(sourceNodeId);
116
+ const targetNode = this._nodeMap.get(targetNodeId);
113
117
 
114
- const sourceNodeAxis = getNodeAxis(sourceNode);
115
- const targetNodeAxis = getNodeAxis(targetNode);
118
+ const sourceNodeAxis = sourceNode ? getNodeAxis(sourceNode) : null;
119
+ const targetNodeAxis = targetNode ? getNodeAxis(targetNode) : null;
116
120
 
117
- if (sourceNodeAxis === targetNodeAxis) {
121
+ if (sourceNodeAxis !== null && sourceNodeAxis === targetNodeAxis) {
118
122
  return {
119
- type: EDGE_TYPE.LINE,
123
+ type: 'line',
120
124
  sourcePosition,
121
125
  targetPosition,
122
126
  controlPoints: []
@@ -125,25 +129,32 @@ export class HivePlotLayout extends GraphLayout<HivePlotLayoutOptions> {
125
129
 
126
130
  const controlPoint = computeControlPoint({
127
131
  sourcePosition,
128
- sourceNodeAxis,
132
+ sourceNodeAxis: sourceNodeAxis ?? 0,
129
133
  targetPosition,
130
- targetNodeAxis,
134
+ targetNodeAxis: targetNodeAxis ?? 0,
131
135
  totalAxis: this._totalAxis
132
136
  });
133
137
 
134
138
  return {
135
- type: EDGE_TYPE.SPLINE_CURVE,
139
+ type: 'spline-curve',
136
140
  sourcePosition,
137
141
  targetPosition,
138
142
  controlPoints: [controlPoint]
139
143
  };
140
144
  };
141
145
 
142
- lockNodePosition = (node, x, y) => {
143
- this._nodePositionMap[node.id] = [x, y];
146
+ lockNodePosition = (node: NodeInterface, x: number, y: number) => {
147
+ this._nodePositionMap.set(node.getId(), [x, y]);
144
148
  this._onLayoutChange();
145
149
  this._onLayoutDone();
146
150
  };
151
+
152
+ protected override _updateBounds(): void {
153
+ const positions = Array.from(this._nodePositionMap.values(), (position) =>
154
+ this._normalizePosition(position)
155
+ );
156
+ this._bounds = this._calculateBounds(positions);
157
+ }
147
158
  }
148
159
 
149
160
  function computeControlPoint({