@xyo-network/react-node-renderer 2.47.43 → 2.47.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/cjs/Cytoscape/CytoscapeElements.js +1 -0
  2. package/dist/cjs/Cytoscape/CytoscapeElements.js.map +1 -1
  3. package/dist/cjs/components/RelationalGraph.js +12 -5
  4. package/dist/cjs/components/RelationalGraph.js.map +1 -1
  5. package/dist/cjs/contexts/CytoscapeInstance/Context.js +6 -0
  6. package/dist/cjs/contexts/CytoscapeInstance/Context.js.map +1 -0
  7. package/dist/cjs/contexts/CytoscapeInstance/Provider.js +15 -0
  8. package/dist/cjs/contexts/CytoscapeInstance/Provider.js.map +1 -0
  9. package/dist/cjs/contexts/CytoscapeInstance/State.js +3 -0
  10. package/dist/cjs/contexts/CytoscapeInstance/State.js.map +1 -0
  11. package/dist/cjs/contexts/CytoscapeInstance/index.js +8 -0
  12. package/dist/cjs/contexts/CytoscapeInstance/index.js.map +1 -0
  13. package/dist/cjs/contexts/CytoscapeInstance/use.js +8 -0
  14. package/dist/cjs/contexts/CytoscapeInstance/use.js.map +1 -0
  15. package/dist/cjs/contexts/index.js +5 -0
  16. package/dist/cjs/contexts/index.js.map +1 -0
  17. package/dist/cjs/hooks/cytoscape/useCytoscapeElements.js +0 -1
  18. package/dist/cjs/hooks/cytoscape/useCytoscapeElements.js.map +1 -1
  19. package/dist/docs.json +641 -617
  20. package/dist/esm/Cytoscape/CytoscapeElements.js +1 -0
  21. package/dist/esm/Cytoscape/CytoscapeElements.js.map +1 -1
  22. package/dist/esm/components/RelationalGraph.js +14 -7
  23. package/dist/esm/components/RelationalGraph.js.map +1 -1
  24. package/dist/esm/contexts/CytoscapeInstance/Context.js +3 -0
  25. package/dist/esm/contexts/CytoscapeInstance/Context.js.map +1 -0
  26. package/dist/esm/contexts/CytoscapeInstance/Provider.js +11 -0
  27. package/dist/esm/contexts/CytoscapeInstance/Provider.js.map +1 -0
  28. package/dist/esm/contexts/CytoscapeInstance/State.js +2 -0
  29. package/dist/esm/contexts/CytoscapeInstance/State.js.map +1 -0
  30. package/dist/esm/contexts/CytoscapeInstance/index.js +5 -0
  31. package/dist/esm/contexts/CytoscapeInstance/index.js.map +1 -0
  32. package/dist/esm/contexts/CytoscapeInstance/use.js +4 -0
  33. package/dist/esm/contexts/CytoscapeInstance/use.js.map +1 -0
  34. package/dist/esm/contexts/index.js +2 -0
  35. package/dist/esm/contexts/index.js.map +1 -0
  36. package/dist/esm/hooks/cytoscape/useCytoscapeElements.js +0 -1
  37. package/dist/esm/hooks/cytoscape/useCytoscapeElements.js.map +1 -1
  38. package/dist/types/Cytoscape/CytoscapeElements.d.ts.map +1 -1
  39. package/dist/types/components/RelationalGraph.d.ts +2 -1
  40. package/dist/types/components/RelationalGraph.d.ts.map +1 -1
  41. package/dist/types/contexts/CytoscapeInstance/Context.d.ts +4 -0
  42. package/dist/types/contexts/CytoscapeInstance/Context.d.ts.map +1 -0
  43. package/dist/types/contexts/CytoscapeInstance/Provider.d.ts +8 -0
  44. package/dist/types/contexts/CytoscapeInstance/Provider.d.ts.map +1 -0
  45. package/dist/types/contexts/CytoscapeInstance/State.d.ts +8 -0
  46. package/dist/types/contexts/CytoscapeInstance/State.d.ts.map +1 -0
  47. package/dist/types/contexts/CytoscapeInstance/index.d.ts +5 -0
  48. package/dist/types/contexts/CytoscapeInstance/index.d.ts.map +1 -0
  49. package/dist/types/contexts/CytoscapeInstance/use.d.ts +2 -0
  50. package/dist/types/contexts/CytoscapeInstance/use.d.ts.map +1 -0
  51. package/dist/types/contexts/index.d.ts +2 -0
  52. package/dist/types/contexts/index.d.ts.map +1 -0
  53. package/dist/types/hooks/cytoscape/useCytoscapeElements.d.ts.map +1 -1
  54. package/package.json +13 -13
  55. package/src/Cytoscape/CytoscapeElements.ts +1 -0
  56. package/src/components/RelationalGraph.tsx +25 -14
  57. package/src/components/RelationalGraphEvents.stories.tsx +84 -0
  58. package/src/contexts/CytoscapeInstance/Context.ts +5 -0
  59. package/src/contexts/CytoscapeInstance/Provider.tsx +18 -0
  60. package/src/contexts/CytoscapeInstance/State.ts +8 -0
  61. package/src/contexts/CytoscapeInstance/index.ts +4 -0
  62. package/src/contexts/CytoscapeInstance/use.ts +5 -0
  63. package/src/contexts/index.ts +1 -0
  64. package/src/hooks/cytoscape/useCytoscapeElements.ts +0 -1
