@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,596 +0,0 @@
1
- # NVL — API Surface Reference
2
-
3
- Source: `@neo4j-nvl/base@2.0`, `@neo4j-nvl/interaction-handlers@2.0`, `@neo4j-nvl/react@2.0`.
4
-
5
- ## Packages
6
-
7
- | Package | Main export | Notes |
8
- |---|---|---|
9
- | `@neo4j-nvl/base` | `NVL` (also default), types, `nvlResultTransformer`, layout constants | Framework-agnostic core |
10
- | `@neo4j-nvl/interaction-handlers` | `ZoomInteraction`, `PanInteraction`, `ClickInteraction`, `HoverInteraction`, `DragNodeInteraction`, `BoxSelectInteraction`, `LassoInteraction`, `KeyboardInteraction` | Compose onto an `NVL` instance |
11
- | `@neo4j-nvl/react` | `InteractiveNvlWrapper`, `BasicNvlWrapper`, `StaticPictureWrapper` | React 19 |
12
- | `@neo4j-nvl/layout-workers` | (transitive) | Force-directed + hierarchical workers |
13
-
14
- ---
15
-
16
- ## `NVL` Class
17
-
18
- ### Constructor
19
-
20
- ```typescript
21
- new NVL(
22
- frame: HTMLElement,
23
- nvlNodes?: Node[], // default []
24
- nvlRels?: Relationship[], // default []
25
- options?: NvlOptions, // default {}
26
- callbacks?: ExternalCallbacks // default {}
27
- )
28
- ```
29
-
30
- ### Element CRUD
31
-
32
- | Method | Signature | Purpose |
33
- |---|---|---|
34
- | `addAndUpdateElementsInGraph` | `(nodes: Node[] \| PartialNode[], rels: Relationship[] \| PartialRelationship[]) => void` | Insert new; update existing by id |
35
- | `addElementsToGraph` | `(nodes: Node[], rels: Relationship[]) => void` | Insert only |
36
- | `updateElementsInGraph` | `(nodes: PartialNode[], rels: PartialRelationship[]) => void` | Update existing only; ignores unknown ids |
37
- | `removeNodesWithIds` | `(ids: string[]) => void` | Remove nodes + adjacent relationships |
38
- | `removeRelationshipsWithIds` | `(ids: string[]) => void` | Remove relationships |
39
-
40
- ### Element Read
41
-
42
- | Method | Signature |
43
- |---|---|
44
- | `getNodes` | `() => NodeWithClientPosition[]` |
45
- | `getRelationships` | `() => Relationship[]` |
46
- | `getNodeById` | `(id: string) => Node` |
47
- | `getRelationshipById` | `(id: string) => Relationship` |
48
- | `getPositionById` | `(id: string) => Node` |
49
- | `getNodesOnScreen` | `() => { nodes: Node[]; rels: Relationship[] }` |
50
- | `getNodePositions` | `() => (Node & Point)[]` |
51
- | `setNodePositions` | `(data: Node[], updateLayout?: boolean) => void` |
52
- | `getSelectedNodes` | `() => (Node & Point)[]` |
53
- | `getSelectedRelationships` | `() => Relationship[]` |
54
- | `deselectAll` | `() => void` |
55
-
56
- ### Viewport
57
-
58
- | Method | Signature |
59
- |---|---|
60
- | `fit` | `(nodeIds: string[], zoomOptions?: ZoomOptions) => void` (empty array = fit all) |
61
- | `resetZoom` | `() => void` |
62
- | `setZoom` | `(zoom: number) => void` |
63
- | `setPan` | `(panX: number, panY: number) => void` |
64
- | `setZoomAndPan` | `(zoom: number, panX: number, panY: number) => void` |
65
- | `getScale` | `() => number` |
66
- | `getPan` | `() => Point` |
67
- | `getZoomLimits` | `() => { minZoom: number; maxZoom: number }` |
68
-
69
- ### Layout / Renderer / Pin
70
-
71
- | Method | Signature |
72
- |---|---|
73
- | `setLayout` | `(layout: Layout) => void` |
74
- | `setLayoutOptions` | `(options: LayoutOptions) => void` |
75
- | `isLayoutMoving` | `() => boolean` |
76
- | `setRenderer` | `(renderer: 'canvas' \| 'webgl') => void` |
77
- | `setDisableWebGL` | `(disabled?: boolean) => void` |
78
- | `pinNode` | `(nodeId: string) => void` |
79
- | `unPinNode` | `(nodeIds: string[]) => void` |
80
-
81
- ### Export / Save
82
-
83
- | Method | Signature |
84
- |---|---|
85
- | `saveToFile` | `(opts?: { filename?: string; backgroundColor?: string }) => void` (PNG of current view) |
86
- | `saveFullGraphToLargeFile` | `(opts?: { filename?: string; backgroundColor?: string }) => void` (PNG of full graph) |
87
- | `saveToSvg` | `(opts?: { filename?: string; backgroundColor?: string }) => void` (experimental) |
88
- | `getImageDataUrl` | `(opts?: { backgroundColor?: string }) => string` |
89
- | `getSvgDataUrl` | `(opts?: { backgroundColor?: string }) => Promise<string>` |
90
-
91
- ### Hit Testing
92
-
93
- ```typescript
94
- getHits(
95
- evt: MouseEvent,
96
- targets?: ('node' | 'relationship' | 'cluster')[], // default: all three
97
- hitOptions?: { hitNodeMarginWidth: number } // default 0
98
- ): NvlMouseEvent
99
- ```
100
-
101
- ### Lifecycle / Misc
102
-
103
- | Method | Signature |
104
- |---|---|
105
- | `getCurrentOptions` | `() => NvlOptions` |
106
- | `getContainer` | `() => HTMLElement` |
107
- | `restart` | `(options?: NvlOptions, retainPositions?: boolean) => void` |
108
- | `destroy` | `() => void` |
109
-
110
- ---
111
-
112
- ## Core Types
113
-
114
- ### `Node`
115
-
116
- | Field | Type | Notes |
117
- |---|---|---|
118
- | `id` | `string` | Required; unique across nodes AND relationships |
119
- | `caption` | `string` | Single caption (superseded by `captions`) |
120
- | `captions` | `StyledCaption[]` | Multi-line captions with styles |
121
- | `captionSize` | `number` | Text size |
122
- | `captionAlign` | `'top' \| 'bottom' \| 'center'` | |
123
- | `color` | `string` | Fill color |
124
- | `size` | `number` | Radius |
125
- | `pinned` | `boolean` | Excluded from layout forces |
126
- | `x` / `y` | `number` | Position |
127
- | `selected` | `boolean` | |
128
- | `hovered` | `boolean` | |
129
- | `activated` | `boolean` | |
130
- | `disabled` | `boolean` | |
131
- | `icon` | `string` | URL to image inside node |
132
- | `html` | `HTMLElement` | DOM overlay |
133
- | `overlayIcon` | `{ url: string; position?: number[]; size?: number }` | |
134
-
135
- `getNodes()` and `onLayoutStep` use:
136
-
137
- ```typescript
138
- type NodeWithClientPosition = Node & Point & {
139
- clientPosition: Point
140
- }
141
- ```
142
-
143
- `x` and `y` are canvas/layout coordinates. `clientPosition` is relative to the canvas element.
144
-
145
- ### `Relationship`
146
-
147
- | Field | Type | Notes |
148
- |---|---|---|
149
- | `id` | `string` | Required; unique across nodes AND relationships |
150
- | `from` | `string` | Source node id |
151
- | `to` | `string` | Target node id |
152
- | `type` | `string` | Relationship type label |
153
- | `width` | `number` | |
154
- | `color` | `string` | |
155
- | `caption` / `captions` / `captionSize` / `captionAlign` | (same as Node) | |
156
- | `captionHtml` | `HTMLElement` | DOM overlay on caption |
157
- | `selected` / `hovered` / `disabled` | `boolean` | |
158
-
159
- ### Partial types
160
-
161
- ```typescript
162
- type PartialNode = Partial<Node> & { id: string }
163
- type PartialRelationship = Partial<Relationship> & { id: string }
164
- ```
165
-
166
- ---
167
-
168
- ## `NvlOptions`
169
-
170
- | Field | Type | Default | Notes |
171
- |---|---|---|---|
172
- | `instanceId` | `string` | — | |
173
- | `layout` | `Layout` | `'forceDirected'` | See Layout enum below |
174
- | `layoutOptions` | `LayoutOptions` | — | Layout-specific |
175
- | `layoutTimeLimit` | `number` | — | ms cap for layout iteration |
176
- | `minFps` | `number` | `3` | Minimum presentation target while layout is active; capped to `1..120` |
177
- | `maxFps` | `number` | `30` | Maximum presentation target while layout is active; capped to `1..120` |
178
- | `minZoom` | `number` | `0.075` | |
179
- | `maxZoom` | `number` | `10` | |
180
- | `allowDynamicMinZoom` | `boolean` | `true` | Permits going below `minZoom` to fit |
181
- | `initialZoom` | `number` | — | |
182
- | `panX` / `panY` | `number` | — | |
183
- | `renderer` | `'canvas' \| 'webgl'` | `'canvas'` | WebGL is WebGL2-only and does not render captions |
184
- | `disableWebGL` | `boolean` | `false` | Force-off WebGL even if requested |
185
- | `disableWebWorkers` | `boolean` | `false` | Use synchronous layout fallback |
186
- | `disableTelemetry` | `boolean` | `false` | |
187
- | `disableAria` | `boolean` | `false` | |
188
- | `minimapContainer` | `HTMLElement \| null` | — | |
189
- | `styling` | `StylingOptions` | — | |
190
- | `callbacks` | `ExternalCallbacks` | — | (also passable as 5th constructor arg) |
191
- | `logging` | `{ level: LogLevelDesc }` | — | |
192
-
193
- ### `StylingOptions`
194
-
195
- | Field | Type |
196
- |---|---|
197
- | `defaultNodeColor` | `string` |
198
- | `defaultRelationshipColor` | `string` |
199
- | `nodeDefaultBorderColor` | `string` |
200
- | `selectedBorderColor` | `string` |
201
- | `selectedInnerBorderColor` | `string` |
202
- | `dropShadowColor` | `string` |
203
- | `disabledItemColor` | `string` |
204
- | `disabledItemFontColor` | `string` |
205
- | `overlayLineColor` | `string` |
206
- | `minimapViewportBoxColor` | `string` (deprecated; use `overlayLineColor`) |
207
-
208
- ### Layout enum + constants
209
-
210
- ```typescript
211
- type Layout = 'forceDirected' | 'hierarchical' | 'grid' | 'free' | 'd3Force' | 'circular'
212
-
213
- // Exported constants (string literals):
214
- ForceDirectedLayoutType // 'forceDirected'
215
- HierarchicalLayoutType // 'hierarchical'
216
- GridLayoutType // 'grid'
217
- FreeLayoutType // 'free'
218
- d3ForceLayoutType // 'd3Force'
219
- CircularLayoutType // 'circular'
220
- ```
221
-
222
- ### `LayoutOptions` union
223
-
224
- ```typescript
225
- type LayoutOptions = ForceDirectedOptions | HierarchicalOptions | CircularOptions
226
-
227
- interface ForceDirectedOptions {
228
- seedingMethod?: 'box' | 'circle'
229
- clustering?: ClusteringOptions
230
- }
231
-
232
- type ClusterId = string | number
233
- type ClusterByFn = (nodeId: string) => ClusterId | undefined
234
-
235
- interface ClusteringOptions {
236
- clusterBy?: ClusterByFn
237
- drawOutline?: boolean
238
- drawHalo?: boolean
239
- crossClusterRelationshipMultiplier?: number // experimental, capped to 0..1
240
- }
241
-
242
- interface HierarchicalOptions {
243
- direction?: 'up' | 'down' | 'left' | 'right'
244
- packing?: 'bin' | 'stack'
245
- clusterBy?: ClusterByFn // experimental
246
- }
247
-
248
- interface CircularOptions {
249
- sortFunction?: (nodes: Node[]) => Node[]
250
- }
251
- ```
252
-
253
- ### `ZoomOptions`
254
-
255
- | Field | Type | Purpose |
256
- |---|---|---|
257
- | `noPan` | `boolean` | Zoom without changing pan |
258
- | `outOnly` | `boolean` | Only zoom out to fit |
259
- | `minZoom` | `number` | Override for this op |
260
- | `maxZoom` | `number` | Override for this op |
261
- | `animated` | `boolean` | Animate transition |
262
-
263
- ### Renderer constants
264
-
265
- ```typescript
266
- type Renderer = 'webgl' | 'canvas'
267
-
268
- WebGLRendererType // 'webgl'
269
- CanvasRendererType // 'canvas'
270
- ```
271
-
272
- ### `StyledCaption`
273
-
274
- ```typescript
275
- type StyledCaption = {
276
- styles: string[] // e.g. ['bold','italic']
277
- value: string
278
- key: string
279
- }
280
- ```
281
-
282
- ### `Point`
283
-
284
- ```typescript
285
- type Point = { x: number; y: number }
286
- ```
287
-
288
- ---
289
-
290
- ## `ExternalCallbacks`
291
-
292
- | Callback | Signature |
293
- |---|---|
294
- | `onInitialization` | `() => void` |
295
- | `onLayoutDone` | `() => void` |
296
- | `onLayoutStep` | `(nodes: NodeWithClientPosition[]) => void` |
297
- | `onLayoutComputing` | `(isComputing: boolean) => void` |
298
- | `onError` | `(error: Error) => void` |
299
- | `onWebGLContextLost` | `(event: WebGLContextEvent) => void` |
300
- | `onZoomTransitionDone` | `() => void` |
301
- | `restart` | `() => void` |
302
-
303
- ---
304
-
305
- ## Hit Testing Types
306
-
307
- ```typescript
308
- interface NvlMouseEvent extends MouseEvent {
309
- nvlTargets: HitTargets
310
- }
311
-
312
- type HitTargets = {
313
- nodes: HitTargetNode[]
314
- relationships: HitTargetRelationship[]
315
- clusters: HitTargetCluster[]
316
- }
317
-
318
- interface HitTargetNode {
319
- data: Node
320
- targetCoordinates: Point
321
- pointerCoordinates: Point
322
- distanceVector: Point
323
- distance: number
324
- insideNode: boolean
325
- }
326
-
327
- interface HitTargetRelationship {
328
- data: Relationship
329
- fromTargetCoordinates: Point
330
- toTargetCoordinates: Point
331
- pointerCoordinates: Point
332
- distance: number
333
- }
334
-
335
- type Cluster = {
336
- id: string | number
337
- nodeIds: string[]
338
- }
339
-
340
- interface HitTargetCluster {
341
- data: Cluster
342
- pointerCoordinates: Point
343
- hull: Point[]
344
- }
345
- ```
346
-
347
- ---
348
-
349
- ## `nvlResultTransformer`
350
-
351
- ```typescript
352
- import type { ResultTransformer, EagerResult } from 'neo4j-driver'
353
-
354
- const nvlResultTransformer: ResultTransformer<
355
- EagerResult,
356
- { nodes: Node[]; relationships: Relationship[] }
357
- >
358
- ```
359
-
360
- Usage: `driver.executeQuery(cypher, params, { database: 'neo4j', resultTransformer: nvlResultTransformer })`. Returns deduplicated `{ nodes, relationships }`.
361
-
362
- ---
363
-
364
- ## Named Exports — `@neo4j-nvl/base`
365
-
366
- ```typescript
367
- // values
368
- export {
369
- NVL, // also default export
370
- nvlResultTransformer,
371
- colorMapperFunctions,
372
- CompatibilityError,
373
- drawCircleBand,
374
- getZoomTargetForNodePositions,
375
- ForceDirectedLayoutType,
376
- HierarchicalLayoutType,
377
- GridLayoutType,
378
- FreeLayoutType,
379
- d3ForceLayoutType,
380
- CircularLayoutType
381
- }
382
-
383
- // types
384
- export type {
385
- NvlOptions, Renderer, Node, NodeWithClientPosition, Relationship,
386
- PartialNode, PartialRelationship,
387
- Layout, LayoutOptions, ForceDirectedOptions, ClusteringOptions,
388
- Cluster, ClusterByFn, ClusterId, HierarchicalOptions, CircularOptions,
389
- ExternalCallbacks, HitTargets, HitTargetNode, HitTargetRelationship,
390
- HitTargetCluster, HitTestTarget,
391
- Point, NvlMouseEvent, ZoomOptions, StyledCaption,
392
- WebGLRendererType, CanvasRendererType
393
- }
394
- ```
395
-
396
- ---
397
-
398
- ## Interaction Handlers
399
-
400
- All extend `BaseInteraction<P>`:
401
-
402
- ```typescript
403
- class BaseInteraction<P> {
404
- constructor(nvl: NVL, options?: P)
405
- updateCallback(name: string, callback: ((...args: unknown[]) => void) | boolean): void
406
- removeCallback(name: string): void
407
- destroy(): void
408
- readonly currentOptions: P
409
- }
410
- ```
411
-
412
- Callback semantics: `function` = enable + invoke; `true` = enable as no-op; omitted/removed = disable.
413
-
414
- ### `ZoomInteraction`
415
-
416
- ```typescript
417
- new ZoomInteraction(nvl, options?: { controlledZoom?: boolean })
418
- ```
419
-
420
- | Event | Signature |
421
- |---|---|
422
- | `onZoomAndPan` | `(zoomLevel: number, panX: number, panY: number, event: WheelEvent) => void` |
423
-
424
- ### `PanInteraction`
425
-
426
- ```typescript
427
- new PanInteraction(nvl, options?: { excludeNodeMargin?: boolean; controlledPan?: boolean })
428
- panInteraction.updateTargets(targets: ('node'|'relationship')[], excludeNodeMargin: boolean): void
429
- ```
430
-
431
- | Event | Signature |
432
- |---|---|
433
- | `onPan` | `(panning: { x: number; y: number }, event: MouseEvent) => void` |
434
-
435
- ### `ClickInteraction`
436
-
437
- ```typescript
438
- new ClickInteraction(nvl, options?: { selectOnClick?: boolean })
439
- ```
440
-
441
- | Event | Signature |
442
- |---|---|
443
- | `onNodeClick` | `(node: Node, hits: HitTargets, event: MouseEvent) => void` |
444
- | `onRelationshipClick` | `(rel: Relationship, hits: HitTargets, event: MouseEvent) => void` |
445
- | `onClusterClick` | `(cluster: Cluster, hits: HitTargets, event: MouseEvent) => void` |
446
- | `onCanvasClick` | `(event: MouseEvent) => void` |
447
- | `onNodeDoubleClick` | `(node, hits, event) => void` |
448
- | `onRelationshipDoubleClick` | `(rel, hits, event) => void` |
449
- | `onClusterDoubleClick` | `(cluster, hits, event) => void` |
450
- | `onCanvasDoubleClick` | `(event) => void` |
451
- | `onNodeRightClick` | `(node, hits, event) => void` |
452
- | `onRelationshipRightClick` | `(rel, hits, event) => void` |
453
- | `onClusterRightClick` | `(cluster, hits, event) => void` |
454
- | `onCanvasRightClick` | `(event) => void` |
455
-
456
- ### `HoverInteraction`
457
-
458
- ```typescript
459
- new HoverInteraction(nvl, options?: { drawShadowOnHover?: boolean })
460
- ```
461
-
462
- | Event | Signature |
463
- |---|---|
464
- | `onHover` | `(element: Node \| Relationship \| undefined, hits: HitTargets, event: MouseEvent) => void` |
465
-
466
- ### `DragNodeInteraction`
467
-
468
- ```typescript
469
- new DragNodeInteraction(nvl)
470
- ```
471
-
472
- | Event | Signature |
473
- |---|---|
474
- | `onDragStart` | `(nodes: Node[], event: MouseEvent) => void` |
475
- | `onDrag` | `(nodes: Node[], event: MouseEvent) => void` |
476
- | `onDragEnd` | `(nodes: Node[], event: MouseEvent) => void` |
477
-
478
- ### `BoxSelectInteraction`
479
-
480
- ```typescript
481
- new BoxSelectInteraction(nvl, options?: { selectOnRelease?: boolean })
482
- ```
483
-
484
- | Event | Signature |
485
- |---|---|
486
- | `onBoxStarted` | `(event: MouseEvent) => void` |
487
- | `onBoxSelect` | `(selection: { nodes: Node[]; rels: Relationship[] }, event: MouseEvent) => void` |
488
-
489
- ### `LassoInteraction`
490
-
491
- ```typescript
492
- new LassoInteraction(nvl, options?: { selectOnRelease?: boolean })
493
- ```
494
-
495
- | Event | Signature |
496
- |---|---|
497
- | `onLassoStarted` | `(event: MouseEvent) => void` |
498
- | `onLassoSelect` | `(selection: { nodes: Node[]; rels: Relationship[] }, event: MouseEvent) => void` |
499
-
500
- ### `KeyboardInteraction`
501
-
502
- ```typescript
503
- new KeyboardInteraction(nvl, options?: {
504
- enterGraphKey?: string[]
505
- navigateForwardKey?: string[]
506
- navigateBackwardKey?:string[]
507
- exitGraphKey?: string[]
508
- contextMenuKey?: string[]
509
- })
510
- keyboard.getFocused(): Node | Relationship | undefined
511
- ```
512
-
513
- | Event | Signature |
514
- |---|---|
515
- | `onKeyDown` | `(event: KeyboardEvent, focused?: Node \| Relationship) => void` |
516
- | `onKeyUp` | `(event: KeyboardEvent, focused?: Node \| Relationship) => void` |
517
- | `onNodeFocus` / `onNodeBlur` | `(node: Node, event: KeyboardEvent) => void` |
518
- | `onRelationshipFocus` / `onRelationshipBlur` | `(rel: Relationship, event: KeyboardEvent) => void` |
519
- | `onCanvasFocus` / `onCanvasBlur` | `(event: FocusEvent) => void` |
520
- | `onContextMenu` | `(element: Node \| Relationship \| undefined, event: KeyboardEvent) => void` |
521
-
522
- ---
523
-
524
- ## React Components
525
-
526
- ### `<InteractiveNvlWrapper>`
527
-
528
- | Prop | Type | Notes |
529
- |---|---|---|
530
- | `nodes` | `Node[]` | |
531
- | `rels` | `Relationship[]` | |
532
- | `nvlOptions` | `NvlOptions` | |
533
- | `nvlCallbacks` | `ExternalCallbacks` | |
534
- | `positions` | `Node[]` | |
535
- | `zoom` | `number` | |
536
- | `pan` | `{ x: number; y: number }` | |
537
- | `mouseEventCallbacks` | `MouseEventCallbacks` | See below |
538
- | `keyboardEventCallbacks` | `KeyboardEventCallbacks` | See below |
539
- | `interactionOptions` | `InteractionOptions` | Defaults: `{ selectOnClick: false, drawShadowOnHover: true, selectOnRelease: false, excludeNodeMargin: true }` |
540
- | `onInitializationError` | `(error: unknown) => void` | |
541
- | `ref` | `Ref<NVL>` | Underlying NVL instance |
542
- | (plus `HTMLProps<HTMLDivElement>`) | | |
543
-
544
- ### `<BasicNvlWrapper>`
545
-
546
- Same prop set EXCEPT no `mouseEventCallbacks` / `keyboardEventCallbacks` / `interactionOptions`. `ref` resolves to `IncludeMethods<NVL>` — exposes all NVL public methods.
547
-
548
- ### `<StaticPictureWrapper>`
549
-
550
- | Prop | Type | Default |
551
- |---|---|---|
552
- | `nodes` | `Node[]` | — |
553
- | `rels` | `Relationship[]` | — |
554
- | `nvlOptions` | `NvlOptions` | — |
555
- | `width` | `number` | `500` |
556
- | `height` | `number` | `500` |
557
- | `format` | `'png' \| 'svg'` | `'png'` |
558
-
559
- Renders an ephemeral NVL, fits viewport, captures, destroys. Returns `<img />`.
560
-
561
- ### `MouseEventCallbacks`
562
-
563
- Union of all handler callbacks. Each value can be a function (with the signature above), `true` (enabled, no callback), or omitted / `false` (disabled):
564
-
565
- ```
566
- onNodeClick, onRelationshipClick, onCanvasClick,
567
- onClusterClick,
568
- onNodeDoubleClick, onRelationshipDoubleClick, onClusterDoubleClick, onCanvasDoubleClick,
569
- onNodeRightClick, onRelationshipRightClick, onClusterRightClick, onCanvasRightClick,
570
- onHover,
571
- onPan, onZoomAndPan,
572
- onDragStart, onDrag, onDragEnd,
573
- onBoxStarted, onBoxSelect,
574
- onLassoStarted, onLassoSelect,
575
- onHoverNodeMargin, onDrawStarted, onDrawEnded
576
- ```
577
-
578
- ### `KeyboardEventCallbacks`
579
-
580
- ```
581
- onKeyDown, onKeyUp,
582
- onNodeFocus, onNodeBlur,
583
- onRelationshipFocus, onRelationshipBlur,
584
- onCanvasFocus, onCanvasBlur,
585
- onContextMenu
586
- ```
587
-
588
- ### `InteractionOptions`
589
-
590
- Merged union of every handler's options:
591
-
592
- ```
593
- { selectOnClick?, drawShadowOnHover?, selectOnRelease?, excludeNodeMargin?, controlledZoom?,
594
- controlledPan?, enterGraphKey?, navigateForwardKey?, navigateBackwardKey?, exitGraphKey?,
595
- contextMenuKey?, ghostGraphStyling? }
596
- ```