@neo4j-nvl/base 2.0.0-c8e499dc → 2.0.0-ec6fdba7

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 (227) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/base.mjs +1062 -1058
  3. package/dist/types/index.d.ts +382 -385
  4. package/dist/types/layouts/animatedlayout/AnimatedLayout.d.ts +23 -23
  5. package/dist/types/layouts/animatedlayout/animationUtils.d.ts +3 -3
  6. package/dist/types/layouts/circularLayout/CircularLayout.d.ts +14 -14
  7. package/dist/types/layouts/d3forcelayout/circularLayout.d.ts +4 -4
  8. package/dist/types/layouts/d3forcelayout/constants.d.ts +3 -3
  9. package/dist/types/layouts/d3forcelayout/d3ForceLayout.d.ts +31 -31
  10. package/dist/types/layouts/d3forcelayout/types.d.ts +7 -7
  11. package/dist/types/layouts/forcedirectedlayout/PhysLayout.d.ts +261 -261
  12. package/dist/types/layouts/forcedirectedlayout/clustering/ClusterByMerger.d.ts +52 -52
  13. package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.d.ts +49 -49
  14. package/dist/types/layouts/forcedirectedlayout/clustering/clustering-utils.d.ts +35 -35
  15. package/dist/types/layouts/forcedirectedlayout/clustering/types.d.ts +39 -39
  16. package/dist/types/layouts/forcedirectedlayout/glwrapper.d.ts +3 -3
  17. package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-fragment.d.ts +1 -1
  18. package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-repulsive-fragment.d.ts +1 -1
  19. package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-update-fragment.d.ts +1 -1
  20. package/dist/types/layouts/forcedirectedlayout/shaders/sim-vertex.d.ts +1 -1
  21. package/dist/types/layouts/freeLayout/FreeLayout.d.ts +23 -23
  22. package/dist/types/layouts/gridLayout/GridLayout.d.ts +26 -26
  23. package/dist/types/layouts/hierarchicallayout/HierarchicalLayout.d.ts +28 -28
  24. package/dist/types/layouts/hierarchicallayout/constants.d.ts +2 -2
  25. package/dist/types/modules/CallbackHelper.d.ts +23 -23
  26. package/dist/types/modules/ExternalCallbackHandler.d.ts +33 -33
  27. package/dist/types/modules/NvlController.d.ts +212 -209
  28. package/dist/types/modules/Shader.d.ts +17 -17
  29. package/dist/types/modules/ZoomTransitionHandler.d.ts +24 -24
  30. package/dist/types/modules/dataset.d.ts +24 -24
  31. package/dist/types/modules/logging.d.ts +4 -4
  32. package/dist/types/modules/state/constants.d.ts +2 -2
  33. package/dist/types/modules/state/state.d.ts +2 -2
  34. package/dist/types/modules/state/types.d.ts +296 -288
  35. package/dist/types/modules/state/utils.d.ts +36 -36
  36. package/dist/types/renderers/ClusterOverlay.d.ts +67 -67
  37. package/dist/types/renderers/domrenderer/BaseRenderer.d.ts +69 -69
  38. package/dist/types/renderers/domrenderer/canvasrenderer/Animation.d.ts +57 -57
  39. package/dist/types/renderers/domrenderer/canvasrenderer/AnimationHandler.d.ts +65 -65
  40. package/dist/types/renderers/domrenderer/canvasrenderer/CanvasRenderer.d.ts +84 -85
  41. package/dist/types/renderers/domrenderer/canvasrenderer/arrowDrawing.d.ts +31 -31
  42. package/dist/types/renderers/domrenderer/canvasrenderer/nodeDrawing.d.ts +32 -32
  43. package/dist/types/renderers/domrenderer/shared/ImageCache.d.ts +16 -16
  44. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundle.d.ts +89 -89
  45. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundler.d.ts +42 -42
  46. package/dist/types/renderers/domrenderer/shared/arrows/arrows.d.ts +49 -49
  47. package/dist/types/renderers/domrenderer/shared/arrows/constants.d.ts +4 -4
  48. package/dist/types/renderers/domrenderer/shared/nodes/nodes.d.ts +21 -21
  49. package/dist/types/renderers/domrenderer/shared/types.d.ts +29 -29
  50. package/dist/types/renderers/domrenderer/shared/util.d.ts +4 -4
  51. package/dist/types/renderers/domrenderer/shared/vectorUtils.d.ts +10 -10
  52. package/dist/types/renderers/domrenderer/shared/wordwrap.d.ts +10 -10
  53. package/dist/types/renderers/domrenderer/svgrenderer/SvgRenderer.d.ts +18 -19
  54. package/dist/types/renderers/domrenderer/svgrenderer/arrowDrawing.d.ts +15 -15
  55. package/dist/types/renderers/domrenderer/svgrenderer/nodeDrawing.d.ts +4 -4
  56. package/dist/types/renderers/domrenderer/svgrenderer/svgUtils.d.ts +21 -21
  57. package/dist/types/renderers/webglrenderer/Controller.d.ts +83 -82
  58. package/dist/types/renderers/webglrenderer/IconLayerRegistry.d.ts +8 -8
  59. package/dist/types/renderers/webglrenderer/Renderer.d.ts +89 -89
  60. package/dist/types/renderers/webglrenderer/node-animation-fragment.d.ts +1 -1
  61. package/dist/types/renderers/webglrenderer/node-animation-vertex.d.ts +1 -1
  62. package/dist/types/renderers/webglrenderer/node-fragment-point.d.ts +1 -1
  63. package/dist/types/renderers/webglrenderer/node-vertex-point.d.ts +1 -1
  64. package/dist/types/renderers/webglrenderer/rel-fragment-line.d.ts +1 -1
  65. package/dist/types/renderers/webglrenderer/rel-glsl-utils.d.ts +1 -1
  66. package/dist/types/renderers/webglrenderer/rel-vertex-arrow.d.ts +1 -1
  67. package/dist/types/renderers/webglrenderer/rel-vertex-line.d.ts +1 -1
  68. package/dist/types/renderers/webglrenderer/viewport-box-fragment.d.ts +1 -1
  69. package/dist/types/renderers/webglrenderer/viewport-box-vertex.d.ts +1 -1
  70. package/dist/types/types/graph-element.d.ts +103 -103
  71. package/dist/types/types/nvl-window-functions.d.ts +12 -13
  72. package/dist/types/types/utils.d.ts +1 -1
  73. package/dist/types/utils/ariaUtils.d.ts +2 -2
  74. package/dist/types/utils/canvasManagement.d.ts +1 -1
  75. package/dist/types/utils/circularUtils.d.ts +2 -2
  76. package/dist/types/utils/clusterGeometry.d.ts +3 -3
  77. package/dist/types/utils/clusterHitRegions.d.ts +12 -12
  78. package/dist/types/utils/colorUtils.d.ts +2 -2
  79. package/dist/types/utils/constants.d.ts +6 -6
  80. package/dist/types/utils/errors.d.ts +6 -6
  81. package/dist/types/utils/geometry.d.ts +48 -48
  82. package/dist/types/utils/graphObjectUtils.d.ts +9 -9
  83. package/dist/types/utils/hitTest.d.ts +47 -47
  84. package/dist/types/utils/jsDriverResultTransformer.d.ts +16 -16
  85. package/dist/types/utils/layoutSeeding.d.ts +2 -2
  86. package/dist/types/utils/mouseUtils.d.ts +5 -5
  87. package/dist/types/utils/segmentAnalytics.d.ts +42 -42
  88. package/dist/types/utils/webWorkerUtils.d.ts +1 -1
  89. package/dist/types/utils/zoomFunctions.d.ts +16 -15
  90. package/package.json +12 -10
  91. package/skills/neo4j-nvl-skill/SKILL.md +238 -398
  92. package/skills/neo4j-nvl-skill/references/api/base/classes/NVL.md +977 -0
  93. package/skills/neo4j-nvl-skill/references/api/base/functions/getZoomTargetForNodePositions.md +37 -0
  94. package/skills/neo4j-nvl-skill/references/api/base/index.md +71 -0
  95. package/skills/neo4j-nvl-skill/references/api/base/interfaces/CircularOptions.md +11 -0
  96. package/skills/neo4j-nvl-skill/references/api/base/interfaces/ClusteringOptions.md +14 -0
  97. package/skills/neo4j-nvl-skill/references/api/base/interfaces/ExternalCallbacks.md +18 -0
  98. package/skills/neo4j-nvl-skill/references/api/base/interfaces/ForceDirectedOptions.md +12 -0
  99. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HierarchicalOptions.md +13 -0
  100. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetCluster.md +13 -0
  101. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetNode.md +16 -0
  102. package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetRelationship.md +15 -0
  103. package/skills/neo4j-nvl-skill/references/api/base/interfaces/Node.md +32 -0
  104. package/skills/neo4j-nvl-skill/references/api/base/interfaces/NvlMouseEvent.md +16 -0
  105. package/skills/neo4j-nvl-skill/references/api/base/interfaces/NvlOptions.md +38 -0
  106. package/skills/neo4j-nvl-skill/references/api/base/interfaces/Point.md +12 -0
  107. package/skills/neo4j-nvl-skill/references/api/base/interfaces/Relationship.md +32 -0
  108. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/CanvasRendererType.md +14 -0
  109. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Cluster.md +20 -0
  110. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ClusterByFn.md +20 -0
  111. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ClusterId.md +10 -0
  112. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/HitTargets.md +22 -0
  113. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/HitTestTarget.md +7 -0
  114. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Layout.md +15 -0
  115. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/LayoutOptions.md +12 -0
  116. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/NodeWithClientPosition.md +18 -0
  117. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/PartialNode.md +17 -0
  118. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/PartialRelationship.md +17 -0
  119. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Renderer.md +9 -0
  120. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/StyledCaption.md +21 -0
  121. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/WebGLRendererType.md +14 -0
  122. package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ZoomOptions.md +25 -0
  123. package/skills/neo4j-nvl-skill/references/api/base/variables/CircularLayoutType.md +11 -0
  124. package/skills/neo4j-nvl-skill/references/api/base/variables/ForceDirectedLayoutType.md +9 -0
  125. package/skills/neo4j-nvl-skill/references/api/base/variables/FreeLayoutType.md +9 -0
  126. package/skills/neo4j-nvl-skill/references/api/base/variables/GridLayoutType.md +9 -0
  127. package/skills/neo4j-nvl-skill/references/api/base/variables/HierarchicalLayoutType.md +9 -0
  128. package/skills/neo4j-nvl-skill/references/api/base/variables/d3ForceLayoutType.md +9 -0
  129. package/skills/neo4j-nvl-skill/references/api/base/variables/nvlResultTransformer.md +38 -0
  130. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/BoxSelectInteraction.md +163 -0
  131. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/ClickInteraction.md +163 -0
  132. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/DragNodeInteraction.md +164 -0
  133. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/HoverInteraction.md +160 -0
  134. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/KeyboardInteraction.md +185 -0
  135. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/LassoInteraction.md +163 -0
  136. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/PanInteraction.md +196 -0
  137. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/ZoomInteraction.md +164 -0
  138. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/index.md +37 -0
  139. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/BoxSelectInteractionCallbacks.md +19 -0
  140. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/BoxSelectInteractionOptions.md +17 -0
  141. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ClickInteractionCallbacks.md +39 -0
  142. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ClickInteractionOptions.md +17 -0
  143. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/DragNodeInteractionCallbacks.md +21 -0
  144. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/DrawInteractionOptions.md +22 -0
  145. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/HoverInteractionCallbacks.md +17 -0
  146. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/HoverInteractionOptions.md +17 -0
  147. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/KeyboardInteractionCallbacks.md +35 -0
  148. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/KeyboardInteractionOptions.md +55 -0
  149. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/LassoInteractionCallbacks.md +19 -0
  150. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/LassoInteractionOptions.md +17 -0
  151. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/PanInteractionCallbacks.md +17 -0
  152. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/PanInteractionOptions.md +19 -0
  153. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ZoomInteractionCallbacks.md +17 -0
  154. package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ZoomInteractionOptions.md +17 -0
  155. package/skills/neo4j-nvl-skill/references/api/react/functions/StaticPictureWrapper.md +35 -0
  156. package/skills/neo4j-nvl-skill/references/api/react/index.md +34 -0
  157. package/skills/neo4j-nvl-skill/references/api/react/interfaces/BasicReactWrapperProps.md +24 -0
  158. package/skills/neo4j-nvl-skill/references/api/react/interfaces/InteractiveNvlWrapperProps.md +27 -0
  159. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/InteractionOptions.md +10 -0
  160. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/KeyboardEvent.md +7 -0
  161. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/KeyboardEventCallbacks.md +10 -0
  162. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/MouseEvent.md +10 -0
  163. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/MouseEventCallbacks.md +10 -0
  164. package/skills/neo4j-nvl-skill/references/api/react/type-aliases/StaticPictureWrapperProps.md +27 -0
  165. package/skills/neo4j-nvl-skill/references/api/react/variables/BasicNvlWrapper.md +50 -0
  166. package/skills/neo4j-nvl-skill/references/api/react/variables/InteractiveNvlWrapper.md +17 -0
  167. package/skills/neo4j-nvl-skill/references/clustering.md +87 -0
  168. package/skills/neo4j-nvl-skill/references/data-from-neo4j.md +67 -0
  169. package/skills/neo4j-nvl-skill/references/labels-and-overlays.md +76 -0
  170. package/skills/neo4j-nvl-skill/references/layouts-and-positions.md +65 -0
  171. package/skills/neo4j-nvl-skill/references/lifecycle-and-updates.md +65 -0
  172. package/skills/neo4j-nvl-skill/references/migrating-1x-to-2.md +50 -0
  173. package/skills/neo4j-nvl-skill/references/react-wrappers.md +88 -0
  174. package/skills/neo4j-nvl-skill/references/verifying-nvl-apps.md +52 -0
  175. package/skills/neo4j-nvl-skill/references/vite-and-bundlers.md +62 -0
  176. package/dist/types/layouts/animatedlayout/AnimatedLayout.test.d.ts +0 -1
  177. package/dist/types/layouts/animatedlayout/animationUtils.test.d.ts +0 -1
  178. package/dist/types/layouts/d3forcelayout/__mocks__/d3ForceLayout.d.ts +0 -10
  179. package/dist/types/layouts/d3forcelayout/circularLayout.test.d.ts +0 -1
  180. package/dist/types/layouts/d3forcelayout/d3ForceLayout.test.d.ts +0 -1
  181. package/dist/types/layouts/forcedirectedlayout/PhysLayout.test.d.ts +0 -1
  182. package/dist/types/layouts/forcedirectedlayout/clustering/ClusterByMerger.test.d.ts +0 -1
  183. package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.bench.d.ts +0 -1
  184. package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.test.d.ts +0 -1
  185. package/dist/types/layouts/forcedirectedlayout/clustering/clustering-utils.test.d.ts +0 -1
  186. package/dist/types/modules/NvlController.test.d.ts +0 -1
  187. package/dist/types/modules/ZoomTransitionHandler.test.d.ts +0 -1
  188. package/dist/types/modules/dataset.test.d.ts +0 -1
  189. package/dist/types/modules/state/state.test.d.ts +0 -1
  190. package/dist/types/modules/state/utils.test.d.ts +0 -1
  191. package/dist/types/renderers/ClusterOverlay.test.d.ts +0 -1
  192. package/dist/types/renderers/domrenderer/BaseRenderer.test.d.ts +0 -1
  193. package/dist/types/renderers/domrenderer/canvasrenderer/Animation.test.d.ts +0 -1
  194. package/dist/types/renderers/domrenderer/canvasrenderer/CanvasRenderer.test.d.ts +0 -1
  195. package/dist/types/renderers/domrenderer/canvasrenderer/arrowDrawing.test.d.ts +0 -1
  196. package/dist/types/renderers/domrenderer/canvasrenderer/nodeDrawing.test.d.ts +0 -1
  197. package/dist/types/renderers/domrenderer/shared/ImageCache.test.d.ts +0 -1
  198. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundle.test.d.ts +0 -1
  199. package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundler.test.d.ts +0 -1
  200. package/dist/types/renderers/domrenderer/shared/arrows/arrows.test.d.ts +0 -1
  201. package/dist/types/renderers/domrenderer/shared/nodes/nodes.test.d.ts +0 -1
  202. package/dist/types/renderers/domrenderer/shared/util.test.d.ts +0 -1
  203. package/dist/types/renderers/domrenderer/shared/wordwrap.test.d.ts +0 -1
  204. package/dist/types/renderers/domrenderer/svgrenderer/SvgRenderer.test.d.ts +0 -1
  205. package/dist/types/renderers/domrenderer/svgrenderer/arrowDrawing.test.d.ts +0 -1
  206. package/dist/types/renderers/domrenderer/svgrenderer/nodeDrawing.test.d.ts +0 -1
  207. package/dist/types/renderers/domrenderer/svgrenderer/svgUtils.test.d.ts +0 -1
  208. package/dist/types/renderers/webglrenderer/Controller.test.d.ts +0 -1
  209. package/dist/types/renderers/webglrenderer/IconLayerRegistry.test.d.ts +0 -1
  210. package/dist/types/renderers/webglrenderer/Renderer.test.d.ts +0 -1
  211. package/dist/types/utils/ariaUtils.test.d.ts +0 -1
  212. package/dist/types/utils/canvasManagement.test.d.ts +0 -1
  213. package/dist/types/utils/circularUtils.test.d.ts +0 -1
  214. package/dist/types/utils/clusterGeometry.test.d.ts +0 -1
  215. package/dist/types/utils/clusterHitRegions.test.d.ts +0 -1
  216. package/dist/types/utils/colorUtils.test.d.ts +0 -1
  217. package/dist/types/utils/errors.test.d.ts +0 -1
  218. package/dist/types/utils/geometry.test.d.ts +0 -1
  219. package/dist/types/utils/graphObjectUtils.test.d.ts +0 -1
  220. package/dist/types/utils/hitTest.test.d.ts +0 -1
  221. package/dist/types/utils/jsDriverResultTransformer.test.d.ts +0 -1
  222. package/dist/types/utils/layoutSeeding.test.d.ts +0 -1
  223. package/dist/types/utils/mouseUtils.test.d.ts +0 -1
  224. package/dist/types/utils/webWorkerUtils.test.d.ts +0 -1
  225. package/dist/types/utils/zoomFunctions.test.d.ts +0 -1
  226. package/skills/neo4j-nvl-skill/references/api-surface.md +0 -596
  227. package/skills/neo4j-nvl-skill/references/troubleshooting.md +0 -317
