@neo4j-nvl/base 1.2.2 → 2.0.0-1e695738

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 (235) hide show
  1. package/CHANGELOG.md +54 -1
  2. package/README.md +8 -0
  3. package/dist/base.mjs +35891 -2
  4. package/dist/types/index.d.ts +382 -386
  5. package/dist/types/layouts/animatedlayout/AnimatedLayout.d.ts +23 -23
  6. package/dist/types/layouts/animatedlayout/animationUtils.d.ts +3 -3
  7. package/dist/types/layouts/circularLayout/CircularLayout.d.ts +14 -14
  8. package/dist/types/layouts/d3forcelayout/circularLayout.d.ts +4 -4
  9. package/dist/types/layouts/d3forcelayout/constants.d.ts +3 -4
  10. package/dist/types/layouts/d3forcelayout/d3ForceLayout.d.ts +31 -31
  11. package/dist/types/layouts/d3forcelayout/types.d.ts +7 -7
  12. package/dist/types/layouts/forcedirectedlayout/PhysLayout.d.ts +275 -0
  13. package/dist/types/layouts/forcedirectedlayout/clustering/ClusterByMerger.d.ts +62 -0
  14. package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.d.ts +56 -0
  15. package/dist/types/layouts/forcedirectedlayout/clustering/clustering-utils.d.ts +143 -0
  16. package/dist/types/layouts/forcedirectedlayout/clustering/types.d.ts +59 -0
  17. package/dist/types/layouts/forcedirectedlayout/glwrapper.d.ts +4 -0
  18. package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-fragment.d.ts +2 -0
  19. package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-repulsive-fragment.d.ts +2 -0
  20. package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-update-fragment.d.ts +2 -0
  21. package/dist/types/layouts/forcedirectedlayout/shaders/sim-vertex.d.ts +2 -0
  22. package/dist/types/layouts/freeLayout/FreeLayout.d.ts +23 -25
  23. package/dist/types/layouts/gridLayout/GridLayout.d.ts +26 -30
  24. package/dist/types/layouts/hierarchicallayout/HierarchicalLayout.d.ts +28 -23
  25. package/dist/types/layouts/hierarchicallayout/constants.d.ts +2 -2
  26. package/dist/types/modules/CallbackHelper.d.ts +23 -23
  27. package/dist/types/modules/ExternalCallbackHandler.d.ts +33 -39
  28. package/dist/types/modules/NvlController.d.ts +212 -129
  29. package/dist/types/modules/Shader.d.ts +17 -17
  30. package/dist/types/modules/ZoomTransitionHandler.d.ts +24 -24
  31. package/dist/types/modules/dataset.d.ts +26 -24
  32. package/dist/types/modules/logging.d.ts +4 -4
  33. package/dist/types/modules/state/constants.d.ts +2 -2
  34. package/dist/types/modules/state/state.d.ts +2 -2
  35. package/dist/types/modules/state/types.d.ts +338 -228
  36. package/dist/types/modules/state/utils.d.ts +36 -36
  37. package/dist/types/renderers/ClusterOverlay.d.ts +73 -0
  38. package/dist/types/renderers/domrenderer/BaseRenderer.d.ts +69 -69
  39. package/dist/types/renderers/domrenderer/canvasrenderer/Animation.d.ts +57 -57
  40. package/dist/types/renderers/domrenderer/canvasrenderer/AnimationHandler.d.ts +65 -65
  41. package/dist/types/renderers/domrenderer/canvasrenderer/CanvasRenderer.d.ts +84 -85
  42. package/dist/types/renderers/domrenderer/canvasrenderer/arrowDrawing.d.ts +31 -31
  43. package/dist/types/renderers/domrenderer/canvasrenderer/nodeDrawing.d.ts +32 -32
  44. package/dist/types/renderers/domrenderer/shared/ImageCache.d.ts +16 -15
  45. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundle.d.ts +89 -89
  46. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundler.d.ts +42 -42
  47. package/dist/types/renderers/domrenderer/shared/arrows/arrows.d.ts +49 -49
  48. package/dist/types/renderers/domrenderer/shared/arrows/constants.d.ts +4 -4
  49. package/dist/types/renderers/domrenderer/shared/nodes/nodes.d.ts +21 -21
  50. package/dist/types/renderers/domrenderer/shared/types.d.ts +29 -30
  51. package/dist/types/renderers/domrenderer/shared/util.d.ts +4 -4
  52. package/dist/types/renderers/domrenderer/shared/vectorUtils.d.ts +10 -10
  53. package/dist/types/renderers/domrenderer/shared/wordwrap.d.ts +10 -10
  54. package/dist/types/renderers/domrenderer/svgrenderer/SvgRenderer.d.ts +18 -19
  55. package/dist/types/renderers/domrenderer/svgrenderer/arrowDrawing.d.ts +15 -15
  56. package/dist/types/renderers/domrenderer/svgrenderer/nodeDrawing.d.ts +4 -4
  57. package/dist/types/renderers/domrenderer/svgrenderer/svgUtils.d.ts +21 -21
  58. package/dist/types/renderers/webglrenderer/Controller.d.ts +83 -61
  59. package/dist/types/renderers/webglrenderer/IconLayerRegistry.d.ts +14 -0
  60. package/dist/types/renderers/webglrenderer/Renderer.d.ts +91 -51
  61. package/dist/types/renderers/webglrenderer/node-animation-fragment.d.ts +2 -2
  62. package/dist/types/renderers/webglrenderer/node-animation-vertex.d.ts +2 -2
  63. package/dist/types/renderers/webglrenderer/node-fragment-point.d.ts +2 -2
  64. package/dist/types/renderers/webglrenderer/node-vertex-point.d.ts +2 -2
  65. package/dist/types/renderers/webglrenderer/rel-fragment-line.d.ts +2 -2
  66. package/dist/types/renderers/webglrenderer/rel-glsl-utils.d.ts +1 -0
  67. package/dist/types/renderers/webglrenderer/rel-vertex-arrow.d.ts +2 -0
  68. package/dist/types/renderers/webglrenderer/rel-vertex-line.d.ts +2 -2
  69. package/dist/types/renderers/webglrenderer/viewport-box-fragment.d.ts +2 -2
  70. package/dist/types/renderers/webglrenderer/viewport-box-vertex.d.ts +2 -2
  71. package/dist/types/types/graph-element.d.ts +109 -101
  72. package/dist/types/types/nvl-window-functions.d.ts +12 -13
  73. package/dist/types/types/utils.d.ts +1 -1
  74. package/dist/types/utils/ariaUtils.d.ts +2 -2
  75. package/dist/types/utils/canvasManagement.d.ts +8 -2
  76. package/dist/types/utils/circularUtils.d.ts +2 -2
  77. package/dist/types/utils/clusterGeometry.d.ts +14 -0
  78. package/dist/types/utils/clusterHitRegions.d.ts +42 -0
  79. package/dist/types/utils/colorUtils.d.ts +2 -2
  80. package/dist/types/utils/constants.d.ts +12 -6
  81. package/dist/types/utils/errors.d.ts +6 -6
  82. package/dist/types/utils/geometry.d.ts +91 -48
  83. package/dist/types/utils/graphObjectUtils.d.ts +9 -9
  84. package/dist/types/utils/hitTest.d.ts +84 -0
  85. package/dist/types/utils/jsDriverResultTransformer.d.ts +27 -25
  86. package/dist/types/utils/layoutSeeding.d.ts +7 -0
  87. package/dist/types/utils/mouseUtils.d.ts +5 -5
  88. package/dist/types/utils/segmentAnalytics.d.ts +42 -42
  89. package/dist/types/utils/webWorkerUtils.d.ts +2 -2
  90. package/dist/types/utils/zoomFunctions.d.ts +24 -16
  91. package/package.json +15 -15
  92. package/skills/neo4j-nvl-skill/README.md +39 -0
  93. package/skills/neo4j-nvl-skill/SKILL.md +296 -0
  94. package/skills/neo4j-nvl-skill/references/api/base/classes/NVL.md +977 -0
  95. package/skills/neo4j-nvl-skill/references/api/base/functions/getZoomTargetForNodePositions.md +37 -0
  96. package/skills/neo4j-nvl-skill/references/api/base/index.md +71 -0
  97. package/skills/neo4j-nvl-skill/references/api/base/interfaces/CircularOptions.md +11 -0
  98. package/skills/neo4j-nvl-skill/references/api/base/interfaces/ClusteringOptions.md +14 -0
  99. package/skills/neo4j-nvl-skill/references/api/base/interfaces/ExternalCallbacks.md +18 -0
  100. package/skills/neo4j-nvl-skill/references/api/base/interfaces/ForceDirectedOptions.md +12 -0
  101. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HierarchicalOptions.md +13 -0
  102. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetCluster.md +13 -0
  103. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetNode.md +16 -0
  104. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetRelationship.md +15 -0
  105. package/skills/neo4j-nvl-skill/references/api/base/interfaces/Node.md +32 -0
  106. package/skills/neo4j-nvl-skill/references/api/base/interfaces/NvlMouseEvent.md +16 -0
  107. package/skills/neo4j-nvl-skill/references/api/base/interfaces/NvlOptions.md +38 -0
  108. package/skills/neo4j-nvl-skill/references/api/base/interfaces/Point.md +12 -0
  109. package/skills/neo4j-nvl-skill/references/api/base/interfaces/Relationship.md +32 -0
  110. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/CanvasRendererType.md +14 -0
  111. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Cluster.md +20 -0
  112. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ClusterByFn.md +20 -0
  113. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ClusterId.md +10 -0
  114. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/HitTargets.md +22 -0
  115. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/HitTestTarget.md +7 -0
  116. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Layout.md +15 -0
  117. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/LayoutOptions.md +12 -0
  118. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/NodeWithClientPosition.md +18 -0
  119. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/PartialNode.md +17 -0
  120. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/PartialRelationship.md +17 -0
  121. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Renderer.md +9 -0
  122. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/StyledCaption.md +21 -0
  123. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/WebGLRendererType.md +14 -0
  124. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ZoomOptions.md +25 -0
  125. package/skills/neo4j-nvl-skill/references/api/base/variables/CircularLayoutType.md +11 -0
  126. package/skills/neo4j-nvl-skill/references/api/base/variables/ForceDirectedLayoutType.md +9 -0
  127. package/skills/neo4j-nvl-skill/references/api/base/variables/FreeLayoutType.md +9 -0
  128. package/skills/neo4j-nvl-skill/references/api/base/variables/GridLayoutType.md +9 -0
  129. package/skills/neo4j-nvl-skill/references/api/base/variables/HierarchicalLayoutType.md +9 -0
  130. package/skills/neo4j-nvl-skill/references/api/base/variables/d3ForceLayoutType.md +9 -0
  131. package/skills/neo4j-nvl-skill/references/api/base/variables/nvlResultTransformer.md +38 -0
  132. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/BoxSelectInteraction.md +163 -0
  133. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/ClickInteraction.md +163 -0
  134. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/DragNodeInteraction.md +164 -0
  135. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/HoverInteraction.md +160 -0
  136. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/KeyboardInteraction.md +185 -0
  137. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/LassoInteraction.md +163 -0
  138. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/PanInteraction.md +196 -0
  139. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/ZoomInteraction.md +164 -0
  140. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/index.md +37 -0
  141. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/BoxSelectInteractionCallbacks.md +19 -0
  142. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/BoxSelectInteractionOptions.md +17 -0
  143. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ClickInteractionCallbacks.md +39 -0
  144. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ClickInteractionOptions.md +17 -0
  145. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/DragNodeInteractionCallbacks.md +21 -0
  146. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/DrawInteractionOptions.md +22 -0
  147. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/HoverInteractionCallbacks.md +17 -0
  148. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/HoverInteractionOptions.md +17 -0
  149. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/KeyboardInteractionCallbacks.md +35 -0
  150. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/KeyboardInteractionOptions.md +55 -0
  151. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/LassoInteractionCallbacks.md +19 -0
  152. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/LassoInteractionOptions.md +17 -0
  153. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/PanInteractionCallbacks.md +17 -0
  154. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/PanInteractionOptions.md +19 -0
  155. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ZoomInteractionCallbacks.md +17 -0
  156. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ZoomInteractionOptions.md +17 -0
  157. package/skills/neo4j-nvl-skill/references/api/react/functions/StaticPictureWrapper.md +35 -0
  158. package/skills/neo4j-nvl-skill/references/api/react/index.md +34 -0
  159. package/skills/neo4j-nvl-skill/references/api/react/interfaces/BasicReactWrapperProps.md +24 -0
  160. package/skills/neo4j-nvl-skill/references/api/react/interfaces/InteractiveNvlWrapperProps.md +27 -0
  161. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/InteractionOptions.md +10 -0
  162. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/KeyboardEvent.md +7 -0
  163. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/KeyboardEventCallbacks.md +10 -0
  164. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/MouseEvent.md +10 -0
  165. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/MouseEventCallbacks.md +10 -0
  166. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/StaticPictureWrapperProps.md +27 -0
  167. package/skills/neo4j-nvl-skill/references/api/react/variables/BasicNvlWrapper.md +50 -0
  168. package/skills/neo4j-nvl-skill/references/api/react/variables/InteractiveNvlWrapper.md +17 -0
  169. package/skills/neo4j-nvl-skill/references/clustering.md +87 -0
  170. package/skills/neo4j-nvl-skill/references/data-from-neo4j.md +67 -0
  171. package/skills/neo4j-nvl-skill/references/labels-and-overlays.md +76 -0
  172. package/skills/neo4j-nvl-skill/references/layouts-and-positions.md +65 -0
  173. package/skills/neo4j-nvl-skill/references/lifecycle-and-updates.md +65 -0
  174. package/skills/neo4j-nvl-skill/references/migrating-1x-to-2.md +50 -0
  175. package/skills/neo4j-nvl-skill/references/react-wrappers.md +88 -0
  176. package/skills/neo4j-nvl-skill/references/verifying-nvl-apps.md +52 -0
  177. package/skills/neo4j-nvl-skill/references/vite-and-bundlers.md +62 -0
  178. package/dist/base.mjs.LICENSE.txt +0 -21
  179. package/dist/types/layouts/animatedlayout/AnimatedLayout.test.d.ts +0 -1
  180. package/dist/types/layouts/animatedlayout/animationUtils.test.d.ts +0 -1
  181. package/dist/types/layouts/d3forcelayout/__mocks__/d3ForceLayout.d.ts +0 -10
  182. package/dist/types/layouts/d3forcelayout/circularLayout.test.d.ts +0 -1
  183. package/dist/types/layouts/d3forcelayout/d3ForceLayout.test.d.ts +0 -1
  184. package/dist/types/layouts/forcedirectedlayout/ForceCytoLayout.d.ts +0 -22
  185. package/dist/types/layouts/forcedirectedlayout/cosebilkentlayout/CoseBilkentLayout.d.ts +0 -33
  186. package/dist/types/layouts/forcedirectedlayout/physlayout/PhysLayout.d.ts +0 -174
  187. package/dist/types/layouts/forcedirectedlayout/physlayout/PhysLayout.test.d.ts +0 -1
  188. package/dist/types/layouts/forcedirectedlayout/physlayout/glwrapper.d.ts +0 -4
  189. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/multilevel-fragment.d.ts +0 -2
  190. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/multilevel-repulsive-fragment.d.ts +0 -2
  191. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/multilevel-update-fragment.d.ts +0 -2
  192. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/sim-vertex.d.ts +0 -2
  193. package/dist/types/layouts/forcedirectedlayout/physlayout/shaders/workaround-fragment.d.ts +0 -2
  194. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/SolarMerger.bench.d.ts +0 -1
  195. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/SolarMerger.d.ts +0 -21
  196. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/SolarMerger.test.d.ts +0 -1
  197. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/solar-placer.d.ts +0 -2
  198. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/solar-placer.test.d.ts +0 -1
  199. package/dist/types/layouts/forcedirectedlayout/physlayout/solarmerger/types.d.ts +0 -49
  200. package/dist/types/modules/NvlController.test.d.ts +0 -1
  201. package/dist/types/modules/ZoomTransitionHandler.test.d.ts +0 -1
  202. package/dist/types/modules/dataset.test.d.ts +0 -1
  203. package/dist/types/modules/state/state.test.d.ts +0 -1
  204. package/dist/types/modules/state/utils.test.d.ts +0 -1
  205. package/dist/types/renderers/domrenderer/BaseRenderer.test.d.ts +0 -1
  206. package/dist/types/renderers/domrenderer/canvasrenderer/Animation.test.d.ts +0 -1
  207. package/dist/types/renderers/domrenderer/canvasrenderer/CanvasRenderer.test.d.ts +0 -1
  208. package/dist/types/renderers/domrenderer/canvasrenderer/arrowDrawing.test.d.ts +0 -1
  209. package/dist/types/renderers/domrenderer/canvasrenderer/nodeDrawing.test.d.ts +0 -1
  210. package/dist/types/renderers/domrenderer/shared/ImageCache.test.d.ts +0 -1
  211. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundle.test.d.ts +0 -1
  212. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundler.test.d.ts +0 -1
  213. package/dist/types/renderers/domrenderer/shared/arrows/arrows.test.d.ts +0 -1
  214. package/dist/types/renderers/domrenderer/shared/nodes/nodes.test.d.ts +0 -1
  215. package/dist/types/renderers/domrenderer/shared/util.test.d.ts +0 -1
  216. package/dist/types/renderers/domrenderer/shared/wordwrap.test.d.ts +0 -1
  217. package/dist/types/renderers/domrenderer/svgrenderer/SvgRenderer.test.d.ts +0 -1
  218. package/dist/types/renderers/domrenderer/svgrenderer/arrowDrawing.test.d.ts +0 -1
  219. package/dist/types/renderers/domrenderer/svgrenderer/nodeDrawing.test.d.ts +0 -1
  220. package/dist/types/renderers/domrenderer/svgrenderer/svgUtils.test.d.ts +0 -1
  221. package/dist/types/renderers/webglrenderer/Controller.test.d.ts +0 -1
  222. package/dist/types/renderers/webglrenderer/Renderer.test.d.ts +0 -1
  223. package/dist/types/utils/ariaUtils.test.d.ts +0 -1
  224. package/dist/types/utils/canvasManagement.test.d.ts +0 -1
  225. package/dist/types/utils/circularUtils.test.d.ts +0 -1
  226. package/dist/types/utils/colorUtils.test.d.ts +0 -1
  227. package/dist/types/utils/errors.test.d.ts +0 -1
  228. package/dist/types/utils/geometry.test.d.ts +0 -1
  229. package/dist/types/utils/graphObjectUtils.test.d.ts +0 -1
  230. package/dist/types/utils/hittest.d.ts +0 -58
  231. package/dist/types/utils/hittest.test.d.ts +0 -1
  232. package/dist/types/utils/jsDriverResultTransformer.test.d.ts +0 -1
  233. package/dist/types/utils/mouseUtils.test.d.ts +0 -1
  234. package/dist/types/utils/webWorkerUtils.test.d.ts +0 -1
  235. package/dist/types/utils/zoomFunctions.test.d.ts +0 -1
