@xyo-network/react-chain-network 1.9.0 → 1.10.0

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,9 +1,5 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/components/menu/Avatar.tsx
5
2
  import { Avatar } from "@mui/material";
6
- import React3 from "react";
7
3
 
8
4
  // src/context/network/context.ts
9
5
  import { createContextEx } from "@xylabs/react-shared";
@@ -13,8 +9,18 @@ var ChainNetworkContext = createContextEx();
13
9
  import { ErrorRender } from "@xylabs/react-error";
14
10
  import { usePromise } from "@xylabs/react-promise";
15
11
  import { SequenceNetwork } from "@xyo-network/chain-network-model";
16
- import React, { useCallback, useMemo, useState } from "react";
17
- var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork, networks, setActiveNetwork: setActiveNetworkExternal }) => {
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
+ }) => {
18
24
  const [activeNetwork, setActiveNetwork] = useState();
19
25
  const [error, setError] = useState();
20
26
  const [resolvedActiveNetwork, activeNetworkError] = usePromise(async () => {
@@ -27,16 +33,12 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
27
33
  await setActiveNetworkExternal?.(defaultNetwork.id);
28
34
  return defaultNetwork;
29
35
  }
30
- }, [
31
- networks
32
- ]);
36
+ }, [networks]);
33
37
  useMemo(() => {
34
38
  if (resolvedActiveNetwork) {
35
39
  setActiveNetwork(resolvedActiveNetwork);
36
40
  }
37
- }, [
38
- resolvedActiveNetwork
39
- ]);
41
+ }, [resolvedActiveNetwork]);
40
42
  const updateActiveNetwork = useCallback((networkId) => {
41
43
  setError(void 0);
42
44
  const network = networks?.find((network2) => network2.id === networkId);
@@ -46,136 +48,176 @@ var ChainNetworkProvider = /* @__PURE__ */ __name(({ children, getActiveNetwork,
46
48
  }
47
49
  setActiveNetwork(network);
48
50
  void setActiveNetworkExternal?.(networkId);
49
- }, [
50
- networks
51
- ]);
51
+ }, [networks]);
52
52
  const value = useMemo(() => ({
53
53
  activeNetwork,
54
54
  networks,
55
55
  provided: true,
56
56
  updateActiveNetwork,
57
57
  chainNetworkError: error ?? activeNetworkError
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");
58
+ }), [activeNetwork, networks, updateActiveNetwork]);
59
+ return /* @__PURE__ */ jsxs(ChainNetworkContext, { value, children: [
60
+ /* @__PURE__ */ jsx(ErrorRender, { error: error ?? activeNetworkError, scope: "ChainNetworkProvider" }),
61
+ children
62
+ ] });
63
+ };
70
64
 
71
65
  // src/context/network/use.ts
72
66
  import { useContextEx } from "@xylabs/react-shared";
73
- var useChainNetwork = /* @__PURE__ */ __name((required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required), "useChainNetwork");
67
+ var useChainNetwork = (required = true) => useContextEx(ChainNetworkContext, "ChainNetwork", required);
74
68
 
75
69
  // src/components/menu/Icon.tsx
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");
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
+ };
92
90
 
93
91
  // src/components/menu/Avatar.tsx
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
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
+ )
106
113
  }
107
- }));
108
- }, "NetworkAvatar");
109
- var ActiveNetworkAvatar = /* @__PURE__ */ __name((props) => {
114
+ );
115
+ };
116
+ var ActiveNetworkAvatar = (props) => {
110
117
  const { activeNetwork } = useChainNetwork();
111
- return /* @__PURE__ */ React3.createElement(NetworkAvatar, {
112
- icon: activeNetwork?.icon,
113
- name: activeNetwork?.name,
114
- ...props
115
- });
116
- }, "ActiveNetworkAvatar");
118
+ return /* @__PURE__ */ jsx3(
119
+ NetworkAvatar,
120
+ {
121
+ icon: activeNetwork?.icon,
122
+ name: activeNetwork?.name,
123
+ ...props
124
+ }
125
+ );
126
+ };
117
127
 