@@ -1,5 +1,5 @@
1
- import type { Node, Relationship } from '../../../types/graph-element';
2
- import type { CoarsenedGraph, SolarRelationship } from './types';
1
+ import { Node, Relationship } from "../../../types/graph-element.js";
2
+ import { CoarsenedGraph, SolarRelationship } from "./types.js";
3
3
  /**
4
4
  * Coarsens a graph into a hierarchy of "solar systems", following the sun/planet/moon partitioning scheme from
5
5
  * Hachul and Jünger, "Drawing Large Graphs with a Potential-Field-Based Multilevel Algorithm".
@@ -7,50 +7,50 @@ import type { CoarsenedGraph, SolarRelationship } from './types';
7
7
  * @see {@link https://kups.ub.uni-koeln.de/1409/ Drawing Large Graphs with a Potential-Field-Based Multilevel Algorithm}
8
8
  */
9
9
  export default class SolarMerger {
10
- graph: {
11
- nodes: Node[];
12
- relationships: number[][];
13
- idToRel: Record<string, SolarRelationship>;
14
- };
15
- subGraphs: CoarsenedGraph[];
16
- sunMap: Record<string, string>;
17
- memberMap: Record<string, string[]>;
18
- relIdMap: string[][];
19
- nodeSortMap?: Record<number, number>;
20
- constructor(inputGraph: {
21
- nodes: Node[];
22
- rels: Relationship[];
23
- }, nodeIdToIndex: Record<string, number>);
24
- /**
25
- * Repeatedly coarsens the graph, one solar-system level at a time, until it has at most `targetSize` nodes or
26
- * cannot be coarsened further. Each level's result is recorded in {@link SolarMerger.subGraphs}.
27
- *
28
- * @param targetSize - The node count to coarsen down to.
29
- * @returns The coarsest graph reached.
30
- */
31
- coarsenTo(targetSize: number): CoarsenedGraph;
32
- /**
33
- * Repeatedly coarsens the graph by exactly `levelToCoarsenBy` solar-system levels, regardless of the resulting
34
- * node count. Each level's result is recorded in {@link SolarMerger.subGraphs}.
35
- *
36
- * @param levelToCoarsenBy - The number of levels to coarsen by.
37
- * @returns The coarsest graph reached.
38
- */
39
- coarsenBy(levelToCoarsenBy: number): CoarsenedGraph;
40
- /**
41
- * Partitions `graph` into one level of solar systems and collapses each into a single node, producing the next
42
- * coarser graph.
43
- *
44
- * Follows the three-step solar-system construction from Hachul and Jünger, "Drawing Large Graphs with a
45
- * Potential-Field-Based Multilevel Algorithm" (create suns, label their neighbors as planets, assign
46
- * remaining nodes as moons of their nearest planet).
47
- *
48
- * @param graph - The graph to coarsen by one level.
49
- * @param firstIteration - Whether `graph` is the original, uncoarsened input graph.
50
- * @returns The collapsed graph (`output`), the input graph with nodes reordered by solar system (`sortedInput`),
51
- * and a map from the input graph's node ids to their position in `sortedInput` (`nodeSortMap`).
52
- * @see {@link https://kups.ub.uni-koeln.de/1409/ Drawing Large Graphs with a Potential-Field-Based Multilevel Algorithm}
53
- *
54
- */
55
- private coarsen;
56
- }
10
+ graph: {
11
+ nodes: Node[];
12
+ relationships: number[][];
13
+ idToRel: Record<string, SolarRelationship>;
14
+ };
15
+ subGraphs: CoarsenedGraph[];
16
+ sunMap: Record<string, string>;
17
+ memberMap: Record<string, string[]>;
18
+ relIdMap: string[][];
19
+ nodeSortMap?: Record<number, number>;
20
+ constructor(inputGraph: {
21
+ nodes: Node[];
22
+ rels: Relationship[];
23
+ }, nodeIdToIndex: Record<string, number>);
24
+ /**
25
+ * Repeatedly coarsens the graph, one solar-system level at a time, until it has at most `targetSize` nodes or
26
+ * cannot be coarsened further. Each level's result is recorded in {@link SolarMerger.subGraphs}.
27
+ *
28
+ * @param targetSize - The node count to coarsen down to.
29
+ * @returns The coarsest graph reached.
30
+ */
31
+ coarsenTo(targetSize: number): CoarsenedGraph;
32
+ /**
33
+ * Repeatedly coarsens the graph by exactly `levelToCoarsenBy` solar-system levels, regardless of the resulting
34
+ * node count. Each level's result is recorded in {@link SolarMerger.subGraphs}.
35
+ *
36
+ * @param levelToCoarsenBy - The number of levels to coarsen by.
37
+ * @returns The coarsest graph reached.
38
+ */
39
+ coarsenBy(levelToCoarsenBy: number): CoarsenedGraph;
40
+ /**
41
+ * Partitions `graph` into one level of solar systems and collapses each into a single node, producing the next
42
+ * coarser graph.
43
+ *
44
+ * Follows the three-step solar-system construction from Hachul and Jünger, "Drawing Large Graphs with a
45
+ * Potential-Field-Based Multilevel Algorithm" (create suns, label their neighbors as planets, assign
46
+ * remaining nodes as moons of their nearest planet).
47
+ *
48
+ * @param graph - The graph to coarsen by one level.
49
+ * @param firstIteration - Whether `graph` is the original, uncoarsened input graph.
50
+ * @returns The collapsed graph (`output`), the input graph with nodes reordered by solar system (`sortedInput`),
51
+ * and a map from the input graph's node ids to their position in `sortedInput` (`nodeSortMap`).
52
+ * @see {@link https://kups.ub.uni-koeln.de/1409/ Drawing Large Graphs with a Potential-Field-Based Multilevel Algorithm}
53
+ *
54
+ */
55
+ private coarsen;
56
+ }
@@ -1,5 +1,5 @@
1
- import type { Node, Relationship } from '../../../types/graph-element';
2
- import type { CoarsenedGraph, PartialPlanet, PartialSun, SolarNode, SolarRelationship, Sun } from './types';
1
+ import { Node, Relationship } from "../../../types/graph-element.js";
2
+ import { CoarsenedGraph, PartialPlanet, PartialSun, SolarNode, SolarRelationship, Sun } from "./types.js";
3
3
  /**
4
4
  * Gets the original node ids belonging to a sun and its planets and moons.
5
5
  * @param sun - The sun to get the original node ids for.
@@ -41,13 +41,13 @@ export declare const isHub: (index: number, relationships: number[][], hubDegree
41
41
  * @returns Parsed adjacency data for coarsening.
42
42
  */
