@xyo-network/react-wallet 2.64.0 → 2.64.3

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.
Files changed (94) hide show
  1. package/dist/browser/components/MaxAccounts/MaxAccountsTableRow.js +41 -11
  2. package/dist/browser/components/MaxAccounts/MaxAccountsTableRow.js.map +1 -1
  3. package/dist/browser/components/MaxAccounts/OutOfBoundsSnackBar.js +3 -2
  4. package/dist/browser/components/MaxAccounts/OutOfBoundsSnackBar.js.map +1 -1
  5. package/dist/browser/components/MaxAccounts/index.js +88 -1
  6. package/dist/browser/components/MaxAccounts/index.js.map +1 -1
  7. package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.js +3 -2
  8. package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.js.map +1 -1
  9. package/dist/browser/components/SeedPhrase/_shared/SeedPhraseIconButton.js +3 -2
  10. package/dist/browser/components/SeedPhrase/_shared/SeedPhraseIconButton.js.map +1 -1
  11. package/dist/browser/components/SeedPhrase/_shared/index.js +45 -1
  12. package/dist/browser/components/SeedPhrase/_shared/index.js.map +1 -1
  13. package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.js +295 -16
  14. package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.js.map +1 -1
  15. package/dist/browser/components/SeedPhrase/dialog/components/DialogActionButtons.js +13 -3
  16. package/dist/browser/components/SeedPhrase/dialog/components/DialogActionButtons.js.map +1 -1
  17. package/dist/browser/components/SeedPhrase/dialog/components/OverwriteWarning.js +13 -3
  18. package/dist/browser/components/SeedPhrase/dialog/components/OverwriteWarning.js.map +1 -1
  19. package/dist/browser/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.js +74 -12
  20. package/dist/browser/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.js.map +1 -1
  21. package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.js +60 -10
  22. package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.js.map +1 -1
  23. package/dist/browser/components/SeedPhrase/dialog/components/fields/index.js +125 -2
  24. package/dist/browser/components/SeedPhrase/dialog/components/fields/index.js.map +1 -1
  25. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.js +3 -2
  26. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.js.map +1 -1
  27. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.js +3 -2
  28. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.js.map +1 -1
  29. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.js +2 -1
  30. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.js.map +1 -1
  31. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/index.js +57 -3
  32. package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/index.js.map +1 -1
  33. package/dist/browser/components/SeedPhrase/dialog/components/index.js +164 -3
  34. package/dist/browser/components/SeedPhrase/dialog/components/index.js.map +1 -1
  35. package/dist/browser/components/SeedPhrase/dialog/index.js +315 -1
  36. package/dist/browser/components/SeedPhrase/dialog/index.js.map +1 -1
  37. package/dist/browser/components/SeedPhrase/index.js +373 -4
  38. package/dist/browser/components/SeedPhrase/index.js.map +1 -1
  39. package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.js +325 -12
  40. package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.js.map +1 -1
  41. package/dist/browser/components/SeedPhrase/settings/index.js +339 -1
  42. package/dist/browser/components/SeedPhrase/settings/index.js.map +1 -1
  43. package/dist/browser/components/WalletAccountDetails/WalletAccountDetails.js +62 -3
  44. package/dist/browser/components/WalletAccountDetails/WalletAccountDetails.js.map +1 -1
  45. package/dist/browser/components/WalletAccountDetails/index.js +83 -1
  46. package/dist/browser/components/WalletAccountDetails/index.js.map +1 -1
  47. package/dist/browser/components/WalletAccountSelect/Select.js +70 -5
  48. package/dist/browser/components/WalletAccountSelect/Select.js.map +1 -1
  49. package/dist/browser/components/WalletAccountSelect/SelectBar.js +150 -4
  50. package/dist/browser/components/WalletAccountSelect/SelectBar.js.map +1 -1
  51. package/dist/browser/components/WalletAccountSelect/WalletInfo.js +116 -10
  52. package/dist/browser/components/WalletAccountSelect/WalletInfo.js.map +1 -1
  53. package/dist/browser/components/WalletAccountSelect/index.js +175 -2
  54. package/dist/browser/components/WalletAccountSelect/index.js.map +1 -1
  55. package/dist/browser/components/index.js +694 -4
  56. package/dist/browser/components/index.js.map +1 -1
  57. package/dist/browser/contexts/SeedPhrase/Context.js +2 -1
  58. package/dist/browser/contexts/SeedPhrase/Context.js.map +1 -1
  59. package/dist/browser/contexts/SeedPhrase/Provider.js +9 -3
  60. package/dist/browser/contexts/SeedPhrase/Provider.js.map +1 -1
  61. package/dist/browser/contexts/SeedPhrase/index.js +91 -4
  62. package/dist/browser/contexts/SeedPhrase/index.js.map +1 -1
  63. package/dist/browser/contexts/SeedPhrase/use.js +8 -2
  64. package/dist/browser/contexts/SeedPhrase/use.js.map +1 -1
  65. package/dist/browser/contexts/Wallet/Context.js +2 -1
  66. package/dist/browser/contexts/Wallet/Context.js.map +1 -1
  67. package/dist/browser/contexts/Wallet/Provider.js +90 -7
  68. package/dist/browser/contexts/Wallet/Provider.js.map +1 -1
  69. package/dist/browser/contexts/Wallet/index.js +183 -5
  70. package/dist/browser/contexts/Wallet/index.js.map +1 -1
  71. package/dist/browser/contexts/Wallet/lib/WalletPath.js +4 -3
  72. package/dist/browser/contexts/Wallet/lib/WalletPath.js.map +1 -1
  73. package/dist/browser/contexts/Wallet/lib/index.js +21 -1
  74. package/dist/browser/contexts/Wallet/lib/index.js.map +1 -1
  75. package/dist/browser/contexts/Wallet/use.js +13 -7
  76. package/dist/browser/contexts/Wallet/use.js.map +1 -1
  77. package/dist/browser/contexts/Wallet/usePromise.js +2 -1
  78. package/dist/browser/contexts/Wallet/usePromise.js.map +1 -1
  79. package/dist/browser/contexts/index.js +273 -2
  80. package/dist/browser/contexts/index.js.map +1 -1
  81. package/dist/browser/hooks/index.js +147 -4
  82. package/dist/browser/hooks/index.js.map +1 -1
  83. package/dist/browser/hooks/useAccount.js +24 -4
  84. package/dist/browser/hooks/useAccount.js.map +1 -1
  85. package/dist/browser/hooks/useWallet.js +38 -4
  86. package/dist/browser/hooks/useWallet.js.map +1 -1
  87. package/dist/browser/hooks/useWallets.js +69 -4
  88. package/dist/browser/hooks/useWallets.js.map +1 -1
  89. package/dist/browser/hooks/useWrapperAccount.js +4 -3
  90. package/dist/browser/hooks/useWrapperAccount.js.map +1 -1
  91. package/dist/browser/index.js +890 -3
  92. package/dist/browser/index.js.map +1 -1
  93. package/dist/docs.json +147 -147
  94. package/package.json +22 -22