@@ -0,0 +1,143 @@
1
+ import { Node, Relationship } from "../../../types/graph-element.js";
2
+ import { CoarsenedGraph, PartialPlanet, PartialSun, SolarNode, SolarRelationship, Sun } from "./types.js";
3
+ /**
4
+ * Gets the original node ids belonging to a sun and its planets and moons.
5
+ * @param sun - The sun to get the original node ids for.
6
+ * @returns The original node ids belonging to the sun system.
7
+ *
8
+ * @note Synthetic suns are not included in the returned array.
9
+ */
10
+ export declare const getSunSystemOriginalIds: (sun: Sun) => string[];
11
+ /**
12
+ * How many times a node's degree must exceed the graph's average degree before it is treated as a hub, see
13
+ * {@link isHub}.
14
+ *
15
+ * @remarks
16
+ * Mi et al., "Interactive Graph Layout of a Million Nodes", Sec. 4.3, proposes capping cluster *size* to avoid
17
+ * the outlier clusters this multiplier targets. `HubDegreeMultiplier` targets this problem by checking a node's
18
+ * own degree at claim time, before moon-matching runs.
19
+ * @see {@link https://www.mdpi.com/2227-9709/3/4/23 Interactive Graph Layout of a Million Nodes} Sec. 4.3
20
+ */
21
+ export declare const HubDegreeMultiplier = 3;
22
+ /**
23
+ * @param relationships - The graph's adjacency list, indexed by node id.
24
+ * @returns The degree a node must exceed to be treated as a hub by {@link isHub}.
25
+ */
26
+ export declare const getHubDegreeThreshold: (relationships: number[][]) => number;
27
+ /**
28
+ * Whether a node's degree is enough of an outlier that it must become its own sun rather than being absorbed as
29
+ * a planet/moon of another sun.
30
+ *
31
+ * @param index - The node id to check.
32
+ * @param relationships - The graph's adjacency list, indexed by node id.
33
+ * @param hubDegreeThreshold - The threshold from {@link getHubDegreeThreshold}.
34
+ * @see {@link HubDegreeMultiplier}
35
+ */
36
+ export declare const isHub: (index: number, relationships: number[][], hubDegreeThreshold: number) => boolean;
37
+ /**
38
+ * Builds adjacency lists and relationship id maps from the input graph.
39
+ * @param inputGraph - The nodes and relationships to convert.
40
+ * @param nodeIdToIndex - Maps node ids to contiguous array indices.
41
+ * @returns Parsed adjacency data for coarsening.
42
+ */
43
+ export declare const buildAdjacencyGraph: (inputGraph: {
44
+ nodes: Node[];
45
+ rels: Relationship[];
46
+ }, nodeIdToIndex: Record<string, number>) => {
47
+ nodes: Node[];
48
+ relationships: number[][];
49
+ relIdMap: string[][];
50
+ idToRel: Record<string, SolarRelationship>;
51
+ };
52
+ /**
53
+ * Wraps input nodes as {@link SolarNode}s indexed by their original position.
54
+ * @param nodes - The input graph nodes.
55
+ * @returns {SolarNode[]} Solar nodes with positional ids and original ids preserved.
56
+ */
57
+ export declare const createSolarNodesFromInput: (nodes: Node[]) => SolarNode[];
58
+ /**
59
+ * Creates a Planet with an unsettled parent link (caller must attach via {@link attachPlanetsToSun}).
60
+ */
61
+ export declare const createPlanet: (params: {
62
+ id: number;
63
+ sunId: number;
64
+ weight: number;
65
+ originalId: string;
66
+ finestIndex?: number;
67
+ size?: () => number;
68
+ }) => PartialPlanet;
69
+ /**
70
+ * Finalises a sun's planets list, weight/size/children closures, and back-links parent on each planet.
71
+ * @param partialSun - The sun under construction (planets/size/children/weight not yet set).
72
+ * @param planets - The planets to attach to the sun (parent not yet set).
73
+ * @param centreWeight - The weight of the sun itself, added to the sum of its planets' weights.
74
+ * @param centreSize - The size of the sun itself, added to the sum of its planets' sizes.
75
+ * @returns A new sun object with planets attached. `previousIndex` is a placeholder until
76
+ * {@link sortHierarchyForShaderLayout} assigns the real value.
77
+ */
78
+ export declare const attachPlanetsToSun: (partialSun: PartialSun, planets: PartialPlanet[], centreWeight: number, centreSize: number) => Sun;
79
+ /**
80
+ * Appends a synthetic sun node to the finest-level arrays for a multi-member clusterBy cluster.
81
+ * Uses a reserved {@link SolarNode.originalId} (`synth-sun:${clusterId}`) so it cannot collide with
82
+ * real node ids; {@link SolarNode.synthetic} marks it for detection.
83
+ * @param params.clusterId - Semantic cluster id embedded in the synth sun's stable originalId.
84
+ * @param params.solarNodesWithSynths - Finest solar nodes; the synth sun is appended here.
85
+ * @param params.relationshipsWithSynths - Finest adjacency lists; an empty row is appended for the synth sun.
86
+ * @param params.relIdMapWithSynths - Finest relationship id lists; an empty row is appended for the synth sun.
87
+ * @returns A sun under construction, ready for {@link attachPlanetsToSun} (separate from the finest SolarNode).
88
+ */
89
+ export declare const createSynthClusterSun: (params: {
90
+ clusterId: string | number;
91
+ solarNodesWithSynths: SolarNode[];
92
+ relationshipsWithSynths: number[][];
93
+ relIdMapWithSynths: string[][];
94
+ }) => PartialSun;
95
+ /**
96
+ * Rolls node-level adjacency up to sun-level adjacency between clusters.
97
+ * When `weakLinkSunIds` is provided, edges where either endpoint is a Sun are skipped.
98
+ * @param relationships - Node adjacency lists indexed by node position.
99
+ * @param nodeIndexToSunIndex - Maps each node index to its sun index.
100
+ * @param sunCount - Number of suns in the coarse graph.
101
+ * @param weakLinkSunIds - Optional set of node indices that are Suns. When set, Sun-leaf and Sun-Sun edges are ignored.
102
+ * @returns {number[][]} Sun-level adjacency lists without duplicate edges.
103
+ */
104
+ export declare const rollupInterSunRelationships: (relationships: number[][], nodeIndexToSunIndex: Record<number, number>, sunCount: number, weakLinkSunIds?: Set<number>) => number[][];
105
+ /**
106
+ * Remaps adjacency lists to a sorted node order.
107
+ * @param relationships - Node adjacency lists in the pre-sort index order.
108
+ * @param nodeSortMap - Maps old node indices to sorted indices.
109
+ * @param relIdMap - Relationship ids aligned with adjacency lists.
110
+ * @param remapRelIds - Whether relationship ids should be remapped as well.
111
+ * @returns {{ relationships: number[][]; relIdMap: string[][] }} Remapped adjacency data.
112
+ */
113
+ export declare const remapAdjacencyWithSortMap: (relationships: number[][], nodeSortMap: Record<number, number>, relIdMap: string[][], remapRelIds?: boolean) => {
114
+ relationships: number[][];
115
+ relIdMap: string[][];
116
+ };
117
+ /** Input nodes that may receive a layout `finestIndex` during sorting (plain Node on first pass). */
118
+ type SourceNode = (Node | SolarNode) & {
119
+ finestIndex?: number;
120
+ };
121
+ export type SortHierarchyOptions = {
122
+ suns: Sun[];
123
+ solarNodes: SolarNode[];
124
+ sourceNodes?: SourceNode[];
125
+ relationships: number[][];
126
+ relIdMap: string[][];
127
+ idToRel: Record<string, SolarRelationship>;
128
+ firstIteration?: boolean;
129
+ includeMoons?: boolean;
130
+ };
131
+ /**
132
+ * Sorts suns, planets, and optionally moons into shader layout order and builds the finest subgraph.
133
+ * @param options - Hierarchy members and adjacency data to sort.
134
+ * @returns The finest subgraph, sort map, member-sun maps, and remapped relationship ids.
135
+ */
136
+ export declare const sortHierarchyForShaderLayout: ({ suns, solarNodes, sourceNodes, relationships, relIdMap, idToRel, firstIteration, includeMoons }: SortHierarchyOptions) => {
137
+ sortedInput: CoarsenedGraph;
138
+ nodeSortMap: Record<number, number>;
139
+ sunMap: Record<string, string>;
140
+ memberMap: Record<string, string[]>;
141
+ relIdMap: string[][];
142
+ };
143
+ export {};
@@ -0,0 +1,59 @@
1
+ import { Node } from "../../../types/graph-element.js";
2
+ export interface SolarNode extends Omit<Node, 'id' | 'size'> {
3
+ id: number;
4
+ weight?: number;
5
+ finestIndex?: number;
6
+ originalId: string;
7
+ position?: {
8
+ x: number;
9
+ y: number;
10
+ };
11
+ placement?: {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ size?: number | (() => number);
16
+ synthetic?: boolean;
17
+ }
18
+ export interface SolarRelationship {
19
+ id: string;
20
+ from: string;
21
+ to: string;
22
+ }
23
+ export interface CoarsenedGraph {
24
+ nodes: SolarNode[];
25
+ relationships: number[][];
26
+ idToRel: Record<string, SolarRelationship>;
27
+ /**
28
+ * Contains the "real" {@link relationships} plus any synthetic edges purely for layout purposes.
29
+ * Undefined when there are no synthetic edges (e.g. SolarMerger).
30
+ */
31
+ springRelationships?: number[][];
32
+ }
33
+ export interface Sun extends SolarNode {
34
+ planets: Planet[];
35
+ size: () => number;
36
+ children: () => Planet[];
37
+ previousIndex: number;
38
+ }
39
+ /** Sun fields known before {@link attachPlanetsToSun} fills planets/size/children/weight. */
40
+ export type PartialSun = Omit<Sun, 'planets' | 'size' | 'children' | 'previousIndex' | 'weight'>;
41
+ export interface Planet extends SolarNode {
42
+ parent: Sun;
43
+ sunId: number;
44
+ moons: Moon[];
45
+ size: () => number;
46
+ children: () => Moon[];
47
+ }
48
+ /** Planet fields known before {@link attachPlanetsToSun} sets parent. */
49
+ export type PartialPlanet = Omit<Planet, 'parent'>;
50
+ export interface Moon extends SolarNode {
51
+ parent: Planet;
52
+ sunId: number;
53
+ size: () => number;
54
+ }
55
+ export type Celestial = Sun | Planet | Moon;
56
+ export declare const isSolarNode: (node: SolarNode | Node) => node is SolarNode;
57
+ export declare const isSun: (node: SolarNode | Celestial) => node is Sun;
58
+ export declare const isPlanet: (node: SolarNode | Celestial) => node is Planet;
59
+ export declare const isMoon: (node: SolarNode | Celestial) => node is Moon;
@@ -0,0 +1,4 @@
1
+ export default class GlWrapper {
2
+ constructor(gl: RenderingContext);
3
+ private wrapFunction;
4
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: "#version 300 es\nprecision mediump float;\n\nuniform sampler2D u_physData;\nuniform sampler2D u_connections;\nuniform sampler2D u_connectionOffsets;\nuniform sampler2D u_pinnedNodes;\nuniform sampler2D u_sizeTexture;\nuniform float u_baseLength;\nuniform float u_curIteration;\nuniform float u_iterationMultiplier;\nuniform vec2 u_gravityCenter;\nuniform float u_numNodes;\nuniform float u_gravity;\n\nuniform sampler2D u_clusterData;\nuniform sampler2D u_prevForce;\nuniform float u_collisionMultiplier;\nuniform float u_maxNodeSize;\nuniform float u_crossClusterRelationshipMultiplier;\n\nout vec4 fragColor;\n\nfloat DAMP = 0.6;\nfloat COOL = 0.99998;\nfloat TIMESTEP = 1.0 / 30.0;\nfloat VELOCITYDECAY = 0.6;\nfloat accLimitLow = 500000.0;\nfloat accLimitHigh = 750000.0;\nfloat accLimitPosHigh = 10000000.0;\n\nconst float denseNodeThreshold = 1000.0;\nconst float MIN_DISTANCE = 0.00000001;\nconst float MAX_DISTANCE = 1000000000.0;\nconst float MAX_ACCELERATION = 50000.0;\n\nvec4 getTextureData(sampler2D tex, float index, float base) {\n float x = mod(index, base);\n float y = (index - x) / base;\n return texture(tex, vec2(x + 0.5, y + 0.5) / base);\n}\n\nbool isNan(float val) {\n return (val < 0.0 || 0.0 < val || val == 0.0) ? false : true;\n}\n\nconst float BIG_NUMBER = 999999999999999999.0;\nbool isInf(float val) {\n return val > BIG_NUMBER || val < -BIG_NUMBER;\n}\n\nvec2 getDelta(vec2 v1, vec2 v2) {\n vec2 delta = v1 - v2;\n float dist = length(delta);\n if (dist < MIN_DISTANCE || isNan(dist)) {\n return vec2(MIN_DISTANCE, MIN_DISTANCE);\n }\n if (dist > MAX_DISTANCE) {\n vec2 normDelta = delta / dist;\n return normDelta * MAX_DISTANCE;\n }\n return delta;\n}\n\nvec4 getOtherNodePosition(float i) {\n return getTextureData(u_physData, i, 256.0);\n}\n\nfloat getCombinedNodeSize(float i, float nodeSize) {\n float otherNodeSize = getTextureData(u_sizeTexture, i, 256.0).r;\n return nodeSize + otherNodeSize;\n}\n\nvec2 getSpringForce(float curConnection, float numConnections, float springFScale, vec4 myPosition, float i, float myClusterStartIndex) {\n float curSpring = getTextureData(u_connections, curConnection + i, 4096.0).r;\n\n vec4 otherPosition = getTextureData(u_physData, curSpring, 256.0);\n float otherDataPosition = getTextureData(u_connectionOffsets, curSpring, 256.0).r;\n float otherNumConnections = getTextureData(u_connections, otherDataPosition, 4096.0).r;\n float avgDegree = max((otherNumConnections + numConnections * 3.0) / 4.0, 4.0);\n\n vec2 delta = getDelta(myPosition.xy, otherPosition.xy);\n float dist = length(delta);\n\n float F = (dist * dist * springFScale) / (u_baseLength * avgDegree) * u_collisionMultiplier;\n\n // u_crossClusterRelationshipMultiplier only damps edges that cross a cluster boundary\n if (u_crossClusterRelationshipMultiplier < 1.0) {\n float otherClusterStartIndex = getTextureData(u_clusterData, curSpring, 256.0).y;\n F *= otherClusterStartIndex == myClusterStartIndex ? 1.0 : u_crossClusterRelationshipMultiplier;\n }\n\n return (-delta / dist) * F;\n}\n\nvec2 getCollisionForce(float combinedNodeSize, float dist, float fScale, vec2 delta) {\n float collisionForce = (combinedNodeSize - dist) / (dist) * u_collisionMultiplier;\n return (delta * collisionForce * fScale * combinedNodeSize) / (combinedNodeSize + 1.0);\n}\n\nvec2 getRepulsionForce(float dist, float fScale, vec2 delta) {\n float F = (u_baseLength * u_baseLength * fScale) / (dist) * u_collisionMultiplier;\n return (delta / dist) * F * 0.05;\n}\n\nvoid main(void) {\n float textureSide = 256.0; //#TEXTURE_SIDE#;\n float index = (gl_FragCoord.x - 0.5) + (gl_FragCoord.y - 0.5) * textureSide;\n\n if (index >= u_numNodes) {\n discard;\n }\n\n vec4 clusterData = getTextureData(u_clusterData, index, 256.0);\n\n float clusterIndex = clusterData.x;\n float clusterStartIndex = clusterData.y;\n float clusterSize = clusterData.z;\n\n vec4 myPosition = getTextureData(u_physData, index, 256.0);\n vec4 previousForce = getTextureData(u_prevForce, clusterIndex, 256.0);\n\n vec2 acceleration = previousForce.xy;\n\n float isPinned = getTextureData(u_pinnedNodes, index, 256.0).r;\n float nodeSize = getTextureData(u_sizeTexture, index, 256.0).r;\n\n if (isPinned > 0.5) {\n fragColor = vec4(myPosition.xy, 0.0, 0.0);\n return;\n }\n\n // Prime the second ping-pong texture with the initial state without calculating forces\n // that would otherwise be discarded at the end of this first iteration.\n if (u_curIteration == 0.0) {\n fragColor = vec4(myPosition.xy, myPosition.zw);\n return;\n }\n\n float curConnection = getTextureData(u_connectionOffsets, index, 256.0).r;\n float numConnections = getTextureData(u_connections, curConnection, 4096.0).r;\n\n float fScale = 1.0 + sqrt(u_iterationMultiplier);\n float springFScale = fScale;\n\n if (numConnections > denseNodeThreshold) {\n springFScale = sqrt(fScale);\n }\n\n float numOfRels = 0.0;\n\n // Springs\n for (float i = 1.0; i <= 256.0 * 256.0; i++) {\n if (numOfRels >= numConnections) {\n break;\n }\n acceleration += getSpringForce(curConnection, numConnections, springFScale, myPosition, i, clusterStartIndex);\n numOfRels += 1.0;\n }\n\n // Repulsion && collision detection.\n if (u_collisionMultiplier > 0.0) {\n float number_of_collisions = 0.0;\n for (float i = 0.0; i < 256.0 * 256.0; i++) {\n if (i >= u_numNodes) {\n break;\n }\n\n if (i == index) {\n continue;\n }\n\n vec4 otherPosition = getOtherNodePosition(i);\n vec2 delta = getDelta(myPosition.xy, otherPosition.xy);\n float dist = length(delta);\n\n if (number_of_collisions < 40.0 && dist < (nodeSize + u_maxNodeSize) * 2.0) {\n float combinedNodeSize = getCombinedNodeSize(i, nodeSize) * 2.0;\n if (dist < combinedNodeSize) {\n number_of_collisions++;\n acceleration += getCollisionForce(combinedNodeSize, dist, fScale, delta);\n }\n }\n\n if (i >= clusterStartIndex && i < clusterStartIndex + clusterSize) {\n acceleration += getRepulsionForce(dist, fScale, delta);\n }\n }\n }\n\n // Gravity\n vec2 delta = getDelta(u_gravityCenter, myPosition.xy);\n float dist = length(delta);\n\n vec2 grav = (delta / dist) * u_gravity * fScale * (dist / 1000.0);\n acceleration += grav;\n\n float accMagnitude = length(acceleration);\n acceleration *= min(MAX_ACCELERATION, accMagnitude) / accMagnitude;\n\n float iterationFrictionThreshold = 1000.0;\n\n if (u_curIteration > iterationFrictionThreshold) {\n float friction = 1.0 + pow((u_curIteration - iterationFrictionThreshold), 2.0) / 100.0;\n acceleration *= 1.0 / friction;\n }\n\n float TEMP = max(0.02, pow(COOL, u_curIteration));\n vec2 prevVelocity = myPosition.zw;\n vec2 currentPos = myPosition.xy;\n\n vec2 newPos = currentPos + TEMP * ( DAMP * (prevVelocity) + acceleration * TIMESTEP * TIMESTEP);\n vec2 newVelocity = newPos - currentPos;\n fragColor = vec4(newPos, newVelocity);\n}";
2
+ export { _default as default };
@@ -0,0 +1,2 @@
1
+ declare const _default: "#version 300 es\nprecision mediump float;\nuniform sampler2D u_physData;\nuniform sampler2D u_clusterData;\nuniform sampler2D u_finestIndexes;\nuniform sampler2D u_prevForce;\n\nuniform float u_baseLength;\nuniform float u_numNodes;\nuniform float u_iterationMultiplier;\nuniform float u_isTopLevel;\n\nout vec4 fragColor;\n\nfloat PI = 3.1415926535897932384626433832795;\nfloat TIMESTEP = 1.0 / 30.0;\nfloat VELOCITYDECAY = 1.0;\n\nvec4 getTextureData(sampler2D tex, float index, float base) {\n float x = mod(index, base);\n float y = (index - x) / base;\n return texture(tex, vec2(x + 0.5, y + 0.5) / base);\n}\n\nfloat getAdjustedClusterWeight(float clusterWeight) {\n return (clusterWeight * clusterWeight) / (clusterWeight + 1.0);\n}\n\n// Repulsion area from peer mass (weight). .z size is only for mid-level loop bounds.\nfloat getPeerFootprintArea(float peerWeight) {\n return pow(sqrt(peerWeight) * 4.0 + u_baseLength * 2.0, 2.0);\n}\n\nvoid main(void) {\n float index = (gl_FragCoord.x - 0.5) + (gl_FragCoord.y - 0.5) * 256.0;\n\n if (index >= u_numNodes) {\n discard;\n }\n\n vec4 clusterData = getTextureData(u_clusterData, index, 256.0);\n bool isTopLevel = u_isTopLevel == 1.0;\n\n float clusterIndex = clusterData.x;\n float clusterStartIndex = clusterData.y;\n float clusterSize = clusterData.z;\n float singleNodeRepulsionScale = isTopLevel && clusterSize == 1.0 ? 0.5 : 1.0;\n\n float finestIndex = getTextureData(u_finestIndexes, index, 256.0).r;\n vec4 myPosition = getTextureData(u_physData, finestIndex, 256.0);\n vec4 previousForce = getTextureData(u_prevForce, clusterIndex, 256.0);\n float fScale = 1.0 + sqrt(u_iterationMultiplier);\n\n vec2 acceleration = previousForce.xy;\n\n float loopEnd = isTopLevel ? u_numNodes : (clusterStartIndex + clusterSize);\n\n // Repulsion & Collision Detection\n for (float i = 0.0; i < 256.0 * 256.0; i++) {\n if (i >= loopEnd || i >= u_numNodes) {\n break;\n }\n if ((!isTopLevel && i < clusterStartIndex) || i == index) {\n continue;\n }\n\n vec4 otherClusterData = getTextureData(u_clusterData, i, 256.0);\n float otherClusterWeight = getAdjustedClusterWeight(otherClusterData.w);\n\n float otherFinestIndex = getTextureData(u_finestIndexes, i, 256.0).r;\n vec4 otherPosition = getTextureData(u_physData, otherFinestIndex, 256.0);\n\n vec2 delta = myPosition.xy - otherPosition.xy;\n float dist = max(length(delta), 0.0000001);\n float maxDist = 25.0;\n float repulsionForceScale = 0.1;\n\n float area = getPeerFootprintArea(otherClusterData.w);\n float F = (area * fScale) / (dist * dist);\n\n if (isTopLevel) {\n repulsionForceScale = 0.2;\n }\n\n acceleration += ((delta / sqrt(dist)) * F) * repulsionForceScale * otherClusterWeight * singleNodeRepulsionScale;\n\n if (dist < maxDist) {\n float collide = (maxDist - dist) / (dist * dist);\n acceleration += delta * collide * fScale * maxDist / (maxDist + 1.0);\n }\n }\n\n fragColor = vec4(acceleration, vec2(finestIndex, 0));\n}";
2
+ export { _default as default };
@@ -0,0 +1,2 @@
1
+ declare const _default: "#version 300 es\nprecision mediump float;\n\nuniform sampler2D u_physData;\nuniform sampler2D u_updateData;\nuniform float u_numNodesNew;\n\nout vec4 fragColor;\n\nconst float INDEX_FLAG = 999999.0;\n\nvec4 getTextureData(sampler2D tex, float index, float base) {\n float x = mod(index, base);\n float y = (index - x) / base;\n return texture(tex, vec2(x + 0.5, y + 0.5) / base);\n}\n\nvoid main(void) {\n float textureSide = 256.0; //#TEXTURE_SIDE#;\n float index = (gl_FragCoord.x - 0.5) + (gl_FragCoord.y - 0.5)*textureSide;\n\n if (index >= u_numNodesNew) {\n discard;\n }\n\n float firstValue = getTextureData(u_updateData, index * 2.0, 256.0).r;\n float secondValue = getTextureData(u_updateData, index * 2.0 + 1.0, 256.0).r;\n\n if (secondValue == INDEX_FLAG) {\n vec4 myPosition = getTextureData(u_physData, firstValue, 256.0);\n fragColor = myPosition;\n } else {\n fragColor = vec4(firstValue, secondValue, 0.0, 0.0);\n }\n}\n";
2
+ export { _default as default };
@@ -0,0 +1,2 @@
1
+ declare const _default: "#version 300 es\nuniform mat4 u_projection;\n\nin vec2 a_position;\n//in float a_index;\n\n//out highp float index;\n\nvoid main() {\n// index = a_index;\n gl_Position = u_projection * vec4(a_position, 0.0, 1.0);\n}";
2
+ export { _default as default };
@@ -1,26 +1,24 @@
1
- import type { NvlState } from '../../modules/state/types';
2
- import type { Node } from '../../types/graph-element';
3
- import type { Point } from '../../utils/geometry';
1
+ import { Point } from "../../utils/geometry.js";
2
+ import { Node, PartialNode } from "../../types/graph-element.js";
3
+ import { NvlState } from "../../modules/state/types.js";
4
4
  export declare class FreeLayout {
5
- private state;
6
- private positions;
7
- private shouldUpdate;
8
- private stateDisposers;
9
- constructor(config: {
10
- state: NvlState;
11
- });
12
- setOptions(): any;
13
- updateNodes(positionList: (Point & {
14
- id: string;
15
- })[]): void;
16
- update(refreshPositions?: boolean): void;
17
- layout(nodes: Node[], nodeIds: Record<string, Node>, idToPosition: Record<string, Node>): void;
18
- setNodePositions(p: Record<string, Point>): void;
19
- getNodePositions(nodeList: Node[]): (Point & {
20
- id: string;
21
- })[];
22
- getShouldUpdate(): boolean;
23
- getComputing(): boolean;
24
- terminateUpdate(): any;
25
- destroy(): void;
26
- }
5
+ private state;
6
+ private positions;
7
+ private shouldUpdate;
8
+ private stateDisposers;
9
+ constructor(config: {
10
+ state: NvlState;
11
+ });
12
+ setOptions(): any;
13
+ updateNodes(positionList: PartialNode[]): void;
14
+ update(refreshPositions?: boolean): void;
15
+ layout(nodes: Node[], nodeIds: Record<string, Node>, idToPosition: Record<string, Node>): void;
16
+ setNodePositions(p: Record<string, Point>): void;
17
+ getNodePositions(nodeList: Node[]): (Point & {
18
+ id: string;
19
+ })[];
20
+ getShouldUpdate(): boolean;
21
+ getComputing(): boolean;
22
+ terminateUpdate(): any;
23
+ destroy(): void;
24
+ }
@@ -1,32 +1,28 @@
1
- import type { NvlState } from '../../modules/state/types';
2
- import type { Node } from '../../types/graph-element';
3
- import type { Point } from '../../utils/geometry';
1
+ import { Point } from "../../utils/geometry.js";
2
+ import { Node, PartialNode } from "../../types/graph-element.js";
3
+ import { NvlState } from "../../modules/state/types.js";
4
4
  export declare class GridLayout {
5
+ state: NvlState;
6
+ positions: Record<string, Node & Point>;
7
+ stateDisposers: (() => void)[];
8
+ shouldUpdate: boolean;
9
+ constructor(config: {
5
10
  state: NvlState;
6
- positions: Record<string, Node & Point>;
7
- stateDisposers: (() => void)[];
8
- shouldUpdate: boolean;
9
- constructor(config: {
10
- state: NvlState;
11
- });
12
- setOptions(): void;
13
- updateNodes(positionList: {
14
- id: string;
15
- x: number;
16
- y: number;
17
- }[]): void;
18
- update(refreshPositions?: boolean): void;
19
- layout(mobxNodes: any): void;
20
- setNodePositions(idToPosition: Record<string, Node & Point>): void;
21
- getNodePositions(nodeList: {
22
- id: string;
23
- }[]): {
24
- id: string;
25
- x: number;
26
- y: number;
27
- }[];
28
- getShouldUpdate(): boolean;
29
- getComputing(): boolean;
30
- terminateUpdate(): void;
31
- destroy(): void;
32
- }
11
+ });
12
+ setOptions(): void;
13
+ updateNodes(positionList: PartialNode[]): void;
14
+ update(refreshPositions?: boolean): void;
15
+ layout(mobxNodes: any): void;
16
+ setNodePositions(idToPosition: Record<string, Node & Point>): void;
17
+ getNodePositions(nodeList: {
18
+ id: string;
19
+ }[]): {
20
+ id: string;
21
+ x: number;
22
+ y: number;
23
+ }[];
24
+ getShouldUpdate(): boolean;
25
+ getComputing(): boolean;
26
+ terminateUpdate(): void;
27
+ destroy(): void;
28
+ }
@@ -1,27 +1,32 @@
1
- import { type HierarchicalOptions, type LayoutOptions, type NvlState } from '../../modules/state/types';
2
- import AnimatedLayout from '../animatedlayout/AnimatedLayout';
1
+ import { HierarchicalOptions, LayoutOptions, NvlState } from "../../modules/state/types.js";
2
+ import AnimatedLayout from "../animatedlayout/AnimatedLayout.js";
3
3
  type HierarchicalLayoutConfig = {
4
- state: NvlState;
5
- animationCompleteCallback?: () => void;
4
+ state: NvlState;
5
+ animationCompleteCallback?: () => void;
6
6
  } & HierarchicalOptions;