43
43
  export declare const buildAdjacencyGraph: (inputGraph: {
44
- nodes: Node[];
45
- rels: Relationship[];
44
+ nodes: Node[];
45
+ rels: Relationship[];
46
46
  }, nodeIdToIndex: Record<string, number>) => {
47
- nodes: Node[];
48
- relationships: number[][];
49
- relIdMap: string[][];
50
- idToRel: Record<string, SolarRelationship>;
47
+ nodes: Node[];
48
+ relationships: number[][];
49
+ relIdMap: string[][];
50
+ idToRel: Record<string, SolarRelationship>;
51
51
  };
52
52
  /**
53
53
  * Wraps input nodes as {@link SolarNode}s indexed by their original position.
@@ -59,12 +59,12 @@ export declare const createSolarNodesFromInput: (nodes: Node[]) => SolarNode[];
59
59
  * Creates a Planet with an unsettled parent link (caller must attach via {@link attachPlanetsToSun}).
60
60
  */
61
61
  export declare const createPlanet: (params: {
62
- id: number;
63
- sunId: number;
64
- weight: number;
65
- originalId: string;
66
- finestIndex?: number;
67
- size?: () => number;
62
+ id: number;
63
+ sunId: number;
64
+ weight: number;
65
+ originalId: string;
66
+ finestIndex?: number;
67
+ size?: () => number;
68
68
  }) => PartialPlanet;
