@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.
- package/CHANGELOG.md +23 -0
- package/dist/base.mjs +1062 -1058
- package/dist/types/index.d.ts +382 -385
- package/dist/types/layouts/animatedlayout/AnimatedLayout.d.ts +23 -23
- package/dist/types/layouts/animatedlayout/animationUtils.d.ts +3 -3
- package/dist/types/layouts/circularLayout/CircularLayout.d.ts +14 -14
- package/dist/types/layouts/d3forcelayout/circularLayout.d.ts +4 -4
- package/dist/types/layouts/d3forcelayout/constants.d.ts +3 -3
- package/dist/types/layouts/d3forcelayout/d3ForceLayout.d.ts +31 -31
- package/dist/types/layouts/d3forcelayout/types.d.ts +7 -7
- package/dist/types/layouts/forcedirectedlayout/PhysLayout.d.ts +261 -261
- package/dist/types/layouts/forcedirectedlayout/clustering/ClusterByMerger.d.ts +52 -52
- package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.d.ts +49 -49
- package/dist/types/layouts/forcedirectedlayout/clustering/clustering-utils.d.ts +35 -35
- package/dist/types/layouts/forcedirectedlayout/clustering/types.d.ts +39 -39
- package/dist/types/layouts/forcedirectedlayout/glwrapper.d.ts +3 -3
- package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-fragment.d.ts +1 -1
- package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-repulsive-fragment.d.ts +1 -1
- package/dist/types/layouts/forcedirectedlayout/shaders/multilevel-update-fragment.d.ts +1 -1
- package/dist/types/layouts/forcedirectedlayout/shaders/sim-vertex.d.ts +1 -1
- package/dist/types/layouts/freeLayout/FreeLayout.d.ts +23 -23
- package/dist/types/layouts/gridLayout/GridLayout.d.ts +26 -26
- package/dist/types/layouts/hierarchicallayout/HierarchicalLayout.d.ts +28 -28
- package/dist/types/layouts/hierarchicallayout/constants.d.ts +2 -2
- package/dist/types/modules/CallbackHelper.d.ts +23 -23
- package/dist/types/modules/ExternalCallbackHandler.d.ts +33 -33
- package/dist/types/modules/NvlController.d.ts +212 -209
- package/dist/types/modules/Shader.d.ts +17 -17
- package/dist/types/modules/ZoomTransitionHandler.d.ts +24 -24
- package/dist/types/modules/dataset.d.ts +24 -24
- package/dist/types/modules/logging.d.ts +4 -4
- package/dist/types/modules/state/constants.d.ts +2 -2
- package/dist/types/modules/state/state.d.ts +2 -2
- package/dist/types/modules/state/types.d.ts +296 -288
- package/dist/types/modules/state/utils.d.ts +36 -36
- package/dist/types/renderers/ClusterOverlay.d.ts +67 -67
- package/dist/types/renderers/domrenderer/BaseRenderer.d.ts +69 -69
- package/dist/types/renderers/domrenderer/canvasrenderer/Animation.d.ts +57 -57
- package/dist/types/renderers/domrenderer/canvasrenderer/AnimationHandler.d.ts +65 -65
- package/dist/types/renderers/domrenderer/canvasrenderer/CanvasRenderer.d.ts +84 -85
- package/dist/types/renderers/domrenderer/canvasrenderer/arrowDrawing.d.ts +31 -31
- package/dist/types/renderers/domrenderer/canvasrenderer/nodeDrawing.d.ts +32 -32
- package/dist/types/renderers/domrenderer/shared/ImageCache.d.ts +16 -16
- package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundle.d.ts +89 -89
- package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundler.d.ts +42 -42
- package/dist/types/renderers/domrenderer/shared/arrows/arrows.d.ts +49 -49
- package/dist/types/renderers/domrenderer/shared/arrows/constants.d.ts +4 -4
- package/dist/types/renderers/domrenderer/shared/nodes/nodes.d.ts +21 -21
- package/dist/types/renderers/domrenderer/shared/types.d.ts +29 -29
- package/dist/types/renderers/domrenderer/shared/util.d.ts +4 -4
- package/dist/types/renderers/domrenderer/shared/vectorUtils.d.ts +10 -10
- package/dist/types/renderers/domrenderer/shared/wordwrap.d.ts +10 -10
- package/dist/types/renderers/domrenderer/svgrenderer/SvgRenderer.d.ts +18 -19
- package/dist/types/renderers/domrenderer/svgrenderer/arrowDrawing.d.ts +15 -15
- package/dist/types/renderers/domrenderer/svgrenderer/nodeDrawing.d.ts +4 -4
- package/dist/types/renderers/domrenderer/svgrenderer/svgUtils.d.ts +21 -21
- package/dist/types/renderers/webglrenderer/Controller.d.ts +83 -82
- package/dist/types/renderers/webglrenderer/IconLayerRegistry.d.ts +8 -8
- package/dist/types/renderers/webglrenderer/Renderer.d.ts +89 -89
- package/dist/types/renderers/webglrenderer/node-animation-fragment.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/node-animation-vertex.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/node-fragment-point.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/node-vertex-point.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/rel-fragment-line.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/rel-glsl-utils.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/rel-vertex-arrow.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/rel-vertex-line.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/viewport-box-fragment.d.ts +1 -1
- package/dist/types/renderers/webglrenderer/viewport-box-vertex.d.ts +1 -1
- package/dist/types/types/graph-element.d.ts +103 -103
- package/dist/types/types/nvl-window-functions.d.ts +12 -13
- package/dist/types/types/utils.d.ts +1 -1
- package/dist/types/utils/ariaUtils.d.ts +2 -2
- package/dist/types/utils/canvasManagement.d.ts +1 -1
- package/dist/types/utils/circularUtils.d.ts +2 -2
- package/dist/types/utils/clusterGeometry.d.ts +3 -3
- package/dist/types/utils/clusterHitRegions.d.ts +12 -12
- package/dist/types/utils/colorUtils.d.ts +2 -2
- package/dist/types/utils/constants.d.ts +6 -6
- package/dist/types/utils/errors.d.ts +6 -6
- package/dist/types/utils/geometry.d.ts +48 -48
- package/dist/types/utils/graphObjectUtils.d.ts +9 -9
- package/dist/types/utils/hitTest.d.ts +47 -47
- package/dist/types/utils/jsDriverResultTransformer.d.ts +16 -16
- package/dist/types/utils/layoutSeeding.d.ts +2 -2
- package/dist/types/utils/mouseUtils.d.ts +5 -5
- package/dist/types/utils/segmentAnalytics.d.ts +42 -42
- package/dist/types/utils/webWorkerUtils.d.ts +1 -1
- package/dist/types/utils/zoomFunctions.d.ts +16 -15
- package/package.json +12 -10
- package/skills/neo4j-nvl-skill/SKILL.md +238 -398
- package/skills/neo4j-nvl-skill/references/api/base/classes/NVL.md +977 -0
- package/skills/neo4j-nvl-skill/references/api/base/functions/getZoomTargetForNodePositions.md +37 -0
- package/skills/neo4j-nvl-skill/references/api/base/index.md +71 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/CircularOptions.md +11 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/ClusteringOptions.md +14 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/ExternalCallbacks.md +18 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/ForceDirectedOptions.md +12 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/HierarchicalOptions.md +13 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetCluster.md +13 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetNode.md +16 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/HitTargetRelationship.md +15 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/Node.md +32 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/NvlMouseEvent.md +16 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/NvlOptions.md +38 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/Point.md +12 -0
- package/skills/neo4j-nvl-skill/references/api/base/interfaces/Relationship.md +32 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/CanvasRendererType.md +14 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Cluster.md +20 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ClusterByFn.md +20 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ClusterId.md +10 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/HitTargets.md +22 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/HitTestTarget.md +7 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Layout.md +15 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/LayoutOptions.md +12 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/NodeWithClientPosition.md +18 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/PartialNode.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/PartialRelationship.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/Renderer.md +9 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/StyledCaption.md +21 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/WebGLRendererType.md +14 -0
- package/skills/neo4j-nvl-skill/references/api/base/type-aliases/ZoomOptions.md +25 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/CircularLayoutType.md +11 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/ForceDirectedLayoutType.md +9 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/FreeLayoutType.md +9 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/GridLayoutType.md +9 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/HierarchicalLayoutType.md +9 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/d3ForceLayoutType.md +9 -0
- package/skills/neo4j-nvl-skill/references/api/base/variables/nvlResultTransformer.md +38 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/BoxSelectInteraction.md +163 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/ClickInteraction.md +163 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/DragNodeInteraction.md +164 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/HoverInteraction.md +160 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/KeyboardInteraction.md +185 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/LassoInteraction.md +163 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/PanInteraction.md +196 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/classes/ZoomInteraction.md +164 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/index.md +37 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/BoxSelectInteractionCallbacks.md +19 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/BoxSelectInteractionOptions.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ClickInteractionCallbacks.md +39 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ClickInteractionOptions.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/DragNodeInteractionCallbacks.md +21 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/DrawInteractionOptions.md +22 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/HoverInteractionCallbacks.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/HoverInteractionOptions.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/KeyboardInteractionCallbacks.md +35 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/KeyboardInteractionOptions.md +55 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/LassoInteractionCallbacks.md +19 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/LassoInteractionOptions.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/PanInteractionCallbacks.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/PanInteractionOptions.md +19 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ZoomInteractionCallbacks.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/interaction-handlers/type-aliases/ZoomInteractionOptions.md +17 -0
- package/skills/neo4j-nvl-skill/references/api/react/functions/StaticPictureWrapper.md +35 -0
- package/skills/neo4j-nvl-skill/references/api/react/index.md +34 -0
- package/skills/neo4j-nvl-skill/references/api/react/interfaces/BasicReactWrapperProps.md +24 -0
- package/skills/neo4j-nvl-skill/references/api/react/interfaces/InteractiveNvlWrapperProps.md +27 -0
- package/skills/neo4j-nvl-skill/references/api/react/type-aliases/InteractionOptions.md +10 -0
- package/skills/neo4j-nvl-skill/references/api/react/type-aliases/KeyboardEvent.md +7 -0
- package/skills/neo4j-nvl-skill/references/api/react/type-aliases/KeyboardEventCallbacks.md +10 -0
- package/skills/neo4j-nvl-skill/references/api/react/type-aliases/MouseEvent.md +10 -0
- package/skills/neo4j-nvl-skill/references/api/react/type-aliases/MouseEventCallbacks.md +10 -0
- package/skills/neo4j-nvl-skill/references/api/react/type-aliases/StaticPictureWrapperProps.md +27 -0
- package/skills/neo4j-nvl-skill/references/api/react/variables/BasicNvlWrapper.md +50 -0
- package/skills/neo4j-nvl-skill/references/api/react/variables/InteractiveNvlWrapper.md +17 -0
- package/skills/neo4j-nvl-skill/references/clustering.md +87 -0
- package/skills/neo4j-nvl-skill/references/data-from-neo4j.md +67 -0
- package/skills/neo4j-nvl-skill/references/labels-and-overlays.md +76 -0
- package/skills/neo4j-nvl-skill/references/layouts-and-positions.md +65 -0
- package/skills/neo4j-nvl-skill/references/lifecycle-and-updates.md +65 -0
- package/skills/neo4j-nvl-skill/references/migrating-1x-to-2.md +50 -0
- package/skills/neo4j-nvl-skill/references/react-wrappers.md +88 -0
- package/skills/neo4j-nvl-skill/references/verifying-nvl-apps.md +52 -0
- package/skills/neo4j-nvl-skill/references/vite-and-bundlers.md +62 -0
- package/dist/types/layouts/animatedlayout/AnimatedLayout.test.d.ts +0 -1
- package/dist/types/layouts/animatedlayout/animationUtils.test.d.ts +0 -1
- package/dist/types/layouts/d3forcelayout/__mocks__/d3ForceLayout.d.ts +0 -10
- package/dist/types/layouts/d3forcelayout/circularLayout.test.d.ts +0 -1
- package/dist/types/layouts/d3forcelayout/d3ForceLayout.test.d.ts +0 -1
- package/dist/types/layouts/forcedirectedlayout/PhysLayout.test.d.ts +0 -1
- package/dist/types/layouts/forcedirectedlayout/clustering/ClusterByMerger.test.d.ts +0 -1
- package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.bench.d.ts +0 -1
- package/dist/types/layouts/forcedirectedlayout/clustering/SolarMerger.test.d.ts +0 -1
- package/dist/types/layouts/forcedirectedlayout/clustering/clustering-utils.test.d.ts +0 -1
- package/dist/types/modules/NvlController.test.d.ts +0 -1
- package/dist/types/modules/ZoomTransitionHandler.test.d.ts +0 -1
- package/dist/types/modules/dataset.test.d.ts +0 -1
- package/dist/types/modules/state/state.test.d.ts +0 -1
- package/dist/types/modules/state/utils.test.d.ts +0 -1
- package/dist/types/renderers/ClusterOverlay.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/BaseRenderer.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/canvasrenderer/Animation.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/canvasrenderer/CanvasRenderer.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/canvasrenderer/arrowDrawing.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/canvasrenderer/nodeDrawing.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/ImageCache.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundle.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/arrows/ArrowBundler.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/arrows/arrows.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/nodes/nodes.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/util.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/shared/wordwrap.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/svgrenderer/SvgRenderer.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/svgrenderer/arrowDrawing.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/svgrenderer/nodeDrawing.test.d.ts +0 -1
- package/dist/types/renderers/domrenderer/svgrenderer/svgUtils.test.d.ts +0 -1
- package/dist/types/renderers/webglrenderer/Controller.test.d.ts +0 -1
- package/dist/types/renderers/webglrenderer/IconLayerRegistry.test.d.ts +0 -1
- package/dist/types/renderers/webglrenderer/Renderer.test.d.ts +0 -1
- package/dist/types/utils/ariaUtils.test.d.ts +0 -1
- package/dist/types/utils/canvasManagement.test.d.ts +0 -1
- package/dist/types/utils/circularUtils.test.d.ts +0 -1
- package/dist/types/utils/clusterGeometry.test.d.ts +0 -1
- package/dist/types/utils/clusterHitRegions.test.d.ts +0 -1
- package/dist/types/utils/colorUtils.test.d.ts +0 -1
- package/dist/types/utils/errors.test.d.ts +0 -1
- package/dist/types/utils/geometry.test.d.ts +0 -1
- package/dist/types/utils/graphObjectUtils.test.d.ts +0 -1
- package/dist/types/utils/hitTest.test.d.ts +0 -1
- package/dist/types/utils/jsDriverResultTransformer.test.d.ts +0 -1
- package/dist/types/utils/layoutSeeding.test.d.ts +0 -1
- package/dist/types/utils/mouseUtils.test.d.ts +0 -1
- package/dist/types/utils/webWorkerUtils.test.d.ts +0 -1
- package/dist/types/utils/zoomFunctions.test.d.ts +0 -1
- package/skills/neo4j-nvl-skill/references/api-surface.md +0 -596
- package/skills/neo4j-nvl-skill/references/troubleshooting.md +0 -317
|
@@ -1,456 +1,296 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neo4j-nvl-skill
|
|
3
|
+
metadata:
|
|
4
|
+
package: '@neo4j-nvl/base'
|
|
5
|
+
version: '2.0.0-ec6fdba7'
|
|
3
6
|
description: Neo4j Visualization Library (NVL) — framework-agnostic graph rendering for the browser.
|
|
4
7
|
Covers @neo4j-nvl/base (NVL class, nodes/relationships, Canvas vs WebGL renderer),
|
|
5
|
-
@neo4j-nvl/interaction-handlers (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Does NOT handle
|
|
12
|
-
Does NOT handle
|
|
13
|
-
|
|
14
|
-
compatibility: "@neo4j-nvl packages 2.0.x; React 19 for @neo4j-nvl/react; modern browsers with Canvas2D + WebGL2"
|
|
15
|
-
version: 2.0.0
|
|
8
|
+
@neo4j-nvl/interaction-handlers (zoom, pan, drag, click, hover, box/lasso select, keyboard) and
|
|
9
|
+
@neo4j-nvl/react (InteractiveNvlWrapper, BasicNvlWrapper, StaticPictureWrapper). Use when rendering
|
|
10
|
+
a Neo4j graph in a browser, feeding driver results through nvlResultTransformer, choosing Canvas vs
|
|
11
|
+
WebGL, clustering or laying out nodes, wiring node/relationship/cluster interactions, or embedding
|
|
12
|
+
NVL in React, Vite or vanilla JS apps.
|
|
13
|
+
Does NOT handle Cypher authoring — use neo4j-cypher-skill.
|
|
14
|
+
Does NOT handle driver lifecycle, sessions or executeQuery setup — use neo4j-driver-javascript-skill.
|
|
15
|
+
Does NOT handle the pre-styled GraphVisualization embed — use @neo4j-ndl/react.
|
|
16
|
+
compatibility: '@neo4j-nvl packages 2.x; React 19 for @neo4j-nvl/react; browsers with Canvas2D and WebGL2'
|
|
16
17
|
---
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
[//]: # (This file is auto-generated by scripts/docs/generate-skills.mjs, do not edit it manually)
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
- Rendering a Neo4j graph in a browser (vanilla JS, React, Vite) with custom interactions, rendering, or data shapes
|
|
22
|
-
- Visualizing `driver.executeQuery` results as an interactive graph
|
|
23
|
-
- Wiring zoom, pan, drag, click, hover, lasso, or box-select interactions
|
|
24
|
-
- Embedding NVL inside an existing app and synchronizing graph state
|
|
25
|
-
|
|
26
|
-
## When NOT to Use
|
|
27
|
-
- **Pre-styled embedded graph view with default behavior, no custom interactions** → `GraphVisualization` from `@neo4j-ndl/react` (Neo4j Needle / NDL design system) — wraps NVL with default Neo4j styling. See [Use NVL or the Needle Component?](#use-nvl-or-the-needle-component) below.
|
|
28
|
-
- **Python / Jupyter notebook graph visualization** → `neo4j/python-graph-visualization` (the Python port of NVL)
|
|
29
|
-
- **Writing/optimizing Cypher** → `neo4j-cypher-skill`
|
|
30
|
-
- **Driver setup / executeQuery / sessions** → `neo4j-driver-javascript-skill`
|
|
31
|
-
- **Server-side data fetching with no rendering** → `neo4j-driver-javascript-skill`
|
|
32
|
-
- **GDS algorithm execution** → `neo4j-gds-skill` or `neo4j-aura-graph-analytics-skill`
|
|
33
|
-
- **GraphQL API** → `neo4j-graphql-skill`
|
|
21
|
+
# Neo4j Visualization Library (@neo4j-nvl/base)
|
|
34
22
|
|
|
35
|
-
|
|
23
|
+
> Shipped with `@neo4j-nvl/base` v2.0.0-ec6fdba7. Once installed into a project this folder is detached from the
|
|
24
|
+
> package: the installed types in `node_modules/@neo4j-nvl/*` are the source of truth. If the project's
|
|
25
|
+
> `@neo4j-nvl/base` is a different version and `node_modules/@neo4j-nvl/base/skills/neo4j-nvl-skill/SKILL.md`
|
|
26
|
+
> exists, read that copy instead.
|
|
36
27
|
|
|
37
|
-
##
|
|
28
|
+
## When to use
|
|
29
|
+
|
|
30
|
+
- Rendering a Neo4j graph in the browser with custom interactions, rendering or data shapes
|
|
31
|
+
- Visualizing `driver.executeQuery` results as an interactive graph
|
|
32
|
+
- Zoom, pan, drag, click, hover, lasso or box-select interactions; clustering; custom layouts
|
|
33
|
+
|
|
34
|
+
Not for: a pre-styled graph view with default behaviour (`GraphVisualization` from `@neo4j-ndl/react` wraps
|
|
35
|
+
NVL for that), Python notebooks (`neo4j/python-graph-visualization`), Cypher, driver setup, GDS or GraphQL.
|
|
36
|
+
|
|
37
|
+
## Rules
|
|
38
|
+
|
|
39
|
+
- **Types win.** Confirm every option, callback and method against this skill or the `.d.ts` files in
|
|
40
|
+
`node_modules/@neo4j-nvl/*` before using it. If they disagree, trust the types and say so.
|
|
41
|
+
- **Never invent options.** NVL options and callbacks are flat, named keys. If a key is not in the API
|
|
42
|
+
reference below or the types, it does not exist.
|
|
43
|
+
- **Do not reverse-engineer from compiled `dist/` or `lib/` output.** Use the types and these docs.
|
|
44
|
+
- **Symptom first.** When something does not work, check the table below before changing code.
|
|
45
|
+
|
|
46
|
+
## Before you code
|
|
47
|
+
|
|
48
|
+
1. The container has explicit `width` **and** `height`; otherwise the graph is invisible.
|
|
49
|
+
2. React wrappers: `layout`, `layoutOptions` and every other option go inside `nvlOptions`.
|
|
50
|
+
3. Wheel zoom in `<InteractiveNvlWrapper>` is enabled by `mouseEventCallbacks.onZoomAndPan`; there is no `onZoom`.
|
|
51
|
+
4. `fit()` needs explicit node ids. `fit([])` fits nothing.
|
|
52
|
+
5. The WebGL renderer draws no captions. Use `'canvas'` when labels matter, or `html` / `icon` overlays.
|
|
53
|
+
6. If the hierarchical layout never finishes under the Vite dev server, add `optimizeDeps: { include: ['bin-pack'] }`. Vite 7.3 pre-bundles it on its own, so only apply it when the symptom appears.
|
|
54
|
+
7. `nvlResultTransformer` returns bare `{ id }` elements; labels and properties are in `recordObjectMap`.
|
|
55
|
+
8. React: `nvlCallbacks` are captured once; use refs or stable functions. `interactionOptions` replaces
|
|
56
|
+
the defaults, so pass every option you need.
|
|
57
|
+
9. Destroy interaction handlers, then `nvl.destroy()`, on teardown. The React wrappers do this for you.
|
|
58
|
+
|
|
59
|
+
## Symptom → cause → fix
|
|
60
|
+
|
|
61
|
+
| Symptom | Cause | Fix |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| Graph invisible / blank | Container has no height | Explicit `width` and `height` on the container |
|
|
64
|
+
| Wheel does not zoom (React) | Zoom handler only wired from `onZoomAndPan` | `mouseEventCallbacks={{ onZoomAndPan: true }}` → [react-wrappers](references/react-wrappers.md) |
|
|
65
|
+
| Hierarchical layout never finishes (Vite dev) | Layout `SharedWorker` imports CJS `bin-pack`; seen on older Vite, not on 7.3 | `optimizeDeps: { include: ['bin-pack'] }` → [vite-and-bundlers](references/vite-and-bundlers.md) |
|
|
66
|
+
| No text on nodes with WebGL | Captions are Canvas-only | `html` / `icon`, own overlay, or `setRenderer('canvas')` → [labels-and-overlays](references/labels-and-overlays.md) |
|
|
67
|
+
| `fit([])` does nothing | Empty array = no nodes | `fit(nvl.getNodes().map((n) => n.id))` |
|
|
68
|
+
| `fit()` stops zoomed in on a huge graph | `minZoom` clamp (default `0.075`) | `fit(ids, { minZoom })` or lower the `minZoom` option |
|
|
69
|
+
| Clicking a cluster selects all its nodes | `selectOnClick` selects `cluster.nodeIds` | `selectOnClick: false` and select in `onNodeClick` → [clustering](references/clustering.md) |
|
|
70
|
+
| No cluster outlines / halos | Not force-directed, or mixed colours (halo) | Force-directed with `layoutOptions.clustering`; one colour per cluster → [clustering](references/clustering.md) |
|
|
71
|
+
| Pinned nodes move when clustering is on | Cluster forces ignore pins | Do not combine → [clustering](references/clustering.md) |
|
|
72
|
+
| Changing circle options does nothing | Layout is not re-run on option change | Bounce via `setLayout('free')` → [layouts-and-positions](references/layouts-and-positions.md) |
|
|
73
|
+
| Un-pinned nodes stay frozen | Settled simulation is not restarted | `setNodePositions(current, true)` → [layouts-and-positions](references/layouts-and-positions.md) |
|
|
74
|
+
| Node `x`/`y` props do not move existing nodes | Positions apply on insert only | `setNodePositions` → [layouts-and-positions](references/layouts-and-positions.md) |
|
|
75
|
+
| Callbacks see stale state (React) | `nvlCallbacks` captured at creation | Refs or stable functions → [react-wrappers](references/react-wrappers.md) |
|
|
76
|
+
| Minimap empty (React) | Container did not exist at creation | Keep the element in state → [react-wrappers](references/react-wrappers.md) |
|
|
77
|
+
| Hover / shadow defaults lost | `interactionOptions` replaces defaults | Pass every option → [react-wrappers](references/react-wrappers.md) |
|
|
78
|
+
| Many icons not drawn | Too many distinct icon images | Fewer distinct icons → [labels-and-overlays](references/labels-and-overlays.md) |
|
|
79
|
+
| Layout looks hung in headless Chrome | Software WebGL | Hardware-GL flags → [verifying-nvl-apps](references/verifying-nvl-apps.md) |
|
|
80
|
+
| Raw `executeQuery` result passed to NVL | Records are not graph elements | `resultTransformer: nvlResultTransformer` → [data-from-neo4j](references/data-from-neo4j.md) |
|
|
81
|
+
|
|
82
|
+
## Choose
|
|
83
|
+
|
|
84
|
+
**NVL or Needle?** Default Neo4j styling and no custom interaction → `GraphVisualization` from `@neo4j-ndl/react`.
|
|
85
|
+
Anything custom → NVL.
|
|
38
86
|
|
|
39
87
|
| Need | Use |
|
|
40
88
|
|---|---|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
89
|
+
| React, default interactions | `<InteractiveNvlWrapper>` from `@neo4j-nvl/react` |
|
|
90
|
+
| React, custom interaction logic | `<BasicNvlWrapper>` + `ref` to the `NVL` instance |
|
|
91
|
+
| Vanilla, standard interactions | `NVL` + `@neo4j-nvl/interaction-handlers` |
|
|
92
|
+
| Vanilla, custom events | `NVL` + `container.addEventListener` + `nvl.getHits()` |
|
|
93
|
+
| Static PNG / SVG | `<StaticPictureWrapper>` or `nvl.saveToFile()` / `nvl.saveToSvg()` |
|
|
43
94
|
|
|
44
|
-
|
|
95
|
+
| Renderer | Nodes | Notes |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| `'canvas'` (default) | up to ~1,000 | Captions, icons, arrows, exact hit-testing |
|
|
98
|
+
| `'webgl'` | 100,000+ | WebGL2 only; no captions; icons and arrowheads supported |
|
|
45
99
|
|
|
46
|
-
|
|
100
|
+
`disableWebGL: true` forces Canvas rendering and non-GPU layouts.
|
|
47
101
|
|
|
48
102
|
## Install
|
|
49
103
|
|
|
50
104
|
```bash
|
|
51
|
-
npm install @neo4j-nvl/base #
|
|
52
|
-
npm install @neo4j-nvl/interaction-handlers #
|
|
53
|
-
npm install @neo4j-nvl/react # React wrappers (
|
|
105
|
+
npm install @neo4j-nvl/base # required
|
|
106
|
+
npm install @neo4j-nvl/interaction-handlers # vanilla interactions
|
|
107
|
+
npm install @neo4j-nvl/react # React wrappers (React 19)
|
|
54
108
|
```
|
|
55
109
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
License: NVL ships under the **Neo4j Visualization Library License** — for use with Neo4j products only. Cannot be used against other graph backends.
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Pick the Right Paradigm
|
|
65
|
-
|
|
66
|
-
| Need | Use |
|
|
67
|
-
|---|---|
|
|
68
|
-
| React app, default interactions | `<InteractiveNvlWrapper>` from `@neo4j-nvl/react` |
|
|
69
|
-
| React app, custom interaction wiring | `<BasicNvlWrapper>` + own handlers via `ref` |
|
|
70
|
-
| Vanilla JS, standard interactions | `NVL` + `@neo4j-nvl/interaction-handlers` |
|
|
71
|
-
| Vanilla JS, fully custom event logic | `NVL` + `container.addEventListener` + `nvl.getHits()` |
|
|
72
|
-
| Static PNG/SVG image export | `<StaticPictureWrapper>` or `nvl.saveToFile()` / `nvl.saveToSvg()` |
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## Pick the Right Renderer
|
|
77
|
-
|
|
78
|
-
| Renderer | Max nodes | Detail | Use case |
|
|
79
|
-
|---|---|---|---|
|
|
80
|
-
| `'canvas'` (default) | ~1,000 | Captions, icons, arrows, pixel-perfect hit-testing | Detail investigation, small graphs |
|
|
81
|
-
| `'webgl'` | 100,000+ | No captions; supports node icons and relationship arrowheads in 2.0 | Large-scale pattern exploration |
|
|
82
|
-
|
|
83
|
-
```javascript
|
|
84
|
-
const nvl = new NVL(container, nodes, rels, { renderer: 'webgl' })
|
|
85
|
-
nvl.setRenderer('canvas') // swap at runtime
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
NVL 2.0 requires **WebGL2** for the GPU renderer and force-directed physics engine. When GPU acceleration is unavailable, NVL can fall back to Canvas rendering and non-GPU layout implementations; use `disableWebGL: true` to explicitly avoid WebGL.
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Container Setup
|
|
93
|
-
|
|
94
|
-
The container must have an explicit `width` AND `height`. Missing height → container collapses to `0` → graph invisible. Most-reported NVL bug.
|
|
95
|
-
|
|
96
|
-
```html
|
|
97
|
-
<!-- ❌ height defaults to 0; graph invisible -->
|
|
98
|
-
<div id="viz"></div>
|
|
99
|
-
|
|
100
|
-
<!-- ✅ explicit dimensions -->
|
|
101
|
-
<div id="viz" style="width: 100%; height: 600px;"></div>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## Vanilla — Base Library
|
|
107
|
-
|
|
108
|
-
```javascript
|
|
109
|
-
import { NVL } from '@neo4j-nvl/base'
|
|
110
|
-
|
|
111
|
-
const container = document.getElementById('viz')
|
|
112
|
-
const nodes = [{ id: '1' }, { id: '2' }]
|
|
113
|
-
const relationships = [{ id: '12', from: '1', to: '2', type: 'KNOWS' }]
|
|
110
|
+
`@neo4j-nvl/layout-workers` is transitive; never install it directly. `neo4j-driver` is only needed for
|
|
111
|
+
`nvlResultTransformer`. License: Neo4j Visualization Library License, for use with Neo4j products.
|
|
112
|
+
Starters: https://github.com/neo4j-devtools/nvl-boilerplates
|
|
114
113
|
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
With options + callbacks:
|
|
114
|
+
## Minimal examples
|
|
119
115
|
|
|
120
116
|
```javascript
|
|
121
117
|
import { NVL } from '@neo4j-nvl/base'
|
|
118
|
+
import { ClickInteraction, ZoomInteraction, PanInteraction, DragNodeInteraction } from '@neo4j-nvl/interaction-handlers'
|
|
122
119
|
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
onInitialization: () => console.log('NVL ready'),
|
|
133
|
-
onLayoutDone: () => nvl.fit([]),
|
|
134
|
-
onError: (err) => console.error('NVL error', err)
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const nvl = new NVL(container, nodes, relationships, options, callbacks)
|
|
138
|
-
|
|
139
|
-
// On teardown — always:
|
|
140
|
-
nvl.destroy()
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
`NVL` constructor signature: `new NVL(frame, nvlNodes?, nvlRels?, options?, callbacks?)`. All but `frame` are optional and default to empty.
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
## Vanilla — Interaction Handlers
|
|
148
|
-
|
|
149
|
-
Compose handlers onto an existing `NVL` instance. Each handler registers callbacks via `.updateCallback(name, fn)` and must be torn down with `.destroy()`.
|
|
150
|
-
|
|
151
|
-
```javascript
|
|
152
|
-
import { NVL } from '@neo4j-nvl/base'
|
|
153
|
-
import {
|
|
154
|
-
ZoomInteraction, PanInteraction, DragNodeInteraction,
|
|
155
|
-
ClickInteraction, HoverInteraction, BoxSelectInteraction,
|
|
156
|
-
LassoInteraction, KeyboardInteraction
|
|
157
|
-
} from '@neo4j-nvl/interaction-handlers'
|
|
158
|
-
|
|
159
|
-
const nvl = new NVL(container, nodes, relationships)
|
|
160
|
-
|
|
161
|
-
const zoom = new ZoomInteraction(nvl)
|
|
162
|
-
const pan = new PanInteraction(nvl)
|
|
163
|
-
const drag = new DragNodeInteraction(nvl)
|
|
164
|
-
const click = new ClickInteraction(nvl, { selectOnClick: true })
|
|
165
|
-
const hover = new HoverInteraction(nvl, { drawShadowOnHover: true })
|
|
166
|
-
|
|
167
|
-
click.updateCallback('onNodeClick', (node, hits, evt) => console.log('node', node.id))
|
|
168
|
-
click.updateCallback('onRelationshipClick', (rel, hits, evt) => console.log('rel', rel.id))
|
|
169
|
-
click.updateCallback('onClusterClick', (cluster, hits, evt) => console.log('cluster', cluster.id))
|
|
170
|
-
click.updateCallback('onCanvasClick', (evt) => console.log('canvas'))
|
|
171
|
-
hover.updateCallback('onHover', (el, hits, evt) => el && console.log('over', el.id))
|
|
172
|
-
drag.updateCallback('onDragEnd', (nodes, evt) => savePositions(nodes))
|
|
173
|
-
zoom.updateCallback('onZoomAndPan', (level, panX, panY) => console.log(level, panX, panY))
|
|
174
|
-
|
|
175
|
-
// Teardown — destroy all handlers, then the NVL instance
|
|
176
|
-
function teardown() {
|
|
177
|
-
for (const h of [zoom, pan, drag, click, hover]) h.destroy()
|
|
178
|
-
nvl.destroy()
|
|
179
|
-
}
|
|
120
|
+
const nodes = [{ id: '1', caption: 'A' }, { id: '2', caption: 'B' }]
|
|
121
|
+
const rels = [{ id: '12', from: '1', to: '2', type: 'KNOWS' }]
|
|
122
|
+
const nvl = new NVL(container, nodes, rels, { layout: 'forceDirected' }, {
|
|
123
|
+
onLayoutDone: () => nvl.fit(nodes.map((n) => n.id))
|
|
124
|
+
})
|
|
125
|
+
const handlers = [new ZoomInteraction(nvl), new PanInteraction(nvl), new DragNodeInteraction(nvl),
|
|
126
|
+
new ClickInteraction(nvl, { selectOnClick: true })]
|
|
127
|
+
handlers[3].updateCallback('onNodeClick', (node) => console.log(node.id))
|
|
128
|
+
// teardown: handlers.forEach((h) => h.destroy()); nvl.destroy()
|
|
180
129
|
```
|
|
181
130
|
|
|
182
|
-
Disable an event without removing the handler: `click.removeCallback('onCanvasClick')`. Passing `true` instead of a function enables the event with a no-op (useful for default selection behavior).
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## React — InteractiveNvlWrapper
|
|
187
|
-
|
|
188
|
-
Pre-wires every interaction handler. Toggle events with `mouseEventCallbacks` (function = on + callback; `true` = on, no-op; `false`/omit = off).
|
|
189
|
-
|
|
190
131
|
```tsx
|
|
191
132
|
import { InteractiveNvlWrapper } from '@neo4j-nvl/react'
|
|
192
|
-
import type {
|
|
133
|
+
import type { NVL } from '@neo4j-nvl/base'
|
|
193
134
|
import { useRef } from 'react'
|
|
194
|
-
import type { NVL, NvlOptions } from '@neo4j-nvl/base'
|
|
195
135
|
|
|
196
|
-
export function
|
|
136
|
+
export function Graph({ nodes, rels }) {
|
|
197
137
|
const nvlRef = useRef<NVL>(null)
|
|
198
|
-
|
|
199
|
-
const nvlOptions: NvlOptions = { initialZoom: 1, renderer: 'canvas' }
|
|
200
|
-
|
|
201
|
-
const mouseEventCallbacks: MouseEventCallbacks = {
|
|
202
|
-
onNodeClick: (node, hits, evt) => console.log('node', node.id),
|
|
203
|
-
onRelationshipClick: (rel, hits, evt) => console.log('rel', rel.id),
|
|
204
|
-
onClusterClick: (cluster, hits, evt) => console.log('cluster', cluster.id),
|
|
205
|
-
onCanvasClick: (evt) => console.log('canvas'),
|
|
206
|
-
onHover: (el, hits, evt) => {
|
|
207
|
-
if (el) console.log('hover', el.id)
|
|
208
|
-
if (hits.clusters[0]) console.log('cluster hover', hits.clusters[0].data.id)
|
|
209
|
-
},
|
|
210
|
-
onDragEnd: (nodes, evt) => persist(nodes),
|
|
211
|
-
onZoomAndPan: true, // enable, no callback
|
|
212
|
-
onPan: true
|
|
213
|
-
}
|
|
214
|
-
|
|
215
138
|
return (
|
|
216
139
|
<div style={{ width: '100%', height: 600 }}>
|
|
217
140
|
<InteractiveNvlWrapper
|
|
218
141
|
ref={nvlRef}
|
|
219
142
|
nodes={nodes}
|
|
220
143
|
rels={rels}
|
|
221
|
-
nvlOptions={
|
|
144
|
+
nvlOptions={{ layout: 'forceDirected', renderer: 'canvas' }}
|
|
222
145
|
interactionOptions={{ selectOnClick: true, drawShadowOnHover: true }}
|
|
223
|
-
mouseEventCallbacks={
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
`ref` resolves to the underlying `NVL` instance — call any method on it: `nvlRef.current?.fit([])`, `nvlRef.current?.setRenderer('webgl')`, `nvlRef.current?.saveToFile()`.
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## NVL 2.0 — Layout Clustering
|
|
236
|
-
|
|
237
|
-
`clusterBy` groups nodes whose callback returns the same string or number. Return `undefined` for independent nodes. Keep the callback reference stable in React with `useCallback`.
|
|
238
|
-
|
|
239
|
-
Force-directed clustering nests all clustering settings under `layoutOptions.clustering`:
|
|
240
|
-
|
|
241
|
-
```javascript
|
|
242
|
-
const clusterBy = (nodeId) => categoryByNodeId[nodeId]
|
|
243
|
-
|
|
244
|
-
const nvl = new NVL(container, nodes, relationships, {
|
|
245
|
-
layout: 'forceDirected',
|
|
246
|
-
layoutOptions: {
|
|
247
|
-
seedingMethod: 'circle',
|
|
248
|
-
clustering: {
|
|
249
|
-
clusterBy,
|
|
250
|
-
drawOutline: true,
|
|
251
|
-
drawHalo: true,
|
|
252
|
-
crossClusterRelationshipMultiplier: 0.2
|
|
253
|
-
}
|
|
254
|
-
},
|
|
255
|
-
minFps: 3,
|
|
256
|
-
maxFps: 30
|
|
257
|
-
})
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
`crossClusterRelationshipMultiplier` is experimental, capped to `0..1`, and can destabilize highly connected graphs near `1`. It affects cross-cluster spring pull only; intra-cluster edges remain full strength.
|
|
261
|
-
|
|
262
|
-
Hierarchical clustering places `clusterBy` directly in `layoutOptions`:
|
|
263
|
-
|
|
264
|
-
```javascript
|
|
265
|
-
const nvl = new NVL(container, nodes, relationships, {
|
|
266
|
-
layout: 'hierarchical',
|
|
267
|
-
layoutOptions: {
|
|
268
|
-
direction: 'down',
|
|
269
|
-
clusterBy
|
|
270
|
-
}
|
|
271
|
-
})
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
Cluster decorations and cluster hull interactions apply to force-directed `layoutOptions.clustering`. A `Cluster` is not a graph element; it has `{ id: string | number, nodeIds: string[] }`. Cluster callbacks fire only for empty space inside a cluster hull; node and relationship hits retain priority.
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## Migrating from NVL 1.x to 2.0
|
|
279
|
-
|
|
280
|
-
- Move React wrapper `layout` and `layoutOptions` props into `nvlOptions`:
|
|
281
|
-
`<InteractiveNvlWrapper nvlOptions={{ layout, layoutOptions }} />`.
|
|
282
|
-
- Replace interaction callback `onZoom` with `onZoomAndPan(zoom, panX, panY, event)`.
|
|
283
|
-
- Remove `intelWorkaround` and Cytoscape-related layout settings; they no longer exist.
|
|
284
|
-
- Treat WebGL as WebGL2-only and do not expect captions in the WebGL renderer.
|
|
285
|
-
- `getNodes()` and `onLayoutStep` return `NodeWithClientPosition[]`: `x`/`y` are layout coordinates and `clientPosition` is relative to the canvas element.
|
|
286
|
-
- Use `styling.overlayLineColor`; `styling.minimapViewportBoxColor` is deprecated.
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## React — BasicNvlWrapper + Ref
|
|
291
|
-
|
|
292
|
-
No interactions wired. The ref exposes every NVL method via `IncludeMethods<NVL>` — use when building custom interaction logic in React.
|
|
293
|
-
|
|
294
|
-
```tsx
|
|
295
|
-
import { BasicNvlWrapper } from '@neo4j-nvl/react'
|
|
296
|
-
import type { NVL } from '@neo4j-nvl/base'
|
|
297
|
-
import { useRef } from 'react'
|
|
298
|
-
|
|
299
|
-
export function MiniGraph({ nodes, rels }) {
|
|
300
|
-
const nvlRef = useRef<NVL>(null)
|
|
301
|
-
|
|
302
|
-
return (
|
|
303
|
-
<div style={{ width: '100%', height: 400 }}>
|
|
304
|
-
<BasicNvlWrapper
|
|
305
|
-
ref={nvlRef}
|
|
306
|
-
nodes={nodes}
|
|
307
|
-
rels={rels}
|
|
308
|
-
nvlOptions={{ initialZoom: 2 }}
|
|
309
|
-
nvlCallbacks={{ onLayoutDone: () => nvlRef.current?.fit([]) }}
|
|
146
|
+
mouseEventCallbacks={{
|
|
147
|
+
onNodeClick: (node) => console.log(node.id),
|
|
148
|
+
onZoomAndPan: true,
|
|
149
|
+
onPan: true,
|
|
150
|
+
onDrag: true
|
|
151
|
+
}}
|
|
152
|
+
nvlCallbacks={{ onLayoutDone: () => nvlRef.current?.fit(nodes.map((n) => n.id)) }}
|
|
310
153
|
/>
|
|
311
|
-
<button onClick={() => nvlRef.current?.fit(['1', '2'])}>Zoom to 1,2</button>
|
|
312
154
|
</div>
|
|
313
155
|
)
|
|
314
156
|
}
|
|
315
157
|
```
|
|
316
158
|
|
|
317
|
-
|
|
159
|
+
## Topic guides
|
|
160
|
+
|
|
161
|
+
Read the one that matches the task before writing code.
|
|
162
|
+
|
|
163
|
+
- [references/data-from-neo4j.md](references/data-from-neo4j.md) — `nvlResultTransformer` output, `recordObjectMap`, enriching nodes, Integer and temporal values
|
|
164
|
+
- [references/react-wrappers.md](references/react-wrappers.md) — callback-to-handler mapping, stale callbacks, live vs creation-time options, minimap container
|
|
165
|
+
- [references/clustering.md](references/clustering.md) — `clusterBy` per layout, outlines and halos, cluster click and hover, pins
|
|
166
|
+
- [references/layouts-and-positions.md](references/layouts-and-positions.md) — when layouts re-run, `setNodePositions`, pinning, layout callbacks
|
|
167
|
+
- [references/labels-and-overlays.md](references/labels-and-overlays.md) — captions vs `html` / `icon` / `overlayIcon`, coordinates for custom overlays
|
|
168
|
+
- [references/vite-and-bundlers.md](references/vite-and-bundlers.md) — worker setup per bundler, dev vs production, `disableWebWorkers`
|
|
169
|
+
- [references/verifying-nvl-apps.md](references/verifying-nvl-apps.md) — `window.__Nvl_*` hooks, headless Chrome flags, detecting a settled layout
|
|
170
|
+
- [references/lifecycle-and-updates.md](references/lifecycle-and-updates.md) — add/update/remove methods, `restart`, teardown, context loss, telemetry, `onError`
|
|
171
|
+
- [references/migrating-1x-to-2.md](references/migrating-1x-to-2.md) — removed options and renamed callbacks
|
|
172
|
+
|
|
173
|
+
## API reference
|
|
174
|
+
|
|
175
|
+
Generated from the installed version's type declarations. Open the page for the symbol you need; do not
|
|
176
|
+
load all of them.
|
|
177
|
+
|
|
178
|
+
### `@neo4j-nvl/base`
|
|
179
|
+
|
|
180
|
+
NVL class, options, callbacks, graph element types, hit testing, nvlResultTransformer.
|
|
181
|
+
|
|
182
|
+
**Classes**
|
|
318
183
|
|
|
319
|
-
|
|
184
|
+
- [NVL](references/api/base/classes/NVL.md) — Class for a NVL instance.
|
|
185
|
+
|
|
186
|
+
**Functions**
|
|
187
|
+
|
|
188
|
+
- [getZoomTargetForNodePositions](references/api/base/functions/getZoomTargetForNodePositions.md) — Gets the zoom target to fit the given node positions into the scene.
|
|
189
|
+
|
|
190
|
+
**Interfaces**
|
|
320
191
|
|
|
321
|
-
|
|
192
|
+
- [CircularOptions](references/api/base/interfaces/CircularOptions.md) — The options for the circular layout.
|
|
193
|
+
- [ClusteringOptions](references/api/base/interfaces/ClusteringOptions.md) — Options that control physical clustering and cluster decorations for the force-directed layout.
|
|
194
|
+
- [ExternalCallbacks](references/api/base/interfaces/ExternalCallbacks.md) — An object specifying the required callback functions for certain actions
|
|
195
|
+
- [ForceDirectedOptions](references/api/base/interfaces/ForceDirectedOptions.md) — The options for the force directed layout
|
|
196
|
+
- [HierarchicalOptions](references/api/base/interfaces/HierarchicalOptions.md) — The options for the hierarchical layout
|
|
197
|
+
- [HitTargetCluster](references/api/base/interfaces/HitTargetCluster.md) — A ClusteringOptions.clusterBy cluster hull that has been hit by a pointer event
|
|
198
|
+
- [HitTargetNode](references/api/base/interfaces/HitTargetNode.md) — A node that has been hit by a pointer event
|
|
199
|
+
- [HitTargetRelationship](references/api/base/interfaces/HitTargetRelationship.md) — A relationship that has been hit by a pointer event
|
|
200
|
+
- [Node](references/api/base/interfaces/Node.md) — A node inside the graph visualization.
|
|
201
|
+
- [NvlMouseEvent](references/api/base/interfaces/NvlMouseEvent.md) — The result of a NVL.getHits call.
|
|
202
|
+
- [NvlOptions](references/api/base/interfaces/NvlOptions.md) — Configurations for a NVL instance
|
|
203
|
+
- [Point](references/api/base/interfaces/Point.md) — An object representing a point in 2D space.
|
|
204
|
+
- [Relationship](references/api/base/interfaces/Relationship.md) — A relationship inside the graph visualization.
|
|
322
205
|
|
|
323
|
-
|
|
324
|
-
import neo4j from 'neo4j-driver'
|
|
325
|
-
import { NVL, nvlResultTransformer } from '@neo4j-nvl/base'
|
|
206
|
+
**Types**
|
|
326
207
|
|
|
327
|
-
|
|
328
|
-
|
|
208
|
+
- [CanvasRendererType](references/api/base/type-aliases/CanvasRendererType.md) — A renderer using canvas.
|
|
209
|
+
- [Cluster](references/api/base/type-aliases/Cluster.md) — A physical cluster produced by ClusteringOptions.clusterBy.
|
|
210
|
+
- [ClusterByFn](references/api/base/type-aliases/ClusterByFn.md) — Function that maps a node id to a ClusterId for force-directed clustering.
|
|
211
|
+
- [ClusterId](references/api/base/type-aliases/ClusterId.md) — Identifier returned by ClusterByFn to group nodes into physical clusters.
|
|
212
|
+
- [HitTargets](references/api/base/type-aliases/HitTargets.md) — A collection of nodes, relationships and clusters that have been hit by a pointer event
|
|
213
|
+
- [HitTestTarget](references/api/base/type-aliases/HitTestTarget.md)
|
|
214
|
+
- [Layout](references/api/base/type-aliases/Layout.md) — The different types of layouts available
|
|
215
|
+
- [LayoutOptions](references/api/base/type-aliases/LayoutOptions.md) — The options for the layout.
|
|
216
|
+
- [NodeWithClientPosition](references/api/base/type-aliases/NodeWithClientPosition.md) — A node returned by NVL.getNodes with layout coordinates and screen position.
|
|
217
|
+
- [PartialNode](references/api/base/type-aliases/PartialNode.md) — A node with only a subset of its properties.
|
|
218
|
+
- [PartialRelationship](references/api/base/type-aliases/PartialRelationship.md) — A relationship with only a subset of its properties.
|
|
219
|
+
- [Renderer](references/api/base/type-aliases/Renderer.md) — The different types of renderers available
|
|
220
|
+
- [StyledCaption](references/api/base/type-aliases/StyledCaption.md) — The caption text and its text style.
|
|
221
|
+
- [WebGLRendererType](references/api/base/type-aliases/WebGLRendererType.md) — A WebGL2 renderer that uses the GPU for rendering.
|
|
222
|
+
- [ZoomOptions](references/api/base/type-aliases/ZoomOptions.md) — Options that influence how fit-to-zoom should behave
|
|
329
223
|
|
|
330
|
-
|
|
331
|
-
'MATCH (a)-[r]-(b) RETURN a, r, b LIMIT 25',
|
|
332
|
-
{},
|
|
333
|
-
{ database: 'neo4j', resultTransformer: nvlResultTransformer }
|
|
334
|
-
)
|
|
224
|
+
**Variables**
|
|
335
225
|
|
|
336
|
-
|
|
337
|
-
|
|
226
|
+
- [CircularLayoutType](references/api/base/variables/CircularLayoutType.md) — A basic circular layout.
|
|
227
|
+
- [d3ForceLayoutType](references/api/base/variables/d3ForceLayoutType.md) — The commonly used d3-force layout.
|
|
228
|
+
- [ForceDirectedLayoutType](references/api/base/variables/ForceDirectedLayoutType.md) — NVL's main force directed layout.
|
|
229
|
+
- [FreeLayoutType](references/api/base/variables/FreeLayoutType.md) — A free layout that allows for arbitrary positioning of elements using NVL's setPosition method.
|
|
230
|
+
- [GridLayoutType](references/api/base/variables/GridLayoutType.md) — A basic grid layout.
|
|
231
|
+
- [HierarchicalLayoutType](references/api/base/variables/HierarchicalLayoutType.md) — A hierarchical layout using the dagre algorithm.
|
|
232
|
+
- [nvlResultTransformer](references/api/base/variables/nvlResultTransformer.md) — Result transformer for the Neo4j JavaScript driver results to NVL graph elements.
|
|
338
233
|
|
|
339
|
-
|
|
340
|
-
// ❌ raw EagerResult — records are not Node/Relationship objects
|
|
341
|
-
const result = await driver.executeQuery('MATCH (a)-[r]-(b) RETURN a, r, b')
|
|
342
|
-
new NVL(container, result.records, []) // breaks
|
|
343
|
-
|
|
344
|
-
// ✅ use the transformer
|
|
345
|
-
const { nodes, relationships } = await driver.executeQuery(
|
|
346
|
-
'MATCH (a)-[r]-(b) RETURN a, r, b',
|
|
347
|
-
{},
|
|
348
|
-
{ database: 'neo4j', resultTransformer: nvlResultTransformer }
|
|
349
|
-
)
|
|
350
|
-
new NVL(container, nodes, relationships)
|
|
351
|
-
```
|
|
234
|
+
### `@neo4j-nvl/interaction-handlers`
|
|
352
235
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
---
|
|
236
|
+
Zoom, pan, drag, click, hover, box/lasso select, keyboard handlers and their callbacks.
|
|
356
237
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
| Method | Behavior |
|
|
360
|
-
|---|---|
|
|
361
|
-
| `addAndUpdateElementsInGraph(nodes, rels)` | Insert new; update existing by id (only specified fields) |
|
|
362
|
-
| `updateElementsInGraph(nodes, rels)` | Update existing only; ignores unknown ids |
|
|
363
|
-
| `addElementsToGraph(nodes, rels)` | Insert only; throws on existing id |
|
|
364
|
-
| `removeNodesWithIds(ids)` | Remove nodes; adjacent relationships auto-removed |
|
|
365
|
-
| `removeRelationshipsWithIds(ids)` | Remove relationships |
|
|
366
|
-
| `setNodePositions(nodes, updateLayout?)` | Override positions; optionally re-run layout |
|
|
367
|
-
| `restart(options?, retainPositions?)` | Restart with new options; positions optional |
|
|
368
|
-
|
|
369
|
-
Diff updates use `PartialNode` / `PartialRelationship` — only `id` is required:
|
|
370
|
-
|
|
371
|
-
```javascript
|
|
372
|
-
nvl.updateElementsInGraph(
|
|
373
|
-
[{ id: '1', color: '#f00', selected: true }], // PartialNode
|
|
374
|
-
[{ id: '12', width: 4 }] // PartialRelationship
|
|
375
|
-
)
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
---
|
|
238
|
+
**Classes**
|
|
379
239
|
|
|
380
|
-
|
|
240
|
+
- [BoxSelectInteraction](references/api/interaction-handlers/classes/BoxSelectInteraction.md) — An interaction handler for multi-selecting nodes and relationships.
|
|
241
|
+
- [ClickInteraction](references/api/interaction-handlers/classes/ClickInteraction.md) — Click interaction handler that handles click, double click and right click events on
|
|
242
|
+
- [DragNodeInteraction](references/api/interaction-handlers/classes/DragNodeInteraction.md) — Interaction handler for dragging nodes,
|
|
243
|
+
- [HoverInteraction](references/api/interaction-handlers/classes/HoverInteraction.md) — Interaction handler for hovering nodes and relationships.
|
|
244
|
+
- [KeyboardInteraction](references/api/interaction-handlers/classes/KeyboardInteraction.md) — Opinionated interaction handler for keyboard-driven focus navigation
|
|
245
|
+
- [LassoInteraction](references/api/interaction-handlers/classes/LassoInteraction.md) — An interaction handler that lets you select nodes and relationships by drawing a lasso around them.
|
|
246
|
+
- [PanInteraction](references/api/interaction-handlers/classes/PanInteraction.md) — Interaction handler for panning the scene, which is achieved by clicking and moving the scene.
|
|
247
|
+
- [ZoomInteraction](references/api/interaction-handlers/classes/ZoomInteraction.md) — Interaction handler for zooming the canvas, which is achieved by:
|
|
381
248
|
|
|
382
|
-
|
|
249
|
+
**Types**
|
|
383
250
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
| Mistake | Fix |
|
|
406
|
-
|---|---|
|
|
407
|
-
| Container with no `height` → invisible graph | Set explicit `width` and `height` on the container |
|
|
408
|
-
| Pass `driver.executeQuery` result directly | Use `nvlResultTransformer` and consume `{ nodes, relationships }` |
|
|
409
|
-
| WebGL for small label-rich graphs | Use `'canvas'`; labels are fully supported |
|
|
410
|
-
| Canvas for 10k+ nodes | Switch to `'webgl'` via `renderer` option or `setRenderer` |
|
|
411
|
-
| New `NVL` per React render | Use `<InteractiveNvlWrapper>` / `<BasicNvlWrapper>` or wrap in `useEffect` + `destroy()` |
|
|
412
|
-
| Forgetting `nvl.destroy()` on teardown | Call `destroy()` on unmount; React wrappers handle this automatically |
|
|
413
|
-
| Vanilla handlers not torn down | Call `.destroy()` on every interaction before `nvl.destroy()` |
|
|
414
|
-
| Worker construction blocked (strict CSP / sandboxed runtime / older bundler) | `nvlOptions: { disableWebWorkers: true }` (NVL has a non-worker fallback) |
|
|
415
|
-
| Telemetry enabled in regulated env | `nvlOptions: { disableTelemetry: true }` |
|
|
416
|
-
| Layout never settles | Pin anchor nodes with `pinNode(id)`; tune `layoutTimeLimit` |
|
|
417
|
-
| `selectOnClick` fires double | Toggle once at mount; don't flip `interactionOptions` per render |
|
|
418
|
-
| Hit test misses near node edge | Pass `{ hitNodeMarginWidth: N }` to `getHits` |
|
|
419
|
-
| Captions missing on WebGL | Expected in 2.0; captions are Canvas-only, so use `'canvas'` when labels matter |
|
|
420
|
-
| React wrapper ignores `layout` / `layoutOptions` | In 2.0 these must be nested in `nvlOptions` |
|
|
421
|
-
| `onZoom` never fires | It was removed in 2.0; use `onZoomAndPan` |
|
|
422
|
-
| Cluster callback misses clicks on a node | Cluster callbacks target empty cluster-hull space; node hits take priority |
|
|
423
|
-
|
|
424
|
-
---
|
|
425
|
-
|
|
426
|
-
## References
|
|
427
|
-
|
|
428
|
-
Load on demand:
|
|
429
|
-
- [references/api-surface.md](references/api-surface.md) — complete 2.0 `NVL` method table; clustering, FPS, seeding, `NodeWithClientPosition`, hit target and interaction callback types; React props; named exports; `nvlResultTransformer`
|
|
430
|
-
- [references/troubleshooting.md](references/troubleshooting.md) — zero-height container, WebGL2 and Canvas trade-offs, clustering configuration, 1.x migration errors, worker fallback, context loss, telemetry, lifecycle, layout and hit-testing issues
|
|
431
|
-
|
|
432
|
-
Canonical web documentation (use `WebFetch` when references above are insufficient):
|
|
433
|
-
- https://neo4j.com/docs/nvl/current/ — user guide (installation, base library, interaction handlers, React wrappers)
|
|
434
|
-
- https://neo4j.com/docs/api/nvl/current/ — TypeDoc API reference
|
|
435
|
-
- https://neo4j.com/docs/api/nvl/current/examples.html — runnable examples
|
|
436
|
-
- https://github.com/neo4j-devtools/nvl-boilerplates — official starter templates per supported framework
|
|
437
|
-
- https://github.com/neo4j/python-graph-visualization — Python port of NVL (use this skill only for the JavaScript/browser path)
|
|
438
|
-
|
|
439
|
-
---
|
|
251
|
+
- [BoxSelectInteractionCallbacks](references/api/interaction-handlers/type-aliases/BoxSelectInteractionCallbacks.md) — Callbacks for the box select interaction handler.
|
|
252
|
+
- [BoxSelectInteractionOptions](references/api/interaction-handlers/type-aliases/BoxSelectInteractionOptions.md) — Options for the multi-select interaction handler to customize its behavior.
|
|
253
|
+
- [ClickInteractionCallbacks](references/api/interaction-handlers/type-aliases/ClickInteractionCallbacks.md) — Callbacks for the click interaction handler.
|
|
254
|
+
- [ClickInteractionOptions](references/api/interaction-handlers/type-aliases/ClickInteractionOptions.md) — Options for the click interaction handler to customize its behavior.
|
|
255
|
+
- [DragNodeInteractionCallbacks](references/api/interaction-handlers/type-aliases/DragNodeInteractionCallbacks.md) — Callbacks for the drag node interaction handler.
|
|
256
|
+
- [DrawInteractionOptions](references/api/interaction-handlers/type-aliases/DrawInteractionOptions.md) — Options for the draw interaction handler.
|
|
257
|
+
- [HoverInteractionCallbacks](references/api/interaction-handlers/type-aliases/HoverInteractionCallbacks.md) — Callbacks for the hover interaction handler.
|
|
258
|
+
- [HoverInteractionOptions](references/api/interaction-handlers/type-aliases/HoverInteractionOptions.md) — Options for the hover interaction handler to customize its behavior.
|
|
259
|
+
- [KeyboardInteractionCallbacks](references/api/interaction-handlers/type-aliases/KeyboardInteractionCallbacks.md) — Callbacks for the keyboard interaction handler.
|
|
260
|
+
- [KeyboardInteractionOptions](references/api/interaction-handlers/type-aliases/KeyboardInteractionOptions.md) — Options for the keyboard interaction handler.
|
|
261
|
+
- [LassoInteractionCallbacks](references/api/interaction-handlers/type-aliases/LassoInteractionCallbacks.md) — Callbacks for the lasso interaction handler.
|
|
262
|
+
- [LassoInteractionOptions](references/api/interaction-handlers/type-aliases/LassoInteractionOptions.md) — Options for the lasso interaction handler to customize its behavior.
|
|
263
|
+
- [PanInteractionCallbacks](references/api/interaction-handlers/type-aliases/PanInteractionCallbacks.md) — Callbacks for the pan interaction handler.
|
|
264
|
+
- [PanInteractionOptions](references/api/interaction-handlers/type-aliases/PanInteractionOptions.md) — Options for the pan interaction handler to customize its behavior.
|
|
265
|
+
- [ZoomInteractionCallbacks](references/api/interaction-handlers/type-aliases/ZoomInteractionCallbacks.md) — Callbacks for the zoom interaction handler.
|
|
266
|
+
- [ZoomInteractionOptions](references/api/interaction-handlers/type-aliases/ZoomInteractionOptions.md) — Options for the zoom interaction handler to customize its behavior.
|
|
267
|
+
|
|
268
|
+
### `@neo4j-nvl/react`
|
|
269
|
+
|
|
270
|
+
InteractiveNvlWrapper, BasicNvlWrapper, StaticPictureWrapper and their props.
|
|
440
271
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
- [
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
- [
|
|
448
|
-
- [
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
- [
|
|
453
|
-
- [
|
|
454
|
-
- [
|
|
455
|
-
- [
|
|
456
|
-
- [
|
|
272
|
+
**Functions**
|
|
273
|
+
|
|
274
|
+
- [StaticPictureWrapper](references/api/react/functions/StaticPictureWrapper.md) — A React component that creates a static picture of a graph using NVL.
|
|
275
|
+
|
|
276
|
+
**Interfaces**
|
|
277
|
+
|
|
278
|
+
- [BasicReactWrapperProps](references/api/react/interfaces/BasicReactWrapperProps.md) — The properties that can be passed to the BasicNvlWrapper component.
|
|
279
|
+
- [InteractiveNvlWrapperProps](references/api/react/interfaces/InteractiveNvlWrapperProps.md) — The properties that can be passed to the InteractiveNvlWrapper component.
|
|
280
|
+
|
|
281
|
+
**Types**
|
|
282
|
+
|
|
283
|
+
- [InteractionOptions](references/api/react/type-aliases/InteractionOptions.md) — Collection of interaction options that can be used with
|
|
284
|
+
- [KeyboardEvent](references/api/react/type-aliases/KeyboardEvent.md)
|
|
285
|
+
- [KeyboardEventCallbacks](references/api/react/type-aliases/KeyboardEventCallbacks.md) — Collection of keyboard event callbacks that can be used with
|
|
286
|
+
- [MouseEvent](references/api/react/type-aliases/MouseEvent.md) — The events that can be passed to the MouseEventCallbacks object
|
|
287
|
+
- [MouseEventCallbacks](references/api/react/type-aliases/MouseEventCallbacks.md) — Collection of mouse event callbacks that can be used with
|
|
288
|
+
- [StaticPictureWrapperProps](references/api/react/type-aliases/StaticPictureWrapperProps.md) — The properties that can be passed to the StaticPictureWrapper component.
|
|
289
|
+
|
|
290
|
+
**Variables**
|
|
291
|
+
|
|
292
|
+
- [BasicNvlWrapper](references/api/react/variables/BasicNvlWrapper.md) — A basic React wrapper that wraps the NVL base library within a React component.
|
|
293
|
+
- [InteractiveNvlWrapper](references/api/react/variables/InteractiveNvlWrapper.md) — The interactive React wrapper component contains a collection of interaction handlers by default
|
|
294
|
+
|
|
295
|
+
Web: user guide https://neo4j.com/docs/nvl/current/ · API https://neo4j.com/docs/api/nvl/current/ ·
|
|
296
|
+
examples https://neo4j.com/docs/api/nvl/current/examples.html
|