7
7
  export declare class HierarchicalLayout extends AnimatedLayout {
8
- private direction;
9
- private packing;
10
- private stateDisposers;
11
- private oldComputing;
12
- private computing;
13
- private pendingLayoutData;
14
- private worker;
15
- private directionChanged;
16
- private packingChanged;
17
- private workersDisabled;
18
- constructor(config: HierarchicalLayoutConfig);
19
- setOptions(options: LayoutOptions): void;
20
- update(refreshPositions?: boolean): void;
21
- getShouldUpdate(): boolean;
22
- getComputing(): boolean;
23
- private layout;
24
- terminateUpdate(): void;
25
- destroy(): void;
8
+ private direction;
9
+ private packing;
10
+ private clusterBy?;
11
+ private lastClusterByAssignments;
12
+ private stateDisposers;
13
+ private oldComputing;
14
+ private computing;
15
+ private pendingLayoutData;
16
+ private worker;
17
+ private directionChanged;
18
+ private packingChanged;
19
+ private clusterByChanged;
20
+ private workersDisabled;
21
+ constructor(config: HierarchicalLayoutConfig);
22
+ setOptions(options: LayoutOptions): void;
23
+ private applyClusterByOption;
24
+ private buildClusterAssignments;
25
+ update(refreshPositions?: boolean): void;
26
+ getShouldUpdate(): boolean;
27
+ getComputing(): boolean;
28
+ private layout;
29
+ terminateUpdate(): void;
30
+ destroy(): void;
26
31
  }
