@xyo-network/react-connected-accounts 2.75.7 → 2.76.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (217) hide show
  1. package/dist/neutral/classes/EnabledWallets.d.cts +39 -0
  2. package/dist/neutral/classes/EnabledWallets.d.cts.map +1 -0
  3. package/dist/neutral/classes/EnabledWallets.d.mts +39 -0
  4. package/dist/neutral/classes/EnabledWallets.d.mts.map +1 -0
  5. package/dist/neutral/classes/EnabledWallets.d.ts +39 -0
  6. package/dist/neutral/classes/EnabledWallets.d.ts.map +1 -0
  7. package/dist/neutral/classes/index.d.cts +2 -0
  8. package/dist/neutral/classes/index.d.cts.map +1 -0
  9. package/dist/neutral/classes/index.d.mts +2 -0
  10. package/dist/neutral/classes/index.d.mts.map +1 -0
  11. package/dist/neutral/classes/index.d.ts +2 -0
  12. package/dist/neutral/classes/index.d.ts.map +1 -0
  13. package/dist/neutral/components/ConnectedAccountsFlexbox.d.cts +8 -0
  14. package/dist/neutral/components/ConnectedAccountsFlexbox.d.cts.map +1 -0
  15. package/dist/neutral/components/ConnectedAccountsFlexbox.d.mts +8 -0
  16. package/dist/neutral/components/ConnectedAccountsFlexbox.d.mts.map +1 -0
  17. package/dist/neutral/components/ConnectedAccountsFlexbox.d.ts +8 -0
  18. package/dist/neutral/components/ConnectedAccountsFlexbox.d.ts.map +1 -0
  19. package/dist/neutral/components/index.d.cts +3 -0
  20. package/dist/neutral/components/index.d.cts.map +1 -0
  21. package/dist/neutral/components/index.d.mts +3 -0
  22. package/dist/neutral/components/index.d.mts.map +1 -0
  23. package/dist/neutral/components/index.d.ts +3 -0
  24. package/dist/neutral/components/index.d.ts.map +1 -0
  25. package/dist/neutral/components/wallet/dialogs/connect/CheckboxFormControl.d.cts +7 -0
  26. package/dist/neutral/components/wallet/dialogs/connect/CheckboxFormControl.d.cts.map +1 -0
  27. package/dist/neutral/components/wallet/dialogs/connect/CheckboxFormControl.d.mts +7 -0
  28. package/dist/neutral/components/wallet/dialogs/connect/CheckboxFormControl.d.mts.map +1 -0
  29. package/dist/neutral/components/wallet/dialogs/connect/CheckboxFormControl.d.ts +7 -0
  30. package/dist/neutral/components/wallet/dialogs/connect/CheckboxFormControl.d.ts.map +1 -0
  31. package/dist/neutral/components/wallet/dialogs/connect/Dialog.d.cts +9 -0
  32. package/dist/neutral/components/wallet/dialogs/connect/Dialog.d.cts.map +1 -0
  33. package/dist/neutral/components/wallet/dialogs/connect/Dialog.d.mts +9 -0
  34. package/dist/neutral/components/wallet/dialogs/connect/Dialog.d.mts.map +1 -0
  35. package/dist/neutral/components/wallet/dialogs/connect/Dialog.d.ts +9 -0
  36. package/dist/neutral/components/wallet/dialogs/connect/Dialog.d.ts.map +1 -0
  37. package/dist/neutral/components/wallet/dialogs/connect/LinkedProvidersFlexbox.d.cts +8 -0
  38. package/dist/neutral/components/wallet/dialogs/connect/LinkedProvidersFlexbox.d.cts.map +1 -0
  39. package/dist/neutral/components/wallet/dialogs/connect/LinkedProvidersFlexbox.d.mts +8 -0
  40. package/dist/neutral/components/wallet/dialogs/connect/LinkedProvidersFlexbox.d.mts.map +1 -0
  41. package/dist/neutral/components/wallet/dialogs/connect/LinkedProvidersFlexbox.d.ts +8 -0
  42. package/dist/neutral/components/wallet/dialogs/connect/LinkedProvidersFlexbox.d.ts.map +1 -0
  43. package/dist/neutral/components/wallet/dialogs/connect/Permissions.d.cts +6 -0
  44. package/dist/neutral/components/wallet/dialogs/connect/Permissions.d.cts.map +1 -0
  45. package/dist/neutral/components/wallet/dialogs/connect/Permissions.d.mts +6 -0
  46. package/dist/neutral/components/wallet/dialogs/connect/Permissions.d.mts.map +1 -0
  47. package/dist/neutral/components/wallet/dialogs/connect/Permissions.d.ts +6 -0
  48. package/dist/neutral/components/wallet/dialogs/connect/Permissions.d.ts.map +1 -0
  49. package/dist/neutral/components/wallet/dialogs/connect/index.d.cts +3 -0
  50. package/dist/neutral/components/wallet/dialogs/connect/index.d.cts.map +1 -0
  51. package/dist/neutral/components/wallet/dialogs/connect/index.d.mts +3 -0
  52. package/dist/neutral/components/wallet/dialogs/connect/index.d.mts.map +1 -0
  53. package/dist/neutral/components/wallet/dialogs/connect/index.d.ts +3 -0
  54. package/dist/neutral/components/wallet/dialogs/connect/index.d.ts.map +1 -0
  55. package/dist/neutral/components/wallet/dialogs/index.d.cts +3 -0
  56. package/dist/neutral/components/wallet/dialogs/index.d.cts.map +1 -0
  57. package/dist/neutral/components/wallet/dialogs/index.d.mts +3 -0
  58. package/dist/neutral/components/wallet/dialogs/index.d.mts.map +1 -0
  59. package/dist/neutral/components/wallet/dialogs/index.d.ts +3 -0
  60. package/dist/neutral/components/wallet/dialogs/index.d.ts.map +1 -0
  61. package/dist/neutral/components/wallet/dialogs/revoke/Dialog.d.cts +8 -0
  62. package/dist/neutral/components/wallet/dialogs/revoke/Dialog.d.cts.map +1 -0
  63. package/dist/neutral/components/wallet/dialogs/revoke/Dialog.d.mts +8 -0
  64. package/dist/neutral/components/wallet/dialogs/revoke/Dialog.d.mts.map +1 -0
  65. package/dist/neutral/components/wallet/dialogs/revoke/Dialog.d.ts +8 -0
  66. package/dist/neutral/components/wallet/dialogs/revoke/Dialog.d.ts.map +1 -0
  67. package/dist/neutral/components/wallet/dialogs/revoke/index.d.cts +2 -0
  68. package/dist/neutral/components/wallet/dialogs/revoke/index.d.cts.map +1 -0
  69. package/dist/neutral/components/wallet/dialogs/revoke/index.d.mts +2 -0
  70. package/dist/neutral/components/wallet/dialogs/revoke/index.d.mts.map +1 -0
  71. package/dist/neutral/components/wallet/dialogs/revoke/index.d.ts +2 -0
  72. package/dist/neutral/components/wallet/dialogs/revoke/index.d.ts.map +1 -0
  73. package/dist/neutral/components/wallet/index.d.cts +3 -0
  74. package/dist/neutral/components/wallet/index.d.cts.map +1 -0
  75. package/dist/neutral/components/wallet/index.d.mts +3 -0
  76. package/dist/neutral/components/wallet/index.d.mts.map +1 -0
  77. package/dist/neutral/components/wallet/index.d.ts +3 -0
  78. package/dist/neutral/components/wallet/index.d.ts.map +1 -0
  79. package/dist/neutral/components/wallet/lib/ActiveProvider.d.cts +7 -0
  80. package/dist/neutral/components/wallet/lib/ActiveProvider.d.cts.map +1 -0
  81. package/dist/neutral/components/wallet/lib/ActiveProvider.d.mts +7 -0
  82. package/dist/neutral/components/wallet/lib/ActiveProvider.d.mts.map +1 -0
  83. package/dist/neutral/components/wallet/lib/ActiveProvider.d.ts +7 -0
  84. package/dist/neutral/components/wallet/lib/ActiveProvider.d.ts.map +1 -0
  85. package/dist/neutral/components/wallet/lib/TableHeadData.d.cts +3 -0
  86. package/dist/neutral/components/wallet/lib/TableHeadData.d.cts.map +1 -0
  87. package/dist/neutral/components/wallet/lib/TableHeadData.d.mts +3 -0
  88. package/dist/neutral/components/wallet/lib/TableHeadData.d.mts.map +1 -0
  89. package/dist/neutral/components/wallet/lib/TableHeadData.d.ts +3 -0
  90. package/dist/neutral/components/wallet/lib/TableHeadData.d.ts.map +1 -0
  91. package/dist/neutral/components/wallet/lib/index.d.cts +3 -0
  92. package/dist/neutral/components/wallet/lib/index.d.cts.map +1 -0
  93. package/dist/neutral/components/wallet/lib/index.d.mts +3 -0
  94. package/dist/neutral/components/wallet/lib/index.d.mts.map +1 -0
  95. package/dist/neutral/components/wallet/lib/index.d.ts +3 -0
  96. package/dist/neutral/components/wallet/lib/index.d.ts.map +1 -0
  97. package/dist/neutral/components/wallet/table/ConnectedWalletsTable.d.cts +10 -0
  98. package/dist/neutral/components/wallet/table/ConnectedWalletsTable.d.cts.map +1 -0
  99. package/dist/neutral/components/wallet/table/ConnectedWalletsTable.d.mts +10 -0
  100. package/dist/neutral/components/wallet/table/ConnectedWalletsTable.d.mts.map +1 -0
  101. package/dist/neutral/components/wallet/table/ConnectedWalletsTable.d.ts +10 -0
  102. package/dist/neutral/components/wallet/table/ConnectedWalletsTable.d.ts.map +1 -0
  103. package/dist/neutral/components/wallet/table/ConnectedWalletsTableRow.d.cts +12 -0
  104. package/dist/neutral/components/wallet/table/ConnectedWalletsTableRow.d.cts.map +1 -0
  105. package/dist/neutral/components/wallet/table/ConnectedWalletsTableRow.d.mts +12 -0
  106. package/dist/neutral/components/wallet/table/ConnectedWalletsTableRow.d.mts.map +1 -0
  107. package/dist/neutral/components/wallet/table/ConnectedWalletsTableRow.d.ts +12 -0
  108. package/dist/neutral/components/wallet/table/ConnectedWalletsTableRow.d.ts.map +1 -0
  109. package/dist/neutral/components/wallet/table/cells/Accounts.d.cts +4 -0
  110. package/dist/neutral/components/wallet/table/cells/Accounts.d.cts.map +1 -0
  111. package/dist/neutral/components/wallet/table/cells/Accounts.d.mts +4 -0
  112. package/dist/neutral/components/wallet/table/cells/Accounts.d.mts.map +1 -0
  113. package/dist/neutral/components/wallet/table/cells/Accounts.d.ts +4 -0
  114. package/dist/neutral/components/wallet/table/cells/Accounts.d.ts.map +1 -0
  115. package/dist/neutral/components/wallet/table/cells/Actions.d.cts +4 -0
  116. package/dist/neutral/components/wallet/table/cells/Actions.d.cts.map +1 -0
  117. package/dist/neutral/components/wallet/table/cells/Actions.d.mts +4 -0
  118. package/dist/neutral/components/wallet/table/cells/Actions.d.mts.map +1 -0
  119. package/dist/neutral/components/wallet/table/cells/Actions.d.ts +4 -0
  120. package/dist/neutral/components/wallet/table/cells/Actions.d.ts.map +1 -0
  121. package/dist/neutral/components/wallet/table/cells/Cells.d.cts +4 -0
  122. package/dist/neutral/components/wallet/table/cells/Cells.d.cts.map +1 -0
  123. package/dist/neutral/components/wallet/table/cells/Cells.d.mts +4 -0
  124. package/dist/neutral/components/wallet/table/cells/Cells.d.mts.map +1 -0
  125. package/dist/neutral/components/wallet/table/cells/Cells.d.ts +4 -0
  126. package/dist/neutral/components/wallet/table/cells/Cells.d.ts.map +1 -0
  127. package/dist/neutral/components/wallet/table/cells/ChainName.d.cts +4 -0
  128. package/dist/neutral/components/wallet/table/cells/ChainName.d.cts.map +1 -0
  129. package/dist/neutral/components/wallet/table/cells/ChainName.d.mts +4 -0
  130. package/dist/neutral/components/wallet/table/cells/ChainName.d.mts.map +1 -0
  131. package/dist/neutral/components/wallet/table/cells/ChainName.d.ts +4 -0
  132. package/dist/neutral/components/wallet/table/cells/ChainName.d.ts.map +1 -0
  133. package/dist/neutral/components/wallet/table/cells/State.d.cts +4 -0
  134. package/dist/neutral/components/wallet/table/cells/State.d.cts.map +1 -0
  135. package/dist/neutral/components/wallet/table/cells/State.d.mts +4 -0
  136. package/dist/neutral/components/wallet/table/cells/State.d.mts.map +1 -0
  137. package/dist/neutral/components/wallet/table/cells/State.d.ts +4 -0
  138. package/dist/neutral/components/wallet/table/cells/State.d.ts.map +1 -0
  139. package/dist/neutral/components/wallet/table/cells/Wallet.d.cts +4 -0
  140. package/dist/neutral/components/wallet/table/cells/Wallet.d.cts.map +1 -0
  141. package/dist/neutral/components/wallet/table/cells/Wallet.d.mts +4 -0
  142. package/dist/neutral/components/wallet/table/cells/Wallet.d.mts.map +1 -0
  143. package/dist/neutral/components/wallet/table/cells/Wallet.d.ts +4 -0
  144. package/dist/neutral/components/wallet/table/cells/Wallet.d.ts.map +1 -0
  145. package/dist/neutral/components/wallet/table/cells/index.d.cts +7 -0
  146. package/dist/neutral/components/wallet/table/cells/index.d.cts.map +1 -0
  147. package/dist/neutral/components/wallet/table/cells/index.d.mts +7 -0
  148. package/dist/neutral/components/wallet/table/cells/index.d.mts.map +1 -0
  149. package/dist/neutral/components/wallet/table/cells/index.d.ts +7 -0
  150. package/dist/neutral/components/wallet/table/cells/index.d.ts.map +1 -0
  151. package/dist/neutral/components/wallet/table/cells/lib/ConnectedWalletTableCellProps.d.cts +15 -0
  152. package/dist/neutral/components/wallet/table/cells/lib/ConnectedWalletTableCellProps.d.cts.map +1 -0
  153. package/dist/neutral/components/wallet/table/cells/lib/ConnectedWalletTableCellProps.d.mts +15 -0
  154. package/dist/neutral/components/wallet/table/cells/lib/ConnectedWalletTableCellProps.d.mts.map +1 -0
  155. package/dist/neutral/components/wallet/table/cells/lib/ConnectedWalletTableCellProps.d.ts +15 -0
  156. package/dist/neutral/components/wallet/table/cells/lib/ConnectedWalletTableCellProps.d.ts.map +1 -0
  157. package/dist/neutral/components/wallet/table/cells/lib/index.d.cts +2 -0
  158. package/dist/neutral/components/wallet/table/cells/lib/index.d.cts.map +1 -0
  159. package/dist/neutral/components/wallet/table/cells/lib/index.d.mts +2 -0
  160. package/dist/neutral/components/wallet/table/cells/lib/index.d.mts.map +1 -0
  161. package/dist/neutral/components/wallet/table/cells/lib/index.d.ts +2 -0
  162. package/dist/neutral/components/wallet/table/cells/lib/index.d.ts.map +1 -0
  163. package/dist/neutral/components/wallet/table/hooks/index.d.cts +2 -0
  164. package/dist/neutral/components/wallet/table/hooks/index.d.cts.map +1 -0
  165. package/dist/neutral/components/wallet/table/hooks/index.d.mts +2 -0
  166. package/dist/neutral/components/wallet/table/hooks/index.d.mts.map +1 -0
  167. package/dist/neutral/components/wallet/table/hooks/index.d.ts +2 -0
  168. package/dist/neutral/components/wallet/table/hooks/index.d.ts.map +1 -0
  169. package/dist/neutral/components/wallet/table/hooks/useActiveProviderDialogState.d.cts +4 -0
  170. package/dist/neutral/components/wallet/table/hooks/useActiveProviderDialogState.d.cts.map +1 -0
  171. package/dist/neutral/components/wallet/table/hooks/useActiveProviderDialogState.d.mts +4 -0
  172. package/dist/neutral/components/wallet/table/hooks/useActiveProviderDialogState.d.mts.map +1 -0
  173. package/dist/neutral/components/wallet/table/hooks/useActiveProviderDialogState.d.ts +4 -0
  174. package/dist/neutral/components/wallet/table/hooks/useActiveProviderDialogState.d.ts.map +1 -0
  175. package/dist/neutral/components/wallet/table/index.d.cts +5 -0
  176. package/dist/neutral/components/wallet/table/index.d.cts.map +1 -0
  177. package/dist/neutral/components/wallet/table/index.d.mts +5 -0
  178. package/dist/neutral/components/wallet/table/index.d.mts.map +1 -0
  179. package/dist/neutral/components/wallet/table/index.d.ts +5 -0
  180. package/dist/neutral/components/wallet/table/index.d.ts.map +1 -0
  181. package/dist/neutral/hooks/index.d.cts +3 -0
  182. package/dist/neutral/hooks/index.d.cts.map +1 -0
  183. package/dist/neutral/hooks/index.d.mts +3 -0
  184. package/dist/neutral/hooks/index.d.mts.map +1 -0
  185. package/dist/neutral/hooks/index.d.ts +3 -0
  186. package/dist/neutral/hooks/index.d.ts.map +1 -0
  187. package/dist/neutral/hooks/useDetectWallets.d.cts +6 -0
  188. package/dist/neutral/hooks/useDetectWallets.d.cts.map +1 -0
  189. package/dist/neutral/hooks/useDetectWallets.d.mts +6 -0
  190. package/dist/neutral/hooks/useDetectWallets.d.mts.map +1 -0
  191. package/dist/neutral/hooks/useDetectWallets.d.ts +6 -0
  192. package/dist/neutral/hooks/useDetectWallets.d.ts.map +1 -0
  193. package/dist/neutral/hooks/useEnabledWallets.d.cts +15 -0
  194. package/dist/neutral/hooks/useEnabledWallets.d.cts.map +1 -0
  195. package/dist/neutral/hooks/useEnabledWallets.d.mts +15 -0
  196. package/dist/neutral/hooks/useEnabledWallets.d.mts.map +1 -0
  197. package/dist/neutral/hooks/useEnabledWallets.d.ts +15 -0
  198. package/dist/neutral/hooks/useEnabledWallets.d.ts.map +1 -0
  199. package/dist/neutral/img/index.d.cts +3 -0
  200. package/dist/neutral/img/index.d.cts.map +1 -0
  201. package/dist/neutral/img/index.d.mts +3 -0
  202. package/dist/neutral/img/index.d.mts.map +1 -0
  203. package/dist/neutral/img/index.d.ts +3 -0
  204. package/dist/neutral/img/index.d.ts.map +1 -0
  205. package/dist/neutral/index.cjs +578 -0
  206. package/dist/neutral/index.cjs.map +1 -0
  207. package/dist/neutral/index.d.cts +4 -0
  208. package/dist/neutral/index.d.cts.map +1 -0
  209. package/dist/neutral/index.d.mts +4 -0
  210. package/dist/neutral/index.d.mts.map +1 -0
  211. package/dist/neutral/index.d.ts +4 -0
  212. package/dist/neutral/index.d.ts.map +1 -0
  213. package/dist/neutral/index.js +545 -0
  214. package/dist/neutral/index.js.map +1 -0
  215. package/dist/neutral/xyo-color-logo-LHR2SMEM.svg +1 -0
  216. package/dist/neutral/xyo-color-logo-text-only-QPAW5BSQ.svg +1 -0
  217. package/package.json +4 -4