@@ -1,13 +1,78 @@
1
- import { Fragment, jsx } from "react/jsx-runtime";
1
+ // src/components/WalletAccountSelect/Select.tsx
2
2
  import { CircularProgress, MenuItem } from "@mui/material";
3
3
  import { SelectEx } from "@xylabs/react-select";
4
4
  import { AddressRenderRowBox } from "@xyo-network/react-address-render";
5
- import { useWalletContext } from "../../contexts";
6
- import { useWallet } from "../../hooks";
7
- const arrayRange = (length, start = 0) => {
5
+
6
+ // src/contexts/Wallet/Context.ts
7
+ import { createContextEx } from "@xyo-network/react-shared";
8
+ var WalletContext = createContextEx();
9
+
10
+ // src/contexts/Wallet/use.ts
11
+ import { usePromise } from "@xylabs/react-promise";
12
+ import { useContextEx, useProvided } from "@xyo-network/react-shared";
13
+ var useWalletContext = (required = true) => {
14
+ return useContextEx(WalletContext, "Wallet", required);
15
+ };
16
+ var useWalletProvided = () => {
17
+ return useProvided(WalletContext);
18
+ };
19
+ var useCoinTypeWallet = (required = true) => {
20
+ const { coinTypeWallet } = useWalletContext(required);
21
+ return [coinTypeWallet, void 0];
22
+ };
23
+ var useIndexedWalletFromContext = (index, required = true) => {
24
+ const [coinTypeWallet] = useCoinTypeWallet(required);
25
+ const [wallet] = usePromise(async () => await coinTypeWallet?.derivePath(index.toString()) ?? coinTypeWallet, [coinTypeWallet, index]);
26
+ return [wallet, void 0];
27
+ };
28
+ var useSelectedWalletAccount = (required = true) => {
29
+ const { activeAccountIndex } = useWalletContext(required);
30
+ const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
31
+ if (activeAccountIndex === void 0 && account === null) {
32
+ return [null, void 0];
33
+ } else {
34
+ return [account, void 0];
35
+ }
36
+ };
37
+
38
+ // src/hooks/useWallet.ts
39
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
40
+ import { HDWallet } from "@xyo-network/account";
41
+ import { useState } from "react";
42
+ var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
43
+ const walletContextProvided = useWalletProvided();
44
+ const [error, setError] = useState();
45
+ const [contextAccount] = useSelectedWalletAccount(!wallet && required);
46
+ const [activeAccount] = usePromise2(async () => {
47
+ try {
48
+ const newAccount = await (() => {
49
+ if (wallet) {
50
+ return wallet;
51
+ } else if (mnemonic) {
52
+ return HDWallet.fromMnemonic(mnemonic);
53
+ } else if (seed) {
54
+ return HDWallet.fromSeed(seed);
55
+ }
56
+ return contextAccount;
57
+ })();
58
+ if (path) {
59
+ return newAccount?.derivePath?.(path);
60
+ } else {
61
+ return newAccount ?? wallet;
62
+ }
63
+ } catch (ex) {
64
+ setError(ex);
65
+ }
66
+ }, [mnemonic, contextAccount, seed, path, wallet]);
67
+ return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
68
+ };
69
+
70
+ // src/components/WalletAccountSelect/Select.tsx
71
+ import { Fragment, jsx } from "react/jsx-runtime";
72
+ var arrayRange = (length, start = 0) => {
8
73
  return Array.from(Array(length).keys()).map((x) => x + start);
9
74
  };
