@xyo-network/react-wallet 4.2.11 → 4.2.13
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/browser/components/SeedPhrase/dialog/SeedPhraseDialog.d.ts +1 -0
- package/dist/browser/components/SeedPhrase/dialog/SeedPhraseDialog.d.ts.map +1 -1
- package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts +2 -0
- package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts.map +1 -1
- package/dist/browser/contexts/Wallet/usePromise.d.ts +8 -5
- package/dist/browser/contexts/Wallet/usePromise.d.ts.map +1 -1
- package/dist/browser/hooks/useWallet.d.ts +1 -1
- package/dist/browser/hooks/useWallet.d.ts.map +1 -1
- package/dist/browser/index.mjs +40 -11
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +29 -28
- package/src/components/SeedPhrase/dialog/SeedPhraseDialog.stories.tsx +1 -1
- package/src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx +3 -2
- package/src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx +42 -9
- package/src/contexts/Wallet/usePromise.ts +9 -5
- package/src/hooks/useWallet.ts +1 -1
|
@@ -3,6 +3,7 @@ import React from 'react';
|
|
|
3
3
|
export interface SeedPhraseDialogProps extends DialogProps {
|
|
4
4
|
changeSeedPhrase?: (value: string) => void;
|
|
5
5
|
seedPhrase?: string;
|
|
6
|
+
showCopyButton?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare const SeedPhraseDialog: React.FC<SeedPhraseDialogProps>;
|
|
8
9
|
export declare const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeedPhraseDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"SeedPhraseDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeedPhrase/dialog/SeedPhraseDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIhD,OAAO,KAAK,MAAM,OAAO,CAAA;AAazB,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAa5D,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAgCjE,CAAA"}
|
package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ import type { StandardTextFieldProps } from '@mui/material';
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
export interface SavedPhraseTextFieldProps extends StandardTextFieldProps {
|
|
4
4
|
fullWidth?: boolean;
|
|
5
|
+
showCopyButton?: boolean;
|
|
5
6
|
showPhraseHeader?: boolean;
|
|
7
|
+
visible?: boolean;
|
|
6
8
|
}
|
|
7
9
|
export declare const SavedPhraseTextField: React.FC<SavedPhraseTextFieldProps>;
|
|
8
10
|
//# sourceMappingURL=SavedPhraseTextField.d.ts.map
|
package/dist/browser/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SavedPhraseTextField.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SavedPhraseTextField.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAM3D,OAAO,KAA4B,MAAM,OAAO,CAAA;AAKhD,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAyEpE,CAAA"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import type { EnumValue } from '@xylabs/object';
|
|
2
|
+
import { Enum } from '@xylabs/object';
|
|
1
3
|
import type { DependencyList } from 'react';
|
|
2
|
-
export declare
|
|
3
|
-
pending
|
|
4
|
-
rejected
|
|
5
|
-
resolved
|
|
6
|
-
}
|
|
4
|
+
export declare const State: Enum<{
|
|
5
|
+
pending: "pending";
|
|
6
|
+
rejected: "rejected";
|
|
7
|
+
resolved: "resolved";
|
|
8
|
+
}>;
|
|
9
|
+
export type State = EnumValue<typeof State>;
|
|
7
10
|
/**
|
|
8
11
|
* usePromise -
|
|
9
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePromise.d.ts","sourceRoot":"","sources":["../../../../src/contexts/Wallet/usePromise.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usePromise.d.ts","sourceRoot":"","sources":["../../../../src/contexts/Wallet/usePromise.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAK3C,eAAO,MAAM,KAAK;;;;EAIhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,KAAK,CAAC,CAAA;AAE3C;;GAEG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,WACvB,MAAM,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,gBAC7B,cAAc,UACrB,MAAM,GAAG,SAAS,KACxB,CAAC,OAAO,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,GAAG,SAAS,CA6D5D,CAAA"}
|
|
@@ -3,7 +3,7 @@ export interface WalletHookParams {
|
|
|
3
3
|
mnemonic?: string;
|
|
4
4
|
path?: string;
|
|
5
5
|
required?: boolean;
|
|
6
|
-
seed?:
|
|
6
|
+
seed?: ArrayBufferLike | string;
|
|
7
7
|
wallet?: WalletInstance | null;
|
|
8
8
|
}
|
|
9
9
|
export declare const useWallet: ({ mnemonic, wallet, path, required, seed, }?: WalletHookParams) => [WalletInstance | null | undefined, Error | undefined];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWallet.d.ts","sourceRoot":"","sources":["../../../src/hooks/useWallet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAK/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"useWallet.d.ts","sourceRoot":"","sources":["../../../src/hooks/useWallet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAK/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;IAC/B,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;CAC/B;AAED,eAAO,MAAM,SAAS,iDAEnB,gBAAgB,KAAQ,CACzB,cAAc,GAAG,IAAI,GAAG,SAAS,EACjC,KAAK,GAAG,SAAS,CAwBlB,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -455,11 +455,30 @@ var PhraseDialogActions = /* @__PURE__ */ __name(() => {
|
|
|
455
455
|
}, "PhraseDialogActions");
|
|
456
456
|
|
|
457
457
|
// src/components/SeedPhrase/dialog/components/fields/SavedPhraseTextField.tsx
|
|
458
|
-
import {
|
|
459
|
-
import
|
|
460
|
-
|
|
458
|
+
import { ContentCopy } from "@mui/icons-material";
|
|
459
|
+
import { Chip, FormControl as FormControl2, FormLabel, IconButton as IconButton2, TextField as TextField2, Tooltip } from "@mui/material";
|
|
460
|
+
import { FlexRow as FlexRow2 } from "@xylabs/react-flexbox";
|
|
461
|
+
import React12, { useMemo as useMemo5, useState as useState5 } from "react";
|
|
462
|
+
var SavedPhraseTextField = /* @__PURE__ */ __name(({ fullWidth, showCopyButton, showPhraseHeader, visible: visibleProp, ...props }) => {
|
|
461
463
|
const { validSeedPhrase, seedPhrase } = useSeedPhrase();
|
|
462
|
-
const [visible, setVisible] = useState5(
|
|
464
|
+
const [visible, setVisible] = useState5(visibleProp);
|
|
465
|
+
useMemo5(() => {
|
|
466
|
+
setVisible(visibleProp);
|
|
467
|
+
}, [
|
|
468
|
+
visibleProp
|
|
469
|
+
]);
|
|
470
|
+
const [copied, setCopied] = useState5(false);
|
|
471
|
+
const onCopyPhrase = /* @__PURE__ */ __name(async () => {
|
|
472
|
+
if (seedPhrase) {
|
|
473
|
+
try {
|
|
474
|
+
await navigator.clipboard.writeText(seedPhrase);
|
|
475
|
+
setCopied(true);
|
|
476
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
477
|
+
} catch (e) {
|
|
478
|
+
console.error("Error copying resolvedSelectedAddress to clipboard", e);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}, "onCopyPhrase");
|
|
463
482
|
return /* @__PURE__ */ React12.createElement(FormControl2, {
|
|
464
483
|
fullWidth,
|
|
465
484
|
size: "small",
|
|
@@ -468,13 +487,21 @@ var SavedPhraseTextField = /* @__PURE__ */ __name(({ fullWidth, showPhraseHeader
|
|
|
468
487
|
flexDirection: "column",
|
|
469
488
|
rowGap: 1
|
|
470
489
|
}
|
|
490
|
+
}, /* @__PURE__ */ React12.createElement(FlexRow2, {
|
|
491
|
+
gap: 0.5
|
|
471
492
|
}, /* @__PURE__ */ React12.createElement(Chip, {
|
|
472
493
|
label: visible ? "Hide Saved Seed Phrase" : "Reveal Saved Seed Phrase",
|
|
473
494
|
onClick: /* @__PURE__ */ __name(() => setVisible(!visible), "onClick"),
|
|
474
495
|
sx: {
|
|
475
496
|
alignSelf: "center"
|
|
476
497
|
}
|
|
477
|
-
}),
|
|
498
|
+
}), showCopyButton && visible ? /* @__PURE__ */ React12.createElement(Tooltip, {
|
|
499
|
+
title: copied ? "Copied!" : "Copy"
|
|
500
|
+
}, /* @__PURE__ */ React12.createElement(IconButton2, {
|
|
501
|
+
onClick: /* @__PURE__ */ __name(() => void onCopyPhrase(), "onClick")
|
|
502
|
+
}, /* @__PURE__ */ React12.createElement(ContentCopy, {
|
|
503
|
+
fontSize: "small"
|
|
504
|
+
}))) : null), visible ? /* @__PURE__ */ React12.createElement(React12.Fragment, null, showPhraseHeader ? /* @__PURE__ */ React12.createElement(FormLabel, null, /* @__PURE__ */ React12.createElement(PhraseHeaderBox, {
|
|
478
505
|
conditional: validSeedPhrase
|
|
479
506
|
}, "Saved Seed Phrase")) : null, /* @__PURE__ */ React12.createElement(TextField2, {
|
|
480
507
|
defaultValue: seedPhrase,
|
|
@@ -490,14 +517,14 @@ var SavedPhraseTextField = /* @__PURE__ */ __name(({ fullWidth, showPhraseHeader
|
|
|
490
517
|
|
|
491
518
|
// src/components/SeedPhrase/dialog/components/OverwriteWarning.tsx
|
|
492
519
|
import { Alert as Alert3, Button as Button4 } from "@mui/material";
|
|
493
|
-
import { FlexRow as
|
|
520
|
+
import { FlexRow as FlexRow3 } from "@xylabs/react-flexbox";
|
|
494
521
|
import React13 from "react";
|
|
495
522
|
var OverwriteWarning = /* @__PURE__ */ __name(() => {
|
|
496
523
|
const { handleCancelOverwrite, handleSave } = useSeedPhrase();
|
|
497
524
|
return /* @__PURE__ */ React13.createElement(Alert3, {
|
|
498
525
|
variant: "outlined",
|
|
499
526
|
severity: "warning",
|
|
500
|
-
action: /* @__PURE__ */ React13.createElement(
|
|
527
|
+
action: /* @__PURE__ */ React13.createElement(FlexRow3, {
|
|
501
528
|
sx: {
|
|
502
529
|
columnGap: 1
|
|
503
530
|
}
|
|
@@ -526,7 +553,7 @@ var SeedPhraseDialog = /* @__PURE__ */ __name(({ changeSeedPhrase, seedPhrase, .
|
|
|
526
553
|
saveCallback: /* @__PURE__ */ __name(() => props.onClose?.({}, "escapeKeyDown"), "saveCallback")
|
|
527
554
|
}, /* @__PURE__ */ React14.createElement(SeedPhraseDialogInner, props));
|
|
528
555
|
}, "SeedPhraseDialog");
|
|
529
|
-
var SeedPhraseDialogInner = /* @__PURE__ */ __name((props) => {
|
|
556
|
+
var SeedPhraseDialogInner = /* @__PURE__ */ __name(({ showCopyButton, ...props }) => {
|
|
530
557
|
const { overwriteWarning, seedPhrase, validPhrase } = useSeedPhrase();
|
|
531
558
|
return /* @__PURE__ */ React14.createElement(Dialog2, {
|
|
532
559
|
"aria-labelledby": "alert-dialog-title",
|
|
@@ -544,7 +571,9 @@ var SeedPhraseDialogInner = /* @__PURE__ */ __name((props) => {
|
|
|
544
571
|
}
|
|
545
572
|
}, /* @__PURE__ */ React14.createElement(NewPhraseTextField, null, /* @__PURE__ */ React14.createElement(FormLabel2, null, /* @__PURE__ */ React14.createElement(PhraseHeaderBox, {
|
|
546
573
|
conditional: validPhrase
|
|
547
|
-
}, "New Seed Phrase"))), /* @__PURE__ */ React14.createElement(PhraseDialogActions, null), seedPhrase ? /* @__PURE__ */ React14.createElement(SavedPhraseTextField,
|
|
574
|
+
}, "New Seed Phrase"))), /* @__PURE__ */ React14.createElement(PhraseDialogActions, null), seedPhrase ? /* @__PURE__ */ React14.createElement(SavedPhraseTextField, {
|
|
575
|
+
showCopyButton
|
|
576
|
+
}) : null, overwriteWarning ? /* @__PURE__ */ React14.createElement(OverwriteWarning, null) : null), /* @__PURE__ */ React14.createElement(DialogActionButtons, {
|
|
548
577
|
onClose: props.onClose
|
|
549
578
|
}));
|
|
550
579
|
}, "SeedPhraseDialogInner");
|
|
@@ -581,7 +610,7 @@ var SeedPhraseTableRow = /* @__PURE__ */ __name(({ changeSeedPhrase, seedPhrase,
|
|
|
581
610
|
// src/components/WalletAccountDetails/WalletAccountDetails.tsx
|
|
582
611
|
import { EthAddress } from "@xylabs/eth-address";
|
|
583
612
|
import { EthAccountButton } from "@xylabs/react-crypto";
|
|
584
|
-
import { FlexCol, FlexRow as
|
|
613
|
+
import { FlexCol, FlexRow as FlexRow4 } from "@xylabs/react-flexbox";
|
|
585
614
|
import { NumberStatus } from "@xylabs/react-number-status";
|
|
586
615
|
import { useNetwork } from "@xyo-network/react-network";
|
|
587
616
|
import React16 from "react";
|
|
@@ -724,7 +753,7 @@ var WalletAccountDetails = /* @__PURE__ */ __name(({ exploreUrl = "https://explo
|
|
|
724
753
|
const exploreAddressUrl = `${exploreUrl}/recent?account=${accountToUse?.address}&network=${network?.name ?? "main"}`;
|
|
725
754
|
return /* @__PURE__ */ React16.createElement(FlexCol, props, /* @__PURE__ */ React16.createElement(EthAccountButton, {
|
|
726
755
|
address: EthAddress.fromString(accountToUse?.address)
|
|
727
|
-
}), /* @__PURE__ */ React16.createElement(
|
|
756
|
+
}), /* @__PURE__ */ React16.createElement(FlexRow4, {
|
|
728
757
|
gap: 1
|
|
729
758
|
}, /* @__PURE__ */ React16.createElement(NumberStatus, {
|
|
730
759
|
rounded: true,
|
|
@@ -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/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 variant=\"outlined\" onClick={handleSave}>\n Save\n </Button>\n </DialogActions>\n )\n}\n","import { createContextEx } from '@xyo-network/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'\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 = 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.Provider\n value={value}\n >\n {children}\n </SeedPhraseContext.Provider>\n )\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { SeedPhraseContext } from './Context.ts'\n\nexport const useSeedPhrase = () => useContextEx(SeedPhraseContext, 'SeedPhrase', true)\n","import { createContextEx } from '@xyo-network/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'\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 = 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.Provider\n value={value}\n {...props}\n >\n {children}\n </WalletContext.Provider>\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/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=\"outlined\" onClick={handleGenerate}>\n Generate\n </Button>\n <Button variant=\"outlined\" onClick={handleClear}>\n Clear\n </Button>\n </DialogActions>\n )\n}\n","import type { StandardTextFieldProps } from '@mui/material'\nimport {\n Chip, FormControl, FormLabel, TextField,\n} from '@mui/material'\nimport React, { 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 showPhraseHeader?: boolean\n}\n\nexport const SavedPhraseTextField: React.FC<SavedPhraseTextFieldProps> = ({\n fullWidth, showPhraseHeader, ...props\n}) => {\n const { validSeedPhrase, seedPhrase } = useSeedPhrase()\n\n const [visible, setVisible] = useState(false)\n\n return (\n <FormControl\n fullWidth={fullWidth}\n size=\"small\"\n sx={{\n display: 'flex', flexDirection: 'column', rowGap: 1,\n }}\n >\n <Chip\n label={visible ? 'Hide Saved Seed Phrase' : 'Reveal Saved Seed Phrase'}\n onClick={() => setVisible(!visible)}\n sx={{ alignSelf: 'center' }}\n />\n {visible\n ? (\n <>\n {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 {...props}\n />\n </>\n )\n : null}\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 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 seedPhrase?: string\n}\n\nexport const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({\n changeSeedPhrase, seedPhrase, ...props\n}) => {\n return (\n <SeedPhraseProvider\n seedPhrase={seedPhrase}\n handleChangeSeedPhrase={changeSeedPhrase}\n open={props.open}\n saveCallback={() => props.onClose?.({}, 'escapeKeyDown')}\n >\n <SeedPhraseDialogInner {...props} />\n </SeedPhraseProvider>\n )\n}\n\nexport const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = (props) => {\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 id=\"alert-dialog-title\">\n Update Your Seed Phrase\n {' '}\n <SeedPhraseIconButton />\n </DialogTitle>\n <DialogContent sx={{\n display: 'flex', flexDirection: 'column', rowGap: 2,\n }}\n >\n <NewPhraseTextField>\n <FormLabel>\n <PhraseHeaderBox conditional={validPhrase}>New Seed Phrase</PhraseHeaderBox>\n </FormLabel>\n </NewPhraseTextField>\n <PhraseDialogActions />\n {seedPhrase\n ? <SavedPhraseTextField />\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 return await wallet?.derivePath?.(`${index ?? 0}'\\0`)\n } else if (rootWallet) {\n return await rootWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\\0`)\n }\n }\n } catch (ex) {\n const error = ex as Error\n console.error(error.message)\n setError(error)\n }\n }, [index, wallet, 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/account'\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?: Uint8Array | 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 { HDWallet } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\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'\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 = 0, 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 // eslint-disable-next-line @eslint-react/no-nested-components\n const Item: React.FC = () => {\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 return <Item />\n }}\n value={activeAccountIndex}\n onChange={event => setActiveAccountIndex?.(Number.parseInt(`${event.target.value}`))}\n size={size}\n variant={variant}\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n // eslint-disable-next-line @eslint-react/no-nested-components\n const Item: React.FC = () => {\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\n return <Item key={index} />\n })}\n </SelectEx>\n )\n : <CircularProgress size={24} />}\n </>\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":"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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","Provider","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","Provider","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","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","Chip","FormControl","FormLabel","TextField","React","useState","SavedPhraseTextField","fullWidth","showPhraseHeader","props","validSeedPhrase","seedPhrase","useSeedPhrase","visible","setVisible","useState","React","FormControl","size","sx","display","flexDirection","rowGap","Chip","label","onClick","alignSelf","FormLabel","PhraseHeaderBox","conditional","TextField","defaultValue","disabled","error","helperText","InvalidPhraseTypography","maxRows","Number","POSITIVE_INFINITY","multiline","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","seedPhrase","props","React","SeedPhraseProvider","handleChangeSeedPhrase","open","saveCallback","onClose","SeedPhraseDialogInner","overwriteWarning","validPhrase","useSeedPhrase","Dialog","aria-labelledby","aria-describedby","fullWidth","maxWidth","DialogTitle","id","SeedPhraseIconButton","DialogContent","sx","display","flexDirection","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","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","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","Item","selectedAccount","useWallet","path","toString","wallet","customName","address","favorite","MenuItem","value","sx","minHeight","paddingBottom","paddingTop","AddressRenderRowBox","disableSharedRef","flexGrow","name","onChange","event","Number","parseInt","target","index","account","key","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/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 variant=\"outlined\" onClick={handleSave}>\n Save\n </Button>\n </DialogActions>\n )\n}\n","import { createContextEx } from '@xyo-network/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'\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 = 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.Provider\n value={value}\n >\n {children}\n </SeedPhraseContext.Provider>\n )\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { SeedPhraseContext } from './Context.ts'\n\nexport const useSeedPhrase = () => useContextEx(SeedPhraseContext, 'SeedPhrase', true)\n","import { createContextEx } from '@xyo-network/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'\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 = 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.Provider\n value={value}\n {...props}\n >\n {children}\n </WalletContext.Provider>\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { useContextEx, useProvided } from '@xyo-network/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=\"outlined\" 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} 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 fullWidth, showCopyButton, showPhraseHeader, visible: visibleProp, ...props\n}) => {\n const { validSeedPhrase, seedPhrase } = useSeedPhrase()\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={visible ? 'Hide Saved Seed Phrase' : 'Reveal Saved Seed Phrase'}\n onClick={() => setVisible(!visible)}\n sx={{ alignSelf: 'center' }}\n />\n {showCopyButton && visible\n ? (\n <Tooltip title={copied ? 'Copied!' : 'Copy'}>\n <IconButton onClick={() => void onCopyPhrase()}>\n <ContentCopy fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )\n : null}\n </FlexRow>\n {visible\n ? (\n <>\n {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 {...props}\n />\n </>\n )\n : null}\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 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 seedPhrase?: string\n showCopyButton?: boolean\n}\n\nexport const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({\n changeSeedPhrase, seedPhrase, ...props\n}) => {\n return (\n <SeedPhraseProvider\n seedPhrase={seedPhrase}\n handleChangeSeedPhrase={changeSeedPhrase}\n open={props.open}\n saveCallback={() => props.onClose?.({}, 'escapeKeyDown')}\n >\n <SeedPhraseDialogInner {...props} />\n </SeedPhraseProvider>\n )\n}\n\nexport const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = ({ showCopyButton, ...props }) => {\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 id=\"alert-dialog-title\">\n Update Your Seed Phrase\n {' '}\n <SeedPhraseIconButton />\n </DialogTitle>\n <DialogContent sx={{\n display: 'flex', flexDirection: 'column', rowGap: 2,\n }}\n >\n <NewPhraseTextField>\n <FormLabel>\n <PhraseHeaderBox conditional={validPhrase}>New Seed Phrase</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 return await wallet?.derivePath?.(`${index ?? 0}'\\0`)\n } else if (rootWallet) {\n return await rootWallet?.derivePath?.(`${index ?? activeAccountIndex ?? 0}'\\0`)\n }\n }\n } catch (ex) {\n const error = ex as Error\n console.error(error.message)\n setError(error)\n }\n }, [index, wallet, 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/account'\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 { HDWallet } from '@xyo-network/account'\nimport type { AccountInstance } from '@xyo-network/account-model'\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'\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 = 0, 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 // eslint-disable-next-line @eslint-react/no-nested-components\n const Item: React.FC = () => {\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 return <Item />\n }}\n value={activeAccountIndex}\n onChange={event => setActiveAccountIndex?.(Number.parseInt(`${event.target.value}`))}\n size={size}\n variant={variant}\n {...props}\n >\n {arrayRange(maxAccounts).map((index) => {\n // eslint-disable-next-line @eslint-react/no-nested-components\n const Item: React.FC = () => {\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\n return <Item key={index} />\n })}\n </SelectEx>\n )\n : <CircularProgress size={24} />}\n </>\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":"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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","Provider","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","Provider","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","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","FlexRow","React","useMemo","useState","SavedPhraseTextField","fullWidth","showCopyButton","showPhraseHeader","visible","visibleProp","props","validSeedPhrase","seedPhrase","useSeedPhrase","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","Tooltip","title","IconButton","ContentCopy","fontSize","FormLabel","PhraseHeaderBox","conditional","TextField","defaultValue","disabled","helperText","InvalidPhraseTypography","maxRows","Number","POSITIVE_INFINITY","multiline","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","seedPhrase","props","React","SeedPhraseProvider","handleChangeSeedPhrase","open","saveCallback","onClose","SeedPhraseDialogInner","showCopyButton","overwriteWarning","validPhrase","useSeedPhrase","Dialog","aria-labelledby","aria-describedby","fullWidth","maxWidth","DialogTitle","id","SeedPhraseIconButton","DialogContent","sx","display","flexDirection","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","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","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","Item","selectedAccount","useWallet","path","toString","wallet","customName","address","favorite","MenuItem","value","sx","minHeight","paddingBottom","paddingTop","AddressRenderRowBox","disableSharedRef","flexGrow","name","onChange","event","Number","parseInt","target","index","account","key","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": "4.2.
|
|
3
|
+
"version": "4.2.13",
|
|
4
4
|
"description": "Common React library for all XYO projects that use React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xyo",
|
|
@@ -43,38 +43,39 @@
|
|
|
43
43
|
"lint-pkg": "npmPkgJsonLint ."
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@scure/bip39": "^1.
|
|
47
|
-
"@xylabs/eth-address": "^4.4.
|
|
48
|
-
"@xylabs/
|
|
49
|
-
"@xylabs/react-
|
|
50
|
-
"@xylabs/react-
|
|
51
|
-
"@xylabs/react-
|
|
52
|
-
"@xylabs/react-
|
|
53
|
-
"@xylabs/react-
|
|
54
|
-
"@xylabs/react-
|
|
55
|
-
"@xylabs/react-
|
|
56
|
-
"@xylabs/react-
|
|
57
|
-
"@
|
|
58
|
-
"@xyo-network/account
|
|
59
|
-
"@xyo-network/
|
|
60
|
-
"@xyo-network/react-
|
|
61
|
-
"@xyo-network/react-
|
|
62
|
-
"@xyo-network/
|
|
46
|
+
"@scure/bip39": "^1.5.0",
|
|
47
|
+
"@xylabs/eth-address": "^4.4.25",
|
|
48
|
+
"@xylabs/object": "^4.4.25",
|
|
49
|
+
"@xylabs/react-button": "^5.3.13",
|
|
50
|
+
"@xylabs/react-crypto": "^5.3.13",
|
|
51
|
+
"@xylabs/react-flexbox": "^5.3.13",
|
|
52
|
+
"@xylabs/react-hooks": "^5.3.13",
|
|
53
|
+
"@xylabs/react-identicon": "^5.3.13",
|
|
54
|
+
"@xylabs/react-number-status": "^5.3.13",
|
|
55
|
+
"@xylabs/react-promise": "^5.3.13",
|
|
56
|
+
"@xylabs/react-quick-tip-button": "^5.3.13",
|
|
57
|
+
"@xylabs/react-select": "^5.3.13",
|
|
58
|
+
"@xyo-network/account": "^3.5.2",
|
|
59
|
+
"@xyo-network/account-model": "^3.5.2",
|
|
60
|
+
"@xyo-network/react-address-render": "^4.2.13",
|
|
61
|
+
"@xyo-network/react-network": "^4.2.13",
|
|
62
|
+
"@xyo-network/react-shared": "^4.2.13",
|
|
63
|
+
"@xyo-network/wallet-model": "^3.5.2",
|
|
63
64
|
"async-mutex": "^0.5.0"
|
|
64
65
|
},
|
|
65
66
|
"devDependencies": {
|
|
66
|
-
"@mui/icons-material": "^6.1
|
|
67
|
-
"@mui/material": "^6.1
|
|
68
|
-
"@mui/styles": "^6.1
|
|
69
|
-
"@storybook/react": "^8.4.
|
|
70
|
-
"@xylabs/ts-scripts-yarn3": "^4.2.
|
|
71
|
-
"@xylabs/tsconfig-react": "^4.2.
|
|
72
|
-
"@xyo-network/react-storybook": "^4.2.
|
|
67
|
+
"@mui/icons-material": "^6.2.1",
|
|
68
|
+
"@mui/material": "^6.2.1",
|
|
69
|
+
"@mui/styles": "^6.2.1",
|
|
70
|
+
"@storybook/react": "^8.4.7",
|
|
71
|
+
"@xylabs/ts-scripts-yarn3": "^4.2.6",
|
|
72
|
+
"@xylabs/tsconfig-react": "^4.2.6",
|
|
73
|
+
"@xyo-network/react-storybook": "^4.2.13",
|
|
73
74
|
"react": "^18.3.1",
|
|
74
75
|
"react-dom": "^18.3.1",
|
|
75
|
-
"react-router-dom": "^
|
|
76
|
-
"storybook": "^8.4.
|
|
77
|
-
"typescript": "^5.
|
|
76
|
+
"react-router-dom": "^7.0.2",
|
|
77
|
+
"storybook": "^8.4.7",
|
|
78
|
+
"typescript": "^5.7.2"
|
|
78
79
|
},
|
|
79
80
|
"peerDependencies": {
|
|
80
81
|
"@mui/icons-material": "^6",
|
|
@@ -23,7 +23,7 @@ const Template: StoryFn<typeof SeedPhraseDialog> = (props) => {
|
|
|
23
23
|
</Button>
|
|
24
24
|
<Typography>Seed Phrase</Typography>
|
|
25
25
|
<code>{seedPhrase}</code>
|
|
26
|
-
<SeedPhraseDialog seedPhrase={seedPhrase} changeSeedPhrase={setSeedPhrase} {...props} open={open} onClose={() => setOpen(false)} />
|
|
26
|
+
<SeedPhraseDialog showCopyButton seedPhrase={seedPhrase} changeSeedPhrase={setSeedPhrase} {...props} open={open} onClose={() => setOpen(false)} />
|
|
27
27
|
</FlexCol>
|
|
28
28
|
)
|
|
29
29
|
}
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
export interface SeedPhraseDialogProps extends DialogProps {
|
|
19
19
|
changeSeedPhrase?: (value: string) => void
|
|
20
20
|
seedPhrase?: string
|
|
21
|
+
showCopyButton?: boolean
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({
|
|
@@ -35,7 +36,7 @@ export const SeedPhraseDialog: React.FC<SeedPhraseDialogProps> = ({
|
|
|
35
36
|
)
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
export const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = (props) => {
|
|
39
|
+
export const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = ({ showCopyButton, ...props }) => {
|
|
39
40
|
const {
|
|
40
41
|
overwriteWarning, seedPhrase, validPhrase,
|
|
41
42
|
} = useSeedPhrase()
|
|
@@ -58,7 +59,7 @@ export const SeedPhraseDialogInner: React.FC<SeedPhraseDialogProps> = (props) =>
|
|
|
58
59
|
</NewPhraseTextField>
|
|
59
60
|
<PhraseDialogActions />
|
|
60
61
|
{seedPhrase
|
|
61
|
-
? <SavedPhraseTextField />
|
|
62
|
+
? <SavedPhraseTextField showCopyButton={showCopyButton} />
|
|
62
63
|
: null}
|
|
63
64
|
{overwriteWarning
|
|
64
65
|
? <OverwriteWarning />
|
|
@@ -1,23 +1,45 @@
|
|
|
1
|
+
import { ContentCopy } from '@mui/icons-material'
|
|
1
2
|
import type { StandardTextFieldProps } from '@mui/material'
|
|
2
3
|
import {
|
|
3
|
-
Chip, FormControl, FormLabel, TextField,
|
|
4
|
+
Chip, FormControl, FormLabel, IconButton, TextField,
|
|
5
|
+
Tooltip,
|
|
4
6
|
} from '@mui/material'
|
|
5
|
-
import
|
|
7
|
+
import { FlexRow } from '@xylabs/react-flexbox'
|
|
8
|
+
import React, { useMemo, useState } from 'react'
|
|
6
9
|
|
|
7
10
|
import { useSeedPhrase } from '../../../../../contexts/index.ts'
|
|
8
11
|
import { InvalidPhraseTypography, PhraseHeaderBox } from './validation-messages/index.ts'
|
|
9
12
|
|
|
10
13
|
export interface SavedPhraseTextFieldProps extends StandardTextFieldProps {
|
|
11
14
|
fullWidth?: boolean
|
|
15
|
+
showCopyButton?: boolean
|
|
12
16
|
showPhraseHeader?: boolean
|
|
17
|
+
visible?: boolean
|
|
13
18
|
}
|
|
14
19
|
|
|
15
20
|
export const SavedPhraseTextField: React.FC<SavedPhraseTextFieldProps> = ({
|
|
16
|
-
fullWidth, showPhraseHeader, ...props
|
|
21
|
+
fullWidth, showCopyButton, showPhraseHeader, visible: visibleProp, ...props
|
|
17
22
|
}) => {
|
|
18
23
|
const { validSeedPhrase, seedPhrase } = useSeedPhrase()
|
|
19
24
|
|
|
20
|
-
const [visible, setVisible] = useState(
|
|
25
|
+
const [visible, setVisible] = useState(visibleProp)
|
|
26
|
+
|
|
27
|
+
useMemo(() => {
|
|
28
|
+
setVisible(visibleProp)
|
|
29
|
+
}, [visibleProp])
|
|
30
|
+
|
|
31
|
+
const [copied, setCopied] = useState(false)
|
|
32
|
+
const onCopyPhrase = async () => {
|
|
33
|
+
if (seedPhrase) {
|
|
34
|
+
try {
|
|
35
|
+
await navigator.clipboard.writeText(seedPhrase)
|
|
36
|
+
setCopied(true)
|
|
37
|
+
setTimeout(() => setCopied(false), 2000)
|
|
38
|
+
} catch (e) {
|
|
39
|
+
console.error('Error copying resolvedSelectedAddress to clipboard', e)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
21
43
|
|
|
22
44
|
return (
|
|
23
45
|
<FormControl
|
|
@@ -27,11 +49,22 @@ export const SavedPhraseTextField: React.FC<SavedPhraseTextFieldProps> = ({
|
|
|
27
49
|
display: 'flex', flexDirection: 'column', rowGap: 1,
|
|
28
50
|
}}
|
|
29
51
|
>
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
52
|
+
<FlexRow gap={0.5}>
|
|
53
|
+
<Chip
|
|
54
|
+
label={visible ? 'Hide Saved Seed Phrase' : 'Reveal Saved Seed Phrase'}
|
|
55
|
+
onClick={() => setVisible(!visible)}
|
|
56
|
+
sx={{ alignSelf: 'center' }}
|
|
57
|
+
/>
|
|
58
|
+
{showCopyButton && visible
|
|
59
|
+
? (
|
|
60
|
+
<Tooltip title={copied ? 'Copied!' : 'Copy'}>
|
|
61
|
+
<IconButton onClick={() => void onCopyPhrase()}>
|
|
62
|
+
<ContentCopy fontSize="small" />
|
|
63
|
+
</IconButton>
|
|
64
|
+
</Tooltip>
|
|
65
|
+
)
|
|
66
|
+
: null}
|
|
67
|
+
</FlexRow>
|
|
35
68
|
{visible
|
|
36
69
|
? (
|
|
37
70
|
<>
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
// Inspired from https://github.com/bsonntag/react-use-promise
|
|
2
2
|
|
|
3
|
+
import type { EnumValue } from '@xylabs/object'
|
|
4
|
+
import { Enum } from '@xylabs/object'
|
|
3
5
|
import { Mutex } from 'async-mutex'
|
|
4
6
|
import type { DependencyList } from 'react'
|
|
5
7
|
import {
|
|
6
8
|
useEffect, useMemo, useState,
|
|
7
9
|
} from 'react'
|
|
8
10
|
|
|
9
|
-
export
|
|
10
|
-
pending
|
|
11
|
-
rejected
|
|
12
|
-
resolved
|
|
13
|
-
}
|
|
11
|
+
export const State = Enum({
|
|
12
|
+
pending: 'pending',
|
|
13
|
+
rejected: 'rejected',
|
|
14
|
+
resolved: 'resolved',
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
export type State = EnumValue<typeof State>
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* usePromise -
|