69
69
  /**
70
70
  * Finalises a sun's planets list, weight/size/children closures, and back-links parent on each planet.
@@ -87,10 +87,10 @@ export declare const attachPlanetsToSun: (partialSun: PartialSun, planets: Parti
87
87
  * @returns A sun under construction, ready for {@link attachPlanetsToSun} (separate from the finest SolarNode).
88
88
  */
89
89
  export declare const createSynthClusterSun: (params: {
90
- clusterId: string | number;
91
- solarNodesWithSynths: SolarNode[];
92
- relationshipsWithSynths: number[][];
93
- relIdMapWithSynths: string[][];
90
+ clusterId: string | number;
91
+ solarNodesWithSynths: SolarNode[];
92
+ relationshipsWithSynths: number[][];
93
+ relIdMapWithSynths: string[][];
94
94
  }) => PartialSun;
95
95
  /**
96
96
  * Rolls node-level adjacency up to sun-level adjacency between clusters.
@@ -111,22 +111,22 @@ export declare const rollupInterSunRelationships: (relationships: number[][], no
111
111
  * @returns {{ relationships: number[][]; relIdMap: string[][] }} Remapped adjacency data.
112
112
  */
113
113
  export declare const remapAdjacencyWithSortMap: (relationships: number[][], nodeSortMap: Record<number, number>, relIdMap: string[][], remapRelIds?: boolean) => {
114
- relationships: number[][];
115
- relIdMap: string[][];
114
+ relationships: number[][];
115
+ relIdMap: string[][];
116
116
  };
