@xyo-network/react-node-renderer 2.62.3 → 2.64.0-rc.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.
@@ -1 +1 @@
1
- {"version":3,"file":"CytoscapeIcons.d.ts","sourceRoot":"","sources":["../../src/Cytoscape/CytoscapeIcons.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAQhG,CAAA"}
1
+ {"version":3,"file":"CytoscapeIcons.d.ts","sourceRoot":"","sources":["../../src/Cytoscape/CytoscapeIcons.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAQhG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"CytoscapeIcons.d.ts","sourceRoot":"","sources":["../../src/Cytoscape/CytoscapeIcons.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAQhG,CAAA"}
1
+ {"version":3,"file":"CytoscapeIcons.d.ts","sourceRoot":"","sources":["../../src/Cytoscape/CytoscapeIcons.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAQhG,CAAA"}
package/dist/index.js CHANGED
@@ -179,21 +179,15 @@ var CytoscapeElements = class _CytoscapeElements {
179
179
  };
180
180
 
181
181
  // src/Cytoscape/CytoscapeIcons.tsx
182
- var import_BubbleChartRounded = __toESM(require("@mui/icons-material/BubbleChartRounded"));
183
- var import_Hub = __toESM(require("@mui/icons-material/Hub"));
184
- var import_InsertLinkRounded = __toESM(require("@mui/icons-material/InsertLinkRounded"));
185
- var import_Inventory2Rounded = __toESM(require("@mui/icons-material/Inventory2Rounded"));
186
- var import_QuestionMarkRounded = __toESM(require("@mui/icons-material/QuestionMarkRounded"));
187
- var import_TimerRounded = __toESM(require("@mui/icons-material/TimerRounded"));
188
- var import_VisibilityRounded = __toESM(require("@mui/icons-material/VisibilityRounded"));
182
+ var import_icons_material = require("@mui/icons-material");
189
183
  var CyIconSet = {
190
- archivist: import_Inventory2Rounded.default,
191
- bridge: import_InsertLinkRounded.default,
192
- diviner: import_BubbleChartRounded.default,
193
- module: import_QuestionMarkRounded.default,
194
- node: import_Hub.default,
195
- sentinel: import_TimerRounded.default,
196
- witness: import_VisibilityRounded.default
184
+ archivist: import_icons_material.Inventory2Rounded,
185
+ bridge: import_icons_material.InsertLinkRounded,
186
+ diviner: import_icons_material.BubbleChartRounded,
187
+ module: import_icons_material.QuestionMarkRounded,
188
+ node: import_icons_material.Hub,
189
+ sentinel: import_icons_material.TimerRounded,
190
+ witness: import_icons_material.VisibilityRounded
197
191
  };
198
192
 
199
193
  // src/Cytoscape/CytoscapeStyles.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/ModuleCardParser.tsx","../src/components/ProvidedNodeRenderer.tsx","../src/hooks/cytoscape/useCytoscapeElements.ts","../src/Cytoscape/lib/encodeSvg.ts","../src/Cytoscape/lib/iconMap.ts","../src/Cytoscape/lib/parseModuleType.ts","../src/Cytoscape/CytoscapeElements.ts","../src/Cytoscape/CytoscapeIcons.tsx","../src/Cytoscape/CytoscapeStyles.ts","../src/hooks/cytoscape/useCytoscapeOptions.ts","../src/hooks/cytoscape/useCytoscapeLayout.ts","../src/hooks/cytoscape/useCytoscapeStyle.ts","../src/hooks/cytoscape/useIcons.tsx","../src/components/RelationalGraph.tsx","../src/contexts/CytoscapeInstance/Context.ts","../src/contexts/CytoscapeInstance/use.ts"],"sourcesContent":["export * from './components'\nexport * from './Cytoscape'\nexport * from './hooks'\n","import { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\n\nexport interface ModuleCardParserProps {\n module?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ module }) => {\n switch (true) {\n case module?.config.schema.includes('archivist'):\n return <ArchivistCard module={asArchivistInstance(module)} />\n case module?.config.schema.includes('diviner'):\n return <DivinerCard module={asDivinerInstance(module)} />\n default:\n return <ModuleCard module={module} />\n }\n}\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { useProvidedNode } from '@xyo-network/react-node'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../hooks'\nimport { NodeRelationalGraphProps } from './lib'\nimport { NodeRelationalGraph } from './RelationalGraph'\n\nexport interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {\n account?: AccountInstance\n node?: NodeInstance\n}\n\nexport const ProvidedNodeRenderer: React.FC<ProvidedNodeRendererProps> = ({ node, ...props }) => {\n const [providedNode] = useProvidedNode()\n const elements = useCytoscapeElements(node ?? providedNode)\n const options = useCytoscapeOptions(elements)\n\n return <NodeRelationalGraph alignItems=\"stretch\" flexGrow={1} height=\"100%\" options={options} {...props} />\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction } from '@xyo-network/module'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../Cytoscape'\n\n/**\n * Note: Relies on describe but could eventually be converted to a discover call\n * Logic would be similar to what the bridge does\n */\nexport const useCytoscapeElements = (targetNode: NodeInstance | undefined | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async () => {\n if (targetNode) {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n }\n },\n [targetNode],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined = undefined\n let detachedListener: EventUnsubscribeFunction | undefined = undefined\n\n if (targetNode) {\n attachedListener = targetNode.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n detachedListener = targetNode.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [targetNode])\n\n return elements\n}\n","import { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.getElementsByTagName('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const parseModuleType = (schema?: string): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (schema) {\n if (schema.includes('archivist')) {\n type = 'archivist'\n } else if (schema.includes('bridge')) {\n type = 'bridge'\n } else if (schema.includes('diviner')) {\n type = 'diviner'\n } else if (schema.includes('node')) {\n type = 'node'\n } else if (schema.includes('sentinel')) {\n type = 'sentinel'\n } else if (schema.includes('witness')) {\n type = 'witness'\n } else {\n type = 'module'\n }\n }\n return type\n}\n","import { ModuleManifest } from '@xyo-network/manifest-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\n\nexport class CytoscapeElements {\n static MaxNameLength = 20\n\n static buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n },\n }\n }\n\n static async buildElements(node: NodeInstance) {\n try {\n const [, newRootNode] = await CytoscapeElements.buildRootNode(node)\n const newElements: ElementDefinition[] = [newRootNode]\n\n const children = await Promise.all(\n (await node.resolve()).map<Promise<[ModuleManifest, string]>>(async (child) => [await child.manifest(), child.address]),\n )\n await Promise.allSettled(\n (children ?? [])?.map(async ([child, address]) => {\n try {\n const newNode = await CytoscapeElements.buildNode(child, address)\n newElements.push(newNode)\n\n const newEdge = CytoscapeElements.buildEdge(newRootNode, newNode)\n newElements.push(newEdge)\n } catch (e) {\n console.error('Error parsing children', e)\n }\n }),\n )\n return newElements\n } catch (e) {\n console.error('Error Getting initial description', e)\n }\n }\n\n static buildNode(manifest: ModuleManifest, address: string): ElementDefinition {\n const newNodeId = CytoscapeElements.normalizeName(manifest.config.name) ?? address.substring(0, 8)\n return {\n data: {\n address,\n id: newNodeId,\n type: parseModuleType(manifest.config.schema),\n },\n }\n }\n\n static buildRootNode = async (node: NodeInstance): Promise<[ModuleManifest, ElementDefinition]> => {\n const manifest = await node?.manifest()\n return [manifest, CytoscapeElements.buildNode(manifest, node.address)]\n }\n\n static normalizeName(name?: string) {\n if (!name) return\n if (name.length > this.MaxNameLength) return `${name.substring(0, 20)}...`\n return name\n }\n}\n","import BubbleChartRoundedIcon from '@mui/icons-material/BubbleChartRounded'\nimport HubIcon from '@mui/icons-material/Hub'\nimport InsertLinkRoundedIcon from '@mui/icons-material/InsertLinkRounded'\nimport Inventory2RoundedIcon from '@mui/icons-material/Inventory2Rounded'\nimport QuestionMarkRoundedIcon from '@mui/icons-material/QuestionMarkRounded'\nimport TimerRoundedIcon from '@mui/icons-material/TimerRounded'\nimport VisibilityRoundedIcon from '@mui/icons-material/VisibilityRounded'\nimport { SvgIconTypeMap } from '@mui/material'\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeIdStyles = (color?: string): Stylesheet => ({\n selector: 'node[id]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 14,\n 'text-margin-y': -5,\n },\n})\n\nexport const NodeStyled = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n // TODO - make dynamic\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-image-smoothing': 'yes',\n 'background-width': '75%',\n label: 'data(id)',\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeLayout } from './useCytoscapeLayout'\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 const defaultLayout = useCytoscapeLayout()\n\n const options = useMemo<CytoscapeOptions>(\n () => ({\n elements,\n layout: layout ?? defaultLayout,\n style: style ?? defaultStyle,\n }),\n [defaultLayout, defaultStyle, elements, layout, style],\n )\n\n return options\n}\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nexport const useCytoscapeLayout = () => {\n const layout: CytoscapeOptions['layout'] = useMemo(\n () => ({\n minNodeSpacing: 75,\n name: 'concentric',\n }),\n [],\n )\n\n return layout\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, NodeIdStyles, NodeStyled } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = () => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n NodeIdStyles(theme.palette.text.primary),\n NodeStyled(icons, theme.palette.primary.main),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, theme.palette.divider, theme.palette.primary.main, theme.palette.text.primary],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { Button, styled } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { useShareForwardedRef } from '@xyo-network/react-shared'\nimport cytoscape, { Core } from 'cytoscape'\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../contexts'\nimport { NodeRelationalGraphProps } from './lib'\n\nexport const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(({ actions, options, ...props }, ref) => {\n const [cy, setCy] = useState<Core>()\n const { setCy: setCyContext } = useCytoscapeInstance()\n const sharedRef = useShareForwardedRef(ref)\n\n const handleReset = () => {\n cy?.reset()\n cy?.fit(undefined, 20)\n }\n\n useEffect(() => {\n if (sharedRef) {\n const newCy = cytoscape({\n container: sharedRef.current,\n ...options,\n })\n setCy(newCy)\n }\n }, [options, sharedRef])\n\n useEffect(() => {\n setCyContext?.(cy)\n }, [cy, setCyContext])\n\n return (\n <FlexCol {...props}>\n <ActionsContainer>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n </ActionsContainer>\n <FlexCol alignItems=\"stretch\" height=\"100%\" position=\"absolute\" ref={sharedRef} width=\"100%\"></FlexCol>\n </FlexCol>\n )\n})\n\nNodeRelationalGraph.displayName = 'NodeRelationalGraph'\n\nconst ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(() => ({\n flexWrap: 'wrap',\n position: 'absolute',\n right: '10px',\n top: '10px',\n zIndex: 2,\n}))\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n"],"mappings":"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","names":["module","Inventory2RoundedIcon","InsertLinkRoundedIcon","BubbleChartRoundedIcon","QuestionMarkRoundedIcon","HubIcon","TimerRoundedIcon","VisibilityRoundedIcon","import_react","import_react","import_material","import_react","import_react","import_jsx_runtime","import_material","import_react_shared","import_react","import_react_shared","import_jsx_runtime","cytoscape","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/ModuleCardParser.tsx","../src/components/ProvidedNodeRenderer.tsx","../src/hooks/cytoscape/useCytoscapeElements.ts","../src/Cytoscape/lib/encodeSvg.ts","../src/Cytoscape/lib/iconMap.ts","../src/Cytoscape/lib/parseModuleType.ts","../src/Cytoscape/CytoscapeElements.ts","../src/Cytoscape/CytoscapeIcons.tsx","../src/Cytoscape/CytoscapeStyles.ts","../src/hooks/cytoscape/useCytoscapeOptions.ts","../src/hooks/cytoscape/useCytoscapeLayout.ts","../src/hooks/cytoscape/useCytoscapeStyle.ts","../src/hooks/cytoscape/useIcons.tsx","../src/components/RelationalGraph.tsx","../src/contexts/CytoscapeInstance/Context.ts","../src/contexts/CytoscapeInstance/use.ts"],"sourcesContent":["export * from './components'\nexport * from './Cytoscape'\nexport * from './hooks'\n","import { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\n\nexport interface ModuleCardParserProps {\n module?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ module }) => {\n switch (true) {\n case module?.config.schema.includes('archivist'):\n return <ArchivistCard module={asArchivistInstance(module)} />\n case module?.config.schema.includes('diviner'):\n return <DivinerCard module={asDivinerInstance(module)} />\n default:\n return <ModuleCard module={module} />\n }\n}\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { useProvidedNode } from '@xyo-network/react-node'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../hooks'\nimport { NodeRelationalGraphProps } from './lib'\nimport { NodeRelationalGraph } from './RelationalGraph'\n\nexport interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {\n account?: AccountInstance\n node?: NodeInstance\n}\n\nexport const ProvidedNodeRenderer: React.FC<ProvidedNodeRendererProps> = ({ node, ...props }) => {\n const [providedNode] = useProvidedNode()\n const elements = useCytoscapeElements(node ?? providedNode)\n const options = useCytoscapeOptions(elements)\n\n return <NodeRelationalGraph alignItems=\"stretch\" flexGrow={1} height=\"100%\" options={options} {...props} />\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction } from '@xyo-network/module'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../Cytoscape'\n\n/**\n * Note: Relies on describe but could eventually be converted to a discover call\n * Logic would be similar to what the bridge does\n */\nexport const useCytoscapeElements = (targetNode: NodeInstance | undefined | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async () => {\n if (targetNode) {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n }\n },\n [targetNode],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined = undefined\n let detachedListener: EventUnsubscribeFunction | undefined = undefined\n\n if (targetNode) {\n attachedListener = targetNode.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n detachedListener = targetNode.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [targetNode])\n\n return elements\n}\n","import { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.getElementsByTagName('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const parseModuleType = (schema?: string): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (schema) {\n if (schema.includes('archivist')) {\n type = 'archivist'\n } else if (schema.includes('bridge')) {\n type = 'bridge'\n } else if (schema.includes('diviner')) {\n type = 'diviner'\n } else if (schema.includes('node')) {\n type = 'node'\n } else if (schema.includes('sentinel')) {\n type = 'sentinel'\n } else if (schema.includes('witness')) {\n type = 'witness'\n } else {\n type = 'module'\n }\n }\n return type\n}\n","import { ModuleManifest } from '@xyo-network/manifest-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\n\nexport class CytoscapeElements {\n static MaxNameLength = 20\n\n static buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n },\n }\n }\n\n static async buildElements(node: NodeInstance) {\n try {\n const [, newRootNode] = await CytoscapeElements.buildRootNode(node)\n const newElements: ElementDefinition[] = [newRootNode]\n\n const children = await Promise.all(\n (await node.resolve()).map<Promise<[ModuleManifest, string]>>(async (child) => [await child.manifest(), child.address]),\n )\n await Promise.allSettled(\n (children ?? [])?.map(async ([child, address]) => {\n try {\n const newNode = await CytoscapeElements.buildNode(child, address)\n newElements.push(newNode)\n\n const newEdge = CytoscapeElements.buildEdge(newRootNode, newNode)\n newElements.push(newEdge)\n } catch (e) {\n console.error('Error parsing children', e)\n }\n }),\n )\n return newElements\n } catch (e) {\n console.error('Error Getting initial description', e)\n }\n }\n\n static buildNode(manifest: ModuleManifest, address: string): ElementDefinition {\n const newNodeId = CytoscapeElements.normalizeName(manifest.config.name) ?? address.substring(0, 8)\n return {\n data: {\n address,\n id: newNodeId,\n type: parseModuleType(manifest.config.schema),\n },\n }\n }\n\n static buildRootNode = async (node: NodeInstance): Promise<[ModuleManifest, ElementDefinition]> => {\n const manifest = await node?.manifest()\n return [manifest, CytoscapeElements.buildNode(manifest, node.address)]\n }\n\n static normalizeName(name?: string) {\n if (!name) return\n if (name.length > this.MaxNameLength) return `${name.substring(0, 20)}...`\n return name\n }\n}\n","import {\n BubbleChartRounded as BubbleChartRoundedIcon,\n Hub as HubIcon,\n InsertLinkRounded as InsertLinkRoundedIcon,\n Inventory2Rounded as Inventory2RoundedIcon,\n QuestionMarkRounded as QuestionMarkRoundedIcon,\n TimerRounded as TimerRoundedIcon,\n VisibilityRounded as VisibilityRoundedIcon,\n} from '@mui/icons-material'\nimport { SvgIconTypeMap } from '@mui/material'\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeIdStyles = (color?: string): Stylesheet => ({\n selector: 'node[id]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 14,\n 'text-margin-y': -5,\n },\n})\n\nexport const NodeStyled = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n // TODO - make dynamic\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-image-smoothing': 'yes',\n 'background-width': '75%',\n label: 'data(id)',\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeLayout } from './useCytoscapeLayout'\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 const defaultLayout = useCytoscapeLayout()\n\n const options = useMemo<CytoscapeOptions>(\n () => ({\n elements,\n layout: layout ?? defaultLayout,\n style: style ?? defaultStyle,\n }),\n [defaultLayout, defaultStyle, elements, layout, style],\n )\n\n return options\n}\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nexport const useCytoscapeLayout = () => {\n const layout: CytoscapeOptions['layout'] = useMemo(\n () => ({\n minNodeSpacing: 75,\n name: 'concentric',\n }),\n [],\n )\n\n return layout\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, NodeIdStyles, NodeStyled } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = () => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n NodeIdStyles(theme.palette.text.primary),\n NodeStyled(icons, theme.palette.primary.main),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, theme.palette.divider, theme.palette.primary.main, theme.palette.text.primary],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { Button, styled } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { useShareForwardedRef } from '@xyo-network/react-shared'\nimport cytoscape, { Core } from 'cytoscape'\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../contexts'\nimport { NodeRelationalGraphProps } from './lib'\n\nexport const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(({ actions, options, ...props }, ref) => {\n const [cy, setCy] = useState<Core>()\n const { setCy: setCyContext } = useCytoscapeInstance()\n const sharedRef = useShareForwardedRef(ref)\n\n const handleReset = () => {\n cy?.reset()\n cy?.fit(undefined, 20)\n }\n\n useEffect(() => {\n if (sharedRef) {\n const newCy = cytoscape({\n container: sharedRef.current,\n ...options,\n })\n setCy(newCy)\n }\n }, [options, sharedRef])\n\n useEffect(() => {\n setCyContext?.(cy)\n }, [cy, setCyContext])\n\n return (\n <FlexCol {...props}>\n <ActionsContainer>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n </ActionsContainer>\n <FlexCol alignItems=\"stretch\" height=\"100%\" position=\"absolute\" ref={sharedRef} width=\"100%\"></FlexCol>\n </FlexCol>\n )\n})\n\nNodeRelationalGraph.displayName = 'NodeRelationalGraph'\n\nconst ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(() => ({\n flexWrap: 'wrap',\n position: 'absolute',\n right: '10px',\n top: '10px',\n zIndex: 2,\n}))\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n"],"mappings":"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","names":["module","Inventory2RoundedIcon","InsertLinkRoundedIcon","BubbleChartRoundedIcon","QuestionMarkRoundedIcon","HubIcon","TimerRoundedIcon","VisibilityRoundedIcon","import_react","import_react","import_material","import_react","import_react","import_jsx_runtime","import_material","import_react_shared","import_react","import_react_shared","import_jsx_runtime","cytoscape","import_jsx_runtime"]}
package/dist/index.mjs CHANGED
@@ -131,13 +131,15 @@ var CytoscapeElements = class _CytoscapeElements {
131
131
  };
132
132
 
133
133
  // src/Cytoscape/CytoscapeIcons.tsx
134
- import BubbleChartRoundedIcon from "@mui/icons-material/BubbleChartRounded";
135
- import HubIcon from "@mui/icons-material/Hub";
136
- import InsertLinkRoundedIcon from "@mui/icons-material/InsertLinkRounded";
137
- import Inventory2RoundedIcon from "@mui/icons-material/Inventory2Rounded";
138
- import QuestionMarkRoundedIcon from "@mui/icons-material/QuestionMarkRounded";
139
- import TimerRoundedIcon from "@mui/icons-material/TimerRounded";
140
- import VisibilityRoundedIcon from "@mui/icons-material/VisibilityRounded";
134
+ import {
135
+ BubbleChartRounded as BubbleChartRoundedIcon,
136
+ Hub as HubIcon,
137
+ InsertLinkRounded as InsertLinkRoundedIcon,
138
+ Inventory2Rounded as Inventory2RoundedIcon,
139
+ QuestionMarkRounded as QuestionMarkRoundedIcon,
140
+ TimerRounded as TimerRoundedIcon,
141
+ VisibilityRounded as VisibilityRoundedIcon
142
+ } from "@mui/icons-material";
141
143
  var CyIconSet = {
142
144
  archivist: Inventory2RoundedIcon,
143
145
  bridge: InsertLinkRoundedIcon,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ModuleCardParser.tsx","../src/components/ProvidedNodeRenderer.tsx","../src/hooks/cytoscape/useCytoscapeElements.ts","../src/Cytoscape/lib/encodeSvg.ts","../src/Cytoscape/lib/iconMap.ts","../src/Cytoscape/lib/parseModuleType.ts","../src/Cytoscape/CytoscapeElements.ts","../src/Cytoscape/CytoscapeIcons.tsx","../src/Cytoscape/CytoscapeStyles.ts","../src/hooks/cytoscape/useCytoscapeOptions.ts","../src/hooks/cytoscape/useCytoscapeLayout.ts","../src/hooks/cytoscape/useCytoscapeStyle.ts","../src/hooks/cytoscape/useIcons.tsx","../src/components/RelationalGraph.tsx","../src/contexts/CytoscapeInstance/Context.ts","../src/contexts/CytoscapeInstance/use.ts"],"sourcesContent":["import { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\n\nexport interface ModuleCardParserProps {\n module?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ module }) => {\n switch (true) {\n case module?.config.schema.includes('archivist'):\n return <ArchivistCard module={asArchivistInstance(module)} />\n case module?.config.schema.includes('diviner'):\n return <DivinerCard module={asDivinerInstance(module)} />\n default:\n return <ModuleCard module={module} />\n }\n}\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { useProvidedNode } from '@xyo-network/react-node'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../hooks'\nimport { NodeRelationalGraphProps } from './lib'\nimport { NodeRelationalGraph } from './RelationalGraph'\n\nexport interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {\n account?: AccountInstance\n node?: NodeInstance\n}\n\nexport const ProvidedNodeRenderer: React.FC<ProvidedNodeRendererProps> = ({ node, ...props }) => {\n const [providedNode] = useProvidedNode()\n const elements = useCytoscapeElements(node ?? providedNode)\n const options = useCytoscapeOptions(elements)\n\n return <NodeRelationalGraph alignItems=\"stretch\" flexGrow={1} height=\"100%\" options={options} {...props} />\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction } from '@xyo-network/module'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../Cytoscape'\n\n/**\n * Note: Relies on describe but could eventually be converted to a discover call\n * Logic would be similar to what the bridge does\n */\nexport const useCytoscapeElements = (targetNode: NodeInstance | undefined | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async () => {\n if (targetNode) {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n }\n },\n [targetNode],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined = undefined\n let detachedListener: EventUnsubscribeFunction | undefined = undefined\n\n if (targetNode) {\n attachedListener = targetNode.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n detachedListener = targetNode.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [targetNode])\n\n return elements\n}\n","import { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.getElementsByTagName('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const parseModuleType = (schema?: string): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (schema) {\n if (schema.includes('archivist')) {\n type = 'archivist'\n } else if (schema.includes('bridge')) {\n type = 'bridge'\n } else if (schema.includes('diviner')) {\n type = 'diviner'\n } else if (schema.includes('node')) {\n type = 'node'\n } else if (schema.includes('sentinel')) {\n type = 'sentinel'\n } else if (schema.includes('witness')) {\n type = 'witness'\n } else {\n type = 'module'\n }\n }\n return type\n}\n","import { ModuleManifest } from '@xyo-network/manifest-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\n\nexport class CytoscapeElements {\n static MaxNameLength = 20\n\n static buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n },\n }\n }\n\n static async buildElements(node: NodeInstance) {\n try {\n const [, newRootNode] = await CytoscapeElements.buildRootNode(node)\n const newElements: ElementDefinition[] = [newRootNode]\n\n const children = await Promise.all(\n (await node.resolve()).map<Promise<[ModuleManifest, string]>>(async (child) => [await child.manifest(), child.address]),\n )\n await Promise.allSettled(\n (children ?? [])?.map(async ([child, address]) => {\n try {\n const newNode = await CytoscapeElements.buildNode(child, address)\n newElements.push(newNode)\n\n const newEdge = CytoscapeElements.buildEdge(newRootNode, newNode)\n newElements.push(newEdge)\n } catch (e) {\n console.error('Error parsing children', e)\n }\n }),\n )\n return newElements\n } catch (e) {\n console.error('Error Getting initial description', e)\n }\n }\n\n static buildNode(manifest: ModuleManifest, address: string): ElementDefinition {\n const newNodeId = CytoscapeElements.normalizeName(manifest.config.name) ?? address.substring(0, 8)\n return {\n data: {\n address,\n id: newNodeId,\n type: parseModuleType(manifest.config.schema),\n },\n }\n }\n\n static buildRootNode = async (node: NodeInstance): Promise<[ModuleManifest, ElementDefinition]> => {\n const manifest = await node?.manifest()\n return [manifest, CytoscapeElements.buildNode(manifest, node.address)]\n }\n\n static normalizeName(name?: string) {\n if (!name) return\n if (name.length > this.MaxNameLength) return `${name.substring(0, 20)}...`\n return name\n }\n}\n","import BubbleChartRoundedIcon from '@mui/icons-material/BubbleChartRounded'\nimport HubIcon from '@mui/icons-material/Hub'\nimport InsertLinkRoundedIcon from '@mui/icons-material/InsertLinkRounded'\nimport Inventory2RoundedIcon from '@mui/icons-material/Inventory2Rounded'\nimport QuestionMarkRoundedIcon from '@mui/icons-material/QuestionMarkRounded'\nimport TimerRoundedIcon from '@mui/icons-material/TimerRounded'\nimport VisibilityRoundedIcon from '@mui/icons-material/VisibilityRounded'\nimport { SvgIconTypeMap } from '@mui/material'\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeIdStyles = (color?: string): Stylesheet => ({\n selector: 'node[id]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 14,\n 'text-margin-y': -5,\n },\n})\n\nexport const NodeStyled = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n // TODO - make dynamic\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-image-smoothing': 'yes',\n 'background-width': '75%',\n label: 'data(id)',\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeLayout } from './useCytoscapeLayout'\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 const defaultLayout = useCytoscapeLayout()\n\n const options = useMemo<CytoscapeOptions>(\n () => ({\n elements,\n layout: layout ?? defaultLayout,\n style: style ?? defaultStyle,\n }),\n [defaultLayout, defaultStyle, elements, layout, style],\n )\n\n return options\n}\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nexport const useCytoscapeLayout = () => {\n const layout: CytoscapeOptions['layout'] = useMemo(\n () => ({\n minNodeSpacing: 75,\n name: 'concentric',\n }),\n [],\n )\n\n return layout\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, NodeIdStyles, NodeStyled } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = () => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n NodeIdStyles(theme.palette.text.primary),\n NodeStyled(icons, theme.palette.primary.main),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, theme.palette.divider, theme.palette.primary.main, theme.palette.text.primary],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { Button, styled } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { useShareForwardedRef } from '@xyo-network/react-shared'\nimport cytoscape, { Core } from 'cytoscape'\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../contexts'\nimport { NodeRelationalGraphProps } from './lib'\n\nexport const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(({ actions, options, ...props }, ref) => {\n const [cy, setCy] = useState<Core>()\n const { setCy: setCyContext } = useCytoscapeInstance()\n const sharedRef = useShareForwardedRef(ref)\n\n const handleReset = () => {\n cy?.reset()\n cy?.fit(undefined, 20)\n }\n\n useEffect(() => {\n if (sharedRef) {\n const newCy = cytoscape({\n container: sharedRef.current,\n ...options,\n })\n setCy(newCy)\n }\n }, [options, sharedRef])\n\n useEffect(() => {\n setCyContext?.(cy)\n }, [cy, setCyContext])\n\n return (\n <FlexCol {...props}>\n <ActionsContainer>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n </ActionsContainer>\n <FlexCol alignItems=\"stretch\" height=\"100%\" position=\"absolute\" ref={sharedRef} width=\"100%\"></FlexCol>\n </FlexCol>\n )\n})\n\nNodeRelationalGraph.displayName = 'NodeRelationalGraph'\n\nconst ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(() => ({\n flexWrap: 'wrap',\n position: 'absolute',\n right: '10px',\n top: '10px',\n zIndex: 2,\n}))\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n"],"mappings":"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","names":["useMemo","useTheme","useMemo","useMemo","jsx","useMemo","useTheme","useMemo","useMemo","useEffect","useState","jsx","useState","useEffect","jsx"]}
1
+ {"version":3,"sources":["../src/components/ModuleCardParser.tsx","../src/components/ProvidedNodeRenderer.tsx","../src/hooks/cytoscape/useCytoscapeElements.ts","../src/Cytoscape/lib/encodeSvg.ts","../src/Cytoscape/lib/iconMap.ts","../src/Cytoscape/lib/parseModuleType.ts","../src/Cytoscape/CytoscapeElements.ts","../src/Cytoscape/CytoscapeIcons.tsx","../src/Cytoscape/CytoscapeStyles.ts","../src/hooks/cytoscape/useCytoscapeOptions.ts","../src/hooks/cytoscape/useCytoscapeLayout.ts","../src/hooks/cytoscape/useCytoscapeStyle.ts","../src/hooks/cytoscape/useIcons.tsx","../src/components/RelationalGraph.tsx","../src/contexts/CytoscapeInstance/Context.ts","../src/contexts/CytoscapeInstance/use.ts"],"sourcesContent":["import { asArchivistInstance } from '@xyo-network/archivist-model'\nimport { asDivinerInstance } from '@xyo-network/diviner-model'\nimport { ModuleInstance } from '@xyo-network/module'\nimport { ArchivistCard } from '@xyo-network/react-archivist'\nimport { DivinerCard, ModuleCard } from '@xyo-network/react-module'\n\nexport interface ModuleCardParserProps {\n module?: ModuleInstance\n}\n\nexport const ModuleCardParser: React.FC<ModuleCardParserProps> = ({ module }) => {\n switch (true) {\n case module?.config.schema.includes('archivist'):\n return <ArchivistCard module={asArchivistInstance(module)} />\n case module?.config.schema.includes('diviner'):\n return <DivinerCard module={asDivinerInstance(module)} />\n default:\n return <ModuleCard module={module} />\n }\n}\n","import { AccountInstance } from '@xyo-network/account-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { useProvidedNode } from '@xyo-network/react-node'\n\nimport { useCytoscapeElements, useCytoscapeOptions } from '../hooks'\nimport { NodeRelationalGraphProps } from './lib'\nimport { NodeRelationalGraph } from './RelationalGraph'\n\nexport interface ProvidedNodeRendererProps extends NodeRelationalGraphProps {\n account?: AccountInstance\n node?: NodeInstance\n}\n\nexport const ProvidedNodeRenderer: React.FC<ProvidedNodeRendererProps> = ({ node, ...props }) => {\n const [providedNode] = useProvidedNode()\n const elements = useCytoscapeElements(node ?? providedNode)\n const options = useCytoscapeOptions(elements)\n\n return <NodeRelationalGraph alignItems=\"stretch\" flexGrow={1} height=\"100%\" options={options} {...props} />\n}\n","import { useAsyncEffect } from '@xylabs/react-async-effect'\nimport { EventUnsubscribeFunction } from '@xyo-network/module'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\nimport { useEffect, useState } from 'react'\n\nimport { CytoscapeElements } from '../../Cytoscape'\n\n/**\n * Note: Relies on describe but could eventually be converted to a discover call\n * Logic would be similar to what the bridge does\n */\nexport const useCytoscapeElements = (targetNode: NodeInstance | undefined | null) => {\n const [elements, setElements] = useState<ElementDefinition[]>([])\n\n useAsyncEffect(\n // eslint-disable-next-line react-hooks/exhaustive-deps\n async () => {\n if (targetNode) {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n }\n },\n [targetNode],\n )\n\n useEffect(() => {\n let attachedListener: EventUnsubscribeFunction | undefined = undefined\n let detachedListener: EventUnsubscribeFunction | undefined = undefined\n\n if (targetNode) {\n attachedListener = targetNode.on('moduleAttached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n detachedListener = targetNode.on('moduleDetached', async () => {\n const newElements = (await CytoscapeElements.buildElements(targetNode)) ?? []\n setElements(newElements)\n })\n }\n\n return () => {\n attachedListener?.()\n detachedListener?.()\n }\n }, [targetNode])\n\n return elements\n}\n","import { ReactElement } from 'react'\n// eslint-disable-next-line import/no-internal-modules\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nconst dataUri = 'data:image/svg+xml,'\n\nexport const encodeSvg = (reactElement: ReactElement, color?: string) => {\n const svgString = renderToStaticMarkup(reactElement)\n\n const doc = new DOMParser().parseFromString(svgString, 'text/html')\n const svgElement = doc.getElementsByTagName('svg')[0]\n if (svgElement) {\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n svgElement.setAttribute('height', '100')\n svgElement.style.fill = color ?? 'black'\n }\n\n return `${dataUri}${window.encodeURIComponent(svgElement.outerHTML)}`\n}\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const generateIconMap: () => Record<CyNodeModuleTypes, string> = () => ({\n archivist: '',\n bridge: '',\n diviner: '',\n module: '',\n node: '',\n sentinel: '',\n witness: '',\n})\n","import { CyNodeModuleTypes } from './CyNodeModuleTypes'\n\nexport const parseModuleType = (schema?: string): CyNodeModuleTypes => {\n let type: CyNodeModuleTypes = 'module'\n if (schema) {\n if (schema.includes('archivist')) {\n type = 'archivist'\n } else if (schema.includes('bridge')) {\n type = 'bridge'\n } else if (schema.includes('diviner')) {\n type = 'diviner'\n } else if (schema.includes('node')) {\n type = 'node'\n } else if (schema.includes('sentinel')) {\n type = 'sentinel'\n } else if (schema.includes('witness')) {\n type = 'witness'\n } else {\n type = 'module'\n }\n }\n return type\n}\n","import { ModuleManifest } from '@xyo-network/manifest-model'\nimport { NodeInstance } from '@xyo-network/node-model'\nimport { ElementDefinition } from 'cytoscape'\n\nimport { parseModuleType } from './lib'\n\nexport class CytoscapeElements {\n static MaxNameLength = 20\n\n static buildEdge(rootNode: ElementDefinition, newNode: ElementDefinition) {\n return {\n data: {\n id: `${rootNode.data.id}/${newNode.data.id}`,\n source: rootNode.data.id,\n target: newNode.data.id,\n },\n }\n }\n\n static async buildElements(node: NodeInstance) {\n try {\n const [, newRootNode] = await CytoscapeElements.buildRootNode(node)\n const newElements: ElementDefinition[] = [newRootNode]\n\n const children = await Promise.all(\n (await node.resolve()).map<Promise<[ModuleManifest, string]>>(async (child) => [await child.manifest(), child.address]),\n )\n await Promise.allSettled(\n (children ?? [])?.map(async ([child, address]) => {\n try {\n const newNode = await CytoscapeElements.buildNode(child, address)\n newElements.push(newNode)\n\n const newEdge = CytoscapeElements.buildEdge(newRootNode, newNode)\n newElements.push(newEdge)\n } catch (e) {\n console.error('Error parsing children', e)\n }\n }),\n )\n return newElements\n } catch (e) {\n console.error('Error Getting initial description', e)\n }\n }\n\n static buildNode(manifest: ModuleManifest, address: string): ElementDefinition {\n const newNodeId = CytoscapeElements.normalizeName(manifest.config.name) ?? address.substring(0, 8)\n return {\n data: {\n address,\n id: newNodeId,\n type: parseModuleType(manifest.config.schema),\n },\n }\n }\n\n static buildRootNode = async (node: NodeInstance): Promise<[ModuleManifest, ElementDefinition]> => {\n const manifest = await node?.manifest()\n return [manifest, CytoscapeElements.buildNode(manifest, node.address)]\n }\n\n static normalizeName(name?: string) {\n if (!name) return\n if (name.length > this.MaxNameLength) return `${name.substring(0, 20)}...`\n return name\n }\n}\n","import {\n BubbleChartRounded as BubbleChartRoundedIcon,\n Hub as HubIcon,\n InsertLinkRounded as InsertLinkRoundedIcon,\n Inventory2Rounded as Inventory2RoundedIcon,\n QuestionMarkRounded as QuestionMarkRoundedIcon,\n TimerRounded as TimerRoundedIcon,\n VisibilityRounded as VisibilityRoundedIcon,\n} from '@mui/icons-material'\nimport { SvgIconTypeMap } from '@mui/material'\nimport { OverridableComponent } from '@mui/material/OverridableComponent'\n\nimport { CyNodeModuleTypes } from './lib'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const CyIconSet: Record<CyNodeModuleTypes, OverridableComponent<SvgIconTypeMap<{}, 'svg'>>> = {\n archivist: Inventory2RoundedIcon,\n bridge: InsertLinkRoundedIcon,\n diviner: BubbleChartRoundedIcon,\n module: QuestionMarkRoundedIcon,\n node: HubIcon,\n sentinel: TimerRoundedIcon,\n witness: VisibilityRoundedIcon,\n}\n","import { Stylesheet } from 'cytoscape'\n\nimport { CyNodeModuleTypes } from './lib'\n\nexport const NodeIdStyles = (color?: string): Stylesheet => ({\n selector: 'node[id]',\n style: {\n color,\n 'font-family': 'Lexend Deca, Helvetica, sans-serif',\n 'font-size': 14,\n 'text-margin-y': -5,\n },\n})\n\nexport const NodeStyled = (icons: Record<CyNodeModuleTypes, string>, bgColor?: string): Stylesheet => ({\n selector: 'node',\n style: {\n 'background-color': bgColor,\n 'background-height': '75%',\n // TODO - make dynamic\n 'background-image': (elem) => icons[elem.data('type') as CyNodeModuleTypes],\n 'background-image-smoothing': 'yes',\n 'background-width': '75%',\n label: 'data(id)',\n },\n})\n\nexport const EdgeStyled = (lineColor?: string, targetArrowColor?: string) => ({\n selector: 'edge',\n style: {\n 'curve-style': 'bezier',\n 'line-color': lineColor,\n 'line-opacity': 0.1,\n 'target-arrow-color': targetArrowColor,\n 'target-arrow-shape': 'triangle',\n width: 3,\n },\n})\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { useCytoscapeLayout } from './useCytoscapeLayout'\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 const defaultLayout = useCytoscapeLayout()\n\n const options = useMemo<CytoscapeOptions>(\n () => ({\n elements,\n layout: layout ?? defaultLayout,\n style: style ?? defaultStyle,\n }),\n [defaultLayout, defaultStyle, elements, layout, style],\n )\n\n return options\n}\n","import { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nexport const useCytoscapeLayout = () => {\n const layout: CytoscapeOptions['layout'] = useMemo(\n () => ({\n minNodeSpacing: 75,\n name: 'concentric',\n }),\n [],\n )\n\n return layout\n}\n","import { useTheme } from '@mui/material'\nimport { CytoscapeOptions } from 'cytoscape'\nimport { useMemo } from 'react'\n\nimport { EdgeStyled, NodeIdStyles, NodeStyled } from '../../Cytoscape'\nimport { useIcons } from './useIcons'\n\nexport const useCytoscapeStyle = () => {\n const theme = useTheme()\n const icons = useIcons()\n\n const style: CytoscapeOptions['style'] = useMemo(\n () => [\n NodeIdStyles(theme.palette.text.primary),\n NodeStyled(icons, theme.palette.primary.main),\n EdgeStyled(theme.palette.divider, theme.palette.divider),\n ],\n [icons, theme.palette.divider, theme.palette.primary.main, theme.palette.text.primary],\n )\n\n return style\n}\n","import { useTheme } from '@mui/material'\nimport { useMemo } from 'react'\n\nimport { CyIconSet, CyNodeModuleTypes, encodeSvg, generateIconMap } from '../../Cytoscape'\n\nexport const useIcons = () => {\n const theme = useTheme()\n const icons = useMemo(() => {\n const iconMap = generateIconMap()\n return Object.entries(CyIconSet).reduce((acc, [name, IconComponent]) => {\n const icon = <IconComponent fontSize=\"small\" />\n acc[name as CyNodeModuleTypes] = encodeSvg(icon, theme.palette.getContrastText(theme.palette.text.primary))\n return acc\n }, iconMap)\n }, [theme.palette])\n\n return icons\n}\n","import { Button, styled } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { useShareForwardedRef } from '@xyo-network/react-shared'\nimport cytoscape, { Core } from 'cytoscape'\nimport { forwardRef, useEffect, useState } from 'react'\n\nimport { useCytoscapeInstance } from '../contexts'\nimport { NodeRelationalGraphProps } from './lib'\n\nexport const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGraphProps>(({ actions, options, ...props }, ref) => {\n const [cy, setCy] = useState<Core>()\n const { setCy: setCyContext } = useCytoscapeInstance()\n const sharedRef = useShareForwardedRef(ref)\n\n const handleReset = () => {\n cy?.reset()\n cy?.fit(undefined, 20)\n }\n\n useEffect(() => {\n if (sharedRef) {\n const newCy = cytoscape({\n container: sharedRef.current,\n ...options,\n })\n setCy(newCy)\n }\n }, [options, sharedRef])\n\n useEffect(() => {\n setCyContext?.(cy)\n }, [cy, setCyContext])\n\n return (\n <FlexCol {...props}>\n <ActionsContainer>\n {actions}\n <Button size={'small'} variant={'contained'} onClick={handleReset}>\n Reset\n </Button>\n </ActionsContainer>\n <FlexCol alignItems=\"stretch\" height=\"100%\" position=\"absolute\" ref={sharedRef} width=\"100%\"></FlexCol>\n </FlexCol>\n )\n})\n\nNodeRelationalGraph.displayName = 'NodeRelationalGraph'\n\nconst ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(() => ({\n flexWrap: 'wrap',\n position: 'absolute',\n right: '10px',\n top: '10px',\n zIndex: 2,\n}))\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceState } from './State'\n\nexport const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { CytoscapeInstanceContext } from './Context'\n\nexport const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)\n"],"mappings":"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","names":["useMemo","useTheme","useMemo","useMemo","jsx","useMemo","useTheme","useMemo","useMemo","useEffect","useState","jsx","useState","useEffect","jsx"]}
package/package.json CHANGED
@@ -10,19 +10,19 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/react-async-effect": "~2.18.4",
14
- "@xylabs/react-flexbox": "~2.18.4",
15
- "@xylabs/react-shared": "~2.18.4",
16
- "@xyo-network/account-model": "^2.74.1",
17
- "@xyo-network/archivist-model": "^2.74.1",
18
- "@xyo-network/diviner-model": "^2.74.1",
19
- "@xyo-network/manifest-model": "^2.74.1",
20
- "@xyo-network/module": "^2.74.1",
21
- "@xyo-network/node-model": "^2.74.1",
22
- "@xyo-network/react-archivist": "~2.62.3",
23
- "@xyo-network/react-module": "~2.62.3",
24
- "@xyo-network/react-node": "~2.62.3",
25
- "@xyo-network/react-shared": "~2.62.3",
13
+ "@xylabs/react-async-effect": "^3.1.0-rc.3",
14
+ "@xylabs/react-flexbox": "^3.1.0-rc.3",
15
+ "@xylabs/react-shared": "^3.1.0-rc.3",
16
+ "@xyo-network/account-model": "^2.74.4",
17
+ "@xyo-network/archivist-model": "^2.74.4",
18
+ "@xyo-network/diviner-model": "^2.74.4",
19
+ "@xyo-network/manifest-model": "^2.74.4",
20
+ "@xyo-network/module": "^2.74.4",
21
+ "@xyo-network/node-model": "^2.74.4",
22
+ "@xyo-network/react-archivist": "~2.64.0-rc.1",
23
+ "@xyo-network/react-module": "~2.64.0-rc.1",
24
+ "@xyo-network/react-node": "~2.64.0-rc.1",
25
+ "@xyo-network/react-shared": "~2.64.0-rc.1",
26
26
  "cytoscape": "^3.26.0"
27
27
  },
28
28
  "peerDependencies": {
@@ -40,15 +40,15 @@
40
40
  "@types/react-dom": "^18.2.7",
41
41
  "@xylabs/ts-scripts-yarn3": "^3.0.28",
42
42
  "@xylabs/tsconfig-react": "^3.0.28",
43
- "@xyo-network/archivist": "^2.74.1",
44
- "@xyo-network/http-bridge": "^2.74.1",
45
- "@xyo-network/id-plugin": "^2.74.1",
46
- "@xyo-network/module": "^2.74.1",
47
- "@xyo-network/node-memory": "^2.74.1",
48
- "@xyo-network/react-node": "~2.62.3",
49
- "@xyo-network/react-storybook": "~2.62.3",
50
- "@xyo-network/react-wallet": "~2.62.3",
51
- "@xyo-network/sentinel": "^2.74.1",
43
+ "@xyo-network/archivist": "^2.74.4",
44
+ "@xyo-network/http-bridge": "^2.74.4",
45
+ "@xyo-network/id-plugin": "^2.74.4",
46
+ "@xyo-network/module": "^2.74.4",
47
+ "@xyo-network/node-memory": "^2.74.4",
48
+ "@xyo-network/react-node": "~2.64.0-rc.1",
49
+ "@xyo-network/react-storybook": "~2.64.0-rc.1",
50
+ "@xyo-network/react-wallet": "~2.64.0-rc.1",
51
+ "@xyo-network/sentinel": "^2.74.4",
52
52
  "typescript": "^5.2.2"
53
53
  },
54
54
  "description": "Common React library for all XYO projects that use React",
@@ -102,5 +102,6 @@
102
102
  },
103
103
  "sideEffects": false,
104
104
  "types": "dist/index.d.ts",
105
- "version": "2.62.3"
105
+ "version": "2.64.0-rc.1",
106
+ "stableVersion": "2.63.1"
106
107
  }
