@xyo-network/react-node-renderer 2.64.3 → 2.64.5

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 (281) hide show
  1. package/dist/browser/Cytoscape/CytoscapeElements.cjs +5 -5
  2. package/dist/browser/Cytoscape/CytoscapeElements.cjs.map +1 -1
  3. package/dist/browser/Cytoscape/CytoscapeElements.d.cts +3 -1
  4. package/dist/browser/Cytoscape/CytoscapeElements.d.cts.map +1 -1
  5. package/dist/browser/Cytoscape/CytoscapeElements.d.mts +3 -1
  6. package/dist/browser/Cytoscape/CytoscapeElements.d.mts.map +1 -1
  7. package/dist/browser/Cytoscape/CytoscapeElements.d.ts +3 -1
  8. package/dist/browser/Cytoscape/CytoscapeElements.d.ts.map +1 -1
  9. package/dist/browser/Cytoscape/CytoscapeElements.js +5 -5
  10. package/dist/browser/Cytoscape/CytoscapeElements.js.map +1 -1
  11. package/dist/browser/Cytoscape/CytoscapeStyles.cjs +2 -0
  12. package/dist/browser/Cytoscape/CytoscapeStyles.cjs.map +1 -1
  13. package/dist/browser/Cytoscape/CytoscapeStyles.d.cts +1 -0
  14. package/dist/browser/Cytoscape/CytoscapeStyles.d.cts.map +1 -1
  15. package/dist/browser/Cytoscape/CytoscapeStyles.d.mts +1 -0
  16. package/dist/browser/Cytoscape/CytoscapeStyles.d.mts.map +1 -1
  17. package/dist/browser/Cytoscape/CytoscapeStyles.d.ts +1 -0
  18. package/dist/browser/Cytoscape/CytoscapeStyles.d.ts.map +1 -1
  19. package/dist/browser/Cytoscape/CytoscapeStyles.js +2 -0
  20. package/dist/browser/Cytoscape/CytoscapeStyles.js.map +1 -1
  21. package/dist/browser/Cytoscape/index.cjs +7 -5
  22. package/dist/browser/Cytoscape/index.cjs.map +1 -1
  23. package/dist/browser/Cytoscape/index.js +7 -5
  24. package/dist/browser/Cytoscape/index.js.map +1 -1
  25. package/dist/browser/components/ProvidedNodeRenderer.cjs +13 -11
  26. package/dist/browser/components/ProvidedNodeRenderer.cjs.map +1 -1
  27. package/dist/browser/components/ProvidedNodeRenderer.js +14 -12
  28. package/dist/browser/components/ProvidedNodeRenderer.js.map +1 -1
  29. package/dist/browser/components/RelationalGraph.cjs +3 -3
  30. package/dist/browser/components/RelationalGraph.cjs.map +1 -1
  31. package/dist/browser/components/RelationalGraph.d.cts.map +1 -1
  32. package/dist/browser/components/RelationalGraph.d.mts.map +1 -1
  33. package/dist/browser/components/RelationalGraph.d.ts.map +1 -1
  34. package/dist/browser/components/RelationalGraph.js +4 -4
  35. package/dist/browser/components/RelationalGraph.js.map +1 -1
  36. package/dist/browser/components/index.cjs +119 -81
  37. package/dist/browser/components/index.cjs.map +1 -1
  38. package/dist/browser/components/index.js +119 -81
  39. package/dist/browser/components/index.js.map +1 -1
  40. package/dist/browser/components/module/graph/GraphFlexBox.cjs +118 -80
  41. package/dist/browser/components/module/graph/GraphFlexBox.cjs.map +1 -1
  42. package/dist/browser/components/module/graph/GraphFlexBox.d.cts +1 -0
  43. package/dist/browser/components/module/graph/GraphFlexBox.d.cts.map +1 -1
  44. package/dist/browser/components/module/graph/GraphFlexBox.d.mts +1 -0
  45. package/dist/browser/components/module/graph/GraphFlexBox.d.mts.map +1 -1
  46. package/dist/browser/components/module/graph/GraphFlexBox.d.ts +1 -0
  47. package/dist/browser/components/module/graph/GraphFlexBox.d.ts.map +1 -1
  48. package/dist/browser/components/module/graph/GraphFlexBox.js +118 -80
  49. package/dist/browser/components/module/graph/GraphFlexBox.js.map +1 -1
  50. package/dist/browser/components/module/graph/NodeHover.cjs +17 -10
  51. package/dist/browser/components/module/graph/NodeHover.cjs.map +1 -1
  52. package/dist/browser/components/module/graph/NodeHover.d.cts.map +1 -1
  53. package/dist/browser/components/module/graph/NodeHover.d.mts.map +1 -1
  54. package/dist/browser/components/module/graph/NodeHover.d.ts.map +1 -1
  55. package/dist/browser/components/module/graph/NodeHover.js +20 -13
  56. package/dist/browser/components/module/graph/NodeHover.js.map +1 -1
  57. package/dist/browser/components/module/graph/Popper.cjs +2 -2
  58. package/dist/browser/components/module/graph/Popper.cjs.map +1 -1
  59. package/dist/browser/components/module/graph/Popper.d.cts +1 -1
  60. package/dist/browser/components/module/graph/Popper.d.cts.map +1 -1
  61. package/dist/browser/components/module/graph/Popper.d.mts +1 -1
  62. package/dist/browser/components/module/graph/Popper.d.mts.map +1 -1
  63. package/dist/browser/components/module/graph/Popper.d.ts +1 -1
  64. package/dist/browser/components/module/graph/Popper.d.ts.map +1 -1
  65. package/dist/browser/components/module/graph/Popper.js +3 -3
  66. package/dist/browser/components/module/graph/Popper.js.map +1 -1
  67. package/dist/browser/components/module/graph/index.cjs +118 -80
  68. package/dist/browser/components/module/graph/index.cjs.map +1 -1
  69. package/dist/browser/components/module/graph/index.js +118 -80
  70. package/dist/browser/components/module/graph/index.js.map +1 -1
  71. package/dist/browser/components/module/index.cjs +118 -80
  72. package/dist/browser/components/module/index.cjs.map +1 -1
  73. package/dist/browser/components/module/index.js +118 -80
  74. package/dist/browser/components/module/index.js.map +1 -1
  75. package/dist/browser/hooks/cytoscape/index.cjs +46 -28
  76. package/dist/browser/hooks/cytoscape/index.cjs.map +1 -1
  77. package/dist/browser/hooks/cytoscape/index.js +42 -24
  78. package/dist/browser/hooks/cytoscape/index.js.map +1 -1
  79. package/dist/browser/hooks/cytoscape/useCytoscapeElements.cjs +5 -5
  80. package/dist/browser/hooks/cytoscape/useCytoscapeElements.cjs.map +1 -1
  81. package/dist/browser/hooks/cytoscape/useCytoscapeElements.js +5 -5
  82. package/dist/browser/hooks/cytoscape/useCytoscapeElements.js.map +1 -1
  83. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.cjs +5 -3
  84. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.cjs.map +1 -1
  85. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.d.cts.map +1 -1
  86. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.d.mts.map +1 -1
  87. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.d.ts.map +1 -1
  88. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.js +5 -3
  89. package/dist/browser/hooks/cytoscape/useCytoscapeOptions.js.map +1 -1
  90. package/dist/browser/hooks/cytoscape/useCytoscapeStyle.cjs.map +1 -1
  91. package/dist/browser/hooks/cytoscape/useCytoscapeStyle.js.map +1 -1
  92. package/dist/browser/hooks/cytoscape/useNewElements.cjs +5 -22
  93. package/dist/browser/hooks/cytoscape/useNewElements.cjs.map +1 -1
  94. package/dist/browser/hooks/cytoscape/useNewElements.d.cts.map +1 -1
  95. package/dist/browser/hooks/cytoscape/useNewElements.d.mts.map +1 -1
  96. package/dist/browser/hooks/cytoscape/useNewElements.d.ts.map +1 -1
  97. package/dist/browser/hooks/cytoscape/useNewElements.js +5 -22
  98. package/dist/browser/hooks/cytoscape/useNewElements.js.map +1 -1
  99. package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.cjs +10 -8
  100. package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.cjs.map +1 -1
  101. package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.js +10 -8
  102. package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.js.map +1 -1
  103. package/dist/browser/hooks/cytoscape/useSelectedElement.cjs +30 -3
  104. package/dist/browser/hooks/cytoscape/useSelectedElement.cjs.map +1 -1
  105. package/dist/browser/hooks/cytoscape/useSelectedElement.d.cts.map +1 -1
  106. package/dist/browser/hooks/cytoscape/useSelectedElement.d.mts.map +1 -1
  107. package/dist/browser/hooks/cytoscape/useSelectedElement.d.ts.map +1 -1
  108. package/dist/browser/hooks/cytoscape/useSelectedElement.js +30 -3
  109. package/dist/browser/hooks/cytoscape/useSelectedElement.js.map +1 -1
  110. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.cjs +57 -0
  111. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.cjs.map +1 -0
  112. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.cts +4 -0
  113. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.cts.map +1 -0
  114. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.mts +4 -0
  115. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.mts.map +1 -0
  116. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.ts +4 -0
  117. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.ts.map +1 -0
  118. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.js +36 -0
  119. package/dist/browser/hooks/cytoscape/useToggleSelectedElement.js.map +1 -0
  120. package/dist/browser/hooks/index.cjs +46 -28
  121. package/dist/browser/hooks/index.cjs.map +1 -1
  122. package/dist/browser/hooks/index.js +42 -24
  123. package/dist/browser/hooks/index.js.map +1 -1
  124. package/dist/browser/index.cjs +123 -81
  125. package/dist/browser/index.cjs.map +1 -1
  126. package/dist/browser/index.d.cts +1 -0
  127. package/dist/browser/index.d.cts.map +1 -1
  128. package/dist/browser/index.d.mts +1 -0
  129. package/dist/browser/index.d.mts.map +1 -1
  130. package/dist/browser/index.d.ts +1 -0
  131. package/dist/browser/index.d.ts.map +1 -1
  132. package/dist/browser/index.js +123 -81
  133. package/dist/browser/index.js.map +1 -1
  134. package/dist/docs.json +2026 -1305
  135. package/dist/node/Cytoscape/CytoscapeElements.cjs +5 -5
  136. package/dist/node/Cytoscape/CytoscapeElements.cjs.map +1 -1
  137. package/dist/node/Cytoscape/CytoscapeElements.d.cts +3 -1
  138. package/dist/node/Cytoscape/CytoscapeElements.d.cts.map +1 -1
  139. package/dist/node/Cytoscape/CytoscapeElements.d.mts +3 -1
  140. package/dist/node/Cytoscape/CytoscapeElements.d.mts.map +1 -1
  141. package/dist/node/Cytoscape/CytoscapeElements.d.ts +3 -1
  142. package/dist/node/Cytoscape/CytoscapeElements.d.ts.map +1 -1
  143. package/dist/node/Cytoscape/CytoscapeElements.js +5 -5
  144. package/dist/node/Cytoscape/CytoscapeElements.js.map +1 -1
  145. package/dist/node/Cytoscape/CytoscapeStyles.cjs +3 -0
  146. package/dist/node/Cytoscape/CytoscapeStyles.cjs.map +1 -1
  147. package/dist/node/Cytoscape/CytoscapeStyles.d.cts +1 -0
  148. package/dist/node/Cytoscape/CytoscapeStyles.d.cts.map +1 -1
  149. package/dist/node/Cytoscape/CytoscapeStyles.d.mts +1 -0
  150. package/dist/node/Cytoscape/CytoscapeStyles.d.mts.map +1 -1
  151. package/dist/node/Cytoscape/CytoscapeStyles.d.ts +1 -0
  152. package/dist/node/Cytoscape/CytoscapeStyles.d.ts.map +1 -1
  153. package/dist/node/Cytoscape/CytoscapeStyles.js +2 -0
  154. package/dist/node/Cytoscape/CytoscapeStyles.js.map +1 -1
  155. package/dist/node/Cytoscape/index.cjs +8 -5
  156. package/dist/node/Cytoscape/index.cjs.map +1 -1
  157. package/dist/node/Cytoscape/index.js +7 -5
  158. package/dist/node/Cytoscape/index.js.map +1 -1
  159. package/dist/node/components/ProvidedNodeRenderer.cjs +13 -11
  160. package/dist/node/components/ProvidedNodeRenderer.cjs.map +1 -1
  161. package/dist/node/components/ProvidedNodeRenderer.js +14 -12
  162. package/dist/node/components/ProvidedNodeRenderer.js.map +1 -1
  163. package/dist/node/components/RelationalGraph.cjs +3 -3
  164. package/dist/node/components/RelationalGraph.cjs.map +1 -1
  165. package/dist/node/components/RelationalGraph.d.cts.map +1 -1
  166. package/dist/node/components/RelationalGraph.d.mts.map +1 -1
  167. package/dist/node/components/RelationalGraph.d.ts.map +1 -1
  168. package/dist/node/components/RelationalGraph.js +4 -4
  169. package/dist/node/components/RelationalGraph.js.map +1 -1
  170. package/dist/node/components/index.cjs +120 -81
  171. package/dist/node/components/index.cjs.map +1 -1
  172. package/dist/node/components/index.js +119 -81
  173. package/dist/node/components/index.js.map +1 -1
  174. package/dist/node/components/module/graph/GraphFlexBox.cjs +120 -81
  175. package/dist/node/components/module/graph/GraphFlexBox.cjs.map +1 -1
  176. package/dist/node/components/module/graph/GraphFlexBox.d.cts +1 -0
  177. package/dist/node/components/module/graph/GraphFlexBox.d.cts.map +1 -1
  178. package/dist/node/components/module/graph/GraphFlexBox.d.mts +1 -0
  179. package/dist/node/components/module/graph/GraphFlexBox.d.mts.map +1 -1
  180. package/dist/node/components/module/graph/GraphFlexBox.d.ts +1 -0
  181. package/dist/node/components/module/graph/GraphFlexBox.d.ts.map +1 -1
  182. package/dist/node/components/module/graph/GraphFlexBox.js +118 -80
  183. package/dist/node/components/module/graph/GraphFlexBox.js.map +1 -1
  184. package/dist/node/components/module/graph/NodeHover.cjs +17 -10
  185. package/dist/node/components/module/graph/NodeHover.cjs.map +1 -1
  186. package/dist/node/components/module/graph/NodeHover.d.cts.map +1 -1
  187. package/dist/node/components/module/graph/NodeHover.d.mts.map +1 -1
  188. package/dist/node/components/module/graph/NodeHover.d.ts.map +1 -1
  189. package/dist/node/components/module/graph/NodeHover.js +20 -13
  190. package/dist/node/components/module/graph/NodeHover.js.map +1 -1
  191. package/dist/node/components/module/graph/Popper.cjs +2 -2
  192. package/dist/node/components/module/graph/Popper.cjs.map +1 -1
  193. package/dist/node/components/module/graph/Popper.d.cts +1 -1
  194. package/dist/node/components/module/graph/Popper.d.cts.map +1 -1
  195. package/dist/node/components/module/graph/Popper.d.mts +1 -1
  196. package/dist/node/components/module/graph/Popper.d.mts.map +1 -1
  197. package/dist/node/components/module/graph/Popper.d.ts +1 -1
  198. package/dist/node/components/module/graph/Popper.d.ts.map +1 -1
  199. package/dist/node/components/module/graph/Popper.js +3 -3
  200. package/dist/node/components/module/graph/Popper.js.map +1 -1
  201. package/dist/node/components/module/graph/index.cjs +120 -81
  202. package/dist/node/components/module/graph/index.cjs.map +1 -1
  203. package/dist/node/components/module/graph/index.js +118 -80
  204. package/dist/node/components/module/graph/index.js.map +1 -1
  205. package/dist/node/components/module/index.cjs +120 -81
  206. package/dist/node/components/module/index.cjs.map +1 -1
  207. package/dist/node/components/module/index.js +118 -80
  208. package/dist/node/components/module/index.js.map +1 -1
  209. package/dist/node/hooks/cytoscape/index.cjs +46 -28
  210. package/dist/node/hooks/cytoscape/index.cjs.map +1 -1
  211. package/dist/node/hooks/cytoscape/index.js +42 -24
  212. package/dist/node/hooks/cytoscape/index.js.map +1 -1
  213. package/dist/node/hooks/cytoscape/useCytoscapeElements.cjs +5 -5
  214. package/dist/node/hooks/cytoscape/useCytoscapeElements.cjs.map +1 -1
  215. package/dist/node/hooks/cytoscape/useCytoscapeElements.js +5 -5
  216. package/dist/node/hooks/cytoscape/useCytoscapeElements.js.map +1 -1
  217. package/dist/node/hooks/cytoscape/useCytoscapeOptions.cjs +5 -3
  218. package/dist/node/hooks/cytoscape/useCytoscapeOptions.cjs.map +1 -1
  219. package/dist/node/hooks/cytoscape/useCytoscapeOptions.d.cts.map +1 -1
  220. package/dist/node/hooks/cytoscape/useCytoscapeOptions.d.mts.map +1 -1
  221. package/dist/node/hooks/cytoscape/useCytoscapeOptions.d.ts.map +1 -1
  222. package/dist/node/hooks/cytoscape/useCytoscapeOptions.js +5 -3
  223. package/dist/node/hooks/cytoscape/useCytoscapeOptions.js.map +1 -1
  224. package/dist/node/hooks/cytoscape/useCytoscapeStyle.cjs.map +1 -1
  225. package/dist/node/hooks/cytoscape/useCytoscapeStyle.js.map +1 -1
  226. package/dist/node/hooks/cytoscape/useNewElements.cjs +5 -22
  227. package/dist/node/hooks/cytoscape/useNewElements.cjs.map +1 -1
  228. package/dist/node/hooks/cytoscape/useNewElements.d.cts.map +1 -1
  229. package/dist/node/hooks/cytoscape/useNewElements.d.mts.map +1 -1
  230. package/dist/node/hooks/cytoscape/useNewElements.d.ts.map +1 -1
  231. package/dist/node/hooks/cytoscape/useNewElements.js +5 -22
  232. package/dist/node/hooks/cytoscape/useNewElements.js.map +1 -1
  233. package/dist/node/hooks/cytoscape/useRelationalGraphOptions.cjs +10 -8
  234. package/dist/node/hooks/cytoscape/useRelationalGraphOptions.cjs.map +1 -1
  235. package/dist/node/hooks/cytoscape/useRelationalGraphOptions.js +10 -8
  236. package/dist/node/hooks/cytoscape/useRelationalGraphOptions.js.map +1 -1
  237. package/dist/node/hooks/cytoscape/useSelectedElement.cjs +30 -3
  238. package/dist/node/hooks/cytoscape/useSelectedElement.cjs.map +1 -1
  239. package/dist/node/hooks/cytoscape/useSelectedElement.d.cts.map +1 -1
  240. package/dist/node/hooks/cytoscape/useSelectedElement.d.mts.map +1 -1
  241. package/dist/node/hooks/cytoscape/useSelectedElement.d.ts.map +1 -1
  242. package/dist/node/hooks/cytoscape/useSelectedElement.js +30 -3
  243. package/dist/node/hooks/cytoscape/useSelectedElement.js.map +1 -1
  244. package/dist/node/hooks/cytoscape/useToggleSelectedElement.cjs +61 -0
  245. package/dist/node/hooks/cytoscape/useToggleSelectedElement.cjs.map +1 -0
  246. package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.cts +4 -0
  247. package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.cts.map +1 -0
  248. package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.mts +4 -0
  249. package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.mts.map +1 -0
  250. package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.ts +4 -0
  251. package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.ts.map +1 -0
  252. package/dist/node/hooks/cytoscape/useToggleSelectedElement.js +36 -0
  253. package/dist/node/hooks/cytoscape/useToggleSelectedElement.js.map +1 -0
  254. package/dist/node/hooks/index.cjs +46 -28
  255. package/dist/node/hooks/index.cjs.map +1 -1
  256. package/dist/node/hooks/index.js +42 -24
  257. package/dist/node/hooks/index.js.map +1 -1
  258. package/dist/node/index.cjs +128 -81
  259. package/dist/node/index.cjs.map +1 -1
  260. package/dist/node/index.d.cts +1 -0
  261. package/dist/node/index.d.cts.map +1 -1
  262. package/dist/node/index.d.mts +1 -0
  263. package/dist/node/index.d.mts.map +1 -1
  264. package/dist/node/index.d.ts +1 -0
  265. package/dist/node/index.d.ts.map +1 -1
  266. package/dist/node/index.js +123 -81
  267. package/dist/node/index.js.map +1 -1
  268. package/package.json +27 -27
  269. package/src/Cytoscape/CytoscapeElements.ts +4 -4
  270. package/src/Cytoscape/CytoscapeStyles.ts +2 -0
  271. package/src/components/RelationalGraph.stories.tsx +4 -1
  272. package/src/components/RelationalGraph.tsx +14 -6
  273. package/src/components/module/graph/GraphFlexBox.stories.tsx +7 -10
  274. package/src/components/module/graph/GraphFlexBox.tsx +9 -0
  275. package/src/components/module/graph/NodeHover.tsx +32 -20
  276. package/src/components/module/graph/Popper.tsx +14 -10
  277. package/src/hooks/cytoscape/useCytoscapeOptions.ts +6 -3
  278. package/src/hooks/cytoscape/useNewElements.tsx +0 -10
  279. package/src/hooks/cytoscape/useSelectedElement.tsx +8 -3
  280. package/src/hooks/cytoscape/useToggleSelectedElement.tsx +30 -0
  281. package/src/index.ts +1 -0
