@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,37 +2,74 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {Graph} from '../graph/graph';
6
- import type {Node} from '../graph/node';
7
- import type {Edge} from '../graph/edge';
5
+ import type {Bounds2D} from '@math.gl/types';
6
+
7
+ import type {Graph, NodeInterface, EdgeInterface} from '../graph/graph';
8
8
 
9
9
  import isEqual from 'lodash.isequal';
10
- import {EDGE_TYPE} from './constants';
10
+ import {log} from '../utils/log';
11
11
 
12
12
  // the status of the layout
13
- export type GraphLayoutState = 'INIT' | 'START' | 'CALCULATING' | 'DONE' | 'ERROR';
13
+ export type GraphLayoutState = 'init' | 'start' | 'calculating' | 'done' | 'error';
14
+
15
+ export type GraphLayoutEventDetail = {
16
+ bounds: Bounds2D | null;
17
+ };
18
+
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
+
26
+
27
+ export abstract class GraphLayout<
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
+ }
14
40
 
15
- export type GraphLayoutOptions = {};
41
+ /** Extra configuration props of the layout. */
42
+ protected props: Required<PropsT>;
16
43
 
17
- /** All the layout classes are extended from this base layout class. */
18
- export class GraphLayout<
19
- OptionsT extends GraphLayoutOptions = GraphLayoutOptions
20
- > extends EventTarget {
21
- /** Name of the layout. */
22
- protected readonly _name: string = 'GraphLayout';
23
- /** Extra configuration options of the layout. */
24
- protected _options: OptionsT;
44
+ /**
45
+ * Last computed layout bounds in local layout coordinates.
46
+ *
47
+ * Subclasses should update this value by overriding {@link _updateBounds}
48
+ * so it reflects the latest geometry before layout lifecycle events fire.
49
+ */
50
+ protected _bounds: Bounds2D | null = null;
25
51
 
26
52
  public version = 0;
27
- public state: GraphLayoutState = 'INIT';
53
+ public state: GraphLayoutState = 'init';
28
54
 
29
55
  /**
30
56
  * Constructor of GraphLayout
31
- * @param options extra configuration options of the layout
57
+ * @param props extra configuration props of the layout
32
58
  */
33
- constructor(options: OptionsT) {
34
- super();
35
- 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};
36
73
  }
37
74
 
38
75
  /**
@@ -44,31 +81,20 @@ export class GraphLayout<
44
81
  if (!layout || !(layout instanceof GraphLayout)) {
45
82
  return false;
46
83
  }
47
- return this._name === layout._name && isEqual(this._options, layout._options);
84
+ return this instanceof layout.constructor && isEqual(this.props, layout.props);
48
85
  }
49
86
 
50
- /** virtual functions: will be implemented in the child class */
87
+ // Accessors
51
88
 
52
- /** first time to pass the graph data into this layout */
53
- initializeGraph(graph: Graph) {}
54
- /** update the existing graph */
55
- updateGraph(graph: Graph) {}
56
- /** start the layout calculation */
57
- start() {}
58
- /** update the layout calculation */
59
- update() {}
60
- /** resume the layout calculation */
61
- resume() {}
62
- /** stop the layout calculation */
63
- stop() {}
64
89
  /** access the position of the node in the layout */