@@ -1,10 +1,12 @@
1
- import BubbleChartRoundedIcon from '@mui/icons-material/BubbleChartRounded'
2
- import HubIcon from '@mui/icons-material/Hub'
3
- import InsertLinkRoundedIcon from '@mui/icons-material/InsertLinkRounded'
4
- import Inventory2RoundedIcon from '@mui/icons-material/Inventory2Rounded'
5
- import QuestionMarkRoundedIcon from '@mui/icons-material/QuestionMarkRounded'
6
- import TimerRoundedIcon from '@mui/icons-material/TimerRounded'
7
- import VisibilityRoundedIcon from '@mui/icons-material/VisibilityRounded'
1
+ import {
2
+ BubbleChartRounded as BubbleChartRoundedIcon,
3
+ Hub as HubIcon,
4
+ InsertLinkRounded as InsertLinkRoundedIcon,
5
+ Inventory2Rounded as Inventory2RoundedIcon,
6
+ QuestionMarkRounded as QuestionMarkRoundedIcon,
7
+ TimerRounded as TimerRoundedIcon,
8
+ VisibilityRounded as VisibilityRoundedIcon,
9
+ } from '@mui/icons-material'
8
10
  import { SvgIconTypeMap } from '@mui/material'
9
11
  import { OverridableComponent } from '@mui/material/OverridableComponent'
10
12