@@ -30,17 +30,37 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/components/module/graph/index.ts
31
31
  var graph_exports = {};
32
32
  __export(graph_exports, {
33
- ModuleGraphFlexBox: () => ModuleGraphFlexBox
33
+ ModuleGraphFlexBox: () => ModuleGraphFlexBox,
34
+ ModuleGraphFlexBoxWithProvider: () => ModuleGraphFlexBoxWithProvider
34
35
  });
35
36
  module.exports = __toCommonJS(graph_exports);
36
37
 
37
38
  // src/components/module/graph/GraphFlexBox.tsx
38
- var import_material5 = require("@mui/material");
39
+ var import_material6 = require("@mui/material");
40
+
41
+ // src/contexts/CytoscapeInstance/Context.ts
42
+ var import_react_shared = require("@xyo-network/react-shared");
43
+ var CytoscapeInstanceContext = (0, import_react_shared.createContextEx)();
44
+
45
+ // src/contexts/CytoscapeInstance/Provider.tsx
46
+ var import_react = require("react");
47
+ var import_jsx_runtime = require("react/jsx-runtime");
48
+ var CytoscapeInstanceProvider = ({ children, defaultInstance }) => {
49
+ const [cy, setCy] = (0, import_react.useState)(defaultInstance);
50
+ (0, import_react.useEffect)(() => {
51
+ setCy(defaultInstance);
52
+ }, [defaultInstance]);
53
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CytoscapeInstanceContext.Provider, { value: { cy, provided: true, setCy }, children });
54
+ };
55
+
56
+ // src/contexts/CytoscapeInstance/use.ts
57
+ var import_react_shared2 = require("@xyo-network/react-shared");
58
+ var useCytoscapeInstance = (required = false) => (0, import_react_shared2.useContextEx)(CytoscapeInstanceContext, "CytoscapeInstance", required);
39
59
 
