@xyo-network/react-chain-network 1.12.0 → 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,9 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/components/menu/Avatar.tsx
2
5
  import { Avatar } from "@mui/material";
6
+ import React3 from "react";
3
7
 
4
8
  // src/context/network/context.ts
5
9
  import { createContextEx } from "@xylabs/react-shared";
@@ -9,18 +13,8 @@ var ChainNetworkContext = createContextEx();
9
13
  import { ErrorRender } from "@xylabs/react-error";
10
14
  import { usePromise } from "@xylabs/react-promise";
11
15
  import { SequenceNetwork } from "@xyo-network/chain-network-model";
12
- import {
13
- useCallback,
14
- useMemo,
15
- useState
16
- } from "react";
17
- import { jsx, jsxs } from "react/jsx-runtime";
18
- var ChainNetworkProvider = ({
19
- children,
20
- getActiveNetwork,
21
- networks,
22
- setActiveNetwork: setActiveNetworkExternal
23
- }) => {
16
+ import React, { useCallback, useMemo, useState } from "react";
17
+ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal }) => {
24
18
  const [activeNetwork, setActiveNetwork] = useState();
25
19
  const [error, setError] = useState();
26
20
  const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {
@@ -33,12 +27,16 @@ var ChainNetworkProvider = ({
33
27
  await setActiveNetworkExternal?.(defaultNetwork.id);
34
28
  return defaultNetwork;
35
29
  }
36
- }, [networks]);
30
+ }, [
31
+ networks
32
+ ]);
37
33
  useMemo(() => {
38
34
  if (resolvedActiveNetwork) {
39
35
  setActiveNetwork(resolvedActiveNetwork);
40
36
  }
41
- }, [resolvedActiveNetwork]);
37
+ }, [
38
+ resolvedActiveNetwork
39
+ ]);
42
40
  const updateActiveNetwork = useCallback((networkId) => {
43
41
  setError(void 0);
44
42
  const network = networks?.find((network2) => network2.id === networkId);
@@ -48,176 +46,136 @@ var ChainNetworkProvider = ({
48
46
  }
49
47
  setActiveNetwork(network);
50
48
  void setActiveNetworkExternal?.(networkId);
51
- }, [networks]);
49
+ }, [
50
+ networks
51
+ ]);
52
52
  const value = useMemo(() => ({
53
53
  activeNetwork,
54
54
  networks,
55
55
  provided: true,
56
56
  updateActiveNetwork,
57
57
  chainNetworkError: error ?? activeNetworkError
58
- }), [activeNetwork, networks, updateActiveNetwork]);
59
- return /* @__PURE__ */ jsxs(ChainNetworkContext, { value, children: [
60
- /* @__PURE__ */ jsx(ErrorRender, { error: error ?? activeNetworkError, scope: "ChainNetworkProvider" }),
61
- children
62
- ] });
63
- };
58
+ }), [
59
+ activeNetwork,
60
+ networks,
61
+ updateActiveNetwork
62
+ ]);
63
+ return /* @__PURE__ */ React.createElement(ChainNetworkContext, {
64
+ value
65
+ }, /* @__PURE__ */ React.createElement(ErrorRender, {
66
+ error: error ?? activeNetworkError,
67
+ scope: "ChainNetworkProvider"
68
+ }), children);
69
+ }, "ChainNetworkProvider");
64
70
 
65
71
  // src/context/network/use.ts
66
72
  import { useContextEx } from "@xylabs/react-shared";
67
- var useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required);
73
+ var useChainNetwork = /* @__PURE__ */ __name((required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required), "useChainNetwork");
68
74
 
69
75
  // src/components/menu/Icon.tsx
70
- import { jsx as jsx2 } from "react/jsx-runtime";
71
- var NetworkIcon = ({
72
- icon,
73
- style,
74
- ...props
75
- }) => {
76
- return /* @__PURE__ */ jsx2(
77
- "span",
78
- {
79
- dangerouslySetInnerHTML: { __html: icon ?? "" },
80
- style: {
81
- display: "inline-flex",
82
- width: 24,
83
- height: 24,
84
- ...style
85
- },
86
- ...props
87
- }
88
- );
89
- };
76
+ import React2 from "react";
77
+ var NetworkIcon = /* @__PURE__ */ __name(({ icon, style, ...props }) => {
78
+ return /* @__PURE__ */ React2.createElement("span", {
79
+ // eslint-disable-next-line @eslint-react/dom/no-dangerously-set-innerhtml
80
+ dangerouslySetInnerHTML: {
81
+ __html: icon ?? ""
82
+ },
83
+ style: {
84
+ display: "inline-flex",
85
+ width: 24,
86
+ height: 24,
87
+ ...style
88
+ },
89
+ ...props
90
+ });
91
+ }, "NetworkIcon");
90
92
 
