From 9bb455e9a92c9c8945a8bfb0bfa2c455b016c679 Mon Sep 17 00:00:00 2001
From: Inokentii Mazhara
Date: Tue, 24 Sep 2024 22:23:47 +0300
Subject: [PATCH] TW-1542: Apply design for settings menu (#1199)
* TW-1555 Update some design and fix some bugs
* TW-1555 Make some modals close after their backdrop is clicked
* TW-1542 Resolve merge conflicts
* TW-1542 Revert harmful changes
* TW-1542 Remove unused components
* TW-1542 Implement new Settings menu design
* TW-1542 Remove some unused translations
* TW-1542 Fix find-deadcode errors
* TW-1542 Add changes from comments
* TW-1542 Move localStorage clearing to frontend
* TW-1542 Update a label
* TW-1555 Some more bugfixes
* TW-1555 Remove some commented out code
* TW-1555 Refactor setting classes
Co-authored-by: Alex
* TW-1555 Fix prettier problem
* TW-1555 Agree styles for app content wrapper and action modals
* TW-1542 Change a label
* TW-1542 Fix font size for page header
---------
Co-authored-by: Alex
---
e2e/src/page-objects/index.ts | 2 -
.../page-objects/pages/reveal-secrets.page.ts | 16 -
public/_locales/de/messages.json | 29 --
public/_locales/en/messages.json | 64 ++--
public/_locales/en_GB/messages.json | 26 --
public/_locales/fr/messages.json | 26 --
public/_locales/ja/messages.json | 26 --
public/_locales/ko/messages.json | 26 --
public/_locales/pt/messages.json | 29 --
public/_locales/ru/messages.json | 3 -
public/_locales/tr/messages.json | 29 --
public/_locales/uk/messages.json | 28 +-
public/_locales/zh_CN/messages.json | 23 --
public/_locales/zh_TW/messages.json | 26 --
.../SettingsCell.tsx} | 17 +-
src/app/atoms/SettingsCellGroup.tsx | 20 ++
src/app/icons/additional.svg | 6 -
src/app/icons/apps.svg | 15 -
src/app/icons/base/additional.svg | 6 +
src/app/icons/base/addressbook.svg | 6 +
src/app/icons/base/browse.svg | 4 +-
src/app/icons/base/exit.svg | 7 +
src/app/icons/base/info.svg | 6 +
src/app/icons/base/link.svg | 6 +
src/app/icons/base/refresh.svg | 6 +
src/app/icons/canny.svg | 19 -
src/app/icons/helpcrunch.svg | 17 -
src/app/icons/monochrome/extension.svg | 8 -
src/app/icons/monochrome/help.svg | 10 -
src/app/icons/monochrome/key.svg | 9 -
src/app/icons/monochrome/people.svg | 8 -
src/app/icons/monochrome/sticker.svg | 9 -
src/app/icons/monochrome/sync.svg | 10 -
src/app/layouts/PageLayout/DefaultHeader.tsx | 4 +-
src/app/pages/AccountSettings/index.tsx | 72 ++--
src/app/pages/Settings/Settings.selectors.ts | 7 +-
src/app/pages/Settings/Settings.tsx | 325 ++++++++----------
.../pages/Settings/reset-extension-modal.tsx | 88 +++++
.../templates/DAppSettings/DAppSettings.tsx | 2 +-
.../HelpAndCommunity/ResourceLink.tsx | 32 --
src/app/templates/HelpAndCommunity/index.tsx | 99 ------
.../templates/HelpAndCommunity/selectors.ts | 5 -
.../RevealSecrets/PasswordForRevealField.tsx | 73 ----
.../RevealSecrets/RevealPrivateKeys.tsx | 120 -------
.../RevealSecrets/RevealSecrets.selectors.ts | 6 -
.../RevealSecrets/RevealSeedPhrase.tsx | 71 ----
.../templates/RevealSecrets/SecretField.tsx | 67 ----
src/app/templates/RevealSecrets/index.ts | 2 -
src/lib/temple/back/actions.ts | 4 +
src/lib/temple/back/main.ts | 6 +
src/lib/temple/back/vault/index.ts | 6 +
src/lib/temple/back/vault/vault.test.ts | 18 +
src/lib/temple/front/client.ts | 14 +-
src/lib/temple/types.ts | 19 +-
src/lib/ui/utils.ts | 9 -
src/temple/front/index.ts | 1 -
src/temple/front/ready/index.ts | 2 -
yarn.lock | 22 +-
58 files changed, 448 insertions(+), 1168 deletions(-)
delete mode 100644 e2e/src/page-objects/pages/reveal-secrets.page.ts
rename src/app/{pages/AccountSettings/settings-cell.tsx => atoms/SettingsCell.tsx} (71%)
create mode 100644 src/app/atoms/SettingsCellGroup.tsx
delete mode 100644 src/app/icons/additional.svg
delete mode 100644 src/app/icons/apps.svg
create mode 100644 src/app/icons/base/additional.svg
create mode 100644 src/app/icons/base/addressbook.svg
create mode 100644 src/app/icons/base/exit.svg
create mode 100644 src/app/icons/base/info.svg
create mode 100644 src/app/icons/base/link.svg
create mode 100644 src/app/icons/base/refresh.svg
delete mode 100644 src/app/icons/canny.svg
delete mode 100644 src/app/icons/helpcrunch.svg
delete mode 100644 src/app/icons/monochrome/extension.svg
delete mode 100644 src/app/icons/monochrome/help.svg
delete mode 100644 src/app/icons/monochrome/key.svg
delete mode 100644 src/app/icons/monochrome/people.svg
delete mode 100644 src/app/icons/monochrome/sticker.svg
delete mode 100644 src/app/icons/monochrome/sync.svg
create mode 100644 src/app/pages/Settings/reset-extension-modal.tsx
delete mode 100644 src/app/templates/HelpAndCommunity/ResourceLink.tsx
delete mode 100644 src/app/templates/HelpAndCommunity/index.tsx
delete mode 100644 src/app/templates/HelpAndCommunity/selectors.ts
delete mode 100644 src/app/templates/RevealSecrets/PasswordForRevealField.tsx
delete mode 100644 src/app/templates/RevealSecrets/RevealPrivateKeys.tsx
delete mode 100644 src/app/templates/RevealSecrets/RevealSecrets.selectors.ts
delete mode 100644 src/app/templates/RevealSecrets/RevealSeedPhrase.tsx
delete mode 100644 src/app/templates/RevealSecrets/SecretField.tsx
delete mode 100644 src/app/templates/RevealSecrets/index.ts
diff --git a/e2e/src/page-objects/index.ts b/e2e/src/page-objects/index.ts
index 874df2410..17c6913b1 100644
--- a/e2e/src/page-objects/index.ts
+++ b/e2e/src/page-objects/index.ts
@@ -18,7 +18,6 @@ import { InternalConfirmationPage } from './pages/internal-confirmation.page';
import { ManualBackupModalPage } from './pages/modal/manual-backup-modal.page';
import { NewsletterModalPage } from './pages/modal/newsletter-modal.page';
import { OnRumModalPage } from './pages/modal/on-rum-modal.page';
-import { RevealSecretsPage } from './pages/reveal-secrets.page';
import { SendPage } from './pages/send.page';
import { SettingsPage } from './pages/settings.page';
import { setWalletPage } from './pages/setWalletPassword.page';
@@ -30,7 +29,6 @@ export const Pages = {
ImportExistingWallet: new ImportExistingWalletPage(),
SetWallet: new setWalletPage(),
Settings: new SettingsPage(),
- RevealSecrets: new RevealSecretsPage(),
UnlockScreen: new UnlockScreenPage(),
DelegateTab: new DelegateTab(),
DelegateForm: new DelegateFormPage(),
diff --git a/e2e/src/page-objects/pages/reveal-secrets.page.ts b/e2e/src/page-objects/pages/reveal-secrets.page.ts
deleted file mode 100644
index addfabbe1..000000000
--- a/e2e/src/page-objects/pages/reveal-secrets.page.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { RevealSecretsSelectors } from 'src/app/templates/RevealSecrets/RevealSecrets.selectors';
-
-import { Page } from '../../classes/page.class';
-import { createPageElement } from '../../utils/search.utils';
-
-export class RevealSecretsPage extends Page {
- revealButton = createPageElement(RevealSecretsSelectors.RevealButton);
- revealPasswordField = createPageElement(RevealSecretsSelectors.RevealPasswordInput);
- revealSecretsProtectedMask = createPageElement(RevealSecretsSelectors.RevealSecretsProtectedMask);
- revealSecretsValue = createPageElement(RevealSecretsSelectors.RevealSecretsValue);
-
- async isVisible() {
- await this.revealButton.waitForDisplayed();
- await this.revealPasswordField.waitForDisplayed();
- }
-}
diff --git a/public/_locales/de/messages.json b/public/_locales/de/messages.json
index aa432b03d..8787f2f01 100644
--- a/public/_locales/de/messages.json
+++ b/public/_locales/de/messages.json
@@ -34,10 +34,6 @@
}
}
},
- "authorizedDApps": {
- "message": "Autorisierte DApps",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "Klicken Sie auf das X-Symbol, um die Berechtigungen zurückzusetzen."
},
@@ -647,38 +643,19 @@
"revealPrivateKey": {
"message": "Privaten Schlüssel freigeben"
},
- "revealPrivateKeyDescription": {
- "message": "Auch bekannt als „Exportkonto“, zeigt den privaten Schlüssel für Ihr ausgewähltes Konto an."
- },
"revealSeedPhrase": {
"message": "Seed-Phrase freigeben"
},
- "revealSeedPhraseDescription": {
- "message": "Auch als \"Export-Wallet\" bekannt, Sie benötigen diese Seed-Phrase möglicherweise, um auf Ihre Wallet und Konten auf anderen Geräten zuzugreifen."
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "In diesem Abschnitt können Sie die Möglichkeit zur Interaktion mit dezentralen Anwendungen aktivieren, die Temple Wallet unterstützen."
- },
- "networksDescription": {
- "message": "In diesem Abschnitt können Sie benutzerdefinierte Tezos-Netzwerke hinzufügen oder löschen.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Konto entfernen"
},
"removeAccountDescription": {
"message": "Verwenden Sie diesen Abschnitt, um Ihr ausgewähltes Konto zu entfernen. Nur importierte Konten können entfernt werden."
},
- "about": {
- "message": "Über"
- },
- "aboutDescription": {
- "message": "Verwenden Sie diesen Abschnitt, um Metainformationen zu Temple Wallet anzuzeigen."
- },
"unlockWallet": {
"message": "Die Wallet entsperren"
},
@@ -1274,9 +1251,6 @@
"generalSettings": {
"message": "Allgemein"
},
- "generalSettingsDescription": {
- "message": "Hier können Sie die Spracheinstellungen und den Anzeigemodus verwalten."
- },
"swapNoun": {
"message": "Wechseln"
},
@@ -1895,9 +1869,6 @@
"addressBook": {
"message": "Adressbuch"
},
- "addressBookDescription": {
- "message": "Fügen Sie Ihre Kontakte hinzu, entfernen und verwalten Sie sie."
- },
"addNewContact": {
"message": "Neuer Kontakt"
},
diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json
index 7c21e0c4b..e6d42f6e0 100644
--- a/public/_locales/en/messages.json
+++ b/public/_locales/en/messages.json
@@ -51,15 +51,9 @@
}
}
},
- "authorizedDApps": {
- "message": "Authorized DApps",
- "description": "DApps = Decentralized Applications"
- },
- "advancedFeatures": {
- "message": "Advanced Features"
- },
- "advancedFeaturesDescription": {
- "message": "In this section you can customize additional Temple extension features"
+ "connectedDApps": {
+ "message": "Connected Dapps",
+ "description": "Dapps = Decentralized Applications"
},
"clickIconToResetPermissions": {
"message": "Click on the X icon to reset permissions."
@@ -703,6 +697,18 @@
"resetExtension": {
"message": "Reset Extension"
},
+ "resetExtensionModalTitle": {
+ "message": "Reset Extension?"
+ },
+ "resetExtensionModalDescription": {
+ "message": "Resetting will delete wallets, accounts and erase all data. Ensure your Seed Phrases and Private Keys are backed up to avoid permanent loss and recover access to assets later."
+ },
+ "resetPasswordInputLabel": {
+ "message": "Enter the password to confirm reset"
+ },
+ "reset": {
+ "message": "Reset"
+ },
"resetExtensionConfirmation": {
"message": "Are you sure you want to reset the Temple Wallet?\nAs a result, all your data will be deleted."
},
@@ -948,29 +954,16 @@
"revealPrivateKey": {
"message": "Reveal Private Key"
},
- "revealPrivateKeyDescription": {
- "message": "Also known as \"Export Account\", reveals private key for your selected account."
- },
"revealPrivateKeyPasswordLabel": {
"message": "Enter your password to reveal private key"
},
"revealSeedPhrase": {
"message": "Reveal Seed Phrase"
},
- "revealSeedPhraseDescription": {
- "message": "Also known as \"Export Wallet\", you may need this seed phrase to access your wallet and accounts on other devices."
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "In this section you can enable ability to interact with decentralized applications that support Temple Wallet."
- },
- "networksDescription": {
- "message": "In this section you can add or delete custom Tezos networks.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Remove Account"
},
@@ -980,8 +973,8 @@
"accountsManagement": {
"message": "Accounts management"
},
- "accountsManagementDescription": {
- "message": "Use this section to create, edit, and delete accounts."
+ "securityAndPrivacy": {
+ "message": "Security & Privacy"
},
"editAccount": {
"message": "Edit Account"
@@ -1026,15 +1019,15 @@
"selectNetworkToReveal": {
"message": "Select Network to reveal"
},
- "about": {
- "message": "About"
+ "advancedFeatures": {
+ "message": "Advanced Features"
+ },
+ "aboutAndSupport": {
+ "message": "About & Support"
},
"info": {
"message": "Info"
},
- "aboutDescription": {
- "message": "Use this section to view meta info about Temple Wallet."
- },
"unlockWallet": {
"message": "Unlock the Wallet"
},
@@ -1815,9 +1808,6 @@
"generalSettings": {
"message": "General"
},
- "generalSettingsDescription": {
- "message": "Here you can manage languages preferences and display mode."
- },
"swapNoun": {
"message": "Swap"
},
@@ -2588,9 +2578,6 @@
"addressBook": {
"message": "Address Book"
},
- "addressBookDescription": {
- "message": "Add, remove and manage your contacts."
- },
"addNewContact": {
"message": "New contact"
},
@@ -3206,11 +3193,8 @@
"sync": {
"message": "Sync"
},
- "synchronization": {
- "message": "Synchronization"
- },
- "synchronizationSettingsDescription": {
- "message": "Sync with Mobile Temple Wallet."
+ "templeSync": {
+ "message": "Temple Sync"
},
"syncSettingsTitle": {
"message": "Sync with Mobile Temple Wallet"
diff --git a/public/_locales/en_GB/messages.json b/public/_locales/en_GB/messages.json
index 57a2fba8f..43e1d270b 100644
--- a/public/_locales/en_GB/messages.json
+++ b/public/_locales/en_GB/messages.json
@@ -34,10 +34,6 @@
}
}
},
- "authorizedDApps": {
- "message": "Authorized DApps",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "Click on the X icon to reset permissions."
},
@@ -642,38 +638,19 @@
"revealPrivateKey": {
"message": "Reveal Private Key"
},
- "revealPrivateKeyDescription": {
- "message": "Also known as \"Export Account\", reveals private key for your selected account."
- },
"revealSeedPhrase": {
"message": "Reveal Seed Phrase"
},
- "revealSeedPhraseDescription": {
- "message": "Also known as \"Export Wallet\", you may need this seed phrase to access your wallet and accounts on other devices."
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "In this section you can enable ability to interact with decentralized applications that support Temple Wallet."
- },
- "networksDescription": {
- "message": "In this section you can add or delete custom Tezos networks.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Remove Account"
},
"removeAccountDescription": {
"message": "Use this section to remove your selected account. Only imported accounts can be removed."
},
- "about": {
- "message": "About"
- },
- "aboutDescription": {
- "message": "Use this section to view meta info about Temple Wallet."
- },
"unlockWallet": {
"message": "Unlock the Wallet"
},
@@ -1248,9 +1225,6 @@
"generalSettings": {
"message": "General"
},
- "generalSettingsDescription": {
- "message": "Here you can manage languages preferences and display mode."
- },
"swapNoun": {
"message": "Swap"
},
diff --git a/public/_locales/fr/messages.json b/public/_locales/fr/messages.json
index 628436c3e..d89713c56 100644
--- a/public/_locales/fr/messages.json
+++ b/public/_locales/fr/messages.json
@@ -31,10 +31,6 @@
}
}
},
- "authorizedDApps": {
- "message": "Applications décentralisées autorisées",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "Cliquez sur l'icône X pour réinitialiser les permissions."
},
@@ -611,38 +607,19 @@
"revealPrivateKey": {
"message": "Révéler la clé privée"
},
- "revealPrivateKeyDescription": {
- "message": "Connu aussi comme « Exporter le compte », révèle la clé privée pour votre compte sélectionné."
- },
"revealSeedPhrase": {
"message": "Révéler la phrase mnémonique"
},
- "revealSeedPhraseDescription": {
- "message": "Connu aussi comme « Exporter le compte », vous pourriez avoir besoin de cette phrase mnémonique pour accéder à votre portefeuille et vos comptes sur d'autres appareils."
- },
"dApps": {
"message": "Applications décentralisées",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "Dans cette section, vous pouvez activer la possibilité d'interagir avec les applications décentralisées qui prennent en charge le portefeuille Temple."
- },
- "networksDescription": {
- "message": "Dans cette section, vous pouvez ajouter ou supprimer des réseaux Tezos personnalisés.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Retirer le compte"
},
"removeAccountDescription": {
"message": "Utilisez cette section pour retirer votre compte sélectionné. Seuls les comptes importés peuvent être retirés."
},
- "about": {
- "message": "À propos"
- },
- "aboutDescription": {
- "message": "Utilisez cette section pour afficher les méta-informations concernant le portefeuille Temple."
- },
"unlockWallet": {
"message": "Déverrouiller le portefeuille"
},
@@ -1211,9 +1188,6 @@
"generalSettings": {
"message": "Général"
},
- "generalSettingsDescription": {
- "message": "Vous pouvez gérer ici les préférences de langue et le mode d'affichage."
- },
"swapNoun": {
"message": "Échanger"
},
diff --git a/public/_locales/ja/messages.json b/public/_locales/ja/messages.json
index 284d8bc03..b0930a8a1 100644
--- a/public/_locales/ja/messages.json
+++ b/public/_locales/ja/messages.json
@@ -31,10 +31,6 @@
}
}
},
- "authorizedDApps": {
- "message": "認証済みDApps",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "Xアイコンをクリックして権限をリセットします。"
},
@@ -607,38 +603,19 @@
"revealPrivateKey": {
"message": "秘密鍵を表示"
},
- "revealPrivateKeyDescription": {
- "message": "「アカウントのエクスポート」としても知られ、選択したアカウントの秘密鍵を表示します。"
- },
"revealSeedPhrase": {
"message": "シードフレーズを表示"
},
- "revealSeedPhraseDescription": {
- "message": "「ウォレットのエクスポート」としても知られ、他のデバイスでウォレットやアカウントにアクセスするには、このシードフレーズが必要な場合があります。"
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "このセクションでは、テンプルウォレットをサポートする分散型アプリケーションとのインタラクションを有効にすることができます。"
- },
- "networksDescription": {
- "message": "このセクションでは、カスタムテゾスネットワークの追加や削除を行うことができます。",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "アカウントを削除"
},
"removeAccountDescription": {
"message": "このセクションを使用して、選択したアカウントを削除します。インポートしたアカウントのみ削除することができます。"
},
- "about": {
- "message": "概要"
- },
- "aboutDescription": {
- "message": "テンプルウォレットのメタ情報を表示するには、このセクションを使用します。"
- },
"unlockWallet": {
"message": "ウォレットをアンロック"
},
@@ -1198,9 +1175,6 @@
"generalSettings": {
"message": "一般"
},
- "generalSettingsDescription": {
- "message": "ここでは、言語設定や表示モードを管理することができます。"
- },
"swapNoun": {
"message": "スワップ"
},
diff --git a/public/_locales/ko/messages.json b/public/_locales/ko/messages.json
index 73841bd05..8af374146 100644
--- a/public/_locales/ko/messages.json
+++ b/public/_locales/ko/messages.json
@@ -31,10 +31,6 @@
}
}
},
- "authorizedDApps": {
- "message": "인증된 분산 앱",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "X 아이콘을 클릭하여 접근 권한을 초기화하세요."
},
@@ -607,38 +603,19 @@
"revealPrivateKey": {
"message": "비공개 키 공개"
},
- "revealPrivateKeyDescription": {
- "message": "\"계정 내보내기\"라고도 하는데, 선택한 계정의 비공개 키가 공개됩니다"
- },
"revealSeedPhrase": {
"message": "비밀 문구 공개"
},
- "revealSeedPhraseDescription": {
- "message": "\"지갑 내보내기\"라고도 하는데, 다른 기기에서 지갑 및 계정에 액세스 하려면 이 비밀 문구가 있어야 합니다."
- },
"dApps": {
"message": "분산 앱",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "이 섹션에서 타노스 지갑을 지원하는 분산 애플리케이션과 상호 소통하는 기능을 활성화할 수 있습니다."
- },
- "networksDescription": {
- "message": "이 섹션에서 맞춤형 테조스 네트워크를 추가하거나 삭제할 수 있습니다.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "계정 제거"
},
"removeAccountDescription": {
"message": "이 섹션을 활용하여 선택한 계정을 제거하세요. 불러온 계정만 제거할 수 있습니다."
},
- "about": {
- "message": "정보"
- },
- "aboutDescription": {
- "message": "이 섹션을 활용하여 타노스 지갑에 관한 메타 징보를 확인하세요."
- },
"unlockWallet": {
"message": "지갑 잠금 해제"
},
@@ -1198,9 +1175,6 @@
"generalSettings": {
"message": "일반"
},
- "generalSettingsDescription": {
- "message": "여기에서 선호하는 언어와 디스플레이 모드를 관리할 수 있습니다."
- },
"swapNoun": {
"message": "스왑"
},
diff --git a/public/_locales/pt/messages.json b/public/_locales/pt/messages.json
index 0e5622b01..0b017bd75 100644
--- a/public/_locales/pt/messages.json
+++ b/public/_locales/pt/messages.json
@@ -34,10 +34,6 @@
}
}
},
- "authorizedDApps": {
- "message": "DApps autorizados",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "Clique no ícone X para repor as permissões."
},
@@ -647,38 +643,19 @@
"revealPrivateKey": {
"message": "Revelar chave privada"
},
- "revealPrivateKeyDescription": {
- "message": "Também conhecida como \"Exportar conta\", revela a chave privada da sua conta selecionada."
- },
"revealSeedPhrase": {
"message": "Revelar frase semente"
},
- "revealSeedPhraseDescription": {
- "message": "Também conhecida como \"Exportar carteira\", pode precisar desta frase semente para aceder à sua carteira e às suas contas noutros dispositivos."
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "Nesta secção pode ativar a capacidade de interagir com aplicações descentralizadas que suportam a Carteira Temple."
- },
- "networksDescription": {
- "message": "Nesta secção pode adicionar ou apagar redes Tezos personalizadas.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Remover conta"
},
"removeAccountDescription": {
"message": "Utilize esta secção para remover a sua conta selecionada. Apenas as contas importadas podem ser removidas."
},
- "about": {
- "message": "Sobre"
- },
- "aboutDescription": {
- "message": "Utilize esta secção para ver meta informações sobre a Carteira Temple."
- },
"unlockWallet": {
"message": "Desbloquear a Carteira"
},
@@ -1274,9 +1251,6 @@
"generalSettings": {
"message": "Geral"
},
- "generalSettingsDescription": {
- "message": "Aqui pode gerir as preferências de idioma e o modo de visualização."
- },
"swapNoun": {
"message": "Trocar"
},
@@ -1895,9 +1869,6 @@
"addressBook": {
"message": "Livro de endereços"
},
- "addressBookDescription": {
- "message": "Adicione, remova e gira os seus contactos."
- },
"addNewContact": {
"message": "Novo contacto"
},
diff --git a/public/_locales/ru/messages.json b/public/_locales/ru/messages.json
index 95269de66..febb85009 100644
--- a/public/_locales/ru/messages.json
+++ b/public/_locales/ru/messages.json
@@ -17,9 +17,6 @@
"maximiseView": {
"message": "Maximise view"
},
- "authorizedDApps": {
- "message": "Authorized DApps"
- },
"clickIconToResetPermissions": {
"message": "Click on the X icon to reset permissions."
},
diff --git a/public/_locales/tr/messages.json b/public/_locales/tr/messages.json
index 7412e29b0..0824c87dd 100644
--- a/public/_locales/tr/messages.json
+++ b/public/_locales/tr/messages.json
@@ -34,10 +34,6 @@
}
}
},
- "authorizedDApps": {
- "message": "İzin Verilen DApps",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "İzinleri sıfırlamak için X simgesine tıklayın."
},
@@ -647,38 +643,19 @@
"revealPrivateKey": {
"message": "Özel Anahtarı Göster"
},
- "revealPrivateKeyDescription": {
- "message": "\"Hesabı Dışa Aktar\" olarak da bilinen bu özellik, seçtiğiniz hesap için özel anahtarı gösterir."
- },
"revealSeedPhrase": {
"message": "Kurtarma Sözcüğünü Göster"
},
- "revealSeedPhraseDescription": {
- "message": "\"Cüzdanı Dışa Aktar\" olarak da bilinir; başka cihazlarda hesaplarınıza ve cüzdanınıza erişmek için bu kurtarma sözcüğüne ihtiyacınız olabilir."
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "Bu bölümde, Temple Wallet'i destekleyen merkezi olmayan uygulamalarla etkileşim kurabilmeyi etkinleştirebilirsiniz."
- },
- "networksDescription": {
- "message": "Bu bölümde, özel Tezos ağları ekleyebilir ya da silebilirsiniz.",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Hesabı Kaldır"
},
"removeAccountDescription": {
"message": "Seçtiğiniz hesabı kaldırmak için bu bölümü kullanın. Yalnızca içe aktarılmış olan hesaplar kaldırılabilir."
},
- "about": {
- "message": "Hakkında"
- },
- "aboutDescription": {
- "message": "Temple Wallet hakkında meta verileri görüntülemek için bu bölümü kullanın."
- },
"unlockWallet": {
"message": "Cüzdan Kilidini Aç"
},
@@ -1274,9 +1251,6 @@
"generalSettings": {
"message": "Genel"
},
- "generalSettingsDescription": {
- "message": "Dil tercihlerini ve ekran modunu buradan yönetebilirsiniz."
- },
"swapNoun": {
"message": "Takas"
},
@@ -1895,9 +1869,6 @@
"addressBook": {
"message": "Adres Defteri"
},
- "addressBookDescription": {
- "message": "Kişilerinizi ekleyin, çıkarın ve yönetin."
- },
"addNewContact": {
"message": "Yeni kişi"
},
diff --git a/public/_locales/uk/messages.json b/public/_locales/uk/messages.json
index 1bdf5a000..2513fe231 100644
--- a/public/_locales/uk/messages.json
+++ b/public/_locales/uk/messages.json
@@ -31,9 +31,9 @@
}
}
},
- "authorizedDApps": {
- "message": "Авторизовані Dapp`ки",
- "description": "DApps = децентралізовані додатки"
+ "connectedDApps": {
+ "message": "Підключені Dapp`ки",
+ "description": "Dapps = децентралізовані додатки"
},
"clickIconToResetPermissions": {
"message": "Натисни X іконку щоб скинути дозволи."
@@ -634,38 +634,19 @@
"revealPrivateKey": {
"message": "Розкрити приватний ключ"
},
- "revealPrivateKeyDescription": {
- "message": "Також відоме як \"Export Account\", відкриває приватний ключ для вибраного облікового запису."
- },
"revealSeedPhrase": {
"message": "Розкрийте Сід Фразу"
},
- "revealSeedPhraseDescription": {
- "message": "Також відоме як \"Export Wallet\", ця сід фраза може знадобитися для доступу до вашого гаманця та облікових записів на інших пристроях."
- },
"dApps": {
"message": "DApps",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "У цьому розділі ви можете включити можливість взаємодії з децентралізованими додатками, які підтримують Temple Wallet."
- },
- "networksDescription": {
- "message": "У цій секції ти можеш додати або видалити кастомні Tezos мережі",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "Видалити Аккаунт"
},
"removeAccountDescription": {
"message": "Використовуйте цей розділ, щоб видалити вибраний обліковий запис. Видалити можна лише імпортовані облікові записи."
},
- "about": {
- "message": "Додатково"
- },
- "aboutDescription": {
- "message": "Використовуйте цей розділ, щоб переглянути метаінформацію про Temple Wallet."
- },
"unlockWallet": {
"message": "Розблокувати гаманець"
},
@@ -1255,9 +1236,6 @@
"generalSettings": {
"message": "Загальне"
},
- "generalSettingsDescription": {
- "message": "Тут ви можете керувати налаштуваннями мови та режимом відображення."
- },
"swapNoun": {
"message": "Своп"
},
diff --git a/public/_locales/zh_CN/messages.json b/public/_locales/zh_CN/messages.json
index 13ceef712..138c4251b 100644
--- a/public/_locales/zh_CN/messages.json
+++ b/public/_locales/zh_CN/messages.json
@@ -31,10 +31,6 @@
}
}
},
- "authorizedDApps": {
- "message": "授权DApps",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "点击X图标来重置权限。"
},
@@ -611,26 +607,13 @@
"revealPrivateKey": {
"message": "显示私钥"
},
- "revealPrivateKeyDescription": {
- "message": "也称为“导出账户”,显示所选账户的私钥。"
- },
"revealSeedPhrase": {
"message": "显示助记词"
},
- "revealSeedPhraseDescription": {
- "message": "也称为“导出钱包”,您可能需要此助记词来在其他设备上访问您的钱包和账户。"
- },
"dApps": {
"message": "DApp",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "在此处,您可以获得与支持Temple钱包的去中心化应用互动的能力。"
- },
- "networksDescription": {
- "message": "在此处,您可以添加或删除自定义Tezos网络。",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "移除账户"
},
@@ -640,9 +623,6 @@
"about": {
"message": "关于"
},
- "aboutDescription": {
- "message": "使用此板块来查看关于Temple钱包的元信息。"
- },
"unlockWallet": {
"message": "解锁钱包"
},
@@ -1202,9 +1182,6 @@
"generalSettings": {
"message": "通用"
},
- "generalSettingsDescription": {
- "message": "在此处您可以管理语言偏好和显示模式。"
- },
"swapNoun": {
"message": "交换"
},
diff --git a/public/_locales/zh_TW/messages.json b/public/_locales/zh_TW/messages.json
index 76d305f71..16c87d9c9 100644
--- a/public/_locales/zh_TW/messages.json
+++ b/public/_locales/zh_TW/messages.json
@@ -31,10 +31,6 @@
}
}
},
- "authorizedDApps": {
- "message": "授權的分散式應用程式",
- "description": "DApps = Decentralized Applications"
- },
"clickIconToResetPermissions": {
"message": "點擊 X 圖示重新設定權限。"
},
@@ -611,38 +607,19 @@
"revealPrivateKey": {
"message": "顯示私密金鑰"
},
- "revealPrivateKeyDescription": {
- "message": "也稱為「匯出帳戶」,這會顯示所選取帳戶的私密金鑰。"
- },
"revealSeedPhrase": {
"message": "顯示助記詞"
},
- "revealSeedPhraseDescription": {
- "message": "也稱為「匯出錢包」,您可能需要此助記詞,才能透過其他裝置存取您的錢包和帳戶。"
- },
"dApps": {
"message": "分散式應用程式",
"description": "DApps = Decentralized Applications"
},
- "dAppsDescription": {
- "message": "在此區段,您可以啟用與支援 Temple 錢包的分散式應用程式互動的能力。"
- },
- "networksDescription": {
- "message": "在此區段,您可以新增或刪除自訂的 Tezos 網路。",
- "description": "Tezos = blockchain name (https://tezos.com/)"
- },
"removeAccount": {
"message": "移除帳戶"
},
"removeAccountDescription": {
"message": "使用此區段移除您選取的帳戶。只能移除匯入的帳戶。"
},
- "about": {
- "message": "關於"
- },
- "aboutDescription": {
- "message": "使用此區段檢視 Temple 錢包的元資料。"
- },
"unlockWallet": {
"message": "解鎖錢包"
},
@@ -1202,9 +1179,6 @@
"generalSettings": {
"message": "一般"
},
- "generalSettingsDescription": {
- "message": "您可以在此管理語言偏好和顯示模式。"
- },
"swapNoun": {
"message": "交換"
},
diff --git a/src/app/pages/AccountSettings/settings-cell.tsx b/src/app/atoms/SettingsCell.tsx
similarity index 71%
rename from src/app/pages/AccountSettings/settings-cell.tsx
rename to src/app/atoms/SettingsCell.tsx
index 45954933b..c0ebdaa01 100644
--- a/src/app/pages/AccountSettings/settings-cell.tsx
+++ b/src/app/atoms/SettingsCell.tsx
@@ -8,6 +8,8 @@ interface ComponentBase {
}
interface SettingsCellPropsBase {
+ isLast?: boolean;
+ cellIcon?: ReactNode;
cellName: ReactNode;
Component: 'div' | FC
;
}
@@ -24,20 +26,23 @@ type SettingsCellProps
= P extends { Component: 'div' }
export const SettingsCell =
({
className,
- cellName: name,
+ cellIcon,
+ cellName,
+ isLast = true,
children,
Component,
...restProps
}: SettingsCellProps
) => {
return (
- {name}
+
+ {cellIcon}
+
+ {cellName}
+
{children}
diff --git a/src/app/atoms/SettingsCellGroup.tsx b/src/app/atoms/SettingsCellGroup.tsx
new file mode 100644
index 000000000..32df443b5
--- /dev/null
+++ b/src/app/atoms/SettingsCellGroup.tsx
@@ -0,0 +1,20 @@
+import React, { Children, FC, HTMLAttributes } from 'react';
+
+import clsx from 'clsx';
+
+export const SettingsCellGroup: FC>> = ({
+ className,
+ children,
+ ...restProps
+}) => (
+
+ {children}
+
+);
diff --git a/src/app/icons/additional.svg b/src/app/icons/additional.svg
deleted file mode 100644
index 67e741ca8..000000000
--- a/src/app/icons/additional.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
diff --git a/src/app/icons/apps.svg b/src/app/icons/apps.svg
deleted file mode 100644
index 8863f7bb5..000000000
--- a/src/app/icons/apps.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-
diff --git a/src/app/icons/base/additional.svg b/src/app/icons/base/additional.svg
new file mode 100644
index 000000000..8e30602ed
--- /dev/null
+++ b/src/app/icons/base/additional.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/app/icons/base/addressbook.svg b/src/app/icons/base/addressbook.svg
new file mode 100644
index 000000000..8a23b7660
--- /dev/null
+++ b/src/app/icons/base/addressbook.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/app/icons/base/browse.svg b/src/app/icons/base/browse.svg
index 1c97721da..095ad60bc 100644
--- a/src/app/icons/base/browse.svg
+++ b/src/app/icons/base/browse.svg
@@ -1,6 +1,6 @@
-
{derivationPaths.map(({ chainName, path }) => (
-
- {chainName === 'tezos' ? : }
-
+
+
+ {chainName === 'tezos' ? : }
+
+
))}
)}
diff --git a/src/app/pages/Settings/Settings.selectors.ts b/src/app/pages/Settings/Settings.selectors.ts
index efd28540b..6ca5f22d4 100644
--- a/src/app/pages/Settings/Settings.selectors.ts
+++ b/src/app/pages/Settings/Settings.selectors.ts
@@ -9,5 +9,10 @@ export enum SettingsSelectors {
removeAccountButton = 'Settings/Remove Account Button',
aboutButton = 'Settings/About Button',
accountsManagementButton = 'Settings/Accounts Management Button',
- advancedFeaturesButton = 'Settings/Advanced Features Button'
+ advancedFeaturesButton = 'Settings/Advanced Features Button',
+ securityAndPrivacyButton = 'Settings/Security and Privacy Button',
+ passwordInput = 'Settings/Password Input',
+ cancelResetExtensionButton = 'Settings/Cancel Reset Extension Button',
+ confirmResetExtensionButton = 'Settings/Confirm Reset Extension Button',
+ resetExtensionButton = 'Settings/Reset Extension Button'
}
diff --git a/src/app/pages/Settings/Settings.tsx b/src/app/pages/Settings/Settings.tsx
index 097fbd7fd..1159747af 100644
--- a/src/app/pages/Settings/Settings.tsx
+++ b/src/app/pages/Settings/Settings.tsx
@@ -1,33 +1,35 @@
-import React, { memo, ReactNode, useMemo, useState } from 'react';
-
-import clsx from 'clsx';
+import React, { FC, ReactNode, SetStateAction, memo, useMemo, useState } from 'react';
import { IconBase } from 'app/atoms';
-import { ReactComponent as AdditionalIcon } from 'app/icons/additional.svg';
-import { ReactComponent as AppsIcon } from 'app/icons/apps.svg';
-import { ReactComponent as SettingsIcon } from 'app/icons/base/settings.svg';
-import { ReactComponent as ContactBookIcon } from 'app/icons/monochrome/contact-book.svg';
-import { ReactComponent as ExtensionIcon } from 'app/icons/monochrome/extension.svg';
-import { ReactComponent as HelpIcon } from 'app/icons/monochrome/help.svg';
-import { ReactComponent as KeyIcon } from 'app/icons/monochrome/key.svg';
-import { ReactComponent as PeopleIcon } from 'app/icons/monochrome/people.svg';
-import { ReactComponent as SignalAltIcon } from 'app/icons/monochrome/signal-alt.svg';
-import { ReactComponent as StickerIcon } from 'app/icons/monochrome/sticker.svg';
-import { ReactComponent as SyncIcon } from 'app/icons/monochrome/sync.svg';
+import { AccountAvatar } from 'app/atoms/AccountAvatar';
+import { SettingsCell } from 'app/atoms/SettingsCell';
+import { SettingsCellGroup } from 'app/atoms/SettingsCellGroup';
+import { StyledButton } from 'app/atoms/StyledButton';
+import { ReactComponent as AdditionalFeaturesIcon } from 'app/icons/base/additional.svg';
+import { ReactComponent as AddressBookIcon } from 'app/icons/base/addressbook.svg';
+import { ReactComponent as BrowseIcon } from 'app/icons/base/browse.svg';
+import { ReactComponent as ChevronRightIcon } from 'app/icons/base/chevron_right.svg';
+import { ReactComponent as ExitIcon } from 'app/icons/base/exit.svg';
+import { ReactComponent as InfoIcon } from 'app/icons/base/info.svg';
+import { ReactComponent as LinkIcon } from 'app/icons/base/link.svg';
+import { ReactComponent as LockIcon } from 'app/icons/base/lock.svg';
+import { ReactComponent as ManageIcon } from 'app/icons/base/manage.svg';
+import { ReactComponent as RefreshIcon } from 'app/icons/base/refresh.svg';
import PageLayout from 'app/layouts/PageLayout';
import About from 'app/templates/About/About';
import { AccountsManagement } from 'app/templates/AccountsManagement';
import AddressBook from 'app/templates/AddressBook/AddressBook';
import { AdvancedFeatures } from 'app/templates/AdvancedFeatures';
import DAppSettings from 'app/templates/DAppSettings/DAppSettings';
-import HelpAndCommunity from 'app/templates/HelpAndCommunity';
-import { RevealSeedPhrase, RevealPrivateKeys } from 'app/templates/RevealSecrets';
import GeneralSettings from 'app/templates/SettingsGeneral';
import SyncSettings from 'app/templates/Synchronization/SyncSettings';
import { TID, T } from 'lib/i18n';
+import { useBooleanState } from 'lib/ui/hooks';
import { Link } from 'lib/woozie';
+import { useAccount } from 'temple/front';
import NetworksSettings from './Networks';
+import { ResetExtensionModal } from './reset-extension-modal';
import { SettingsSelectors } from './Settings.selectors';
interface SettingsProps {
@@ -37,190 +39,141 @@ interface SettingsProps {
interface Tab {
slug: string;
titleI18nKey: TID;
- Icon: React.FC>;
- Component: React.FC<{ setHeaderChildren: (children: ReactNode) => void }>;
- color: string;
- descriptionI18nKey: TID;
+ Icon: FC;
+ Component: FC<{ setHeaderChildren: React.Dispatch> }>;
testID?: SettingsSelectors;
}
-const TABS: Tab[] = [
- {
- slug: 'general-settings',
- titleI18nKey: 'generalSettings',
- Icon: SettingsIcon,
- Component: GeneralSettings,
- color: '#667EEA',
- descriptionI18nKey: 'generalSettingsDescription',
- testID: SettingsSelectors.generalButton
- },
- {
- slug: 'synchronization',
- titleI18nKey: 'synchronization',
- Icon: SyncIcon,
- Component: SyncSettings,
- color: '#7ED9A7',
- descriptionI18nKey: 'synchronizationSettingsDescription',
- testID: SettingsSelectors.synchronizationButton
- },
- {
- slug: 'address-book',
- titleI18nKey: 'addressBook',
- Icon: ContactBookIcon,
- Component: AddressBook,
- color: '#d53f8c',
- descriptionI18nKey: 'addressBookDescription',
- testID: SettingsSelectors.addressBookButton
- },
- {
- slug: 'reveal-private-key',
- titleI18nKey: 'revealPrivateKey',
- Icon: KeyIcon,
- Component: RevealPrivateKeys,
- color: '#3182CE',
- descriptionI18nKey: 'revealPrivateKeyDescription',
- testID: SettingsSelectors.revealPrivateKeyButton
- },
- {
- slug: 'reveal-seed-phrase',
- titleI18nKey: 'revealSeedPhrase',
- Icon: StickerIcon,
- Component: RevealSeedPhrase,
- color: '#F6AD55',
- descriptionI18nKey: 'revealSeedPhraseDescription',
- testID: SettingsSelectors.revealSeedPhraseButton
- },
- {
- slug: 'dapps',
- titleI18nKey: 'authorizedDApps',
- Icon: AppsIcon,
- Component: DAppSettings,
- color: '#9F7AEA',
- descriptionI18nKey: 'dAppsDescription',
- testID: SettingsSelectors.dAppsButton
- },
- {
- slug: 'networks',
- titleI18nKey: 'networks',
- Icon: SignalAltIcon,
- Component: NetworksSettings,
- color: '#F6C90E',
- descriptionI18nKey: 'networksDescription',
- testID: SettingsSelectors.networksButton
- },
- {
- slug: 'advanced-features',
- titleI18nKey: 'advancedFeatures',
- Icon: AdditionalIcon,
- Component: AdvancedFeatures,
- color: '#88E0E6',
- descriptionI18nKey: 'advancedFeaturesDescription',
- testID: SettingsSelectors.advancedFeaturesButton
- },
- {
- slug: 'accounts-management',
- titleI18nKey: 'accountsManagement',
- Icon: PeopleIcon,
- Component: AccountsManagement,
- color: 'teal',
- descriptionI18nKey: 'accountsManagementDescription',
- testID: SettingsSelectors.accountsManagementButton
- },
- {
- slug: 'about',
- titleI18nKey: 'about',
- Icon: ExtensionIcon,
- Component: About,
- color: '#A0AEC0',
- descriptionI18nKey: 'aboutDescription',
- testID: SettingsSelectors.aboutButton
- },
- {
- slug: 'help-and-community',
- titleI18nKey: 'helpAndCommunity',
- Icon: HelpIcon,
- Component: HelpAndCommunity,
- color: '#38B2AC',
- descriptionI18nKey: 'helpAndCommunityDescription'
- }
+const DefaultSettingsIconHOC = (Icon: React.FC>) =>
+ memo(() => );
+
+const TABS_GROUPS: Tab[][] = [
+ [
+ {
+ slug: 'accounts-management',
+ titleI18nKey: 'accountsManagement',
+ Icon: memo(() => {
+ const { id } = useAccount();
+
+ return ;
+ }),
+ Component: AccountsManagement,
+ testID: SettingsSelectors.accountsManagementButton
+ }
+ ],
+ [
+ {
+ slug: 'general-settings',
+ titleI18nKey: 'generalSettings',
+ Icon: DefaultSettingsIconHOC(ManageIcon),
+ Component: GeneralSettings,
+ testID: SettingsSelectors.generalButton
+ },
+ {
+ slug: 'networks',
+ titleI18nKey: 'networks',
+ Icon: DefaultSettingsIconHOC(BrowseIcon),
+ Component: NetworksSettings,
+ testID: SettingsSelectors.networksButton
+ },
+ {
+ slug: 'security-and-privacy',
+ titleI18nKey: 'securityAndPrivacy',
+ Icon: DefaultSettingsIconHOC(LockIcon),
+ Component: () => TODO: add some content
,
+ testID: SettingsSelectors.securityAndPrivacyButton
+ }
+ ],
+ [
+ {
+ slug: 'address-book',
+ titleI18nKey: 'addressBook',
+ Icon: DefaultSettingsIconHOC(AddressBookIcon),
+ Component: AddressBook,
+ testID: SettingsSelectors.addressBookButton
+ },
+ {
+ slug: 'dapps',
+ titleI18nKey: 'connectedDApps',
+ Icon: DefaultSettingsIconHOC(LinkIcon),
+ Component: DAppSettings,
+ testID: SettingsSelectors.dAppsButton
+ },
+ {
+ slug: 'additional-settings',
+ titleI18nKey: 'advancedFeatures',
+ Icon: DefaultSettingsIconHOC(AdditionalFeaturesIcon),
+ Component: AdvancedFeatures,
+ testID: SettingsSelectors.advancedFeaturesButton
+ },
+ {
+ slug: 'synchronization',
+ titleI18nKey: 'templeSync',
+ Icon: DefaultSettingsIconHOC(RefreshIcon),
+ Component: SyncSettings,
+ testID: SettingsSelectors.synchronizationButton
+ }
+ ],
+ [
+ {
+ slug: 'about',
+ titleI18nKey: 'aboutAndSupport',
+ Icon: DefaultSettingsIconHOC(InfoIcon),
+ Component: About,
+ testID: SettingsSelectors.aboutButton
+ }
+ ]
];
+const TABS = TABS_GROUPS.flat();
const Settings = memo(({ tabSlug }) => {
const activeTab = useMemo(() => TABS.find(t => t.slug === tabSlug) || null, [tabSlug]);
const [headerChildren, setHeaderChildren] = useState(null);
+ const [extensionModalOpened, openResetExtensionModal, closeResetExtensionModal] = useBooleanState(false);
return (
- {!activeTab && }
-
-
-
- >
- }
+ pageTitle={}
+ paperClassName="!bg-background"
headerChildren={headerChildren}
>
-
- {activeTab ? (
-
- ) : (
-
- {TABS.map(({ slug, titleI18nKey, descriptionI18nKey, Icon, color, testID }, i) => {
- const first = i === 0;
- const linkTo = `/settings/${slug}`;
-
- return (
-
-
-
-
-
-
- {message => (
-
- {message}
-
- )}
-
+ {extensionModalOpened &&
}
+ {activeTab ? (
+
+ ) : (
+
+ {TABS_GROUPS.map((tabs, i) => (
+
+ {tabs.map(({ slug, titleI18nKey, Icon, testID }, j) => (
+ }
+ cellName={}
+ isLast={j === tabs.length - 1}
+ testID={testID}
+ >
+
+
+ ))}
+
+ ))}
-
- {message => {message}
}
-
-
-
-
- );
- })}
-
- )}
-
+
+
+
+
+
+
+
+ )}
);
});
diff --git a/src/app/pages/Settings/reset-extension-modal.tsx b/src/app/pages/Settings/reset-extension-modal.tsx
new file mode 100644
index 000000000..463ab2a3b
--- /dev/null
+++ b/src/app/pages/Settings/reset-extension-modal.tsx
@@ -0,0 +1,88 @@
+import React, { memo, useCallback } from 'react';
+
+import { Alert, FormField } from 'app/atoms';
+import {
+ ActionModal,
+ ActionModalBodyContainer,
+ ActionModalButton,
+ ActionModalButtonsContainer
+} from 'app/atoms/action-modal';
+import { useTempleBackendActionForm } from 'app/hooks/use-temple-backend-action-form';
+import { DEFAULT_PASSWORD_INPUT_PLACEHOLDER } from 'lib/constants';
+import { T, t } from 'lib/i18n';
+import { useTempleClient } from 'lib/temple/front';
+
+import { SettingsSelectors } from './Settings.selectors';
+
+interface ResetExtensionModalProps {
+ onClose: EmptyFn;
+}
+
+interface FormData {
+ password: string;
+}
+
+export const ResetExtensionModal = memo(({ onClose }) => {
+ const { resetExtension } = useTempleClient();
+
+ const handleResetPasswordSubmit = useCallback(({ password }: FormData) => resetExtension(password), [resetExtension]);
+
+ const { register, handleSubmit, errors, formState, onSubmit } = useTempleBackendActionForm(
+ handleResetPasswordSubmit,
+ 'password'
+ );
+ const submitting = formState.isSubmitting;
+
+ return (
+
+
+ }
+ />
+
+ }
+ labelContainerClassName="text-grey-2"
+ placeholder={DEFAULT_PASSWORD_INPUT_PLACEHOLDER}
+ errorCaption={errors.password?.message}
+ containerClassName="mb-2"
+ testID={SettingsSelectors.passwordInput}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+});
diff --git a/src/app/templates/DAppSettings/DAppSettings.tsx b/src/app/templates/DAppSettings/DAppSettings.tsx
index 572b90cce..c76ce8c33 100644
--- a/src/app/templates/DAppSettings/DAppSettings.tsx
+++ b/src/app/templates/DAppSettings/DAppSettings.tsx
@@ -91,7 +91,7 @@ const DAppSettings: FC = () => {
<>
-
+
diff --git a/src/app/templates/HelpAndCommunity/ResourceLink.tsx b/src/app/templates/HelpAndCommunity/ResourceLink.tsx
deleted file mode 100644
index 67845d4e8..000000000
--- a/src/app/templates/HelpAndCommunity/ResourceLink.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import React, { FC, SVGProps } from 'react';
-
-import { Anchor } from 'app/atoms/Anchor';
-import { TestIDProps } from 'lib/analytics';
-
-interface Props extends TestIDProps {
- title: string;
- href: string;
- background?: string;
- Icon: React.FC>;
-}
-
-export const ResourceLink: FC = ({ title, href, background, Icon, testID, testIDProperties }) => {
- return (
-
-
-
-
-
- {title}
-
-
- );
-};
diff --git a/src/app/templates/HelpAndCommunity/index.tsx b/src/app/templates/HelpAndCommunity/index.tsx
deleted file mode 100644
index 8584a5cb2..000000000
--- a/src/app/templates/HelpAndCommunity/index.tsx
+++ /dev/null
@@ -1,99 +0,0 @@
-import React, { FC, useMemo } from 'react';
-
-import { ReactComponent as CannyIcon } from 'app/icons/canny.svg';
-import { ReactComponent as DiscordIcon } from 'app/icons/discord.svg';
-import { ReactComponent as HelpCrunchIcon } from 'app/icons/helpcrunch.svg';
-import { ReactComponent as RedditIcon } from 'app/icons/reddit.svg';
-import { ReactComponent as TelegramIcon } from 'app/icons/telegram.svg';
-import { ReactComponent as TwitterIcon } from 'app/icons/twitter.svg';
-import { ReactComponent as YoutubeIcon } from 'app/icons/youtube.svg';
-import { T } from 'lib/i18n';
-
-import { ResourceLink } from './ResourceLink';
-import { HelpAndCommunitySelectors } from './selectors';
-
-const HelpAndCommunity: FC = () => {
- const generalLinks = useMemo(
- () => [
- {
- title: 'Knowledge Base',
- href: 'https://madfish.crunch.help/temple-wallet',
- background: '#2182f7',
- Icon: HelpCrunchIcon,
- testID: HelpAndCommunitySelectors.knowledgeBaseLinkButton
- },
- {
- title: 'Feature Request',
- href: 'https://madfish.canny.io/feature-requests',
- Icon: CannyIcon,
- testID: HelpAndCommunitySelectors.featureRequestLinkButton
- }
- ],
- []
- );
-
- const socialMediaLinks = useMemo(
- () => [
- {
- title: 'Twitter',
- href: 'https://twitter.com/madfishofficial',
- background: '#1DA1F2',
- Icon: TwitterIcon
- },
- {
- title: 'Telegram',
- href: 'https://t.me/MadFishCommunity',
- background: '#26A5E4',
- Icon: TelegramIcon
- },
- {
- title: 'Discord',
- href: 'https://www.madfish.solutions/discord',
- background: '#7289DA',
- Icon: DiscordIcon
- },
- {
- title: 'Reddit',
- href: 'https://www.reddit.com/r/MadFishCommunity',
- background: '#FF4500',
- Icon: RedditIcon
- },
- {
- title: 'Youtube',
- href: 'https://www.youtube.com/channel/UCUp80EXfJEigks3xU5hiwyA',
- background: '#FF0000',
- Icon: YoutubeIcon
- }
- ],
- []
- );
-
- return (
-
-
-
-
-
-
- {generalLinks.map(({ title, ...props }) => (
-
- ))}
- {socialMediaLinks.map(({ title, ...props }) => (
-
- ))}
-
-
-
-
-
-
- );
-};
-
-export default HelpAndCommunity;
diff --git a/src/app/templates/HelpAndCommunity/selectors.ts b/src/app/templates/HelpAndCommunity/selectors.ts
deleted file mode 100644
index 567dd1e16..000000000
--- a/src/app/templates/HelpAndCommunity/selectors.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export enum HelpAndCommunitySelectors {
- knowledgeBaseLinkButton = 'Help & Community/Knowledge Base Link Button',
- featureRequestLinkButton = 'Help & Community/Feature Request Link Button',
- socialMediaLinkButton = 'Help & Community/Social Media Link Button'
-}
diff --git a/src/app/templates/RevealSecrets/PasswordForRevealField.tsx b/src/app/templates/RevealSecrets/PasswordForRevealField.tsx
deleted file mode 100644
index d54bd7c8e..000000000
--- a/src/app/templates/RevealSecrets/PasswordForRevealField.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import React, { memo, useRef, useCallback, useLayoutEffect } from 'react';
-
-import { OnSubmit, useForm } from 'react-hook-form';
-
-import { FormField, FormSubmitButton } from 'app/atoms';
-import { DEFAULT_PASSWORD_INPUT_PLACEHOLDER } from 'lib/constants';
-import { TID, T, t } from 'lib/i18n';
-
-import { RevealSecretsSelectors } from './RevealSecrets.selectors';
-
-interface Props {
- labelDescriptionForName: TID;
- onSubmit: (password: string) => Promise;
-}
-
-const SUBMIT_ERROR_TYPE = 'submit-error';
-
-interface FormData {
- password: string;
-}
-
-export const PasswordForRevealField = memo(({ labelDescriptionForName, onSubmit }) => {
- const { register, handleSubmit, errors, setError, clearError, formState } = useForm();
- const submitting = formState.isSubmitting;
-
- const formRef = useRef(null);
-
- const focusPasswordField = useCallback(() => {
- formRef.current?.querySelector("input[name='password']")?.focus();
- }, []);
-
- useLayoutEffect(() => {
- focusPasswordField();
- }, [focusPasswordField]);
-
- const onSubmitLocal = useCallback>(
- ({ password }) => {
- if (submitting) return;
-
- clearError('password');
-
- onSubmit(password).catch(err => {
- console.error(err);
-
- setError('password', SUBMIT_ERROR_TYPE, err.message);
- focusPasswordField();
- });
- },
- [onSubmit, submitting, clearError, setError, focusPasswordField]
- );
-
- return (
-
- );
-});
diff --git a/src/app/templates/RevealSecrets/RevealPrivateKeys.tsx b/src/app/templates/RevealSecrets/RevealPrivateKeys.tsx
deleted file mode 100644
index 9e809dcc2..000000000
--- a/src/app/templates/RevealSecrets/RevealPrivateKeys.tsx
+++ /dev/null
@@ -1,120 +0,0 @@
-import React, { FC, memo, useCallback, useMemo } from 'react';
-
-import clsx from 'clsx';
-
-import { Alert } from 'app/atoms';
-import { getAccountBadgeTitle } from 'app/defaults';
-import AccountBanner from 'app/templates/AccountBanner';
-import { T, t } from 'lib/i18n';
-import { useTempleClient } from 'lib/temple/front';
-import { TempleAccountType } from 'lib/temple/types';
-import { useDidUpdate, useVanishingState } from 'lib/ui/hooks';
-import { AccountForChain } from 'temple/accounts';
-import { useAccountForEvm, useAccountForTezos } from 'temple/front';
-import { TempleChainTitle } from 'temple/types';
-
-import { PasswordForRevealField } from './PasswordForRevealField';
-import { SecretField } from './SecretField';
-
-export const RevealPrivateKeys = memo(() => {
- const accForTezos = useAccountForTezos();
- const accForEvm = useAccountForEvm();
-
- return (
- <>
- {accForTezos ? : null}
- {accForEvm ? : null}
- >
- );
-});
-
-interface RevealForChainProps {
- account: AccountForChain;
-}
-
-const RevealForChain: FC = ({ account }) => {
- const { chain, address } = account;
-
- const { revealPrivateKey } = useTempleClient();
-
- const [secret, setSecret] = useVanishingState();
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
- useDidUpdate(() => void setSecret(null), [account.id, setSecret]);
-
- const onPasswordSubmit = useCallback(
- async (password: string) => revealPrivateKey(address, password).then(scrt => void setSecret(scrt)),
- [address, setSecret, revealPrivateKey]
- );
-
- const mainContent = useMemo(() => {
- const forbidRevealing = [
- TempleAccountType.Ledger,
- TempleAccountType.ManagedKT,
- TempleAccountType.WatchOnly
- ].includes(account.type);
-
- if (forbidRevealing) {
- return (
-
-
- {getAccountBadgeTitle(account.type)}
-
- ]}
- />
-
- }
- className="my-4"
- />
- );
- }
-
- if (secret) return ;
-
- return ;
- }, [account.type, secret, onPasswordSubmit]);
-
- return (
-
-
-
- {account.derivationPath && (
-
-
-
-
- )}
-
- {mainContent}
-
- );
-};
diff --git a/src/app/templates/RevealSecrets/RevealSecrets.selectors.ts b/src/app/templates/RevealSecrets/RevealSecrets.selectors.ts
deleted file mode 100644
index 96fa8582e..000000000
--- a/src/app/templates/RevealSecrets/RevealSecrets.selectors.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export enum RevealSecretsSelectors {
- RevealButton = 'Reveal Secrets/Reveal Button',
- RevealPasswordInput = 'Reveal Secrets/Reveal Password Input',
- RevealSecretsProtectedMask = 'Reveal Secrets/Reveal Secrets Protected Mask',
- RevealSecretsValue = 'Reveal Secrets/Reveal Secrets Value'
-}
diff --git a/src/app/templates/RevealSecrets/RevealSeedPhrase.tsx b/src/app/templates/RevealSecrets/RevealSeedPhrase.tsx
deleted file mode 100644
index 597594278..000000000
--- a/src/app/templates/RevealSecrets/RevealSeedPhrase.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import React, { memo, useCallback } from 'react';
-
-import { T } from 'lib/i18n';
-import { useTempleClient } from 'lib/temple/front';
-import { StoredHDAccount, TempleAccountType } from 'lib/temple/types';
-import { useDidUpdate, useVanishingState } from 'lib/ui/hooks';
-import { useAccount, useAllAccounts } from 'temple/front';
-
-import { PasswordForRevealField } from './PasswordForRevealField';
-import { SecretField } from './SecretField';
-
-export const RevealSeedPhrase = memo(() => {
- const { revealMnemonic } = useTempleClient();
-
- const allAccounts = useAllAccounts();
- const currentAccount = useAccount();
- const walletId =
- currentAccount.type === TempleAccountType.HD
- ? currentAccount.walletId
- : allAccounts.find((acc): acc is StoredHDAccount => acc.type === TempleAccountType.HD)!.walletId;
-
- const [secret, setSecret] = useVanishingState();
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
- useDidUpdate(() => void setSecret(null), [currentAccount.id, setSecret]);
-
- const onPasswordSubmit = useCallback(
- async (password: string) => revealMnemonic(walletId, password).then(scrt => void setSecret(scrt)),
- [revealMnemonic, walletId, setSecret]
- );
-
- return (
-
-
-
- {secret ? (
-
- ) : (
-
- )}
-
- );
-});
-
-const DerivationPathBanner = memo(() => (
-
-
-
-
-
-
-
-
-
-
-
-
Tezos:
-
-
-
-
-
-
-
-
EVM:
-
-
-
-));
diff --git a/src/app/templates/RevealSecrets/SecretField.tsx b/src/app/templates/RevealSecrets/SecretField.tsx
deleted file mode 100644
index 6f22097c3..000000000
--- a/src/app/templates/RevealSecrets/SecretField.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React, { FC, useMemo } from 'react';
-
-import { Alert } from 'app/atoms/Alert';
-import { ReadOnlySecretField } from 'app/atoms/ReadOnlySecretField';
-import { TID, T } from 'lib/i18n';
-import { SPACE_CHAR } from 'lib/ui/utils';
-
-import { RevealSecretsSelectors } from './RevealSecrets.selectors';
-
-interface Props {
- revealType: 'private-key' | 'seed-phrase';
- value: string;
-}
-
-interface Texts {
- title: TID;
- description: React.ReactNode;
- attention: TID;
-}
-
-export const SecretField: FC = ({ revealType, value }) => {
- const texts = useMemo(() => {
- switch (revealType) {
- case 'private-key':
- return {
- title: 'privateKey',
- description: ,
- attention: 'doNotSharePrivateKey'
- };
-
- case 'seed-phrase':
- return {
- title: 'seedPhrase',
- description: (
- <>
-
- {SPACE_CHAR}
-
- >
- ),
- attention: 'doNotSharePhrase'
- };
- }
- }, [revealType]);
-
- return (
- <>
-
-
- }
- description={
-
-
-
- }
- className="my-4"
- />
- >
- );
-};
diff --git a/src/app/templates/RevealSecrets/index.ts b/src/app/templates/RevealSecrets/index.ts
deleted file mode 100644
index 5d84754fe..000000000
--- a/src/app/templates/RevealSecrets/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export { RevealSeedPhrase } from './RevealSeedPhrase';
-export { RevealPrivateKeys } from './RevealPrivateKeys';
diff --git a/src/lib/temple/back/actions.ts b/src/lib/temple/back/actions.ts
index f2ec84fb5..c66e044e0 100644
--- a/src/lib/temple/back/actions.ts
+++ b/src/lib/temple/back/actions.ts
@@ -497,6 +497,10 @@ type ProcessedBeaconMessage = {
encrypted?: boolean;
};
+export function resetExtension(password: string) {
+ return withUnlocked(async () => Vault.reset(password));
+}
+
export async function processBeacon(
origin: string,
msg: string,
diff --git a/src/lib/temple/back/main.ts b/src/lib/temple/back/main.ts
index d68b27360..e0e379baa 100644
--- a/src/lib/temple/back/main.ts
+++ b/src/lib/temple/back/main.ts
@@ -272,6 +272,12 @@ const processRequest = async (req: TempleRequest, port: Runtime.Port): Promise {
expectRecentTimestampInMs(createdAt);
});
});
+
+ describe('reset', () => {
+ it('should reset wallet if the given password is correct', async () => {
+ await Vault.spawn(password, defaultMnemonic);
+ await Vault.setup(password);
+ await Vault.reset(password);
+ expect(await getPassHash()).toBeUndefined();
+ expect(await Vault.isExist()).toBe(false);
+ });
+
+ it('should throw an error if the given password is incorrect', async () => {
+ await Vault.spawn(password, defaultMnemonic);
+ await Vault.setup(password);
+ await expect(() => Vault.reset(invalidPassword)).rejects.toThrow('Invalid password');
+ });
+ });
});
diff --git a/src/lib/temple/front/client.ts b/src/lib/temple/front/client.ts
index a122ab165..958359287 100644
--- a/src/lib/temple/front/client.ts
+++ b/src/lib/temple/front/client.ts
@@ -2,6 +2,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react';
import constate from 'constate';
import { omit } from 'lodash';
+import browser from 'webextension-polyfill';
import { WALLETS_SPECS_STORAGE_KEY } from 'lib/constants';
import { useRetryableSWR } from 'lib/swr';
@@ -364,6 +365,16 @@ export const [TempleClientProvider, useTempleClient] = constate(() => {
return res.sessions;
}, []);
+ const resetExtension = useCallback(async (password: string) => {
+ const res = await request({
+ type: TempleMessageType.ResetExtensionRequest,
+ password
+ });
+ assertResponse(res.type === TempleMessageType.ResetExtensionResponse);
+ localStorage.clear();
+ browser.runtime.reload();
+ }, []);
+
return {
state,
@@ -408,6 +419,7 @@ export const [TempleClientProvider, useTempleClient] = constate(() => {
confirmDAppOperation,
confirmDAppSign,
getAllDAppSessions,
- removeDAppSession
+ removeDAppSession,
+ resetExtension
};
});
diff --git a/src/lib/temple/types.ts b/src/lib/temple/types.ts
index 7d360aa88..b74e52b6d 100644
--- a/src/lib/temple/types.ts
+++ b/src/lib/temple/types.ts
@@ -282,7 +282,9 @@ export enum TempleMessageType {
SendTrackEventRequest = 'SEND_TRACK_EVENT_REQUEST',
SendTrackEventResponse = 'SEND_TRACK_EVENT_RESPONSE',
SendPageEventRequest = 'SEND_PAGE_EVENT_REQUEST',
- SendPageEventResponse = 'SEND_PAGE_EVENT_RESPONSE'
+ SendPageEventResponse = 'SEND_PAGE_EVENT_RESPONSE',
+ ResetExtensionRequest = 'RESET_EXTENSION_REQUEST',
+ ResetExtensionResponse = 'RESET_EXTENSION_RESPONSE'
}
export type TempleNotification =
@@ -325,7 +327,8 @@ export type TempleRequest =
| TempleGetAllDAppSessionsRequest
| TempleRemoveDAppSessionRequest
| TempleSendTrackEventRequest
- | TempleSendPageEventRequest;
+ | TempleSendPageEventRequest
+ | TempleResetExtensionRequest;
export type TempleResponse =
| TempleGetStateResponse
@@ -361,7 +364,8 @@ export type TempleResponse =
| TempleGetAllDAppSessionsResponse
| TempleRemoveDAppSessionResponse
| TempleSendTrackEventResponse
- | TempleSendPageEventResponse;
+ | TempleSendPageEventResponse
+ | TempleResetExtensionResponse;
export interface TempleMessageBase {
type: TempleMessageType;
@@ -731,4 +735,13 @@ interface TempleRemoveDAppSessionResponse extends TempleMessageBase {
sessions: TempleDAppSessions;
}
+interface TempleResetExtensionRequest extends TempleMessageBase {
+ type: TempleMessageType.ResetExtensionRequest;
+ password: string;
+}
+
+interface TempleResetExtensionResponse extends TempleMessageBase {
+ type: TempleMessageType.ResetExtensionResponse;
+}
+
export type OperationsPreview = any[] | { branch: string; contents: any[] };
diff --git a/src/lib/ui/utils.ts b/src/lib/ui/utils.ts
index 89c29ac15..de609cc99 100644
--- a/src/lib/ui/utils.ts
+++ b/src/lib/ui/utils.ts
@@ -2,15 +2,6 @@ import { MutableRefObject, ForwardedRef } from 'react';
import { browser } from 'lib/browser';
-/** For that the following is not allowed by Prettier:
- * ```tsx
- *
- * {' '} // Use {SPACE_CHAR} instead
- *
- * ```
- */
-export const SPACE_CHAR = ' ';
-
export const combineRefs = (
...refs: (MutableRefObject | ForwardedRef | nullish)[]
) => {
diff --git a/src/temple/front/index.ts b/src/temple/front/index.ts
index 1528ca3c1..d058cecf1 100644
--- a/src/temple/front/index.ts
+++ b/src/temple/front/index.ts
@@ -11,7 +11,6 @@ export {
useAccountAddressForTezos,
useAccountForTezos,
useAccountAddressForEvm,
- useAccountForEvm,
useSetAccountId as useChangeAccount,
//
useHDGroups
diff --git a/src/temple/front/ready/index.ts b/src/temple/front/ready/index.ts
index 94c7d60a8..f0e29a323 100644
--- a/src/temple/front/ready/index.ts
+++ b/src/temple/front/ready/index.ts
@@ -23,7 +23,6 @@ export const [
useAccountAddressForTezos,
useAccountForTezos,
useAccountAddressForEvm,
- useAccountForEvm,
useSetAccountId,
//
useSettings,
@@ -44,7 +43,6 @@ export const [
v => v.accountAddressForTezos,
v => v.accountForTezos,
v => v.accountAddressForEvm,
- v => v.accountForEvm,
v => v.setAccountId,
//
v => v.settings,
diff --git a/yarn.lock b/yarn.lock
index 5b1d12ff3..ebc125434 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1605,24 +1605,24 @@
integrity sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==
"@dicebear/bottts-neutral@^8.0.1":
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/@dicebear/bottts-neutral/-/bottts-neutral-8.0.1.tgz#22f2547cd74669f5fc38ffd5298f083b049daaba"
- integrity sha512-krbD3U+UvzlY+kfQDpg9Hql1xJmmu3y9ensiU+XZXiuNw/ZavgGqpJtzpbYeF3J5GsggQlbBh/ZAK9AIKz7S3Q==
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@dicebear/bottts-neutral/-/bottts-neutral-8.0.2.tgz#4e3ff249202c570acd79e5cbfc4dc14a6a403962"
+ integrity sha512-khiccnWoo0ivb+3PyneuWcL4bJc9+izAFFKIXvE3h7ozOT6VCT4h2WtYULaPwDYBAr85CygxgdWKd7aAujK6JQ==
-"@dicebear/converter@8.0.1":
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/@dicebear/converter/-/converter-8.0.1.tgz#c037c1404f73a994ee4f943928edb367029425e1"
- integrity sha512-65L04fN4V07WcUnwQuDYDH+zrP8WA6/UeIuqqH/Pv7VWoJtIk9qHlaA+XGpPr4qgRtkmY7uXVkrED/RMlqvUDA==
+"@dicebear/converter@8.0.2":
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@dicebear/converter/-/converter-8.0.2.tgz#a1c5e8c8d324d80512786a7e8a0f3788c210ca83"
+ integrity sha512-mREmyQLIfHnt30Xzjc9ZHgDgIzbF7BXApBCYolnB2kO2Kpb14OdmsyLRsYe/Tt+Vt6sLgiigWoZFcRvbStRhLA==
dependencies:
"@types/json-schema" "^7.0.11"
tmp-promise "^3.0.3"
"@dicebear/core@^8.0.1":
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/@dicebear/core/-/core-8.0.1.tgz#3ac1e98a5380071c4a1e0d874cc8ff83b1c9ba8f"
- integrity sha512-HWqvQRpVjkboQXinCOjU3poZIMd5p+32wPvc9N5fYiXe3KQLhJNw5T5XiRttDUm3XpoTvhQ4DVTPDsXT8CqrTg==
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/@dicebear/core/-/core-8.0.2.tgz#6d42cbdd1ae11a6bb344e71ddefbc654ee3f3f4f"
+ integrity sha512-Zr3dBAH+6BBYc2kjz7KvJCMYasQlsY9CZ7D3abgZhk/XRT4B3qxo8kP+FL8YjJvrOJyV2P7h08BAKZlTWuKXPA==
dependencies:
- "@dicebear/converter" "8.0.1"
+ "@dicebear/converter" "8.0.2"
"@types/json-schema" "^7.0.11"
"@discoveryjs/json-ext@^0.5.0":