118
128
  // src/components/menu/MenuItem.tsx
119
129
  import { ListItemText } from "@mui/material";
120
130
  import { ActiveMenuItem } from "@xyo-network/react-chain-shared";
121
- import React4 from "react";
122
- var NetworkMenuItem = /* @__PURE__ */ __name(({ active, network, onClick, updateActiveNetwork, ...props }) => {
123
- const handleClick = /* @__PURE__ */ __name((event) => {
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) => {
124
140
  if (network === void 0) throw new Error("Network is undefined");
125
141
  updateActiveNetwork?.(network.id);
126
142
  onClick?.(event);
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
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
+ ]
143
157
  }
144
- }), /* @__PURE__ */ React4.createElement(ListItemText, null, network?.name));
145
- }, "NetworkMenuItem");
158
+ );
159
+ };
146
160
 
147
161
  // src/components/status/Alert.tsx
148
- import { Alert, AlertTitle, Button as Button2 } from "@mui/material";
149
- import React6, { useMemo as useMemo2, useState as useState2 } from "react";
162
+ import {
163
+ Alert,
164
+ AlertTitle,
165
+ Button as Button2
166
+ } from "@mui/material";
167
+ import { useMemo as useMemo2, useState as useState2 } from "react";
150
168
 
151
169
  // src/components/status/Dialog.tsx
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");
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
+ };
174
215
 
175
216
  // src/components/status/Alert.tsx