27
- export {};
32
+ export {};
@@ -1,4 +1,4 @@
1
- import type { HierarchicalOptions } from '../../modules/state/types';
1
+ import { HierarchicalOptions } from "../../modules/state/types.js";
2
2
  export declare const Ranker = "tight-tree";
3
3
  export declare const SubGraphSpacing = 100;
4
4
  export declare const DirectionUp = "up";
@@ -8,4 +8,4 @@ export declare const DirectionRight = "right";
8
8
  export declare const Directions: Record<HierarchicalOptions['direction'], string>;
9
9
  export declare const PackingBin = "bin";
10
10
  export declare const PackingStack = "stack";
11
- export declare const Packings: HierarchicalOptions['packing'][];
11
+ export declare const Packings: HierarchicalOptions['packing'][];
@@ -1,4 +1,4 @@
1
- import { type ExternalCallbacks } from './ExternalCallbackHandler';
1
+ import { ExternalCallbacks } from "./ExternalCallbackHandler.js";
2
2
  type CallbackFunction = ExternalCallbacks[keyof ExternalCallbacks];
3
3
  /**
4
4
  * A class for registering and calling callbacks
@@ -13,26 +13,26 @@ type CallbackFunction = ExternalCallbacks[keyof ExternalCallbacks];
13
13
  * ```
14
14
  */
