@xyo-network/react-node-renderer 2.77.0 → 2.77.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/browser/components/relational/graph/Graph.d.cts +0 -1
  2. package/dist/browser/components/relational/graph/Graph.d.cts.map +1 -1
  3. package/dist/browser/components/relational/graph/Graph.d.mts +0 -1
  4. package/dist/browser/components/relational/graph/Graph.d.mts.map +1 -1
  5. package/dist/browser/components/relational/graph/Graph.d.ts +0 -1
  6. package/dist/browser/components/relational/graph/Graph.d.ts.map +1 -1
  7. package/dist/browser/index.cjs +1 -840
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/index.js +1 -815
  10. package/dist/browser/index.js.map +1 -1
  11. package/dist/neutral/components/relational/graph/Graph.d.cts +0 -1
  12. package/dist/neutral/components/relational/graph/Graph.d.cts.map +1 -1
  13. package/dist/neutral/components/relational/graph/Graph.d.mts +0 -1
  14. package/dist/neutral/components/relational/graph/Graph.d.mts.map +1 -1
  15. package/dist/neutral/components/relational/graph/Graph.d.ts +0 -1
  16. package/dist/neutral/components/relational/graph/Graph.d.ts.map +1 -1
  17. package/dist/neutral/index.cjs +1 -840
  18. package/dist/neutral/index.cjs.map +1 -1
  19. package/dist/neutral/index.js +1 -815
  20. package/dist/neutral/index.js.map +1 -1
  21. package/dist/node/components/relational/graph/Graph.d.cts +0 -1
  22. package/dist/node/components/relational/graph/Graph.d.cts.map +1 -1
  23. package/dist/node/components/relational/graph/Graph.d.mts +0 -1
  24. package/dist/node/components/relational/graph/Graph.d.mts.map +1 -1
  25. package/dist/node/components/relational/graph/Graph.d.ts +0 -1
  26. package/dist/node/components/relational/graph/Graph.d.ts.map +1 -1
  27. package/dist/node/index.cjs +1 -880
  28. package/dist/node/index.cjs.map +1 -1
  29. package/dist/node/index.js +1 -827
  30. package/dist/node/index.js.map +1 -1
  31. package/package.json +10 -9