@@ -0,0 +1,545 @@
1
+ // src/classes/EnabledWallets.ts
2
+ var DEFAULT_LOCAL_STORAGE_KEY = "XYO|EnabledWallets";
3
+ var EnabledEthWalletConnections = class {
4
+ // control whether or not enabled/disabled preferences are persisted (i.e. in localStorage)
5
+ persistPreferences = true;
6
+ // Map of wallet names and their enabled/disabled state
7
+ enabledWallets = {};
8
+ // Map of wallet names, their enabled/disabled state, and their wallet class
9
+ ethWalletsState = {};
10
+ // list of listeners that want to be notified on wallet changes
11
+ listeners = [];
12
+ // key to use in localStorage when persisting preferences
13
+ localStorageKey = DEFAULT_LOCAL_STORAGE_KEY;
14
+ constructor(localStorageKey = DEFAULT_LOCAL_STORAGE_KEY) {
15
+ this.localStorageKey = localStorageKey;
16
+ this.reviveSettings();
17
+ }
18
+ get wallets() {
19
+ return this.ethWalletsState;
20
+ }
21
+ disableWallet(rdns) {
22
+ this.toggleEnabledWallet(rdns, false);
23
+ }
24
+ enableWallet(rdns) {
25
+ this.toggleEnabledWallet(rdns, true);
26
+ }
27
+ /**
28
+ * Given a new set of wallets, set their enabled state based off previous preferences
29
+ */
30
+ resetWallets(wallets) {
31
+ const newWallets = {};
32
+ const addWallet = ([walletName, wallet]) => {
33
+ newWallets[walletName] = {
34
+ // preserve the existing enabled state
35
+ enabled: walletName in this.enabledWallets ? this.enabledWallets[walletName] : true,
36
+ wallet
37
+ };
38
+ };
39
+ Object.entries(wallets).forEach(addWallet.bind(this));
40
+ this.ethWalletsState = newWallets;
41
+ this.emitChange();
42
+ }
43
+ subscribe(listener) {
44
+ this.listeners = [...this.listeners, listener];
45
+ return () => {
46
+ this.listeners = this.listeners.filter((existingListener) => existingListener !== listener);
47
+ };
48
+ }
49
+ toggleEnabledWallet(rdns, enabled) {
50
+ if (rdns && this.ethWalletsState[rdns]) {
51
+ this.ethWalletsState[rdns].enabled = enabled;
52
+ this.ethWalletsState = { ...this.ethWalletsState };
53
+ this.emitChange();
54
+ }
55
+ }
56
+ emitChange() {
57
+ for (const listener of this.listeners) {
58
+ listener();
59
+ }
60
+ this.persistSettings();
61
+ }
62
+ isPersistance(method) {
63
+ if (this.persistPreferences) {
64
+ method();
65
+ }
66
+ }
67
+ persistSettings() {
68
+ this.isPersistance(() => {
69
+ const enabledWallets = Object.entries(this.ethWalletsState).reduce((acc, [rdns, { enabled }]) => {
70
+ acc[rdns] = enabled;
71
+ return acc;
72
+ }, {});
73
+ localStorage.setItem(this.localStorageKey, JSON.stringify(enabledWallets));
74
+ });
75
+ }
76
+ reviveSettings() {
77
+ this.isPersistance(() => {
78
+ const existingEntries = localStorage.getItem(this.localStorageKey);
79
+ try {
80
+ const entries = existingEntries ? JSON.parse(existingEntries) : {};
81
+ this.enabledWallets = entries;
82
+ } catch (e) {
83
+ console.warn(`Error parsing saved enabled wallet entries: ${e.message}`);
84
+ }
85
+ });
86
+ }
87
+ };
88
+
89
+ // src/components/ConnectedAccountsFlexbox.tsx
90
+ import { Typography as Typography6, useTheme as useTheme2 } from "@mui/material";
91
+ import { FlexCol as FlexCol3 } from "@xylabs/react-flexbox";
92
+ import { forwardRef } from "react";
93
+
94
+ // src/hooks/useDetectWallets.tsx
95
+ import { AccountsChangedEventName, useWalletDiscovery } from "@xylabs/react-crypto";
96
+ import { useEffect, useMemo, useState } from "react";
97
+ var sortWallets = (wallets) => (
98
+ // eslint-disable-next-line unicorn/no-array-reduce
99
+ Object.values(wallets).reduce((acc, wallet) => {
100
+ wallet.allowedAccounts.length > 0 ? acc.unshift(wallet) : acc.push(wallet);
101
+ return acc;
102
+ }, [])
103
+ );
104
+ var useDetectedWallets = () => {
105
+ const wallets = useWalletDiscovery();
106
+ const [refresh, setRefresh] = useState(0);
107
+ const [sortedWallets, setSortedWallets] = useState([]);
108
+ useEffect(() => {
109
+ setSortedWallets(sortWallets(wallets));
110
+ }, [wallets, refresh]);
111
+ useEffect(() => {
112
+ const listener = () => {
113
+ setRefresh((refresh2) => refresh2 + 1);
114
+ };
115
+ window.addEventListener(AccountsChangedEventName, listener);
116
+ return () => {
117
+ window.removeEventListener(AccountsChangedEventName, listener);
118
+ };
119
+ }, [wallets]);
120
+ const totalConnectedAccounts = useMemo(
121
+ () => Object.values(sortedWallets).reduce((acc, wallet) => acc + wallet.allowedAccounts.length, 0),
122
+ [sortedWallets]
123
+ );
124
+ return { sortedWallets, totalConnectedAccounts };
125
+ };
126
+
127
+ // src/hooks/useEnabledWallets.tsx
128
+ import { useWalletDiscovery as useWalletDiscovery2 } from "@xylabs/react-crypto";
129
+ import { useMemo as useMemo2, useSyncExternalStore } from "react";
130
+ var enabledEthWallets;
131
+ var useEnabledWalletsInner = (enabledWalletsRdns) => {
132
+ const discoveredWallets = useWalletDiscovery2();
133
+ const wallets = useMemo2(() => {
134
+ if (enabledEthWallets === void 0)
135
+ enabledEthWallets = new EnabledEthWalletConnections();
136
+ enabledEthWallets.resetWallets(discoveredWallets);
137
+ for (const [rdns, enabled] of Object.entries(enabledWalletsRdns ?? {}))
138
+ enabledEthWallets?.toggleEnabledWallet(rdns, enabled);
139
+ return enabledEthWallets;
140
+ }, [discoveredWallets, enabledWalletsRdns]);
141
+ return useSyncExternalStore(wallets.subscribe.bind(wallets), () => wallets.wallets);
142
+ };
143
+ var useEnabledWallets = (enabledWalletsRdns) => {
144
+ const wallets = useEnabledWalletsInner(enabledWalletsRdns);
145
+ const enabledWallets = useMemo2(
146
+ () => (
147
+ // eslint-disable-next-line unicorn/no-array-reduce
148
+ Object.entries(wallets).reduce((acc, [walletName, wallet]) => {
149
+ if (wallet.enabled)
150
+ acc[walletName] = wallet;
151
+ return acc;
152
+ }, {})
153
+ ),
154
+ [wallets]
155
+ );
156
+ return {
157
+ disableWallet: enabledEthWallets?.disableWallet.bind(enabledEthWallets),
158
+ enableWallet: enabledEthWallets?.enableWallet.bind(enabledEthWallets),
159
+ enabledWallets,
160
+ wallets
161
+ };
162
+ };
163
+
164
+ // src/components/wallet/dialogs/connect/CheckboxFormControl.tsx
165
+ import { Checkbox, FormControl, FormLabel } from "@mui/material";
166
+ import { jsx, jsxs } from "react/jsx-runtime";
167
+ var CheckboxFormControl = ({ onCheckChanged, ...props }) => {
168
+ return /* @__PURE__ */ jsx(FormControl, { ...props, children: /* @__PURE__ */ jsxs(FormLabel, { children: [
169
+ /* @__PURE__ */ jsx(Checkbox, { onChange: (_, checked) => onCheckChanged?.(checked) }),
170
+ "Do not show this again."
171
+ ] }) });
172
+ };
173
+
174
+ // src/components/wallet/dialogs/connect/Dialog.tsx
175
+ import { Button, Dialog, DialogActions, DialogContent, DialogTitle } from "@mui/material";
176
+
177
+ // src/components/wallet/dialogs/connect/LinkedProvidersFlexbox.tsx
178
+ import { SyncAlt } from "@mui/icons-material";
179
+ import { Typography } from "@mui/material";
180
+ import { ConstrainedImage } from "@xylabs/react-crypto";
181
+ import { FlexCol, FlexRow } from "@xylabs/react-flexbox";
182
+
183
+ // src/img/index.ts
184
+ import { default as default2 } from "./xyo-color-logo-LHR2SMEM.svg";
185
+ import { default as default3 } from "./xyo-color-logo-text-only-QPAW5BSQ.svg";
186
+
187
+ // src/components/wallet/dialogs/connect/LinkedProvidersFlexbox.tsx
188
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
189
+ var LinkedProvidersFlexbox = ({ icon, providerName, ...props }) => {
190
+ return /* @__PURE__ */ jsxs2(FlexRow, { gap: 4, justifyContent: "space-evenly", ...props, children: [
191
+ /* @__PURE__ */ jsxs2(FlexCol, { gap: 0.5, children: [
192
+ /* @__PURE__ */ jsx2("img", { alt: "XYO Logo", src: default2, style: { height: "48px" } }),
193
+ /* @__PURE__ */ jsx2(Typography, { variant: "subtitle1", children: "XYO App" })
194
+ ] }),
195
+ /* @__PURE__ */ jsx2(SyncAlt, { fontSize: "large" }),
196
+ /* @__PURE__ */ jsxs2(FlexCol, { gap: 0.5, children: [
197
+ /* @__PURE__ */ jsx2(ConstrainedImage, { constrainedValue: "48px", src: icon, alt: providerName, style: { height: "48px", maxWidth: "48px" } }),
198
+ /* @__PURE__ */ jsx2(Typography, { variant: "subtitle1", children: providerName })
199
+ ] })
200
+ ] });
201
+ };
202
+
203
+ // src/components/wallet/dialogs/connect/Permissions.tsx
204
+ import { Link, Typography as Typography2 } from "@mui/material";
205
+ import { FlexCol as FlexCol2 } from "@xylabs/react-flexbox";
206
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
207
+ var WalletPermissionsFlexbox = (props) => {
208
+ return /* @__PURE__ */ jsxs3(FlexCol2, { gap: 4, ...props, children: [
209
+ /* @__PURE__ */ jsx3(Typography2, { fontWeight: "bold", sx: { textAlign: "center" }, children: "This will allow XYO to:" }),
210
+ /* @__PURE__ */ jsxs3("ul", { children: [
211
+ /* @__PURE__ */ jsx3("li", { children: "View your wallet account(s) and address(es)" }),
212
+ /* @__PURE__ */ jsx3("li", { children: "Read-only access to browse the public blockchain(s) you select" })
213
+ ] }),
214
+ /* @__PURE__ */ jsxs3(Typography2, { variant: "subtitle1", sx: { textAlign: "center" }, children: [
215
+ "You control what accounts to share and what blockchains to view. You can see or revoke access via your wallet's settings at anytime. View more on XYO's sovereign data philosophy",
216
+ " ",
217
+ /* @__PURE__ */ jsx3(
218
+ Link,
219
+ {
220
+ href: "https://cointelegraph.com/innovation-circle/decentralization-and-sovereignty-debunking-our-approach-to-digital-sovereignty",
221
+ sx: { fontWeight: "bold" },
222
+ target: "_blank",
223
+ children: "here"
224
+ }
225
+ ),
226
+ "."
227
+ ] })
228
+ ] });
229
+ };
230
+
231
+ // src/components/wallet/dialogs/connect/Dialog.tsx
232
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
233
+ var ConnectWalletDialog = ({ activeProvider, onIgnoreConnectDialog, ...props }) => {
234
+ const { icon, providerName } = activeProvider ?? {};
235
+ const onConnect = async () => {
236
+ try {
237
+ await activeProvider?.connectWallet?.();
238
+ props.onClose?.({}, "escapeKeyDown");
239
+ } catch (e) {
240
+ console.warn(`Error connecting to wallet: ${e.message}`);
241
+ }
242
+ };
243
+ return /* @__PURE__ */ jsxs4(Dialog, { PaperProps: { sx: { display: "flex", gap: 4 } }, ...props, children: [
244
+ /* @__PURE__ */ jsx4(DialogTitle, { sx: { textAlign: "center" }, children: "XYO Wants To Access The Blockchain on Your Behalf" }),
245
+ /* @__PURE__ */ jsxs4(DialogContent, { sx: { display: "flex", flexDirection: "column", gap: 4 }, children: [
246
+ /* @__PURE__ */ jsx4(LinkedProvidersFlexbox, { icon, providerName }),
247
+ /* @__PURE__ */ jsx4(WalletPermissionsFlexbox, {}),
248
+ /* @__PURE__ */ jsx4(CheckboxFormControl, { onCheckChanged: onIgnoreConnectDialog })
249
+ ] }),
250
+ /* @__PURE__ */ jsxs4(DialogActions, { children: [
251
+ /* @__PURE__ */ jsx4(Button, { variant: "outlined", onClick: () => props.onClose?.({}, "escapeKeyDown"), children: "Close" }),
252
+ /* @__PURE__ */ jsx4(Button, { variant: "contained", onClick: onConnect, children: "Connect" })
253
+ ] })
254
+ ] });
255
+ };
256
+
257
+ // src/components/wallet/dialogs/revoke/Dialog.tsx
258
+ import { Button as Button2, Dialog as Dialog2, DialogActions as DialogActions2, DialogContent as DialogContent2, DialogTitle as DialogTitle2, Typography as Typography3 } from "@mui/material";
259
+ import { ConstrainedImage as ConstrainedImage2 } from "@xylabs/react-crypto";
260
+ import { FlexRow as FlexRow2 } from "@xylabs/react-flexbox";
261
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
262
+ var RevokeWalletConnectionDialog = ({ activeProvider, ...props }) => {
263
+ return /* @__PURE__ */ jsxs5(Dialog2, { ...props, children: [
264
+ /* @__PURE__ */ jsxs5(FlexRow2, { gap: 2, justifyContent: "start", pl: 2, children: [
265
+ /* @__PURE__ */ jsx5(ConstrainedImage2, { src: activeProvider?.icon, constrainedValue: "24px" }),
266
+ /* @__PURE__ */ jsxs5(DialogTitle2, { sx: { pl: 0 }, children: [
267
+ "Revoke ",
268
+ activeProvider?.providerName,
269
+ " Access"
270
+ ] })
271
+ ] }),
272
+ /* @__PURE__ */ jsxs5(DialogContent2, { children: [
273
+ /* @__PURE__ */ jsxs5(Typography3, { children: [
274
+ "Revoking access to your wallet must be done from the wallet's browser extension. Wallets grant access to specific domains please consult ",
275
+ activeProvider?.providerName,
276
+ "'s documentation on how to revoke access to this website:"
277
+ ] }),
278
+ /* @__PURE__ */ jsx5(Typography3, { children: window.location.origin })
279
+ ] }),
280
+ /* @__PURE__ */ jsx5(DialogActions2, { children: /* @__PURE__ */ jsx5(Button2, { variant: "contained", onClick: () => props.onClose?.({}, "escapeKeyDown"), children: "Close" }) })
281
+ ] });
282
+ };
283
+
284
+ // src/components/wallet/table/cells/Accounts.tsx
285
+ import { TableCell, Tooltip, Typography as Typography4 } from "@mui/material";
286
+ import { jsx as jsx6 } from "react/jsx-runtime";
287
+ var ConnectedWalletsAccountsTableCell = ({
288
+ additionalAccounts,
289
+ currentAccount,
290
+ totalAccounts,
291
+ tableCellProps
292
+ }) => {
293
+ return /* @__PURE__ */ jsx6(TableCell, { ...tableCellProps, children: /* @__PURE__ */ jsx6(
294
+ Tooltip,
295
+ {
296
+ sx: { cursor: totalAccounts > 0 ? "pointer" : "auto" },
297
+ title: [...currentAccount ?? [], ...additionalAccounts ?? []].map((address, index) => /* @__PURE__ */ jsx6("p", { children: address }, index)),
298
+ children: /* @__PURE__ */ jsx6(Typography4, { children: totalAccounts })
299
+ }
300
+ ) });
301
+ };
302
+
303
+ // src/components/wallet/table/cells/Actions.tsx
304
+ import { Check, InfoOutlined } from "@mui/icons-material";
305
+ import { Button as Button3, IconButton, TableCell as TableCell2, Typography as Typography5 } from "@mui/material";
306
+ import { FlexRow as FlexRow3 } from "@xylabs/react-flexbox";
307
+ import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
308
+ var ConnectedWalletsActionsTableCell = ({ connected, onConnect, onRevoke, tableCellProps }) => {
309
+ return /* @__PURE__ */ jsx7(TableCell2, { ...tableCellProps, children: /* @__PURE__ */ jsxs6(FlexRow3, { gap: 2, justifyContent: "start", children: [
310
+ connected ? /* @__PURE__ */ jsxs6(Typography5, { sx: { display: "inline-flex", gap: 0.5 }, children: [
311
+ /* @__PURE__ */ jsx7(Check, {}),
312
+ "Connected"
313
+ ] }) : /* @__PURE__ */ jsx7(Button3, { variant: "contained", onClick: onConnect, children: "Connect" }),
314
+ connected ? /* @__PURE__ */ jsx7(IconButton, { onClick: onRevoke, children: /* @__PURE__ */ jsx7(InfoOutlined, {}) }) : null
315
+ ] }) });
316
+ };
317
+
318
+ // src/components/wallet/table/cells/ChainName.tsx
319
+ import { TableCell as TableCell3 } from "@mui/material";
320
+ import { jsx as jsx8 } from "react/jsx-runtime";
321
+ var ConnectedWalletsChainNameTableCell = ({ chainName, tableCellProps }) => {
322
+ return /* @__PURE__ */ jsx8(TableCell3, { ...tableCellProps, children: chainName });
323
+ };
324
+
325
+ // src/components/wallet/table/cells/State.tsx
326
+ import { Switch, TableCell as TableCell4 } from "@mui/material";
327
+ import { useMemo as useMemo3 } from "react";
328
+ import { jsx as jsx9 } from "react/jsx-runtime";
329
+ var ConnectedWalletState = ({ connected, walletRdns, tableCellProps }) => {
330
+ const { disableWallet, enableWallet, wallets } = useEnabledWallets();
331
+ const enabled = useMemo3(() => walletRdns ? wallets[walletRdns].enabled : false, [wallets, walletRdns]);
332
+ const handleClick = (event) => {
333
+ const checked = event.target?.checked;
334
+ if (walletRdns) {
335
+ checked ? enableWallet?.(walletRdns) : disableWallet?.(walletRdns);
336
+ }
337
+ };
338
+ return /* @__PURE__ */ jsx9(TableCell4, { ...tableCellProps, children: /* @__PURE__ */ jsx9(Switch, { disabled: !connected, checked: connected && enabled, onChange: handleClick }) });
339
+ };
340
+
341
+ // src/components/wallet/table/cells/Wallet.tsx
342
+ import { TableCell as TableCell5, useTheme } from "@mui/material";
343
+ import { ConstrainedImage as ConstrainedImage3 } from "@xylabs/react-crypto";
344
+ import { FlexRow as FlexRow4 } from "@xylabs/react-flexbox";
345
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
346
+ var ConnectedWalletsWalletTableCell = ({ icon, walletName, tableCellProps }) => {
347
+ const theme = useTheme();
348
+ return /* @__PURE__ */ jsx10(TableCell5, { ...tableCellProps, children: /* @__PURE__ */ jsxs7(FlexRow4, { gap: 2, justifyContent: "start", children: [
349
+ /* @__PURE__ */ jsx10(ConstrainedImage3, { constrainedValue: theme.spacing(4), src: icon }),
350
+ walletName
351
+ ] }) });
352
+ };
353
+
354
+ // src/components/wallet/table/cells/Cells.tsx
355
+ var ConnectedWalletTableCells = [
356
+ ConnectedWalletsWalletTableCell,
357
+ ConnectedWalletsChainNameTableCell,
358
+ ConnectedWalletsAccountsTableCell,
359
+ ConnectedWalletsActionsTableCell,
360
+ ConnectedWalletState
361
+ ];
362
+
363
+ // src/components/wallet/table/ConnectedWalletsTable.tsx
364
+ import { Table, TableBody, TableCell as TableCell6, TableHead, TableRow as TableRow2 } from "@mui/material";
365
+ import { useState as useState3 } from "react";
366
+
367
+ // src/components/wallet/lib/TableHeadData.ts
368
+ var WalletsTableHeadCells = [
369
+ {
370
+ disablePadding: false,
371
+ id: "wallet",
372
+ label: "Wallet",
373
+ numeric: false,
374
+ showOnMobile: true
375
+ },
376
+ {
377
+ disablePadding: false,
378
+ id: "chain",
379
+ label: "Chain",
380
+ numeric: false,
381
+ showOnMobile: true
382
+ },
383
+ {
384
+ disablePadding: false,
385
+ id: "accounts",
386
+ label: "Accounts",
387
+ numeric: true,
388
+ showOnMobile: true
389
+ },
390
+ {
391
+ disablePadding: false,
392
+ id: "actions",
393
+ label: "Actions",
394
+ numeric: false,
395
+ showOnMobile: true
396
+ },
397
+ {
398
+ disablePadding: false,
399
+ id: "enabled",
400
+ label: "Enabled",
401
+ numeric: false,
402
+ showOnMobile: true
403
+ }
404
+ ];
405
+
406
+ // src/components/wallet/table/ConnectedWalletsTableRow.tsx
407
+ import { TableRow } from "@mui/material";
408
+ import { useEthWallet } from "@xylabs/react-crypto";
409
+ import { useCallback, useMemo as useMemo4 } from "react";
410
+ import { jsx as jsx11 } from "react/jsx-runtime";
411
+ var WalletConnectionsTableRow = ({
412
+ ignoreConnectDialog,
413
+ onConnectClick,
414
+ onRevoke,
415
+ wallet,
416
+ ...props
417
+ }) => {
418
+ const { currentAccount: currentAccountFromWallet, additionalAccounts, chainName, connectWallet, providerInfo } = useEthWallet(wallet);
419
+ const currentAccount = currentAccountFromWallet?.toString() ? [currentAccountFromWallet.toString()] : [];
420
+ const totalAccounts = (additionalAccounts?.length ?? 0) + (currentAccount?.length ?? 0);
421
+ const connected = !!(currentAccount?.length ?? 0 > 0);
422
+ const { icon, name, rdns } = useMemo4(() => providerInfo ?? { icon: void 0, name: void 0, rdns: void 0 }, [providerInfo]);
423
+ const activeProvider = useMemo4(
424
+ () => ({
425
+ connectWallet,
426
+ icon,
427
+ providerName: name
428
+ }),
429
+ [connectWallet, icon, name]
430
+ );
431
+ const onRevokeLocal = useCallback(() => {
432
+ onRevoke?.(activeProvider);
433
+ }, [activeProvider, onRevoke]);
434
+ const onConnectLocal = useCallback(async () => {
435
+ if (ignoreConnectDialog) {
436
+ await connectWallet?.();
437
+ } else {
438
+ onConnectClick?.(activeProvider);
439
+ }
440
+ }, [activeProvider, connectWallet, ignoreConnectDialog, onConnectClick]);
441
+ return /* @__PURE__ */ jsx11(TableRow, { ...props, children: Object.values(ConnectedWalletTableCells).map((Cell, index) => /* @__PURE__ */ jsx11(
442
+ Cell,
443
+ {
444
+ additionalAccounts,
445
+ chainName,
446
+ connected,
447
+ currentAccount,
448
+ icon,
449
+ onConnect: onConnectLocal,
450
+ onRevoke: onRevokeLocal,
451
+ totalAccounts,
452
+ walletName: name,
453
+ walletRdns: rdns
454
+ },
455
+ index
456
+ )) });
457
+ };
458
+
459
+ // src/components/wallet/table/hooks/useActiveProviderDialogState.tsx
460
+ import { useState as useState2 } from "react";
461
+ var useActiveProviderDialogState = (setActiveProvider) => {
462
+ const [show, setShow] = useState2(false);
463
+ const onSetActiveProvider = (activeProvider) => {
464
+ setShow(true);
465
+ setActiveProvider(activeProvider);
466
+ };
467
+ const onClose = () => {
468
+ setShow(false);
469
+ setActiveProvider({});
470
+ };
471
+ return [show, onSetActiveProvider, onClose];
472
+ };
473
+
474
+ // src/components/wallet/table/ConnectedWalletsTable.tsx
475
+ import { Fragment, jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
476
+ var ConnectedWalletsTable = ({ ignoreConnectDialog, onIgnoreConnectDialog, wallets, ...props }) => {
477
+ const [activeProvider, setActiveProvider] = useState3();
478
+ const [showConnect, onSetActiveProviderConnect, onConnectClose] = useActiveProviderDialogState(setActiveProvider);
479
+ const [showRevoke, onSetActiveProviderRevoke, onRevokeClose] = useActiveProviderDialogState(setActiveProvider);
480
+ return /* @__PURE__ */ jsxs8(Fragment, { children: [
481
+ /* @__PURE__ */ jsxs8(Table, { ...props, children: [
482
+ /* @__PURE__ */ jsx12(TableHead, { children: /* @__PURE__ */ jsx12(TableRow2, { children: WalletsTableHeadCells.map(({ disablePadding, id, label, align, width }) => /* @__PURE__ */ jsx12(TableCell6, { align, padding: disablePadding ? "none" : "normal", width: width ?? "auto", children: label }, id)) }) }),
483
+ /* @__PURE__ */ jsx12(TableBody, { children: (wallets ?? []).map((wallet) => /* @__PURE__ */ jsx12(
484
+ WalletConnectionsTableRow,
485
+ {
486
+ ignoreConnectDialog,
487
+ onConnectClick: onSetActiveProviderConnect,
488
+ onRevoke: onSetActiveProviderRevoke,
489
+ wallet
490
+ },
491
+ wallet.providerInfo?.rdns
492
+ )) })
493
+ ] }),
494
+ /* @__PURE__ */ jsx12(RevokeWalletConnectionDialog, { open: showRevoke, onClose: onRevokeClose, activeProvider }),
495
+ /* @__PURE__ */ jsx12(
496
+ ConnectWalletDialog,
497
+ {
498
+ activeProvider,
499
+ onClose: onConnectClose,
500
+ open: showConnect,
501
+ onIgnoreConnectDialog
502
+ }
503
+ )
504
+ ] });
505
+ };
506
+
507
+ // src/components/ConnectedAccountsFlexbox.tsx
508
+ import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
509
+ var ConnectedAccountsFlexbox = forwardRef(
510
+ ({ ignoreConnectDialog, onIgnoreConnectDialog, ...props }, ref) => {
511
+ const theme = useTheme2();
512
+ const { totalConnectedAccounts, sortedWallets } = useDetectedWallets();
513
+ return /* @__PURE__ */ jsxs9(FlexCol3, { alignItems: "stretch", justifyContent: "start", gap: 2, ref, ...props, children: [
514
+ /* @__PURE__ */ jsxs9(FlexCol3, { alignItems: "start", children: [
515
+ /* @__PURE__ */ jsx13(Typography6, { variant: "h2", sx: { mb: 0.5 }, children: "Detected Web3 Wallets" }),
516
+ totalConnectedAccounts ? /* @__PURE__ */ jsxs9(Typography6, { variant: "subtitle1", color: theme.palette.secondary.main, sx: { opacity: 0.5 }, children: [
517
+ "Total Connected Accounts: ",
518
+ totalConnectedAccounts
519
+ ] }) : null
520
+ ] }),
521
+ /* @__PURE__ */ jsx13(ConnectedWalletsTable, { wallets: sortedWallets, ignoreConnectDialog, onIgnoreConnectDialog })
522
+ ] });
523
+ }
524
+ );
525
+ ConnectedAccountsFlexbox.displayName = "ConnectedAccountsFlexbox";
526
+ export {
527
+ CheckboxFormControl,
528
+ ConnectWalletDialog,
529
+ ConnectedAccountsFlexbox,
530
+ ConnectedWalletState,
531
+ ConnectedWalletTableCells,
532
+ ConnectedWalletsAccountsTableCell,
533
+ ConnectedWalletsActionsTableCell,
534
+ ConnectedWalletsChainNameTableCell,
535
+ ConnectedWalletsTable,
536
+ ConnectedWalletsWalletTableCell,
537
+ EnabledEthWalletConnections,
538
+ RevokeWalletConnectionDialog,
539
+ WalletConnectionsTableRow,
540
+ useActiveProviderDialogState,
541
+ useDetectedWallets,
542
+ useEnabledWallets,
543
+ useEnabledWalletsInner
544
+ };
545
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/classes/EnabledWallets.ts","../../src/components/ConnectedAccountsFlexbox.tsx","../../src/hooks/useDetectWallets.tsx","../../src/hooks/useEnabledWallets.tsx","../../src/components/wallet/dialogs/connect/CheckboxFormControl.tsx","../../src/components/wallet/dialogs/connect/Dialog.tsx","../../src/components/wallet/dialogs/connect/LinkedProvidersFlexbox.tsx","../../src/img/index.ts","../../src/components/wallet/dialogs/connect/Permissions.tsx","../../src/components/wallet/dialogs/revoke/Dialog.tsx","../../src/components/wallet/table/cells/Accounts.tsx","../../src/components/wallet/table/cells/Actions.tsx","../../src/components/wallet/table/cells/ChainName.tsx","../../src/components/wallet/table/cells/State.tsx","../../src/components/wallet/table/cells/Wallet.tsx","../../src/components/wallet/table/cells/Cells.tsx","../../src/components/wallet/table/ConnectedWalletsTable.tsx","../../src/components/wallet/lib/TableHeadData.ts","../../src/components/wallet/table/ConnectedWalletsTableRow.tsx","../../src/components/wallet/table/hooks/useActiveProviderDialogState.tsx"],"sourcesContent":["import { DiscoveredWallets, EIP6963Connector } from '@xylabs/react-crypto'\n\nconst DEFAULT_LOCAL_STORAGE_KEY = 'XYO|EnabledWallets'\n\n/**\n * State for storing wallets and their enabled/disabled status by name\n */\nexport interface EnabledEthWalletsState {\n [rdns: string]: {\n enabled: boolean\n wallet: EIP6963Connector\n }\n}\n\n/**\n * State for storing only enabled/disabled status of a wallet by name\n */\nexport interface EnabledWalletsSavedState {\n [rdns: string]: boolean\n}\n\nexport type WalletListener = () => void\n\nexport class EnabledEthWalletConnections {\n // control whether or not enabled/disabled preferences are persisted (i.e. in localStorage)\n persistPreferences = true\n\n // Map of wallet names and their enabled/disabled state\n private enabledWallets: EnabledWalletsSavedState = {}\n\n // Map of wallet names, their enabled/disabled state, and their wallet class\n private ethWalletsState: EnabledEthWalletsState = {}\n\n // list of listeners that want to be notified on wallet changes\n private listeners: WalletListener[] = []\n\n // key to use in localStorage when persisting preferences\n private localStorageKey = DEFAULT_LOCAL_STORAGE_KEY\n\n constructor(localStorageKey = DEFAULT_LOCAL_STORAGE_KEY) {\n this.localStorageKey = localStorageKey\n this.reviveSettings()\n }\n\n get wallets() {\n return this.ethWalletsState\n }\n\n disableWallet(rdns: string) {\n this.toggleEnabledWallet(rdns, false)\n }\n\n enableWallet(rdns: string) {\n this.toggleEnabledWallet(rdns, true)\n }\n\n /**\n * Given a new set of wallets, set their enabled state based off previous preferences\n */\n resetWallets(wallets: DiscoveredWallets) {\n const newWallets: EnabledEthWalletsState = {}\n\n const addWallet = ([walletName, wallet]: [string, EIP6963Connector]) => {\n newWallets[walletName] = {\n // preserve the existing enabled state\n enabled: walletName in this.enabledWallets ? this.enabledWallets[walletName] : true,\n wallet,\n }\n }\n\n // eslint-disable-next-line unicorn/no-array-for-each\n Object.entries(wallets).forEach(addWallet.bind(this))\n this.ethWalletsState = newWallets\n this.emitChange()\n }\n\n subscribe(listener: WalletListener) {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((existingListener) => existingListener !== listener)\n }\n }\n\n toggleEnabledWallet(rdns: string, enabled: boolean) {\n if (rdns && this.ethWalletsState[rdns]) {\n this.ethWalletsState[rdns].enabled = enabled\n this.ethWalletsState = { ...this.ethWalletsState }\n this.emitChange()\n }\n }\n\n private emitChange() {\n for (const listener of this.listeners) {\n listener()\n }\n\n this.persistSettings()\n }\n\n private isPersistance(method: () => void) {\n if (this.persistPreferences) {\n method()\n }\n }\n\n private persistSettings() {\n this.isPersistance(() => {\n // convert wallet enabled selections into serializable state\n // eslint-disable-next-line unicorn/no-array-reduce\n const enabledWallets = Object.entries(this.ethWalletsState).reduce((acc, [rdns, { enabled }]) => {\n acc[rdns] = enabled\n return acc\n }, {} as EnabledWalletsSavedState)\n\n localStorage.setItem(this.localStorageKey, JSON.stringify(enabledWallets))\n })\n }\n\n private reviveSettings() {\n this.isPersistance(() => {\n const existingEntries = localStorage.getItem(this.localStorageKey)\n try {\n const entries = existingEntries ? JSON.parse(existingEntries) : {}\n this.enabledWallets = entries\n } catch (e) {\n console.warn(`Error parsing saved enabled wallet entries: ${(e as Error).message}`)\n }\n })\n }\n}\n","import { Typography, useTheme } from '@mui/material'\nimport { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { forwardRef } from 'react'\n\nimport { useDetectedWallets } from '../hooks'\nimport { ConnectedWalletsTable } from './wallet'\n\nexport interface ConnectedAccountsFlexboxProps extends FlexBoxProps {\n ignoreConnectDialog?: boolean\n // A callback that is invoked when the option to ignore the dialog is checked\n onIgnoreConnectDialog?: (checked: boolean) => void\n}\n\nexport const ConnectedAccountsFlexbox = forwardRef<HTMLDivElement, ConnectedAccountsFlexboxProps>(\n ({ ignoreConnectDialog, onIgnoreConnectDialog, ...props }, ref) => {\n const theme = useTheme()\n\n const { totalConnectedAccounts, sortedWallets } = useDetectedWallets()\n\n return (\n <FlexCol alignItems=\"stretch\" justifyContent=\"start\" gap={2} ref={ref} {...props}>\n <FlexCol alignItems=\"start\">\n <Typography variant={'h2'} sx={{ mb: 0.5 }}>\n Detected Web3 Wallets\n </Typography>\n {totalConnectedAccounts ?\n <Typography variant={'subtitle1'} color={theme.palette.secondary.main} sx={{ opacity: 0.5 }}>\n Total Connected Accounts: {totalConnectedAccounts}\n </Typography>\n : null}\n </FlexCol>\n <ConnectedWalletsTable wallets={sortedWallets} ignoreConnectDialog={ignoreConnectDialog} onIgnoreConnectDialog={onIgnoreConnectDialog} />\n </FlexCol>\n )\n },\n)\n\nConnectedAccountsFlexbox.displayName = 'ConnectedAccountsFlexbox'\n","import { AccountsChangedEventName, DiscoveredWallets, EIP6963Connector, useWalletDiscovery } from '@xylabs/react-crypto'\nimport { useEffect, useMemo, useState } from 'react'\n\nconst sortWallets = (wallets: DiscoveredWallets) =>\n // eslint-disable-next-line unicorn/no-array-reduce\n Object.values(wallets).reduce((acc, wallet) => {\n wallet.allowedAccounts.length > 0 ? acc.unshift(wallet) : acc.push(wallet)\n return acc\n }, [] as EIP6963Connector[])\n\nexport const useDetectedWallets = () => {\n const wallets = useWalletDiscovery()\n const [refresh, setRefresh] = useState(0)\n const [sortedWallets, setSortedWallets] = useState<EIP6963Connector[]>([])\n\n useEffect(() => {\n setSortedWallets(sortWallets(wallets))\n }, [wallets, refresh])\n\n /**\n * Rely on custom events from the wallet base class to know when accounts are changed.\n * This approach prevents the need to loop through all wallets and set up individual listeners.\n */\n useEffect(() => {\n const listener: (event: CustomEventInit) => void = () => {\n setRefresh((refresh) => refresh + 1)\n }\n window.addEventListener(AccountsChangedEventName, listener)\n\n return () => {\n window.removeEventListener(AccountsChangedEventName, listener)\n }\n }, [wallets])\n\n const totalConnectedAccounts = useMemo(\n () => Object.values(sortedWallets).reduce((acc, wallet) => acc + wallet.allowedAccounts.length, 0),\n [sortedWallets],\n )\n\n return { sortedWallets, totalConnectedAccounts }\n}\n","import { useWalletDiscovery } from '@xylabs/react-crypto'\nimport { useMemo, useSyncExternalStore } from 'react'\n\nimport { EnabledEthWalletConnections, EnabledEthWalletsState, EnabledWalletsSavedState } from '../classes'\n\nlet enabledEthWallets: EnabledEthWalletConnections | undefined\n\n/**\n * Takes the discovered wallets and tracks their enabled state globally\n */\nexport const useEnabledWalletsInner = (enabledWalletsRdns?: EnabledWalletsSavedState) => {\n const discoveredWallets = useWalletDiscovery()\n\n // when we discover new wallets, build their enabled state\n const wallets = useMemo(() => {\n if (enabledEthWallets === undefined) enabledEthWallets = new EnabledEthWalletConnections()\n enabledEthWallets.resetWallets(discoveredWallets)\n for (const [rdns, enabled] of Object.entries(enabledWalletsRdns ?? {})) enabledEthWallets?.toggleEnabledWallet(rdns, enabled)\n return enabledEthWallets\n }, [discoveredWallets, enabledWalletsRdns])\n\n return useSyncExternalStore(wallets.subscribe.bind(wallets), () => wallets.wallets)\n}\n\n/**\n * Expose an interface for enabling and disabling wallets\n */\nexport const useEnabledWallets = (enabledWalletsRdns?: EnabledWalletsSavedState) => {\n const wallets = useEnabledWalletsInner(enabledWalletsRdns)\n const enabledWallets = useMemo(\n () =>\n // eslint-disable-next-line unicorn/no-array-reduce\n Object.entries(wallets).reduce((acc, [walletName, wallet]) => {\n if (wallet.enabled) acc[walletName] = wallet\n return acc\n }, {} as EnabledEthWalletsState),\n [wallets],\n )\n\n return {\n disableWallet: enabledEthWallets?.disableWallet.bind(enabledEthWallets),\n enableWallet: enabledEthWallets?.enableWallet.bind(enabledEthWallets),\n enabledWallets,\n wallets,\n }\n}\n","import { Checkbox, FormControl, FormControlProps, FormLabel } from '@mui/material'\n\nexport interface CheckboxFormControlProps extends FormControlProps {\n onCheckChanged?: (checked: boolean) => void\n}\n\nexport const CheckboxFormControl: React.FC<CheckboxFormControlProps> = ({ onCheckChanged, ...props }) => {\n return (\n <FormControl {...props}>\n <FormLabel>\n <Checkbox onChange={(_, checked) => onCheckChanged?.(checked)} />\n Do not show this again.\n </FormLabel>\n </FormControl>\n )\n}\n","import { Button, Dialog, DialogActions, DialogContent, DialogProps, DialogTitle } from '@mui/material'\n\nimport { ActiveProvider } from '../../lib'\nimport { CheckboxFormControl } from './CheckboxFormControl'\nimport { LinkedProvidersFlexbox } from './LinkedProvidersFlexbox'\nimport { WalletPermissionsFlexbox } from './Permissions'\n\nexport interface ConnectWalletDialogProps extends DialogProps {\n activeProvider?: ActiveProvider\n onIgnoreConnectDialog?: (checked: boolean) => void\n}\n\nexport const ConnectWalletDialog: React.FC<ConnectWalletDialogProps> = ({ activeProvider, onIgnoreConnectDialog, ...props }) => {\n const { icon, providerName } = activeProvider ?? {}\n\n const onConnect = async () => {\n try {\n await activeProvider?.connectWallet?.()\n props.onClose?.({}, 'escapeKeyDown')\n } catch (e) {\n console.warn(`Error connecting to wallet: ${(e as Error).message}`)\n }\n }\n\n return (\n <Dialog PaperProps={{ sx: { display: 'flex', gap: 4 } }} {...props}>\n <DialogTitle sx={{ textAlign: 'center' }}>XYO Wants To Access The Blockchain on Your Behalf</DialogTitle>\n <DialogContent sx={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n <LinkedProvidersFlexbox icon={icon} providerName={providerName} />\n <WalletPermissionsFlexbox />\n <CheckboxFormControl onCheckChanged={onIgnoreConnectDialog} />\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={() => props.onClose?.({}, 'escapeKeyDown')}>\n Close\n </Button>\n <Button variant=\"contained\" onClick={onConnect}>\n Connect\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import { SyncAlt } from '@mui/icons-material'\nimport { Typography } from '@mui/material'\nimport { ConstrainedImage } from '@xylabs/react-crypto'\nimport { FlexBoxProps, FlexCol, FlexRow } from '@xylabs/react-flexbox'\n\nimport { xyoColorLogo } from '../../../../img'\n\nexport interface LinkedProvidersFlexboxProps extends FlexBoxProps {\n icon?: string\n providerName?: string\n}\n\nexport const LinkedProvidersFlexbox: React.FC<LinkedProvidersFlexboxProps> = ({ icon, providerName, ...props }) => {\n return (\n <FlexRow gap={4} justifyContent=\"space-evenly\" {...props}>\n <FlexCol gap={0.5}>\n <img alt=\"XYO Logo\" src={xyoColorLogo} style={{ height: '48px' }} />\n <Typography variant=\"subtitle1\">XYO App</Typography>\n </FlexCol>\n <SyncAlt fontSize={'large'} />\n <FlexCol gap={0.5}>\n <ConstrainedImage constrainedValue={'48px'} src={icon} alt={providerName} style={{ height: '48px', maxWidth: '48px' }} />\n <Typography variant=\"subtitle1\">{providerName}</Typography>\n </FlexCol>\n </FlexRow>\n )\n}\n","export { default as xyoColorLogo } from './xyo-color-logo.svg'\nexport { default as xyoColorLogoText } from './xyo-color-logo-text-only.svg'\n","import { Link, Typography } from '@mui/material'\nimport { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\n\nexport interface WalletPermissionsFlexBoxProps extends FlexBoxProps {}\n\nexport const WalletPermissionsFlexbox: React.FC<WalletPermissionsFlexBoxProps> = (props) => {\n return (\n <FlexCol gap={4} {...props}>\n <Typography fontWeight=\"bold\" sx={{ textAlign: 'center' }}>\n This will allow XYO to:\n </Typography>\n <ul>\n <li>View your wallet account(s) and address(es)</li>\n <li>Read-only access to browse the public blockchain(s) you select</li>\n </ul>\n <Typography variant=\"subtitle1\" sx={{ textAlign: 'center' }}>\n You control what accounts to share and what blockchains to view. You can see or revoke access via your wallet&apos;s settings at anytime. View\n more on XYO&apos;s sovereign data philosophy{' '}\n <Link\n href=\"https://cointelegraph.com/innovation-circle/decentralization-and-sovereignty-debunking-our-approach-to-digital-sovereignty\"\n sx={{ fontWeight: 'bold' }}\n target=\"_blank\"\n >\n here\n </Link>\n .\n </Typography>\n </FlexCol>\n )\n}\n","import { Button, Dialog, DialogActions, DialogContent, DialogProps, DialogTitle, Typography } from '@mui/material'\nimport { ConstrainedImage } from '@xylabs/react-crypto'\nimport { FlexRow } from '@xylabs/react-flexbox'\n\nimport { ActiveProvider } from '../../lib'\n\nexport interface RevokeWalletConnectionDialogProps extends DialogProps {\n activeProvider?: ActiveProvider\n}\n\nexport const RevokeWalletConnectionDialog: React.FC<RevokeWalletConnectionDialogProps> = ({ activeProvider, ...props }) => {\n return (\n <Dialog {...props}>\n <FlexRow gap={2} justifyContent=\"start\" pl={2}>\n <ConstrainedImage src={activeProvider?.icon} constrainedValue={'24px'} />\n <DialogTitle sx={{ pl: 0 }}>Revoke {activeProvider?.providerName} Access</DialogTitle>\n </FlexRow>\n <DialogContent>\n <Typography>\n Revoking access to your wallet must be done from the wallet&apos;s browser extension. Wallets grant access to specific domains please\n consult {activeProvider?.providerName}&apos;s documentation on how to revoke access to this website:\n </Typography>\n <Typography>{window.location.origin}</Typography>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => props.onClose?.({}, 'escapeKeyDown')}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import { TableCell, Tooltip, Typography } from '@mui/material'\n\nimport { ConnectedWalletTableCellProps } from './lib'\n\nexport const ConnectedWalletsAccountsTableCell: React.FC<ConnectedWalletTableCellProps> = ({\n additionalAccounts,\n currentAccount,\n totalAccounts,\n tableCellProps,\n}) => {\n return (\n <TableCell {...tableCellProps}>\n <Tooltip\n sx={{ cursor: totalAccounts > 0 ? 'pointer' : 'auto' }}\n title={[...(currentAccount ?? []), ...(additionalAccounts ?? [])].map((address, index) => (\n <p key={index}>{address}</p>\n ))}\n >\n <Typography>{totalAccounts}</Typography>\n </Tooltip>\n </TableCell>\n )\n}\n","import { Check, InfoOutlined } from '@mui/icons-material'\nimport { Button, IconButton, TableCell, Typography } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\n\nimport { ConnectedWalletTableCellProps } from './lib'\n\nexport const ConnectedWalletsActionsTableCell: React.FC<ConnectedWalletTableCellProps> = ({ connected, onConnect, onRevoke, tableCellProps }) => {\n return (\n <TableCell {...tableCellProps}>\n <FlexRow gap={2} justifyContent=\"start\">\n {connected ?\n <Typography sx={{ display: 'inline-flex', gap: 0.5 }}>\n <Check />\n Connected\n </Typography>\n : <Button variant={'contained'} onClick={onConnect}>\n Connect\n </Button>\n }\n {connected ?\n <IconButton onClick={onRevoke}>\n <InfoOutlined />\n </IconButton>\n : null}\n </FlexRow>\n </TableCell>\n )\n}\n","import { TableCell } from '@mui/material'\n\nimport { ConnectedWalletTableCellProps } from './lib'\n\nexport const ConnectedWalletsChainNameTableCell: React.FC<ConnectedWalletTableCellProps> = ({ chainName, tableCellProps }) => {\n return <TableCell {...tableCellProps}>{chainName}</TableCell>\n}\n","import { Switch, TableCell } from '@mui/material'\nimport { ChangeEvent, useMemo } from 'react'\n\nimport { useEnabledWallets } from '../../../../hooks'\nimport { ConnectedWalletTableCellProps } from './lib'\n\nexport const ConnectedWalletState: React.FC<ConnectedWalletTableCellProps> = ({ connected, walletRdns, tableCellProps }) => {\n const { disableWallet, enableWallet, wallets } = useEnabledWallets()\n\n const enabled = useMemo(() => (walletRdns ? wallets[walletRdns].enabled : false), [wallets, walletRdns])\n\n const handleClick = (event: ChangeEvent<HTMLInputElement>) => {\n const checked = event.target?.checked\n if (walletRdns) {\n checked ? enableWallet?.(walletRdns) : disableWallet?.(walletRdns)\n }\n }\n return (\n <TableCell {...tableCellProps}>\n <Switch disabled={!connected} checked={connected && enabled} onChange={handleClick} />\n </TableCell>\n )\n}\n","import { TableCell, useTheme } from '@mui/material'\nimport { ConstrainedImage } from '@xylabs/react-crypto'\nimport { FlexRow } from '@xylabs/react-flexbox'\n\nimport { ConnectedWalletTableCellProps } from './lib'\n\nexport const ConnectedWalletsWalletTableCell: React.FC<ConnectedWalletTableCellProps> = ({ icon, walletName, tableCellProps }) => {\n const theme = useTheme()\n\n return (\n <TableCell {...tableCellProps}>\n <FlexRow gap={2} justifyContent=\"start\">\n <ConstrainedImage constrainedValue={theme.spacing(4)} src={icon} />\n {walletName}\n </FlexRow>\n </TableCell>\n )\n}\n","import { ComponentType } from 'react'\n\nimport { ConnectedWalletsAccountsTableCell } from './Accounts'\nimport { ConnectedWalletsActionsTableCell } from './Actions'\nimport { ConnectedWalletsChainNameTableCell } from './ChainName'\nimport { ConnectedWalletTableCellProps } from './lib'\nimport { ConnectedWalletState } from './State'\nimport { ConnectedWalletsWalletTableCell } from './Wallet'\n\nexport const ConnectedWalletTableCells: ComponentType<ConnectedWalletTableCellProps>[] = [\n ConnectedWalletsWalletTableCell,\n ConnectedWalletsChainNameTableCell,\n ConnectedWalletsAccountsTableCell,\n ConnectedWalletsActionsTableCell,\n ConnectedWalletState,\n]\n","import { Table, TableBody, TableCell, TableHead, TableProps, TableRow } from '@mui/material'\nimport { EIP6963Connector } from '@xylabs/react-crypto'\nimport { useState } from 'react'\n\nimport { ConnectWalletDialog, RevokeWalletConnectionDialog } from '../dialogs'\nimport { ActiveProvider, WalletsTableHeadCells } from '../lib'\nimport { WalletConnectionsTableRow } from './ConnectedWalletsTableRow'\nimport { useActiveProviderDialogState } from './hooks'\n\nexport interface ConnectedWalletsTableProps extends TableProps {\n ignoreConnectDialog?: boolean\n onIgnoreConnectDialog?: (checked: boolean) => void\n wallets?: EIP6963Connector[]\n}\n\nexport const ConnectedWalletsTable: React.FC<ConnectedWalletsTableProps> = ({ ignoreConnectDialog, onIgnoreConnectDialog, wallets, ...props }) => {\n const [activeProvider, setActiveProvider] = useState<ActiveProvider>()\n const [showConnect, onSetActiveProviderConnect, onConnectClose] = useActiveProviderDialogState(setActiveProvider)\n const [showRevoke, onSetActiveProviderRevoke, onRevokeClose] = useActiveProviderDialogState(setActiveProvider)\n\n return (\n <>\n <Table {...props}>\n <TableHead>\n <TableRow>\n {WalletsTableHeadCells.map(({ disablePadding, id, label, align, width }) => (\n <TableCell align={align} key={id} padding={disablePadding ? 'none' : 'normal'} width={width ?? 'auto'}>\n {label}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {(wallets ?? []).map((wallet) => (\n <WalletConnectionsTableRow\n ignoreConnectDialog={ignoreConnectDialog}\n key={wallet.providerInfo?.rdns}\n onConnectClick={onSetActiveProviderConnect}\n onRevoke={onSetActiveProviderRevoke}\n wallet={wallet}\n />\n ))}\n </TableBody>\n </Table>\n <RevokeWalletConnectionDialog open={showRevoke} onClose={onRevokeClose} activeProvider={activeProvider} />\n <ConnectWalletDialog\n activeProvider={activeProvider}\n onClose={onConnectClose}\n open={showConnect}\n onIgnoreConnectDialog={onIgnoreConnectDialog}\n />\n </>\n )\n}\n","import { TableHeadCell } from '@xyo-network/react-table'\n\nexport const WalletsTableHeadCells: TableHeadCell[] = [\n {\n disablePadding: false,\n id: 'wallet',\n label: 'Wallet',\n numeric: false,\n showOnMobile: true,\n },\n {\n disablePadding: false,\n id: 'chain',\n label: 'Chain',\n numeric: false,\n showOnMobile: true,\n },\n {\n disablePadding: false,\n id: 'accounts',\n label: 'Accounts',\n numeric: true,\n showOnMobile: true,\n },\n {\n disablePadding: false,\n id: 'actions',\n label: 'Actions',\n numeric: false,\n showOnMobile: true,\n },\n {\n disablePadding: false,\n id: 'enabled',\n label: 'Enabled',\n numeric: false,\n showOnMobile: true,\n },\n]\n","import { TableRow, TableRowProps } from '@mui/material'\nimport { EthWalletConnectorBase, useEthWallet } from '@xylabs/react-crypto'\nimport { useCallback, useMemo } from 'react'\n\nimport { ActiveProvider } from '../lib'\nimport { ConnectedWalletTableCells } from './cells'\n\nexport interface WalletConnectionsTableRowProps extends TableRowProps {\n ignoreConnectDialog?: boolean\n onConnectClick?: (activeProvider: ActiveProvider) => void\n onRevoke?: (activeProvider: ActiveProvider) => void\n wallet: EthWalletConnectorBase\n}\n\nexport const WalletConnectionsTableRow: React.FC<WalletConnectionsTableRowProps> = ({\n ignoreConnectDialog,\n onConnectClick,\n onRevoke,\n wallet,\n ...props\n}) => {\n const { currentAccount: currentAccountFromWallet, additionalAccounts, chainName, connectWallet, providerInfo } = useEthWallet(wallet)\n\n const currentAccount = currentAccountFromWallet?.toString() ? [currentAccountFromWallet.toString()] : []\n const totalAccounts = (additionalAccounts?.length ?? 0) + (currentAccount?.length ?? 0)\n const connected = !!(currentAccount?.length ?? 0 > 0)\n const { icon, name, rdns } = useMemo(() => providerInfo ?? { icon: undefined, name: undefined, rdns: undefined }, [providerInfo])\n\n const activeProvider = useMemo<ActiveProvider>(\n () => ({\n connectWallet,\n icon,\n providerName: name,\n }),\n [connectWallet, icon, name],\n )\n\n const onRevokeLocal = useCallback(() => {\n onRevoke?.(activeProvider)\n }, [activeProvider, onRevoke])\n\n const onConnectLocal = useCallback(async () => {\n if (ignoreConnectDialog) {\n await connectWallet?.()\n } else {\n onConnectClick?.(activeProvider)\n }\n }, [activeProvider, connectWallet, ignoreConnectDialog, onConnectClick])\n\n return (\n <TableRow {...props}>\n {Object.values(ConnectedWalletTableCells).map((Cell, index) => (\n <Cell\n key={index}\n additionalAccounts={additionalAccounts}\n chainName={chainName}\n connected={connected}\n currentAccount={currentAccount}\n icon={icon}\n onConnect={onConnectLocal}\n onRevoke={onRevokeLocal}\n totalAccounts={totalAccounts}\n walletName={name}\n walletRdns={rdns}\n />\n ))}\n </TableRow>\n )\n}\n","import { Dispatch, SetStateAction, useState } from 'react'\n\nimport { ActiveProvider } from '../../lib'\n\nexport const useActiveProviderDialogState = (\n setActiveProvider: Dispatch<SetStateAction<ActiveProvider | undefined>>,\n): [boolean, (activeProvider: ActiveProvider) => void, () => void] => {\n const [show, setShow] = useState(false)\n const onSetActiveProvider = (activeProvider: ActiveProvider) => {\n setShow(true)\n setActiveProvider(activeProvider)\n }\n\n const onClose = () => {\n setShow(false)\n setActiveProvider({})\n }\n\n return [show, onSetActiveProvider, onClose]\n}\n"],"mappings":"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","names":["Typography","useTheme","FlexCol","refresh","useWalletDiscovery","useMemo","useWalletDiscovery","useMemo","default","jsx","jsxs","default","Typography","FlexCol","jsx","jsxs","jsx","jsxs","Button","Dialog","DialogActions","DialogContent","DialogTitle","Typography","ConstrainedImage","FlexRow","jsx","jsxs","Typography","jsx","Button","TableCell","Typography","FlexRow","jsx","jsxs","TableCell","jsx","TableCell","useMemo","jsx","useMemo","TableCell","TableCell","ConstrainedImage","FlexRow","jsx","jsxs","TableCell","TableRow","useState","useMemo","jsx","useMemo","useState","jsx","jsxs","useState","TableRow","TableCell","jsx","jsxs","useTheme","FlexCol","Typography"]}
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 238"><defs><style>.cls-1{fill:#8d8fc6;}.cls-2{fill:#579fd6;}.cls-3{fill:#f27046;}.cls-4{fill:#eb407a;}</style></defs><path class="cls-1" d="M74.5,28.33,21.29,120.5,74.5,212.67H180.94l1.76-3,51.46-89.13L180.94,28.33ZM84.65,40.54h78.83L111.65,56.93a15.85,15.85,0,0,1,2,5l59.66-18.81L185.22,101a20.12,20.12,0,0,1,5.36-.78l-10-47.91,37.87,65.53h-7.62a24.21,24.21,0,0,1,.15,2.68,23.29,23.29,0,0,1-.15,2.68h7.62l-39.1,67.75,10.92-50.13A20.57,20.57,0,0,1,185,140l-12.88,59-58.37-19.53a17.61,17.61,0,0,1-1.7,5l47.5,15.92H84.65l4-6.85A20.17,20.17,0,0,1,83.93,191L80,197.78,42.67,133.13l37,32.66a20.52,20.52,0,0,1,3.6-4L36.69,120.66,85,77.79a17.45,17.45,0,0,1-3.19-4.32l-39.46,35L80,43.22l5.56,9.69A17.51,17.51,0,0,1,90.12,50Zm28.24,31.17a16.15,16.15,0,0,1-2.68,4.64l62,35.81a19.74,19.74,0,0,1,2.83-4.54Zm-20,10.51v75.33a18,18,0,0,1,2.47-.16,17.18,17.18,0,0,1,2.89.21v-75a11.21,11.21,0,0,1-1.29,0,17.57,17.57,0,0,1-4.07-.47Zm79.34,46.63-62.08,35.81a18.45,18.45,0,0,1,2.68,4.68l62.23-36a19.68,19.68,0,0,1-2.83-4.53Z"/><path class="cls-2" d="M97,48.58a17.06,17.06,0,1,0,17,17,17.08,17.08,0,0,0-17-17Zm0,5.36a11.7,11.7,0,1,1-11.7,11.69A11.65,11.65,0,0,1,97,53.94Z"/><path class="cls-3" d="M95.37,157.39a18.73,18.73,0,1,0,18.7,18.7,18.74,18.74,0,0,0-18.7-18.7Zm0,5.31A13.4,13.4,0,1,1,82,176.09a13.37,13.37,0,0,1,13.4-13.39Z"/><path class="cls-4" d="M190.73,100.2A20.3,20.3,0,1,0,211,120.5a20.34,20.34,0,0,0-20.3-20.3Zm0,5.36a14.94,14.94,0,1,1-14.94,14.94,14.88,14.88,0,0,1,14.94-14.94Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="250 0 451 238"><defs><style>.cls-1{fill:#8d8fc6;}.cls-2{fill:#579fd6;}.cls-3{fill:#f27046;}.cls-4{fill:#eb407a;}</style></defs><path class="cls-1" d="M570,55.35a61.13,61.13,0,1,0,61.11,61.1A61.21,61.21,0,0,0,570,55.35Zm-266.4.1-8.2,8.14,53,52.91-53,52.91,8.2,8.2,52.91-53,44.77,44.77,8.14,8.2,114-114-8.14-8.14-52.91,52.91-53-52.91-8.14,8.14-44.77,44.77ZM570,66.84a49.61,49.61,0,1,1-49.61,49.61A49.54,49.54,0,0,1,570,66.84ZM409.45,71.73l44.77,44.77-44.77,44.77L364.68,116.5Z"/></svg>