@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.
- package/dist/browser/Cytoscape/CytoscapeElements.cjs +5 -5
- package/dist/browser/Cytoscape/CytoscapeElements.cjs.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeElements.d.cts +3 -1
- package/dist/browser/Cytoscape/CytoscapeElements.d.cts.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeElements.d.mts +3 -1
- package/dist/browser/Cytoscape/CytoscapeElements.d.mts.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeElements.d.ts +3 -1
- package/dist/browser/Cytoscape/CytoscapeElements.d.ts.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeElements.js +5 -5
- package/dist/browser/Cytoscape/CytoscapeElements.js.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeStyles.cjs +2 -0
- package/dist/browser/Cytoscape/CytoscapeStyles.cjs.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeStyles.d.cts +1 -0
- package/dist/browser/Cytoscape/CytoscapeStyles.d.cts.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeStyles.d.mts +1 -0
- package/dist/browser/Cytoscape/CytoscapeStyles.d.mts.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeStyles.d.ts +1 -0
- package/dist/browser/Cytoscape/CytoscapeStyles.d.ts.map +1 -1
- package/dist/browser/Cytoscape/CytoscapeStyles.js +2 -0
- package/dist/browser/Cytoscape/CytoscapeStyles.js.map +1 -1
- package/dist/browser/Cytoscape/index.cjs +7 -5
- package/dist/browser/Cytoscape/index.cjs.map +1 -1
- package/dist/browser/Cytoscape/index.js +7 -5
- package/dist/browser/Cytoscape/index.js.map +1 -1
- package/dist/browser/components/ProvidedNodeRenderer.cjs +13 -11
- package/dist/browser/components/ProvidedNodeRenderer.cjs.map +1 -1
- package/dist/browser/components/ProvidedNodeRenderer.js +14 -12
- package/dist/browser/components/ProvidedNodeRenderer.js.map +1 -1
- package/dist/browser/components/RelationalGraph.cjs +3 -3
- package/dist/browser/components/RelationalGraph.cjs.map +1 -1
- package/dist/browser/components/RelationalGraph.d.cts.map +1 -1
- package/dist/browser/components/RelationalGraph.d.mts.map +1 -1
- package/dist/browser/components/RelationalGraph.d.ts.map +1 -1
- package/dist/browser/components/RelationalGraph.js +4 -4
- package/dist/browser/components/RelationalGraph.js.map +1 -1
- package/dist/browser/components/index.cjs +119 -81
- package/dist/browser/components/index.cjs.map +1 -1
- package/dist/browser/components/index.js +119 -81
- package/dist/browser/components/index.js.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.cjs +118 -80
- package/dist/browser/components/module/graph/GraphFlexBox.cjs.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.cts +1 -0
- package/dist/browser/components/module/graph/GraphFlexBox.d.cts.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.mts +1 -0
- package/dist/browser/components/module/graph/GraphFlexBox.d.mts.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.d.ts +1 -0
- package/dist/browser/components/module/graph/GraphFlexBox.d.ts.map +1 -1
- package/dist/browser/components/module/graph/GraphFlexBox.js +118 -80
- package/dist/browser/components/module/graph/GraphFlexBox.js.map +1 -1
- package/dist/browser/components/module/graph/NodeHover.cjs +17 -10
- package/dist/browser/components/module/graph/NodeHover.cjs.map +1 -1
- package/dist/browser/components/module/graph/NodeHover.d.cts.map +1 -1
- package/dist/browser/components/module/graph/NodeHover.d.mts.map +1 -1
- package/dist/browser/components/module/graph/NodeHover.d.ts.map +1 -1
- package/dist/browser/components/module/graph/NodeHover.js +20 -13
- package/dist/browser/components/module/graph/NodeHover.js.map +1 -1
- package/dist/browser/components/module/graph/Popper.cjs +2 -2
- package/dist/browser/components/module/graph/Popper.cjs.map +1 -1
- package/dist/browser/components/module/graph/Popper.d.cts +1 -1
- package/dist/browser/components/module/graph/Popper.d.cts.map +1 -1
- package/dist/browser/components/module/graph/Popper.d.mts +1 -1
- package/dist/browser/components/module/graph/Popper.d.mts.map +1 -1
- package/dist/browser/components/module/graph/Popper.d.ts +1 -1
- package/dist/browser/components/module/graph/Popper.d.ts.map +1 -1
- package/dist/browser/components/module/graph/Popper.js +3 -3
- package/dist/browser/components/module/graph/Popper.js.map +1 -1
- package/dist/browser/components/module/graph/index.cjs +118 -80
- package/dist/browser/components/module/graph/index.cjs.map +1 -1
- package/dist/browser/components/module/graph/index.js +118 -80
- package/dist/browser/components/module/graph/index.js.map +1 -1
- package/dist/browser/components/module/index.cjs +118 -80
- package/dist/browser/components/module/index.cjs.map +1 -1
- package/dist/browser/components/module/index.js +118 -80
- package/dist/browser/components/module/index.js.map +1 -1
- package/dist/browser/hooks/cytoscape/index.cjs +46 -28
- package/dist/browser/hooks/cytoscape/index.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/index.js +42 -24
- package/dist/browser/hooks/cytoscape/index.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeElements.cjs +5 -5
- package/dist/browser/hooks/cytoscape/useCytoscapeElements.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeElements.js +5 -5
- package/dist/browser/hooks/cytoscape/useCytoscapeElements.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.cjs +5 -3
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.js +5 -3
- package/dist/browser/hooks/cytoscape/useCytoscapeOptions.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeStyle.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/useCytoscapeStyle.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useNewElements.cjs +5 -22
- package/dist/browser/hooks/cytoscape/useNewElements.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/useNewElements.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/useNewElements.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/useNewElements.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/useNewElements.js +5 -22
- package/dist/browser/hooks/cytoscape/useNewElements.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.cjs +10 -8
- package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.js +10 -8
- package/dist/browser/hooks/cytoscape/useRelationalGraphOptions.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useSelectedElement.cjs +30 -3
- package/dist/browser/hooks/cytoscape/useSelectedElement.cjs.map +1 -1
- package/dist/browser/hooks/cytoscape/useSelectedElement.d.cts.map +1 -1
- package/dist/browser/hooks/cytoscape/useSelectedElement.d.mts.map +1 -1
- package/dist/browser/hooks/cytoscape/useSelectedElement.d.ts.map +1 -1
- package/dist/browser/hooks/cytoscape/useSelectedElement.js +30 -3
- package/dist/browser/hooks/cytoscape/useSelectedElement.js.map +1 -1
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.cjs +57 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.cjs.map +1 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.cts +4 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.cts.map +1 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.mts +4 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.mts.map +1 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.ts +4 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.d.ts.map +1 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.js +36 -0
- package/dist/browser/hooks/cytoscape/useToggleSelectedElement.js.map +1 -0
- package/dist/browser/hooks/index.cjs +46 -28
- package/dist/browser/hooks/index.cjs.map +1 -1
- package/dist/browser/hooks/index.js +42 -24
- package/dist/browser/hooks/index.js.map +1 -1
- package/dist/browser/index.cjs +123 -81
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +123 -81
- package/dist/browser/index.js.map +1 -1
- package/dist/docs.json +2026 -1305
- package/dist/node/Cytoscape/CytoscapeElements.cjs +5 -5
- package/dist/node/Cytoscape/CytoscapeElements.cjs.map +1 -1
- package/dist/node/Cytoscape/CytoscapeElements.d.cts +3 -1
- package/dist/node/Cytoscape/CytoscapeElements.d.cts.map +1 -1
- package/dist/node/Cytoscape/CytoscapeElements.d.mts +3 -1
- package/dist/node/Cytoscape/CytoscapeElements.d.mts.map +1 -1
- package/dist/node/Cytoscape/CytoscapeElements.d.ts +3 -1
- package/dist/node/Cytoscape/CytoscapeElements.d.ts.map +1 -1
- package/dist/node/Cytoscape/CytoscapeElements.js +5 -5
- package/dist/node/Cytoscape/CytoscapeElements.js.map +1 -1
- package/dist/node/Cytoscape/CytoscapeStyles.cjs +3 -0
- package/dist/node/Cytoscape/CytoscapeStyles.cjs.map +1 -1
- package/dist/node/Cytoscape/CytoscapeStyles.d.cts +1 -0
- package/dist/node/Cytoscape/CytoscapeStyles.d.cts.map +1 -1
- package/dist/node/Cytoscape/CytoscapeStyles.d.mts +1 -0
- package/dist/node/Cytoscape/CytoscapeStyles.d.mts.map +1 -1
- package/dist/node/Cytoscape/CytoscapeStyles.d.ts +1 -0
- package/dist/node/Cytoscape/CytoscapeStyles.d.ts.map +1 -1
- package/dist/node/Cytoscape/CytoscapeStyles.js +2 -0
- package/dist/node/Cytoscape/CytoscapeStyles.js.map +1 -1
- package/dist/node/Cytoscape/index.cjs +8 -5
- package/dist/node/Cytoscape/index.cjs.map +1 -1
- package/dist/node/Cytoscape/index.js +7 -5
- package/dist/node/Cytoscape/index.js.map +1 -1
- package/dist/node/components/ProvidedNodeRenderer.cjs +13 -11
- package/dist/node/components/ProvidedNodeRenderer.cjs.map +1 -1
- package/dist/node/components/ProvidedNodeRenderer.js +14 -12
- package/dist/node/components/ProvidedNodeRenderer.js.map +1 -1
- package/dist/node/components/RelationalGraph.cjs +3 -3
- package/dist/node/components/RelationalGraph.cjs.map +1 -1
- package/dist/node/components/RelationalGraph.d.cts.map +1 -1
- package/dist/node/components/RelationalGraph.d.mts.map +1 -1
- package/dist/node/components/RelationalGraph.d.ts.map +1 -1
- package/dist/node/components/RelationalGraph.js +4 -4
- package/dist/node/components/RelationalGraph.js.map +1 -1
- package/dist/node/components/index.cjs +120 -81
- package/dist/node/components/index.cjs.map +1 -1
- package/dist/node/components/index.js +119 -81
- package/dist/node/components/index.js.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.cjs +120 -81
- package/dist/node/components/module/graph/GraphFlexBox.cjs.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.cts +1 -0
- package/dist/node/components/module/graph/GraphFlexBox.d.cts.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.mts +1 -0
- package/dist/node/components/module/graph/GraphFlexBox.d.mts.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.d.ts +1 -0
- package/dist/node/components/module/graph/GraphFlexBox.d.ts.map +1 -1
- package/dist/node/components/module/graph/GraphFlexBox.js +118 -80
- package/dist/node/components/module/graph/GraphFlexBox.js.map +1 -1
- package/dist/node/components/module/graph/NodeHover.cjs +17 -10
- package/dist/node/components/module/graph/NodeHover.cjs.map +1 -1
- package/dist/node/components/module/graph/NodeHover.d.cts.map +1 -1
- package/dist/node/components/module/graph/NodeHover.d.mts.map +1 -1
- package/dist/node/components/module/graph/NodeHover.d.ts.map +1 -1
- package/dist/node/components/module/graph/NodeHover.js +20 -13
- package/dist/node/components/module/graph/NodeHover.js.map +1 -1
- package/dist/node/components/module/graph/Popper.cjs +2 -2
- package/dist/node/components/module/graph/Popper.cjs.map +1 -1
- package/dist/node/components/module/graph/Popper.d.cts +1 -1
- package/dist/node/components/module/graph/Popper.d.cts.map +1 -1
- package/dist/node/components/module/graph/Popper.d.mts +1 -1
- package/dist/node/components/module/graph/Popper.d.mts.map +1 -1
- package/dist/node/components/module/graph/Popper.d.ts +1 -1
- package/dist/node/components/module/graph/Popper.d.ts.map +1 -1
- package/dist/node/components/module/graph/Popper.js +3 -3
- package/dist/node/components/module/graph/Popper.js.map +1 -1
- package/dist/node/components/module/graph/index.cjs +120 -81
- package/dist/node/components/module/graph/index.cjs.map +1 -1
- package/dist/node/components/module/graph/index.js +118 -80
- package/dist/node/components/module/graph/index.js.map +1 -1
- package/dist/node/components/module/index.cjs +120 -81
- package/dist/node/components/module/index.cjs.map +1 -1
- package/dist/node/components/module/index.js +118 -80
- package/dist/node/components/module/index.js.map +1 -1
- package/dist/node/hooks/cytoscape/index.cjs +46 -28
- package/dist/node/hooks/cytoscape/index.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/index.js +42 -24
- package/dist/node/hooks/cytoscape/index.js.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeElements.cjs +5 -5
- package/dist/node/hooks/cytoscape/useCytoscapeElements.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeElements.js +5 -5
- package/dist/node/hooks/cytoscape/useCytoscapeElements.js.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.cjs +5 -3
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.js +5 -3
- package/dist/node/hooks/cytoscape/useCytoscapeOptions.js.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeStyle.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/useCytoscapeStyle.js.map +1 -1
- package/dist/node/hooks/cytoscape/useNewElements.cjs +5 -22
- package/dist/node/hooks/cytoscape/useNewElements.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/useNewElements.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/useNewElements.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/useNewElements.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/useNewElements.js +5 -22
- package/dist/node/hooks/cytoscape/useNewElements.js.map +1 -1
- package/dist/node/hooks/cytoscape/useRelationalGraphOptions.cjs +10 -8
- package/dist/node/hooks/cytoscape/useRelationalGraphOptions.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/useRelationalGraphOptions.js +10 -8
- package/dist/node/hooks/cytoscape/useRelationalGraphOptions.js.map +1 -1
- package/dist/node/hooks/cytoscape/useSelectedElement.cjs +30 -3
- package/dist/node/hooks/cytoscape/useSelectedElement.cjs.map +1 -1
- package/dist/node/hooks/cytoscape/useSelectedElement.d.cts.map +1 -1
- package/dist/node/hooks/cytoscape/useSelectedElement.d.mts.map +1 -1
- package/dist/node/hooks/cytoscape/useSelectedElement.d.ts.map +1 -1
- package/dist/node/hooks/cytoscape/useSelectedElement.js +30 -3
- package/dist/node/hooks/cytoscape/useSelectedElement.js.map +1 -1
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.cjs +61 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.cjs.map +1 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.cts +4 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.cts.map +1 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.mts +4 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.mts.map +1 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.ts +4 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.d.ts.map +1 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.js +36 -0
- package/dist/node/hooks/cytoscape/useToggleSelectedElement.js.map +1 -0
- package/dist/node/hooks/index.cjs +46 -28
- package/dist/node/hooks/index.cjs.map +1 -1
- package/dist/node/hooks/index.js +42 -24
- package/dist/node/hooks/index.js.map +1 -1
- package/dist/node/index.cjs +128 -81
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +123 -81
- package/dist/node/index.js.map +1 -1
- package/package.json +27 -27
- package/src/Cytoscape/CytoscapeElements.ts +4 -4
- package/src/Cytoscape/CytoscapeStyles.ts +2 -0
- package/src/components/RelationalGraph.stories.tsx +4 -1
- package/src/components/RelationalGraph.tsx +14 -6
- package/src/components/module/graph/GraphFlexBox.stories.tsx +7 -10
- package/src/components/module/graph/GraphFlexBox.tsx +9 -0
- package/src/components/module/graph/NodeHover.tsx +32 -20
- package/src/components/module/graph/Popper.tsx +14 -10
- package/src/hooks/cytoscape/useCytoscapeOptions.ts +6 -3
- package/src/hooks/cytoscape/useNewElements.tsx +0 -10
- package/src/hooks/cytoscape/useSelectedElement.tsx +8 -3
- package/src/hooks/cytoscape/useToggleSelectedElement.tsx +30 -0
- package/src/index.ts +1 -0
|
@@ -18,10 +18,29 @@ var ModuleCardParser = ({ module }) => {
|
|
|
18
18
|
// src/components/module/graph/GraphFlexBox.tsx
|
|
19
19
|
import { Button as Button2 } from "@mui/material";
|
|
20
20
|
|
|
21
|
+
// src/contexts/CytoscapeInstance/Context.ts
|
|
22
|
+
import { createContextEx } from "@xyo-network/react-shared";
|
|
23
|
+
var CytoscapeInstanceContext = createContextEx();
|
|
24
|
+
|
|
25
|
+
// src/contexts/CytoscapeInstance/Provider.tsx
|
|
26
|
+
import { useEffect, useState } from "react";
|
|
27
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
28
|
+
var CytoscapeInstanceProvider = ({ children, defaultInstance }) => {
|
|
29
|
+
const [cy, setCy] = useState(defaultInstance);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
setCy(defaultInstance);
|
|
32
|
+
}, [defaultInstance]);
|
|
33
|
+
return /* @__PURE__ */ jsx2(CytoscapeInstanceContext.Provider, { value: { cy, provided: true, setCy }, children });
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// src/contexts/CytoscapeInstance/use.ts
|
|
37
|
+
import { useContextEx } from "@xyo-network/react-shared";
|
|
38
|
+
var useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, "CytoscapeInstance", required);
|
|
39
|
+
|
|
21
40
|
// src/hooks/cytoscape/useCytoscapeElements.ts
|
|
22
41
|
import { useAsyncEffect } from "@xylabs/react-async-effect";
|
|
23
42
|
import { isNodeInstance as isNodeInstance3 } from "@xyo-network/node-model";
|
|
24
|
-
import { useEffect, useState } from "react";
|
|
43
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
25
44
|
|
|
26
45
|
// src/Cytoscape/CytoscapeElements.ts
|
|
27
46
|
import { isNodeInstance as isNodeInstance2 } from "@xyo-network/node-model";
|
|
@@ -118,7 +137,7 @@ var CytoscapeElements = class _CytoscapeElements {
|
|
|
118
137
|
try {
|
|
119
138
|
const childElements = await _CytoscapeElements.recurseNodes(module);
|
|
120
139
|
childElements?.forEach((module2) => {
|
|
121
|
-
const newNode = _CytoscapeElements.buildNode(module2, newRootNode.data.id);
|
|
140
|
+
const newNode = _CytoscapeElements.buildNode(module2, { rootNodeId: newRootNode.data.id });
|
|
122
141
|
newElements.push(newNode);
|
|
123
142
|
const newEdge = _CytoscapeElements.buildEdge(newRootNode, newNode);
|
|
124
143
|
newElements.push(newEdge);
|
|
@@ -129,7 +148,7 @@ var CytoscapeElements = class _CytoscapeElements {
|
|
|
129
148
|
return [];
|
|
130
149
|
}
|
|
131
150
|
}
|
|
132
|
-
static buildNode(module,
|
|
151
|
+
static buildNode(module, properties) {
|
|
133
152
|
const { address, config } = module;
|
|
134
153
|
const normalizedName = config.name ?? address.substring(0, 8);
|
|
135
154
|
return {
|
|
@@ -137,13 +156,13 @@ var CytoscapeElements = class _CytoscapeElements {
|
|
|
137
156
|
address,
|
|
138
157
|
id: address,
|
|
139
158
|
name: normalizedName,
|
|
140
|
-
|
|
141
|
-
|
|
159
|
+
type: parseModuleType(module),
|
|
160
|
+
...properties
|
|
142
161
|
}
|
|
143
162
|
};
|
|
144
163
|
}
|
|
145
164
|
static buildRootNode = (module) => {
|
|
146
|
-
return _CytoscapeElements.buildNode(module);
|
|
165
|
+
return _CytoscapeElements.buildNode(module, { root: true });
|
|
147
166
|
};
|
|
148
167
|
static normalizeName(name) {
|
|
149
168
|
if (!name)
|
|
@@ -231,10 +250,11 @@ var EdgeStyled = (lineColor, targetArrowColor) => ({
|
|
|
231
250
|
width: 3
|
|
232
251
|
}
|
|
233
252
|
});
|
|
253
|
+
var NodeBgStyles = (bgColor) => ["background-color", bgColor];
|
|
234
254
|
|
|
235
255
|
// src/hooks/cytoscape/useCytoscapeElements.ts
|
|
236
256
|
var useCytoscapeElements = (module) => {
|
|
237
|
-
const [elements, setElements] =
|
|
257
|
+
const [elements, setElements] = useState2([]);
|
|
238
258
|
useAsyncEffect(
|
|
239
259
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
240
260
|
async () => {
|
|
@@ -245,7 +265,7 @@ var useCytoscapeElements = (module) => {
|
|
|
245
265
|
},
|
|
246
266
|
[module]
|
|
247
267
|
);
|
|
248
|
-
|
|
268
|
+
useEffect2(() => {
|
|
249
269
|
let attachedListener = void 0;
|
|
250
270
|
let detachedListener = void 0;
|
|
251
271
|
if (module && isNodeInstance3(module)) {
|
|
@@ -276,13 +296,13 @@ import { useMemo as useMemo2 } from "react";
|
|
|
276
296
|
// src/hooks/cytoscape/useIcons.tsx
|
|
277
297
|
import { useTheme } from "@mui/material";
|
|
278
298
|
import { useMemo } from "react";
|
|
279
|
-
import { jsx as
|
|
299
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
280
300
|
var useIcons = () => {
|
|
281
301
|
const theme = useTheme();
|
|
282
302
|
const icons = useMemo(() => {
|
|
283
303
|
const iconMap = generateIconMap();
|
|
284
304
|
return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {
|
|
285
|
-
const icon = /* @__PURE__ */
|
|
305
|
+
const icon = /* @__PURE__ */ jsx3(IconComponent, { fontSize: "small" });
|
|
286
306
|
acc[name] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary));
|
|
287
307
|
return acc;
|
|
288
308
|
}, iconMap);
|
|
@@ -308,12 +328,14 @@ var useCytoscapeStyle = (hideLabels = false) => {
|
|
|
308
328
|
// src/hooks/cytoscape/useCytoscapeOptions.ts
|
|
309
329
|
var useCytoscapeOptions = (elements, style, layout) => {
|
|
310
330
|
const defaultStyle = useCytoscapeStyle();
|
|
331
|
+
const resolvedLayout = layout ?? ConcentricLayout;
|
|
332
|
+
const resolvedStyle = style ?? defaultStyle;
|
|
311
333
|
const options = useMemo3(() => {
|
|
312
|
-
if (elements &&
|
|
334
|
+
if (elements && resolvedLayout && resolvedStyle) {
|
|
313
335
|
return {
|
|
314
336
|
elements,
|
|
315
|
-
layout:
|
|
316
|
-
style:
|
|
337
|
+
layout: resolvedLayout,
|
|
338
|
+
style: resolvedStyle
|
|
317
339
|
};
|
|
318
340
|
}
|
|
319
341
|
}, [elements, layout, style]);
|
|
@@ -321,20 +343,10 @@ var useCytoscapeOptions = (elements, style, layout) => {
|
|
|
321
343
|
};
|
|
322
344
|
|
|
323
345
|
// src/hooks/cytoscape/useHoveredNode.tsx
|
|
324
|
-
import { useCallback, useEffect as
|
|
325
|
-
|
|
326
|
-
// src/contexts/CytoscapeInstance/Context.ts
|
|
327
|
-
import { createContextEx } from "@xyo-network/react-shared";
|
|
328
|
-
var CytoscapeInstanceContext = createContextEx();
|
|
329
|
-
|
|
330
|
-
// src/contexts/CytoscapeInstance/use.ts
|
|
331
|
-
import { useContextEx } from "@xyo-network/react-shared";
|
|
332
|
-
var useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, "CytoscapeInstance", required);
|
|
333
|
-
|
|
334
|
-
// src/hooks/cytoscape/useHoveredNode.tsx
|
|
346
|
+
import { useCallback, useEffect as useEffect3, useState as useState3 } from "react";
|
|
335
347
|
var useHoveredNode = (renderedElements) => {
|
|
336
348
|
const { cy } = useCytoscapeInstance(true);
|
|
337
|
-
const [hoveredNode, setHoveredNode] =
|
|
349
|
+
const [hoveredNode, setHoveredNode] = useState3();
|
|
338
350
|
const nodeListener = useCallback((node) => {
|
|
339
351
|
node.on("mouseover tap", () => {
|
|
340
352
|
setHoveredNode(node);
|
|
@@ -343,12 +355,12 @@ var useHoveredNode = (renderedElements) => {
|
|
|
343
355
|
setHoveredNode(void 0);
|
|
344
356
|
});
|
|
345
357
|
}, []);
|
|
346
|
-
|
|
358
|
+
useEffect3(() => {
|
|
347
359
|
if (renderedElements) {
|
|
348
360
|
renderedElements.nodes().forEach(nodeListener);
|
|
349
361
|
}
|
|
350
362
|
}, [nodeListener, renderedElements]);
|
|
351
|
-
|
|
363
|
+
useEffect3(() => {
|
|
352
364
|
cy?.ready(() => {
|
|
353
365
|
cy.nodes().forEach(nodeListener);
|
|
354
366
|
});
|
|
@@ -358,26 +370,17 @@ var useHoveredNode = (renderedElements) => {
|
|
|
358
370
|
|
|
359
371
|
// src/hooks/cytoscape/useNewElements.tsx
|
|
360
372
|
import { useModuleFromNode } from "@xyo-network/react-node";
|
|
361
|
-
import { useEffect as useEffect3 } from "react";
|
|
362
373
|
var useNewElements = (selectedElement) => {
|
|
363
|
-
const { cy } = useCytoscapeInstance(true);
|
|
364
374
|
const { address: selectedAddress } = selectedElement?.data() ?? {};
|
|
365
375
|
const [module] = useModuleFromNode(selectedAddress);
|
|
366
376
|
const newElements = useCytoscapeElements(module);
|
|
367
|
-
useEffect3(() => {
|
|
368
|
-
if (selectedAddress) {
|
|
369
|
-
const element = cy?.$(`node[id="${selectedAddress}"]`);
|
|
370
|
-
if (element?.length)
|
|
371
|
-
cy?.center(element);
|
|
372
|
-
}
|
|
373
|
-
}, [cy, selectedAddress]);
|
|
374
377
|
return newElements;
|
|
375
378
|
};
|
|
376
379
|
|
|
377
380
|
// src/hooks/cytoscape/useRelationalGraphOptions.tsx
|
|
378
|
-
import { useState as
|
|
381
|
+
import { useState as useState4 } from "react";
|
|
379
382
|
var useRelationalGraphOptions = (module) => {
|
|
380
|
-
const [hideLabels, setHideLabels] =
|
|
383
|
+
const [hideLabels, setHideLabels] = useState4(true);
|
|
381
384
|
const handleToggleLabels = () => {
|
|
382
385
|
setHideLabels((oldValue) => !oldValue);
|
|
383
386
|
};
|
|
@@ -388,10 +391,10 @@ var useRelationalGraphOptions = (module) => {
|
|
|
388
391
|
};
|
|
389
392
|
|
|
390
393
|
// src/hooks/cytoscape/useRenderNewElements.tsx
|
|
391
|
-
import { useEffect as useEffect4, useState as
|
|
394
|
+
import { useEffect as useEffect4, useState as useState5 } from "react";
|
|
392
395
|
var useRenderNewElements = (newElements = [], hideLabels) => {
|
|
393
396
|
const { cy } = useCytoscapeInstance(true);
|
|
394
|
-
const [renderedElements, setRenderedElements] =
|
|
397
|
+
const [renderedElements, setRenderedElements] = useState5();
|
|
395
398
|
useEffect4(() => {
|
|
396
399
|
if (newElements.length > 1) {
|
|
397
400
|
const renderedElements2 = cy?.add(newElements);
|
|
@@ -403,36 +406,60 @@ var useRenderNewElements = (newElements = [], hideLabels) => {
|
|
|
403
406
|
};
|
|
404
407
|
|
|
405
408
|
// src/hooks/cytoscape/useSelectedElement.tsx
|
|
406
|
-
import { useEffect as useEffect5, useState as
|
|
409
|
+
import { useEffect as useEffect5, useState as useState6 } from "react";
|
|
410
|
+
|
|
411
|
+
// src/hooks/cytoscape/useToggleSelectedElement.tsx
|
|
412
|
+
import { useTheme as useTheme3 } from "@mui/material";
|
|
413
|
+
var useToggleSelectedElement = (setSelectedElement) => {
|
|
414
|
+
const { cy } = useCytoscapeInstance(true);
|
|
415
|
+
const theme = useTheme3();
|
|
416
|
+
const updateStyles = (element, styles) => {
|
|
417
|
+
cy?.style().selector(`node[id="${element.data().id}"]`).style(...styles);
|
|
418
|
+
};
|
|
419
|
+
const toggleSelectedElement = (element) => {
|
|
420
|
+
setSelectedElement((previousSelectedElement) => {
|
|
421
|
+
if (previousSelectedElement) {
|
|
422
|
+
updateStyles(previousSelectedElement, NodeBgStyles(theme.palette.primary.main));
|
|
423
|
+
}
|
|
424
|
+
return element;
|
|
425
|
+
});
|
|
426
|
+
updateStyles(element, NodeBgStyles(theme.palette.secondary.main));
|
|
427
|
+
};
|
|
428
|
+
return toggleSelectedElement;
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
// src/hooks/cytoscape/useSelectedElement.tsx
|
|
407
432
|
var useSelectedElement = () => {
|
|
408
433
|
const { cy } = useCytoscapeInstance(true);
|
|
409
|
-
const [selectedElement, setSelectedElement] =
|
|
434
|
+
const [selectedElement, setSelectedElement] = useState6();
|
|
435
|
+
const toggleSelectedElement = useToggleSelectedElement(setSelectedElement);
|
|
410
436
|
useEffect5(() => {
|
|
411
437
|
const listener = (event) => {
|
|
412
438
|
const element = event.target[0];
|
|
413
|
-
if (element.isNode())
|
|
414
|
-
|
|
439
|
+
if (element.isNode()) {
|
|
440
|
+
toggleSelectedElement(element);
|
|
441
|
+
}
|
|
415
442
|
};
|
|
416
443
|
cy?.on("select", listener);
|
|
417
444
|
return () => {
|
|
418
445
|
cy?.off("select", listener);
|
|
419
446
|
};
|
|
420
|
-
}, [cy,
|
|
447
|
+
}, [cy, toggleSelectedElement]);
|
|
421
448
|
return selectedElement;
|
|
422
449
|
};
|
|
423
450
|
|
|
424
451
|
// src/components/cytoscape-extensions/WithExtensions.tsx
|
|
425
452
|
import { use } from "cytoscape";
|
|
426
453
|
import cola from "cytoscape-cola";
|
|
427
|
-
import { useEffect as useEffect6, useState as
|
|
428
|
-
import { Fragment, jsx as
|
|
454
|
+
import { useEffect as useEffect6, useState as useState7 } from "react";
|
|
455
|
+
import { Fragment, jsx as jsx4 } from "react/jsx-runtime";
|
|
429
456
|
var WithExtensions = ({ children }) => {
|
|
430
|
-
const [initialized, setInitialized] =
|
|
457
|
+
const [initialized, setInitialized] = useState7(false);
|
|
431
458
|
useEffect6(() => {
|
|
432
459
|
use(cola);
|
|
433
460
|
setInitialized(true);
|
|
434
461
|
}, []);
|
|
435
|
-
return /* @__PURE__ */
|
|
462
|
+
return /* @__PURE__ */ jsx4(Fragment, { children: initialized ? children : void 0 });
|
|
436
463
|
};
|
|
437
464
|
|
|
438
465
|
// src/components/RelationalGraph.tsx
|
|
@@ -440,10 +467,10 @@ import { Button, ButtonGroup, styled } from "@mui/material";
|
|
|
440
467
|
import { FlexCol, FlexRow } from "@xylabs/react-flexbox";
|
|
441
468
|
import { useShareForwardedRef } from "@xyo-network/react-shared";
|
|
442
469
|
import cytoscape from "cytoscape";
|
|
443
|
-
import { forwardRef, useEffect as useEffect7, useState as
|
|
444
|
-
import { jsx as
|
|
470
|
+
import { forwardRef, useEffect as useEffect7, useState as useState8 } from "react";
|
|
471
|
+
import { Fragment as Fragment2, jsx as jsx5, jsxs } from "react/jsx-runtime";
|
|
445
472
|
var NodeRelationalGraphFlexBox = forwardRef(({ actions, children, options, ...props }, ref) => {
|
|
446
|
-
const [cy, setCy] =
|
|
473
|
+
const [cy, setCy] = useState8();
|
|
447
474
|
const { setCy: setCyContext } = useCytoscapeInstance();
|
|
448
475
|
const sharedRef = useShareForwardedRef(ref);
|
|
449
476
|
const handleReset = () => {
|
|
@@ -463,11 +490,11 @@ var NodeRelationalGraphFlexBox = forwardRef(({ actions, children, options, ...pr
|
|
|
463
490
|
setCyContext?.(cy);
|
|
464
491
|
}, [cy, setCyContext]);
|
|
465
492
|
return /* @__PURE__ */ jsxs(FlexCol, { ...props, children: [
|
|
466
|
-
/* @__PURE__ */
|
|
493
|
+
/* @__PURE__ */ jsx5(ActionsContainer, { children: /* @__PURE__ */ jsx5(Fragment2, { children: actions ? /* @__PURE__ */ jsxs(ButtonGroup, { children: [
|
|
467
494
|
actions,
|
|
468
|
-
/* @__PURE__ */
|
|
469
|
-
] }) }),
|
|
470
|
-
/* @__PURE__ */
|
|
495
|
+
/* @__PURE__ */ jsx5(Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset View" })
|
|
496
|
+
] }) : /* @__PURE__ */ jsx5(Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset" }) }) }),
|
|
497
|
+
/* @__PURE__ */ jsx5(FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" }),
|
|
471
498
|
children
|
|
472
499
|
] });
|
|
473
500
|
});
|
|
@@ -482,34 +509,37 @@ var ActionsContainer = styled(FlexRow, { name: "ActionsContainer" })(({ theme })
|
|
|
482
509
|
}));
|
|
483
510
|
|
|
484
511
|
// src/components/module/graph/NodeHover.tsx
|
|
485
|
-
import {
|
|
512
|
+
import { FlexCol as FlexCol3 } from "@xylabs/react-flexbox";
|
|
513
|
+
import { useEffect as useEffect8, useLayoutEffect, useRef, useState as useState9 } from "react";
|
|
486
514
|
|
|
487
515
|
// src/components/module/graph/Popper.tsx
|
|
488
516
|
import { alpha, Chip, Popper, Typography } from "@mui/material";
|
|
489
517
|
import { FlexCol as FlexCol2, FlexRow as FlexRow2 } from "@xylabs/react-flexbox";
|
|
490
518
|
import { Identicon } from "@xylabs/react-identicon";
|
|
491
|
-
import { jsx as
|
|
519
|
+
import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
492
520
|
var ModuleHoverPopper = ({ address, element, name, ...props }) => {
|
|
493
|
-
return /* @__PURE__ */
|
|
521
|
+
return /* @__PURE__ */ jsx6(Fragment3, { children: element ? /* @__PURE__ */ jsx6(Popper, { anchorEl: element, ...props, children: /* @__PURE__ */ jsxs2(FlexCol2, { gap: 2, p: 2, paper: true, sx: { backgroundColor: (theme) => alpha(theme.palette.background.paper, 0.95) }, children: [
|
|
494
522
|
/* @__PURE__ */ jsxs2(FlexRow2, { gap: 2, children: [
|
|
495
|
-
/* @__PURE__ */
|
|
496
|
-
/* @__PURE__ */
|
|
523
|
+
/* @__PURE__ */ jsx6(Identicon, { value: address, size: 24 }),
|
|
524
|
+
/* @__PURE__ */ jsx6(Typography, { children: name })
|
|
497
525
|
] }),
|
|
498
|
-
/* @__PURE__ */
|
|
499
|
-
] }) });
|
|
526
|
+
/* @__PURE__ */ jsx6(Chip, { label: address, color: "primary" })
|
|
527
|
+
] }) }) : null });
|
|
500
528
|
};
|
|
501
529
|
|
|
502
530
|
// src/components/module/graph/NodeHover.tsx
|
|
503
|
-
import { Fragment as
|
|
531
|
+
import { Fragment as Fragment4, jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
504
532
|
var ModuleGraphNodeHover = ({ node }) => {
|
|
505
533
|
const { address, name } = node?.data() ?? {};
|
|
506
|
-
const [boundingBox, setBoundingBox] =
|
|
534
|
+
const [boundingBox, setBoundingBox] = useState9(node?.renderedBoundingBox());
|
|
507
535
|
const ref = useRef(null);
|
|
508
|
-
const [currentEl, setCurrentEl] =
|
|
509
|
-
|
|
510
|
-
|
|
536
|
+
const [currentEl, setCurrentEl] = useState9(null);
|
|
537
|
+
useEffect8(() => {
|
|
538
|
+
setCurrentEl(null);
|
|
539
|
+
}, [node]);
|
|
540
|
+
useEffect8(() => {
|
|
541
|
+
if (node) {
|
|
511
542
|
setBoundingBox(node.renderedBoundingBox());
|
|
512
|
-
setCurrentEl(ref.current);
|
|
513
543
|
}
|
|
514
544
|
const listener = () => {
|
|
515
545
|
setBoundingBox(node?.renderedBoundingBox());
|
|
@@ -519,12 +549,16 @@ var ModuleGraphNodeHover = ({ node }) => {
|
|
|
519
549
|
node?.off("position", void 0, listener);
|
|
520
550
|
};
|
|
521
551
|
}, [node]);
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
552
|
+
useLayoutEffect(() => {
|
|
553
|
+
setCurrentEl(ref.current);
|
|
554
|
+
}, [boundingBox]);
|
|
555
|
+
return /* @__PURE__ */ jsxs3(Fragment4, { children: [
|
|
556
|
+
/* @__PURE__ */ jsx7(
|
|
557
|
+
FlexCol3,
|
|
525
558
|
{
|
|
526
559
|
ref,
|
|
527
|
-
|
|
560
|
+
sx: {
|
|
561
|
+
// For easier debugging of the 'ghost' element that matches the hovered cytoscape node
|
|
528
562
|
// backgroundColor: '#fff',
|
|
529
563
|
// opacity: 0.25,
|
|
530
564
|
cursor: "pointer",
|
|
@@ -537,30 +571,34 @@ var ModuleGraphNodeHover = ({ node }) => {
|
|
|
537
571
|
}
|
|
538
572
|
}
|
|
539
573
|
),
|
|
540
|
-
/* @__PURE__ */
|
|
541
|
-
] })
|
|
574
|
+
node ? /* @__PURE__ */ jsx7(Fragment4, { children: /* @__PURE__ */ jsx7(ModuleHoverPopper, { address, element: currentEl, name, placement: "top", open: true, sx: { zIndex: 2 } }) }) : null
|
|
575
|
+
] });
|
|
542
576
|
};
|
|
543
577
|
|
|
544
578
|
// src/components/module/graph/GraphFlexBox.tsx
|
|
545
|
-
import { jsx as
|
|
579
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
546
580
|
var ModuleGraphFlexBox = ({ rootModule, ...props }) => {
|
|
547
581
|
const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? void 0);
|
|
548
582
|
const selectedElement = useSelectedElement();
|
|
549
583
|
const newElements = useNewElements(selectedElement);
|
|
550
584
|
const renderedElements = useRenderNewElements(newElements, hideLabels);
|
|
551
585
|
const hoveredNode = useHoveredNode(renderedElements);
|
|
552
|
-
return /* @__PURE__ */
|
|
586
|
+
return /* @__PURE__ */ jsx8(WithExtensions, { children: /* @__PURE__ */ jsx8(
|
|
553
587
|
NodeRelationalGraphFlexBox,
|
|
554
588
|
{
|
|
555
|
-
actions: /* @__PURE__ */
|
|
589
|
+
actions: /* @__PURE__ */ jsx8(Button2, { size: "small", onClick: handleToggleLabels, variant: "contained", children: "Toggle Labels" }),
|
|
556
590
|
options,
|
|
557
591
|
...props,
|
|
558
|
-
children: /* @__PURE__ */
|
|
592
|
+
children: /* @__PURE__ */ jsx8(ModuleGraphNodeHover, { node: hoveredNode })
|
|
559
593
|
}
|
|
560
594
|
) });
|
|
561
595
|
};
|
|
596
|
+
var ModuleGraphFlexBoxWithProvider = (props) => {
|
|
597
|
+
return /* @__PURE__ */ jsx8(CytoscapeInstanceProvider, { children: /* @__PURE__ */ jsx8(ModuleGraphFlexBox, { ...props }) });
|
|
598
|
+
};
|
|
562
599
|
export {
|
|
563
600
|
ModuleCardParser,
|
|
564
|
-
ModuleGraphFlexBox
|
|
601
|
+
ModuleGraphFlexBox,
|
|
602
|
+
ModuleGraphFlexBoxWithProvider
|
|
565
603
|
};
|
|
566
604
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../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":["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":["Button","isNodeInstance","isNodeInstance","isArchivistInstance","isDivinerInstance","module","isNodeInstance","isNodeInstance","useMemo","useTheme","useMemo","jsx","useTheme","useMemo","useMemo","useEffect","useState","useState","useEffect","useEffect","useEffect","useState","useState","useEffect","useState","useState","useEffect","renderedElements","useEffect","useState","useState","useEffect","useEffect","useState","jsx","useEffect","useState","jsx","useState","useEffect","useState","FlexCol","FlexRow","jsx","jsxs","Fragment","jsx","jsxs","useState","jsx","Button"]}
|
|
1
|
+
{"version":3,"sources":["../../../../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":["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":["Button","jsx","isNodeInstance","useEffect","useState","isNodeInstance","isArchivistInstance","isDivinerInstance","module","isNodeInstance","useState","useEffect","isNodeInstance","useMemo","useTheme","useMemo","jsx","useTheme","useMemo","useMemo","useEffect","useState","useState","useEffect","useState","useState","useEffect","useState","useState","useEffect","renderedElements","useEffect","useState","useTheme","useTheme","useState","useEffect","useEffect","useState","jsx","useEffect","useState","Fragment","jsx","useState","useEffect","FlexCol","useEffect","useState","FlexCol","FlexRow","Fragment","jsx","jsxs","Fragment","jsx","jsxs","useState","useEffect","FlexCol","jsx","Button"]}
|