117
117
  /** Input nodes that may receive a layout `finestIndex` during sorting (plain Node on first pass). */
118
118
  type SourceNode = (Node | SolarNode) & {
119
- finestIndex?: number;
119
+ finestIndex?: number;
120
120
  };
121
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;
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
130
  };
131
131
  /**
132
132
  * Sorts suns, planets, and optionally moons into shader layout order and builds the finest subgraph.
@@ -134,10 +134,10 @@ export type SortHierarchyOptions = {
134
134
  * @returns The finest subgraph, sort map, member-sun maps, and remapped relationship ids.
135
135
  */
136
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[][];
137
+ sortedInput: CoarsenedGraph;
138
+ nodeSortMap: Record<number, number>;
139
+ sunMap: Record<string, string>;
140
+ memberMap: Record<string, string[]>;
141
+ relIdMap: string[][];
142
142
  };
143
- export {};
143
+ export {};
@@ -1,59 +1,59 @@
1
- import type { Node } from '../../../types/graph-element';
1
+ import { Node } from "../../../types/graph-element.js";
2
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;
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
17
  }
18
18
  export interface SolarRelationship {
19
- id: string;
20
- from: string;
21
- to: string;
19
+ id: string;
20
+ from: string;
21
+ to: string;
22
22
  }
23
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[][];
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
32
  }