91
93
  // src/components/menu/Avatar.tsx
92
- import { jsx as jsx3 } from "react/jsx-runtime";
93
- var NetworkAvatar = ({
94
- icon,
95
- iconStyles,
96
- name,
97
- sx,
98
- ...props
99
- }) => {
100
- return /* @__PURE__ */ jsx3(
101
- Avatar,
102
- {
103
- sx: { backgroundColor: "white", ...sx },
104
- alt: name,
105
- ...props,
106
- children: /* @__PURE__ */ jsx3(
107
- NetworkIcon,
108
- {
109
- icon,
110
- style: { ...iconStyles }
111
- }
112
- )
94
+ var NetworkAvatar = /* @__PURE__ */ __name(({ icon, iconStyles, name, sx, ...props }) => {
95
+ return /* @__PURE__ */ React3.createElement(Avatar, {
96
+ sx: {
97
+ backgroundColor: "white",
98
+ ...sx
99
+ },
100
+ alt: name,
101
+ ...props
102
+ }, /* @__PURE__ */ React3.createElement(NetworkIcon, {
103
+ icon,
104
+ style: {
105
+ ...iconStyles
113
106
  }
114
- );
115
- };
116
- var ActiveNetworkAvatar = (props) => {
107
+ }));
108
+ }, "NetworkAvatar");
109
+ var ActiveNetworkAvatar = /* @__PURE__ */ __name((props) => {
117
110
  const { activeNetwork } = useChainNetwork();
118
- return /* @__PURE__ */ jsx3(
119
- NetworkAvatar,
120
- {
121
- icon: activeNetwork?.icon,
122
- name: activeNetwork?.name,
123
- ...props
124
- }
125
- );
126
- };
111
+ return /* @__PURE__ */ React3.createElement(NetworkAvatar, {
112
+ icon: activeNetwork?.icon,
113
+ name: activeNetwork?.name,
114
+ ...props
115
+ });
116
+ }, "ActiveNetworkAvatar");
127
117
 
128
118
  // src/components/menu/MenuItem.tsx
129
119
  import { ListItemText } from "@mui/material";
130
120
  import { ActiveMenuItem } from "@xyo-network/react-chain-shared";
131
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
132
- var NetworkMenuItem = ({
133
- active,
134
- network,
135
- onClick,
136
- updateActiveNetwork,
137
- ...props
138
- }) => {
139
- const handleClick = (event) => {
121
+ import React4 from "react";
122
+ var NetworkMenuItem = /* @__PURE__ */ __name(({ active, network, onClick, updateActiveNetwork, ...props }) => {
123
+ const handleClick = /* @__PURE__ */ __name((event) => {
140
124
  if (network === void 0) throw new Error("Network is undefined");
141
125
  updateActiveNetwork?.(network.id);
142
126
  onClick?.(event);
143
- };
144
- return /* @__PURE__ */ jsxs2(
145
- ActiveMenuItem,
146
- {
147
- title: network?.name,
148
- disableRipple: true,
149
- onClick: handleClick,
150
- active,
151
- sx: { py: 1 },
152
- ...props,
153
- children: [
154
- /* @__PURE__ */ jsx4(NetworkAvatar, { icon: network?.icon, name: network?.name, sx: { width: 30, height: 30 } }),
155
- /* @__PURE__ */ jsx4(ListItemText, { children: network?.name })
156
- ]
127
+ }, "handleClick");
128
+ return /* @__PURE__ */ React4.createElement(ActiveMenuItem, {
129
+ title: network?.name,
130
+ disableRipple: true,
131
+ onClick: handleClick,
132
+ active,
133
+ sx: {
134
+ py: 1
135
+ },
136
+ ...props
137
+ }, /* @__PURE__ */ React4.createElement(NetworkAvatar, {
138
+ icon: network?.icon,
139
+ name: network?.name,
140
+ sx: {
141
+ width: 30,
142
+ height: 30
157
143
  }
158
- );
159
- };
144
+ }), /* @__PURE__ */ React4.createElement(ListItemText, null, network?.name));
145
+ }, "NetworkMenuItem");
160
146
 
161
147
  // src/components/status/Alert.tsx
162
- import {
163
- Alert,
164
- AlertTitle,
165
- Button as Button2
166
- } from "@mui/material";
167
- import { useMemo as useMemo2, useState as useState2 } from "react";
148
+ import { Alert, AlertTitle, Button as Button2 } from "@mui/material";
149
+ import React6, { useMemo as useMemo2, useState as useState2 } from "react";
168
150
 
169
151
  // src/components/status/Dialog.tsx
170
- import {
171
- Button,
172
- Dialog,
173
- DialogActions,
174
- DialogContent,
175
- DialogTitle,
176
- List,
177
- ListItem,
178
- Typography
179
- } from "@mui/material";
180
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
181
- var NetworkStatusDialog = ({ updates, ...props }) => {
182
- return /* @__PURE__ */ jsxs3(Dialog, { ...props, children: [
183
- /* @__PURE__ */ jsx5(DialogTitle, { children: "Recent Status Updates" }),
184
- /* @__PURE__ */ jsx5(DialogContent, { children: /* @__PURE__ */ jsx5(List, { children: updates.map(({
185
- start,
186
- end,
187
- update
188
- }) => /* @__PURE__ */ jsxs3(
189
- ListItem,
190
- {
191
- sx: {
192
- flexDirection: "column",
193
- alignItems: "start",
194
- pl: 0
195
- },
196
- children: [
197
- /* @__PURE__ */ jsx5(Typography, { children: update }),
198
- /* @__PURE__ */ jsxs3(Typography, { gutterBottom: true, sx: { opacity: 0.75, fontSize: ".8333rem" }, children: [
199
- "Start:",
200
- " ",
201
- new Date(start).toLocaleString(),
202
- " ",
203
- /* @__PURE__ */ jsx5("br", {}),
204
- "End:",
205
- " ",
206
- new Date(end).toLocaleString()
207
- ] })
208
- ]
209
- },
210
- start + update
211
- )) }) }),
212
- /* @__PURE__ */ jsx5(DialogActions, { children: /* @__PURE__ */ jsx5(Button, { onClick: (e) => props.onClose?.(e, "backdropClick"), color: "primary", variant: "outlined", children: "Close" }) })
213
- ] });
214
- };
152
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle, List, ListItem, Typography } from "@mui/material";
153
+ import React5 from "react";
154
+ var NetworkStatusDialog = /* @__PURE__ */ __name(({ updates, ...props }) => {
155
+ return /* @__PURE__ */ React5.createElement(Dialog, props, /* @__PURE__ */ React5.createElement(DialogTitle, null, "Recent Status Updates"), /* @__PURE__ */ React5.createElement(DialogContent, null, /* @__PURE__ */ React5.createElement(List, null, updates.map(({ start, end, update }) => /* @__PURE__ */ React5.createElement(ListItem, {
156
+ key: start + update,
157
+ sx: {
158
+ flexDirection: "column",
159
+ alignItems: "start",
160
+ pl: 0
161
+ }
162
+ }, /* @__PURE__ */ React5.createElement(Typography, null, update), /* @__PURE__ */ React5.createElement(Typography, {
163
+ gutterBottom: true,
164
+ sx: {
165
+ opacity: 0.75,
166
+ fontSize: ".8333rem"
167
+ }
168
+ }, "Start:", " ", new Date(start).toLocaleString(), " ", /* @__PURE__ */ React5.createElement("br", null), "End:", " ", new Date(end).toLocaleString()))))), /* @__PURE__ */ React5.createElement(DialogActions, null, /* @__PURE__ */ React5.createElement(Button, {
169
+ onClick: /* @__PURE__ */ __name((e) => props.onClose?.(e, "backdropClick"), "onClick"),
170
+ color: "primary",
171
+ variant: "outlined"
172
+ }, "Close")));
173
+ }, "NetworkStatusDialog");
215
174
 
216
175
  // src/components/status/Alert.tsx
217
- import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
218
- var NetworkStatusAlert = ({ status, ...props }) => {
176
+ var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
219
177
  const [open, setOpen] = useState2(false);
220
- const handleClose = () => setOpen(false);
178
+ const handleClose = /* @__PURE__ */ __name(() => setOpen(false), "handleClose");
221
179
  const severity = useMemo2(() => {
222
180
  if (!status) return;
223
181
  switch (status.state) {
@@ -234,74 +192,85 @@ var NetworkStatusAlert = ({ status, ...props }) => {
234
192
  return "error";
235
193
  }
236
194
  }
237
- }, [status]);
238
- return /* @__PURE__ */ jsxs4(Alert, { severity, ...props, children: [
239
- /* @__PURE__ */ jsx6(AlertTitle, { children: status?.description }),
240
- status?.updates && status.updates.length > 0 && /* @__PURE__ */ jsxs4(Fragment, { children: [
241
- /* @__PURE__ */ jsx6(Button2, { color: severity, variant: "outlined", size: "small", onClick: () => setOpen(true), children: "Updates" }),
242
- /* @__PURE__ */ jsx6(NetworkStatusDialog, { open, onClose: handleClose, updates: status.updates })
243
- ] })
244
- ] });
245
- };
195
+ }, [
196
+ status
197
+ ]);
198
+ return /* @__PURE__ */ React6.createElement(Alert, {
199
+ severity,
200
+ ...props
201
+ }, /* @__PURE__ */ React6.createElement(AlertTitle, null, status?.description), status?.updates && status.updates.length > 0 && /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(Button2, {
202
+ color: severity,
203
+ variant: "outlined",
204
+ size: "small",
205
+ onClick: /* @__PURE__ */ __name(() => setOpen(true), "onClick")
206
+ }, "Updates"), /* @__PURE__ */ React6.createElement(NetworkStatusDialog, {
207
+ open,
208
+ onClose: handleClose,
209
+ updates: status.updates
210
+ })));
211
+ }, "NetworkStatusAlert");
212
+
213
+ // src/components/status/NetworkStatus.tsx
214
+ import React7 from "react";
246
215
 
