@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
@@ -31,7 +31,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var module_exports = {};
32
32
  __export(module_exports, {
33
33
  ModuleCardParser: () => ModuleCardParser,
34
- ModuleGraphFlexBox: () => ModuleGraphFlexBox
34
+ ModuleGraphFlexBox: () => ModuleGraphFlexBox,
35
+ ModuleGraphFlexBoxWithProvider: () => ModuleGraphFlexBoxWithProvider
35
36
  });
36
37
  module.exports = __toCommonJS(module_exports);
37
38
 
@@ -53,12 +54,31 @@ var ModuleCardParser = ({ module: module2 }) => {
53
54
  };
54
55
 
55
56
  // src/components/module/graph/GraphFlexBox.tsx
56
- var import_material5 = require("@mui/material");
57
+ var import_material6 = require("@mui/material");
58
+
59
+ // src/contexts/CytoscapeInstance/Context.ts
60
+ var import_react_shared = require("@xyo-network/react-shared");
61
+ var CytoscapeInstanceContext = (0, import_react_shared.createContextEx)();
62
+
63
+ // src/contexts/CytoscapeInstance/Provider.tsx
64
+ var import_react = require("react");
65
+ var import_jsx_runtime2 = require("react/jsx-runtime");
66
+ var CytoscapeInstanceProvider = ({ children, defaultInstance }) => {
67
+ const [cy, setCy] = (0, import_react.useState)(defaultInstance);
68
+ (0, import_react.useEffect)(() => {
69
+ setCy(defaultInstance);
70
+ }, [defaultInstance]);
71
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CytoscapeInstanceContext.Provider, { value: { cy, provided: true, setCy }, children });
72
+ };
73
+
74
+ // src/contexts/CytoscapeInstance/use.ts
75
+ var import_react_shared2 = require("@xyo-network/react-shared");
76
+ var useCytoscapeInstance = (required = false) => (0, import_react_shared2.useContextEx)(CytoscapeInstanceContext, "CytoscapeInstance", required);
57
77
 
58
78
  // src/hooks/cytoscape/useCytoscapeElements.ts
59
79
  var import_react_async_effect = require("@xylabs/react-async-effect");
60
80
  var import_node_model3 = require("@xyo-network/node-model");
61
- var import_react = require("react");
81
+ var import_react2 = require("react");
62
82
 
63
83
  // src/Cytoscape/CytoscapeElements.ts
64
84
  var import_node_model2 = require("@xyo-network/node-model");