33
33
  export interface Sun extends SolarNode {
34
- planets: Planet[];
35
- size: () => number;
36
- children: () => Planet[];
37
- previousIndex: number;
34
+ planets: Planet[];
35
+ size: () => number;
36
+ children: () => Planet[];
37
+ previousIndex: number;
38
38
  }
39
39
  /** Sun fields known before {@link attachPlanetsToSun} fills planets/size/children/weight. */
40
40
  export type PartialSun = Omit<Sun, 'planets' | 'size' | 'children' | 'previousIndex' | 'weight'>;
41
41
  export interface Planet extends SolarNode {
42
- parent: Sun;
43
- sunId: number;
44
- moons: Moon[];
45
- size: () => number;
46
- children: () => Moon[];
42
+ parent: Sun;
43
+ sunId: number;
44
+ moons: Moon[];
45
+ size: () => number;
46
+ children: () => Moon[];
47
47
  }
48
48
  /** Planet fields known before {@link attachPlanetsToSun} sets parent. */
49
49
  export type PartialPlanet = Omit<Planet, 'parent'>;
50
50
  export interface Moon extends SolarNode {
51
- parent: Planet;
52
- sunId: number;
53
- size: () => number;
51
+ parent: Planet;
52
+ sunId: number;
53
+ size: () => number;
54
54
  }
