@neo4j-ndl/react 3.8.7 → 3.8.9
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/lib/cjs/graph-visualization/graph-viz-buttons.js +142 -0
- package/lib/cjs/graph-visualization/graph-viz-buttons.js.map +1 -0
- package/lib/cjs/graph-visualization/graph-viz-context.js +62 -0
- package/lib/cjs/graph-visualization/graph-viz-context.js.map +1 -0
- package/lib/cjs/graph-visualization/graph-viz-sidepanel.js +56 -0
- package/lib/cjs/graph-visualization/graph-viz-sidepanel.js.map +1 -0
- package/lib/cjs/graph-visualization/graph-viz.js +289 -0
- package/lib/cjs/graph-visualization/graph-viz.js.map +1 -0
- package/lib/cjs/graph-visualization/index.js +44 -0
- package/lib/cjs/graph-visualization/index.js.map +1 -0
- package/lib/cjs/graph-visualization/map-to-nvl-graph.js +167 -0
- package/lib/cjs/graph-visualization/map-to-nvl-graph.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/button-group.js +96 -0
- package/lib/cjs/graph-visualization/sidepanel-components/button-group.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/clickable-urls-test.js +214 -0
- package/lib/cjs/graph-visualization/sidepanel-components/clickable-urls-test.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/clickable-urls.js +46 -0
- package/lib/cjs/graph-visualization/sidepanel-components/clickable-urls.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/details-panel.js +87 -0
- package/lib/cjs/graph-visualization/sidepanel-components/details-panel.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/overview-panel.js +45 -0
- package/lib/cjs/graph-visualization/sidepanel-components/overview-panel.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/properties-table.js +49 -0
- package/lib/cjs/graph-visualization/sidepanel-components/properties-table.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/show-all.js +44 -0
- package/lib/cjs/graph-visualization/sidepanel-components/show-all.js.map +1 -0
- package/lib/cjs/graph-visualization/sidepanel-components/single-selection-sidepanel-contents.js +35 -0
- package/lib/cjs/graph-visualization/sidepanel-components/single-selection-sidepanel-contents.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-barebones.story.js +93 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-barebones.story.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-custom.story.js +74 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-custom.story.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-default.story.js +93 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-default.story.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-maximalist.story.js +106 -0
- package/lib/cjs/graph-visualization/stories/graph-viz-maximalist.story.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/graph-viz.stories.js +85 -0
- package/lib/cjs/graph-visualization/stories/graph-viz.stories.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/index.js +44 -0
- package/lib/cjs/graph-visualization/stories/index.js.map +1 -0
- package/lib/cjs/graph-visualization/stories/story-data.js +89 -0
- package/lib/cjs/graph-visualization/stories/story-data.js.map +1 -0
- package/lib/cjs/graph-visualization/use-managed-selection-state.js +258 -0
- package/lib/cjs/graph-visualization/use-managed-selection-state.js.map +1 -0
- package/lib/cjs/graph-visualization/use-semi-controlled-state.js +38 -0
- package/lib/cjs/graph-visualization/use-semi-controlled-state.js.map +1 -0
- package/lib/cjs/graph-visualization/utils.js +30 -0
- package/lib/cjs/graph-visualization/utils.js.map +1 -0
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/graph-visualization/graph-viz-buttons.js +127 -0
- package/lib/esm/graph-visualization/graph-viz-buttons.js.map +1 -0
- package/lib/esm/graph-visualization/graph-viz-context.js +58 -0
- package/lib/esm/graph-visualization/graph-viz-context.js.map +1 -0
- package/lib/esm/graph-visualization/graph-viz-sidepanel.js +52 -0
- package/lib/esm/graph-visualization/graph-viz-sidepanel.js.map +1 -0
- package/lib/esm/graph-visualization/graph-viz.js +259 -0
- package/lib/esm/graph-visualization/graph-viz.js.map +1 -0
- package/lib/esm/graph-visualization/index.js +25 -0
- package/lib/esm/graph-visualization/index.js.map +1 -0
- package/lib/esm/graph-visualization/map-to-nvl-graph.js +162 -0
- package/lib/esm/graph-visualization/map-to-nvl-graph.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/button-group.js +69 -0
- package/lib/esm/graph-visualization/sidepanel-components/button-group.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/clickable-urls-test.js +212 -0
- package/lib/esm/graph-visualization/sidepanel-components/clickable-urls-test.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/clickable-urls.js +40 -0
- package/lib/esm/graph-visualization/sidepanel-components/clickable-urls.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/details-panel.js +83 -0
- package/lib/esm/graph-visualization/sidepanel-components/details-panel.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/overview-panel.js +41 -0
- package/lib/esm/graph-visualization/sidepanel-components/overview-panel.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/properties-table.js +45 -0
- package/lib/esm/graph-visualization/sidepanel-components/properties-table.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/show-all.js +41 -0
- package/lib/esm/graph-visualization/sidepanel-components/show-all.js.map +1 -0
- package/lib/esm/graph-visualization/sidepanel-components/single-selection-sidepanel-contents.js +31 -0
- package/lib/esm/graph-visualization/sidepanel-components/single-selection-sidepanel-contents.js.map +1 -0
- package/lib/esm/graph-visualization/stories/graph-viz-barebones.story.js +90 -0
- package/lib/esm/graph-visualization/stories/graph-viz-barebones.story.js.map +1 -0
- package/lib/esm/graph-visualization/stories/graph-viz-custom.story.js +71 -0
- package/lib/esm/graph-visualization/stories/graph-viz-custom.story.js.map +1 -0
- package/lib/esm/graph-visualization/stories/graph-viz-default.story.js +90 -0
- package/lib/esm/graph-visualization/stories/graph-viz-default.story.js.map +1 -0
- package/lib/esm/graph-visualization/stories/graph-viz-maximalist.story.js +103 -0
- package/lib/esm/graph-visualization/stories/graph-viz-maximalist.story.js.map +1 -0
- package/lib/esm/graph-visualization/stories/graph-viz.stories.js +82 -0
- package/lib/esm/graph-visualization/stories/graph-viz.stories.js.map +1 -0
- package/lib/esm/graph-visualization/stories/index.js +34 -0
- package/lib/esm/graph-visualization/stories/index.js.map +1 -0
- package/lib/esm/graph-visualization/stories/story-data.js +86 -0
- package/lib/esm/graph-visualization/stories/story-data.js.map +1 -0
- package/lib/esm/graph-visualization/use-managed-selection-state.js +255 -0
- package/lib/esm/graph-visualization/use-managed-selection-state.js.map +1 -0
- package/lib/esm/graph-visualization/use-semi-controlled-state.js +35 -0
- package/lib/esm/graph-visualization/use-semi-controlled-state.js.map +1 -0
- package/lib/esm/graph-visualization/utils.js +25 -0
- package/lib/esm/graph-visualization/utils.js.map +1 -0
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/types/graph-visualization/graph-viz-buttons.d.ts +49 -0
- package/lib/types/graph-visualization/graph-viz-context.d.ts +122 -0
- package/lib/types/graph-visualization/graph-viz-sidepanel.d.ts +32 -0
- package/lib/types/graph-visualization/graph-viz.d.ts +149 -0
- package/lib/types/graph-visualization/index.d.ts +24 -0
- package/lib/types/graph-visualization/map-to-nvl-graph.d.ts +37 -0
- package/lib/types/graph-visualization/sidepanel-components/button-group.d.ts +24 -0
- package/lib/types/graph-visualization/sidepanel-components/clickable-urls-test.d.ts +21 -0
- package/lib/types/graph-visualization/sidepanel-components/clickable-urls.d.ts +26 -0
- package/lib/types/graph-visualization/sidepanel-components/details-panel.d.ts +25 -0
- package/lib/types/graph-visualization/sidepanel-components/overview-panel.d.ts +21 -0
- package/lib/types/graph-visualization/sidepanel-components/properties-table.d.ts +31 -0
- package/lib/types/graph-visualization/sidepanel-components/show-all.d.ts +29 -0
- package/lib/types/graph-visualization/sidepanel-components/single-selection-sidepanel-contents.d.ts +21 -0
- package/lib/types/graph-visualization/stories/graph-viz-barebones.story.d.ts +23 -0
- package/lib/types/graph-visualization/stories/graph-viz-custom.story.d.ts +23 -0
- package/lib/types/graph-visualization/stories/graph-viz-default.story.d.ts +23 -0
- package/lib/types/graph-visualization/stories/graph-viz-maximalist.story.d.ts +23 -0
- package/lib/types/graph-visualization/stories/graph-viz.stories.d.ts +36 -0
- package/lib/types/graph-visualization/stories/index.d.ts +28 -0
- package/lib/types/graph-visualization/stories/story-data.d.ts +26 -0
- package/lib/types/graph-visualization/use-managed-selection-state.d.ts +114 -0
- package/lib/types/graph-visualization/use-semi-controlled-state.d.ts +21 -0
- package/lib/types/graph-visualization/utils.d.ts +23 -0
- package/lib/types/index.d.ts +1 -0
- package/package.json +7 -2
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
export const StoryGraph = {
|
|
22
|
+
nodes: [
|
|
23
|
+
{
|
|
24
|
+
id: 'node1',
|
|
25
|
+
labels: ['Pokemon', 'Legendary'],
|
|
26
|
+
properties: {
|
|
27
|
+
durationToWinBattle: {
|
|
28
|
+
stringified: 'P0M0DT0.000000001S',
|
|
29
|
+
type: 'duration',
|
|
30
|
+
},
|
|
31
|
+
favoriteColors: {
|
|
32
|
+
stringified: '["red", "blue", "green"]',
|
|
33
|
+
type: 'list',
|
|
34
|
+
},
|
|
35
|
+
getsBeatBy: {
|
|
36
|
+
stringified: 'null',
|
|
37
|
+
type: 'null',
|
|
38
|
+
},
|
|
39
|
+
isAwesome: {
|
|
40
|
+
stringified: 'true',
|
|
41
|
+
type: 'boolean',
|
|
42
|
+
},
|
|
43
|
+
location: {
|
|
44
|
+
stringified: 'point({srid:1, x:100, y:200, z:300})',
|
|
45
|
+
type: 'point',
|
|
46
|
+
},
|
|
47
|
+
name: {
|
|
48
|
+
stringified: '"Rayquaza"',
|
|
49
|
+
type: 'string',
|
|
50
|
+
},
|
|
51
|
+
weight: {
|
|
52
|
+
stringified: '392.0',
|
|
53
|
+
type: 'float',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'node2',
|
|
59
|
+
labels: ['Type'],
|
|
60
|
+
properties: { name: { stringified: 'Dragon', type: 'String' } },
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: 'node3',
|
|
64
|
+
labels: ['Type'],
|
|
65
|
+
properties: { name: { stringified: 'Flying', type: 'String' } },
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
rels: [
|
|
69
|
+
{
|
|
70
|
+
from: 'node1',
|
|
71
|
+
id: 'rel1',
|
|
72
|
+
properties: {},
|
|
73
|
+
to: 'node2',
|
|
74
|
+
type: 'HAS_TYPE',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
from: 'node1',
|
|
78
|
+
id: 'rel2',
|
|
79
|
+
properties: {},
|
|
80
|
+
to: 'node3',
|
|
81
|
+
type: 'HAS_TYPE',
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
export const containerClasses = 'n-w-full n-border-palette-neutral-border-weak n-mx-2 n-rounded-lg n-border';
|
|
86
|
+
//# sourceMappingURL=story-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-data.js","sourceRoot":"","sources":["../../../../src/graph-visualization/stories/story-data.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,CAAC,MAAM,UAAU,GAAyC;IAC9D,KAAK,EAAE;QACL;YACE,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC;YAChC,UAAU,EAAE;gBACV,mBAAmB,EAAE;oBACnB,WAAW,EAAE,oBAAoB;oBACjC,IAAI,EAAE,UAAU;iBACjB;gBACD,cAAc,EAAE;oBACd,WAAW,EAAE,0BAA0B;oBACvC,IAAI,EAAE,MAAM;iBACb;gBACD,UAAU,EAAE;oBACV,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,MAAM;iBACb;gBACD,SAAS,EAAE;oBACT,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,SAAS;iBAChB;gBACD,QAAQ,EAAE;oBACR,WAAW,EAAE,sCAAsC;oBACnD,IAAI,EAAE,OAAO;iBACd;gBACD,IAAI,EAAE;oBACJ,WAAW,EAAE,YAAY;oBACzB,IAAI,EAAE,QAAQ;iBACf;gBACD,MAAM,EAAE;oBACN,WAAW,EAAE,OAAO;oBACpB,IAAI,EAAE,OAAO;iBACd;aACF;SACF;QACD;YACE,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SAChE;QACD;YACE,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,CAAC,MAAM,CAAC;YAChB,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SAChE;KACF;IACD,IAAI,EAAE;QACJ;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,MAAM;YACV,UAAU,EAAE,EAAE;YACd,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,UAAU;SACjB;QACD;YACE,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,MAAM;YACV,UAAU,EAAE,EAAE;YACd,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,UAAU;SACjB;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAC3B,4EAA4E,CAAC"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
import { useCallback, useEffect, useMemo } from 'react';
|
|
22
|
+
import { isMac } from './utils';
|
|
23
|
+
const isMultiSelectKeyPressed = (evt) => (!isMac && evt.ctrlKey) || (isMac && evt.metaKey);
|
|
24
|
+
const isClickingOnTextInput = (e) => {
|
|
25
|
+
if (!(e.target instanceof HTMLElement)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return (e.target.isContentEditable ||
|
|
29
|
+
['INPUT', 'TEXTAREA'].includes(e.target.tagName));
|
|
30
|
+
};
|
|
31
|
+
export function useManagedSelectionState({ selected, setSelected, gesture, interactionMode, setInteractionMode, mouseEventCallbacks, nvlGraph, }) {
|
|
32
|
+
const panOnSpace = useCallback((evt) => {
|
|
33
|
+
// We could check the gesture here
|
|
34
|
+
// but it doesn't really matter if we switch to panning mode even in single select
|
|
35
|
+
if (interactionMode === 'select' && evt.key === ' ') {
|
|
36
|
+
setInteractionMode('pan');
|
|
37
|
+
}
|
|
38
|
+
}, [interactionMode, setInteractionMode]);
|
|
39
|
+
const stopPanningReleaseSpace = useCallback((evt) => {
|
|
40
|
+
if (interactionMode === 'pan' && evt.key === ' ') {
|
|
41
|
+
setInteractionMode('select');
|
|
42
|
+
}
|
|
43
|
+
}, [interactionMode, setInteractionMode]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
document.addEventListener('keydown', panOnSpace);
|
|
46
|
+
document.addEventListener('keyup', stopPanningReleaseSpace);
|
|
47
|
+
return () => {
|
|
48
|
+
document.removeEventListener('keydown', panOnSpace);
|
|
49
|
+
document.removeEventListener('keyup', stopPanningReleaseSpace);
|
|
50
|
+
};
|
|
51
|
+
}, [panOnSpace, stopPanningReleaseSpace]);
|
|
52
|
+
const { onBoxSelect: originalBoxSelect, onLassoSelect: originalOnLassoSelect, onLassoStarted, onBoxStarted, onPan = true, onHover, onHoverNodeMargin, onNodeClick: originalOnNodeClick, onRelationshipClick: originalOnRelationshipClick, onDragStart: originalOnDragStart, onDragEnd: originalOnDragEnd, onDrawEnded: originalOnDrawEnded, onDrawStarted: originalOnDrawStarted, onCanvasClick: originalOnCanvasClick, onNodeDoubleClick: originalOnNodeDoubleClick, onRelationshipDoubleClick: originalOnRelationshipDoubleClick, } = mouseEventCallbacks;
|
|
53
|
+
const onCanvasClick = useCallback((evt) => {
|
|
54
|
+
if (isClickingOnTextInput(evt)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Clear selection
|
|
58
|
+
setSelected({ nodeIds: [], relationshipIds: [] });
|
|
59
|
+
if (typeof originalOnCanvasClick === 'function') {
|
|
60
|
+
originalOnCanvasClick(evt);
|
|
61
|
+
}
|
|
62
|
+
}, [originalOnCanvasClick, setSelected]);
|
|
63
|
+
const onDragStart = useCallback((draggedNodes, evt) => {
|
|
64
|
+
setInteractionMode('drag');
|
|
65
|
+
// Update Selection
|
|
66
|
+
const draggedNodeIds = draggedNodes.map((n) => n.id);
|
|
67
|
+
if (selected.nodeIds.length === 0 || isMultiSelectKeyPressed(evt)) {
|
|
68
|
+
setSelected({
|
|
69
|
+
nodeIds: draggedNodeIds,
|
|
70
|
+
relationshipIds: selected.relationshipIds,
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setSelected({
|
|
75
|
+
nodeIds: draggedNodeIds,
|
|
76
|
+
relationshipIds: selected.relationshipIds,
|
|
77
|
+
});
|
|
78
|
+
if (typeof originalOnDragStart === 'function') {
|
|
79
|
+
originalOnDragStart(draggedNodes, evt);
|
|
80
|
+
}
|
|
81
|
+
}, [setSelected, originalOnDragStart, selected, setInteractionMode]);
|
|
82
|
+
const onDragEnd = useCallback((draggedNodes, evt) => {
|
|
83
|
+
if (typeof originalOnDragEnd === 'function') {
|
|
84
|
+
originalOnDragEnd(draggedNodes, evt);
|
|
85
|
+
}
|
|
86
|
+
setInteractionMode('select');
|
|
87
|
+
}, [originalOnDragEnd, setInteractionMode]);
|
|
88
|
+
// wrapping so that there's a function passed, even if the original function is undefined
|
|
89
|
+
const onDrawStarted = useCallback((evt) => {
|
|
90
|
+
if (typeof originalOnDrawStarted === 'function') {
|
|
91
|
+
originalOnDrawStarted(evt);
|
|
92
|
+
}
|
|
93
|
+
}, [originalOnDrawStarted]);
|
|
94
|
+
const onDrawEnded = useCallback((newRelationshipToAdd, newTargetNodeToAdd, event) => {
|
|
95
|
+
if (typeof originalOnDrawEnded === 'function') {
|
|
96
|
+
originalOnDrawEnded(newRelationshipToAdd, newTargetNodeToAdd, event);
|
|
97
|
+
}
|
|
98
|
+
}, [originalOnDrawEnded]);
|
|
99
|
+
const onNodeClick = useCallback((node, hitElements, evt) => {
|
|
100
|
+
if (isClickingOnTextInput(evt)) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (isMultiSelectKeyPressed(evt)) {
|
|
104
|
+
// if not selected, add to selection, otherwise deselect
|
|
105
|
+
const isNodeSelected = selected.nodeIds.includes(node.id);
|
|
106
|
+
if (isNodeSelected) {
|
|
107
|
+
const newSelectedNodeIds = selected.nodeIds.filter((id) => id !== node.id);
|
|
108
|
+
setSelected({
|
|
109
|
+
nodeIds: newSelectedNodeIds,
|
|
110
|
+
relationshipIds: selected.relationshipIds,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const newSelectedNodeIds = [...selected.nodeIds, node.id];
|
|
115
|
+
setSelected({
|
|
116
|
+
nodeIds: newSelectedNodeIds,
|
|
117
|
+
relationshipIds: selected.relationshipIds,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
setSelected({ nodeIds: [node.id], relationshipIds: [] });
|
|
123
|
+
}
|
|
124
|
+
if (typeof originalOnNodeClick === 'function') {
|
|
125
|
+
originalOnNodeClick(node, hitElements, evt);
|
|
126
|
+
}
|
|
127
|
+
}, [setSelected, selected, originalOnNodeClick]);
|
|
128
|
+
const onRelationshipClick = useCallback((relationship, hitElements, evt) => {
|
|
129
|
+
if (isClickingOnTextInput(evt)) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (isMultiSelectKeyPressed(evt)) {
|
|
133
|
+
// if not selected, add to selection, otherwise deselect
|
|
134
|
+
const isRelationshipSelected = selected.relationshipIds.includes(relationship.id);
|
|
135
|
+
if (isRelationshipSelected) {
|
|
136
|
+
const newSelectedRelIds = selected.relationshipIds.filter((id) => id !== relationship.id);
|
|
137
|
+
setSelected({
|
|
138
|
+
nodeIds: selected.nodeIds,
|
|
139
|
+
relationshipIds: newSelectedRelIds,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
const newSelectedRelIds = [
|
|
144
|
+
...selected.relationshipIds,
|
|
145
|
+
relationship.id,
|
|
146
|
+
];
|
|
147
|
+
setSelected({
|
|
148
|
+
nodeIds: selected.nodeIds,
|
|
149
|
+
relationshipIds: newSelectedRelIds,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
setSelected({ nodeIds: [], relationshipIds: [relationship.id] });
|
|
155
|
+
}
|
|
156
|
+
if (typeof originalOnRelationshipClick === 'function') {
|
|
157
|
+
originalOnRelationshipClick(relationship, hitElements, evt);
|
|
158
|
+
}
|
|
159
|
+
}, [setSelected, selected, originalOnRelationshipClick]);
|
|
160
|
+
const onNodeDoubleClick = useCallback((node, hitElements, evt) => {
|
|
161
|
+
if (isClickingOnTextInput(evt)) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (typeof originalOnNodeDoubleClick === 'function') {
|
|
165
|
+
originalOnNodeDoubleClick(node, hitElements, evt);
|
|
166
|
+
}
|
|
167
|
+
}, [originalOnNodeDoubleClick]);
|
|
168
|
+
const onRelationshipDoubleClick = useCallback((relationship, hitElements, evt) => {
|
|
169
|
+
if (isClickingOnTextInput(evt)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (typeof originalOnRelationshipDoubleClick === 'function') {
|
|
173
|
+
originalOnRelationshipDoubleClick(relationship, hitElements, evt);
|
|
174
|
+
}
|
|
175
|
+
}, [originalOnRelationshipDoubleClick]);
|
|
176
|
+
const onMultiSelect = useCallback((nodes, rels, evt) => {
|
|
177
|
+
const nodeIds = nodes.map((n) => n.id);
|
|
178
|
+
const relationshipIds = rels.map((r) => r.id);
|
|
179
|
+
if (isMultiSelectKeyPressed(evt)) {
|
|
180
|
+
const currentlySelectedNodeIds = selected.nodeIds;
|
|
181
|
+
const currentlySelectedRelIds = selected.relationshipIds;
|
|
182
|
+
// Toggle selection: items that are already selected should be removed from selection,
|
|
183
|
+
// those that are not should be added
|
|
184
|
+
const xor = (a, b) => [
|
|
185
|
+
...new Set([...a, ...b].filter((id) => !a.includes(id) || !b.includes(id))),
|
|
186
|
+
];
|
|
187
|
+
const newSelectedNodeIds = xor(currentlySelectedNodeIds, nodeIds);
|
|
188
|
+
const newSelectedRelIds = xor(currentlySelectedRelIds, relationshipIds);
|
|
189
|
+
setSelected({
|
|
190
|
+
nodeIds: newSelectedNodeIds,
|
|
191
|
+
relationshipIds: newSelectedRelIds,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// REPLACE selection
|
|
196
|
+
setSelected({ nodeIds: nodeIds, relationshipIds: relationshipIds });
|
|
197
|
+
}
|
|
198
|
+
}, [setSelected, selected]);
|
|
199
|
+
const onLassoSelect = useCallback(({ nodes, rels }, evt) => {
|
|
200
|
+
onMultiSelect(nodes, rels, evt);
|
|
201
|
+
if (typeof originalOnLassoSelect === 'function') {
|
|
202
|
+
originalOnLassoSelect({ nodes, rels }, evt);
|
|
203
|
+
}
|
|
204
|
+
}, [onMultiSelect, originalOnLassoSelect]);
|
|
205
|
+
const onBoxSelect = useCallback(({ nodes, rels }, evt) => {
|
|
206
|
+
onMultiSelect(nodes, rels, evt);
|
|
207
|
+
if (typeof originalBoxSelect === 'function') {
|
|
208
|
+
originalBoxSelect({ nodes, rels }, evt);
|
|
209
|
+
}
|
|
210
|
+
}, [onMultiSelect, originalBoxSelect]);
|
|
211
|
+
const isDrawMode = interactionMode === 'draw';
|
|
212
|
+
const isSelectMode = interactionMode === 'select';
|
|
213
|
+
const shouldEnableBox = isSelectMode && gesture === 'box';
|
|
214
|
+
const shouldEnableLasso = isSelectMode && gesture === 'lasso';
|
|
215
|
+
const shouldEnablePan = interactionMode === 'pan' || (isSelectMode && gesture === 'single');
|
|
216
|
+
const canDrag = interactionMode === 'drag' || interactionMode === 'select';
|
|
217
|
+
const wrappedMouseEventCallbacks = useMemo(() => {
|
|
218
|
+
var _a;
|
|
219
|
+
return (Object.assign(Object.assign({}, mouseEventCallbacks), { onBoxSelect: shouldEnableBox ? onBoxSelect : false, onBoxStarted: shouldEnableBox ? onBoxStarted : false, onCanvasClick: isSelectMode ? onCanvasClick : false, onDragEnd: canDrag ? onDragEnd : false, onDragStart: canDrag ? onDragStart : false, onDrawEnded: isDrawMode ? onDrawEnded : false, onDrawStarted: isDrawMode ? onDrawStarted : false, onHover: isSelectMode ? onHover : false, onHoverNodeMargin: isDrawMode ? onHoverNodeMargin : false, onLassoSelect: shouldEnableLasso ? onLassoSelect : false, onLassoStarted: shouldEnableLasso ? onLassoStarted : false, onNodeClick: isSelectMode ? onNodeClick : false, onNodeDoubleClick: isSelectMode ? onNodeDoubleClick : false, onPan: shouldEnablePan ? onPan : false, onRelationshipClick: isSelectMode ? onRelationshipClick : false, onRelationshipDoubleClick: isSelectMode
|
|
220
|
+
? onRelationshipDoubleClick
|
|
221
|
+
: false, onZoom: (_a = mouseEventCallbacks.onZoom) !== null && _a !== void 0 ? _a : true }));
|
|
222
|
+
}, [
|
|
223
|
+
canDrag,
|
|
224
|
+
shouldEnableBox,
|
|
225
|
+
shouldEnableLasso,
|
|
226
|
+
shouldEnablePan,
|
|
227
|
+
isDrawMode,
|
|
228
|
+
isSelectMode,
|
|
229
|
+
mouseEventCallbacks,
|
|
230
|
+
onBoxSelect,
|
|
231
|
+
onBoxStarted,
|
|
232
|
+
onCanvasClick,
|
|
233
|
+
onDragEnd,
|
|
234
|
+
onDragStart,
|
|
235
|
+
onDrawEnded,
|
|
236
|
+
onDrawStarted,
|
|
237
|
+
onHover,
|
|
238
|
+
onHoverNodeMargin,
|
|
239
|
+
onLassoSelect,
|
|
240
|
+
onLassoStarted,
|
|
241
|
+
onNodeClick,
|
|
242
|
+
onNodeDoubleClick,
|
|
243
|
+
onPan,
|
|
244
|
+
onRelationshipClick,
|
|
245
|
+
onRelationshipDoubleClick,
|
|
246
|
+
]);
|
|
247
|
+
const selectionSet = useMemo(() => ({
|
|
248
|
+
nodeIds: new Set(selected.nodeIds),
|
|
249
|
+
relIds: new Set(selected.relationshipIds),
|
|
250
|
+
}), [selected]);
|
|
251
|
+
const nodesWithSelection = useMemo(() => nvlGraph.nodes.map((n) => (Object.assign(Object.assign({}, n), { selected: selectionSet.nodeIds.has(n.id) }))), [nvlGraph.nodes, selectionSet]);
|
|
252
|
+
const relsWithSelection = useMemo(() => nvlGraph.rels.map((r) => (Object.assign(Object.assign({}, r), { selected: selectionSet.relIds.has(r.id) }))), [nvlGraph.rels, selectionSet]);
|
|
253
|
+
return { nodesWithSelection, relsWithSelection, wrappedMouseEventCallbacks };
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=use-managed-selection-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-managed-selection-state.js","sourceRoot":"","sources":["../../../src/graph-visualization/use-managed-selection-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
22
|
+
export function useSemicontrolledState(externalState, externalSetState) {
|
|
23
|
+
const [backupState, setBackupState] = useState(externalState);
|
|
24
|
+
const state = useMemo(() => (externalSetState ? externalState : backupState), [externalState, backupState, externalSetState]);
|
|
25
|
+
const setState = useCallback((newState) => {
|
|
26
|
+
if (externalSetState !== undefined) {
|
|
27
|
+
externalSetState(newState);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
setBackupState(newState);
|
|
31
|
+
}
|
|
32
|
+
}, [externalSetState, setBackupState]);
|
|
33
|
+
return [state, setState];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=use-semi-controlled-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-semi-controlled-state.js","sourceRoot":"","sources":["../../../src/graph-visualization/use-semi-controlled-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEvD,MAAM,UAAU,sBAAsB,CACpC,aAAgB,EAChB,gBAAwC;IAExC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAI,aAAa,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,EACtD,CAAC,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAC/C,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,QAAW,EAAE,EAAE;QACd,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,EACD,CAAC,gBAAgB,EAAE,cAAc,CAAC,CACnC,CAAC;IAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
export const isMac = navigator.userAgent.includes('Mac');
|
|
22
|
+
const uniq = (arr) => [...new Set(arr)];
|
|
23
|
+
export const xor = (a, b) => uniq([...a, ...b].filter((id) => !a.includes(id) || !b.includes(id)));
|
|
24
|
+
export const mapValues = (obj, fn) => Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, fn(value)]));
|
|
25
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/graph-visualization/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEzD,MAAM,IAAI,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAC9C,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,GAAsB,EACtB,EAAmB,EACA,EAAE,CACrB,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5D,CAAC"}
|
package/lib/esm/index.js
CHANGED
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
import { type TooltipProps } from '@neo4j-ndl/react';
|
|
22
|
+
import { type CSSProperties, type PropsWithChildren } from 'react';
|
|
23
|
+
import { type HtmlAttributes } from '../_common/types';
|
|
24
|
+
type GraphVizButtonProps = {
|
|
25
|
+
className?: string;
|
|
26
|
+
style?: CSSProperties;
|
|
27
|
+
htmlAttributes?: HtmlAttributes<'button'>;
|
|
28
|
+
tooltipPlacement?: TooltipProps['placement'];
|
|
29
|
+
};
|
|
30
|
+
type BaseProperties = GraphVizButtonProps & {
|
|
31
|
+
tipContent: string;
|
|
32
|
+
testid?: string;
|
|
33
|
+
ariaLabel?: string;
|
|
34
|
+
isActive?: boolean;
|
|
35
|
+
isDisabled?: boolean;
|
|
36
|
+
onClick?: () => void;
|
|
37
|
+
onMouseDown?: () => void;
|
|
38
|
+
};
|
|
39
|
+
export type GraphVizGroupButton = PropsWithChildren<BaseProperties>;
|
|
40
|
+
export declare const GroupButton: (props: GraphVizGroupButton) => import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
export declare const SingleSelectButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare const BoxSelectButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export declare const LassoSelectButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
export declare const ZoomInButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare const ZoomOutButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
46
|
+
export declare const ZoomToFitButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export declare const ToggleSidePanelButton: ({ className, htmlAttributes, style, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare const DownloadButton: ({ className, style, htmlAttributes, tooltipPlacement, }: GraphVizButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
import type NVL from '@neo4j-nvl/base';
|
|
22
|
+
import { type Node, type Relationship } from '@neo4j-nvl/base';
|
|
23
|
+
export type GraphSelection = {
|
|
24
|
+
nodeIds: string[];
|
|
25
|
+
relationshipIds: string[];
|
|
26
|
+
};
|
|
27
|
+
export type Sidepanel = {
|
|
28
|
+
children: React.ReactNode;
|
|
29
|
+
isSidePanelOpen: boolean;
|
|
30
|
+
setIsSidePanelOpen?: (isSidePanelOpen: boolean) => void;
|
|
31
|
+
sidePanelWidth?: number;
|
|
32
|
+
onSidePanelResize: (width: number) => void;
|
|
33
|
+
minWidth?: number;
|
|
34
|
+
};
|
|
35
|
+
export type NvlGraph = {
|
|
36
|
+
nodes: Node[];
|
|
37
|
+
rels: Relationship[];
|
|
38
|
+
dataLookupTable: DataLookupTable;
|
|
39
|
+
};
|
|
40
|
+
export type GraphItemMetaData = {
|
|
41
|
+
totalCount: number;
|
|
42
|
+
mostCommonColor: string;
|
|
43
|
+
};
|
|
44
|
+
export type DataLookupTable = {
|
|
45
|
+
nodes: Record<string, NodeData>;
|
|
46
|
+
relationships: Record<string, RelData>;
|
|
47
|
+
labels: string[];
|
|
48
|
+
types: string[];
|
|
49
|
+
labelMetaData: Record<string, GraphItemMetaData>;
|
|
50
|
+
typeMetaData: Record<string, GraphItemMetaData>;
|
|
51
|
+
};
|
|
52
|
+
export type PortableProperty = {
|
|
53
|
+
stringified: string;
|
|
54
|
+
type: string;
|
|
55
|
+
};
|
|
56
|
+
export type NodeData = {
|
|
57
|
+
labelsSorted: string[];
|
|
58
|
+
properties: Record<string, PortableProperty>;
|
|
59
|
+
color: string;
|
|
60
|
+
id: string;
|
|
61
|
+
};
|
|
62
|
+
export type RelData = {
|
|
63
|
+
type: string;
|
|
64
|
+
properties: Record<string, PortableProperty>;
|
|
65
|
+
color: string;
|
|
66
|
+
id: string;
|
|
67
|
+
};
|
|
68
|
+
export type NeoNode = Node & {
|
|
69
|
+
properties: Record<string, PortableProperty>;
|
|
70
|
+
labels: string[];
|
|
71
|
+
};
|
|
72
|
+
export type NeoRel = Relationship & {
|
|
73
|
+
properties: Record<string, PortableProperty>;
|
|
74
|
+
type: string;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Data that is shared across the graph visualization component.
|
|
78
|
+
*
|
|
79
|
+
* @see {@link useGraphVizContext}
|
|
80
|
+
* @alpha
|
|
81
|
+
*/
|
|
82
|
+
export type GraphVizContextData = {
|
|
83
|
+
nvlInstance: React.MutableRefObject<NVL | null>;
|
|
84
|
+
sidepanel: Sidepanel | null;
|
|
85
|
+
gesture: Gesture;
|
|
86
|
+
setGesture?: (gesture: Gesture) => void;
|
|
87
|
+
interactionMode: InteractionMode;
|
|
88
|
+
nvlGraph: NvlGraph;
|
|
89
|
+
selected: GraphSelection;
|
|
90
|
+
};
|
|
91
|
+
export declare const GraphVizContext: import("react").Context<GraphVizContextData | undefined>;
|
|
92
|
+
/**
|
|
93
|
+
* Hook to access the graph visualization context.
|
|
94
|
+
*
|
|
95
|
+
* This hook is used to implement custom UI components like buttons, panels, and controls
|
|
96
|
+
* that need access to data and functionality from the graph visualization component.
|
|
97
|
+
* @see {@link GraphVizContextData}
|
|
98
|
+
*
|
|
99
|
+
* @returns The graph visualization context containing NVL instance, sidepanel, gestures, and graph data
|
|
100
|
+
* @throws Error if used outside of a GraphVizContext provider
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```tsx
|
|
104
|
+
* const NodeLoggerButton = () => {
|
|
105
|
+
* const { selected } = useGraphVizContext();
|
|
106
|
+
*
|
|
107
|
+
* const handleClick = () => {
|
|
108
|
+
* console.log('Selected nodes:', selected.nodeIds);
|
|
109
|
+
* };
|
|
110
|
+
*
|
|
111
|
+
* return (
|
|
112
|
+
* <button onClick={handleClick}>
|
|
113
|
+
* Log Selected Nodes ({selected.nodeIds.length})
|
|
114
|
+
* </button>
|
|
115
|
+
* );
|
|
116
|
+
* };
|
|
117
|
+
* ```
|
|
118
|
+
* @alpha
|
|
119
|
+
*/
|
|
120
|
+
export declare const useGraphVizContext: () => GraphVizContextData;
|
|
121
|
+
export type Gesture = 'single' | 'box' | 'lasso';
|
|
122
|
+
export type InteractionMode = 'select' | 'draw' | 'edit-text' | 'pan' | 'drag' | 'none';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Copyright (c) "Neo4j"
|
|
4
|
+
* Neo4j Sweden AB [http://neo4j.com]
|
|
5
|
+
*
|
|
6
|
+
* This file is part of Neo4j.
|
|
7
|
+
*
|
|
8
|
+
* Neo4j is free software: you can redistribute it and/or modify
|
|
9
|
+
* it under the terms of the GNU General Public License as published by
|
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
* (at your option) any later version.
|
|
12
|
+
*
|
|
13
|
+
* This program is distributed in the hope that it will be useful,
|
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
* GNU General Public License for more details.
|
|
17
|
+
*
|
|
18
|
+
* You should have received a copy of the GNU General Public License
|
|
19
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
*/
|
|
21
|
+
import { type Sidepanel } from './graph-viz-context';
|
|
22
|
+
export declare const GraphVizSidepanel: {
|
|
23
|
+
({ sidepanel }: {
|
|
24
|
+
sidepanel: Sidepanel;
|
|
25
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
26
|
+
Title: ({ children }: {
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
Content: ({ children }: {
|
|
30
|
+
children: React.ReactNode;
|
|
31
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
};
|