@react-fabric/graph 1.0.0-beta.63 → 1.0.1
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/dist/cjs/context/context.js +16 -0
- package/dist/cjs/graph/index.js +58 -381
- package/dist/cjs/index.js +25 -21
- package/dist/cjs/utils/edge.js +76 -0
- package/dist/cjs/utils/node.js +93 -0
- package/dist/cjs/utils/sdfFolder.js +107 -0
- package/dist/cjs/viewer/Graph.js +174 -0
- package/dist/esm/context/context.js +15 -0
- package/dist/esm/graph/index.js +59 -382
- package/dist/esm/index.js +24 -20
- package/dist/esm/utils/edge.js +75 -0
- package/dist/esm/utils/node.js +92 -0
- package/dist/esm/utils/sdfFolder.js +107 -0
- package/dist/esm/viewer/Graph.js +174 -0
- package/dist/types/context/context.d.ts +35 -0
- package/dist/types/graph/index.d.ts +47 -24
- package/dist/types/index.d.ts +28 -2
- package/dist/types/types/index.d.ts +124 -175
- package/dist/types/utils/edge.d.ts +28 -0
- package/dist/types/utils/node.d.ts +28 -0
- package/dist/types/utils/sdfFolder.d.ts +75 -0
- package/dist/types/viewer/Graph.d.ts +31 -0
- package/package.json +19 -25
- package/src/context/context.tsx +43 -0
- package/src/graph/index.ts +76 -399
- package/src/index.ts +24 -26
- package/src/types/index.ts +139 -185
- package/src/utils/edge.ts +65 -0
- package/src/utils/node.ts +105 -0
- package/src/utils/sdfFolder.ts +141 -0
- package/src/viewer/Graph.tsx +159 -0
- package/css/styles.css +0 -56
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -35
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
- package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
- package/dist/cjs/_virtual/elk-worker.js +0 -8
- package/dist/cjs/components/ContextMenu.js +0 -133
- package/dist/cjs/components/Provider.js +0 -103
- package/dist/cjs/components/Tools.js +0 -205
- package/dist/cjs/components/Viewer.js +0 -59
- package/dist/cjs/components/context.js +0 -34
- package/dist/cjs/constants/index.js +0 -16
- package/dist/cjs/hooks/sigmaDragSelect.js +0 -169
- package/dist/cjs/hooks/sigmaHilighter.js +0 -83
- package/dist/cjs/hooks/sigmaMouseActions.js +0 -145
- package/dist/cjs/hooks/useGraphology.js +0 -41
- package/dist/cjs/hooks/useSigma.js +0 -112
- package/dist/cjs/programs/arrow-head/frag.glsl.js +0 -8
- package/dist/cjs/programs/arrow-head/index.js +0 -142
- package/dist/cjs/programs/arrow-head/vert.glsl.js +0 -8
- package/dist/cjs/programs/edge-curve/drawLabel.js +0 -136
- package/dist/cjs/programs/edge-curve/frag.glsl.js +0 -8
- package/dist/cjs/programs/edge-curve/index.js +0 -157
- package/dist/cjs/programs/edge-curve/vert.glsl.js +0 -8
- package/dist/cjs/programs/edge-line/drawLabel.js +0 -70
- package/dist/cjs/programs/edge-line/frag.glsl.js +0 -8
- package/dist/cjs/programs/edge-line/index.js +0 -166
- package/dist/cjs/programs/edge-line/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-badge/factory.js +0 -250
- package/dist/cjs/programs/node-badge/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-badge/index.js +0 -33
- package/dist/cjs/programs/node-badge/texture.js +0 -455
- package/dist/cjs/programs/node-badge/vert.glsl.js +0 -19
- package/dist/cjs/programs/node-circle/base/drawHover.js +0 -71
- package/dist/cjs/programs/node-circle/base/drawLabel.js +0 -113
- package/dist/cjs/programs/node-circle/base/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-circle/base/index.js +0 -136
- package/dist/cjs/programs/node-circle/base/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-circle/index.js +0 -15
- package/dist/cjs/programs/node-image/factory.js +0 -224
- package/dist/cjs/programs/node-image/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-image/index.js +0 -14
- package/dist/cjs/programs/node-image/texture.js +0 -472
- package/dist/cjs/programs/node-image/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-rect/base/drawHover.js +0 -68
- package/dist/cjs/programs/node-rect/base/drawLabel.js +0 -107
- package/dist/cjs/programs/node-rect/base/frag.glsl.js +0 -8
- package/dist/cjs/programs/node-rect/base/index.js +0 -135
- package/dist/cjs/programs/node-rect/base/vert.glsl.js +0 -8
- package/dist/cjs/programs/node-rect/index.js +0 -15
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -34
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -13
- package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
- package/dist/esm/_virtual/elk-worker.js +0 -8
- package/dist/esm/components/ContextMenu.js +0 -133
- package/dist/esm/components/Provider.js +0 -103
- package/dist/esm/components/Tools.js +0 -205
- package/dist/esm/components/Viewer.js +0 -59
- package/dist/esm/components/context.js +0 -33
- package/dist/esm/constants/index.js +0 -16
- package/dist/esm/hooks/sigmaDragSelect.js +0 -169
- package/dist/esm/hooks/sigmaHilighter.js +0 -83
- package/dist/esm/hooks/sigmaMouseActions.js +0 -145
- package/dist/esm/hooks/useGraphology.js +0 -41
- package/dist/esm/hooks/useSigma.js +0 -112
- package/dist/esm/programs/arrow-head/frag.glsl.js +0 -8
- package/dist/esm/programs/arrow-head/index.js +0 -141
- package/dist/esm/programs/arrow-head/vert.glsl.js +0 -8
- package/dist/esm/programs/edge-curve/drawLabel.js +0 -136
- package/dist/esm/programs/edge-curve/frag.glsl.js +0 -8
- package/dist/esm/programs/edge-curve/index.js +0 -156
- package/dist/esm/programs/edge-curve/vert.glsl.js +0 -8
- package/dist/esm/programs/edge-line/drawLabel.js +0 -70
- package/dist/esm/programs/edge-line/frag.glsl.js +0 -8
- package/dist/esm/programs/edge-line/index.js +0 -166
- package/dist/esm/programs/edge-line/vert.glsl.js +0 -8
- package/dist/esm/programs/node-badge/factory.js +0 -250
- package/dist/esm/programs/node-badge/frag.glsl.js +0 -8
- package/dist/esm/programs/node-badge/index.js +0 -32
- package/dist/esm/programs/node-badge/texture.js +0 -445
- package/dist/esm/programs/node-badge/vert.glsl.js +0 -19
- package/dist/esm/programs/node-circle/base/drawHover.js +0 -71
- package/dist/esm/programs/node-circle/base/drawLabel.js +0 -113
- package/dist/esm/programs/node-circle/base/frag.glsl.js +0 -8
- package/dist/esm/programs/node-circle/base/index.js +0 -136
- package/dist/esm/programs/node-circle/base/vert.glsl.js +0 -8
- package/dist/esm/programs/node-circle/index.js +0 -15
- package/dist/esm/programs/node-image/factory.js +0 -224
- package/dist/esm/programs/node-image/frag.glsl.js +0 -8
- package/dist/esm/programs/node-image/index.js +0 -13
- package/dist/esm/programs/node-image/texture.js +0 -462
- package/dist/esm/programs/node-image/vert.glsl.js +0 -8
- package/dist/esm/programs/node-rect/base/drawHover.js +0 -68
- package/dist/esm/programs/node-rect/base/drawLabel.js +0 -107
- package/dist/esm/programs/node-rect/base/frag.glsl.js +0 -8
- package/dist/esm/programs/node-rect/base/index.js +0 -135
- package/dist/esm/programs/node-rect/base/vert.glsl.js +0 -8
- package/dist/esm/programs/node-rect/index.js +0 -15
- package/dist/types/components/ContextMenu.d.ts +0 -1
- package/dist/types/components/Provider.d.ts +0 -3
- package/dist/types/components/Tools.d.ts +0 -1
- package/dist/types/components/Viewer.d.ts +0 -2
- package/dist/types/components/context.d.ts +0 -17
- package/dist/types/constants/index.d.ts +0 -12
- package/dist/types/graph/layout.worker.d.ts +0 -1
- package/dist/types/hooks/sigmaDragSelect.d.ts +0 -8
- package/dist/types/hooks/sigmaHilighter.d.ts +0 -3
- package/dist/types/hooks/sigmaMouseActions.d.ts +0 -3
- package/dist/types/hooks/useGraphology.d.ts +0 -6
- package/dist/types/hooks/useSigma.d.ts +0 -8
- package/dist/types/i18n/index.d.ts +0 -0
- package/dist/types/programs/arrow-head/frag.glsl.d.ts +0 -2
- package/dist/types/programs/arrow-head/index.d.ts +0 -9
- package/dist/types/programs/arrow-head/vert.glsl.d.ts +0 -2
- package/dist/types/programs/edge-curve/drawLabel.d.ts +0 -6
- package/dist/types/programs/edge-curve/frag.glsl.d.ts +0 -2
- package/dist/types/programs/edge-curve/index.d.ts +0 -43
- package/dist/types/programs/edge-curve/vert.glsl.d.ts +0 -2
- package/dist/types/programs/edge-line/drawLabel.d.ts +0 -5
- package/dist/types/programs/edge-line/frag.glsl.d.ts +0 -2
- package/dist/types/programs/edge-line/index.d.ts +0 -11
- package/dist/types/programs/edge-line/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-badge/factory.d.ts +0 -27
- package/dist/types/programs/node-badge/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-badge/index.d.ts +0 -5
- package/dist/types/programs/node-badge/texture.d.ts +0 -102
- package/dist/types/programs/node-badge/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-circle/base/drawHover.d.ts +0 -8
- package/dist/types/programs/node-circle/base/drawLabel.d.ts +0 -8
- package/dist/types/programs/node-circle/base/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-circle/base/index.d.ts +0 -37
- package/dist/types/programs/node-circle/base/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-circle/index.d.ts +0 -11
- package/dist/types/programs/node-image/factory.d.ts +0 -25
- package/dist/types/programs/node-image/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-image/index.d.ts +0 -5
- package/dist/types/programs/node-image/texture.d.ts +0 -102
- package/dist/types/programs/node-image/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-rect/base/drawHover.d.ts +0 -8
- package/dist/types/programs/node-rect/base/drawLabel.d.ts +0 -8
- package/dist/types/programs/node-rect/base/frag.glsl.d.ts +0 -2
- package/dist/types/programs/node-rect/base/index.d.ts +0 -34
- package/dist/types/programs/node-rect/base/vert.glsl.d.ts +0 -2
- package/dist/types/programs/node-rect/index.d.ts +0 -11
- package/src/components/ContextMenu.tsx +0 -138
- package/src/components/Provider.tsx +0 -116
- package/src/components/Tools.tsx +0 -68
- package/src/components/Viewer.tsx +0 -75
- package/src/components/context.ts +0 -43
- package/src/constants/index.ts +0 -22
- package/src/graph/layout.worker.ts +0 -42
- package/src/hooks/sigmaDragSelect.ts +0 -219
- package/src/hooks/sigmaHilighter.ts +0 -107
- package/src/hooks/sigmaMouseActions.ts +0 -153
- package/src/hooks/useGraphology.ts +0 -31
- package/src/hooks/useSigma.ts +0 -118
- package/src/i18n/index.ts +0 -0
- package/src/programs/arrow-head/frag.glsl.ts +0 -18
- package/src/programs/arrow-head/index.ts +0 -156
- package/src/programs/arrow-head/vert.glsl.ts +0 -75
- package/src/programs/edge-curve/drawLabel.ts +0 -166
- package/src/programs/edge-curve/frag.glsl.ts +0 -86
- package/src/programs/edge-curve/index.ts +0 -156
- package/src/programs/edge-curve/vert.glsl.ts +0 -110
- package/src/programs/edge-line/drawLabel.ts +0 -113
- package/src/programs/edge-line/frag.glsl.ts +0 -34
- package/src/programs/edge-line/index.ts +0 -163
- package/src/programs/edge-line/vert.glsl.ts +0 -104
- package/src/programs/node-badge/factory.ts +0 -325
- package/src/programs/node-badge/frag.glsl.ts +0 -79
- package/src/programs/node-badge/index.ts +0 -35
- package/src/programs/node-badge/texture.ts +0 -425
- package/src/programs/node-badge/vert.glsl.ts +0 -99
- package/src/programs/node-circle/base/drawHover.ts +0 -80
- package/src/programs/node-circle/base/drawLabel.ts +0 -145
- package/src/programs/node-circle/base/frag.glsl.ts +0 -72
- package/src/programs/node-circle/base/index.ts +0 -100
- package/src/programs/node-circle/base/vert.glsl.ts +0 -83
- package/src/programs/node-circle/index.ts +0 -19
- package/src/programs/node-image/factory.ts +0 -299
- package/src/programs/node-image/frag.glsl.ts +0 -97
- package/src/programs/node-image/index.ts +0 -7
- package/src/programs/node-image/texture.ts +0 -435
- package/src/programs/node-image/vert.glsl.ts +0 -60
- package/src/programs/node-rect/base/drawHover.ts +0 -77
- package/src/programs/node-rect/base/drawLabel.ts +0 -149
- package/src/programs/node-rect/base/frag.glsl.ts +0 -67
- package/src/programs/node-rect/base/index.ts +0 -107
- package/src/programs/node-rect/base/vert.glsl.ts +0 -87
- package/src/programs/node-rect/index.ts +0 -19
package/src/constants/index.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export const ICONS = {
|
|
2
|
-
focus:
|
|
3
|
-
"M17 12C17 7.55 11.62 5.31 8.46 8.46C5.31 11.61 7.55 17 12 17C14.76 17 17 14.76 17 12M12 15C9.33 15 8 11.77 9.88 9.88C11.77 8 15 9.33 15 12C15 13.66 13.66 15 12 15M5 15H3V19C3 20.1 3.9 21 5 21H9V19H5M5 5H9V3H5C3.9 3 3 3.9 3 5V9H5M19 3H15V5H19V9H21V5C21 3.9 20.1 3 19 3M19 19H15V21H19C20.1 21 21 20.1 21 19V15H19",
|
|
4
|
-
zoomIn:
|
|
5
|
-
"M15.5,14L20.5,19L19,20.5L14,15.5V14.71L13.73,14.43C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.43,13.73L14.71,14H15.5M9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14M12,10H10V12H9V10H7V9H9V7H10V9H12V10Z",
|
|
6
|
-
zoomOut:
|
|
7
|
-
"M15.5,14H14.71L14.43,13.73C15.41,12.59 16,11.11 16,9.5A6.5,6.5 0 0,0 9.5,3A6.5,6.5 0 0,0 3,9.5A6.5,6.5 0 0,0 9.5,16C11.11,16 12.59,15.41 13.73,14.43L14,14.71V15.5L19,20.5L20.5,19L15.5,14M9.5,14C7,14 5,12 5,9.5C5,7 7,5 9.5,5C12,5 14,7 14,9.5C14,12 12,14 9.5,14M7,9H12V10H7V9Z",
|
|
8
|
-
lasso:
|
|
9
|
-
"M22 9C22 5.13 17.5 2 12 2C6.5 2 2 5.13 2 9C2 9.00843 2.00002 9.01685 2.00006 9.02527C2.00952 10.8953 3.06771 12.5956 4.78 13.85C4.78103 13.847 4.78207 13.844 4.7831 13.841C5.18858 14.1369 5.63069 14.408 6.10419 14.6507C6.03614 14.9227 6 15.2072 6 15.5C6 16.76 6.67 17.87 7.67 18.5C7.46 19.11 6.97 20.96 8.3 22.05C9.91 23.38 11.66 22.97 12.56 22.69C12.8116 22.6126 13.0655 22.5076 13.3395 22.3944C14.0563 22.0981 14.9105 21.7451 16.22 21.68C17.6764 21.5995 18.9321 21.8104 19.5651 21.9167C19.7188 21.9425 19.8358 21.9622 19.91 21.97C19.91 21.97 20.86 21.97 20.97 21.04C21.08 20.1 20.03 19.97 20.03 19.97C20.03 19.97 18.43 19.7 16.39 19.71C14.9823 19.7145 13.7447 20.1595 12.703 20.5341C11.4434 20.987 10.4704 21.3368 9.83 20.68C9.18 20 9.39 19.36 9.6 19C11.3416 18.9542 12.7471 17.6481 12.9693 15.9673C13.4921 15.9319 14.0034 15.8699 14.5 15.78C18.6753 15.0244 21.7995 12.4293 21.9907 9.30406C21.9969 9.20324 22 9.10187 22 9ZM20 9C20 10.2554 19.2572 11.4047 18.032 12.2843C16.6998 13.2393 14.7966 13.8752 12.6542 13.9835C12.0881 12.8109 10.887 12 9.5 12C8.57261 12 7.72834 12.3625 7.10143 12.9533C6.61638 12.7181 6.17578 12.4489 5.78883 12.1513L5.79 12.15C4.6875 11.3034 4.02105 10.2243 4.00049 9.05571C4.00016 9.03717 4 9.01859 4 9C4 6.24 7.58 4 12 4C16.42 4 20 6.24 20 9ZM10.9988 15.5603C10.9933 15.6993 10.9689 15.8333 10.9281 15.96C10.7345 16.5641 10.1694 17 9.5 17C8.67 17 8 16.33 8 15.5C8 15.4718 8.00078 15.4437 8.00231 15.4159C8.04595 14.6266 8.69981 14 9.5 14C10.3284 14 11 14.6716 11 15.5C11 15.5202 10.9996 15.5403 10.9988 15.5603Z",
|
|
10
|
-
select:
|
|
11
|
-
"M13,17H17V13H19V17H23V19H19V23H17V19H13V17M11,17V19H9V17H11M7,17V19H5V17H7M19,9V11H17V9H19M19,5V7H17V5H19M15,5V7H13V5H15M11,5V7H9V5H11M7,5V7H5V5H7M7,13V15H5V13H7M7,9V11H5V9H7Z",
|
|
12
|
-
cancel:
|
|
13
|
-
"M3,16.74L7.76,12L3,7.26L7.26,3L12,7.76L16.74,3L21,7.26L16.24,12L21,16.74L16.74,21L12,16.24L7.26,21L3,16.74M12,13.41L16.74,18.16L18.16,16.74L13.41,12L18.16,7.26L16.74,5.84L12,10.59L7.26,5.84L5.84,7.26L10.59,12L5.84,16.74L7.26,18.16L12,13.41Z",
|
|
14
|
-
delete:
|
|
15
|
-
"M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M9,8H11V17H9V8M13,8H15V17H13V8Z",
|
|
16
|
-
clear:
|
|
17
|
-
"M16.24,3.56L21.19,8.5C21.97,9.29 21.97,10.55 21.19,11.34L12,20.53C10.44,22.09 7.91,22.09 6.34,20.53L2.81,17C2.03,16.21 2.03,14.95 2.81,14.16L13.41,3.56C14.2,2.78 15.46,2.78 16.24,3.56M4.22,15.58L7.76,19.11C8.54,19.9 9.8,19.9 10.59,19.11L14.12,15.58L9.17,10.63L4.22,15.58Z",
|
|
18
|
-
expand:
|
|
19
|
-
"M17,13H13V17H11V13H7V11H11V7H13V11H17M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",
|
|
20
|
-
collapse:
|
|
21
|
-
"M17,13H13V17H11V13H7V11H11V7H13V11H17M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",
|
|
22
|
-
};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import ElkConstructor from "elkjs/lib/elk-api";
|
|
2
|
-
// @ts-expect-error ignore
|
|
3
|
-
import ElkWorker from "elkjs/lib/elk-worker?worker";
|
|
4
|
-
|
|
5
|
-
function layoutRunner({ type, nodes, edges }: KeyValue) {
|
|
6
|
-
const elk = new ElkConstructor({
|
|
7
|
-
workerFactory(url) {
|
|
8
|
-
return new ElkWorker();
|
|
9
|
-
},
|
|
10
|
-
});
|
|
11
|
-
elk
|
|
12
|
-
.layout(
|
|
13
|
-
{
|
|
14
|
-
id: "root",
|
|
15
|
-
width: 1600,
|
|
16
|
-
height: 900,
|
|
17
|
-
children: nodes,
|
|
18
|
-
edges,
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
logging: true,
|
|
22
|
-
measureExecutionTime: true,
|
|
23
|
-
layoutOptions: { "elk.algorithm": type },
|
|
24
|
-
},
|
|
25
|
-
)
|
|
26
|
-
.then((graph) => {
|
|
27
|
-
const positions = Object.fromEntries(
|
|
28
|
-
graph.children?.map((node) => [
|
|
29
|
-
node.id,
|
|
30
|
-
{ x: node.x ?? 0, y: node.y ?? 0 },
|
|
31
|
-
]) ?? [],
|
|
32
|
-
);
|
|
33
|
-
self.postMessage(positions);
|
|
34
|
-
})
|
|
35
|
-
.catch((e) => {
|
|
36
|
-
throw e;
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
self.onmessage = (event: KeyValue) => {
|
|
41
|
-
layoutRunner(event.data);
|
|
42
|
-
};
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
// https://github.com/s0md3v/Quark/blob/master/libs/plugins/sigma.plugins.lasso/sigma.plugins.lasso.js
|
|
2
|
-
|
|
3
|
-
import { useEffect, useRef, useState } from "react";
|
|
4
|
-
import type Sigma from "sigma";
|
|
5
|
-
import { type EdgeAttributes, type NodeAttributes } from "../types";
|
|
6
|
-
|
|
7
|
-
interface Point {
|
|
8
|
-
x: number;
|
|
9
|
-
y: number;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export const useDragSelection = (
|
|
13
|
-
renderer?: Sigma<NodeAttributes<any>, EdgeAttributes<any>>,
|
|
14
|
-
) => {
|
|
15
|
-
const isDrawing = useRef(false);
|
|
16
|
-
const drawPoints = useRef<Point[]>([]);
|
|
17
|
-
const drawingCanvas = useRef<HTMLCanvasElement>(undefined);
|
|
18
|
-
const drawingContext = useRef<CanvasRenderingContext2D | null>(null);
|
|
19
|
-
const [mode, setMode] = useState<"rectangle" | "lasso" | false>(false);
|
|
20
|
-
|
|
21
|
-
const selectionMode = useRef<"rectangle" | "lasso" | false>(false);
|
|
22
|
-
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
selectionMode.current = mode;
|
|
25
|
-
}, [mode]);
|
|
26
|
-
|
|
27
|
-
const startDrawing = (evt: MouseEvent) => {
|
|
28
|
-
isDrawing.current = true;
|
|
29
|
-
if (drawingCanvas.current) {
|
|
30
|
-
drawingContext.current = drawingCanvas.current.getContext("2d");
|
|
31
|
-
if (drawingContext.current) {
|
|
32
|
-
drawingContext.current.setLineDash([2, 4]);
|
|
33
|
-
drawingContext.current.lineWidth = 2;
|
|
34
|
-
drawingContext.current.strokeStyle = "#3a766c40";
|
|
35
|
-
drawingContext.current.fillStyle = "#3a766c10";
|
|
36
|
-
drawingContext.current.lineJoin = "round";
|
|
37
|
-
drawingContext.current.lineCap = "round";
|
|
38
|
-
}
|
|
39
|
-
const drawingRectangle = drawingCanvas.current.getBoundingClientRect();
|
|
40
|
-
drawPoints.current = [
|
|
41
|
-
{
|
|
42
|
-
x: evt.clientX - drawingRectangle.left,
|
|
43
|
-
y: evt.clientY - drawingRectangle.top,
|
|
44
|
-
},
|
|
45
|
-
];
|
|
46
|
-
}
|
|
47
|
-
evt.stopImmediatePropagation();
|
|
48
|
-
evt.stopPropagation();
|
|
49
|
-
evt.preventDefault();
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const drawPath = (evt: MouseEvent) => {
|
|
53
|
-
if (!isDrawing) return;
|
|
54
|
-
|
|
55
|
-
if (drawingCanvas.current) {
|
|
56
|
-
const drawingRectangle = drawingCanvas.current.getBoundingClientRect();
|
|
57
|
-
|
|
58
|
-
if (drawingContext.current) {
|
|
59
|
-
if (selectionMode.current === "rectangle") {
|
|
60
|
-
drawingContext.current.clearRect(
|
|
61
|
-
0,
|
|
62
|
-
0,
|
|
63
|
-
drawingCanvas.current.width,
|
|
64
|
-
drawingCanvas.current.height,
|
|
65
|
-
);
|
|
66
|
-
const { x, y } = drawPoints.current[0];
|
|
67
|
-
drawingContext.current.beginPath();
|
|
68
|
-
drawingContext.current.rect(
|
|
69
|
-
Math.min(x, evt.clientX),
|
|
70
|
-
Math.min(y, evt.clientY),
|
|
71
|
-
Math.abs(evt.clientX - drawingRectangle.left - x),
|
|
72
|
-
Math.abs(evt.clientY - drawingRectangle.top - y),
|
|
73
|
-
);
|
|
74
|
-
drawingContext.current.stroke();
|
|
75
|
-
drawingContext.current.fill();
|
|
76
|
-
}
|
|
77
|
-
if (selectionMode.current === "lasso") {
|
|
78
|
-
drawPoints.current.push({
|
|
79
|
-
x: evt.clientX - drawingRectangle.left,
|
|
80
|
-
y: evt.clientY - drawingRectangle.top,
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
// Clear the canvas
|
|
84
|
-
drawingContext.current.clearRect(
|
|
85
|
-
0,
|
|
86
|
-
0,
|
|
87
|
-
drawingContext.current.canvas.width,
|
|
88
|
-
drawingContext.current.canvas.height,
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
// Redraw the complete path for a smoother effect
|
|
92
|
-
// Even smoother with quadratic curves
|
|
93
|
-
let sourcePoint = drawPoints.current[0];
|
|
94
|
-
let destinationPoint = drawPoints.current[1];
|
|
95
|
-
const pointsLength = drawPoints.current.length;
|
|
96
|
-
const getMiddlePointCoordinates = function (
|
|
97
|
-
firstPoint: Point,
|
|
98
|
-
secondPoint: Point,
|
|
99
|
-
) {
|
|
100
|
-
return {
|
|
101
|
-
x: firstPoint.x + (secondPoint.x - firstPoint.x) / 2,
|
|
102
|
-
y: firstPoint.y + (secondPoint.y - firstPoint.y) / 2,
|
|
103
|
-
};
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
drawingContext.current.beginPath();
|
|
107
|
-
drawingContext.current.moveTo(sourcePoint.x, sourcePoint.y);
|
|
108
|
-
|
|
109
|
-
for (let i = 1; i < pointsLength; i++) {
|
|
110
|
-
const middlePoint = getMiddlePointCoordinates(
|
|
111
|
-
sourcePoint,
|
|
112
|
-
destinationPoint,
|
|
113
|
-
);
|
|
114
|
-
// drawingContext.current.lineTo(drawPoints[i].x, drawPoints[i].y);
|
|
115
|
-
drawingContext.current.quadraticCurveTo(
|
|
116
|
-
sourcePoint.x,
|
|
117
|
-
sourcePoint.y,
|
|
118
|
-
middlePoint.x,
|
|
119
|
-
middlePoint.y,
|
|
120
|
-
);
|
|
121
|
-
sourcePoint = drawPoints.current[i];
|
|
122
|
-
destinationPoint = drawPoints.current[i + 1];
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
drawingContext.current.lineTo(sourcePoint.x, sourcePoint.y);
|
|
126
|
-
drawingContext.current.stroke();
|
|
127
|
-
drawingContext.current.fill();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
const stopDrawing = (evt: MouseEvent) => {
|
|
134
|
-
if (!renderer) return;
|
|
135
|
-
if (!isDrawing) return;
|
|
136
|
-
|
|
137
|
-
const nodes = Array.from(renderer.getGraph().nodes());
|
|
138
|
-
|
|
139
|
-
nodes.forEach((node) => {
|
|
140
|
-
if (!renderer) return;
|
|
141
|
-
const {
|
|
142
|
-
x: nx = 0,
|
|
143
|
-
y: ny = 0,
|
|
144
|
-
hidden,
|
|
145
|
-
} = renderer.getNodeDisplayData(node) as AnyObject;
|
|
146
|
-
const { x, y } = renderer.framedGraphToViewport({ x: nx, y: ny });
|
|
147
|
-
if (evt.shiftKey) {
|
|
148
|
-
drawingContext.current?.isPointInPath(x, y) &&
|
|
149
|
-
!hidden &&
|
|
150
|
-
renderer.getGraph().setNodeAttribute(node, "selected", true);
|
|
151
|
-
} else {
|
|
152
|
-
!hidden &&
|
|
153
|
-
renderer
|
|
154
|
-
.getGraph()
|
|
155
|
-
.setNodeAttribute(
|
|
156
|
-
node,
|
|
157
|
-
"selected",
|
|
158
|
-
drawingContext.current?.isPointInPath(x, y),
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
dettachListeners();
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
const attachListeners = () => {
|
|
166
|
-
if (!renderer) return;
|
|
167
|
-
drawingCanvas.current = document.createElement("canvas");
|
|
168
|
-
const rect = renderer.getContainer().getBoundingClientRect();
|
|
169
|
-
drawingCanvas.current.width = rect.width;
|
|
170
|
-
drawingCanvas.current.height = rect.height;
|
|
171
|
-
drawingCanvas.current.style.setProperty("inset", "0");
|
|
172
|
-
drawingCanvas.current.style.setProperty("position", "absolute");
|
|
173
|
-
renderer.getContainer().appendChild(drawingCanvas.current);
|
|
174
|
-
drawingCanvas.current.style.cursor = "crosshair";
|
|
175
|
-
drawingCanvas.current.addEventListener("mousedown", startDrawing, {
|
|
176
|
-
capture: true,
|
|
177
|
-
});
|
|
178
|
-
document.addEventListener("mousemove", drawPath);
|
|
179
|
-
document.addEventListener("mouseup", stopDrawing);
|
|
180
|
-
};
|
|
181
|
-
const dettachListeners = () => {
|
|
182
|
-
if (drawingContext.current) {
|
|
183
|
-
drawingContext.current.clearRect(
|
|
184
|
-
0,
|
|
185
|
-
0,
|
|
186
|
-
drawingContext.current.canvas.width,
|
|
187
|
-
drawingContext.current.canvas.height,
|
|
188
|
-
);
|
|
189
|
-
drawingContext.current = null;
|
|
190
|
-
}
|
|
191
|
-
if (drawingCanvas.current) {
|
|
192
|
-
drawingCanvas.current?.remove();
|
|
193
|
-
}
|
|
194
|
-
document.removeEventListener("mousemove", drawPath);
|
|
195
|
-
document.removeEventListener("mouseup", stopDrawing);
|
|
196
|
-
isDrawing.current = false;
|
|
197
|
-
setMode(false);
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
const startRectangleSelection = () => {
|
|
201
|
-
setMode("rectangle");
|
|
202
|
-
attachListeners();
|
|
203
|
-
};
|
|
204
|
-
const startLassoSelection = () => {
|
|
205
|
-
setMode("lasso");
|
|
206
|
-
attachListeners();
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
const cancelSelection = () => {
|
|
210
|
-
dettachListeners();
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
return {
|
|
214
|
-
selectionMode: mode,
|
|
215
|
-
startRectangleSelection,
|
|
216
|
-
startLassoSelection,
|
|
217
|
-
cancelSelection,
|
|
218
|
-
};
|
|
219
|
-
};
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { debounce } from "@react-fabric/utilities";
|
|
2
|
-
import type Graph from "graphology";
|
|
3
|
-
import type Sigma from "sigma";
|
|
4
|
-
import { type SigmaEdgeEventPayload, type SigmaNodeEventPayload } from "sigma/types";
|
|
5
|
-
import { type EdgeAttributes, type NodeAttributes } from "../types";
|
|
6
|
-
|
|
7
|
-
export const attachHighlighter = (
|
|
8
|
-
renderer: Sigma<NodeAttributes<any>, EdgeAttributes<any>>,
|
|
9
|
-
) => {
|
|
10
|
-
const handleEnterNode = (id: string, graph: Graph) => {
|
|
11
|
-
try {
|
|
12
|
-
const neighbors = graph.neighbors(id);
|
|
13
|
-
graph.forEachNode((node) => {
|
|
14
|
-
graph.setNodeAttribute(
|
|
15
|
-
node,
|
|
16
|
-
"opacity",
|
|
17
|
-
node !== id && !neighbors.includes(node) ? 0.1 : 1,
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
graph.forEachEdge((edge) => {
|
|
21
|
-
graph.setEdgeAttribute(
|
|
22
|
-
edge,
|
|
23
|
-
"opacity",
|
|
24
|
-
!graph.hasExtremity(edge, id) ? 0.1 : 1,
|
|
25
|
-
);
|
|
26
|
-
});
|
|
27
|
-
} catch {
|
|
28
|
-
//
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
const handleLeaveNode = (graph: Graph) => {
|
|
33
|
-
graph.forEachNode((node) => {
|
|
34
|
-
graph.setNodeAttribute(node, "opacity", 1);
|
|
35
|
-
});
|
|
36
|
-
graph.forEachEdge((edge) => {
|
|
37
|
-
graph.setEdgeAttribute(edge, "opacity", 1);
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const handleEnterEdge = (id: string, graph: Graph) => {
|
|
42
|
-
try {
|
|
43
|
-
const source = graph.source(id);
|
|
44
|
-
const target = graph.target(id);
|
|
45
|
-
|
|
46
|
-
graph.setEdgeAttribute(id, "zIndex", 2);
|
|
47
|
-
graph.setNodeAttribute(source, "zIndex", 2);
|
|
48
|
-
graph.setNodeAttribute(target, "zIndex", 2);
|
|
49
|
-
|
|
50
|
-
graph.setEdgeAttribute(id, "highlight", true);
|
|
51
|
-
graph.setNodeAttribute(source, "highlight", true);
|
|
52
|
-
graph.setNodeAttribute(target, "highlight", true);
|
|
53
|
-
|
|
54
|
-
graph.forEachNode((node) => {
|
|
55
|
-
graph.setNodeAttribute(
|
|
56
|
-
node,
|
|
57
|
-
"opacity",
|
|
58
|
-
node !== source && node !== target ? 0.1 : 1,
|
|
59
|
-
);
|
|
60
|
-
});
|
|
61
|
-
graph.forEachEdge((edge) => {
|
|
62
|
-
graph.setEdgeAttribute(edge, "opacity", edge !== id ? 0.1 : 1);
|
|
63
|
-
});
|
|
64
|
-
} catch {
|
|
65
|
-
//
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const handleLeaveEdge = (id: string, graph: Graph) => {
|
|
70
|
-
const source = graph.source(id);
|
|
71
|
-
const target = graph.target(id);
|
|
72
|
-
|
|
73
|
-
graph.setEdgeAttribute(id, "zIndex", 0);
|
|
74
|
-
graph.setNodeAttribute(source, "zIndex", 0);
|
|
75
|
-
graph.setNodeAttribute(target, "zIndex", 0);
|
|
76
|
-
|
|
77
|
-
graph.setEdgeAttribute(id, "highlight", false);
|
|
78
|
-
graph.setNodeAttribute(source, "highlight", false);
|
|
79
|
-
graph.setNodeAttribute(target, "highlight", false);
|
|
80
|
-
|
|
81
|
-
graph.forEachNode((node) => {
|
|
82
|
-
graph.setNodeAttribute(node, "opacity", 1);
|
|
83
|
-
graph.setNodeAttribute(node, "highlight", false);
|
|
84
|
-
});
|
|
85
|
-
graph.forEachEdge((edge) => {
|
|
86
|
-
graph.setEdgeAttribute(edge, "opacity", 1);
|
|
87
|
-
graph.setEdgeAttribute(edge, "highlight", false);
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
const debouceNodeEnter = debounce((e: SigmaNodeEventPayload) => {
|
|
92
|
-
handleEnterNode(e.node, renderer.getGraph());
|
|
93
|
-
});
|
|
94
|
-
const debouceEdgeEnter = debounce((e: SigmaEdgeEventPayload) => {
|
|
95
|
-
handleEnterEdge(e.edge, renderer.getGraph());
|
|
96
|
-
}, 100);
|
|
97
|
-
renderer.on("enterNode", debouceNodeEnter);
|
|
98
|
-
renderer.on("leaveNode", (e) => {
|
|
99
|
-
debouceNodeEnter.cancel();
|
|
100
|
-
handleLeaveNode(renderer.getGraph());
|
|
101
|
-
});
|
|
102
|
-
renderer.on("enterEdge", debouceEdgeEnter);
|
|
103
|
-
renderer.on("leaveEdge", (e) => {
|
|
104
|
-
debouceEdgeEnter.cancel();
|
|
105
|
-
handleLeaveEdge(e.edge, renderer.getGraph());
|
|
106
|
-
});
|
|
107
|
-
};
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import type Graph from "graphology";
|
|
2
|
-
import type Sigma from "sigma";
|
|
3
|
-
import { type MouseCoords } from "sigma/types";
|
|
4
|
-
import { type EdgeAttributes, type NodeAttributes } from "../types";
|
|
5
|
-
|
|
6
|
-
export const attachMouseActions = (
|
|
7
|
-
renderer: Sigma<NodeAttributes<any>, EdgeAttributes<any>>,
|
|
8
|
-
) => {
|
|
9
|
-
let isDragging = false;
|
|
10
|
-
let isDragged = false;
|
|
11
|
-
let startPos = { x: 0, y: 0 };
|
|
12
|
-
let draggedNode: AnyObject;
|
|
13
|
-
|
|
14
|
-
const handleDrag =
|
|
15
|
-
(renderer: Sigma<NodeAttributes<any>, EdgeAttributes<any>>) =>
|
|
16
|
-
(e: MouseCoords) => {
|
|
17
|
-
if (!isDragging || !draggedNode) return;
|
|
18
|
-
|
|
19
|
-
isDragged = true;
|
|
20
|
-
// Get new position of node
|
|
21
|
-
const pos = renderer.viewportToGraph(e);
|
|
22
|
-
const diff = { x: pos.x - startPos.x, y: pos.y - startPos.y };
|
|
23
|
-
|
|
24
|
-
const graph = renderer.getGraph();
|
|
25
|
-
Object.entries<KeyValue>(draggedNode).forEach(([node, xy]) => {
|
|
26
|
-
graph.setNodeAttribute(node, "x", xy.x + diff.x);
|
|
27
|
-
graph.setNodeAttribute(node, "y", xy.y + diff.y);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// Prevent sigma to move camera:
|
|
31
|
-
e.preventSigmaDefault();
|
|
32
|
-
e.original.preventDefault();
|
|
33
|
-
e.original.stopPropagation();
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const stopDragging = (graph: Graph) => {
|
|
37
|
-
// if (draggedNode) {
|
|
38
|
-
// Object.entries<KeyValue>(draggedNode).forEach(([node, xy]) => {
|
|
39
|
-
// const atts = graph.getNodeAttributes(node);
|
|
40
|
-
// if (atts.isGroup) {
|
|
41
|
-
// const diff = { x: atts.x - xy.x, y: atts.y - xy.y };
|
|
42
|
-
// atts.nodes?.forEach((id: string) => {
|
|
43
|
-
// try {
|
|
44
|
-
// const { x, y } = graph.getNodeAttributes(id);
|
|
45
|
-
// graph.setNodeAttribute(id, "x", x + diff.x);
|
|
46
|
-
// graph.setNodeAttribute(id, "y", y + diff.y);
|
|
47
|
-
// } catch {
|
|
48
|
-
// //
|
|
49
|
-
// }
|
|
50
|
-
// });
|
|
51
|
-
// }
|
|
52
|
-
// });
|
|
53
|
-
// }
|
|
54
|
-
isDragging = false;
|
|
55
|
-
draggedNode = undefined;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const enableDragging = (
|
|
59
|
-
renderer: Sigma<NodeAttributes<any>, EdgeAttributes<any>>,
|
|
60
|
-
) => {
|
|
61
|
-
renderer.on("downNode", (e) => {
|
|
62
|
-
if ("button" in e.event.original && e.event.original.button === 0) {
|
|
63
|
-
const graph = renderer.getGraph();
|
|
64
|
-
isDragging = true;
|
|
65
|
-
draggedNode = {};
|
|
66
|
-
const { x = 0, y = 0 } = graph.getNodeAttributes(e.node);
|
|
67
|
-
draggedNode[e.node] = { x, y };
|
|
68
|
-
startPos = { x, y };
|
|
69
|
-
graph.forEachNode((node, atts) => {
|
|
70
|
-
if (atts.selected) {
|
|
71
|
-
draggedNode[node] = { x: atts.x, y: atts.y };
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
// On mouse move, if the drag mode is enabled, we change the position of the draggedNode
|
|
78
|
-
renderer.getMouseCaptor().on("mousemovebody", handleDrag(renderer));
|
|
79
|
-
|
|
80
|
-
// On mouse up, we reset the autoscale and the dragging mode
|
|
81
|
-
renderer.getMouseCaptor().on("mouseup", (e) => {
|
|
82
|
-
if (isDragging) {
|
|
83
|
-
stopDragging(renderer.getGraph());
|
|
84
|
-
e.original.preventDefault();
|
|
85
|
-
e.preventSigmaDefault();
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
// Disable the autoscale at the first down interaction
|
|
90
|
-
renderer.getMouseCaptor().on("mousedown", () => {
|
|
91
|
-
if (!renderer.getCustomBBox()) renderer.setCustomBBox(renderer.getBBox());
|
|
92
|
-
});
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
const resetSelection = (graph: Graph) => {
|
|
96
|
-
graph.forEachNode(
|
|
97
|
-
(node, atts) =>
|
|
98
|
-
atts.selected && graph.setNodeAttribute(node, "selected", false),
|
|
99
|
-
);
|
|
100
|
-
graph.forEachEdge(
|
|
101
|
-
(node, atts) =>
|
|
102
|
-
atts.selected && graph.setEdgeAttribute(node, "selected", false),
|
|
103
|
-
);
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
const enableSelection = (
|
|
107
|
-
renderer: Sigma<NodeAttributes<any>, EdgeAttributes<any>>,
|
|
108
|
-
) => {
|
|
109
|
-
renderer.on("downNode", (e) => {
|
|
110
|
-
if ("button" in e.event.original && e.event.original.button === 2) {
|
|
111
|
-
const isSelected = renderer
|
|
112
|
-
.getGraph()
|
|
113
|
-
.getNodeAttribute(e.node, "selected");
|
|
114
|
-
|
|
115
|
-
!isSelected && resetSelection(renderer.getGraph());
|
|
116
|
-
!isSelected &&
|
|
117
|
-
renderer.getGraph().setNodeAttribute(e.node, "selected", true);
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
renderer.on("downEdge", (e) => {
|
|
121
|
-
if ("button" in e.event.original && e.event.original.button === 2) {
|
|
122
|
-
const isSelected = renderer
|
|
123
|
-
.getGraph()
|
|
124
|
-
.getEdgeAttribute(e.edge, "selected");
|
|
125
|
-
|
|
126
|
-
!isSelected && resetSelection(renderer.getGraph());
|
|
127
|
-
!isSelected &&
|
|
128
|
-
renderer.getGraph().setEdgeAttribute(e.edge, "selected", true);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
renderer.on("clickNode", (e) => {
|
|
132
|
-
if (
|
|
133
|
-
!isDragged &&
|
|
134
|
-
"button" in e.event.original &&
|
|
135
|
-
e.event.original.button === 0
|
|
136
|
-
) {
|
|
137
|
-
const isSelected = renderer
|
|
138
|
-
.getGraph()
|
|
139
|
-
.getNodeAttribute(e.node, "selected");
|
|
140
|
-
|
|
141
|
-
!e.event.original.shiftKey && resetSelection(renderer.getGraph());
|
|
142
|
-
renderer.getGraph().setNodeAttribute(e.node, "selected", !isSelected);
|
|
143
|
-
}
|
|
144
|
-
isDragged = false;
|
|
145
|
-
});
|
|
146
|
-
renderer.on("downStage", (e) => {
|
|
147
|
-
resetSelection(renderer.getGraph());
|
|
148
|
-
});
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
enableSelection(renderer);
|
|
152
|
-
enableDragging(renderer);
|
|
153
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
2
|
-
import { Graph } from "../graph";
|
|
3
|
-
import { type GraphProps } from "../types";
|
|
4
|
-
|
|
5
|
-
export const useGraphology = <N, E>(data: GraphProps<N, E>["data"]) => {
|
|
6
|
-
const [graph, setGraph] = useState(new Graph<N, E>({ multi: true }));
|
|
7
|
-
|
|
8
|
-
const [selected, setSelected] = useState<string[]>([]);
|
|
9
|
-
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
if (data instanceof Graph) {
|
|
12
|
-
setGraph(data);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
graph.clear();
|
|
16
|
-
data && graph.import(data, false);
|
|
17
|
-
}, [data]);
|
|
18
|
-
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
const handler = (nodes: string[]) => {
|
|
21
|
-
setSelected(nodes);
|
|
22
|
-
};
|
|
23
|
-
graph.on("nodesSelected", handler);
|
|
24
|
-
|
|
25
|
-
return () => {
|
|
26
|
-
graph.off("nodesSelected", handler);
|
|
27
|
-
};
|
|
28
|
-
}, [graph]);
|
|
29
|
-
|
|
30
|
-
return { graph, selected };
|
|
31
|
-
};
|
package/src/hooks/useSigma.ts
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { useIsDark } from "@react-fabric/core";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
|
-
import Sigma from "sigma";
|
|
4
|
-
import { type Graph } from "../graph";
|
|
5
|
-
import { EdgeCurveProgram } from "../programs/edge-curve";
|
|
6
|
-
import { EdgeLineProgram } from "../programs/edge-line";
|
|
7
|
-
import { NodeCircleProgram } from "../programs/node-circle";
|
|
8
|
-
import { NodeRectProgram } from "../programs/node-rect";
|
|
9
|
-
import {
|
|
10
|
-
type EdgeAttributes,
|
|
11
|
-
type InternalEdgeAttributes,
|
|
12
|
-
type InternalNodeAttributes,
|
|
13
|
-
type NodeAttributes,
|
|
14
|
-
} from "../types";
|
|
15
|
-
import { attachHighlighter } from "./sigmaHilighter";
|
|
16
|
-
import { attachMouseActions } from "./sigmaMouseActions";
|
|
17
|
-
|
|
18
|
-
export const useSigma = <N, E>(
|
|
19
|
-
graph: Graph<N, E>,
|
|
20
|
-
nodeReducer?: (node: NodeAttributes<N>) => NodeAttributes<N>,
|
|
21
|
-
edgeReducer?: (edge: EdgeAttributes<E>) => EdgeAttributes<E>,
|
|
22
|
-
) => {
|
|
23
|
-
const [containerRef, setContainerRef] = useState<HTMLDivElement | null>(null);
|
|
24
|
-
const [componentsRef, setComponentsRef] = useState<HTMLDivElement | null>(
|
|
25
|
-
null,
|
|
26
|
-
);
|
|
27
|
-
const isDark = useIsDark();
|
|
28
|
-
|
|
29
|
-
const [sigma, updateSigma] =
|
|
30
|
-
useState<Sigma<NodeAttributes<N>, EdgeAttributes<E>>>();
|
|
31
|
-
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
if (containerRef) {
|
|
34
|
-
const renderer = new Sigma<
|
|
35
|
-
InternalNodeAttributes<N>,
|
|
36
|
-
InternalEdgeAttributes<E>
|
|
37
|
-
>(graph as any, containerRef, {
|
|
38
|
-
allowInvalidContainer: true,
|
|
39
|
-
enableEdgeEvents: true,
|
|
40
|
-
renderEdgeLabels: true,
|
|
41
|
-
renderLabels: true,
|
|
42
|
-
labelSize: 14,
|
|
43
|
-
defaultEdgeType: "line",
|
|
44
|
-
defaultNodeType: "circle",
|
|
45
|
-
edgeProgramClasses: {
|
|
46
|
-
line: EdgeLineProgram,
|
|
47
|
-
curved: EdgeCurveProgram,
|
|
48
|
-
},
|
|
49
|
-
// for some reason max ratio is min zoom and min ratio is max zoom
|
|
50
|
-
maxCameraRatio: 10,
|
|
51
|
-
minCameraRatio: 0.01,
|
|
52
|
-
nodeProgramClasses: {
|
|
53
|
-
rect: NodeRectProgram,
|
|
54
|
-
circle: NodeCircleProgram,
|
|
55
|
-
},
|
|
56
|
-
nodeReducer(key, data) {
|
|
57
|
-
const nodeData: InternalNodeAttributes<N> =
|
|
58
|
-
nodeReducer?.(data) ?? data;
|
|
59
|
-
// Ensure node size is at least 16 for visibility
|
|
60
|
-
if (!nodeData.size && nodeData.weight) {
|
|
61
|
-
nodeData.size = Math.max(16, nodeData.weight * 3);
|
|
62
|
-
}
|
|
63
|
-
if ((nodeData.size ?? 0) < 16) {
|
|
64
|
-
nodeData.size = 16;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// ensure node label renderer is called in order to render selected border
|
|
68
|
-
nodeData.label = nodeData.label ?? "";
|
|
69
|
-
nodeData.id = key;
|
|
70
|
-
return nodeData;
|
|
71
|
-
},
|
|
72
|
-
edgeReducer(key, data) {
|
|
73
|
-
const edgeData: InternalEdgeAttributes<E> =
|
|
74
|
-
edgeReducer?.(data) ?? data;
|
|
75
|
-
// Ensure edge size is at least 0.5 for visibility
|
|
76
|
-
if (!edgeData.size && edgeData.weight) {
|
|
77
|
-
edgeData.size = Math.max(0.5, edgeData.weight * 6);
|
|
78
|
-
}
|
|
79
|
-
if ((edgeData.size ?? 0) < 0.5) {
|
|
80
|
-
edgeData.size = 0.5;
|
|
81
|
-
}
|
|
82
|
-
edgeData.id = key;
|
|
83
|
-
return edgeData;
|
|
84
|
-
},
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
attachMouseActions(renderer);
|
|
88
|
-
attachHighlighter(renderer);
|
|
89
|
-
|
|
90
|
-
// containerRef?.insertBefore(
|
|
91
|
-
// componentsRef,
|
|
92
|
-
// renderer.getCanvases().mouse,
|
|
93
|
-
// );
|
|
94
|
-
|
|
95
|
-
// @ts-expect-error ignore
|
|
96
|
-
window.sigma = renderer;
|
|
97
|
-
updateSigma(renderer);
|
|
98
|
-
|
|
99
|
-
return () => {
|
|
100
|
-
renderer.kill();
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
}, [graph, containerRef, componentsRef]);
|
|
104
|
-
|
|
105
|
-
useEffect(() => {
|
|
106
|
-
sigma?.setSettings({
|
|
107
|
-
defaultNodeColor: isDark ? "#000" : "#fff",
|
|
108
|
-
defaultEdgeColor: isDark ? "#fff" : "#000",
|
|
109
|
-
labelColor: { color: isDark ? "#fff" : "#000", attribute: "labelColor" },
|
|
110
|
-
});
|
|
111
|
-
}, [isDark, sigma]);
|
|
112
|
-
|
|
113
|
-
return {
|
|
114
|
-
instance: sigma,
|
|
115
|
-
containerRef: setContainerRef,
|
|
116
|
-
componentsRef: setComponentsRef,
|
|
117
|
-
};
|
|
118
|
-
};
|
package/src/i18n/index.ts
DELETED
|
File without changes
|