247
216
  // src/hooks/provider/useActiveNetworkCurrentBlock.ts
248
217
  import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
249
218
 
250
219
  // src/hooks/provider/useViewerInPage.ts
251
220
  import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
252
- var useViewerInPage = () => {
221
+ var useViewerInPage = /* @__PURE__ */ __name(() => {
253
222
  const { activeNetwork } = useChainNetwork();
254
223
  const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url);
255
224
  const walletRpcViewer = useViewerFromWallet(activeNetwork?.id);
256
225
  return walletRpcViewer ?? httpRpcViewer;
257
- };
226
+ }, "useViewerInPage");
258
227
 
259
228
  // src/hooks/provider/useActiveNetworkCurrentBlock.ts
260
- var useActiveNetworkCurrentBlock = (refresh = 1, viewer) => {
229
+ var useActiveNetworkCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
261
230
  const currentBlock = useCurrentBlock(refresh, viewer);
262
231
  return currentBlock;
263
- };
264
- var useActiveNetworkCurrentBlockInPage = (refresh = 1) => {
232
+ }, "useActiveNetworkCurrentBlock");
233
+ var useActiveNetworkCurrentBlockInPage = /* @__PURE__ */ __name((refresh = 1) => {
265
234
  const viewer = useViewerInPage();
266
235
  const currentBlock = useCurrentBlock(refresh, viewer);
267
236
  return currentBlock;
268
- };
269
- var useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {
237
+ }, "useActiveNetworkCurrentBlockInPage");
238
+ var useActiveNetworkCurrentBlockInWallet = /* @__PURE__ */ __name((refresh = 1) => {
270
239
  const viewer = useViewerFromWallet2();
271
240
  const currentBlock = useCurrentBlock(refresh, viewer);
272
241
  return currentBlock;
273
- };
242
+ }, "useActiveNetworkCurrentBlockInWallet");
274
243
 
