@xyo-network/react-node-renderer 7.5.0 → 7.5.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CytoscapeElements.d.ts","sourceRoot":"","sources":["../../../src/Cytoscape/CytoscapeElements.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CytoscapeElements.d.ts","sourceRoot":"","sources":["../../../src/Cytoscape/CytoscapeElements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAIlD,UAAU,UAAU;IAClB,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,cAAc,CAAA;CACpB;AAED,eAAO,MAAM,iBAAiB;;wBAGR,iBAAiB,WAAW,iBAAiB,eAAe;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;;;;;;;uBAWjF,cAAc,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;gCAOpC,UAAU,SAAS,iBAAiB,YAAW,MAAM,EAAE,GAAQ,OAAO,CAAC,iBAAiB,EAAE,CAAC;mBAiB9G,cAAc,eAAe;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,YAAY,MAAM,EAAE,GAAG,iBAAiB;yBAczF,cAAc,KAAG,iBAAiB;yBAIlC,MAAM;uBAMF,cAAc,sCAA6B,OAAO,CAAC,UAAU,CAAC;CAqBxF,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -62,8 +62,7 @@ import { isNodeInstance as isNodeInstance2 } from "@xyo-network/node-model";
|
|
|
62
62
|
import { useEffect, useState as useState2 } from "react";
|
|
63
63
|
|
|
64
64
|
// src/Cytoscape/CytoscapeElements.ts
|
|
65
|
-
import { exists } from "@xylabs/
|
|
66
|
-
import { isFalsy } from "@xylabs/sdk-js";
|
|
65
|
+
import { exists, isFalsy } from "@xylabs/sdk-js";
|
|
67
66
|
|
|
68
67
|
// src/Cytoscape/lib/encodeSvg.ts
|
|
69
68
|
import { isDefined } from "@xylabs/sdk-js";
|
|
@@ -1 +1 @@
|
|
|
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/elements/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/elements/useHoveredNode.tsx","../../src/hooks/cytoscape/elements/useNewElements.tsx","../../src/hooks/cytoscape/elements/useRenderNewElements.tsx","../../src/hooks/cytoscape/elements/useSelectedElement.tsx","../../src/hooks/cytoscape/elements/useElements.tsx","../../src/hooks/cytoscape/useCytoscapeOptions.ts","../../src/hooks/cytoscape/useCytoscapeStyle.tsx","../../src/hooks/cytoscape/useIcons.tsx","../../src/hooks/cytoscape/useModuleDetails.tsx","../../src/hooks/cytoscape/useRelationalGraphOptions.tsx","../../src/components/cytoscape-extensions/WithExtensions.tsx","../../src/components/relational/graph/Graph.tsx","../../src/components/relational/graph/ProvidedNodeRenderer.tsx","../../src/components/module/graph/DetailsFlexbox.tsx","../../src/components/module/graph/node/Hover.tsx","../../src/components/module/graph/node/hooks/useNodeElement.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 type { ModuleInstance } from '@xyo-network/module-model'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\nimport React from 'react'\n\nexport interface ModuleCardParserProps {\n mod?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ mod }) => {\n switch (true) {\n case isArchivistInstance(mod): {\n return <ArchivistCard mod={asArchivistInstance(mod)} />\n }\n case isDivinerInstance(mod): {\n return <DivinerCard mod={asDivinerInstance(mod)} />\n }\n default: {\n return <ModuleCard mod={mod} />\n }\n }\n}\n","import { Button } from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport React, { useRef } from 'react'\n\nimport { CytoscapeInstanceProvider } from '../../../contexts/index.ts'\nimport {\n useElements, useModuleDetails, useRelationalGraphOptions,\n} from '../../../hooks/index.ts'\nimport { WithExtensions } from '../../cytoscape-extensions/index.ts'\nimport { NodeRelationalGraphFlexBox } from '../../relational/index.ts'\nimport { DetailsFlexbox } from './DetailsFlexbox.tsx'\nimport { ModuleGraphNodeHover } from './node/index.ts'\nimport { StyledModuleHoverPopper } from './Popper.tsx'\n\nexport interface ModuleGraphFlexBoxProps extends FlexBoxProps {\n disableModuleDetails?: boolean\n hideActions?: boolean\n layout?: 'dagre' | 'euler' | 'cose-bilkent' | 'cola'\n layoutOptions?: object\n rootModule?: WeakRef<ModuleInstance> | null\n}\n\nexport const ModuleGraphFlexBox: React.FC<ModuleGraphFlexBoxProps> = ({\n hideActions, rootModule, disableModuleDetails, ...props\n}) => {\n const cytoscapeRef = useRef<HTMLDivElement>(null)\n const {\n handleToggleLabels, hideLabels, options,\n } = useRelationalGraphOptions(rootModule ?? undefined)\n const {\n hoveredNode, setHoveredNode, toggleSelectedElement,\n } = useElements(hideLabels)\n\n const { mod, onModuleDetails } = useModuleDetails(rootModule, () => setHoveredNode(undefined))\n\n return (\n <WithExtensions>\n <NodeRelationalGraphFlexBox\n actions={\n mod\n ? null\n : hideActions\n ? null\n : (\n <Button size=\"small\" onClick={handleToggleLabels} variant=\"contained\">\n Toggle Labels\n </Button>\n )\n\n }\n showDetails={!!mod}\n detail={<DetailsFlexbox onClose={() => onModuleDetails(null)} />}\n options={options}\n ref={cytoscapeRef}\n width=\"100%\"\n {...props}\n >\n <ModuleGraphNodeHover node={hoveredNode}>\n {element => (\n <StyledModuleHoverPopper\n anchorEl={element}\n container={cytoscapeRef.current}\n node={hoveredNode}\n onClose={() => setHoveredNode(undefined)}\n onModuleExplore={toggleSelectedElement}\n onModuleDetails={disableModuleDetails ? undefined : onModuleDetails}\n placement=\"top\"\n open\n />\n )}\n </ModuleGraphNodeHover>\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 '@xylabs/react-shared'\n\nimport type { CytoscapeInstanceState } from './State.ts'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import type { Core } from 'cytoscape'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { CytoscapeInstanceContext } from './Context.ts'\nimport type { CytoscapeInstanceState } from './State.ts'\n\nexport interface CytoscapeInstanceProviderProps extends PropsWithChildren {\n defaultInstance?: WeakRef<Core>\n}\n\nexport const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {\n const [cy, setCy] = useState<WeakRef<Core> | undefined>(() => defaultInstance)\n\n const value: CytoscapeInstanceState = useMemo(() => ({\n cy, provided: true, setCy,\n }), [cy, setCy])\n\n return (\n <CytoscapeInstanceContext value={value}>\n {children}\n </CytoscapeInstanceContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context.ts'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n","import type { EventUnsubscribeFunction } from '@xylabs/events'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport type { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../../Cytoscape/index.ts'\n\nexport const useCytoscapeElements = (mod?: WeakRef<ModuleInstance> | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n\n async () => {\n const moduleInstance = mod?.deref()\n if (moduleInstance) {\n const newElements = (await CytoscapeElements.buildElements(moduleInstance)) ?? []\n setElements(newElements)\n }\n },\n [mod],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined\n let detachedListener: EventUnsubscribeFunction | undefined\n\n if (mod && isNodeInstance(mod)) {\n attachedListener = mod.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(mod)) ?? []\n setElements(newElements)\n })\n detachedListener = mod.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(mod)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [mod])\n\n return elements\n}\n","import { exists } from '@xylabs/exists'\nimport { isFalsy } from '@xylabs/sdk-js'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport type { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib/index.ts'\n\ninterface ModuleInfo {\n children: ModuleInfo[]\n depth: number\n mod: ModuleInstance\n}\n\nexport const CytoscapeElements = {\n MaxNameLength: 20,\n\n buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition, properties?: { [key: string]: unknown }) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n ...properties,\n },\n }\n },\n\n async buildElements(mod: ModuleInstance): Promise<ElementDefinition[]> {\n const info = await CytoscapeElements.recurseNodes(mod)\n const newElements: ElementDefinition[] = await this.buildElementsFromInfo(info, undefined, ['activeNode'])\n\n return newElements\n },\n\n async buildElementsFromInfo(info: ModuleInfo, root?: ElementDefinition, classes: string[] = []): Promise<ElementDefinition[]> {\n const newNode = CytoscapeElements.buildNode(info.mod, { childCount: info.children.length, depth: info.depth }, classes)\n const newEdge = root\n ? CytoscapeElements.buildEdge(root, newNode, { depth: info.depth, siblingCount: info.children.length })\n : undefined\n const newElements: ElementDefinition[] = [newNode]\n if (newEdge) {\n newElements.push(newEdge)\n }\n\n for (const childInfo of info.children) {\n newElements.push(...(await this.buildElementsFromInfo(childInfo, newNode)))\n }\n\n return newElements\n },\n\n buildNode(mod: ModuleInstance, properties?: { [key: string]: unknown }, classes?: string[]): ElementDefinition {\n const { address, id } = mod\n return {\n classes,\n data: {\n address,\n id: address,\n name: id,\n type: parseModuleType(mod),\n ...properties,\n },\n }\n },\n\n buildRootNode: (mod: ModuleInstance): ElementDefinition => {\n return CytoscapeElements.buildNode(mod, {}, ['activeNode'])\n },\n\n normalizeName(name?: string) {\n if (isFalsy(name)) return\n if (name.length > this.MaxNameLength) return `${name.slice(0, 20)}...`\n return name\n },\n\n async recurseNodes(root: ModuleInstance, maxDepth = 10, depth = 1): Promise<ModuleInfo> {\n const info: ModuleInfo = {\n children: [], depth, mod: root,\n }\n\n if (maxDepth > 0) {\n const children = await root.resolve('*', { direction: 'down', maxDepth: 1 })\n info.children = (\n await Promise.all(\n children.map(async (child) => {\n // don't re add the root module that was passed in\n if (child.address !== root.address) {\n return await this.recurseNodes(child, maxDepth - 1, depth + 1)\n }\n }),\n )\n ).filter(exists)\n }\n\n return info\n },\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { ReactElement } from 'react'\n// eslint-disable-next-line import-x/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.querySelectorAll('svg')[0]\n if (isDefined(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}${globalThis.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import type { CyNodeModuleTypes } from './CyNodeModuleTypes.ts'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n\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 type { LayoutOptions } from 'cytoscape'\n\nexport const ConcentricLayout: LayoutOptions = {\n concentric: function (node) {\n return node.degree(false)\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 type { ModuleInstance } from '@xyo-network/module-model'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel-model'\nimport { isWitnessModule } from '@xyo-network/witness-model'\n\nimport type { CyNodeModuleTypes } from './CyNodeModuleTypes.ts'\n\nexport const parseModuleType = (mod?: ModuleInstance): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (mod) {\n if (isArchivistInstance(mod)) {\n type = 'archivist'\n } else if (isBridgeInstance(mod)) {\n type = 'bridge'\n } else if (isDivinerInstance(mod)) {\n type = 'diviner'\n } else if (isNodeInstance(mod)) {\n type = 'node'\n } else if (isSentinelInstance(mod)) {\n type = 'sentinel'\n } else if (isWitnessModule(mod)) {\n type = 'witness'\n }\n }\n return type\n}\n","import type { SvgIconComponent } from '@mui/icons-material'\nimport {\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'\n\nimport type { CyNodeModuleTypes } from './lib/index.ts'\n\nexport const CyIconSet: Record<CyNodeModuleTypes, SvgIconComponent> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import type { StylesheetCSS } from 'cytoscape'\n\nimport type { CyNodeModuleTypes } from './lib/index.ts'\n\nexport const NodeWithName = (color?: string, outlineColor?: string): StylesheetCSS => ({\n selector: 'node[name]',\n css: {\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 Node = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string, hideLabels = false): StylesheetCSS => ({\n selector: 'node',\n css: {\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 NodeAsRoot = (bgColor?: string): StylesheetCSS => ({\n selector: '.activeNode',\n css: { 'background-color': bgColor },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string): StylesheetCSS => ({\n selector: 'edge',\n css: {\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 type { NodeCollection, NodeSingular } from 'cytoscape'\nimport type { Dispatch, SetStateAction } from 'react'\nimport {\n useCallback, useEffect, useState,\n} from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts/index.ts'\n\nexport const useHoveredNode = (renderedElements?: NodeCollection): [NodeSingular | undefined, Dispatch<SetStateAction<NodeSingular | undefined>>] => {\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 }, [])\n\n useEffect(() => {\n if (renderedElements) {\n // eslint-disable-next-line unicorn/no-array-for-each\n renderedElements.nodes().forEach(nodeListener)\n }\n }, [nodeListener, renderedElements])\n\n useEffect(() => {\n cy?.deref()?.ready(() => {\n // eslint-disable-next-line unicorn/no-array-for-each\n cy?.deref()?.nodes().forEach(nodeListener)\n })\n }, [cy, nodeListener])\n\n return [hoveredNode, setHoveredNode]\n}\n","import { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport type { NodeSingular } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeElements } from './useCytoscapeElements.ts'\n\nexport const useNewElements = (selectedElement?: NodeSingular) => {\n const selectedAddress = useMemo(() => {\n const { address: selectedAddress } = selectedElement?.data() ?? {}\n return selectedAddress\n }, [selectedElement])\n\n const [mod] = useWeakModuleFromNode(selectedAddress)\n const newElements = useCytoscapeElements(mod)\n\n return newElements\n}\n","import type { ElementDefinition } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts/index.ts'\nimport { ColaLayout } from '../../../Cytoscape/index.ts'\n\nexport const useRenderNewElements = (newElements: ElementDefinition[] = [], hideLabels?: boolean) => {\n const { cy } = useCytoscapeInstance(true)\n\n return useMemo(() => {\n if (newElements.length > 1) {\n const renderedElements = cy?.deref()?.add(newElements)\n cy?.deref()?.layout(ColaLayout).run()\n return renderedElements\n }\n }, [cy, hideLabels, newElements])\n}\n","import type { NodeSingular } from 'cytoscape'\nimport { useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts/index.ts'\n\nexport const useSelectedElement = () => {\n const [selectedElement, setSelectedElement] = useState<NodeSingular>()\n const { cy } = useCytoscapeInstance(true)\n\n const updateStyles = (element: NodeSingular) => {\n const nodes = cy?.deref()?.nodes()\n nodes?.toggleClass('activeNode', false)\n element.toggleClass('activeNode', true)\n }\n\n const toggleSelectedElement = (address?: string) => {\n const selectedNode = cy?.deref()?.nodes(`[id=\"${address}\"]`)?.[0]\n if (selectedNode) {\n setSelectedElement(selectedNode)\n updateStyles(selectedNode)\n }\n }\n\n return { selectedElement, toggleSelectedElement }\n}\n","import { useHoveredNode } from './useHoveredNode.tsx'\nimport { useNewElements } from './useNewElements.tsx'\nimport { useRenderNewElements } from './useRenderNewElements.tsx'\nimport { useSelectedElement } from './useSelectedElement.tsx'\n\nexport const useElements = (hideLabels: boolean) => {\n const { selectedElement, toggleSelectedElement } = useSelectedElement()\n const newElements = useNewElements(selectedElement)\n const renderedElements = useRenderNewElements(newElements, hideLabels)\n const [hoveredNode, setHoveredNode] = useHoveredNode(renderedElements)\n\n return {\n hoveredNode, setHoveredNode, toggleSelectedElement,\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape/index.ts'\nimport { useCytoscapeStyle } from './useCytoscapeStyle.tsx'\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 && isDefined(resolvedLayout) && isDefined(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 { useIsDark } from '@xylabs/react-theme'\nimport type { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport {\n EdgeStyled, Node, NodeAsRoot, NodeWithName,\n} from '../../Cytoscape/index.ts'\nimport { useIcons } from './useIcons.tsx'\n\nexport const useCytoscapeStyle = (hideLabels = false) => {\n const theme = useTheme()\n const dark = useIsDark()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n // eslint-disable-next-line complexity\n () => [\n Node(icons, dark ? theme.colorSchemes.dark?.palette.primary.main : theme.colorSchemes.light?.palette.primary.main, hideLabels),\n NodeWithName(\n dark ? theme.colorSchemes.dark?.palette.primary.contrastText : theme.colorSchemes.light?.palette.primary.contrastText,\n dark ? theme.colorSchemes.dark?.palette.text.primary : theme.colorSchemes.light?.palette.text.primary,\n ),\n NodeAsRoot(dark ? theme.colorSchemes.dark?.palette.secondary.main : theme.colorSchemes.light?.palette.secondary.main),\n EdgeStyled(\n dark ? theme.colorSchemes.dark?.palette.divider : theme.colorSchemes.light?.palette.divider,\n dark ? theme.colorSchemes.dark?.palette.divider : theme.colorSchemes.light?.palette.divider,\n ),\n ],\n [icons, hideLabels, theme],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport React, { useMemo } from 'react'\n\nimport type { CyNodeModuleTypes } from '../../Cytoscape/index.ts'\nimport {\n CyIconSet, encodeSvg, generateIconMap,\n} from '../../Cytoscape/index.ts'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.vars.palette.primary.contrastText)\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isDefinedNotNull, isTruthy,\n} from '@xylabs/sdk-js'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport {\n useCallback, useEffect, useState,\n} from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts/index.ts'\n\nexport const useModuleDetails = (rootModule?: WeakRef<ModuleInstance> | null, onFoundModule?: () => void) => {\n const { cy } = useCytoscapeInstance()\n const [moduleAddress, setModuleAddress] = useState<string | null>()\n\n const [foundModule] = usePromise(async () => {\n if (moduleAddress === null) return null\n const rootModuleInstance = rootModule?.deref()\n if (isDefined(moduleAddress) && isDefined(rootModuleInstance)) {\n const foundModule = await rootModuleInstance.resolve(moduleAddress)\n return foundModule ?? null\n }\n }, [moduleAddress, rootModule])\n\n const createObserver = useCallback(() => {\n return new ResizeObserver(() => {\n if (moduleAddress === null) {\n // cytoscape tries to center prematurely without it :(\n setTimeout(() => {\n cy?.deref()?.center()\n }, 100)\n } else if (foundModule && cy) {\n const node = cy?.deref()?.nodes(`[id=\"${moduleAddress}\"]`)?.[0]\n // cy.pan(newPan)\n // cytoscape tries to center prematurely without it :(\n setTimeout(() => {\n cy?.deref()?.center(node)\n }, 100)\n }\n })\n }, [cy, moduleAddress, foundModule])\n\n useEffect(() => {\n const resizeObserver = createObserver()\n\n const container = cy?.deref()?.container()\n if (container) {\n resizeObserver.observe(container)\n }\n\n return () => {\n if (container) resizeObserver.unobserve(container)\n }\n }, [cy, moduleAddress, foundModule, rootModule])\n\n useEffect(() => {\n if (foundModule) {\n onFoundModule?.()\n }\n }, [cy, moduleAddress, foundModule, onFoundModule, createObserver])\n\n // eslint-disable-next-line complexity\n const onModuleDetails = (address?: string | null) => {\n const moduleNode = cy?.deref()?.nodes(`[id=\"${address}\"]`)\n const rootModuleNode = cy?.deref()?.nodes(`[id=\"${rootModule?.deref()?.address}\"]`)\n const foundModuleNode = cy?.deref()?.nodes(`[id=\"${foundModule?.address}\"]`)\n const notModuleNode = cy?.deref()?.nodes(`[id != \"${address}\"]`)\n\n if (isTruthy(address)) {\n // address was passed so we set the node to active styles\n moduleNode?.toggleClass('activeNode', true)\n notModuleNode?.toggleClass('activeNode', false)\n } else {\n // no address was passes so we reset the state\n notModuleNode?.toggleClass('activeNode', false)\n const activeNode = isDefinedNotNull(foundModuleNode) && foundModuleNode.length > 0 ? foundModuleNode : rootModuleNode\n activeNode?.toggleClass('activeNode', true)\n }\n setModuleAddress(address)\n }\n\n return { mod: foundModule, onModuleDetails }\n}\n","import type { ModuleInstance } from '@xyo-network/module-model'\nimport { useState } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape/index.ts'\nimport { useCytoscapeElements } from './elements/index.ts'\nimport { useCytoscapeOptions } from './useCytoscapeOptions.ts'\nimport { useCytoscapeStyle } from './useCytoscapeStyle.tsx'\n\nexport const useRelationalGraphOptions = (mod?: WeakRef<ModuleInstance>) => {\n const [hideLabels, setHideLabels] = useState(true)\n\n const handleToggleLabels = () => {\n setHideLabels(oldValue => !oldValue)\n }\n\n const elements = useCytoscapeElements(mod)\n const style = useCytoscapeStyle(hideLabels)\n const options = useCytoscapeOptions(elements, style, ConcentricLayout)\n\n return {\n handleToggleLabels, hideLabels, options,\n }\n}\n","import cytoscape from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkent from 'cytoscape-cose-bilkent'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nexport const WithExtensions: React.FC<PropsWithChildren> = ({ children }) => {\n const initialized = useMemo(() => {\n cytoscape.use(cola)\n cytoscape.use(coseBilkent)\n return true\n }, [])\n\n return <>{initialized ? children : undefined}</>\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Box, Button, ButtonGroup, Card, CardHeader, Paper, useTheme,\n} from '@mui/material'\nimport {\n FlexCol, FlexGrowRow, FlexRow,\n} from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport type { Address } from '@xylabs/sdk-js'\nimport { asAddress, isDefined } from '@xylabs/sdk-js'\nimport { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport type {\n Core, EventHandler, NodeSingular,\n} from 'cytoscape'\nimport cytoscape from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkentLayout from 'cytoscape-cose-bilkent'\nimport dagre from 'cytoscape-dagre'\nimport euler from 'cytoscape-euler'\nimport React, {\n useEffect, useRef, useState,\n} from 'react'\n\nimport type { NodeRelationalGraphProps } from '../../lib/index.ts'\n\nconst applyLayout = (cy?: cytoscape.Core, name = 'cola', options?: object) => {\n cy?.layout({ name, ...options }).run()\n}\n\nconst loadLayout = (layout = 'cola') => {\n switch (layout) {\n case 'cose-bilkent': {\n cytoscape.use(coseBilkentLayout)\n break\n }\n case 'cola': {\n cytoscape.use(cola)\n break\n }\n case 'euler': {\n cytoscape.use(euler)\n break\n }\n case 'dagre': {\n cytoscape.use(dagre)\n break\n }\n default: {\n cytoscape.use(euler)\n break\n }\n }\n}\n\ntype ModuleHoverDetailsProps = CardProps & {\n address: Address\n name: string\n}\n\nconst ModuleHoverDetails: React.FC<ModuleHoverDetailsProps> = ({\n name, address, ...props\n}) => {\n return (\n <Card elevation={3} {...props}>\n <CardHeader\n avatar={(\n <Paper\n elevation={6}\n sx={{ bgcolor: '#fff', p: 1 }}\n >\n <Identicon value={address} size={24} />\n </Paper>\n )}\n title={name}\n subheader={address}\n />\n </Card>\n )\n}\n\nexport const NodeRelationalGraphFlexBox: React.FC<NodeRelationalGraphProps> = ({\n actions, children, node, layout, layoutOptions, showDetails, detail, options, onHover, ...props\n}) => {\n const theme = useTheme()\n const [cy, setCy] = useState<Core>()\n const cytoscapeRef = useRef<HTMLDivElement>(null)\n const [hoverPosition, setHoverBoundingBox] = useState<{ x1: number; x2: number; y1: number; y2: number }>()\n const [hoverAddress, setHoverAddress] = useState<Address>()\n\n const [moduleInstance] = useWeakModuleFromNode(hoverAddress, { node })\n\n useEffect(() => {\n const listener: EventHandler = ({ target }) => {\n const cyNode = target as NodeSingular\n const bb = cyNode?.renderedBoundingBox?.()\n setHoverBoundingBox(bb)\n const id = cyNode.id?.()\n if (isDefined(id)) {\n if (id.includes('/')) {\n setHoverAddress(undefined)\n onHover?.()\n } else {\n setHoverAddress(asAddress(id))\n onHover?.(asAddress(id))\n }\n }\n }\n cy?.on('mouseover tap', listener)\n\n return () => {\n cy?.off('mouseover tap', listener)\n }\n }, [onHover, cy])\n\n const handleReset = () => {\n cy?.reset()\n applyLayout(cy, layout ?? 'euler', layoutOptions)\n }\n\n useEffect(() => {\n let newCy: Core | undefined\n const container = cytoscapeRef.current\n if (container) {\n newCy = cytoscape({\n container,\n ...options,\n })\n setCy(newCy)\n } else {\n newCy?.destroy()\n setCy(undefined)\n }\n return () => {\n newCy?.destroy()\n setCy(undefined)\n }\n }, [options, cytoscapeRef, layoutOptions])\n\n useEffect(() => {\n if (cy) {\n loadLayout(layout)\n applyLayout(cy, layout ?? 'cola', layoutOptions)\n }\n }, [cy, layoutOptions, layout])\n\n return (\n <FlexCol id=\"relational-graph-wrapper\" {...props}>\n {hoverAddress && hoverPosition\n ? (\n <Box position=\"absolute\" top={hoverPosition.y1} left={hoverPosition.x1} zIndex={100}>\n <ModuleHoverDetails address={hoverAddress} name={moduleInstance?.deref()?.id ?? 'Unknown'} />\n </Box>\n )\n : null}\n <FlexRow justifyContent=\"start\" width=\"100%\">\n {actions === null\n ? null\n : isDefined(actions)\n ? (\n <ButtonGroup>\n {actions}\n <Button size=\"small\" variant=\"contained\" onClick={handleReset}>\n Reset View\n </Button>\n </ButtonGroup>\n )\n : (\n <Button size=\"small\" variant=\"contained\" onClick={handleReset}>\n Reset\n </Button>\n )}\n </FlexRow>\n <FlexGrowRow width=\"100%\" alignItems=\"start\">\n {showDetails\n ? (\n <FlexCol height=\"100%\" width=\"85%\">\n {detail}\n </FlexCol>\n )\n : null}\n <FlexCol\n justifyContent=\"start\"\n classes=\"cytoscape-wrap\"\n width={showDetails ? '15%' : '100%'}\n height={showDetails ? '50%' : '100%'}\n border={showDetails ? `1px solid ${theme.vars.palette.divider}` : undefined}\n >\n {/* Cytoscape Element */}\n <FlexCol alignItems=\"stretch\" position=\"absolute\" width=\"100%\" height=\"100%\" ref={cytoscapeRef} />\n {children}\n </FlexCol>\n </FlexGrowRow>\n </FlexCol>\n )\n}\n\nNodeRelationalGraphFlexBox.displayName = 'NodeRelationalGraph'\n\n/** @deprecated */\nexport const NodeRelationalGraph = NodeRelationalGraphFlexBox\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { useWeakProvidedNode } from '@xyo-network/react-node'\nimport React from 'react'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../../../hooks/index.ts'\nimport type { NodeRelationalGraphProps } from '../../lib/index.ts'\nimport { NodeRelationalGraphFlexBox } from './Graph.tsx'\n\nexport interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {\n account?: AccountInstance\n layout?: 'dagre' | 'euler' | 'cose-bilkent' | 'cola'\n layoutOptions?: object\n node?: WeakRef<NodeInstance>\n}\n\nexport const ProvidedNodeRenderer: React.FC<ProvidedNodeRendererProps> = ({ node, ...props }) => {\n const [providedNode] = useWeakProvidedNode()\n const elements = useCytoscapeElements(node ?? providedNode)\n const options = useCytoscapeOptions(elements)\n\n return <NodeRelationalGraphFlexBox alignItems=\"stretch\" flexGrow={1} height=\"100%\" options={options} {...props} />\n}\n","import { CancelRounded } from '@mui/icons-material'\nimport { IconButton } from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexGrowCol, FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nexport interface DetailsFlexboxProps extends FlexBoxProps {\n onClose?: () => void\n}\n\nexport const DetailsFlexbox: React.FC<DetailsFlexboxProps> = ({ children, onClose }) => {\n return (\n <FlexGrowCol alignItems=\"end\" justifyContent=\"start\" id=\"module-detail\" width=\"100%\" p={2} gap={2}>\n <FlexRow justifyContent=\"end\">\n <IconButton onClick={onClose} size=\"small\">\n <CancelRounded />\n </IconButton>\n </FlexRow>\n {children}\n </FlexGrowCol>\n )\n}\n","import type { PopperProps } from '@mui/material'\nimport { styled } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { NodeSingular } from 'cytoscape'\nimport type { ReactElement } from 'react'\nimport React from 'react'\n\nimport { useNodeElement } from './hooks/index.ts'\n\nexport interface ModuleHoverProps {\n children?: (anchorElement?: PopperProps['anchorEl'], container?: PopperProps['container']) => ReactElement\n node?: NodeSingular\n}\n\nexport const ModuleGraphNodeHover: React.FC<ModuleHoverProps> = ({ children, node }) => {\n const {\n boundingBox, ref, currentElement,\n } = useNodeElement(node)\n\n return (\n <>\n <StyledNodeGhostElementFlexCol ref={ref} left={boundingBox?.x1} height={boundingBox?.h} top={boundingBox?.y1} width={boundingBox?.w} />\n {node\n ? <>{children?.(currentElement)}</>\n : null}\n </>\n )\n}\n\nconst StyledNodeGhostElementFlexCol = styled(FlexCol, { name: 'StyledNodeGhostElementFlexCol' })(() => ({\n // For easier debugging of the 'ghost' element that matches the hovered cytoscape node\n // backgroundColor: '#fff',\n // opacity: 0.25,\n\n cursor: 'pointer',\n pointerEvents: 'none',\n position: 'absolute',\n}))\n","import type { PopperProps } from '@mui/material'\nimport type { NodeSingular } from 'cytoscape'\nimport {\n useEffect, useMemo, useRef, useState,\n} from 'react'\n\nexport const useNodeElement = (node?: NodeSingular) => {\n const ref = useRef<HTMLDivElement>(null)\n const [currentElement, setCurrentElement] = useState<PopperProps['anchorEl'] | null>(null)\n const [boundingBox, setBoundingBox] = useState(node?.renderedBoundingBox())\n\n // Ensure first render clears the previous element when node changes to avoid flicker\n useMemo(() => {\n setCurrentElement(null)\n }, [node])\n\n useMemo(() => {\n setBoundingBox(node?.renderedBoundingBox())\n }, [node])\n\n useEffect(() => {\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 useMemo(() => {\n setCurrentElement(ref.current)\n }, [boundingBox])\n\n return {\n boundingBox, currentElement, ref,\n }\n}\n","import { CancelRounded } from '@mui/icons-material'\nimport type { PopperProps } from '@mui/material'\nimport {\n Button, Card, CardActions, CardHeader, IconButton, Paper, Popper, styled,\n} from '@mui/material'\nimport { Identicon } from '@xylabs/react-identicon'\nimport type { NodeSingular } from 'cytoscape'\nimport React from 'react'\n\nexport interface ModuleHoverPopperProps extends PopperProps {\n node?: NodeSingular\n onClose?: () => void\n onModuleDetails?: (address?: string) => void\n onModuleExplore?: (address?: string) => void\n}\n\nexport const ModuleHoverPopper: React.FC<ModuleHoverPopperProps> = ({\n anchorEl, onClose, onModuleDetails, onModuleExplore, node, ...props\n}) => {\n const { address, name } = node?.data() ?? {}\n return (\n <>\n {anchorEl\n ? (\n <Popper anchorEl={anchorEl} {...props}>\n <Card elevation={3}>\n <CardHeader\n action={\n onClose\n ? (\n <IconButton size=\"small\" onClick={onClose}>\n <CancelRounded />\n </IconButton>\n )\n : null\n }\n avatar={(\n <Paper\n elevation={6}\n sx={{ bgcolor: '#fff', p: 1 }}\n >\n <Identicon value={address} size={24} />\n </Paper>\n )}\n title={name}\n subheader={address}\n />\n <StyledCardActions>\n {onModuleDetails\n ? (\n <Button onClick={() => onModuleDetails?.(address)} size=\"small\" variant=\"contained\">\n Details\n </Button>\n )\n : null}\n {onModuleExplore\n ? (\n <Button onClick={() => onModuleExplore?.(address)} size=\"small\" variant=\"contained\">\n Explore\n </Button>\n )\n : null}\n </StyledCardActions>\n </Card>\n </Popper>\n )\n : null}\n </>\n )\n}\n\nexport const StyledModuleHoverPopper = styled(ModuleHoverPopper, { name: 'StyledComponents' })(() => ({ zIndex: 2 }))\n\nexport const StyledCardActions = styled(CardActions, { name: 'StyledCardActions' })(() => ({\n display: 'flex',\n justifyContent: 'center',\n}))\n"],"mappings":"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","names":["asArchivistInstance","isArchivistInstance","asDivinerInstance","isDivinerInstance","ArchivistCard","DivinerCard","ModuleCard","React","ModuleCardParser","mod","isArchivistInstance","ArchivistCard","asArchivistInstance","isDivinerInstance","DivinerCard","asDivinerInstance","ModuleCard","Button","React","useRef","createContextEx","CytoscapeInstanceContext","React","useMemo","useState","CytoscapeInstanceProvider","children","defaultInstance","cy","setCy","useState","value","useMemo","provided","React","CytoscapeInstanceContext","useContextEx","useCytoscapeInstance","required","useContextEx","CytoscapeInstanceContext","useAsyncEffect","isNodeInstance","useEffect","useState","exists","isFalsy","isDefined","renderToStaticMarkup","dataUri","encodeSvg","reactElement","color","svgString","renderToStaticMarkup","doc","DOMParser","parseFromString","svgElement","querySelectorAll","isDefined","setAttribute","style","fill","globalThis","encodeURIComponent","outerHTML","generateIconMap","archivist","bridge","diviner","module","node","sentinel","witness","ColaLayout","centerGraph","convergenceThreshold","name","ConcentricLayout","concentric","node","degree","levelWidth","minNodeSpacing","name","isArchivistInstance","isBridgeInstance","isDivinerInstance","isNodeInstance","isSentinelInstance","isWitnessModule","parseModuleType","mod","type","isArchivistInstance","isBridgeInstance","isDivinerInstance","isNodeInstance","isSentinelInstance","isWitnessModule","CytoscapeElements","MaxNameLength","buildEdge","rootNode","newNode","properties","data","id","source","target","buildElements","mod","info","recurseNodes","newElements","buildElementsFromInfo","undefined","root","classes","buildNode","childCount","children","length","depth","newEdge","siblingCount","push","childInfo","address","name","type","parseModuleType","buildRootNode","normalizeName","isFalsy","slice","maxDepth","resolve","direction","Promise","all","map","child","filter","exists","BubbleChartRounded","BubbleChartRoundedIcon","Hub","HubIcon","InsertLinkRounded","InsertLinkRoundedIcon","Inventory2Rounded","Inventory2RoundedIcon","QuestionMarkRounded","QuestionMarkRoundedIcon","TimerRounded","TimerRoundedIcon","VisibilityRounded","VisibilityRoundedIcon","CyIconSet","archivist","bridge","diviner","module","node","sentinel","witness","NodeWithName","color","outlineColor","selector","css","Node","icons","bgColor","hideLabels","elem","data","undefined","NodeAsRoot","EdgeStyled","lineColor","targetArrowColor","useCytoscapeElements","mod","elements","setElements","useState","useAsyncEffect","moduleInstance","deref","newElements","CytoscapeElements","buildElements","useEffect","attachedListener","detachedListener","isNodeInstance","on","useCallback","useEffect","useState","useHoveredNode","renderedElements","cy","useCytoscapeInstance","hoveredNode","setHoveredNode","useState","nodeListener","useCallback","node","on","useEffect","nodes","forEach","deref","ready","useWeakModuleFromNode","useMemo","useNewElements","selectedElement","selectedAddress","useMemo","address","data","mod","useWeakModuleFromNode","newElements","useCytoscapeElements","useMemo","useRenderNewElements","newElements","hideLabels","cy","useCytoscapeInstance","useMemo","length","renderedElements","deref","add","layout","ColaLayout","run","useState","useSelectedElement","selectedElement","setSelectedElement","useState","cy","useCytoscapeInstance","updateStyles","element","nodes","deref","toggleClass","toggleSelectedElement","address","selectedNode","useElements","hideLabels","selectedElement","toggleSelectedElement","useSelectedElement","newElements","useNewElements","renderedElements","useRenderNewElements","hoveredNode","setHoveredNode","useHoveredNode","isDefined","useMemo","useTheme","useIsDark","useMemo","useTheme","React","useMemo","useIcons","theme","useTheme","icons","useMemo","iconMap","generateIconMap","Object","entries","CyIconSet","reduce","acc","name","IconComponent","icon","React","fontSize","encodeSvg","vars","palette","primary","contrastText","useCytoscapeStyle","hideLabels","theme","useTheme","dark","useIsDark","icons","useIcons","style","useMemo","Node","colorSchemes","palette","primary","main","light","NodeWithName","contrastText","text","NodeAsRoot","secondary","EdgeStyled","divider","useCytoscapeOptions","elements","style","layout","defaultStyle","useCytoscapeStyle","resolvedLayout","ConcentricLayout","resolvedStyle","options","useMemo","isDefined","usePromise","isDefined","isDefinedNotNull","isTruthy","useCallback","useEffect","useState","useModuleDetails","rootModule","onFoundModule","cy","useCytoscapeInstance","moduleAddress","setModuleAddress","useState","foundModule","usePromise","rootModuleInstance","deref","isDefined","resolve","createObserver","useCallback","ResizeObserver","setTimeout","center","node","nodes","useEffect","resizeObserver","container","observe","unobserve","onModuleDetails","address","moduleNode","rootModuleNode","foundModuleNode","notModuleNode","isTruthy","toggleClass","activeNode","isDefinedNotNull","length","mod","useState","useRelationalGraphOptions","mod","hideLabels","setHideLabels","useState","handleToggleLabels","oldValue","elements","useCytoscapeElements","style","useCytoscapeStyle","options","useCytoscapeOptions","ConcentricLayout","cytoscape","cola","coseBilkent","React","useMemo","WithExtensions","children","initialized","useMemo","cytoscape","use","cola","coseBilkent","React","undefined","Box","Button","ButtonGroup","Card","CardHeader","Paper","useTheme","FlexCol","FlexGrowRow","FlexRow","Identicon","asAddress","isDefined","useWeakModuleFromNode","cytoscape","cola","coseBilkentLayout","dagre","euler","React","useEffect","useRef","useState","applyLayout","cy","name","options","layout","run","loadLayout","cytoscape","use","coseBilkentLayout","cola","euler","dagre","ModuleHoverDetails","address","props","React","Card","elevation","CardHeader","avatar","Paper","sx","bgcolor","p","Identicon","value","size","title","subheader","NodeRelationalGraphFlexBox","actions","children","node","layoutOptions","showDetails","detail","onHover","theme","useTheme","setCy","useState","cytoscapeRef","useRef","hoverPosition","setHoverBoundingBox","hoverAddress","setHoverAddress","moduleInstance","useWeakModuleFromNode","useEffect","listener","target","cyNode","bb","renderedBoundingBox","id","isDefined","includes","undefined","asAddress","on","off","handleReset","reset","newCy","container","current","destroy","FlexCol","Box","position","top","y1","left","x1","zIndex","deref","FlexRow","justifyContent","width","ButtonGroup","Button","variant","onClick","FlexGrowRow","alignItems","height","classes","border","vars","palette","divider","ref","displayName","NodeRelationalGraph","useWeakProvidedNode","React","ProvidedNodeRenderer","node","props","providedNode","useWeakProvidedNode","elements","useCytoscapeElements","options","useCytoscapeOptions","React","NodeRelationalGraphFlexBox","alignItems","flexGrow","height","CancelRounded","IconButton","FlexGrowCol","FlexRow","React","DetailsFlexbox","children","onClose","React","FlexGrowCol","alignItems","justifyContent","id","width","p","gap","FlexRow","IconButton","onClick","size","CancelRounded","styled","FlexCol","React","useEffect","useMemo","useRef","useState","useNodeElement","node","ref","useRef","currentElement","setCurrentElement","useState","boundingBox","setBoundingBox","renderedBoundingBox","useMemo","useEffect","listener","on","off","undefined","current","ModuleGraphNodeHover","children","node","boundingBox","ref","currentElement","useNodeElement","React","StyledNodeGhostElementFlexCol","left","x1","height","h","top","y1","width","w","styled","FlexCol","name","cursor","pointerEvents","position","CancelRounded","Button","Card","CardActions","CardHeader","IconButton","Paper","Popper","styled","Identicon","React","ModuleHoverPopper","anchorEl","onClose","onModuleDetails","onModuleExplore","node","props","address","name","data","React","Popper","Card","elevation","CardHeader","action","IconButton","size","onClick","CancelRounded","avatar","Paper","sx","bgcolor","p","Identicon","value","title","subheader","StyledCardActions","Button","variant","StyledModuleHoverPopper","styled","zIndex","CardActions","display","justifyContent","ModuleGraphFlexBox","hideActions","rootModule","disableModuleDetails","props","cytoscapeRef","useRef","handleToggleLabels","hideLabels","options","useRelationalGraphOptions","undefined","hoveredNode","setHoveredNode","toggleSelectedElement","useElements","mod","onModuleDetails","useModuleDetails","React","WithExtensions","NodeRelationalGraphFlexBox","actions","Button","size","onClick","variant","showDetails","detail","DetailsFlexbox","onClose","ref","width","ModuleGraphNodeHover","node","element","StyledModuleHoverPopper","anchorEl","container","current","onModuleExplore","placement","open","ModuleGraphFlexBoxWithProvider","CytoscapeInstanceProvider"]}
|
|
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/elements/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/elements/useHoveredNode.tsx","../../src/hooks/cytoscape/elements/useNewElements.tsx","../../src/hooks/cytoscape/elements/useRenderNewElements.tsx","../../src/hooks/cytoscape/elements/useSelectedElement.tsx","../../src/hooks/cytoscape/elements/useElements.tsx","../../src/hooks/cytoscape/useCytoscapeOptions.ts","../../src/hooks/cytoscape/useCytoscapeStyle.tsx","../../src/hooks/cytoscape/useIcons.tsx","../../src/hooks/cytoscape/useModuleDetails.tsx","../../src/hooks/cytoscape/useRelationalGraphOptions.tsx","../../src/components/cytoscape-extensions/WithExtensions.tsx","../../src/components/relational/graph/Graph.tsx","../../src/components/relational/graph/ProvidedNodeRenderer.tsx","../../src/components/module/graph/DetailsFlexbox.tsx","../../src/components/module/graph/node/Hover.tsx","../../src/components/module/graph/node/hooks/useNodeElement.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 type { ModuleInstance } from '@xyo-network/module-model'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\nimport React from 'react'\n\nexport interface ModuleCardParserProps {\n mod?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ mod }) => {\n switch (true) {\n case isArchivistInstance(mod): {\n return <ArchivistCard mod={asArchivistInstance(mod)} />\n }\n case isDivinerInstance(mod): {\n return <DivinerCard mod={asDivinerInstance(mod)} />\n }\n default: {\n return <ModuleCard mod={mod} />\n }\n }\n}\n","import { Button } from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport React, { useRef } from 'react'\n\nimport { CytoscapeInstanceProvider } from '../../../contexts/index.ts'\nimport {\n useElements, useModuleDetails, useRelationalGraphOptions,\n} from '../../../hooks/index.ts'\nimport { WithExtensions } from '../../cytoscape-extensions/index.ts'\nimport { NodeRelationalGraphFlexBox } from '../../relational/index.ts'\nimport { DetailsFlexbox } from './DetailsFlexbox.tsx'\nimport { ModuleGraphNodeHover } from './node/index.ts'\nimport { StyledModuleHoverPopper } from './Popper.tsx'\n\nexport interface ModuleGraphFlexBoxProps extends FlexBoxProps {\n disableModuleDetails?: boolean\n hideActions?: boolean\n layout?: 'dagre' | 'euler' | 'cose-bilkent' | 'cola'\n layoutOptions?: object\n rootModule?: WeakRef<ModuleInstance> | null\n}\n\nexport const ModuleGraphFlexBox: React.FC<ModuleGraphFlexBoxProps> = ({\n hideActions, rootModule, disableModuleDetails, ...props\n}) => {\n const cytoscapeRef = useRef<HTMLDivElement>(null)\n const {\n handleToggleLabels, hideLabels, options,\n } = useRelationalGraphOptions(rootModule ?? undefined)\n const {\n hoveredNode, setHoveredNode, toggleSelectedElement,\n } = useElements(hideLabels)\n\n const { mod, onModuleDetails } = useModuleDetails(rootModule, () => setHoveredNode(undefined))\n\n return (\n <WithExtensions>\n <NodeRelationalGraphFlexBox\n actions={\n mod\n ? null\n : hideActions\n ? null\n : (\n <Button size=\"small\" onClick={handleToggleLabels} variant=\"contained\">\n Toggle Labels\n </Button>\n )\n\n }\n showDetails={!!mod}\n detail={<DetailsFlexbox onClose={() => onModuleDetails(null)} />}\n options={options}\n ref={cytoscapeRef}\n width=\"100%\"\n {...props}\n >\n <ModuleGraphNodeHover node={hoveredNode}>\n {element => (\n <StyledModuleHoverPopper\n anchorEl={element}\n container={cytoscapeRef.current}\n node={hoveredNode}\n onClose={() => setHoveredNode(undefined)}\n onModuleExplore={toggleSelectedElement}\n onModuleDetails={disableModuleDetails ? undefined : onModuleDetails}\n placement=\"top\"\n open\n />\n )}\n </ModuleGraphNodeHover>\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 '@xylabs/react-shared'\n\nimport type { CytoscapeInstanceState } from './State.ts'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import type { Core } from 'cytoscape'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { CytoscapeInstanceContext } from './Context.ts'\nimport type { CytoscapeInstanceState } from './State.ts'\n\nexport interface CytoscapeInstanceProviderProps extends PropsWithChildren {\n defaultInstance?: WeakRef<Core>\n}\n\nexport const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {\n const [cy, setCy] = useState<WeakRef<Core> | undefined>(() => defaultInstance)\n\n const value: CytoscapeInstanceState = useMemo(() => ({\n cy, provided: true, setCy,\n }), [cy, setCy])\n\n return (\n <CytoscapeInstanceContext value={value}>\n {children}\n </CytoscapeInstanceContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context.ts'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n","import type { EventUnsubscribeFunction } from '@xylabs/events'\nimport { useAsyncEffect } from '@xylabs/react-async-effect'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport type { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../../Cytoscape/index.ts'\n\nexport const useCytoscapeElements = (mod?: WeakRef<ModuleInstance> | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n\n async () => {\n const moduleInstance = mod?.deref()\n if (moduleInstance) {\n const newElements = (await CytoscapeElements.buildElements(moduleInstance)) ?? []\n setElements(newElements)\n }\n },\n [mod],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined\n let detachedListener: EventUnsubscribeFunction | undefined\n\n if (mod && isNodeInstance(mod)) {\n attachedListener = mod.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(mod)) ?? []\n setElements(newElements)\n })\n detachedListener = mod.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(mod)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [mod])\n\n return elements\n}\n","import { exists, isFalsy } from '@xylabs/sdk-js'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport type { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib/index.ts'\n\ninterface ModuleInfo {\n children: ModuleInfo[]\n depth: number\n mod: ModuleInstance\n}\n\nexport const CytoscapeElements = {\n MaxNameLength: 20,\n\n buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition, properties?: { [key: string]: unknown }) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n ...properties,\n },\n }\n },\n\n async buildElements(mod: ModuleInstance): Promise<ElementDefinition[]> {\n const info = await CytoscapeElements.recurseNodes(mod)\n const newElements: ElementDefinition[] = await this.buildElementsFromInfo(info, undefined, ['activeNode'])\n\n return newElements\n },\n\n async buildElementsFromInfo(info: ModuleInfo, root?: ElementDefinition, classes: string[] = []): Promise<ElementDefinition[]> {\n const newNode = CytoscapeElements.buildNode(info.mod, { childCount: info.children.length, depth: info.depth }, classes)\n const newEdge = root\n ? CytoscapeElements.buildEdge(root, newNode, { depth: info.depth, siblingCount: info.children.length })\n : undefined\n const newElements: ElementDefinition[] = [newNode]\n if (newEdge) {\n newElements.push(newEdge)\n }\n\n for (const childInfo of info.children) {\n newElements.push(...(await this.buildElementsFromInfo(childInfo, newNode)))\n }\n\n return newElements\n },\n\n buildNode(mod: ModuleInstance, properties?: { [key: string]: unknown }, classes?: string[]): ElementDefinition {\n const { address, id } = mod\n return {\n classes,\n data: {\n address,\n id: address,\n name: id,\n type: parseModuleType(mod),\n ...properties,\n },\n }\n },\n\n buildRootNode: (mod: ModuleInstance): ElementDefinition => {\n return CytoscapeElements.buildNode(mod, {}, ['activeNode'])\n },\n\n normalizeName(name?: string) {\n if (isFalsy(name)) return\n if (name.length > this.MaxNameLength) return `${name.slice(0, 20)}...`\n return name\n },\n\n async recurseNodes(root: ModuleInstance, maxDepth = 10, depth = 1): Promise<ModuleInfo> {\n const info: ModuleInfo = {\n children: [], depth, mod: root,\n }\n\n if (maxDepth > 0) {\n const children = await root.resolve('*', { direction: 'down', maxDepth: 1 })\n info.children = (\n await Promise.all(\n children.map(async (child) => {\n // don't re add the root module that was passed in\n if (child.address !== root.address) {\n return await this.recurseNodes(child, maxDepth - 1, depth + 1)\n }\n }),\n )\n ).filter(exists)\n }\n\n return info\n },\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { ReactElement } from 'react'\n// eslint-disable-next-line import-x/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.querySelectorAll('svg')[0]\n if (isDefined(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}${globalThis.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import type { CyNodeModuleTypes } from './CyNodeModuleTypes.ts'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n\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 type { LayoutOptions } from 'cytoscape'\n\nexport const ConcentricLayout: LayoutOptions = {\n concentric: function (node) {\n return node.degree(false)\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 type { ModuleInstance } from '@xyo-network/module-model'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { isSentinelInstance } from '@xyo-network/sentinel-model'\nimport { isWitnessModule } from '@xyo-network/witness-model'\n\nimport type { CyNodeModuleTypes } from './CyNodeModuleTypes.ts'\n\nexport const parseModuleType = (mod?: ModuleInstance): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (mod) {\n if (isArchivistInstance(mod)) {\n type = 'archivist'\n } else if (isBridgeInstance(mod)) {\n type = 'bridge'\n } else if (isDivinerInstance(mod)) {\n type = 'diviner'\n } else if (isNodeInstance(mod)) {\n type = 'node'\n } else if (isSentinelInstance(mod)) {\n type = 'sentinel'\n } else if (isWitnessModule(mod)) {\n type = 'witness'\n }\n }\n return type\n}\n","import type { SvgIconComponent } from '@mui/icons-material'\nimport {\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'\n\nimport type { CyNodeModuleTypes } from './lib/index.ts'\n\nexport const CyIconSet: Record<CyNodeModuleTypes, SvgIconComponent> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import type { StylesheetCSS } from 'cytoscape'\n\nimport type { CyNodeModuleTypes } from './lib/index.ts'\n\nexport const NodeWithName = (color?: string, outlineColor?: string): StylesheetCSS => ({\n selector: 'node[name]',\n css: {\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 Node = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string, hideLabels = false): StylesheetCSS => ({\n selector: 'node',\n css: {\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 NodeAsRoot = (bgColor?: string): StylesheetCSS => ({\n selector: '.activeNode',\n css: { 'background-color': bgColor },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string): StylesheetCSS => ({\n selector: 'edge',\n css: {\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 type { NodeCollection, NodeSingular } from 'cytoscape'\nimport type { Dispatch, SetStateAction } from 'react'\nimport {\n useCallback, useEffect, useState,\n} from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts/index.ts'\n\nexport const useHoveredNode = (renderedElements?: NodeCollection): [NodeSingular | undefined, Dispatch<SetStateAction<NodeSingular | undefined>>] => {\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 }, [])\n\n useEffect(() => {\n if (renderedElements) {\n // eslint-disable-next-line unicorn/no-array-for-each\n renderedElements.nodes().forEach(nodeListener)\n }\n }, [nodeListener, renderedElements])\n\n useEffect(() => {\n cy?.deref()?.ready(() => {\n // eslint-disable-next-line unicorn/no-array-for-each\n cy?.deref()?.nodes().forEach(nodeListener)\n })\n }, [cy, nodeListener])\n\n return [hoveredNode, setHoveredNode]\n}\n","import { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport type { NodeSingular } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeElements } from './useCytoscapeElements.ts'\n\nexport const useNewElements = (selectedElement?: NodeSingular) => {\n const selectedAddress = useMemo(() => {\n const { address: selectedAddress } = selectedElement?.data() ?? {}\n return selectedAddress\n }, [selectedElement])\n\n const [mod] = useWeakModuleFromNode(selectedAddress)\n const newElements = useCytoscapeElements(mod)\n\n return newElements\n}\n","import type { ElementDefinition } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts/index.ts'\nimport { ColaLayout } from '../../../Cytoscape/index.ts'\n\nexport const useRenderNewElements = (newElements: ElementDefinition[] = [], hideLabels?: boolean) => {\n const { cy } = useCytoscapeInstance(true)\n\n return useMemo(() => {\n if (newElements.length > 1) {\n const renderedElements = cy?.deref()?.add(newElements)\n cy?.deref()?.layout(ColaLayout).run()\n return renderedElements\n }\n }, [cy, hideLabels, newElements])\n}\n","import type { NodeSingular } from 'cytoscape'\nimport { useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts/index.ts'\n\nexport const useSelectedElement = () => {\n const [selectedElement, setSelectedElement] = useState<NodeSingular>()\n const { cy } = useCytoscapeInstance(true)\n\n const updateStyles = (element: NodeSingular) => {\n const nodes = cy?.deref()?.nodes()\n nodes?.toggleClass('activeNode', false)\n element.toggleClass('activeNode', true)\n }\n\n const toggleSelectedElement = (address?: string) => {\n const selectedNode = cy?.deref()?.nodes(`[id=\"${address}\"]`)?.[0]\n if (selectedNode) {\n setSelectedElement(selectedNode)\n updateStyles(selectedNode)\n }\n }\n\n return { selectedElement, toggleSelectedElement }\n}\n","import { useHoveredNode } from './useHoveredNode.tsx'\nimport { useNewElements } from './useNewElements.tsx'\nimport { useRenderNewElements } from './useRenderNewElements.tsx'\nimport { useSelectedElement } from './useSelectedElement.tsx'\n\nexport const useElements = (hideLabels: boolean) => {\n const { selectedElement, toggleSelectedElement } = useSelectedElement()\n const newElements = useNewElements(selectedElement)\n const renderedElements = useRenderNewElements(newElements, hideLabels)\n const [hoveredNode, setHoveredNode] = useHoveredNode(renderedElements)\n\n return {\n hoveredNode, setHoveredNode, toggleSelectedElement,\n }\n}\n","import { isDefined } from '@xylabs/sdk-js'\nimport type { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape/index.ts'\nimport { useCytoscapeStyle } from './useCytoscapeStyle.tsx'\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 && isDefined(resolvedLayout) && isDefined(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 { useIsDark } from '@xylabs/react-theme'\nimport type { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport {\n EdgeStyled, Node, NodeAsRoot, NodeWithName,\n} from '../../Cytoscape/index.ts'\nimport { useIcons } from './useIcons.tsx'\n\nexport const useCytoscapeStyle = (hideLabels = false) => {\n const theme = useTheme()\n const dark = useIsDark()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n // eslint-disable-next-line complexity\n () => [\n Node(icons, dark ? theme.colorSchemes.dark?.palette.primary.main : theme.colorSchemes.light?.palette.primary.main, hideLabels),\n NodeWithName(\n dark ? theme.colorSchemes.dark?.palette.primary.contrastText : theme.colorSchemes.light?.palette.primary.contrastText,\n dark ? theme.colorSchemes.dark?.palette.text.primary : theme.colorSchemes.light?.palette.text.primary,\n ),\n NodeAsRoot(dark ? theme.colorSchemes.dark?.palette.secondary.main : theme.colorSchemes.light?.palette.secondary.main),\n EdgeStyled(\n dark ? theme.colorSchemes.dark?.palette.divider : theme.colorSchemes.light?.palette.divider,\n dark ? theme.colorSchemes.dark?.palette.divider : theme.colorSchemes.light?.palette.divider,\n ),\n ],\n [icons, hideLabels, theme],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport React, { useMemo } from 'react'\n\nimport type { CyNodeModuleTypes } from '../../Cytoscape/index.ts'\nimport {\n CyIconSet, encodeSvg, generateIconMap,\n} from '../../Cytoscape/index.ts'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n // eslint-disable-next-line unicorn/no-array-reduce\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.vars.palette.primary.contrastText)\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport {\n isDefined, isDefinedNotNull, isTruthy,\n} from '@xylabs/sdk-js'\nimport type { ModuleInstance } from '@xyo-network/module-model'\nimport {\n useCallback, useEffect, useState,\n} from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts/index.ts'\n\nexport const useModuleDetails = (rootModule?: WeakRef<ModuleInstance> | null, onFoundModule?: () => void) => {\n const { cy } = useCytoscapeInstance()\n const [moduleAddress, setModuleAddress] = useState<string | null>()\n\n const [foundModule] = usePromise(async () => {\n if (moduleAddress === null) return null\n const rootModuleInstance = rootModule?.deref()\n if (isDefined(moduleAddress) && isDefined(rootModuleInstance)) {\n const foundModule = await rootModuleInstance.resolve(moduleAddress)\n return foundModule ?? null\n }\n }, [moduleAddress, rootModule])\n\n const createObserver = useCallback(() => {\n return new ResizeObserver(() => {\n if (moduleAddress === null) {\n // cytoscape tries to center prematurely without it :(\n setTimeout(() => {\n cy?.deref()?.center()\n }, 100)\n } else if (foundModule && cy) {\n const node = cy?.deref()?.nodes(`[id=\"${moduleAddress}\"]`)?.[0]\n // cy.pan(newPan)\n // cytoscape tries to center prematurely without it :(\n setTimeout(() => {\n cy?.deref()?.center(node)\n }, 100)\n }\n })\n }, [cy, moduleAddress, foundModule])\n\n useEffect(() => {\n const resizeObserver = createObserver()\n\n const container = cy?.deref()?.container()\n if (container) {\n resizeObserver.observe(container)\n }\n\n return () => {\n if (container) resizeObserver.unobserve(container)\n }\n }, [cy, moduleAddress, foundModule, rootModule])\n\n useEffect(() => {\n if (foundModule) {\n onFoundModule?.()\n }\n }, [cy, moduleAddress, foundModule, onFoundModule, createObserver])\n\n // eslint-disable-next-line complexity\n const onModuleDetails = (address?: string | null) => {\n const moduleNode = cy?.deref()?.nodes(`[id=\"${address}\"]`)\n const rootModuleNode = cy?.deref()?.nodes(`[id=\"${rootModule?.deref()?.address}\"]`)\n const foundModuleNode = cy?.deref()?.nodes(`[id=\"${foundModule?.address}\"]`)\n const notModuleNode = cy?.deref()?.nodes(`[id != \"${address}\"]`)\n\n if (isTruthy(address)) {\n // address was passed so we set the node to active styles\n moduleNode?.toggleClass('activeNode', true)\n notModuleNode?.toggleClass('activeNode', false)\n } else {\n // no address was passes so we reset the state\n notModuleNode?.toggleClass('activeNode', false)\n const activeNode = isDefinedNotNull(foundModuleNode) && foundModuleNode.length > 0 ? foundModuleNode : rootModuleNode\n activeNode?.toggleClass('activeNode', true)\n }\n setModuleAddress(address)\n }\n\n return { mod: foundModule, onModuleDetails }\n}\n","import type { ModuleInstance } from '@xyo-network/module-model'\nimport { useState } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape/index.ts'\nimport { useCytoscapeElements } from './elements/index.ts'\nimport { useCytoscapeOptions } from './useCytoscapeOptions.ts'\nimport { useCytoscapeStyle } from './useCytoscapeStyle.tsx'\n\nexport const useRelationalGraphOptions = (mod?: WeakRef<ModuleInstance>) => {\n const [hideLabels, setHideLabels] = useState(true)\n\n const handleToggleLabels = () => {\n setHideLabels(oldValue => !oldValue)\n }\n\n const elements = useCytoscapeElements(mod)\n const style = useCytoscapeStyle(hideLabels)\n const options = useCytoscapeOptions(elements, style, ConcentricLayout)\n\n return {\n handleToggleLabels, hideLabels, options,\n }\n}\n","import cytoscape from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkent from 'cytoscape-cose-bilkent'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nexport const WithExtensions: React.FC<PropsWithChildren> = ({ children }) => {\n const initialized = useMemo(() => {\n cytoscape.use(cola)\n cytoscape.use(coseBilkent)\n return true\n }, [])\n\n return <>{initialized ? children : undefined}</>\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Box, Button, ButtonGroup, Card, CardHeader, Paper, useTheme,\n} from '@mui/material'\nimport {\n FlexCol, FlexGrowRow, FlexRow,\n} from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport type { Address } from '@xylabs/sdk-js'\nimport { asAddress, isDefined } from '@xylabs/sdk-js'\nimport { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport type {\n Core, EventHandler, NodeSingular,\n} from 'cytoscape'\nimport cytoscape from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkentLayout from 'cytoscape-cose-bilkent'\nimport dagre from 'cytoscape-dagre'\nimport euler from 'cytoscape-euler'\nimport React, {\n useEffect, useRef, useState,\n} from 'react'\n\nimport type { NodeRelationalGraphProps } from '../../lib/index.ts'\n\nconst applyLayout = (cy?: cytoscape.Core, name = 'cola', options?: object) => {\n cy?.layout({ name, ...options }).run()\n}\n\nconst loadLayout = (layout = 'cola') => {\n switch (layout) {\n case 'cose-bilkent': {\n cytoscape.use(coseBilkentLayout)\n break\n }\n case 'cola': {\n cytoscape.use(cola)\n break\n }\n case 'euler': {\n cytoscape.use(euler)\n break\n }\n case 'dagre': {\n cytoscape.use(dagre)\n break\n }\n default: {\n cytoscape.use(euler)\n break\n }\n }\n}\n\ntype ModuleHoverDetailsProps = CardProps & {\n address: Address\n name: string\n}\n\nconst ModuleHoverDetails: React.FC<ModuleHoverDetailsProps> = ({\n name, address, ...props\n}) => {\n return (\n <Card elevation={3} {...props}>\n <CardHeader\n avatar={(\n <Paper\n elevation={6}\n sx={{ bgcolor: '#fff', p: 1 }}\n >\n <Identicon value={address} size={24} />\n </Paper>\n )}\n title={name}\n subheader={address}\n />\n </Card>\n )\n}\n\nexport const NodeRelationalGraphFlexBox: React.FC<NodeRelationalGraphProps> = ({\n actions, children, node, layout, layoutOptions, showDetails, detail, options, onHover, ...props\n}) => {\n const theme = useTheme()\n const [cy, setCy] = useState<Core>()\n const cytoscapeRef = useRef<HTMLDivElement>(null)\n const [hoverPosition, setHoverBoundingBox] = useState<{ x1: number; x2: number; y1: number; y2: number }>()\n const [hoverAddress, setHoverAddress] = useState<Address>()\n\n const [moduleInstance] = useWeakModuleFromNode(hoverAddress, { node })\n\n useEffect(() => {\n const listener: EventHandler = ({ target }) => {\n const cyNode = target as NodeSingular\n const bb = cyNode?.renderedBoundingBox?.()\n setHoverBoundingBox(bb)\n const id = cyNode.id?.()\n if (isDefined(id)) {\n if (id.includes('/')) {\n setHoverAddress(undefined)\n onHover?.()\n } else {\n setHoverAddress(asAddress(id))\n onHover?.(asAddress(id))\n }\n }\n }\n cy?.on('mouseover tap', listener)\n\n return () => {\n cy?.off('mouseover tap', listener)\n }\n }, [onHover, cy])\n\n const handleReset = () => {\n cy?.reset()\n applyLayout(cy, layout ?? 'euler', layoutOptions)\n }\n\n useEffect(() => {\n let newCy: Core | undefined\n const container = cytoscapeRef.current\n if (container) {\n newCy = cytoscape({\n container,\n ...options,\n })\n setCy(newCy)\n } else {\n newCy?.destroy()\n setCy(undefined)\n }\n return () => {\n newCy?.destroy()\n setCy(undefined)\n }\n }, [options, cytoscapeRef, layoutOptions])\n\n useEffect(() => {\n if (cy) {\n loadLayout(layout)\n applyLayout(cy, layout ?? 'cola', layoutOptions)\n }\n }, [cy, layoutOptions, layout])\n\n return (\n <FlexCol id=\"relational-graph-wrapper\" {...props}>\n {hoverAddress && hoverPosition\n ? (\n <Box position=\"absolute\" top={hoverPosition.y1} left={hoverPosition.x1} zIndex={100}>\n <ModuleHoverDetails address={hoverAddress} name={moduleInstance?.deref()?.id ?? 'Unknown'} />\n </Box>\n )\n : null}\n <FlexRow justifyContent=\"start\" width=\"100%\">\n {actions === null\n ? null\n : isDefined(actions)\n ? (\n <ButtonGroup>\n {actions}\n <Button size=\"small\" variant=\"contained\" onClick={handleReset}>\n Reset View\n </Button>\n </ButtonGroup>\n )\n : (\n <Button size=\"small\" variant=\"contained\" onClick={handleReset}>\n Reset\n </Button>\n )}\n </FlexRow>\n <FlexGrowRow width=\"100%\" alignItems=\"start\">\n {showDetails\n ? (\n <FlexCol height=\"100%\" width=\"85%\">\n {detail}\n </FlexCol>\n )\n : null}\n <FlexCol\n justifyContent=\"start\"\n classes=\"cytoscape-wrap\"\n width={showDetails ? '15%' : '100%'}\n height={showDetails ? '50%' : '100%'}\n border={showDetails ? `1px solid ${theme.vars.palette.divider}` : undefined}\n >\n {/* Cytoscape Element */}\n <FlexCol alignItems=\"stretch\" position=\"absolute\" width=\"100%\" height=\"100%\" ref={cytoscapeRef} />\n {children}\n </FlexCol>\n </FlexGrowRow>\n </FlexCol>\n )\n}\n\nNodeRelationalGraphFlexBox.displayName = 'NodeRelationalGraph'\n\n/** @deprecated */\nexport const NodeRelationalGraph = NodeRelationalGraphFlexBox\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport type { NodeInstance } from '@xyo-network/node-model'\nimport { useWeakProvidedNode } from '@xyo-network/react-node'\nimport React from 'react'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../../../hooks/index.ts'\nimport type { NodeRelationalGraphProps } from '../../lib/index.ts'\nimport { NodeRelationalGraphFlexBox } from './Graph.tsx'\n\nexport interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {\n account?: AccountInstance\n layout?: 'dagre' | 'euler' | 'cose-bilkent' | 'cola'\n layoutOptions?: object\n node?: WeakRef<NodeInstance>\n}\n\nexport const ProvidedNodeRenderer: React.FC<ProvidedNodeRendererProps> = ({ node, ...props }) => {\n const [providedNode] = useWeakProvidedNode()\n const elements = useCytoscapeElements(node ?? providedNode)\n const options = useCytoscapeOptions(elements)\n\n return <NodeRelationalGraphFlexBox alignItems=\"stretch\" flexGrow={1} height=\"100%\" options={options} {...props} />\n}\n","import { CancelRounded } from '@mui/icons-material'\nimport { IconButton } from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexGrowCol, FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nexport interface DetailsFlexboxProps extends FlexBoxProps {\n onClose?: () => void\n}\n\nexport const DetailsFlexbox: React.FC<DetailsFlexboxProps> = ({ children, onClose }) => {\n return (\n <FlexGrowCol alignItems=\"end\" justifyContent=\"start\" id=\"module-detail\" width=\"100%\" p={2} gap={2}>\n <FlexRow justifyContent=\"end\">\n <IconButton onClick={onClose} size=\"small\">\n <CancelRounded />\n </IconButton>\n </FlexRow>\n {children}\n </FlexGrowCol>\n )\n}\n","import type { PopperProps } from '@mui/material'\nimport { styled } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { NodeSingular } from 'cytoscape'\nimport type { ReactElement } from 'react'\nimport React from 'react'\n\nimport { useNodeElement } from './hooks/index.ts'\n\nexport interface ModuleHoverProps {\n children?: (anchorElement?: PopperProps['anchorEl'], container?: PopperProps['container']) => ReactElement\n node?: NodeSingular\n}\n\nexport const ModuleGraphNodeHover: React.FC<ModuleHoverProps> = ({ children, node }) => {\n const {\n boundingBox, ref, currentElement,\n } = useNodeElement(node)\n\n return (\n <>\n <StyledNodeGhostElementFlexCol ref={ref} left={boundingBox?.x1} height={boundingBox?.h} top={boundingBox?.y1} width={boundingBox?.w} />\n {node\n ? <>{children?.(currentElement)}</>\n : null}\n </>\n )\n}\n\nconst StyledNodeGhostElementFlexCol = styled(FlexCol, { name: 'StyledNodeGhostElementFlexCol' })(() => ({\n // For easier debugging of the 'ghost' element that matches the hovered cytoscape node\n // backgroundColor: '#fff',\n // opacity: 0.25,\n\n cursor: 'pointer',\n pointerEvents: 'none',\n position: 'absolute',\n}))\n","import type { PopperProps } from '@mui/material'\nimport type { NodeSingular } from 'cytoscape'\nimport {\n useEffect, useMemo, useRef, useState,\n} from 'react'\n\nexport const useNodeElement = (node?: NodeSingular) => {\n const ref = useRef<HTMLDivElement>(null)\n const [currentElement, setCurrentElement] = useState<PopperProps['anchorEl'] | null>(null)\n const [boundingBox, setBoundingBox] = useState(node?.renderedBoundingBox())\n\n // Ensure first render clears the previous element when node changes to avoid flicker\n useMemo(() => {\n setCurrentElement(null)\n }, [node])\n\n useMemo(() => {\n setBoundingBox(node?.renderedBoundingBox())\n }, [node])\n\n useEffect(() => {\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 useMemo(() => {\n setCurrentElement(ref.current)\n }, [boundingBox])\n\n return {\n boundingBox, currentElement, ref,\n }\n}\n","import { CancelRounded } from '@mui/icons-material'\nimport type { PopperProps } from '@mui/material'\nimport {\n Button, Card, CardActions, CardHeader, IconButton, Paper, Popper, styled,\n} from '@mui/material'\nimport { Identicon } from '@xylabs/react-identicon'\nimport type { NodeSingular } from 'cytoscape'\nimport React from 'react'\n\nexport interface ModuleHoverPopperProps extends PopperProps {\n node?: NodeSingular\n onClose?: () => void\n onModuleDetails?: (address?: string) => void\n onModuleExplore?: (address?: string) => void\n}\n\nexport const ModuleHoverPopper: React.FC<ModuleHoverPopperProps> = ({\n anchorEl, onClose, onModuleDetails, onModuleExplore, node, ...props\n}) => {\n const { address, name } = node?.data() ?? {}\n return (\n <>\n {anchorEl\n ? (\n <Popper anchorEl={anchorEl} {...props}>\n <Card elevation={3}>\n <CardHeader\n action={\n onClose\n ? (\n <IconButton size=\"small\" onClick={onClose}>\n <CancelRounded />\n </IconButton>\n )\n : null\n }\n avatar={(\n <Paper\n elevation={6}\n sx={{ bgcolor: '#fff', p: 1 }}\n >\n <Identicon value={address} size={24} />\n </Paper>\n )}\n title={name}\n subheader={address}\n />\n <StyledCardActions>\n {onModuleDetails\n ? (\n <Button onClick={() => onModuleDetails?.(address)} size=\"small\" variant=\"contained\">\n Details\n </Button>\n )\n : null}\n {onModuleExplore\n ? (\n <Button onClick={() => onModuleExplore?.(address)} size=\"small\" variant=\"contained\">\n Explore\n </Button>\n )\n : null}\n </StyledCardActions>\n </Card>\n </Popper>\n )\n : null}\n </>\n )\n}\n\nexport const StyledModuleHoverPopper = styled(ModuleHoverPopper, { name: 'StyledComponents' })(() => ({ zIndex: 2 }))\n\nexport const StyledCardActions = styled(CardActions, { name: 'StyledCardActions' })(() => ({\n display: 'flex',\n justifyContent: 'center',\n}))\n"],"mappings":"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","names":["asArchivistInstance","isArchivistInstance","asDivinerInstance","isDivinerInstance","ArchivistCard","DivinerCard","ModuleCard","React","ModuleCardParser","mod","isArchivistInstance","ArchivistCard","asArchivistInstance","isDivinerInstance","DivinerCard","asDivinerInstance","ModuleCard","Button","React","useRef","createContextEx","CytoscapeInstanceContext","React","useMemo","useState","CytoscapeInstanceProvider","children","defaultInstance","cy","setCy","useState","value","useMemo","provided","React","CytoscapeInstanceContext","useContextEx","useCytoscapeInstance","required","useContextEx","CytoscapeInstanceContext","useAsyncEffect","isNodeInstance","useEffect","useState","exists","isFalsy","isDefined","renderToStaticMarkup","dataUri","encodeSvg","reactElement","color","svgString","renderToStaticMarkup","doc","DOMParser","parseFromString","svgElement","querySelectorAll","isDefined","setAttribute","style","fill","globalThis","encodeURIComponent","outerHTML","generateIconMap","archivist","bridge","diviner","module","node","sentinel","witness","ColaLayout","centerGraph","convergenceThreshold","name","ConcentricLayout","concentric","node","degree","levelWidth","minNodeSpacing","name","isArchivistInstance","isBridgeInstance","isDivinerInstance","isNodeInstance","isSentinelInstance","isWitnessModule","parseModuleType","mod","type","isArchivistInstance","isBridgeInstance","isDivinerInstance","isNodeInstance","isSentinelInstance","isWitnessModule","CytoscapeElements","MaxNameLength","buildEdge","rootNode","newNode","properties","data","id","source","target","buildElements","mod","info","recurseNodes","newElements","buildElementsFromInfo","undefined","root","classes","buildNode","childCount","children","length","depth","newEdge","siblingCount","push","childInfo","address","name","type","parseModuleType","buildRootNode","normalizeName","isFalsy","slice","maxDepth","resolve","direction","Promise","all","map","child","filter","exists","BubbleChartRounded","BubbleChartRoundedIcon","Hub","HubIcon","InsertLinkRounded","InsertLinkRoundedIcon","Inventory2Rounded","Inventory2RoundedIcon","QuestionMarkRounded","QuestionMarkRoundedIcon","TimerRounded","TimerRoundedIcon","VisibilityRounded","VisibilityRoundedIcon","CyIconSet","archivist","bridge","diviner","module","node","sentinel","witness","NodeWithName","color","outlineColor","selector","css","Node","icons","bgColor","hideLabels","elem","data","undefined","NodeAsRoot","EdgeStyled","lineColor","targetArrowColor","useCytoscapeElements","mod","elements","setElements","useState","useAsyncEffect","moduleInstance","deref","newElements","CytoscapeElements","buildElements","useEffect","attachedListener","detachedListener","isNodeInstance","on","useCallback","useEffect","useState","useHoveredNode","renderedElements","cy","useCytoscapeInstance","hoveredNode","setHoveredNode","useState","nodeListener","useCallback","node","on","useEffect","nodes","forEach","deref","ready","useWeakModuleFromNode","useMemo","useNewElements","selectedElement","selectedAddress","useMemo","address","data","mod","useWeakModuleFromNode","newElements","useCytoscapeElements","useMemo","useRenderNewElements","newElements","hideLabels","cy","useCytoscapeInstance","useMemo","length","renderedElements","deref","add","layout","ColaLayout","run","useState","useSelectedElement","selectedElement","setSelectedElement","useState","cy","useCytoscapeInstance","updateStyles","element","nodes","deref","toggleClass","toggleSelectedElement","address","selectedNode","useElements","hideLabels","selectedElement","toggleSelectedElement","useSelectedElement","newElements","useNewElements","renderedElements","useRenderNewElements","hoveredNode","setHoveredNode","useHoveredNode","isDefined","useMemo","useTheme","useIsDark","useMemo","useTheme","React","useMemo","useIcons","theme","useTheme","icons","useMemo","iconMap","generateIconMap","Object","entries","CyIconSet","reduce","acc","name","IconComponent","icon","React","fontSize","encodeSvg","vars","palette","primary","contrastText","useCytoscapeStyle","hideLabels","theme","useTheme","dark","useIsDark","icons","useIcons","style","useMemo","Node","colorSchemes","palette","primary","main","light","NodeWithName","contrastText","text","NodeAsRoot","secondary","EdgeStyled","divider","useCytoscapeOptions","elements","style","layout","defaultStyle","useCytoscapeStyle","resolvedLayout","ConcentricLayout","resolvedStyle","options","useMemo","isDefined","usePromise","isDefined","isDefinedNotNull","isTruthy","useCallback","useEffect","useState","useModuleDetails","rootModule","onFoundModule","cy","useCytoscapeInstance","moduleAddress","setModuleAddress","useState","foundModule","usePromise","rootModuleInstance","deref","isDefined","resolve","createObserver","useCallback","ResizeObserver","setTimeout","center","node","nodes","useEffect","resizeObserver","container","observe","unobserve","onModuleDetails","address","moduleNode","rootModuleNode","foundModuleNode","notModuleNode","isTruthy","toggleClass","activeNode","isDefinedNotNull","length","mod","useState","useRelationalGraphOptions","mod","hideLabels","setHideLabels","useState","handleToggleLabels","oldValue","elements","useCytoscapeElements","style","useCytoscapeStyle","options","useCytoscapeOptions","ConcentricLayout","cytoscape","cola","coseBilkent","React","useMemo","WithExtensions","children","initialized","useMemo","cytoscape","use","cola","coseBilkent","React","undefined","Box","Button","ButtonGroup","Card","CardHeader","Paper","useTheme","FlexCol","FlexGrowRow","FlexRow","Identicon","asAddress","isDefined","useWeakModuleFromNode","cytoscape","cola","coseBilkentLayout","dagre","euler","React","useEffect","useRef","useState","applyLayout","cy","name","options","layout","run","loadLayout","cytoscape","use","coseBilkentLayout","cola","euler","dagre","ModuleHoverDetails","address","props","React","Card","elevation","CardHeader","avatar","Paper","sx","bgcolor","p","Identicon","value","size","title","subheader","NodeRelationalGraphFlexBox","actions","children","node","layoutOptions","showDetails","detail","onHover","theme","useTheme","setCy","useState","cytoscapeRef","useRef","hoverPosition","setHoverBoundingBox","hoverAddress","setHoverAddress","moduleInstance","useWeakModuleFromNode","useEffect","listener","target","cyNode","bb","renderedBoundingBox","id","isDefined","includes","undefined","asAddress","on","off","handleReset","reset","newCy","container","current","destroy","FlexCol","Box","position","top","y1","left","x1","zIndex","deref","FlexRow","justifyContent","width","ButtonGroup","Button","variant","onClick","FlexGrowRow","alignItems","height","classes","border","vars","palette","divider","ref","displayName","NodeRelationalGraph","useWeakProvidedNode","React","ProvidedNodeRenderer","node","props","providedNode","useWeakProvidedNode","elements","useCytoscapeElements","options","useCytoscapeOptions","React","NodeRelationalGraphFlexBox","alignItems","flexGrow","height","CancelRounded","IconButton","FlexGrowCol","FlexRow","React","DetailsFlexbox","children","onClose","React","FlexGrowCol","alignItems","justifyContent","id","width","p","gap","FlexRow","IconButton","onClick","size","CancelRounded","styled","FlexCol","React","useEffect","useMemo","useRef","useState","useNodeElement","node","ref","useRef","currentElement","setCurrentElement","useState","boundingBox","setBoundingBox","renderedBoundingBox","useMemo","useEffect","listener","on","off","undefined","current","ModuleGraphNodeHover","children","node","boundingBox","ref","currentElement","useNodeElement","React","StyledNodeGhostElementFlexCol","left","x1","height","h","top","y1","width","w","styled","FlexCol","name","cursor","pointerEvents","position","CancelRounded","Button","Card","CardActions","CardHeader","IconButton","Paper","Popper","styled","Identicon","React","ModuleHoverPopper","anchorEl","onClose","onModuleDetails","onModuleExplore","node","props","address","name","data","React","Popper","Card","elevation","CardHeader","action","IconButton","size","onClick","CancelRounded","avatar","Paper","sx","bgcolor","p","Identicon","value","title","subheader","StyledCardActions","Button","variant","StyledModuleHoverPopper","styled","zIndex","CardActions","display","justifyContent","ModuleGraphFlexBox","hideActions","rootModule","disableModuleDetails","props","cytoscapeRef","useRef","handleToggleLabels","hideLabels","options","useRelationalGraphOptions","undefined","hoveredNode","setHoveredNode","toggleSelectedElement","useElements","mod","onModuleDetails","useModuleDetails","React","WithExtensions","NodeRelationalGraphFlexBox","actions","Button","size","onClick","variant","showDetails","detail","DetailsFlexbox","onClose","ref","width","ModuleGraphNodeHover","node","element","StyledModuleHoverPopper","anchorEl","container","current","onModuleExplore","placement","open","ModuleGraphFlexBoxWithProvider","CytoscapeInstanceProvider"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/react-node-renderer",
|
|
3
|
-
"version": "7.5.
|
|
3
|
+
"version": "7.5.2",
|
|
4
4
|
"description": "Common React library for all XYO projects that use React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xyo",
|
|
@@ -43,24 +43,22 @@
|
|
|
43
43
|
"src"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@xylabs/
|
|
47
|
-
"@xylabs/
|
|
48
|
-
"@xylabs/react-
|
|
49
|
-
"@xylabs/react-
|
|
50
|
-
"@xylabs/react-
|
|
51
|
-
"@xylabs/react-
|
|
52
|
-
"@xylabs/
|
|
53
|
-
"@xylabs/react-theme": "~7.1.9",
|
|
54
|
-
"@xylabs/typeof": "~5.0.64",
|
|
46
|
+
"@xylabs/react-async-effect": "~7.1.12",
|
|
47
|
+
"@xylabs/react-flexbox": "~7.1.12",
|
|
48
|
+
"@xylabs/react-identicon": "~7.1.12",
|
|
49
|
+
"@xylabs/react-promise": "~7.1.12",
|
|
50
|
+
"@xylabs/react-shared": "~7.1.12",
|
|
51
|
+
"@xylabs/react-theme": "~7.1.12",
|
|
52
|
+
"@xylabs/sdk-js": "~5.0.64",
|
|
55
53
|
"@xyo-network/account-model": "~5.3.2",
|
|
56
54
|
"@xyo-network/archivist-model": "~5.3.2",
|
|
57
55
|
"@xyo-network/bridge-model": "~5.3.2",
|
|
58
56
|
"@xyo-network/diviner-model": "~5.3.2",
|
|
59
57
|
"@xyo-network/module-model": "~5.3.2",
|
|
60
58
|
"@xyo-network/node-model": "~5.3.2",
|
|
61
|
-
"@xyo-network/react-archivist": "7.5.
|
|
62
|
-
"@xyo-network/react-module": "7.5.
|
|
63
|
-
"@xyo-network/react-node": "7.5.
|
|
59
|
+
"@xyo-network/react-archivist": "7.5.2",
|
|
60
|
+
"@xyo-network/react-module": "7.5.2",
|
|
61
|
+
"@xyo-network/react-node": "7.5.2",
|
|
64
62
|
"@xyo-network/sentinel-model": "~5.3.2",
|
|
65
63
|
"@xyo-network/witness-model": "~5.3.2",
|
|
66
64
|
"cytoscape": "~3.33.1",
|
|
@@ -87,8 +85,8 @@
|
|
|
87
85
|
"@xyo-network/bridge-model": "~5.3.2",
|
|
88
86
|
"@xyo-network/id-plugin": "~5.3.1",
|
|
89
87
|
"@xyo-network/node-memory": "~5.3.2",
|
|
90
|
-
"@xyo-network/react-storybook": "7.5.
|
|
91
|
-
"@xyo-network/react-wallet": "7.5.
|
|
88
|
+
"@xyo-network/react-storybook": "7.5.2",
|
|
89
|
+
"@xyo-network/react-wallet": "7.5.2",
|
|
92
90
|
"@xyo-network/sentinel": "~5.3.2",
|
|
93
91
|
"@xyo-network/sentinel-memory": "~5.3.2",
|
|
94
92
|
"react": "^19.2.4",
|
|
@@ -96,14 +94,16 @@
|
|
|
96
94
|
"react-router-dom": "^7.13.0",
|
|
97
95
|
"storybook": "~10.2.1",
|
|
98
96
|
"typescript": "^5.9.3",
|
|
99
|
-
"vite": "~7.3.1"
|
|
97
|
+
"vite": "~7.3.1",
|
|
98
|
+
"zod": "^4.3.6"
|
|
100
99
|
},
|
|
101
100
|
"peerDependencies": {
|
|
102
101
|
"@mui/icons-material": ">=6 <8",
|
|
103
102
|
"@mui/material": ">=6 <8",
|
|
104
103
|
"react": "^19",
|
|
105
104
|
"react-dom": "^19",
|
|
106
|
-
"react-router-dom": "^7"
|
|
105
|
+
"react-router-dom": "^7",
|
|
106
|
+
"zod": "^4"
|
|
107
107
|
},
|
|
108
108
|
"publishConfig": {
|
|
109
109
|
"access": "public"
|