@xyo-network/react-connected-accounts 2.78.0 → 2.78.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/browser/index.cjs +574 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +541 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/neutral/index.cjs +574 -1
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.js +541 -1
- package/dist/neutral/index.js.map +1 -1
- package/dist/node/index.cjs +605 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +552 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +4 -4
package/dist/node/index.cjs
CHANGED
@@ -1,2 +1,606 @@
|
|
1
|
-
"use strict";var He=Object.create;var H=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Xe=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var ze=(o,e)=>{for(var t in e)H(o,t,{get:e[t],enumerable:!0})},de=(o,e,t,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Xe(e))!_e.call(o,n)&&n!==t&&H(o,n,{get:()=>e[n],enumerable:!(l=Ke(e,n))||l.enumerable});return o};var me=(o,e,t)=>(t=o!=null?He(Ve(o)):{},de(e||!o||!o.__esModule?H(t,"default",{value:o,enumerable:!0}):t,o)),Je=o=>de(H({},"__esModule",{value:!0}),o);var Ue={};ze(Ue,{CheckboxFormControl:()=>U,ConnectWalletDialog:()=>Z,ConnectedAccountsFlexbox:()=>Be,ConnectedWalletState:()=>ne,ConnectedWalletTableCells:()=>re,ConnectedWalletsAccountsTableCell:()=>ee,ConnectedWalletsActionsTableCell:()=>oe,ConnectedWalletsChainNameTableCell:()=>te,ConnectedWalletsTable:()=>ce,ConnectedWalletsWalletTableCell:()=>ae,EnabledEthWalletConnections:()=>k,RevokeWalletConnectionDialog:()=>j,WalletConnectionsTableRow:()=>ie,useActiveProviderDialogState:()=>_,useDetectedWallets:()=>$,useEnabledWallets:()=>G,useEnabledWalletsInner:()=>ge});module.exports=Je(Ue);var Ce="XYO|EnabledWallets",k=class{persistPreferences=!0;enabledWallets={};ethWalletsState={};listeners=[];localStorageKey=Ce;constructor(e=Ce){this.localStorageKey=e,this.reviveSettings()}get wallets(){return this.ethWalletsState}disableWallet(e){this.toggleEnabledWallet(e,!1)}enableWallet(e){this.toggleEnabledWallet(e,!0)}resetWallets(e){let t={},l=([n,a])=>{t[n]={enabled:n in this.enabledWallets?this.enabledWallets[n]:!0,wallet:a}};Object.entries(e).forEach(l.bind(this)),this.ethWalletsState=t,this.emitChange()}subscribe(e){return this.listeners=[...this.listeners,e],()=>{this.listeners=this.listeners.filter(t=>t!==e)}}toggleEnabledWallet(e,t){e&&this.ethWalletsState[e]&&(this.ethWalletsState[e].enabled=t,this.ethWalletsState={...this.ethWalletsState},this.emitChange())}emitChange(){for(let e of this.listeners)e();this.persistSettings()}isPersistance(e){this.persistPreferences&&e()}persistSettings(){this.isPersistance(()=>{let e=Object.entries(this.ethWalletsState).reduce((t,[l,{enabled:n}])=>(t[l]=n,t),{});localStorage.setItem(this.localStorageKey,JSON.stringify(e))})}reviveSettings(){this.isPersistance(()=>{let e=localStorage.getItem(this.localStorageKey);try{let t=e?JSON.parse(e):{};this.enabledWallets=t}catch(t){console.warn(`Error parsing saved enabled wallet entries: ${t.message}`)}})}};var Y=require("@mui/material"),pe=require("@xylabs/react-flexbox"),Le=require("react");var R=require("@xylabs/react-crypto"),v=require("react"),$e=o=>Object.values(o).reduce((e,t)=>(t.allowedAccounts.length>0?e.unshift(t):e.push(t),e),[]),$=()=>{let o=(0,R.useWalletDiscovery)(),[e,t]=(0,v.useState)(0),[l,n]=(0,v.useState)([]);(0,v.useEffect)(()=>{n($e(o))},[o,e]),(0,v.useEffect)(()=>{let r=()=>{t(m=>m+1)};return window.addEventListener(R.AccountsChangedEventName,r),()=>{window.removeEventListener(R.AccountsChangedEventName,r)}},[o]);let a=(0,v.useMemo)(()=>Object.values(l).reduce((r,m)=>r+m.allowedAccounts.length,0),[l]);return{sortedWallets:l,totalConnectedAccounts:a}};var be=require("@xylabs/react-crypto"),I=require("react");var s,ge=o=>{let e=(0,be.useWalletDiscovery)(),t=(0,I.useMemo)(()=>{s===void 0&&(s=new k),s.resetWallets(e);for(let[l,n]of Object.entries(o??{}))s==null||s.toggleEnabledWallet(l,n);return s},[e,o]);return(0,I.useSyncExternalStore)(t.subscribe.bind(t),()=>t.wallets)},G=o=>{let e=ge(o),t=(0,I.useMemo)(()=>Object.entries(e).reduce((l,[n,a])=>(a.enabled&&(l[n]=a),l),{}),[e]);return{disableWallet:s==null?void 0:s.disableWallet.bind(s),enableWallet:s==null?void 0:s.enableWallet.bind(s),enabledWallets:t,wallets:e}};var D=require("@mui/material"),L=require("react/jsx-runtime"),U=({onCheckChanged:o,...e})=>(0,L.jsx)(D.FormControl,{...e,children:(0,L.jsxs)(D.FormLabel,{children:[(0,L.jsx)(D.Checkbox,{onChange:(t,l)=>o==null?void 0:o(l)}),"Do not show this again."]})});var b=require("@mui/material");var fe=require("@mui/icons-material"),Q=require("@mui/material"),he=require("@xylabs/react-crypto"),B=require("@xylabs/react-flexbox");var q=me(require("./xyo-color-logo-LHR2SMEM.svg"),1),Ge=me(require("./xyo-color-logo-text-only-QPAW5BSQ.svg"),1);var f=require("react/jsx-runtime"),ue=({icon:o,providerName:e,...t})=>(0,f.jsxs)(B.FlexRow,{gap:4,justifyContent:"space-evenly",...t,children:[(0,f.jsxs)(B.FlexCol,{gap:.5,children:[(0,f.jsx)("img",{alt:"XYO Logo",src:q.default,style:{height:"48px"}}),(0,f.jsx)(Q.Typography,{variant:"subtitle1",children:"XYO App"})]}),(0,f.jsx)(fe.SyncAlt,{fontSize:"large"}),(0,f.jsxs)(B.FlexCol,{gap:.5,children:[(0,f.jsx)(he.ConstrainedImage,{constrainedValue:"48px",src:o,alt:e,style:{height:"48px",maxWidth:"48px"}}),(0,f.jsx)(Q.Typography,{variant:"subtitle1",children:e})]})]});var O=require("@mui/material"),xe=require("@xylabs/react-flexbox"),u=require("react/jsx-runtime"),We=o=>(0,u.jsxs)(xe.FlexCol,{gap:4,...o,children:[(0,u.jsx)(O.Typography,{fontWeight:"bold",sx:{textAlign:"center"},children:"This will allow XYO to:"}),(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"View your wallet account(s) and address(es)"}),(0,u.jsx)("li",{children:"Read-only access to browse the public blockchain(s) you select"})]}),(0,u.jsxs)(O.Typography,{variant:"subtitle1",sx:{textAlign:"center"},children:["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"," ",(0,u.jsx)(O.Link,{href:"https://cointelegraph.com/innovation-circle/decentralization-and-sovereignty-debunking-our-approach-to-digital-sovereignty",sx:{fontWeight:"bold"},target:"_blank",children:"here"}),"."]})]});var C=require("react/jsx-runtime"),Z=({activeProvider:o,onIgnoreConnectDialog:e,...t})=>{let{icon:l,providerName:n}=o??{};return(0,C.jsxs)(b.Dialog,{PaperProps:{sx:{display:"flex",gap:4}},...t,children:[(0,C.jsx)(b.DialogTitle,{sx:{textAlign:"center"},children:"XYO Wants To Access The Blockchain on Your Behalf"}),(0,C.jsxs)(b.DialogContent,{sx:{display:"flex",flexDirection:"column",gap:4},children:[(0,C.jsx)(ue,{icon:l,providerName:n}),(0,C.jsx)(We,{}),(0,C.jsx)(U,{onCheckChanged:e})]}),(0,C.jsxs)(b.DialogActions,{children:[(0,C.jsx)(b.Button,{variant:"outlined",onClick:()=>{var r;return(r=t.onClose)==null?void 0:r.call(t,{},"escapeKeyDown")},children:"Close"}),(0,C.jsx)(b.Button,{variant:"contained",onClick:async()=>{var r,m;try{await((r=o==null?void 0:o.connectWallet)==null?void 0:r.call(o)),(m=t.onClose)==null||m.call(t,{},"escapeKeyDown")}catch(p){console.warn(`Error connecting to wallet: ${p.message}`)}},children:"Connect"})]})]})};var i=require("@mui/material"),ve=require("@xylabs/react-crypto"),Te=require("@xylabs/react-flexbox"),g=require("react/jsx-runtime"),j=({activeProvider:o,...e})=>(0,g.jsxs)(i.Dialog,{...e,children:[(0,g.jsxs)(Te.FlexRow,{gap:2,justifyContent:"start",pl:2,children:[(0,g.jsx)(ve.ConstrainedImage,{src:o==null?void 0:o.icon,constrainedValue:"24px"}),(0,g.jsxs)(i.DialogTitle,{sx:{pl:0},children:["Revoke ",o==null?void 0:o.providerName," Access"]})]}),(0,g.jsxs)(i.DialogContent,{children:[(0,g.jsxs)(i.Typography,{children:["Revoking access to your wallet must be done from the wallet's browser extension. Wallets grant access to specific domains please consult ",o==null?void 0:o.providerName,"'s documentation on how to revoke access to this website:"]}),(0,g.jsx)(i.Typography,{children:window.location.origin})]}),(0,g.jsx)(i.DialogActions,{children:(0,g.jsx)(i.Button,{variant:"contained",onClick:()=>{var t;return(t=e.onClose)==null?void 0:t.call(e,{},"escapeKeyDown")},children:"Close"})})]});var F=require("@mui/material"),N=require("react/jsx-runtime"),ee=({additionalAccounts:o,currentAccount:e,totalAccounts:t,tableCellProps:l})=>(0,N.jsx)(F.TableCell,{...l,children:(0,N.jsx)(F.Tooltip,{sx:{cursor:t>0?"pointer":"auto"},title:[...e??[],...o??[]].map((n,a)=>(0,N.jsx)("p",{children:n},a)),children:(0,N.jsx)(F.Typography,{children:t})})});var K=require("@mui/icons-material"),T=require("@mui/material"),ye=require("@xylabs/react-flexbox"),x=require("react/jsx-runtime"),oe=({connected:o,onConnect:e,onRevoke:t,tableCellProps:l})=>(0,x.jsx)(T.TableCell,{...l,children:(0,x.jsxs)(ye.FlexRow,{gap:2,justifyContent:"start",children:[o?(0,x.jsxs)(T.Typography,{sx:{display:"inline-flex",gap:.5},children:[(0,x.jsx)(K.Check,{}),"Connected"]}):(0,x.jsx)(T.Button,{variant:"contained",onClick:e,children:"Connect"}),o?(0,x.jsx)(T.IconButton,{onClick:t,children:(0,x.jsx)(K.InfoOutlined,{})}):null]})});var Pe=require("@mui/material"),we=require("react/jsx-runtime"),te=({chainName:o,tableCellProps:e})=>(0,we.jsx)(Pe.TableCell,{...e,children:o});var X=require("@mui/material"),Se=require("react");var le=require("react/jsx-runtime"),ne=({connected:o,walletRdns:e,tableCellProps:t})=>{let{disableWallet:l,enableWallet:n,wallets:a}=G(),r=(0,Se.useMemo)(()=>e?a[e].enabled:!1,[a,e]);return(0,le.jsx)(X.TableCell,{...t,children:(0,le.jsx)(X.Switch,{disabled:!o,checked:o&&r,onChange:p=>{var d;let P=(d=p.target)==null?void 0:d.checked;e&&(P?n==null||n(e):l==null||l(e))}})})};var V=require("@mui/material"),De=require("@xylabs/react-crypto"),Fe=require("@xylabs/react-flexbox"),M=require("react/jsx-runtime"),ae=({icon:o,walletName:e,tableCellProps:t})=>{let l=(0,V.useTheme)();return(0,M.jsx)(V.TableCell,{...t,children:(0,M.jsxs)(Fe.FlexRow,{gap:2,justifyContent:"start",children:[(0,M.jsx)(De.ConstrainedImage,{constrainedValue:l.spacing(4),src:o}),e]})})};var re=[ae,te,ee,oe,ne];var h=require("@mui/material"),Ie=require("react");var Ee=[{disablePadding:!1,id:"wallet",label:"Wallet",numeric:!1,showOnMobile:!0},{disablePadding:!1,id:"chain",label:"Chain",numeric:!1,showOnMobile:!0},{disablePadding:!1,id:"accounts",label:"Accounts",numeric:!0,showOnMobile:!0},{disablePadding:!1,id:"actions",label:"Actions",numeric:!1,showOnMobile:!0},{disablePadding:!1,id:"enabled",label:"Enabled",numeric:!1,showOnMobile:!0}];var Ae=require("@mui/material"),ke=require("@xylabs/react-crypto"),E=require("react");var se=require("react/jsx-runtime"),ie=({ignoreConnectDialog:o,onConnectClick:e,onRevoke:t,wallet:l,...n})=>{let{currentAccount:a,additionalAccounts:r,chainName:m,connectWallet:p,providerInfo:P}=(0,ke.useEthWallet)(l),d=a!=null&&a.toString()?[a.toString()]:[],z=((r==null?void 0:r.length)??0)+((d==null?void 0:d.length)??0),w=!!((d==null?void 0:d.length)??!1),{icon:W,name:A,rdns:J}=(0,E.useMemo)(()=>P??{icon:void 0,name:void 0,rdns:void 0},[P]),S=(0,E.useMemo)(()=>({connectWallet:p,icon:W,providerName:A}),[p,W,A]),Oe=(0,E.useCallback)(()=>{t==null||t(S)},[S,t]),Ne=(0,E.useCallback)(async()=>{o?await(p==null?void 0:p()):e==null||e(S)},[S,p,o,e]);return(0,se.jsx)(Ae.TableRow,{...n,children:Object.values(re).map((Me,Ye)=>(0,se.jsx)(Me,{additionalAccounts:r,chainName:m,connected:w,currentAccount:d,icon:W,onConnect:Ne,onRevoke:Oe,totalAccounts:z,walletName:A,walletRdns:J},Ye))})};var Re=require("react"),_=o=>{let[e,t]=(0,Re.useState)(!1);return[e,a=>{t(!0),o(a)},()=>{t(!1),o({})}]};var c=require("react/jsx-runtime"),ce=({ignoreConnectDialog:o,onIgnoreConnectDialog:e,wallets:t,...l})=>{let[n,a]=(0,Ie.useState)(),[r,m,p]=_(a),[P,d,z]=_(a);return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)(h.Table,{...l,children:[(0,c.jsx)(h.TableHead,{children:(0,c.jsx)(h.TableRow,{children:Ee.map(({disablePadding:w,id:W,label:A,align:J,width:S})=>(0,c.jsx)(h.TableCell,{align:J,padding:w?"none":"normal",width:S??"auto",children:A},W))})}),(0,c.jsx)(h.TableBody,{children:(t??[]).map(w=>{var W;return(0,c.jsx)(ie,{ignoreConnectDialog:o,onConnectClick:m,onRevoke:d,wallet:w},(W=w.providerInfo)==null?void 0:W.rdns)})})]}),(0,c.jsx)(j,{open:P,onClose:z,activeProvider:n}),(0,c.jsx)(Z,{activeProvider:n,onClose:p,open:r,onIgnoreConnectDialog:e})]})};var y=require("react/jsx-runtime"),Be=(0,Le.forwardRef)(({ignoreConnectDialog:o,onIgnoreConnectDialog:e,...t},l)=>{let n=(0,Y.useTheme)(),{totalConnectedAccounts:a,sortedWallets:r}=$();return(0,y.jsxs)(pe.FlexCol,{alignItems:"stretch",justifyContent:"start",gap:2,ref:l,...t,children:[(0,y.jsxs)(pe.FlexCol,{alignItems:"start",children:[(0,y.jsx)(Y.Typography,{variant:"h2",sx:{mb:.5},children:"Detected Web3 Wallets"}),a?(0,y.jsxs)(Y.Typography,{variant:"subtitle1",color:n.palette.secondary.main,sx:{opacity:.5},children:["Total Connected Accounts: ",a]}):null]}),(0,y.jsx)(ce,{wallets:r,ignoreConnectDialog:o,onIgnoreConnectDialog:e})]})});Be.displayName="ConnectedAccountsFlexbox";0&&(module.exports={CheckboxFormControl,ConnectWalletDialog,ConnectedAccountsFlexbox,ConnectedWalletState,ConnectedWalletTableCells,ConnectedWalletsAccountsTableCell,ConnectedWalletsActionsTableCell,ConnectedWalletsChainNameTableCell,ConnectedWalletsTable,ConnectedWalletsWalletTableCell,EnabledEthWalletConnections,RevokeWalletConnectionDialog,WalletConnectionsTableRow,useActiveProviderDialogState,useDetectedWallets,useEnabledWallets,useEnabledWalletsInner});
|
1
|
+
"use strict";
|
2
|
+
var __create = Object.create;
|
3
|
+
var __defProp = Object.defineProperty;
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
8
|
+
var __export = (target, all) => {
|
9
|
+
for (var name in all)
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
11
|
+
};
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
14
|
+
for (let key of __getOwnPropNames(from))
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
17
|
+
}
|
18
|
+
return to;
|
19
|
+
};
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
26
|
+
mod
|
27
|
+
));
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
|
+
|
30
|
+
// src/index.ts
|
31
|
+
var src_exports = {};
|
32
|
+
__export(src_exports, {
|
33
|
+
CheckboxFormControl: () => CheckboxFormControl,
|
34
|
+
ConnectWalletDialog: () => ConnectWalletDialog,
|
35
|
+
ConnectedAccountsFlexbox: () => ConnectedAccountsFlexbox,
|
36
|
+
ConnectedWalletState: () => ConnectedWalletState,
|
37
|
+
ConnectedWalletTableCells: () => ConnectedWalletTableCells,
|
38
|
+
ConnectedWalletsAccountsTableCell: () => ConnectedWalletsAccountsTableCell,
|
39
|
+
ConnectedWalletsActionsTableCell: () => ConnectedWalletsActionsTableCell,
|
40
|
+
ConnectedWalletsChainNameTableCell: () => ConnectedWalletsChainNameTableCell,
|
41
|
+
ConnectedWalletsTable: () => ConnectedWalletsTable,
|
42
|
+
ConnectedWalletsWalletTableCell: () => ConnectedWalletsWalletTableCell,
|
43
|
+
EnabledEthWalletConnections: () => EnabledEthWalletConnections,
|
44
|
+
RevokeWalletConnectionDialog: () => RevokeWalletConnectionDialog,
|
45
|
+
WalletConnectionsTableRow: () => WalletConnectionsTableRow,
|
46
|
+
useActiveProviderDialogState: () => useActiveProviderDialogState,
|
47
|
+
useDetectedWallets: () => useDetectedWallets,
|
48
|
+
useEnabledWallets: () => useEnabledWallets,
|
49
|
+
useEnabledWalletsInner: () => useEnabledWalletsInner
|
50
|
+
});
|
51
|
+
module.exports = __toCommonJS(src_exports);
|
52
|
+
|
53
|
+
// src/classes/EnabledWallets.ts
|
54
|
+
var DEFAULT_LOCAL_STORAGE_KEY = "XYO|EnabledWallets";
|
55
|
+
var EnabledEthWalletConnections = class {
|
56
|
+
// control whether or not enabled/disabled preferences are persisted (i.e. in localStorage)
|
57
|
+
persistPreferences = true;
|
58
|
+
// Map of wallet names and their enabled/disabled state
|
59
|
+
enabledWallets = {};
|
60
|
+
// Map of wallet names, their enabled/disabled state, and their wallet class
|
61
|
+
ethWalletsState = {};
|
62
|
+
// list of listeners that want to be notified on wallet changes
|
63
|
+
listeners = [];
|
64
|
+
// key to use in localStorage when persisting preferences
|
65
|
+
localStorageKey = DEFAULT_LOCAL_STORAGE_KEY;
|
66
|
+
constructor(localStorageKey = DEFAULT_LOCAL_STORAGE_KEY) {
|
67
|
+
this.localStorageKey = localStorageKey;
|
68
|
+
this.reviveSettings();
|
69
|
+
}
|
70
|
+
get wallets() {
|
71
|
+
return this.ethWalletsState;
|
72
|
+
}
|
73
|
+
disableWallet(rdns) {
|
74
|
+
this.toggleEnabledWallet(rdns, false);
|
75
|
+
}
|
76
|
+
enableWallet(rdns) {
|
77
|
+
this.toggleEnabledWallet(rdns, true);
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* Given a new set of wallets, set their enabled state based off previous preferences
|
81
|
+
*/
|
82
|
+
resetWallets(wallets) {
|
83
|
+
const newWallets = {};
|
84
|
+
const addWallet = ([walletName, wallet]) => {
|
85
|
+
newWallets[walletName] = {
|
86
|
+
// preserve the existing enabled state
|
87
|
+
enabled: walletName in this.enabledWallets ? this.enabledWallets[walletName] : true,
|
88
|
+
wallet
|
89
|
+
};
|
90
|
+
};
|
91
|
+
Object.entries(wallets).forEach(addWallet.bind(this));
|
92
|
+
this.ethWalletsState = newWallets;
|
93
|
+
this.emitChange();
|
94
|
+
}
|
95
|
+
subscribe(listener) {
|
96
|
+
this.listeners = [...this.listeners, listener];
|
97
|
+
return () => {
|
98
|
+
this.listeners = this.listeners.filter((existingListener) => existingListener !== listener);
|
99
|
+
};
|
100
|
+
}
|
101
|
+
toggleEnabledWallet(rdns, enabled) {
|
102
|
+
if (rdns && this.ethWalletsState[rdns]) {
|
103
|
+
this.ethWalletsState[rdns].enabled = enabled;
|
104
|
+
this.ethWalletsState = { ...this.ethWalletsState };
|
105
|
+
this.emitChange();
|
106
|
+
}
|
107
|
+
}
|
108
|
+
emitChange() {
|
109
|
+
for (const listener of this.listeners) {
|
110
|
+
listener();
|
111
|
+
}
|
112
|
+
this.persistSettings();
|
113
|
+
}
|
114
|
+
isPersistance(method) {
|
115
|
+
if (this.persistPreferences) {
|
116
|
+
method();
|
117
|
+
}
|
118
|
+
}
|
119
|
+
persistSettings() {
|
120
|
+
this.isPersistance(() => {
|
121
|
+
const enabledWallets = Object.entries(this.ethWalletsState).reduce((acc, [rdns, { enabled }]) => {
|
122
|
+
acc[rdns] = enabled;
|
123
|
+
return acc;
|
124
|
+
}, {});
|
125
|
+
localStorage.setItem(this.localStorageKey, JSON.stringify(enabledWallets));
|
126
|
+
});
|
127
|
+
}
|
128
|
+
reviveSettings() {
|
129
|
+
this.isPersistance(() => {
|
130
|
+
const existingEntries = localStorage.getItem(this.localStorageKey);
|
131
|
+
try {
|
132
|
+
const entries = existingEntries ? JSON.parse(existingEntries) : {};
|
133
|
+
this.enabledWallets = entries;
|
134
|
+
} catch (e) {
|
135
|
+
console.warn(`Error parsing saved enabled wallet entries: ${e.message}`);
|
136
|
+
}
|
137
|
+
});
|
138
|
+
}
|
139
|
+
};
|
140
|
+
|
141
|
+
// src/components/ConnectedAccountsFlexbox.tsx
|
142
|
+
var import_material13 = require("@mui/material");
|
143
|
+
var import_react_flexbox6 = require("@xylabs/react-flexbox");
|
144
|
+
var import_react7 = require("react");
|
145
|
+
|
146
|
+
// src/hooks/useDetectWallets.tsx
|
147
|
+
var import_react_crypto = require("@xylabs/react-crypto");
|
148
|
+
var import_react = require("react");
|
149
|
+
var sortWallets = (wallets) => (
|
150
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
151
|
+
Object.values(wallets).reduce((acc, wallet) => {
|
152
|
+
wallet.allowedAccounts.length > 0 ? acc.unshift(wallet) : acc.push(wallet);
|
153
|
+
return acc;
|
154
|
+
}, [])
|
155
|
+
);
|
156
|
+
var useDetectedWallets = () => {
|
157
|
+
const wallets = (0, import_react_crypto.useWalletDiscovery)();
|
158
|
+
const [refresh, setRefresh] = (0, import_react.useState)(0);
|
159
|
+
const [sortedWallets, setSortedWallets] = (0, import_react.useState)([]);
|
160
|
+
(0, import_react.useEffect)(() => {
|
161
|
+
setSortedWallets(sortWallets(wallets));
|
162
|
+
}, [wallets, refresh]);
|
163
|
+
(0, import_react.useEffect)(() => {
|
164
|
+
const listener = () => {
|
165
|
+
setRefresh((refresh2) => refresh2 + 1);
|
166
|
+
};
|
167
|
+
window.addEventListener(import_react_crypto.AccountsChangedEventName, listener);
|
168
|
+
return () => {
|
169
|
+
window.removeEventListener(import_react_crypto.AccountsChangedEventName, listener);
|
170
|
+
};
|
171
|
+
}, [wallets]);
|
172
|
+
const totalConnectedAccounts = (0, import_react.useMemo)(
|
173
|
+
() => Object.values(sortedWallets).reduce((acc, wallet) => acc + wallet.allowedAccounts.length, 0),
|
174
|
+
[sortedWallets]
|
175
|
+
);
|
176
|
+
return { sortedWallets, totalConnectedAccounts };
|
177
|
+
};
|
178
|
+
|
179
|
+
// src/hooks/useEnabledWallets.tsx
|
180
|
+
var import_react_crypto2 = require("@xylabs/react-crypto");
|
181
|
+
var import_react2 = require("react");
|
182
|
+
var enabledEthWallets;
|
183
|
+
var useEnabledWalletsInner = (enabledWalletsRdns) => {
|
184
|
+
const discoveredWallets = (0, import_react_crypto2.useWalletDiscovery)();
|
185
|
+
const wallets = (0, import_react2.useMemo)(() => {
|
186
|
+
if (enabledEthWallets === void 0) enabledEthWallets = new EnabledEthWalletConnections();
|
187
|
+
enabledEthWallets.resetWallets(discoveredWallets);
|
188
|
+
for (const [rdns, enabled] of Object.entries(enabledWalletsRdns ?? {})) enabledEthWallets == null ? void 0 : enabledEthWallets.toggleEnabledWallet(rdns, enabled);
|
189
|
+
return enabledEthWallets;
|
190
|
+
}, [discoveredWallets, enabledWalletsRdns]);
|
191
|
+
return (0, import_react2.useSyncExternalStore)(wallets.subscribe.bind(wallets), () => wallets.wallets);
|
192
|
+
};
|
193
|
+
var useEnabledWallets = (enabledWalletsRdns) => {
|
194
|
+
const wallets = useEnabledWalletsInner(enabledWalletsRdns);
|
195
|
+
const enabledWallets = (0, import_react2.useMemo)(
|
196
|
+
() => (
|
197
|
+
// eslint-disable-next-line unicorn/no-array-reduce
|
198
|
+
Object.entries(wallets).reduce((acc, [walletName, wallet]) => {
|
199
|
+
if (wallet.enabled) acc[walletName] = wallet;
|
200
|
+
return acc;
|
201
|
+
}, {})
|
202
|
+
),
|
203
|
+
[wallets]
|
204
|
+
);
|
205
|
+
return {
|
206
|
+
disableWallet: enabledEthWallets == null ? void 0 : enabledEthWallets.disableWallet.bind(enabledEthWallets),
|
207
|
+
enableWallet: enabledEthWallets == null ? void 0 : enabledEthWallets.enableWallet.bind(enabledEthWallets),
|
208
|
+
enabledWallets,
|
209
|
+
wallets
|
210
|
+
};
|
211
|
+
};
|
212
|
+
|
213
|
+
// src/components/wallet/dialogs/connect/CheckboxFormControl.tsx
|
214
|
+
var import_material = require("@mui/material");
|
215
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
216
|
+
var CheckboxFormControl = ({ onCheckChanged, ...props }) => {
|
217
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.FormControl, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_material.FormLabel, { children: [
|
218
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.Checkbox, { onChange: (_, checked) => onCheckChanged == null ? void 0 : onCheckChanged(checked) }),
|
219
|
+
"Do not show this again."
|
220
|
+
] }) });
|
221
|
+
};
|
222
|
+
|
223
|
+
// src/components/wallet/dialogs/connect/Dialog.tsx
|
224
|
+
var import_material4 = require("@mui/material");
|
225
|
+
|
226
|
+
// src/components/wallet/dialogs/connect/LinkedProvidersFlexbox.tsx
|
227
|
+
var import_icons_material = require("@mui/icons-material");
|
228
|
+
var import_material2 = require("@mui/material");
|
229
|
+
var import_react_crypto3 = require("@xylabs/react-crypto");
|
230
|
+
var import_react_flexbox = require("@xylabs/react-flexbox");
|
231
|
+
|
232
|
+
// src/img/index.ts
|
233
|
+
var import_xyo_color_logo = __toESM(require("./xyo-color-logo-LHR2SMEM.svg"), 1);
|
234
|
+
var import_xyo_color_logo_text_only = __toESM(require("./xyo-color-logo-text-only-QPAW5BSQ.svg"), 1);
|
235
|
+
|
236
|
+
// src/components/wallet/dialogs/connect/LinkedProvidersFlexbox.tsx
|
237
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
238
|
+
var LinkedProvidersFlexbox = ({ icon, providerName, ...props }) => {
|
239
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react_flexbox.FlexRow, { gap: 4, justifyContent: "space-evenly", ...props, children: [
|
240
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react_flexbox.FlexCol, { gap: 0.5, children: [
|
241
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("img", { alt: "XYO Logo", src: import_xyo_color_logo.default, style: { height: "48px" } }),
|
242
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.Typography, { variant: "subtitle1", children: "XYO App" })
|
243
|
+
] }),
|
244
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_icons_material.SyncAlt, { fontSize: "large" }),
|
245
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react_flexbox.FlexCol, { gap: 0.5, children: [
|
246
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_crypto3.ConstrainedImage, { constrainedValue: "48px", src: icon, alt: providerName, style: { height: "48px", maxWidth: "48px" } }),
|
247
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.Typography, { variant: "subtitle1", children: providerName })
|
248
|
+
] })
|
249
|
+
] });
|
250
|
+
};
|
251
|
+
|
252
|
+
// src/components/wallet/dialogs/connect/Permissions.tsx
|
253
|
+
var import_material3 = require("@mui/material");
|
254
|
+
var import_react_flexbox2 = require("@xylabs/react-flexbox");
|
255
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
256
|
+
var WalletPermissionsFlexbox = (props) => {
|
257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_flexbox2.FlexCol, { gap: 4, ...props, children: [
|
258
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.Typography, { fontWeight: "bold", sx: { textAlign: "center" }, children: "This will allow XYO to:" }),
|
259
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("ul", { children: [
|
260
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { children: "View your wallet account(s) and address(es)" }),
|
261
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { children: "Read-only access to browse the public blockchain(s) you select" })
|
262
|
+
] }),
|
263
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.Typography, { variant: "subtitle1", sx: { textAlign: "center" }, children: [
|
264
|
+
"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",
|
265
|
+
" ",
|
266
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
267
|
+
import_material3.Link,
|
268
|
+
{
|
269
|
+
href: "https://cointelegraph.com/innovation-circle/decentralization-and-sovereignty-debunking-our-approach-to-digital-sovereignty",
|
270
|
+
sx: { fontWeight: "bold" },
|
271
|
+
target: "_blank",
|
272
|
+
children: "here"
|
273
|
+
}
|
274
|
+
),
|
275
|
+
"."
|
276
|
+
] })
|
277
|
+
] });
|
278
|
+
};
|
279
|
+
|
280
|
+
// src/components/wallet/dialogs/connect/Dialog.tsx
|
281
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
282
|
+
var ConnectWalletDialog = ({ activeProvider, onIgnoreConnectDialog, ...props }) => {
|
283
|
+
const { icon, providerName } = activeProvider ?? {};
|
284
|
+
const onConnect = async () => {
|
285
|
+
var _a, _b;
|
286
|
+
try {
|
287
|
+
await ((_a = activeProvider == null ? void 0 : activeProvider.connectWallet) == null ? void 0 : _a.call(activeProvider));
|
288
|
+
(_b = props.onClose) == null ? void 0 : _b.call(props, {}, "escapeKeyDown");
|
289
|
+
} catch (e) {
|
290
|
+
console.warn(`Error connecting to wallet: ${e.message}`);
|
291
|
+
}
|
292
|
+
};
|
293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material4.Dialog, { PaperProps: { sx: { display: "flex", gap: 4 } }, ...props, children: [
|
294
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.DialogTitle, { sx: { textAlign: "center" }, children: "XYO Wants To Access The Blockchain on Your Behalf" }),
|
295
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material4.DialogContent, { sx: { display: "flex", flexDirection: "column", gap: 4 }, children: [
|
296
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LinkedProvidersFlexbox, { icon, providerName }),
|
297
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(WalletPermissionsFlexbox, {}),
|
298
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CheckboxFormControl, { onCheckChanged: onIgnoreConnectDialog })
|
299
|
+
] }),
|
300
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material4.DialogActions, { children: [
|
301
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Button, { variant: "outlined", onClick: () => {
|
302
|
+
var _a;
|
303
|
+
return (_a = props.onClose) == null ? void 0 : _a.call(props, {}, "escapeKeyDown");
|
304
|
+
}, children: "Close" }),
|
305
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.Button, { variant: "contained", onClick: onConnect, children: "Connect" })
|
306
|
+
] })
|
307
|
+
] });
|
308
|
+
};
|
309
|
+
|
310
|
+
// src/components/wallet/dialogs/revoke/Dialog.tsx
|
311
|
+
var import_material5 = require("@mui/material");
|
312
|
+
var import_react_crypto4 = require("@xylabs/react-crypto");
|
313
|
+
var import_react_flexbox3 = require("@xylabs/react-flexbox");
|
314
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
315
|
+
var RevokeWalletConnectionDialog = ({ activeProvider, ...props }) => {
|
316
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_material5.Dialog, { ...props, children: [
|
317
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react_flexbox3.FlexRow, { gap: 2, justifyContent: "start", pl: 2, children: [
|
318
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_crypto4.ConstrainedImage, { src: activeProvider == null ? void 0 : activeProvider.icon, constrainedValue: "24px" }),
|
319
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_material5.DialogTitle, { sx: { pl: 0 }, children: [
|
320
|
+
"Revoke ",
|
321
|
+
activeProvider == null ? void 0 : activeProvider.providerName,
|
322
|
+
" Access"
|
323
|
+
] })
|
324
|
+
] }),
|
325
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_material5.DialogContent, { children: [
|
326
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_material5.Typography, { children: [
|
327
|
+
"Revoking access to your wallet must be done from the wallet's browser extension. Wallets grant access to specific domains please consult ",
|
328
|
+
activeProvider == null ? void 0 : activeProvider.providerName,
|
329
|
+
"'s documentation on how to revoke access to this website:"
|
330
|
+
] }),
|
331
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material5.Typography, { children: window.location.origin })
|
332
|
+
] }),
|
333
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material5.DialogActions, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_material5.Button, { variant: "contained", onClick: () => {
|
334
|
+
var _a;
|
335
|
+
return (_a = props.onClose) == null ? void 0 : _a.call(props, {}, "escapeKeyDown");
|
336
|
+
}, children: "Close" }) })
|
337
|
+
] });
|
338
|
+
};
|
339
|
+
|
340
|
+
// src/components/wallet/table/cells/Accounts.tsx
|
341
|
+
var import_material6 = require("@mui/material");
|
342
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
343
|
+
var ConnectedWalletsAccountsTableCell = ({
|
344
|
+
additionalAccounts,
|
345
|
+
currentAccount,
|
346
|
+
totalAccounts,
|
347
|
+
tableCellProps
|
348
|
+
}) => {
|
349
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_material6.TableCell, { ...tableCellProps, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
350
|
+
import_material6.Tooltip,
|
351
|
+
{
|
352
|
+
sx: { cursor: totalAccounts > 0 ? "pointer" : "auto" },
|
353
|
+
title: [...currentAccount ?? [], ...additionalAccounts ?? []].map((address, index) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { children: address }, index)),
|
354
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_material6.Typography, { children: totalAccounts })
|
355
|
+
}
|
356
|
+
) });
|
357
|
+
};
|
358
|
+
|
359
|
+
// src/components/wallet/table/cells/Actions.tsx
|
360
|
+
var import_icons_material2 = require("@mui/icons-material");
|
361
|
+
var import_material7 = require("@mui/material");
|
362
|
+
var import_react_flexbox4 = require("@xylabs/react-flexbox");
|
363
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
364
|
+
var ConnectedWalletsActionsTableCell = ({ connected, onConnect, onRevoke, tableCellProps }) => {
|
365
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material7.TableCell, { ...tableCellProps, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_react_flexbox4.FlexRow, { gap: 2, justifyContent: "start", children: [
|
366
|
+
connected ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_material7.Typography, { sx: { display: "inline-flex", gap: 0.5 }, children: [
|
367
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons_material2.Check, {}),
|
368
|
+
"Connected"
|
369
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material7.Button, { variant: "contained", onClick: onConnect, children: "Connect" }),
|
370
|
+
connected ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material7.IconButton, { onClick: onRevoke, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons_material2.InfoOutlined, {}) }) : null
|
371
|
+
] }) });
|
372
|
+
};
|
373
|
+
|
374
|
+
// src/components/wallet/table/cells/ChainName.tsx
|
375
|
+
var import_material8 = require("@mui/material");
|
376
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
377
|
+
var ConnectedWalletsChainNameTableCell = ({ chainName, tableCellProps }) => {
|
378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_material8.TableCell, { ...tableCellProps, children: chainName });
|
379
|
+
};
|
380
|
+
|
381
|
+
// src/components/wallet/table/cells/State.tsx
|
382
|
+
var import_material9 = require("@mui/material");
|
383
|
+
var import_react3 = require("react");
|
384
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
385
|
+
var ConnectedWalletState = ({ connected, walletRdns, tableCellProps }) => {
|
386
|
+
const { disableWallet, enableWallet, wallets } = useEnabledWallets();
|
387
|
+
const enabled = (0, import_react3.useMemo)(() => walletRdns ? wallets[walletRdns].enabled : false, [wallets, walletRdns]);
|
388
|
+
const handleClick = (event) => {
|
389
|
+
var _a;
|
390
|
+
const checked = (_a = event.target) == null ? void 0 : _a.checked;
|
391
|
+
if (walletRdns) {
|
392
|
+
checked ? enableWallet == null ? void 0 : enableWallet(walletRdns) : disableWallet == null ? void 0 : disableWallet(walletRdns);
|
393
|
+
}
|
394
|
+
};
|
395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material9.TableCell, { ...tableCellProps, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_material9.Switch, { disabled: !connected, checked: connected && enabled, onChange: handleClick }) });
|
396
|
+
};
|
397
|
+
|
398
|
+
// src/components/wallet/table/cells/Wallet.tsx
|
399
|
+
var import_material10 = require("@mui/material");
|
400
|
+
var import_react_crypto5 = require("@xylabs/react-crypto");
|
401
|
+
var import_react_flexbox5 = require("@xylabs/react-flexbox");
|
402
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
403
|
+
var ConnectedWalletsWalletTableCell = ({ icon, walletName, tableCellProps }) => {
|
404
|
+
const theme = (0, import_material10.useTheme)();
|
405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_material10.TableCell, { ...tableCellProps, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_react_flexbox5.FlexRow, { gap: 2, justifyContent: "start", children: [
|
406
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_crypto5.ConstrainedImage, { constrainedValue: theme.spacing(4), src: icon }),
|
407
|
+
walletName
|
408
|
+
] }) });
|
409
|
+
};
|
410
|
+
|
411
|
+
// src/components/wallet/table/cells/Cells.tsx
|
412
|
+
var ConnectedWalletTableCells = [
|
413
|
+
ConnectedWalletsWalletTableCell,
|
414
|
+
ConnectedWalletsChainNameTableCell,
|
415
|
+
ConnectedWalletsAccountsTableCell,
|
416
|
+
ConnectedWalletsActionsTableCell,
|
417
|
+
ConnectedWalletState
|
418
|
+
];
|
419
|
+
|
420
|
+
// src/components/wallet/table/ConnectedWalletsTable.tsx
|
421
|
+
var import_material12 = require("@mui/material");
|
422
|
+
var import_react6 = require("react");
|
423
|
+
|
424
|
+
// src/components/wallet/lib/TableHeadData.ts
|
425
|
+
var WalletsTableHeadCells = [
|
426
|
+
{
|
427
|
+
disablePadding: false,
|
428
|
+
id: "wallet",
|
429
|
+
label: "Wallet",
|
430
|
+
numeric: false,
|
431
|
+
showOnMobile: true
|
432
|
+
},
|
433
|
+
{
|
434
|
+
disablePadding: false,
|
435
|
+
id: "chain",
|
436
|
+
label: "Chain",
|
437
|
+
numeric: false,
|
438
|
+
showOnMobile: true
|
439
|
+
},
|
440
|
+
{
|
441
|
+
disablePadding: false,
|
442
|
+
id: "accounts",
|
443
|
+
label: "Accounts",
|
444
|
+
numeric: true,
|
445
|
+
showOnMobile: true
|
446
|
+
},
|
447
|
+
{
|
448
|
+
disablePadding: false,
|
449
|
+
id: "actions",
|
450
|
+
label: "Actions",
|
451
|
+
numeric: false,
|
452
|
+
showOnMobile: true
|
453
|
+
},
|
454
|
+
{
|
455
|
+
disablePadding: false,
|
456
|
+
id: "enabled",
|
457
|
+
label: "Enabled",
|
458
|
+
numeric: false,
|
459
|
+
showOnMobile: true
|
460
|
+
}
|
461
|
+
];
|
462
|
+
|
463
|
+
// src/components/wallet/table/ConnectedWalletsTableRow.tsx
|
464
|
+
var import_material11 = require("@mui/material");
|
465
|
+
var import_react_crypto6 = require("@xylabs/react-crypto");
|
466
|
+
var import_react4 = require("react");
|
467
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
468
|
+
var WalletConnectionsTableRow = ({
|
469
|
+
ignoreConnectDialog,
|
470
|
+
onConnectClick,
|
471
|
+
onRevoke,
|
472
|
+
wallet,
|
473
|
+
...props
|
474
|
+
}) => {
|
475
|
+
const { currentAccount: currentAccountFromWallet, additionalAccounts, chainName, connectWallet, providerInfo } = (0, import_react_crypto6.useEthWallet)(wallet);
|
476
|
+
const currentAccount = (currentAccountFromWallet == null ? void 0 : currentAccountFromWallet.toString()) ? [currentAccountFromWallet.toString()] : [];
|
477
|
+
const totalAccounts = ((additionalAccounts == null ? void 0 : additionalAccounts.length) ?? 0) + ((currentAccount == null ? void 0 : currentAccount.length) ?? 0);
|
478
|
+
const connected = !!((currentAccount == null ? void 0 : currentAccount.length) ?? 0 > 0);
|
479
|
+
const { icon, name, rdns } = (0, import_react4.useMemo)(() => providerInfo ?? { icon: void 0, name: void 0, rdns: void 0 }, [providerInfo]);
|
480
|
+
const activeProvider = (0, import_react4.useMemo)(
|
481
|
+
() => ({
|
482
|
+
connectWallet,
|
483
|
+
icon,
|
484
|
+
providerName: name
|
485
|
+
}),
|
486
|
+
[connectWallet, icon, name]
|
487
|
+
);
|
488
|
+
const onRevokeLocal = (0, import_react4.useCallback)(() => {
|
489
|
+
onRevoke == null ? void 0 : onRevoke(activeProvider);
|
490
|
+
}, [activeProvider, onRevoke]);
|
491
|
+
const onConnectLocal = (0, import_react4.useCallback)(async () => {
|
492
|
+
if (ignoreConnectDialog) {
|
493
|
+
await (connectWallet == null ? void 0 : connectWallet());
|
494
|
+
} else {
|
495
|
+
onConnectClick == null ? void 0 : onConnectClick(activeProvider);
|
496
|
+
}
|
497
|
+
}, [activeProvider, connectWallet, ignoreConnectDialog, onConnectClick]);
|
498
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material11.TableRow, { ...props, children: Object.values(ConnectedWalletTableCells).map((Cell, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
499
|
+
Cell,
|
500
|
+
{
|
501
|
+
additionalAccounts,
|
502
|
+
chainName,
|
503
|
+
connected,
|
504
|
+
currentAccount,
|
505
|
+
icon,
|
506
|
+
onConnect: onConnectLocal,
|
507
|
+
onRevoke: onRevokeLocal,
|
508
|
+
totalAccounts,
|
509
|
+
walletName: name,
|
510
|
+
walletRdns: rdns
|
511
|
+
},
|
512
|
+
index
|
513
|
+
)) });
|
514
|
+
};
|
515
|
+
|
516
|
+
// src/components/wallet/table/hooks/useActiveProviderDialogState.tsx
|
517
|
+
var import_react5 = require("react");
|
518
|
+
var useActiveProviderDialogState = (setActiveProvider) => {
|
519
|
+
const [show, setShow] = (0, import_react5.useState)(false);
|
520
|
+
const onSetActiveProvider = (activeProvider) => {
|
521
|
+
setShow(true);
|
522
|
+
setActiveProvider(activeProvider);
|
523
|
+
};
|
524
|
+
const onClose = () => {
|
525
|
+
setShow(false);
|
526
|
+
setActiveProvider({});
|
527
|
+
};
|
528
|
+
return [show, onSetActiveProvider, onClose];
|
529
|
+
};
|
530
|
+
|
531
|
+
// src/components/wallet/table/ConnectedWalletsTable.tsx
|
532
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
533
|
+
var ConnectedWalletsTable = ({ ignoreConnectDialog, onIgnoreConnectDialog, wallets, ...props }) => {
|
534
|
+
const [activeProvider, setActiveProvider] = (0, import_react6.useState)();
|
535
|
+
const [showConnect, onSetActiveProviderConnect, onConnectClose] = useActiveProviderDialogState(setActiveProvider);
|
536
|
+
const [showRevoke, onSetActiveProviderRevoke, onRevokeClose] = useActiveProviderDialogState(setActiveProvider);
|
537
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
538
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_material12.Table, { ...props, children: [
|
539
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material12.TableHead, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material12.TableRow, { children: WalletsTableHeadCells.map(({ disablePadding, id, label, align, width }) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material12.TableCell, { align, padding: disablePadding ? "none" : "normal", width: width ?? "auto", children: label }, id)) }) }),
|
540
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material12.TableBody, { children: (wallets ?? []).map((wallet) => {
|
541
|
+
var _a;
|
542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
543
|
+
WalletConnectionsTableRow,
|
544
|
+
{
|
545
|
+
ignoreConnectDialog,
|
546
|
+
onConnectClick: onSetActiveProviderConnect,
|
547
|
+
onRevoke: onSetActiveProviderRevoke,
|
548
|
+
wallet
|
549
|
+
},
|
550
|
+
(_a = wallet.providerInfo) == null ? void 0 : _a.rdns
|
551
|
+
);
|
552
|
+
}) })
|
553
|
+
] }),
|
554
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RevokeWalletConnectionDialog, { open: showRevoke, onClose: onRevokeClose, activeProvider }),
|
555
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
556
|
+
ConnectWalletDialog,
|
557
|
+
{
|
558
|
+
activeProvider,
|
559
|
+
onClose: onConnectClose,
|
560
|
+
open: showConnect,
|
561
|
+
onIgnoreConnectDialog
|
562
|
+
}
|
563
|
+
)
|
564
|
+
] });
|
565
|
+
};
|
566
|
+
|
567
|
+
// src/components/ConnectedAccountsFlexbox.tsx
|
568
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
569
|
+
var ConnectedAccountsFlexbox = (0, import_react7.forwardRef)(
|
570
|
+
({ ignoreConnectDialog, onIgnoreConnectDialog, ...props }, ref) => {
|
571
|
+
const theme = (0, import_material13.useTheme)();
|
572
|
+
const { totalConnectedAccounts, sortedWallets } = useDetectedWallets();
|
573
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_react_flexbox6.FlexCol, { alignItems: "stretch", justifyContent: "start", gap: 2, ref, ...props, children: [
|
574
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_react_flexbox6.FlexCol, { alignItems: "start", children: [
|
575
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material13.Typography, { variant: "h2", sx: { mb: 0.5 }, children: "Detected Web3 Wallets" }),
|
576
|
+
totalConnectedAccounts ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_material13.Typography, { variant: "subtitle1", color: theme.palette.secondary.main, sx: { opacity: 0.5 }, children: [
|
577
|
+
"Total Connected Accounts: ",
|
578
|
+
totalConnectedAccounts
|
579
|
+
] }) : null
|
580
|
+
] }),
|
581
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ConnectedWalletsTable, { wallets: sortedWallets, ignoreConnectDialog, onIgnoreConnectDialog })
|
582
|
+
] });
|
583
|
+
}
|
584
|
+
);
|
585
|
+
ConnectedAccountsFlexbox.displayName = "ConnectedAccountsFlexbox";
|
586
|
+
// Annotate the CommonJS export names for ESM import in node:
|
587
|
+
0 && (module.exports = {
|
588
|
+
CheckboxFormControl,
|
589
|
+
ConnectWalletDialog,
|
590
|
+
ConnectedAccountsFlexbox,
|
591
|
+
ConnectedWalletState,
|
592
|
+
ConnectedWalletTableCells,
|
593
|
+
ConnectedWalletsAccountsTableCell,
|
594
|
+
ConnectedWalletsActionsTableCell,
|
595
|
+
ConnectedWalletsChainNameTableCell,
|
596
|
+
ConnectedWalletsTable,
|
597
|
+
ConnectedWalletsWalletTableCell,
|
598
|
+
EnabledEthWalletConnections,
|
599
|
+
RevokeWalletConnectionDialog,
|
600
|
+
WalletConnectionsTableRow,
|
601
|
+
useActiveProviderDialogState,
|
602
|
+
useDetectedWallets,
|
603
|
+
useEnabledWallets,
|
604
|
+
useEnabledWalletsInner
|
605
|
+
});
|
2
606
|
//# sourceMappingURL=index.cjs.map
|