@react-fabric/graph 1.0.0-beta.58

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 (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/css/styles.css +56 -0
  4. package/dist/cjs/_virtual/_commonjs-dynamic-modules.js +7 -0
  5. package/dist/cjs/_virtual/_commonjsHelpers.js +7 -0
  6. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +14 -0
  7. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +9 -0
  8. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +35 -0
  9. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +11 -0
  10. package/dist/cjs/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +20 -0
  11. package/dist/cjs/_virtual/elk-worker.js +8 -0
  12. package/dist/cjs/_virtual/elk.bundled.js +5 -0
  13. package/dist/cjs/node_modules/elkjs/lib/elk.bundled.js +6667 -0
  14. package/dist/cjs/packages/graph/src/components/Context.js +108 -0
  15. package/dist/cjs/packages/graph/src/components/ContextMenu.js +134 -0
  16. package/dist/cjs/packages/graph/src/components/Tools.js +127 -0
  17. package/dist/cjs/packages/graph/src/components/Viewer.js +57 -0
  18. package/dist/cjs/packages/graph/src/constants/index.js +16 -0
  19. package/dist/cjs/packages/graph/src/graph/index.js +425 -0
  20. package/dist/cjs/packages/graph/src/hooks/sigmaDragSelect.js +169 -0
  21. package/dist/cjs/packages/graph/src/hooks/sigmaHilighter.js +83 -0
  22. package/dist/cjs/packages/graph/src/hooks/sigmaMouseActions.js +145 -0
  23. package/dist/cjs/packages/graph/src/hooks/useGraphology.js +41 -0
  24. package/dist/cjs/packages/graph/src/hooks/useSigma.js +112 -0
  25. package/dist/cjs/packages/graph/src/index.js +33 -0
  26. package/dist/cjs/packages/graph/src/programs/arrow-head/frag.glsl.js +8 -0
  27. package/dist/cjs/packages/graph/src/programs/arrow-head/index.js +142 -0
  28. package/dist/cjs/packages/graph/src/programs/arrow-head/vert.glsl.js +8 -0
  29. package/dist/cjs/packages/graph/src/programs/edge-curve/drawLabel.js +136 -0
  30. package/dist/cjs/packages/graph/src/programs/edge-curve/frag.glsl.js +8 -0
  31. package/dist/cjs/packages/graph/src/programs/edge-curve/index.js +157 -0
  32. package/dist/cjs/packages/graph/src/programs/edge-curve/vert.glsl.js +8 -0
  33. package/dist/cjs/packages/graph/src/programs/edge-line/drawLabel.js +70 -0
  34. package/dist/cjs/packages/graph/src/programs/edge-line/frag.glsl.js +8 -0
  35. package/dist/cjs/packages/graph/src/programs/edge-line/index.js +166 -0
  36. package/dist/cjs/packages/graph/src/programs/edge-line/vert.glsl.js +8 -0
  37. package/dist/cjs/packages/graph/src/programs/node-badge/factory.js +249 -0
  38. package/dist/cjs/packages/graph/src/programs/node-badge/frag.glsl.js +8 -0
  39. package/dist/cjs/packages/graph/src/programs/node-badge/index.js +33 -0
  40. package/dist/cjs/packages/graph/src/programs/node-badge/texture.js +455 -0
  41. package/dist/cjs/packages/graph/src/programs/node-badge/vert.glsl.js +19 -0
  42. package/dist/cjs/packages/graph/src/programs/node-circle/base/drawHover.js +70 -0
  43. package/dist/cjs/packages/graph/src/programs/node-circle/base/drawLabel.js +112 -0
  44. package/dist/cjs/packages/graph/src/programs/node-circle/base/frag.glsl.js +8 -0
  45. package/dist/cjs/packages/graph/src/programs/node-circle/base/index.js +136 -0
  46. package/dist/cjs/packages/graph/src/programs/node-circle/base/vert.glsl.js +8 -0
  47. package/dist/cjs/packages/graph/src/programs/node-circle/index.js +15 -0
  48. package/dist/cjs/packages/graph/src/programs/node-image/factory.js +223 -0
  49. package/dist/cjs/packages/graph/src/programs/node-image/frag.glsl.js +8 -0
  50. package/dist/cjs/packages/graph/src/programs/node-image/index.js +14 -0
  51. package/dist/cjs/packages/graph/src/programs/node-image/texture.js +472 -0
  52. package/dist/cjs/packages/graph/src/programs/node-image/vert.glsl.js +8 -0
  53. package/dist/cjs/packages/graph/src/programs/node-rect/base/drawHover.js +67 -0
  54. package/dist/cjs/packages/graph/src/programs/node-rect/base/drawLabel.js +106 -0
  55. package/dist/cjs/packages/graph/src/programs/node-rect/base/frag.glsl.js +8 -0
  56. package/dist/cjs/packages/graph/src/programs/node-rect/base/index.js +135 -0
  57. package/dist/cjs/packages/graph/src/programs/node-rect/base/vert.glsl.js +8 -0
  58. package/dist/cjs/packages/graph/src/programs/node-rect/index.js +15 -0
  59. package/dist/esm/_virtual/_commonjs-dynamic-modules.js +7 -0
  60. package/dist/esm/_virtual/_commonjsHelpers.js +7 -0
  61. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +14 -0
  62. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +9 -0
  63. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +34 -0
  64. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +13 -0
  65. package/dist/esm/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +20 -0
  66. package/dist/esm/_virtual/elk-worker.js +8 -0
  67. package/dist/esm/_virtual/elk.bundled.js +5 -0
  68. package/dist/esm/node_modules/elkjs/lib/elk.bundled.js +6667 -0
  69. package/dist/esm/packages/graph/src/components/Context.js +107 -0
  70. package/dist/esm/packages/graph/src/components/ContextMenu.js +134 -0
  71. package/dist/esm/packages/graph/src/components/Tools.js +127 -0
  72. package/dist/esm/packages/graph/src/components/Viewer.js +57 -0
  73. package/dist/esm/packages/graph/src/constants/index.js +16 -0
  74. package/dist/esm/packages/graph/src/graph/index.js +425 -0
  75. package/dist/esm/packages/graph/src/hooks/sigmaDragSelect.js +169 -0
  76. package/dist/esm/packages/graph/src/hooks/sigmaHilighter.js +83 -0
  77. package/dist/esm/packages/graph/src/hooks/sigmaMouseActions.js +145 -0
  78. package/dist/esm/packages/graph/src/hooks/useGraphology.js +41 -0
  79. package/dist/esm/packages/graph/src/hooks/useSigma.js +112 -0
  80. package/dist/esm/packages/graph/src/index.js +30 -0
  81. package/dist/esm/packages/graph/src/programs/arrow-head/frag.glsl.js +8 -0
  82. package/dist/esm/packages/graph/src/programs/arrow-head/index.js +141 -0
  83. package/dist/esm/packages/graph/src/programs/arrow-head/vert.glsl.js +8 -0
  84. package/dist/esm/packages/graph/src/programs/edge-curve/drawLabel.js +136 -0
  85. package/dist/esm/packages/graph/src/programs/edge-curve/frag.glsl.js +8 -0
  86. package/dist/esm/packages/graph/src/programs/edge-curve/index.js +156 -0
  87. package/dist/esm/packages/graph/src/programs/edge-curve/vert.glsl.js +8 -0
  88. package/dist/esm/packages/graph/src/programs/edge-line/drawLabel.js +70 -0
  89. package/dist/esm/packages/graph/src/programs/edge-line/frag.glsl.js +8 -0
  90. package/dist/esm/packages/graph/src/programs/edge-line/index.js +166 -0
  91. package/dist/esm/packages/graph/src/programs/edge-line/vert.glsl.js +8 -0
  92. package/dist/esm/packages/graph/src/programs/node-badge/factory.js +249 -0
  93. package/dist/esm/packages/graph/src/programs/node-badge/frag.glsl.js +8 -0
  94. package/dist/esm/packages/graph/src/programs/node-badge/index.js +32 -0
  95. package/dist/esm/packages/graph/src/programs/node-badge/texture.js +445 -0
  96. package/dist/esm/packages/graph/src/programs/node-badge/vert.glsl.js +19 -0
  97. package/dist/esm/packages/graph/src/programs/node-circle/base/drawHover.js +70 -0
  98. package/dist/esm/packages/graph/src/programs/node-circle/base/drawLabel.js +112 -0
  99. package/dist/esm/packages/graph/src/programs/node-circle/base/frag.glsl.js +8 -0
  100. package/dist/esm/packages/graph/src/programs/node-circle/base/index.js +136 -0
  101. package/dist/esm/packages/graph/src/programs/node-circle/base/vert.glsl.js +8 -0
  102. package/dist/esm/packages/graph/src/programs/node-circle/index.js +15 -0
  103. package/dist/esm/packages/graph/src/programs/node-image/factory.js +223 -0
  104. package/dist/esm/packages/graph/src/programs/node-image/frag.glsl.js +8 -0
  105. package/dist/esm/packages/graph/src/programs/node-image/index.js +13 -0
  106. package/dist/esm/packages/graph/src/programs/node-image/texture.js +462 -0
  107. package/dist/esm/packages/graph/src/programs/node-image/vert.glsl.js +8 -0
  108. package/dist/esm/packages/graph/src/programs/node-rect/base/drawHover.js +67 -0
  109. package/dist/esm/packages/graph/src/programs/node-rect/base/drawLabel.js +106 -0
  110. package/dist/esm/packages/graph/src/programs/node-rect/base/frag.glsl.js +8 -0
  111. package/dist/esm/packages/graph/src/programs/node-rect/base/index.js +135 -0
  112. package/dist/esm/packages/graph/src/programs/node-rect/base/vert.glsl.js +8 -0
  113. package/dist/esm/packages/graph/src/programs/node-rect/index.js +15 -0
  114. package/dist/types/components/Context.d.ts +18 -0
  115. package/dist/types/components/ContextMenu.d.ts +1 -0
  116. package/dist/types/components/Tools.d.ts +1 -0
  117. package/dist/types/components/Viewer.d.ts +2 -0
  118. package/dist/types/constants/index.d.ts +12 -0
  119. package/dist/types/graph/index.d.ts +30 -0
  120. package/dist/types/graph/layout.worker.d.ts +1 -0
  121. package/dist/types/hooks/sigmaDragSelect.d.ts +8 -0
  122. package/dist/types/hooks/sigmaHilighter.d.ts +3 -0
  123. package/dist/types/hooks/sigmaMouseActions.d.ts +3 -0
  124. package/dist/types/hooks/useGraphology.d.ts +6 -0
  125. package/dist/types/hooks/useSigma.d.ts +8 -0
  126. package/dist/types/index.d.ts +3 -0
  127. package/dist/types/programs/arrow-head/frag.glsl.d.ts +2 -0
  128. package/dist/types/programs/arrow-head/index.d.ts +9 -0
  129. package/dist/types/programs/arrow-head/vert.glsl.d.ts +2 -0
  130. package/dist/types/programs/edge-curve/drawLabel.d.ts +6 -0
  131. package/dist/types/programs/edge-curve/frag.glsl.d.ts +2 -0
  132. package/dist/types/programs/edge-curve/index.d.ts +43 -0
  133. package/dist/types/programs/edge-curve/vert.glsl.d.ts +2 -0
  134. package/dist/types/programs/edge-line/drawLabel.d.ts +5 -0
  135. package/dist/types/programs/edge-line/frag.glsl.d.ts +2 -0
  136. package/dist/types/programs/edge-line/index.d.ts +11 -0
  137. package/dist/types/programs/edge-line/vert.glsl.d.ts +2 -0
  138. package/dist/types/programs/node-badge/factory.d.ts +27 -0
  139. package/dist/types/programs/node-badge/frag.glsl.d.ts +2 -0
  140. package/dist/types/programs/node-badge/index.d.ts +5 -0
  141. package/dist/types/programs/node-badge/texture.d.ts +102 -0
  142. package/dist/types/programs/node-badge/vert.glsl.d.ts +2 -0
  143. package/dist/types/programs/node-circle/base/drawHover.d.ts +8 -0
  144. package/dist/types/programs/node-circle/base/drawLabel.d.ts +8 -0
  145. package/dist/types/programs/node-circle/base/frag.glsl.d.ts +2 -0
  146. package/dist/types/programs/node-circle/base/index.d.ts +37 -0
  147. package/dist/types/programs/node-circle/base/vert.glsl.d.ts +2 -0
  148. package/dist/types/programs/node-circle/index.d.ts +11 -0
  149. package/dist/types/programs/node-image/factory.d.ts +25 -0
  150. package/dist/types/programs/node-image/frag.glsl.d.ts +2 -0
  151. package/dist/types/programs/node-image/index.d.ts +5 -0
  152. package/dist/types/programs/node-image/texture.d.ts +102 -0
  153. package/dist/types/programs/node-image/vert.glsl.d.ts +2 -0
  154. package/dist/types/programs/node-rect/base/drawHover.d.ts +8 -0
  155. package/dist/types/programs/node-rect/base/drawLabel.d.ts +8 -0
  156. package/dist/types/programs/node-rect/base/frag.glsl.d.ts +2 -0
  157. package/dist/types/programs/node-rect/base/index.d.ts +34 -0
  158. package/dist/types/programs/node-rect/base/vert.glsl.d.ts +2 -0
  159. package/dist/types/programs/node-rect/index.d.ts +11 -0
  160. package/dist/types/types/index.d.ts +189 -0
  161. package/package.json +69 -0
  162. package/src/components/Context.tsx +135 -0
  163. package/src/components/ContextMenu.tsx +156 -0
  164. package/src/components/Tools.tsx +107 -0
  165. package/src/components/Viewer.tsx +75 -0
  166. package/src/constants/index.ts +22 -0
  167. package/src/graph/index.ts +428 -0
  168. package/src/graph/layout.worker.ts +42 -0
  169. package/src/hooks/sigmaDragSelect.ts +219 -0
  170. package/src/hooks/sigmaHilighter.ts +107 -0
  171. package/src/hooks/sigmaMouseActions.ts +153 -0
  172. package/src/hooks/useGraphology.ts +31 -0
  173. package/src/hooks/useSigma.ts +118 -0
  174. package/src/index.ts +34 -0
  175. package/src/programs/arrow-head/frag.glsl.ts +18 -0
  176. package/src/programs/arrow-head/index.ts +148 -0
  177. package/src/programs/arrow-head/vert.glsl.ts +75 -0
  178. package/src/programs/edge-curve/drawLabel.ts +166 -0
  179. package/src/programs/edge-curve/frag.glsl.ts +86 -0
  180. package/src/programs/edge-curve/index.ts +158 -0
  181. package/src/programs/edge-curve/vert.glsl.ts +110 -0
  182. package/src/programs/edge-line/drawLabel.ts +113 -0
  183. package/src/programs/edge-line/frag.glsl.ts +34 -0
  184. package/src/programs/edge-line/index.ts +165 -0
  185. package/src/programs/edge-line/vert.glsl.ts +104 -0
  186. package/src/programs/node-badge/factory.ts +327 -0
  187. package/src/programs/node-badge/frag.glsl.ts +79 -0
  188. package/src/programs/node-badge/index.ts +35 -0
  189. package/src/programs/node-badge/texture.ts +425 -0
  190. package/src/programs/node-badge/vert.glsl.ts +99 -0
  191. package/src/programs/node-circle/base/drawHover.ts +80 -0
  192. package/src/programs/node-circle/base/drawLabel.ts +145 -0
  193. package/src/programs/node-circle/base/frag.glsl.ts +72 -0
  194. package/src/programs/node-circle/base/index.ts +102 -0
  195. package/src/programs/node-circle/base/vert.glsl.ts +83 -0
  196. package/src/programs/node-circle/index.ts +19 -0
  197. package/src/programs/node-image/factory.ts +301 -0
  198. package/src/programs/node-image/frag.glsl.ts +97 -0
  199. package/src/programs/node-image/index.ts +7 -0
  200. package/src/programs/node-image/texture.ts +435 -0
  201. package/src/programs/node-image/vert.glsl.ts +60 -0
  202. package/src/programs/node-rect/base/drawHover.ts +77 -0
  203. package/src/programs/node-rect/base/drawLabel.ts +149 -0
  204. package/src/programs/node-rect/base/frag.glsl.ts +67 -0
  205. package/src/programs/node-rect/base/index.ts +109 -0
  206. package/src/programs/node-rect/base/vert.glsl.ts +87 -0
  207. package/src/programs/node-rect/index.ts +19 -0
  208. package/src/types/index.ts +210 -0
@@ -0,0 +1,107 @@
1
+ 'use client';
2
+
3
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
+ import { Icon, CoreIcons } from '@react-fabric/core';
5
+ import { fitViewportToNodes } from '@sigma/utils';
6
+ import { useState, useEffect, useImperativeHandle, createContext, useContext } from 'react';
7
+ import { useDragSelection } from '../hooks/sigmaDragSelect.js';
8
+ import { useGraphology } from '../hooks/useGraphology.js';
9
+ import { useSigma } from '../hooks/useSigma.js';
10
+ import { jsxs, jsx } from 'react/jsx-runtime';
11
+
12
+ var GraphContext = /*#__PURE__*/createContext({});
13
+ var useGraph = function useGraph() {
14
+ return useContext(GraphContext);
15
+ };
16
+ var GraphProvider = function GraphProvider(_ref) {
17
+ var ref = _ref.ref,
18
+ data = _ref.data,
19
+ children = _ref.children,
20
+ nodeReducer = _ref.nodeReducer,
21
+ edgeReducer = _ref.edgeReducer,
22
+ onSelectChange = _ref.onSelectChange,
23
+ onNodeDoubleClick = _ref.onNodeDoubleClick;
24
+ _ref.onContextMenu;
25
+ var _useGraphology = useGraphology(data),
26
+ graph = _useGraphology.graph,
27
+ selected = _useGraphology.selected;
28
+ var sigma = useSigma(graph, nodeReducer, edgeReducer);
29
+ var dragSelector = useDragSelection(sigma.instance);
30
+ var _useState = useState(false),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ layoutRunning = _useState2[0],
33
+ setLayoutRunning = _useState2[1];
34
+ var resetViewport = function resetViewport() {
35
+ if (graph.size === 0) return;
36
+ sigma.instance && fitViewportToNodes(sigma.instance, graph.nodes(), {
37
+ animate: true
38
+ });
39
+ };
40
+ var zoomIn = function zoomIn() {
41
+ var _sigma$instance;
42
+ if (graph.size === 0) return;
43
+ (_sigma$instance = sigma.instance) === null || _sigma$instance === void 0 || _sigma$instance.getCamera().animatedZoom();
44
+ };
45
+ var zoomOut = function zoomOut() {
46
+ var _sigma$instance2;
47
+ if (graph.size === 0) return;
48
+ (_sigma$instance2 = sigma.instance) === null || _sigma$instance2 === void 0 || _sigma$instance2.getCamera().animatedUnzoom();
49
+ };
50
+ useEffect(function () {
51
+ var resetHandler = function resetHandler() {
52
+ sigma.instance && fitViewportToNodes(sigma.instance, graph.nodes(), {
53
+ animate: true
54
+ });
55
+ };
56
+ graph.on("layoutRunning", setLayoutRunning);
57
+ graph.on("layoutDone", resetHandler);
58
+ onSelectChange && graph.on("nodesSelected", onSelectChange);
59
+ return function () {
60
+ graph.off("layoutDone", resetHandler);
61
+ graph.off("layoutRunning", setLayoutRunning);
62
+ onSelectChange && graph.off("nodesSelected", onSelectChange);
63
+ };
64
+ }, [graph, sigma, onSelectChange]);
65
+ useEffect(function () {
66
+ var _sigma$instance3;
67
+ var handleClick = function handleClick(e) {
68
+ onNodeDoubleClick === null || onNodeDoubleClick === void 0 || onNodeDoubleClick(e.node, graph.getNodeAttributes(e.node));
69
+ e.event.original.preventDefault();
70
+ e.event.preventSigmaDefault();
71
+ e.preventSigmaDefault();
72
+ return false;
73
+ };
74
+ (_sigma$instance3 = sigma.instance) === null || _sigma$instance3 === void 0 || _sigma$instance3.on("doubleClickNode", handleClick);
75
+ return function () {
76
+ var _sigma$instance4;
77
+ (_sigma$instance4 = sigma.instance) === null || _sigma$instance4 === void 0 || _sigma$instance4.off("doubleClickNode", handleClick);
78
+ };
79
+ }, [sigma, graph, onNodeDoubleClick]);
80
+ useImperativeHandle(ref, function () {
81
+ return {
82
+ graph: graph,
83
+ sigma: sigma
84
+ };
85
+ }, [graph, sigma]);
86
+ return /*#__PURE__*/jsxs(GraphContext.Provider, {
87
+ value: {
88
+ sigma: sigma,
89
+ graph: graph,
90
+ selected: selected,
91
+ dragSelector: dragSelector,
92
+ layoutRunning: layoutRunning,
93
+ resetViewport: resetViewport,
94
+ zoomIn: zoomIn,
95
+ zoomOut: zoomOut
96
+ },
97
+ children: [children, layoutRunning && /*#__PURE__*/jsx("div", {
98
+ className: "absolute top-0 end-0 p-1",
99
+ children: /*#__PURE__*/jsx(Icon, {
100
+ icon: CoreIcons.spinner,
101
+ animate: "spin"
102
+ })
103
+ })]
104
+ });
105
+ };
106
+
107
+ export { GraphProvider, useGraph };
@@ -0,0 +1,134 @@
1
+ 'use client';
2
+
3
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
+ import { useFloatingNodeId, useFloating, autoUpdate, offset, flip, useClick, useDismiss, useInteractions, FloatingPortal } from '@floating-ui/react';
6
+ import { useState, useRef, useEffect, cloneElement } from 'react';
7
+ import { useGraph } from './Context.js';
8
+ import { Menu, MenuItem, Divider } from '@react-fabric/core';
9
+ import { ICONS } from '../constants/index.js';
10
+ import { jsx } from 'react/jsx-runtime';
11
+
12
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
+ var GraphContextMenu = function GraphContextMenu() {
15
+ var _refs$domReference$cu, _refs$domReference$cu2;
16
+ var _useState = useState(false),
17
+ _useState2 = _slicedToArray(_useState, 2),
18
+ isOpen = _useState2[0],
19
+ setIsOpen = _useState2[1];
20
+ var nodeId = useFloatingNodeId();
21
+ var _useGraph = useGraph(),
22
+ sigma = _useGraph.sigma;
23
+ _useGraph.graph;
24
+ var _useState3 = useState([]),
25
+ _useState4 = _slicedToArray(_useState3, 2),
26
+ menu = _useState4[0],
27
+ setMenu = _useState4[1];
28
+ var _useFloating = useFloating({
29
+ open: isOpen,
30
+ nodeId: nodeId,
31
+ onOpenChange: function onOpenChange(open, evt, reason) {
32
+ var target = evt === null || evt === void 0 ? void 0 : evt.target;
33
+ if (!(target !== null && target !== void 0 && target.closest(".menu-list"))) setIsOpen(open);
34
+ },
35
+ strategy: "absolute",
36
+ placement: "bottom-start",
37
+ whileElementsMounted: autoUpdate,
38
+ middleware: [offset(8), flip()]
39
+ }),
40
+ refs = _useFloating.refs,
41
+ floatingStyles = _useFloating.floatingStyles,
42
+ context = _useFloating.context;
43
+ var click = useClick(context, {
44
+ toggle: true,
45
+ ignoreMouse: true
46
+ });
47
+ var dismiss = useDismiss(context, {
48
+ bubbles: true
49
+ });
50
+ var _useInteractions = useInteractions([dismiss, click]),
51
+ getFloatingProps = _useInteractions.getFloatingProps;
52
+ var tryClosing = useRef(function (e) {
53
+ var _e$target;
54
+ if ((_e$target = e.target) !== null && _e$target !== void 0 && _e$target.closest("[data-dropdown-dismiss='true']")) setTimeout(function () {
55
+ return setIsOpen(false);
56
+ }, 50);
57
+ });
58
+ useEffect(function () {
59
+ var _sigma$instance, _sigma$instance2, _sigma$instance3;
60
+ var handleContextMenu = function handleContextMenu(e) {
61
+ if ("node" in e) {
62
+ setMenu([/*#__PURE__*/jsx(MenuItem, {
63
+ label: "Select neighbors"
64
+ }), /*#__PURE__*/jsx(Divider, {}), /*#__PURE__*/jsx(MenuItem, {
65
+ label: "Delete node(s)",
66
+ color: "danger",
67
+ icon: ICONS["delete"]
68
+ }), /*#__PURE__*/jsx(MenuItem, {
69
+ label: "Clear graph",
70
+ color: "danger",
71
+ icon: ICONS.clear
72
+ })]);
73
+ } else if ("edge" in e) {
74
+ setMenu([/*#__PURE__*/jsx(MenuItem, {
75
+ label: "Select neighbors"
76
+ }), /*#__PURE__*/jsx(Divider, {}), /*#__PURE__*/jsx(MenuItem, {
77
+ label: "Clear graph",
78
+ color: "danger",
79
+ icon: ICONS.clear
80
+ })]);
81
+ } else {
82
+ setMenu([/*#__PURE__*/jsx(MenuItem, {
83
+ label: "Clear graph",
84
+ color: "danger",
85
+ icon: ICONS.clear
86
+ })]);
87
+ }
88
+ var virtual = {
89
+ getBoundingClientRect: function getBoundingClientRect() {
90
+ return {
91
+ width: 0,
92
+ height: 0,
93
+ x: e.event.x,
94
+ y: e.event.y,
95
+ top: e.event.y,
96
+ left: e.event.x,
97
+ right: e.event.x,
98
+ bottom: e.event.y
99
+ };
100
+ }
101
+ };
102
+ setIsOpen(true);
103
+ refs.setReference(virtual);
104
+ e.event.original.preventDefault();
105
+ return false;
106
+ };
107
+ (_sigma$instance = sigma.instance) === null || _sigma$instance === void 0 || _sigma$instance.on("rightClickNode", handleContextMenu);
108
+ (_sigma$instance2 = sigma.instance) === null || _sigma$instance2 === void 0 || _sigma$instance2.on("rightClickEdge", handleContextMenu);
109
+ (_sigma$instance3 = sigma.instance) === null || _sigma$instance3 === void 0 || _sigma$instance3.on("rightClickStage", handleContextMenu);
110
+ return function () {
111
+ var _sigma$instance4, _sigma$instance5, _sigma$instance6;
112
+ (_sigma$instance4 = sigma.instance) === null || _sigma$instance4 === void 0 || _sigma$instance4.off("rightClickNode", handleContextMenu);
113
+ (_sigma$instance5 = sigma.instance) === null || _sigma$instance5 === void 0 || _sigma$instance5.off("rightClickEdge", handleContextMenu);
114
+ (_sigma$instance6 = sigma.instance) === null || _sigma$instance6 === void 0 || _sigma$instance6.off("rightClickStage", handleContextMenu);
115
+ };
116
+ }, [sigma]);
117
+ return isOpen && /*#__PURE__*/jsx(FloatingPortal, {
118
+ root: (_refs$domReference$cu = (_refs$domReference$cu2 = refs.domReference.current) === null || _refs$domReference$cu2 === void 0 ? void 0 : _refs$domReference$cu2.closest(".theme-base")) !== null && _refs$domReference$cu !== void 0 ? _refs$domReference$cu : undefined,
119
+ children: /*#__PURE__*/cloneElement( /*#__PURE__*/jsx(Menu, {
120
+ children: menu
121
+ }), _objectSpread(_objectSpread({}, getFloatingProps()), {}, {
122
+ style: _objectSpread(_objectSpread({}, floatingStyles), {}, {
123
+ borderRadius: "var(--rounding)",
124
+ zIndex: "var(--z-popover)",
125
+ fontSize: "0.75rem"
126
+ }),
127
+ className: "bg-base outline rounded-capped shadow-lg",
128
+ ref: refs.setFloating,
129
+ onMouseUp: tryClosing.current
130
+ }))
131
+ });
132
+ };
133
+
134
+ export { GraphContextMenu };
@@ -0,0 +1,127 @@
1
+ 'use client';
2
+
3
+ import { ButtonGroup, Button, Dropdown, Menu, MenuItem } from '@react-fabric/core';
4
+ import { ICONS } from '../constants/index.js';
5
+ import { useGraph } from './Context.js';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var Tools = function Tools() {
9
+ var _useGraph = useGraph(),
10
+ dragSelector = _useGraph.dragSelector,
11
+ graph = _useGraph.graph,
12
+ selected = _useGraph.selected;
13
+ _useGraph.layoutRunning;
14
+ var resetViewport = _useGraph.resetViewport,
15
+ zoomIn = _useGraph.zoomIn,
16
+ zoomOut = _useGraph.zoomOut;
17
+ return /*#__PURE__*/jsxs("div", {
18
+ className: "flex flex-nowrap outline absolute top-0 start-0 p-0 z-1 bg-base",
19
+ children: [/*#__PURE__*/jsxs(ButtonGroup, {
20
+ variant: "link",
21
+ children: [/*#__PURE__*/jsx(Button, {
22
+ "aria-label": "Home",
23
+ icon: ICONS.focus,
24
+ onClick: resetViewport
25
+ }), /*#__PURE__*/jsx(Button, {
26
+ "aria-label": "Zoomin",
27
+ icon: ICONS.zoomIn,
28
+ onClick: zoomIn
29
+ }), /*#__PURE__*/jsx(Button, {
30
+ "aria-label": "Zoomout",
31
+ icon: ICONS.zoomOut,
32
+ onClick: zoomOut
33
+ })]
34
+ }), /*#__PURE__*/jsxs(ButtonGroup, {
35
+ variant: "link",
36
+ children: [dragSelector.selectionMode !== "lasso" && /*#__PURE__*/jsx(Button, {
37
+ "aria-label": "lasso",
38
+ icon: ICONS.lasso,
39
+ disabled: !!dragSelector.selectionMode,
40
+ onClick: function onClick() {
41
+ return dragSelector.startLassoSelection();
42
+ }
43
+ }), dragSelector.selectionMode && /*#__PURE__*/jsx(Button, {
44
+ color: "danger",
45
+ "aria-label": "cancel",
46
+ icon: ICONS.cancel,
47
+ onClick: function onClick() {
48
+ return dragSelector.cancelSelection();
49
+ }
50
+ }), dragSelector.selectionMode !== "rectangle" && /*#__PURE__*/jsx(Button, {
51
+ "aria-label": "rectselect",
52
+ icon: ICONS.select,
53
+ disabled: !!dragSelector.selectionMode,
54
+ onClick: function onClick() {
55
+ return dragSelector.startRectangleSelection();
56
+ }
57
+ })]
58
+ }), /*#__PURE__*/jsx(ButtonGroup, {
59
+ variant: "link",
60
+ children: /*#__PURE__*/jsxs(Dropdown, {
61
+ children: [/*#__PURE__*/jsx(Button, {
62
+ "aria-label": "force",
63
+ variant: "link",
64
+ icon: "M19.5 17C19.37 17 19.24 17 19.11 17.04L17.5 13.79C17.95 13.34 18.25 12.71 18.25 12C18.25 10.62 17.13 9.5 15.75 9.5C15.62 9.5 15.5 9.5 15.36 9.54L13.73 6.29C14.21 5.84 14.5 5.21 14.5 4.5C14.5 3.12 13.38 2 12 2S9.5 3.12 9.5 4.5C9.5 5.21 9.79 5.84 10.26 6.29L8.64 9.54C8.5 9.5 8.38 9.5 8.25 9.5C6.87 9.5 5.75 10.62 5.75 12C5.75 12.71 6.05 13.34 6.5 13.79L4.89 17.04C4.76 17 4.63 17 4.5 17C3.12 17 2 18.12 2 19.5C2 20.88 3.12 22 4.5 22S7 20.88 7 19.5C7 18.8 6.71 18.16 6.24 17.71L7.86 14.46C8 14.5 8.12 14.5 8.25 14.5C8.38 14.5 8.5 14.5 8.64 14.46L10.27 17.71C9.8 18.16 9.5 18.8 9.5 19.5C9.5 20.88 10.62 22 12 22S14.5 20.88 14.5 19.5C14.5 18.12 13.38 17 12 17C11.87 17 11.74 17 11.61 17.04L10 13.79C10.46 13.34 10.75 12.71 10.75 12S10.46 10.66 10 10.21L11.61 6.96C11.74 7 11.87 7 12 7S12.26 7 12.39 6.96L14 10.21C13.55 10.66 13.25 11.3 13.25 12C13.25 13.38 14.37 14.5 15.75 14.5C15.88 14.5 16 14.5 16.14 14.46L17.77 17.71C17.3 18.16 17 18.8 17 19.5C17 20.88 18.12 22 19.5 22S22 20.88 22 19.5C22 18.12 20.88 17 19.5 17Z"
65
+ }), /*#__PURE__*/jsxs(Menu, {
66
+ className: "text-sm",
67
+ children: [/*#__PURE__*/jsx(MenuItem, {
68
+ label: "box",
69
+ onClick: function onClick() {
70
+ return graph.elkLayout("box");
71
+ }
72
+ }), /*#__PURE__*/jsx(MenuItem, {
73
+ label: "force",
74
+ onClick: function onClick() {
75
+ return graph.elkLayout("force");
76
+ }
77
+ }), /*#__PURE__*/jsx(MenuItem, {
78
+ label: "layered",
79
+ onClick: function onClick() {
80
+ return graph.elkLayout("layered");
81
+ }
82
+ }), /*#__PURE__*/jsx(MenuItem, {
83
+ label: "stress",
84
+ onClick: function onClick() {
85
+ return graph.elkLayout("stress");
86
+ }
87
+ }), /*#__PURE__*/jsx(MenuItem, {
88
+ label: "radial",
89
+ onClick: function onClick() {
90
+ return graph.elkLayout("radial");
91
+ }
92
+ }), /*#__PURE__*/jsx(MenuItem, {
93
+ label: "sporeOverlap",
94
+ onClick: function onClick() {
95
+ return graph.elkLayout("sporeOverlap");
96
+ }
97
+ }), /*#__PURE__*/jsx(MenuItem, {
98
+ label: "sporeCompaction",
99
+ onClick: function onClick() {
100
+ return graph.elkLayout("sporeCompaction");
101
+ }
102
+ })]
103
+ })]
104
+ })
105
+ }), /*#__PURE__*/jsxs(ButtonGroup, {
106
+ variant: "link",
107
+ children: [/*#__PURE__*/jsx(Button, {
108
+ "aria-label": "delete",
109
+ color: "danger",
110
+ icon: ICONS["delete"],
111
+ disabled: !selected.length,
112
+ onClick: function onClick() {
113
+ return graph.dropNodes(selected);
114
+ }
115
+ }), /*#__PURE__*/jsx(Button, {
116
+ "aria-label": "clear",
117
+ color: "danger",
118
+ icon: ICONS.clear,
119
+ onClick: function onClick() {
120
+ return graph.clear();
121
+ }
122
+ })]
123
+ })]
124
+ });
125
+ };
126
+
127
+ export { Tools };
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+
3
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
+ import { Section } from '@react-fabric/core';
5
+ import { GraphProvider, useGraph } from './Context.js';
6
+ import { Tools } from './Tools.js';
7
+ import { useRef, useEffect } from 'react';
8
+ import { GraphContextMenu } from './ContextMenu.js';
9
+ import { jsx, jsxs } from 'react/jsx-runtime';
10
+
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ var Graph = function Graph() {
14
+ var _useGraph = useGraph(),
15
+ sigma = _useGraph.sigma,
16
+ graph = _useGraph.graph;
17
+ var handlesRef = useRef(null);
18
+ useEffect(function () {
19
+ // remove group handle if group node is dropped
20
+ var handler = function handler(_ref) {
21
+ var _handlesRef$current;
22
+ var key = _ref.key;
23
+ var handle = (_handlesRef$current = handlesRef.current) === null || _handlesRef$current === void 0 ? void 0 : _handlesRef$current.querySelector("[data-id=\"".concat(key, "\"]"));
24
+ handle === null || handle === void 0 || handle.remove();
25
+ };
26
+ graph.on("nodeDropped", handler);
27
+ return function () {
28
+ graph.off("nodeDropped", handler);
29
+ };
30
+ }, [graph]);
31
+ return /*#__PURE__*/jsxs("div", {
32
+ className: "area-content relative bg-base graph-viewer",
33
+ children: [/*#__PURE__*/jsx("div", {
34
+ dir: "ltr",
35
+ ref: sigma.containerRef,
36
+ className: "absolute inset-0"
37
+ }), /*#__PURE__*/jsx("div", {
38
+ ref: handlesRef,
39
+ dir: "ltr",
40
+ onClick: function onClick(e) {
41
+ var key = e.target.dataset.id;
42
+ key && graph.toggleExpanded(key);
43
+ },
44
+ className: "absolute inset-0 overflow-hidden pointer-events-none sigma-groupHandles"
45
+ })]
46
+ });
47
+ };
48
+ var SigmaGraph = function SigmaGraph(props) {
49
+ return /*#__PURE__*/jsx(Section, {
50
+ className: "relative",
51
+ children: /*#__PURE__*/jsxs(GraphProvider, _objectSpread(_objectSpread({}, props), {}, {
52
+ children: [/*#__PURE__*/jsx(Tools, {}), /*#__PURE__*/jsx(Graph, {}), /*#__PURE__*/jsx(GraphContextMenu, {})]
53
+ }))
54
+ });
55
+ };
56
+
57
+ export { SigmaGraph };
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+
3
+ var ICONS = {
4
+ focus: "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",
5
+ zoomIn: "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: "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",
7
+ lasso: "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",
8
+ select: "M13,17H17V13H19V17H23V19H19V23H17V19H13V17M11,17V19H9V17H11M7,17V19H5V17H7M19,9V11H17V9H19M19,5V7H17V5H19M15,5V7H13V5H15M11,5V7H9V5H11M7,5V7H5V5H7M7,13V15H5V13H7M7,9V11H5V9H7Z",
9
+ cancel: "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",
10
+ "delete": "M9,3V4H4V6H5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V6H20V4H15V3H9M9,8H11V17H9V8M13,8H15V17H13V8Z",
11
+ clear: "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",
12
+ expand: "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",
13
+ collapse: "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"
14
+ };
15
+
16
+ export { ICONS };