10
- const WalletAccountSelect = ({
75
+ var WalletAccountSelect = ({
11
76
  addressNames = {},
12
77
  iconOnly,
13
78
  iconSize = 24,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/WalletAccountSelect/Select.tsx"],"sourcesContent":["import { CircularProgress, MenuItem, SelectProps } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport { AddressRenderRowBox, AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\n\nimport { useWalletContext } from '../../contexts'\nimport { useWallet } from '../../hooks'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport interface WalletAccountSelectProps extends SharedAddressRenderRowBoxProps, SelectProps<number> {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n}\n\nconst arrayRange = (length: number, start = 0) => {\n return Array.from(Array(length).keys()).map((x) => x + start)\n}\n\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames = {},\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n ...props\n}) => {\n const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext()\n const disabled = !coinTypeWallet || activeAccountIndex === undefined\n\n return (\n <>\n {coinTypeWallet ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n const Item: React.FC = () => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet })\n const customName = selectedAccount ? addressNames[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in addressNames\n return (\n <MenuItem value={selectedAccountIndex} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={selectedAccount?.address}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n favorite={favorite}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n return <Item />\n }}\n value={activeAccountIndex}\n onChange={(event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`))}\n size={size}\n variant=\"outlined\"\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n const Item: React.FC = () => {\n const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet })\n const customName = account ? addressNames[account.address] : undefined\n const favorite = !!account && account.address in addressNames\n return (\n <MenuItem key={account?.address} value={index} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={account?.address}\n favorite={favorite}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n\n return <Item key={index} />\n })}\n </SelectEx>\n ) : (\n <CircularProgress size={24} />\n )}\n </>\n )\n}\n"],"mappings":"AAgCI,mBAYc,WAZd;AAhCJ,SAAS,kBAAkB,gBAA6B;AACxD,SAAS,gBAAgB;AACzB,SAAS,2BAAqD;AAE9D,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAS1B,MAAM,aAAa,CAAC,QAAgB,QAAQ,MAAM;AAChD,SAAO,MAAM,KAAK,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;AAC9D;AAEO,MAAM,sBAA0D,CAAC;AAAA,EACtE,eAAe,CAAC;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,EAAE,qBAAqB,GAAG,uBAAuB,eAAe,IAAI,iBAAiB;AAC3F,QAAM,WAAW,CAAC,kBAAkB,uBAAuB;AAE3D,SACE,gCACG,2BACC;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP;AAAA,MACA,aAAa,CAAC,yBAAyB;AACrC,cAAM,OAAiB,MAAM;AAC3B,gBAAM,CAAC,eAAe,IAAI,UAAU,EAAE,MAAM,qBAAqB,SAAS,GAAG,QAAQ,eAAe,CAAC;AACrG,gBAAM,aAAa,kBAAkB,aAAa,gBAAgB,OAAO,IAAI;AAC7E,gBAAM,WAAW,CAAC,CAAC,mBAAmB,gBAAgB,WAAW;AACjE,iBACE,oBAAC,YAAS,OAAO,sBAAsB,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,YAAY,EAAE,GACzF;AAAA,YAAC;AAAA;AAAA,cACC,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,iBAAiB;AAAA,cAC1B;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM;AAAA,cACN;AAAA,cACA;AAAA;AAAA,UACF,GACF;AAAA,QAEJ;AACA,eAAO,oBAAC,QAAK;AAAA,MACf;AAAA,MACA,OAAO;AAAA,MACP,UAAU,CAAC,UAAU,wBAAwB,SAAS,GAAG,MAAM,OAAO,KAAK,EAAE,CAAC;AAAA,MAC9E;AAAA,MACA,SAAQ;AAAA,MACP,GAAG;AAAA,MAEH,qBAAW,WAAW,EAAE,IAAI,CAAC,UAAU;AACtC,cAAM,OAAiB,MAAM;AAC3B,gBAAM,CAAC,OAAO,IAAI,UAAU,EAAE,MAAM,MAAM,SAAS,GAAG,QAAQ,eAAe,CAAC;AAC9E,gBAAM,aAAa,UAAU,aAAa,QAAQ,OAAO,IAAI;AAC7D,gBAAM,WAAW,CAAC,CAAC,WAAW,QAAQ,WAAW;AACjD,iBACE,oBAAC,YAAgC,OAAO,OAAO,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,YAAY,EAAE,GACjG;AAAA,YAAC;AAAA;AAAA,cACC,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,SAAS;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM;AAAA,cACN;AAAA;AAAA,UACF,KAXa,SAAS,OAYxB;AAAA,QAEJ;AAEA,eAAO,oBAAC,UAAU,KAAO;AAAA,MAC3B,CAAC;AAAA;AAAA,EACH,IAEA,oBAAC,oBAAiB,MAAM,IAAI,GAEhC;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/WalletAccountSelect/Select.tsx","../../../../src/contexts/Wallet/Context.ts","../../../../src/contexts/Wallet/use.ts","../../../../src/hooks/useWallet.ts"],"sourcesContent":["import { CircularProgress, MenuItem, SelectProps } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport { AddressRenderRowBox, AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\n\nimport { useWalletContext } from '../../contexts'\nimport { useWallet } from '../../hooks'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport interface WalletAccountSelectProps extends SharedAddressRenderRowBoxProps, SelectProps<number> {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n}\n\nconst arrayRange = (length: number, start = 0) => {\n return Array.from(Array(length).keys()).map((x) => x + start)\n}\n\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames = {},\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n ...props\n}) => {\n const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext()\n const disabled = !coinTypeWallet || activeAccountIndex === undefined\n\n return (\n <>\n {coinTypeWallet ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n const Item: React.FC = () => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet })\n const customName = selectedAccount ? addressNames[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in addressNames\n return (\n <MenuItem value={selectedAccountIndex} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={selectedAccount?.address}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n favorite={favorite}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n return <Item />\n }}\n value={activeAccountIndex}\n onChange={(event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`))}\n size={size}\n variant=\"outlined\"\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n const Item: React.FC = () => {\n const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet })\n const customName = account ? addressNames[account.address] : undefined\n const favorite = !!account && account.address in addressNames\n return (\n <MenuItem key={account?.address} value={index} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={account?.address}\n favorite={favorite}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n\n return <Item key={index} />\n })}\n </SelectEx>\n ) : (\n <CircularProgress size={24} />\n )}\n </>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { WalletContextState } from './State'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/react-shared'\nimport { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context'\n\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\nexport const useCoinTypeWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { coinTypeWallet } = useWalletContext(required)\n return [coinTypeWallet, undefined]\n}\n\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const [coinTypeWallet] = useCoinTypeWallet(required)\n const [wallet] = usePromise(async () => (await coinTypeWallet?.derivePath(index.toString())) ?? coinTypeWallet, [coinTypeWallet, index])\n return [wallet, undefined]\n}\n\nexport const useSelectedWalletAccount = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { activeAccountIndex } = useWalletContext(required)\n //we pass in 0 as default since we can not call the hook optionally,\n //we resolve this false result by checking whether activeAccountIndex is defined before returning it\n const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required)\n if (activeAccountIndex === undefined && account === null) {\n return [null, undefined]\n } else {\n return [account, undefined]\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/account'\nimport { DataLike } from '@xyo-network/core'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletProvided } from '../contexts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: DataLike\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({ mnemonic, wallet, path, required = false, seed }: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [error, setError] = useState<Error>()\n const [contextAccount] = useSelectedWalletAccount(!wallet && required)\n const [activeAccount] = usePromise(async () => {\n try {\n const newAccount = await (() => {\n if (wallet) {\n return wallet\n } else if (mnemonic) {\n return HDWallet.fromMnemonic(mnemonic as string)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n if (path) {\n return newAccount?.derivePath?.(path)\n } else {\n return newAccount ?? wallet\n }\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n"],"mappings":"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","names":["usePromise","usePromise"]}
@@ -1,7 +1,153 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ // src/components/WalletAccountSelect/SelectBar.tsx
2
2
  import { FlexCol } from "@xylabs/react-flexbox";
3
- import { WalletAccountSelect } from "./Select";
4
- const WalletAccountSelectBar = ({
3
+
4
+ // src/components/WalletAccountSelect/Select.tsx
5
+ import { CircularProgress, MenuItem } from "@mui/material";
6
+ import { SelectEx } from "@xylabs/react-select";
7
+ import { AddressRenderRowBox } from "@xyo-network/react-address-render";
8
+
9
+ // src/contexts/Wallet/Context.ts
10
+ import { createContextEx } from "@xyo-network/react-shared";
11
+ var WalletContext = createContextEx();
12
+
13
+ // src/contexts/Wallet/use.ts
14
+ import { usePromise } from "@xylabs/react-promise";
15
+ import { useContextEx, useProvided } from "@xyo-network/react-shared";
16
+ var useWalletContext = (required = true) => {
17
+ return useContextEx(WalletContext, "Wallet", required);
18
+ };
19
+ var useWalletProvided = () => {
20
+ return useProvided(WalletContext);
21
+ };
22
+ var useCoinTypeWallet = (required = true) => {
23
+ const { coinTypeWallet } = useWalletContext(required);
24
+ return [coinTypeWallet, void 0];
25
+ };
26
+ var useIndexedWalletFromContext = (index, required = true) => {
27
+ const [coinTypeWallet] = useCoinTypeWallet(required);
28
+ const [wallet] = usePromise(async () => await coinTypeWallet?.derivePath(index.toString()) ?? coinTypeWallet, [coinTypeWallet, index]);
29
+ return [wallet, void 0];
30
+ };
31
+ var useSelectedWalletAccount = (required = true) => {
32
+ const { activeAccountIndex } = useWalletContext(required);
33
+ const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
34
+ if (activeAccountIndex === void 0 && account === null) {
35
+ return [null, void 0];
36
+ } else {
37
+ return [account, void 0];
38
+ }
39
+ };
40
+
41
+ // src/hooks/useWallet.ts
42
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
43
+ import { HDWallet } from "@xyo-network/account";
44
+ import { useState } from "react";
45
+ var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
46
+ const walletContextProvided = useWalletProvided();
47
+ const [error, setError] = useState();
48
+ const [contextAccount] = useSelectedWalletAccount(!wallet && required);
49
+ const [activeAccount] = usePromise2(async () => {
50
+ try {
51
+ const newAccount = await (() => {
52
+ if (wallet) {
53
+ return wallet;
54
+ } else if (mnemonic) {
55
+ return HDWallet.fromMnemonic(mnemonic);
56
+ } else if (seed) {
57
+ return HDWallet.fromSeed(seed);
58
+ }
59
+ return contextAccount;
60
+ })();
61
+ if (path) {
62
+ return newAccount?.derivePath?.(path);
63
+ } else {
64
+ return newAccount ?? wallet;
65
+ }
66
+ } catch (ex) {
67
+ setError(ex);
68
+ }
69
+ }, [mnemonic, contextAccount, seed, path, wallet]);
70
+ return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
71
+ };
72
+
73
+ // src/components/WalletAccountSelect/Select.tsx
74
+ import { Fragment, jsx } from "react/jsx-runtime";
75
+ var arrayRange = (length, start = 0) => {
76
+ return Array.from(Array(length).keys()).map((x) => x + start);
77
+ };
78
+ var WalletAccountSelect = ({
79
+ addressNames = {},
80
+ iconOnly,
81
+ iconSize = 24,
82
+ icons,
83
+ maxAccounts = 1,
84
+ showFavorite = false,
85
+ size,
86
+ ...props
87
+ }) => {
88
+ const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext();
89
+ const disabled = !coinTypeWallet || activeAccountIndex === void 0;
90
+ return /* @__PURE__ */ jsx(Fragment, { children: coinTypeWallet ? /* @__PURE__ */ jsx(
91
+ SelectEx,
92
+ {
93
+ margin: "dense",
94
+ disabled,
95
+ renderValue: (selectedAccountIndex) => {
96
+ const Item = () => {
97
+ const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet });
98
+ const customName = selectedAccount ? addressNames[selectedAccount.address] : void 0;
99
+ const favorite = !!selectedAccount && selectedAccount.address in addressNames;
100
+ return /* @__PURE__ */ jsx(MenuItem, { value: selectedAccountIndex, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ jsx(
101
+ AddressRenderRowBox,
102
+ {
103
+ disableSharedRef: true,
104
+ flexGrow: 1,
105
+ address: selectedAccount?.address,
106
+ iconOnly,
107
+ iconSize,
108
+ icons,
109
+ name: customName,
110
+ favorite,
111
+ showFavorite
112
+ }
113
+ ) });
114
+ };
115
+ return /* @__PURE__ */ jsx(Item, {});
116
+ },
117
+ value: activeAccountIndex,
118
+ onChange: (event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`)),
119
+ size,
120
+ variant: "outlined",
121
+ ...props,
122
+ children: arrayRange(maxAccounts).map((index) => {
123
+ const Item = () => {
124
+ const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet });
125
+ const customName = account ? addressNames[account.address] : void 0;
126
+ const favorite = !!account && account.address in addressNames;
127
+ return /* @__PURE__ */ jsx(MenuItem, { value: index, sx: { minHeight: 0, paddingBottom: 0, paddingTop: 0 }, children: /* @__PURE__ */ jsx(
128
+ AddressRenderRowBox,
129
+ {
130
+ disableSharedRef: true,
131
+ flexGrow: 1,
132
+ address: account?.address,
133
+ favorite,
134
+ iconOnly,
135
+ iconSize,
136
+ icons,
137
+ name: customName,
138
+ showFavorite
139
+ }
140
+ ) }, account?.address);
141
+ };
142
+ return /* @__PURE__ */ jsx(Item, {}, index);
143
+ })
144
+ }
145
+ ) : /* @__PURE__ */ jsx(CircularProgress, { size: 24 }) });
146
+ };
147
+
148
+ // src/components/WalletAccountSelect/SelectBar.tsx
149
+ import { jsx as jsx2 } from "react/jsx-runtime";
150
+ var WalletAccountSelectBar = ({
5
151
  addressNames = {},
6
152
  iconOnly,
7
153
  iconSize,
@@ -11,7 +157,7 @@ const WalletAccountSelectBar = ({
11
157
  size = "small",
12
158
  ...props
13
159
  }) => {
14
- return /* @__PURE__ */ jsx(FlexCol, { alignItems: "stretch", ...props, children: /* @__PURE__ */ jsx(
160
+ return /* @__PURE__ */ jsx2(FlexCol, { alignItems: "stretch", ...props, children: /* @__PURE__ */ jsx2(
15
161
  WalletAccountSelect,
16
162
  {
17
163
  addressNames,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/WalletAccountSelect/SelectBar.tsx"],"sourcesContent":["import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\n\nimport { WalletAccountSelect } from './Select'\n\nexport interface WalletAccountSelectBarProps extends FlexBoxProps {\n addressNames?: Record<string, string | undefined>\n iconOnly?: boolean\n iconSize?: number\n icons?: boolean\n maxAccounts?: number\n showFavorite?: boolean\n size?: 'small' | 'medium'\n}\n\nexport const WalletAccountSelectBar: React.FC<WalletAccountSelectBarProps> = ({\n addressNames = {},\n iconOnly,\n iconSize,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size = 'small',\n ...props\n}) => {\n return (\n <FlexCol alignItems=\"stretch\" {...props}>\n <WalletAccountSelect\n addressNames={addressNames}\n fullWidth\n showFavorite={showFavorite}\n iconSize={iconSize}\n iconOnly={iconOnly}\n icons={icons}\n maxAccounts={maxAccounts}\n size={size ?? 'small'}\n />\n </FlexCol>\n )\n}\n"],"mappings":"AA0BM;AA1BN,SAAuB,eAAe;AAEtC,SAAS,2BAA2B;AAY7B,MAAM,yBAAgE,CAAC;AAAA,EAC5E,eAAe,CAAC;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,eAAe;AAAA,EACf,OAAO;AAAA,EACP,GAAG;AACL,MAAM;AACJ,SACE,oBAAC,WAAQ,YAAW,WAAW,GAAG,OAChC;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,QAAQ;AAAA;AAAA,EAChB,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/WalletAccountSelect/SelectBar.tsx","../../../../src/components/WalletAccountSelect/Select.tsx","../../../../src/contexts/Wallet/Context.ts","../../../../src/contexts/Wallet/use.ts","../../../../src/hooks/useWallet.ts"],"sourcesContent":["import { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\n\nimport { WalletAccountSelect } from './Select'\n\nexport interface WalletAccountSelectBarProps extends FlexBoxProps {\n addressNames?: Record<string, string | undefined>\n iconOnly?: boolean\n iconSize?: number\n icons?: boolean\n maxAccounts?: number\n showFavorite?: boolean\n size?: 'small' | 'medium'\n}\n\nexport const WalletAccountSelectBar: React.FC<WalletAccountSelectBarProps> = ({\n addressNames = {},\n iconOnly,\n iconSize,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size = 'small',\n ...props\n}) => {\n return (\n <FlexCol alignItems=\"stretch\" {...props}>\n <WalletAccountSelect\n addressNames={addressNames}\n fullWidth\n showFavorite={showFavorite}\n iconSize={iconSize}\n iconOnly={iconOnly}\n icons={icons}\n maxAccounts={maxAccounts}\n size={size ?? 'small'}\n />\n </FlexCol>\n )\n}\n","import { CircularProgress, MenuItem, SelectProps } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport { AddressRenderRowBox, AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\n\nimport { useWalletContext } from '../../contexts'\nimport { useWallet } from '../../hooks'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport interface WalletAccountSelectProps extends SharedAddressRenderRowBoxProps, SelectProps<number> {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n}\n\nconst arrayRange = (length: number, start = 0) => {\n return Array.from(Array(length).keys()).map((x) => x + start)\n}\n\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames = {},\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n ...props\n}) => {\n const { activeAccountIndex = 0, setActiveAccountIndex, coinTypeWallet } = useWalletContext()\n const disabled = !coinTypeWallet || activeAccountIndex === undefined\n\n return (\n <>\n {coinTypeWallet ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n const Item: React.FC = () => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex.toString(), wallet: coinTypeWallet })\n const customName = selectedAccount ? addressNames[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in addressNames\n return (\n <MenuItem value={selectedAccountIndex} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={selectedAccount?.address}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n favorite={favorite}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n return <Item />\n }}\n value={activeAccountIndex}\n onChange={(event) => setActiveAccountIndex?.(parseInt(`${event.target.value}`))}\n size={size}\n variant=\"outlined\"\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n const Item: React.FC = () => {\n const [account] = useWallet({ path: index.toString(), wallet: coinTypeWallet })\n const customName = account ? addressNames[account.address] : undefined\n const favorite = !!account && account.address in addressNames\n return (\n <MenuItem key={account?.address} value={index} sx={{ minHeight: 0, paddingBottom: 0, paddingTop: 0 }}>\n <AddressRenderRowBox\n disableSharedRef={true}\n flexGrow={1}\n address={account?.address}\n favorite={favorite}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n name={customName}\n showFavorite={showFavorite}\n />\n </MenuItem>\n )\n }\n\n return <Item key={index} />\n })}\n </SelectEx>\n ) : (\n <CircularProgress size={24} />\n )}\n </>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { WalletContextState } from './State'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/react-shared'\nimport { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context'\n\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\nexport const useCoinTypeWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { coinTypeWallet } = useWalletContext(required)\n return [coinTypeWallet, undefined]\n}\n\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const [coinTypeWallet] = useCoinTypeWallet(required)\n const [wallet] = usePromise(async () => (await coinTypeWallet?.derivePath(index.toString())) ?? coinTypeWallet, [coinTypeWallet, index])\n return [wallet, undefined]\n}\n\nexport const useSelectedWalletAccount = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { activeAccountIndex } = useWalletContext(required)\n //we pass in 0 as default since we can not call the hook optionally,\n //we resolve this false result by checking whether activeAccountIndex is defined before returning it\n const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required)\n if (activeAccountIndex === undefined && account === null) {\n return [null, undefined]\n } else {\n return [account, undefined]\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/account'\nimport { DataLike } from '@xyo-network/core'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletProvided } from '../contexts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: DataLike\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({ mnemonic, wallet, path, required = false, seed }: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [error, setError] = useState<Error>()\n const [contextAccount] = useSelectedWalletAccount(!wallet && required)\n const [activeAccount] = usePromise(async () => {\n try {\n const newAccount = await (() => {\n if (wallet) {\n return wallet\n } else if (mnemonic) {\n return HDWallet.fromMnemonic(mnemonic as string)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n if (path) {\n return newAccount?.derivePath?.(path)\n } else {\n return newAccount ?? wallet\n }\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n"],"mappings":"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","names":["usePromise","usePromise","jsx"]}
@@ -1,11 +1,117 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
1
+ // src/components/WalletAccountSelect/WalletInfo.tsx
2
2
  import { Circle as LoadingIcon, ErrorOutlined as ErrorIcon } from "@mui/icons-material";
3
3
  import { FlexCol } from "@xylabs/react-flexbox";
4
4
  import { Identicon } from "@xylabs/react-identicon";
5
5
  import { QuickTipButton } from "@xylabs/react-quick-tip-button";
6
- import { useCoinTypeWallet, useRootWallet, useSelectedWalletAccount } from "../../contexts";
7
- import { useAccount, useWallet } from "../../hooks";
8
- const WalletError = ({ error }) => {
6
+
7
+ // src/contexts/Wallet/Context.ts
8
+ import { createContextEx } from "@xyo-network/react-shared";
9
+ var WalletContext = createContextEx();
10
+
11
+ // src/contexts/Wallet/use.ts
12
+ import { usePromise } from "@xylabs/react-promise";
13
+ import { useContextEx, useProvided } from "@xyo-network/react-shared";
14
+ var useWalletContext = (required = true) => {
15
+ return useContextEx(WalletContext, "Wallet", required);
16
+ };
17
+ var useWalletProvided = () => {
18
+ return useProvided(WalletContext);
19
+ };
20
+ var useCoinTypeWallet = (required = true) => {
21
+ const { coinTypeWallet } = useWalletContext(required);
22
+ return [coinTypeWallet, void 0];
23
+ };
24
+ var useRootWallet = (required = true) => {
25
+ const { rootWallet } = useWalletContext(required);
26
+ return [rootWallet, void 0];
27
+ };
28
+ var useIndexedWalletFromContext = (index, required = true) => {
29
+ const [coinTypeWallet] = useCoinTypeWallet(required);
30
+ const [wallet] = usePromise(async () => await coinTypeWallet?.derivePath(index.toString()) ?? coinTypeWallet, [coinTypeWallet, index]);
31
+ return [wallet, void 0];
32
+ };
33
+ var useSelectedWalletAccount = (required = true) => {
34
+ const { activeAccountIndex } = useWalletContext(required);
35
+ const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required);
36
+ if (activeAccountIndex === void 0 && account === null) {
37
+ return [null, void 0];
38
+ } else {
39
+ return [account, void 0];
40
+ }
41
+ };
42
+
43
+ // src/hooks/useAccount.ts
44
+ import { usePromise as usePromise2 } from "@xylabs/react-promise";
45
+ import { useState } from "react";
46
+ var useAccount = ({ wallet, account, index, required = false } = {}) => {
47
+ const walletContextProvided = useWalletProvided();
48
+ const [validationError, setValidationError] = useState();
49
+ if (wallet && account && !validationError) {
50
+ setValidationError(Error("useAccount can not have both a wallet and an account in the parameters"));
51
+ }
52
+ if (index && account && !validationError) {
53
+ setValidationError(Error("useAccount can not have both a index and an account in the parameters"));
54
+ }
55
+ const [error, setError] = useState();
56
+ const [coinTypeWallet] = useCoinTypeWallet(!wallet && required);
57
+ const { activeAccountIndex } = useWalletContext(false);
58
+ const [activeAccount] = usePromise2(async () => {
59
+ try {
60
+ if (!validationError) {
61
+ if (wallet) {
62
+ return await wallet?.derivePath?.(`${index ?? 0}'\0`);
63
+ } else if (coinTypeWallet) {
64
+ return await coinTypeWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\0`);
65
+ }
66
+ }
67
+ } catch (ex) {
68
+ const error2 = ex;
69
+ console.error(error2.message);
70
+ setError(error2);
71
+ }
72
+ }, [index, wallet, coinTypeWallet, activeAccountIndex, validationError]);
73
+ if (validationError && !error) {
74
+ console.error(validationError.message);
75
+ setError(validationError);
76
+ }
77
+ return [error ? void 0 : account ?? activeAccount ?? walletContextProvided ? null : void 0, error];
78
+ };
79
+
80
+ // src/hooks/useWallet.ts
81
+ import { usePromise as usePromise3 } from "@xylabs/react-promise";
82
+ import { HDWallet } from "@xyo-network/account";
83
+ import { useState as useState2 } from "react";
84
+ var useWallet = ({ mnemonic, wallet, path, required = false, seed } = {}) => {
85
+ const walletContextProvided = useWalletProvided();
86
+ const [error, setError] = useState2();
87
+ const [contextAccount] = useSelectedWalletAccount(!wallet && required);
88
+ const [activeAccount] = usePromise3(async () => {
89
+ try {
90
+ const newAccount = await (() => {
91
+ if (wallet) {
92
+ return wallet;
93
+ } else if (mnemonic) {
94
+ return HDWallet.fromMnemonic(mnemonic);
95
+ } else if (seed) {
96
+ return HDWallet.fromSeed(seed);
97
+ }
98
+ return contextAccount;
99
+ })();
100
+ if (path) {
101
+ return newAccount?.derivePath?.(path);
102
+ } else {
103
+ return newAccount ?? wallet;
104
+ }
105
+ } catch (ex) {
106
+ setError(ex);
107
+ }
108
+ }, [mnemonic, contextAccount, seed, path, wallet]);
109
+ return [activeAccount ?? (walletContextProvided ? null : activeAccount), error];
110
+ };
111
+
112
+ // src/components/WalletAccountSelect/WalletInfo.tsx
113
+ import { jsx, jsxs } from "react/jsx-runtime";
114
+ var WalletError = ({ error }) => {
9
115
  return error ? /* @__PURE__ */ jsxs("div", { children: [
10
116
  /* @__PURE__ */ jsx(ErrorIcon, { style: { fontSize: "12px", position: "absolute" }, color: "error" }),
11
117
  /* @__PURE__ */ jsx(
@@ -19,7 +125,7 @@ const WalletError = ({ error }) => {
19
125
  )
20
126
  ] }) : null;
21
127
  };
22
- const WalletIdenticon = ({ account, name }) => {
128
+ var WalletIdenticon = ({ account, name }) => {
23
129
  return /* @__PURE__ */ jsxs("div", { style: { width: 20 }, children: [
24
130
  account ? /* @__PURE__ */ jsx(Identicon, { size: 8, value: account.address, style: { position: "absolute", right: 2, top: 2 } }) : /* @__PURE__ */ jsx(LoadingIcon, { style: { fontSize: "10px", padding: 0, position: "absolute", right: 2, top: 2 }, color: "disabled" }),
25
131
  /* @__PURE__ */ jsx(
@@ -33,35 +139,35 @@ const WalletIdenticon = ({ account, name }) => {
33
139
  )
34
140
  ] });
35
141
  };
36
- const CoinTypeWalletInfo = (props) => {
142
+ var CoinTypeWalletInfo = (props) => {
37
143
  const [wallet, error] = useCoinTypeWallet();
38
144
  return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
39
145
  error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "CoinType", account: wallet }),
40
146
  /* @__PURE__ */ jsx(WalletError, { error })
41
147
  ] });
42
148
  };
43
- const RootWalletInfo = (props) => {
149
+ var RootWalletInfo = (props) => {
44
150
  const [wallet, error] = useRootWallet();
45
151
  return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
46
152
  error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Root", account: wallet }),
47
153
  /* @__PURE__ */ jsx(WalletError, { error })
48
154
  ] });
49
155
  };
50
- const SelectedWalletInfo = (props) => {
156
+ var SelectedWalletInfo = (props) => {
51
157
  const [wallet, error] = useSelectedWalletAccount();
52
158
  return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
53
159
  error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Selected", account: wallet }),
54
160
  /* @__PURE__ */ jsx(WalletError, { error })
55
161
  ] });
56
162
  };
57
- const WalletInfo = (props) => {
163
+ var WalletInfo = (props) => {
58
164
  const [wallet, error] = useWallet();
59
165
  return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
60
166
  error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Wallet", account: wallet }),
61
167
  /* @__PURE__ */ jsx(WalletError, { error })
62
168
  ] });
63
169
  };
64
- const AccountInfo = (props) => {
170
+ var AccountInfo = (props) => {
65
171
  const [account, error] = useAccount();
66
172
  return /* @__PURE__ */ jsxs(FlexCol, { width: 12, ...props, children: [
67
173
  error ? null : /* @__PURE__ */ jsx(WalletIdenticon, { name: "Account", account }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/WalletAccountSelect/WalletInfo.tsx"],"sourcesContent":["import { Circle as LoadingIcon, ErrorOutlined as ErrorIcon } from '@mui/icons-material'\nimport { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { QuickTipButton } from '@xylabs/react-quick-tip-button'\nimport { AccountInstance } from '@xyo-network/account-model'\n\nimport { useCoinTypeWallet, useRootWallet, useSelectedWalletAccount } from '../../contexts'\nimport { useAccount, useWallet } from '../../hooks'\n\nexport interface WalletErrorProps {\n error?: Error\n}\n\nexport const WalletError: React.FC<WalletErrorProps> = ({ error }) => {\n return error ? (\n <div>\n <ErrorIcon style={{ fontSize: '12px', position: 'absolute' }} color=\"error\" />\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={error.message}\n disableDialog\n />\n </div>\n ) : null\n}\n\nexport interface WalletIdenticonProps {\n account?: AccountInstance | null\n name: string\n}\n\nexport const WalletIdenticon: React.FC<WalletIdenticonProps> = ({ account, name }) => {\n return (\n <div style={{ width: 20 }}>\n {account ? (\n <Identicon size={8} value={account.address} style={{ position: 'absolute', right: 2, top: 2 }} />\n ) : (\n <LoadingIcon style={{ fontSize: '10px', padding: 0, position: 'absolute', right: 2, top: 2 }} color=\"disabled\" />\n )}\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={`${name ?? ''}: ${account?.address ?? 'no address'}`}\n disableDialog\n />\n </div>\n )\n}\n\nexport const CoinTypeWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useCoinTypeWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"CoinType\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const RootWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useRootWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Root\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const SelectedWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useSelectedWalletAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Selected\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const WalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Wallet\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const AccountInfo: React.FC<FlexBoxProps> = (props) => {\n const [account, error] = useAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Account\" account={account} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n"],"mappings":"AAeI,SACE,KADF;AAfJ,SAAS,UAAU,aAAa,iBAAiB,iBAAiB;AAClE,SAAuB,eAAe;AACtC,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAG/B,SAAS,mBAAmB,eAAe,gCAAgC;AAC3E,SAAS,YAAY,iBAAiB;AAM/B,MAAM,cAA0C,CAAC,EAAE,MAAM,MAAM;AACpE,SAAO,QACL,qBAAC,SACC;AAAA,wBAAC,aAAU,OAAO,EAAE,UAAU,QAAQ,UAAU,WAAW,GAAG,OAAM,SAAQ;AAAA,IAC5E;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO,EAAE,OAAO,aAAa,UAAU,QAAQ,SAAS,GAAG,UAAU,WAAW;AAAA,QAChF,WAAW,MAAM;AAAA,QACjB,eAAa;AAAA;AAAA,IACf;AAAA,KACF,IACE;AACN;AAOO,MAAM,kBAAkD,CAAC,EAAE,SAAS,KAAK,MAAM;AACpF,SACE,qBAAC,SAAI,OAAO,EAAE,OAAO,GAAG,GACrB;AAAA,cACC,oBAAC,aAAU,MAAM,GAAG,OAAO,QAAQ,SAAS,OAAO,EAAE,UAAU,YAAY,OAAO,GAAG,KAAK,EAAE,GAAG,IAE/F,oBAAC,eAAY,OAAO,EAAE,UAAU,QAAQ,SAAS,GAAG,UAAU,YAAY,OAAO,GAAG,KAAK,EAAE,GAAG,OAAM,YAAW;AAAA,IAEjH;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO,EAAE,OAAO,aAAa,UAAU,QAAQ,SAAS,GAAG,UAAU,WAAW;AAAA,QAChF,WAAW,GAAG,QAAQ,EAAE,KAAK,SAAS,WAAW,YAAY;AAAA,QAC7D,eAAa;AAAA;AAAA,IACf;AAAA,KACF;AAEJ;AAEO,MAAM,qBAA6C,CAAC,UAAU;AACnE,QAAM,CAAC,QAAQ,KAAK,IAAI,kBAAkB;AAC1C,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,YAAW,SAAS,QAAQ;AAAA,IAClE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,iBAAyC,CAAC,UAAU;AAC/D,QAAM,CAAC,QAAQ,KAAK,IAAI,cAAc;AACtC,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,QAAO,SAAS,QAAQ;AAAA,IAC9D,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,qBAA6C,CAAC,UAAU;AACnE,QAAM,CAAC,QAAQ,KAAK,IAAI,yBAAyB;AACjD,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,YAAW,SAAS,QAAQ;AAAA,IAClE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,aAAqC,CAAC,UAAU;AAC3D,QAAM,CAAC,QAAQ,KAAK,IAAI,UAAU;AAClC,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,UAAS,SAAS,QAAQ;AAAA,IAChE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;AAEO,MAAM,cAAsC,CAAC,UAAU;AAC5D,QAAM,CAAC,SAAS,KAAK,IAAI,WAAW;AACpC,SACE,qBAAC,WAAQ,OAAO,IAAK,GAAG,OACrB;AAAA,YAAQ,OAAO,oBAAC,mBAAgB,MAAK,WAAU,SAAkB;AAAA,IAClE,oBAAC,eAAY,OAAc;AAAA,KAC7B;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/WalletAccountSelect/WalletInfo.tsx","../../../../src/contexts/Wallet/Context.ts","../../../../src/contexts/Wallet/use.ts","../../../../src/hooks/useAccount.ts","../../../../src/hooks/useWallet.ts"],"sourcesContent":["import { Circle as LoadingIcon, ErrorOutlined as ErrorIcon } from '@mui/icons-material'\nimport { FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { QuickTipButton } from '@xylabs/react-quick-tip-button'\nimport { AccountInstance } from '@xyo-network/account-model'\n\nimport { useCoinTypeWallet, useRootWallet, useSelectedWalletAccount } from '../../contexts'\nimport { useAccount, useWallet } from '../../hooks'\n\nexport interface WalletErrorProps {\n error?: Error\n}\n\nexport const WalletError: React.FC<WalletErrorProps> = ({ error }) => {\n return error ? (\n <div>\n <ErrorIcon style={{ fontSize: '12px', position: 'absolute' }} color=\"error\" />\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={error.message}\n disableDialog\n />\n </div>\n ) : null\n}\n\nexport interface WalletIdenticonProps {\n account?: AccountInstance | null\n name: string\n}\n\nexport const WalletIdenticon: React.FC<WalletIdenticonProps> = ({ account, name }) => {\n return (\n <div style={{ width: 20 }}>\n {account ? (\n <Identicon size={8} value={account.address} style={{ position: 'absolute', right: 2, top: 2 }} />\n ) : (\n <LoadingIcon style={{ fontSize: '10px', padding: 0, position: 'absolute', right: 2, top: 2 }} color=\"disabled\" />\n )}\n <QuickTipButton\n size=\"small\"\n style={{ color: '#ffffff00', fontSize: '12px', padding: 0, position: 'absolute' }}\n hoverText={`${name ?? ''}: ${account?.address ?? 'no address'}`}\n disableDialog\n />\n </div>\n )\n}\n\nexport const CoinTypeWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useCoinTypeWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"CoinType\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const RootWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useRootWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Root\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const SelectedWalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useSelectedWalletAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Selected\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const WalletInfo: React.FC<FlexBoxProps> = (props) => {\n const [wallet, error] = useWallet()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Wallet\" account={wallet} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n\nexport const AccountInfo: React.FC<FlexBoxProps> = (props) => {\n const [account, error] = useAccount()\n return (\n <FlexCol width={12} {...props}>\n {error ? null : <WalletIdenticon name=\"Account\" account={account} />}\n <WalletError error={error} />\n </FlexCol>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport { WalletContextState } from './State'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/react-shared'\nimport { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context'\n\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\nexport const useCoinTypeWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { coinTypeWallet } = useWalletContext(required)\n return [coinTypeWallet, undefined]\n}\n\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const [coinTypeWallet] = useCoinTypeWallet(required)\n const [wallet] = usePromise(async () => (await coinTypeWallet?.derivePath(index.toString())) ?? coinTypeWallet, [coinTypeWallet, index])\n return [wallet, undefined]\n}\n\nexport const useSelectedWalletAccount = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { activeAccountIndex } = useWalletContext(required)\n //we pass in 0 as default since we can not call the hook optionally,\n //we resolve this false result by checking whether activeAccountIndex is defined before returning it\n const [account] = useIndexedWalletFromContext(activeAccountIndex ?? 0, required)\n if (activeAccountIndex === undefined && account === null) {\n return [null, undefined]\n } else {\n return [account, undefined]\n }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { AccountInstance } from '@xyo-network/account-model'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useCoinTypeWallet, useWalletContext, useWalletProvided } from '../contexts'\n\nexport interface AccountHookParams {\n account?: AccountInstance\n index?: number\n required?: boolean\n wallet?: WalletInstance\n}\n\nexport const useAccount = ({ wallet, account, index, required = false }: AccountHookParams = {}): [\n AccountInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [validationError, setValidationError] = useState<Error>()\n if (wallet && account && !validationError) {\n setValidationError(Error('useAccount can not have both a wallet and an account in the parameters'))\n }\n\n if (index && account && !validationError) {\n setValidationError(Error('useAccount can not have both a index and an account in the parameters'))\n }\n\n const [error, setError] = useState<Error>()\n const [coinTypeWallet] = useCoinTypeWallet(!wallet && required)\n const { activeAccountIndex } = useWalletContext(false)\n const [activeAccount] = usePromise(async () => {\n try {\n if (!validationError) {\n if (wallet) {\n return await wallet?.derivePath?.(`${index ?? 0}'\\0`)\n } else if (coinTypeWallet) {\n return await coinTypeWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\\0`)\n }\n }\n } catch (ex) {\n const error = ex as Error\n console.error(error.message)\n setError(error)\n }\n }, [index, wallet, coinTypeWallet, activeAccountIndex, validationError])\n if (validationError && !error) {\n console.error(validationError.message)\n setError(validationError)\n }\n\n return [error ? undefined : account ?? activeAccount ?? walletContextProvided ? null : undefined, error]\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/account'\nimport { DataLike } from '@xyo-network/core'\nimport { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletProvided } from '../contexts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: DataLike\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({ mnemonic, wallet, path, required = false, seed }: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletProvided()\n const [error, setError] = useState<Error>()\n const [contextAccount] = useSelectedWalletAccount(!wallet && required)\n const [activeAccount] = usePromise(async () => {\n try {\n const newAccount = await (() => {\n if (wallet) {\n return wallet\n } else if (mnemonic) {\n return HDWallet.fromMnemonic(mnemonic as string)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n if (path) {\n return newAccount?.derivePath?.(path)\n } else {\n return newAccount ?? wallet\n }\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n"],"mappings":"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","names":["usePromise","usePromise","error","usePromise","useState","useState","usePromise"]}