275
244
  // src/hooks/provider/useActiveNetworkNetwork.ts
276
245
  import { useNetwork } from "@xyo-network/react-chain-provider";
277
- var useActiveNetworkNetwork = () => {
246
+ var useActiveNetworkNetwork = /* @__PURE__ */ __name(() => {
278
247
  const { activeNetwork } = useChainNetwork();
279
248
  const network = useNetwork(activeNetwork?.id);
280
249
  return network;
281
- };
250
+ }, "useActiveNetworkNetwork");
282
251
 
283
252
  // src/hooks/provider/useActiveNetworkRunner.ts
284
253
  import { useHttpRpcRunner } from "@xyo-network/react-chain-provider";
285
- var useActiveNetworkRunner = () => {
254
+ var useActiveNetworkRunner = /* @__PURE__ */ __name(() => {
286
255
  const { activeNetwork } = useChainNetwork();
287
256
  const runner = useHttpRpcRunner(activeNetwork?.url);
288
257
  return runner;
289
- };
258
+ }, "useActiveNetworkRunner");
290
259
 
291
260
  // src/hooks/provider/useViewerInWallet.ts
292
261
  import { useHttpRpcViewer as useHttpRpcViewer2 } from "@xyo-network/react-chain-provider";
293
- var useViewerInWallet = () => {
262
+ var useViewerInWallet = /* @__PURE__ */ __name(() => {
294
263
  const { activeNetwork } = useChainNetwork();
295
264
  const walletViewer = useHttpRpcViewer2(activeNetwork?.url);
296
265
  return walletViewer;
297
- };
266
+ }, "useViewerInWallet");
298
267
 