65
- getNodePosition(node: Node): [number, number] {
90
+ getNodePosition(node: NodeInterface): [number, number] {
66
91
  return [0, 0];
67
92
  }
93
+
68
94
  /** access the layout information of the edge */
69
- getEdgePosition(edge: Edge) {
95
+ getEdgePosition(edge: EdgeInterface) {
70
96
  return {
71
- type: EDGE_TYPE.LINE,
97
+ type: 'line',
72
98
  sourcePosition: [0, 0],
73
99
  targetPosition: [0, 0],
74
100
  controlPoints: []
@@ -81,66 +107,168 @@ export class GraphLayout<
81
107
  * @param x x coordinate
82
108
  * @param y y coordinate
83
109
  */
84
- lockNodePosition(node: Node, x: number, y: number) {}
110
+ lockNodePosition(node: NodeInterface, x: number, y: number) {}
85
111
 
86
112
  /**
87
113
  * Unlock the node, the node will be able to move freely.
88
114
  * @param {Object} node Node to be unlocked
89
115
  */
90
- unlockNodePosition(node: Node) {}
116
+ unlockNodePosition(node: NodeInterface) {}
117
+
118
+ /** Returns the last computed layout bounds, if available. */
119
+ getBounds(): Bounds2D | null {
120
+ return this._bounds;
121
+ }
122
+
123
+ /** virtual functions: will be implemented in the child class */
124
+
125
+ /** first time to pass the graph data into this layout */
126
+ abstract initializeGraph(graph: Graph): void;
127
+ /** update the existing graph */
128
+ abstract updateGraph(graph: Graph): void;
129
+ /** start the layout calculation */
130
+ abstract start();
131
+ /** update the layout calculation */
132
+ abstract update();
133
+ /** resume the layout calculation */
134
+ abstract resume();
135
+ /** stop the layout calculation */
136
+ abstract stop();
137
+
91
138
 
92
139
  // INTERNAL METHODS
93
140
 
94
- protected _updateState(state) {
141
+ /** Hook for subclasses to update bounds prior to emitting events. */
142
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
143
+ protected _updateBounds(): void {}
144
+
145
+ /**
146
+ * Utility for subclasses to derive layout bounds from an iterable of [x, y] positions.
147
+ * @param positions Iterable of node positions.
148
+ * @returns Layout bounds for the supplied positions or `null` if none are finite.
149
+ */
150
+ protected _calculateBounds(
151
+ positions: Iterable<Readonly<[number, number]> | null | undefined>
152
+ ): Bounds2D | null {
153
+ let minX = Number.POSITIVE_INFINITY;
154
+ let maxX = Number.NEGATIVE_INFINITY;
155
+ let minY = Number.POSITIVE_INFINITY;
156
+ let maxY = Number.NEGATIVE_INFINITY;
157
+
158
+ for (const position of positions) {
159
+ if (!position) {
160
+ // eslint-disable-next-line no-continue
161
+ continue;
162
+ }
163
+ const [x, y] = position;
164
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
165
+ // eslint-disable-next-line no-continue
166
+ continue;
167
+ }
168
+
169
+ minX = Math.min(minX, x);
170
+ maxX = Math.max(maxX, x);
171
+ minY = Math.min(minY, y);
172
+ maxY = Math.max(maxY, y);
173
+ }
174
+
175
+ if (minX === Number.POSITIVE_INFINITY) {
176
+ return null;
177
+ }
178
+
179
+ return [
180
+ [minX, minY],
181
+ [maxX, maxY]
182
+ ];
183
+ }
184
+
185
+ /**
186
+ * Attempt to coerce an arbitrary value into a finite 2D point.
187
+ * @param value Candidate value that may represent a position.
188
+ * @returns Finite [x, y] tuple or null if the value cannot be interpreted.
189
+ */
190
+ protected _normalizePosition(value: unknown): [number, number] | null {
191
+ if (Array.isArray(value) && value.length >= 2) {
192
+ const [x, y] = value as [unknown, unknown];
193
+ if (this._isFiniteNumber(x) && this._isFiniteNumber(y)) {
194
+ return [x, y];
195
+ }
196
+ return null;
197
+ }
198
+
199
+ if (value && typeof value === 'object') {
200
+ const {x, y} = value as {x?: unknown; y?: unknown};
201
+ if (this._isFiniteNumber(x) && this._isFiniteNumber(y)) {
202
+ return [x, y];
203
+ }
204
+ }
205
+
206
+ return null;
207
+ }
208
+
209
+ private _isFiniteNumber(value: unknown): value is number {
210
+ return typeof value === 'number' && Number.isFinite(value);
211
+ }
212
+
213
+ protected _updateState(state: GraphLayoutState) {
95
214
  this.state = state;
96
215
  this.version += 1;
97
216
  }
98
217
 
99
218
  /** @fires GraphLayout#onLayoutStart */
100
219
  protected _onLayoutStart = (): void => {
101
- this._updateState('CALCULATING');
220
+ log.log(0, `GraphLayout(${this}): start`)();
221
+ this._updateBounds();
222
+ this._updateState('calculating');
102
223
 
103
224
  /**
104
225
  * Layout calculation start.
105
226
  * @event GraphLayout#onLayoutChange
106
227
  * @type {CustomEvent}
107
228
  */
108
- this.dispatchEvent(new CustomEvent('onLayoutStart'));
229
+ const detail: GraphLayoutEventDetail = {bounds: this._bounds};
230
+ this.props.onLayoutStart?.(detail);
109
231
  };
110
232
 
111
233
  /** @fires GraphLayout#onLayoutChange */
112
234
  protected _onLayoutChange = (): void => {
113
- this._updateState('CALCULATING');
235
+ log.log(0, `GraphLayout(${this}): update`)();
236
+ this._updateBounds();
237
+ this._updateState('calculating');
114
238
 
115
239
  /**
116
240
  * Layout calculation iteration.
117
241
  * @event GraphLayout#onLayoutChange
118
242
  * @type {CustomEvent}
119
243
  */
120
- this.dispatchEvent(new CustomEvent('onLayoutChange'));
244
+ const detail: GraphLayoutEventDetail = {bounds: this._bounds};
245
+ this.props.onLayoutChange?.(detail);
121
246
  };
122
247
 
123
248
  /** @fires GraphLayout#onLayoutDone */
124
249
  protected _onLayoutDone = (): void => {
125
- this._updateState('DONE');
250
+ log.log(0, `GraphLayout(${this}): end`)();
251
+ this._updateBounds();
252
+ this._updateState('done');
126
253
 
127
254
  /**
128
255
  * Layout calculation is done.
129
256
  * @event GraphLayout#onLayoutDone
130
257
  * @type {CustomEvent}
131
258
  */
132
- this.dispatchEvent(new CustomEvent('onLayoutDone'));
259
+ const detail: GraphLayoutEventDetail = {bounds: this._bounds};
260
+ this.props.onLayoutDone?.(detail);
133
261
  };
134
262
 
135
263
  /** @fires GraphLayout#onLayoutError */
136
264
  protected _onLayoutError = (): void => {
137
- this._updateState('ERROR');
265
+ this._updateState('error');
138
266
 
139
267
  /**
140
268
  * Layout calculation went wrong.
141
269
  * @event GraphLayout#onLayoutError
142
270
  * @type {CustomEvent}
143
271
  */
144
- this.dispatchEvent(new CustomEvent('onLayoutError'));
272
+ this.props.onLayoutError?.();
145
273
  };
146
274
  }
@@ -2,33 +2,48 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {EDGE_STATE, NODE_STATE, ValueOf} from './constants';
6
- import {Edge} from '../graph/edge';
7
- import {Node} from '../graph/node';
5
+ import type {EdgeState, NodeState} from './constants';
8
6
  import {GraphEngine} from './graph-engine';
7
+ import type {EdgeInterface, NodeInterface} from '../graph/graph';
8
+ import {log} from '../utils/log';
9
+ import {
10
+ resolveChainInteractionSource,
11
+ type ChainInteractionSource
12
+ } from '../utils/collapsed-chains';
9
13
 
10
- const NODE_TO_EDGE_STATE_MAP: Record<ValueOf<typeof NODE_STATE>, ValueOf<typeof EDGE_STATE>> = {
11
- [NODE_STATE.DEFAULT]: EDGE_STATE.DEFAULT,
12
- [NODE_STATE.HOVER]: EDGE_STATE.HOVER,
13
- [NODE_STATE.DRAGGING]: EDGE_STATE.DRAGGING,
14
- [NODE_STATE.SELECTED]: EDGE_STATE.SELECTED
14
+ export {resolveChainInteractionSource};
15
+ export type {ChainInteractionSource};
16
+
17
+ export function shouldToggleCollapsedChain(
18
+ isCollapsed: boolean,
19
+ source: ChainInteractionSource
20
+ ): boolean {
21
+ if (isCollapsed) {
22
+ return true;
23
+ }
24
+ return source === 'expanded-marker' || source === 'expanded-outline';
25
+ }
26
+
27
+ const NODE_TO_EDGE_STATE_MAP: Record<NodeState, EdgeState> = {
28
+ default: 'default',
29
+ hover: 'hover',
30
+ dragging: 'dragging',
31
+ selected: 'selected'
15
32
  };
16
33
 
17
- function shouldEdgeBeSelected(edge: Edge): boolean {
34
+ function shouldEdgeBeSelected(edge: EdgeInterface): boolean {
18
35
  return edge
19
36
  .getConnectedNodes()
20
- .some(
21
- (node) => node.getState() === NODE_STATE.SELECTED && node.shouldHighlightConnectedEdges()
22
- );
37
+ .some((node) => node.getState() === 'selected' && node.shouldHighlightConnectedEdges());
23
38
  }
24
39
 
25
- function setNodeState(node: Node, state: ValueOf<typeof NODE_STATE>) {
40
+ function setNodeState(node: NodeInterface, state: NodeState) {
26
41
  node.setState(state);
27
42
  if (node.shouldHighlightConnectedEdges()) {
28
43
  node.getConnectedEdges().forEach((edge) => {
29
44
  let newEdgeState = NODE_TO_EDGE_STATE_MAP[state];
30
45
  if (shouldEdgeBeSelected(edge)) {
31
- newEdgeState = EDGE_STATE.SELECTED;
46
+ newEdgeState = 'selected';
32
47
  }
33
48
  edge.setState(newEdgeState);
34
49
  });
@@ -39,7 +54,7 @@ interface EventMap {
39
54
  onClick?: (info: unknown, event: Event) => void;
40
55
  onHover?: (info: unknown) => void;
41
56
  onMouseEnter?: (info: unknown) => void;
42
- onMouseLeave?: (node: Node) => void;
57
+ onMouseLeave?: (node: NodeInterface) => void;
43
58
  onDragStart?: (info: unknown) => void;
44
59
  onDrag?: (info: unknown) => void;
45
60
  onDragEnd?: (info: unknown) => void;
@@ -56,8 +71,8 @@ export interface InteractionManagerProps {
56
71
  export class InteractionManager {
57
72
  public notifyCallback: Function;
58
73
  private _lastInteraction = 0;
59
- private _lastHoveredNode: Node | null = null;
60
- private _lastSelectedNode: Node | null = null;
74
+ private _lastHoveredNode: NodeInterface | null = null;
75
+ private _lastSelectedNode: NodeInterface | null = null;
61
76
 
62
77
  public nodeEvents: EventMap = undefined!;
63
78
  public edgeEvents: EventMap = undefined!;
@@ -93,6 +108,7 @@ export class InteractionManager {
93
108
  return this._lastInteraction;
94
109
  }
95
110
 
111
+ // eslint-disable-next-line max-statements, complexity
96
112
  onClick(info, event): void {
97
113
  const {object} = info;
98
114
 
@@ -101,12 +117,55 @@ export class InteractionManager {
101
117
  }
102
118
 
103
119
  if (object.isNode) {
104
- if ((object as Node).isSelectable()) {
120
+ const node = object as NodeInterface;
121
+ const chainId = node.getPropertyValue('collapsedChainId');
122
+ const collapsedNodeIds = node.getPropertyValue('collapsedNodeIds');
123
+ const representativeId = node.getPropertyValue('collapsedChainRepresentativeId');
124
+ const isCollapsed = Boolean(node.getPropertyValue('isCollapsedChain'));
125
+ const hasChainMetadata =
126
+ chainId !== null &&
127
+ chainId !== undefined &&
128
+ Array.isArray(collapsedNodeIds) &&
129
+ collapsedNodeIds.length > 1 &&
130
+ representativeId !== null &&
131
+ representativeId !== undefined;
132
+ const isRepresentative = hasChainMetadata && representativeId === node.getId();
133
+
134
+ if (hasChainMetadata && isRepresentative) {
135
+ const layout: any = this.engine?.props?.layout;
136
+ if (layout && typeof layout.toggleCollapsedChain === 'function') {
137
+ const interactionSource = resolveChainInteractionSource(info ?? null);
138
+
139
+ // eslint-disable-next-line max-depth
140
+ if (shouldToggleCollapsedChain(isCollapsed, interactionSource)) {
141
+ const action = isCollapsed ? 'expand' : 'collapse';
142
+ const chainIdStr = String(chainId);
143
+ log.log(
144
+ 0,
145
+ `InteractionManager: ${action} chain ${chainIdStr} via ${interactionSource}`
146
+ );
147
+ // eslint-disable-next-line no-console
148
+ console.log(
149
+ `InteractionManager: ${action} chain ${chainIdStr} via ${interactionSource}`
150
+ );
151
+ layout.toggleCollapsedChain(chainIdStr);
152
+ this._lastInteraction = Date.now();
153
+ this.notifyCallback();
154
+ // eslint-disable-next-line max-depth
155
+ if (this.nodeEvents.onClick) {
156
+ this.nodeEvents.onClick(info, event);
157
+ }
158
+ return;
159
+ }
160
+ }
161
+ }
162
+
163
+ if (node.isSelectable()) {
105
164
  if (this._lastSelectedNode) {
106
- setNodeState(this._lastSelectedNode, NODE_STATE.DEFAULT);
165
+ setNodeState(this._lastSelectedNode, 'default');
107
166
  }
108
- setNodeState(object, NODE_STATE.SELECTED);
109
- this._lastSelectedNode = object as Node;
167
+ setNodeState(node, 'selected');
168
+ this._lastSelectedNode = node;
110
169
  this._lastInteraction = Date.now();
111
170
  this.notifyCallback();
112
171
  }
@@ -116,7 +175,7 @@ export class InteractionManager {
116
175
  }
117
176
  }
118
177
 
119
- if (object.isEdge && this.edgeEvents.onClick) {
178
+ if ((object as EdgeInterface).isEdge && this.edgeEvents.onClick) {
120
179
  this.edgeEvents.onClick(info, event);
121
180
  }
122
181
  }
@@ -124,12 +183,11 @@ export class InteractionManager {
124
183
  _mouseLeaveNode(): void {
125
184
  const lastHoveredNode = this._lastHoveredNode;
126
185
 
127
- if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === NODE_STATE.SELECTED)) {
186
+ if (!(lastHoveredNode.isSelectable() && lastHoveredNode.getState() === 'selected')) {
128
187
  // reset the last hovered node's state
129
- const newState =
130
- this._lastSelectedNode !== null && this._lastSelectedNode.id === this._lastHoveredNode?.id
131
- ? NODE_STATE.SELECTED
132
- : NODE_STATE.DEFAULT;
188
+ const lastSelectedId = this._lastSelectedNode?.getId();
189
+ const lastHoveredId = this._lastHoveredNode?.getId();
190
+ const newState = lastSelectedId !== undefined && lastSelectedId === lastHoveredId ? 'selected' : 'default';
133
191
  setNodeState(lastHoveredNode, newState);
134
192
  }
135
193
  // trigger the callback if exists
@@ -140,7 +198,7 @@ export class InteractionManager {
140
198
 
141
199
  _mouseEnterNode(info): void {
142
200
  // set the node's state to hover
143
- setNodeState(info.object as Node, NODE_STATE.HOVER);
201
+ setNodeState(info.object as NodeInterface, 'hover');
144
202
  // trigger the callback if exists
145
203
  if (this.nodeEvents.onMouseEnter) {
146
204
  this.nodeEvents.onMouseEnter(info);
@@ -163,7 +221,9 @@ export class InteractionManager {
163
221
 
164
222
  // hover over on a node
165
223
  if (info.object.isNode) {
166
- 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;
167
227
  // stay in the same node
168
228
  if (isSameNode) {
169
229
  return;
@@ -202,9 +262,9 @@ export class InteractionManager {
202
262
  const bounds = info.layer.context.viewport.getBounds(); // [minX, minY, maxX, maxY]
203
263
  const x = Math.min(Math.max(coordinates[0], bounds[0]), bounds[2]);
204
264
  const y = Math.min(Math.max(coordinates[1], bounds[1]), bounds[3]);
205
- this.engine.lockNodePosition(info.object, x, y);
265
+ this.engine.lockNodePosition(info.object as NodeInterface, x, y);
206
266
 
207
- setNodeState(info.object, NODE_STATE.DRAGGING);
267
+ setNodeState(info.object as NodeInterface, 'dragging');
208
268
  this._lastInteraction = Date.now();
209
269
  this.notifyCallback();
210
270
  if (this.nodeEvents.onDrag) {
@@ -219,7 +279,7 @@ export class InteractionManager {
219
279
  if (this.resumeLayoutAfterDragging) {
220
280
  this.engine.resume();
221
281
  }
222
- setNodeState(info.object, NODE_STATE.DEFAULT);
223
- this.engine.unlockNodePosition(info.object);
282
+ setNodeState(info.object as NodeInterface, 'default');
283
+ this.engine.unlockNodePosition(info.object as NodeInterface);
224
284
  }
225
285
  }