@@ -20,6 +20,7 @@ export class CytoscapeElements {
20
20
  const newNodeId = CytoscapeElements.normalizeName(description.name) ?? description.address.substring(0, 8);
21
21
  return {
22
22
  data: {
23
+ address: description.address,
23
24
  id: newNodeId,
24
25
  type: parseModuleType(description.queries),
25
26
  },
@@ -1 +1 @@
1
- {"version":3,"file":"CytoscapeElements.js","sourceRoot":"","sources":["../../../src/Cytoscape/CytoscapeElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAItE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAExC,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAA;IAEzB,MAAM,CAAC,UAAU,GAAG,KAAK,EAAE,OAAoB,EAAE,OAAe,EAAE,EAAE;QAClE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACpF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC3C,OAAO,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC,CAAA;IAED,MAAM,CAAC,SAAS,CAAC,QAA2B,EAAE,OAA0B;QACtE,OAAO;YACL,IAAI,EAAE;gBACJ,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;gBAC5C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACxB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;aACxB;SACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,WAA8B;QAC7C,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1G,OAAO;YACL,IAAI,EAAE;gBACJ,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC;aAC3C;SACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,OAAoB,EAAmD,EAAE;QACrG,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,EAAE,CAAA;QAC7C,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IAChE,CAAC,CAAA;IAED,MAAM,CAAC,aAAa,CAAC,IAAa;QAChC,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;YAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAA;QAC1E,OAAO,IAAI,CAAA;IACb,CAAC"}
1
+ {"version":3,"file":"CytoscapeElements.js","sourceRoot":"","sources":["../../../src/Cytoscape/CytoscapeElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAItE,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAExC,MAAM,OAAO,iBAAiB;IAC5B,MAAM,CAAC,aAAa,GAAG,EAAE,CAAA;IAEzB,MAAM,CAAC,UAAU,GAAG,KAAK,EAAE,OAAoB,EAAE,OAAe,EAAE,EAAE;QAClE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACpF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;QAC3C,OAAO,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC,CAAA;IAED,MAAM,CAAC,SAAS,CAAC,QAA2B,EAAE,OAA0B;QACtE,OAAO;YACL,IAAI,EAAE;gBACJ,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;gBAC5C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACxB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;aACxB;SACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,WAA8B;QAC7C,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1G,OAAO;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC;aAC3C;SACF,CAAA;IACH,CAAC;IAED,MAAM,CAAC,aAAa,GAAG,KAAK,EAAE,OAAoB,EAAmD,EAAE;QACrG,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,QAAQ,EAAE,CAAA;QAC7C,OAAO,CAAC,WAAW,EAAE,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;IAChE,CAAC,CAAA;IAED,MAAM,CAAC,aAAa,CAAC,IAAa;QAChC,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;YAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAA;QAC1E,OAAO,IAAI,CAAA;IACb,CAAC"}
@@ -1,28 +1,35 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button, styled } from '@mui/material';
3
- import { FlexCol } from '@xylabs/react-flexbox';
3
+ import { FlexCol, FlexRow } from '@xylabs/react-flexbox';
4
4
  import { useShareForwardedRef } from '@xyo-network/react-shared';
5
5
  import cytoscape from 'cytoscape';
6
6
  import { forwardRef, useEffect, useState } from 'react';
7
- export const NodeRelationalGraph = forwardRef(({ options, ...props }, ref) => {
8
- const sharedRef = useShareForwardedRef(ref);
7
+ import { useCytoscapeInstance } from '../contexts';
8
+ export const NodeRelationalGraph = forwardRef(({ actions, options, ...props }, ref) => {
9
9
  const [cy, setCy] = useState();
10
+ const { setCy: setCyContext } = useCytoscapeInstance();
11
+ const sharedRef = useShareForwardedRef(ref);
10
12
  const handleReset = () => {
11
13
  cy?.reset();
12
14
  cy?.fit(undefined, 20);
13
15
  };
14
16
  useEffect(() => {
15
17
  if (sharedRef) {
16
- setCy(cytoscape({
18
+ const newCy = cytoscape({
17
19
  container: sharedRef.current,
18
20
  ...options,
19
- }));
21
+ });
22
+ setCy(newCy);
20
23
  }
21
24
  }, [options, sharedRef]);
22
- return (_jsxs(FlexCol, { ...props, children: [_jsx(ResetButton, { size: 'small', variant: 'contained', onClick: handleReset, children: "Reset" }), _jsx(FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" })] }));
25
+ useEffect(() => {
26
+ setCyContext?.(cy);
27
+ }, [cy, setCyContext]);
28
+ return (_jsxs(FlexCol, { ...props, children: [_jsxs(ActionsContainer, { children: [actions, _jsx(Button, { size: 'small', variant: 'contained', onClick: handleReset, children: "Reset" })] }), _jsx(FlexCol, { alignItems: "stretch", height: "100%", position: "absolute", ref: sharedRef, width: "100%" })] }));
23
29
  });
24
30
  NodeRelationalGraph.displayName = 'NodeRelationalGraph';
25
- const ResetButton = styled(Button, { name: 'ResetButton' })(() => ({
31
+ const ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(() => ({
32
+ flexWrap: 'wrap',
26
33
  position: 'absolute',
27
34
  right: '10px',
28
35
  top: '10px',
@@ -1 +1 @@
1
- {"version":3,"file":"RelationalGraph.js","sourceRoot":"","sources":["../../../src/components/RelationalGraph.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAgB,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,SAAqC,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAMvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAsC,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAChH,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,EAAQ,CAAA;IAEpC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,EAAE,EAAE,KAAK,EAAE,CAAA;QACX,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE;YACb,KAAK,CACH,SAAS,CAAC;gBACR,SAAS,EAAE,SAAS,CAAC,OAAO;gBAC5B,GAAG,OAAO;aACX,CAAC,CACH,CAAA;SACF;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IAExB,OAAO,CACL,MAAC,OAAO,OAAK,KAAK,aAChB,KAAC,WAAW,IAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,sBAExD,EACd,KAAC,OAAO,IAAC,UAAU,EAAC,SAAS,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,UAAU,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAC,MAAM,GAAW,IAC/F,CACX,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,mBAAmB,CAAC,WAAW,GAAG,qBAAqB,CAAA;AAEvD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACjE,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,CAAC;CACV,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"RelationalGraph.js","sourceRoot":"","sources":["../../../src/components/RelationalGraph.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAgB,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,SAAqC,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAa,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAOlD,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAsC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACzH,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,EAAQ,CAAA;IACpC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,oBAAoB,EAAE,CAAA;IACtD,MAAM,SAAS,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IAE3C,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,EAAE,EAAE,KAAK,EAAE,CAAA;QACX,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE;YACb,MAAM,KAAK,GAAG,SAAS,CAAC;gBACtB,SAAS,EAAE,SAAS,CAAC,OAAO;gBAC5B,GAAG,OAAO;aACX,CAAC,CAAA;YACF,KAAK,CAAC,KAAK,CAAC,CAAA;SACb;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,EAAE,CAAC,EAAE,CAAC,CAAA;IACpB,CAAC,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAA;IAEtB,OAAO,CACL,MAAC,OAAO,OAAK,KAAK,aAChB,MAAC,gBAAgB,eACd,OAAO,EACR,KAAC,MAAM,IAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,sBAExD,IACQ,EACnB,KAAC,OAAO,IAAC,UAAU,EAAC,SAAS,EAAC,MAAM,EAAC,MAAM,EAAC,QAAQ,EAAC,UAAU,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAC,MAAM,GAAW,IAC/F,CACX,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,mBAAmB,CAAC,WAAW,GAAG,qBAAqB,CAAA;AAEvD,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,MAAM;IACb,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,CAAC;CACV,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { createContextEx } from '@xyo-network/react-shared';
2
+ export const CytoscapeInstanceContext = createContextEx();
3
+ //# sourceMappingURL=Context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAI3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,eAAe,EAA0B,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { CytoscapeInstanceContext } from './Context';
4
+ export const CytoscapeInstanceProvider = ({ children, defaultInstance }) => {
5
+ const [cy, setCy] = useState(defaultInstance);
6
+ useEffect(() => {
7
+ setCy(defaultInstance);
8
+ }, [defaultInstance]);
9
+ return _jsx(CytoscapeInstanceContext.Provider, { value: { cy, provided: true, setCy }, children: children });
10
+ };
11
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/Provider.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAMpD,MAAM,CAAC,MAAM,yBAAyB,GAA6C,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE;IACnH,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAmB,eAAe,CAAC,CAAA;IAC/D,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,eAAe,CAAC,CAAA;IACxB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAA;IAErB,OAAO,KAAC,wBAAwB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,YAAG,QAAQ,GAAqC,CAAA;AAChI,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=State.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.js","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/State.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export * from './Context';
2
+ export * from './Provider';
3
+ export * from './State';
4
+ export * from './use';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { useContextEx } from '@xyo-network/react-shared';
2
+ import { CytoscapeInstanceContext } from './Context';
3
+ export const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required);
4
+ //# sourceMappingURL=use.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AAEpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,wBAAwB,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './CytoscapeInstance';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -32,7 +32,6 @@ export const useCytoscapeElements = (targetNode) => {
32
32
  console.error('Error Getting initial description', e);
33
33
  }
34
34
  }
35
- return () => console.log('unmounted');
36
35
  }, [targetNode]);
37
36
  return elements;
38
37
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useCytoscapeElements.js","sourceRoot":"","sources":["../../../../src/hooks/cytoscape/useCytoscapeElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAwB,EAAE,EAAE;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAA;IAEjE,cAAc;IACZ,uDAAuD;IACvD,KAAK,IAAI,EAAE;QACT,IAAI,UAAU,EAAE;YACd,IAAI;gBACF,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;gBACpF,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,CAAA;gBAEjC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;gBACrC,MAAM,OAAO,CAAC,UAAU,CACtB,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBACtC,IAAI;wBACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;wBACvE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBAEzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;wBACjE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;qBAC1B;oBAAC,OAAO,CAAC,EAAE;wBACV,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;qBAC3C;gBACH,CAAC,CAAC,CACH,CAAA;gBACD,WAAW,CAAC,WAAW,CAAC,CAAA;aACzB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAA;aACtD;SACF;QACD,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACvC,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"useCytoscapeElements.js","sourceRoot":"","sources":["../../../../src/hooks/cytoscape/useCytoscapeElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAwB,EAAE,EAAE;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAA;IAEjE,cAAc;IACZ,uDAAuD;IACvD,KAAK,IAAI,EAAE;QACT,IAAI,UAAU,EAAE;YACd,IAAI;gBACF,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;gBACpF,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,CAAA;gBAEjC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;gBACrC,MAAM,OAAO,CAAC,UAAU,CACtB,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;oBACtC,IAAI;wBACF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;wBACvE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBAEzB,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;wBACjE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;qBAC1B;oBAAC,OAAO,CAAC,EAAE;wBACV,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAA;qBAC3C;gBACH,CAAC,CAAC,CACH,CAAA;gBACD,WAAW,CAAC,WAAW,CAAC,CAAA;aACzB;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAA;aACtD;SACF;IACH,CAAC,EACD,CAAC,UAAU,CAAC,CACb,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"CytoscapeElements.d.ts","sourceRoot":"","sources":["../../../src/Cytoscape/CytoscapeElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAI7C,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,aAAa,SAAK;IAEzB,MAAM,CAAC,UAAU,YAAmB,WAAW,WAAW,MAAM,gCAI/D;IAED,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;;;;;;;IAUxE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,iBAAiB,GAAG,iBAAiB;IAUnE,MAAM,CAAC,aAAa,YAAmB,WAAW,KAAG,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAGnG;IAED,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM;CAKnC"}
1
+ {"version":3,"file":"CytoscapeElements.d.ts","sourceRoot":"","sources":["../../../src/Cytoscape/CytoscapeElements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAI7C,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,aAAa,SAAK;IAEzB,MAAM,CAAC,UAAU,YAAmB,WAAW,WAAW,MAAM,gCAI/D;IAED,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB;;;;;;;IAUxE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,iBAAiB,GAAG,iBAAiB;IAWnE,MAAM,CAAC,aAAa,YAAmB,WAAW,KAAG,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAGnG;IAED,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM;CAKnC"}
@@ -1,7 +1,8 @@
1
- /// <reference types="react" />
2
1
  import { FlexBoxProps } from '@xylabs/react-flexbox';
3
2
  import { CytoscapeOptions } from 'cytoscape';
3
+ import { ReactNode } from 'react';
4
4
  export interface NodeRelationalGraph extends FlexBoxProps {
5
+ actions?: ReactNode;
5
6
  options?: CytoscapeOptions;
6
7
  }
7
8
  export declare const NodeRelationalGraph: import("react").ForwardRefExoticComponent<NodeRelationalGraph & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"RelationalGraph.d.ts","sourceRoot":"","sources":["../../../src/components/RelationalGraph.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAE7D,OAAkB,EAAQ,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAG7D,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,gHA4B9B,CAAA"}
1
+ {"version":3,"file":"RelationalGraph.d.ts","sourceRoot":"","sources":["../../../src/components/RelationalGraph.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAoB,MAAM,uBAAuB,CAAA;AAEtE,OAAkB,EAAQ,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC7D,OAAO,EAAc,SAAS,EAAuB,MAAM,OAAO,CAAA;AAIlE,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,gHAmC9B,CAAA"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import { CytoscapeInstanceState } from './State';
3
+ export declare const CytoscapeInstanceContext: import("react").Context<CytoscapeInstanceState & import("@xyo-network/react-shared").ContextExState>;
4
+ //# sourceMappingURL=Context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/Context.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAA;AAEhD,eAAO,MAAM,wBAAwB,sGAA4C,CAAA"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { WithChildren } from '@xylabs/react-shared';
3
+ import { Core } from 'cytoscape';
4
+ export interface CytoscapeInstanceProviderProps extends WithChildren {
5
+ defaultInstance?: Core;
6
+ }
7
+ export declare const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps>;
8
+ //# sourceMappingURL=Provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/Provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAKhC,MAAM,WAAW,8BAA+B,SAAQ,YAAY;IAClE,eAAe,CAAC,EAAE,IAAI,CAAA;CACvB;AAED,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAO9E,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { ContextExState } from '@xyo-network/react-shared';
2
+ import { Core } from 'cytoscape';
3
+ import { Dispatch, SetStateAction } from 'react';
4
+ export interface CytoscapeInstanceState extends ContextExState {
5
+ cy?: Core;
6
+ setCy?: Dispatch<SetStateAction<Core | undefined>>;
7
+ }
8
+ //# sourceMappingURL=State.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"State.d.ts","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/State.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAEhD,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,EAAE,CAAC,EAAE,IAAI,CAAA;IACT,KAAK,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAA;CACnD"}
@@ -0,0 +1,5 @@
1
+ export * from './Context';
2
+ export * from './Provider';
3
+ export * from './State';
4
+ export * from './use';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const useCytoscapeInstance: (required?: boolean) => Omit<import("./State").CytoscapeInstanceState & import("@xyo-network/react-shared").ContextExState, "provided">;
2
+ //# sourceMappingURL=use.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../../../src/contexts/CytoscapeInstance/use.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,yIAA8F,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './CytoscapeInstance';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/contexts/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useCytoscapeElements.d.ts","sourceRoot":"","sources":["../../../../src/hooks/cytoscape/useCytoscapeElements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAK7C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gBAAiB,WAAW,wBAoC5D,CAAA"}
1
+ {"version":3,"file":"useCytoscapeElements.d.ts","sourceRoot":"","sources":["../../../../src/hooks/cytoscape/useCytoscapeElements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAK7C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gBAAiB,WAAW,wBAmC5D,CAAA"}
package/package.json CHANGED
@@ -12,9 +12,9 @@
12
12
  "dependencies": {
13
13
  "@xylabs/react-flexbox": "^2.16.14",
14
14
  "@xylabs/react-shared": "^2.16.14",
15
- "@xyo-network/module": "^2.53.36",
16
- "@xyo-network/node": "^2.53.36",
17
- "@xyo-network/react-shared": "^2.47.43",
15
+ "@xyo-network/module": "^2.54.7",
16
+ "@xyo-network/node": "^2.54.7",
17
+ "@xyo-network/react-shared": "^2.47.45",
18
18
  "cytoscape": "^3.23.0"
19
19
  },
20
20
  "peerDependencies": {
@@ -32,15 +32,15 @@
32
32
  "@types/react-dom": "^18.0.11",
33
33
  "@xylabs/ts-scripts-yarn3": "^2.16.1",
34
34
  "@xylabs/tsconfig-react": "^2.16.1",
35
- "@xyo-network/account": "^2.53.34",
36
- "@xyo-network/archivist": "^2.53.34",
37
- "@xyo-network/bridge": "^2.53.34",
38
- "@xyo-network/id-plugin": "^2.53.34",
39
- "@xyo-network/module": "^2.53.34",
40
- "@xyo-network/node": "^2.53.34",
41
- "@xyo-network/react-node": "^2.47.43",
42
- "@xyo-network/react-storybook": "^2.47.43",
43
- "@xyo-network/react-wallet": "^2.47.43",
35
+ "@xyo-network/account": "^2.54.7",
36
+ "@xyo-network/archivist": "^2.54.7",
37
+ "@xyo-network/bridge": "^2.54.7",
38
+ "@xyo-network/id-plugin": "^2.54.7",
39
+ "@xyo-network/module": "^2.54.7",
40
+ "@xyo-network/node": "^2.54.7",
41
+ "@xyo-network/react-node": "^2.47.45",
42
+ "@xyo-network/react-storybook": "^2.47.45",
43
+ "@xyo-network/react-wallet": "^2.47.45",
44
44
  "require-from-string": "^2.0.2",
45
45
  "typescript": "^4.9.5"
46
46
  },
@@ -87,5 +87,5 @@
87
87
  },
88
88
  "sideEffects": false,
89
89
  "types": "dist/types/index.d.ts",
90
- "version": "2.47.43"
90
+ "version": "2.47.45"
91
91
  }
@@ -27,6 +27,7 @@ export class CytoscapeElements {
27
27
  const newNodeId = CytoscapeElements.normalizeName(description.name) ?? description.address.substring(0, 8)
28
28
  return {
29
29
  data: {
30
+ address: description.address,
30
31
  id: newNodeId,
31
32
  type: parseModuleType(description.queries),
32
33
  },
@@ -1,16 +1,20 @@
1
1
  import { Button, styled } from '@mui/material'
2
- import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
2
+ import { FlexBoxProps, FlexCol, FlexRow } from '@xylabs/react-flexbox'
3
3
  import { useShareForwardedRef } from '@xyo-network/react-shared'
4
4
  import cytoscape, { Core, CytoscapeOptions } from 'cytoscape'
5
- import { forwardRef, useEffect, useState } from 'react'
5
+ import { forwardRef, ReactNode, useEffect, useState } from 'react'
6
+
7
+ import { useCytoscapeInstance } from '../contexts'
6
8
 
7
9
  export interface NodeRelationalGraph extends FlexBoxProps {
10
+ actions?: ReactNode
8
11
  options?: CytoscapeOptions
9
12
  }
10
13
 
11
- export const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGraph>(({ options, ...props }, ref) => {
12
- const sharedRef = useShareForwardedRef(ref)
14
+ export const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGraph>(({ actions, options, ...props }, ref) => {
13
15
  const [cy, setCy] = useState<Core>()
16
+ const { setCy: setCyContext } = useCytoscapeInstance()
17
+ const sharedRef = useShareForwardedRef(ref)
14
18
 
15
19
  const handleReset = () => {
16
20
  cy?.reset()
@@ -19,20 +23,26 @@ export const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGrap
19
23
 
20
24
  useEffect(() => {
21
25
  if (sharedRef) {
22
- setCy(
23
- cytoscape({
24
- container: sharedRef.current,
25
- ...options,
26
- }),
27
- )
26
+ const newCy = cytoscape({
27
+ container: sharedRef.current,
28
+ ...options,
29
+ })
30
+ setCy(newCy)
28
31
  }
29
32
  }, [options, sharedRef])
30
33
 
34
+ useEffect(() => {
35
+ setCyContext?.(cy)
36
+ }, [cy, setCyContext])
37
+
31
38
  return (
32
39
  <FlexCol {...props}>
33
- <ResetButton size={'small'} variant={'contained'} onClick={handleReset}>
34
- Reset
35
- </ResetButton>
40
+ <ActionsContainer>
41
+ {actions}
42
+ <Button size={'small'} variant={'contained'} onClick={handleReset}>
43
+ Reset
44
+ </Button>
45
+ </ActionsContainer>
36
46
  <FlexCol alignItems="stretch" height="100%" position="absolute" ref={sharedRef} width="100%"></FlexCol>
37
47
  </FlexCol>
38
48
  )
@@ -40,7 +50,8 @@ export const NodeRelationalGraph = forwardRef<HTMLDivElement, NodeRelationalGrap
40
50
 
41
51
  NodeRelationalGraph.displayName = 'NodeRelationalGraph'
42
52
 
43
- const ResetButton = styled(Button, { name: 'ResetButton' })(() => ({
53
+ const ActionsContainer = styled(FlexRow, { name: 'ActionsContainer' })(() => ({
54
+ flexWrap: 'wrap',
44
55
  position: 'absolute',
45
56
  right: '10px',
46
57
  top: '10px',
@@ -0,0 +1,84 @@
1
+ import { ComponentStory, DecoratorFn, Meta } from '@storybook/react'
2
+ import { useAsyncEffect } from '@xylabs/react-shared'
3
+ import { HDWallet } from '@xyo-network/account'
4
+ import { ArchivistConfigSchema, MemoryArchivist } from '@xyo-network/archivist'
5
+ import { MemoryNode, NodeConfigSchema } from '@xyo-network/node'
6
+ import { NodeProvider, useProvidedWrappedNode } from '@xyo-network/react-node'
7
+ import { DefaultSeedPhrase } from '@xyo-network/react-storybook'
8
+ import { WalletProvider } from '@xyo-network/react-wallet'
9
+ import { EventObject } from 'cytoscape'
10
+ import { useEffect, useState } from 'react'
11
+
12
+ import { CytoscapeInstanceProvider, useCytoscapeInstance } from '../contexts'
13
+ import { useCytoscapeElements, useCytoscapeOptions } from '../hooks'
14
+ import { NodeRelationalGraph } from './RelationalGraph'
15
+
16
+ const randomWallet = HDWallet.fromMnemonic(DefaultSeedPhrase)
17
+
18
+ const MemoryNodeDecorator: DecoratorFn = (Story, args) => {
19
+ const [node, setNode] = useState<MemoryNode>()
20
+
21
+ useAsyncEffect(
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
23
+ async () => {
24
+ const node = await MemoryNode.create({ config: { name: 'GlobalNode', schema: NodeConfigSchema } })
25
+
26
+ const archivist = await MemoryArchivist.create({ config: { name: 'RootStorageArchivist', schema: ArchivistConfigSchema } })
27
+ await node.register(archivist)
28
+ await node.attach(archivist.address, true)
29
+
30
+ setNode(node)
31
+ },
32
+ [],
33
+ )
34
+
35
+ return (
36
+ <WalletProvider defaultWallet={randomWallet}>
37
+ <NodeProvider node={node}>
38
+ <CytoscapeInstanceProvider>
39
+ <Story {...args} />
40
+ </CytoscapeInstanceProvider>
41
+ </NodeProvider>
42
+ </WalletProvider>
43
+ )
44
+ }
45
+
46
+ // eslint-disable-next-line import/no-default-export
47
+ export default {
48
+ component: NodeRelationalGraph,
49
+ title: 'node/renderer/NodeRelationalGraphEvents',
50
+ } as Meta
51
+
52
+ const Template: ComponentStory<typeof NodeRelationalGraph> = (props) => {
53
+ const [node] = useProvidedWrappedNode()
54
+ const elements = useCytoscapeElements(node)
55
+ const options = useCytoscapeOptions(elements)
56
+
57
+ const { cy } = useCytoscapeInstance(true)
58
+
59
+ useEffect(() => {
60
+ const listener = (event: EventObject) => {
61
+ const element = event.target[0]
62
+ console.log(element.data().address)
63
+ }
64
+ if (cy) {
65
+ cy.on('select', listener)
66
+ }
67
+
68
+ return () => {
69
+ cy?.off('select', listener)
70
+ }
71
+ }, [cy])
72
+ return <NodeRelationalGraph options={options} {...props} />
73
+ }
74
+
75
+ const defaultProps = {
76
+ height: 'calc(100vh - 20px)',
77
+ width: '100%',
78
+ }
79
+
80
+ const Default = Template.bind({})
81
+ Default.args = { ...defaultProps }
82
+ Default.decorators = [MemoryNodeDecorator]
83
+
84
+ export { Default }
@@ -0,0 +1,5 @@
1
+ import { createContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { CytoscapeInstanceState } from './State'
4
+
5
+ export const CytoscapeInstanceContext = createContextEx<CytoscapeInstanceState>()
@@ -0,0 +1,18 @@
1
+ import { WithChildren } from '@xylabs/react-shared'
2
+ import { Core } from 'cytoscape'
3
+ import { useEffect, useState } from 'react'
4
+
5
+ import { CytoscapeInstanceContext } from './Context'
6
+
7
+ export interface CytoscapeInstanceProviderProps extends WithChildren {
8
+ defaultInstance?: Core
9
+ }
10
+
11
+ export const CytoscapeInstanceProvider: React.FC<CytoscapeInstanceProviderProps> = ({ children, defaultInstance }) => {
12
+ const [cy, setCy] = useState<Core | undefined>(defaultInstance)
13
+ useEffect(() => {
14
+ setCy(defaultInstance)
15
+ }, [defaultInstance])
16
+
17
+ return <CytoscapeInstanceContext.Provider value={{ cy, provided: true, setCy }}>{children}</CytoscapeInstanceContext.Provider>
18
+ }
@@ -0,0 +1,8 @@
1
+ import { ContextExState } from '@xyo-network/react-shared'
2
+ import { Core } from 'cytoscape'
3
+ import { Dispatch, SetStateAction } from 'react'
4
+
5
+ export interface CytoscapeInstanceState extends ContextExState {
6
+ cy?: Core
7
+ setCy?: Dispatch<SetStateAction<Core | undefined>>
8
+ }
@@ -0,0 +1,4 @@
1
+ export * from './Context'
2
+ export * from './Provider'
3
+ export * from './State'
4
+ export * from './use'
@@ -0,0 +1,5 @@
1
+ import { useContextEx } from '@xyo-network/react-shared'
2
+
3
+ import { CytoscapeInstanceContext } from './Context'
4
+
5
+ export const useCytoscapeInstance = (required = false) => useContextEx(CytoscapeInstanceContext, 'CytoscapeInstance', required)
@@ -0,0 +1 @@
1
+ export * from './CytoscapeInstance'
@@ -39,7 +39,6 @@ export const useCytoscapeElements = (targetNode?: NodeWrapper) => {
39
39
  console.error('Error Getting initial description', e)
40
40
  }
41
41
  }
42
- return () => console.log('unmounted')
43
42
  },
44
43
  [targetNode],
45
44
  )