@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.
Files changed (224) hide show
  1. package/dist/cjs/context/context.js +16 -0
  2. package/dist/cjs/graph/index.js +58 -381
  3. package/dist/cjs/index.js +25 -21
  4. package/dist/cjs/utils/edge.js +76 -0
  5. package/dist/cjs/utils/node.js +93 -0
  6. package/dist/cjs/utils/sdfFolder.js +107 -0
  7. package/dist/cjs/viewer/Graph.js +174 -0
  8. package/dist/esm/context/context.js +15 -0
  9. package/dist/esm/graph/index.js +59 -382
  10. package/dist/esm/index.js +24 -20
  11. package/dist/esm/utils/edge.js +75 -0
  12. package/dist/esm/utils/node.js +92 -0
  13. package/dist/esm/utils/sdfFolder.js +107 -0
  14. package/dist/esm/viewer/Graph.js +174 -0
  15. package/dist/types/context/context.d.ts +35 -0
  16. package/dist/types/graph/index.d.ts +47 -24
  17. package/dist/types/index.d.ts +28 -2
  18. package/dist/types/types/index.d.ts +124 -175
  19. package/dist/types/utils/edge.d.ts +28 -0
  20. package/dist/types/utils/node.d.ts +28 -0
  21. package/dist/types/utils/sdfFolder.d.ts +75 -0
  22. package/dist/types/viewer/Graph.d.ts +31 -0
  23. package/package.json +19 -25
  24. package/src/context/context.tsx +43 -0
  25. package/src/graph/index.ts +76 -399
  26. package/src/index.ts +24 -26
  27. package/src/types/index.ts +139 -185
  28. package/src/utils/edge.ts +65 -0
  29. package/src/utils/node.ts +105 -0
  30. package/src/utils/sdfFolder.ts +141 -0
  31. package/src/viewer/Graph.tsx +159 -0
  32. package/css/styles.css +0 -56
  33. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  34. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  35. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -35
  36. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
  37. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  38. package/dist/cjs/_virtual/elk-worker.js +0 -8
  39. package/dist/cjs/components/ContextMenu.js +0 -133
  40. package/dist/cjs/components/Provider.js +0 -103
  41. package/dist/cjs/components/Tools.js +0 -205
  42. package/dist/cjs/components/Viewer.js +0 -59
  43. package/dist/cjs/components/context.js +0 -34
  44. package/dist/cjs/constants/index.js +0 -16
  45. package/dist/cjs/hooks/sigmaDragSelect.js +0 -169
  46. package/dist/cjs/hooks/sigmaHilighter.js +0 -83
  47. package/dist/cjs/hooks/sigmaMouseActions.js +0 -145
  48. package/dist/cjs/hooks/useGraphology.js +0 -41
  49. package/dist/cjs/hooks/useSigma.js +0 -112
  50. package/dist/cjs/programs/arrow-head/frag.glsl.js +0 -8
  51. package/dist/cjs/programs/arrow-head/index.js +0 -142
  52. package/dist/cjs/programs/arrow-head/vert.glsl.js +0 -8
  53. package/dist/cjs/programs/edge-curve/drawLabel.js +0 -136
  54. package/dist/cjs/programs/edge-curve/frag.glsl.js +0 -8
  55. package/dist/cjs/programs/edge-curve/index.js +0 -157
  56. package/dist/cjs/programs/edge-curve/vert.glsl.js +0 -8
  57. package/dist/cjs/programs/edge-line/drawLabel.js +0 -70
  58. package/dist/cjs/programs/edge-line/frag.glsl.js +0 -8
  59. package/dist/cjs/programs/edge-line/index.js +0 -166
  60. package/dist/cjs/programs/edge-line/vert.glsl.js +0 -8
  61. package/dist/cjs/programs/node-badge/factory.js +0 -250
  62. package/dist/cjs/programs/node-badge/frag.glsl.js +0 -8
  63. package/dist/cjs/programs/node-badge/index.js +0 -33
  64. package/dist/cjs/programs/node-badge/texture.js +0 -455
  65. package/dist/cjs/programs/node-badge/vert.glsl.js +0 -19
  66. package/dist/cjs/programs/node-circle/base/drawHover.js +0 -71
  67. package/dist/cjs/programs/node-circle/base/drawLabel.js +0 -113
  68. package/dist/cjs/programs/node-circle/base/frag.glsl.js +0 -8
  69. package/dist/cjs/programs/node-circle/base/index.js +0 -136
  70. package/dist/cjs/programs/node-circle/base/vert.glsl.js +0 -8
  71. package/dist/cjs/programs/node-circle/index.js +0 -15
  72. package/dist/cjs/programs/node-image/factory.js +0 -224
  73. package/dist/cjs/programs/node-image/frag.glsl.js +0 -8
  74. package/dist/cjs/programs/node-image/index.js +0 -14
  75. package/dist/cjs/programs/node-image/texture.js +0 -472
  76. package/dist/cjs/programs/node-image/vert.glsl.js +0 -8
  77. package/dist/cjs/programs/node-rect/base/drawHover.js +0 -68
  78. package/dist/cjs/programs/node-rect/base/drawLabel.js +0 -107
  79. package/dist/cjs/programs/node-rect/base/frag.glsl.js +0 -8
  80. package/dist/cjs/programs/node-rect/base/index.js +0 -135
  81. package/dist/cjs/programs/node-rect/base/vert.glsl.js +0 -8
  82. package/dist/cjs/programs/node-rect/index.js +0 -15
  83. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -14
  84. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -9
  85. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +0 -34
  86. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -13
  87. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -20
  88. package/dist/esm/_virtual/elk-worker.js +0 -8
  89. package/dist/esm/components/ContextMenu.js +0 -133
  90. package/dist/esm/components/Provider.js +0 -103
  91. package/dist/esm/components/Tools.js +0 -205
  92. package/dist/esm/components/Viewer.js +0 -59
  93. package/dist/esm/components/context.js +0 -33
  94. package/dist/esm/constants/index.js +0 -16
  95. package/dist/esm/hooks/sigmaDragSelect.js +0 -169
  96. package/dist/esm/hooks/sigmaHilighter.js +0 -83
  97. package/dist/esm/hooks/sigmaMouseActions.js +0 -145
  98. package/dist/esm/hooks/useGraphology.js +0 -41
  99. package/dist/esm/hooks/useSigma.js +0 -112
  100. package/dist/esm/programs/arrow-head/frag.glsl.js +0 -8
  101. package/dist/esm/programs/arrow-head/index.js +0 -141
  102. package/dist/esm/programs/arrow-head/vert.glsl.js +0 -8
  103. package/dist/esm/programs/edge-curve/drawLabel.js +0 -136
  104. package/dist/esm/programs/edge-curve/frag.glsl.js +0 -8
  105. package/dist/esm/programs/edge-curve/index.js +0 -156
  106. package/dist/esm/programs/edge-curve/vert.glsl.js +0 -8
  107. package/dist/esm/programs/edge-line/drawLabel.js +0 -70
  108. package/dist/esm/programs/edge-line/frag.glsl.js +0 -8
  109. package/dist/esm/programs/edge-line/index.js +0 -166
  110. package/dist/esm/programs/edge-line/vert.glsl.js +0 -8
  111. package/dist/esm/programs/node-badge/factory.js +0 -250
  112. package/dist/esm/programs/node-badge/frag.glsl.js +0 -8
  113. package/dist/esm/programs/node-badge/index.js +0 -32
  114. package/dist/esm/programs/node-badge/texture.js +0 -445
  115. package/dist/esm/programs/node-badge/vert.glsl.js +0 -19
  116. package/dist/esm/programs/node-circle/base/drawHover.js +0 -71
  117. package/dist/esm/programs/node-circle/base/drawLabel.js +0 -113
  118. package/dist/esm/programs/node-circle/base/frag.glsl.js +0 -8
  119. package/dist/esm/programs/node-circle/base/index.js +0 -136
  120. package/dist/esm/programs/node-circle/base/vert.glsl.js +0 -8
  121. package/dist/esm/programs/node-circle/index.js +0 -15
  122. package/dist/esm/programs/node-image/factory.js +0 -224
  123. package/dist/esm/programs/node-image/frag.glsl.js +0 -8
  124. package/dist/esm/programs/node-image/index.js +0 -13
  125. package/dist/esm/programs/node-image/texture.js +0 -462
  126. package/dist/esm/programs/node-image/vert.glsl.js +0 -8
  127. package/dist/esm/programs/node-rect/base/drawHover.js +0 -68
  128. package/dist/esm/programs/node-rect/base/drawLabel.js +0 -107
  129. package/dist/esm/programs/node-rect/base/frag.glsl.js +0 -8
  130. package/dist/esm/programs/node-rect/base/index.js +0 -135
  131. package/dist/esm/programs/node-rect/base/vert.glsl.js +0 -8
  132. package/dist/esm/programs/node-rect/index.js +0 -15
  133. package/dist/types/components/ContextMenu.d.ts +0 -1
  134. package/dist/types/components/Provider.d.ts +0 -3
  135. package/dist/types/components/Tools.d.ts +0 -1
  136. package/dist/types/components/Viewer.d.ts +0 -2
  137. package/dist/types/components/context.d.ts +0 -17
  138. package/dist/types/constants/index.d.ts +0 -12
  139. package/dist/types/graph/layout.worker.d.ts +0 -1
  140. package/dist/types/hooks/sigmaDragSelect.d.ts +0 -8
  141. package/dist/types/hooks/sigmaHilighter.d.ts +0 -3
  142. package/dist/types/hooks/sigmaMouseActions.d.ts +0 -3
  143. package/dist/types/hooks/useGraphology.d.ts +0 -6
  144. package/dist/types/hooks/useSigma.d.ts +0 -8
  145. package/dist/types/i18n/index.d.ts +0 -0
  146. package/dist/types/programs/arrow-head/frag.glsl.d.ts +0 -2
  147. package/dist/types/programs/arrow-head/index.d.ts +0 -9
  148. package/dist/types/programs/arrow-head/vert.glsl.d.ts +0 -2
  149. package/dist/types/programs/edge-curve/drawLabel.d.ts +0 -6
  150. package/dist/types/programs/edge-curve/frag.glsl.d.ts +0 -2
  151. package/dist/types/programs/edge-curve/index.d.ts +0 -43
  152. package/dist/types/programs/edge-curve/vert.glsl.d.ts +0 -2
  153. package/dist/types/programs/edge-line/drawLabel.d.ts +0 -5
  154. package/dist/types/programs/edge-line/frag.glsl.d.ts +0 -2
  155. package/dist/types/programs/edge-line/index.d.ts +0 -11
  156. package/dist/types/programs/edge-line/vert.glsl.d.ts +0 -2
  157. package/dist/types/programs/node-badge/factory.d.ts +0 -27
  158. package/dist/types/programs/node-badge/frag.glsl.d.ts +0 -2
  159. package/dist/types/programs/node-badge/index.d.ts +0 -5
  160. package/dist/types/programs/node-badge/texture.d.ts +0 -102
  161. package/dist/types/programs/node-badge/vert.glsl.d.ts +0 -2
  162. package/dist/types/programs/node-circle/base/drawHover.d.ts +0 -8
  163. package/dist/types/programs/node-circle/base/drawLabel.d.ts +0 -8
  164. package/dist/types/programs/node-circle/base/frag.glsl.d.ts +0 -2
  165. package/dist/types/programs/node-circle/base/index.d.ts +0 -37
  166. package/dist/types/programs/node-circle/base/vert.glsl.d.ts +0 -2
  167. package/dist/types/programs/node-circle/index.d.ts +0 -11
  168. package/dist/types/programs/node-image/factory.d.ts +0 -25
  169. package/dist/types/programs/node-image/frag.glsl.d.ts +0 -2
  170. package/dist/types/programs/node-image/index.d.ts +0 -5
  171. package/dist/types/programs/node-image/texture.d.ts +0 -102
  172. package/dist/types/programs/node-image/vert.glsl.d.ts +0 -2
  173. package/dist/types/programs/node-rect/base/drawHover.d.ts +0 -8
  174. package/dist/types/programs/node-rect/base/drawLabel.d.ts +0 -8
  175. package/dist/types/programs/node-rect/base/frag.glsl.d.ts +0 -2
  176. package/dist/types/programs/node-rect/base/index.d.ts +0 -34
  177. package/dist/types/programs/node-rect/base/vert.glsl.d.ts +0 -2
  178. package/dist/types/programs/node-rect/index.d.ts +0 -11
  179. package/src/components/ContextMenu.tsx +0 -138
  180. package/src/components/Provider.tsx +0 -116
  181. package/src/components/Tools.tsx +0 -68
  182. package/src/components/Viewer.tsx +0 -75
  183. package/src/components/context.ts +0 -43
  184. package/src/constants/index.ts +0 -22
  185. package/src/graph/layout.worker.ts +0 -42
  186. package/src/hooks/sigmaDragSelect.ts +0 -219
  187. package/src/hooks/sigmaHilighter.ts +0 -107
  188. package/src/hooks/sigmaMouseActions.ts +0 -153
  189. package/src/hooks/useGraphology.ts +0 -31
  190. package/src/hooks/useSigma.ts +0 -118
  191. package/src/i18n/index.ts +0 -0
  192. package/src/programs/arrow-head/frag.glsl.ts +0 -18
  193. package/src/programs/arrow-head/index.ts +0 -156
  194. package/src/programs/arrow-head/vert.glsl.ts +0 -75
  195. package/src/programs/edge-curve/drawLabel.ts +0 -166
  196. package/src/programs/edge-curve/frag.glsl.ts +0 -86
  197. package/src/programs/edge-curve/index.ts +0 -156
  198. package/src/programs/edge-curve/vert.glsl.ts +0 -110
  199. package/src/programs/edge-line/drawLabel.ts +0 -113
  200. package/src/programs/edge-line/frag.glsl.ts +0 -34
  201. package/src/programs/edge-line/index.ts +0 -163
  202. package/src/programs/edge-line/vert.glsl.ts +0 -104
  203. package/src/programs/node-badge/factory.ts +0 -325
  204. package/src/programs/node-badge/frag.glsl.ts +0 -79
  205. package/src/programs/node-badge/index.ts +0 -35
  206. package/src/programs/node-badge/texture.ts +0 -425
  207. package/src/programs/node-badge/vert.glsl.ts +0 -99
  208. package/src/programs/node-circle/base/drawHover.ts +0 -80
  209. package/src/programs/node-circle/base/drawLabel.ts +0 -145
  210. package/src/programs/node-circle/base/frag.glsl.ts +0 -72
  211. package/src/programs/node-circle/base/index.ts +0 -100
  212. package/src/programs/node-circle/base/vert.glsl.ts +0 -83
  213. package/src/programs/node-circle/index.ts +0 -19
  214. package/src/programs/node-image/factory.ts +0 -299
  215. package/src/programs/node-image/frag.glsl.ts +0 -97
  216. package/src/programs/node-image/index.ts +0 -7
  217. package/src/programs/node-image/texture.ts +0 -435
  218. package/src/programs/node-image/vert.glsl.ts +0 -60
  219. package/src/programs/node-rect/base/drawHover.ts +0 -77
  220. package/src/programs/node-rect/base/drawLabel.ts +0 -149
  221. package/src/programs/node-rect/base/frag.glsl.ts +0 -67
  222. package/src/programs/node-rect/base/index.ts +0 -107
  223. package/src/programs/node-rect/base/vert.glsl.ts +0 -87
  224. package/src/programs/node-rect/index.ts +0 -19
@@ -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
- };
@@ -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