299
268
  // src/hooks/status/usePollNetworkStatus.ts
300
269
  import { delay } from "@xylabs/delay";
301
270
  import { isUndefined } from "@xylabs/typeof";
302
271
  import { useEffect, useState as useState3 } from "react";
303
272
  var STATUS_CHECK_INTERVAL = 1e4;
304
- var usePollNetworkStatus = () => {
273
+ var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
305
274
  const network = useActiveNetworkNetwork();
306
275
  const [networkStatus, setNetworkStatus] = useState3();
307
276
  const [networkStatusError, setNetworkStatusError] = useState3();
@@ -325,21 +294,28 @@ var usePollNetworkStatus = () => {
325
294
  return () => {
326
295
  checkNetwork = false;
327
296
  };
328
- }, [network]);
329
- return [networkStatus, networkStatusError];
330
- };
297
+ }, [
298
+ network
299
+ ]);
300
+ return [
301
+ networkStatus,
302
+ networkStatusError
303
+ ];
304
+ }, "usePollNetworkStatus");
331
305
 
332
306
  // src/components/status/NetworkStatus.tsx
333
- import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
334
- var validNetworkStates = /* @__PURE__ */ new Set(["online", "unknown"]);
335
- var NetworkStatus = ({ children, ...props }) => {
307
+ var validNetworkStates = /* @__PURE__ */ new Set([
308
+ "online",
309
+ "unknown"
310
+ ]);
311
+ var NetworkStatus = /* @__PURE__ */ __name(({ children, ...props }) => {
336
312
  const [networkStatus] = usePollNetworkStatus();
337
313
  const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state);
338
- return /* @__PURE__ */ jsxs5(Fragment2, { children: [
339
- showStatus && /* @__PURE__ */ jsx7(NetworkStatusAlert, { status: networkStatus, ...props }),
340
- children
341
- ] });
342
- };
314
+ return /* @__PURE__ */ React7.createElement(React7.Fragment, null, showStatus && /* @__PURE__ */ React7.createElement(NetworkStatusAlert, {
315
+ status: networkStatus,
316
+ ...props
317
+ }), children);
318
+ }, "NetworkStatus");
343
319
  export {
344
320
  ActiveNetworkAvatar,
345
321
  ChainNetworkContext,
@@ -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/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","../../src/components/status/NetworkStatus.tsx"],"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/chain-network-model'\nimport { SequenceNetwork } from '@xyo-network/chain-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 === SequenceNetwork.id) ?? networks[1]\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 @eslint-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 type { NetworkBootstrap } from '@xyo-network/chain-network-model'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\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 <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 </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 { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\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 { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\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 = () => {\n const { activeNetwork } = useChainNetwork()\n const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url)\n const walletRpcViewer = useViewerFromWallet(activeNetwork?.id)\n return 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 } from '@xylabs/delay'\nimport { isUndefined } from '@xylabs/typeof'\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","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} />}\n {children}\n </>\n )\n}\n"],"mappings":"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","names":["activeNetwork","network","jsx","jsx","jsx","jsxs","Button","useMemo","useState","jsx","jsxs","jsx","jsxs","useState","useMemo","Button","useViewerFromWallet","useViewerFromWallet","useHttpRpcViewer","useHttpRpcViewer","useState","useState","Fragment","jsx","jsxs"]}
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/chain-network-model'\nimport { SequenceNetwork } from '@xyo-network/chain-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 === SequenceNetwork.id) ?? networks[1]\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 @eslint-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 type { NetworkBootstrap } from '@xyo-network/chain-network-model'\nimport { ActiveMenuItem } from '@xyo-network/react-chain-shared'\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 <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 </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} />}\n {children}\n </>\n )\n}\n","import { useCurrentBlock, useViewerFromWallet } from '@xyo-network/react-chain-provider'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\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 { useHttpRpcViewer, useViewerFromWallet } from '@xyo-network/react-chain-provider'\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 = () => {\n const { activeNetwork } = useChainNetwork()\n const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url)\n const walletRpcViewer = useViewerFromWallet(activeNetwork?.id)\n return 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 } from '@xylabs/delay'\nimport { isUndefined } from '@xylabs/typeof'\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","SequenceNetwork","React","useCallback","useMemo","useState","ChainNetworkProvider","children","getActiveNetwork","networks","setActiveNetwork","setActiveNetworkExternal","activeNetwork","useState","error","setError","resolvedActiveNetwork","activeNetworkError","usePromise","find","network","id","defaultNetwork","SequenceNetwork","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","useHttpRpcViewer","useViewerFromWallet","useViewerInPage","activeNetwork","useChainNetwork","httpRpcViewer","useHttpRpcViewer","url","walletRpcViewer","useViewerFromWallet","id","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.12.0",
4
+ "version": "1.12.2",
5
5
  "description": "XYO Layer One React SDK",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -45,15 +45,15 @@