15
15
  export declare class CallbackHelper {
16
- private readonly callbacks;
17
- constructor();
18
- /**
19
- * Register a callback function to be called when an event of that name happens
20
- * @param name - The name of the callback to register.
21
- * @param callback - A function that will be called when an event of that name happens.
22
- * If other callbacks are already registered for that name it is added to the list
23
- */
24
- register(name: keyof ExternalCallbacks, callback: CallbackFunction): void;
25
- /**
26
- * Check if a callback function with that name is registered already
27
- * @param name - The name of the callbacks to check.
28
- * @return {boolean} Whether or not a callback function with that name is registered
29
- */
30
- isCallbackRegistered(name: keyof ExternalCallbacks): boolean;
31
- /**
32
- * Call all callbacks registered for a given name
33
- * @param name - The name of the callbacks to call.
34
- * @param data - Data to pass when calling the callbacks.
35
- */
36
- callIfRegistered(): void;
16
+ private readonly callbacks;
17
+ constructor();
18
+ /**
19
+ * Register a callback function to be called when an event of that name happens
20
+ * @param name - The name of the callback to register.
21
+ * @param callback - A function that will be called when an event of that name happens.
22
+ * If other callbacks are already registered for that name it is added to the list
23
+ */
24
+ register(name: keyof ExternalCallbacks, callback: CallbackFunction): void;
25
+ /**
26
+ * Check if a callback function with that name is registered already
27
+ * @param name - The name of the callbacks to check.
28
+ * @return {boolean} Whether or not a callback function with that name is registered
29
+ */
30
+ isCallbackRegistered(name: keyof ExternalCallbacks): boolean;
31
+ /**
32
+ * Call all callbacks registered for a given name
33
+ * @param name - The name of the callbacks to call.
34
+ * @param data - Data to pass when calling the callbacks.
35
+ */
36
+ callIfRegistered(): void;
37
37
  }