40
60
  // src/hooks/cytoscape/useCytoscapeElements.ts
41
61
  var import_react_async_effect = require("@xylabs/react-async-effect");
42
62
  var import_node_model3 = require("@xyo-network/node-model");
43
- var import_react = require("react");
63
+ var import_react2 = require("react");
44
64
 
45
65
  // src/Cytoscape/CytoscapeElements.ts
46
66
  var import_node_model2 = require("@xyo-network/node-model");
@@ -137,7 +157,7 @@ var CytoscapeElements = class _CytoscapeElements {
137
157
  try {
138
158
  const childElements = await _CytoscapeElements.recurseNodes(module2);
139
159
  childElements == null ? void 0 : childElements.forEach((module3) => {
140
- const newNode = _CytoscapeElements.buildNode(module3, newRootNode.data.id);
160
+ const newNode = _CytoscapeElements.buildNode(module3, { rootNodeId: newRootNode.data.id });
141
161
  newElements.push(newNode);
142
162
  const newEdge = _CytoscapeElements.buildEdge(newRootNode, newNode);
143
163
  newElements.push(newEdge);
@@ -148,7 +168,7 @@ var CytoscapeElements = class _CytoscapeElements {
148
168
  return [];
149
169
  }
150
170
  }
151
- static buildNode(module2, rootNodeId) {
171
+ static buildNode(module2, properties) {
152
172
  const { address, config } = module2;
153
173
  const normalizedName = config.name ?? address.substring(0, 8);
154
174
  return {
@@ -156,13 +176,13 @@ var CytoscapeElements = class _CytoscapeElements {
156
176
  address,
157
177
  id: address,
158
178
  name: normalizedName,
159
- rootNodeId,
160
- type: parseModuleType(module2)
179
+ type: parseModuleType(module2),
180
+ ...properties
161
181
  }
162
182
  };
163
183
  }
164
184
  static buildRootNode = (module2) => {
165
- return _CytoscapeElements.buildNode(module2);
185
+ return _CytoscapeElements.buildNode(module2, { root: true });
166
186
  };
167
187
  static normalizeName(name) {
168
188
  if (!name)
@@ -242,10 +262,11 @@ var EdgeStyled = (lineColor, targetArrowColor) => ({
242
262
  width: 3
243
263
  }
244
264
  });
265
+ var NodeBgStyles = (bgColor) => ["background-color", bgColor];
245
266
 
246
267
  // src/hooks/cytoscape/useCytoscapeElements.ts
247
268
  var useCytoscapeElements = (module2) => {
248
- const [elements, setElements] = (0, import_react.useState)([]);
269
+ const [elements, setElements] = (0, import_react2.useState)([]);
249
270
  (0, import_react_async_effect.useAsyncEffect)(
250
271
  // eslint-disable-next-line react-hooks/exhaustive-deps
251
272
  async () => {
@@ -256,7 +277,7 @@ var useCytoscapeElements = (module2) => {
256
277
  },
257
278
  [module2]
258
279
  );
259
- (0, import_react.useEffect)(() => {
280
+ (0, import_react2.useEffect)(() => {
260
281
  let attachedListener = void 0;
261
282
  let detachedListener = void 0;
262
283
  if (module2 && (0, import_node_model3.isNodeInstance)(module2)) {
@@ -278,22 +299,22 @@ var useCytoscapeElements = (module2) => {
278
299
  };
279
300
 
280
301
  // src/hooks/cytoscape/useCytoscapeOptions.ts
281
- var import_react4 = require("react");
302
+ var import_react5 = require("react");
282
303
 
283
304
  // src/hooks/cytoscape/useCytoscapeStyle.tsx
284
305
  var import_material2 = require("@mui/material");
285
- var import_react3 = require("react");
306
+ var import_react4 = require("react");
286
307
 
287
308
  // src/hooks/cytoscape/useIcons.tsx
288
309
  var import_material = require("@mui/material");
289
- var import_react2 = require("react");
290
- var import_jsx_runtime = require("react/jsx-runtime");
310
+ var import_react3 = require("react");
311
+ var import_jsx_runtime2 = require("react/jsx-runtime");
291
312
  var useIcons = () => {
292
313
  const theme = (0, import_material.useTheme)();
293
- const icons = (0, import_react2.useMemo)(() => {
314
+ const icons = (0, import_react3.useMemo)(() => {
294
315
  const iconMap = generateIconMap();
295
316
  return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {
296
- const icon = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(IconComponent, { fontSize: "small" });
317
+ const icon = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(IconComponent, { fontSize: "small" });
297
318
  acc[name] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary));
298
319
  return acc;
299
320
  }, iconMap);
@@ -305,7 +326,7 @@ var useIcons = () => {
305
326
  var useCytoscapeStyle = (hideLabels = false) => {
306
327
  const theme = (0, import_material2.useTheme)();
307
328
  const icons = useIcons();
308
- const style = (0, import_react3.useMemo)(
329
+ const style = (0, import_react4.useMemo)(
309
330
  () => [
310
331
  NodeIdStyles(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),
311
332
  NodeStyled(icons, theme.palette.primary.main, hideLabels),
@@ -319,12 +340,14 @@ var useCytoscapeStyle = (hideLabels = false) => {
319
340
  // src/hooks/cytoscape/useCytoscapeOptions.ts
320
341
  var useCytoscapeOptions = (elements, style, layout) => {
321
342
  const defaultStyle = useCytoscapeStyle();
322
- const options = (0, import_react4.useMemo)(() => {
323
- if (elements && layout && style) {
343
+ const resolvedLayout = layout ?? ConcentricLayout;
344
+ const resolvedStyle = style ?? defaultStyle;
345
+ const options = (0, import_react5.useMemo)(() => {
346
+ if (elements && resolvedLayout && resolvedStyle) {
324
347
  return {
325
348
  elements,
326
- layout: layout ?? ConcentricLayout,
327
- style: style ?? defaultStyle
349
+ layout: resolvedLayout,
350
+ style: resolvedStyle
328
351
  };
329
352
  }
330
353
  }, [elements, layout, style]);
@@ -332,21 +355,11 @@ var useCytoscapeOptions = (elements, style, layout) => {
332
355
  };
333
356
 
334
357
  // src/hooks/cytoscape/useHoveredNode.tsx
335
- var import_react5 = require("react");
336
-
337
- // src/contexts/CytoscapeInstance/Context.ts
338
- var import_react_shared = require("@xyo-network/react-shared");
339
- var CytoscapeInstanceContext = (0, import_react_shared.createContextEx)();
340
-
341
- // src/contexts/CytoscapeInstance/use.ts
342
- var import_react_shared2 = require("@xyo-network/react-shared");
343
- var useCytoscapeInstance = (required = false) => (0, import_react_shared2.useContextEx)(CytoscapeInstanceContext, "CytoscapeInstance", required);
344
-
345
- // src/hooks/cytoscape/useHoveredNode.tsx
358
+ var import_react6 = require("react");
346
359
  var useHoveredNode = (renderedElements) => {
347
360
  const { cy } = useCytoscapeInstance(true);
348
- const [hoveredNode, setHoveredNode] = (0, import_react5.useState)();
349
- const nodeListener = (0, import_react5.useCallback)((node) => {
361
+ const [hoveredNode, setHoveredNode] = (0, import_react6.useState)();
362
+ const nodeListener = (0, import_react6.useCallback)((node) => {
350
363
  node.on("mouseover tap", () => {
351
364
  setHoveredNode(node);
352
365
  });
@@ -354,12 +367,12 @@ var useHoveredNode = (renderedElements) => {
354
367
  setHoveredNode(void 0);
355
368
  });
356
369
  }, []);
357
- (0, import_react5.useEffect)(() => {
370
+ (0, import_react6.useEffect)(() => {
358
371
  if (renderedElements) {
359
372
  renderedElements.nodes().forEach(nodeListener);
360
373
  }
361
374
  }, [nodeListener, renderedElements]);
362
- (0, import_react5.useEffect)(() => {
375
+ (0, import_react6.useEffect)(() => {
363
376
  cy == null ? void 0 : cy.ready(() => {
364
377
  cy.nodes().forEach(nodeListener);
365
378
  });
@@ -369,19 +382,10 @@ var useHoveredNode = (renderedElements) => {
369
382
 
370
383
  // src/hooks/cytoscape/useNewElements.tsx
371
384
  var import_react_node = require("@xyo-network/react-node");
372
- var import_react6 = require("react");
373
385
  var useNewElements = (selectedElement) => {
374
- const { cy } = useCytoscapeInstance(true);
375
386
  const { address: selectedAddress } = (selectedElement == null ? void 0 : selectedElement.data()) ?? {};
376
387
  const [module2] = (0, import_react_node.useModuleFromNode)(selectedAddress);
377
388
  const newElements = useCytoscapeElements(module2);
378
- (0, import_react6.useEffect)(() => {
379
- if (selectedAddress) {
380
- const element = cy == null ? void 0 : cy.$(`node[id="${selectedAddress}"]`);
381
- if (element == null ? void 0 : element.length)
382
- cy == null ? void 0 : cy.center(element);
383
- }
384
- }, [cy, selectedAddress]);
385
389
  return newElements;
386
390
  };
387
391
 
@@ -415,20 +419,44 @@ var useRenderNewElements = (newElements = [], hideLabels) => {
415
419
 
416
420
  // src/hooks/cytoscape/useSelectedElement.tsx
417
421
  var import_react9 = require("react");
422
+
423
+ // src/hooks/cytoscape/useToggleSelectedElement.tsx
424
+ var import_material3 = require("@mui/material");
425
+ var useToggleSelectedElement = (setSelectedElement) => {
426
+ const { cy } = useCytoscapeInstance(true);
427
+ const theme = (0, import_material3.useTheme)();
428
+ const updateStyles = (element, styles) => {
429
+ cy == null ? void 0 : cy.style().selector(`node[id="${element.data().id}"]`).style(...styles);
430
+ };
431
+ const toggleSelectedElement = (element) => {
432
+ setSelectedElement((previousSelectedElement) => {
433
+ if (previousSelectedElement) {
434
+ updateStyles(previousSelectedElement, NodeBgStyles(theme.palette.primary.main));
435
+ }
436
+ return element;
437
+ });
438
+ updateStyles(element, NodeBgStyles(theme.palette.secondary.main));
439
+ };
440
+ return toggleSelectedElement;
441
+ };
442
+
443
+ // src/hooks/cytoscape/useSelectedElement.tsx
418
444
  var useSelectedElement = () => {
419
445
  const { cy } = useCytoscapeInstance(true);
420
446
  const [selectedElement, setSelectedElement] = (0, import_react9.useState)();
447
+ const toggleSelectedElement = useToggleSelectedElement(setSelectedElement);
421
448
  (0, import_react9.useEffect)(() => {
422
449
  const listener = (event) => {
423
450
  const element = event.target[0];
424
- if (element.isNode())
425
- setSelectedElement(element);
451
+ if (element.isNode()) {
452
+ toggleSelectedElement(element);
453
+ }
426
454
  };
427
455
  cy == null ? void 0 : cy.on("select", listener);
428
456
  return () => {
429
457
  cy == null ? void 0 : cy.off("select", listener);
430
458
  };
431
- }, [cy, setSelectedElement]);
459
+ }, [cy, toggleSelectedElement]);
432
460
  return selectedElement;
433
461
  };
434
462
 
@@ -436,23 +464,23 @@ var useSelectedElement = () => {
436
464
  var import_cytoscape = require("cytoscape");
437
465
  var import_cytoscape_cola = __toESM(require("cytoscape-cola"), 1);
438
466
  var import_react10 = require("react");
439
- var import_jsx_runtime2 = require("react/jsx-runtime");
467
+ var import_jsx_runtime3 = require("react/jsx-runtime");
440
468
  var WithExtensions = ({ children }) => {
441
469
  const [initialized, setInitialized] = (0, import_react10.useState)(false);
442
470
  (0, import_react10.useEffect)(() => {
443
471
  (0, import_cytoscape.use)(import_cytoscape_cola.default);
444
472
  setInitialized(true);
445
473
  }, []);
446
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children: initialized ? children : void 0 });
474
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: initialized ? children : void 0 });
447
475
  };
448
476
 
449
477
  // src/components/RelationalGraph.tsx
450
- var import_material3 = require("@mui/material");
478
+ var import_material4 = require("@mui/material");
451
479
  var import_react_flexbox = require("@xylabs/react-flexbox");
452
480
  var import_react_shared3 = require("@xyo-network/react-shared");
453
481
  var import_cytoscape2 = __toESM(require("cytoscape"), 1);
454
482
  var import_react11 = require("react");
455
- var import_jsx_runtime3 = require("react/jsx-runtime");
483
+ var import_jsx_runtime4 = require("react/jsx-runtime");
456
484
  var NodeRelationalGraphFlexBox = (0, import_react11.forwardRef)(({ actions, children, options, ...props }, ref) => {
457
485
  const [cy, setCy] = (0, import_react11.useState)();
458
486
  const { setCy: setCyContext } = useCytoscapeInstance();
@@ -473,17 +501,17 @@ var NodeRelationalGraphFlexBox = (0, import_react11.forwardRef)(({ actions, chil
473
501
  (0, import_react11.useEffect)(() => {
474
502
  setCyContext == null ? void 0 : setCyContext(cy);
475
503
  }, [cy, setCyContext]);
476
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_flexbox.FlexCol, { ...props, children: [
477
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ActionsContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.ButtonGroup, { children: [
504
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react_flexbox.FlexCol, { ...props, children: [
505
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActionsContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children: actions ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material4.ButtonGroup, { children: [
478
506
  actions,
479
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset" })
480
- ] }) }),
481
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_flexbox.FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" }),
507
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset View" })
508
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset" }) }) }),
509
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_flexbox.FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" }),
482
510
  children
483
511
  ] });
484
512
  });
485
513
  NodeRelationalGraphFlexBox.displayName = "NodeRelationalGraph";
486
- var ActionsContainer = (0, import_material3.styled)(import_react_flexbox.FlexRow, { name: "ActionsContainer" })(({ theme }) => ({
514
+ var ActionsContainer = (0, import_material4.styled)(import_react_flexbox.FlexRow, { name: "ActionsContainer" })(({ theme }) => ({
487
515
  flexWrap: "wrap",
488
516
  gap: theme.spacing(1),
489
517
  position: "absolute",
@@ -493,34 +521,37 @@ var ActionsContainer = (0, import_material3.styled)(import_react_flexbox.FlexRow
493
521
  }));
494
522
 
495
523
  // src/components/module/graph/NodeHover.tsx
524
+ var import_react_flexbox3 = require("@xylabs/react-flexbox");
496
525
  var import_react12 = require("react");
497
526
 
498
527
  // src/components/module/graph/Popper.tsx
499
- var import_material4 = require("@mui/material");
528
+ var import_material5 = require("@mui/material");
500
529
  var import_react_flexbox2 = require("@xylabs/react-flexbox");
501
530
  var import_react_identicon = require("@xylabs/react-identicon");
502
- var import_jsx_runtime4 = require("react/jsx-runtime");
531
+ var import_jsx_runtime5 = require("react/jsx-runtime");
503
532
  var ModuleHoverPopper = ({ address, element, name, ...props }) => {
504
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Popper, { anchorEl: element, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react_flexbox2.FlexCol, { gap: 2, p: 2, paper: true, sx: { backgroundColor: (theme) => (0, import_material4.alpha)(theme.palette.background.paper, 0.95) }, children: [
505
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react_flexbox2.FlexRow, { gap: 2, children: [
506
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_identicon.Identicon, { value: address, size: 24 }),
507
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Typography, { children: name })
533
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: element ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material5.Popper, { anchorEl: element, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox2.FlexCol, { gap: 2, p: 2, paper: true, sx: { backgroundColor: (theme) => (0, import_material5.alpha)(theme.palette.background.paper, 0.95) }, children: [
534
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox2.FlexRow, { gap: 2, children: [
535
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_identicon.Identicon, { value: address, size: 24 }),
536
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material5.Typography, { children: name })
508
537
  ] }),
509
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Chip, { label: address, color: "primary" })
510
- ] }) });
538
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material5.Chip, { label: address, color: "primary" })
539
+ ] }) }) : null });
511
540
  };
512
541
 
513
542
  // src/components/module/graph/NodeHover.tsx
514
- var import_jsx_runtime5 = require("react/jsx-runtime");
543
+ var import_jsx_runtime6 = require("react/jsx-runtime");
515
544
  var ModuleGraphNodeHover = ({ node }) => {
516
545
  const { address, name } = (node == null ? void 0 : node.data()) ?? {};
517
546
  const [boundingBox, setBoundingBox] = (0, import_react12.useState)(node == null ? void 0 : node.renderedBoundingBox());
518
547
  const ref = (0, import_react12.useRef)(null);
519
548
  const [currentEl, setCurrentEl] = (0, import_react12.useState)(null);
520
- (0, import_react12.useLayoutEffect)(() => {
521
- if (node && ref.current) {
549
+ (0, import_react12.useEffect)(() => {
550
+ setCurrentEl(null);
551
+ }, [node]);
552
+ (0, import_react12.useEffect)(() => {
553
+ if (node) {
522
554
  setBoundingBox(node.renderedBoundingBox());
523
- setCurrentEl(ref.current);
524
555
  }
525
556
  const listener = () => {
526
557
  setBoundingBox(node == null ? void 0 : node.renderedBoundingBox());
@@ -530,12 +561,16 @@ var ModuleGraphNodeHover = ({ node }) => {
530
561
  node == null ? void 0 : node.off("position", void 0, listener);
531
562
  };
532
563
  }, [node]);
533
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: node ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
534
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
535
- "div",
564
+ (0, import_react12.useLayoutEffect)(() => {
565
+ setCurrentEl(ref.current);
566
+ }, [boundingBox]);
567
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
568
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
569
+ import_react_flexbox3.FlexCol,
536
570
  {
537
571
  ref,
538
- style: {
572
+ sx: {
573
+ // For easier debugging of the 'ghost' element that matches the hovered cytoscape node
539
574
  // backgroundColor: '#fff',
540
575
  // opacity: 0.25,
541
576
  cursor: "pointer",
@@ -548,30 +583,34 @@ var ModuleGraphNodeHover = ({ node }) => {
548
583
  }
549
584
  }
550
585
  ),
551
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ModuleHoverPopper, { address, element: currentEl, name, placement: "top", open: true })
552
- ] }) : null });
586
+ node ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ModuleHoverPopper, { address, element: currentEl, name, placement: "top", open: true, sx: { zIndex: 2 } }) }) : null
587
+ ] });
553
588
  };
554
589
 
555
590
  // src/components/module/graph/GraphFlexBox.tsx
556
- var import_jsx_runtime6 = require("react/jsx-runtime");
591
+ var import_jsx_runtime7 = require("react/jsx-runtime");
557
592
  var ModuleGraphFlexBox = ({ rootModule, ...props }) => {
558
593
  const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? void 0);
559
594
  const selectedElement = useSelectedElement();
560
595
  const newElements = useNewElements(selectedElement);
561
596
  const renderedElements = useRenderNewElements(newElements, hideLabels);
562
597
  const hoveredNode = useHoveredNode(renderedElements);
563
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(WithExtensions, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
598
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(WithExtensions, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
564
599
  NodeRelationalGraphFlexBox,
565
600
  {
566
- actions: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_material5.Button, { size: "small", onClick: handleToggleLabels, variant: "contained", children: "Toggle Labels" }),
601
+ actions: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material6.Button, { size: "small", onClick: handleToggleLabels, variant: "contained", children: "Toggle Labels" }),
567
602
  options,
568
603
  ...props,
569
- children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ModuleGraphNodeHover, { node: hoveredNode })
604
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ModuleGraphNodeHover, { node: hoveredNode })
570
605
  }
571
606
  ) });
572
607
  };
608
+ var ModuleGraphFlexBoxWithProvider = (props) => {
609
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CytoscapeInstanceProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ModuleGraphFlexBox, { ...props }) });
610
+ };
573
611
  // Annotate the CommonJS export names for ESM import in node:
574
612
  0 && (module.exports = {
575
- ModuleGraphFlexBox
613
+ ModuleGraphFlexBox,
614
+ ModuleGraphFlexBoxWithProvider
576
615
  });
577
616
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/module/graph/index.ts","../../../../../src/components/module/graph/GraphFlexBox.tsx","../../../../../src/hooks/cytoscape/useCytoscapeElements.ts","../../../../../src/Cytoscape/CytoscapeElements.ts","../../../../../src/Cytoscape/lib/encodeSvg.ts","../../../../../src/Cytoscape/lib/iconMap.ts","../../../../../src/Cytoscape/lib/layout/ColaLayout.ts","../../../../../src/Cytoscape/lib/layout/ConcentricLayout.ts","../../../../../src/Cytoscape/lib/parseModuleType.ts","../../../../../src/Cytoscape/CytoscapeIcons.tsx","../../../../../src/Cytoscape/CytoscapeStyles.ts","../../../../../src/hooks/cytoscape/useCytoscapeOptions.ts","../../../../../src/hooks/cytoscape/useCytoscapeStyle.tsx","../../../../../src/hooks/cytoscape/useIcons.tsx","../../../../../src/hooks/cytoscape/useHoveredNode.tsx","../../../../../src/contexts/CytoscapeInstance/Context.ts","../../../../../src/contexts/CytoscapeInstance/use.ts","../../../../../src/hooks/cytoscape/useNewElements.tsx","../../../../../src/hooks/cytoscape/useRelationalGraphOptions.tsx","../../../../../src/hooks/cytoscape/useRenderNewElements.tsx","../../../../../src/hooks/cytoscape/useSelectedElement.tsx","../../../../../src/components/cytoscape-extensions/WithExtensions.tsx","../../../../../src/components/RelationalGraph.tsx","../../../../../src/components/module/graph/NodeHover.tsx","../../../../../src/components/module/graph/Popper.tsx"],"sourcesContent":["export * from './GraphFlexBox'\n","import { Button } from '@mui/material'\nimport { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { ModuleInstance } from '@xyo-network/module'\n\nimport { useHoveredNode, useNewElements, useRelationalGraphOptions, useRenderNewElements, useSelectedElement } from '../../../hooks'\nimport { WithExtensions } from '../../cytoscape-extensions'\nimport { NodeRelationalGraphFlexBox } from '../../RelationalGraph'\nimport { ModuleGraphNodeHover } from './NodeHover'\n\nexport interface ModuleGraphFlexBoxProps extends FlexBoxProps {\n rootModule?: ModuleInstance | null\n}\n\nexport const ModuleGraphFlexBox: React.FC<ModuleGraphFlexBoxProps> = ({ rootModule, ...props }) => {\n const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? undefined)\n const selectedElement = useSelectedElement()\n const newElements = useNewElements(selectedElement)\n const renderedElements = useRenderNewElements(newElements, hideLabels)\n const hoveredNode = useHoveredNode(renderedElements)\n\n return (\n <WithExtensions>\n <NodeRelationalGraphFlexBox\n actions={\n <Button size={'small'} onClick={handleToggleLabels} variant=\"contained\">\n Toggle Labels\n </Button>\n }\n options={options}\n {...props}\n >\n <ModuleGraphNodeHover node={hoveredNode} />\n </NodeRelationalGraphFlexBox>\n </WithExtensions>\n )\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction, ModuleInstance } from '@xyo-network/module'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../Cytoscape'\n\nexport const useCytoscapeElements = (module?: ModuleInstance | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async () => {\n if (module) {\n const newElements = (await CytoscapeElements.buildElements(module)) ?? []\n setElements(newElements)\n }\n },\n [module],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined = undefined\n let detachedListener: EventUnsubscribeFunction | undefined = undefined\n\n if (module && isNodeInstance(module)) {\n attachedListener = module.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(module)) ?? []\n setElements(newElements)\n })\n detachedListener = module.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(module)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [module])\n\n return elements\n}\n","import { ModuleInstance } from '@xyo-network/module'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\n\nexport class CytoscapeElements {\n static MaxNameLength = 20\n\n static buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n },\n }\n }\n\n static async buildElements(module: ModuleInstance): Promise<ElementDefinition[]> {\n const newRootNode = CytoscapeElements.buildRootNode(module)\n const newElements: ElementDefinition[] = [newRootNode]\n\n try {\n const childElements = await CytoscapeElements.recurseNodes(module)\n childElements?.forEach((module) => {\n const newNode = CytoscapeElements.buildNode(module, newRootNode.data.id)\n newElements.push(newNode)\n\n const newEdge = CytoscapeElements.buildEdge(newRootNode, newNode)\n newElements.push(newEdge)\n })\n\n return newElements\n } catch (e) {\n console.error('error resolving modules', e)\n return []\n }\n }\n\n static buildNode(module: ModuleInstance, rootNodeId?: string): ElementDefinition {\n const { address, config } = module\n const normalizedName = config.name ?? address.substring(0, 8)\n return {\n data: {\n address,\n id: address,\n name: normalizedName,\n rootNodeId,\n type: parseModuleType(module),\n },\n }\n }\n\n static buildRootNode = (module: ModuleInstance): ElementDefinition => {\n return CytoscapeElements.buildNode(module)\n }\n\n static normalizeName(name?: string) {\n if (!name) return\n if (name.length > this.MaxNameLength) return `${name.substring(0, 20)}...`\n return name\n }\n\n static async recurseNodes(module: ModuleInstance, maxTraversals = 1): Promise<ModuleInstance[]> {\n let localDepth = 0\n const childModules: ModuleInstance[] = []\n\n const traverse = async (nestedNode: ModuleInstance) => {\n if (localDepth < maxTraversals) {\n const modules = await nestedNode.resolve(undefined, { direction: 'down', maxDepth: 2 })\n await Promise.all(\n modules.map(async (child) => {\n if (child !== nestedNode && isNodeInstance(child)) {\n localDepth++\n await traverse(child)\n // don't re add the root module that was passed in\n } else if (child !== module) {\n childModules.push(child)\n }\n }),\n )\n }\n }\n\n await traverse(module)\n\n return childModules\n }\n}\n","import { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.getElementsByTagName('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","export const ColaLayout = {\n centerGraph: false,\n convergenceThreshold: 0.01,\n name: 'cola',\n}\n","import { LayoutOptions } from 'cytoscape'\n\nexport const ConcentricLayout: LayoutOptions = {\n concentric: function (node) {\n return node.degree()\n },\n levelWidth: function () {\n return 2\n },\n minNodeSpacing: 75,\n name: 'concentric',\n}\n","import { isArchivistInstance } from '@xyo-network/archivist-model'\nimport { isBridgeInstance } from '@xyo-network/bridge-model'\nimport { isDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel'\nimport { isWitnessModule } from '@xyo-network/witness'\n\nimport { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const parseModuleType = (module?: ModuleInstance): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (module) {\n if (isArchivistInstance(module)) {\n type = 'archivist'\n } else if (isBridgeInstance(module)) {\n type = 'bridge'\n } else if (isDivinerInstance(module)) {\n type = 'diviner'\n } else if (isNodeInstance(module)) {\n type = 'node'\n } else if (isSentinelInstance(module)) {\n type = 'sentinel'\n } else if (isWitnessModule(module)) {\n type = 'witness'\n } else {\n type = 'module'\n }\n }\n return type\n}\n","import {\n BubbleChartRounded as BubbleChartRoundedIcon,\n Hub as HubIcon,\n InsertLinkRounded as InsertLinkRoundedIcon,\n Inventory2Rounded as Inventory2RoundedIcon,\n QuestionMarkRounded as QuestionMarkRoundedIcon,\n TimerRounded as TimerRoundedIcon,\n VisibilityRounded as VisibilityRoundedIcon,\n} from '@mui/icons-material'\nimport { SvgIconTypeMap } from '@mui/material'\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeIdStyles = (color?: string, outlineColor?: string): Stylesheet => ({\n selector: 'node[name]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 12,\n 'overlay-padding': '6px',\n 'text-halign': 'center',\n 'text-outline-color': outlineColor,\n 'text-outline-width': '1px',\n 'text-valign': 'top',\n },\n})\n\nexport const NodeStyled = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string, hideLabels = false): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-width': '24',\n label: hideLabels ? undefined : 'data(name)',\n shape: 'round-rectangle',\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\n\nexport const useCytoscapeOptions = (\n elements: CytoscapeOptions['elements'],\n style?: CytoscapeOptions['style'],\n layout?: CytoscapeOptions['layout'],\n) => {\n const defaultStyle = useCytoscapeStyle()\n\n const options = useMemo<CytoscapeOptions | undefined>(() => {\n if (elements && layout && style) {\n return {\n elements,\n layout: layout ?? ConcentricLayout,\n style: style ?? defaultStyle,\n }\n }\n }, [elements, layout, style])\n\n return options\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, NodeIdStyles, NodeStyled } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = (hideLabels = false) => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n NodeIdStyles(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),\n NodeStyled(icons, theme.palette.primary.main, hideLabels),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, hideLabels, theme],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { NodeCollection, NodeSingular } from 'cytoscape'\nimport { useCallback, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\n\nexport const useHoveredNode = (renderedElements?: NodeCollection) => {\n const { cy } = useCytoscapeInstance(true)\n const [hoveredNode, setHoveredNode] = useState<NodeSingular>()\n\n const nodeListener = useCallback((node: NodeSingular) => {\n node.on('mouseover tap', () => {\n setHoveredNode(node)\n })\n node.on('mouseout', () => {\n setHoveredNode(undefined)\n })\n }, [])\n\n useEffect(() => {\n if (renderedElements) {\n renderedElements.nodes().forEach(nodeListener)\n }\n }, [nodeListener, renderedElements])\n\n useEffect(() => {\n cy?.ready(() => {\n cy.nodes().forEach(nodeListener)\n })\n }, [cy, nodeListener])\n\n return hoveredNode\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n","import { useModuleFromNode } from '@xyo-network/react-node'\nimport { NodeSingular } from 'cytoscape'\nimport { useEffect } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\nimport { useCytoscapeElements } from './useCytoscapeElements'\n\nexport const useNewElements = (selectedElement?: NodeSingular) => {\n const { cy } = useCytoscapeInstance(true)\n const { address: selectedAddress } = selectedElement?.data() ?? {}\n const [module] = useModuleFromNode(selectedAddress)\n const newElements = useCytoscapeElements(module)\n\n useEffect(() => {\n if (selectedAddress) {\n const element = cy?.$(`node[id=\"${selectedAddress}\"]`)\n if (element?.length) cy?.center(element)\n }\n }, [cy, selectedAddress])\n\n return newElements\n}\n","import { ModuleInstance } from '@xyo-network/module'\nimport { useState } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeElements } from './useCytoscapeElements'\nimport { useCytoscapeOptions } from './useCytoscapeOptions'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\n\nexport const useRelationalGraphOptions = (module?: ModuleInstance) => {\n const [hideLabels, setHideLabels] = useState(true)\n\n const handleToggleLabels = () => {\n setHideLabels((oldValue) => !oldValue)\n }\n\n const elements = useCytoscapeElements(module)\n const style = useCytoscapeStyle(hideLabels)\n const options = useCytoscapeOptions(elements, style, ConcentricLayout)\n\n return { handleToggleLabels, hideLabels, options }\n}\n","import { CollectionReturnValue, ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\nimport { ColaLayout } from '../../Cytoscape'\n\nexport const useRenderNewElements = (newElements: ElementDefinition[] = [], hideLabels?: boolean) => {\n const { cy } = useCytoscapeInstance(true)\n const [renderedElements, setRenderedElements] = useState<CollectionReturnValue>()\n\n useEffect(() => {\n if (newElements.length > 1) {\n const renderedElements = cy?.add(newElements)\n setRenderedElements(renderedElements)\n cy?.layout(ColaLayout).run()\n }\n }, [cy, hideLabels, newElements])\n\n return renderedElements\n}\n","import { EventObject, NodeSingular } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\n\nexport const useSelectedElement = () => {\n const { cy } = useCytoscapeInstance(true)\n const [selectedElement, setSelectedElement] = useState<NodeSingular>()\n\n useEffect(() => {\n const listener = (event: EventObject) => {\n const element = event.target[0]\n if (element.isNode()) setSelectedElement(element)\n }\n cy?.on('select', listener)\n\n return () => {\n cy?.off('select', listener)\n }\n }, [cy, setSelectedElement])\n\n return selectedElement\n}\n","import { use } from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport { PropsWithChildren, useEffect, useState } from 'react'\n\nexport const WithExtensions: React.FC<PropsWithChildren> = ({ children }) => {\n const [initialized, setInitialized] = useState(false)\n useEffect(() => {\n use(cola)\n setInitialized(true)\n }, [])\n\n return <>{initialized ? children : undefined}</>\n}\n","import { Button, ButtonGroup, styled } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { useShareForwardedRef } from '@xyo-network/react-shared'\nimport cytoscape, { Core } from 'cytoscape'\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../contexts'\nimport { NodeRelationalGraphProps } from './lib'\n\nexport const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(({ actions, children, options, ...props }, ref) => {\n const [cy, setCy] = useState<Core>()\n const { setCy: setCyContext } = useCytoscapeInstance()\n const sharedRef = useShareForwardedRef(ref)\n\n const handleReset = () => {\n cy?.reset()\n cy?.fit(undefined, 20)\n }\n\n useEffect(() => {\n if (sharedRef) {\n const newCy = cytoscape({\n container: sharedRef.current,\n ...options,\n })\n setCy(newCy)\n }\n }, [options, sharedRef])\n\n useEffect(() => {\n setCyContext?.(cy)\n }, [cy, setCyContext])\n\n return (\n <FlexCol {...props}>\n <ActionsContainer>\n <ButtonGroup>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n </ButtonGroup>\n </ActionsContainer>\n {/* Cytoscape Element */}\n <FlexCol alignItems=\"stretch\" height=\"100%\" position=\"absolute\" ref={sharedRef} width=\"100%\"></FlexCol>\n {children}\n </FlexCol>\n )\n})\n\nNodeRelationalGraphFlexBox.displayName = 'NodeRelationalGraph'\n\nconst ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(({ theme }) => ({\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n position: 'absolute',\n right: '10px',\n top: '10px',\n zIndex: 2,\n}))\n\n/** @deprecated */\nexport const NodeRelationalGraph = NodeRelationalGraphFlexBox\n","import { NodeSingular } from 'cytoscape'\nimport { useLayoutEffect, useRef, useState } from 'react'\n\nimport { ModuleHoverPopper } from './Popper'\n\nexport interface ModuleHoverProps {\n node?: NodeSingular\n}\n\nexport const ModuleGraphNodeHover: React.FC<ModuleHoverProps> = ({ node }) => {\n const { address, name } = node?.data() ?? {}\n const [boundingBox, setBoundingBox] = useState(node?.renderedBoundingBox())\n const ref = useRef<HTMLDivElement>(null)\n const [currentEl, setCurrentEl] = useState<HTMLDivElement | null>(null)\n\n useLayoutEffect(() => {\n if (node && ref.current) {\n setBoundingBox(node.renderedBoundingBox())\n setCurrentEl(ref.current)\n }\n\n const listener = () => {\n setBoundingBox(node?.renderedBoundingBox())\n }\n\n node?.on('position', listener)\n\n return () => {\n node?.off('position', undefined, listener)\n }\n }, [node])\n\n return (\n <>\n {node ? (\n <>\n <div\n ref={ref}\n style={{\n // backgroundColor: '#fff',\n // opacity: 0.25,\n cursor: 'pointer',\n height: boundingBox?.h,\n left: boundingBox?.x1,\n pointerEvents: 'none',\n position: 'absolute',\n top: boundingBox?.y1,\n width: boundingBox?.w,\n }}\n ></div>\n <ModuleHoverPopper address={address} element={currentEl} name={name} placement={'top'} open />\n </>\n ) : null}\n </>\n )\n}\n","import { alpha, Chip, Popper, PopperProps, Theme, Typography } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\n\nexport interface ModuleHoverPopperProps extends PopperProps {\n address?: string\n element?: HTMLElement | null\n name?: string\n}\n\nexport const ModuleHoverPopper: React.FC<ModuleHoverPopperProps> = ({ address, element, name, ...props }) => {\n return (\n <Popper anchorEl={element} {...props}>\n <FlexCol gap={2} p={2} paper sx={{ backgroundColor: (theme: Theme) => alpha(theme.palette.background.paper, 0.95) }}>\n <FlexRow gap={2}>\n <Identicon value={address} size={24} />\n <Typography>{name}</Typography>\n </FlexRow>\n <Chip label={address} color={'primary'} />\n </FlexCol>\n </Popper>\n )\n}\n"],"mappings":"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","names":["import_material","import_node_model","import_node_model","module","module","Inventory2RoundedIcon","InsertLinkRoundedIcon","BubbleChartRoundedIcon","QuestionMarkRoundedIcon","HubIcon","TimerRoundedIcon","VisibilityRoundedIcon","module","import_react","import_material","import_react","import_react","import_react","import_react_shared","import_react","module","import_react","module","import_react","renderedElements","import_react","import_react","import_jsx_runtime","cola","import_material","import_react_shared","import_cytoscape","import_react","import_jsx_runtime","cytoscape","import_react","import_material","import_react_flexbox","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../../../../src/components/module/graph/index.ts","../../../../../src/components/module/graph/GraphFlexBox.tsx","../../../../../src/contexts/CytoscapeInstance/Context.ts","../../../../../src/contexts/CytoscapeInstance/Provider.tsx","../../../../../src/contexts/CytoscapeInstance/use.ts","../../../../../src/hooks/cytoscape/useCytoscapeElements.ts","../../../../../src/Cytoscape/CytoscapeElements.ts","../../../../../src/Cytoscape/lib/encodeSvg.ts","../../../../../src/Cytoscape/lib/iconMap.ts","../../../../../src/Cytoscape/lib/layout/ColaLayout.ts","../../../../../src/Cytoscape/lib/layout/ConcentricLayout.ts","../../../../../src/Cytoscape/lib/parseModuleType.ts","../../../../../src/Cytoscape/CytoscapeIcons.tsx","../../../../../src/Cytoscape/CytoscapeStyles.ts","../../../../../src/hooks/cytoscape/useCytoscapeOptions.ts","../../../../../src/hooks/cytoscape/useCytoscapeStyle.tsx","../../../../../src/hooks/cytoscape/useIcons.tsx","../../../../../src/hooks/cytoscape/useHoveredNode.tsx","../../../../../src/hooks/cytoscape/useNewElements.tsx","../../../../../src/hooks/cytoscape/useRelationalGraphOptions.tsx","../../../../../src/hooks/cytoscape/useRenderNewElements.tsx","../../../../../src/hooks/cytoscape/useSelectedElement.tsx","../../../../../src/hooks/cytoscape/useToggleSelectedElement.tsx","../../../../../src/components/cytoscape-extensions/WithExtensions.tsx","../../../../../src/components/RelationalGraph.tsx","../../../../../src/components/module/graph/NodeHover.tsx","../../../../../src/components/module/graph/Popper.tsx"],"sourcesContent":["export * from './GraphFlexBox'\n","import { Button } from '@mui/material'\nimport { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { ModuleInstance } from '@xyo-network/module'\n\nimport { CytoscapeInstanceProvider } from '../../../contexts'\nimport { useHoveredNode, useNewElements, useRelationalGraphOptions, useRenderNewElements, useSelectedElement } from '../../../hooks'\nimport { WithExtensions } from '../../cytoscape-extensions'\nimport { NodeRelationalGraphFlexBox } from '../../RelationalGraph'\nimport { ModuleGraphNodeHover } from './NodeHover'\n\nexport interface ModuleGraphFlexBoxProps extends FlexBoxProps {\n rootModule?: ModuleInstance | null\n}\n\nexport const ModuleGraphFlexBox: React.FC<ModuleGraphFlexBoxProps> = ({ rootModule, ...props }) => {\n const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? undefined)\n const selectedElement = useSelectedElement()\n const newElements = useNewElements(selectedElement)\n const renderedElements = useRenderNewElements(newElements, hideLabels)\n const hoveredNode = useHoveredNode(renderedElements)\n\n return (\n <WithExtensions>\n <NodeRelationalGraphFlexBox\n actions={\n <Button size={'small'} onClick={handleToggleLabels} variant=\"contained\">\n Toggle Labels\n </Button>\n }\n options={options}\n {...props}\n >\n <ModuleGraphNodeHover node={hoveredNode} />\n </NodeRelationalGraphFlexBox>\n </WithExtensions>\n )\n}\n\nexport const ModuleGraphFlexBoxWithProvider: React.FC<ModuleGraphFlexBoxProps> = (props) => {\n return (\n <CytoscapeInstanceProvider>\n <ModuleGraphFlexBox {...props} />\n </CytoscapeInstanceProvider>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import type { WithChildren } from '@xylabs/react-shared'\nimport { Core } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport interface CytoscapeInstanceProviderProps extends WithChildren {\n defaultInstance?: Core\n}\n\nexport const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {\n const [cy, setCy] = useState<Core | undefined>(defaultInstance)\n useEffect(() => {\n setCy(defaultInstance)\n }, [defaultInstance])\n\n return <CytoscapeInstanceContext.Provider value={{ cy, provided: true, setCy }}>{children}</CytoscapeInstanceContext.Provider>\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction, ModuleInstance } from '@xyo-network/module'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../Cytoscape'\n\nexport const useCytoscapeElements = (module?: ModuleInstance | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async () => {\n if (module) {\n const newElements = (await CytoscapeElements.buildElements(module)) ?? []\n setElements(newElements)\n }\n },\n [module],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined = undefined\n let detachedListener: EventUnsubscribeFunction | undefined = undefined\n\n if (module && isNodeInstance(module)) {\n attachedListener = module.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(module)) ?? []\n setElements(newElements)\n })\n detachedListener = module.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(module)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [module])\n\n return elements\n}\n","import { ModuleInstance } from '@xyo-network/module'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\n\nexport class CytoscapeElements {\n static MaxNameLength = 20\n\n static buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n },\n }\n }\n\n static async buildElements(module: ModuleInstance): Promise<ElementDefinition[]> {\n const newRootNode = CytoscapeElements.buildRootNode(module)\n const newElements: ElementDefinition[] = [newRootNode]\n\n try {\n const childElements = await CytoscapeElements.recurseNodes(module)\n childElements?.forEach((module) => {\n const newNode = CytoscapeElements.buildNode(module, { rootNodeId: newRootNode.data.id })\n newElements.push(newNode)\n\n const newEdge = CytoscapeElements.buildEdge(newRootNode, newNode)\n newElements.push(newEdge)\n })\n\n return newElements\n } catch (e) {\n console.error('error resolving modules', e)\n return []\n }\n }\n\n static buildNode(module: ModuleInstance, properties?: { [key: string]: unknown }): ElementDefinition {\n const { address, config } = module\n const normalizedName = config.name ?? address.substring(0, 8)\n return {\n data: {\n address,\n id: address,\n name: normalizedName,\n type: parseModuleType(module),\n ...properties,\n },\n }\n }\n\n static buildRootNode = (module: ModuleInstance): ElementDefinition => {\n return CytoscapeElements.buildNode(module, { root: true })\n }\n\n static normalizeName(name?: string) {\n if (!name) return\n if (name.length > this.MaxNameLength) return `${name.substring(0, 20)}...`\n return name\n }\n\n static async recurseNodes(module: ModuleInstance, maxTraversals = 1): Promise<ModuleInstance[]> {\n let localDepth = 0\n const childModules: ModuleInstance[] = []\n\n const traverse = async (nestedNode: ModuleInstance) => {\n if (localDepth < maxTraversals) {\n const modules = await nestedNode.resolve(undefined, { direction: 'down', maxDepth: 2 })\n await Promise.all(\n modules.map(async (child) => {\n if (child !== nestedNode && isNodeInstance(child)) {\n localDepth++\n await traverse(child)\n // don't re add the root module that was passed in\n } else if (child !== module) {\n childModules.push(child)\n }\n }),\n )\n }\n }\n\n await traverse(module)\n\n return childModules\n }\n}\n","import { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.getElementsByTagName('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","export const ColaLayout = {\n centerGraph: false,\n convergenceThreshold: 0.01,\n name: 'cola',\n}\n","import { LayoutOptions } from 'cytoscape'\n\nexport const ConcentricLayout: LayoutOptions = {\n concentric: function (node) {\n return node.degree()\n },\n levelWidth: function () {\n return 2\n },\n minNodeSpacing: 75,\n name: 'concentric',\n}\n","import { isArchivistInstance } from '@xyo-network/archivist-model'\nimport { isBridgeInstance } from '@xyo-network/bridge-model'\nimport { isDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel'\nimport { isWitnessModule } from '@xyo-network/witness'\n\nimport { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const parseModuleType = (module?: ModuleInstance): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (module) {\n if (isArchivistInstance(module)) {\n type = 'archivist'\n } else if (isBridgeInstance(module)) {\n type = 'bridge'\n } else if (isDivinerInstance(module)) {\n type = 'diviner'\n } else if (isNodeInstance(module)) {\n type = 'node'\n } else if (isSentinelInstance(module)) {\n type = 'sentinel'\n } else if (isWitnessModule(module)) {\n type = 'witness'\n } else {\n type = 'module'\n }\n }\n return type\n}\n","import {\n BubbleChartRounded as BubbleChartRoundedIcon,\n Hub as HubIcon,\n InsertLinkRounded as InsertLinkRoundedIcon,\n Inventory2Rounded as Inventory2RoundedIcon,\n QuestionMarkRounded as QuestionMarkRoundedIcon,\n TimerRounded as TimerRoundedIcon,\n VisibilityRounded as VisibilityRoundedIcon,\n} from '@mui/icons-material'\nimport { SvgIconTypeMap } from '@mui/material'\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeIdStyles = (color?: string, outlineColor?: string): Stylesheet => ({\n selector: 'node[name]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 12,\n 'overlay-padding': '6px',\n 'text-halign': 'center',\n 'text-outline-color': outlineColor,\n 'text-outline-width': '1px',\n 'text-valign': 'top',\n },\n})\n\nexport const NodeStyled = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string, hideLabels = false): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-width': '24',\n label: hideLabels ? undefined : 'data(name)',\n shape: 'round-rectangle',\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n\nexport const NodeBgStyles = (bgColor: string): [string, string] => ['background-color', bgColor]\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\n\nexport const useCytoscapeOptions = (\n elements: CytoscapeOptions['elements'],\n style?: CytoscapeOptions['style'],\n layout?: CytoscapeOptions['layout'],\n) => {\n const defaultStyle = useCytoscapeStyle()\n\n const resolvedLayout = layout ?? ConcentricLayout\n const resolvedStyle = style ?? defaultStyle\n\n const options = useMemo<CytoscapeOptions | undefined>(() => {\n if (elements && resolvedLayout && resolvedStyle) {\n return {\n elements,\n layout: resolvedLayout,\n style: resolvedStyle,\n }\n }\n }, [elements, layout, style])\n\n return options\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, NodeIdStyles, NodeStyled } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = (hideLabels = false) => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n NodeIdStyles(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),\n NodeStyled(icons, theme.palette.primary.main, hideLabels),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, hideLabels, theme],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { NodeCollection, NodeSingular } from 'cytoscape'\nimport { useCallback, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\n\nexport const useHoveredNode = (renderedElements?: NodeCollection) => {\n const { cy } = useCytoscapeInstance(true)\n const [hoveredNode, setHoveredNode] = useState<NodeSingular>()\n\n const nodeListener = useCallback((node: NodeSingular) => {\n node.on('mouseover tap', () => {\n setHoveredNode(node)\n })\n node.on('mouseout', () => {\n setHoveredNode(undefined)\n })\n }, [])\n\n useEffect(() => {\n if (renderedElements) {\n renderedElements.nodes().forEach(nodeListener)\n }\n }, [nodeListener, renderedElements])\n\n useEffect(() => {\n cy?.ready(() => {\n cy.nodes().forEach(nodeListener)\n })\n }, [cy, nodeListener])\n\n return hoveredNode\n}\n","import { useModuleFromNode } from '@xyo-network/react-node'\nimport { NodeSingular } from 'cytoscape'\n\nimport { useCytoscapeElements } from './useCytoscapeElements'\n\nexport const useNewElements = (selectedElement?: NodeSingular) => {\n const { address: selectedAddress } = selectedElement?.data() ?? {}\n const [module] = useModuleFromNode(selectedAddress)\n const newElements = useCytoscapeElements(module)\n\n return newElements\n}\n","import { ModuleInstance } from '@xyo-network/module'\nimport { useState } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeElements } from './useCytoscapeElements'\nimport { useCytoscapeOptions } from './useCytoscapeOptions'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\n\nexport const useRelationalGraphOptions = (module?: ModuleInstance) => {\n const [hideLabels, setHideLabels] = useState(true)\n\n const handleToggleLabels = () => {\n setHideLabels((oldValue) => !oldValue)\n }\n\n const elements = useCytoscapeElements(module)\n const style = useCytoscapeStyle(hideLabels)\n const options = useCytoscapeOptions(elements, style, ConcentricLayout)\n\n return { handleToggleLabels, hideLabels, options }\n}\n","import { CollectionReturnValue, ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\nimport { ColaLayout } from '../../Cytoscape'\n\nexport const useRenderNewElements = (newElements: ElementDefinition[] = [], hideLabels?: boolean) => {\n const { cy } = useCytoscapeInstance(true)\n const [renderedElements, setRenderedElements] = useState<CollectionReturnValue>()\n\n useEffect(() => {\n if (newElements.length > 1) {\n const renderedElements = cy?.add(newElements)\n setRenderedElements(renderedElements)\n cy?.layout(ColaLayout).run()\n }\n }, [cy, hideLabels, newElements])\n\n return renderedElements\n}\n","import { EventObject, NodeSingular } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\nimport { useToggleSelectedElement } from './useToggleSelectedElement'\n\nexport const useSelectedElement = () => {\n const { cy } = useCytoscapeInstance(true)\n const [selectedElement, setSelectedElement] = useState<NodeSingular>()\n const toggleSelectedElement = useToggleSelectedElement(setSelectedElement)\n\n useEffect(() => {\n const listener = (event: EventObject) => {\n const element: NodeSingular = event.target[0]\n if (element.isNode()) {\n toggleSelectedElement(element)\n }\n }\n\n cy?.on('select', listener)\n\n return () => {\n cy?.off('select', listener)\n }\n }, [cy, toggleSelectedElement])\n\n return selectedElement\n}\n","import { useTheme } from '@mui/material'\nimport { NodeSingular } from 'cytoscape'\nimport { Dispatch, SetStateAction } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\nimport { NodeBgStyles } from '../../Cytoscape'\n\nexport const useToggleSelectedElement = (setSelectedElement: Dispatch<SetStateAction<NodeSingular | undefined>>) => {\n const { cy } = useCytoscapeInstance(true)\n const theme = useTheme()\n\n const updateStyles = (element: NodeSingular, styles: [string, string]) => {\n cy\n ?.style()\n .selector(`node[id=\"${element.data().id}\"]`)\n .style(...styles)\n }\n\n const toggleSelectedElement = (element: NodeSingular) => {\n setSelectedElement((previousSelectedElement) => {\n if (previousSelectedElement) {\n updateStyles(previousSelectedElement, NodeBgStyles(theme.palette.primary.main))\n }\n return element\n })\n updateStyles(element, NodeBgStyles(theme.palette.secondary.main))\n }\n\n return toggleSelectedElement\n}\n","import { use } from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport { PropsWithChildren, useEffect, useState } from 'react'\n\nexport const WithExtensions: React.FC<PropsWithChildren> = ({ children }) => {\n const [initialized, setInitialized] = useState(false)\n useEffect(() => {\n use(cola)\n setInitialized(true)\n }, [])\n\n return <>{initialized ? children : undefined}</>\n}\n","import { Button, ButtonGroup, styled } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { useShareForwardedRef } from '@xyo-network/react-shared'\nimport cytoscape, { Core } from 'cytoscape'\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../contexts'\nimport { NodeRelationalGraphProps } from './lib'\n\nexport const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(({ actions, children, options, ...props }, ref) => {\n const [cy, setCy] = useState<Core>()\n const { setCy: setCyContext } = useCytoscapeInstance()\n const sharedRef = useShareForwardedRef(ref)\n\n const handleReset = () => {\n cy?.reset()\n cy?.fit(undefined, 20)\n }\n\n useEffect(() => {\n if (sharedRef) {\n const newCy = cytoscape({\n container: sharedRef.current,\n ...options,\n })\n setCy(newCy)\n }\n }, [options, sharedRef])\n\n useEffect(() => {\n setCyContext?.(cy)\n }, [cy, setCyContext])\n\n return (\n <FlexCol {...props}>\n <ActionsContainer>\n <>\n {actions ? (\n <ButtonGroup>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset View\n </Button>\n </ButtonGroup>\n ) : (\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n )}\n </>\n </ActionsContainer>\n {/* Cytoscape Element */}\n <FlexCol alignItems=\"stretch\" height=\"100%\" position=\"absolute\" ref={sharedRef} width=\"100%\"></FlexCol>\n {children}\n </FlexCol>\n )\n})\n\nNodeRelationalGraphFlexBox.displayName = 'NodeRelationalGraph'\n\nconst ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(({ theme }) => ({\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n position: 'absolute',\n right: '10px',\n top: '10px',\n zIndex: 2,\n}))\n\n/** @deprecated */\nexport const NodeRelationalGraph = NodeRelationalGraphFlexBox\n","import { PopperProps } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { NodeSingular } from 'cytoscape'\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nimport { ModuleHoverPopper } from './Popper'\n\nexport interface ModuleHoverProps {\n node?: NodeSingular\n}\n\nexport const ModuleGraphNodeHover: React.FC<ModuleHoverProps> = ({ node }) => {\n const { address, name } = node?.data() ?? {}\n const [boundingBox, setBoundingBox] = useState(node?.renderedBoundingBox())\n const ref = useRef<HTMLDivElement>(null)\n const [currentEl, setCurrentEl] = useState<PopperProps['anchorEl'] | null>(null)\n\n // Ensure first render clears the previous element when node changes to avoid flicker\n useEffect(() => {\n setCurrentEl(null)\n }, [node])\n\n useEffect(() => {\n if (node) {\n setBoundingBox(node.renderedBoundingBox())\n }\n\n const listener = () => {\n setBoundingBox(node?.renderedBoundingBox())\n }\n\n node?.on('position', listener)\n\n return () => {\n node?.off('position', undefined, listener)\n }\n }, [node])\n\n // Once boundingBox state is set and applied to the layout, update the ref\n useLayoutEffect(() => {\n setCurrentEl(ref.current)\n }, [boundingBox])\n\n return (\n <>\n <FlexCol\n ref={ref}\n sx={{\n // For easier debugging of the 'ghost' element that matches the hovered cytoscape node\n // backgroundColor: '#fff',\n // opacity: 0.25,\n cursor: 'pointer',\n height: boundingBox?.h,\n left: boundingBox?.x1,\n pointerEvents: 'none',\n position: 'absolute',\n top: boundingBox?.y1,\n width: boundingBox?.w,\n }}\n />\n {node ? (\n <>\n <ModuleHoverPopper address={address} element={currentEl} name={name} placement={'top'} open sx={{ zIndex: 2 }} />\n </>\n ) : null}\n </>\n )\n}\n","import { alpha, Chip, Popper, PopperProps, Theme, Typography } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\n\nexport interface ModuleHoverPopperProps extends PopperProps {\n address?: string\n element?: PopperProps['anchorEl']\n name?: string\n}\n\nexport const ModuleHoverPopper: React.FC<ModuleHoverPopperProps> = ({ address, element, name, ...props }) => {\n return (\n <>\n {element ? (\n <Popper anchorEl={element} {...props}>\n <FlexCol gap={2} p={2} paper sx={{ backgroundColor: (theme: Theme) => alpha(theme.palette.background.paper, 0.95) }}>\n <FlexRow gap={2}>\n <Identicon value={address} size={24} />\n <Typography>{name}</Typography>\n </FlexRow>\n <Chip label={address} color={'primary'} />\n </FlexCol>\n </Popper>\n ) : null}\n </>\n )\n}\n"],"mappings":"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","names":["import_material","import_react_shared","import_node_model","import_react","import_node_model","module","module","Inventory2RoundedIcon","InsertLinkRoundedIcon","BubbleChartRoundedIcon","QuestionMarkRoundedIcon","HubIcon","TimerRoundedIcon","VisibilityRoundedIcon","module","import_react","import_material","import_react","import_react","import_jsx_runtime","import_react","module","import_react","module","import_react","renderedElements","import_react","import_material","import_react","import_jsx_runtime","cola","import_material","import_react_shared","import_cytoscape","import_react","import_jsx_runtime","cytoscape","import_react_flexbox","import_react","import_material","import_react_flexbox","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}