45
45
  "start": "storybook dev -p 6006"
46
46
  },
47
47
  "dependencies": {
48
- "@xylabs/delay": "~5.0.7",
49
- "@xylabs/react-error": "~7.0.0",
50
- "@xylabs/react-promise": "~7.0.0",
51
- "@xylabs/react-shared": "~7.0.0",
52
- "@xylabs/typeof": "~5.0.7",
53
- "@xyo-network/chain-network-model": "~1.12.0",
54
- "@xyo-network/react-chain-provider": "~1.12.0",
55
- "@xyo-network/react-chain-shared": "~1.12.0",
56
- "@xyo-network/xl1-protocol": "~1.10.12"
48
+ "@xylabs/delay": "~5.0.10",
49
+ "@xylabs/react-error": "~7.0.4",
50
+ "@xylabs/react-promise": "~7.0.4",
51
+ "@xylabs/react-shared": "~7.0.4",
52
+ "@xylabs/typeof": "~5.0.10",
53
+ "@xyo-network/chain-network-model": "~1.12.2",
54
+ "@xyo-network/react-chain-provider": "~1.12.2",
55
+ "@xyo-network/react-chain-shared": "~1.12.2",
56
+ "@xyo-network/xl1-protocol": "~1.10.15"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@emotion/react": "~11.14.0",
@@ -62,13 +62,13 @@
62
62
  "@mui/material": "~7.3.1",
63
63
  "@storybook/react-vite": "~9.1.2",
64
64
  "@types/react": "~19.1.10",
65
- "@xylabs/ts-scripts-yarn3": "~7.1.0",
66
- "@xylabs/tsconfig": "~7.1.0",
67
- "@xylabs/tsconfig-dom": "~7.1.0",
68
- "@xylabs/tsconfig-react": "~7.1.0",
65
+ "@xylabs/ts-scripts-yarn3": "~7.1.3",
66
+ "@xylabs/tsconfig": "~7.1.3",
67
+ "@xylabs/tsconfig-dom": "~7.1.3",
68
+ "@xylabs/tsconfig-react": "~7.1.3",
69
69
  "react": "~19.1.1",
70
70
  "react-dom": "~19.1.1",
71
- "react-router-dom": "~7.8.0",
71
+ "react-router-dom": "~7.8.1",
72
72
  "typescript": "~5.9.2"
73
73
  },
74
74
  "peerDependencies": {