@xyo-network/react-node-renderer 2.77.0 → 2.77.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/components/relational/graph/Graph.d.cts +0 -1
- package/dist/browser/components/relational/graph/Graph.d.cts.map +1 -1
- package/dist/browser/components/relational/graph/Graph.d.mts +0 -1
- package/dist/browser/components/relational/graph/Graph.d.mts.map +1 -1
- package/dist/browser/components/relational/graph/Graph.d.ts +0 -1
- package/dist/browser/components/relational/graph/Graph.d.ts.map +1 -1
- package/dist/browser/index.cjs +1 -840
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +1 -815
- package/dist/browser/index.js.map +1 -1
- package/dist/neutral/components/relational/graph/Graph.d.cts +0 -1
- package/dist/neutral/components/relational/graph/Graph.d.cts.map +1 -1
- package/dist/neutral/components/relational/graph/Graph.d.mts +0 -1
- package/dist/neutral/components/relational/graph/Graph.d.mts.map +1 -1
- package/dist/neutral/components/relational/graph/Graph.d.ts +0 -1
- package/dist/neutral/components/relational/graph/Graph.d.ts.map +1 -1
- package/dist/neutral/index.cjs +1 -840
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.js +1 -815
- package/dist/neutral/index.js.map +1 -1
- package/dist/node/components/relational/graph/Graph.d.cts +0 -1
- package/dist/node/components/relational/graph/Graph.d.cts.map +1 -1
- package/dist/node/components/relational/graph/Graph.d.mts +0 -1
- package/dist/node/components/relational/graph/Graph.d.mts.map +1 -1
- package/dist/node/components/relational/graph/Graph.d.ts +0 -1
- package/dist/node/components/relational/graph/Graph.d.ts.map +1 -1
- package/dist/node/index.cjs +1 -880
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +1 -827
- package/dist/node/index.js.map +1 -1
- package/package.json +10 -9
package/dist/node/index.js.map
CHANGED
|
@@ -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 { ModuleInstance } from '@xyo-network/module-model'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\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 { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { ModuleInstance } from '@xyo-network/module-model'\nimport { useRef } from 'react'\n\nimport { CytoscapeInstanceProvider } from '../../../contexts'\nimport { useElements, useModuleDetails, useRelationalGraphOptions } from '../../../hooks'\nimport { WithExtensions } from '../../cytoscape-extensions'\nimport { NodeRelationalGraphFlexBox } from '../../relational'\nimport { DetailsFlexbox } from './DetailsFlexbox'\nimport { ModuleGraphNodeHover } from './node'\nimport { StyledModuleHoverPopper } from './Popper'\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> = ({ hideActions, rootModule, disableModuleDetails, ...props }) => {\n const cytoscapeRef = useRef<HTMLDivElement>(null)\n const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? undefined)\n const { hoveredNode, setHoveredNode, toggleSelectedElement } = useElements(hideLabels)\n\n const { mod, onModuleDetails } = useModuleDetails(rootModule, () => setHoveredNode(undefined))\n\n return (\n <WithExtensions>\n <NodeRelationalGraphFlexBox\n actions={\n mod ? null\n : hideActions ?\n null\n : <Button size={'small'} onClick={handleToggleLabels} variant=\"contained\">\n Toggle Labels\n </Button>\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 '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import type { WithChildren } from '@xylabs/react-shared'\nimport { Core } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport interface CytoscapeInstanceProviderProps extends WithChildren {\n defaultInstance?: WeakRef<Core>\n}\n\nexport const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {\n const [cy, setCy] = useState<WeakRef<Core> | undefined>(defaultInstance)\n useEffect(() => {\n setCy(defaultInstance)\n }, [defaultInstance])\n\n return <CytoscapeInstanceContext.Provider value={{ cy, provided: true, setCy }}>{children}</CytoscapeInstanceContext.Provider>\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction } from '@xyo-network/module-events'\nimport { ModuleInstance } from '@xyo-network/module-model'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../../Cytoscape'\n\nexport const useCytoscapeElements = (mod?: WeakRef<ModuleInstance> | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\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 { ModuleInstance } from '@xyo-network/module-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\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 ? CytoscapeElements.buildEdge(root, newNode, { depth: info.depth, siblingCount: info.children.length }) : 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 (!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 = { children: [], depth, mod: root }\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 { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.querySelectorAll('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n // eslint-disable-next-line id-denylist\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","export const ColaLayout = {\n centerGraph: false,\n convergenceThreshold: 0.01,\n name: 'cola',\n}\n","import { LayoutOptions } from 'cytoscape'\n\nexport const ConcentricLayout: LayoutOptions = {\n concentric: function (node) {\n return node.degree(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 { 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 { CyNodeModuleTypes } from './CyNodeModuleTypes'\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 } else {\n type = 'module'\n }\n }\n return type\n}\n","import {\n BubbleChartRounded as BubbleChartRoundedIcon,\n Hub as HubIcon,\n InsertLinkRounded as InsertLinkRoundedIcon,\n Inventory2Rounded as Inventory2RoundedIcon,\n QuestionMarkRounded as QuestionMarkRoundedIcon,\n TimerRounded as TimerRoundedIcon,\n VisibilityRounded as VisibilityRoundedIcon,\n} from '@mui/icons-material'\nimport { SvgIconTypeMap } from '@mui/material'\n// eslint-disable-next-line import/no-internal-modules\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n // eslint-disable-next-line id-denylist\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeWithName = (color?: string, outlineColor?: string): Stylesheet => ({\n selector: 'node[name]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 12,\n 'overlay-padding': '6px',\n 'text-halign': 'center',\n 'text-outline-color': outlineColor,\n 'text-outline-width': '1px',\n 'text-valign': 'top',\n },\n})\n\nexport const Node = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string, hideLabels = false): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-width': '24',\n label: hideLabels ? undefined : 'data(name)',\n shape: 'round-rectangle',\n },\n})\n\nexport const NodeAsRoot = (bgColor?: string) => ({\n selector: '.activeNode',\n style: {\n 'background-color': bgColor,\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { NodeCollection, NodeSingular } from 'cytoscape'\nimport { Dispatch, SetStateAction, useCallback, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts'\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 { NodeSingular } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeElements } from './useCytoscapeElements'\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 { CollectionReturnValue, ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts'\nimport { ColaLayout } from '../../../Cytoscape'\n\nexport const useRenderNewElements = (newElements: ElementDefinition[] = [], hideLabels?: boolean) => {\n const { cy } = useCytoscapeInstance(true)\n const [renderedElements, setRenderedElements] = useState<CollectionReturnValue>()\n\n useEffect(() => {\n if (newElements.length > 1) {\n const renderedElements = cy?.deref()?.add(newElements)\n setRenderedElements(renderedElements)\n cy?.deref()?.layout(ColaLayout).run()\n }\n }, [cy, hideLabels, newElements])\n\n return renderedElements\n}\n","import { NodeSingular } from 'cytoscape'\nimport { useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts'\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'\nimport { useNewElements } from './useNewElements'\nimport { useRenderNewElements } from './useRenderNewElements'\nimport { useSelectedElement } from './useSelectedElement'\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 { hoveredNode, setHoveredNode, toggleSelectedElement }\n}\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\n\nexport const useCytoscapeOptions = (\n elements: CytoscapeOptions['elements'],\n style?: CytoscapeOptions['style'],\n layout?: CytoscapeOptions['layout'],\n) => {\n const defaultStyle = useCytoscapeStyle()\n\n const resolvedLayout = layout ?? ConcentricLayout\n const resolvedStyle = style ?? defaultStyle\n\n const options = useMemo<CytoscapeOptions | undefined>(() => {\n if (elements && resolvedLayout && resolvedStyle) {\n return {\n elements,\n layout: resolvedLayout,\n style: resolvedStyle,\n }\n }\n }, [elements, layout, style])\n\n return options\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, Node, NodeAsRoot, NodeWithName } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = (hideLabels = false) => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n Node(icons, theme.palette.primary.main, hideLabels),\n NodeWithName(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),\n NodeAsRoot(theme.palette.secondary.main),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, hideLabels, theme],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n // 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.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { ModuleInstance } from '@xyo-network/module-model'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\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 (moduleAddress && rootModuleInstance) {\n const foundModule = await rootModuleInstance.resolve(moduleAddress)\n return foundModule ?? null\n }\n }, [moduleAddress, rootModule])\n\n useEffect(() => {\n const resizeObserver = 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\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])\n\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 (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 = foundModuleNode?.length ? foundModuleNode : rootModuleNode\n activeNode?.toggleClass('activeNode', true)\n }\n setModuleAddress(address)\n }\n\n return { mod: foundModule, onModuleDetails }\n}\n","import { ModuleInstance } from '@xyo-network/module-model'\nimport { useState } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeElements } from './elements'\nimport { useCytoscapeOptions } from './useCytoscapeOptions'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\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 { handleToggleLabels, hideLabels, options }\n}\n","import cytoscape from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkent from 'cytoscape-cose-bilkent'\nimport dagre from 'cytoscape-dagre'\nimport euler from 'cytoscape-euler'\nimport { PropsWithChildren, useEffect, useState } from 'react'\n\nexport const WithExtensions: React.FC<PropsWithChildren> = ({ children }) => {\n const [initialized, setInitialized] = useState(false)\n useEffect(() => {\n cytoscape.use(cola)\n cytoscape.use(dagre)\n cytoscape.use(coseBilkent)\n cytoscape.use(euler)\n setInitialized(true)\n }, [])\n\n return <>{initialized ? children : undefined}</>\n}\n","import { Box, Button, ButtonGroup, Card, CardHeader, CardProps, Paper, useTheme } from '@mui/material'\nimport { Address, asAddress } from '@xylabs/hex'\nimport { FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport cytoscape, { Core, NodeSingular } from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkentLayout from 'cytoscape-cose-bilkent'\nimport dagre from 'cytoscape-dagre'\nimport eulerLayout from 'cytoscape-euler'\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { NodeRelationalGraphProps } from '../../lib'\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 'dagre': {\n cytoscape.use(dagre)\n break\n }\n case 'euler': {\n cytoscape.use(eulerLayout)\n break\n }\n case 'cose-bilkent': {\n cytoscape.use(coseBilkentLayout)\n break\n }\n case 'cola': {\n cytoscape.use(cola)\n break\n }\n }\n}\n\ntype ModuleHoverDetailsProps = CardProps & {\n address: Address\n name: string\n}\n\nconst ModuleHoverDetails: React.FC<ModuleHoverDetailsProps> = ({ name, address, ...props }) => {\n return (\n <Card elevation={3} {...props}>\n <CardHeader\n avatar={\n <Paper elevation={6} sx={{ bgcolor: '#fff', p: 1 }}>\n <Identicon value={address} size={24} />\n </Paper>\n }\n title={name}\n subheader={address}\n />\n </Card>\n )\n}\n\nexport const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(\n ({ actions, children, node, layout, layoutOptions, showDetails, detail, options, onHover, ...props }, ref) => {\n const theme = useTheme()\n const [cy, setCy] = useState<Core>()\n const cytoscapeRef = useRef<HTMLDivElement>()\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 cy?.on('mouseover tap', ({ target }) => {\n const cyNode = target as NodeSingular\n const bb = cyNode?.renderedBoundingBox?.()\n setHoverBoundingBox(bb)\n const id = cyNode.id?.()\n if (id) {\n if (id.includes('/')) {\n setHoverAddress(undefined)\n onHover?.()\n } else {\n setHoverAddress(asAddress(id))\n onHover?.(asAddress(id))\n }\n }\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 }\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 ?? 'euler', layoutOptions)\n }\n }, [cy, layoutOptions, layout])\n\n return (\n <FlexCol id=\"relational-graph-wrapper\" ref={ref} {...props}>\n {hoverAddress && hoverPosition ?\n <Box position=\"absolute\" top={hoverPosition.y1} left={hoverPosition.x1} zIndex={100}>\n <ModuleHoverDetails address={hoverAddress} name={moduleInstance?.deref()?.id ?? 'Unknown'} />\n </Box>\n : null}\n <FlexRow justifyContent=\"start\" width=\"100%\">\n {actions === null ?\n null\n : actions ?\n <ButtonGroup>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset View\n </Button>\n </ButtonGroup>\n : <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n }\n </FlexRow>\n <FlexGrowRow width=\"100%\" alignItems=\"start\">\n {showDetails ?\n <FlexCol height=\"100%\" width={'85%'}>\n {detail}\n </FlexCol>\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.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)\n\nNodeRelationalGraphFlexBox.displayName = 'NodeRelationalGraph'\n\n/** @deprecated */\nexport const NodeRelationalGraph = NodeRelationalGraphFlexBox\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { useWeakProvidedNode } from '@xyo-network/react-node'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../../../hooks'\nimport { NodeRelationalGraphProps } from '../../lib'\nimport { NodeRelationalGraphFlexBox } from './Graph'\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 { FlexBoxProps, FlexGrowCol, FlexRow } from '@xylabs/react-flexbox'\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 { PopperProps, styled } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { NodeSingular } from 'cytoscape'\nimport { ReactElement } from 'react'\n\nimport { useNodeElement } from './hooks'\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 { boundingBox, ref, currentElement } = 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 // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n cursor: 'pointer',\n pointerEvents: 'none',\n position: 'absolute',\n}))\n","import { PopperProps } from '@mui/material'\nimport { NodeSingular } from 'cytoscape'\nimport { useEffect, useRef, useState } 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 useEffect(() => {\n setCurrentElement(null)\n }, [node])\n\n useEffect(() => {\n if (node) {\n setBoundingBox(node.renderedBoundingBox())\n }\n\n const listener = () => {\n setBoundingBox(node?.renderedBoundingBox())\n }\n\n node?.on('position', listener)\n\n return () => {\n node?.off('position', undefined, listener)\n }\n }, [node])\n\n // Once boundingBox state is set and applied to the layout, update the ref\n useEffect(() => {\n setCurrentElement(ref.current)\n }, [boundingBox])\n\n return { boundingBox, currentElement, ref }\n}\n","import { CancelRounded } from '@mui/icons-material'\nimport { Button, Card, CardActions, CardHeader, IconButton, Paper, Popper, PopperProps, styled } from '@mui/material'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { NodeSingular } from 'cytoscape'\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> = ({ anchorEl, onClose, onModuleDetails, onModuleExplore, node, ...props }) => {\n const { address, name } = node?.data() ?? {}\n return (\n <>\n {anchorEl ?\n <Popper anchorEl={anchorEl} {...props}>\n <Card elevation={3}>\n <CardHeader\n action={\n onClose ?\n <IconButton size=\"small\" onClick={onClose}>\n <CancelRounded />\n </IconButton>\n : null\n }\n avatar={\n <Paper elevation={6} sx={{ bgcolor: '#fff', p: 1 }}>\n <Identicon value={address} size={24} />\n </Paper>\n }\n title={name}\n subheader={address}\n />\n <StyledCardActions>\n {onModuleDetails ?\n <Button onClick={() => onModuleDetails?.(address)} size=\"small\" variant=\"contained\">\n Details\n </Button>\n : null}\n {onModuleExplore ?\n <Button onClick={() => onModuleExplore?.(address)} size=\"small\" variant=\"contained\">\n Explore\n </Button>\n : null}\n </StyledCardActions>\n </Card>\n </Popper>\n : null}\n </>\n )\n}\n\nexport const StyledModuleHoverPopper = styled(ModuleHoverPopper, { name: 'StyledComponents' })(() => ({\n zIndex: 2,\n}))\n\nexport const StyledCardActions = styled(CardActions, { name: 'StyledCardActions' })(() => ({\n display: 'flex',\n justifyContent: 'center',\n}))\n"],"mappings":"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","names":["Button","useRef","jsx","isNodeInstance","useEffect","useState","isArchivistInstance","isDivinerInstance","useState","useEffect","isNodeInstance","useEffect","useState","useState","useEffect","_a","selectedAddress","useEffect","useState","useState","useEffect","renderedElements","useState","useState","useMemo","useTheme","useMemo","useMemo","jsx","useMemo","useTheme","useMemo","useMemo","useEffect","useState","useState","foundModule","useEffect","_a","useState","useState","useEffect","useState","jsx","useTheme","useWeakModuleFromNode","cytoscape","cola","dagre","useEffect","useState","jsx","_a","jsx","FlexRow","jsx","jsxs","FlexCol","useEffect","useRef","useState","Fragment","jsx","jsxs","FlexCol","CancelRounded","Button","Card","CardHeader","IconButton","Paper","styled","Identicon","Fragment","jsx","jsxs","jsx","useRef","Button"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/module/CardParser.tsx","../../src/components/module/graph/GraphFlexBox.tsx","../../src/contexts/CytoscapeInstance/Context.ts","../../src/contexts/CytoscapeInstance/Provider.tsx","../../src/contexts/CytoscapeInstance/use.ts","../../src/hooks/cytoscape/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 { ModuleInstance } from '@xyo-network/module-model'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\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 { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { ModuleInstance } from '@xyo-network/module-model'\nimport { useRef } from 'react'\n\nimport { CytoscapeInstanceProvider } from '../../../contexts'\nimport { useElements, useModuleDetails, useRelationalGraphOptions } from '../../../hooks'\nimport { WithExtensions } from '../../cytoscape-extensions'\nimport { NodeRelationalGraphFlexBox } from '../../relational'\nimport { DetailsFlexbox } from './DetailsFlexbox'\nimport { ModuleGraphNodeHover } from './node'\nimport { StyledModuleHoverPopper } from './Popper'\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> = ({ hideActions, rootModule, disableModuleDetails, ...props }) => {\n const cytoscapeRef = useRef<HTMLDivElement>(null)\n const { handleToggleLabels, hideLabels, options } = useRelationalGraphOptions(rootModule ?? undefined)\n const { hoveredNode, setHoveredNode, toggleSelectedElement } = useElements(hideLabels)\n\n const { mod, onModuleDetails } = useModuleDetails(rootModule, () => setHoveredNode(undefined))\n\n return (\n <WithExtensions>\n <NodeRelationalGraphFlexBox\n actions={\n mod ? null\n : hideActions ?\n null\n : <Button size={'small'} onClick={handleToggleLabels} variant=\"contained\">\n Toggle Labels\n </Button>\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 '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import type { WithChildren } from '@xylabs/react-shared'\nimport { Core } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport interface CytoscapeInstanceProviderProps extends WithChildren {\n defaultInstance?: WeakRef<Core>\n}\n\nexport const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {\n const [cy, setCy] = useState<WeakRef<Core> | undefined>(defaultInstance)\n useEffect(() => {\n setCy(defaultInstance)\n }, [defaultInstance])\n\n return <CytoscapeInstanceContext.Provider value={{ cy, provided: true, setCy }}>{children}</CytoscapeInstanceContext.Provider>\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction } from '@xyo-network/module-events'\nimport { ModuleInstance } from '@xyo-network/module-model'\nimport { isNodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../../Cytoscape'\n\nexport const useCytoscapeElements = (mod?: WeakRef<ModuleInstance> | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\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 { ModuleInstance } from '@xyo-network/module-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\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 ? CytoscapeElements.buildEdge(root, newNode, { depth: info.depth, siblingCount: info.children.length }) : 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 (!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 = { children: [], depth, mod: root }\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 { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.querySelectorAll('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n // eslint-disable-next-line id-denylist\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","export const ColaLayout = {\n centerGraph: false,\n convergenceThreshold: 0.01,\n name: 'cola',\n}\n","import { LayoutOptions } from 'cytoscape'\n\nexport const ConcentricLayout: LayoutOptions = {\n concentric: function (node) {\n return node.degree(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 { 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 { CyNodeModuleTypes } from './CyNodeModuleTypes'\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 } else {\n type = 'module'\n }\n }\n return type\n}\n","import {\n BubbleChartRounded as BubbleChartRoundedIcon,\n Hub as HubIcon,\n InsertLinkRounded as InsertLinkRoundedIcon,\n Inventory2Rounded as Inventory2RoundedIcon,\n QuestionMarkRounded as QuestionMarkRoundedIcon,\n TimerRounded as TimerRoundedIcon,\n VisibilityRounded as VisibilityRoundedIcon,\n} from '@mui/icons-material'\nimport { SvgIconTypeMap } from '@mui/material'\n// eslint-disable-next-line import/no-internal-modules\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n // eslint-disable-next-line id-denylist\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeWithName = (color?: string, outlineColor?: string): Stylesheet => ({\n selector: 'node[name]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 12,\n 'overlay-padding': '6px',\n 'text-halign': 'center',\n 'text-outline-color': outlineColor,\n 'text-outline-width': '1px',\n 'text-valign': 'top',\n },\n})\n\nexport const Node = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string, hideLabels = false): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-width': '24',\n label: hideLabels ? undefined : 'data(name)',\n shape: 'round-rectangle',\n },\n})\n\nexport const NodeAsRoot = (bgColor?: string) => ({\n selector: '.activeNode',\n style: {\n 'background-color': bgColor,\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { NodeCollection, NodeSingular } from 'cytoscape'\nimport { Dispatch, SetStateAction, useCallback, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts'\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 { NodeSingular } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeElements } from './useCytoscapeElements'\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 { CollectionReturnValue, ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts'\nimport { ColaLayout } from '../../../Cytoscape'\n\nexport const useRenderNewElements = (newElements: ElementDefinition[] = [], hideLabels?: boolean) => {\n const { cy } = useCytoscapeInstance(true)\n const [renderedElements, setRenderedElements] = useState<CollectionReturnValue>()\n\n useEffect(() => {\n if (newElements.length > 1) {\n const renderedElements = cy?.deref()?.add(newElements)\n setRenderedElements(renderedElements)\n cy?.deref()?.layout(ColaLayout).run()\n }\n }, [cy, hideLabels, newElements])\n\n return renderedElements\n}\n","import { NodeSingular } from 'cytoscape'\nimport { useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../../contexts'\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'\nimport { useNewElements } from './useNewElements'\nimport { useRenderNewElements } from './useRenderNewElements'\nimport { useSelectedElement } from './useSelectedElement'\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 { hoveredNode, setHoveredNode, toggleSelectedElement }\n}\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\n\nexport const useCytoscapeOptions = (\n elements: CytoscapeOptions['elements'],\n style?: CytoscapeOptions['style'],\n layout?: CytoscapeOptions['layout'],\n) => {\n const defaultStyle = useCytoscapeStyle()\n\n const resolvedLayout = layout ?? ConcentricLayout\n const resolvedStyle = style ?? defaultStyle\n\n const options = useMemo<CytoscapeOptions | undefined>(() => {\n if (elements && resolvedLayout && resolvedStyle) {\n return {\n elements,\n layout: resolvedLayout,\n style: resolvedStyle,\n }\n }\n }, [elements, layout, style])\n\n return options\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, Node, NodeAsRoot, NodeWithName } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = (hideLabels = false) => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n Node(icons, theme.palette.primary.main, hideLabels),\n NodeWithName(theme.palette.text.primary, theme.palette.getContrastText(theme.palette.text.primary)),\n NodeAsRoot(theme.palette.secondary.main),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, hideLabels, theme],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n // 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.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { ModuleInstance } from '@xyo-network/module-model'\nimport { useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../../contexts'\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 (moduleAddress && rootModuleInstance) {\n const foundModule = await rootModuleInstance.resolve(moduleAddress)\n return foundModule ?? null\n }\n }, [moduleAddress, rootModule])\n\n useEffect(() => {\n const resizeObserver = 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\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])\n\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 (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 = foundModuleNode?.length ? foundModuleNode : rootModuleNode\n activeNode?.toggleClass('activeNode', true)\n }\n setModuleAddress(address)\n }\n\n return { mod: foundModule, onModuleDetails }\n}\n","import { ModuleInstance } from '@xyo-network/module-model'\nimport { useState } from 'react'\n\nimport { ConcentricLayout } from '../../Cytoscape'\nimport { useCytoscapeElements } from './elements'\nimport { useCytoscapeOptions } from './useCytoscapeOptions'\nimport { useCytoscapeStyle } from './useCytoscapeStyle'\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 { handleToggleLabels, hideLabels, options }\n}\n","import cytoscape from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkent from 'cytoscape-cose-bilkent'\nimport dagre from 'cytoscape-dagre'\nimport euler from 'cytoscape-euler'\nimport { PropsWithChildren, useEffect, useState } from 'react'\n\nexport const WithExtensions: React.FC<PropsWithChildren> = ({ children }) => {\n const [initialized, setInitialized] = useState(false)\n useEffect(() => {\n cytoscape.use(cola)\n cytoscape.use(dagre)\n cytoscape.use(coseBilkent)\n cytoscape.use(euler)\n setInitialized(true)\n }, [])\n\n return <>{initialized ? children : undefined}</>\n}\n","import { Box, Button, ButtonGroup, Card, CardHeader, CardProps, Paper, useTheme } from '@mui/material'\nimport { Address, asAddress } from '@xylabs/hex'\nimport { FlexCol, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { useWeakModuleFromNode } from '@xyo-network/react-node'\nimport cytoscape, { Core, NodeSingular } from 'cytoscape'\nimport cola from 'cytoscape-cola'\nimport coseBilkentLayout from 'cytoscape-cose-bilkent'\nimport dagre from 'cytoscape-dagre'\nimport eulerLayout from 'cytoscape-euler'\nimport { forwardRef, useEffect, useRef, useState } from 'react'\n\nimport { NodeRelationalGraphProps } from '../../lib'\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 'dagre': {\n cytoscape.use(dagre)\n break\n }\n case 'euler': {\n cytoscape.use(eulerLayout)\n break\n }\n case 'cose-bilkent': {\n cytoscape.use(coseBilkentLayout)\n break\n }\n case 'cola': {\n cytoscape.use(cola)\n break\n }\n }\n}\n\ntype ModuleHoverDetailsProps = CardProps & {\n address: Address\n name: string\n}\n\nconst ModuleHoverDetails: React.FC<ModuleHoverDetailsProps> = ({ name, address, ...props }) => {\n return (\n <Card elevation={3} {...props}>\n <CardHeader\n avatar={\n <Paper elevation={6} sx={{ bgcolor: '#fff', p: 1 }}>\n <Identicon value={address} size={24} />\n </Paper>\n }\n title={name}\n subheader={address}\n />\n </Card>\n )\n}\n\nexport const NodeRelationalGraphFlexBox = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(\n ({ actions, children, node, layout, layoutOptions, showDetails, detail, options, onHover, ...props }, ref) => {\n const theme = useTheme()\n const [cy, setCy] = useState<Core>()\n const cytoscapeRef = useRef<HTMLDivElement>()\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 cy?.on('mouseover tap', ({ target }) => {\n const cyNode = target as NodeSingular\n const bb = cyNode?.renderedBoundingBox?.()\n setHoverBoundingBox(bb)\n const id = cyNode.id?.()\n if (id) {\n if (id.includes('/')) {\n setHoverAddress(undefined)\n onHover?.()\n } else {\n setHoverAddress(asAddress(id))\n onHover?.(asAddress(id))\n }\n }\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 }\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 ?? 'euler', layoutOptions)\n }\n }, [cy, layoutOptions, layout])\n\n return (\n <FlexCol id=\"relational-graph-wrapper\" ref={ref} {...props}>\n {hoverAddress && hoverPosition ?\n <Box position=\"absolute\" top={hoverPosition.y1} left={hoverPosition.x1} zIndex={100}>\n <ModuleHoverDetails address={hoverAddress} name={moduleInstance?.deref()?.id ?? 'Unknown'} />\n </Box>\n : null}\n <FlexRow justifyContent=\"start\" width=\"100%\">\n {actions === null ?\n null\n : actions ?\n <ButtonGroup>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset View\n </Button>\n </ButtonGroup>\n : <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n }\n </FlexRow>\n <FlexGrowRow width=\"100%\" alignItems=\"start\">\n {showDetails ?\n <FlexCol height=\"100%\" width={'85%'}>\n {detail}\n </FlexCol>\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.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)\n\nNodeRelationalGraphFlexBox.displayName = 'NodeRelationalGraph'\n\n/** @deprecated */\nexport const NodeRelationalGraph = NodeRelationalGraphFlexBox\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { useWeakProvidedNode } from '@xyo-network/react-node'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../../../hooks'\nimport { NodeRelationalGraphProps } from '../../lib'\nimport { NodeRelationalGraphFlexBox } from './Graph'\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 { FlexBoxProps, FlexGrowCol, FlexRow } from '@xylabs/react-flexbox'\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 { PopperProps, styled } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { NodeSingular } from 'cytoscape'\nimport { ReactElement } from 'react'\n\nimport { useNodeElement } from './hooks'\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 { boundingBox, ref, currentElement } = 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 // eslint-disable-next-line sort-keys-fix/sort-keys-fix\n cursor: 'pointer',\n pointerEvents: 'none',\n position: 'absolute',\n}))\n","import { PopperProps } from '@mui/material'\nimport { NodeSingular } from 'cytoscape'\nimport { useEffect, useRef, useState } 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 useEffect(() => {\n setCurrentElement(null)\n }, [node])\n\n useEffect(() => {\n if (node) {\n setBoundingBox(node.renderedBoundingBox())\n }\n\n const listener = () => {\n setBoundingBox(node?.renderedBoundingBox())\n }\n\n node?.on('position', listener)\n\n return () => {\n node?.off('position', undefined, listener)\n }\n }, [node])\n\n // Once boundingBox state is set and applied to the layout, update the ref\n useEffect(() => {\n setCurrentElement(ref.current)\n }, [boundingBox])\n\n return { boundingBox, currentElement, ref }\n}\n","import { CancelRounded } from '@mui/icons-material'\nimport { Button, Card, CardActions, CardHeader, IconButton, Paper, Popper, PopperProps, styled } from '@mui/material'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { NodeSingular } from 'cytoscape'\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> = ({ anchorEl, onClose, onModuleDetails, onModuleExplore, node, ...props }) => {\n const { address, name } = node?.data() ?? {}\n return (\n <>\n {anchorEl ?\n <Popper anchorEl={anchorEl} {...props}>\n <Card elevation={3}>\n <CardHeader\n action={\n onClose ?\n <IconButton size=\"small\" onClick={onClose}>\n <CancelRounded />\n </IconButton>\n : null\n }\n avatar={\n <Paper elevation={6} sx={{ bgcolor: '#fff', p: 1 }}>\n <Identicon value={address} size={24} />\n </Paper>\n }\n title={name}\n subheader={address}\n />\n <StyledCardActions>\n {onModuleDetails ?\n <Button onClick={() => onModuleDetails?.(address)} size=\"small\" variant=\"contained\">\n Details\n </Button>\n : null}\n {onModuleExplore ?\n <Button onClick={() => onModuleExplore?.(address)} size=\"small\" variant=\"contained\">\n Explore\n </Button>\n : null}\n </StyledCardActions>\n </Card>\n </Popper>\n : null}\n </>\n )\n}\n\nexport const StyledModuleHoverPopper = styled(ModuleHoverPopper, { name: 'StyledComponents' })(() => ({\n zIndex: 2,\n}))\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","jsx","ModuleCardParser","mod","Button","useRef","createContextEx","CytoscapeInstanceContext","useEffect","useState","jsx","CytoscapeInstanceProvider","children","defaultInstance","cy","setCy","useState","useEffect","CytoscapeInstanceContext","useContextEx","useCytoscapeInstance","required","useContextEx","CytoscapeInstanceContext","useAsyncEffect","isNodeInstance","useEffect","useState","exists","renderToStaticMarkup","dataUri","encodeSvg","reactElement","color","svgString","svgElement","generateIconMap","ColaLayout","ConcentricLayout","node","isArchivistInstance","isBridgeInstance","isDivinerInstance","isNodeInstance","isSentinelInstance","isWitnessModule","parseModuleType","mod","type","CytoscapeElements","rootNode","newNode","properties","mod","info","root","classes","newEdge","newElements","childInfo","address","id","parseModuleType","name","maxDepth","depth","children","child","exists","BubbleChartRoundedIcon","HubIcon","InsertLinkRoundedIcon","Inventory2RoundedIcon","QuestionMarkRoundedIcon","TimerRoundedIcon","VisibilityRoundedIcon","CyIconSet","NodeWithName","color","outlineColor","Node","icons","bgColor","hideLabels","elem","NodeAsRoot","EdgeStyled","lineColor","targetArrowColor","useCytoscapeElements","mod","elements","setElements","useState","useAsyncEffect","moduleInstance","newElements","CytoscapeElements","useEffect","attachedListener","detachedListener","isNodeInstance","useCallback","useEffect","useState","useHoveredNode","renderedElements","cy","useCytoscapeInstance","hoveredNode","setHoveredNode","useState","nodeListener","useCallback","node","useEffect","_a","useWeakModuleFromNode","useMemo","useNewElements","selectedElement","selectedAddress","useMemo","mod","useWeakModuleFromNode","useCytoscapeElements","useEffect","useState","useRenderNewElements","newElements","hideLabels","cy","useCytoscapeInstance","renderedElements","setRenderedElements","useState","useEffect","_a","_b","ColaLayout","useState","useSelectedElement","selectedElement","setSelectedElement","useState","cy","useCytoscapeInstance","updateStyles","element","_a","nodes","address","_b","selectedNode","useElements","hideLabels","selectedElement","toggleSelectedElement","useSelectedElement","newElements","useNewElements","renderedElements","useRenderNewElements","hoveredNode","setHoveredNode","useHoveredNode","useMemo","useTheme","useMemo","useTheme","useMemo","jsx","useIcons","theme","useTheme","useMemo","iconMap","generateIconMap","CyIconSet","acc","name","IconComponent","icon","encodeSvg","useCytoscapeStyle","hideLabels","theme","useTheme","icons","useIcons","useMemo","Node","NodeWithName","NodeAsRoot","EdgeStyled","useCytoscapeOptions","elements","style","layout","defaultStyle","useCytoscapeStyle","resolvedLayout","ConcentricLayout","resolvedStyle","useMemo","usePromise","useEffect","useState","useModuleDetails","rootModule","onFoundModule","cy","useCytoscapeInstance","moduleAddress","setModuleAddress","useState","foundModule","usePromise","rootModuleInstance","useEffect","_a","resizeObserver","_b","node","container","address","_c","_d","_e","moduleNode","rootModuleNode","foundModuleNode","notModuleNode","activeNode","useState","useRelationalGraphOptions","mod","hideLabels","setHideLabels","useState","handleToggleLabels","oldValue","elements","useCytoscapeElements","style","useCytoscapeStyle","options","useCytoscapeOptions","ConcentricLayout","cytoscape","cola","coseBilkent","dagre","euler","useEffect","useState","Fragment","jsx","WithExtensions","children","initialized","setInitialized","Box","Button","ButtonGroup","Card","CardHeader","Paper","useTheme","asAddress","FlexCol","FlexGrowRow","FlexRow","Identicon","useWeakModuleFromNode","cytoscape","cola","coseBilkentLayout","dagre","eulerLayout","forwardRef","useEffect","useRef","useState","jsx","jsxs","applyLayout","cy","name","options","loadLayout","layout","ModuleHoverDetails","address","props","NodeRelationalGraphFlexBox","actions","children","node","layoutOptions","showDetails","detail","onHover","ref","_a","theme","setCy","cytoscapeRef","hoverPosition","setHoverBoundingBox","hoverAddress","setHoverAddress","moduleInstance","target","_b","cyNode","bb","id","handleReset","newCy","container","NodeRelationalGraph","useWeakProvidedNode","jsx","ProvidedNodeRenderer","node","props","providedNode","useWeakProvidedNode","elements","useCytoscapeElements","options","useCytoscapeOptions","NodeRelationalGraphFlexBox","CancelRounded","IconButton","FlexGrowCol","FlexRow","jsx","jsxs","DetailsFlexbox","children","onClose","styled","FlexCol","useEffect","useRef","useState","useNodeElement","node","ref","currentElement","setCurrentElement","boundingBox","setBoundingBox","listener","Fragment","jsx","jsxs","ModuleGraphNodeHover","children","node","boundingBox","ref","currentElement","useNodeElement","StyledNodeGhostElementFlexCol","styled","FlexCol","CancelRounded","Button","Card","CardActions","CardHeader","IconButton","Paper","Popper","styled","Identicon","Fragment","jsx","jsxs","ModuleHoverPopper","anchorEl","onClose","onModuleDetails","onModuleExplore","node","props","address","name","StyledCardActions","StyledModuleHoverPopper","jsx","ModuleGraphFlexBox","hideActions","rootModule","disableModuleDetails","props","cytoscapeRef","useRef","handleToggleLabels","hideLabels","options","useRelationalGraphOptions","hoveredNode","setHoveredNode","toggleSelectedElement","useElements","mod","onModuleDetails","useModuleDetails","WithExtensions","NodeRelationalGraphFlexBox","Button","DetailsFlexbox","ModuleGraphNodeHover","element","StyledModuleHoverPopper","ModuleGraphFlexBoxWithProvider","CytoscapeInstanceProvider"]}
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@xylabs/exists": "^3.5.1",
|
|
14
|
+
"@xylabs/hex": "^3.5.1",
|
|
14
15
|
"@xylabs/react-async-effect": "^3.1.7",
|
|
15
16
|
"@xylabs/react-flexbox": "^3.1.7",
|
|
16
17
|
"@xylabs/react-identicon": "^3.1.7",
|
|
@@ -23,10 +24,10 @@
|
|
|
23
24
|
"@xyo-network/module-events": "^2.106.0",
|
|
24
25
|
"@xyo-network/module-model": "^2.106.0",
|
|
25
26
|
"@xyo-network/node-model": "^2.106.0",
|
|
26
|
-
"@xyo-network/react-archivist": "~2.77.
|
|
27
|
-
"@xyo-network/react-module": "~2.77.
|
|
28
|
-
"@xyo-network/react-node": "~2.77.
|
|
29
|
-
"@xyo-network/react-shared": "~2.77.
|
|
27
|
+
"@xyo-network/react-archivist": "~2.77.1",
|
|
28
|
+
"@xyo-network/react-module": "~2.77.1",
|
|
29
|
+
"@xyo-network/react-node": "~2.77.1",
|
|
30
|
+
"@xyo-network/react-shared": "~2.77.1",
|
|
30
31
|
"@xyo-network/sentinel-model": "^2.106.0",
|
|
31
32
|
"@xyo-network/witness-model": "^2.106.0",
|
|
32
33
|
"cytoscape": "^3.29.2",
|
|
@@ -48,15 +49,15 @@
|
|
|
48
49
|
"@types/cytoscape-dagre": "^2.3.3",
|
|
49
50
|
"@types/cytoscape-euler": "^1.2.3",
|
|
50
51
|
"@types/react-dom": "^18.3.0",
|
|
51
|
-
"@xylabs/ts-scripts-yarn3": "^3.11.
|
|
52
|
-
"@xylabs/tsconfig-react": "^3.11.
|
|
52
|
+
"@xylabs/ts-scripts-yarn3": "^3.11.7",
|
|
53
|
+
"@xylabs/tsconfig-react": "^3.11.7",
|
|
53
54
|
"@xyo-network/archivist": "^2.106.0",
|
|
54
55
|
"@xyo-network/bridge-http": "^2.106.0",
|
|
55
56
|
"@xyo-network/bridge-model": "^2.106.0",
|
|
56
57
|
"@xyo-network/id-plugin": "^2.96.1",
|
|
57
58
|
"@xyo-network/node-memory": "^2.106.0",
|
|
58
|
-
"@xyo-network/react-storybook": "~2.77.
|
|
59
|
-
"@xyo-network/react-wallet": "~2.77.
|
|
59
|
+
"@xyo-network/react-storybook": "~2.77.1",
|
|
60
|
+
"@xyo-network/react-wallet": "~2.77.1",
|
|
60
61
|
"@xyo-network/sentinel": "^2.106.0",
|
|
61
62
|
"typescript": "^5.4.5"
|
|
62
63
|
},
|
|
@@ -111,6 +112,6 @@
|
|
|
111
112
|
},
|
|
112
113
|
"sideEffects": false,
|
|
113
114
|
"types": "dist/browser/index.d.ts",
|
|
114
|
-
"version": "2.77.
|
|
115
|
+
"version": "2.77.1",
|
|
115
116
|
"type": "module"
|
|
116
117
|
}
|