176
- var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
217
+ import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
218
+ var NetworkStatusAlert = ({ status, ...props }) => {
177
219
  const [open, setOpen] = useState2(false);
178
- const handleClose = /* @__PURE__ */ __name(() => setOpen(false), "handleClose");
220
+ const handleClose = () => setOpen(false);
179
221
  const severity = useMemo2(() => {
180
222
  if (!status) return;
181
223
  switch (status.state) {
@@ -192,85 +234,74 @@ var NetworkStatusAlert = /* @__PURE__ */ __name(({ status, ...props }) => {
192
234
  return "error";
193
235
  }
194
236
  }
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";
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
+ };
215
246
 
216
247
  // src/hooks/provider/useActiveNetworkCurrentBlock.ts
217
248
  import { useCurrentBlock, useViewerFromWallet as useViewerFromWallet2 } from "@xyo-network/react-chain-provider";
218
249
 
219
250
  // src/hooks/provider/useViewerInPage.ts
220
251
  import { useHttpRpcViewer, useViewerFromWallet } from "@xyo-network/react-chain-provider";
221
- var useViewerInPage = /* @__PURE__ */ __name(() => {
252
+ var useViewerInPage = () => {
222
253
  const { activeNetwork } = useChainNetwork();
223
254
  const httpRpcViewer = useHttpRpcViewer(activeNetwork?.url);
224
255
  const walletRpcViewer = useViewerFromWallet(activeNetwork?.id);
225
256
  return walletRpcViewer ?? httpRpcViewer;
226
- }, "useViewerInPage");
257
+ };
227
258
 
228
259
  // src/hooks/provider/useActiveNetworkCurrentBlock.ts
229
- var useActiveNetworkCurrentBlock = /* @__PURE__ */ __name((refresh = 1, viewer) => {
260
+ var useActiveNetworkCurrentBlock = (refresh = 1, viewer) => {
230
261
  const currentBlock = useCurrentBlock(refresh, viewer);
231
262
  return currentBlock;
232
- }, "useActiveNetworkCurrentBlock");
233
- var useActiveNetworkCurrentBlockInPage = /* @__PURE__ */ __name((refresh = 1) => {
263
+ };
264
+ var useActiveNetworkCurrentBlockInPage = (refresh = 1) => {
234
265
  const viewer = useViewerInPage();
235
266
  const currentBlock = useCurrentBlock(refresh, viewer);
236
267
  return currentBlock;
237
- }, "useActiveNetworkCurrentBlockInPage");
238
- var useActiveNetworkCurrentBlockInWallet = /* @__PURE__ */ __name((refresh = 1) => {
268
+ };
269
+ var useActiveNetworkCurrentBlockInWallet = (refresh = 1) => {
239
270
  const viewer = useViewerFromWallet2();
240
271
  const currentBlock = useCurrentBlock(refresh, viewer);
241
272
  return currentBlock;
242
- }, "useActiveNetworkCurrentBlockInWallet");
273
+ };
243
274
 
244
275
  // src/hooks/provider/useActiveNetworkNetwork.ts
245
276
  import { useNetwork } from "@xyo-network/react-chain-provider";
246
- var useActiveNetworkNetwork = /* @__PURE__ */ __name(() => {
277
+ var useActiveNetworkNetwork = () => {
247
278
  const { activeNetwork } = useChainNetwork();
248
279
  const network = useNetwork(activeNetwork?.id);
249
280
  return network;
250
- }, "useActiveNetworkNetwork");
281
+ };
251
282
 
252
283
  // src/hooks/provider/useActiveNetworkRunner.ts
253
284
  import { useHttpRpcRunner } from "@xyo-network/react-chain-provider";
254
- var useActiveNetworkRunner = /* @__PURE__ */ __name(() => {
285
+ var useActiveNetworkRunner = () => {
255
286
  const { activeNetwork } = useChainNetwork();
256
287
  const runner = useHttpRpcRunner(activeNetwork?.url);
257
288
  return runner;
258
- }, "useActiveNetworkRunner");
289
+ };
259
290
 
260
291
  // src/hooks/provider/useViewerInWallet.ts
261
292
  import { useHttpRpcViewer as useHttpRpcViewer2 } from "@xyo-network/react-chain-provider";
262
- var useViewerInWallet = /* @__PURE__ */ __name(() => {
293
+ var useViewerInWallet = () => {
263
294
  const { activeNetwork } = useChainNetwork();
264
295
  const walletViewer = useHttpRpcViewer2(activeNetwork?.url);
265
296
  return walletViewer;
266
- }, "useViewerInWallet");
297
+ };
267
298
 
268
299
  // src/hooks/status/usePollNetworkStatus.ts
269
300
  import { delay } from "@xylabs/delay";
270
301
  import { isUndefined } from "@xylabs/typeof";
271
302
  import { useEffect, useState as useState3 } from "react";
272
303
  var STATUS_CHECK_INTERVAL = 1e4;
273
- var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
304
+ var usePollNetworkStatus = () => {
274
305
  const network = useActiveNetworkNetwork();
275
306
  const [networkStatus, setNetworkStatus] = useState3();
276
307
  const [networkStatusError, setNetworkStatusError] = useState3();
@@ -294,28 +325,21 @@ var usePollNetworkStatus = /* @__PURE__ */ __name(() => {
294
325
  return () => {
295
326
  checkNetwork = false;
296
327
  };
297
- }, [
298
- network
299
- ]);
300
- return [
301
- networkStatus,
302
- networkStatusError
303
- ];
304
- }, "usePollNetworkStatus");
328
+ }, [network]);
329
+ return [networkStatus, networkStatusError];
330
+ };
305
331
 
306
332
  // src/components/status/NetworkStatus.tsx
