diff --git a/apps/extension/src/ui/api/api.ts b/apps/extension/src/ui/api/api.ts index 04848fe6af..28ff194479 100644 --- a/apps/extension/src/ui/api/api.ts +++ b/apps/extension/src/ui/api/api.ts @@ -147,8 +147,6 @@ export const api: MessageTypes = { messageService.sendMessage("pri(accounts.export)", { address, password, exportPw }), accountExportPrivateKey: (address, password) => messageService.sendMessage("pri(accounts.export.pk)", { address, password }), - accountExportAll: (password, exportPw) => - messageService.sendMessage("pri(accounts.export.all)", { password, exportPw }), accountRename: (address, name) => messageService.sendMessage("pri(accounts.rename)", { address, name }), accountExternalSetIsPortfolio: (address, isPortfolio) => diff --git a/apps/extension/src/ui/api/types.ts b/apps/extension/src/ui/api/types.ts index e26f56e955..6f8c74e05d 100644 --- a/apps/extension/src/ui/api/types.ts +++ b/apps/extension/src/ui/api/types.ts @@ -1,7 +1,6 @@ import type { KeyringPair$Json } from "@polkadot/keyring/types" -import type { KeyringPairs$Json } from "@polkadot/ui-keyring/types" -import type { KeypairType } from "@polkadot/util-crypto/types" import type { HexString } from "@polkadot/util/types" +import { KeypairType } from "@polkadot/util-crypto/types" import { BalanceJson } from "@talismn/balances" import { Chain, @@ -171,10 +170,6 @@ export default interface MessageTypes { password: string, exportPw: string, ) => Promise<{ exportedJson: KeyringPair$Json }> - accountExportAll: ( - password: string, - exportPw: string, - ) => Promise<{ exportedJson: KeyringPairs$Json }> accountExportPrivateKey: (address: string, password: string) => Promise accountRename: (address: string, name: string) => Promise validateDerivationPath: (derivationPath: string, type: AccountAddressType) => Promise diff --git a/apps/extension/src/ui/apps/dashboard/layout/DashboardLayout.tsx b/apps/extension/src/ui/apps/dashboard/layout/DashboardLayout.tsx index c7d105f378..e0baca4011 100644 --- a/apps/extension/src/ui/apps/dashboard/layout/DashboardLayout.tsx +++ b/apps/extension/src/ui/apps/dashboard/layout/DashboardLayout.tsx @@ -36,7 +36,7 @@ export const DashboardLayout: FC<{ {/* Main area */} -
+
diff --git a/apps/extension/src/ui/apps/dashboard/routes/Settings/Accounts.tsx b/apps/extension/src/ui/apps/dashboard/routes/Settings/Accounts.tsx index 4d93c943fc..df98f7892a 100644 --- a/apps/extension/src/ui/apps/dashboard/routes/Settings/Accounts.tsx +++ b/apps/extension/src/ui/apps/dashboard/routes/Settings/Accounts.tsx @@ -36,7 +36,7 @@ const Content = () => { return ( <> - + diff --git a/apps/extension/src/ui/domains/Account/AccountAdd/AccountAddJson/ImportJsonAccountsForm.tsx b/apps/extension/src/ui/domains/Account/AccountAdd/AccountAddJson/ImportJsonAccountsForm.tsx index d89349b95a..d7d714469e 100644 --- a/apps/extension/src/ui/domains/Account/AccountAdd/AccountAddJson/ImportJsonAccountsForm.tsx +++ b/apps/extension/src/ui/domains/Account/AccountAdd/AccountAddJson/ImportJsonAccountsForm.tsx @@ -52,14 +52,8 @@ const JsonAccount: FC<{ account: JsonImportAccount; onSelect: (select: boolean) genesisHash={account.genesisHash} />
-
-
{account.name}
-
- -
+
+ {account.name}
{shortenAddress(account.address)}
diff --git a/apps/extension/src/ui/domains/Account/ExportAllAccountsModal.tsx b/apps/extension/src/ui/domains/Account/ExportAllAccountsModal.tsx deleted file mode 100644 index 4724fe3d26..0000000000 --- a/apps/extension/src/ui/domains/Account/ExportAllAccountsModal.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import { yupResolver } from "@hookform/resolvers/yup" -import { FC, useCallback, useEffect, useMemo } from "react" -import { useForm } from "react-hook-form" -import { Trans, useTranslation } from "react-i18next" -import { Button, FormFieldContainer, FormFieldInputText, Modal, ModalDialog } from "talisman-ui" -import * as yup from "yup" - -import { CapsLockWarningMessage } from "@talisman/components/CapsLockWarningMessage" -import { PasswordStrength } from "@talisman/components/PasswordStrength" -import downloadJson from "@talisman/util/downloadJson" -import { api } from "@ui/api" - -import { PasswordUnlock, usePasswordUnlock } from "./PasswordUnlock" - -export const ExportAllAccountsModal: FC<{ isOpen: boolean; onClose: () => void }> = ({ - isOpen, - onClose, -}) => { - const { t } = useTranslation() - - return ( - - - - {t("Please confirm your password to export your accounts.")} -
- } - > - - - - - ) -} - -type FormData = { - newPw: string - newPwConfirm: string -} - -const ExportAllAccountsForm = ({ onSuccess }: { onSuccess?: () => void }) => { - const { t } = useTranslation() - const { password } = usePasswordUnlock() - - const schema = useMemo( - () => - yup - .object({ - newPw: yup - .string() - .required(" ") - .min(6, t("Password must be at least 6 characters long")), - newPwConfirm: yup - .string() - .required(" ") - .oneOf([yup.ref("newPw")], t("Passwords must match!")), - }) - .required(), - [t], - ) - - const { - register, - handleSubmit, - formState: { errors, isValid, isSubmitting }, - watch, - setError, - setValue, - } = useForm({ - mode: "onChange", - resolver: yupResolver(schema), - }) - - const newPwWatch = watch("newPw") - - const submit = useCallback( - async ({ newPw }: FormData) => { - if (!password) return - try { - const { exportedJson } = await api.accountExportAll(password, newPw) - downloadJson(exportedJson, "talisman-accounts") - onSuccess && onSuccess() - } catch (err) { - setError("newPwConfirm", { - message: (err as Error)?.message ?? "", - }) - } - }, - [setError, onSuccess, password], - ) - - useEffect(() => { - return () => { - setValue("newPw", "") - setValue("newPwConfirm", "") - } - }, [setValue]) - - if (!password) return null - return ( -
-
-

- - Set a password for your JSON export. We strongly suggest using a{" "} - different password from your Talisman wallet - password. This avoids exposing your Talisman password to other wallets or applications. - -

- -
-
-
- {t("Password strength:")} -
-
- -
-
- - - - - - -
- -
-
- ) -} diff --git a/apps/extension/src/ui/domains/Account/ManageAccounts/ManageAccountsToolbar.tsx b/apps/extension/src/ui/domains/Account/ManageAccounts/ManageAccountsToolbar.tsx index 458338179d..560c0c35e7 100644 --- a/apps/extension/src/ui/domains/Account/ManageAccounts/ManageAccountsToolbar.tsx +++ b/apps/extension/src/ui/domains/Account/ManageAccounts/ManageAccountsToolbar.tsx @@ -1,28 +1,17 @@ -import { FolderPlusIcon, MoreHorizontalIcon, PlusIcon } from "@talismn/icons" +import { FolderPlusIcon, PlusIcon } from "@talismn/icons" import { classNames } from "@talismn/util" import { FC, ReactNode, useCallback } from "react" import { useTranslation } from "react-i18next" import { useNavigate } from "react-router-dom" -import { - ContextMenu, - ContextMenuContent, - ContextMenuItem, - ContextMenuTrigger, - Tooltip, - TooltipContent, - TooltipTrigger, - useOpenClose, -} from "talisman-ui" +import { Tooltip, TooltipContent, TooltipTrigger } from "talisman-ui" import { SearchInput } from "@talisman/components/SearchInput" import { api } from "@ui/api" import { AnalyticsPage } from "@ui/api/analytics" import { useNewFolderModal } from "@ui/domains/Account/NewFolderModal" import { PortfolioToolbarButton } from "@ui/domains/Portfolio/PortfolioToolbarButton" -import { useAccounts } from "@ui/state" import { IS_POPUP } from "@ui/util/constants" -import { ExportAllAccountsModal } from "../ExportAllAccountsModal" import { useManageAccounts } from "./ManageAccountsProvider" export const ManageAccountsToolbar: FC<{ @@ -65,7 +54,6 @@ export const ManageAccountsToolbar: FC<{
-
) } @@ -91,31 +79,3 @@ const ToolbarButton: FC<{ {IS_POPUP && !label && {label}} ) - -const AccountsContextMenu = () => { - const { t } = useTranslation() - const accounts = useAccounts() - const { isOpen: isOpenExportAll, open: openExportAll, close: closeExportAll } = useOpenClose() - - if (!accounts.length) return null - - return ( - <> - - - - - - {t("Export all")} - - - - - ) -} diff --git a/apps/extension/src/ui/domains/Portfolio/PortfolioToolbarButton.tsx b/apps/extension/src/ui/domains/Portfolio/PortfolioToolbarButton.tsx index ba2cb42e78..bfe6dc6650 100644 --- a/apps/extension/src/ui/domains/Portfolio/PortfolioToolbarButton.tsx +++ b/apps/extension/src/ui/domains/Portfolio/PortfolioToolbarButton.tsx @@ -11,8 +11,8 @@ export const PortfolioToolbarButton = forwardRef< type="button" {...props} className={classNames( - "bg-grey-900 hover:bg-grey-800 text-body-secondary border-content flex items-center justify-center rounded-sm", - "focus-visible:border-grey-700 size-16 border border-transparent ring-transparent", + "bg-grey-900 hover:bg-grey-800 text-body-secondary flex items-center justify-center rounded-sm", + "border-grey-700 size-16 ring-transparent focus-visible:border", props.className, )} /> diff --git a/packages/extension-core/src/domains/accounts/handler.ts b/packages/extension-core/src/domains/accounts/handler.ts index bd0a6052ac..c1bea951ba 100644 --- a/packages/extension-core/src/domains/accounts/handler.ts +++ b/packages/extension-core/src/domains/accounts/handler.ts @@ -1,4 +1,3 @@ -import { ResponseAccountsExport } from "@polkadot/extension-base/background/types" import { createPair, encodeAddress } from "@polkadot/keyring" import { KeyringPair$Meta } from "@polkadot/keyring/types" import keyring from "@polkadot/ui-keyring" @@ -20,7 +19,6 @@ import type { RequestAccountCreateSignet, RequestAccountCreateWatched, RequestAccountExport, - RequestAccountExportAll, RequestAccountExportPrivateKey, RequestAccountExternalSetIsPortfolio, RequestAccountForget, @@ -510,19 +508,6 @@ export default class AccountsHandler extends ExtensionHandler { return val } - private async accountExportAll({ - password, - exportPw, - }: RequestAccountExportAll): Promise { - await this.stores.password.checkPassword(password) - - const addresses = keyring.getPairs().map(({ address }) => address) - - const exportedJson = await keyring.backupAccounts(addresses, exportPw) - - return { exportedJson } - } - private async accountExportPrivateKey({ address, password, @@ -673,8 +658,6 @@ export default class AccountsHandler extends ExtensionHandler { return this.accountForget(request as RequestAccountForget) case "pri(accounts.export)": return this.accountExport(request as RequestAccountExport) - case "pri(accounts.export.all)": - return this.accountExportAll(request as RequestAccountExportAll) case "pri(accounts.export.pk)": return this.accountExportPrivateKey(request as RequestAccountExportPrivateKey) case "pri(accounts.rename)": diff --git a/packages/extension-core/src/domains/accounts/types.ts b/packages/extension-core/src/domains/accounts/types.ts index 21694a069b..a50fe8ff6c 100644 --- a/packages/extension-core/src/domains/accounts/types.ts +++ b/packages/extension-core/src/domains/accounts/types.ts @@ -3,7 +3,6 @@ import type { RequestAccountCreateHardware, RequestAccountSubscribe, ResponseAccountExport, - ResponseAccountsExport, } from "@polkadot/extension-base/background/types" import { KeyringPair$Json } from "@polkadot/keyring/types" import { KeypairType } from "@polkadot/util-crypto/types" @@ -16,7 +15,17 @@ import { Address } from "../../types/base" export type { ResponseAccountExport, AccountJson } export type { RequestAccountsCatalogAction } from "./helpers.catalog" -export type { RequestAccountList } from "@polkadot/extension-base/background/types" +export type { + RequestAccountList, + RequestAccountBatchExport, + RequestAccountChangePassword, + RequestAccountCreateSuri, + RequestAccountEdit, + RequestAccountShow, + RequestAccountTie, + RequestAccountValidate, + ResponseJsonGetAccountInfo, +} from "@polkadot/extension-base/background/types" // account types ---------------------------------- @@ -200,11 +209,6 @@ export interface RequestAccountExport { exportPw: string } -export interface RequestAccountExportAll { - password: string - exportPw: string -} - export interface RequestAccountExportPrivateKey { address: string password: string @@ -270,7 +274,6 @@ export interface AccountsMessages { "pri(accounts.create.signet)": [RequestAccountCreateSignet, string] "pri(accounts.forget)": [RequestAccountForget, boolean] "pri(accounts.export)": [RequestAccountExport, ResponseAccountExport] - "pri(accounts.export.all)": [RequestAccountExportAll, ResponseAccountsExport] "pri(accounts.export.pk)": [RequestAccountExportPrivateKey, string] "pri(accounts.rename)": [RequestAccountRename, boolean] "pri(accounts.external.setIsPortfolio)": [RequestAccountExternalSetIsPortfolio, boolean] diff --git a/packages/extension-core/src/handlers/index.ts b/packages/extension-core/src/handlers/index.ts index 999b7a11d7..c6a269cf2b 100644 --- a/packages/extension-core/src/handlers/index.ts +++ b/packages/extension-core/src/handlers/index.ts @@ -18,7 +18,6 @@ const OBFUSCATE_LOG_MESSAGES: MessageTypes[] = [ "pri(app.changePassword)", "pri(app.changePassword.subscribe)", "pri(accounts.export)", - "pri(accounts.export.all)", "pri(accounts.export.pk)", "pri(accounts.create)", "pri(accounts.create.suri)", diff --git a/packages/talisman-ui/src/components/Button.tsx b/packages/talisman-ui/src/components/Button.tsx index 9a67913e48..d1c4016efc 100644 --- a/packages/talisman-ui/src/components/Button.tsx +++ b/packages/talisman-ui/src/components/Button.tsx @@ -35,22 +35,22 @@ export const Button: FC = ({ if (disabled) return classNames( - "bg-black-tertiary text-body-disabled ", + "bg-black-tertiary text-body-disabled", effectiveColor === "default" ? " border" : "", ) switch (effectiveColor) { case "default": - return "bg-transparent text-white border focus:border-2 border-white enabled:hover:bg-white enabled:hover:text-black focus:outline-none focus:border-white enabled:hover:active:bg-black enabled:hover:active:text-white" + return "bg-transparent text-white border border-white enabled:hover:bg-white enabled:hover:text-black focus:outline-none focus:ring-white focus:ring-2 enabled:hover:active:bg-black enabled:hover:active:text-white" case "primary": - return "bg-primary-500 text-black border-2 border-transparent focus:outline-none enabled:hover:bg-primary-700 focus:border-white enabled:hover:active:bg-primary" + return "bg-primary-500 text-black border border-transparent focus:outline-none enabled:hover:bg-primary-700 focus:ring-white focus:ring-2 enabled:hover:active:bg-primary" case "orange": - return "bg-orange-500 text-black border-2 border-transparent focus:outline-none enabled:hover:bg-orange/90 focus:border-white enabled:hover:active:bg-orange" + return "bg-orange-500 text-black border border-transparent focus:outline-none enabled:hover:bg-orange/90 focus:ring-white focus:ring-2 enabled:hover:active:bg-orange" case "red": - return "bg-brand-orange text-black border-2 border-transparent focus:outline-none enabled:hover:bg-brand-orange/90 focus:border-white enabled:hover:active:bg-brand-orange" + return "bg-brand-orange text-black border border-transparent focus:outline-none enabled:hover:bg-brand-orange/90 focus:ring-white focus:ring-2 enabled:hover:active:bg-brand-orange" } }, [color, disabled, primary]) diff --git a/packages/talisman-ui/src/components/Checkbox.tsx b/packages/talisman-ui/src/components/Checkbox.tsx index d8f5ed44c2..8de35eeaed 100644 --- a/packages/talisman-ui/src/components/Checkbox.tsx +++ b/packages/talisman-ui/src/components/Checkbox.tsx @@ -31,8 +31,8 @@ export const Checkbox = forwardRef( className={classNames( "form-checkbox rounded-xs border-body-secondary text-grey-800 h-[1.2em] w-[1.2em] cursor-pointer border bg-transparent", "checked:hover:border-body-secondary checked:active hover:border-white checked:active:focus-visible:border-transparent", - "active:bg-grey-700 enabled:focus-visible:border-white", - "[&.form-checkbox:]:focus:!ring-0 !outline-0 !ring-0 [&.form-checkbox]:focus:!outline-0 [&.form-checkbox]:focus:!outline-offset-0 [&.form-checkbox]:focus:ring-offset-0", + "active:bg-grey-700", + "focus-visible:border-transparent focus-visible:shadow-none focus-visible:outline-offset-0 focus-visible:outline-white focus-visible:ring-0", "disabled:checked:bg-grey-700 disabled:border-body-disabled disabled:cursor-default disabled:bg-transparent disabled:checked:border-transparent", )} ref={ref} diff --git a/packages/talisman-ui/src/components/FormFieldInputText.tsx b/packages/talisman-ui/src/components/FormFieldInputText.tsx index cfd975c39c..f660f7cfa1 100644 --- a/packages/talisman-ui/src/components/FormFieldInputText.tsx +++ b/packages/talisman-ui/src/components/FormFieldInputText.tsx @@ -24,7 +24,7 @@ export const FormFieldInputContainer: FC = ({
= ({ (