@xyo-network/react-wallet 5.3.15 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{types → browser}/components/MaxAccounts/MaxAccountsTableRow.d.ts +2 -0
- package/dist/browser/components/MaxAccounts/MaxAccountsTableRow.d.ts.map +1 -0
- package/dist/{types → browser}/components/MaxAccounts/OutOfBoundsSnackBar.d.ts +2 -0
- package/dist/browser/components/MaxAccounts/OutOfBoundsSnackBar.d.ts.map +1 -0
- package/dist/{types → browser}/components/SeedPhrase/DefaultSeedPhrase.d.ts +2 -0
- package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.d.ts.map +1 -0
- package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.stories.d.ts +8 -0
- package/dist/browser/components/SeedPhrase/DefaultSeedPhrase.stories.d.ts.map +1 -0
- package/dist/{types → browser}/components/SeedPhrase/_shared/SeedPhraseIconButton.d.ts +1 -0
- package/dist/{types → browser}/components/SeedPhrase/_shared/SeedPhraseIconButton.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/dialog/SeedPhraseDialog.d.ts +3 -0
- package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.d.ts.map +1 -0
- package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.stories.d.ts +6 -0
- package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.stories.d.ts.map +1 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/DialogActionButtons.d.ts +3 -2
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/DialogActionButtons.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/OverwriteWarning.d.ts +1 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/OverwriteWarning.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.d.ts +2 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.d.ts +1 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts +2 -0
- package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts.map +1 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.d.ts +1 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.d.ts.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.d.ts +10 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.d.ts +1 -0
- package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.d.ts.map +1 -1
- package/dist/{types → browser}/components/SeedPhrase/settings/SeedPhraseTableRow.d.ts +2 -0
- package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.d.ts.map +1 -0
- package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.stories.d.ts +7 -0
- package/dist/browser/components/SeedPhrase/settings/SeedPhraseTableRow.stories.d.ts.map +1 -0
- package/dist/{types → browser}/components/WalletAccountDetails/WalletAccountDetails.d.ts +2 -0
- package/dist/{types → browser}/components/WalletAccountDetails/WalletAccountDetails.d.ts.map +1 -1
- package/dist/browser/components/WalletAccountDetails/WalletAccountDetails.stories.d.ts +7 -0
- package/dist/browser/components/WalletAccountDetails/WalletAccountDetails.stories.d.ts.map +1 -0
- package/dist/browser/components/WalletAccountDetails/WalletAccountDetailsWithProvider.stories.d.ts +7 -0
- package/dist/browser/components/WalletAccountDetails/WalletAccountDetailsWithProvider.stories.d.ts.map +1 -0
- package/dist/{types → browser}/components/WalletAccountSelect/RenderedMenuItem.d.ts +2 -0
- package/dist/browser/components/WalletAccountSelect/RenderedMenuItem.d.ts.map +1 -0
- package/dist/{types → browser}/components/WalletAccountSelect/Select.d.ts +2 -0
- package/dist/browser/components/WalletAccountSelect/Select.d.ts.map +1 -0
- package/dist/{types → browser}/components/WalletAccountSelect/SelectBar.d.ts +2 -0
- package/dist/browser/components/WalletAccountSelect/SelectBar.d.ts.map +1 -0
- package/dist/browser/components/WalletAccountSelect/WalletAccountSelect.stories.d.ts +8 -0
- package/dist/browser/components/WalletAccountSelect/WalletAccountSelect.stories.d.ts.map +1 -0
- package/dist/browser/components/WalletAccountSelect/WalletAccountSelectBar.stories.d.ts +11 -0
- package/dist/browser/components/WalletAccountSelect/WalletAccountSelectBar.stories.d.ts.map +1 -0
- package/dist/browser/components/WalletAccountSelect/WalletAccountSelectWithProvider.stories.d.ts +12 -0
- package/dist/browser/components/WalletAccountSelect/WalletAccountSelectWithProvider.stories.d.ts.map +1 -0
- package/dist/{types → browser}/components/WalletAccountSelect/WalletInfo.d.ts +8 -0
- package/dist/browser/components/WalletAccountSelect/WalletInfo.d.ts.map +1 -0
- package/dist/{types → browser}/contexts/SeedPhrase/Context.d.ts +1 -0
- package/dist/browser/contexts/SeedPhrase/Context.d.ts.map +1 -0
- package/dist/{types → browser}/contexts/SeedPhrase/Provider.d.ts +2 -0
- package/dist/browser/contexts/SeedPhrase/Provider.d.ts.map +1 -0
- package/dist/{types → browser}/contexts/SeedPhrase/State.d.ts +1 -0
- package/dist/browser/contexts/SeedPhrase/State.d.ts.map +1 -0
- package/dist/{types → browser}/contexts/SeedPhrase/use.d.ts +1 -0
- package/dist/{types → browser}/contexts/SeedPhrase/use.d.ts.map +1 -1
- package/dist/{types → browser}/contexts/Wallet/Context.d.ts +1 -0
- package/dist/{types → browser}/contexts/Wallet/Context.d.ts.map +1 -1
- package/dist/{types → browser}/contexts/Wallet/Provider.d.ts +2 -0
- package/dist/{types → browser}/contexts/Wallet/Provider.d.ts.map +1 -1
- package/dist/{types → browser}/contexts/Wallet/State.d.ts +1 -0
- package/dist/browser/contexts/Wallet/State.d.ts.map +1 -0
- package/dist/{types → browser}/contexts/Wallet/use.d.ts +5 -0
- package/dist/browser/contexts/Wallet/use.d.ts.map +1 -0
- package/dist/{types → browser}/hooks/useAccount.d.ts +2 -0
- package/dist/browser/hooks/useAccount.d.ts.map +1 -0
- package/dist/{types → browser}/hooks/useWallet.d.ts +2 -0
- package/dist/browser/hooks/useWallet.d.ts.map +1 -0
- package/dist/{types → browser}/hooks/useWallets.d.ts +2 -0
- package/dist/browser/hooks/useWallets.d.ts.map +1 -0
- package/dist/{types → browser}/hooks/useWrapperAccount.d.ts +1 -0
- package/dist/{types → browser}/hooks/useWrapperAccount.d.ts.map +1 -1
- package/dist/browser/index.d.ts +323 -0
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +30 -28
- package/src/components/MaxAccounts/MaxAccountsTableRow.tsx +2 -0
- package/src/components/MaxAccounts/OutOfBoundsSnackBar.tsx +2 -0
- package/src/components/SeedPhrase/DefaultSeedPhrase.tsx +2 -0
- package/src/components/SeedPhrase/_shared/SeedPhraseIconButton.tsx +1 -0
- package/src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx +3 -0
- package/src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx +3 -1
- package/src/components/SeedPhrase/dialog/components/OverwriteWarning.tsx +1 -0
- package/src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx +2 -0
- package/src/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.tsx +1 -0
- package/src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx +2 -0
- package/src/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.tsx +1 -0
- package/src/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.tsx +4 -2
- package/src/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.ts +1 -0
- package/src/components/SeedPhrase/settings/SeedPhraseTableRow.tsx +2 -0
- package/src/components/WalletAccountDetails/WalletAccountDetails.tsx +2 -0
- package/src/components/WalletAccountSelect/RenderedMenuItem.tsx +2 -0
- package/src/components/WalletAccountSelect/Select.tsx +5 -3
- package/src/components/WalletAccountSelect/SelectBar.tsx +2 -0
- package/src/components/WalletAccountSelect/WalletInfo.tsx +8 -0
- package/src/contexts/SeedPhrase/Context.ts +1 -0
- package/src/contexts/SeedPhrase/Provider.tsx +2 -0
- package/src/contexts/SeedPhrase/State.ts +1 -0
- package/src/contexts/SeedPhrase/use.ts +1 -0
- package/src/contexts/Wallet/Context.ts +1 -0
- package/src/contexts/Wallet/Provider.tsx +2 -0
- package/src/contexts/Wallet/State.ts +1 -0
- package/src/contexts/Wallet/use.ts +5 -0
- package/src/hooks/useAccount.ts +2 -0
- package/src/hooks/useWallet.ts +2 -0
- package/src/hooks/useWallets.ts +2 -0
- package/src/hooks/useWrapperAccount.ts +1 -0
- package/xy.config.ts +1 -0
- package/dist/types/components/MaxAccounts/MaxAccountsTableRow.d.ts.map +0 -1
- package/dist/types/components/MaxAccounts/OutOfBoundsSnackBar.d.ts.map +0 -1
- package/dist/types/components/SeedPhrase/DefaultSeedPhrase.d.ts.map +0 -1
- package/dist/types/components/SeedPhrase/dialog/SeedPhraseDialog.d.ts.map +0 -1
- package/dist/types/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts.map +0 -1
- package/dist/types/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.d.ts +0 -9
- package/dist/types/components/SeedPhrase/settings/SeedPhraseTableRow.d.ts.map +0 -1
- package/dist/types/components/WalletAccountSelect/RenderedMenuItem.d.ts.map +0 -1
- package/dist/types/components/WalletAccountSelect/Select.d.ts.map +0 -1
- package/dist/types/components/WalletAccountSelect/SelectBar.d.ts.map +0 -1
- package/dist/types/components/WalletAccountSelect/WalletInfo.d.ts.map +0 -1
- package/dist/types/contexts/SeedPhrase/Context.d.ts.map +0 -1
- package/dist/types/contexts/SeedPhrase/Provider.d.ts.map +0 -1
- package/dist/types/contexts/SeedPhrase/State.d.ts.map +0 -1
- package/dist/types/contexts/Wallet/State.d.ts.map +0 -1
- package/dist/types/contexts/Wallet/use.d.ts.map +0 -1
- package/dist/types/hooks/useAccount.d.ts.map +0 -1
- package/dist/types/hooks/useWallet.d.ts.map +0 -1
- package/dist/types/hooks/useWallets.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -4
- /package/dist/{types → browser}/components/MaxAccounts/index.d.ts +0 -0
- /package/dist/{types → browser}/components/MaxAccounts/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/_shared/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/_shared/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/components/fields/validation-messages/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/components/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/components/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/dialog/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/settings/index.d.ts +0 -0
- /package/dist/{types → browser}/components/SeedPhrase/settings/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/WalletAccountDetails/index.d.ts +0 -0
- /package/dist/{types → browser}/components/WalletAccountDetails/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/WalletAccountSelect/index.d.ts +0 -0
- /package/dist/{types → browser}/components/WalletAccountSelect/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/WalletAccountSelect/stories/WalletProviderDecorator.d.ts +0 -0
- /package/dist/{types → browser}/components/WalletAccountSelect/stories/WalletProviderDecorator.d.ts.map +0 -0
- /package/dist/{types → browser}/components/WalletAccountSelect/stories/index.d.ts +0 -0
- /package/dist/{types → browser}/components/WalletAccountSelect/stories/index.d.ts.map +0 -0
- /package/dist/{types → browser}/components/index.d.ts +0 -0
- /package/dist/{types → browser}/components/index.d.ts.map +0 -0
- /package/dist/{types → browser}/contexts/SeedPhrase/index.d.ts +0 -0
- /package/dist/{types → browser}/contexts/SeedPhrase/index.d.ts.map +0 -0
- /package/dist/{types → browser}/contexts/Wallet/index.d.ts +0 -0
- /package/dist/{types → browser}/contexts/Wallet/index.d.ts.map +0 -0
- /package/dist/{types → browser}/contexts/Wallet/usePromise.d.ts +0 -0
- /package/dist/{types → browser}/contexts/Wallet/usePromise.d.ts.map +0 -0
- /package/dist/{types → browser}/contexts/index.d.ts +0 -0
- /package/dist/{types → browser}/contexts/index.d.ts.map +0 -0
- /package/dist/{types → browser}/hooks/index.d.ts +0 -0
- /package/dist/{types → browser}/hooks/index.d.ts.map +0 -0
- /package/dist/{types → browser}/index.d.ts.map +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/MaxAccounts/MaxAccountsTableRow.tsx","../../src/components/MaxAccounts/OutOfBoundsSnackBar.tsx","../../src/components/SeedPhrase/_shared/SeedPhraseIconButton.tsx","../../src/components/SeedPhrase/DefaultSeedPhrase.tsx","../../src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx","../../src/contexts/SeedPhrase/Context.ts","../../src/contexts/SeedPhrase/Provider.tsx","../../src/contexts/SeedPhrase/use.ts","../../src/contexts/Wallet/Context.ts","../../src/contexts/Wallet/Provider.tsx","../../src/contexts/Wallet/use.ts","../../src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx","../../src/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.ts","../../src/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.tsx","../../src/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.tsx","../../src/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.tsx","../../src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx","../../src/components/SeedPhrase/dialog/components/OverwriteWarning.tsx","../../src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx","../../src/components/SeedPhrase/settings/SeedPhraseTableRow.tsx","../../src/components/WalletAccountDetails/WalletAccountDetails.tsx","../../src/hooks/useAccount.ts","../../src/hooks/useWallet.ts","../../src/hooks/useWallets.ts","../../src/hooks/useWrapperAccount.ts","../../src/components/WalletAccountSelect/Select.tsx","../../src/components/WalletAccountSelect/RenderedMenuItem.tsx","../../src/components/WalletAccountSelect/SelectBar.tsx"],"sourcesContent":["import type { TableRowProps } from '@mui/material'\nimport {\n ButtonGroup, TableCell, TableRow, Typography,\n} from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport React, { useState } from 'react'\n\nimport { OutOfBoundsSnackBar } from './OutOfBoundsSnackBar.tsx'\n\nexport interface MaxAccountsTableRow extends TableRowProps {\n activeAccountIndex?: number\n changeMaxAccounts?: (maxAccounts: number) => void\n maxAccounts?: number\n}\n\nexport const MaxAccountsTableRow: React.FC<MaxAccountsTableRow> = ({\n activeAccountIndex, changeMaxAccounts, maxAccounts,\n}) => {\n const [desiredMaximumAccounts, setDesiredMaximumAccounts] = useState<number | undefined>()\n const [showSnackBar, setShowSnackBar] = useState(false)\n\n const handleChangeMaxAccounts = (change: 'increase' | 'decrease') => {\n if (maxAccounts !== undefined && activeAccountIndex !== undefined) {\n switch (change) {\n case 'decrease': {\n const desiredMaximumAccounts = maxAccounts - 1\n const validMaximumAccounts = desiredMaximumAccounts > 0\n const maxAccountsWithinRange = activeAccountIndex + 1 <= desiredMaximumAccounts\n if (validMaximumAccounts && maxAccountsWithinRange) {\n changeMaxAccounts?.(desiredMaximumAccounts)\n }\n if (!maxAccountsWithinRange) setShowSnackBar(true)\n setDesiredMaximumAccounts(desiredMaximumAccounts)\n return\n }\n case 'increase': {\n changeMaxAccounts?.(maxAccounts + 1)\n return\n }\n default: {\n console.error(change, 'is not a recognized value')\n }\n }\n } else {\n throw new Error('Max Accounts is unset and needs a default')\n }\n }\n\n return (\n <TableRow>\n <TableCell>Maximum Accounts</TableCell>\n <TableCell align=\"center\">\n <Typography variant=\"caption\">{maxAccounts}</Typography>\n </TableCell>\n <TableCell align=\"center\">\n <ButtonGroup>\n <ButtonEx onClick={() => handleChangeMaxAccounts('decrease')} variant=\"contained\" size=\"small\">\n -\n </ButtonEx>\n <ButtonEx onClick={() => handleChangeMaxAccounts('increase')} variant=\"contained\" size=\"small\">\n +\n </ButtonEx>\n </ButtonGroup>\n <OutOfBoundsSnackBar\n desiredMaximumAccounts={desiredMaximumAccounts}\n activeAccountIndex={activeAccountIndex}\n setShowSnackBar={setShowSnackBar}\n showSnackBar={showSnackBar}\n />\n </TableCell>\n </TableRow>\n )\n}\n","import type { SnackbarProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Snackbar,\n} from '@mui/material'\nimport type { Dispatch, SetStateAction } from 'react'\nimport React from 'react'\n\nexport interface OutOfBoundsSnackBarProps extends SnackbarProps {\n activeAccountIndex?: number\n desiredMaximumAccounts?: number\n setShowSnackBar?: Dispatch<SetStateAction<boolean>>\n showSnackBar?: boolean\n}\n\nexport const OutOfBoundsSnackBar: React.FC<OutOfBoundsSnackBarProps> = ({\n activeAccountIndex,\n desiredMaximumAccounts,\n setShowSnackBar,\n showSnackBar,\n}) => {\n return (\n <Snackbar\n anchorOrigin={{ horizontal: 'center', vertical: 'top' }}\n autoHideDuration={5000}\n onClose={() => setShowSnackBar?.(false)}\n open={showSnackBar}\n >\n <Alert severity=\"error\" onClose={() => setShowSnackBar?.(false)}>\n <AlertTitle>Maximum Accounts Error</AlertTitle>\n Your currently selected account number (\n {activeAccountIndex === undefined ? '' : activeAccountIndex + 1}\n ) cannot be greater than the desired\n Maximum Accounts (\n {desiredMaximumAccounts}\n ).\n </Alert>\n </Snackbar>\n )\n}\n","import { HelpOutline as HelpOutlineIcon } from '@mui/icons-material'\nimport type { IconButtonProps } from '@mui/material'\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Link,\n List,\n ListItem,\n Typography,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nexport const SeedPhraseIconButton: React.FC<IconButtonProps> = (props) => {\n const [open, setOpen] = useState(false)\n const onClose = () => setOpen(false)\n return (\n <>\n <IconButton onClick={() => setOpen(true)} {...props}>\n <HelpOutlineIcon fontSize=\"small\" />\n </IconButton>\n <Dialog open={open}>\n <DialogTitle>Understanding your Seed Phrase</DialogTitle>\n <DialogContent>\n <Typography>\n Your Seed Phrase should adhere to the\n {' '}\n <Link target=\"_blank\" href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">\n bip39 specification\n </Link>\n {' '}\n and is used to generate accounts which identify your data on the XYO Network.\n </Typography>\n <List>\n <ListItem>Do not share this phrase with anyone.</ListItem>\n <ListItem>Do not save it to a public computer.</ListItem>\n <ListItem>Do not use a existing phrase from another wallet (i.e. Metamask).</ListItem>\n <ListItem>Do not use before copying it down somewhere safe.</ListItem>\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} variant=\"outlined\">\n OK\n </Button>\n </DialogActions>\n </Dialog>\n </>\n )\n}\n","import {\n Alert, AlertTitle, Snackbar,\n} from '@mui/material'\nimport { generateMnemonic } from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nexport interface DefaultSeedPhraseProps extends PropsWithChildren {\n changeSeedPhrase?: (seedPhrase: string) => void\n hideDefaultSeedPhraseMessage?: boolean\n seedPhrase?: string\n}\n\nexport const DefaultSeedPhrase: React.FC<DefaultSeedPhraseProps> = ({\n changeSeedPhrase, children, hideDefaultSeedPhraseMessage, seedPhrase,\n}) => {\n const [showSnackBar, setShowSnackBar] = useState(false)\n\n useMemo(() => {\n if (!seedPhrase) {\n const mnemonic = generateMnemonic(wordlist, 256)\n changeSeedPhrase?.(mnemonic)\n setShowSnackBar(true)\n }\n }, [changeSeedPhrase, seedPhrase])\n\n return (\n <>\n {hideDefaultSeedPhraseMessage\n ? null\n : (\n <Snackbar\n open={showSnackBar}\n autoHideDuration={5000}\n onClose={() => setShowSnackBar(false)}\n anchorOrigin={{ horizontal: 'center', vertical: 'top' }}\n >\n <Alert severity=\"success\">\n <AlertTitle>Default Seed Phrase Generated</AlertTitle>\n Go to application settings to save it.\n </Alert>\n </Snackbar>\n )}\n {children}\n </>\n )\n}\n","import type { DialogActionsProps, DialogProps } from '@mui/material'\nimport { Button, DialogActions } from '@mui/material'\nimport type { MouseEvent } from 'react'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../contexts/index.ts'\n\ninterface DialogActionButtonsProps extends DialogActionsProps {\n onClose?: DialogProps['onClose']\n}\n\nexport const DialogActionButtons: React.FC<DialogActionButtonsProps> = ({ onClose, ...props }) => {\n const { handleSave, setPhrase } = useSeedPhrase()\n\n const wrappedOnClose = (e: MouseEvent<HTMLElement>) => {\n // clear local copy of phrase when modal closes\n setPhrase?.('')\n onClose?.(e, 'escapeKeyDown')\n }\n\n return (\n <DialogActions {...props}>\n <Button variant=\"outlined\" onClick={wrappedOnClose}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"contained\" onClick={handleSave}>\n Save\n </Button>\n </DialogActions>\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { SeedPhraseContextState } from './State.ts'\n\nexport const SeedPhraseContext = createContextEx<SeedPhraseContextState>()\n","import { generateMnemonic, validateMnemonic } from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english'\nimport { useResetState } from '@xylabs/react-hooks'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useEffect, useMemo, useState,\n} from 'react'\n\nimport { SeedPhraseContext } from './Context.ts'\nimport type { SeedPhraseContextState } from './State.ts'\n\nexport interface SeedPhraseProviderProps extends PropsWithChildren {\n defaultPhrase?: string\n handleChangeSeedPhrase?: (phrase: string) => void\n open?: boolean\n saveCallback?: () => void\n seedPhrase?: string\n}\n\nconst validate = (passedPhrase?: string) => {\n if (!passedPhrase) {\n return null\n }\n return validateMnemonic(passedPhrase, wordlist)\n}\n\nexport const SeedPhraseProvider: React.FC<SeedPhraseProviderProps> = ({\n children,\n defaultPhrase,\n handleChangeSeedPhrase,\n saveCallback,\n seedPhrase,\n open,\n}) => {\n const [phrase, setPhrase] = useResetState<string | undefined>(defaultPhrase)\n const [overwriteWarning, setOverwriteWarning] = useState(false)\n\n useEffect(() => {\n if (seedPhrase || open) {\n setPhrase?.(seedPhrase ?? '')\n }\n }, [seedPhrase, open, setPhrase])\n\n const handleGenerate = useCallback(() => {\n const mnemonic = generateMnemonic(wordlist, 256)\n setPhrase?.(mnemonic)\n setOverwriteWarning?.(false)\n }, [])\n\n const handleCancelOverwrite = useCallback(() => {\n // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n setOverwriteWarning(false)\n }, [setOverwriteWarning])\n\n const handleClear = useCallback(() => {\n setPhrase('')\n setOverwriteWarning(false)\n }, [setPhrase, setOverwriteWarning])\n\n const handleSave = useCallback(() => {\n if (!overwriteWarning && seedPhrase && seedPhrase !== phrase) {\n setOverwriteWarning?.(true)\n } else {\n handleChangeSeedPhrase?.(phrase ?? '')\n saveCallback?.()\n }\n }, [handleChangeSeedPhrase, overwriteWarning, phrase, saveCallback, seedPhrase])\n\n useEffect(() => {\n if (!open) {\n handleCancelOverwrite()\n }\n }, [handleCancelOverwrite, open])\n\n const validSeedPhrase = useMemo(() => validate?.(seedPhrase), [seedPhrase])\n const validPhrase = useMemo(() => validate?.(phrase), [phrase])\n\n const value: SeedPhraseContextState = useMemo(() => ({\n handleCancelOverwrite,\n handleChangeSeedPhrase,\n handleClear,\n handleGenerate,\n handleSave,\n overwriteWarning,\n phrase,\n provided: true,\n seedPhrase,\n setOverwriteWarning,\n setPhrase,\n validPhrase,\n validSeedPhrase,\n validate,\n }), [handleCancelOverwrite,\n handleChangeSeedPhrase,\n handleClear,\n handleGenerate,\n handleSave,\n overwriteWarning,\n phrase,\n seedPhrase,\n setOverwriteWarning,\n setPhrase,\n validPhrase,\n validSeedPhrase,\n validate])\n\n return (\n <SeedPhraseContext\n value={value}\n >\n {children}\n </SeedPhraseContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { SeedPhraseContext } from './Context.ts'\n\nexport const useSeedPhrase = () => useContextEx(SeedPhraseContext, 'SeedPhrase', true)\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { WalletContextState } from './State.ts'\n\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { useResetState } from '@xylabs/react-hooks'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport { WalletContext } from './Context.ts'\nimport type { WalletContextState } from './State.ts'\n\nexport interface WalletProviderProps {\n defaultActiveAccountIndex?: number\n rootWallet?: WalletInstance | null\n}\n\nexport const WalletProvider: React.FC<PropsWithChildren<WalletProviderProps>> = ({\n children,\n defaultActiveAccountIndex = 0,\n rootWallet = null,\n ...props\n}) => {\n const [activeAccountIndex, setActiveAccountIndex] = useResetState(defaultActiveAccountIndex)\n\n const [activeAccount = null] = usePromise(async () => await rootWallet?.derivePath(activeAccountIndex.toString()), [activeAccountIndex, rootWallet])\n\n const value: WalletContextState = useMemo(() => ({\n activeAccount,\n activeAccountIndex,\n provided: true,\n rootWallet,\n setActiveAccountIndex,\n }), [activeAccount,\n activeAccountIndex,\n rootWallet,\n setActiveAccountIndex])\n\n return (\n <WalletContext\n value={value}\n {...props}\n >\n {children}\n </WalletContext>\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xylabs/react-shared'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context.ts'\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 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 { rootWallet } = useWalletContext(required)\n const [wallet] = usePromise(async () => (await rootWallet?.derivePath(index.toString())) ?? rootWallet, [rootWallet, 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 return activeAccountIndex === undefined && account === null ? [null, undefined] : [account, undefined]\n}\n","import type { StandardTextFieldProps } from '@mui/material'\nimport { FormControl, TextField } from '@mui/material'\nimport type { ReactNode } from 'react'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../../contexts/index.ts'\nimport { colorParser, InvalidPhraseTypography } from './validation-messages/index.ts'\n\nexport interface NewPhraseTextFieldProps extends StandardTextFieldProps {\n children?: ReactNode\n disableColor?: boolean\n}\n\nexport const NewPhraseTextField: React.FC<NewPhraseTextFieldProps> = ({\n children, disableColor, ...props\n}) => {\n const {\n phrase, setPhrase, validPhrase,\n } = useSeedPhrase()\n return (\n <>\n <FormControl\n fullWidth\n size=\"small\"\n sx={{\n display: 'flex', flexDirection: 'column', rowGap: 1,\n }}\n >\n {children}\n <TextField\n focused\n color={disableColor ? undefined : colorParser(validPhrase)}\n error={validPhrase === false}\n helperText={validPhrase === false ? <InvalidPhraseTypography /> : null}\n fullWidth\n maxRows={Number.POSITIVE_INFINITY}\n multiline\n onChange={e => setPhrase?.(e.target.value)}\n value={phrase}\n {...props}\n />\n </FormControl>\n </>\n )\n}\n","export const colorParser = (conditional?: boolean | null) => {\n switch (conditional) {\n case true: {\n return 'success'\n }\n case false: {\n return 'error'\n }\n default: {\n return\n }\n }\n}\n","import type { TypographyProps } from '@mui/material'\nimport { Link, Typography } from '@mui/material'\nimport React from 'react'\n\nexport const InvalidPhraseTypography: React.FC<TypographyProps> = props => (\n <Typography variant=\"caption\" color=\"error\" {...props}>\n Invalid seed phrase. See -\n {' '}\n <Link target=\"_blank\" href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">\n bip39 Proposal\n </Link>\n </Typography>\n)\n","import { CheckCircleOutline as CheckCircleOutlineIcon, HighlightOff as HighlightOffIcon } from '@mui/icons-material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\ninterface PhraseHeaderBox extends FlexBoxProps, PropsWithChildren {\n conditional?: boolean | null\n}\n\nexport const PhraseHeaderBox: React.FC<PhraseHeaderBox> = ({\n children, conditional, ...props\n}) => {\n const state = useMemo(() => {\n switch (conditional) {\n case true: {\n return 'success'\n }\n case false: {\n return 'error'\n }\n default: {\n return null\n }\n }\n }, [conditional])\n\n const Icon = useMemo(() => {\n switch (state) {\n case 'success': {\n return <CheckCircleOutlineIcon fontSize=\"small\" color=\"success\" />\n }\n case 'error': {\n return <HighlightOffIcon fontSize=\"small\" color=\"error\" />\n }\n default: {\n return null\n }\n }\n }, [state])\n\n return (\n <FlexRow justifyContent=\"start\" columnGap={1} {...props}>\n {Icon}\n {children}\n </FlexRow>\n )\n}\n","import { Button, DialogActions } from '@mui/material'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../../contexts/index.ts'\n\nexport const PhraseDialogActions = () => {\n const {\n handleClear, handleGenerate, overwriteWarning,\n } = useSeedPhrase()\n return (\n <DialogActions sx={{ justifyContent: 'center' }}>\n <Button disabled={overwriteWarning} variant=\"contained\" onClick={handleGenerate}>\n Generate\n </Button>\n <Button variant=\"outlined\" onClick={handleClear}>\n Clear\n </Button>\n </DialogActions>\n )\n}\n","import { ContentCopy } from '@mui/icons-material'\nimport type { StandardTextFieldProps } from '@mui/material'\nimport {\n Chip, FormControl, FormLabel, IconButton, TextField,\n Tooltip,\n useTheme,\n} from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React, { useMemo, useState } from 'react'\n\nimport { useSeedPhrase } from '../../../../../contexts/index.ts'\nimport { InvalidPhraseTypography, PhraseHeaderBox } from './validation-messages/index.ts'\n\nexport interface SavedPhraseTextFieldProps extends StandardTextFieldProps {\n fullWidth?: boolean\n showCopyButton?: boolean\n showPhraseHeader?: boolean\n visible?: boolean\n}\n\nexport const SavedPhraseTextField: React.FC<SavedPhraseTextFieldProps> = ({\n\n fullWidth, showCopyButton, showPhraseHeader, visible: visibleProp, ...props\n}) => {\n const { validSeedPhrase, seedPhrase } = useSeedPhrase()\n const theme = useTheme()\n\n const [visible, setVisible] = useState(visibleProp)\n\n useMemo(() => {\n setVisible(visibleProp)\n }, [visibleProp])\n\n const [copied, setCopied] = useState(false)\n const onCopyPhrase = async () => {\n if (seedPhrase) {\n try {\n await navigator.clipboard.writeText(seedPhrase)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (e) {\n console.error('Error copying resolvedSelectedAddress to clipboard', e)\n }\n }\n }\n\n return (\n <FormControl\n fullWidth={fullWidth}\n size=\"small\"\n sx={{\n display: 'flex', flexDirection: 'column', rowGap: 1,\n }}\n >\n <FlexRow gap={0.5}>\n <Chip\n label=\"Show Seed Phrase\"\n onClick={() => setVisible(!visible)}\n // Margin is set to 2px to match the Copy Button size and remove jumping during animation\n sx={{ alignSelf: 'center', my: '2px' }}\n />\n <Tooltip title={copied ? 'Copied!' : 'Copy'}>\n <IconButton\n onClick={() => void onCopyPhrase()}\n sx={{\n height: visible ? 'auto' : 0,\n opacity: visible ? 1 : 0,\n overflow: 'hidden',\n padding: visible ? theme.spacing(1) : 0,\n transition: 'all .25s ease-in-out',\n width: visible ? 'max-content' : 0,\n }}\n >\n <ContentCopy fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </FlexRow>\n {visible && showPhraseHeader\n ? (\n <FormLabel>\n <PhraseHeaderBox conditional={validSeedPhrase}>Saved Seed Phrase</PhraseHeaderBox>\n </FormLabel>\n )\n : null}\n <TextField\n defaultValue={seedPhrase}\n disabled\n error={validSeedPhrase === false}\n helperText={validSeedPhrase === false ? <InvalidPhraseTypography /> : null}\n fullWidth\n maxRows={Number.POSITIVE_INFINITY}\n multiline\n slotProps={{\n input: {\n style: {\n height: visible ? 'auto' : '0',\n overflow: 'hidden',\n opacity: visible ? 1 : 0,\n padding: visible ? theme.spacing(1) : 0,\n transition: 'all .25s ease-in-out',\n },\n },\n }}\n {...props}\n />\n\n </FormControl>\n )\n}\n","import { Alert, Button } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../contexts/index.ts'\n\nexport const OverwriteWarning = () => {\n const { handleCancelOverwrite, handleSave } = useSeedPhrase()\n return (\n <Alert\n variant=\"outlined\"\n severity=\"warning\"\n action={(\n <FlexRow sx={{ columnGap: 1 }}>\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={handleSave}>\n Overwrite\n </Button>\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={handleCancelOverwrite}>\n Cancel\n </Button>\n </FlexRow>\n )}\n >\n Are you sure you want to overwrite existing seed phrase? This action cannot be undone.\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Dialog, DialogContent, DialogTitle, FormLabel,\n} from '@mui/material'\nimport type { ReactNode } from 'react'\nimport React from 'react'\n\nimport { SeedPhraseProvider, useSeedPhrase } from '../../../contexts/index.ts'\nimport { SeedPhraseIconButton } from '../_shared/index.ts'\nimport {\n DialogActionButtons,\n NewPhraseTextField,\n OverwriteWarning,\n PhraseDialogActions,\n PhraseHeaderBox,\n SavedPhraseTextField,\n} from './components/index.ts'\n\nexport interface SeedPhraseDialogProps extends DialogProps {\n changeSeedPhrase?: (value: string) => void\n dialogTitle?: ReactNode\n seedPhrase?: string\n seedPhraseTextFieldTitle?: ReactNode\n showCopyButton?: boolean\n}\n\nexport const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({\n changeSeedPhrase, dialogTitle = 'Update Your Seed Phrase', seedPhrase, seedPhraseTextFieldTitle = 'New Seed Phrase', ...props\n}) => {\n return (\n <SeedPhraseProvider\n seedPhrase={seedPhrase}\n handleChangeSeedPhrase={changeSeedPhrase}\n open={props.open}\n saveCallback={() => props.onClose?.({}, 'escapeKeyDown')}\n >\n <SeedPhraseDialogInner dialogTitle={dialogTitle} seedPhraseTextFieldTitle={seedPhraseTextFieldTitle} {...props} />\n </SeedPhraseProvider>\n )\n}\n\nexport const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = ({\n dialogTitle, seedPhraseTextFieldTitle, showCopyButton, ...props\n}) => {\n const {\n overwriteWarning, seedPhrase, validPhrase,\n } = useSeedPhrase()\n\n return (\n <Dialog aria-labelledby=\"alert-dialog-title\" aria-describedby=\"alert-dialog-description\" fullWidth maxWidth=\"sm\" {...props}>\n <DialogTitle\n id=\"alert-dialog-title\"\n sx={{\n alignItems: 'center', display: 'inline-flex', flexDirection: 'row',\n }}\n >\n {dialogTitle}\n <SeedPhraseIconButton />\n </DialogTitle>\n <DialogContent sx={{\n display: 'flex', flexDirection: 'column', rowGap: 2,\n }}\n >\n\n <NewPhraseTextField>\n <FormLabel>\n <PhraseHeaderBox conditional={validPhrase}>{seedPhraseTextFieldTitle}</PhraseHeaderBox>\n </FormLabel>\n </NewPhraseTextField>\n <PhraseDialogActions />\n {seedPhrase\n ? <SavedPhraseTextField showCopyButton={showCopyButton} />\n : null}\n {overwriteWarning\n ? <OverwriteWarning />\n : null}\n </DialogContent>\n <DialogActionButtons onClose={props.onClose} />\n </Dialog>\n )\n}\n","import { Cancel as CancelIcon, RadioButtonChecked as RadioButtonCheckedIcon } from '@mui/icons-material'\nimport type { TableRowProps } from '@mui/material'\nimport {\n Button, ButtonGroup, TableCell, TableRow,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { SeedPhraseIconButton } from '../_shared/index.ts'\nimport { SeedPhraseDialog } from '../dialog/index.ts'\n\nexport interface SeedPhraseTableRowProps extends TableRowProps {\n changeSeedPhrase?: (seedPhrase: string) => void\n seedPhrase?: string\n}\n\nexport const SeedPhraseTableRow: React.FC<SeedPhraseTableRowProps> = ({\n changeSeedPhrase, seedPhrase, ...props\n}) => {\n const [open, setOpen] = useState(false)\n\n const handleOpen = () => {\n setOpen(true)\n }\n return (\n <TableRow {...props}>\n <TableCell>\n Seed Phrase\n {' '}\n <SeedPhraseIconButton />\n </TableCell>\n <TableCell align=\"center\">\n {seedPhrase\n ? <RadioButtonCheckedIcon color=\"success\" />\n : <CancelIcon color=\"error\" />}\n </TableCell>\n <TableCell>\n <SeedPhraseDialog changeSeedPhrase={changeSeedPhrase} open={open} onClose={() => setOpen(false)} seedPhrase={seedPhrase} />\n <ButtonGroup fullWidth>\n <Button variant=\"contained\" size=\"small\" onClick={handleOpen}>\n Update\n </Button>\n </ButtonGroup>\n </TableCell>\n </TableRow>\n )\n}\n","import { EthAddress } from '@xylabs/eth-address'\nimport { EthAccountButton } from '@xylabs/react-crypto'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { NumberStatus } from '@xylabs/react-number-status'\nimport { useNetwork } from '@xyo-network/react-network'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport React from 'react'\n\nimport { useAccount } from '../../hooks/index.ts'\n\nexport interface WalletAccountDetailsProps extends FlexBoxProps {\n account?: WalletInstance\n exploreUrl?: string\n}\n\nexport const WalletAccountDetails: React.FC<WalletAccountDetailsProps> = ({\n exploreUrl = 'https://explore.xyo.network', account, ...props\n}) => {\n const [accountToUse] = useAccount({ account })\n const { network } = useNetwork()\n const exploreAddressUrl = `${exploreUrl}/recent?account=${accountToUse?.address}&network=${network?.name ?? 'main'}`\n\n return (\n <FlexCol {...props}>\n <EthAccountButton address={EthAddress.fromString(accountToUse?.address)} />\n <FlexRow gap={1}>\n <NumberStatus rounded title=\"Tokens\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.tokens`} target=\"_blank\" />\n <NumberStatus rounded title=\"NFTs\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.nfts`} target=\"_blank\" />\n <NumberStatus rounded title=\"Signatures\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.signatures`} target=\"_blank\" />\n <NumberStatus rounded title=\"Signins\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.signins`} target=\"_blank\" />\n </FlexRow>\n </FlexCol>\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport {\n useRootWallet, useWalletContext, useWalletProvided,\n} from '../contexts/index.ts'\n\nexport interface AccountHookParams {\n account?: AccountInstance\n index?: number\n required?: boolean\n wallet?: WalletInstance\n}\n\nexport const useAccount = ({\n wallet, account, index, required = false,\n}: 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(new Error('useAccount can not have both a wallet and an account in the parameters'))\n }\n\n if (index && account && !validationError) {\n setValidationError(new Error('useAccount can not have both a index and an account in the parameters'))\n }\n\n const [error, setError] = useState<Error>()\n const [rootWallet] = useRootWallet(!wallet && required)\n const { activeAccountIndex } = useWalletContext(false)\n const [activeAccount] = usePromise(async () => {\n try {\n if (!validationError) {\n if (wallet) {\n const path = `${index ?? 0}'\\0`\n return await wallet?.derivePath?.(path)\n } else if (rootWallet) {\n const path = `${index ?? activeAccountIndex ?? 0}'\\/0`\n return await rootWallet?.derivePath?.(path)\n }\n }\n } catch (ex) {\n const error = ex as Error\n console.error(error.message)\n setError(error)\n }\n }, [index, wallet, rootWallet, activeAccountIndex, validationError])\n if (validationError && !error) {\n console.error(validationError.message)\n setError(validationError)\n }\n\n return [\n error\n ? undefined\n : (account ?? activeAccount ?? walletContextProvided)\n ? null\n : undefined,\n error,\n ]\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletContext } from '../contexts/index.ts'\n\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: ArrayBufferLike | string\n wallet?: WalletInstance | null\n}\n\nexport const useWallet = ({\n mnemonic, wallet, path, required = false, seed,\n}: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletContext(false)\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.fromPhrase(mnemonic)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n return path ? newAccount?.derivePath?.(path) : (newAccount ?? wallet)\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { useWalletContext } from '../contexts/index.ts'\nimport { useWallet } from './useWallet.ts'\n\nexport interface WalletsHookParams {\n paths: string[]\n wallet?: WalletInstance | null\n}\n\nexport const useWallets = ({ wallet, paths }: WalletsHookParams): [WalletInstance[] | null | undefined, Error | undefined] => {\n const walletContextProvided = useWalletContext(false)\n const [foundWallet] = useWallet({ wallet })\n const [wallets, error] = usePromise(\n async () => (foundWallet ? await Promise.all(paths.map(path => foundWallet.derivePath(path))) : undefined),\n [foundWallet, paths],\n )\n return [wallets ?? (walletContextProvided ? null : wallets), error]\n}\n","import type { UsePromiseState } from '@xylabs/react-promise'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { Mutex } from 'async-mutex'\n\nlet globalWrapperWallet: WalletInstance | undefined\nconst globalWrapperWalletMutex = new Mutex()\n\nexport const useWrapperAccount = (\n account?: AccountInstance | null,\n): [AccountInstance | null | undefined, Error | undefined, UsePromiseState | undefined] => {\n return usePromise(async () => {\n return await globalWrapperWalletMutex.runExclusive(async () => {\n // if we are expecting to receive a wallet or did receive on, return the override account\n if (account !== undefined) {\n return account\n }\n\n if (globalWrapperWallet) {\n return globalWrapperWallet\n }\n\n try {\n globalWrapperWallet = await HDWallet.random()\n console.log(`Global Wrapper Wallet Creation Success: ${globalWrapperWallet.address}`)\n } catch (ex) {\n const error = ex as Error\n console.error(`Global Wrapper Wallet Creation Failed: ${error.message}`)\n }\n return globalWrapperWallet\n })\n }, [account])\n}\n","import type { SelectProps } from '@mui/material'\nimport { CircularProgress, MenuItem } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport type { AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\nimport { AddressRenderRowBox } from '@xyo-network/react-address-render'\nimport React from 'react'\n\nimport { useWalletContext } from '../../contexts/index.ts'\nimport { useWallet } from '../../hooks/index.ts'\nimport { RenderedAccountMenuItem } from './RenderedMenuItem.tsx'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\nexport type WalletAccountSelectProps = SharedAddressRenderRowBoxProps &\n Omit<SelectProps<number>, 'variant'> &\n Partial<SelectProps<number>> & {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n }\n\nconst arrayRange = (length: number, start = 0) => {\n return [...Array.from({ 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 variant = 'outlined',\n ...props\n}) => {\n const {\n activeAccountIndex, setActiveAccountIndex, rootWallet,\n } = useWalletContext()\n const disabled = !rootWallet || activeAccountIndex === undefined\n\n return (\n <>\n {rootWallet\n ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n return (\n <RenderedAccountMenuItem\n addressNames={addressNames}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n rootWallet={rootWallet}\n selectedAccountIndex={selectedAccountIndex}\n showFavorite={showFavorite}\n />\n )\n }}\n value={activeAccountIndex === undefined ? '' : activeAccountIndex}\n onChange={event => setActiveAccountIndex?.(Number.parseInt(`${event.target.value}`))}\n size={size}\n variant={variant}\n {...props}\n >\n {rootWallet && arrayRange(maxAccounts).map((index) => {\n const [account] = useWallet({ path: index.toString(), wallet: rootWallet })\n const customName = account ? addressNames?.[account.address] : undefined\n const favorite = !!account && account.address in (addressNames ?? {})\n return (\n <MenuItem\n key={account?.address}\n value={index}\n sx={{\n minHeight: 0, paddingBottom: 0, paddingTop: 0,\n }}\n >\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 </SelectEx>\n )\n : <CircularProgress size={24} />}\n </>\n )\n}\n","import { MenuItem, type MenuItemProps } from '@mui/material'\nimport { AddressRenderRowBox } from '@xyo-network/react-address-render'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport React from 'react'\n\nimport { useWallet } from '../../hooks/index.ts'\n\nexport interface RenderedAccountMenuItemProps extends MenuItemProps {\n addressNames?: Record<string, string | undefined>\n iconOnly?: boolean\n iconSize?: number\n icons?: boolean\n rootWallet: WalletInstance\n selectedAccountIndex?: number\n showFavorite?: boolean\n}\n\nexport const RenderedAccountMenuItem: React.FC<RenderedAccountMenuItemProps> = ({\n selectedAccountIndex,\n rootWallet,\n addressNames,\n iconOnly,\n iconSize,\n icons,\n showFavorite,\n}) => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex?.toString(), wallet: rootWallet })\n const customName = selectedAccount ? addressNames?.[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in (addressNames ?? {})\n return (\n <MenuItem\n value={selectedAccountIndex}\n sx={{\n minHeight: 0, paddingBottom: 0, paddingTop: 0,\n }}\n >\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","import type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { WalletAccountSelect } from './Select.tsx'\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 variant=\"outlined\"\n />\n </FlexCol>\n )\n}\n"],"mappings":";;;;AACA,SACEA,aAAaC,WAAWC,UAAUC,kBAC7B;AACP,SAASC,gBAAgB;AACzB,OAAOC,UAASC,gBAAgB;;;ACJhC,SACEC,OAAOC,YAAYC,gBACd;AAEP,OAAOC,WAAW;AASX,IAAMC,sBAA0D,wBAAC,EACtEC,oBACAC,wBACAC,iBACAC,aAAY,MACb;AACC,SACE,sBAAA,cAACC,UAAAA;IACCC,cAAc;MAAEC,YAAY;MAAUC,UAAU;IAAM;IACtDC,kBAAkB;IAClBC,SAAS,6BAAMP,kBAAkB,KAAA,GAAxB;IACTQ,MAAMP;KAEN,sBAAA,cAACQ,OAAAA;IAAMC,UAAS;IAAQH,SAAS,6BAAMP,kBAAkB,KAAA,GAAxB;KAC/B,sBAAA,cAACW,YAAAA,MAAW,wBAAA,GAAmC,4CAE9Cb,uBAAuBc,SAAY,KAAKd,qBAAqB,GAAE,2DAG/DC,wBAAuB,IAAA,CAAA;AAKhC,GAxBuE;;;ADChE,IAAMc,sBAAqD,wBAAC,EACjEC,oBAAoBC,mBAAmBC,YAAW,MACnD;AACC,QAAM,CAACC,wBAAwBC,yBAAAA,IAA6BC,SAAAA;AAC5D,QAAM,CAACC,cAAcC,eAAAA,IAAmBF,SAAS,KAAA;AAEjD,QAAMG,0BAA0B,wBAACC,WAAAA;AAC/B,QAAIP,gBAAgBQ,UAAaV,uBAAuBU,QAAW;AACjE,cAAQD,QAAAA;QACN,KAAK,YAAY;AACf,gBAAMN,0BAAyBD,cAAc;AAC7C,gBAAMS,uBAAuBR,0BAAyB;AACtD,gBAAMS,yBAAyBZ,qBAAqB,KAAKG;AACzD,cAAIQ,wBAAwBC,wBAAwB;AAClDX,gCAAoBE,uBAAAA;UACtB;AACA,cAAI,CAACS,uBAAwBL,iBAAgB,IAAA;AAC7CH,oCAA0BD,uBAAAA;AAC1B;QACF;QACA,KAAK,YAAY;AACfF,8BAAoBC,cAAc,CAAA;AAClC;QACF;QACA,SAAS;AACPW,kBAAQC,MAAML,QAAQ,2BAAA;QACxB;MACF;IACF,OAAO;AACL,YAAM,IAAIM,MAAM,2CAAA;IAClB;EACF,GAzBgC;AA2BhC,SACE,gBAAAC,OAAA,cAACC,UAAAA,MACC,gBAAAD,OAAA,cAACE,WAAAA,MAAU,kBAAA,GACX,gBAAAF,OAAA,cAACE,WAAAA;IAAUC,OAAM;KACf,gBAAAH,OAAA,cAACI,YAAAA;IAAWC,SAAQ;KAAWnB,WAAAA,CAAAA,GAEjC,gBAAAc,OAAA,cAACE,WAAAA;IAAUC,OAAM;KACf,gBAAAH,OAAA,cAACM,aAAAA,MACC,gBAAAN,OAAA,cAACO,UAAAA;IAASC,SAAS,6BAAMhB,wBAAwB,UAAA,GAA9B;IAA2Ca,SAAQ;IAAYI,MAAK;KAAQ,GAAA,GAG/F,gBAAAT,OAAA,cAACO,UAAAA;IAASC,SAAS,6BAAMhB,wBAAwB,UAAA,GAA9B;IAA2Ca,SAAQ;IAAYI,MAAK;KAAQ,GAAA,CAAA,GAIjG,gBAAAT,OAAA,cAACU,qBAAAA;IACCvB;IACAH;IACAO;IACAD;;AAKV,GAzDkE;;;AEflE,SAASqB,eAAeC,uBAAuB;AAE/C,SACEC,QACAC,QACAC,eACAC,eACAC,aACAC,YACAC,MACAC,MACAC,UACAC,cAAAA,mBACK;AACP,OAAOC,UAASC,YAAAA,iBAAgB;AAEzB,IAAMC,uBAAkD,wBAACC,UAAAA;AAC9D,QAAM,CAACC,MAAMC,OAAAA,IAAWC,UAAS,KAAA;AACjC,QAAMC,UAAU,6BAAMF,QAAQ,KAAA,GAAd;AAChB,SACE,gBAAAG,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAACC,YAAAA;IAAWC,SAAS,6BAAML,QAAQ,IAAA,GAAd;IAAsB,GAAGF;KAC5C,gBAAAK,OAAA,cAACG,iBAAAA;IAAgBC,UAAS;OAE5B,gBAAAJ,OAAA,cAACK,QAAAA;IAAOT;KACN,gBAAAI,OAAA,cAACM,aAAAA,MAAY,gCAAA,GACb,gBAAAN,OAAA,cAACO,eAAAA,MACC,gBAAAP,OAAA,cAACQ,aAAAA,MAAW,yCAET,KACD,gBAAAR,OAAA,cAACS,MAAAA;IAAKC,QAAO;IAASC,MAAK;KAAiE,qBAAA,GAG3F,KAAI,+EAAA,GAGP,gBAAAX,OAAA,cAACY,MAAAA,MACC,gBAAAZ,OAAA,cAACa,UAAAA,MAAS,uCAAA,GACV,gBAAAb,OAAA,cAACa,UAAAA,MAAS,sCAAA,GACV,gBAAAb,OAAA,cAACa,UAAAA,MAAS,mEAAA,GACV,gBAAAb,OAAA,cAACa,UAAAA,MAAS,mDAAA,CAAA,CAAA,GAGd,gBAAAb,OAAA,cAACc,eAAAA,MACC,gBAAAd,OAAA,cAACe,QAAAA;IAAOb,SAASH;IAASiB,SAAQ;KAAW,IAAA,CAAA,CAAA,CAAA;AAOvD,GAnC+D;;;AChB/D,SACEC,SAAAA,QAAOC,cAAAA,aAAYC,YAAAA,iBACd;AACP,SAASC,wBAAwB;AACjC,SAASC,gBAAgB;AAEzB,OAAOC,UAASC,SAASC,YAAAA,iBAAgB;AAQlC,IAAMC,oBAAsD,wBAAC,EAClEC,kBAAkBC,UAAUC,8BAA8BC,WAAU,MACrE;AACC,QAAM,CAACC,cAAcC,eAAAA,IAAmBC,UAAS,KAAA;AAEjDC,UAAQ,MAAA;AACN,QAAI,CAACJ,YAAY;AACf,YAAMK,WAAWC,iBAAiBC,UAAU,GAAA;AAC5CV,yBAAmBQ,QAAAA;AACnBH,sBAAgB,IAAA;IAClB;EACF,GAAG;IAACL;IAAkBG;GAAW;AAEjC,SACE,gBAAAQ,OAAA,cAAAA,OAAA,UAAA,MACGT,+BACG,OAEE,gBAAAS,OAAA,cAACC,WAAAA;IACCC,MAAMT;IACNU,kBAAkB;IAClBC,SAAS,6BAAMV,gBAAgB,KAAA,GAAtB;IACTW,cAAc;MAAEC,YAAY;MAAUC,UAAU;IAAM;KAEtD,gBAAAP,OAAA,cAACQ,QAAAA;IAAMC,UAAS;KACd,gBAAAT,OAAA,cAACU,aAAAA,MAAW,+BAAA,GAA0C,wCAAA,CAAA,GAK/DpB,QAAAA;AAGP,GAjCmE;;;ACbnE,SAASqB,UAAAA,SAAQC,iBAAAA,sBAAqB;AAEtC,OAAOC,YAAW;;;ACHlB,SAASC,uBAAuB;AAIzB,IAAMC,oBAAoBD,gBAAAA;;;ACJjC,SAASE,oBAAAA,mBAAkBC,wBAAwB;AACnD,SAASC,YAAAA,iBAAgB;AACzB,SAASC,qBAAqB;AAE9B,OAAOC,UACLC,aAAaC,WAAWC,WAAAA,UAASC,YAAAA,iBAC5B;AAaP,IAAMC,WAAW,wBAACC,iBAAAA;AAChB,MAAI,CAACA,cAAc;AACjB,WAAO;EACT;AACA,SAAOC,iBAAiBD,cAAcE,SAAAA;AACxC,GALiB;AAOV,IAAMC,qBAAwD,wBAAC,EACpEC,UACAC,eACAC,wBACAC,cACAC,YACAC,KAAI,MACL;AACC,QAAM,CAACC,QAAQC,SAAAA,IAAaC,cAAkCP,aAAAA;AAC9D,QAAM,CAACQ,kBAAkBC,mBAAAA,IAAuBC,UAAS,KAAA;AAEzDC,YAAU,MAAA;AACR,QAAIR,cAAcC,MAAM;AACtBE,kBAAYH,cAAc,EAAA;IAC5B;EACF,GAAG;IAACA;IAAYC;IAAME;GAAU;AAEhC,QAAMM,iBAAiBC,YAAY,MAAA;AACjC,UAAMC,WAAWC,kBAAiBlB,WAAU,GAAA;AAC5CS,gBAAYQ,QAAAA;AACZL,0BAAsB,KAAA;EACxB,GAAG,CAAA,CAAE;AAEL,QAAMO,wBAAwBH,YAAY,MAAA;AAExCJ,wBAAoB,KAAA;EACtB,GAAG;IAACA;GAAoB;AAExB,QAAMQ,cAAcJ,YAAY,MAAA;AAC9BP,cAAU,EAAA;AACVG,wBAAoB,KAAA;EACtB,GAAG;IAACH;IAAWG;GAAoB;AAEnC,QAAMS,aAAaL,YAAY,MAAA;AAC7B,QAAI,CAACL,oBAAoBL,cAAcA,eAAeE,QAAQ;AAC5DI,4BAAsB,IAAA;IACxB,OAAO;AACLR,+BAAyBI,UAAU,EAAA;AACnCH,qBAAAA;IACF;EACF,GAAG;IAACD;IAAwBO;IAAkBH;IAAQH;IAAcC;GAAW;AAE/EQ,YAAU,MAAA;AACR,QAAI,CAACP,MAAM;AACTY,4BAAAA;IACF;EACF,GAAG;IAACA;IAAuBZ;GAAK;AAEhC,QAAMe,kBAAkBC,SAAQ,MAAM1B,WAAWS,UAAAA,GAAa;IAACA;GAAW;AAC1E,QAAMkB,cAAcD,SAAQ,MAAM1B,WAAWW,MAAAA,GAAS;IAACA;GAAO;AAE9D,QAAMiB,QAAgCF,SAAQ,OAAO;IACnDJ;IACAf;IACAgB;IACAL;IACAM;IACAV;IACAH;IACAkB,UAAU;IACVpB;IACAM;IACAH;IACAe;IACAF;IACAzB;EACF,IAAI;IAACsB;IACHf;IACAgB;IACAL;IACAM;IACAV;IACAH;IACAF;IACAM;IACAH;IACAe;IACAF;IACAzB;GAAS;AAEX,SACE,gBAAA8B,OAAA,cAACC,mBAAAA;IACCH;KAECvB,QAAAA;AAGP,GAvFqE;;;AC1BrE,SAAS2B,oBAAoB;AAItB,IAAMC,gBAAgB,6BAAMC,aAAaC,mBAAmB,cAAc,IAAA,GAApD;;;ACJ7B,SAASC,mBAAAA,wBAAuB;AAIzB,IAAMC,gBAAgBD,iBAAAA;;;ACJ7B,SAASE,iBAAAA,sBAAqB;AAC9B,SAASC,kBAAkB;AAG3B,OAAOC,UAASC,WAAAA,gBAAe;AAUxB,IAAMC,iBAAmE,wBAAC,EAC/EC,UACAC,4BAA4B,GAC5BC,aAAa,MACb,GAAGC,MAAAA,MACJ;AACC,QAAM,CAACC,oBAAoBC,qBAAAA,IAAyBC,eAAcL,yBAAAA;AAElE,QAAM,CAACM,gBAAgB,IAAI,IAAIC,WAAW,YAAY,MAAMN,YAAYO,WAAWL,mBAAmBM,SAAQ,CAAA,GAAK;IAACN;IAAoBF;GAAW;AAEnJ,QAAMS,QAA4BC,SAAQ,OAAO;IAC/CL;IACAH;IACAS,UAAU;IACVX;IACAG;EACF,IAAI;IAACE;IACHH;IACAF;IACAG;GAAsB;AAExB,SACE,gBAAAS,OAAA,cAACC,eAAAA;IACCJ;IACC,GAAGR;KAEHH,QAAAA;AAGP,GA7BgF;;;ACdhF,SAASgB,cAAAA,mBAAkB;AAC3B,SAASC,gBAAAA,eAAcC,mBAAmB;AAKnC,IAAMC,mBAAmB,wBAACC,WAAW,SAAI;AAC9C,SAAOC,cAAaC,eAAe,UAAUF,QAAAA;AAC/C,GAFgC;AAIzB,IAAMG,oBAAoB,6BAAA;AAC/B,SAAOC,YAAYF,aAAAA;AACrB,GAFiC;AAI1B,IAAMG,gBAAgB,wBAACL,WAAW,SAAI;AAC3C,QAAM,EAAEM,WAAU,IAAKP,iBAAiBC,QAAAA;AACxC,SAAO;IAACM;IAAYC;;AACtB,GAH6B;AAKtB,IAAMC,8BAA8B,wBAACC,OAAeT,WAAW,SAAI;AACxE,QAAM,EAAEM,WAAU,IAAKP,iBAAiBC,QAAAA;AACxC,QAAM,CAACU,MAAAA,IAAUC,YAAW,YAAa,MAAML,YAAYM,WAAWH,MAAMI,SAAQ,CAAA,KAAQP,YAAY;IAACA;IAAYG;GAAM;AAC3H,SAAO;IAACC;IAAQH;;AAClB,GAJ2C;AAMpC,IAAMO,2BAA2B,wBAACd,WAAW,SAAI;AACtD,QAAM,EAAEe,mBAAkB,IAAKhB,iBAAiBC,QAAAA;AAGhD,QAAM,CAACgB,OAAAA,IAAWR,4BAA4BO,sBAAsB,GAAGf,QAAAA;AACvE,SAAOe,uBAAuBR,UAAaS,YAAY,OAAO;IAAC;IAAMT;MAAa;IAACS;IAAST;;AAC9F,GANwC;;;ANdjC,IAAMU,sBAA0D,wBAAC,EAAEC,SAAS,GAAGC,MAAAA,MAAO;AAC3F,QAAM,EAAEC,YAAYC,UAAS,IAAKC,cAAAA;AAElC,QAAMC,iBAAiB,wBAACC,MAAAA;AAEtBH,gBAAY,EAAA;AACZH,cAAUM,GAAG,eAAA;EACf,GAJuB;AAMvB,SACE,gBAAAC,OAAA,cAACC,gBAAkBP,OACjB,gBAAAM,OAAA,cAACE,SAAAA;IAAOC,SAAQ;IAAWC,SAASN;KAAgB,QAAA,GAGpD,gBAAAE,OAAA,cAACE,SAAAA;IAAOG,MAAK;IAASF,SAAQ;IAAYC,SAAST;KAAY,MAAA,CAAA;AAKrE,GAnBuE;;;AOVvE,SAASW,aAAaC,iBAAiB;AAEvC,OAAOC,aAAW;;;ACHX,IAAMC,cAAc,wBAACC,gBAAAA;AAC1B,UAAQA,aAAAA;IACN,KAAK,MAAM;AACT,aAAO;IACT;IACA,KAAK,OAAO;AACV,aAAO;IACT;IACA,SAAS;AACP;IACF;EACF;AACF,GAZ2B;;;ACC3B,SAASC,QAAAA,OAAMC,cAAAA,mBAAkB;AACjC,OAAOC,YAAW;AAEX,IAAMC,0BAAqDC,wBAAAA,UAChE,gBAAAC,OAAA,cAACC,aAAAA;EAAWC,SAAQ;EAAUC,OAAM;EAAS,GAAGJ;GAAO,8BAEpD,KACD,gBAAAC,OAAA,cAACI,OAAAA;EAAKC,QAAO;EAASC,MAAK;GAAiE,gBAAA,CAAA,GAJ9BP;;;ACJlE,SAASQ,sBAAsBC,wBAAwBC,gBAAgBC,wBAAwB;AAE/F,SAASC,eAAe;AAExB,OAAOC,UAASC,WAAAA,gBAAe;AAMxB,IAAMC,kBAA6C,wBAAC,EACzDC,UAAUC,aAAa,GAAGC,MAAAA,MAC3B;AACC,QAAMC,QAAQC,SAAQ,MAAA;AACpB,YAAQH,aAAAA;MACN,KAAK,MAAM;AACT,eAAO;MACT;MACA,KAAK,OAAO;AACV,eAAO;MACT;MACA,SAAS;AACP,eAAO;MACT;IACF;EACF,GAAG;IAACA;GAAY;AAEhB,QAAMI,OAAOD,SAAQ,MAAA;AACnB,YAAQD,OAAAA;MACN,KAAK,WAAW;AACd,eAAO,gBAAAG,OAAA,cAACC,wBAAAA;UAAuBC,UAAS;UAAQC,OAAM;;MACxD;MACA,KAAK,SAAS;AACZ,eAAO,gBAAAH,OAAA,cAACI,kBAAAA;UAAiBF,UAAS;UAAQC,OAAM;;MAClD;MACA,SAAS;AACP,eAAO;MACT;IACF;EACF,GAAG;IAACN;GAAM;AAEV,SACE,gBAAAG,OAAA,cAACK,SAAAA;IAAQC,gBAAe;IAAQC,WAAW;IAAI,GAAGX;KAC/CG,MACAL,QAAAA;AAGP,GArC0D;;;AHGnD,IAAMc,qBAAwD,wBAAC,EACpEC,UAAUC,cAAc,GAAGC,MAAAA,MAC5B;AACC,QAAM,EACJC,QAAQC,WAAWC,YAAW,IAC5BC,cAAAA;AACJ,SACE,gBAAAC,QAAA,cAAAA,QAAA,UAAA,MACE,gBAAAA,QAAA,cAACC,aAAAA;IACCC,WAAAA;IACAC,MAAK;IACLC,IAAI;MACFC,SAAS;MAAQC,eAAe;MAAUC,QAAQ;IACpD;KAECd,UACD,gBAAAO,QAAA,cAACQ,WAAAA;IACCC,SAAAA;IACAC,OAAOhB,eAAeiB,SAAYC,YAAYd,WAAAA;IAC9Ce,OAAOf,gBAAgB;IACvBgB,YAAYhB,gBAAgB,QAAQ,gBAAAE,QAAA,cAACe,yBAAAA,IAAAA,IAA6B;IAClEb,WAAAA;IACAc,SAASC,OAAOC;IAChBC,WAAAA;IACAC,UAAUC,wBAAAA,MAAKxB,YAAYwB,EAAEC,OAAOC,KAAK,GAA/BF;IACVE,OAAO3B;IACN,GAAGD;;AAKd,GA/BqE;;;AIbrE,SAAS6B,UAAAA,SAAQC,iBAAAA,sBAAqB;AACtC,OAAOC,aAAW;AAIX,IAAMC,sBAAsB,6BAAA;AACjC,QAAM,EACJC,aAAaC,gBAAgBC,iBAAgB,IAC3CC,cAAAA;AACJ,SACE,gBAAAC,QAAA,cAACC,gBAAAA;IAAcC,IAAI;MAAEC,gBAAgB;IAAS;KAC5C,gBAAAH,QAAA,cAACI,SAAAA;IAAOC,UAAUP;IAAkBQ,SAAQ;IAAYC,SAASV;KAAgB,UAAA,GAGjF,gBAAAG,QAAA,cAACI,SAAAA;IAAOE,SAAQ;IAAWC,SAASX;KAAa,OAAA,CAAA;AAKvD,GAdmC;;;ACLnC,SAASY,mBAAmB;AAE5B,SACEC,MAAMC,eAAAA,cAAaC,WAAWC,cAAAA,aAAYC,aAAAA,YAC1CC,SACAC,gBACK;AACP,SAASC,WAAAA,gBAAe;AACxB,OAAOC,WAASC,WAAAA,UAASC,YAAAA,iBAAgB;AAYlC,IAAMC,uBAA4D,wBAAC,EAExEC,WAAWC,gBAAgBC,kBAAkBC,SAASC,aAAa,GAAGC,MAAAA,MACvE;AACC,QAAM,EAAEC,iBAAiBC,WAAU,IAAKC,cAAAA;AACxC,QAAMC,QAAQC,SAAAA;AAEd,QAAM,CAACP,SAASQ,UAAAA,IAAcC,UAASR,WAAAA;AAEvCS,EAAAA,SAAQ,MAAA;AACNF,eAAWP,WAAAA;EACb,GAAG;IAACA;GAAY;AAEhB,QAAM,CAACU,QAAQC,SAAAA,IAAaH,UAAS,KAAA;AACrC,QAAMI,eAAe,mCAAA;AACnB,QAAIT,YAAY;AACd,UAAI;AACF,cAAMU,UAAUC,UAAUC,UAAUZ,UAAAA;AACpCQ,kBAAU,IAAA;AACVK,mBAAW,MAAML,UAAU,KAAA,GAAQ,GAAA;MACrC,SAASM,GAAG;AACVC,gBAAQC,MAAM,sDAAsDF,CAAAA;MACtE;IACF;EACF,GAVqB;AAYrB,SACE,gBAAAG,QAAA,cAACC,cAAAA;IACCzB;IACA0B,MAAK;IACLC,IAAI;MACFC,SAAS;MAAQC,eAAe;MAAUC,QAAQ;IACpD;KAEA,gBAAAN,QAAA,cAACO,UAAAA;IAAQC,KAAK;KACZ,gBAAAR,QAAA,cAACS,MAAAA;IACCC,OAAM;IACNC,SAAS,6BAAMxB,WAAW,CAACR,OAAAA,GAAlB;;IAETwB,IAAI;MAAES,WAAW;MAAUC,IAAI;IAAM;MAEvC,gBAAAb,QAAA,cAACc,SAAAA;IAAQC,OAAOzB,SAAS,YAAY;KACnC,gBAAAU,QAAA,cAACgB,aAAAA;IACCL,SAAS,6BAAM,KAAKnB,aAAAA,GAAX;IACTW,IAAI;MACFc,QAAQtC,UAAU,SAAS;MAC3BuC,SAASvC,UAAU,IAAI;MACvBwC,UAAU;MACVC,SAASzC,UAAUM,MAAMoC,QAAQ,CAAA,IAAK;MACtCC,YAAY;MACZC,OAAO5C,UAAU,gBAAgB;IACnC;KAEA,gBAAAqB,QAAA,cAACwB,aAAAA;IAAYC,UAAS;SAI3B9C,WAAWD,mBAEN,gBAAAsB,QAAA,cAAC0B,WAAAA,MACC,gBAAA1B,QAAA,cAAC2B,iBAAAA;IAAgBC,aAAa9C;KAAiB,mBAAA,CAAA,IAGnD,MACJ,gBAAAkB,QAAA,cAAC6B,YAAAA;IACCC,cAAc/C;IACdgD,UAAAA;IACAhC,OAAOjB,oBAAoB;IAC3BkD,YAAYlD,oBAAoB,QAAQ,gBAAAkB,QAAA,cAACiC,yBAAAA,IAAAA,IAA6B;IACtEzD,WAAAA;IACA0D,SAASC,OAAOC;IAChBC,WAAAA;IACAC,WAAW;MACTC,OAAO;QACLC,OAAO;UACLvB,QAAQtC,UAAU,SAAS;UAC3BwC,UAAU;UACVD,SAASvC,UAAU,IAAI;UACvByC,SAASzC,UAAUM,MAAMoC,QAAQ,CAAA,IAAK;UACtCC,YAAY;QACd;MACF;IACF;IACC,GAAGzC;;AAKZ,GAxFyE;;;ACpBzE,SAAS4D,SAAAA,QAAOC,UAAAA,eAAc;AAC9B,SAASC,WAAAA,gBAAe;AACxB,OAAOC,aAAW;AAIX,IAAMC,mBAAmB,6BAAA;AAC9B,QAAM,EAAEC,uBAAuBC,WAAU,IAAKC,cAAAA;AAC9C,SACE,gBAAAC,QAAA,cAACC,QAAAA;IACCC,SAAQ;IACRC,UAAS;IACTC,QACE,gBAAAJ,QAAA,cAACK,UAAAA;MAAQC,IAAI;QAAEC,WAAW;MAAE;OAC1B,gBAAAP,QAAA,cAACQ,SAAAA;MAAON,SAAQ;MAAWO,OAAM;MAAUC,MAAK;MAAQC,SAASb;OAAY,WAAA,GAG7E,gBAAAE,QAAA,cAACQ,SAAAA;MAAON,SAAQ;MAAWO,OAAM;MAAUC,MAAK;MAAQC,SAASd;OAAuB,QAAA,CAAA;KAK7F,wFAAA;AAIL,GApBgC;;;ACLhC,SACEe,UAAAA,SAAQC,iBAAAA,gBAAeC,eAAAA,cAAaC,aAAAA,kBAC/B;AAEP,OAAOC,aAAW;AAqBX,IAAMC,mBAAoD,wBAAC,EAChEC,kBAAkBC,cAAc,2BAA2BC,YAAYC,2BAA2B,mBAAmB,GAAGC,MAAAA,MACzH;AACC,SACE,gBAAAC,QAAA,cAACC,oBAAAA;IACCJ;IACAK,wBAAwBP;IACxBQ,MAAMJ,MAAMI;IACZC,cAAc,6BAAML,MAAMM,UAAU,CAAC,GAAG,eAAA,GAA1B;KAEd,gBAAAL,QAAA,cAACM,uBAAAA;IAAsBV;IAA0BE;IAAqD,GAAGC;;AAG/G,GAbiE;AAe1D,IAAMO,wBAAyD,wBAAC,EACrEV,aAAaE,0BAA0BS,gBAAgB,GAAGR,MAAAA,MAC3D;AACC,QAAM,EACJS,kBAAkBX,YAAYY,YAAW,IACvCC,cAAAA;AAEJ,SACE,gBAAAV,QAAA,cAACW,SAAAA;IAAOC,mBAAgB;IAAqBC,oBAAiB;IAA2BC,WAAAA;IAAUC,UAAS;IAAM,GAAGhB;KACnH,gBAAAC,QAAA,cAACgB,cAAAA;IACCC,IAAG;IACHC,IAAI;MACFC,YAAY;MAAUC,SAAS;MAAeC,eAAe;IAC/D;KAECzB,aACD,gBAAAI,QAAA,cAACsB,sBAAAA,IAAAA,CAAAA,GAEH,gBAAAtB,QAAA,cAACuB,gBAAAA;IAAcL,IAAI;MACjBE,SAAS;MAAQC,eAAe;MAAUG,QAAQ;IACpD;KAGE,gBAAAxB,QAAA,cAACyB,oBAAAA,MACC,gBAAAzB,QAAA,cAAC0B,YAAAA,MACC,gBAAA1B,QAAA,cAAC2B,iBAAAA;IAAgBC,aAAanB;KAAcX,wBAAAA,CAAAA,CAAAA,GAGhD,gBAAAE,QAAA,cAAC6B,qBAAAA,IAAAA,GACAhC,aACG,gBAAAG,QAAA,cAAC8B,sBAAAA;IAAqBvB;OACtB,MACHC,mBACG,gBAAAR,QAAA,cAAC+B,kBAAAA,IAAAA,IACD,IAAA,GAEN,gBAAA/B,QAAA,cAACgC,qBAAAA;IAAoB3B,SAASN,MAAMM;;AAG1C,GAvCsE;;;ACzCtE,SAAS4B,UAAUC,YAAYC,sBAAsBC,8BAA8B;AAEnF,SACEC,UAAAA,SAAQC,eAAAA,cAAaC,aAAAA,YAAWC,YAAAA,iBAC3B;AACP,OAAOC,WAASC,YAAAA,iBAAgB;AAUzB,IAAMC,qBAAwD,wBAAC,EACpEC,kBAAkBC,YAAY,GAAGC,MAAAA,MAClC;AACC,QAAM,CAACC,MAAMC,OAAAA,IAAWC,UAAS,KAAA;AAEjC,QAAMC,aAAa,6BAAA;AACjBF,YAAQ,IAAA;EACV,GAFmB;AAGnB,SACE,gBAAAG,QAAA,cAACC,WAAaN,OACZ,gBAAAK,QAAA,cAACE,YAAAA,MAAU,eAER,KACD,gBAAAF,QAAA,cAACG,sBAAAA,IAAAA,CAAAA,GAEH,gBAAAH,QAAA,cAACE,YAAAA;IAAUE,OAAM;KACdV,aACG,gBAAAM,QAAA,cAACK,wBAAAA;IAAuBC,OAAM;OAC9B,gBAAAN,QAAA,cAACO,YAAAA;IAAWD,OAAM;OAExB,gBAAAN,QAAA,cAACE,YAAAA,MACC,gBAAAF,QAAA,cAACQ,kBAAAA;IAAiBf;IAAoCG;IAAYa,SAAS,6BAAMZ,QAAQ,KAAA,GAAd;IAAsBH;MACjG,gBAAAM,QAAA,cAACU,cAAAA;IAAYC,WAAAA;KACX,gBAAAX,QAAA,cAACY,SAAAA;IAAOC,SAAQ;IAAYC,MAAK;IAAQC,SAAShB;KAAY,QAAA,CAAA,CAAA,CAAA;AAOxE,GA9BqE;;;ACfrE,SAASiB,kBAAkB;AAC3B,SAASC,wBAAwB;AAEjC,SAASC,SAASC,WAAAA,gBAAe;AACjC,SAASC,oBAAoB;AAC7B,SAASC,kBAAkB;AAE3B,OAAOC,aAAW;;;ACPlB,SAASC,cAAAA,mBAAkB;AAG3B,SAASC,YAAAA,iBAAgB;AAalB,IAAMC,aAAa,wBAAC,EACzBC,QAAQC,SAASC,OAAOC,WAAW,MAAK,IACnB,CAAC,MAAC;AAIvB,QAAMC,wBAAwBC,kBAAAA;AAC9B,QAAM,CAACC,iBAAiBC,kBAAAA,IAAsBC,UAAAA;AAC9C,MAAIR,UAAUC,WAAW,CAACK,iBAAiB;AACzCC,uBAAmB,IAAIE,MAAM,wEAAA,CAAA;EAC/B;AAEA,MAAIP,SAASD,WAAW,CAACK,iBAAiB;AACxCC,uBAAmB,IAAIE,MAAM,uEAAA,CAAA;EAC/B;AAEA,QAAM,CAACC,OAAOC,QAAAA,IAAYH,UAAAA;AAC1B,QAAM,CAACI,UAAAA,IAAcC,cAAc,CAACb,UAAUG,QAAAA;AAC9C,QAAM,EAAEW,mBAAkB,IAAKC,iBAAiB,KAAA;AAChD,QAAM,CAACC,aAAAA,IAAiBC,YAAW,YAAA;AACjC,QAAI;AACF,UAAI,CAACX,iBAAiB;AACpB,YAAIN,QAAQ;AACV,gBAAMkB,OAAO,GAAGhB,SAAS,CAAA;AACzB,iBAAO,MAAMF,QAAQmB,aAAaD,IAAAA;QACpC,WAAWN,YAAY;AACrB,gBAAMM,OAAO,GAAGhB,SAASY,sBAAsB,CAAA;AAC/C,iBAAO,MAAMF,YAAYO,aAAaD,IAAAA;QACxC;MACF;IACF,SAASE,IAAI;AACX,YAAMV,SAAQU;AACdC,cAAQX,MAAMA,OAAMY,OAAO;AAC3BX,eAASD,MAAAA;IACX;EACF,GAAG;IAACR;IAAOF;IAAQY;IAAYE;IAAoBR;GAAgB;AACnE,MAAIA,mBAAmB,CAACI,OAAO;AAC7BW,YAAQX,MAAMJ,gBAAgBgB,OAAO;AACrCX,aAASL,eAAAA;EACX;AAEA,SAAO;IACLI,QACIa,SACCtB,WAAWe,iBAAiBZ,wBACzB,OACAmB;IACRb;;AAEJ,GAjD0B;;;AChB1B,SAASc,cAAAA,mBAAkB;AAC3B,SAASC,gBAAgB;AAEzB,SAASC,YAAAA,iBAAgB;AAYlB,IAAMC,YAAY,wBAAC,EACxBC,UAAUC,QAAQC,MAAMC,WAAW,OAAOC,KAAI,IAC1B,CAAC,MAAC;AAItB,QAAMC,wBAAwBC,iBAAiB,KAAA;AAC/C,QAAM,CAACC,OAAOC,QAAAA,IAAYC,UAAAA;AAC1B,QAAM,CAACC,cAAAA,IAAkBC,yBAAyB,CAACV,UAAUE,QAAAA;AAC7D,QAAM,CAACS,aAAAA,IAAiBC,YAAW,YAAA;AACjC,QAAI;AACF,YAAMC,aAAa,OAAO,MAAA;AACxB,YAAIb,QAAQ;AACV,iBAAOA;QACT,WAAWD,UAAU;AACnB,iBAAOe,SAASC,WAAWhB,QAAAA;QAC7B,WAAWI,MAAM;AACf,iBAAOW,SAASE,SAASb,IAAAA;QAC3B;AACA,eAAOM;MACT,GAAA;AAEA,aAAOR,OAAOY,YAAYI,aAAahB,IAAAA,IAASY,cAAcb;IAChE,SAASkB,IAAI;AACXX,eAASW,EAAAA;IACX;EACF,GAAG;IAACnB;IAAUU;IAAgBN;IAAMF;IAAMD;GAAO;AACjD,SAAO;IAACW,kBAAkBP,wBAAwB,OAAOO;IAAgBL;;AAC3E,GA5ByB;;;ACfzB,SAASa,cAAAA,mBAAkB;AAWpB,IAAMC,aAAa,wBAAC,EAAEC,QAAQC,MAAK,MAAqB;AAC7D,QAAMC,wBAAwBC,iBAAiB,KAAA;AAC/C,QAAM,CAACC,WAAAA,IAAeC,UAAU;IAAEL;EAAO,CAAA;AACzC,QAAM,CAACM,SAASC,KAAAA,IAASC,YACvB,YAAaJ,cAAc,MAAMK,QAAQC,IAAIT,MAAMU,IAAIC,CAAAA,SAAQR,YAAYS,WAAWD,IAAAA,CAAAA,CAAAA,IAAUE,QAChG;IAACV;IAAaH;GAAM;AAEtB,SAAO;IAACK,YAAYJ,wBAAwB,OAAOI;IAAUC;;AAC/D,GAR0B;;;ACV1B,SAASQ,cAAAA,mBAAkB;AAE3B,SAASC,YAAAA,iBAAgB;AAEzB,SAASC,aAAa;AAEtB,IAAIC;AACJ,IAAMC,2BAA2B,IAAIC,MAAAA;AAE9B,IAAMC,oBAAoB,wBAC/BC,YAAAA;AAEA,SAAOC,YAAW,YAAA;AAChB,WAAO,MAAMJ,yBAAyBK,aAAa,YAAA;AAEjD,UAAIF,YAAYG,QAAW;AACzB,eAAOH;MACT;AAEA,UAAIJ,qBAAqB;AACvB,eAAOA;MACT;AAEA,UAAI;AACFA,8BAAsB,MAAMQ,UAASC,OAAM;AAC3CC,gBAAQC,IAAI,2CAA2CX,oBAAoBY,OAAO,EAAE;MACtF,SAASC,IAAI;AACX,cAAMC,QAAQD;AACdH,gBAAQI,MAAM,0CAA0CA,MAAMC,OAAO,EAAE;MACzE;AACA,aAAOf;IACT,CAAA;EACF,GAAG;IAACI;GAAQ;AACd,GAxBiC;;;AJM1B,IAAMY,uBAA4D,wBAAC,EACxEC,aAAa,+BAA+BC,SAAS,GAAGC,MAAAA,MACzD;AACC,QAAM,CAACC,YAAAA,IAAgBC,WAAW;IAAEH;EAAQ,CAAA;AAC5C,QAAM,EAAEI,QAAO,IAAKC,WAAAA;AACpB,QAAMC,oBAAoB,GAAGP,UAAAA,mBAA6BG,cAAcK,OAAAA,YAAmBH,SAASI,QAAQ,MAAA;AAE5G,SACE,gBAAAC,QAAA,cAACC,SAAYT,OACX,gBAAAQ,QAAA,cAACE,kBAAAA;IAAiBJ,SAASK,WAAWC,WAAWX,cAAcK,OAAAA;MAC/D,gBAAAE,QAAA,cAACK,UAAAA;IAAQC,KAAK;KACZ,gBAAAN,QAAA,cAACO,cAAAA;IAAaC,SAAAA;IAAQC,OAAM;IAASC,OAAO;IAAGC,IAAI,GAAGd,iBAAAA;IAAuDe,QAAO;MACpH,gBAAAZ,QAAA,cAACO,cAAAA;IAAaC,SAAAA;IAAQC,OAAM;IAAOC,OAAO;IAAGC,IAAI,GAAGd,iBAAAA;IAAqDe,QAAO;MAChH,gBAAAZ,QAAA,cAACO,cAAAA;IAAaC,SAAAA;IAAQC,OAAM;IAAaC,OAAO;IAAGC,IAAI,GAAGd,iBAAAA;IAA2De,QAAO;MAC5H,gBAAAZ,QAAA,cAACO,cAAAA;IAAaC,SAAAA;IAAQC,OAAM;IAAUC,OAAO;IAAGC,IAAI,GAAGd,iBAAAA;IAAwDe,QAAO;;AAI9H,GAlByE;;;AKfzE,SAASC,kBAAkBC,YAAAA,iBAAgB;AAC3C,SAASC,gBAAgB;AAEzB,SAASC,uBAAAA,4BAA2B;AACpC,OAAOC,aAAW;;;ACLlB,SAASC,gBAAoC;AAC7C,SAASC,2BAA2B;AAEpC,OAAOC,aAAW;AAcX,IAAMC,0BAAkE,wBAAC,EAC9EC,sBACAC,YACAC,cACAC,UACAC,UACAC,OACAC,aAAY,MACb;AACC,QAAM,CAACC,eAAAA,IAAmBC,UAAU;IAAEC,MAAMT,sBAAsBU,SAAAA;IAAYC,QAAQV;EAAW,CAAA;AACjG,QAAMW,aAAaL,kBAAkBL,eAAeK,gBAAgBM,OAAO,IAAIC;AAC/E,QAAMC,WAAW,CAAC,CAACR,mBAAmBA,gBAAgBM,YAAYX,gBAAgB,CAAC;AACnF,SACE,gBAAAc,QAAA,cAACC,UAAAA;IACCC,OAAOlB;IACPmB,IAAI;MACFC,WAAW;MAAGC,eAAe;MAAGC,YAAY;IAC9C;KAEA,gBAAAN,QAAA,cAACO,qBAAAA;IACCC,kBAAkB;IAClBC,UAAU;IACVZ,SAASN,iBAAiBM;IAC1BV;IACAC;IACAC;IACAqB,MAAMd;IACNG;IACAT;;AAIR,GAhC+E;;;ADG/E,IAAMqB,aAAa,wBAACC,QAAgBC,QAAQ,MAAC;AAC3C,SAAO;OAAIC,MAAMC,KAAK;MAAEH;IAAO,CAAA,EAAGI,KAAI;IAAIC,IAAIC,CAAAA,MAAKA,IAAIL,KAAAA;AACzD,GAFmB;AAIZ,IAAMM,sBAA0D,wBAAC,EACtEC,cACAC,UACAC,WAAW,IACXC,OACAC,cAAc,GACdC,eAAe,OACfC,MACAC,UAAU,YACV,GAAGC,MAAAA,MACJ;AACC,QAAM,EACJC,oBAAoBC,uBAAuBC,WAAU,IACnDC,iBAAAA;AACJ,QAAMC,WAAW,CAACF,cAAcF,uBAAuBK;AAEvD,SACE,gBAAAC,QAAA,cAAAA,QAAA,UAAA,MACGJ,aAEK,gBAAAI,QAAA,cAACC,UAAAA;IACCC,QAAO;IACPJ;IACAK,aAAa,wBAACC,yBAAAA;AACZ,aACE,gBAAAJ,QAAA,cAACK,yBAAAA;QACCpB;QACAC;QACAC;QACAC;QACAQ;QACAQ;QACAd;;IAGN,GAZa;IAabgB,OAAOZ,uBAAuBK,SAAY,KAAKL;IAC/Ca,UAAUC,wBAAAA,UAASb,wBAAwBc,OAAOC,SAAS,GAAGF,MAAMG,OAAOL,KAAK,EAAE,CAAA,GAAxEE;IACVjB;IACAC;IACC,GAAGC;KAEHG,cAAcpB,WAAWa,WAAAA,EAAaP,IAAI,CAAC8B,UAAAA;AAC1C,UAAM,CAACC,OAAAA,IAAWC,UAAU;MAAEC,MAAMH,MAAMI,SAAQ;MAAIC,QAAQrB;IAAW,CAAA;AACzE,UAAMsB,aAAaL,UAAU5B,eAAe4B,QAAQM,OAAO,IAAIpB;AAC/D,UAAMqB,WAAW,CAAC,CAACP,WAAWA,QAAQM,YAAYlC,gBAAgB,CAAC;AACnE,WACE,gBAAAe,QAAA,cAACqB,WAAAA;MACCC,KAAKT,SAASM;MACdb,OAAOM;MACPW,IAAI;QACFC,WAAW;QAAGC,eAAe;QAAGC,YAAY;MAC9C;OAEA,gBAAA1B,QAAA,cAAC2B,sBAAAA;MACCC,kBAAkB;MAClBC,UAAU;MACVV,SAASN,SAASM;MAClBC;MACAlC;MACAC;MACAC;MACA0C,MAAMZ;MACN5B;;EAIR,CAAA,CAAA,IAGJ,gBAAAU,QAAA,cAAC+B,kBAAAA;IAAiBxC,MAAM;;AAGlC,GAzEuE;;;AEvBvE,SAASyC,WAAAA,gBAAe;AACxB,OAAOC,aAAW;AAcX,IAAMC,yBAAgE,wBAAC,EAC5EC,cACAC,UACAC,UACAC,OACAC,cAAc,GACdC,eAAe,OACfC,OAAO,SACP,GAAGC,MAAAA,MACJ;AACC,SACE,gBAAAC,QAAA,cAACC,UAAAA;IAAQC,YAAW;IAAW,GAAGH;KAChC,gBAAAC,QAAA,cAACG,qBAAAA;IACCX;IACAY,WAAAA;IACAP;IACAH;IACAD;IACAE;IACAC;IACAE,MAAMA,QAAQ;IACdO,SAAQ;;AAIhB,GAzB6E;","names":["ButtonGroup","TableCell","TableRow","Typography","ButtonEx","React","useState","Alert","AlertTitle","Snackbar","React","OutOfBoundsSnackBar","activeAccountIndex","desiredMaximumAccounts","setShowSnackBar","showSnackBar","Snackbar","anchorOrigin","horizontal","vertical","autoHideDuration","onClose","open","Alert","severity","AlertTitle","undefined","MaxAccountsTableRow","activeAccountIndex","changeMaxAccounts","maxAccounts","desiredMaximumAccounts","setDesiredMaximumAccounts","useState","showSnackBar","setShowSnackBar","handleChangeMaxAccounts","change","undefined","validMaximumAccounts","maxAccountsWithinRange","console","error","Error","React","TableRow","TableCell","align","Typography","variant","ButtonGroup","ButtonEx","onClick","size","OutOfBoundsSnackBar","HelpOutline","HelpOutlineIcon","Button","Dialog","DialogActions","DialogContent","DialogTitle","IconButton","Link","List","ListItem","Typography","React","useState","SeedPhraseIconButton","props","open","setOpen","useState","onClose","React","IconButton","onClick","HelpOutlineIcon","fontSize","Dialog","DialogTitle","DialogContent","Typography","Link","target","href","List","ListItem","DialogActions","Button","variant","Alert","AlertTitle","Snackbar","generateMnemonic","wordlist","React","useMemo","useState","DefaultSeedPhrase","changeSeedPhrase","children","hideDefaultSeedPhraseMessage","seedPhrase","showSnackBar","setShowSnackBar","useState","useMemo","mnemonic","generateMnemonic","wordlist","React","Snackbar","open","autoHideDuration","onClose","anchorOrigin","horizontal","vertical","Alert","severity","AlertTitle","Button","DialogActions","React","createContextEx","SeedPhraseContext","generateMnemonic","validateMnemonic","wordlist","useResetState","React","useCallback","useEffect","useMemo","useState","validate","passedPhrase","validateMnemonic","wordlist","SeedPhraseProvider","children","defaultPhrase","handleChangeSeedPhrase","saveCallback","seedPhrase","open","phrase","setPhrase","useResetState","overwriteWarning","setOverwriteWarning","useState","useEffect","handleGenerate","useCallback","mnemonic","generateMnemonic","handleCancelOverwrite","handleClear","handleSave","validSeedPhrase","useMemo","validPhrase","value","provided","React","SeedPhraseContext","useContextEx","useSeedPhrase","useContextEx","SeedPhraseContext","createContextEx","WalletContext","useResetState","usePromise","React","useMemo","WalletProvider","children","defaultActiveAccountIndex","rootWallet","props","activeAccountIndex","setActiveAccountIndex","useResetState","activeAccount","usePromise","derivePath","toString","value","useMemo","provided","React","WalletContext","usePromise","useContextEx","useProvided","useWalletContext","required","useContextEx","WalletContext","useWalletProvided","useProvided","useRootWallet","rootWallet","undefined","useIndexedWalletFromContext","index","wallet","usePromise","derivePath","toString","useSelectedWalletAccount","activeAccountIndex","account","DialogActionButtons","onClose","props","handleSave","setPhrase","useSeedPhrase","wrappedOnClose","e","React","DialogActions","Button","variant","onClick","type","FormControl","TextField","React","colorParser","conditional","Link","Typography","React","InvalidPhraseTypography","props","React","Typography","variant","color","Link","target","href","CheckCircleOutline","CheckCircleOutlineIcon","HighlightOff","HighlightOffIcon","FlexRow","React","useMemo","PhraseHeaderBox","children","conditional","props","state","useMemo","Icon","React","CheckCircleOutlineIcon","fontSize","color","HighlightOffIcon","FlexRow","justifyContent","columnGap","NewPhraseTextField","children","disableColor","props","phrase","setPhrase","validPhrase","useSeedPhrase","React","FormControl","fullWidth","size","sx","display","flexDirection","rowGap","TextField","focused","color","undefined","colorParser","error","helperText","InvalidPhraseTypography","maxRows","Number","POSITIVE_INFINITY","multiline","onChange","e","target","value","Button","DialogActions","React","PhraseDialogActions","handleClear","handleGenerate","overwriteWarning","useSeedPhrase","React","DialogActions","sx","justifyContent","Button","disabled","variant","onClick","ContentCopy","Chip","FormControl","FormLabel","IconButton","TextField","Tooltip","useTheme","FlexRow","React","useMemo","useState","SavedPhraseTextField","fullWidth","showCopyButton","showPhraseHeader","visible","visibleProp","props","validSeedPhrase","seedPhrase","useSeedPhrase","theme","useTheme","setVisible","useState","useMemo","copied","setCopied","onCopyPhrase","navigator","clipboard","writeText","setTimeout","e","console","error","React","FormControl","size","sx","display","flexDirection","rowGap","FlexRow","gap","Chip","label","onClick","alignSelf","my","Tooltip","title","IconButton","height","opacity","overflow","padding","spacing","transition","width","ContentCopy","fontSize","FormLabel","PhraseHeaderBox","conditional","TextField","defaultValue","disabled","helperText","InvalidPhraseTypography","maxRows","Number","POSITIVE_INFINITY","multiline","slotProps","input","style","Alert","Button","FlexRow","React","OverwriteWarning","handleCancelOverwrite","handleSave","useSeedPhrase","React","Alert","variant","severity","action","FlexRow","sx","columnGap","Button","color","size","onClick","Dialog","DialogContent","DialogTitle","FormLabel","React","SeedPhraseDialog","changeSeedPhrase","dialogTitle","seedPhrase","seedPhraseTextFieldTitle","props","React","SeedPhraseProvider","handleChangeSeedPhrase","open","saveCallback","onClose","SeedPhraseDialogInner","showCopyButton","overwriteWarning","validPhrase","useSeedPhrase","Dialog","aria-labelledby","aria-describedby","fullWidth","maxWidth","DialogTitle","id","sx","alignItems","display","flexDirection","SeedPhraseIconButton","DialogContent","rowGap","NewPhraseTextField","FormLabel","PhraseHeaderBox","conditional","PhraseDialogActions","SavedPhraseTextField","OverwriteWarning","DialogActionButtons","Cancel","CancelIcon","RadioButtonChecked","RadioButtonCheckedIcon","Button","ButtonGroup","TableCell","TableRow","React","useState","SeedPhraseTableRow","changeSeedPhrase","seedPhrase","props","open","setOpen","useState","handleOpen","React","TableRow","TableCell","SeedPhraseIconButton","align","RadioButtonCheckedIcon","color","CancelIcon","SeedPhraseDialog","onClose","ButtonGroup","fullWidth","Button","variant","size","onClick","EthAddress","EthAccountButton","FlexCol","FlexRow","NumberStatus","useNetwork","React","usePromise","useState","useAccount","wallet","account","index","required","walletContextProvided","useWalletProvided","validationError","setValidationError","useState","Error","error","setError","rootWallet","useRootWallet","activeAccountIndex","useWalletContext","activeAccount","usePromise","path","derivePath","ex","console","message","undefined","usePromise","HDWallet","useState","useWallet","mnemonic","wallet","path","required","seed","walletContextProvided","useWalletContext","error","setError","useState","contextAccount","useSelectedWalletAccount","activeAccount","usePromise","newAccount","HDWallet","fromPhrase","fromSeed","derivePath","ex","usePromise","useWallets","wallet","paths","walletContextProvided","useWalletContext","foundWallet","useWallet","wallets","error","usePromise","Promise","all","map","path","derivePath","undefined","usePromise","HDWallet","Mutex","globalWrapperWallet","globalWrapperWalletMutex","Mutex","useWrapperAccount","account","usePromise","runExclusive","undefined","HDWallet","random","console","log","address","ex","error","message","WalletAccountDetails","exploreUrl","account","props","accountToUse","useAccount","network","useNetwork","exploreAddressUrl","address","name","React","FlexCol","EthAccountButton","EthAddress","fromString","FlexRow","gap","NumberStatus","rounded","title","value","to","target","CircularProgress","MenuItem","SelectEx","AddressRenderRowBox","React","MenuItem","AddressRenderRowBox","React","RenderedAccountMenuItem","selectedAccountIndex","rootWallet","addressNames","iconOnly","iconSize","icons","showFavorite","selectedAccount","useWallet","path","toString","wallet","customName","address","undefined","favorite","React","MenuItem","value","sx","minHeight","paddingBottom","paddingTop","AddressRenderRowBox","disableSharedRef","flexGrow","name","arrayRange","length","start","Array","from","keys","map","x","WalletAccountSelect","addressNames","iconOnly","iconSize","icons","maxAccounts","showFavorite","size","variant","props","activeAccountIndex","setActiveAccountIndex","rootWallet","useWalletContext","disabled","undefined","React","SelectEx","margin","renderValue","selectedAccountIndex","RenderedAccountMenuItem","value","onChange","event","Number","parseInt","target","index","account","useWallet","path","toString","wallet","customName","address","favorite","MenuItem","key","sx","minHeight","paddingBottom","paddingTop","AddressRenderRowBox","disableSharedRef","flexGrow","name","CircularProgress","FlexCol","React","WalletAccountSelectBar","addressNames","iconOnly","iconSize","icons","maxAccounts","showFavorite","size","props","React","FlexCol","alignItems","WalletAccountSelect","fullWidth","variant"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/MaxAccounts/MaxAccountsTableRow.tsx","../../src/components/MaxAccounts/OutOfBoundsSnackBar.tsx","../../src/components/SeedPhrase/_shared/SeedPhraseIconButton.tsx","../../src/components/SeedPhrase/DefaultSeedPhrase.tsx","../../src/components/SeedPhrase/dialog/components/DialogActionButtons.tsx","../../src/contexts/SeedPhrase/Context.ts","../../src/contexts/SeedPhrase/Provider.tsx","../../src/contexts/SeedPhrase/use.ts","../../src/contexts/Wallet/Context.ts","../../src/contexts/Wallet/Provider.tsx","../../src/contexts/Wallet/use.ts","../../src/components/SeedPhrase/dialog/components/fields/NewPhraseTextField.tsx","../../src/components/SeedPhrase/dialog/components/fields/validation-messages/colorParser.ts","../../src/components/SeedPhrase/dialog/components/fields/validation-messages/InvalidPhrase.tsx","../../src/components/SeedPhrase/dialog/components/fields/validation-messages/PhraseHeaderBox.tsx","../../src/components/SeedPhrase/dialog/components/fields/PhraseDialogActions.tsx","../../src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx","../../src/components/SeedPhrase/dialog/components/OverwriteWarning.tsx","../../src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx","../../src/components/SeedPhrase/settings/SeedPhraseTableRow.tsx","../../src/components/WalletAccountDetails/WalletAccountDetails.tsx","../../src/hooks/useAccount.ts","../../src/hooks/useWallet.ts","../../src/hooks/useWallets.ts","../../src/hooks/useWrapperAccount.ts","../../src/components/WalletAccountSelect/Select.tsx","../../src/components/WalletAccountSelect/RenderedMenuItem.tsx","../../src/components/WalletAccountSelect/SelectBar.tsx"],"sourcesContent":["import type { TableRowProps } from '@mui/material'\nimport {\n ButtonGroup, TableCell, TableRow, Typography,\n} from '@mui/material'\nimport { ButtonEx } from '@xylabs/react-button'\nimport React, { useState } from 'react'\n\nimport { OutOfBoundsSnackBar } from './OutOfBoundsSnackBar.tsx'\n\n/** @public */\nexport interface MaxAccountsTableRow extends TableRowProps {\n activeAccountIndex?: number\n changeMaxAccounts?: (maxAccounts: number) => void\n maxAccounts?: number\n}\n\n/** @public */\nexport const MaxAccountsTableRow: React.FC<MaxAccountsTableRow> = ({\n activeAccountIndex, changeMaxAccounts, maxAccounts,\n}) => {\n const [desiredMaximumAccounts, setDesiredMaximumAccounts] = useState<number | undefined>()\n const [showSnackBar, setShowSnackBar] = useState(false)\n\n const handleChangeMaxAccounts = (change: 'increase' | 'decrease') => {\n if (maxAccounts !== undefined && activeAccountIndex !== undefined) {\n switch (change) {\n case 'decrease': {\n const desiredMaximumAccounts = maxAccounts - 1\n const validMaximumAccounts = desiredMaximumAccounts > 0\n const maxAccountsWithinRange = activeAccountIndex + 1 <= desiredMaximumAccounts\n if (validMaximumAccounts && maxAccountsWithinRange) {\n changeMaxAccounts?.(desiredMaximumAccounts)\n }\n if (!maxAccountsWithinRange) setShowSnackBar(true)\n setDesiredMaximumAccounts(desiredMaximumAccounts)\n return\n }\n case 'increase': {\n changeMaxAccounts?.(maxAccounts + 1)\n return\n }\n default: {\n console.error(change, 'is not a recognized value')\n }\n }\n } else {\n throw new Error('Max Accounts is unset and needs a default')\n }\n }\n\n return (\n <TableRow>\n <TableCell>Maximum Accounts</TableCell>\n <TableCell align=\"center\">\n <Typography variant=\"caption\">{maxAccounts}</Typography>\n </TableCell>\n <TableCell align=\"center\">\n <ButtonGroup>\n <ButtonEx onClick={() => handleChangeMaxAccounts('decrease')} variant=\"contained\" size=\"small\">\n -\n </ButtonEx>\n <ButtonEx onClick={() => handleChangeMaxAccounts('increase')} variant=\"contained\" size=\"small\">\n +\n </ButtonEx>\n </ButtonGroup>\n <OutOfBoundsSnackBar\n desiredMaximumAccounts={desiredMaximumAccounts}\n activeAccountIndex={activeAccountIndex}\n setShowSnackBar={setShowSnackBar}\n showSnackBar={showSnackBar}\n />\n </TableCell>\n </TableRow>\n )\n}\n","import type { SnackbarProps } from '@mui/material'\nimport {\n Alert, AlertTitle, Snackbar,\n} from '@mui/material'\nimport type { Dispatch, SetStateAction } from 'react'\nimport React from 'react'\n\n/** @public */\nexport interface OutOfBoundsSnackBarProps extends SnackbarProps {\n activeAccountIndex?: number\n desiredMaximumAccounts?: number\n setShowSnackBar?: Dispatch<SetStateAction<boolean>>\n showSnackBar?: boolean\n}\n\n/** @public */\nexport const OutOfBoundsSnackBar: React.FC<OutOfBoundsSnackBarProps> = ({\n activeAccountIndex,\n desiredMaximumAccounts,\n setShowSnackBar,\n showSnackBar,\n}) => {\n return (\n <Snackbar\n anchorOrigin={{ horizontal: 'center', vertical: 'top' }}\n autoHideDuration={5000}\n onClose={() => setShowSnackBar?.(false)}\n open={showSnackBar}\n >\n <Alert severity=\"error\" onClose={() => setShowSnackBar?.(false)}>\n <AlertTitle>Maximum Accounts Error</AlertTitle>\n Your currently selected account number (\n {activeAccountIndex === undefined ? '' : activeAccountIndex + 1}\n ) cannot be greater than the desired\n Maximum Accounts (\n {desiredMaximumAccounts}\n ).\n </Alert>\n </Snackbar>\n )\n}\n","import { HelpOutline as HelpOutlineIcon } from '@mui/icons-material'\nimport type { IconButtonProps } from '@mui/material'\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Link,\n List,\n ListItem,\n Typography,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\n/** @internal */\nexport const SeedPhraseIconButton: React.FC<IconButtonProps> = (props) => {\n const [open, setOpen] = useState(false)\n const onClose = () => setOpen(false)\n return (\n <>\n <IconButton onClick={() => setOpen(true)} {...props}>\n <HelpOutlineIcon fontSize=\"small\" />\n </IconButton>\n <Dialog open={open}>\n <DialogTitle>Understanding your Seed Phrase</DialogTitle>\n <DialogContent>\n <Typography>\n Your Seed Phrase should adhere to the\n {' '}\n <Link target=\"_blank\" href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">\n bip39 specification\n </Link>\n {' '}\n and is used to generate accounts which identify your data on the XYO Network.\n </Typography>\n <List>\n <ListItem>Do not share this phrase with anyone.</ListItem>\n <ListItem>Do not save it to a public computer.</ListItem>\n <ListItem>Do not use a existing phrase from another wallet (i.e. Metamask).</ListItem>\n <ListItem>Do not use before copying it down somewhere safe.</ListItem>\n </List>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} variant=\"outlined\">\n OK\n </Button>\n </DialogActions>\n </Dialog>\n </>\n )\n}\n","import {\n Alert, AlertTitle, Snackbar,\n} from '@mui/material'\nimport { generateMnemonic } from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo, useState } from 'react'\n\n/** @public */\nexport interface DefaultSeedPhraseProps extends PropsWithChildren {\n changeSeedPhrase?: (seedPhrase: string) => void\n hideDefaultSeedPhraseMessage?: boolean\n seedPhrase?: string\n}\n\n/** @public */\nexport const DefaultSeedPhrase: React.FC<DefaultSeedPhraseProps> = ({\n changeSeedPhrase, children, hideDefaultSeedPhraseMessage, seedPhrase,\n}) => {\n const [showSnackBar, setShowSnackBar] = useState(false)\n\n useMemo(() => {\n if (!seedPhrase) {\n const mnemonic = generateMnemonic(wordlist, 256)\n changeSeedPhrase?.(mnemonic)\n setShowSnackBar(true)\n }\n }, [changeSeedPhrase, seedPhrase])\n\n return (\n <>\n {hideDefaultSeedPhraseMessage\n ? null\n : (\n <Snackbar\n open={showSnackBar}\n autoHideDuration={5000}\n onClose={() => setShowSnackBar(false)}\n anchorOrigin={{ horizontal: 'center', vertical: 'top' }}\n >\n <Alert severity=\"success\">\n <AlertTitle>Default Seed Phrase Generated</AlertTitle>\n Go to application settings to save it.\n </Alert>\n </Snackbar>\n )}\n {children}\n </>\n )\n}\n","import type { DialogActionsProps, DialogProps } from '@mui/material'\nimport { Button, DialogActions } from '@mui/material'\nimport type { MouseEvent } from 'react'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../contexts/index.ts'\n\n/** @public */\nexport interface DialogActionButtonsProps extends DialogActionsProps {\n onClose?: DialogProps['onClose']\n}\n\n/** @public */\nexport const DialogActionButtons: React.FC<DialogActionButtonsProps> = ({ onClose, ...props }) => {\n const { handleSave, setPhrase } = useSeedPhrase()\n\n const wrappedOnClose = (e: MouseEvent<HTMLElement>) => {\n // clear local copy of phrase when modal closes\n setPhrase?.('')\n onClose?.(e, 'escapeKeyDown')\n }\n\n return (\n <DialogActions {...props}>\n <Button variant=\"outlined\" onClick={wrappedOnClose}>\n Cancel\n </Button>\n <Button type=\"submit\" variant=\"contained\" onClick={handleSave}>\n Save\n </Button>\n </DialogActions>\n )\n}\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { SeedPhraseContextState } from './State.ts'\n\n/** @public */\nexport const SeedPhraseContext = createContextEx<SeedPhraseContextState>()\n","import { generateMnemonic, validateMnemonic } from '@scure/bip39'\nimport { wordlist } from '@scure/bip39/wordlists/english'\nimport { useResetState } from '@xylabs/react-hooks'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useEffect, useMemo, useState,\n} from 'react'\n\nimport { SeedPhraseContext } from './Context.ts'\nimport type { SeedPhraseContextState } from './State.ts'\n\n/** @public */\nexport interface SeedPhraseProviderProps extends PropsWithChildren {\n defaultPhrase?: string\n handleChangeSeedPhrase?: (phrase: string) => void\n open?: boolean\n saveCallback?: () => void\n seedPhrase?: string\n}\n\nconst validate = (passedPhrase?: string) => {\n if (!passedPhrase) {\n return null\n }\n return validateMnemonic(passedPhrase, wordlist)\n}\n\n/** @public */\nexport const SeedPhraseProvider: React.FC<SeedPhraseProviderProps> = ({\n children,\n defaultPhrase,\n handleChangeSeedPhrase,\n saveCallback,\n seedPhrase,\n open,\n}) => {\n const [phrase, setPhrase] = useResetState<string | undefined>(defaultPhrase)\n const [overwriteWarning, setOverwriteWarning] = useState(false)\n\n useEffect(() => {\n if (seedPhrase || open) {\n setPhrase?.(seedPhrase ?? '')\n }\n }, [seedPhrase, open, setPhrase])\n\n const handleGenerate = useCallback(() => {\n const mnemonic = generateMnemonic(wordlist, 256)\n setPhrase?.(mnemonic)\n setOverwriteWarning?.(false)\n }, [])\n\n const handleCancelOverwrite = useCallback(() => {\n // eslint-disable-next-line @eslint-react/hooks-extra/no-direct-set-state-in-use-effect\n setOverwriteWarning(false)\n }, [setOverwriteWarning])\n\n const handleClear = useCallback(() => {\n setPhrase('')\n setOverwriteWarning(false)\n }, [setPhrase, setOverwriteWarning])\n\n const handleSave = useCallback(() => {\n if (!overwriteWarning && seedPhrase && seedPhrase !== phrase) {\n setOverwriteWarning?.(true)\n } else {\n handleChangeSeedPhrase?.(phrase ?? '')\n saveCallback?.()\n }\n }, [handleChangeSeedPhrase, overwriteWarning, phrase, saveCallback, seedPhrase])\n\n useEffect(() => {\n if (!open) {\n handleCancelOverwrite()\n }\n }, [handleCancelOverwrite, open])\n\n const validSeedPhrase = useMemo(() => validate?.(seedPhrase), [seedPhrase])\n const validPhrase = useMemo(() => validate?.(phrase), [phrase])\n\n const value: SeedPhraseContextState = useMemo(() => ({\n handleCancelOverwrite,\n handleChangeSeedPhrase,\n handleClear,\n handleGenerate,\n handleSave,\n overwriteWarning,\n phrase,\n provided: true,\n seedPhrase,\n setOverwriteWarning,\n setPhrase,\n validPhrase,\n validSeedPhrase,\n validate,\n }), [handleCancelOverwrite,\n handleChangeSeedPhrase,\n handleClear,\n handleGenerate,\n handleSave,\n overwriteWarning,\n phrase,\n seedPhrase,\n setOverwriteWarning,\n setPhrase,\n validPhrase,\n validSeedPhrase,\n validate])\n\n return (\n <SeedPhraseContext\n value={value}\n >\n {children}\n </SeedPhraseContext>\n )\n}\n","import { useContextEx } from '@xylabs/react-shared'\n\nimport { SeedPhraseContext } from './Context.ts'\n\n/** @public */\nexport const useSeedPhrase = () => useContextEx(SeedPhraseContext, 'SeedPhrase', true)\n","import { createContextEx } from '@xylabs/react-shared'\n\nimport type { WalletContextState } from './State.ts'\n\n/** @public */\nexport const WalletContext = createContextEx<WalletContextState>()\n","import { useResetState } from '@xylabs/react-hooks'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\nimport { WalletContext } from './Context.ts'\nimport type { WalletContextState } from './State.ts'\n\n/** @public */\nexport interface WalletProviderProps {\n defaultActiveAccountIndex?: number\n rootWallet?: WalletInstance | null\n}\n\n/** @public */\nexport const WalletProvider: React.FC<PropsWithChildren<WalletProviderProps>> = ({\n children,\n defaultActiveAccountIndex = 0,\n rootWallet = null,\n ...props\n}) => {\n const [activeAccountIndex, setActiveAccountIndex] = useResetState(defaultActiveAccountIndex)\n\n const [activeAccount = null] = usePromise(async () => await rootWallet?.derivePath(activeAccountIndex.toString()), [activeAccountIndex, rootWallet])\n\n const value: WalletContextState = useMemo(() => ({\n activeAccount,\n activeAccountIndex,\n provided: true,\n rootWallet,\n setActiveAccountIndex,\n }), [activeAccount,\n activeAccountIndex,\n rootWallet,\n setActiveAccountIndex])\n\n return (\n <WalletContext\n value={value}\n {...props}\n >\n {children}\n </WalletContext>\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xylabs/react-shared'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { WalletContext } from './Context.ts'\n\n/** @public */\nexport const useWalletContext = (required = true) => {\n return useContextEx(WalletContext, 'Wallet', required)\n}\n\n/** @public */\nexport const useWalletProvided = () => {\n return useProvided(WalletContext)\n}\n\n/** @public */\nexport const useRootWallet = (required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n return [rootWallet, undefined]\n}\n\n/** @public */\nexport const useIndexedWalletFromContext = (index: number, required = true): [WalletInstance | null | undefined, Error | undefined] => {\n const { rootWallet } = useWalletContext(required)\n const [wallet] = usePromise(async () => (await rootWallet?.derivePath(index.toString())) ?? rootWallet, [rootWallet, index])\n return [wallet, undefined]\n}\n\n/** @public */\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 return activeAccountIndex === undefined && account === null ? [null, undefined] : [account, undefined]\n}\n","import type { StandardTextFieldProps } from '@mui/material'\nimport { FormControl, TextField } from '@mui/material'\nimport type { ReactNode } from 'react'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../../contexts/index.ts'\nimport { colorParser, InvalidPhraseTypography } from './validation-messages/index.ts'\n\n/** @public */\nexport interface NewPhraseTextFieldProps extends StandardTextFieldProps {\n children?: ReactNode\n disableColor?: boolean\n}\n\n/** @public */\nexport const NewPhraseTextField: React.FC<NewPhraseTextFieldProps> = ({\n children, disableColor, ...props\n}) => {\n const {\n phrase, setPhrase, validPhrase,\n } = useSeedPhrase()\n return (\n <>\n <FormControl\n fullWidth\n size=\"small\"\n sx={{\n display: 'flex', flexDirection: 'column', rowGap: 1,\n }}\n >\n {children}\n <TextField\n focused\n color={disableColor ? undefined : colorParser(validPhrase)}\n error={validPhrase === false}\n helperText={validPhrase === false ? <InvalidPhraseTypography /> : null}\n fullWidth\n maxRows={Number.POSITIVE_INFINITY}\n multiline\n onChange={e => setPhrase?.(e.target.value)}\n value={phrase}\n {...props}\n />\n </FormControl>\n </>\n )\n}\n","/** @public */\nexport const colorParser = (conditional?: boolean | null) => {\n switch (conditional) {\n case true: {\n return 'success'\n }\n case false: {\n return 'error'\n }\n default: {\n return\n }\n }\n}\n","import type { TypographyProps } from '@mui/material'\nimport { Link, Typography } from '@mui/material'\nimport React from 'react'\n\n/** @public */\nexport const InvalidPhraseTypography: React.FC<TypographyProps> = props => (\n <Typography variant=\"caption\" color=\"error\" {...props}>\n Invalid seed phrase. See -\n {' '}\n <Link target=\"_blank\" href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">\n bip39 Proposal\n </Link>\n </Typography>\n)\n","import { CheckCircleOutline as CheckCircleOutlineIcon, HighlightOff as HighlightOffIcon } from '@mui/icons-material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport type { PropsWithChildren } from 'react'\nimport React, { useMemo } from 'react'\n\n/** @public */\nexport interface PhraseHeaderBoxProps extends FlexBoxProps, PropsWithChildren {\n conditional?: boolean | null\n}\n\n/** @public */\nexport const PhraseHeaderBox: React.FC<PhraseHeaderBoxProps> = ({\n children, conditional, ...props\n}) => {\n const state = useMemo(() => {\n switch (conditional) {\n case true: {\n return 'success'\n }\n case false: {\n return 'error'\n }\n default: {\n return null\n }\n }\n }, [conditional])\n\n const Icon = useMemo(() => {\n switch (state) {\n case 'success': {\n return <CheckCircleOutlineIcon fontSize=\"small\" color=\"success\" />\n }\n case 'error': {\n return <HighlightOffIcon fontSize=\"small\" color=\"error\" />\n }\n default: {\n return null\n }\n }\n }, [state])\n\n return (\n <FlexRow justifyContent=\"start\" columnGap={1} {...props}>\n {Icon}\n {children}\n </FlexRow>\n )\n}\n","import { Button, DialogActions } from '@mui/material'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../../contexts/index.ts'\n\n/** @public */\nexport const PhraseDialogActions = () => {\n const {\n handleClear, handleGenerate, overwriteWarning,\n } = useSeedPhrase()\n return (\n <DialogActions sx={{ justifyContent: 'center' }}>\n <Button disabled={overwriteWarning} variant=\"contained\" onClick={handleGenerate}>\n Generate\n </Button>\n <Button variant=\"outlined\" onClick={handleClear}>\n Clear\n </Button>\n </DialogActions>\n )\n}\n","import { ContentCopy } from '@mui/icons-material'\nimport type { StandardTextFieldProps } from '@mui/material'\nimport {\n Chip, FormControl, FormLabel, IconButton, TextField,\n Tooltip,\n useTheme,\n} from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React, { useMemo, useState } from 'react'\n\nimport { useSeedPhrase } from '../../../../../contexts/index.ts'\nimport { InvalidPhraseTypography, PhraseHeaderBox } from './validation-messages/index.ts'\n\n/** @public */\nexport interface SavedPhraseTextFieldProps extends StandardTextFieldProps {\n fullWidth?: boolean\n showCopyButton?: boolean\n showPhraseHeader?: boolean\n visible?: boolean\n}\n\n/** @public */\nexport const SavedPhraseTextField: React.FC<SavedPhraseTextFieldProps> = ({\n\n fullWidth, showCopyButton, showPhraseHeader, visible: visibleProp, ...props\n}) => {\n const { validSeedPhrase, seedPhrase } = useSeedPhrase()\n const theme = useTheme()\n\n const [visible, setVisible] = useState(visibleProp)\n\n useMemo(() => {\n setVisible(visibleProp)\n }, [visibleProp])\n\n const [copied, setCopied] = useState(false)\n const onCopyPhrase = async () => {\n if (seedPhrase) {\n try {\n await navigator.clipboard.writeText(seedPhrase)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch (e) {\n console.error('Error copying resolvedSelectedAddress to clipboard', e)\n }\n }\n }\n\n return (\n <FormControl\n fullWidth={fullWidth}\n size=\"small\"\n sx={{\n display: 'flex', flexDirection: 'column', rowGap: 1,\n }}\n >\n <FlexRow gap={0.5}>\n <Chip\n label=\"Show Seed Phrase\"\n onClick={() => setVisible(!visible)}\n // Margin is set to 2px to match the Copy Button size and remove jumping during animation\n sx={{ alignSelf: 'center', my: '2px' }}\n />\n <Tooltip title={copied ? 'Copied!' : 'Copy'}>\n <IconButton\n onClick={() => void onCopyPhrase()}\n sx={{\n height: visible ? 'auto' : 0,\n opacity: visible ? 1 : 0,\n overflow: 'hidden',\n padding: visible ? theme.spacing(1) : 0,\n transition: 'all .25s ease-in-out',\n width: visible ? 'max-content' : 0,\n }}\n >\n <ContentCopy fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </FlexRow>\n {visible && showPhraseHeader\n ? (\n <FormLabel>\n <PhraseHeaderBox conditional={validSeedPhrase}>Saved Seed Phrase</PhraseHeaderBox>\n </FormLabel>\n )\n : null}\n <TextField\n defaultValue={seedPhrase}\n disabled\n error={validSeedPhrase === false}\n helperText={validSeedPhrase === false ? <InvalidPhraseTypography /> : null}\n fullWidth\n maxRows={Number.POSITIVE_INFINITY}\n multiline\n slotProps={{\n input: {\n style: {\n height: visible ? 'auto' : '0',\n overflow: 'hidden',\n opacity: visible ? 1 : 0,\n padding: visible ? theme.spacing(1) : 0,\n transition: 'all .25s ease-in-out',\n },\n },\n }}\n {...props}\n />\n\n </FormControl>\n )\n}\n","import { Alert, Button } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { useSeedPhrase } from '../../../../contexts/index.ts'\n\n/** @public */\nexport const OverwriteWarning = () => {\n const { handleCancelOverwrite, handleSave } = useSeedPhrase()\n return (\n <Alert\n variant=\"outlined\"\n severity=\"warning\"\n action={(\n <FlexRow sx={{ columnGap: 1 }}>\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={handleSave}>\n Overwrite\n </Button>\n <Button variant=\"outlined\" color=\"inherit\" size=\"small\" onClick={handleCancelOverwrite}>\n Cancel\n </Button>\n </FlexRow>\n )}\n >\n Are you sure you want to overwrite existing seed phrase? This action cannot be undone.\n </Alert>\n )\n}\n","import type { DialogProps } from '@mui/material'\nimport {\n Dialog, DialogContent, DialogTitle, FormLabel,\n} from '@mui/material'\nimport type { ReactNode } from 'react'\nimport React from 'react'\n\nimport { SeedPhraseProvider, useSeedPhrase } from '../../../contexts/index.ts'\nimport { SeedPhraseIconButton } from '../_shared/index.ts'\nimport {\n DialogActionButtons,\n NewPhraseTextField,\n OverwriteWarning,\n PhraseDialogActions,\n PhraseHeaderBox,\n SavedPhraseTextField,\n} from './components/index.ts'\n\n/** @public */\nexport interface SeedPhraseDialogProps extends DialogProps {\n changeSeedPhrase?: (value: string) => void\n dialogTitle?: ReactNode\n seedPhrase?: string\n seedPhraseTextFieldTitle?: ReactNode\n showCopyButton?: boolean\n}\n\n/** @public */\nexport const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({\n changeSeedPhrase, dialogTitle = 'Update Your Seed Phrase', seedPhrase, seedPhraseTextFieldTitle = 'New Seed Phrase', ...props\n}) => {\n return (\n <SeedPhraseProvider\n seedPhrase={seedPhrase}\n handleChangeSeedPhrase={changeSeedPhrase}\n open={props.open}\n saveCallback={() => props.onClose?.({}, 'escapeKeyDown')}\n >\n <SeedPhraseDialogInner dialogTitle={dialogTitle} seedPhraseTextFieldTitle={seedPhraseTextFieldTitle} {...props} />\n </SeedPhraseProvider>\n )\n}\n\n/** @public */\nexport const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = ({\n dialogTitle, seedPhraseTextFieldTitle, showCopyButton, ...props\n}) => {\n const {\n overwriteWarning, seedPhrase, validPhrase,\n } = useSeedPhrase()\n\n return (\n <Dialog aria-labelledby=\"alert-dialog-title\" aria-describedby=\"alert-dialog-description\" fullWidth maxWidth=\"sm\" {...props}>\n <DialogTitle\n id=\"alert-dialog-title\"\n sx={{\n alignItems: 'center', display: 'inline-flex', flexDirection: 'row',\n }}\n >\n {dialogTitle}\n <SeedPhraseIconButton />\n </DialogTitle>\n <DialogContent sx={{\n display: 'flex', flexDirection: 'column', rowGap: 2,\n }}\n >\n\n <NewPhraseTextField>\n <FormLabel>\n <PhraseHeaderBox conditional={validPhrase}>{seedPhraseTextFieldTitle}</PhraseHeaderBox>\n </FormLabel>\n </NewPhraseTextField>\n <PhraseDialogActions />\n {seedPhrase\n ? <SavedPhraseTextField showCopyButton={showCopyButton} />\n : null}\n {overwriteWarning\n ? <OverwriteWarning />\n : null}\n </DialogContent>\n <DialogActionButtons onClose={props.onClose} />\n </Dialog>\n )\n}\n","import { Cancel as CancelIcon, RadioButtonChecked as RadioButtonCheckedIcon } from '@mui/icons-material'\nimport type { TableRowProps } from '@mui/material'\nimport {\n Button, ButtonGroup, TableCell, TableRow,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { SeedPhraseIconButton } from '../_shared/index.ts'\nimport { SeedPhraseDialog } from '../dialog/index.ts'\n\n/** @public */\nexport interface SeedPhraseTableRowProps extends TableRowProps {\n changeSeedPhrase?: (seedPhrase: string) => void\n seedPhrase?: string\n}\n\n/** @public */\nexport const SeedPhraseTableRow: React.FC<SeedPhraseTableRowProps> = ({\n changeSeedPhrase, seedPhrase, ...props\n}) => {\n const [open, setOpen] = useState(false)\n\n const handleOpen = () => {\n setOpen(true)\n }\n return (\n <TableRow {...props}>\n <TableCell>\n Seed Phrase\n {' '}\n <SeedPhraseIconButton />\n </TableCell>\n <TableCell align=\"center\">\n {seedPhrase\n ? <RadioButtonCheckedIcon color=\"success\" />\n : <CancelIcon color=\"error\" />}\n </TableCell>\n <TableCell>\n <SeedPhraseDialog changeSeedPhrase={changeSeedPhrase} open={open} onClose={() => setOpen(false)} seedPhrase={seedPhrase} />\n <ButtonGroup fullWidth>\n <Button variant=\"contained\" size=\"small\" onClick={handleOpen}>\n Update\n </Button>\n </ButtonGroup>\n </TableCell>\n </TableRow>\n )\n}\n","import { EthAddress } from '@xylabs/eth-address'\nimport { EthAccountButton } from '@xylabs/react-crypto'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { NumberStatus } from '@xylabs/react-number-status'\nimport { useNetwork } from '@xyo-network/react-network'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport React from 'react'\n\nimport { useAccount } from '../../hooks/index.ts'\n\n/** @public */\nexport interface WalletAccountDetailsProps extends FlexBoxProps {\n account?: WalletInstance\n exploreUrl?: string\n}\n\n/** @public */\nexport const WalletAccountDetails: React.FC<WalletAccountDetailsProps> = ({\n exploreUrl = 'https://explore.xyo.network', account, ...props\n}) => {\n const [accountToUse] = useAccount({ account })\n const { network } = useNetwork()\n const exploreAddressUrl = `${exploreUrl}/recent?account=${accountToUse?.address}&network=${network?.name ?? 'main'}`\n\n return (\n <FlexCol {...props}>\n <EthAccountButton address={EthAddress.fromString(accountToUse?.address)} />\n <FlexRow gap={1}>\n <NumberStatus rounded title=\"Tokens\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.tokens`} target=\"_blank\" />\n <NumberStatus rounded title=\"NFTs\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.nfts`} target=\"_blank\" />\n <NumberStatus rounded title=\"Signatures\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.signatures`} target=\"_blank\" />\n <NumberStatus rounded title=\"Signins\" value={0} to={`${exploreAddressUrl}&schema=network.xyo.account.signins`} target=\"_blank\" />\n </FlexRow>\n </FlexCol>\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport {\n useRootWallet, useWalletContext, useWalletProvided,\n} from '../contexts/index.ts'\n\n/** @public */\nexport interface AccountHookParams {\n account?: AccountInstance\n index?: number\n required?: boolean\n wallet?: WalletInstance\n}\n\n/** @public */\nexport const useAccount = ({\n wallet, account, index, required = false,\n}: 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(new Error('useAccount can not have both a wallet and an account in the parameters'))\n }\n\n if (index && account && !validationError) {\n setValidationError(new Error('useAccount can not have both a index and an account in the parameters'))\n }\n\n const [error, setError] = useState<Error>()\n const [rootWallet] = useRootWallet(!wallet && required)\n const { activeAccountIndex } = useWalletContext(false)\n const [activeAccount] = usePromise(async () => {\n try {\n if (!validationError) {\n if (wallet) {\n const path = `${index ?? 0}'\\0`\n return await wallet?.derivePath?.(path)\n } else if (rootWallet) {\n const path = `${index ?? activeAccountIndex ?? 0}'\\/0`\n return await rootWallet?.derivePath?.(path)\n }\n }\n } catch (ex) {\n const error = ex as Error\n console.error(error.message)\n setError(error)\n }\n }, [index, wallet, rootWallet, activeAccountIndex, validationError])\n if (validationError && !error) {\n console.error(validationError.message)\n setError(validationError)\n }\n\n return [\n error\n ? undefined\n : (account ?? activeAccount ?? walletContextProvided)\n ? null\n : undefined,\n error,\n ]\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { useState } from 'react'\n\nimport { useSelectedWalletAccount, useWalletContext } from '../contexts/index.ts'\n\n/** @public */\nexport interface WalletHookParams {\n mnemonic?: string\n path?: string\n required?: boolean\n seed?: ArrayBufferLike | string\n wallet?: WalletInstance | null\n}\n\n/** @public */\nexport const useWallet = ({\n mnemonic, wallet, path, required = false, seed,\n}: WalletHookParams = {}): [\n WalletInstance | null | undefined,\n Error | undefined,\n] => {\n const walletContextProvided = useWalletContext(false)\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.fromPhrase(mnemonic)\n } else if (seed) {\n return HDWallet.fromSeed(seed)\n }\n return contextAccount\n })()\n\n return path ? newAccount?.derivePath?.(path) : (newAccount ?? wallet)\n } catch (ex) {\n setError(ex as Error)\n }\n }, [mnemonic, contextAccount, seed, path, wallet])\n return [activeAccount ?? (walletContextProvided ? null : activeAccount), error]\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\n\nimport { useWalletContext } from '../contexts/index.ts'\nimport { useWallet } from './useWallet.ts'\n\n/** @public */\nexport interface WalletsHookParams {\n paths: string[]\n wallet?: WalletInstance | null\n}\n\n/** @public */\nexport const useWallets = ({ wallet, paths }: WalletsHookParams): [WalletInstance[] | null | undefined, Error | undefined] => {\n const walletContextProvided = useWalletContext(false)\n const [foundWallet] = useWallet({ wallet })\n const [wallets, error] = usePromise(\n async () => (foundWallet ? await Promise.all(paths.map(path => foundWallet.derivePath(path))) : undefined),\n [foundWallet, paths],\n )\n return [wallets ?? (walletContextProvided ? null : wallets), error]\n}\n","import type { UsePromiseState } from '@xylabs/react-promise'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { AccountInstance } from '@xyo-network/account-model'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport { Mutex } from 'async-mutex'\n\nlet globalWrapperWallet: WalletInstance | undefined\nconst globalWrapperWalletMutex = new Mutex()\n\n/** @public */\nexport const useWrapperAccount = (\n account?: AccountInstance | null,\n): [AccountInstance | null | undefined, Error | undefined, UsePromiseState | undefined] => {\n return usePromise(async () => {\n return await globalWrapperWalletMutex.runExclusive(async () => {\n // if we are expecting to receive a wallet or did receive on, return the override account\n if (account !== undefined) {\n return account\n }\n\n if (globalWrapperWallet) {\n return globalWrapperWallet\n }\n\n try {\n globalWrapperWallet = await HDWallet.random()\n console.log(`Global Wrapper Wallet Creation Success: ${globalWrapperWallet.address}`)\n } catch (ex) {\n const error = ex as Error\n console.error(`Global Wrapper Wallet Creation Failed: ${error.message}`)\n }\n return globalWrapperWallet\n })\n }, [account])\n}\n","import type { SelectProps } from '@mui/material'\nimport { CircularProgress, MenuItem } from '@mui/material'\nimport { SelectEx } from '@xylabs/react-select'\nimport type { AddressRenderRowBoxProps } from '@xyo-network/react-address-render'\nimport { AddressRenderRowBox } from '@xyo-network/react-address-render'\nimport React from 'react'\n\nimport { useWalletContext } from '../../contexts/index.ts'\nimport { useWallet } from '../../hooks/index.ts'\nimport { RenderedAccountMenuItem } from './RenderedMenuItem.tsx'\n\ntype SharedAddressRenderRowBoxProps = Pick<AddressRenderRowBoxProps, 'iconOnly' | 'iconSize' | 'icons' | 'showFavorite'>\n\n/** @public */\nexport type WalletAccountSelectProps = SharedAddressRenderRowBoxProps\n & Omit<SelectProps<number>, 'variant'>\n & Partial<SelectProps<number>> & {\n addressNames?: Record<string, string | undefined>\n maxAccounts?: number\n }\n\nconst arrayRange = (length: number, start = 0) => {\n return [...Array.from({ length }).keys()].map(x => x + start)\n}\n\n/** @public */\nexport const WalletAccountSelect: React.FC<WalletAccountSelectProps> = ({\n addressNames,\n iconOnly,\n iconSize = 24,\n icons,\n maxAccounts = 1,\n showFavorite = false,\n size,\n variant = 'outlined',\n ...props\n}) => {\n const {\n activeAccountIndex, setActiveAccountIndex, rootWallet,\n } = useWalletContext()\n const disabled = !rootWallet || activeAccountIndex === undefined\n\n return (\n <>\n {rootWallet\n ? (\n <SelectEx\n margin=\"dense\"\n disabled={disabled}\n renderValue={(selectedAccountIndex) => {\n return (\n <RenderedAccountMenuItem\n addressNames={addressNames}\n iconOnly={iconOnly}\n iconSize={iconSize}\n icons={icons}\n rootWallet={rootWallet}\n selectedAccountIndex={selectedAccountIndex}\n showFavorite={showFavorite}\n />\n )\n }}\n value={activeAccountIndex === undefined ? '' : activeAccountIndex}\n onChange={event => setActiveAccountIndex?.(Number.parseInt(`${event.target.value}`))}\n size={size}\n variant={variant}\n {...props}\n >\n {rootWallet && arrayRange(maxAccounts).map((index) => {\n const [account] = useWallet({ path: index.toString(), wallet: rootWallet })\n const customName = account ? addressNames?.[account.address] : undefined\n const favorite = !!account && account.address in (addressNames ?? {})\n return (\n <MenuItem\n key={account?.address}\n value={index}\n sx={{\n minHeight: 0, paddingBottom: 0, paddingTop: 0,\n }}\n >\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 </SelectEx>\n )\n : <CircularProgress size={24} />}\n </>\n )\n}\n","import { MenuItem, type MenuItemProps } from '@mui/material'\nimport { AddressRenderRowBox } from '@xyo-network/react-address-render'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport React from 'react'\n\nimport { useWallet } from '../../hooks/index.ts'\n\n/** @public */\nexport interface RenderedAccountMenuItemProps extends MenuItemProps {\n addressNames?: Record<string, string | undefined>\n iconOnly?: boolean\n iconSize?: number\n icons?: boolean\n rootWallet: WalletInstance\n selectedAccountIndex?: number\n showFavorite?: boolean\n}\n\n/** @public */\nexport const RenderedAccountMenuItem: React.FC<RenderedAccountMenuItemProps> = ({\n selectedAccountIndex,\n rootWallet,\n addressNames,\n iconOnly,\n iconSize,\n icons,\n showFavorite,\n}) => {\n const [selectedAccount] = useWallet({ path: selectedAccountIndex?.toString(), wallet: rootWallet })\n const customName = selectedAccount ? addressNames?.[selectedAccount.address] : undefined\n const favorite = !!selectedAccount && selectedAccount.address in (addressNames ?? {})\n return (\n <MenuItem\n value={selectedAccountIndex}\n sx={{\n minHeight: 0, paddingBottom: 0, paddingTop: 0,\n }}\n >\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","import type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { WalletAccountSelect } from './Select.tsx'\n\n/** @public */\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\n/** @public */\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 variant=\"outlined\"\n />\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["ButtonGroup","TableCell","TableRow","Typography","ButtonEx","React","useState","Alert","AlertTitle","Snackbar","React","OutOfBoundsSnackBar","activeAccountIndex","desiredMaximumAccounts","setShowSnackBar","showSnackBar","Snackbar","anchorOrigin","horizontal","vertical","autoHideDuration","onClose","open","Alert","severity","AlertTitle","undefined","MaxAccountsTableRow","activeAccountIndex","changeMaxAccounts","maxAccounts","desiredMaximumAccounts","setDesiredMaximumAccounts","useState","showSnackBar","setShowSnackBar","handleChangeMaxAccounts","change","undefined","validMaximumAccounts","maxAccountsWithinRange","console","error","Error","React","TableRow","TableCell","align","Typography","variant","ButtonGroup","ButtonEx","onClick","size","OutOfBoundsSnackBar","HelpOutline","HelpOutlineIcon","Button","Dialog","DialogActions","DialogContent","DialogTitle","IconButton","Link","List","ListItem","Typography","React","useState","SeedPhraseIconButton","props","open","setOpen","useState","onClose","React","IconButton","onClick","HelpOutlineIcon","fontSize","Dialog","DialogTitle","DialogContent","Typography","Link","target","href","List","ListItem","DialogActions","Button","variant","Alert","AlertTitle","Snackbar","generateMnemonic","wordlist","React","useMemo","useState","DefaultSeedPhrase","changeSeedPhrase","children","hideDefaultSeedPhraseMessage","seedPhrase","showSnackBar","setShowSnackBar","useState","useMemo","mnemonic","generateMnemonic","wordlist","React","Snackbar","open","autoHideDuration","onClose","anchorOrigin","horizontal","vertical","Alert","severity","AlertTitle","Button","DialogActions","React","createContextEx","SeedPhraseContext","generateMnemonic","validateMnemonic","wordlist","useResetState","React","useCallback","useEffect","useMemo","useState","validate","passedPhrase","validateMnemonic","wordlist","SeedPhraseProvider","children","defaultPhrase","handleChangeSeedPhrase","saveCallback","seedPhrase","open","phrase","setPhrase","useResetState","overwriteWarning","setOverwriteWarning","useState","useEffect","handleGenerate","useCallback","mnemonic","generateMnemonic","handleCancelOverwrite","handleClear","handleSave","validSeedPhrase","useMemo","validPhrase","value","provided","React","SeedPhraseContext","useContextEx","useSeedPhrase","useContextEx","SeedPhraseContext","createContextEx","WalletContext","useResetState","usePromise","React","useMemo","WalletProvider","children","defaultActiveAccountIndex","rootWallet","props","activeAccountIndex","setActiveAccountIndex","useResetState","activeAccount","usePromise","derivePath","toString","value","useMemo","provided","React","WalletContext","usePromise","useContextEx","useProvided","useWalletContext","required","useContextEx","WalletContext","useWalletProvided","useProvided","useRootWallet","rootWallet","undefined","useIndexedWalletFromContext","index","wallet","usePromise","derivePath","toString","useSelectedWalletAccount","activeAccountIndex","account","DialogActionButtons","onClose","props","handleSave","setPhrase","useSeedPhrase","wrappedOnClose","e","React","DialogActions","Button","variant","onClick","type","FormControl","TextField","React","colorParser","conditional","Link","Typography","React","InvalidPhraseTypography","props","React","Typography","variant","color","Link","target","href","CheckCircleOutline","CheckCircleOutlineIcon","HighlightOff","HighlightOffIcon","FlexRow","React","useMemo","PhraseHeaderBox","children","conditional","props","state","useMemo","Icon","React","CheckCircleOutlineIcon","fontSize","color","HighlightOffIcon","FlexRow","justifyContent","columnGap","NewPhraseTextField","children","disableColor","props","phrase","setPhrase","validPhrase","useSeedPhrase","React","FormControl","fullWidth","size","sx","display","flexDirection","rowGap","TextField","focused","color","undefined","colorParser","error","helperText","InvalidPhraseTypography","maxRows","Number","POSITIVE_INFINITY","multiline","onChange","e","target","value","Button","DialogActions","React","PhraseDialogActions","handleClear","handleGenerate","overwriteWarning","useSeedPhrase","React","DialogActions","sx","justifyContent","Button","disabled","variant","onClick","ContentCopy","Chip","FormControl","FormLabel","IconButton","TextField","Tooltip","useTheme","FlexRow","React","useMemo","useState","SavedPhraseTextField","fullWidth","showCopyButton","showPhraseHeader","visible","visibleProp","props","validSeedPhrase","seedPhrase","useSeedPhrase","theme","useTheme","setVisible","useState","useMemo","copied","setCopied","onCopyPhrase","navigator","clipboard","writeText","setTimeout","e","console","error","React","FormControl","size","sx","display","flexDirection","rowGap","FlexRow","gap","Chip","label","onClick","alignSelf","my","Tooltip","title","IconButton","height","opacity","overflow","padding","spacing","transition","width","ContentCopy","fontSize","FormLabel","PhraseHeaderBox","conditional","TextField","defaultValue","disabled","helperText","InvalidPhraseTypography","maxRows","Number","POSITIVE_INFINITY","multiline","slotProps","input","style","Alert","Button","FlexRow","React","OverwriteWarning","handleCancelOverwrite","handleSave","useSeedPhrase","React","Alert","variant","severity","action","FlexRow","sx","columnGap","Button","color","size","onClick","Dialog","DialogContent","DialogTitle","FormLabel","React","SeedPhraseDialog","changeSeedPhrase","dialogTitle","seedPhrase","seedPhraseTextFieldTitle","props","React","SeedPhraseProvider","handleChangeSeedPhrase","open","saveCallback","onClose","SeedPhraseDialogInner","showCopyButton","overwriteWarning","validPhrase","useSeedPhrase","Dialog","aria-labelledby","aria-describedby","fullWidth","maxWidth","DialogTitle","id","sx","alignItems","display","flexDirection","SeedPhraseIconButton","DialogContent","rowGap","NewPhraseTextField","FormLabel","PhraseHeaderBox","conditional","PhraseDialogActions","SavedPhraseTextField","OverwriteWarning","DialogActionButtons","Cancel","CancelIcon","RadioButtonChecked","RadioButtonCheckedIcon","Button","ButtonGroup","TableCell","TableRow","React","useState","SeedPhraseTableRow","changeSeedPhrase","seedPhrase","props","open","setOpen","useState","handleOpen","React","TableRow","TableCell","SeedPhraseIconButton","align","RadioButtonCheckedIcon","color","CancelIcon","SeedPhraseDialog","onClose","ButtonGroup","fullWidth","Button","variant","size","onClick","EthAddress","EthAccountButton","FlexCol","FlexRow","NumberStatus","useNetwork","React","usePromise","useState","useAccount","wallet","account","index","required","walletContextProvided","useWalletProvided","validationError","setValidationError","useState","Error","error","setError","rootWallet","useRootWallet","activeAccountIndex","useWalletContext","activeAccount","usePromise","path","derivePath","ex","console","message","undefined","usePromise","HDWallet","useState","useWallet","mnemonic","wallet","path","required","seed","walletContextProvided","useWalletContext","error","setError","useState","contextAccount","useSelectedWalletAccount","activeAccount","usePromise","newAccount","HDWallet","fromPhrase","fromSeed","derivePath","ex","usePromise","useWallets","wallet","paths","walletContextProvided","useWalletContext","foundWallet","useWallet","wallets","error","usePromise","Promise","all","map","path","derivePath","undefined","usePromise","HDWallet","Mutex","globalWrapperWallet","globalWrapperWalletMutex","Mutex","useWrapperAccount","account","usePromise","runExclusive","undefined","HDWallet","random","console","log","address","ex","error","message","WalletAccountDetails","exploreUrl","account","props","accountToUse","useAccount","network","useNetwork","exploreAddressUrl","address","name","React","FlexCol","EthAccountButton","EthAddress","fromString","FlexRow","gap","NumberStatus","rounded","title","value","to","target","CircularProgress","MenuItem","SelectEx","AddressRenderRowBox","React","MenuItem","AddressRenderRowBox","React","RenderedAccountMenuItem","selectedAccountIndex","rootWallet","addressNames","iconOnly","iconSize","icons","showFavorite","selectedAccount","useWallet","path","toString","wallet","customName","address","undefined","favorite","React","MenuItem","value","sx","minHeight","paddingBottom","paddingTop","AddressRenderRowBox","disableSharedRef","flexGrow","name","arrayRange","length","start","Array","from","keys","map","x","WalletAccountSelect","addressNames","iconOnly","iconSize","icons","maxAccounts","showFavorite","size","variant","props","activeAccountIndex","setActiveAccountIndex","rootWallet","useWalletContext","disabled","undefined","React","SelectEx","margin","renderValue","selectedAccountIndex","RenderedAccountMenuItem","value","onChange","event","Number","parseInt","target","index","account","useWallet","path","toString","wallet","customName","address","favorite","MenuItem","key","sx","minHeight","paddingBottom","paddingTop","AddressRenderRowBox","disableSharedRef","flexGrow","name","CircularProgress","FlexCol","React","WalletAccountSelectBar","addressNames","iconOnly","iconSize","icons","maxAccounts","showFavorite","size","props","React","FlexCol","alignItems","WalletAccountSelect","fullWidth","variant"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/react-wallet",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Common React library for all XYO projects that use React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xyo",
|
|
@@ -28,48 +28,50 @@
|
|
|
28
28
|
"exports": {
|
|
29
29
|
".": {
|
|
30
30
|
"browser": {
|
|
31
|
-
"types": "./dist/
|
|
31
|
+
"types": "./dist/browser/index.d.ts",
|
|
32
32
|
"default": "./dist/browser/index.mjs"
|
|
33
33
|
},
|
|
34
|
-
"types": "./dist/
|
|
34
|
+
"types": "./dist/browser/index.d.ts",
|
|
35
35
|
"default": "./dist/browser/index.mjs"
|
|
36
36
|
},
|
|
37
37
|
"./package.json": "./package.json"
|
|
38
38
|
},
|
|
39
39
|
"module": "dist/browser/index.mjs",
|
|
40
|
-
"types": "dist/
|
|
40
|
+
"types": "dist/browser/index.d.ts",
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@scure/bip39": "^1.6.0",
|
|
43
|
-
"@xylabs/
|
|
44
|
-
"@xylabs/
|
|
45
|
-
"@xylabs/react-
|
|
46
|
-
"@xylabs/react-
|
|
47
|
-
"@xylabs/react-
|
|
48
|
-
"@xylabs/react-
|
|
49
|
-
"@xylabs/react-
|
|
50
|
-
"@xylabs/react-
|
|
51
|
-
"@xylabs/react-
|
|
52
|
-
"@
|
|
53
|
-
"@
|
|
54
|
-
"@
|
|
55
|
-
"@xyo-network/
|
|
56
|
-
"@xyo-network/
|
|
57
|
-
"@xyo-network/react-network": "^5.3.15",
|
|
58
|
-
"@xyo-network/wallet": "^3.18.10",
|
|
59
|
-
"@xyo-network/wallet-model": "^3.18.10",
|
|
43
|
+
"@xylabs/eth-address": "^4.13.15",
|
|
44
|
+
"@xylabs/react-button": "^6.3.10",
|
|
45
|
+
"@xylabs/react-crypto": "^6.3.10",
|
|
46
|
+
"@xylabs/react-flexbox": "^6.3.10",
|
|
47
|
+
"@xylabs/react-hooks": "^6.3.10",
|
|
48
|
+
"@xylabs/react-number-status": "^6.3.10",
|
|
49
|
+
"@xylabs/react-promise": "^6.3.10",
|
|
50
|
+
"@xylabs/react-select": "^6.3.10",
|
|
51
|
+
"@xylabs/react-shared": "^6.3.10",
|
|
52
|
+
"@xyo-network/account-model": "^4.1.1",
|
|
53
|
+
"@xyo-network/react-address-render": "^6.1.0",
|
|
54
|
+
"@xyo-network/react-network": "^6.1.0",
|
|
55
|
+
"@xyo-network/wallet": "^4.1.1",
|
|
56
|
+
"@xyo-network/wallet-model": "^4.1.1",
|
|
60
57
|
"async-mutex": "^0.5.0"
|
|
61
58
|
},
|
|
62
59
|
"devDependencies": {
|
|
63
|
-
"@
|
|
64
|
-
"@mui/material": "^7.
|
|
60
|
+
"@microsoft/api-extractor": "^7.52.8",
|
|
61
|
+
"@mui/icons-material": "^7.2.0",
|
|
62
|
+
"@mui/material": "^7.2.0",
|
|
63
|
+
"@storybook/react-vite": "^9.0.16",
|
|
65
64
|
"@types/react": "^19.1.8",
|
|
66
|
-
"@xylabs/
|
|
67
|
-
"@xylabs/
|
|
68
|
-
"@
|
|
65
|
+
"@xylabs/enum": "^4.13.15",
|
|
66
|
+
"@xylabs/react-identicon": "^6.3.10",
|
|
67
|
+
"@xylabs/react-quick-tip-button": "^6.3.10",
|
|
68
|
+
"@xylabs/ts-scripts-yarn3": "^7.0.0-rc.23",
|
|
69
|
+
"@xylabs/tsconfig-react": "^7.0.0-rc.23",
|
|
70
|
+
"@xyo-network/react-storybook": "^6.1.0",
|
|
69
71
|
"react": "^19.1.0",
|
|
70
72
|
"react-dom": "^19.1.0",
|
|
71
|
-
"react-router-dom": "^7.6.
|
|
72
|
-
"storybook": "^9.0.
|
|
73
|
+
"react-router-dom": "^7.6.3",
|
|
74
|
+
"storybook": "^9.0.16",
|
|
73
75
|
"typescript": "^5.8.3"
|
|
74
76
|
},
|
|
75
77
|
"peerDependencies": {
|
|
@@ -7,12 +7,14 @@ import React, { useState } from 'react'
|
|
|
7
7
|
|
|
8
8
|
import { OutOfBoundsSnackBar } from './OutOfBoundsSnackBar.tsx'
|
|
9
9
|
|
|
10
|
+
/** @public */
|
|
10
11
|
export interface MaxAccountsTableRow extends TableRowProps {
|
|
11
12
|
activeAccountIndex?: number
|
|
12
13
|
changeMaxAccounts?: (maxAccounts: number) => void
|
|
13
14
|
maxAccounts?: number
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
/** @public */
|
|
16
18
|
export const MaxAccountsTableRow: React.FC<MaxAccountsTableRow> = ({
|
|
17
19
|
activeAccountIndex, changeMaxAccounts, maxAccounts,
|
|
18
20
|
}) => {
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
import type { Dispatch, SetStateAction } from 'react'
|
|
6
6
|
import React from 'react'
|
|
7
7
|
|
|
8
|
+
/** @public */
|
|
8
9
|
export interface OutOfBoundsSnackBarProps extends SnackbarProps {
|
|
9
10
|
activeAccountIndex?: number
|
|
10
11
|
desiredMaximumAccounts?: number
|
|
@@ -12,6 +13,7 @@ export interface OutOfBoundsSnackBarProps extends SnackbarProps {
|
|
|
12
13
|
showSnackBar?: boolean
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
/** @public */
|
|
15
17
|
export const OutOfBoundsSnackBar: React.FC<OutOfBoundsSnackBarProps> = ({
|
|
16
18
|
activeAccountIndex,
|
|
17
19
|
desiredMaximumAccounts,
|
|
@@ -6,12 +6,14 @@ import { wordlist } from '@scure/bip39/wordlists/english'
|
|
|
6
6
|
import type { PropsWithChildren } from 'react'
|
|
7
7
|
import React, { useMemo, useState } from 'react'
|
|
8
8
|
|
|
9
|
+
/** @public */
|
|
9
10
|
export interface DefaultSeedPhraseProps extends PropsWithChildren {
|
|
10
11
|
changeSeedPhrase?: (seedPhrase: string) => void
|
|
11
12
|
hideDefaultSeedPhraseMessage?: boolean
|
|
12
13
|
seedPhrase?: string
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
/** @public */
|
|
15
17
|
export const DefaultSeedPhrase: React.FC<DefaultSeedPhraseProps> = ({
|
|
16
18
|
changeSeedPhrase, children, hideDefaultSeedPhraseMessage, seedPhrase,
|
|
17
19
|
}) => {
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
} from '@mui/material'
|
|
15
15
|
import React, { useState } from 'react'
|
|
16
16
|
|
|
17
|
+
/** @internal */
|
|
17
18
|
export const SeedPhraseIconButton: React.FC<IconButtonProps> = (props) => {
|
|
18
19
|
const [open, setOpen] = useState(false)
|
|
19
20
|
const onClose = () => setOpen(false)
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
SavedPhraseTextField,
|
|
17
17
|
} from './components/index.ts'
|
|
18
18
|
|
|
19
|
+
/** @public */
|
|
19
20
|
export interface SeedPhraseDialogProps extends DialogProps {
|
|
20
21
|
changeSeedPhrase?: (value: string) => void
|
|
21
22
|
dialogTitle?: ReactNode
|
|
@@ -24,6 +25,7 @@ export interface SeedPhraseDialogProps extends DialogProps {
|
|
|
24
25
|
showCopyButton?: boolean
|
|
25
26
|
}
|
|
26
27
|
|
|
28
|
+
/** @public */
|
|
27
29
|
export const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({
|
|
28
30
|
changeSeedPhrase, dialogTitle = 'Update Your Seed Phrase', seedPhrase, seedPhraseTextFieldTitle = 'New Seed Phrase', ...props
|
|
29
31
|
}) => {
|
|
@@ -39,6 +41,7 @@ export const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({
|
|
|
39
41
|
)
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
/** @public */
|
|
42
45
|
export const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = ({
|
|
43
46
|
dialogTitle, seedPhraseTextFieldTitle, showCopyButton, ...props
|
|
44
47
|
}) => {
|
|
@@ -5,10 +5,12 @@ import React from 'react'
|
|
|
5
5
|
|
|
6
6
|
import { useSeedPhrase } from '../../../../contexts/index.ts'
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
/** @public */
|
|
9
|
+
export interface DialogActionButtonsProps extends DialogActionsProps {
|
|
9
10
|
onClose?: DialogProps['onClose']
|
|
10
11
|
}
|
|
11
12
|
|
|
13
|
+
/** @public */
|
|
12
14
|
export const DialogActionButtons: React.FC<DialogActionButtonsProps> = ({ onClose, ...props }) => {
|
|
13
15
|
const { handleSave, setPhrase } = useSeedPhrase()
|
|
14
16
|
|
|
@@ -6,11 +6,13 @@ import React from 'react'
|
|
|
6
6
|
import { useSeedPhrase } from '../../../../../contexts/index.ts'
|
|
7
7
|
import { colorParser, InvalidPhraseTypography } from './validation-messages/index.ts'
|
|
8
8
|
|
|
9
|
+
/** @public */
|
|
9
10
|
export interface NewPhraseTextFieldProps extends StandardTextFieldProps {
|
|
10
11
|
children?: ReactNode
|
|
11
12
|
disableColor?: boolean
|
|
12
13
|
}
|
|
13
14
|
|
|
15
|
+
/** @public */
|
|
14
16
|
export const NewPhraseTextField: React.FC<NewPhraseTextFieldProps> = ({
|
|
15
17
|
children, disableColor, ...props
|
|
16
18
|
}) => {
|