@xyo-network/react-wallet 2.77.2 → 2.78.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,814 @@
1
- "use strict";var de=Object.defineProperty;var ct=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var ut=Object.prototype.hasOwnProperty;var mt=(e,t)=>{for(var o in t)de(e,o,{get:t[o],enumerable:!0})},pt=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of dt(t))!ut.call(e,n)&&n!==o&&de(e,n,{get:()=>t[n],enumerable:!(r=ct(t,n))||r.enumerable});return e};var ft=e=>pt(de({},"__esModule",{value:!0}),e);var At={};mt(At,{DefaultSeedPhrase:()=>xt,DialogActionButtons:()=>ge,InvalidPhraseTypography:()=>$,MaxAccountsTableRow:()=>ht,NewPhraseTextField:()=>be,OverwriteWarning:()=>Ae,PhraseDialogActions:()=>we,PhraseHeaderBox:()=>U,SavedPhraseTextField:()=>We,SeedPhraseContext:()=>N,SeedPhraseDialog:()=>Be,SeedPhraseDialogInner:()=>Xe,SeedPhraseIconButton:()=>z,SeedPhraseProvider:()=>he,SeedPhraseTableRow:()=>St,WalletAccountDetails:()=>bt,WalletAccountSelect:()=>Fe,WalletAccountSelectBar:()=>Wt,WalletContext:()=>D,WalletProvider:()=>Pt,colorParser:()=>ve,useAccount:()=>ke,useIndexedWalletFromContext:()=>Ve,useRootWallet:()=>Pe,useSeedPhrase:()=>S,useSelectedWalletAccount:()=>Se,useWallet:()=>O,useWalletContext:()=>g,useWalletProvided:()=>xe,useWallets:()=>gt,useWrapperAccount:()=>Ct});module.exports=ft(At);var W=require("@mui/material"),ue=require("@xylabs/react-button"),me=require("react");var F=require("@mui/material"),H=require("react/jsx-runtime"),De=({activeAccountIndex:e,desiredMaximumAccounts:t,setShowSnackBar:o,showSnackBar:r})=>(0,H.jsx)(F.Snackbar,{anchorOrigin:{horizontal:"center",vertical:"top"},autoHideDuration:5e3,onClose:()=>o?.(!1),open:r,children:(0,H.jsxs)(F.Alert,{severity:"error",onClose:()=>o?.(!1),children:[(0,H.jsx)(F.AlertTitle,{children:"Maximum Accounts Error"}),"Your currently selected account number (",e===void 0?"":e+1,") cannot be greater than the desired Maximum Accounts (",t,")."]})});var b=require("react/jsx-runtime"),ht=({activeAccountIndex:e,changeMaxAccounts:t,maxAccounts:o})=>{let[r,n]=(0,me.useState)(),[a,s]=(0,me.useState)(!1),c=p=>{if(o!==void 0&&e!==void 0)switch(p){case"decrease":{let i=o-1,h=i>0,x=e+1<=i;h&&x&&t?.(i),x||s(!0),n(i);return}case"increase":{t?.(o+1);return}default:console.error(p,"is not a recognized value")}else throw new Error("Max Accounts is unset and needs a default")};return(0,b.jsxs)(W.TableRow,{children:[(0,b.jsx)(W.TableCell,{children:"Maximum Accounts"}),(0,b.jsx)(W.TableCell,{align:"center",children:(0,b.jsx)(W.Typography,{variant:"caption",children:o})}),(0,b.jsxs)(W.TableCell,{align:"center",children:[(0,b.jsxs)(W.ButtonGroup,{children:[(0,b.jsx)(ue.ButtonEx,{onClick:()=>c("decrease"),variant:"contained",size:"small",children:"-"}),(0,b.jsx)(ue.ButtonEx,{onClick:()=>c("increase"),variant:"contained",size:"small",children:"+"})]}),(0,b.jsx)(De,{desiredMaximumAccounts:r,activeAccountIndex:e,setShowSnackBar:s,showSnackBar:a})]})]})};var Ee=require("@mui/icons-material"),l=require("@mui/material"),Oe=require("react"),d=require("react/jsx-runtime"),z=e=>{let[t,o]=(0,Oe.useState)(!1),r=()=>o(!1);return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l.IconButton,{onClick:()=>o(!0),...e,children:(0,d.jsx)(Ee.HelpOutline,{fontSize:"small"})}),(0,d.jsxs)(l.Dialog,{open:t,children:[(0,d.jsx)(l.DialogTitle,{children:"Understanding your Seed Phrase"}),(0,d.jsxs)(l.DialogContent,{children:[(0,d.jsxs)(l.Typography,{children:["Your Seed Phrase should adhere to the"," ",(0,d.jsx)(l.Link,{target:"_blank",href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"bip39 specification"})," ","and is used to generate accounts which identify your data on the XYO Network."]}),(0,d.jsxs)(l.List,{children:[(0,d.jsx)(l.ListItem,{children:"Do not share this phrase with anyone."}),(0,d.jsx)(l.ListItem,{children:"Do not save it to a public computer."}),(0,d.jsx)(l.ListItem,{children:"Do not use a existing phrase from another wallet (i.e. Metamask)."}),(0,d.jsx)(l.ListItem,{children:"Do not use before copying it down somewhere safe."})]})]}),(0,d.jsx)(l.DialogActions,{children:(0,d.jsx)(l.Button,{onClick:r,variant:"outlined",children:"OK"})})]})]})};var R=require("@mui/material"),Me=require("@scure/bip39"),He=require("@scure/bip39/wordlists/english"),Z=require("react"),I=require("react/jsx-runtime"),xt=({changeSeedPhrase:e,children:t,hideDefaultSeedPhraseMessage:o,seedPhrase:r})=>{let[n,a]=(0,Z.useState)(!1);return(0,Z.useEffect)(()=>{if(!r){let s=(0,Me.generateMnemonic)(He.wordlist,256);e?.(s),a(!0)}},[e,r]),(0,I.jsxs)(I.Fragment,{children:[o?null:(0,I.jsx)(R.Snackbar,{open:n,autoHideDuration:5e3,onClose:()=>a(!1),anchorOrigin:{horizontal:"center",vertical:"top"},children:(0,I.jsxs)(R.Alert,{severity:"success",children:[(0,I.jsx)(R.AlertTitle,{children:"Default Seed Phrase Generated"}),"Go to application settings to save it."]})}),t]})};var G=require("@mui/material");var ze=require("@xyo-network/react-shared"),N=(0,ze.createContextEx)();var j=require("@scure/bip39"),fe=require("@scure/bip39/wordlists/english"),u=require("react");var Ne=require("react/jsx-runtime"),pe=e=>e?(0,j.validateMnemonic)(e,fe.wordlist):null,he=({children:e,defaultPhrase:t,handleChangeSeedPhrase:o,saveCallback:r,seedPhrase:n,open:a})=>{let[s,c]=(0,u.useState)(),[p,i]=(0,u.useState)(!1);(0,u.useEffect)(()=>{c(t)},[t]),(0,u.useEffect)(()=>{(n||a)&&c?.(n??"")},[n,a,c]);let h=(0,u.useCallback)(()=>{let M=(0,j.generateMnemonic)(fe.wordlist,256);c?.(M),i?.(!1)},[]),x=(0,u.useCallback)(()=>{i?.(!1)},[]),Q=(0,u.useCallback)(()=>{c?.(""),i?.(!1)},[]),P=(0,u.useCallback)(()=>{!p&&n&&n!==s?i?.(!0):(o?.(s??""),r?.())},[o,p,s,r,n]);(0,u.useEffect)(()=>{a||x()},[x,a]);let ie=(0,u.useMemo)(()=>pe?.(n),[n]),f=(0,u.useMemo)(()=>pe?.(s),[s]);return(0,Ne.jsx)(N.Provider,{value:{handleCancelOverwrite:x,handleChangeSeedPhrase:o,handleClear:Q,handleGenerate:h,handleSave:P,overwriteWarning:p,phrase:s,provided:!0,seedPhrase:n,setOverwriteWarning:i,setPhrase:c,validPhrase:f,validSeedPhrase:ie,validate:pe},children:e})};var Ge=require("@xyo-network/react-shared");var S=()=>(0,Ge.useContextEx)(N,"SeedPhrase",!0);var Le=require("@xyo-network/react-shared"),D=(0,Le.createContextEx)();var $e=require("@xylabs/react-promise"),ee=require("react");var _e=require("react/jsx-runtime"),Pt=({children:e,defaultActiveAccountIndex:t=0,rootWallet:o=null,...r})=>{let[n,a]=(0,ee.useState)(t);(0,ee.useEffect)(()=>{t!==void 0&&a(t)},[t]);let[s=null]=(0,$e.usePromise)(async()=>await o?.derivePath(n.toString()),[n,o]);return(0,_e.jsx)(D.Provider,{value:{activeAccount:s,activeAccountIndex:n,provided:!0,rootWallet:o,setActiveAccountIndex:a},...r,children:e})};var Ue=require("@xylabs/react-promise"),te=require("@xyo-network/react-shared");var g=(e=!0)=>(0,te.useContextEx)(D,"Wallet",e),xe=()=>(0,te.useProvided)(D),Pe=(e=!0)=>{let{rootWallet:t}=g(e);return[t,void 0]},Ve=(e,t=!0)=>{let{rootWallet:o}=g(t),[r]=(0,Ue.usePromise)(async()=>await o?.derivePath(e.toString())??o,[o,e]);return[r,void 0]},Se=(e=!0)=>{let{activeAccountIndex:t}=g(e),[o]=Ve(t??0,e);return t===void 0&&o===null?[null,void 0]:[o,void 0]};var L=require("react/jsx-runtime"),ge=({onClose:e,...t})=>{let{handleSave:o,setPhrase:r}=S();return(0,L.jsxs)(G.DialogActions,{...t,children:[(0,L.jsx)(G.Button,{variant:"outlined",onClick:a=>{r?.(""),e?.(a,"escapeKeyDown")},children:"Cancel"}),(0,L.jsx)(G.Button,{variant:"outlined",onClick:o,children:"Save"})]})};var ae=require("@mui/material");var ve=e=>{switch(e){case!0:return"success";case!1:return"error";default:return}};var oe=require("@mui/material"),re=require("react/jsx-runtime"),$=e=>(0,re.jsxs)(oe.Typography,{variant:"caption",color:"error",...e,children:["Invalid seed phrase. See -"," ",(0,re.jsx)(oe.Link,{target:"_blank",href:"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki",children:"bip39 Proposal"})]});var ne=require("@mui/icons-material"),Ye=require("@xylabs/react-flexbox"),Ce=require("react"),_=require("react/jsx-runtime"),U=({children:e,conditional:t,...o})=>{let r=(0,Ce.useMemo)(()=>{switch(t){case!0:return"success";case!1:return"error";default:return null}},[t]),n=(0,Ce.useMemo)(()=>{switch(r){case"success":return(0,_.jsx)(ne.CheckCircleOutline,{fontSize:"small",color:"success"});case"error":return(0,_.jsx)(ne.HighlightOff,{fontSize:"small",color:"error"});default:return null}},[r]);return(0,_.jsxs)(Ye.FlexRow,{justifyContent:"start",columnGap:1,...o,children:[n,e]})};var k=require("react/jsx-runtime"),be=({children:e,disableColor:t,...o})=>{let{phrase:r,setPhrase:n,validPhrase:a}=S();return(0,k.jsx)(k.Fragment,{children:(0,k.jsxs)(ae.FormControl,{fullWidth:!0,size:"small",sx:{display:"flex",flexDirection:"column",rowGap:1},children:[e,(0,k.jsx)(ae.TextField,{focused:!0,color:t?void 0:ve(a),error:a===!1,helperText:a===!1?(0,k.jsx)($,{}):null,fullWidth:!0,maxRows:Number.POSITIVE_INFINITY,multiline:!0,onChange:s=>n?.(s.target.value),value:r,...o})]})})};var V=require("@mui/material");var Y=require("react/jsx-runtime"),we=()=>{let{handleClear:e,handleGenerate:t,overwriteWarning:o}=S();return(0,Y.jsxs)(V.DialogActions,{sx:{justifyContent:"center"},children:[(0,Y.jsx)(V.Button,{disabled:o,variant:"outlined",onClick:t,children:"Generate"}),(0,Y.jsx)(V.Button,{variant:"outlined",onClick:e,children:"Clear"})]})};var y=require("@mui/material"),Ke=require("react");var w=require("react/jsx-runtime"),We=({fullWidth:e,showPhraseHeader:t,...o})=>{let{validSeedPhrase:r,seedPhrase:n}=S(),[a,s]=(0,Ke.useState)(!1);return(0,w.jsxs)(y.FormControl,{fullWidth:e,size:"small",sx:{display:"flex",flexDirection:"column",rowGap:1},children:[(0,w.jsx)(y.Chip,{label:a?"Hide Saved Seed Phrase":"Reveal Saved Seed Phrase",onClick:()=>s(!a),sx:{alignSelf:"center"}}),a?(0,w.jsxs)(w.Fragment,{children:[t?(0,w.jsx)(y.FormLabel,{children:(0,w.jsx)(U,{conditional:r,children:"Saved Seed Phrase"})}):null,(0,w.jsx)(y.TextField,{defaultValue:n,disabled:!0,error:r===!1,helperText:r===!1?(0,w.jsx)($,{}):null,fullWidth:!0,maxRows:Number.POSITIVE_INFINITY,multiline:!0,...o})]}):null]})};var K=require("@mui/material"),qe=require("@xylabs/react-flexbox");var E=require("react/jsx-runtime"),Ae=()=>{let{handleCancelOverwrite:e,handleSave:t}=S();return(0,E.jsx)(K.Alert,{variant:"outlined",severity:"warning",action:(0,E.jsxs)(qe.FlexRow,{sx:{columnGap:1},children:[(0,E.jsx)(K.Button,{variant:"outlined",color:"inherit",size:"small",onClick:t,children:"Overwrite"}),(0,E.jsx)(K.Button,{variant:"outlined",color:"inherit",size:"small",onClick:e,children:"Cancel"})]}),children:"Are you sure you want to overwrite existing seed phrase? This action cannot be undone."})};var T=require("@mui/material");var m=require("react/jsx-runtime"),Be=({changeSeedPhrase:e,seedPhrase:t,...o})=>(0,m.jsx)(he,{seedPhrase:t,handleChangeSeedPhrase:e,open:o.open,saveCallback:()=>o.onClose?.({},"escapeKeyDown"),children:(0,m.jsx)(Xe,{...o})}),Xe=e=>{let{overwriteWarning:t,seedPhrase:o,validPhrase:r}=S();return(0,m.jsxs)(T.Dialog,{"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",fullWidth:!0,maxWidth:"sm",...e,children:[(0,m.jsxs)(T.DialogTitle,{id:"alert-dialog-title",children:["Update Your Seed Phrase ",(0,m.jsx)(z,{})]}),(0,m.jsxs)(T.DialogContent,{sx:{display:"flex",flexDirection:"column",rowGap:2},children:[(0,m.jsx)(be,{children:(0,m.jsx)(T.FormLabel,{children:(0,m.jsx)(U,{conditional:r,children:"New Seed Phrase"})})}),(0,m.jsx)(we,{}),o?(0,m.jsx)(We,{}):null,t?(0,m.jsx)(Ae,{}):null]}),(0,m.jsx)(ge,{onClose:e.onClose})]})};var se=require("@mui/icons-material"),A=require("@mui/material"),Je=require("react");var v=require("react/jsx-runtime"),St=({changeSeedPhrase:e,seedPhrase:t,...o})=>{let[r,n]=(0,Je.useState)(!1);return(0,v.jsxs)(A.TableRow,{...o,children:[(0,v.jsxs)(A.TableCell,{children:["Seed Phrase ",(0,v.jsx)(z,{})]}),(0,v.jsx)(A.TableCell,{align:"center",children:t?(0,v.jsx)(se.RadioButtonChecked,{color:"success"}):(0,v.jsx)(se.Cancel,{color:"error"})}),(0,v.jsxs)(A.TableCell,{children:[(0,v.jsx)(Be,{changeSeedPhrase:e,open:r,onClose:()=>n(!1),seedPhrase:t}),(0,v.jsx)(A.ButtonGroup,{fullWidth:!0,children:(0,v.jsx)(A.Button,{variant:"contained",size:"small",onClick:()=>{n(!0)},children:"Update"})})]})]})};var nt=require("@xylabs/eth-address"),at=require("@xylabs/react-crypto"),le=require("@xylabs/react-flexbox"),X=require("@xylabs/react-number-status"),st=require("@xyo-network/react-network");var Qe=require("@xylabs/react-promise"),Ie=require("react");var ke=({wallet:e,account:t,index:o,required:r=!1}={})=>{let n=xe(),[a,s]=(0,Ie.useState)();e&&t&&!a&&s(new Error("useAccount can not have both a wallet and an account in the parameters")),o&&t&&!a&&s(new Error("useAccount can not have both a index and an account in the parameters"));let[c,p]=(0,Ie.useState)(),[i]=Pe(!e&&r),{activeAccountIndex:h}=g(!1),[x]=(0,Qe.usePromise)(async()=>{try{if(!a){if(e)return await e?.derivePath?.(`${o??0}'\0`);if(i)return await i?.derivePath?.(`${o??h??0}'\0`)}}catch(Q){let P=Q;console.error(P.message),p(P)}},[o,e,i,h,a]);return a&&!c&&(console.error(a.message),p(a)),[c?void 0:t??x??n?null:void 0,c]};var Ze=require("@xylabs/react-promise"),ye=require("@xyo-network/account"),je=require("react");var O=({mnemonic:e,wallet:t,path:o,required:r=!1,seed:n}={})=>{let a=g(!1),[s,c]=(0,je.useState)(),[p]=Se(!t&&r),[i]=(0,Ze.usePromise)(async()=>{try{let h=await(t||(e?ye.HDWallet.fromPhrase(e):n?ye.HDWallet.fromSeed(n):p));return o?h?.derivePath?.(o):h??t}catch(h){c(h)}},[e,p,n,o,t]);return[i??(a?null:i),s]};var et=require("@xylabs/react-promise");var gt=({wallet:e,paths:t})=>{let o=g(!1),[r]=O({wallet:e}),[n,a]=(0,et.usePromise)(async()=>r?await Promise.all(t.map(s=>r.derivePath(s))):void 0,[r,t]);return[n??(o?null:n),a]};var tt=require("@xylabs/react-promise"),ot=require("@xyo-network/account"),rt=require("async-mutex"),q,vt=new rt.Mutex,Ct=e=>(0,tt.usePromise)(async()=>await vt.runExclusive(async()=>{if(e!==void 0)return e;if(q)return q;try{q=await ot.HDWallet.random(),console.log(`Global Wrapper Wallet Creation Success: ${q.address}`)}catch(t){console.error(`Global Wrapper Wallet Creation Failed: ${t.message}`)}return q}),[e]);var B=require("react/jsx-runtime"),bt=({exploreUrl:e="https://explore.xyo.network",account:t,...o})=>{let[r]=ke({account:t}),{network:n}=(0,st.useNetwork)(),a=`${e}/recent?account=${r?.address}&network=${n?.name??"main"}`;return(0,B.jsxs)(le.FlexCol,{...o,children:[(0,B.jsx)(at.EthAccountButton,{address:nt.EthAddress.fromString(r?.address)}),(0,B.jsxs)(le.FlexRow,{gap:1,children:[(0,B.jsx)(X.NumberStatus,{rounded:!0,title:"Tokens",value:0,to:`${a}&schema=network.xyo.account.tokens`,target:"_blank"}),(0,B.jsx)(X.NumberStatus,{rounded:!0,title:"NFTs",value:0,to:`${a}&schema=network.xyo.account.nfts`,target:"_blank"}),(0,B.jsx)(X.NumberStatus,{rounded:!0,title:"Signatures",value:0,to:`${a}&schema=network.xyo.account.signatures`,target:"_blank"}),(0,B.jsx)(X.NumberStatus,{rounded:!0,title:"Signins",value:0,to:`${a}&schema=network.xyo.account.signins`,target:"_blank"})]})]})};var J=require("@mui/material"),lt=require("@xylabs/react-select"),Te=require("@xyo-network/react-address-render");var C=require("react/jsx-runtime"),wt=(e,t=0)=>[...Array.from({length:e}).keys()].map(o=>o+t),Fe=({addressNames:e={},iconOnly:t,iconSize:o=24,icons:r,maxAccounts:n=1,showFavorite:a=!1,size:s,variant:c="outlined",...p})=>{let{activeAccountIndex:i=0,setActiveAccountIndex:h,rootWallet:x}=g();return(0,C.jsx)(C.Fragment,{children:x?(0,C.jsx)(lt.SelectEx,{margin:"dense",disabled:!x||i===void 0,renderValue:P=>(0,C.jsx)(()=>{let[f]=O({path:P.toString(),wallet:x}),M=f?e[f.address]:void 0,ce=!!f&&f.address in e;return(0,C.jsx)(J.MenuItem,{value:P,sx:{minHeight:0,paddingBottom:0,paddingTop:0},children:(0,C.jsx)(Te.AddressRenderRowBox,{disableSharedRef:!0,flexGrow:1,address:f?.address,iconOnly:t,iconSize:o,icons:r,name:M,favorite:ce,showFavorite:a})})},{}),value:i,onChange:P=>h?.(Number.parseInt(`${P.target.value}`)),size:s,variant:c,...p,children:wt(n).map(P=>(0,C.jsx)(()=>{let[f]=O({path:P.toString(),wallet:x}),M=f?e[f.address]:void 0,ce=!!f&&f.address in e;return(0,C.jsx)(J.MenuItem,{value:P,sx:{minHeight:0,paddingBottom:0,paddingTop:0},children:(0,C.jsx)(Te.AddressRenderRowBox,{disableSharedRef:!0,flexGrow:1,address:f?.address,favorite:ce,iconOnly:t,iconSize:o,icons:r,name:M,showFavorite:a})},f?.address)},{},P))}):(0,C.jsx)(J.CircularProgress,{size:24})})};var it=require("@xylabs/react-flexbox");var Re=require("react/jsx-runtime"),Wt=({addressNames:e={},iconOnly:t,iconSize:o,icons:r,maxAccounts:n=1,showFavorite:a=!1,size:s="small",...c})=>(0,Re.jsx)(it.FlexCol,{alignItems:"stretch",...c,children:(0,Re.jsx)(Fe,{addressNames:e,fullWidth:!0,showFavorite:a,iconSize:o,iconOnly:t,icons:r,maxAccounts:n,size:s??"small",variant:"outlined"})});
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ DefaultSeedPhrase: () => DefaultSeedPhrase,
24
+ DialogActionButtons: () => DialogActionButtons,
25
+ InvalidPhraseTypography: () => InvalidPhraseTypography,
26
+ MaxAccountsTableRow: () => MaxAccountsTableRow,
27
+ NewPhraseTextField: () => NewPhraseTextField,
28
+ OverwriteWarning: () => OverwriteWarning,
29
+ PhraseDialogActions: () => PhraseDialogActions,
30
+ PhraseHeaderBox: () => PhraseHeaderBox,
31
+ SavedPhraseTextField: () => SavedPhraseTextField,
32
+ SeedPhraseContext: () => SeedPhraseContext,
33
+ SeedPhraseDialog: () => SeedPhraseDialog,
34
+ SeedPhraseDialogInner: () => SeedPhraseDialogInner,
35
+ SeedPhraseIconButton: () => SeedPhraseIconButton,
36
+ SeedPhraseProvider: () => SeedPhraseProvider,
37
+ SeedPhraseTableRow: () => SeedPhraseTableRow,
38
+ WalletAccountDetails: () => WalletAccountDetails,
39
+ WalletAccountSelect: () => WalletAccountSelect,
40
+ WalletAccountSelectBar: () => WalletAccountSelectBar,
41
+ WalletContext: () => WalletContext,
42
+ WalletProvider: () => WalletProvider,
43
+ colorParser: () => colorParser,
44
+ useAccount: () => useAccount,
45
+ useIndexedWalletFromContext: () => useIndexedWalletFromContext,
46
+ useRootWallet: () => useRootWallet,
47
+ useSeedPhrase: () => useSeedPhrase,
48
+ useSelectedWalletAccount: () => useSelectedWalletAccount,
49
+ useWallet: () => useWallet,
50
+ useWalletContext: () => useWalletContext,
51
+ useWalletProvided: () => useWalletProvided,
52
+ useWallets: () => useWallets,
53
+ useWrapperAccount: () => useWrapperAccount
54
+ });
55
+ module.exports = __toCommonJS(src_exports);
56
+
57
+ // src/components/MaxAccounts/MaxAccountsTableRow.tsx
58
+ var import_material2 = require("@mui/material");
59
+ var import_react_button = require("@xylabs/react-button");
60
+ var import_react = require("react");
61
+
62
+ // src/components/MaxAccounts/OutOfBoundsSnackBar.tsx
63
+ var import_material = require("@mui/material");
64
+ var import_jsx_runtime = require("react/jsx-runtime");
65
+ var OutOfBoundsSnackBar = ({
66
+ activeAccountIndex,
67
+ desiredMaximumAccounts,
68
+ setShowSnackBar,
69
+ showSnackBar
70
+ }) => {
71
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
72
+ import_material.Snackbar,
73
+ {
74
+ anchorOrigin: { horizontal: "center", vertical: "top" },
75
+ autoHideDuration: 5e3,
76
+ onClose: () => setShowSnackBar?.(false),
77
+ open: showSnackBar,
78
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_material.Alert, { severity: "error", onClose: () => setShowSnackBar?.(false), children: [
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_material.AlertTitle, { children: "Maximum Accounts Error" }),
80
+ "Your currently selected account number (",
81
+ activeAccountIndex === void 0 ? "" : activeAccountIndex + 1,
82
+ ") cannot be greater than the desired Maximum Accounts (",
83
+ desiredMaximumAccounts,
84
+ ")."
85
+ ] })
86
+ }
87
+ );
88
+ };
89
+
90
+ // src/components/MaxAccounts/MaxAccountsTableRow.tsx
91
+ var import_jsx_runtime2 = require("react/jsx-runtime");
92
+ var MaxAccountsTableRow = ({ activeAccountIndex, changeMaxAccounts, maxAccounts }) => {
93
+ const [desiredMaximumAccounts, setDesiredMaximumAccounts] = (0, import_react.useState)();
94
+ const [showSnackBar, setShowSnackBar] = (0, import_react.useState)(false);
95
+ const handleChangeMaxAccounts = (change) => {
96
+ if (maxAccounts !== void 0 && activeAccountIndex !== void 0) {
97
+ switch (change) {
98
+ case "decrease": {
99
+ const desiredMaximumAccounts2 = maxAccounts - 1;
100
+ const validMaximumAccounts = desiredMaximumAccounts2 > 0;
101
+ const maxAccountsWithinRange = activeAccountIndex + 1 <= desiredMaximumAccounts2;
102
+ if (validMaximumAccounts && maxAccountsWithinRange) {
103
+ changeMaxAccounts?.(desiredMaximumAccounts2);
104
+ }
105
+ if (!maxAccountsWithinRange) setShowSnackBar(true);
106
+ setDesiredMaximumAccounts(desiredMaximumAccounts2);
107
+ return;
108
+ }
109
+ case "increase": {
110
+ changeMaxAccounts?.(maxAccounts + 1);
111
+ return;
112
+ }
113
+ default: {
114
+ console.error(change, "is not a recognized value");
115
+ }
116
+ }
117
+ } else {
118
+ throw new Error("Max Accounts is unset and needs a default");
119
+ }
120
+ };
121
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.TableRow, { children: [
122
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.TableCell, { children: "Maximum Accounts" }),
123
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.TableCell, { align: "center", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_material2.Typography, { variant: "caption", children: maxAccounts }) }),
124
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.TableCell, { align: "center", children: [
125
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_material2.ButtonGroup, { children: [
126
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_button.ButtonEx, { onClick: () => handleChangeMaxAccounts("decrease"), variant: "contained", size: "small", children: "-" }),
127
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_button.ButtonEx, { onClick: () => handleChangeMaxAccounts("increase"), variant: "contained", size: "small", children: "+" })
128
+ ] }),
129
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
130
+ OutOfBoundsSnackBar,
131
+ {
132
+ desiredMaximumAccounts,
133
+ activeAccountIndex,
134
+ setShowSnackBar,
135
+ showSnackBar
136
+ }
137
+ )
138
+ ] })
139
+ ] });
140
+ };
141
+
142
+ // src/components/SeedPhrase/_shared/SeedPhraseIconButton.tsx
143
+ var import_icons_material = require("@mui/icons-material");
144
+ var import_material3 = require("@mui/material");
145
+ var import_react2 = require("react");
146
+ var import_jsx_runtime3 = require("react/jsx-runtime");
147
+ var SeedPhraseIconButton = (props) => {
148
+ const [open, setOpen] = (0, import_react2.useState)(false);
149
+ const onClose = () => setOpen(false);
150
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
151
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.IconButton, { onClick: () => setOpen(true), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_icons_material.HelpOutline, { fontSize: "small" }) }),
152
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.Dialog, { open, children: [
153
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.DialogTitle, { children: "Understanding your Seed Phrase" }),
154
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.DialogContent, { children: [
155
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.Typography, { children: [
156
+ "Your Seed Phrase should adhere to the",
157
+ " ",
158
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.Link, { target: "_blank", href: "https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki", children: "bip39 specification" }),
159
+ " ",
160
+ "and is used to generate accounts which identify your data on the XYO Network."
161
+ ] }),
162
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_material3.List, { children: [
163
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not share this phrase with anyone." }),
164
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not save it to a public computer." }),
165
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not use a existing phrase from another wallet (i.e. Metamask)." }),
166
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.ListItem, { children: "Do not use before copying it down somewhere safe." })
167
+ ] })
168
+ ] }),
169
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.DialogActions, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material3.Button, { onClick: onClose, variant: "outlined", children: "OK" }) })
170
+ ] })
171
+ ] });
172
+ };
173
+
174
+ // src/components/SeedPhrase/DefaultSeedPhrase.tsx
175
+ var import_material4 = require("@mui/material");
176
+ var import_bip39 = require("@scure/bip39");
177
+ var import_english = require("@scure/bip39/wordlists/english");
178
+ var import_react3 = require("react");
179
+ var import_jsx_runtime4 = require("react/jsx-runtime");
180
+ var DefaultSeedPhrase = ({ changeSeedPhrase, children, hideDefaultSeedPhraseMessage, seedPhrase }) => {
181
+ const [showSnackBar, setShowSnackBar] = (0, import_react3.useState)(false);
182
+ (0, import_react3.useEffect)(() => {
183
+ if (!seedPhrase) {
184
+ const mnemonic = (0, import_bip39.generateMnemonic)(import_english.wordlist, 256);
185
+ changeSeedPhrase?.(mnemonic);
186
+ setShowSnackBar(true);
187
+ }
188
+ }, [changeSeedPhrase, seedPhrase]);
189
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
190
+ hideDefaultSeedPhraseMessage ? null : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
191
+ import_material4.Snackbar,
192
+ {
193
+ open: showSnackBar,
194
+ autoHideDuration: 5e3,
195
+ onClose: () => setShowSnackBar(false),
196
+ anchorOrigin: { horizontal: "center", vertical: "top" },
197
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_material4.Alert, { severity: "success", children: [
198
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_material4.AlertTitle, { children: "Default Seed Phrase Generated" }),
199
+ "Go to application settings to save it."
200
+ ] })
201
+ }
202
+ ),
203
+ children
204
+ ] });
205
+ };
206
+
207
+ // src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx
208
+ var import_material5 = require("@mui/material");
209
+
210
+ // src/contexts/SeedPhrase/Context.ts
211
+ var import_react_shared = require("@xyo-network/react-shared");
212
+ var SeedPhraseContext = (0, import_react_shared.createContextEx)();
213
+
214
+ // src/contexts/SeedPhrase/Provider.tsx
215
+ var import_bip392 = require("@scure/bip39");
216
+ var import_english2 = require("@scure/bip39/wordlists/english");
217
+ var import_react4 = require("react");
218
+ var import_jsx_runtime5 = require("react/jsx-runtime");
219
+ var validate = (passedPhrase) => {
220
+ if (!passedPhrase) {
221
+ return null;
222
+ }
223
+ return (0, import_bip392.validateMnemonic)(passedPhrase, import_english2.wordlist);
224
+ };
225
+ var SeedPhraseProvider = ({
226
+ children,
227
+ defaultPhrase,
228
+ handleChangeSeedPhrase,
229
+ saveCallback,
230
+ seedPhrase,
231
+ open
232
+ }) => {
233
+ const [phrase, setPhrase] = (0, import_react4.useState)();
234
+ const [overwriteWarning, setOverwriteWarning] = (0, import_react4.useState)(false);
235
+ (0, import_react4.useEffect)(() => {
236
+ setPhrase(defaultPhrase);
237
+ }, [defaultPhrase]);
238
+ (0, import_react4.useEffect)(() => {
239
+ if (seedPhrase || open) {
240
+ setPhrase?.(seedPhrase ?? "");
241
+ }
242
+ }, [seedPhrase, open, setPhrase]);
243
+ const handleGenerate = (0, import_react4.useCallback)(() => {
244
+ const mnemonic = (0, import_bip392.generateMnemonic)(import_english2.wordlist, 256);
245
+ setPhrase?.(mnemonic);
246
+ setOverwriteWarning?.(false);
247
+ }, []);
248
+ const handleCancelOverwrite = (0, import_react4.useCallback)(() => {
249
+ setOverwriteWarning?.(false);
250
+ }, []);
251
+ const handleClear = (0, import_react4.useCallback)(() => {
252
+ setPhrase?.("");
253
+ setOverwriteWarning?.(false);
254
+ }, []);
255
+ const handleSave = (0, import_react4.useCallback)(() => {
256
+ if (!overwriteWarning && seedPhrase && seedPhrase !== phrase) {
257
+ setOverwriteWarning?.(true);
258
+ } else {
259
+ handleChangeSeedPhrase?.(phrase ?? "");
260
+ saveCallback?.();
261
+ }
262
+ }, [handleChangeSeedPhrase, overwriteWarning, phrase, saveCallback, seedPhrase]);
263
+ (0, import_react4.useEffect)(() => {
264
+ if (!open) {
265
+ handleCancelOverwrite();
266
+ }
267
+ }, [handleCancelOverwrite, open]);
268
+ const validSeedPhrase = (0, import_react4.useMemo)(() => validate?.(seedPhrase), [seedPhrase]);
269
+ const validPhrase = (0, import_react4.useMemo)(() => validate?.(phrase), [phrase]);
270
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
271
+ SeedPhraseContext.Provider,
272
+ {
273
+ value: {
274
+ handleCancelOverwrite,
275
+ handleChangeSeedPhrase,
276
+ handleClear,
277
+ handleGenerate,
278
+ handleSave,
279
+ overwriteWarning,
280
+ phrase,
281
+ provided: true,
282
+ seedPhrase,
283
+ setOverwriteWarning,
284
+ setPhrase,
285
+ validPhrase,
286
+ validSeedPhrase,
287
+ validate
288
+ },
289
+ children
290
+ }
291
+ );
292
+ };
293
+
294
+ // src/contexts/SeedPhrase/use.tsx
295
+ var import_react_shared2 = require("@xyo-network/react-shared");
296
+ var useSeedPhrase = () => (0, import_react_shared2.useContextEx)(SeedPhraseContext, "SeedPhrase", true);
297
+
298
+ // src/contexts/Wallet/Context.ts
299
+ var import_react_shared3 = require("@xyo-network/react-shared");
300
+ var WalletContext = (0, import_react_shared3.createContextEx)();
301
+
302
+ // src/contexts/Wallet/Provider.tsx
303
+ var import_react_promise = require("@xylabs/react-promise");
304
+ var import_react5 = require("react");
305
+ var import_jsx_runtime6 = require("react/jsx-runtime");
306
+ var WalletProvider = ({
307
+ children,
308
+ defaultActiveAccountIndex = 0,
309
+ rootWallet = null,
310
+ ...props
311
+ }) => {
312
+ const [activeAccountIndex, setActiveAccountIndex] = (0, import_react5.useState)(defaultActiveAccountIndex);
313
+ (0, import_react5.useEffect)(() => {
314
+ if (defaultActiveAccountIndex !== void 0) {
315
+ setActiveAccountIndex(defaultActiveAccountIndex);
316
+ }
317
+ }, [defaultActiveAccountIndex]);
318
+ const [activeAccount = null] = (0, import_react_promise.usePromise)(async () => await rootWallet?.derivePath(activeAccountIndex.toString()), [activeAccountIndex, rootWallet]);
319
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
320
+ WalletContext.Provider,
321
+ {
322
+ value: {
323
+ activeAccount,
324
+ activeAccountIndex,
325
+ provided: true,
326
+ rootWallet,
327
+ setActiveAccountIndex
328
+ },
329
+ ...props,
330
+ children
331
+ }
332
+ );
333
+ };
334
+
335
+ // src/contexts/Wallet/use.ts
336
+ var import_react_promise2 = require("@xylabs/react-promise");
337
+ var import_react_shared4 = require("@xyo-network/react-shared");
338
+ var useWalletContext = (required = true) => {
339
+ return (0, import_react_shared4.useContextEx)(WalletContext, "Wallet", required);
340
+ };
341
+ var useWalletProvided = () => {
342
+ return (0, import_react_shared4.useProvided)(WalletContext);
343
+ };
344
+ var useRootWallet = (required = true) => {
345
+ const { rootWallet } = useWalletContext(required);
346
+ return [rootWallet, void 0];
347
+ };
348
+ var useIndexedWalletFromContext = (index, required = true) => {
349
+ const { rootWallet } = useWalletContext(required);
350
+ const [wallet] = (0, import_react_promise2.usePromise)(async () => await rootWallet?.derivePath(index.toString()) ?? rootWallet, [rootWallet, index]);
351
+ return [wallet, void 0];
352
+ };
353
+ var useSelectedWalletAccount = (required = true) => {
354
+ const { activeAccountIndex } = useWalletContext(required);
355
+ const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
356
+ return activeAccountIndex === void 0 && account === null ? [null, void 0] : [account, void 0];
357
+ };
358
+
359
+ // src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx
360
+ var import_jsx_runtime7 = require("react/jsx-runtime");
361
+ var DialogActionButtons = ({ onClose, ...props }) => {
362
+ const { handleSave, setPhrase } = useSeedPhrase();
363
+ const wrappedOnClose = (e) => {
364
+ setPhrase?.("");
365
+ onClose?.(e, "escapeKeyDown");
366
+ };
367
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_material5.DialogActions, { ...props, children: [
368
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material5.Button, { variant: "outlined", onClick: wrappedOnClose, children: "Cancel" }),
369
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_material5.Button, { variant: "outlined", onClick: handleSave, children: "Save" })
370
+ ] });
371
+ };
372
+
373
+ // src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx
374
+ var import_material7 = require("@mui/material");
375
+
376
+ // src/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.ts
377
+ var colorParser = (conditional) => {
378
+ switch (conditional) {
379
+ case true: {
380
+ return "success";
381
+ }
382
+ case false: {
383
+ return "error";
384
+ }
385
+ default: {
386
+ return;
387
+ }
388
+ }
389
+ };
390
+
391
+ // src/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.tsx
392
+ var import_material6 = require("@mui/material");
393
+ var import_jsx_runtime8 = require("react/jsx-runtime");
394
+ var InvalidPhraseTypography = (props) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_material6.Typography, { variant: "caption", color: "error", ...props, children: [
395
+ "Invalid seed phrase. See -",
396
+ " ",
397
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_material6.Link, { target: "_blank", href: "https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki", children: "bip39 Proposal" })
398
+ ] });
399
+
400
+ // src/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.tsx
401
+ var import_icons_material2 = require("@mui/icons-material");
402
+ var import_react_flexbox = require("@xylabs/react-flexbox");
403
+ var import_react6 = require("react");
404
+ var import_jsx_runtime9 = require("react/jsx-runtime");
405
+ var PhraseHeaderBox = ({ children, conditional, ...props }) => {
406
+ const state = (0, import_react6.useMemo)(() => {
407
+ switch (conditional) {
408
+ case true: {
409
+ return "success";
410
+ }
411
+ case false: {
412
+ return "error";
413
+ }
414
+ default: {
415
+ return null;
416
+ }
417
+ }
418
+ }, [conditional]);
419
+ const Icon = (0, import_react6.useMemo)(() => {
420
+ switch (state) {
421
+ case "success": {
422
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons_material2.CheckCircleOutline, { fontSize: "small", color: "success" });
423
+ }
424
+ case "error": {
425
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons_material2.HighlightOff, { fontSize: "small", color: "error" });
426
+ }
427
+ default: {
428
+ return null;
429
+ }
430
+ }
431
+ }, [state]);
432
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react_flexbox.FlexRow, { justifyContent: "start", columnGap: 1, ...props, children: [
433
+ Icon,
434
+ children
435
+ ] });
436
+ };
437
+
438
+ // src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx
439
+ var import_jsx_runtime10 = require("react/jsx-runtime");
440
+ var NewPhraseTextField = ({ children, disableColor, ...props }) => {
441
+ const { phrase, setPhrase, validPhrase } = useSeedPhrase();
442
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_material7.FormControl, { fullWidth: true, size: "small", sx: { display: "flex", flexDirection: "column", rowGap: 1 }, children: [
443
+ children,
444
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
445
+ import_material7.TextField,
446
+ {
447
+ focused: true,
448
+ color: disableColor ? void 0 : colorParser(validPhrase),
449
+ error: validPhrase === false,
450
+ helperText: validPhrase === false ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(InvalidPhraseTypography, {}) : null,
451
+ fullWidth: true,
452
+ maxRows: Number.POSITIVE_INFINITY,
453
+ multiline: true,
454
+ onChange: (e) => setPhrase?.(e.target.value),
455
+ value: phrase,
456
+ ...props
457
+ }
458
+ )
459
+ ] }) });
460
+ };
461
+
462
+ // src/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.tsx
463
+ var import_material8 = require("@mui/material");
464
+ var import_jsx_runtime11 = require("react/jsx-runtime");
465
+ var PhraseDialogActions = () => {
466
+ const { handleClear, handleGenerate, overwriteWarning } = useSeedPhrase();
467
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_material8.DialogActions, { sx: { justifyContent: "center" }, children: [
468
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Button, { disabled: overwriteWarning, variant: "outlined", onClick: handleGenerate, children: "Generate" }),
469
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_material8.Button, { variant: "outlined", onClick: handleClear, children: "Clear" })
470
+ ] });
471
+ };
472
+
473
+ // src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx
474
+ var import_material9 = require("@mui/material");
475
+ var import_react7 = require("react");
476
+ var import_jsx_runtime12 = require("react/jsx-runtime");
477
+ var SavedPhraseTextField = ({ fullWidth, showPhraseHeader, ...props }) => {
478
+ const { validSeedPhrase, seedPhrase } = useSeedPhrase();
479
+ const [visible, setVisible] = (0, import_react7.useState)(false);
480
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_material9.FormControl, { fullWidth, size: "small", sx: { display: "flex", flexDirection: "column", rowGap: 1 }, children: [
481
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material9.Chip, { label: visible ? "Hide Saved Seed Phrase" : "Reveal Saved Seed Phrase", onClick: () => setVisible(!visible), sx: { alignSelf: "center" } }),
482
+ visible ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
483
+ showPhraseHeader ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_material9.FormLabel, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(PhraseHeaderBox, { conditional: validSeedPhrase, children: "Saved Seed Phrase" }) }) : null,
484
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
485
+ import_material9.TextField,
486
+ {
487
+ defaultValue: seedPhrase,
488
+ disabled: true,
489
+ error: validSeedPhrase === false,
490
+ helperText: validSeedPhrase === false ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(InvalidPhraseTypography, {}) : null,
491
+ fullWidth: true,
492
+ maxRows: Number.POSITIVE_INFINITY,
493
+ multiline: true,
494
+ ...props
495
+ }
496
+ )
497
+ ] }) : null
498
+ ] });
499
+ };
500
+
501
+ // src/components/SeedPhrase/dialog/components/OverwriteWarning.tsx
502
+ var import_material10 = require("@mui/material");
503
+ var import_react_flexbox2 = require("@xylabs/react-flexbox");
504
+ var import_jsx_runtime13 = require("react/jsx-runtime");
505
+ var OverwriteWarning = () => {
506
+ const { handleCancelOverwrite, handleSave } = useSeedPhrase();
507
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
508
+ import_material10.Alert,
509
+ {
510
+ variant: "outlined",
511
+ severity: "warning",
512
+ action: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_react_flexbox2.FlexRow, { sx: { columnGap: 1 }, children: [
513
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material10.Button, { variant: "outlined", color: "inherit", size: "small", onClick: handleSave, children: "Overwrite" }),
514
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_material10.Button, { variant: "outlined", color: "inherit", size: "small", onClick: handleCancelOverwrite, children: "Cancel" })
515
+ ] }),
516
+ children: "Are you sure you want to overwrite existing seed phrase? This action cannot be undone."
517
+ }
518
+ );
519
+ };
520
+
521
+ // src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx
522
+ var import_material11 = require("@mui/material");
523
+ var import_jsx_runtime14 = require("react/jsx-runtime");
524
+ var SeedPhraseDialog = ({ changeSeedPhrase, seedPhrase, ...props }) => {
525
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
526
+ SeedPhraseProvider,
527
+ {
528
+ seedPhrase,
529
+ handleChangeSeedPhrase: changeSeedPhrase,
530
+ open: props.open,
531
+ saveCallback: () => props.onClose?.({}, "escapeKeyDown"),
532
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SeedPhraseDialogInner, { ...props })
533
+ }
534
+ );
535
+ };
536
+ var SeedPhraseDialogInner = (props) => {
537
+ const { overwriteWarning, seedPhrase, validPhrase } = useSeedPhrase();
538
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_material11.Dialog, { "aria-labelledby": "alert-dialog-title", "aria-describedby": "alert-dialog-description", fullWidth: true, maxWidth: "sm", ...props, children: [
539
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_material11.DialogTitle, { id: "alert-dialog-title", children: [
540
+ "Update Your Seed Phrase ",
541
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SeedPhraseIconButton, {})
542
+ ] }),
543
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_material11.DialogContent, { sx: { display: "flex", flexDirection: "column", rowGap: 2 }, children: [
544
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(NewPhraseTextField, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_material11.FormLabel, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PhraseHeaderBox, { conditional: validPhrase, children: "New Seed Phrase" }) }) }),
545
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(PhraseDialogActions, {}),
546
+ seedPhrase ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SavedPhraseTextField, {}) : null,
547
+ overwriteWarning ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(OverwriteWarning, {}) : null
548
+ ] }),
549
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DialogActionButtons, { onClose: props.onClose })
550
+ ] });
551
+ };
552
+
553
+ // src/components/SeedPhrase/settings/SeedPhraseTableRow.tsx
554
+ var import_icons_material3 = require("@mui/icons-material");
555
+ var import_material12 = require("@mui/material");
556
+ var import_react8 = require("react");
557
+ var import_jsx_runtime15 = require("react/jsx-runtime");
558
+ var SeedPhraseTableRow = ({ changeSeedPhrase, seedPhrase, ...props }) => {
559
+ const [open, setOpen] = (0, import_react8.useState)(false);
560
+ const handleOpen = () => {
561
+ setOpen(true);
562
+ };
563
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material12.TableRow, { ...props, children: [
564
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material12.TableCell, { children: [
565
+ "Seed Phrase ",
566
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SeedPhraseIconButton, {})
567
+ ] }),
568
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material12.TableCell, { align: "center", children: seedPhrase ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons_material3.RadioButtonChecked, { color: "success" }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_icons_material3.Cancel, { color: "error" }) }),
569
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_material12.TableCell, { children: [
570
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SeedPhraseDialog, { changeSeedPhrase, open, onClose: () => setOpen(false), seedPhrase }),
571
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material12.ButtonGroup, { fullWidth: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_material12.Button, { variant: "contained", size: "small", onClick: handleOpen, children: "Update" }) })
572
+ ] })
573
+ ] });
574
+ };
575
+
576
+ // src/components/WalletAccountDetails/WalletAccountDetails.tsx
577
+ var import_eth_address = require("@xylabs/eth-address");
578
+ var import_react_crypto = require("@xylabs/react-crypto");
579
+ var import_react_flexbox3 = require("@xylabs/react-flexbox");
580
+ var import_react_number_status = require("@xylabs/react-number-status");
581
+ var import_react_network = require("@xyo-network/react-network");
582
+
583
+ // src/hooks/useAccount.ts
584
+ var import_react_promise3 = require("@xylabs/react-promise");
585
+ var import_react9 = require("react");
586
+ var useAccount = ({ wallet, account, index, required = false } = {}) => {
587
+ const walletContextProvided = useWalletProvided();
588
+ const [validationError, setValidationError] = (0, import_react9.useState)();
589
+ if (wallet && account && !validationError) {
590
+ setValidationError(new Error("useAccount can not have both a wallet and an account in the parameters"));
591
+ }
592
+ if (index && account && !validationError) {
593
+ setValidationError(new Error("useAccount can not have both a index and an account in the parameters"));
594
+ }
595
+ const [error, setError] = (0, import_react9.useState)();
596
+ const [rootWallet] = useRootWallet(!wallet && required);
597
+ const { activeAccountIndex } = useWalletContext(false);
598
+ const [activeAccount] = (0, import_react_promise3.usePromise)(async () => {
599
+ try {
600
+ if (!validationError) {
601
+ if (wallet) {
602
+ return await wallet?.derivePath?.(`${index ?? 0}'\0`);
603
+ } else if (rootWallet) {
604
+ return await rootWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\0`);
605
+ }
606
+ }
607
+ } catch (ex) {
608
+ const error2 = ex;
609
+ console.error(error2.message);
610
+ setError(error2);
611
+ }
612
+ }, [index, wallet, rootWallet, activeAccountIndex, validationError]);
613
+ if (validationError && !error) {
614
+ console.error(validationError.message);
615
+ setError(validationError);
616
+ }
617
+ return [
618
+ error ? void 0 : account ?? activeAccount ?? walletContextProvided ? null : void 0,
619
+ error
620
+ ];
621
+ };
622
+
623
+ // src/hooks/useWallet.ts
624
+ var import_react_promise4 = require("@xylabs/react-promise");
625
+ var import_account = require("@xyo-network/account");
626
+ var import_react10 = require("react");
627
+ var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
628
+ const walletContextProvided = useWalletContext(false);
629
+ const [error, setError] = (0, import_react10.useState)();
630
+ const [contextAccount] = useSelectedWalletAccount(!wallet && required);
631
+ const [activeAccount] = (0, import_react_promise4.usePromise)(async () => {
632
+ try {
633
+ const newAccount = await (() => {
634
+ if (wallet) {
635
+ return wallet;
636
+ } else if (mnemonic) {
637
+ return import_account.HDWallet.fromPhrase(mnemonic);
638
+ } else if (seed) {
639
+ return import_account.HDWallet.fromSeed(seed);
640
+ }
641
+ return contextAccount;
642
+ })();
643
+ return path ? newAccount?.derivePath?.(path) : newAccount ?? wallet;
644
+ } catch (ex) {
645
+ setError(ex);
646
+ }
647
+ }, [mnemonic, contextAccount, seed, path, wallet]);
648
+ return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
649
+ };
650
+
651
+ // src/hooks/useWallets.ts
652
+ var import_react_promise5 = require("@xylabs/react-promise");
653
+ var useWallets = ({ wallet, paths }) => {
654
+ const walletContextProvided = useWalletContext(false);
655
+ const [foundWallet] = useWallet({ wallet });
656
+ const [wallets, error] = (0, import_react_promise5.usePromise)(
657
+ async () => foundWallet ? await Promise.all(paths.map((path) => foundWallet.derivePath(path))) : void 0,
658
+ [foundWallet, paths]
659
+ );
660
+ return [wallets ?? (walletContextProvided ? null : wallets), error];
661
+ };
662
+
663
+ // src/hooks/useWrapperAccount.ts
664
+ var import_react_promise6 = require("@xylabs/react-promise");
665
+ var import_account2 = require("@xyo-network/account");
666
+ var import_async_mutex = require("async-mutex");
667
+ var globalWrapperWallet;
668
+ var globalWrapperWalletMutex = new import_async_mutex.Mutex();
669
+ var useWrapperAccount = (account) => {
670
+ return (0, import_react_promise6.usePromise)(async () => {
671
+ return await globalWrapperWalletMutex.runExclusive(async () => {
672
+ if (account !== void 0) {
673
+ return account;
674
+ }
675
+ if (globalWrapperWallet) {
676
+ return globalWrapperWallet;
677
+ }
678
+ try {
679
+ globalWrapperWallet = await import_account2.HDWallet.random();
680
+ console.log(`Global Wrapper Wallet Creation Success: ${globalWrapperWallet.address}`);
681
+ } catch (ex) {
682
+ const error = ex;
683
+ console.error(`Global Wrapper Wallet Creation Failed: ${error.message}`);
684
+ }
685
+ return globalWrapperWallet;
686
+ });
687
+ }, [account]);
688
+ };
689
+
690
+ // src/components/WalletAccountDetails/WalletAccountDetails.tsx
691
+ var import_jsx_runtime16 = require("react/jsx-runtime");
692
+ var WalletAccountDetails = ({ exploreUrl = "https://explore.xyo.network", account, ...props }) => {
693
+ const [accountToUse] = useAccount({ account });
694
+ const { network } = (0, import_react_network.useNetwork)();
695
+ const exploreAddressUrl = `${exploreUrl}/recent?account=${accountToUse?.address}&network=${network?.name ?? "main"}`;
696
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_flexbox3.FlexCol, { ...props, children: [
697
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_crypto.EthAccountButton, { address: import_eth_address.EthAddress.fromString(accountToUse?.address) }),
698
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_flexbox3.FlexRow, { gap: 1, children: [
699
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "Tokens", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.tokens`, target: "_blank" }),
700
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "NFTs", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.nfts`, target: "_blank" }),
701
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "Signatures", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.signatures`, target: "_blank" }),
702
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_number_status.NumberStatus, { rounded: true, title: "Signins", value: 0, to: `${exploreAddressUrl}&schema=network.xyo.account.signins`, target: "_blank" })
703
+ ] })
704
+ ] });
705
+ };
706
+
707
+ // src/components/WalletAccountSelect/Select.tsx
708
+ var import_material13 = require("@mui/material");
709
+ var import_react_select = require("@xylabs/react-select");
710
+ var import_react_address_render = require("@xyo-network/react-address-render");
711
+ var import_jsx_runtime17 = require("react/jsx-runtime");
712
+ var arrayRange = (length, start = 0) => {
713
+ return [...Array.from({ length }).keys()].map((x) => x + start);
714
+ };
715
+ var WalletAccountSelect = ({
716
+ addressNames = {},
717
+ iconOnly,
718
+ iconSize = 24,
719
+ icons,
720
+ maxAccounts = 1,
721
+ showFavorite = false,
722
+ size,
723
+ variant = "outlined",
724
+ ...props
725
+ }) => {
726
+ const { activeAccountIndex = 0, setActiveAccountIndex, rootWallet } = useWalletContext();
727
+ const disabled = !rootWallet || activeAccountIndex === void 0;
728
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: rootWallet ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
729
+ import_react_select.SelectEx,
730
+ {
731
+ margin: "dense",
732
+ disabled,
733
+ renderValue: (selectedAccountIndex) => {
734
+ const Item = () => {
735
+ const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: rootWallet });
736
+ const customName = selectedAccount ? addressNames[selectedAccount.address] : void 0;
737
+ const favorite = !!selectedAccount && selectedAccount.address in addressNames;
738
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_material13.MenuItem, { value: selectedAccountIndex, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
739
+ import_react_address_render.AddressRenderRowBox,
740
+ {
741
+ disableSharedRef: true,
742
+ flexGrow: 1,
743
+ address: selectedAccount?.address,
744
+ iconOnly,
745
+ iconSize,
746
+ icons,
747
+ name: customName,
748
+ favorite,
749
+ showFavorite
750
+ }
751
+ ) });
752
+ };
753
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Item, {});
754
+ },
755
+ value: activeAccountIndex,
756
+ onChange: (event) => setActiveAccountIndex?.(Number.parseInt(`${event.target.value}`)),
757
+ size,
758
+ variant,
759
+ ...props,
760
+ children: arrayRange(maxAccounts).map((index) => {
761
+ const Item = () => {
762
+ const [account] = useWallet({ path: index.toString(), wallet: rootWallet });
763
+ const customName = account ? addressNames[account.address] : void 0;
764
+ const favorite = !!account && account.address in addressNames;
765
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_material13.MenuItem, { value: index, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
766
+ import_react_address_render.AddressRenderRowBox,
767
+ {
768
+ disableSharedRef: true,
769
+ flexGrow: 1,
770
+ address: account?.address,
771
+ favorite,
772
+ iconOnly,
773
+ iconSize,
774
+ icons,
775
+ name: customName,
776
+ showFavorite
777
+ }
778
+ ) }, account?.address);
779
+ };
780
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Item, {}, index);
781
+ })
782
+ }
783
+ ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_material13.CircularProgress, { size: 24 }) });
784
+ };
785
+
786
+ // src/components/WalletAccountSelect/SelectBar.tsx
787
+ var import_react_flexbox4 = require("@xylabs/react-flexbox");
788
+ var import_jsx_runtime18 = require("react/jsx-runtime");
789
+ var WalletAccountSelectBar = ({
790
+ addressNames = {},
791
+ iconOnly,
792
+ iconSize,
793
+ icons,
794
+ maxAccounts = 1,
795
+ showFavorite = false,
796
+ size = "small",
797
+ ...props
798
+ }) => {
799
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_flexbox4.FlexCol, { alignItems: "stretch", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
800
+ WalletAccountSelect,
801
+ {
802
+ addressNames,
803
+ fullWidth: true,
804
+ showFavorite,
805
+ iconSize,
806
+ iconOnly,
807
+ icons,
808
+ maxAccounts,
809
+ size: size ?? "small",
810
+ variant: "outlined"
811
+ }
812
+ ) });
813
+ };
2
814
  //# sourceMappingURL=index.cjs.map