@xyo-network/react-chain-network 1.18.0 → 1.18.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":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/context/network/Provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAEN,MAAM,OAAO,CAAA;AAKd,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IAC9D,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACpF;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA2DpE,CAAA"}
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/context/network/Provider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAEN,MAAM,OAAO,CAAA;AAKd,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAA;IAC9D,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;CACpF;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA2DpE,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { ContextExState } from '@xylabs/react-shared';
2
- import type { NetworkBootstrap } from '@xyo-network/xl1-network-model';
2
+ import type { NetworkBootstrap } from '@xyo-network/xl1-sdk';
3
3
  export type ChainNetworkState = ContextExState<{
4
4
  activeNetwork?: NetworkBootstrap;
5
5
  chainNetworkError?: Error;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/context/network/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;IAC7C,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,iBAAiB,CAAC,EAAE,KAAK,CAAA;IACzB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;CAClE,CAAC,CAAA"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../src/context/network/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;IAC7C,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,iBAAiB,CAAC,EAAE,KAAK,CAAA;IACzB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,CAAA;CAClE,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"UseViewerInPage.stories.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/UseViewerInPage.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAMpD,OAAO,KAA8B,MAAM,OAAO,CAAA;AAQlD,QAAA,MAAM,4BAA4B,EAAE,KAAK,CAAC,EAMzC,CAAA;;;;;AAyDD,wBAGC;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,4BAA4B,CAAsD,CAAA;AAExH,QAAA,MAAM,OAAO,iGAAoB,CAAA;AAGjC,OAAO,EAAE,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"UseViewerInPage.stories.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/UseViewerInPage.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAQpD,OAAO,KAAgC,MAAM,OAAO,CAAA;AAQpD,QAAA,MAAM,4BAA4B,EAAE,KAAK,CAAC,EAMzC,CAAA;;;;;AAuDD,wBAGC;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,4BAA4B,CAAsD,CAAA;AAExH,QAAA,MAAM,OAAO,iGAAoB,CAAA;AAGjC,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -1,68 +1,92 @@
1
- import type { XyoViewer } from '@xyo-network/xl1-protocol-sdk';
1
+ import type { XyoViewer } from '@xyo-network/xl1-sdk';
2
2
  export declare const useActiveNetworkCurrentBlock: (refresh?: number, viewer?: XyoViewer) => [[{
3
3
  schema: "network.xyo.boundwitness";
4
- addresses: import("@xylabs/hex").Address[];
5
- payload_hashes: import("@xylabs/hex").Hash[];
4
+ addresses: (Lowercase<string> & {
5
+ readonly __hex: true;
6
+ } & {
7
+ readonly __address: true;
8
+ })[];
9
+ payload_hashes: import("@xylabs/hex").BrandedHash[];
6
10
  payload_schemas: string[];
7
- previous_hashes: (import("@xylabs/hex").Hash | null)[];
8
- $signatures: import("@xylabs/hex").Hex[];
9
- block: import("@xyo-network/xl1-protocol").XL1BlockNumber;
10
- chain: import("@xylabs/hex").Hex;
11
- previous: import("@xylabs/hex").Hash | null;
11
+ previous_hashes: (import("@xylabs/hex").BrandedHash | null)[];
12
+ $signatures: (import("@xylabs/hex").BrandedHex | null)[];
13
+ block: import("@xyo-network/xl1-sdk").XL1BlockNumber;
14
+ chain: import("@xylabs/hex").BrandedHex;
15
+ previous: import("@xylabs/hex").BrandedHash | null;
12
16
  $epoch: number;
13
- _hash: import("@xylabs/hex").Hash;
14
- _dataHash: import("@xylabs/hex").Hash;
15
- $destination?: import("@xylabs/hex").Address | undefined;
16
- $sourceQuery?: import("@xylabs/hex").Hash | undefined;
17
+ _hash: import("@xylabs/hex").BrandedHash;
18
+ _dataHash: import("@xylabs/hex").BrandedHash;
19
+ $destination?: (Lowercase<string> & {
20
+ readonly __hex: true;
21
+ } & {
22
+ readonly __address: true;
23
+ }) | undefined;
24
+ $sourceQuery?: import("@xylabs/hex").BrandedHash | undefined;
17
25
  protocol?: number | undefined;
18
- step_hashes?: import("@xylabs/hex").Hash[] | undefined;
26
+ step_hashes?: import("@xylabs/hex").BrandedHash[] | undefined;
19
27
  }, {
20
28
  schema: string;
21
- _hash: import("@xylabs/hex").Hash;
22
- _dataHash: import("@xylabs/hex").Hash;
29
+ _hash: import("@xylabs/hex").BrandedHash;
30
+ _dataHash: import("@xylabs/hex").BrandedHash;
23
31
  }[]] | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
24
32
  export declare const useActiveNetworkCurrentBlockInPage: (refresh?: number) => [[{
25
33
  schema: "network.xyo.boundwitness";
26
- addresses: import("@xylabs/hex").Address[];
27
- payload_hashes: import("@xylabs/hex").Hash[];
34
+ addresses: (Lowercase<string> & {
35
+ readonly __hex: true;
36
+ } & {
37
+ readonly __address: true;
38
+ })[];
39
+ payload_hashes: import("@xylabs/hex").BrandedHash[];
28
40
  payload_schemas: string[];
29
- previous_hashes: (import("@xylabs/hex").Hash | null)[];
30
- $signatures: import("@xylabs/hex").Hex[];
31
- block: import("@xyo-network/xl1-protocol").XL1BlockNumber;
32
- chain: import("@xylabs/hex").Hex;
33
- previous: import("@xylabs/hex").Hash | null;
41
+ previous_hashes: (import("@xylabs/hex").BrandedHash | null)[];
42
+ $signatures: (import("@xylabs/hex").BrandedHex | null)[];
43
+ block: import("@xyo-network/xl1-sdk").XL1BlockNumber;
44
+ chain: import("@xylabs/hex").BrandedHex;
45
+ previous: import("@xylabs/hex").BrandedHash | null;
34
46
  $epoch: number;
35
- _hash: import("@xylabs/hex").Hash;
36
- _dataHash: import("@xylabs/hex").Hash;
37
- $destination?: import("@xylabs/hex").Address | undefined;
38
- $sourceQuery?: import("@xylabs/hex").Hash | undefined;
47
+ _hash: import("@xylabs/hex").BrandedHash;
48
+ _dataHash: import("@xylabs/hex").BrandedHash;
49
+ $destination?: (Lowercase<string> & {
50
+ readonly __hex: true;
51
+ } & {
52
+ readonly __address: true;
53
+ }) | undefined;
54
+ $sourceQuery?: import("@xylabs/hex").BrandedHash | undefined;
39
55
  protocol?: number | undefined;
40
- step_hashes?: import("@xylabs/hex").Hash[] | undefined;
56
+ step_hashes?: import("@xylabs/hex").BrandedHash[] | undefined;
41
57
  }, {
42
58
  schema: string;
43
- _hash: import("@xylabs/hex").Hash;
44
- _dataHash: import("@xylabs/hex").Hash;
59
+ _hash: import("@xylabs/hex").BrandedHash;
60
+ _dataHash: import("@xylabs/hex").BrandedHash;
45
61
  }[]] | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
46
62
  export declare const useActiveNetworkCurrentBlockInWallet: (refresh?: number) => [[{
47
63
  schema: "network.xyo.boundwitness";
48
- addresses: import("@xylabs/hex").Address[];
49
- payload_hashes: import("@xylabs/hex").Hash[];
64
+ addresses: (Lowercase<string> & {
65
+ readonly __hex: true;
66
+ } & {
67
+ readonly __address: true;
68
+ })[];
69
+ payload_hashes: import("@xylabs/hex").BrandedHash[];
50
70
  payload_schemas: string[];
51
- previous_hashes: (import("@xylabs/hex").Hash | null)[];
52
- $signatures: import("@xylabs/hex").Hex[];
53
- block: import("@xyo-network/xl1-protocol").XL1BlockNumber;
54
- chain: import("@xylabs/hex").Hex;
55
- previous: import("@xylabs/hex").Hash | null;
71
+ previous_hashes: (import("@xylabs/hex").BrandedHash | null)[];
72
+ $signatures: (import("@xylabs/hex").BrandedHex | null)[];
73
+ block: import("@xyo-network/xl1-sdk").XL1BlockNumber;
74
+ chain: import("@xylabs/hex").BrandedHex;
75
+ previous: import("@xylabs/hex").BrandedHash | null;
56
76
  $epoch: number;
57
- _hash: import("@xylabs/hex").Hash;
58
- _dataHash: import("@xylabs/hex").Hash;
59
- $destination?: import("@xylabs/hex").Address | undefined;
60
- $sourceQuery?: import("@xylabs/hex").Hash | undefined;
77
+ _hash: import("@xylabs/hex").BrandedHash;
78
+ _dataHash: import("@xylabs/hex").BrandedHash;
79
+ $destination?: (Lowercase<string> & {
80
+ readonly __hex: true;
81
+ } & {
82
+ readonly __address: true;
83
+ }) | undefined;
84
+ $sourceQuery?: import("@xylabs/hex").BrandedHash | undefined;
61
85
  protocol?: number | undefined;
62
- step_hashes?: import("@xylabs/hex").Hash[] | undefined;
86
+ step_hashes?: import("@xylabs/hex").BrandedHash[] | undefined;
63
87
  }, {
64
88
  schema: string;
65
- _hash: import("@xylabs/hex").Hash;
66
- _dataHash: import("@xylabs/hex").Hash;
89
+ _hash: import("@xylabs/hex").BrandedHash;
90
+ _dataHash: import("@xylabs/hex").BrandedHash;
67
91
  }[]] | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
68
92
  //# sourceMappingURL=useActiveNetworkCurrentBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveNetworkCurrentBlock.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/useActiveNetworkCurrentBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAI9D,eAAO,MAAM,4BAA4B,GAAI,gBAAW,EAAE,SAAS,SAAS;;;;;;;;;;;;;;;;;;;;;iGAI3E,CAAA;AAED,eAAO,MAAM,kCAAkC,GAAI,gBAAW;;;;;;;;;;;;;;;;;;;;;iGAK7D,CAAA;AAED,eAAO,MAAM,oCAAoC,GAAI,gBAAW;;;;;;;;;;;;;;;;;;;;;iGAK/D,CAAA"}
1
+ {"version":3,"file":"useActiveNetworkCurrentBlock.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/useActiveNetworkCurrentBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAIrD,eAAO,MAAM,4BAA4B,GAAI,gBAAW,EAAE,SAAS,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAI3E,CAAA;AAED,eAAO,MAAM,kCAAkC,GAAI,gBAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAK7D,CAAA;AAED,eAAO,MAAM,oCAAoC,GAAI,gBAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAK/D,CAAA"}
@@ -1,2 +1,2 @@
1
- export declare const useActiveNetworkRunner: () => [import("@xyo-network/xl1-protocol-sdk").CreatableProviderInstance<import("@xyo-network/xl1-rpc").JsonRpcXyoRunner, import("@xyo-network/xl1-protocol-sdk").CreatableProviderParams<import("@xyo-network/xl1-protocol-sdk").CreatableProviderContext>, import("@xyo-network/xl1-protocol-sdk").CreatableProviderEventData> | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
1
+ export declare const useActiveNetworkRunner: () => [import("@xyo-network/xl1-protocol-sdk").CreatableProviderInstance<import("@xyo-network/xl1-rpc").JsonRpcXyoRunner, string[], import("@xyo-network/xl1-protocol-sdk").CreatableProviderParams<import("@xyo-network/xl1-protocol-sdk").CreatableProviderContext>, import("@xyo-network/xl1-protocol-sdk").CreatableProviderEventData> | undefined, Error | undefined, import("@xylabs/react-promise").UsePromiseState | undefined];
2
2
  //# sourceMappingURL=useActiveNetworkRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveNetworkRunner.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/useActiveNetworkRunner.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,+ZAKlC,CAAA"}
1
+ {"version":3,"file":"useActiveNetworkRunner.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/useActiveNetworkRunner.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,yaAKlC,CAAA"}
@@ -1,7 +1,7 @@
1
- import { type NetworkBootstrap } from '@xyo-network/xl1-network-model';
1
+ import { type NetworkBootstrap } from '@xyo-network/xl1-sdk';
2
2
  /**
3
3
  * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC
4
4
  * @returns - XyoViewer for the active network
5
5
  */
6
- export declare const useViewerInPage: (networkOverride?: NetworkBootstrap) => import("@xyo-network/xl1-protocol-sdk").XyoViewer | undefined;
6
+ export declare const useViewerInPage: (networkOverride?: NetworkBootstrap) => import("@xyo-network/xl1-sdk").XyoViewer | undefined;
7
7
  //# sourceMappingURL=useViewerInPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useViewerInPage.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/useViewerInPage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAItE;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,kBAAkB,gBAAgB,kEAUjE,CAAA"}
1
+ {"version":3,"file":"useViewerInPage.d.ts","sourceRoot":"","sources":["../../../../src/hooks/provider/useViewerInPage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAI5D;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,kBAAkB,gBAAgB,yDAUjE,CAAA"}
@@ -1,3 +1,3 @@
1
- import type { NetworkStatus } from '@xyo-network/xl1-protocol';
1
+ import type { NetworkStatus } from '@xyo-network/xl1-sdk';
2
2
  export declare const usePollNetworkStatus: () => readonly [NetworkStatus | undefined, Error | undefined];
3
3
  //# sourceMappingURL=usePollNetworkStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePollNetworkStatus.d.ts","sourceRoot":"","sources":["../../../../src/hooks/status/usePollNetworkStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAO9D,eAAO,MAAM,oBAAoB,+DA+BhC,CAAA"}
1
+ {"version":3,"file":"usePollNetworkStatus.d.ts","sourceRoot":"","sources":["../../../../src/hooks/status/usePollNetworkStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAOzD,eAAO,MAAM,oBAAoB,+DA+BhC,CAAA"}
@@ -12,6 +12,7 @@ var ChainNetworkContext = createContextEx();
12
12
  // src/context/network/Provider.tsx
13
13
  import { ErrorRender } from "@xylabs/react-error";
14
14
  import { usePromise } from "@xylabs/react-promise";
15
+ import { isDefined } from "@xylabs/sdk-js";
15
16
  import { MainNetwork } from "@xyo-network/xl1-network-model";
16
17
  import React, { useCallback, useMemo, useState } from "react";
17
18
  var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal }) => {
@@ -30,13 +31,11 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
30
31
  }, [
31
32
  networks
32
33
  ]);
33
- useMemo(() => {
34
- if (resolvedActiveNetwork) {
35
- setActiveNetwork(resolvedActiveNetwork);
36
- }
37
- }, [
38
- resolvedActiveNetwork
39
- ]);
34
+ const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState(resolvedActiveNetwork);
35
+ if (isDefined(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {
36
+ setActiveNetwork(resolvedActiveNetwork);
37
+ setPreviousResolvedActiveNetwork(resolvedActiveNetwork);
38
+ }
40
39
  const updateActiveNetwork = useCallback((networkId) => {
41
40
  setError(void 0);
42
41
  const network = networks?.find((network2) => network2.id === networkId);
@@ -47,7 +46,8 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
47
46
  setActiveNetwork(network);
48
47
  void setActiveNetworkExternal?.(networkId);
49
48
  }, [
50
- networks
49
+ networks,
50
+ setActiveNetworkExternal
51
51
  ]);
52
52
  const value = useMemo(() => ({
53
53
  activeNetwork,
@@ -57,6 +57,8 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
57
57
  chainNetworkError: error ?? activeNetworkError
58
58
  }), [
59
59
  activeNetwork,
60
+ activeNetworkError,
61
+ error,
60
62
  networks,
61
63
  updateActiveNetwork
62
64
  ]);
@@ -217,12 +219,12 @@ import React7 from "react";
217
219
  import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
218
220
 
219
221
  // src/hooks/provider/useViewerInPage.ts
220
- import { isDefined, isDefinedNotNull, isUndefined } from "@xylabs/sdk-js";
222
+ import { isDefined as isDefined2, isDefinedNotNull, isUndefined } from "@xylabs/sdk-js";
221
223
  import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
222
224
  var useViewerInPage = /* @__PURE__ */ __name((networkOverride) => {
223
225
  let networkBootstrap;
224
226
  const { activeNetwork } = useChainNetwork();
225
- networkBootstrap = isDefined(networkOverride) ? networkOverride : activeNetwork;
227
+ networkBootstrap = isDefined2(networkOverride) ? networkOverride : activeNetwork;
226
228
  const httpRpcViewer = useHttpRpcViewer(networkBootstrap?.url);
227
229
  const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id);
228
230
  if (isUndefined(walletRpcViewer)) return;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/menu/Avatar.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/context/network/use.ts","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/components/status/NetworkStatus.tsx","../../src/hooks/provider/useActiveNetworkCurrentBlock.ts","../../src/hooks/provider/useViewerInPage.ts","../../src/hooks/provider/useActiveNetworkNetwork.ts","../../src/hooks/provider/useActiveNetworkRunner.ts","../../src/hooks/provider/useViewerInWallet.ts","../../src/hooks/status/usePollNetworkStatus.ts"],"sourcesContent":["import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport type { CSSProperties } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport interface NetworkAvatarProps extends AvatarProps {\n icon?: string\n iconStyles?: CSSProperties\n name?: string\n}\n\nexport const NetworkAvatar: React.FC<NetworkAvatarProps> = ({\n icon, iconStyles, name, sx, ...props\n}) => {\n return (\n <Avatar\n sx={{ backgroundColor: 'white', ...sx }}\n alt={name}\n {...props}\n >\n <NetworkIcon\n icon={icon}\n style={{ ...iconStyles }}\n />\n </Avatar>\n )\n}\n\nexport const ActiveNetworkAvatar: React.FC<AvatarProps> = (props) => {\n const { activeNetwork } = useChainNetwork()\n\n return (\n <NetworkAvatar\n icon={activeNetwork?.icon}\n name={activeNetwork?.name}\n {...props}\n />\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { ChainNetworkState } from './state.ts'\n\nexport const ChainNetworkContext = createContextEx<ChainNetworkState>()\n","import { ErrorRender } from '@xylabs/react-error'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-network-model'\nimport { MainNetwork } from '@xyo-network/xl1-network-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n\n // Set the active network upon initialization\n const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {\n // ensure networks are loaded\n if (!networks) return\n // get last saved active network\n const activeNetwork = await getActiveNetwork?.()\n // ensure the active network saved is found in the list of networks\n if (activeNetwork && networks?.find(network => network.id === activeNetwork.id)) {\n // Set the active network if it exists\n return activeNetwork\n } else {\n // Set the default network if no active network exists\n const defaultNetwork = networks.find(network => network.id === MainNetwork.id) ?? networks[0]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n useMemo(() => {\n if (resolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n }\n }, [resolvedActiveNetwork])\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n if (!network) {\n setError(new Error(`Network with id ${networkId} not found`))\n return\n }\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n chainNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, networks, updateActiveNetwork])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"ChainNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'ChainNetwork', required)\n","import type { DetailedHTMLProps, HtmlHTMLAttributes } from 'react'\nimport React from 'react'\n\nexport interface NetworkIconProps extends DetailedHTMLProps<HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {\n icon?: string\n}\n\nexport const NetworkIcon: React.FC<NetworkIconProps> = ({\n icon, style, ...props\n}) => {\n return (\n <span\n // eslint-disable-next-line react-dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{ __html: icon ?? '' }} // Placeholder for SVG\\\n style={{\n display: 'inline-flex', width: 24, height: 24, ...style,\n }}\n {...props}\n />\n )\n}\n","import type { MenuItemProps } from '@mui/material'\nimport { ListItemText } from '@mui/material'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-network-model'\nimport type { NetworkId } from '@xyo-network/xl1-protocol'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: NetworkId) => void\n}\n\nexport const NetworkMenuItem: React.FC<NetworkMenuItemProps> = ({\n active, network, onClick, updateActiveNetwork, ...props\n}) => {\n const handleClick = (event: ReactMouseEvent<HTMLLIElement, MouseEvent>) => {\n if (network === undefined) throw new Error('Network is undefined')\n updateActiveNetwork?.(network.id)\n onClick?.(event)\n }\n\n return (\n <ActiveMenuItem\n title={network?.name}\n disableRipple\n onClick={handleClick}\n active={active}\n sx={{ py: 1 }}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} sx={{ width: 30, height: 30 }} />\n <ListItemText>{network?.name}</ListItemText>\n </ActiveMenuItem>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button,\n} from '@mui/material'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport React, { useMemo, useState } from 'react'\n\nimport { NetworkStatusDialog } from './Dialog.tsx'\n\nexport interface NetworkStatusAlertProps extends AlertProps {\n status?: NetworkStatus\n}\n\nexport const NetworkStatusAlert: React.FC<NetworkStatusAlertProps> = ({ status, ...props }) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n const severity = useMemo(() => {\n if (!status) return\n switch (status.state) {\n case 'online': {\n return 'success'\n }\n case 'offline': {\n return 'error'\n }\n case 'degraded': {\n return 'warning'\n }\n case 'unknown': {\n return 'error'\n }\n }\n }, [status])\n\n return (\n <Alert severity={severity} {...props}>\n <AlertTitle>{status?.description}</AlertTitle>\n {status?.updates && status.updates.length > 0\n ? (\n <>\n <Button color={severity} variant=\"outlined\" size=\"small\" onClick={() => setOpen(true)}>\n Updates\n </Button>\n <NetworkStatusDialog open={open} onClose={handleClose} updates={status.updates} />\n </>\n )\n : null}\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography,\n} from '@mui/material'\nimport type { NetworkStatusUpdate } from '@xyo-network/xl1-protocol'\nimport React from 'react'\n\nexport interface NetworkStatusDialogProps extends DialogProps {\n updates: NetworkStatusUpdate[]\n}\n\nexport const NetworkStatusDialog: React.FC<NetworkStatusDialogProps> = ({ updates, ...props }) => {\n return (\n <Dialog {...props}>\n <DialogTitle>Recent Status Updates</DialogTitle>\n <DialogContent>\n <List>\n {updates.map(({\n start, end, update,\n }) => (\n <ListItem\n key={start + update}\n sx={{\n flexDirection: 'column', alignItems: 'start', pl: 0,\n }}\n >\n <Typography>\n {update}\n </Typography>\n <Typography gutterBottom sx={{ opacity: 0.75, fontSize: '.8333rem' }}>\n Start:\n {' '}\n {new Date(start).toLocaleString()}\n {' '}\n <br />\n End:\n {' '}\n {new Date(end).toLocaleString()}\n </Typography>\n </ListItem>\n ))}\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={e => props.onClose?.(e, 'backdropClick')} color=\"primary\" variant=\"outlined\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { usePollNetworkStatus } from '../../hooks/index.ts'\nimport { NetworkStatusAlert } from './Alert.tsx'\n\nconst validNetworkStates = new Set(['online', 'unknown'])\n\nexport interface NetworkStatusProps extends PropsWithChildren<AlertProps> {}\n\nexport const NetworkStatus: React.FC<NetworkStatusProps> = ({ children, ...props }) => {\n const [networkStatus] = usePollNetworkStatus()\n const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state)\n return (\n <>\n {showStatus ? <NetworkStatusAlert status={networkStatus} {...props} /> : null}\n {children}\n </>\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'\n\nimport { useViewerInPage } from './useViewerInPage.ts'\n\nexport const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {\n const viewer = useViewerInPage()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {\n const [viewer] = useViewerFromWallet()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n","import {\n isDefined, isDefinedNotNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport { type NetworkBootstrap } from '@xyo-network/xl1-network-model'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC\n * @returns - XyoViewer for the active network\n */\nexport const useViewerInPage = (networkOverride?: NetworkBootstrap) => {\n let networkBootstrap: NetworkBootstrap | undefined\n const { activeNetwork } = useChainNetwork()\n networkBootstrap = isDefined(networkOverride) ? networkOverride : activeNetwork\n\n const httpRpcViewer = useHttpRpcViewer(networkBootstrap?.url)\n const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id)\n\n if (isUndefined(walletRpcViewer)) return\n return isDefinedNotNull(walletRpcViewer) ? walletRpcViewer : httpRpcViewer\n}\n","import { useNetwork } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n const network = useNetwork(activeNetwork?.id)\n return network\n}\n","import { useHttpRpcRunner } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkRunner = () => {\n const { activeNetwork } = useChainNetwork()\n const runner = useHttpRpcRunner(activeNetwork?.url)\n\n return runner\n}\n","import { useHttpRpcViewer } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer directly from the active network\n * @returns - The viewer for the active network\n */\nexport const useViewerInWallet = () => {\n const { activeNetwork } = useChainNetwork()\n const walletViewer = useHttpRpcViewer(activeNetwork?.url)\n return walletViewer\n}\n","import { delay, isUndefined } from '@xylabs/sdk-js'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport { useEffect, useState } from 'react'\n\nimport { useActiveNetworkNetwork } from '../index.ts'\n\nconst STATUS_CHECK_INTERVAL = 10_000\n\nexport const usePollNetworkStatus = () => {\n const network = useActiveNetworkNetwork()\n const [networkStatus, setNetworkStatus] = useState<NetworkStatus>()\n const [networkStatusError, setNetworkStatusError] = useState<Error>()\n\n // Check network status every 10 seconds\n useEffect(() => {\n let checkNetwork = true\n void (async () => {\n if (isUndefined(network)) return\n while (checkNetwork) {\n try {\n const response = await network.status()\n setNetworkStatus(response)\n setNetworkStatusError(undefined)\n } catch (error) {\n console.error('Error fetching network status:', error)\n setNetworkStatus(undefined)\n setNetworkStatusError(error as Error)\n }\n await delay(STATUS_CHECK_INTERVAL)\n }\n })()\n\n return () => {\n // Cleanup function to stop checking network status at the current statusUrl\n checkNetwork = false\n }\n }, [network])\n\n return [networkStatus, networkStatusError] as const\n}\n"],"mappings":"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","names":["Avatar","React","createContextEx","ChainNetworkContext","ErrorRender","usePromise","MainNetwork","React","useCallback","useMemo","useState","ChainNetworkProvider","children","getActiveNetwork","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","MainNetwork","useMemo","updateActiveNetwork","useCallback","networkId","undefined","Error","value","provided","chainNetworkError","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","React","NetworkIcon","icon","style","props","React","span","dangerouslySetInnerHTML","__html","display","width","height","NetworkAvatar","icon","iconStyles","name","sx","props","React","Avatar","backgroundColor","alt","NetworkIcon","style","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","sx","py","NetworkAvatar","icon","width","height","ListItemText","Alert","AlertTitle","Button","React","useMemo","useState","Button","Dialog","DialogActions","DialogContent","DialogTitle","List","ListItem","Typography","React","NetworkStatusDialog","updates","props","React","Dialog","DialogTitle","DialogContent","List","map","start","end","update","ListItem","key","sx","flexDirection","alignItems","pl","Typography","gutterBottom","opacity","fontSize","Date","toLocaleString","br","DialogActions","Button","onClick","e","onClose","color","variant","NetworkStatusAlert","status","props","open","setOpen","useState","handleClose","severity","useMemo","state","React","Alert","AlertTitle","description","updates","length","Button","color","variant","size","onClick","NetworkStatusDialog","onClose","React","useCurrentBlock","useViewerFromWallet","isDefined","isDefinedNotNull","isUndefined","useHttpRpcViewer","useViewerFromWallet","useViewerInPage","networkOverride","networkBootstrap","activeNetwork","useChainNetwork","isDefined","httpRpcViewer","useHttpRpcViewer","url","walletRpcViewer","useViewerFromWallet","id","isUndefined","isDefinedNotNull","useActiveNetworkCurrentBlock","refresh","viewer","currentBlock","useCurrentBlock","useActiveNetworkCurrentBlockInPage","useViewerInPage","useActiveNetworkCurrentBlockInWallet","useViewerFromWallet","useNetwork","useActiveNetworkNetwork","activeNetwork","useChainNetwork","network","useNetwork","id","useHttpRpcRunner","useActiveNetworkRunner","activeNetwork","useChainNetwork","runner","useHttpRpcRunner","url","useHttpRpcViewer","useViewerInWallet","activeNetwork","useChainNetwork","walletViewer","useHttpRpcViewer","url","delay","isUndefined","useEffect","useState","STATUS_CHECK_INTERVAL","usePollNetworkStatus","network","useActiveNetworkNetwork","networkStatus","setNetworkStatus","useState","networkStatusError","setNetworkStatusError","useEffect","checkNetwork","isUndefined","response","status","undefined","error","console","delay","validNetworkStates","Set","NetworkStatus","children","props","networkStatus","usePollNetworkStatus","showStatus","has","state","React","NetworkStatusAlert","status"]}
1
+ {"version":3,"sources":["../../src/components/menu/Avatar.tsx","../../src/context/network/context.ts","../../src/context/network/Provider.tsx","../../src/context/network/use.ts","../../src/components/menu/Icon.tsx","../../src/components/menu/MenuItem.tsx","../../src/components/status/Alert.tsx","../../src/components/status/Dialog.tsx","../../src/components/status/NetworkStatus.tsx","../../src/hooks/provider/useActiveNetworkCurrentBlock.ts","../../src/hooks/provider/useViewerInPage.ts","../../src/hooks/provider/useActiveNetworkNetwork.ts","../../src/hooks/provider/useActiveNetworkRunner.ts","../../src/hooks/provider/useViewerInWallet.ts","../../src/hooks/status/usePollNetworkStatus.ts"],"sourcesContent":["import type { AvatarProps } from '@mui/material'\nimport { Avatar } from '@mui/material'\nimport type { CSSProperties } from 'react'\nimport React from 'react'\n\nimport { useChainNetwork } from '../../context/index.ts'\nimport { NetworkIcon } from './Icon.tsx'\n\nexport interface NetworkAvatarProps extends AvatarProps {\n icon?: string\n iconStyles?: CSSProperties\n name?: string\n}\n\nexport const NetworkAvatar: React.FC<NetworkAvatarProps> = ({\n icon, iconStyles, name, sx, ...props\n}) => {\n return (\n <Avatar\n sx={{ backgroundColor: 'white', ...sx }}\n alt={name}\n {...props}\n >\n <NetworkIcon\n icon={icon}\n style={{ ...iconStyles }}\n />\n </Avatar>\n )\n}\n\nexport const ActiveNetworkAvatar: React.FC<AvatarProps> = (props) => {\n const { activeNetwork } = useChainNetwork()\n\n return (\n <NetworkAvatar\n icon={activeNetwork?.icon}\n name={activeNetwork?.name}\n {...props}\n />\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { ChainNetworkState } from './state.ts'\n\nexport const ChainNetworkContext = createContextEx<ChainNetworkState>()\n","import { ErrorRender } from '@xylabs/react-error'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/sdk-js'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-network-model'\nimport { MainNetwork } from '@xyo-network/xl1-network-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainNetworkContext } from './context.ts'\nimport type { ChainNetworkState } from './state.ts'\n\nexport interface ChainNetworkProviderProps extends PropsWithChildren {\n getActiveNetwork?: () => Promise<NetworkBootstrap | undefined>\n networks?: NetworkBootstrap[]\n setActiveNetwork?: (networkId: NetworkBootstrap['id']) => Promise<NetworkBootstrap>\n}\n\nexport const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({\n children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal,\n}) => {\n const [activeNetwork, setActiveNetwork] = useState<NetworkBootstrap>()\n const [error, setError] = useState<Error>()\n\n // Set the active network upon initialization\n const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {\n // ensure networks are loaded\n if (!networks) return\n // get last saved active network\n const activeNetwork = await getActiveNetwork?.()\n // ensure the active network saved is found in the list of networks\n if (activeNetwork && networks?.find(network => network.id === activeNetwork.id)) {\n // Set the active network if it exists\n return activeNetwork\n } else {\n // Set the default network if no active network exists\n const defaultNetwork = networks.find(network => network.id === MainNetwork.id) ?? networks[0]\n await setActiveNetworkExternal?.(defaultNetwork.id)\n\n // Set the active network in the context\n return defaultNetwork\n }\n }, [networks])\n\n const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState(resolvedActiveNetwork)\n if (isDefined(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {\n setActiveNetwork(resolvedActiveNetwork)\n setPreviousResolvedActiveNetwork(resolvedActiveNetwork)\n }\n\n const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {\n setError(undefined)\n const network = networks?.find(network => network.id === networkId)\n if (!network) {\n setError(new Error(`Network with id ${networkId} not found`))\n return\n }\n // set internally\n setActiveNetwork(network)\n // set externally\n void setActiveNetworkExternal?.(networkId)\n }, [networks, setActiveNetworkExternal])\n\n const value: ChainNetworkState = useMemo(() => ({\n activeNetwork,\n networks,\n provided: true,\n updateActiveNetwork,\n chainNetworkError: error ?? activeNetworkError,\n }), [activeNetwork, activeNetworkError, error, networks, updateActiveNetwork])\n\n return (\n <ChainNetworkContext value={value}>\n <ErrorRender error={error ?? activeNetworkError} scope=\"ChainNetworkProvider\" />\n {children}\n </ChainNetworkContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { ChainNetworkContext } from './context.ts'\n\nexport const useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, 'ChainNetwork', required)\n","import type { DetailedHTMLProps, HtmlHTMLAttributes } from 'react'\nimport React from 'react'\n\nexport interface NetworkIconProps extends DetailedHTMLProps<HtmlHTMLAttributes<HTMLSpanElement>, HTMLSpanElement> {\n icon?: string\n}\n\nexport const NetworkIcon: React.FC<NetworkIconProps> = ({\n icon, style, ...props\n}) => {\n return (\n <span\n // eslint-disable-next-line react-dom/no-dangerously-set-innerhtml\n dangerouslySetInnerHTML={{ __html: icon ?? '' }} // Placeholder for SVG\\\n style={{\n display: 'inline-flex', width: 24, height: 24, ...style,\n }}\n {...props}\n />\n )\n}\n","import type { MenuItemProps } from '@mui/material'\nimport { ListItemText } from '@mui/material'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\nimport type { NetworkBootstrap } from '@xyo-network/xl1-network-model'\nimport type { NetworkId } from '@xyo-network/xl1-protocol'\nimport type { MouseEvent as ReactMouseEvent } from 'react'\nimport React from 'react'\n\nimport { NetworkAvatar } from './Avatar.tsx'\n\nexport interface NetworkMenuItemProps extends MenuItemProps {\n active?: boolean\n network?: NetworkBootstrap\n updateActiveNetwork?: (networkId: NetworkId) => void\n}\n\nexport const NetworkMenuItem: React.FC<NetworkMenuItemProps> = ({\n active, network, onClick, updateActiveNetwork, ...props\n}) => {\n const handleClick = (event: ReactMouseEvent<HTMLLIElement, MouseEvent>) => {\n if (network === undefined) throw new Error('Network is undefined')\n updateActiveNetwork?.(network.id)\n onClick?.(event)\n }\n\n return (\n <ActiveMenuItem\n title={network?.name}\n disableRipple\n onClick={handleClick}\n active={active}\n sx={{ py: 1 }}\n {...props}\n >\n <NetworkAvatar icon={network?.icon} name={network?.name} sx={{ width: 30, height: 30 }} />\n <ListItemText>{network?.name}</ListItemText>\n </ActiveMenuItem>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Button,\n} from '@mui/material'\nimport type { NetworkStatus } from '@xyo-network/xl1-protocol'\nimport React, { useMemo, useState } from 'react'\n\nimport { NetworkStatusDialog } from './Dialog.tsx'\n\nexport interface NetworkStatusAlertProps extends AlertProps {\n status?: NetworkStatus\n}\n\nexport const NetworkStatusAlert: React.FC<NetworkStatusAlertProps> = ({ status, ...props }) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n const severity = useMemo(() => {\n if (!status) return\n switch (status.state) {\n case 'online': {\n return 'success'\n }\n case 'offline': {\n return 'error'\n }\n case 'degraded': {\n return 'warning'\n }\n case 'unknown': {\n return 'error'\n }\n }\n }, [status])\n\n return (\n <Alert severity={severity} {...props}>\n <AlertTitle>{status?.description}</AlertTitle>\n {status?.updates && status.updates.length > 0\n ? (\n <>\n <Button color={severity} variant=\"outlined\" size=\"small\" onClick={() => setOpen(true)}>\n Updates\n </Button>\n <NetworkStatusDialog open={open} onClose={handleClose} updates={status.updates} />\n </>\n )\n : null}\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography,\n} from '@mui/material'\nimport type { NetworkStatusUpdate } from '@xyo-network/xl1-protocol'\nimport React from 'react'\n\nexport interface NetworkStatusDialogProps extends DialogProps {\n updates: NetworkStatusUpdate[]\n}\n\nexport const NetworkStatusDialog: React.FC<NetworkStatusDialogProps> = ({ updates, ...props }) => {\n return (\n <Dialog {...props}>\n <DialogTitle>Recent Status Updates</DialogTitle>\n <DialogContent>\n <List>\n {updates.map(({\n start, end, update,\n }) => (\n <ListItem\n key={start + update}\n sx={{\n flexDirection: 'column', alignItems: 'start', pl: 0,\n }}\n >\n <Typography>\n {update}\n </Typography>\n <Typography gutterBottom sx={{ opacity: 0.75, fontSize: '.8333rem' }}>\n Start:\n {' '}\n {new Date(start).toLocaleString()}\n {' '}\n <br />\n End:\n {' '}\n {new Date(end).toLocaleString()}\n </Typography>\n </ListItem>\n ))}\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={e => props.onClose?.(e, 'backdropClick')} color=\"primary\" variant=\"outlined\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import type { AlertProps } from '@mui/material'\nimport type { PropsWithChildren } from 'react'\nimport React from 'react'\n\nimport { usePollNetworkStatus } from '../../hooks/index.ts'\nimport { NetworkStatusAlert } from './Alert.tsx'\n\nconst validNetworkStates = new Set(['online', 'unknown'])\n\nexport interface NetworkStatusProps extends PropsWithChildren<AlertProps> {}\n\nexport const NetworkStatus: React.FC<NetworkStatusProps> = ({ children, ...props }) => {\n const [networkStatus] = usePollNetworkStatus()\n const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state)\n return (\n <>\n {showStatus ? <NetworkStatusAlert status={networkStatus} {...props} /> : null}\n {children}\n </>\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-sdk'\n\nimport { useViewerInPage } from './useViewerInPage.ts'\n\nexport const useActiveNetworkCurrentBlock = (refresh = 1, viewer?: XyoViewer) => {\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInPage = (refresh = 1) => {\n const viewer = useViewerInPage()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n\nexport const useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {\n const [viewer] = useViewerFromWallet()\n const currentBlock = useCurrentBlock(refresh, viewer)\n\n return currentBlock\n}\n","import {\n isDefined, isDefinedNotNull, isUndefined,\n} from '@xylabs/sdk-js'\nimport { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport { type NetworkBootstrap } from '@xyo-network/xl1-sdk'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer for the active network, first from the wallet or fallback to HTTP RPC\n * @returns - XyoViewer for the active network\n */\nexport const useViewerInPage = (networkOverride?: NetworkBootstrap) => {\n let networkBootstrap: NetworkBootstrap | undefined\n const { activeNetwork } = useChainNetwork()\n networkBootstrap = isDefined(networkOverride) ? networkOverride : activeNetwork\n\n const httpRpcViewer = useHttpRpcViewer(networkBootstrap?.url)\n const [walletRpcViewer] = useViewerFromWallet(networkBootstrap?.id)\n\n if (isUndefined(walletRpcViewer)) return\n return isDefinedNotNull(walletRpcViewer) ? walletRpcViewer : httpRpcViewer\n}\n","import { useNetwork } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkNetwork = () => {\n const { activeNetwork } = useChainNetwork()\n const network = useNetwork(activeNetwork?.id)\n return network\n}\n","import { useHttpRpcRunner } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\nexport const useActiveNetworkRunner = () => {\n const { activeNetwork } = useChainNetwork()\n const runner = useHttpRpcRunner(activeNetwork?.url)\n\n return runner\n}\n","import { useHttpRpcViewer } from '@xyo-network/react-chain-provider'\n\nimport { useChainNetwork } from '../../context/index.ts'\n\n/**\n * Get the viewer directly from the active network\n * @returns - The viewer for the active network\n */\nexport const useViewerInWallet = () => {\n const { activeNetwork } = useChainNetwork()\n const walletViewer = useHttpRpcViewer(activeNetwork?.url)\n return walletViewer\n}\n","import { delay, isUndefined } from '@xylabs/sdk-js'\nimport type { NetworkStatus } from '@xyo-network/xl1-sdk'\nimport { useEffect, useState } from 'react'\n\nimport { useActiveNetworkNetwork } from '../index.ts'\n\nconst STATUS_CHECK_INTERVAL = 10_000\n\nexport const usePollNetworkStatus = () => {\n const network = useActiveNetworkNetwork()\n const [networkStatus, setNetworkStatus] = useState<NetworkStatus>()\n const [networkStatusError, setNetworkStatusError] = useState<Error>()\n\n // Check network status every 10 seconds\n useEffect(() => {\n let checkNetwork = true\n void (async () => {\n if (isUndefined(network)) return\n while (checkNetwork) {\n try {\n const response = await network.status()\n setNetworkStatus(response)\n setNetworkStatusError(undefined)\n } catch (error) {\n console.error('Error fetching network status:', error)\n setNetworkStatus(undefined)\n setNetworkStatusError(error as Error)\n }\n await delay(STATUS_CHECK_INTERVAL)\n }\n })()\n\n return () => {\n // Cleanup function to stop checking network status at the current statusUrl\n checkNetwork = false\n }\n }, [network])\n\n return [networkStatus, networkStatusError] as const\n}\n"],"mappings":"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","names":["Avatar","React","createContextEx","ChainNetworkContext","ErrorRender","usePromise","isDefined","MainNetwork","React","useCallback","useMemo","useState","ChainNetworkProvider","children","getActiveNetwork","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","MainNetwork","previousResolvedActiveNetwork","setPreviousResolvedActiveNetwork","isDefined","updateActiveNetwork","useCallback","networkId","undefined","Error","value","useMemo","provided","chainNetworkError","ChainNetworkContext","ErrorRender","scope","useContextEx","useChainNetwork","required","useContextEx","ChainNetworkContext","React","NetworkIcon","icon","style","props","React","span","dangerouslySetInnerHTML","__html","display","width","height","NetworkAvatar","icon","iconStyles","name","sx","props","React","Avatar","backgroundColor","alt","NetworkIcon","style","ActiveNetworkAvatar","activeNetwork","useChainNetwork","ListItemText","ActiveMenuItem","React","NetworkMenuItem","active","network","onClick","updateActiveNetwork","props","handleClick","event","undefined","Error","id","React","ActiveMenuItem","title","name","disableRipple","sx","py","NetworkAvatar","icon","width","height","ListItemText","Alert","AlertTitle","Button","React","useMemo","useState","Button","Dialog","DialogActions","DialogContent","DialogTitle","List","ListItem","Typography","React","NetworkStatusDialog","updates","props","React","Dialog","DialogTitle","DialogContent","List","map","start","end","update","ListItem","key","sx","flexDirection","alignItems","pl","Typography","gutterBottom","opacity","fontSize","Date","toLocaleString","br","DialogActions","Button","onClick","e","onClose","color","variant","NetworkStatusAlert","status","props","open","setOpen","useState","handleClose","severity","useMemo","state","React","Alert","AlertTitle","description","updates","length","Button","color","variant","size","onClick","NetworkStatusDialog","onClose","React","useCurrentBlock","useViewerFromWallet","isDefined","isDefinedNotNull","isUndefined","useHttpRpcViewer","useViewerFromWallet","useViewerInPage","networkOverride","networkBootstrap","activeNetwork","useChainNetwork","isDefined","httpRpcViewer","useHttpRpcViewer","url","walletRpcViewer","useViewerFromWallet","id","isUndefined","isDefinedNotNull","useActiveNetworkCurrentBlock","refresh","viewer","currentBlock","useCurrentBlock","useActiveNetworkCurrentBlockInPage","useViewerInPage","useActiveNetworkCurrentBlockInWallet","useViewerFromWallet","useNetwork","useActiveNetworkNetwork","activeNetwork","useChainNetwork","network","useNetwork","id","useHttpRpcRunner","useActiveNetworkRunner","activeNetwork","useChainNetwork","runner","useHttpRpcRunner","url","useHttpRpcViewer","useViewerInWallet","activeNetwork","useChainNetwork","walletViewer","useHttpRpcViewer","url","delay","isUndefined","useEffect","useState","STATUS_CHECK_INTERVAL","usePollNetworkStatus","network","useActiveNetworkNetwork","networkStatus","setNetworkStatus","useState","networkStatusError","setNetworkStatusError","useEffect","checkNetwork","isUndefined","response","status","undefined","error","console","delay","validNetworkStates","Set","NetworkStatus","children","props","networkStatus","usePollNetworkStatus","showStatus","has","state","React","NetworkStatusAlert","status"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/react-chain-network",
4
- "version": "1.18.0",
4
+ "version": "1.18.1",
5
5
  "description": "XYO Layer One React SDK",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -51,30 +51,30 @@
51
51
  "@xylabs/react-error": "~7.1.9",
52
52
  "@xylabs/react-promise": "~7.1.9",
53
53
  "@xylabs/react-shared": "~7.1.9",
54
- "@xylabs/sdk-js": "~5.0.51",
55
- "@xyo-network/react-chain-provider": "~1.18.0",
56
- "@xyo-network/react-chain-shared": "~1.18.0",
57
- "@xyo-network/xl1-network-model": "~1.18.0",
58
- "@xyo-network/xl1-protocol": "~1.14.17",
59
- "@xyo-network/xl1-protocol-sdk": "~1.18.0"
54
+ "@xylabs/sdk-js": "~5.0.61",
55
+ "@xyo-network/react-chain-provider": "~1.18.1",
56
+ "@xyo-network/react-chain-shared": "~1.18.1",
57
+ "@xyo-network/xl1-network-model": "~1.18.14",
58
+ "@xyo-network/xl1-sdk": "~1.18.2"
60
59
  },
61
60
  "devDependencies": {
62
61
  "@emotion/react": "~11.14.0",
63
62
  "@emotion/styled": "~11.14.1",
64
- "@mui/icons-material": "~7.3.6",
65
- "@mui/material": "~7.3.6",
66
- "@storybook/react-vite": "~10.1.9",
67
- "@types/react": "~19.2.7",
63
+ "@mui/icons-material": "~7.3.7",
64
+ "@mui/material": "~7.3.7",
65
+ "@storybook/react-vite": "~10.1.11",
66
+ "@types/react": "~19.2.8",
68
67
  "@xylabs/react-button": "~7.1.9",
69
68
  "@xylabs/ts-scripts-yarn3": "~7.2.32",
70
69
  "@xylabs/tsconfig": "~7.2.32",
71
70
  "@xylabs/tsconfig-dom": "~7.2.32",
72
71
  "@xylabs/tsconfig-react": "~7.2.32",
73
- "@xyo-network/react-chain-model": "~1.18.0",
72
+ "@xyo-network/react-chain-model": "~1.18.1",
73
+ "@xyo-network/xl1-protocol": "~1.18.14",
74
74
  "eslint": "^9.39.2",
75
75
  "react": "~19.2.3",
76
76
  "react-dom": "~19.2.3",
77
- "react-router-dom": "^7.10.1",
77
+ "react-router-dom": "^7.12.0",
78
78
  "typescript": "~5.9.3"
79
79
  },
80
80
  "peerDependencies": {
@@ -95,4 +95,4 @@
95
95
  "access": "public"
96
96
  },
97
97
  "docs": "dist/docs.json"
98
- }
98
+ }
@@ -1,5 +1,6 @@
1
1
  import { ErrorRender } from '@xylabs/react-error'
2
2
  import { usePromise } from '@xylabs/react-promise'
3
+ import { isDefined } from '@xylabs/sdk-js'
3
4
  import type { NetworkBootstrap } from '@xyo-network/xl1-network-model'
4
5
  import { MainNetwork } from '@xyo-network/xl1-network-model'
5
6
  import type { PropsWithChildren } from 'react'
@@ -42,11 +43,11 @@ export const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({
42
43
  }
43
44
  }, [networks])
44
45
 
45
- useMemo(() => {
46
- if (resolvedActiveNetwork) {
47
- setActiveNetwork(resolvedActiveNetwork)
48
- }
49
- }, [resolvedActiveNetwork])
46
+ const [previousResolvedActiveNetwork, setPreviousResolvedActiveNetwork] = useState(resolvedActiveNetwork)
47
+ if (isDefined(resolvedActiveNetwork) && resolvedActiveNetwork !== previousResolvedActiveNetwork) {
48
+ setActiveNetwork(resolvedActiveNetwork)
49
+ setPreviousResolvedActiveNetwork(resolvedActiveNetwork)
50
+ }
50
51
 
51
52
  const updateActiveNetwork = useCallback((networkId: NetworkBootstrap['id']) => {
52
53
  setError(undefined)
@@ -59,7 +60,7 @@ export const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({
59
60
  setActiveNetwork(network)
60
61
  // set externally
61
62
  void setActiveNetworkExternal?.(networkId)
62
- }, [networks])
63
+ }, [networks, setActiveNetworkExternal])
63
64
 
64
65
  const value: ChainNetworkState = useMemo(() => ({
65
66
  activeNetwork,
@@ -67,7 +68,7 @@ export const ChainNetworkProvider: React.FC<ChainNetworkProviderProps> = ({
67
68
  provided: true,
68
69
  updateActiveNetwork,
69
70
  chainNetworkError: error ?? activeNetworkError,
70
- }), [activeNetwork, networks, updateActiveNetwork])
71
+ }), [activeNetwork, activeNetworkError, error, networks, updateActiveNetwork])
71
72
 
72
73
  return (
73
74
  <ChainNetworkContext value={value}>
@@ -1,5 +1,5 @@
1
1
  import type { ContextExState } from '@xylabs/react-shared'
2
- import type { NetworkBootstrap } from '@xyo-network/xl1-network-model'
2
+ import type { NetworkBootstrap } from '@xyo-network/xl1-sdk'
3
3
 
4
4
  export type ChainNetworkState = ContextExState<{
5
5
  activeNetwork?: NetworkBootstrap
@@ -1,11 +1,13 @@
1
1
  import { Alert, Stack } from '@mui/material'
2
2
  import type { StoryFn } from '@storybook/react-vite'
3
3
  import { ButtonEx } from '@xylabs/react-button'
4
- import { isDefined, isDefinedNotNull } from '@xylabs/sdk-js'
4
+ import {
5
+ isDefined, isDefinedNotNull, isUndefined,
6
+ } from '@xylabs/sdk-js'
5
7
  import { isXyoGlobal } from '@xyo-network/react-chain-model'
6
8
  import { LocalNetwork } from '@xyo-network/xl1-network-model'
7
9
  import type { HydratedBlock } from '@xyo-network/xl1-protocol'
8
- import React, { useEffect, useState } from 'react'
10
+ import React, { useCallback, useState } from 'react'
9
11
 
10
12
  import { ChainNetworkProvider } from '../../context/index.ts'
11
13
  import { useViewerInPage } from './useViewerInPage.ts'
@@ -27,13 +29,7 @@ const UseViewerInPageStoryTemplateInner: React.FC = () => {
27
29
  const [result, setResult] = useState<HydratedBlock | null | undefined>()
28
30
  const [loading, setLoading] = useState(false)
29
31
 
30
- useEffect(() => {
31
- if (isDefined(viewer)) {
32
- void handleClick()
33
- }
34
- }, [viewer])
35
-
36
- const handleClick = async () => {
32
+ const handleClick = useCallback(async () => {
37
33
  if (isDefinedNotNull(viewer)) {
38
34
  try {
39
35
  setLoading(true)
@@ -47,6 +43,10 @@ const UseViewerInPageStoryTemplateInner: React.FC = () => {
47
43
  setLoading(false)
48
44
  }
49
45
  }
46
+ }, [viewer])
47
+
48
+ if (isDefined(viewer) && isUndefined(result) && !loading) {
49
+ void handleClick()
50
50
  }
51
51
 
52
52
  return (
@@ -1,5 +1,5 @@
1
1
  import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'
2
- import type { XyoViewer } from '@xyo-network/xl1-protocol-sdk'
2
+ import type { XyoViewer } from '@xyo-network/xl1-sdk'
3
3
 
4
4
  import { useViewerInPage } from './useViewerInPage.ts'
5
5
 
@@ -2,7 +2,7 @@ import {
2
2
  isDefined, isDefinedNotNull, isUndefined,
3
3
  } from '@xylabs/sdk-js'
4
4
  import { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'
5
- import { type NetworkBootstrap } from '@xyo-network/xl1-network-model'
5
+ import { type NetworkBootstrap } from '@xyo-network/xl1-sdk'
6
6
 
7
7
  import { useChainNetwork } from '../../context/index.ts'
8
8
 
@@ -1,5 +1,5 @@
1
1
  import { delay, isUndefined } from '@xylabs/sdk-js'
2
- import type { NetworkStatus } from '@xyo-network/xl1-protocol'
2
+ import type { NetworkStatus } from '@xyo-network/xl1-sdk'
3
3
  import { useEffect, useState } from 'react'
4
4
 
5
5
  import { useActiveNetworkNetwork } from '../index.ts'