@@ -155,7 +175,7 @@ var CytoscapeElements = class _CytoscapeElements {
155
175
  try {
156
176
  const childElements = await _CytoscapeElements.recurseNodes(module2);
157
177
  childElements?.forEach((module3) => {
158
- const newNode = _CytoscapeElements.buildNode(module3, newRootNode.data.id);
178
+ const newNode = _CytoscapeElements.buildNode(module3, { rootNodeId: newRootNode.data.id });
159
179
  newElements.push(newNode);
160
180
  const newEdge = _CytoscapeElements.buildEdge(newRootNode, newNode);
161
181
  newElements.push(newEdge);
@@ -166,7 +186,7 @@ var CytoscapeElements = class _CytoscapeElements {
166
186
  return [];
167
187
  }
168
188
  }
169
- static buildNode(module2, rootNodeId) {
189
+ static buildNode(module2, properties) {
170
190
  const { address, config } = module2;
171
191
  const normalizedName = config.name ?? address.substring(0, 8);
172
192
  return {
@@ -174,13 +194,13 @@ var CytoscapeElements = class _CytoscapeElements {
174
194
  address,
175
195
  id: address,
176
196
  name: normalizedName,
177
- rootNodeId,
178
- type: parseModuleType(module2)
197
+ type: parseModuleType(module2),
198
+ ...properties
179
199
  }
180
200
  };
181
201
  }
182
202
  static buildRootNode = (module2) => {
183
- return _CytoscapeElements.buildNode(module2);
203
+ return _CytoscapeElements.buildNode(module2, { root: true });
184
204
  };
185
205
  static normalizeName(name) {
186
206
  if (!name)
@@ -260,10 +280,11 @@ var EdgeStyled = (lineColor, targetArrowColor) => ({
260
280
  width: 3
261
281
  }
262
282
  });
283
+ var NodeBgStyles = (bgColor) => ["background-color", bgColor];
263
284
 
264
285
  // src/hooks/cytoscape/useCytoscapeElements.ts
265
286
  var useCytoscapeElements = (module2) => {
266
- const [elements, setElements] = (0, import_react.useState)([]);
287
+ const [elements, setElements] = (0, import_react2.useState)([]);
267
288
  (0, import_react_async_effect.useAsyncEffect)(
268
289
  // eslint-disable-next-line react-hooks/exhaustive-deps
269
290
  async () => {
@@ -274,7 +295,7 @@ var useCytoscapeElements = (module2) => {
274
295
  },
275
296
  [module2]
276
297
  );
277
- (0, import_react.useEffect)(() => {
298
+ (0, import_react2.useEffect)(() => {
278
299
  let attachedListener = void 0;
279
300
  let detachedListener = void 0;
280
301
  if (module2 && (0, import_node_model3.isNodeInstance)(module2)) {
@@ -296,22 +317,22 @@ var useCytoscapeElements = (module2) => {
296
317
  };
297
318
 
298
319
  // src/hooks/cytoscape/useCytoscapeOptions.ts
299
- var import_react4 = require("react");
320
+ var import_react5 = require("react");
300
321
 
301
322
  // src/hooks/cytoscape/useCytoscapeStyle.tsx
302
323
  var import_material2 = require("@mui/material");
303
- var import_react3 = require("react");
324
+ var import_react4 = require("react");
304
325
 
305
326
  // src/hooks/cytoscape/useIcons.tsx
306
327
  var import_material = require("@mui/material");
307
- var import_react2 = require("react");
308
- var import_jsx_runtime2 = require("react/jsx-runtime");
328
+ var import_react3 = require("react");
329
+ var import_jsx_runtime3 = require("react/jsx-runtime");
309
330
  var useIcons = () => {
310
331
  const theme = (0, import_material.useTheme)();
311
- const icons = (0, import_react2.useMemo)(() => {
332
+ const icons = (0, import_react3.useMemo)(() => {
312
333
  const iconMap = generateIconMap();
313
334
  return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {
314
- const icon = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(IconComponent, { fontSize: "small" });
335
+ const icon = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(IconComponent, { fontSize: "small" });
315
336
  acc[name] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary));
316
337
  return acc;
317
338
  }, iconMap);
@@ -323,7 +344,7 @@ var useIcons = () => {
323
344
  var useCytoscapeStyle = (hideLabels = false) => {
324
345
  const theme = (0, import_material2.useTheme)();
325
346
  const icons = useIcons();
326
- const style = (0, import_react3.useMemo)(
347
+ const style = (0, import_react4.useMemo)(
327
348
  () => [
328
349
  NodeIdStyles(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),
329
350
  NodeStyled(icons, theme.palette.primary.main, hideLabels),
@@ -337,12 +358,14 @@ var useCytoscapeStyle = (hideLabels = false) => {
337
358
  // src/hooks/cytoscape/useCytoscapeOptions.ts
338
359
  var useCytoscapeOptions = (elements, style, layout) => {
339
360
  const defaultStyle = useCytoscapeStyle();
340
- const options = (0, import_react4.useMemo)(() => {
341
- if (elements && layout && style) {
361
+ const resolvedLayout = layout ?? ConcentricLayout;
362
+ const resolvedStyle = style ?? defaultStyle;
363
+ const options = (0, import_react5.useMemo)(() => {
364
+ if (elements && resolvedLayout && resolvedStyle) {
342
365
  return {
343
366
  elements,
344
- layout: layout ?? ConcentricLayout,
345
- style: style ?? defaultStyle
367
+ layout: resolvedLayout,
368
+ style: resolvedStyle
346
369
  };
347
370
  }
348
371
  }, [elements, layout, style]);
@@ -350,21 +373,11 @@ var useCytoscapeOptions = (elements, style, layout) => {
350
373
  };
351
374
 
352
375
  // src/hooks/cytoscape/useHoveredNode.tsx
353
- var import_react5 = require("react");
354
-
355
- // src/contexts/CytoscapeInstance/Context.ts
356
- var import_react_shared = require("@xyo-network/react-shared");
357
- var CytoscapeInstanceContext = (0, import_react_shared.createContextEx)();
358
-
359
- // src/contexts/CytoscapeInstance/use.ts
360
- var import_react_shared2 = require("@xyo-network/react-shared");
361
- var useCytoscapeInstance = (required = false) => (0, import_react_shared2.useContextEx)(CytoscapeInstanceContext, "CytoscapeInstance", required);
362
-
363
- // src/hooks/cytoscape/useHoveredNode.tsx
376
+ var import_react6 = require("react");
364
377
  var useHoveredNode = (renderedElements) => {
365
378
  const { cy } = useCytoscapeInstance(true);
366
- const [hoveredNode, setHoveredNode] = (0, import_react5.useState)();
367
- const nodeListener = (0, import_react5.useCallback)((node) => {
379
+ const [hoveredNode, setHoveredNode] = (0, import_react6.useState)();
380
+ const nodeListener = (0, import_react6.useCallback)((node) => {
368
381
  node.on("mouseover tap", () => {
369
382
  setHoveredNode(node);
370
383
  });
@@ -372,12 +385,12 @@ var useHoveredNode = (renderedElements) => {
372
385
  setHoveredNode(void 0);
373
386
  });
374
387
  }, []);
375
- (0, import_react5.useEffect)(() => {
388
+ (0, import_react6.useEffect)(() => {
376
389
  if (renderedElements) {
377
390
  renderedElements.nodes().forEach(nodeListener);
378
391
  }
379
392
  }, [nodeListener, renderedElements]);
380
- (0, import_react5.useEffect)(() => {
393
+ (0, import_react6.useEffect)(() => {
381
394
  cy?.ready(() => {
382
395
  cy.nodes().forEach(nodeListener);
383
396
  });
@@ -387,19 +400,10 @@ var useHoveredNode = (renderedElements) => {
387
400
 
388
401
  // src/hooks/cytoscape/useNewElements.tsx
389
402
  var import_react_node = require("@xyo-network/react-node");
390
- var import_react6 = require("react");
391
403
  var useNewElements = (selectedElement) => {
392
- const { cy } = useCytoscapeInstance(true);
393
404
  const { address: selectedAddress } = selectedElement?.data() ?? {};
394
405
  const [module2] = (0, import_react_node.useModuleFromNode)(selectedAddress);
395
406
  const newElements = useCytoscapeElements(module2);
396
- (0, import_react6.useEffect)(() => {
397
- if (selectedAddress) {
398
- const element = cy?.$(`node[id="${selectedAddress}"]`);
399
- if (element?.length)
400
- cy?.center(element);
401
- }
402
- }, [cy, selectedAddress]);
403
407
  return newElements;
404
408
  };
405
409
 
@@ -433,20 +437,44 @@ var useRenderNewElements = (newElements = [], hideLabels) => {
433
437
 
434
438
  // src/hooks/cytoscape/useSelectedElement.tsx
435
439
  var import_react9 = require("react");
440
+
441
+ // src/hooks/cytoscape/useToggleSelectedElement.tsx
442
+ var import_material3 = require("@mui/material");
443
+ var useToggleSelectedElement = (setSelectedElement) => {
444
+ const { cy } = useCytoscapeInstance(true);
445
+ const theme = (0, import_material3.useTheme)();
446
+ const updateStyles = (element, styles) => {
447
+ cy?.style().selector(`node[id="${element.data().id}"]`).style(...styles);
448
+ };
449
+ const toggleSelectedElement = (element) => {
450
+ setSelectedElement((previousSelectedElement) => {
451
+ if (previousSelectedElement) {
452
+ updateStyles(previousSelectedElement, NodeBgStyles(theme.palette.primary.main));
453
+ }
454
+ return element;
455
+ });
456
+ updateStyles(element, NodeBgStyles(theme.palette.secondary.main));
457
+ };
458
+ return toggleSelectedElement;
459
+ };
460
+
461
+ // src/hooks/cytoscape/useSelectedElement.tsx
436
462
  var useSelectedElement = () => {
437
463
  const { cy } = useCytoscapeInstance(true);
438
464
  const [selectedElement, setSelectedElement] = (0, import_react9.useState)();
465
+ const toggleSelectedElement = useToggleSelectedElement(setSelectedElement);
439
466
  (0, import_react9.useEffect)(() => {
440
467
  const listener = (event) => {
441
468
  const element = event.target[0];
442
- if (element.isNode())
443
- setSelectedElement(element);
469
+ if (element.isNode()) {
470
+ toggleSelectedElement(element);
471
+ }
444
472
  };
445
473
  cy?.on("select", listener);
446
474
  return () => {
447
475
  cy?.off("select", listener);
448
476
  };
449
- }, [cy, setSelectedElement]);
477
+ }, [cy, toggleSelectedElement]);
450
478
  return selectedElement;
451
479
  };
452
480
 
@@ -454,23 +482,23 @@ var useSelectedElement = () => {
454
482
  var import_cytoscape = require("cytoscape");
455
483
  var import_cytoscape_cola = __toESM(require("cytoscape-cola"), 1);
456
484
  var import_react10 = require("react");
457
- var import_jsx_runtime3 = require("react/jsx-runtime");
485
+ var import_jsx_runtime4 = require("react/jsx-runtime");
458
486
  var WithExtensions = ({ children }) => {
459
487
  const [initialized, setInitialized] = (0, import_react10.useState)(false);
460
488
  (0, import_react10.useEffect)(() => {
461
489
  (0, import_cytoscape.use)(import_cytoscape_cola.default);
462
490
  setInitialized(true);
463
491
  }, []);
464
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children: initialized ? children : void 0 });
492
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children: initialized ? children : void 0 });
465
493
  };
466
494
 
467
495
  // src/components/RelationalGraph.tsx
468
- var import_material3 = require("@mui/material");
496
+ var import_material4 = require("@mui/material");
469
497
  var import_react_flexbox = require("@xylabs/react-flexbox");
470
498
  var import_react_shared3 = require("@xyo-network/react-shared");
471
499
  var import_cytoscape2 = __toESM(require("cytoscape"), 1);
472
500
  var import_react11 = require("react");
473
- var import_jsx_runtime4 = require("react/jsx-runtime");
501
+ var import_jsx_runtime5 = require("react/jsx-runtime");
474
502
  var NodeRelationalGraphFlexBox = (0, import_react11.forwardRef)(({ actions, children, options, ...props }, ref) => {
475
503
  const [cy, setCy] = (0, import_react11.useState)();
476
504
  const { setCy: setCyContext } = useCytoscapeInstance();
@@ -491,17 +519,17 @@ var NodeRelationalGraphFlexBox = (0, import_react11.forwardRef)(({ actions, chil
491
519
  (0, import_react11.useEffect)(() => {
492
520
  setCyContext?.(cy);
493
521
  }, [cy, setCyContext]);
494
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_react_flexbox.FlexCol, { ...props, children: [
495
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActionsContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material3.ButtonGroup, { children: [
522
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox.FlexCol, { ...props, children: [
523
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ActionsContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_jsx_runtime5.Fragment, { children: actions ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_material4.ButtonGroup, { children: [
496
524
  actions,
497
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material3.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset" })
498
- ] }) }),
499
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_flexbox.FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" }),
525
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material4.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset View" })
526
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material4.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset" }) }) }),
527
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_flexbox.FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" }),
500
528
  children
501
529
  ] });
502
530
  });
503
531
  NodeRelationalGraphFlexBox.displayName = "NodeRelationalGraph";
504
- var ActionsContainer = (0, import_material3.styled)(import_react_flexbox.FlexRow, { name: "ActionsContainer" })(({ theme }) => ({
532
+ var ActionsContainer = (0, import_material4.styled)(import_react_flexbox.FlexRow, { name: "ActionsContainer" })(({ theme }) => ({
505
533
  flexWrap: "wrap",
506
534
  gap: theme.spacing(1),
507
535
  position: "absolute",
@@ -511,34 +539,37 @@ var ActionsContainer = (0, import_material3.styled)(import_react_flexbox.FlexRow
511
539
  }));
512
540
 
513
541
  // src/components/module/graph/NodeHover.tsx
542
+ var import_react_flexbox3 = require("@xylabs/react-flexbox");
514
543
  var import_react12 = require("react");
515
544
 
516
545
  // src/components/module/graph/Popper.tsx
517
- var import_material4 = require("@mui/material");
546
+ var import_material5 = require("@mui/material");
518
547
  var import_react_flexbox2 = require("@xylabs/react-flexbox");
519
548
  var import_react_identicon = require("@xylabs/react-identicon");
520
- var import_jsx_runtime5 = require("react/jsx-runtime");
549
+ var import_jsx_runtime6 = require("react/jsx-runtime");
521
550
  var ModuleHoverPopper = ({ address, element, name, ...props }) => {
522
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material4.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_material4.alpha)(theme.palette.background.paper, 0.95) }, children: [
523
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox2.FlexRow, { gap: 2, children: [
524
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_identicon.Identicon, { value: address, size: 24 }),
525
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material4.Typography, { children: name })
551
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: element ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_material5.Popper, { anchorEl: element, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime6.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: [
552
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_react_flexbox2.FlexRow, { gap: 2, children: [
553
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_identicon.Identicon, { value: address, size: 24 }),
554
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_material5.Typography, { children: name })
526
555
  ] }),
527
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material4.Chip, { label: address, color: "primary" })
528
- ] }) });
556
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_material5.Chip, { label: address, color: "primary" })
557
+ ] }) }) : null });
529
558
  };
530
559
 
531
560
  // src/components/module/graph/NodeHover.tsx
532
- var import_jsx_runtime6 = require("react/jsx-runtime");
561
+ var import_jsx_runtime7 = require("react/jsx-runtime");
533
562
  var ModuleGraphNodeHover = ({ node }) => {
534
563
  const { address, name } = node?.data() ?? {};
535
564
  const [boundingBox, setBoundingBox] = (0, import_react12.useState)(node?.renderedBoundingBox());
536
565
  const ref = (0, import_react12.useRef)(null);
537
566
  const [currentEl, setCurrentEl] = (0, import_react12.useState)(null);
538
- (0, import_react12.useLayoutEffect)(() => {
539
- if (node && ref.current) {
567
+ (0, import_react12.useEffect)(() => {
568
+ setCurrentEl(null);
569
+ }, [node]);
570
+ (0, import_react12.useEffect)(() => {
571
+ if (node) {
540
572
  setBoundingBox(node.renderedBoundingBox());
541
- setCurrentEl(ref.current);
542
573
  }
543
574
  const listener = () => {
544
575
  setBoundingBox(node?.renderedBoundingBox());
@@ -548,12 +579,16 @@ var ModuleGraphNodeHover = ({ node }) => {
548
579
  node?.off("position", void 0, listener);
549
580
  };
550
581
  }, [node]);
551
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_jsx_runtime6.Fragment, { children: node ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
552
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
553
- "div",
582
+ (0, import_react12.useLayoutEffect)(() => {
583
+ setCurrentEl(ref.current);
584
+ }, [boundingBox]);
585
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
586
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
587
+ import_react_flexbox3.FlexCol,
554
588
  {
555
589
  ref,
556
- style: {
590
+ sx: {
591
+ // For easier debugging of the 'ghost' element that matches the hovered cytoscape node
557
592
  // backgroundColor: '#fff',
558
593
  // opacity: 0.25,
559
594
  cursor: "pointer",
@@ -566,26 +601,29 @@ var ModuleGraphNodeHover = ({ node }) => {
566
601
  }
567
602
  }
568
603
  ),
569
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ModuleHoverPopper, { address, element: currentEl, name, placement: "top", open: true })
570
- ] }) : null });
604
+ node ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ModuleHoverPopper, { address, element: currentEl, name, placement: "top", open: true, sx: { zIndex: 2 } }) }) : null
605
+ ] });
571
606
  };
572
607
 
573
608
  // src/components/module/graph/GraphFlexBox.tsx
574
- var import_jsx_runtime7 = require("react/jsx-runtime");
609
+ var import_jsx_runtime8 = require("react/jsx-runtime");
575
610
  var ModuleGraphFlexBox = ({ rootModule, ...props }) => {
576
611
  const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? void 0);
577
612
  const selectedElement = useSelectedElement();
578
613
  const newElements = useNewElements(selectedElement);
579
614
  const renderedElements = useRenderNewElements(newElements, hideLabels);
580
615
  const hoveredNode = useHoveredNode(renderedElements);
581
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(WithExtensions, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
616
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(WithExtensions, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
582
617
  NodeRelationalGraphFlexBox,
583
618
  {
584
- actions: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material5.Button, { size: "small", onClick: handleToggleLabels, variant: "contained", children: "Toggle Labels" }),
619
+ actions: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_material6.Button, { size: "small", onClick: handleToggleLabels, variant: "contained", children: "Toggle Labels" }),
585
620
  options,
586
621
  ...props,
587
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ModuleGraphNodeHover, { node: hoveredNode })
622
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ModuleGraphNodeHover, { node: hoveredNode })
588
623
  }
589
624
  ) });
590
625
  };
626
+ var ModuleGraphFlexBoxWithProvider = (props) => {
627
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(CytoscapeInstanceProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ModuleGraphFlexBox, { ...props }) });
628
+ };
591
629
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/module/index.ts","../../../../src/components/module/CardParser.tsx","../../../../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 './CardParser'\nexport * from './graph'\n","import { asArchivistInstance, isArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance, isDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\n\nexport interface ModuleCardParserProps {\n module?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ module }) => {\n switch (true) {\n case isArchivistInstance(module):\n return <ArchivistCard module={asArchivistInstance(module)} />\n case isDivinerInstance(module):\n return <DivinerCard module={asDivinerInstance(module)} />\n default:\n return <ModuleCard module={module} />\n }\n}\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":["module","import_material","import_node_model","import_node_model","import_archivist_model","import_diviner_model","module","module","Inventory2RoundedIcon","InsertLinkRoundedIcon","BubbleChartRoundedIcon","QuestionMarkRoundedIcon","HubIcon","TimerRoundedIcon","VisibilityRoundedIcon","module","import_react","import_material","import_react","import_react","import_jsx_runtime","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/index.ts","../../../../src/components/module/CardParser.tsx","../../../../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 './CardParser'\nexport * from './graph'\n","import { asArchivistInstance, isArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance, isDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\n\nexport interface ModuleCardParserProps {\n module?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ module }) => {\n switch (true) {\n case isArchivistInstance(module):\n return <ArchivistCard module={asArchivistInstance(module)} />\n case isDivinerInstance(module):\n return <DivinerCard module={asDivinerInstance(module)} />\n default:\n return <ModuleCard module={module} />\n }\n}\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":["module","import_material","import_jsx_runtime","import_react_shared","import_node_model","import_react","import_node_model","import_archivist_model","import_diviner_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"]}