@@ -1,881 +1,2 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/index.ts
31
- var src_exports = {};
32
- __export(src_exports, {
33
- ColaLayout: () => ColaLayout,
34
- ConcentricLayout: () => ConcentricLayout,
35
- CyIconSet: () => CyIconSet,
36
- CytoscapeElements: () => CytoscapeElements,
37
- CytoscapeInstanceContext: () => CytoscapeInstanceContext,
38
- CytoscapeInstanceProvider: () => CytoscapeInstanceProvider,
39
- EdgeStyled: () => EdgeStyled,
40
- ModuleCardParser: () => ModuleCardParser,
41
- ModuleGraphFlexBox: () => ModuleGraphFlexBox,
42
- ModuleGraphFlexBoxWithProvider: () => ModuleGraphFlexBoxWithProvider,
43
- Node: () => Node,
44
- NodeAsRoot: () => NodeAsRoot,
45
- NodeRelationalGraph: () => NodeRelationalGraph,
46
- NodeRelationalGraphFlexBox: () => NodeRelationalGraphFlexBox,
47
- NodeWithName: () => NodeWithName,
48
- ProvidedNodeRenderer: () => ProvidedNodeRenderer,
49
- encodeSvg: () => encodeSvg,
50
- generateIconMap: () => generateIconMap,
51
- parseModuleType: () => parseModuleType,
52
- useCytoscapeElements: () => useCytoscapeElements,
53
- useCytoscapeInstance: () => useCytoscapeInstance,
54
- useCytoscapeOptions: () => useCytoscapeOptions,
55
- useElements: () => useElements,
56
- useModuleDetails: () => useModuleDetails,
57
- useRelationalGraphOptions: () => useRelationalGraphOptions
58
- });
59
- module.exports = __toCommonJS(src_exports);
60
-
61
- // src/components/module/CardParser.tsx
62
- var import_archivist_model = require("@xyo-network/archivist-model");
63
- var import_diviner_model = require("@xyo-network/diviner-model");
64
- var import_react_archivist = require("@xyo-network/react-archivist");
65
- var import_react_module = require("@xyo-network/react-module");
66
- var import_jsx_runtime = require("react/jsx-runtime");
67
- var ModuleCardParser = ({ mod }) => {
68
- switch (true) {
69
- case (0, import_archivist_model.isArchivistInstance)(mod): {
70
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_archivist.ArchivistCard, { mod: (0, import_archivist_model.asArchivistInstance)(mod) });
71
- }
72
- case (0, import_diviner_model.isDivinerInstance)(mod): {
73
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_module.DivinerCard, { mod: (0, import_diviner_model.asDivinerInstance)(mod) });
74
- }
75
- default: {
76
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_module.ModuleCard, { mod });
77
- }
78
- }
79
- };
80
-
81
- // src/components/module/graph/GraphFlexBox.tsx
82
- var import_material7 = require("@mui/material");
83
- var import_react15 = require("react");
84
-
85
- // src/contexts/CytoscapeInstance/Context.ts
86
- var import_react_shared = require("@xyo-network/react-shared");
87
- var CytoscapeInstanceContext = (0, import_react_shared.createContextEx)();
88
-
89
- // src/contexts/CytoscapeInstance/Provider.tsx
90
- var import_react = require("react");
91
- var import_jsx_runtime2 = require("react/jsx-runtime");
92
- var CytoscapeInstanceProvider = ({ children, defaultInstance }) => {
93
- const [cy, setCy] = (0, import_react.useState)(defaultInstance);
94
- (0, import_react.useEffect)(() => {
95
- setCy(defaultInstance);
96
- }, [defaultInstance]);
97
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CytoscapeInstanceContext.Provider, { value: { cy, provided: true, setCy }, children });
98
- };
99
-
100
- // src/contexts/CytoscapeInstance/use.ts
101
- var import_react_shared2 = require("@xyo-network/react-shared");
102
- var useCytoscapeInstance = (required = false) => (0, import_react_shared2.useContextEx)(CytoscapeInstanceContext, "CytoscapeInstance", required);
103
-
104
- // src/hooks/cytoscape/elements/useCytoscapeElements.ts
105
- var import_react_async_effect = require("@xylabs/react-async-effect");
106
- var import_node_model2 = require("@xyo-network/node-model");
107
- var import_react2 = require("react");
108
-
109
- // src/Cytoscape/CytoscapeElements.ts
110
- var import_exists = require("@xylabs/exists");
111
-
112
- // src/Cytoscape/lib/encodeSvg.ts
113
- var import_server = require("react-dom/server");
114
- var dataUri = "data:image/svg+xml,";
115
- var encodeSvg = (reactElement, color) => {
116
- const svgString = (0, import_server.renderToStaticMarkup)(reactElement);
117
- const doc = new DOMParser().parseFromString(svgString, "text/html");
118
- const svgElement = doc.querySelectorAll("svg")[0];
119
- if (svgElement) {
120
- svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg");
121
- svgElement.setAttribute("height", "100");
122
- svgElement.style.fill = color ?? "black";
123
- }
124
- return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`;
125
- };
126
-
127
- // src/Cytoscape/lib/iconMap.ts
128
- var generateIconMap = () => ({
129
- archivist: "",
130
- bridge: "",
131
- diviner: "",
132
- // eslint-disable-next-line id-denylist
133
- module: "",
134
- node: "",
135
- sentinel: "",
136
- witness: ""
137
- });
138
-
139
- // src/Cytoscape/lib/layout/ColaLayout.ts
140
- var ColaLayout = {
141
- centerGraph: false,
142
- convergenceThreshold: 0.01,
143
- name: "cola"
144
- };
145
-
146
- // src/Cytoscape/lib/layout/ConcentricLayout.ts
147
- var ConcentricLayout = {
148
- concentric: function(node) {
149
- return node.degree(false);
150
- },
151
- levelWidth: function() {
152
- return 2;
153
- },
154
- minNodeSpacing: 75,
155
- name: "concentric"
156
- };
157
-
158
- // src/Cytoscape/lib/parseModuleType.ts
159
- var import_archivist_model2 = require("@xyo-network/archivist-model");
160
- var import_bridge_model = require("@xyo-network/bridge-model");
161
- var import_diviner_model2 = require("@xyo-network/diviner-model");
162
- var import_node_model = require("@xyo-network/node-model");
163
- var import_sentinel_model = require("@xyo-network/sentinel-model");
164
- var import_witness_model = require("@xyo-network/witness-model");
165
- var parseModuleType = (mod) => {
166
- let type = "module";
167
- if (mod) {
168
- if ((0, import_archivist_model2.isArchivistInstance)(mod)) {
169
- type = "archivist";
170
- } else if ((0, import_bridge_model.isBridgeInstance)(mod)) {
171
- type = "bridge";
172
- } else if ((0, import_diviner_model2.isDivinerInstance)(mod)) {
173
- type = "diviner";
174
- } else if ((0, import_node_model.isNodeInstance)(mod)) {
175
- type = "node";
176
- } else if ((0, import_sentinel_model.isSentinelInstance)(mod)) {
177
- type = "sentinel";
178
- } else if ((0, import_witness_model.isWitnessModule)(mod)) {
179
- type = "witness";
180
- } else {
181
- type = "module";
182
- }
183
- }
184
- return type;
185
- };
186
-
187
- // src/Cytoscape/CytoscapeElements.ts
188
- var CytoscapeElements = {
189
- MaxNameLength: 20,
190
- buildEdge(rootNode, newNode, properties) {
191
- return {
192
- data: {
193
- id: `${rootNode.data.id}/${newNode.data.id}`,
194
- source: rootNode.data.id,
195
- target: newNode.data.id,
196
- ...properties
197
- }
198
- };
199
- },
200
- async buildElements(mod) {
201
- const info = await CytoscapeElements.recurseNodes(mod);
202
- const newElements = await this.buildElementsFromInfo(info, void 0, ["activeNode"]);
203
- return newElements;
204
- },
205
- async buildElementsFromInfo(info, root, classes = []) {
206
- const newNode = CytoscapeElements.buildNode(info.mod, { childCount: info.children.length, depth: info.depth }, classes);
207
- const newEdge = root ? CytoscapeElements.buildEdge(root, newNode, { depth: info.depth, siblingCount: info.children.length }) : void 0;
208
- const newElements = [newNode];
209
- if (newEdge) {
210
- newElements.push(newEdge);
211
- }
212
- for (const childInfo of info.children) {
213
- newElements.push(...await this.buildElementsFromInfo(childInfo, newNode));
214
- }
215
- return newElements;
216
- },
217
- buildNode(mod, properties, classes) {
218
- const { address, id } = mod;
219
- return {
220
- classes,
221
- data: {
222
- address,
223
- id: address,
224
- name: id,
225
- type: parseModuleType(mod),
226
- ...properties
227
- }
228
- };
229
- },
230
- buildRootNode: (mod) => {
231
- return CytoscapeElements.buildNode(mod, {}, ["activeNode"]);
232
- },
233
- normalizeName(name) {
234
- if (!name)
235
- return;
236
- if (name.length > this.MaxNameLength)
237
- return `${name.slice(0, 20)}...`;
238
- return name;
239
- },
240
- async recurseNodes(root, maxDepth = 10, depth = 1) {
241
- const info = { children: [], depth, mod: root };
242
- if (maxDepth > 0) {
243
- const children = await root.resolve("*", { direction: "down", maxDepth: 1 });
244
- info.children = (await Promise.all(
245
- children.map(async (child) => {
246
- if (child.address !== root.address) {
247
- return await this.recurseNodes(child, maxDepth - 1, depth + 1);
248
- }
249
- })
250
- )).filter(import_exists.exists);
251
- }
252
- return info;
253
- }
254
- };
255
-
256
- // src/Cytoscape/CytoscapeIcons.tsx
257
- var import_icons_material = require("@mui/icons-material");
258
- var CyIconSet = {
259
- archivist: import_icons_material.Inventory2Rounded,
260
- bridge: import_icons_material.InsertLinkRounded,
261
- diviner: import_icons_material.BubbleChartRounded,
262
- // eslint-disable-next-line id-denylist
263
- module: import_icons_material.QuestionMarkRounded,
264
- node: import_icons_material.Hub,
265
- sentinel: import_icons_material.TimerRounded,
266
- witness: import_icons_material.VisibilityRounded
267
- };
268
-
269
- // src/Cytoscape/CytoscapeStyles.ts
270
- var NodeWithName = (color, outlineColor) => ({
271
- selector: "node[name]",
272
- style: {
273
- color,
274
- "font-family": "Lexend Deca, Helvetica, sans-serif",
275
- "font-size": 12,
276
- "overlay-padding": "6px",
277
- "text-halign": "center",
278
- "text-outline-color": outlineColor,
279
- "text-outline-width": "1px",
280
- "text-valign": "top"
281
- }
282
- });
283
- var Node = (icons, bgColor, hideLabels = false) => ({
284
- selector: "node",
285
- style: {
286
- "background-color": bgColor,
287
- "background-height": "75%",
288
- "background-image": (elem) => icons[elem.data("type")],
289
- "background-width": "24",
290
- label: hideLabels ? void 0 : "data(name)",
291
- shape: "round-rectangle"
292
- }
293
- });
294
- var NodeAsRoot = (bgColor) => ({
295
- selector: ".activeNode",
296
- style: {
297
- "background-color": bgColor
298
- }
299
- });
300
- var EdgeStyled = (lineColor, targetArrowColor) => ({
301
- selector: "edge",
302
- style: {
303
- "curve-style": "bezier",
304
- "line-color": lineColor,
305
- "line-opacity": 0.1,
306
- "target-arrow-color": targetArrowColor,
307
- "target-arrow-shape": "triangle",
308
- width: 3
309
- }
310
- });
311
-
312
- // src/hooks/cytoscape/elements/useCytoscapeElements.ts
313
- var useCytoscapeElements = (mod) => {
314
- const [elements, setElements] = (0, import_react2.useState)([]);
315
- (0, import_react_async_effect.useAsyncEffect)(
316
- // eslint-disable-next-line react-hooks/exhaustive-deps
317
- async () => {
318
- const moduleInstance = mod == null ? void 0 : mod.deref();
319
- if (moduleInstance) {
320
- const newElements = await CytoscapeElements.buildElements(moduleInstance) ?? [];
321
- setElements(newElements);
322
- }
323
- },
324
- [mod]
325
- );
326
- (0, import_react2.useEffect)(() => {
327
- let attachedListener;
328
- let detachedListener;
329
- if (mod && (0, import_node_model2.isNodeInstance)(mod)) {
330
- attachedListener = mod.on("moduleAttached", async () => {
331
- const newElements = await CytoscapeElements.buildElements(mod) ?? [];
332
- setElements(newElements);
333
- });
334
- detachedListener = mod.on("moduleDetached", async () => {
335
- const newElements = await CytoscapeElements.buildElements(mod) ?? [];
336
- setElements(newElements);
337
- });
338
- }
339
- return () => {
340
- attachedListener == null ? void 0 : attachedListener();
341
- detachedListener == null ? void 0 : detachedListener();
342
- };
343
- }, [mod]);
344
- return elements;
345
- };
346
-
347
- // src/hooks/cytoscape/elements/useHoveredNode.tsx
348
- var import_react3 = require("react");
349
- var useHoveredNode = (renderedElements) => {
350
- const { cy } = useCytoscapeInstance(true);
351
- const [hoveredNode, setHoveredNode] = (0, import_react3.useState)();
352
- const nodeListener = (0, import_react3.useCallback)((node) => {
353
- node.on("mouseover tap", () => {
354
- setHoveredNode(node);
355
- });
356
- }, []);
357
- (0, import_react3.useEffect)(() => {
358
- if (renderedElements) {
359
- renderedElements.nodes().forEach(nodeListener);
360
- }
361
- }, [nodeListener, renderedElements]);
362
- (0, import_react3.useEffect)(() => {
363
- var _a;
364
- (_a = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a.ready(() => {
365
- var _a2;
366
- (_a2 = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a2.nodes().forEach(nodeListener);
367
- });
368
- }, [cy, nodeListener]);
369
- return [hoveredNode, setHoveredNode];
370
- };
371
-
372
- // src/hooks/cytoscape/elements/useNewElements.tsx
373
- var import_react_node = require("@xyo-network/react-node");
374
- var import_react4 = require("react");
375
- var useNewElements = (selectedElement) => {
376
- const selectedAddress = (0, import_react4.useMemo)(() => {
377
- const { address: selectedAddress2 } = (selectedElement == null ? void 0 : selectedElement.data()) ?? {};
378
- return selectedAddress2;
379
- }, [selectedElement]);
380
- const [mod] = (0, import_react_node.useWeakModuleFromNode)(selectedAddress);
381
- const newElements = useCytoscapeElements(mod);
382
- return newElements;
383
- };
384
-
385
- // src/hooks/cytoscape/elements/useRenderNewElements.tsx
386
- var import_react5 = require("react");
387
- var useRenderNewElements = (newElements = [], hideLabels) => {
388
- const { cy } = useCytoscapeInstance(true);
389
- const [renderedElements, setRenderedElements] = (0, import_react5.useState)();
390
- (0, import_react5.useEffect)(() => {
391
- var _a, _b;
392
- if (newElements.length > 1) {
393
- const renderedElements2 = (_a = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a.add(newElements);
394
- setRenderedElements(renderedElements2);
395
- (_b = cy == null ? void 0 : cy.deref()) == null ? void 0 : _b.layout(ColaLayout).run();
396
- }
397
- }, [cy, hideLabels, newElements]);
398
- return renderedElements;
399
- };
400
-
401
- // src/hooks/cytoscape/elements/useSelectedElement.tsx
402
- var import_react6 = require("react");
403
- var useSelectedElement = () => {
404
- const [selectedElement, setSelectedElement] = (0, import_react6.useState)();
405
- const { cy } = useCytoscapeInstance(true);
406
- const updateStyles = (element) => {
407
- var _a;
408
- const nodes = (_a = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a.nodes();
409
- nodes == null ? void 0 : nodes.toggleClass("activeNode", false);
410
- element.toggleClass("activeNode", true);
411
- };
412
- const toggleSelectedElement = (address) => {
413
- var _a, _b;
414
- const selectedNode = (_b = (_a = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a.nodes(`[id="${address}"]`)) == null ? void 0 : _b[0];
415
- if (selectedNode) {
416
- setSelectedElement(selectedNode);
417
- updateStyles(selectedNode);
418
- }
419
- };
420
- return { selectedElement, toggleSelectedElement };
421
- };
422
-
423
- // src/hooks/cytoscape/elements/useElements.tsx
424
- var useElements = (hideLabels) => {
425
- const { selectedElement, toggleSelectedElement } = useSelectedElement();
426
- const newElements = useNewElements(selectedElement);
427
- const renderedElements = useRenderNewElements(newElements, hideLabels);
428
- const [hoveredNode, setHoveredNode] = useHoveredNode(renderedElements);
429
- return { hoveredNode, setHoveredNode, toggleSelectedElement };
430
- };
431
-
432
- // src/hooks/cytoscape/useCytoscapeOptions.ts
433
- var import_react9 = require("react");
434
-
435
- // src/hooks/cytoscape/useCytoscapeStyle.tsx
436
- var import_material2 = require("@mui/material");
437
- var import_react8 = require("react");
438
-
439
- // src/hooks/cytoscape/useIcons.tsx
440
- var import_material = require("@mui/material");
441
- var import_react7 = require("react");
442
- var import_jsx_runtime3 = require("react/jsx-runtime");
443
- var useIcons = () => {
444
- const theme = (0, import_material.useTheme)();
445
- const icons = (0, import_react7.useMemo)(() => {
446
- const iconMap = generateIconMap();
447
- return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {
448
- const icon = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(IconComponent, { fontSize: "small" });
449
- acc[name] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary));
450
- return acc;
451
- }, iconMap);
452
- }, [theme.palette]);
453
- return icons;
454
- };
455
-
456
- // src/hooks/cytoscape/useCytoscapeStyle.tsx
457
- var useCytoscapeStyle = (hideLabels = false) => {
458
- const theme = (0, import_material2.useTheme)();
459
- const icons = useIcons();
460
- const style = (0, import_react8.useMemo)(
461
- () => [
462
- Node(icons, theme.palette.primary.main, hideLabels),
463
- NodeWithName(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),
464
- NodeAsRoot(theme.palette.secondary.main),
465
- EdgeStyled(theme.palette.divider, theme.palette.divider)
466
- ],
467
- [icons, hideLabels, theme]
468
- );
469
- return style;
470
- };
471
-
472
- // src/hooks/cytoscape/useCytoscapeOptions.ts
473
- var useCytoscapeOptions = (elements, style, layout) => {
474
- const defaultStyle = useCytoscapeStyle();
475
- const resolvedLayout = layout ?? ConcentricLayout;
476
- const resolvedStyle = style ?? defaultStyle;
477
- const options = (0, import_react9.useMemo)(() => {
478
- if (elements && resolvedLayout && resolvedStyle) {
479
- return {
480
- elements,
481
- layout: resolvedLayout,
482
- style: resolvedStyle
483
- };
484
- }
485
- }, [elements, layout, style]);
486
- return options;
487
- };
488
-
489
- // src/hooks/cytoscape/useModuleDetails.tsx
490
- var import_react_promise = require("@xylabs/react-promise");
491
- var import_react10 = require("react");
492
- var useModuleDetails = (rootModule, onFoundModule) => {
493
- const { cy } = useCytoscapeInstance();
494
- const [moduleAddress, setModuleAddress] = (0, import_react10.useState)();
495
- const [foundModule] = (0, import_react_promise.usePromise)(async () => {
496
- if (moduleAddress === null)
497
- return null;
498
- const rootModuleInstance = rootModule == null ? void 0 : rootModule.deref();
499
- if (moduleAddress && rootModuleInstance) {
500
- const foundModule2 = await rootModuleInstance.resolve(moduleAddress);
501
- return foundModule2 ?? null;
502
- }
503
- }, [moduleAddress, rootModule]);
504
- (0, import_react10.useEffect)(() => {
505
- var _a;
506
- const resizeObserver = new ResizeObserver(() => {
507
- var _a2, _b;
508
- if (moduleAddress === null) {
509
- setTimeout(() => {
510
- var _a3;
511
- (_a3 = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a3.center();
512
- }, 100);
513
- } else if (foundModule && cy) {
514
- const node = (_b = (_a2 = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a2.nodes(`[id="${moduleAddress}"]`)) == null ? void 0 : _b[0];
515
- setTimeout(() => {
516
- var _a3;
517
- (_a3 = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a3.center(node);
518
- }, 100);
519
- }
520
- });
521
- const container = (_a = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a.container();
522
- if (container) {
523
- resizeObserver.observe(container);
524
- }
525
- return () => {
526
- if (container)
527
- resizeObserver.unobserve(container);
528
- };
529
- }, [cy, moduleAddress, foundModule, rootModule]);
530
- (0, import_react10.useEffect)(() => {
531
- if (foundModule) {
532
- onFoundModule == null ? void 0 : onFoundModule();
533
- }
534
- }, [cy, moduleAddress, foundModule, onFoundModule]);
535
- const onModuleDetails = (address) => {
536
- var _a, _b, _c, _d, _e;
537
- const moduleNode = (_a = cy == null ? void 0 : cy.deref()) == null ? void 0 : _a.nodes(`[id="${address}"]`);
538
- const rootModuleNode = (_c = cy == null ? void 0 : cy.deref()) == null ? void 0 : _c.nodes(`[id="${(_b = rootModule == null ? void 0 : rootModule.deref()) == null ? void 0 : _b.address}"]`);
539
- const foundModuleNode = (_d = cy == null ? void 0 : cy.deref()) == null ? void 0 : _d.nodes(`[id="${foundModule == null ? void 0 : foundModule.address}"]`);
540
- const notModuleNode = (_e = cy == null ? void 0 : cy.deref()) == null ? void 0 : _e.nodes(`[id != "${address}"]`);
541
- if (address) {
542
- moduleNode == null ? void 0 : moduleNode.toggleClass("activeNode", true);
543
- notModuleNode == null ? void 0 : notModuleNode.toggleClass("activeNode", false);
544
- } else {
545
- notModuleNode == null ? void 0 : notModuleNode.toggleClass("activeNode", false);
546
- const activeNode = (foundModuleNode == null ? void 0 : foundModuleNode.length) ? foundModuleNode : rootModuleNode;
547
- activeNode == null ? void 0 : activeNode.toggleClass("activeNode", true);
548
- }
549
- setModuleAddress(address);
550
- };
551
- return { mod: foundModule, onModuleDetails };
552
- };
553
-
554
- // src/hooks/cytoscape/useRelationalGraphOptions.tsx
555
- var import_react11 = require("react");
556
- var useRelationalGraphOptions = (mod) => {
557
- const [hideLabels, setHideLabels] = (0, import_react11.useState)(true);
558
- const handleToggleLabels = () => {
559
- setHideLabels((oldValue) => !oldValue);
560
- };
561
- const elements = useCytoscapeElements(mod);
562
- const style = useCytoscapeStyle(hideLabels);
563
- const options = useCytoscapeOptions(elements, style, ConcentricLayout);
564
- return { handleToggleLabels, hideLabels, options };
565
- };
566
-
567
- // src/components/cytoscape-extensions/WithExtensions.tsx
568
- var import_cytoscape = __toESM(require("cytoscape"), 1);
569
- var import_cytoscape_cola = __toESM(require("cytoscape-cola"), 1);
570
- var import_cytoscape_cose_bilkent = __toESM(require("cytoscape-cose-bilkent"), 1);
571
- var import_cytoscape_dagre = __toESM(require("cytoscape-dagre"), 1);
572
- var import_cytoscape_euler = __toESM(require("cytoscape-euler"), 1);
573
- var import_react12 = require("react");
574
- var import_jsx_runtime4 = require("react/jsx-runtime");
575
- var WithExtensions = ({ children }) => {
576
- const [initialized, setInitialized] = (0, import_react12.useState)(false);
577
- (0, import_react12.useEffect)(() => {
578
- import_cytoscape.default.use(import_cytoscape_cola.default);
579
- import_cytoscape.default.use(import_cytoscape_dagre.default);
580
- import_cytoscape.default.use(import_cytoscape_cose_bilkent.default);
581
- import_cytoscape.default.use(import_cytoscape_euler.default);
582
- setInitialized(true);
583
- }, []);
584
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children: initialized ? children : void 0 });
585
- };
586
-
587
- // src/components/relational/graph/Graph.tsx
588
- var import_material3 = require("@mui/material");
589
- var import_hex = require("@xylabs/hex");
590
- var import_react_flexbox = require("@xylabs/react-flexbox");
591
- var import_react_identicon = require("@xylabs/react-identicon");
592
- var import_react_node2 = require("@xyo-network/react-node");
593
- var import_cytoscape2 = __toESM(require("cytoscape"), 1);
594
- var import_cytoscape_cola2 = __toESM(require("cytoscape-cola"), 1);
595
- var import_cytoscape_cose_bilkent2 = __toESM(require("cytoscape-cose-bilkent"), 1);
596
- var import_cytoscape_dagre2 = __toESM(require("cytoscape-dagre"), 1);
597
- var import_cytoscape_euler2 = __toESM(require("cytoscape-euler"), 1);
598
- var import_react13 = require("react");
599
- var import_jsx_runtime5 = require("react/jsx-runtime");
600
- var applyLayout = (cy, name = "cola", options) => {
601
- cy == null ? void 0 : cy.layout({ name, ...options }).run();
602
- };
603
- var loadLayout = (layout = "cola") => {
604
- switch (layout) {
605
- case "dagre": {
606
- import_cytoscape2.default.use(import_cytoscape_dagre2.default);
607
- break;
608
- }
609
- case "euler": {
610
- import_cytoscape2.default.use(import_cytoscape_euler2.default);
611
- break;
612
- }
613
- case "cose-bilkent": {
614
- import_cytoscape2.default.use(import_cytoscape_cose_bilkent2.default);
615
- break;
616
- }
617
- case "cola": {
618
- import_cytoscape2.default.use(import_cytoscape_cola2.default);
619
- break;
620
- }
621
- }
622
- };
623
- var ModuleHoverDetails = ({ name, address, ...props }) => {
624
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material3.Card, { elevation: 3, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
625
- import_material3.CardHeader,
626
- {
627
- avatar: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material3.Paper, { elevation: 6, sx: { bgcolor: "#fff", p: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_identicon.Identicon, { value: address, size: 24 }) }),
628
- title: name,
629
- subheader: address
630
- }
631
- ) });
632
- };
633
- var NodeRelationalGraphFlexBox = (0, import_react13.forwardRef)(
634
- ({ actions, children, node, layout, layoutOptions, showDetails, detail, options, onHover, ...props }, ref) => {
635
- var _a;
636
- const theme = (0, import_material3.useTheme)();
637
- const [cy, setCy] = (0, import_react13.useState)();
638
- const cytoscapeRef = (0, import_react13.useRef)();
639
- const [hoverPosition, setHoverBoundingBox] = (0, import_react13.useState)();
640
- const [hoverAddress, setHoverAddress] = (0, import_react13.useState)();
641
- const [moduleInstance] = (0, import_react_node2.useWeakModuleFromNode)(hoverAddress, { node });
642
- (0, import_react13.useEffect)(() => {
643
- cy == null ? void 0 : cy.on("mouseover tap", ({ target }) => {
644
- var _a2, _b;
645
- const cyNode = target;
646
- const bb = (_a2 = cyNode == null ? void 0 : cyNode.renderedBoundingBox) == null ? void 0 : _a2.call(cyNode);
647
- setHoverBoundingBox(bb);
648
- const id = (_b = cyNode.id) == null ? void 0 : _b.call(cyNode);
649
- if (id) {
650
- if (id.includes("/")) {
651
- setHoverAddress(void 0);
652
- onHover == null ? void 0 : onHover();
653
- } else {
654
- setHoverAddress((0, import_hex.asAddress)(id));
655
- onHover == null ? void 0 : onHover((0, import_hex.asAddress)(id));
656
- }
657
- }
658
- });
659
- }, [onHover, cy]);
660
- const handleReset = () => {
661
- cy == null ? void 0 : cy.reset();
662
- applyLayout(cy, layout ?? "euler", layoutOptions);
663
- };
664
- (0, import_react13.useEffect)(() => {
665
- let newCy;
666
- const container = cytoscapeRef.current;
667
- if (container) {
668
- newCy = (0, import_cytoscape2.default)({
669
- container,
670
- ...options
671
- });
672
- setCy(newCy);
673
- }
674
- return () => {
675
- newCy == null ? void 0 : newCy.destroy();
676
- setCy(void 0);
677
- };
678
- }, [options, cytoscapeRef, layoutOptions]);
679
- (0, import_react13.useEffect)(() => {
680
- if (cy) {
681
- loadLayout(layout);
682
- applyLayout(cy, layout ?? "euler", layoutOptions);
683
- }
684
- }, [cy, layoutOptions, layout]);
685
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox.FlexCol, { id: "relational-graph-wrapper", ref, ...props, children: [
686
- hoverAddress && hoverPosition ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material3.Box, { position: "absolute", top: hoverPosition.y1, left: hoverPosition.x1, zIndex: 100, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ModuleHoverDetails, { address: hoverAddress, name: ((_a = moduleInstance == null ? void 0 : moduleInstance.deref()) == null ? void 0 : _a.id) ?? "Unknown" }) }) : null,
687
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_flexbox.FlexRow, { justifyContent: "start", width: "100%", children: actions === null ? null : actions ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_material3.ButtonGroup, { children: [
688
- actions,
689
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material3.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset View" })
690
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material3.Button, { size: "small", variant: "contained", onClick: handleReset, children: "Reset" }) }),
691
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox.FlexGrowRow, { width: "100%", alignItems: "start", children: [
692
- showDetails ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_flexbox.FlexCol, { height: "100%", width: "85%", children: detail }) : null,
693
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
694
- import_react_flexbox.FlexCol,
695
- {
696
- justifyContent: "start",
697
- classes: "cytoscape-wrap",
698
- width: showDetails ? "15%" : "100%",
699
- height: showDetails ? "50%" : "100%",
700
- border: showDetails ? `1px solid ${theme.palette.divider}` : void 0,
701
- children: [
702
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_flexbox.FlexCol, { alignItems: "stretch", position: "absolute", width: "100%", height: "100%", ref: cytoscapeRef }),
703
- children
704
- ]
705
- }
706
- )
707
- ] })
708
- ] });
709
- }
710
- );
711
- NodeRelationalGraphFlexBox.displayName = "NodeRelationalGraph";
712
- var NodeRelationalGraph = NodeRelationalGraphFlexBox;
713
-
714
- // src/components/relational/graph/ProvidedNodeRenderer.tsx
715
- var import_react_node3 = require("@xyo-network/react-node");
716
- var import_jsx_runtime6 = require("react/jsx-runtime");
717
- var ProvidedNodeRenderer = ({ node, ...props }) => {
718
- const [providedNode] = (0, import_react_node3.useWeakProvidedNode)();
719
- const elements = useCytoscapeElements(node ?? providedNode);
720
- const options = useCytoscapeOptions(elements);
721
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(NodeRelationalGraphFlexBox, { alignItems: "stretch", flexGrow: 1, height: "100%", options, ...props });
722
- };
723
-
724
- // src/components/module/graph/DetailsFlexbox.tsx
725
- var import_icons_material2 = require("@mui/icons-material");
726
- var import_material4 = require("@mui/material");
727
- var import_react_flexbox2 = require("@xylabs/react-flexbox");
728
- var import_jsx_runtime7 = require("react/jsx-runtime");
729
- var DetailsFlexbox = ({ children, onClose }) => {
730
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_flexbox2.FlexGrowCol, { alignItems: "end", justifyContent: "start", id: "module-detail", width: "100%", p: 2, gap: 2, children: [
731
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react_flexbox2.FlexRow, { justifyContent: "end", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material4.IconButton, { onClick: onClose, size: "small", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons_material2.CancelRounded, {}) }) }),
732
- children
733
- ] });
734
- };
735
-
736
- // src/components/module/graph/node/Hover.tsx
737
- var import_material5 = require("@mui/material");
738
- var import_react_flexbox3 = require("@xylabs/react-flexbox");
739
-
740
- // src/components/module/graph/node/hooks/useNodeElement.tsx
741
- var import_react14 = require("react");
742
- var useNodeElement = (node) => {
743
- const ref = (0, import_react14.useRef)(null);
744
- const [currentElement, setCurrentElement] = (0, import_react14.useState)(null);
745
- const [boundingBox, setBoundingBox] = (0, import_react14.useState)(node == null ? void 0 : node.renderedBoundingBox());
746
- (0, import_react14.useEffect)(() => {
747
- setCurrentElement(null);
748
- }, [node]);
749
- (0, import_react14.useEffect)(() => {
750
- if (node) {
751
- setBoundingBox(node.renderedBoundingBox());
752
- }
753
- const listener = () => {
754
- setBoundingBox(node == null ? void 0 : node.renderedBoundingBox());
755
- };
756
- node == null ? void 0 : node.on("position", listener);
757
- return () => {
758
- node == null ? void 0 : node.off("position", void 0, listener);
759
- };
760
- }, [node]);
761
- (0, import_react14.useEffect)(() => {
762
- setCurrentElement(ref.current);
763
- }, [boundingBox]);
764
- return { boundingBox, currentElement, ref };
765
- };
766
-
767
- // src/components/module/graph/node/Hover.tsx
768
- var import_jsx_runtime8 = require("react/jsx-runtime");
769
- var ModuleGraphNodeHover = ({ children, node }) => {
770
- const { boundingBox, ref, currentElement } = useNodeElement(node);
771
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_jsx_runtime8.Fragment, { children: [
772
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(StyledNodeGhostElementFlexCol, { ref, left: boundingBox == null ? void 0 : boundingBox.x1, height: boundingBox == null ? void 0 : boundingBox.h, top: boundingBox == null ? void 0 : boundingBox.y1, width: boundingBox == null ? void 0 : boundingBox.w }),
773
- node ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment, { children: children == null ? void 0 : children(currentElement) }) : null
774
- ] });
775
- };
776
- var StyledNodeGhostElementFlexCol = (0, import_material5.styled)(import_react_flexbox3.FlexCol, { name: "StyledNodeGhostElementFlexCol" })(() => ({
777
- // For easier debugging of the 'ghost' element that matches the hovered cytoscape node
778
- // backgroundColor: '#fff',
779
- // opacity: 0.25,
780
- // eslint-disable-next-line sort-keys-fix/sort-keys-fix
781
- cursor: "pointer",
782
- pointerEvents: "none",
783
- position: "absolute"
784
- }));
785
-
786
- // src/components/module/graph/Popper.tsx
787
- var import_icons_material3 = require("@mui/icons-material");
788
- var import_material6 = require("@mui/material");
789
- var import_react_identicon2 = require("@xylabs/react-identicon");
790
- var import_jsx_runtime9 = require("react/jsx-runtime");
791
- var ModuleHoverPopper = ({ anchorEl, onClose, onModuleDetails, onModuleExplore, node, ...props }) => {
792
- const { address, name } = (node == null ? void 0 : node.data()) ?? {};
793
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children: anchorEl ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material6.Popper, { anchorEl, ...props, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_material6.Card, { elevation: 3, children: [
794
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
795
- import_material6.CardHeader,
796
- {
797
- action: onClose ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material6.IconButton, { size: "small", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons_material3.CancelRounded, {}) }) : null,
798
- avatar: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material6.Paper, { elevation: 6, sx: { bgcolor: "#fff", p: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react_identicon2.Identicon, { value: address, size: 24 }) }),
799
- title: name,
800
- subheader: address
801
- }
802
- ),
803
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(StyledCardActions, { children: [
804
- onModuleDetails ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material6.Button, { onClick: () => onModuleDetails == null ? void 0 : onModuleDetails(address), size: "small", variant: "contained", children: "Details" }) : null,
805
- onModuleExplore ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material6.Button, { onClick: () => onModuleExplore == null ? void 0 : onModuleExplore(address), size: "small", variant: "contained", children: "Explore" }) : null
806
- ] })
807
- ] }) }) : null });
808
- };
809
- var StyledModuleHoverPopper = (0, import_material6.styled)(ModuleHoverPopper, { name: "StyledComponents" })(() => ({
810
- zIndex: 2
811
- }));
812
- var StyledCardActions = (0, import_material6.styled)(import_material6.CardActions, { name: "StyledCardActions" })(() => ({
813
- display: "flex",
814
- justifyContent: "center"
815
- }));
816
-
817
- // src/components/module/graph/GraphFlexBox.tsx
818
- var import_jsx_runtime10 = require("react/jsx-runtime");
819
- var ModuleGraphFlexBox = ({ hideActions, rootModule, disableModuleDetails, ...props }) => {
820
- const cytoscapeRef = (0, import_react15.useRef)(null);
821
- const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? void 0);
822
- const { hoveredNode, setHoveredNode, toggleSelectedElement } = useElements(hideLabels);
823
- const { mod, onModuleDetails } = useModuleDetails(rootModule, () => setHoveredNode(void 0));
824
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(WithExtensions, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
825
- NodeRelationalGraphFlexBox,
826
- {
827
- actions: mod ? null : hideActions ? null : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_material7.Button, { size: "small", onClick: handleToggleLabels, variant: "contained", children: "Toggle Labels" }),
828
- showDetails: !!mod,
829
- detail: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DetailsFlexbox, { onClose: () => onModuleDetails(null) }),
830
- options,
831
- ref: cytoscapeRef,
832
- width: "100%",
833
- ...props,
834
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ModuleGraphNodeHover, { node: hoveredNode, children: (element) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
835
- StyledModuleHoverPopper,
836
- {
837
- anchorEl: element,
838
- container: cytoscapeRef.current,
839
- node: hoveredNode,
840
- onClose: () => setHoveredNode(void 0),
841
- onModuleExplore: toggleSelectedElement,
842
- onModuleDetails: disableModuleDetails ? void 0 : onModuleDetails,
843
- placement: "top",
844
- open: true
845
- }
846
- ) })
847
- }
848
- ) });
849
- };
850
- var ModuleGraphFlexBoxWithProvider = (props) => {
851
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(CytoscapeInstanceProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ModuleGraphFlexBox, { ...props }) });
852
- };
853
- // Annotate the CommonJS export names for ESM import in node:
854
- 0 && (module.exports = {
855
- ColaLayout,
856
- ConcentricLayout,
857
- CyIconSet,
858
- CytoscapeElements,
859
- CytoscapeInstanceContext,
860
- CytoscapeInstanceProvider,
861
- EdgeStyled,
862
- ModuleCardParser,
863
- ModuleGraphFlexBox,
864
- ModuleGraphFlexBoxWithProvider,
865
- Node,
866
- NodeAsRoot,
867
- NodeRelationalGraph,
868
- NodeRelationalGraphFlexBox,
869
- NodeWithName,
870
- ProvidedNodeRenderer,
871
- encodeSvg,
872
- generateIconMap,
873
- parseModuleType,
874
- useCytoscapeElements,
875
- useCytoscapeInstance,
876
- useCytoscapeOptions,
877
- useElements,
878
- useModuleDetails,
879
- useRelationalGraphOptions
880
- });
1
+ "use strict";var St=Object.create;var V=Object.defineProperty;var Mt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Ft=Object.getPrototypeOf,kt=Object.prototype.hasOwnProperty;var Bt=(e,o)=>{for(var t in o)V(e,t,{get:o[t],enumerable:!0})},Ne=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of wt(o))!kt.call(e,n)&&n!==t&&V(e,n,{get:()=>o[n],enumerable:!(r=Mt(o,n))||r.enumerable});return e};var v=(e,o,t)=>(t=e!=null?St(Ft(e)):{},Ne(o||!e||!e.__esModule?V(t,"default",{value:e,enumerable:!0}):t,e)),Dt=e=>Ne(V({},"__esModule",{value:!0}),e);var Vt={};Bt(Vt,{ColaLayout:()=>ie,ConcentricLayout:()=>W,CyIconSet:()=>le,CytoscapeElements:()=>E,CytoscapeInstanceContext:()=>L,CytoscapeInstanceProvider:()=>re,EdgeStyled:()=>me,ModuleCardParser:()=>Tt,ModuleGraphFlexBox:()=>Rt,ModuleGraphFlexBoxWithProvider:()=>Ut,Node:()=>ce,NodeAsRoot:()=>pe,NodeRelationalGraph:()=>Wt,NodeRelationalGraphFlexBox:()=>B,NodeWithName:()=>de,ProvidedNodeRenderer:()=>Ht,encodeSvg:()=>ne,generateIconMap:()=>se,parseModuleType:()=>ae,useCytoscapeElements:()=>F,useCytoscapeInstance:()=>N,useCytoscapeOptions:()=>H,useElements:()=>ue,useModuleDetails:()=>fe,useRelationalGraphOptions:()=>Ce});module.exports=Dt(Vt);var q=require("@xyo-network/archivist-model"),J=require("@xyo-network/diviner-model"),Ee=require("@xyo-network/react-archivist"),K=require("@xyo-network/react-module"),Q=require("react/jsx-runtime"),Tt=({mod:e})=>{switch(!0){case(0,q.isArchivistInstance)(e):return(0,Q.jsx)(Ee.ArchivistCard,{mod:(0,q.asArchivistInstance)(e)});case(0,J.isDivinerInstance)(e):return(0,Q.jsx)(K.DivinerCard,{mod:(0,J.asDivinerInstance)(e)});default:return(0,Q.jsx)(K.ModuleCard,{mod:e})}};var Et=require("@mui/material"),bt=require("react");var be=require("@xyo-network/react-shared"),L=(0,be.createContextEx)();var X=require("react");var Re=require("react/jsx-runtime"),re=({children:e,defaultInstance:o})=>{let[t,r]=(0,X.useState)(o);return(0,X.useEffect)(()=>{r(o)},[o]),(0,Re.jsx)(L.Provider,{value:{cy:t,provided:!0,setCy:r},children:e})};var Pe=require("@xyo-network/react-shared");var N=(e=!1)=>(0,Pe.useContextEx)(L,"CytoscapeInstance",e);var Ae=require("@xylabs/react-async-effect"),Ge=require("@xyo-network/node-model"),Y=require("react");var Te=require("@xylabs/exists");var Se=require("react-dom/server"),At="data:image/svg+xml,",ne=(e,o)=>{let t=(0,Se.renderToStaticMarkup)(e),n=new DOMParser().parseFromString(t,"text/html").querySelectorAll("svg")[0];return n&&(n.setAttribute("xmlns","http://www.w3.org/2000/svg"),n.setAttribute("height","100"),n.style.fill=o??"black"),`${At}${window.encodeURIComponent(n.outerHTML)}`};var se=()=>({archivist:"",bridge:"",diviner:"",module:"",node:"",sentinel:"",witness:""});var ie={centerGraph:!1,convergenceThreshold:.01,name:"cola"};var W={concentric:function(e){return e.degree(!1)},levelWidth:function(){return 2},minNodeSpacing:75,name:"concentric"};var Me=require("@xyo-network/archivist-model"),we=require("@xyo-network/bridge-model"),Fe=require("@xyo-network/diviner-model"),ke=require("@xyo-network/node-model"),Be=require("@xyo-network/sentinel-model"),De=require("@xyo-network/witness-model"),ae=e=>{let o="module";return e&&((0,Me.isArchivistInstance)(e)?o="archivist":(0,we.isBridgeInstance)(e)?o="bridge":(0,Fe.isDivinerInstance)(e)?o="diviner":(0,ke.isNodeInstance)(e)?o="node":(0,Be.isSentinelInstance)(e)?o="sentinel":(0,De.isWitnessModule)(e)?o="witness":o="module"),o};var E={MaxNameLength:20,buildEdge(e,o,t){return{data:{id:`${e.data.id}/${o.data.id}`,source:e.data.id,target:o.data.id,...t}}},async buildElements(e){let o=await E.recurseNodes(e);return await this.buildElementsFromInfo(o,void 0,["activeNode"])},async buildElementsFromInfo(e,o,t=[]){let r=E.buildNode(e.mod,{childCount:e.children.length,depth:e.depth},t),n=o?E.buildEdge(o,r,{depth:e.depth,siblingCount:e.children.length}):void 0,s=[r];n&&s.push(n);for(let i of e.children)s.push(...await this.buildElementsFromInfo(i,r));return s},buildNode(e,o,t){let{address:r,id:n}=e;return{classes:t,data:{address:r,id:r,name:n,type:ae(e),...o}}},buildRootNode:e=>E.buildNode(e,{},["activeNode"]),normalizeName(e){if(e)return e.length>this.MaxNameLength?`${e.slice(0,20)}...`:e},async recurseNodes(e,o=10,t=1){let r={children:[],depth:t,mod:e};if(o>0){let n=await e.resolve("*",{direction:"down",maxDepth:1});r.children=(await Promise.all(n.map(async s=>{if(s.address!==e.address)return await this.recurseNodes(s,o-1,t+1)}))).filter(Te.exists)}return r}};var C=require("@mui/icons-material"),le={archivist:C.Inventory2Rounded,bridge:C.InsertLinkRounded,diviner:C.BubbleChartRounded,module:C.QuestionMarkRounded,node:C.Hub,sentinel:C.TimerRounded,witness:C.VisibilityRounded};var de=(e,o)=>({selector:"node[name]",style:{color:e,"font-family":"Lexend Deca, Helvetica, sans-serif","font-size":12,"overlay-padding":"6px","text-halign":"center","text-outline-color":o,"text-outline-width":"1px","text-valign":"top"}}),ce=(e,o,t=!1)=>({selector:"node",style:{"background-color":o,"background-height":"75%","background-image":r=>e[r.data("type")],"background-width":"24",label:t?void 0:"data(name)",shape:"round-rectangle"}}),pe=e=>({selector:".activeNode",style:{"background-color":e}}),me=(e,o)=>({selector:"edge",style:{"curve-style":"bezier","line-color":e,"line-opacity":.1,"target-arrow-color":o,"target-arrow-shape":"triangle",width:3}});var F=e=>{let[o,t]=(0,Y.useState)([]);return(0,Ae.useAsyncEffect)(async()=>{let r=e==null?void 0:e.deref();if(r){let n=await E.buildElements(r)??[];t(n)}},[e]),(0,Y.useEffect)(()=>{let r,n;return e&&(0,Ge.isNodeInstance)(e)&&(r=e.on("moduleAttached",async()=>{let s=await E.buildElements(e)??[];t(s)}),n=e.on("moduleDetached",async()=>{let s=await E.buildElements(e)??[];t(s)})),()=>{r==null||r(),n==null||n()}},[e]),o};var k=require("react");var Le=e=>{let{cy:o}=N(!0),[t,r]=(0,k.useState)(),n=(0,k.useCallback)(s=>{s.on("mouseover tap",()=>{r(s)})},[]);return(0,k.useEffect)(()=>{e&&e.nodes().forEach(n)},[n,e]),(0,k.useEffect)(()=>{var s;(s=o==null?void 0:o.deref())==null||s.ready(()=>{var i;(i=o==null?void 0:o.deref())==null||i.nodes().forEach(n)})},[o,n]),[t,r]};var We=require("@xyo-network/react-node"),He=require("react");var ze=e=>{let o=(0,He.useMemo)(()=>{let{address:n}=(e==null?void 0:e.data())??{};return n},[e]),[t]=(0,We.useWeakModuleFromNode)(o);return F(t)};var Z=require("react");var Oe=(e=[],o)=>{let{cy:t}=N(!0),[r,n]=(0,Z.useState)();return(0,Z.useEffect)(()=>{var s,i;if(e.length>1){let a=(s=t==null?void 0:t.deref())==null?void 0:s.add(e);n(a),(i=t==null?void 0:t.deref())==null||i.layout(ie).run()}},[t,o,e]),r};var $e=require("react");var Ue=()=>{let[e,o]=(0,$e.useState)(),{cy:t}=N(!0),r=s=>{var a;let i=(a=t==null?void 0:t.deref())==null?void 0:a.nodes();i==null||i.toggleClass("activeNode",!1),s.toggleClass("activeNode",!0)};return{selectedElement:e,toggleSelectedElement:s=>{var a,l;let i=(l=(a=t==null?void 0:t.deref())==null?void 0:a.nodes(`[id="${s}"]`))==null?void 0:l[0];i&&(o(i),r(i))}}};var ue=e=>{let{selectedElement:o,toggleSelectedElement:t}=Ue(),r=ze(o),n=Oe(r,e),[s,i]=Le(n);return{hoveredNode:s,setHoveredNode:i,toggleSelectedElement:t}};var Ye=require("react");var Ke=require("@mui/material"),Xe=require("react");var Ve=require("@mui/material"),Qe=require("react");var Je=require("react/jsx-runtime"),qe=()=>{let e=(0,Ve.useTheme)();return(0,Qe.useMemo)(()=>{let t=se();return Object.entries(le).reduce((r,[n,s])=>{let i=(0,Je.jsx)(s,{fontSize:"small"});return r[n]=ne(i,e.palette.getContrastText(e.palette.text.primary)),r},t)},[e.palette])};var _=(e=!1)=>{let o=(0,Ke.useTheme)(),t=qe();return(0,Xe.useMemo)(()=>[ce(t,o.palette.primary.main,e),de(o.palette.text.primary,o.palette.getContrastText(o.palette.text.primary)),pe(o.palette.secondary.main),me(o.palette.divider,o.palette.divider)],[t,e,o])};var H=(e,o,t)=>{let r=_(),n=t??W,s=o??r;return(0,Ye.useMemo)(()=>{if(e&&n&&s)return{elements:e,layout:n,style:s}},[e,t,o])};var Ze=require("@xylabs/react-promise"),z=require("react");var fe=(e,o)=>{let{cy:t}=N(),[r,n]=(0,z.useState)(),[s]=(0,Ze.usePromise)(async()=>{if(r===null)return null;let a=e==null?void 0:e.deref();if(r&&a)return await a.resolve(r)??null},[r,e]);return(0,z.useEffect)(()=>{var I;let a=new ResizeObserver(()=>{var h,f;if(r===null)setTimeout(()=>{var d;(d=t==null?void 0:t.deref())==null||d.center()},100);else if(s&&t){let d=(f=(h=t==null?void 0:t.deref())==null?void 0:h.nodes(`[id="${r}"]`))==null?void 0:f[0];setTimeout(()=>{var y;(y=t==null?void 0:t.deref())==null||y.center(d)},100)}}),l=(I=t==null?void 0:t.deref())==null?void 0:I.container();return l&&a.observe(l),()=>{l&&a.unobserve(l)}},[t,r,s,e]),(0,z.useEffect)(()=>{s&&(o==null||o())},[t,r,s,o]),{mod:s,onModuleDetails:a=>{var d,y,D,T,$;let l=(d=t==null?void 0:t.deref())==null?void 0:d.nodes(`[id="${a}"]`),I=(D=t==null?void 0:t.deref())==null?void 0:D.nodes(`[id="${(y=e==null?void 0:e.deref())==null?void 0:y.address}"]`),h=(T=t==null?void 0:t.deref())==null?void 0:T.nodes(`[id="${s==null?void 0:s.address}"]`),f=($=t==null?void 0:t.deref())==null?void 0:$.nodes(`[id != "${a}"]`);if(a)l==null||l.toggleClass("activeNode",!0),f==null||f.toggleClass("activeNode",!1);else{f==null||f.toggleClass("activeNode",!1);let M=h!=null&&h.length?h:I;M==null||M.toggleClass("activeNode",!0)}n(a)}}};var _e=require("react");var Ce=e=>{let[o,t]=(0,_e.useState)(!0),r=()=>{t(a=>!a)},n=F(e),s=_(o),i=H(n,s,W);return{handleToggleLabels:r,hideLabels:o,options:i}};var O=v(require("cytoscape"),1),je=v(require("cytoscape-cola"),1),et=v(require("cytoscape-cose-bilkent"),1),tt=v(require("cytoscape-dagre"),1),ot=v(require("cytoscape-euler"),1),j=require("react"),ee=require("react/jsx-runtime"),rt=({children:e})=>{let[o,t]=(0,j.useState)(!1);return(0,j.useEffect)(()=>{O.default.use(je.default),O.default.use(tt.default),O.default.use(et.default),O.default.use(ot.default),t(!0)},[]),(0,ee.jsx)(ee.Fragment,{children:o?e:void 0})};var m=require("@mui/material"),ge=require("@xylabs/hex"),b=require("@xylabs/react-flexbox"),st=require("@xylabs/react-identicon"),it=require("@xyo-network/react-node"),A=v(require("cytoscape"),1),at=v(require("cytoscape-cola"),1),lt=v(require("cytoscape-cose-bilkent"),1),dt=v(require("cytoscape-dagre"),1),ct=v(require("cytoscape-euler"),1),g=require("react"),p=require("react/jsx-runtime"),nt=(e,o="cola",t)=>{e==null||e.layout({name:o,...t}).run()},Gt=(e="cola")=>{switch(e){case"dagre":{A.default.use(dt.default);break}case"euler":{A.default.use(ct.default);break}case"cose-bilkent":{A.default.use(lt.default);break}case"cola":{A.default.use(at.default);break}}},Lt=({name:e,address:o,...t})=>(0,p.jsx)(m.Card,{elevation:3,...t,children:(0,p.jsx)(m.CardHeader,{avatar:(0,p.jsx)(m.Paper,{elevation:6,sx:{bgcolor:"#fff",p:1},children:(0,p.jsx)(st.Identicon,{value:o,size:24})}),title:e,subheader:o})}),B=(0,g.forwardRef)(({actions:e,children:o,node:t,layout:r,layoutOptions:n,showDetails:s,detail:i,options:a,onHover:l,...I},h)=>{var ye;let f=(0,m.useTheme)(),[d,y]=(0,g.useState)(),D=(0,g.useRef)(),[T,$]=(0,g.useState)(),[M,he]=(0,g.useState)(),[oe]=(0,it.useWeakModuleFromNode)(M,{node:t});(0,g.useEffect)(()=>{d==null||d.on("mouseover tap",({target:w})=>{var ve,Ie;let x=w,Pt=(ve=x==null?void 0:x.renderedBoundingBox)==null?void 0:ve.call(x);$(Pt);let U=(Ie=x.id)==null?void 0:Ie.call(x);U&&(U.includes("/")?(he(void 0),l==null||l()):(he((0,ge.asAddress)(U)),l==null||l((0,ge.asAddress)(U))))})},[l,d]);let xe=()=>{d==null||d.reset(),nt(d,r??"euler",n)};return(0,g.useEffect)(()=>{let w,x=D.current;return x&&(w=(0,A.default)({container:x,...a}),y(w)),()=>{w==null||w.destroy(),y(void 0)}},[a,D,n]),(0,g.useEffect)(()=>{d&&(Gt(r),nt(d,r??"euler",n))},[d,n,r]),(0,p.jsxs)(b.FlexCol,{id:"relational-graph-wrapper",ref:h,...I,children:[M&&T?(0,p.jsx)(m.Box,{position:"absolute",top:T.y1,left:T.x1,zIndex:100,children:(0,p.jsx)(Lt,{address:M,name:((ye=oe==null?void 0:oe.deref())==null?void 0:ye.id)??"Unknown"})}):null,(0,p.jsx)(b.FlexRow,{justifyContent:"start",width:"100%",children:e===null?null:e?(0,p.jsxs)(m.ButtonGroup,{children:[e,(0,p.jsx)(m.Button,{size:"small",variant:"contained",onClick:xe,children:"Reset View"})]}):(0,p.jsx)(m.Button,{size:"small",variant:"contained",onClick:xe,children:"Reset"})}),(0,p.jsxs)(b.FlexGrowRow,{width:"100%",alignItems:"start",children:[s?(0,p.jsx)(b.FlexCol,{height:"100%",width:"85%",children:i}):null,(0,p.jsxs)(b.FlexCol,{justifyContent:"start",classes:"cytoscape-wrap",width:s?"15%":"100%",height:s?"50%":"100%",border:s?`1px solid ${f.palette.divider}`:void 0,children:[(0,p.jsx)(b.FlexCol,{alignItems:"stretch",position:"absolute",width:"100%",height:"100%",ref:D}),o]})]})]})});B.displayName="NodeRelationalGraph";var Wt=B;var pt=require("@xyo-network/react-node");var mt=require("react/jsx-runtime"),Ht=({node:e,...o})=>{let[t]=(0,pt.useWeakProvidedNode)(),r=F(e??t),n=H(r);return(0,mt.jsx)(B,{alignItems:"stretch",flexGrow:1,height:"100%",options:n,...o})};var ut=require("@mui/icons-material"),ft=require("@mui/material"),te=require("@xylabs/react-flexbox"),G=require("react/jsx-runtime"),Ct=({children:e,onClose:o})=>(0,G.jsxs)(te.FlexGrowCol,{alignItems:"end",justifyContent:"start",id:"module-detail",width:"100%",p:2,gap:2,children:[(0,G.jsx)(te.FlexRow,{justifyContent:"end",children:(0,G.jsx)(ft.IconButton,{onClick:o,size:"small",children:(0,G.jsx)(ut.CancelRounded,{})})}),e]});var ht=require("@mui/material"),xt=require("@xylabs/react-flexbox");var R=require("react"),gt=e=>{let o=(0,R.useRef)(null),[t,r]=(0,R.useState)(null),[n,s]=(0,R.useState)(e==null?void 0:e.renderedBoundingBox());return(0,R.useEffect)(()=>{r(null)},[e]),(0,R.useEffect)(()=>{e&&s(e.renderedBoundingBox());let i=()=>{s(e==null?void 0:e.renderedBoundingBox())};return e==null||e.on("position",i),()=>{e==null||e.off("position",void 0,i)}},[e]),(0,R.useEffect)(()=>{r(o.current)},[n]),{boundingBox:n,currentElement:t,ref:o}};var S=require("react/jsx-runtime"),yt=({children:e,node:o})=>{let{boundingBox:t,ref:r,currentElement:n}=gt(o);return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(zt,{ref:r,left:t==null?void 0:t.x1,height:t==null?void 0:t.h,top:t==null?void 0:t.y1,width:t==null?void 0:t.w}),o?(0,S.jsx)(S.Fragment,{children:e==null?void 0:e(n)}):null]})},zt=(0,ht.styled)(xt.FlexCol,{name:"StyledNodeGhostElementFlexCol"})(()=>({cursor:"pointer",pointerEvents:"none",position:"absolute"}));var vt=require("@mui/icons-material"),c=require("@mui/material"),It=require("@xylabs/react-identicon"),u=require("react/jsx-runtime"),Ot=({anchorEl:e,onClose:o,onModuleDetails:t,onModuleExplore:r,node:n,...s})=>{let{address:i,name:a}=(n==null?void 0:n.data())??{};return(0,u.jsx)(u.Fragment,{children:e?(0,u.jsx)(c.Popper,{anchorEl:e,...s,children:(0,u.jsxs)(c.Card,{elevation:3,children:[(0,u.jsx)(c.CardHeader,{action:o?(0,u.jsx)(c.IconButton,{size:"small",onClick:o,children:(0,u.jsx)(vt.CancelRounded,{})}):null,avatar:(0,u.jsx)(c.Paper,{elevation:6,sx:{bgcolor:"#fff",p:1},children:(0,u.jsx)(It.Identicon,{value:i,size:24})}),title:a,subheader:i}),(0,u.jsxs)($t,{children:[t?(0,u.jsx)(c.Button,{onClick:()=>t==null?void 0:t(i),size:"small",variant:"contained",children:"Details"}):null,r?(0,u.jsx)(c.Button,{onClick:()=>r==null?void 0:r(i),size:"small",variant:"contained",children:"Explore"}):null]})]})}):null})},Nt=(0,c.styled)(Ot,{name:"StyledComponents"})(()=>({zIndex:2})),$t=(0,c.styled)(c.CardActions,{name:"StyledCardActions"})(()=>({display:"flex",justifyContent:"center"}));var P=require("react/jsx-runtime"),Rt=({hideActions:e,rootModule:o,disableModuleDetails:t,...r})=>{let n=(0,bt.useRef)(null),{handleToggleLabels:s,hideLabels:i,options:a}=Ce(o??void 0),{hoveredNode:l,setHoveredNode:I,toggleSelectedElement:h}=ue(i),{mod:f,onModuleDetails:d}=fe(o,()=>I(void 0));return(0,P.jsx)(rt,{children:(0,P.jsx)(B,{actions:f||e?null:(0,P.jsx)(Et.Button,{size:"small",onClick:s,variant:"contained",children:"Toggle Labels"}),showDetails:!!f,detail:(0,P.jsx)(Ct,{onClose:()=>d(null)}),options:a,ref:n,width:"100%",...r,children:(0,P.jsx)(yt,{node:l,children:y=>(0,P.jsx)(Nt,{anchorEl:y,container:n.current,node:l,onClose:()=>I(void 0),onModuleExplore:h,onModuleDetails:t?void 0:d,placement:"top",open:!0})})})})},Ut=e=>(0,P.jsx)(re,{children:(0,P.jsx)(Rt,{...e})});0&&(module.exports={ColaLayout,ConcentricLayout,CyIconSet,CytoscapeElements,CytoscapeInstanceContext,CytoscapeInstanceProvider,EdgeStyled,ModuleCardParser,ModuleGraphFlexBox,ModuleGraphFlexBoxWithProvider,Node,NodeAsRoot,NodeRelationalGraph,NodeRelationalGraphFlexBox,NodeWithName,ProvidedNodeRenderer,encodeSvg,generateIconMap,parseModuleType,useCytoscapeElements,useCytoscapeInstance,useCytoscapeOptions,useElements,useModuleDetails,useRelationalGraphOptions});
881
2
  //# sourceMappingURL=index.cjs.map