38
- export {};
38
+ export {};
@@ -1,46 +1,40 @@
1
- import type { Node } from '../types/graph-element';
1
+ import { NodeWithClientPosition } from "../types/graph-element.js";
2
2
  /**
3
3
  * An object specifying the required callback functions for certain actions
4
4
  */
5
5
  export interface ExternalCallbacks {
6
- /** Triggered when a layout is done moving. */
7
- onLayoutDone?: () => void;
8
- /**
9
- * Triggered on each step of a layout.
10
- * Node `x` and `y` are client/screen coordinates relative to the canvas.
11
- *
12
- * @note In the next major release, `x` and `y` become layout coordinates and
13
- * screen coordinates move to a `clientPosition` field.
14
- */
15
- onLayoutStep?: (p: Node[]) => void;
16
- /** Triggered when NVL throws an error after initialization. */
17
- onError?: (error: Error) => void;
18
- /** Triggered when NVL is initialized. */
19
- onInitialization?: () => void;
20
- /** Triggered when a asynchronous layout calculation starts/stops. */
21
- onLayoutComputing?: (isComputing: boolean) => void;
22
- /**
23
- * Triggered when the WebGL context is lost.
24
- * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/webglcontextlost_event}
25
- */
26
- onWebGLContextLost?: (webGLContextEvent: WebGLContextEvent) => void;
27
- /** Triggered when a zoom transition (e.g. {@link NVL.fit} or {@link NVL.resetZoom}) function is done. */
28
- onZoomTransitionDone?: () => void;
29
- /**
30
- * Triggered when NVL is restarted.
31
- */
32
- restart?: () => void;
6
+ /** Triggered when a layout is done moving. */
7
+ onLayoutDone?: () => void;
8
+ /** Triggered on each step of a layout. */
9
+ onLayoutStep?: (p: NodeWithClientPosition[]) => void;
10
+ /** Triggered when NVL throws an error after initialization. */
11
+ onError?: (error: Error) => void;
12
+ /** Triggered when NVL is initialized. */
13
+ onInitialization?: () => void;
14
+ /** Triggered when a asynchronous layout calculation starts/stops. */
15
+ onLayoutComputing?: (isComputing: boolean) => void;
16
+ /**
17
+ * Triggered when the WebGL context is lost.
18
+ * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/webglcontextlost_event}
19
+ */
20
+ onWebGLContextLost?: (webGLContextEvent: WebGLContextEvent) => void;
21
+ /** Triggered when a zoom transition (e.g. {@link NVL.fit} or {@link NVL.resetZoom}) function is done. */
22
+ onZoomTransitionDone?: () => void;
23
+ /**
24
+ * Triggered when NVL is restarted.
25
+ */
26
+ restart?: () => void;
33
27
  }
34
28
  export declare const isExternalCallback: (callback: unknown) => callback is keyof ExternalCallbacks;
35
29
  export default class ExternalCallbackHandler {
36
- callbacks: ExternalCallbacks;
37
- constructor(externalCallbacks?: ExternalCallbacks);
38
- onInitialization(): void;
39
- onZoomTransitionDone(): void;
40
- onLayoutDone(): void;
41
- onLayoutStep(p: Node[]): void;
42
- onLayoutComputing(isComputing: boolean): void;
43
- onError(error: Error): void;
44
- onWebGLContextLost(webGLContextEvent: WebGLContextEvent): void;
45
- private isValidFunction;
46
- }
30
+ callbacks: ExternalCallbacks;
31
+ constructor(externalCallbacks?: ExternalCallbacks);
32
+ onInitialization(): void;
33
+ onZoomTransitionDone(): void;
34
+ onLayoutDone(): void;
35
+ onLayoutStep(p: NodeWithClientPosition[]): void;
36
+ onLayoutComputing(isComputing: boolean): void;
37
+ onError(error: Error): void;
38
+ onWebGLContextLost(webGLContextEvent: WebGLContextEvent): void;
39
+ private isValidFunction;
40
+ }