55
55
  export type Celestial = Sun | Planet | Moon;
56
56
  export declare const isSolarNode: (node: SolarNode | Node) => node is SolarNode;
57
57
  export declare const isSun: (node: SolarNode | Celestial) => node is Sun;
58
58
  export declare const isPlanet: (node: SolarNode | Celestial) => node is Planet;
59
- export declare const isMoon: (node: SolarNode | Celestial) => node is Moon;
59
+ export declare const isMoon: (node: SolarNode | Celestial) => node is Moon;
@@ -1,4 +1,4 @@
1
1
  export default class GlWrapper {
2
- constructor(gl: RenderingContext);
3
- private wrapFunction;
4
- }
2
+ constructor(gl: RenderingContext);
3
+ private wrapFunction;
4
+ }
@@ -1,2 +1,2 @@
1
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 _default;
2
+ export { _default as default };
@@ -1,2 +1,2 @@
1
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 _default;
2
+ export { _default as default };
@@ -1,2 +1,2 @@
1
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 _default;
2
+ export { _default as default };
@@ -1,2 +1,2 @@
1
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 _default;
2
+ export { _default as default };
@@ -1,24 +1,24 @@
1
- import type { NvlState } from '../../modules/state/types';
2
- import type { Node, PartialNode } 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: 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
- }
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,28 +1,28 @@
1
- import type { NvlState } from '../../modules/state/types';
2
- import type { Node, PartialNode } 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: 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
- }
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,32 +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 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;
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;
31
31
  }
32
- 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 {};