307
- var validNetworkStates = /* @__PURE__ */ new Set([
308
- "online",
309
- "unknown"
310
- ]);
311
- var NetworkStatus = /* @__PURE__ */ __name(({ children, ...props }) => {
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 }) => {
312
336
  const [networkStatus] = usePollNetworkStatus();
313
337
  const showStatus = networkStatus && !validNetworkStates.has(networkStatus.state);
314
- return /* @__PURE__ */ React7.createElement(React7.Fragment, null, showStatus && /* @__PURE__ */ React7.createElement(NetworkStatusAlert, {
315
- status: networkStatus,
316
- ...props
317
- }), children);
318
- }, "NetworkStatus");
338
+ return /* @__PURE__ */ jsxs5(Fragment2, { children: [
339
+ showStatus && /* @__PURE__ */ jsx7(NetworkStatusAlert, { status: networkStatus, ...props }),
340
+ children
341
+ ] });
342
+ };
319
343
  export {
320
344
  ActiveNetworkAvatar,
321
345
  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/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"]}
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"]}
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.9.0",
4
+ "version": "1.10.0",
5
5
  "description": "XYO Layer One React SDK",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -45,40 +45,41 @@
45
45
  "start": "storybook dev -p 6006"
46
46
  },
47
47
  "dependencies": {
48
- "@xylabs/delay": "^5.0.0",
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.0",
53
- "@xyo-network/chain-network-model": "^1.9.0",
54
- "@xyo-network/react-chain-provider": "^1.9.0",
55
- "@xyo-network/react-chain-shared": "^1.9.0",
56
- "@xyo-network/xl1-protocol": "^1.8.0"
48
+ "@xylabs/delay": "~5.0.2",
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.2",
53
+ "@xyo-network/chain-network-model": "~1.10.0",
54
+ "@xyo-network/react-chain-provider": "~1.10.0",
55
+ "@xyo-network/react-chain-shared": "~1.10.0",
56
+ "@xyo-network/xl1-protocol": "~1.9.3"
57
57
  },
58
58
  "devDependencies": {
59
- "@emotion/react": "^11.14.0",
60
- "@emotion/styled": "^11.14.1",
61
- "@mui/icons-material": "^7.2.0",
62
- "@mui/material": "^7.2.0",
63
- "@storybook/react-vite": "^9.0.18",
64
- "@types/react": "^19.1.9",
65
- "@xylabs/ts-scripts-yarn3": "^7.0.2",
66
- "@xylabs/tsconfig-react": "^7.0.2",
67
- "knip": "^5.62.0",
68
- "react": "^19.1.1",
69
- "react-dom": "^19.1.1",
70
- "react-router-dom": "^7.7.1",
71
- "typescript": "^5.8.3"
59
+ "@emotion/react": "~11.14.0",
60
+ "@emotion/styled": "~11.14.1",
61
+ "@mui/icons-material": "~7.3.0",
62
+ "@mui/material": "~7.3.0",
63
+ "@storybook/react-vite": "~9.1.1",
64
+ "@types/react": "~19.1.9",
65
+ "@xylabs/ts-scripts-yarn3": "~7.0.3",
66
+ "@xylabs/tsconfig": "~7.0.3",
67
+ "@xylabs/tsconfig-dom": "~7.0.3",
68
+ "@xylabs/tsconfig-react": "~7.0.3",
69
+ "react": "~19.1.1",
70
+ "react-dom": "~19.1.1",
71
+ "react-router-dom": "~7.7.1",
72
+ "typescript": "~5.9.2"
72
73
  },
73
74
  "peerDependencies": {
74
- "@emotion/react": "^11",
75
- "@emotion/styled": "^11",
75
+ "@emotion/react": "~11",
76
+ "@emotion/styled": "~11",
76
77
  "@mui/icons-material": ">=6 <8",
77
78
  "@mui/material": ">=6 <8",
78
- "ethers": "^6",
79
- "react": "^19",
80
- "react-dom": "^19",
81
- "react-router-dom": "^7"
79
+ "ethers": "~6",
80
+ "react": "~19",
81
+ "react-dom": "~19",
82
+ "react-router-dom": "~7"
82
83
  },
83
84
  "engines": {
84
85
  "node": ">=22.3 <23"