From 00f65f9edcd30c575d369b223535114a043f9fd5 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 20 Apr 2022 19:34:09 +0800 Subject: [PATCH 01/44] feat: split wallet app entries --- .../InjectedComponents/ToolboxUnstyled.tsx | 46 +++++++++++++++++++ .../components/shared/ApplicationBoard.tsx | 12 ++++- .../shared/ApplicationBoardDialog.tsx | 40 ++++++++++++++++ .../SNSAdaptor/WalletStatusDialog/index.tsx | 3 -- .../src/plugins/Wallet/SNSAdaptor/index.tsx | 2 + .../facebook.com/injection/Toolbar.tsx | 2 +- .../minds.com/injection/ToolboxHint.tsx | 2 +- .../twitter.com/injection/ToolboxHint.tsx | 7 +-- .../twitter.com/injection/ToolboxHint_UI.tsx | 3 +- packages/mask/src/social-network/types.ts | 2 +- packages/mask/src/social-network/ui.ts | 5 +- packages/plugins/Wallet/src/messages.ts | 9 ++++ 12 files changed, 121 insertions(+), 12 deletions(-) create mode 100644 packages/mask/src/components/shared/ApplicationBoardDialog.tsx diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index 2f6303e1c2b9..c3963be82898 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -82,8 +82,54 @@ export interface ToolboxHintProps { iconSize?: number badgeSize?: number mini?: boolean + category?: 'wallet' | 'application' } export function ToolboxHintUnstyled(props: ToolboxHintProps) { + return props.category === 'wallet' ? : +} + +function ToolboxHintForApplication(props: ToolboxHintProps) { + const { + ListItemButton = MuiListItemButton, + Container = 'div', + Typography = MuiTypography, + iconSize = 24, + mini, + ListItemText = MuiListItemText, + } = props + const { classes } = useStyles() + const { t } = useI18N() + const { openDialog } = useRemoteControlledDialog(WalletMessages.events.ApplicationDialogUpdated) + return ( + + + + {mini ? null : ( + + {t('mask_network')} + + } + /> + )} + + + ) +} + +function ToolboxHintForWallet(props: ToolboxHintProps) { const { t } = useI18N() const nextIDConnectStatus = useNextIDConnectStatus() const { diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c11b082171c5..da65ef8a7f22 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,4 +1,5 @@ import { Fragment, useState, useMemo } from 'react' +import { Close as CloseIcon } from '@mui/icons-material' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, useTheme } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' @@ -34,6 +35,7 @@ const useStyles = makeStyles()((theme) => { }, }, subTitle: { + cursor: 'default', fontSize: 18, lineHeight: '24px', fontWeight: 600, @@ -66,10 +68,17 @@ const useStyles = makeStyles()((theme) => { placeholder: { color: getMaskColor(theme).textLight, }, + closeIcon: { + cursor: 'pointer', + }, } }) -export function ApplicationBoard() { +interface Props { + closeDialog(): void +} + +export function ApplicationBoard(props: Props) { const { classes } = useStyles() const theme = useTheme() const { t } = useI18N() @@ -116,6 +125,7 @@ export function ApplicationBoard() { return ( <>
+ {t('applications')} { + return { + content: { + padding: theme.spacing(2.5), + }, + } +}) + +export function ApplicationBoardDialog() { + const { classes } = useStyles() + + const { open, closeDialog: _closeDialog } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, + ) + + const closeDialog = useCallback(() => { + _closeDialog() + CrossIsolationMessages.events.requestComposition.sendToLocal({ + reason: 'timeline', + open: false, + }) + }, []) + + return ( + + + + + + ) +} diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx index 5369a8dc9170..1cc04823e2cb 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx @@ -9,7 +9,6 @@ import { makeStyles } from '@masknet/theme' import { WalletStatusBox } from '../../../../components/shared/WalletStatusBox' import { useI18N } from '../../../../utils' import { WalletMessages } from '../../messages' -import { ApplicationBoard } from '../../../../components/shared/ApplicationBoard' const useStyles = makeStyles()((theme) => ({ content: { @@ -65,9 +64,7 @@ export function WalletStatusDialog(props: WalletStatusDialogProps) { return ( - {t('wallets')} - {!props.isDashboard && } {!chainIdValid ? ( diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/index.tsx index 25751a58a88b..61aac56e2886 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/index.tsx @@ -12,6 +12,7 @@ import { WalletRiskWarningDialog } from './RiskWarningDialog' import { GasSettingDialog } from './GasSettingDialog' import { TransactionSnackbar } from './TransactionSnackbar' import { RestoreLegacyWalletDialog } from './RestoreLegacyWalletDialog' +import { ApplicationBoardDialog } from '../../../components/shared/ApplicationBoardDialog' const sns: Plugin.SNSAdaptor.Definition = { ...base, @@ -24,6 +25,7 @@ const sns: Plugin.SNSAdaptor.Definition = { + diff --git a/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx b/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx index 02d4ee6675d8..7a3b239b9b00 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx +++ b/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx @@ -3,7 +3,7 @@ import { createReactRootShadowed } from '../../../utils/shadow-root/renderInShad import { startWatch } from '../../../utils/watcher' import { toolBoxInSideBarSelector } from '../utils/selector' import { ToolboxAtFacebook } from './ToolbarUI' -export function injectToolboxHintAtFacebook(signal: AbortSignal) { +export function injectToolboxHintAtFacebook(signal: AbortSignal, category: 'wallet' | 'application') { const watcher = new MutationObserverWatcher(toolBoxInSideBarSelector()) startWatch(watcher, signal) createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() diff --git a/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx b/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx index 1b9eda499090..066f378039d9 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx +++ b/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx @@ -4,7 +4,7 @@ import { startWatch } from '../../../utils/watcher' import { toolBoxInSideBarSelector } from '../utils/selector' import { ToolboxHintAtMinds } from './ToolboxHint_UI' -export function injectToolboxHintAtMinds(signal: AbortSignal) { +export function injectToolboxHintAtMinds(signal: AbortSignal, category: 'wallet' | 'application') { const watcher = new MutationObserverWatcher(toolBoxInSideBarSelector()) startWatch(watcher, signal) createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint.tsx index 6043bfa62af7..ce817fb80aa4 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint.tsx @@ -3,11 +3,12 @@ import { createReactRootShadowed } from '../../../utils/shadow-root/renderInShad import { sideBarProfileSelector, toolBoxInSideBarSelector } from '../utils/selector' import { startWatch } from '../../../utils/watcher' import { ProfileLinkAtTwitter, ToolboxHintAtTwitter } from './ToolboxHint_UI' -export function injectToolboxHintAtTwitter(signal: AbortSignal) { +export function injectToolboxHintAtTwitter(signal: AbortSignal, category: 'wallet' | 'application') { const watcher = new MutationObserverWatcher(toolBoxInSideBarSelector()) startWatch(watcher, signal) - createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() - + createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render( + , + ) injectProfile(signal) } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint_UI.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint_UI.tsx index bb80d716e12f..c15c32e1485d 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint_UI.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/ToolboxHint_UI.tsx @@ -35,7 +35,7 @@ const Icon = styled(ListItemIcon)` min-width: 0; ` -export function ToolboxHintAtTwitter() { +export function ToolboxHintAtTwitter(props: { category: 'wallet' | 'application' }) { const mini = useMediaQuery(`(max-width: ${twitterBreakPoint}px)`) return ( ) } diff --git a/packages/mask/src/social-network/types.ts b/packages/mask/src/social-network/types.ts index fe490c14eec0..b824adea656e 100644 --- a/packages/mask/src/social-network/types.ts +++ b/packages/mask/src/social-network/types.ts @@ -115,7 +115,7 @@ export namespace SocialNetworkUI { /** Add custom actions buttons to the post */ postActions?(signal: AbortSignal, author: PostInfo): void /** Inject a tool box that displayed in the navigation bar of the SNS */ - toolbox?(signal: AbortSignal): void + toolbox?(signal: AbortSignal, category: 'wallet' | 'application'): void /** Inject the UI that used to notify if the user has not completely setup the current network. */ setupPrompt?(signal: AbortSignal): void /** diff --git a/packages/mask/src/social-network/ui.ts b/packages/mask/src/social-network/ui.ts index 17bcb1515265..4507336972a4 100644 --- a/packages/mask/src/social-network/ui.ts +++ b/packages/mask/src/social-network/ui.ts @@ -86,7 +86,10 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. startPostListener() ui.collecting.currentVisitingIdentityProvider?.start(signal) ui.injection.pageInspector?.(signal) - if (Flags.toolbox_enabled) ui.injection.toolbox?.(signal) + if (Flags.toolbox_enabled) { + ui.injection.toolbox?.(signal, 'wallet') + ui.injection.toolbox?.(signal, 'application') + } ui.injection.setupPrompt?.(signal) ui.injection.newPostComposition?.start?.(signal) ui.injection.searchResult?.(signal) diff --git a/packages/plugins/Wallet/src/messages.ts b/packages/plugins/Wallet/src/messages.ts index 74d0ee0e1780..17ee5dc87e22 100644 --- a/packages/plugins/Wallet/src/messages.ts +++ b/packages/plugins/Wallet/src/messages.ts @@ -63,6 +63,10 @@ export type WalletStatusDialogEvent = { open: boolean } +export type ApplicationDialogEvent = { + open: boolean +} + export type GasSettingDialogEvent = { open: boolean gasLimit: number @@ -150,6 +154,11 @@ export interface WalletMessage { */ walletStatusDialogUpdated: WalletStatusDialogEvent + /** + * Application dialog + */ + ApplicationDialogUpdated: ApplicationDialogEvent + /** * Wallet status dialog */ From 49576510a1f11f3cf4ceba151d8ebbc128f8dba4 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 20 Apr 2022 19:37:46 +0800 Subject: [PATCH 02/44] chore: type --- .../mask/src/components/InjectedComponents/ToolboxUnstyled.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index c3963be82898..4c61149181d1 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -82,7 +82,7 @@ export interface ToolboxHintProps { iconSize?: number badgeSize?: number mini?: boolean - category?: 'wallet' | 'application' + category: 'wallet' | 'application' } export function ToolboxHintUnstyled(props: ToolboxHintProps) { return props.category === 'wallet' ? : From 9653259b193e6e6c6f5937e175c71035d2d0edea Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 20 Apr 2022 19:44:18 +0800 Subject: [PATCH 03/44] chore: type --- .../social-network-adaptor/facebook.com/injection/Toolbar.tsx | 4 +++- .../facebook.com/injection/ToolbarUI.tsx | 3 ++- .../minds.com/injection/ToolboxHint.tsx | 4 +++- .../minds.com/injection/ToolboxHint_UI.tsx | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx b/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx index 7a3b239b9b00..0271d175348d 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx +++ b/packages/mask/src/social-network-adaptor/facebook.com/injection/Toolbar.tsx @@ -6,5 +6,7 @@ import { ToolboxAtFacebook } from './ToolbarUI' export function injectToolboxHintAtFacebook(signal: AbortSignal, category: 'wallet' | 'application') { const watcher = new MutationObserverWatcher(toolBoxInSideBarSelector()) startWatch(watcher, signal) - createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() + createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render( + , + ) } diff --git a/packages/mask/src/social-network-adaptor/facebook.com/injection/ToolbarUI.tsx b/packages/mask/src/social-network-adaptor/facebook.com/injection/ToolbarUI.tsx index 0c37fe697914..da7d3003887c 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/injection/ToolbarUI.tsx +++ b/packages/mask/src/social-network-adaptor/facebook.com/injection/ToolbarUI.tsx @@ -23,7 +23,7 @@ const Icon = styled(ListItemIcon)` } ` -export function ToolboxAtFacebook() { +export function ToolboxAtFacebook(props: { category: 'wallet' | 'application' }) { const isSmall = useMediaQuery(`(max-height: ${fbBreakPoint}px)`) return ( ) } diff --git a/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx b/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx index 066f378039d9..edda621ee3e8 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx +++ b/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint.tsx @@ -7,5 +7,7 @@ import { ToolboxHintAtMinds } from './ToolboxHint_UI' export function injectToolboxHintAtMinds(signal: AbortSignal, category: 'wallet' | 'application') { const watcher = new MutationObserverWatcher(toolBoxInSideBarSelector()) startWatch(watcher, signal) - createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() + createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render( + , + ) } diff --git a/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint_UI.tsx b/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint_UI.tsx index b40102b29cbb..de15d87e68eb 100644 --- a/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint_UI.tsx +++ b/packages/mask/src/social-network-adaptor/minds.com/injection/ToolboxHint_UI.tsx @@ -40,7 +40,7 @@ const Icon = styled(ListItemIcon)` } ` -export function ToolboxHintAtMinds() { +export function ToolboxHintAtMinds(props: { category: 'wallet' | 'application' }) { const mini = useMediaQuery(`(max-width: ${mindsBreakPoint}px)`) return ( @@ -50,6 +50,7 @@ export function ToolboxHintAtMinds() { ListItemButton={Item} Typography={Text} ListItemIcon={Icon} + category={props.category} /> ) } From a6a0438137afff259ca1381658b2f19b3eb7a296 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 26 Apr 2022 16:11:04 +0800 Subject: [PATCH 04/44] chore: solve conflict --- packages/mask/shared-ui/locales/qya-AA.json | 26 ++++- .../components/shared/ApplicationBoard.tsx | 107 ++++++++++++++++-- 2 files changed, 124 insertions(+), 9 deletions(-) diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index 447784bb81ea..d7eb8ae5d7cf 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -21,6 +21,7 @@ "no_data": "crwdns10097:0crwdne10097:0", "tip": "crwdns10105:0crwdne10105:0", "tags": "crwdns10107:0crwdne10107:0", + "default": "crwdns16406:0crwdne16406:0", "contract": "crwdns10109:0crwdne10109:0", "initializing": "crwdns10111:0crwdne10111:0", "redirect_alert": "crwdns10113:0crwdne10113:0", @@ -207,9 +208,17 @@ "plugin_airdrop_nft_claim_all": "crwdns8117:0crwdne8117:0", "plugin_airdrop_nft_claim_successful": "crwdns8119:0crwdne8119:0", "plugin_airdrop_nft_claim_failed": "crwdns8121:0crwdne8121:0", + "recent_transaction_pending": "crwdns16388:0crwdne16388:0", + "recent_transaction_success": "crwdns16390:0crwdne16390:0", + "recent_transaction_failed": "crwdns16392:0crwdne16392:0", + "recent_transaction_cancelled": "crwdns16394:0crwdne16394:0", "wallet_balance": "crwdns4505:0crwdne4505:0", "wallet_balance_eth": "crwdns10189:0crwdne10189:0", "wallet_new": "crwdns4511:0crwdne4511:0", + "wallets": "crwdns4515:0crwdne4515:0", + "wallet_status_pending": "crwdns16396:0crwdne16396:0", + "wallet_status_pending_clear_all": "crwdns16398:0crwdne16398:0", + "wallet_status_pending_clear": "crwdns16400:0crwdne16400:0", "wallet_status_button_change": "crwdns4519:0crwdne4519:0", "wallet_status_button_copy_address": "crwdns4523:0crwdne4523:0", "wallet_transfer_account": "crwdns10191:0crwdne10191:0", @@ -422,7 +431,6 @@ "plugin_trader_price_updated": "crwdns10237:0crwdne10237:0", "plugin_savings": "crwdns13250:0crwdne13250:0", "plugin_savings_asset": "crwdns14804:0crwdne14804:0", - "plugin_no_protocol_available": "crwdns13254:0crwdne13254:0", "plugin_savings_apr": "crwdns13256:0crwdne13256:0", "plugin_savings_wallet": "crwdns13258:0crwdne13258:0", "plugin_savings_operation": "crwdns13260:0crwdne13260:0", @@ -910,11 +918,14 @@ "wallet_verify_persona_sign": "crwdns16310:0crwdne16310:0", "wallet_verify_has_bound": "crwdns16312:0crwdne16312:0", "wallet_verify_persona_name": "crwdns16314:0{{personaName}}crwdne16314:0", + "wallet_verify_empty_alert": "crwdns16408:0crwdne16408:0", "wallet_verify_persona_sign_intro": "crwdns16316:0crwdne16316:0", "waller_verify_wallet_sign_intro": "crwdns16318:0crwdne16318:0", "popups_add_wallet": "crwdns16320:0crwdne16320:0", "popups_profile_photo": "crwdns16322:0crwdne16322:0", "popups_public_key": "crwdns16324:0crwdne16324:0", + "popups_create_persona": "crwdns16402:0crwdne16402:0", + "popups_restore_and_login": "crwdns16404:0crwdne16404:0", "popups_name": "crwdns16326:0crwdne16326:0", "popups_social_account": "crwdns16328:0crwdne16328:0", "popups_connected_wallets": "crwdns16330:0crwdne16330:0", @@ -1075,6 +1086,19 @@ "plugin_artblocks_smt_wrong": "crwdns14520:0crwdne14520:0", "plugin_artblocks_share": "crwdns14522:0{{name}}crwdnd14522:0{{price}}crwdnd14522:0{{symbol}}crwdne14522:0", "plugin_artblocks_share_no_official_account": "crwdns14524:0{{name}}crwdnd14524:0{{price}}crwdnd14524:0{{symbol}}crwdne14524:0", + "plugin_tips_disconnect_introduction": "crwdns16410:0{{persona}}crwdnd16410:0{{address}}crwdne16410:0", + "plugin_tips_disconnect_dialog_title": "crwdns16412:0crwdne16412:0", + "plugin_tips_not_evm_alert": "crwdns16414:0crwdne16414:0", + "plugin_tips_persona_sign_success": "crwdns16416:0crwdne16416:0", + "plugin_tips_persona_sign_error": "crwdns16418:0crwdne16418:0", + "plugin_tips_wallet_sign_success": "crwdns16420:0crwdne16420:0", + "plugin_tips_wallet_sign_error": "crwdns16422:0crwdne16422:0", + "plugin_tips_wallet_add": "crwdns16424:0crwdne16424:0", + "plugin_tips_connect_wallet": "crwdns16426:0crwdne16426:0", + "plugin_tips_sns_persona_unmatched": "crwdns16428:0{{currentSNSConnectedPersonaPublicKey}}crwdnd16428:0{{currentPersonaPublicKey}}crwdnd16428:0{{currentSNSConnectedPersonaPublicKey}}crwdne16428:0", + "plugin_tips_verify_line_intro": "crwdns16430:0crwdne16430:0", + "plugin_tips_empty_list": "crwdns16432:0crwdne16432:0", + "plugin_tips_set_as_default": "crwdns16434:0crwdne16434:0", "plugin_artblocks_description": "crwdns16264:0crwdne16264:0", "plugin_artblocks_name": "crwdns16266:0crwdne16266:0", "plugin_dhedge_description": "crwdns16268:0crwdne16268:0", diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 36b75a13c686..ad9c4dda80b3 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,16 +1,32 @@ -import { useState, useMemo } from 'react' +import { useState, useMemo, useCallback } from 'react' import { Close as CloseIcon } from '@mui/icons-material' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, useTheme } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount } from '@masknet/plugin-infra/web3' -import { EMPTY_LIST } from '@masknet/shared-base' +import { + EMPTY_LIST, + NextIDPlatform, + CrossIsolationMessages, + ProfileIdentifier, + formatPersonaPublicKey, +} from '@masknet/shared-base' import { getCurrentSNSNetwork } from '../../social-network-adaptor/utils' import { activatedSocialNetworkUI } from '../../social-network' import { useI18N } from '../../utils' import { ApplicationSettingDialog } from './ApplicationSettingDialog' import { Application, getUnlistedApp } from './ApplicationSettingPluginList' +import { useRemoteControlledDialog } from '@masknet/shared-base-ui' +import { useAsync } from 'react-use' +import Services from '../../extension/service' +import { NextIDProof } from '@masknet/web3-providers' +import type { Persona } from '../../database' +import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI' +import { useSetupGuideStatusState } from '../DataSource/useNextID' +import { useMyPersonas } from '../DataSource/useMyPersonas' +import { WalletMessages } from '../../plugins/Wallet/messages' +import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' const useStyles = makeStyles()((theme) => { const smallQuery = `@media (max-width: ${theme.breakpoints.values.sm}px)` @@ -73,12 +89,14 @@ const useStyles = makeStyles()((theme) => { }, } }) - -interface Props { - closeDialog(): void +export function ApplicationBoard() { + return ( + + + + ) } - -export function ApplicationBoard(props: Props) { +function ApplicationBoardContent() { const { classes } = useStyles() const theme = useTheme() const { t } = useI18N() @@ -163,5 +181,78 @@ interface RenderEntryComponentWrapperProps { function RenderEntryComponentWrapper({ application }: RenderEntryComponentWrapperProps) { const RenderEntryComponent = application.entry.RenderEntryComponent! - return + return application.entry.nextIdRequired ? ( + + ) : ( + + ) +} + +function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComponentWrapperProps) { + const ui = activatedSocialNetworkUI + const { t } = useI18N() + const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform + const lastState = useSetupGuideStatusState() + const { currentPersona } = PersonaContext.useContainer() + const lastRecognized = useLastRecognizedIdentity() + const username = useMemo(() => { + return lastState.username || (!lastRecognized.identifier.isUnknown ? lastRecognized.identifier.userId : '') + }, [lastState, lastRecognized]) + const personas = useMyPersonas() + + const checkSNSConnectToCurrentPersona = useCallback((persona: Persona) => { + return ( + persona?.linkedProfiles.get(new ProfileIdentifier(ui.networkIdentifier, username)) + ?.connectionConfirmState === 'confirmed' + ) + }, []) + + const { value: ApplicationCurrentStatus } = useAsync(async () => { + const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() + const currentPersona = (await Services.Identity.queryPersona(currentPersonaIdentifier!)) as Persona + const currentSNSConnectedPersona = personas.find((persona) => + checkSNSConnectToCurrentPersona(persona as Persona), + ) + return { + isSNSConnectToCurrentPersona: checkSNSConnectToCurrentPersona(currentPersona), + isNextIDVerify: await NextIDProof.queryIsBound(currentPersona.publicHexKey ?? '', platform, username), + currentPersonaPublicKey: currentPersona?.fingerprint, + currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.fingerprint, + } + }, [platform, username, ui, personas, currentPersona]) + const { + isNextIDVerify, + isSNSConnectToCurrentPersona, + currentPersonaPublicKey, + currentSNSConnectedPersonaPublicKey, + } = ApplicationCurrentStatus ?? {} + const { closeDialog } = useRemoteControlledDialog(WalletMessages.events.walletStatusDialogUpdated) + + const onNextIdVerify = useCallback(() => { + closeDialog() + CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) + }, []) + + if (!application.entry.RenderEntryComponent) return null + + const RenderEntryComponent = application.entry.RenderEntryComponent + const shouldVerifyNextId = Boolean(!isNextIDVerify && ApplicationCurrentStatus) + const shouldDisplayTooltipHint = ApplicationCurrentStatus?.isSNSConnectToCurrentPersona === false + return ( + + ) } From 3f84e7e33d2045291cf091c141e15fb20b4410d1 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 26 Apr 2022 16:14:02 +0800 Subject: [PATCH 05/44] Revert "chore: solve conflict" This reverts commit a6a0438137afff259ca1381658b2f19b3eb7a296. --- packages/mask/shared-ui/locales/qya-AA.json | 26 +---- .../components/shared/ApplicationBoard.tsx | 107 ++---------------- 2 files changed, 9 insertions(+), 124 deletions(-) diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index d7eb8ae5d7cf..447784bb81ea 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -21,7 +21,6 @@ "no_data": "crwdns10097:0crwdne10097:0", "tip": "crwdns10105:0crwdne10105:0", "tags": "crwdns10107:0crwdne10107:0", - "default": "crwdns16406:0crwdne16406:0", "contract": "crwdns10109:0crwdne10109:0", "initializing": "crwdns10111:0crwdne10111:0", "redirect_alert": "crwdns10113:0crwdne10113:0", @@ -208,17 +207,9 @@ "plugin_airdrop_nft_claim_all": "crwdns8117:0crwdne8117:0", "plugin_airdrop_nft_claim_successful": "crwdns8119:0crwdne8119:0", "plugin_airdrop_nft_claim_failed": "crwdns8121:0crwdne8121:0", - "recent_transaction_pending": "crwdns16388:0crwdne16388:0", - "recent_transaction_success": "crwdns16390:0crwdne16390:0", - "recent_transaction_failed": "crwdns16392:0crwdne16392:0", - "recent_transaction_cancelled": "crwdns16394:0crwdne16394:0", "wallet_balance": "crwdns4505:0crwdne4505:0", "wallet_balance_eth": "crwdns10189:0crwdne10189:0", "wallet_new": "crwdns4511:0crwdne4511:0", - "wallets": "crwdns4515:0crwdne4515:0", - "wallet_status_pending": "crwdns16396:0crwdne16396:0", - "wallet_status_pending_clear_all": "crwdns16398:0crwdne16398:0", - "wallet_status_pending_clear": "crwdns16400:0crwdne16400:0", "wallet_status_button_change": "crwdns4519:0crwdne4519:0", "wallet_status_button_copy_address": "crwdns4523:0crwdne4523:0", "wallet_transfer_account": "crwdns10191:0crwdne10191:0", @@ -431,6 +422,7 @@ "plugin_trader_price_updated": "crwdns10237:0crwdne10237:0", "plugin_savings": "crwdns13250:0crwdne13250:0", "plugin_savings_asset": "crwdns14804:0crwdne14804:0", + "plugin_no_protocol_available": "crwdns13254:0crwdne13254:0", "plugin_savings_apr": "crwdns13256:0crwdne13256:0", "plugin_savings_wallet": "crwdns13258:0crwdne13258:0", "plugin_savings_operation": "crwdns13260:0crwdne13260:0", @@ -918,14 +910,11 @@ "wallet_verify_persona_sign": "crwdns16310:0crwdne16310:0", "wallet_verify_has_bound": "crwdns16312:0crwdne16312:0", "wallet_verify_persona_name": "crwdns16314:0{{personaName}}crwdne16314:0", - "wallet_verify_empty_alert": "crwdns16408:0crwdne16408:0", "wallet_verify_persona_sign_intro": "crwdns16316:0crwdne16316:0", "waller_verify_wallet_sign_intro": "crwdns16318:0crwdne16318:0", "popups_add_wallet": "crwdns16320:0crwdne16320:0", "popups_profile_photo": "crwdns16322:0crwdne16322:0", "popups_public_key": "crwdns16324:0crwdne16324:0", - "popups_create_persona": "crwdns16402:0crwdne16402:0", - "popups_restore_and_login": "crwdns16404:0crwdne16404:0", "popups_name": "crwdns16326:0crwdne16326:0", "popups_social_account": "crwdns16328:0crwdne16328:0", "popups_connected_wallets": "crwdns16330:0crwdne16330:0", @@ -1086,19 +1075,6 @@ "plugin_artblocks_smt_wrong": "crwdns14520:0crwdne14520:0", "plugin_artblocks_share": "crwdns14522:0{{name}}crwdnd14522:0{{price}}crwdnd14522:0{{symbol}}crwdne14522:0", "plugin_artblocks_share_no_official_account": "crwdns14524:0{{name}}crwdnd14524:0{{price}}crwdnd14524:0{{symbol}}crwdne14524:0", - "plugin_tips_disconnect_introduction": "crwdns16410:0{{persona}}crwdnd16410:0{{address}}crwdne16410:0", - "plugin_tips_disconnect_dialog_title": "crwdns16412:0crwdne16412:0", - "plugin_tips_not_evm_alert": "crwdns16414:0crwdne16414:0", - "plugin_tips_persona_sign_success": "crwdns16416:0crwdne16416:0", - "plugin_tips_persona_sign_error": "crwdns16418:0crwdne16418:0", - "plugin_tips_wallet_sign_success": "crwdns16420:0crwdne16420:0", - "plugin_tips_wallet_sign_error": "crwdns16422:0crwdne16422:0", - "plugin_tips_wallet_add": "crwdns16424:0crwdne16424:0", - "plugin_tips_connect_wallet": "crwdns16426:0crwdne16426:0", - "plugin_tips_sns_persona_unmatched": "crwdns16428:0{{currentSNSConnectedPersonaPublicKey}}crwdnd16428:0{{currentPersonaPublicKey}}crwdnd16428:0{{currentSNSConnectedPersonaPublicKey}}crwdne16428:0", - "plugin_tips_verify_line_intro": "crwdns16430:0crwdne16430:0", - "plugin_tips_empty_list": "crwdns16432:0crwdne16432:0", - "plugin_tips_set_as_default": "crwdns16434:0crwdne16434:0", "plugin_artblocks_description": "crwdns16264:0crwdne16264:0", "plugin_artblocks_name": "crwdns16266:0crwdne16266:0", "plugin_dhedge_description": "crwdns16268:0crwdne16268:0", diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index ad9c4dda80b3..36b75a13c686 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,32 +1,16 @@ -import { useState, useMemo, useCallback } from 'react' +import { useState, useMemo } from 'react' import { Close as CloseIcon } from '@mui/icons-material' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, useTheme } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount } from '@masknet/plugin-infra/web3' -import { - EMPTY_LIST, - NextIDPlatform, - CrossIsolationMessages, - ProfileIdentifier, - formatPersonaPublicKey, -} from '@masknet/shared-base' +import { EMPTY_LIST } from '@masknet/shared-base' import { getCurrentSNSNetwork } from '../../social-network-adaptor/utils' import { activatedSocialNetworkUI } from '../../social-network' import { useI18N } from '../../utils' import { ApplicationSettingDialog } from './ApplicationSettingDialog' import { Application, getUnlistedApp } from './ApplicationSettingPluginList' -import { useRemoteControlledDialog } from '@masknet/shared-base-ui' -import { useAsync } from 'react-use' -import Services from '../../extension/service' -import { NextIDProof } from '@masknet/web3-providers' -import type { Persona } from '../../database' -import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI' -import { useSetupGuideStatusState } from '../DataSource/useNextID' -import { useMyPersonas } from '../DataSource/useMyPersonas' -import { WalletMessages } from '../../plugins/Wallet/messages' -import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' const useStyles = makeStyles()((theme) => { const smallQuery = `@media (max-width: ${theme.breakpoints.values.sm}px)` @@ -89,14 +73,12 @@ const useStyles = makeStyles()((theme) => { }, } }) -export function ApplicationBoard() { - return ( - - - - ) + +interface Props { + closeDialog(): void } -function ApplicationBoardContent() { + +export function ApplicationBoard(props: Props) { const { classes } = useStyles() const theme = useTheme() const { t } = useI18N() @@ -181,78 +163,5 @@ interface RenderEntryComponentWrapperProps { function RenderEntryComponentWrapper({ application }: RenderEntryComponentWrapperProps) { const RenderEntryComponent = application.entry.RenderEntryComponent! - return application.entry.nextIdRequired ? ( - - ) : ( - - ) -} - -function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComponentWrapperProps) { - const ui = activatedSocialNetworkUI - const { t } = useI18N() - const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform - const lastState = useSetupGuideStatusState() - const { currentPersona } = PersonaContext.useContainer() - const lastRecognized = useLastRecognizedIdentity() - const username = useMemo(() => { - return lastState.username || (!lastRecognized.identifier.isUnknown ? lastRecognized.identifier.userId : '') - }, [lastState, lastRecognized]) - const personas = useMyPersonas() - - const checkSNSConnectToCurrentPersona = useCallback((persona: Persona) => { - return ( - persona?.linkedProfiles.get(new ProfileIdentifier(ui.networkIdentifier, username)) - ?.connectionConfirmState === 'confirmed' - ) - }, []) - - const { value: ApplicationCurrentStatus } = useAsync(async () => { - const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() - const currentPersona = (await Services.Identity.queryPersona(currentPersonaIdentifier!)) as Persona - const currentSNSConnectedPersona = personas.find((persona) => - checkSNSConnectToCurrentPersona(persona as Persona), - ) - return { - isSNSConnectToCurrentPersona: checkSNSConnectToCurrentPersona(currentPersona), - isNextIDVerify: await NextIDProof.queryIsBound(currentPersona.publicHexKey ?? '', platform, username), - currentPersonaPublicKey: currentPersona?.fingerprint, - currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.fingerprint, - } - }, [platform, username, ui, personas, currentPersona]) - const { - isNextIDVerify, - isSNSConnectToCurrentPersona, - currentPersonaPublicKey, - currentSNSConnectedPersonaPublicKey, - } = ApplicationCurrentStatus ?? {} - const { closeDialog } = useRemoteControlledDialog(WalletMessages.events.walletStatusDialogUpdated) - - const onNextIdVerify = useCallback(() => { - closeDialog() - CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) - }, []) - - if (!application.entry.RenderEntryComponent) return null - - const RenderEntryComponent = application.entry.RenderEntryComponent - const shouldVerifyNextId = Boolean(!isNextIDVerify && ApplicationCurrentStatus) - const shouldDisplayTooltipHint = ApplicationCurrentStatus?.isSNSConnectToCurrentPersona === false - return ( - - ) + return } From d6f5ed4ec76c8c0cfe97d250a70b789571a67d96 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 27 Apr 2022 11:20:17 +0800 Subject: [PATCH 06/44] chore: solve conflict --- packages/mask/src/components/shared/ApplicationBoard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c7a7871e424a..c27f12eaa470 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -97,7 +97,7 @@ interface Props { export function ApplicationBoard(props: Props) { return ( - + ) } From c66d357071421f1b1b4518e860dd8e42f4046386 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 27 Apr 2022 16:27:45 +0800 Subject: [PATCH 07/44] feat: recommend feature app --- packages/mask/shared-ui/locales/en-US.json | 1 + .../components/shared/ApplicationBoard.tsx | 15 +++++- .../shared/ApplicationBoardDialog.tsx | 1 + .../shared/ApplicationSettingPluginList.tsx | 4 +- .../plugins/RedPacket/SNSAdaptor/index.tsx | 6 +++ packages/plugin-infra/src/types.ts | 5 ++ .../UI/components/ApplicationEntry/index.tsx | 51 ++++++++++++++++++- 7 files changed, 78 insertions(+), 5 deletions(-) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index a10fd77ec41b..fb6d7700547f 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -330,6 +330,7 @@ "plugin_red_packet_erc20_tab_title": "Token", "plugin_red_packet_erc721_tab_title": "Collectibles", "plugin_red_packet_name": "Lucky Drop", + "plugin_red_packet_recommend_feature_description": "Surpirse your social friends with Lucky Drop", "plugin_red_packet_description": "Gift crypto or NFTs to any users, first come, first served.", "plugin_red_packet_erc721_insufficient_balance": "Insufficient Balance", "plugin_red_packet_details": "Lucky Drop Details", diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c27f12eaa470..0cdfe17c61e2 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,7 +1,7 @@ import { useState, useMemo, useCallback } from 'react' import { Close as CloseIcon } from '@mui/icons-material' import { makeStyles, getMaskColor } from '@masknet/theme' -import { Typography, useTheme } from '@mui/material' +import { Typography, useTheme, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount } from '@masknet/plugin-infra/web3' @@ -87,6 +87,10 @@ const useStyles = makeStyles()((theme) => { closeIcon: { cursor: 'pointer', }, + recommendFeatureAppListWrapper: { + width: '100%', + margin: '16px 2px 12px 2px', + }, } }) @@ -144,7 +148,8 @@ function ApplicationBoardContent(props: Props) { .filter((x) => Boolean(x.entry.RenderEntryComponent)), [snsAdaptorPlugins, currentWeb3Network, chainId, account], ) - const listedAppList = applicationList.filter((x) => !getUnlistedApp(x)) + const recommendFeatureAppList = applicationList.filter((x) => x.entry.recommendFeature) + const listedAppList = applicationList.filter((x) => !x.entry.recommendFeature).filter((x) => !getUnlistedApp(x)) return ( <>
@@ -157,6 +162,12 @@ function ApplicationBoardContent(props: Props) { />
+ + {recommendFeatureAppList.map((application) => ( + + ))} + + {listedAppList.length > 0 ? (
{listedAppList.map((application) => ( diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index 1fb23343a32c..900832d59a0a 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -11,6 +11,7 @@ const useStyles = makeStyles()((theme) => { return { content: { padding: theme.spacing(2.5), + height: 540, }, } }) diff --git a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx index 96570a3fdfc3..1fa1baf7ac0e 100644 --- a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx +++ b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx @@ -85,7 +85,9 @@ export function ApplicationSettingPluginList() { .reduce((acc, cur) => { if (!cur.ApplicationEntries) return acc return acc.concat( - cur.ApplicationEntries.filter((x) => x.appBoardSortingDefaultPriority).map((x) => { + cur.ApplicationEntries.filter( + (x) => x.appBoardSortingDefaultPriority && !x.recommendFeature, + ).map((x) => { return { entry: x, pluginId: cur.ID, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx index c811a8b0ef41..f15cbffbdaa1 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx @@ -95,12 +95,17 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const recommendFeature = { + description: , + backgroundGradient: 'linear-gradient(180.54deg, #FF9A9E 0.71%, #FECFEF 98.79%, #FECFEF 99.78%)', + } return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { return ( @@ -123,6 +128,7 @@ const sns: Plugin.SNSAdaptor.Definition = { tutorialLink: 'https://realmasknetwork.notion.site/Gift-token-NFTs-to-your-friends-Support-ETH-BSC-and-Polygon-0a71fd421aae4563bd07caa3e2129e5b', category: 'dapp', + recommendFeature, } })(), ], diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index ee36255c0809..aee268ed88ac 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -340,6 +340,11 @@ export namespace Plugin.SNSAdaptor { category?: 'dapp' | 'other' nextIdRequired?: boolean + + recommendFeature?: { + description: React.ReactNode + backgroundGradient: string + } } export interface ProfileIdentity { diff --git a/packages/shared/src/UI/components/ApplicationEntry/index.tsx b/packages/shared/src/UI/components/ApplicationEntry/index.tsx index 02788bf9f241..047a6a5c1f00 100644 --- a/packages/shared/src/UI/components/ApplicationEntry/index.tsx +++ b/packages/shared/src/UI/components/ApplicationEntry/index.tsx @@ -1,4 +1,5 @@ import classNames from 'classnames' +import type { Plugin } from '@masknet/plugin-infra' import { makeStyles, ShadowRootTooltip } from '@masknet/theme' import { Typography } from '@mui/material' @@ -38,20 +39,66 @@ const useStyles = makeStyles()((theme) => ({ height: 36, }, }, + recommendFeatureApplicationBox: { + width: 220, + height: 97, + cursor: 'pointer', + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + padding: 10, + borderRadius: 8, + }, + recommendFeatureAppIconWrapper: { + marginRight: 12, + '> *': { + width: 48, + height: 48, + }, + }, + recommendFeatureAppListItemName: { + fontSize: 14, + fontWeight: 500, + cursor: 'pointer', + color: theme.palette.common.white, + }, + recommendFeatureAppListItemDescription: { + fontSize: 12, + fontWeight: 500, + cursor: 'pointer', + color: theme.palette.common.white, + }, })) interface ApplicationEntryProps { icon: React.ReactNode title: React.ReactNode disabled?: boolean + recommendFeature?: Plugin.SNSAdaptor.ApplicationEntry['recommendFeature'] tooltipHint?: string onClick: () => void } export function ApplicationEntry(props: ApplicationEntryProps) { - const { title, onClick, disabled = false, icon, tooltipHint } = props + const { title, onClick, disabled = false, icon, tooltipHint, recommendFeature } = props const { classes } = useStyles() - const jsx = ( + const jsx = recommendFeature ? ( +
{} : onClick}> +
{icon}
+
+ {title} + + {recommendFeature.description} + +
+
+ ) : (
{} : onClick}> From dd64f523b6a875a27c9ec2bc3cc86989396435cd Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 27 Apr 2022 17:02:14 +0800 Subject: [PATCH 08/44] chore: update event --- packages/mask/src/components/shared/ApplicationBoard.tsx | 2 +- .../mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx | 6 +++--- .../RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx | 8 ++++---- .../src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx | 6 +++--- .../RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx | 6 +++--- .../plugins/FileService/src/SNSAdaptor/MainDialog.tsx | 6 +++--- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 0cdfe17c61e2..4640fc56c3ba 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -242,7 +242,7 @@ function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComp currentPersonaPublicKey, currentSNSConnectedPersonaPublicKey, } = ApplicationCurrentStatus ?? {} - const { closeDialog } = useRemoteControlledDialog(WalletMessages.events.walletStatusDialogUpdated) + const { closeDialog } = useRemoteControlledDialog(WalletMessages.events.ApplicationDialogUpdated) const onNextIdVerify = useCallback(() => { closeDialog() diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx index 828e95446a95..518da764ab4a 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx @@ -79,8 +79,8 @@ export function CompositionDialog(props: CompositionDialogProps) { const [fillSettings, fillState, fillCallback, resetFillCallback] = useFillCallback(poolSettings) // #endregion - const { closeDialog: closeWalletStatusDialog } = useRemoteControlledDialog( - WalletMessages.events.walletStatusDialogUpdated, + const { closeDialog: closeApplicationBoardDialog } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, ) const { setDialog: setTransactionDialog } = useRemoteControlledDialog( @@ -179,7 +179,7 @@ export function CompositionDialog(props: CompositionDialogProps) { if (payload) attachMetadata(ITO_MetaKey_2, payloadDetail) else dropMetadata(ITO_MetaKey_2) - closeWalletStatusDialog() + closeApplicationBoardDialog() props.onConfirm(payload) // storing the created pool in DB, it helps retrieve the pool password later PluginITO_RPC.discoverPool('', payload) diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx index 601a68d5dcf4..286a4d520610 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/NftRedPacketHistoryItem.tsx @@ -156,14 +156,14 @@ export const NftRedPacketHistoryItem: FC = memo( computed: { canSend, isPasswordValid }, } = useNftAvailabilityComputed(account, history.payload) const { value: contractDetailed } = useERC721ContractDetailed(history.token_contract.address) - const { closeDialog: closeWalletStatusDialog } = useRemoteControlledDialog( - WalletMessages.events.walletStatusDialogUpdated, + const { closeDialog: closeApplicationBoardDialog } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, ) const handleSend = useCallback(() => { if (!(canSend && contractDetailed && isPasswordValid)) return onSend(history, contractDetailed) - closeWalletStatusDialog() - }, [onSend, closeWalletStatusDialog, canSend, history, contractDetailed, isPasswordValid]) + closeApplicationBoardDialog() + }, [onSend, closeApplicationBoardDialog, canSend, history, contractDetailed, isPasswordValid]) const { value: redpacketStatus } = useAvailabilityNftRedPacket(history.rpid, account) const bitStatusList = redpacketStatus diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx index 8457677e9851..c4845962538e 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx @@ -94,8 +94,8 @@ export default function RedPacketDialog(props: RedPacketDialogProps) { const currentIdentity = useCurrentIdentity() const senderName = currentIdentity?.identifier.userId ?? currentIdentity?.linkedPersona?.nickname - const { closeDialog: closeWalletStatusDialog } = useRemoteControlledDialog( - WalletMessages.events.walletStatusDialogUpdated, + const { closeDialog: closeApplicationBoardDialog } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, ) const onCreateOrSelect = useCallback( async (payload: RedPacketJSONPayload) => { @@ -118,7 +118,7 @@ export default function RedPacketDialog(props: RedPacketDialogProps) { attachMetadata(RedPacketMetaKey, payload) } else dropMetadata(RedPacketMetaKey) onClose() - closeWalletStatusDialog() + closeApplicationBoardDialog() }, [onClose, chainId, senderName], ) diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx index 164b3b9a87de..a2a13866c536 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx @@ -178,8 +178,8 @@ export function RedpacketNftConfirmDialog(props: RedpacketNftConfirmDialogProps) contract.address, tokenIdList, ) - const { closeDialog: closeWalletStatusDialog } = useRemoteControlledDialog( - WalletMessages.events.walletStatusDialogUpdated, + const { closeDialog: closeApplicationBoardDialog } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, ) const isSending = [TransactionStateType.WAIT_FOR_CONFIRMING, TransactionStateType.HASH].includes(createState.type) @@ -200,7 +200,7 @@ export function RedpacketNftConfirmDialog(props: RedpacketNftConfirmDialogProps) privateKey, chainId: contract.chainId, }) - closeWalletStatusDialog() + closeApplicationBoardDialog() }, [duration, message, senderName, contract, privateKey, txid], ) diff --git a/packages/plugins/FileService/src/SNSAdaptor/MainDialog.tsx b/packages/plugins/FileService/src/SNSAdaptor/MainDialog.tsx index ade8addbd839..125fa03724cf 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/MainDialog.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/MainDialog.tsx @@ -47,8 +47,8 @@ const FileServiceDialog: React.FC = (props) => { const [uploading, setUploading] = useState(false) const [selectedFileInfo, setSelectedFileInfo] = useState(null) const { attachMetadata, dropMetadata } = useCompositionContext() - const { closeDialog: closeWalletStatusDialog } = useRemoteControlledDialog( - WalletMessages.events.walletStatusDialogUpdated, + const { closeDialog: closeApplicationBoardDialog } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, ) const onInsert = () => { if (isNil(selectedFileInfo)) { @@ -59,7 +59,7 @@ const FileServiceDialog: React.FC = (props) => { } else { dropMetadata(META_KEY_2) } - closeWalletStatusDialog() + closeApplicationBoardDialog() props.onClose() } From dc84ea14160b88e08c94c2ffc49473c1e02170aa Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 27 Apr 2022 20:01:20 +0800 Subject: [PATCH 09/44] chore: persona connect --- .../components/shared/ApplicationBoard.tsx | 21 +++++++++++++------ .../shared/ApplicationBoardDialog.tsx | 1 + .../UI/components/ApplicationEntry/index.tsx | 10 ++++----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c31f6fbd67eb..c6e0fa8c00ca 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -25,6 +25,7 @@ import type { Persona } from '../../database' import { useLastRecognizedIdentity } from '../DataSource/useActivatedUI' import { useSetupGuideStatusState } from '../DataSource/useNextID' import { useMyPersonas } from '../DataSource/useMyPersonas' +import { usePersonaConnectStatus } from '../DataSource/usePersonaConnectStatus' import { WalletMessages } from '../../plugins/Wallet/messages' import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' @@ -232,6 +233,7 @@ function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComp ?.connectionConfirmState === 'confirmed' : undefined }, []) + const personaConnectStatus = usePersonaConnectStatus() const { value: ApplicationCurrentStatus } = useAsync(async () => { const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() @@ -256,19 +258,26 @@ function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComp } = ApplicationCurrentStatus ?? {} const { closeDialog } = useRemoteControlledDialog(WalletMessages.events.ApplicationDialogUpdated) - const onNextIdVerify = useCallback(() => { + const jumpSetupGuide = useCallback(() => { closeDialog() - CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) - }, []) + personaConnectStatus.connected === false + ? personaConnectStatus.action?.() + : CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) + }, [personaConnectStatus]) if (!application.entry.RenderEntryComponent) return null const RenderEntryComponent = application.entry.RenderEntryComponent const shouldVerifyNextId = Boolean(!isNextIDVerify && ApplicationCurrentStatus) - const shouldDisplayTooltipHint = ApplicationCurrentStatus?.isSNSConnectToCurrentPersona === false + const shouldDisplayTooltipHint = + ApplicationCurrentStatus?.isSNSConnectToCurrentPersona === false && personaConnectStatus.connected return ( ) } diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index 900832d59a0a..431101a1bc56 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -12,6 +12,7 @@ const useStyles = makeStyles()((theme) => { content: { padding: theme.spacing(2.5), height: 540, + overflowX: 'hidden', }, } }) diff --git a/packages/shared/src/UI/components/ApplicationEntry/index.tsx b/packages/shared/src/UI/components/ApplicationEntry/index.tsx index 047a6a5c1f00..ad386237c7db 100644 --- a/packages/shared/src/UI/components/ApplicationEntry/index.tsx +++ b/packages/shared/src/UI/components/ApplicationEntry/index.tsx @@ -3,7 +3,7 @@ import type { Plugin } from '@masknet/plugin-infra' import { makeStyles, ShadowRootTooltip } from '@masknet/theme' import { Typography } from '@mui/material' -const useStyles = makeStyles()((theme) => ({ +const useStyles = makeStyles<{ disabled: boolean }>()((theme, { disabled }) => ({ applicationBox: { display: 'flex', flexDirection: 'column', @@ -30,7 +30,7 @@ const useStyles = makeStyles()((theme) => ({ }, disabled: { opacity: 0.4, - cursor: 'default', + cursor: 'default !important', pointerEvent: 'none', }, iconWrapper: { @@ -60,13 +60,13 @@ const useStyles = makeStyles()((theme) => ({ recommendFeatureAppListItemName: { fontSize: 14, fontWeight: 500, - cursor: 'pointer', + cursor: disabled ? 'default' : 'pointer', color: theme.palette.common.white, }, recommendFeatureAppListItemDescription: { fontSize: 12, fontWeight: 500, - cursor: 'pointer', + cursor: disabled ? 'default' : 'pointer', color: theme.palette.common.white, }, })) @@ -82,7 +82,7 @@ interface ApplicationEntryProps { export function ApplicationEntry(props: ApplicationEntryProps) { const { title, onClick, disabled = false, icon, tooltipHint, recommendFeature } = props - const { classes } = useStyles() + const { classes } = useStyles({ disabled }) const jsx = recommendFeature ? (
Date: Wed, 27 Apr 2022 20:09:17 +0800 Subject: [PATCH 10/44] fix: little fix --- packages/mask/src/components/shared/ApplicationBoardDialog.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index 431101a1bc56..57cb980de936 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -33,7 +33,7 @@ export function ApplicationBoardDialog() { }, []) return ( - + From df51ff46df30c33c40c7bae9d553fe9cd29bfb3b Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 28 Apr 2022 15:53:08 +0800 Subject: [PATCH 11/44] fix: dialog title text center --- .../components/shared/ApplicationBoard.tsx | 32 +----------------- .../shared/ApplicationBoardDialog.tsx | 33 +++++++++++++++++-- .../contexts/components/InjectedDialog.tsx | 12 ++++++- 3 files changed, 42 insertions(+), 35 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c6e0fa8c00ca..c72350ed010c 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,5 +1,4 @@ -import { useState, useMemo, useCallback } from 'react' -import { Close as CloseIcon } from '@mui/icons-material' +import { useMemo, useCallback } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, useTheme, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' @@ -15,7 +14,6 @@ import { import { getCurrentSNSNetwork } from '../../social-network-adaptor/utils' import { activatedSocialNetworkUI } from '../../social-network' import { useI18N } from '../../utils' -import { ApplicationSettingDialog } from './ApplicationSettingDialog' import { Application, getUnlistedApp } from './ApplicationSettingPluginList' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { useAsync } from 'react-use' @@ -74,17 +72,6 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { justifyContent: 'center', alignItems: 'center', }, - header: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - marginBottom: 11.5, - }, - settingIcon: { - height: 24, - width: 24, - cursor: 'pointer', - }, placeholderWrapper: { display: 'flex', justifyContent: 'center', @@ -95,9 +82,6 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { placeholder: { color: getMaskColor(theme).textLight, }, - closeIcon: { - cursor: 'pointer', - }, recommendFeatureAppListWrapper: { width: '100%', margin: '16px 2px 12px 2px', @@ -119,7 +103,6 @@ export function ApplicationBoard(props: Props) { function ApplicationBoardContent(props: Props) { const theme = useTheme() const { t } = useI18N() - const [openSettings, setOpenSettings] = useState(false) const snsAdaptorPlugins = useActivatedPluginsSNSAdaptor('any') const currentWeb3Network = useCurrentWeb3NetworkPluginID() const chainId = useChainId() @@ -163,16 +146,6 @@ function ApplicationBoardContent(props: Props) { const { classes } = useStyles({ shouldScroll: listedAppList.length > 12 }) return ( <> -
- - {t('applications')} - setOpenSettings(true)} - /> -
- {recommendFeatureAppList.map((application) => ( @@ -195,9 +168,6 @@ function ApplicationBoardContent(props: Props) {
)} - {openSettings ? ( - setOpenSettings(false)} /> - ) : null} ) } diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index 57cb980de936..c0eef1d9c2db 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -1,11 +1,13 @@ -import { DialogContent } from '@mui/material' -import { useCallback } from 'react' +import { DialogContent, useTheme } from '@mui/material' +import { useState, useCallback } from 'react' +import { ApplicationSettingDialog } from './ApplicationSettingDialog' import { makeStyles } from '@masknet/theme' import { InjectedDialog } from '@masknet/shared' import { CrossIsolationMessages } from '@masknet/shared-base' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { ApplicationBoard } from './ApplicationBoard' import { WalletMessages } from '../../plugins/Wallet/messages' +import { useI18N } from '../../utils' const useStyles = makeStyles()((theme) => { return { @@ -14,11 +16,19 @@ const useStyles = makeStyles()((theme) => { height: 540, overflowX: 'hidden', }, + settingIcon: { + height: 24, + width: 24, + cursor: 'pointer', + }, } }) export function ApplicationBoardDialog() { + const theme = useTheme() const { classes } = useStyles() + const { t } = useI18N() + const [openSettings, setOpenSettings] = useState(false) const { open, closeDialog: _closeDialog } = useRemoteControlledDialog( WalletMessages.events.ApplicationDialogUpdated, @@ -32,10 +42,27 @@ export function ApplicationBoardDialog() { }) }, []) + const SettingIconDarkModeUrl = new URL('./assets/settings_dark_mode.png', import.meta.url).toString() + const SettingIconLightModeUrl = new URL('./assets/settings_light_mode.png', import.meta.url).toString() + return ( - + setOpenSettings(true)} + /> + }> + {openSettings ? ( + setOpenSettings(false)} /> + ) : null} ) diff --git a/packages/shared/src/contexts/components/InjectedDialog.tsx b/packages/shared/src/contexts/components/InjectedDialog.tsx index 415dc11c7ae5..953742c00339 100644 --- a/packages/shared/src/contexts/components/InjectedDialog.tsx +++ b/packages/shared/src/contexts/components/InjectedDialog.tsx @@ -27,6 +27,14 @@ const useStyles = makeStyles()((theme, { clean }) => ({ dialogTitle: { padding: theme.spacing(1, 2), whiteSpace: 'nowrap', + gridTemplateColumns: '50px auto 50px', + }, + dialogTitleTail: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + minWidth: 46, + minHeight: 46, }, dialogContent: { overscrollBehavior: 'contain', @@ -45,6 +53,7 @@ const useStyles = makeStyles()((theme, { clean }) => ({ export type InjectedDialogClassKey = | DialogClassKey | 'dialogTitle' + | 'dialogTitleTail' | 'dialogContent' | 'dialogActions' | 'dialogTitleTypography' @@ -71,6 +80,7 @@ export function InjectedDialog(props: InjectedDialogProps) { dialogCloseButton, dialogContent, dialogTitle, + dialogTitleTail, dialogTitleTypography, dialogBackdropRoot, container, @@ -139,7 +149,7 @@ export function InjectedDialog(props: InjectedDialogProps) { {title} - {titleTail} +
{titleTail}
) : null} From 6dd82cabc59999c986b3627622d2a252e4c445a8 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 28 Apr 2022 15:59:14 +0800 Subject: [PATCH 12/44] fix: style --- packages/mask/src/components/shared/ApplicationBoard.tsx | 7 ++----- .../mask/src/components/shared/ApplicationBoardDialog.tsx | 4 ++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c72350ed010c..6241af406074 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,6 +1,6 @@ import { useMemo, useCallback } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' -import { Typography, useTheme, Box } from '@mui/material' +import { Typography, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount } from '@masknet/plugin-infra/web3' @@ -84,7 +84,7 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { }, recommendFeatureAppListWrapper: { width: '100%', - margin: '16px 2px 12px 2px', + margin: '0px 2px 12px 2px', }, } }) @@ -101,15 +101,12 @@ export function ApplicationBoard(props: Props) { ) } function ApplicationBoardContent(props: Props) { - const theme = useTheme() const { t } = useI18N() const snsAdaptorPlugins = useActivatedPluginsSNSAdaptor('any') const currentWeb3Network = useCurrentWeb3NetworkPluginID() const chainId = useChainId() const account = useAccount() const currentSNSNetwork = getCurrentSNSNetwork(activatedSocialNetworkUI.networkIdentifier) - const SettingIconDarkModeUrl = new URL('./assets/settings_dark_mode.png', import.meta.url).toString() - const SettingIconLightModeUrl = new URL('./assets/settings_light_mode.png', import.meta.url).toString() const applicationList = useMemo( () => snsAdaptorPlugins diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index c0eef1d9c2db..c853de278ac0 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -12,8 +12,8 @@ import { useI18N } from '../../utils' const useStyles = makeStyles()((theme) => { return { content: { - padding: theme.spacing(2.5), - height: 540, + padding: theme.spacing(2, 2.5), + height: 490, overflowX: 'hidden', }, settingIcon: { From 7fd0bdd233b7031c2628eea9a45644d1b87e18b7 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 28 Apr 2022 16:11:09 +0800 Subject: [PATCH 13/44] chore: add comment --- packages/plugin-infra/src/types.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index 5a920947b53f..99697cefb7ed 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -341,6 +341,9 @@ export namespace Plugin.SNSAdaptor { nextIdRequired?: boolean + /** + * Display using an eye-catching card and unable to be unlisted. + */ recommendFeature?: { description: React.ReactNode backgroundGradient: string From caea3bec658a4bf1606ba521ee7662bec224c5cd Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 28 Apr 2022 19:17:45 +0800 Subject: [PATCH 14/44] fix: ui style --- .../mask/src/components/shared/ApplicationBoard.tsx | 6 ++++-- .../components/shared/ApplicationBoardDialog.tsx | 6 +++--- .../src/UI/components/ApplicationEntry/index.tsx | 13 +++++++++---- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 6241af406074..db406a45202f 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -83,8 +83,10 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { color: getMaskColor(theme).textLight, }, recommendFeatureAppListWrapper: { - width: '100%', - margin: '0px 2px 12px 2px', + display: 'flex', + overflowX: 'scroll', + margin: '0px 2px 4px 2px', + padding: '8px 2px 0 2px', }, } }) diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index c853de278ac0..c7edb8161cdb 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -12,9 +12,9 @@ import { useI18N } from '../../utils' const useStyles = makeStyles()((theme) => { return { content: { - padding: theme.spacing(2, 2.5), - height: 490, - overflowX: 'hidden', + padding: theme.spacing(1, 2, 2), + height: 470, + overflow: 'hidden', }, settingIcon: { height: 24, diff --git a/packages/shared/src/UI/components/ApplicationEntry/index.tsx b/packages/shared/src/UI/components/ApplicationEntry/index.tsx index ad386237c7db..35c8cf0bb4c0 100644 --- a/packages/shared/src/UI/components/ApplicationEntry/index.tsx +++ b/packages/shared/src/UI/components/ApplicationEntry/index.tsx @@ -16,8 +16,8 @@ const useStyles = makeStyles<{ disabled: boolean }>()((theme, { disabled }) => ( applicationBoxHover: { cursor: 'pointer', '&:hover': { - transform: 'scale(1.05) translateY(-4px)', - boxShadow: theme.palette.mode === 'light' ? '0px 10px 16px rgba(0, 0, 0, 0.1)' : 'none', + transform: 'scale(1.02) translateY(-2px)', + boxShadow: theme.palette.mode === 'light' ? '0px 5px 8px rgba(0, 0, 0, 0.05)' : 'none', }, }, applicationImg: { @@ -41,9 +41,11 @@ const useStyles = makeStyles<{ disabled: boolean }>()((theme, { disabled }) => ( }, recommendFeatureApplicationBox: { width: 220, + minWidth: 220, height: 97, + marginRight: 12, cursor: 'pointer', - display: 'flex', + display: 'inline-flex', flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', @@ -88,7 +90,10 @@ export function ApplicationEntry(props: ApplicationEntryProps) { style={{ background: recommendFeature.backgroundGradient, }} - className={classNames(classes.recommendFeatureApplicationBox, disabled ? classes.disabled : '')} + className={classNames( + classes.recommendFeatureApplicationBox, + disabled ? classes.disabled : classes.applicationBoxHover, + )} onClick={disabled ? () => {} : onClick}>
{icon}
From 321f85286df6b75f92d8ed2cb611556ffcbf7047 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 28 Apr 2022 19:19:45 +0800 Subject: [PATCH 15/44] chore: ui style --- packages/mask/src/components/shared/ApplicationBoard.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index db406a45202f..d85e8a4f1b41 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -87,6 +87,9 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { overflowX: 'scroll', margin: '0px 2px 4px 2px', padding: '8px 2px 0 2px', + '&::-webkit-scrollbar': { + display: 'none', + }, }, } }) From dec11405775d0902091bb5c32774a3e64cd14e9c Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 29 Apr 2022 16:50:14 +0800 Subject: [PATCH 16/44] chore: for test --- packages/mask/shared-ui/locales/en-US.json | 5 +++- packages/mask/shared-ui/locales/qya-AA.json | 2 +- .../CompositionDialog/Composition.tsx | 10 ++----- .../CompositionDialog/CompositionUI.tsx | 5 ++++ .../components/CompositionDialog/useSubmit.ts | 2 +- .../components/shared/ApplicationBoard.tsx | 28 ++++++++++++++----- .../shared/ApplicationSettingPluginList.tsx | 1 + .../plugins/FindTruman/SNSAdaptor/index.tsx | 6 ++-- .../mask/src/plugins/ITO/SNSAdaptor/index.tsx | 28 ++++++++++--------- .../src/plugins/Pets/SNSAdaptor/index.tsx | 11 ++++++-- .../plugins/RedPacket/SNSAdaptor/index.tsx | 23 ++++++++------- .../src/plugins/Savings/SNSAdaptor/index.tsx | 9 ++++-- .../src/plugins/Trader/SNSAdaptor/index.tsx | 11 ++++++-- .../src/plugins/Transak/SNSAdaptor/index.tsx | 11 ++++++-- 14 files changed, 99 insertions(+), 53 deletions(-) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index fb6d7700547f..44cb3930de84 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -31,6 +31,10 @@ "add_nft_contract_search_hint": "Search NFT Contract Symbol Name or Address", "applications": "Applications", "application_settings": "Application Settings", + "application_tooltip_hint_sns_persona_unmatched": "Twitter ID verified persona({{currentSNSConnectedPersonaPublicKey}}) is not consistent with your current persona({{currentPersonaPublicKey}}). Please switch to persona({{currentSNSConnectedPersonaPublicKey}}) and try again.", + "application_tooltip_hint_verify": "Please verify your social account", + "application_tooltip_hint_connect_persona": "Please connect your persona", + "application_tooltip_hint_connect_wallet": "Please connect your wallet", "application_settings_tab_app_list": "APP list", "application_settings_tab_plug_in_switch": "Plug-in switch", "application_settings_tab_plug_app-list-unlisted": "Unlisted", @@ -1095,7 +1099,6 @@ "plugin_tips_wallet_sign_error": "Wallet connection failed.", "plugin_tips_wallet_add": "Please add wallet", "plugin_tips_connect_wallet": "Connect your wallet", - "plugin_tips_sns_persona_unmatched": "Twitter ID verified persona({{currentSNSConnectedPersonaPublicKey}}) is not consistent with your current persona({{currentPersonaPublicKey}}). Please switch to persona({{currentSNSConnectedPersonaPublicKey}}) and try again.", "plugin_tips_verify_line_intro": "Please add and verify your wallet to set the address for receiving tips.", "plugin_tips_empty_list": "Please set wallets to receive tips.", "plugin_tips_set_as_default": "Set as default", diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index d7eb8ae5d7cf..88f86e2a6138 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -30,6 +30,7 @@ "add_token": "crwdns3983:0crwdne3983:0", "add_nft_contract_search_hint": "crwdns8123:0crwdne8123:0", "applications": "crwdns9513:0crwdne9513:0", + "application_tooltip_hint_sns_persona_unmatched": "crwdns16428:0{{currentSNSConnectedPersonaPublicKey}}crwdnd16428:0{{currentPersonaPublicKey}}crwdnd16428:0{{currentSNSConnectedPersonaPublicKey}}crwdne16428:0", "application_settings": "crwdns16220:0crwdne16220:0", "application_settings_tab_app_list": "crwdns16222:0crwdne16222:0", "application_settings_tab_plug_in_switch": "crwdns16224:0crwdne16224:0", @@ -1095,7 +1096,6 @@ "plugin_tips_wallet_sign_error": "crwdns16422:0crwdne16422:0", "plugin_tips_wallet_add": "crwdns16424:0crwdne16424:0", "plugin_tips_connect_wallet": "crwdns16426:0crwdne16426:0", - "plugin_tips_sns_persona_unmatched": "crwdns16428:0{{currentSNSConnectedPersonaPublicKey}}crwdnd16428:0{{currentPersonaPublicKey}}crwdnd16428:0{{currentSNSConnectedPersonaPublicKey}}crwdne16428:0", "plugin_tips_verify_line_intro": "crwdns16430:0crwdne16430:0", "plugin_tips_empty_list": "crwdns16432:0crwdne16432:0", "plugin_tips_set_as_default": "crwdns16434:0crwdne16434:0", diff --git a/packages/mask/src/components/CompositionDialog/Composition.tsx b/packages/mask/src/components/CompositionDialog/Composition.tsx index 875ddcc1158d..196c0dc6bea0 100644 --- a/packages/mask/src/components/CompositionDialog/Composition.tsx +++ b/packages/mask/src/components/CompositionDialog/Composition.tsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useState, useRef } from 'react' import { DialogContent } from '@mui/material' import { DialogStackingProvider } from '@masknet/theme' -import { activatedSocialNetworkUI, globalUIState } from '../../social-network' +import { activatedSocialNetworkUI } from '../../social-network' import { MaskMessages, useI18N } from '../../utils' import { CrossIsolationMessages } from '@masknet/shared-base' import { useRecipientsList } from './useRecipientsList' @@ -20,7 +20,6 @@ export interface PostDialogProps { let openOnInitAnswered = false export function Composition({ type = 'timeline', requireClipboardPermission }: PostDialogProps) { const { t } = useI18N() - const currentIdentity = useCurrentIdentity()?.identifier /** @deprecated */ const { value: hasLocalKey } = useAsync( @@ -56,12 +55,7 @@ export function Composition({ type = 'timeline', requireClipboardPermission }: P useEffect(() => { return CrossIsolationMessages.events.requestComposition.on(({ reason, open, content, options }) => { - if ( - (reason !== 'reply' && reason !== type) || - (reason === 'reply' && type === 'popup') || - globalUIState.profiles.value.length <= 0 - ) - return + if ((reason !== 'reply' && reason !== type) || (reason === 'reply' && type === 'popup')) return setOpen(open) setReason(reason) if (content) UI.current?.setMessage(content) diff --git a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx index 6d227566ef2b..9cb25f1c1797 100644 --- a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx +++ b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx @@ -156,6 +156,11 @@ export const CompositionDialogUI = forwardRef( const onSubmit = useCallback(() => { if (!Editor.current) return setSending(true) + console.log({ + editor: Editor.current.value, + encryptionKind, + onSubmit: props.onSubmit, + }) props .onSubmit({ content: Editor.current.value, diff --git a/packages/mask/src/components/CompositionDialog/useSubmit.ts b/packages/mask/src/components/CompositionDialog/useSubmit.ts index a64d6af351a3..261063922da0 100644 --- a/packages/mask/src/components/CompositionDialog/useSubmit.ts +++ b/packages/mask/src/components/CompositionDialog/useSubmit.ts @@ -17,7 +17,7 @@ export function useSubmit(onClose: () => void, reason: 'timeline' | 'popup' | 'r return useCallback( async (info: SubmitComposition) => { const { content, encode, target } = info - + console.log({ whoAmI, profiles: globalUIState.profiles }) const currentProfile = globalUIState.profiles.value?.[0].identifier const _encrypted = await Services.Crypto.encryptTo(content, target, whoAmI?.identifier ?? currentProfile) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index d85e8a4f1b41..2b1ca4f7a451 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -118,10 +118,6 @@ function ApplicationBoardContent(props: Props) { .reduce((acc, cur) => { if (!cur.ApplicationEntries) return acc const currentWeb3NetworkSupportedChainIds = cur.enableRequirement.web3?.[currentWeb3Network] - const isWeb3Enabled = Boolean( - currentWeb3NetworkSupportedChainIds === undefined || - currentWeb3NetworkSupportedChainIds.supportedChainIds?.includes(chainId), - ) const isWalletConnectedRequired = currentWeb3NetworkSupportedChainIds !== undefined const currentSNSIsSupportedNetwork = cur.enableRequirement.networks.networks[currentSNSNetwork] const isSNSEnabled = currentSNSIsSupportedNetwork === undefined || currentSNSIsSupportedNetwork @@ -130,8 +126,9 @@ function ApplicationBoardContent(props: Props) { cur.ApplicationEntries.map((x) => { return { entry: x, - enabled: isSNSEnabled && (account ? isWeb3Enabled : !isWalletConnectedRequired), + enabled: isSNSEnabled, pluginId: cur.ID, + isWalletConnectedRequired: !account && isWalletConnectedRequired, } }) ?? EMPTY_LIST, ) @@ -180,10 +177,21 @@ interface RenderEntryComponentWrapperProps { function RenderEntryComponentWrapper({ application }: RenderEntryComponentWrapperProps) { const RenderEntryComponent = application.entry.RenderEntryComponent! + const { t } = useI18N() + const { openDialog: openWalletStatusDialog } = useRemoteControlledDialog( + WalletMessages.events.walletStatusDialogUpdated, + ) + return application.entry.nextIdRequired ? ( ) : ( - + ) } @@ -252,13 +260,19 @@ function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComp } tooltipHint={ shouldDisplayTooltipHint - ? t('plugin_tips_sns_persona_unmatched', { + ? t('application_tooltip_hint_sns_persona_unmatched', { currentPersonaPublicKey: formatPersonaPublicKey(currentPersonaPublicKey ?? '', 4), currentSNSConnectedPersonaPublicKey: formatPersonaPublicKey( currentSNSConnectedPersonaPublicKey ?? '', 4, ), }) + : personaConnectStatus.connected === false + ? t('application_tooltip_hint_connect_persona') + : shouldVerifyNextId + ? t('application_tooltip_hint_verify') + : application.isWalletConnectedRequired + ? t('application_tooltip_hint_connect_wallet') : undefined } onClick={shouldVerifyNextId || personaConnectStatus.connected === false ? jumpSetupGuide : undefined} diff --git a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx index 1fa1baf7ac0e..10038905dfe0 100644 --- a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx +++ b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx @@ -10,6 +10,7 @@ export interface Application { entry: Plugin.SNSAdaptor.ApplicationEntry pluginId: string enabled?: boolean + isWalletConnectedRequired?: boolean } // #region kv storage diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx index 6428faeb38ae..d623af5cede9 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx @@ -94,15 +94,15 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { const [open, setOpen] = useState(false) return ( <> setOpen(true)} + onClick={EntryComponentProps.onClick ?? (() => setOpen(true))} /> setOpen(false)} /> diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx index 0deda21d38fa..ced13737427a 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx @@ -66,20 +66,22 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { return ( - CrossIsolationMessages.events.requestComposition.sendToLocal({ - reason: 'timeline', - open: true, - options: { - startupPlugin: base.ID, - }, - }) + onClick={ + EntryComponentProps.onClick ?? + (() => + CrossIsolationMessages.events.requestComposition.sendToLocal({ + reason: 'timeline', + open: true, + options: { + startupPlugin: base.ID, + }, + })) } /> ) @@ -99,15 +101,15 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: `${base.ID}_claim`, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { const [open, setOpen] = useState(false) return ( <> setOpen(true)} + {...EntryComponentProps} + onClick={EntryComponentProps.onClick ?? (() => setOpen(true))} /> setOpen(false)} /> diff --git a/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx index b927d91fa51c..6ff2c8752464 100644 --- a/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx @@ -24,10 +24,17 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { const { openDialog } = useRemoteControlledDialog(PluginPetMessages.events.essayDialogUpdated) - return + return ( + + ) }, appBoardSortingDefaultPriority: 11, marketListSortingPriority: 12, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx index 529ef9d7f39f..c6a4c660a177 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx @@ -101,21 +101,24 @@ const sns: Plugin.SNSAdaptor.Definition = { } return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { + console.log({ EntryComponentProps }) return ( - CrossIsolationMessages.events.requestComposition.sendToLocal({ - reason: 'timeline', - open: true, - options: { - startupPlugin: base.ID, - }, - }) + onClick={ + EntryComponentProps.onClick ?? + (() => + CrossIsolationMessages.events.requestComposition.sendToLocal({ + reason: 'timeline', + open: true, + options: { + startupPlugin: base.ID, + }, + })) } /> ) diff --git a/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx index 76d3fec27d70..fe7afb063dfb 100644 --- a/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx @@ -15,17 +15,20 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { const [open, setOpen] = useState(false) return ( <> setOpen(true)} /> - setOpen(false)} /> + setOpen(false))} + /> ) }, diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx index 9f9b676b6bc7..e08bf1693929 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx @@ -29,10 +29,17 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { const { openDialog } = useRemoteControlledDialog(PluginTraderMessages.swapDialogUpdated) - return + return ( + + ) }, appBoardSortingDefaultPriority: 9, marketListSortingPriority: 5, diff --git a/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx index 0f8af57ac6b9..17c21b451749 100644 --- a/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx @@ -19,10 +19,17 @@ const sns: Plugin.SNSAdaptor.Definition = { const name = return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { const { openDialog } = useRemoteControlledDialog(PluginTransakMessages.buyTokenDialogUpdated) - return + return ( + + ) }, appBoardSortingDefaultPriority: 10, marketListSortingPriority: 6, From 1bbd1b50d50ea9bc49261543447ec90eb98e7d2b Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 1 May 2022 12:42:34 +0800 Subject: [PATCH 17/44] refactor: use entry status context --- .../components/shared/ApplicationBoard.tsx | 186 ++++++++++++------ 1 file changed, 121 insertions(+), 65 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 1ba9d0c82b73..4776900ecdc7 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,9 +1,9 @@ -import { useMemo, useCallback } from 'react' +import { useContext, createContext, PropsWithChildren, useMemo, useCallback } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' -import { useCurrentWeb3NetworkPluginID, useAccount } from '@masknet/plugin-infra/web3' +import { useCurrentWeb3NetworkPluginID, useAccount, NetworkPluginID } from '@masknet/plugin-infra/web3' import { EMPTY_LIST, NextIDPlatform, @@ -100,14 +100,18 @@ interface Props { export function ApplicationBoard(props: Props) { return ( - + + + ) } + function ApplicationBoardContent(props: Props) { const { t } = useI18N() const snsAdaptorPlugins = useActivatedPluginsSNSAdaptor('any') const currentWeb3Network = useCurrentWeb3NetworkPluginID() + console.log(currentWeb3Network) const chainId = useChainId() const account = useAccount() const currentSNSNetwork = getCurrentSNSNetwork(activatedSocialNetworkUI.networkIdentifier) @@ -127,7 +131,9 @@ function ApplicationBoardContent(props: Props) { entry: x, enabled: isSNSEnabled, pluginId: cur.ID, - isWalletConnectedRequired: !account && isWalletConnectedRequired, + isWalletConnectedRequired: + (!account || currentWeb3Network !== NetworkPluginID.PLUGIN_EVM) && + isWalletConnectedRequired, } }) ?? EMPTY_LIST, ) @@ -146,17 +152,14 @@ function ApplicationBoardContent(props: Props) { <> {recommendFeatureAppList.map((application) => ( - + ))} {listedAppList.length > 0 ? (
{listedAppList.map((application) => ( - + ))}
) : ( @@ -170,33 +173,109 @@ function ApplicationBoardContent(props: Props) { ) } -interface RenderEntryComponentWrapperProps { +interface RenderEntryComponentProps { application: Application } -function RenderEntryComponentWrapper({ application }: RenderEntryComponentWrapperProps) { - const RenderEntryComponent = application.entry.RenderEntryComponent! +function RenderEntryComponent({ application }: RenderEntryComponentProps) { + const Entry = application.entry.RenderEntryComponent! const { t } = useI18N() - const { openDialog: openWalletStatusDialog } = useRemoteControlledDialog( + const { openDialog: _openWalletStatusDialog } = useRemoteControlledDialog( WalletMessages.events.walletStatusDialogUpdated, ) - - return application.entry.nextIdRequired ? ( - - ) : ( - + const { closeDialog: closeApplicationBoard } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, ) + const ApplicationEntryStatus = useContext(ApplicationEntryStatusContext) + + // #region entry disabled + const disabled = useMemo(() => { + if (!application.enabled) return true + + if (application.entry.nextIdRequired) { + return Boolean( + ApplicationEntryStatus.isNextIDVerify === undefined || + (!ApplicationEntryStatus.isSNSConnectToCurrentPersona && ApplicationEntryStatus.isPersonaConnected), + ) + } else { + return false + } + }, [application, ApplicationEntryStatus]) + // #endregion + + // #region entry click effect + const openWalletStatusDialog = useCallback(() => { + closeApplicationBoard() + _openWalletStatusDialog() + }, []) + + const connectPersona = useCallback(() => { + closeApplicationBoard() + ApplicationEntryStatus.personaConnectAction?.() + }, [ApplicationEntryStatus]) + + const verifyPersona = useCallback(() => { + closeApplicationBoard() + CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) + }, []) + + const clickHandler = application.isWalletConnectedRequired + ? openWalletStatusDialog + : ApplicationEntryStatus.isPersonaConnected === false + ? connectPersona + : ApplicationEntryStatus.shouldVerifyNextId + ? verifyPersona + : undefined + // #endregion + + // #region tooltip hint + const tooltipHint = useMemo(() => { + if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') + if (ApplicationEntryStatus.isPersonaConnected === false) return t('application_tooltip_hint_connect_persona') + if (!application.entry.nextIdRequired) return undefined + if (ApplicationEntryStatus.shouldDisplayTooltipHint) + return t('application_tooltip_hint_sns_persona_unmatched', { + currentPersonaPublicKey: formatPersonaPublicKey( + ApplicationEntryStatus.currentPersonaPublicKey ?? '', + 4, + ), + currentSNSConnectedPersonaPublicKey: formatPersonaPublicKey( + ApplicationEntryStatus.currentSNSConnectedPersonaPublicKey ?? '', + 4, + ), + }) + if (ApplicationEntryStatus.shouldVerifyNextId) return t('application_tooltip_hint_verify') + return undefined + }, [application, ApplicationEntryStatus]) + // #endregion + + return +} + +interface ApplicationEntryStatusContextProps { + isPersonaConnected: boolean | undefined + isNextIDVerify: boolean | undefined + isSNSConnectToCurrentPersona: boolean | undefined + shouldDisplayTooltipHint: boolean | undefined + shouldVerifyNextId: boolean | undefined + currentPersonaPublicKey: string | undefined + currentSNSConnectedPersonaPublicKey: string | undefined + personaConnectAction: (() => void) | undefined } -function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComponentWrapperProps) { +const ApplicationEntryStatusContext = createContext({ + isPersonaConnected: undefined, + isNextIDVerify: undefined, + isSNSConnectToCurrentPersona: undefined, + shouldDisplayTooltipHint: undefined, + shouldVerifyNextId: undefined, + currentPersonaPublicKey: undefined, + currentSNSConnectedPersonaPublicKey: undefined, + personaConnectAction: undefined, +}) + +function ApplicationEntryStatusProvider(props: PropsWithChildren<{}>) { const ui = activatedSocialNetworkUI - const { t } = useI18N() const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform const lastState = useSetupGuideStatusState() const { currentPersona } = PersonaContext.useContainer() @@ -210,6 +289,7 @@ function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComp if (!username) return undefined return persona.linkedProfiles.some((x) => x.identifier.userId === username) }, []) + const personaConnectStatus = usePersonaConnectStatus() const { value: ApplicationCurrentStatus } = useAsync(async () => { @@ -227,52 +307,28 @@ function RenderEntryComponentWithNextIDRequired({ application }: RenderEntryComp currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.identifier.rawPublicKey, } }, [platform, username, ui, personas, currentPersona]) + const { isNextIDVerify, isSNSConnectToCurrentPersona, currentPersonaPublicKey, currentSNSConnectedPersonaPublicKey, } = ApplicationCurrentStatus ?? {} - const { closeDialog } = useRemoteControlledDialog(WalletMessages.events.ApplicationDialogUpdated) - - const jumpSetupGuide = useCallback(() => { - closeDialog() - personaConnectStatus.connected === false - ? personaConnectStatus.action?.() - : CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) - }, [personaConnectStatus]) - - if (!application.entry.RenderEntryComponent) return null - const RenderEntryComponent = application.entry.RenderEntryComponent - const shouldVerifyNextId = Boolean(!isNextIDVerify && ApplicationCurrentStatus) - const shouldDisplayTooltipHint = - ApplicationCurrentStatus?.isSNSConnectToCurrentPersona === false && personaConnectStatus.connected return ( - + + {props.children} + ) } From 4c6d2264a3bc150fdc963f5e8e637000049285e3 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 1 May 2022 12:44:57 +0800 Subject: [PATCH 18/44] chore: adjust logic --- packages/mask/src/components/shared/ApplicationBoard.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 4776900ecdc7..7fc907e6fd80 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -221,6 +221,8 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { const clickHandler = application.isWalletConnectedRequired ? openWalletStatusDialog + : !application.entry.nextIdRequired + ? undefined : ApplicationEntryStatus.isPersonaConnected === false ? connectPersona : ApplicationEntryStatus.shouldVerifyNextId @@ -231,8 +233,8 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { // #region tooltip hint const tooltipHint = useMemo(() => { if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') - if (ApplicationEntryStatus.isPersonaConnected === false) return t('application_tooltip_hint_connect_persona') if (!application.entry.nextIdRequired) return undefined + if (ApplicationEntryStatus.isPersonaConnected === false) return t('application_tooltip_hint_connect_persona') if (ApplicationEntryStatus.shouldDisplayTooltipHint) return t('application_tooltip_hint_sns_persona_unmatched', { currentPersonaPublicKey: formatPersonaPublicKey( From cc146d9104e196a4fc80e0fffe9adb54a4bfc320 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 1 May 2022 13:37:11 +0800 Subject: [PATCH 19/44] chore: add persona against sns connect status hook --- .../DataSource/usePersonaConnectStatus.ts | 37 +++++++++- .../InjectedComponents/ToolboxUnstyled.tsx | 21 +----- .../components/shared/ApplicationBoard.tsx | 69 ++++--------------- 3 files changed, 51 insertions(+), 76 deletions(-) diff --git a/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts b/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts index aff3f7fa6499..1c13ee9ff14f 100644 --- a/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts +++ b/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts @@ -1,12 +1,15 @@ -import { DashboardRoutes, PersonaInformation } from '@masknet/shared-base' +import { DashboardRoutes, PersonaInformation, NextIDPlatform } from '@masknet/shared-base' import stringify from 'json-stable-stringify' -import { useMemo } from 'react' +import { useAsync } from 'react-use' +import { useMemo, useCallback } from 'react' import Services from '../../extension/service' import { currentSetupGuideStatus } from '../../settings/settings' import { activatedSocialNetworkUI } from '../../social-network' import { SetupGuideStep } from '../InjectedComponents/SetupGuide/types' import { useLastRecognizedIdentity } from './useActivatedUI' import { useMyPersonas } from './useMyPersonas' +import { useSetupGuideStatusState } from './useNextID' +import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' const createPersona = () => { Services.Helper.openDashboard(DashboardRoutes.Setup) @@ -38,3 +41,33 @@ export function usePersonaConnectStatus() { return { connected, action, hasPersona: !!personas.length, currentConnectedPersona } }, [personas, lastRecognized, activatedSocialNetworkUI]) } + +export function usePersonaAgainstSNSConnectStatus() { + const ui = activatedSocialNetworkUI + const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform + const lastState = useSetupGuideStatusState() + const { currentPersona } = PersonaContext.useContainer() + const lastRecognized = useLastRecognizedIdentity() + const username = useMemo(() => { + return lastState.username || lastRecognized.identifier?.userId + }, [lastState, lastRecognized]) + const personas = useMyPersonas() + + const checkSNSConnectToCurrentPersona = useCallback((persona: PersonaInformation) => { + if (!username) return undefined + return persona.linkedProfiles.some((x) => x.identifier.userId === username) + }, []) + + return useAsync(async () => { + const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() + const currentPersona = (await Services.Identity.queryOwnedPersonaInformation(true)).find( + (x) => x.identifier === currentPersonaIdentifier, + ) + const currentSNSConnectedPersona = personas.find(checkSNSConnectToCurrentPersona) + return { + isSNSConnectToCurrentPersona: currentPersona ? checkSNSConnectToCurrentPersona(currentPersona) : false, + currentPersonaPublicKey: currentPersona?.identifier.rawPublicKey, + currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.identifier.rawPublicKey, + } + }, [platform, username, ui, personas, currentPersona]) +} diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index 4c61149181d1..cd36b8e104d7 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -22,7 +22,7 @@ import { useWeb3State, useReverseAddress, } from '@masknet/plugin-infra/web3' -import { useCallback, useEffect, useMemo } from 'react' +import { useCallback, useEffect } from 'react' import { WalletIcon } from '@masknet/shared' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { WalletMessages } from '../../plugins/Wallet/messages' @@ -33,7 +33,6 @@ import GuideStep from '../GuideStep' import { MaskFilledIcon } from '../../resources/MaskIcon' import { makeStyles } from '@masknet/theme' import FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord' -import { usePersonaConnectStatus } from '../DataSource/usePersonaConnectStatus' import { NextIDVerificationStatus, useNextIDConnectStatus } from '../DataSource/useNextID' const useStyles = makeStyles()((theme) => ({ @@ -147,18 +146,8 @@ function ToolboxHintForWallet(props: ToolboxHintProps) { const networkDescriptor = useNetworkDescriptor() const providerDescriptor = useProviderDescriptor() - const personaConnectStatus = usePersonaConnectStatus() - - const title = useMemo(() => { - return !personaConnectStatus.hasPersona - ? t('create_persona') - : !personaConnectStatus.connected - ? t('connect_persona') - : walletTitle - }, [personaConnectStatus, walletTitle, t]) useEffect(() => { - if (personaConnectStatus.action) return const { status, isVerified, action } = nextIDConnectStatus if (isVerified || status === NextIDVerificationStatus.WaitingLocalConnect) return if (action) { @@ -166,15 +155,11 @@ function ToolboxHintForWallet(props: ToolboxHintProps) { } }, [nextIDConnectStatus.status]) - const onClick = () => { - personaConnectStatus.action ? personaConnectStatus.action() : openWallet() - } - return ( <> - + {isWalletValid ? ( - {title} + {walletTitle} {shouldDisplayChainIndicator ? ( { if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') if (!application.entry.nextIdRequired) return undefined - if (ApplicationEntryStatus.isPersonaConnected === false) return t('application_tooltip_hint_connect_persona') + if (ApplicationEntryStatus.isPersonaConnected === false && !disabled) + return t('application_tooltip_hint_connect_persona') + if (ApplicationEntryStatus.shouldVerifyNextId && !disabled) return t('application_tooltip_hint_verify') if (ApplicationEntryStatus.shouldDisplayTooltipHint) return t('application_tooltip_hint_sns_persona_unmatched', { currentPersonaPublicKey: formatPersonaPublicKey( @@ -246,9 +237,8 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { 4, ), }) - if (ApplicationEntryStatus.shouldVerifyNextId) return t('application_tooltip_hint_verify') return undefined - }, [application, ApplicationEntryStatus]) + }, [application, ApplicationEntryStatus, disabled]) // #endregion return @@ -277,56 +267,23 @@ const ApplicationEntryStatusContext = createContext) { - const ui = activatedSocialNetworkUI - const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform - const lastState = useSetupGuideStatusState() - const { currentPersona } = PersonaContext.useContainer() - const lastRecognized = useLastRecognizedIdentity() - const username = useMemo(() => { - return lastState.username || lastRecognized.identifier?.userId - }, [lastState, lastRecognized]) - const personas = useMyPersonas() - - const checkSNSConnectToCurrentPersona = useCallback((persona: PersonaInformation) => { - if (!username) return undefined - return persona.linkedProfiles.some((x) => x.identifier.userId === username) - }, []) - const personaConnectStatus = usePersonaConnectStatus() + const nextIDConnectStatus = useNextIDConnectStatus() - const { value: ApplicationCurrentStatus } = useAsync(async () => { - const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() - const currentPersona = (await Services.Identity.queryOwnedPersonaInformation(true)).find( - (x) => x.identifier === currentPersonaIdentifier, - ) - const currentSNSConnectedPersona = personas.find(checkSNSConnectToCurrentPersona) - return { - isSNSConnectToCurrentPersona: currentPersona ? checkSNSConnectToCurrentPersona(currentPersona) : false, - isNextIDVerify: username - ? await NextIDProof.queryIsBound(currentPersona?.identifier.publicKeyAsHex ?? '', platform, username) - : false, - currentPersonaPublicKey: currentPersona?.identifier.rawPublicKey, - currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.identifier.rawPublicKey, - } - }, [platform, username, ui, personas, currentPersona]) - - const { - isNextIDVerify, - isSNSConnectToCurrentPersona, - currentPersonaPublicKey, - currentSNSConnectedPersonaPublicKey, - } = ApplicationCurrentStatus ?? {} + const { value: ApplicationCurrentStatus } = usePersonaAgainstSNSConnectStatus() + const { isSNSConnectToCurrentPersona, currentPersonaPublicKey, currentSNSConnectedPersonaPublicKey } = + ApplicationCurrentStatus ?? {} return ( From a34ca93e8c1c5af911a3733cf5e6464673f484f4 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 1 May 2022 14:01:48 +0800 Subject: [PATCH 20/44] chore: close app board after wallet connect --- .../components/shared/ApplicationBoard.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 1636d6697f5e..9a81464157e1 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,4 +1,4 @@ -import { useContext, createContext, PropsWithChildren, useMemo, useCallback } from 'react' +import { useContext, createContext, PropsWithChildren, useMemo, useCallback, useEffect } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' @@ -100,10 +100,18 @@ function ApplicationBoardContent(props: Props) { const { t } = useI18N() const snsAdaptorPlugins = useActivatedPluginsSNSAdaptor('any') const currentWeb3Network = useCurrentWeb3NetworkPluginID() - console.log(currentWeb3Network) const chainId = useChainId() const account = useAccount() const currentSNSNetwork = getCurrentSNSNetwork(activatedSocialNetworkUI.networkIdentifier) + + const { closeDialog: closeApplicationBoard } = useRemoteControlledDialog( + WalletMessages.events.ApplicationDialogUpdated, + ) + + useEffect(() => { + if (account && currentWeb3Network === NetworkPluginID.PLUGIN_EVM) closeApplicationBoard() + }, [account]) + const applicationList = useMemo( () => snsAdaptorPlugins @@ -169,7 +177,7 @@ interface RenderEntryComponentProps { function RenderEntryComponent({ application }: RenderEntryComponentProps) { const Entry = application.entry.RenderEntryComponent! const { t } = useI18N() - const { openDialog: _openWalletStatusDialog } = useRemoteControlledDialog( + const { openDialog: openWalletStatusDialog } = useRemoteControlledDialog( WalletMessages.events.walletStatusDialogUpdated, ) const { closeDialog: closeApplicationBoard } = useRemoteControlledDialog( @@ -193,11 +201,6 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { // #endregion // #region entry click effect - const openWalletStatusDialog = useCallback(() => { - closeApplicationBoard() - _openWalletStatusDialog() - }, []) - const connectPersona = useCallback(() => { closeApplicationBoard() ApplicationEntryStatus.personaConnectAction?.() From 1d1e836eec9064035ee85a3fedbf387885417712 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 1 May 2022 14:15:12 +0800 Subject: [PATCH 21/44] chore: close app board after wallet connect --- .../mask/src/components/shared/ApplicationBoard.tsx | 11 +---------- .../Wallet/SNSAdaptor/SelectProviderDialog/index.tsx | 1 + 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 9a81464157e1..c9ed5353c95b 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,4 +1,4 @@ -import { useContext, createContext, PropsWithChildren, useMemo, useCallback, useEffect } from 'react' +import { useContext, createContext, PropsWithChildren, useMemo, useCallback } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' @@ -103,15 +103,6 @@ function ApplicationBoardContent(props: Props) { const chainId = useChainId() const account = useAccount() const currentSNSNetwork = getCurrentSNSNetwork(activatedSocialNetworkUI.networkIdentifier) - - const { closeDialog: closeApplicationBoard } = useRemoteControlledDialog( - WalletMessages.events.ApplicationDialogUpdated, - ) - - useEffect(() => { - if (account && currentWeb3Network === NetworkPluginID.PLUGIN_EVM) closeApplicationBoard() - }, [account]) - const applicationList = useMemo( () => snsAdaptorPlugins diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx index c55166e43d31..61e4942bf5d6 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx @@ -75,6 +75,7 @@ export function SelectProviderDialog(props: SelectProviderDialogProps) { pluginIDSettings.value = undeterminedPluginID } closeDialog() + WalletMessages.events.ApplicationDialogUpdated.sendToAll({ open: false }) if (isDashboard) WalletMessages.events.walletStatusDialogUpdated.sendToLocal({ open: false }) }, [networkType, undeterminedNetwork?.type, undeterminedPluginID, closeDialog, isDashboard], From e65095358e17692805dd9f5f06b952d593135ac2 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 1 May 2022 14:41:38 +0800 Subject: [PATCH 22/44] fix: ui style --- packages/mask/src/components/shared/ApplicationBoard.tsx | 6 +++--- .../mask/src/components/shared/ApplicationBoardDialog.tsx | 2 +- packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx | 1 - .../shared/src/UI/components/ApplicationEntry/index.tsx | 1 + 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index c9ed5353c95b..0847fbfdfcba 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -25,10 +25,10 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { overflowY: 'auto', overflowX: 'hidden', gridTemplateRows: '100px', - gridGap: theme.spacing(2), + gridGap: 10, justifyContent: 'space-between', - height: 340, - width: props.shouldScroll ? 575 : 560, + height: 320, + width: props.shouldScroll ? 575 : 562, '::-webkit-scrollbar': { backgroundColor: 'transparent', width: 20, diff --git a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx index c7edb8161cdb..f08ee4338f41 100644 --- a/packages/mask/src/components/shared/ApplicationBoardDialog.tsx +++ b/packages/mask/src/components/shared/ApplicationBoardDialog.tsx @@ -12,7 +12,7 @@ import { useI18N } from '../../utils' const useStyles = makeStyles()((theme) => { return { content: { - padding: theme.spacing(1, 2, 2), + padding: theme.spacing(1.5, 2, 2), height: 470, overflow: 'hidden', }, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx index c6a4c660a177..eb4848d13401 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx @@ -102,7 +102,6 @@ const sns: Plugin.SNSAdaptor.Definition = { return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { - console.log({ EntryComponentProps }) return ( ()((theme, { disabled }) => ( cursor: 'pointer', '&:hover': { transform: 'scale(1.02) translateY(-2px)', + background: theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.common.black, boxShadow: theme.palette.mode === 'light' ? '0px 5px 8px rgba(0, 0, 0, 0.05)' : 'none', }, }, From 5941365cf95c4745c49a7be40407790ff8f8aadc Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 3 May 2022 14:03:49 +0800 Subject: [PATCH 23/44] fix: bug --- packages/mask/shared-ui/locales/en-US.json | 2 + .../InjectedComponents/ToolboxUnstyled.tsx | 2 +- .../components/shared/ApplicationBoard.tsx | 40 ++++++++++++------- .../shared/ApplicationSettingPluginList.tsx | 1 + .../src/plugins/Savings/SNSAdaptor/index.tsx | 7 +--- .../SNSAdaptor/SelectProviderDialog/index.tsx | 1 - 6 files changed, 31 insertions(+), 22 deletions(-) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index 44cb3930de84..4c48a9a668ba 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -33,8 +33,10 @@ "application_settings": "Application Settings", "application_tooltip_hint_sns_persona_unmatched": "Twitter ID verified persona({{currentSNSConnectedPersonaPublicKey}}) is not consistent with your current persona({{currentPersonaPublicKey}}). Please switch to persona({{currentSNSConnectedPersonaPublicKey}}) and try again.", "application_tooltip_hint_verify": "Please verify your social account", + "application_tooltip_hint_create_persona": "Please create your persona and use it", "application_tooltip_hint_connect_persona": "Please connect your persona", "application_tooltip_hint_connect_wallet": "Please connect your wallet", + "application_tooltip_hint_switch_to_evm_wallet": "Please switch to EVM wallets", "application_settings_tab_app_list": "APP list", "application_settings_tab_plug_in_switch": "Plug-in switch", "application_settings_tab_plug_app-list-unlisted": "Unlisted", diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index cd36b8e104d7..00988cf4a91c 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -228,7 +228,7 @@ function useToolbox() { const { value: domain } = useReverseAddress(account) function renderButtonText() { - if (!account) return t('mask_network') + if (!account) return t('plugin_wallet_connect_wallet') if (!chainIdValid) return t('plugin_wallet_wrong_network') if (pendingTransactions.length <= 0) return Utils?.formatDomainName?.(domain) || Utils?.formatAddress?.(account, 4) || account diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 0847fbfdfcba..ebc4beb1f3c9 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -119,9 +119,12 @@ function ApplicationBoardContent(props: Props) { entry: x, enabled: isSNSEnabled, pluginId: cur.ID, - isWalletConnectedRequired: - (!account || currentWeb3Network !== NetworkPluginID.PLUGIN_EVM) && - isWalletConnectedRequired, + isWalletConnectedRequired: !account && isWalletConnectedRequired, + isWalletConnectedEVMRequired: Boolean( + account && + currentWeb3Network !== NetworkPluginID.PLUGIN_EVM && + isWalletConnectedRequired, + ), } }) ?? EMPTY_LIST, ) @@ -168,8 +171,8 @@ interface RenderEntryComponentProps { function RenderEntryComponent({ application }: RenderEntryComponentProps) { const Entry = application.entry.RenderEntryComponent! const { t } = useI18N() - const { openDialog: openWalletStatusDialog } = useRemoteControlledDialog( - WalletMessages.events.walletStatusDialogUpdated, + const { openDialog: openSelectProviderDialog } = useRemoteControlledDialog( + WalletMessages.events.selectProviderDialogUpdated, ) const { closeDialog: closeApplicationBoard } = useRemoteControlledDialog( WalletMessages.events.ApplicationDialogUpdated, @@ -192,7 +195,7 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { // #endregion // #region entry click effect - const connectPersona = useCallback(() => { + const createOrConnectPersona = useCallback(() => { closeApplicationBoard() ApplicationEntryStatus.personaConnectAction?.() }, [ApplicationEntryStatus]) @@ -202,21 +205,25 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) }, []) - const clickHandler = application.isWalletConnectedRequired - ? openWalletStatusDialog - : !application.entry.nextIdRequired - ? undefined - : ApplicationEntryStatus.isPersonaConnected === false - ? connectPersona - : ApplicationEntryStatus.shouldVerifyNextId - ? verifyPersona - : undefined + const clickHandler = + application.isWalletConnectedRequired || application.isWalletConnectedEVMRequired + ? openSelectProviderDialog + : !application.entry.nextIdRequired + ? undefined + : ApplicationEntryStatus.isPersonaConnected === false || ApplicationEntryStatus.isPersonaCreated === false + ? createOrConnectPersona + : ApplicationEntryStatus.shouldVerifyNextId + ? verifyPersona + : undefined // #endregion // #region tooltip hint const tooltipHint = useMemo(() => { if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') + if (application.isWalletConnectedEVMRequired) return t('application_tooltip_hint_switch_to_evm_wallet') if (!application.entry.nextIdRequired) return undefined + if (ApplicationEntryStatus.isPersonaCreated === false && !disabled) + return t('application_tooltip_hint_create_persona') if (ApplicationEntryStatus.isPersonaConnected === false && !disabled) return t('application_tooltip_hint_connect_persona') if (ApplicationEntryStatus.shouldVerifyNextId && !disabled) return t('application_tooltip_hint_verify') @@ -240,6 +247,7 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { interface ApplicationEntryStatusContextProps { isPersonaConnected: boolean | undefined + isPersonaCreated: boolean | undefined isNextIDVerify: boolean | undefined isSNSConnectToCurrentPersona: boolean | undefined shouldDisplayTooltipHint: boolean | undefined @@ -251,6 +259,7 @@ interface ApplicationEntryStatusContextProps { const ApplicationEntryStatusContext = createContext({ isPersonaConnected: undefined, + isPersonaCreated: undefined, isNextIDVerify: undefined, isSNSConnectToCurrentPersona: undefined, shouldDisplayTooltipHint: undefined, @@ -272,6 +281,7 @@ function ApplicationEntryStatusProvider(props: PropsWithChildren<{}>) { setOpen(true)} - /> - setOpen(false))} + onClick={EntryComponentProps.onClick ?? (() => setOpen(true))} /> + setOpen(false)} /> ) }, diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx index 61e4942bf5d6..c55166e43d31 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx @@ -75,7 +75,6 @@ export function SelectProviderDialog(props: SelectProviderDialogProps) { pluginIDSettings.value = undeterminedPluginID } closeDialog() - WalletMessages.events.ApplicationDialogUpdated.sendToAll({ open: false }) if (isDashboard) WalletMessages.events.walletStatusDialogUpdated.sendToLocal({ open: false }) }, [networkType, undeterminedNetwork?.type, undeterminedPluginID, closeDialog, isDashboard], From 9b65e92b54f6de7806c8deeb847032c66a6e612b Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 3 May 2022 14:44:12 +0800 Subject: [PATCH 24/44] fix: mf 612 --- .../plugins/Pets/SNSAdaptor/PetSetDialog.tsx | 33 ++++++++++++------- packages/mask/src/plugins/Pets/base.tsx | 18 +++++++++- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/packages/mask/src/plugins/Pets/SNSAdaptor/PetSetDialog.tsx b/packages/mask/src/plugins/Pets/SNSAdaptor/PetSetDialog.tsx index e90abeef3149..41b3e294de67 100644 --- a/packages/mask/src/plugins/Pets/SNSAdaptor/PetSetDialog.tsx +++ b/packages/mask/src/plugins/Pets/SNSAdaptor/PetSetDialog.tsx @@ -1,6 +1,6 @@ import { useState, useMemo, ReactNode } from 'react' import { useTimeout } from 'react-use' -import { isSameAddress } from '@masknet/web3-shared-evm' +import { isSameAddress, ChainId } from '@masknet/web3-shared-evm' import { makeStyles, useStylesExtends, useCustomSnackbar, ShadowRootPopper } from '@masknet/theme' import { useValueRef } from '@masknet/shared-base-ui' import { @@ -24,6 +24,7 @@ import { useUser, useNFTs, useNFTsExtra } from '../hooks' import { useI18N } from '../../../utils' import { ImageLoader } from './ImageLoader' import { petShowSettings } from '../settings' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => ({ desBox: { @@ -301,17 +302,25 @@ export function PetSetDialog({ configNFTs, onClose }: PetSetDialogProps) { label={t('plugin_pets_dialog_check_title')} sx={{ marginTop: '4px' }} /> - - {t('plugin_pets_dialog_btn')} - + + + {t('plugin_pets_dialog_btn')} + + {t('plugin_pets_dialog_created')} {t('plugin_pets_dialog_powered')} diff --git a/packages/mask/src/plugins/Pets/base.tsx b/packages/mask/src/plugins/Pets/base.tsx index c4809a2d8cd5..732ca96c2691 100644 --- a/packages/mask/src/plugins/Pets/base.tsx +++ b/packages/mask/src/plugins/Pets/base.tsx @@ -1,4 +1,6 @@ import { CurrentSNSNetwork, Plugin } from '@masknet/plugin-infra' +import { NetworkPluginID } from '@masknet/plugin-infra/web3' +import { ChainId } from '@masknet/web3-shared-evm' import { PetsPluginID } from './constants' export const base: Plugin.Shared.Definition = { @@ -11,7 +13,21 @@ export const base: Plugin.Shared.Definition = { enableRequirement: { architecture: { app: false, web: true }, networks: { type: 'opt-in', networks: { [CurrentSNSNetwork.Twitter]: true } }, - + web3: { + [NetworkPluginID.PLUGIN_EVM]: { + supportedChainIds: [ + ChainId.Mainnet, + ChainId.BSC, + ChainId.Matic, + ChainId.Arbitrum, + ChainId.xDai, + ChainId.Fantom, + ChainId.Avalanche, + ChainId.Aurora, + ChainId.Conflux, + ], + }, + }, target: 'stable', }, } From f9883731824d7fea908319351f43f3b3d2420643 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 3 May 2022 16:23:52 +0800 Subject: [PATCH 25/44] chore: icon --- .../icons/general/AccountBalanceWallet.tsx | 35 +++++++++++++++++++ packages/icons/general/index.ts | 1 + .../InjectedComponents/ToolboxUnstyled.tsx | 4 +-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 packages/icons/general/AccountBalanceWallet.tsx diff --git a/packages/icons/general/AccountBalanceWallet.tsx b/packages/icons/general/AccountBalanceWallet.tsx new file mode 100644 index 000000000000..633b6b84fa08 --- /dev/null +++ b/packages/icons/general/AccountBalanceWallet.tsx @@ -0,0 +1,35 @@ +import { createPaletteAwareIcon } from '../utils' + +export const AccountBalanceWalletIcon = createPaletteAwareIcon( + 'AccountBalanceWalletIcon', + + + + + , + + + + + , + undefined, + '0 0 27 26', +) diff --git a/packages/icons/general/index.ts b/packages/icons/general/index.ts index fba52bae1e3a..507844a037c9 100644 --- a/packages/icons/general/index.ts +++ b/packages/icons/general/index.ts @@ -94,6 +94,7 @@ export * from './Verified' export * from './Pin' export * from './Selected' export * from './Cram' +export * from './AccountBalanceWallet' export * from './TriangleWarning' export * from './OpenSeaColoredIcon' export * from './Collectible' diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index 00988cf4a91c..c8db0851908d 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -30,7 +30,7 @@ import { useI18N } from '../../utils' import { hasNativeAPI, nativeAPI } from '../../../shared/native-rpc' import { useRecentTransactions } from '../../plugins/Wallet/hooks/useRecentTransactions' import GuideStep from '../GuideStep' -import { MaskFilledIcon } from '../../resources/MaskIcon' +import { AccountBalanceWalletIcon } from '@masknet/icons' import { makeStyles } from '@masknet/theme' import FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord' import { NextIDVerificationStatus, useNextIDConnectStatus } from '../DataSource/useNextID' @@ -170,7 +170,7 @@ function ToolboxHintForWallet(props: ToolboxHintProps) { isBorderColorNotDefault /> ) : ( - + )} {mini ? null : ( From c61e1cfe6c772e093b486bf2b54a957d3d0b2184 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 3 May 2022 16:43:53 +0800 Subject: [PATCH 26/44] fix: bug --- .../src/components/InjectedComponents/ToolboxUnstyled.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index c8db0851908d..921c2d201bb1 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -221,6 +221,9 @@ function useToolbox() { const { openDialog: openWalletStatusDialog } = useRemoteControlledDialog( WalletMessages.events.walletStatusDialogUpdated, ) + const { openDialog: openSelectProviderDialog } = useRemoteControlledDialog( + WalletMessages.events.selectProviderDialogUpdated, + ) // #endregion const isWalletValid = !!account && selectedWallet && chainIdValid @@ -246,7 +249,7 @@ function useToolbox() { const openWallet = useCallback(() => { if (hasNativeAPI) return nativeAPI?.api.misc_openCreateWalletView() - return openWalletStatusDialog() + return isWalletValid ? openWalletStatusDialog() : openSelectProviderDialog() }, [openWalletStatusDialog, hasNativeAPI]) const walletTitle = renderButtonText() From 2d867a82134daa75f275fcc9e967039330b5a4c0 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 3 May 2022 23:51:29 +0800 Subject: [PATCH 27/44] chore: little fix --- .../mask/src/components/InjectedComponents/ToolboxUnstyled.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index 921c2d201bb1..ba94cea7a5a1 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -250,7 +250,7 @@ function useToolbox() { const openWallet = useCallback(() => { if (hasNativeAPI) return nativeAPI?.api.misc_openCreateWalletView() return isWalletValid ? openWalletStatusDialog() : openSelectProviderDialog() - }, [openWalletStatusDialog, hasNativeAPI]) + }, [openWalletStatusDialog, openSelectProviderDialog, isWalletValid, hasNativeAPI]) const walletTitle = renderButtonText() From 22b6e61e5602c43ab96af04a288183e8f65dd965 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 4 May 2022 16:10:22 +0800 Subject: [PATCH 28/44] chore: transaction list ui --- packages/icons/general/LinkOut.tsx | 34 +---- packages/mask/shared-ui/locales/en-US.json | 2 +- .../WalletStatusBox/TransactionList.tsx | 21 +-- .../shared/WalletStatusBox/index.tsx | 139 +++++++++--------- .../usePendingTransactions.tsx | 60 ++++---- 5 files changed, 113 insertions(+), 143 deletions(-) diff --git a/packages/icons/general/LinkOut.tsx b/packages/icons/general/LinkOut.tsx index 5fa992219d78..ef93901c61b6 100644 --- a/packages/icons/general/LinkOut.tsx +++ b/packages/icons/general/LinkOut.tsx @@ -5,38 +5,18 @@ export const LinkOutIcon: typeof SvgIcon = createPaletteAwareIcon( 'LinkOutIcon', - - , - - , undefined, - '0 0 20 20', + '0 0 16 16', ) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index 4c48a9a668ba..4720e44dd0bd 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -222,7 +222,7 @@ "wallet_balance_eth": "Balance(ETH)", "wallet_new": "New Wallet", "wallet_status_pending": "Pending", - "wallet_status_pending_clear_all": "Clear all", + "wallet_status_pending_clear_all": "Clear All", "wallet_status_pending_clear": "Clear", "wallet_status_button_change": "Change", "wallet_status_button_copy_address": "Copy Address", diff --git a/packages/mask/src/components/shared/WalletStatusBox/TransactionList.tsx b/packages/mask/src/components/shared/WalletStatusBox/TransactionList.tsx index cd328e98de8d..3e729c601caa 100644 --- a/packages/mask/src/components/shared/WalletStatusBox/TransactionList.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox/TransactionList.tsx @@ -11,7 +11,7 @@ import { useChainId, useWeb3, } from '@masknet/web3-shared-evm' -import { Button, Grid, GridProps, Link, List, ListItem, ListProps, Stack, Typography } from '@mui/material' +import { Grid, GridProps, Link, List, ListItem, ListProps, Stack, Typography } from '@mui/material' import classnames from 'classnames' import format from 'date-fns/format' import { noop } from 'lodash-unified' @@ -31,6 +31,7 @@ const useStyles = makeStyles()((theme) => ({ listItem: { height: 54, backgroundColor: theme.palette.background.paper, + padding: theme.spacing(1, 1), '&:nth-child(even)': { backgroundColor: theme.palette.background.default, }, @@ -53,21 +54,23 @@ const useStyles = makeStyles()((theme) => ({ fontSize: 14, display: 'flex', alignItems: 'center', - padding: theme.spacing(0, 0.5), color: theme.palette.text.primary, boxSizing: 'border-box', }, link: { + display: 'flex', fill: 'none', }, linkIcon: { fill: 'none', - width: 12, - height: 12, + width: 16, + height: 16, marginLeft: theme.spacing(0.5), }, clear: { fontSize: 14, + color: theme.palette.primary.main, + cursor: 'pointer', }, })) @@ -144,7 +147,7 @@ const Transaction: FC = ({ chainId, transaction: tx, onClear = className={classes.methodName} title={functionName || ''} variant="body1" - component="strong"> + fontWeight={500}> {functionName} @@ -167,15 +170,15 @@ const Transaction: FC = ({ chainId, transaction: tx, onClear = - + {statusTextMap[txStatus]} - + {txStatus === TransactionStatusType.NOT_DEPEND ? ( - + ) : null} diff --git a/packages/mask/src/components/shared/WalletStatusBox/index.tsx b/packages/mask/src/components/shared/WalletStatusBox/index.tsx index 1cdbf4f68bcc..397d86958f53 100644 --- a/packages/mask/src/components/shared/WalletStatusBox/index.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox/index.tsx @@ -90,14 +90,6 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } statusBox: { position: 'relative', }, - transactionList: { - zIndex: 999, - position: 'absolute', - left: 0, - right: 0, - top: 88, - padding: 0, - }, })) interface WalletStatusBox { isDashboard?: boolean @@ -142,73 +134,78 @@ export function WalletStatusBox(props: WalletStatusBox) { const { summary: pendingSummary, transactionList } = usePendingTransactions() return account ? ( -
- -
-
- {providerType !== ProviderType.MaskWallet ? ( - - {domain && Utils?.formatDomainName - ? Utils.formatDomainName(domain) - : providerDescriptor?.name} - - ) : ( - <> + <> +
+ +
+
+ {providerType !== ProviderType.MaskWallet ? ( - {wallet?.name ?? providerDescriptor?.name} + {domain && Utils?.formatDomainName + ? Utils.formatDomainName(domain) + : providerDescriptor?.name} - {domain && Utils?.formatDomainName ? ( - {Utils.formatDomainName(domain)} - ) : null} - - )} -
-
- - - - - - - - - - {pendingSummary} + ) : ( + <> + + {wallet?.name ?? providerDescriptor?.name} + + {domain && Utils?.formatDomainName ? ( + {Utils.formatDomainName(domain)} + ) : null} + + )} +
+
+ + + + + + + + + +
+ + {!props.disableChange && ( +
+ +
+ )} +
+
+ {pendingSummary} + {transactionList}
-
{transactionList}
- {!props.disableChange && ( -
- -
- )} -
+ ) : (
+ ) : null} - - ) +
+ ) : null const transactionList = (
- {showRecentTransactions && transactions.length ? ( - { - setMeltedTxHashes((list) => [...list, tx.hash]) - removeRecentTx(tx.hash) - }} - /> - ) : null} + { + setMeltedTxHashes((list) => [...list, tx.hash]) + removeRecentTx(tx.hash) + }} + />
) From 3e9cd4661978d8f0a6f7743b1f90ce671eda20c6 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Wed, 4 May 2022 16:18:39 +0800 Subject: [PATCH 29/44] chore: tip content ui --- packages/icons/general/WarningTriangle.tsx | 24 +++++++++++++++++++ packages/icons/general/index.ts | 1 + .../ConnectionProgress.tsx | 10 ++++---- 3 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 packages/icons/general/WarningTriangle.tsx diff --git a/packages/icons/general/WarningTriangle.tsx b/packages/icons/general/WarningTriangle.tsx new file mode 100644 index 000000000000..bf55726eaf34 --- /dev/null +++ b/packages/icons/general/WarningTriangle.tsx @@ -0,0 +1,24 @@ +import { createIcon } from '../utils' + +export const WarningTriangleIcon = createIcon( + 'WarningTriangleIcon', + + + + + , + '0 0 20 20', +) diff --git a/packages/icons/general/index.ts b/packages/icons/general/index.ts index 507844a037c9..09e579647e3d 100644 --- a/packages/icons/general/index.ts +++ b/packages/icons/general/index.ts @@ -116,3 +116,4 @@ export * from './CircleLoading' export * from './AddUser' export * from './PopupRestore' export * from './Direct' +export * from './WarningTriangle' diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/ConnectionProgress.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/ConnectionProgress.tsx index 3e8f484df2f4..48e377ee54f3 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/ConnectionProgress.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/ConnectWalletDialog/ConnectionProgress.tsx @@ -2,6 +2,7 @@ import type { AsyncStateRetry } from 'react-use/lib/useAsyncRetry' import { Box, Card, CircularProgress, Typography, Paper, Link } from '@mui/material' import { useStylesExtends, makeStyles, MaskColorVar } from '@masknet/theme' import { ImageIcon } from '@masknet/shared' +import { WarningTriangleIcon } from '@masknet/icons' import { NetworkPluginID, useProviderDescriptor } from '@masknet/plugin-infra/web3' import { ProviderType, @@ -11,7 +12,6 @@ import { } from '@masknet/web3-shared-evm' import ActionButton from '../../../../extension/options-page/DashboardComponents/ActionButton' import { useI18N } from '../../../../utils' -import { FlashIcon } from '../../../../resources/FlashIcon' import { Trans } from 'react-i18next' const useStyles = makeStyles()((theme) => ({ @@ -25,17 +25,17 @@ const useStyles = makeStyles()((theme) => ({ flexWrap: 'nowrap', alignItems: 'center', marginTop: 10, - backgroundColor: MaskColorVar.errorBackground, + backgroundColor: MaskColorVar.warningBackground, padding: theme.spacing(2, 0, 2, 1.5), borderRadius: 8, }, tipContentText: { - color: MaskColorVar.redMain, + color: MaskColorVar.warning, fontSize: 12, marginLeft: 10, }, tipLink: { - color: MaskColorVar.redMain, + color: MaskColorVar.warning, textDecoration: 'underline', }, error: { @@ -97,7 +97,7 @@ export function ConnectionProgress(props: ConnectionProgressProps) { - + Date: Thu, 5 May 2022 12:39:08 +0800 Subject: [PATCH 30/44] chore: transaction list ui --- .../usePendingTransactions.tsx | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx b/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx index 95731e36a6af..41f65257bfb7 100644 --- a/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx @@ -1,16 +1,14 @@ import { EMPTY_LIST } from '@masknet/shared-base' -import { useAim } from '@masknet/shared-base-ui' import { makeStyles } from '@masknet/theme' import { TransactionStatusType } from '@masknet/web3-shared-evm' import { Typography } from '@mui/material' import classnames from 'classnames' -import { useEffect, useRef, useState } from 'react' +import { useState } from 'react' import { useClearRecentTransactions, useRecentTransactions, useRemoveRecentTransaction, } from '../../../plugins/Wallet/hooks' -import type { RecentTransaction } from '../../../plugins/Wallet/services' import { useI18N } from '../../../utils' import { TransactionList } from './TransactionList' @@ -37,9 +35,6 @@ const useStyles = makeStyles()((theme) => ({ export function usePendingTransactions() { const { classes } = useStyles() const { t } = useI18N() - const pendingSummaryRef = useRef(null) - const transactionsListRef = useRef(null) - const showRecentTransactions = useAim(pendingSummaryRef, transactionsListRef) // #region recent pending transactions const { value: pendingTransactions = EMPTY_LIST } = useRecentTransactions({ @@ -48,21 +43,17 @@ export function usePendingTransactions() { // frozenTxes would not be reactive to pendingTransactions, // it would be recreated then the list shows up. - const frozenTxes = useRef([]) const [meltedTxHashes, setMeltedTxHashes] = useState([]) - useEffect(() => { - frozenTxes.current = pendingTransactions.slice(0, 5) - setMeltedTxHashes([]) - }, [showRecentTransactions]) + const clearRecentTxes = useClearRecentTransactions() const removeRecentTx = useRemoveRecentTransaction() - const transactions = frozenTxes.current.filter((tx) => !meltedTxHashes.includes(tx.hash)) + const transactions = pendingTransactions.slice(0, 5).filter((tx) => !meltedTxHashes.includes(tx.hash)) // #endregion - + console.log({ transactions, pendingTransactions }) const summary = pendingTransactions.length ? (
-
+
{pendingTransactions.length ? ( {pendingTransactions.length} {t('wallet_status_pending')} @@ -78,15 +69,13 @@ export function usePendingTransactions() { ) : null const transactionList = ( -
- { - setMeltedTxHashes((list) => [...list, tx.hash]) - removeRecentTx(tx.hash) - }} - /> -
+ { + setMeltedTxHashes((list) => [...list, tx.hash]) + removeRecentTx(tx.hash) + }} + /> ) return { summary, transactionList } From 0a9fb7c50d552ebecab9afd3d91f000df2f6f987 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Thu, 5 May 2022 12:47:23 +0800 Subject: [PATCH 31/44] chore: remove debug code --- .../components/shared/WalletStatusBox/usePendingTransactions.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx b/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx index 41f65257bfb7..0a8dc9e85e26 100644 --- a/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx @@ -50,7 +50,6 @@ export function usePendingTransactions() { const transactions = pendingTransactions.slice(0, 5).filter((tx) => !meltedTxHashes.includes(tx.hash)) // #endregion - console.log({ transactions, pendingTransactions }) const summary = pendingTransactions.length ? (
From 4122fba85311b210a5d38bf2f778d792074ee8c9 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 6 May 2022 12:40:59 +0800 Subject: [PATCH 32/44] fix: bug --- packages/mask/shared-ui/locales/en-US.json | 2 +- .../shared/WalletStatusBox/index.tsx | 11 +- .../usePendingTransactions.tsx | 5 +- .../SNSAdaptor/WalletStatusDialog/index.tsx | 2 +- .../CrossChainBridge/src/SNSAdaptor/index.tsx | 2 +- .../FileService/src/SNSAdaptor/index.tsx | 2 +- .../GoPlusSecurity/src/SNSAdaptor/index.tsx | 2 +- pnpm-lock.yaml | 1403 +++++++++-------- 8 files changed, 732 insertions(+), 697 deletions(-) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index 4720e44dd0bd..f5ac3cffd2d8 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -221,7 +221,7 @@ "wallet_balance": "Balance", "wallet_balance_eth": "Balance(ETH)", "wallet_new": "New Wallet", - "wallet_status_pending": "Pending", + "wallet_status_pending": "Pending{{plural}}", "wallet_status_pending_clear_all": "Clear All", "wallet_status_pending_clear": "Clear", "wallet_status_button_change": "Change", diff --git a/packages/mask/src/components/shared/WalletStatusBox/index.tsx b/packages/mask/src/components/shared/WalletStatusBox/index.tsx index 397d86958f53..a3c6c864fb4e 100644 --- a/packages/mask/src/components/shared/WalletStatusBox/index.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox/index.tsx @@ -94,6 +94,7 @@ const useStyles = makeStyles<{ isDashboard: boolean }>()((theme, { isDashboard } interface WalletStatusBox { isDashboard?: boolean disableChange?: boolean + showPendingTransaction?: boolean } export function WalletStatusBox(props: WalletStatusBox) { const { t } = useI18N() @@ -201,10 +202,12 @@ export function WalletStatusBox(props: WalletStatusBox) {
)}
-
- {pendingSummary} - {transactionList} -
+ {props.showPendingTransaction ? ( +
+ {pendingSummary} + {transactionList} +
+ ) : null} ) : (
diff --git a/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx b/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx index 0a8dc9e85e26..fe2f39e54a01 100644 --- a/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx +++ b/packages/mask/src/components/shared/WalletStatusBox/usePendingTransactions.tsx @@ -55,7 +55,10 @@ export function usePendingTransactions() {
{pendingTransactions.length ? ( - {pendingTransactions.length} {t('wallet_status_pending')} + {pendingTransactions.length}{' '} + {t('wallet_status_pending', { + plural: pendingTransactions.length > 1 ? 's' : '', + })} ) : null}
diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx index 1cc04823e2cb..f77a9eb215ca 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/WalletStatusDialog/index.tsx @@ -64,7 +64,7 @@ export function WalletStatusDialog(props: WalletStatusDialogProps) { return ( - + {!chainIdValid ? ( diff --git a/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx b/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx index c475a850f9dd..7b4a1f1ab652 100644 --- a/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx +++ b/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx @@ -12,7 +12,7 @@ const sns: Plugin.SNSAdaptor.Definition = { ApplicationEntries: [ (() => { const icon = - const name = { i18nKey: '__plugin_name', fallback: 'Cross-bridge' } + const name = { fallback: 'Cross-bridge' } return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { diff --git a/packages/plugins/FileService/src/SNSAdaptor/index.tsx b/packages/plugins/FileService/src/SNSAdaptor/index.tsx index 8763125cbfd9..ecc4c9a8591e 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/index.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/index.tsx @@ -36,7 +36,7 @@ const definition: Plugin.SNSAdaptor.Definition = { ApplicationEntries: [ (() => { const icon = - const name = { i18nKey: '__plugin_name', fallback: 'File Service' } + const name = { fallback: 'File Service' } return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx index 1a7a963e487b..167b6dceedbf 100644 --- a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx @@ -12,7 +12,7 @@ const sns: Plugin.SNSAdaptor.Definition = { ApplicationEntries: [ (() => { const icon = - const name = { i18nKey: '__plugin_name', fallback: 'Check Security' } + const name = { fallback: 'Check Security' } return { ApplicationEntryID: base.ID, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9cea8564a7c2..f2cf2a7cedbb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: 5.3 +lockfileVersion: 5.4 onlyBuiltDependencies: [] @@ -67,14 +67,14 @@ importers: dependencies: '@dimensiondev/kit': 0.0.0-20220228054820-f2378be '@emotion/cache': 11.7.1 - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 + '@emotion/react': 11.9.0_wu2ym3hmg7l4ose2cw56vw46fu '@emotion/serialize': 1.0.3 - '@emotion/styled': 11.8.1_d04d4cdfb6fe6aad6dcad79e21a129f6 + '@emotion/styled': 11.8.1_2bguzx5w7zvk23ok26pcdijj6y '@emotion/utils': 1.1.0 - '@mui/icons-material': 5.6.2_32f8b37479716651a818fda850aa5553 - '@mui/lab': 5.0.0-alpha.78_84892e2e0410c34486d9be5ce2fc3fe3 - '@mui/material': 5.6.2_1376d0c029fe63cac75d7e36fe4212f4 - '@mui/system': 5.6.2_de97b6be3b01c831652fad9cf8222fb8 + '@mui/icons-material': 5.6.2_gl4lg5dzoftfdkay7wufbksvkm + '@mui/lab': 5.0.0-alpha.78_qses4lqecdbujbwzxzoof7b74m + '@mui/material': 5.6.2_cn3nbqbj7zr4vr25py3p4qqs6q + '@mui/system': 5.6.2_32l3npr3ahedczjpvwopqirpxa '@solana/web3.js': 1.39.1 '@types/masknet__global-types': link:packages/polyfills/types '@types/react': 18.0.2 @@ -83,10 +83,10 @@ importers: immer: 9.0.12 lodash: 4.17.21 lodash-es: 4.17.21 - lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd + lodash-unified: 1.0.2_3ib2ivapxullxkx3xftsimdk7u react: 18.0.0 react-dom: 18.0.0_react@18.0.0 - react-i18next: 11.16.7_react-dom@18.0.0+react@18.0.0 + react-i18next: 11.16.7_zpnidt7m3osuk7shl3s4oenomq ses: 0.15.15 ts-results: 3.3.0 web3-core: 1.7.3 @@ -103,7 +103,7 @@ importers: '@nice-labs/git-rev': 3.5.0 '@swc/core': 1.2.165 '@types/lodash-es': 4.17.6 - '@typescript-eslint/experimental-utils': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 + '@typescript-eslint/experimental-utils': 5.20.0_5wgcfyoq5s2bom5manjnkh6vqi cspell: 5.19.7 eslint: 8.14.0 eslint-plugin-import: 2.26.0_eslint@8.14.0 @@ -116,8 +116,8 @@ importers: jest: 28.0.0-alpha.8_ts-node@10.7.0 lint-staged: 12.4.0 prettier: 2.6.2 - ts-jest: 27.1.4_1fd21a321a4425bdf006ce36236383ec - ts-node: 10.7.0_67134532d167564bacdc84129db6eba6 + ts-jest: 27.1.4_d7jbumq2iqs334agzy3cgy4d5q + ts-node: 10.7.0_m4jukmwrm5lexlg4qqjj3nxluy typescript: 4.7.0-beta packages/backup-format: @@ -223,17 +223,17 @@ importers: date-fns: 2.28.0 html-to-image: 1.9.0 json-stable-stringify: 1.0.1 - react-avatar-editor: 12.0.0_cba0cb7a45c5be1acc73e969c348db7f - react-dnd: 16.0.1_@types+react@18.0.2+react@18.0.0 + react-avatar-editor: 12.0.0_@babel+core@7.17.9 + react-dnd: 16.0.1 react-dnd-html5-backend: 16.0.1 - react-hook-form: 7.30.0_react@18.0.0 - react-qrcode-logo: 2.7.0_react-dom@18.0.0+react@18.0.0 - react-router-dom: 6.3.0_react-dom@18.0.0+react@18.0.0 - react-to-print: 2.14.6_react-dom@18.0.0+react@18.0.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-hook-form: 7.30.0 + react-qrcode-logo: 2.7.0 + react-router-dom: 6.3.0 + react-to-print: 2.14.6 + react-use: 17.3.2 unstated-next: 1.1.0 urlcat: 2.0.4 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0 uuid: 8.3.2 wallet.ts: 1.0.1 web3-core-helpers: 1.7.3 @@ -241,12 +241,12 @@ importers: zod: 3.14.4 devDependencies: '@babel/core': 7.17.9 - '@storybook/addon-actions': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-essentials': 6.4.22_cd5e0d67351b139ccd79e9a787b5432a - '@storybook/addon-links': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/builder-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/manager-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/react': 6.4.22_ec31d3858f91e1329ce176d1ed57f64f + '@storybook/addon-actions': 6.4.22 + '@storybook/addon-essentials': 6.4.22_jkwtzdvpdr64onyrt7qvyh3euy + '@storybook/addon-links': 6.4.22 + '@storybook/builder-webpack5': 6.4.22 + '@storybook/manager-webpack5': 6.4.22 + '@storybook/react': 6.4.22_hengm5mrivop3evkvr7hyfh5we babel-loader: 8.2.5_@babel+core@7.17.9 packages/empty: @@ -449,7 +449,7 @@ importers: zod: 3.14.4 dependencies: '@balancer-labs/sor': 1.0.0 - '@dimensiondev/holoflows-kit': 0.9.0-20210902104757-7c3d0d0_webextension-polyfill@0.9.0 + '@dimensiondev/holoflows-kit': 0.9.0-20210902104757-7c3d0d0_5owzivba7saavwcb3imbrcsadu '@dimensiondev/mask-wallet-core': 0.1.0-20211013082857-eb62e5f_protobufjs@6.11.2 '@dimensiondev/metamask-extension-provider': 3.0.6-20210519045409-1835d4d '@dimensiondev/secp256k1-webcrypto': 1.0.0-20220412114204-be816df @@ -533,7 +533,7 @@ importers: graphql-request: 3.5.0_graphql@15.5.3 https-browserify: 1.0.0 idb: 7.0.1 - iframe-resizer-react: 1.1.0_react-dom@18.0.0+react@18.0.0 + iframe-resizer-react: 1.1.0 isomorphic-dompurify: 0.18.0 jsbi: 3.1.4 json-stable-stringify: 1.0.1 @@ -543,19 +543,19 @@ importers: opensea-js: 1.2.7 promievent: 0.1.5 protobufjs: 6.11.2 - react-dnd: 16.0.1_c04393f9f1378a61422a37e5c8ab0477 + react-dnd: 16.0.1_@types+node@17.0.26 react-dnd-html5-backend: 16.0.1 - react-draggable: 4.4.4_react-dom@18.0.0+react@18.0.0 - react-feather: 2.0.9_react@18.0.0 - react-highlight-words: 0.18.0_react@18.0.0 - react-hook-form: 7.30.0_react@18.0.0 - react-router-dom: 6.3.0_react-dom@18.0.0+react@18.0.0 - react-transition-group: 4.4.2_react-dom@18.0.0+react@18.0.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 - react-virtualized-auto-sizer: 1.0.6_react-dom@18.0.0+react@18.0.0 - react-window: 1.8.7_react-dom@18.0.0+react@18.0.0 + react-draggable: 4.4.4 + react-feather: 2.0.9 + react-highlight-words: 0.18.0 + react-hook-form: 7.30.0 + react-router-dom: 6.3.0 + react-transition-group: 4.4.2 + react-use: 17.3.2 + react-virtualized-auto-sizer: 1.0.6 + react-window: 1.8.7 remarkable: 2.0.1 - rss3-next: 0.6.17_typescript@4.7.0-beta + rss3-next: 0.6.17 safari-14-idb-fix: 3.0.0 scrypt-js: 3.0.1 socket.io-client: 2.4.0 @@ -563,7 +563,7 @@ importers: stream-http: 2.8.3 unstated-next: 1.1.0 urlcat: 2.0.4 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0 uuid: 8.3.2 wallet.ts: 1.0.1 web-ext-types: 3.2.1 @@ -576,11 +576,11 @@ importers: z-schema: 5.0.3 zod: 3.14.4 devDependencies: - '@dimensiondev/webextension-shim': 0.0.3-20210823035705-4257e12_typescript@4.7.0-beta + '@dimensiondev/webextension-shim': 0.0.3-20210823035705-4257e12 '@nice-labs/emit-file-webpack-plugin': 1.1.2_webpack@5.72.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_0e66e04607a9ff824bb732e14e5e1479 - '@typescript-eslint/eslint-plugin': 5.20.0_f7f609c132ab9ba239fc3391ae83df6c - '@typescript-eslint/parser': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_bztoarqhvh7yes5xglqu4xqupe + '@typescript-eslint/eslint-plugin': 5.20.0_b6wjpiauegonnizpkx5mo3vwpa + '@typescript-eslint/parser': 5.20.0 binaryen: 106.0.0 copy-webpack-plugin: 10.2.4_webpack@5.72.0 html-webpack-plugin: 5.5.0_webpack@5.72.0 @@ -588,10 +588,10 @@ importers: react-refresh: 0.12.0 resolve-typescript-plugin: 1.2.0_webpack@5.72.0 source-map-loader: 3.0.1_webpack@5.72.0 - swc-loader: 0.2.0_@swc+core@1.2.165+webpack@5.72.0 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d - webpack-cli: 4.9.2_0d7fbf49284cee8179ee97aed7cf05b4 - webpack-dev-server: 4.8.1_webpack-cli@4.9.2+webpack@5.72.0 + swc-loader: 0.2.0_webpack@5.72.0 + webpack: 5.72.0_webpack-cli@4.9.2 + webpack-cli: 4.9.2_bv736sjijtxic6pos6xnptyfwq + webpack-dev-server: 4.8.1_q7qo2wgeiyigo3znjsjh7f36ue webpack-target-webextension: 1.0.3_webpack@5.72.0 packages/mask-sdk: @@ -638,11 +638,11 @@ importers: '@types/use-subscription': 1.0.0 async-call-rpc: 6.0.2 bignumber.js: 9.0.2 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 unstated-next: 1.1.0 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0 devDependencies: - react-i18next: 11.16.7_react-dom@18.0.0+react@18.0.0 + react-i18next: 11.16.7 packages/plugins/CrossChainBridge: specifiers: @@ -660,7 +660,7 @@ importers: '@masknet/shared-base': link:../../shared-base '@masknet/shared-base-ui': link:../../shared-base-ui '@masknet/theme': link:../../theme - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 packages/plugins/CyberConnect: specifiers: @@ -682,7 +682,7 @@ importers: '@masknet/typed-message': link:../../typed-message '@masknet/web3-shared-evm': link:../../web3-shared/evm boring-avatars: 1.6.3 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 packages/plugins/DAO: specifiers: @@ -704,8 +704,8 @@ importers: '@masknet/shared-base': link:../../shared-base bignumber.js: 9.0.2 date-fns: 2.28.0 - iframe-resizer-react: 1.1.0_react-dom@18.0.0+react@18.0.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + iframe-resizer-react: 1.1.0 + react-use: 17.3.2 urlcat: 2.0.4 packages/plugins/Debugger: @@ -733,7 +733,7 @@ importers: '@masknet/web3-shared-evm': link:../../web3-shared/evm bignumber.js: 9.0.2 date-fns: 2.28.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 urlcat: 2.0.4 packages/plugins/FileService: @@ -773,9 +773,9 @@ importers: arweave: 1.10.13 date-fns: 2.28.0 ipfs-http-client: 54.0.2 - react-feather: 2.0.9_react@18.0.0 - react-router-dom: 6.3.0_react-dom@18.0.0+react@18.0.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-feather: 2.0.9 + react-router-dom: 6.3.0 + react-use: 17.3.2 urlcat: 2.0.4 packages/plugins/Flow: @@ -802,7 +802,7 @@ importers: '@masknet/web3-shared-base': link:../../web3-shared/base '@masknet/web3-shared-flow': link:../../web3-shared/flow bignumber.js: 9.0.2 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 packages/plugins/GoPlusSecurity: specifiers: @@ -826,8 +826,8 @@ importers: '@masknet/theme': link:../../theme '@masknet/web3-providers': link:../../web3-providers '@masknet/web3-shared-evm': link:../../web3-shared/evm - react-feather: 2.0.9_react@18.0.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-feather: 2.0.9 + react-use: 17.3.2 urlcat: 2.0.4 packages/plugins/RSS3: @@ -857,7 +857,7 @@ importers: bignumber.js: 9.0.2 classnames: 2.3.1 date-fns: 2.28.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 urlcat: 2.0.4 packages/plugins/Solana: @@ -904,7 +904,7 @@ importers: bn.js: 4.12.0 bs58: 4.0.1 buffer: 6.0.3 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 packages/plugins/Wallet: specifiers: @@ -921,7 +921,7 @@ importers: '@masknet/theme': link:../../theme '@masknet/web3-shared-evm': link:../../web3-shared/evm bignumber.js: 9.0.2 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 web3-core-helpers: 1.7.3 packages/plugins/example: @@ -943,8 +943,8 @@ importers: '@masknet/plugin-infra': link:../../plugin-infra '@masknet/shared': link:../../shared '@masknet/shared-base': link:../../shared-base - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 - use-subscription: 1.6.0_react@18.0.0 + react-use: 17.3.2 + use-subscription: 1.6.0 packages/polyfills: specifiers: @@ -1009,7 +1009,7 @@ importers: '@rollup/plugin-sucrase': 4.0.3_rollup@2.70.2 date-fns: 2.28.0 rollup: 2.70.2 - rollup-plugin-dts: 4.2.1_026db45e8527a54e1375d6b6fce62498 + rollup-plugin-dts: 4.2.1_rollup@2.70.2 packages/public-api: specifiers: {} @@ -1034,7 +1034,7 @@ importers: chalk: 4.1.2 enquirer: 2.3.6 fs-extra: 10.1.0 - gulp-zip: 5.1.0_gulp@4.0.2 + gulp-zip: 5.1.0 proper-lockfile: 4.1.2 rimraf: 3.0.2 yargs: 17.4.1 @@ -1043,7 +1043,7 @@ importers: '@types/gulp': 4.0.9 '@types/lodash': 4.14.182 '@types/proper-lockfile': 4.1.2 - ts-node: 10.7.0_67134532d167564bacdc84129db6eba6 + ts-node: 10.7.0 packages/shared: specifiers: @@ -1077,13 +1077,13 @@ importers: anchorme: 2.1.2 bignumber.js: 9.0.2 classnames: 2.3.1 - iframe-resizer-react: 1.1.0_react-dom@18.0.0+react@18.0.0 + iframe-resizer-react: 1.1.0 lodash-es: 4.17.21 qrcode: 1.5.0 - react-feather: 2.0.9_react@18.0.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-feather: 2.0.9 + react-use: 17.3.2 urlcat: 2.0.4 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0 packages/shared-base: specifiers: @@ -1133,7 +1133,7 @@ importers: tiny-secp256k1: 2.2.1 typeson: 7.0.1 typeson-registry: 3.0.0 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0_react@packages+empty z-schema: 5.0.3 devDependencies: '@types/use-subscription': 1.0.0 @@ -1152,8 +1152,8 @@ importers: '@masknet/shared-base': link:../shared-base '@types/use-subscription': 1.0.0 '@types/uuid': 8.3.4 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 - use-subscription: 1.6.0_react@18.0.0 + react-use: 17.3.2 + use-subscription: 1.6.0 uuid: 8.3.2 packages/storybook-shared: @@ -1165,11 +1165,11 @@ importers: swc-loader: ^0.2.0 webpack: ^5.72.0 devDependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/react': 6.4.22_d278050df1347aa58add7897bb82cf12 + '@storybook/addons': 6.4.22 + '@storybook/react': 6.4.22 '@swc/core': 1.2.165 stream-browserify: 3.0.0 - swc-loader: 0.2.0_@swc+core@1.2.165+webpack@5.72.0 + swc-loader: 0.2.0_mdkbl4nosxya5aeu2koghccwri webpack: 5.72.0_@swc+core@1.2.165 packages/test-serializer: @@ -1206,20 +1206,20 @@ importers: '@types/tinycolor2': 1.4.3 classnames: 2.3.1 fuse.js: 6.5.3 - notistack: 2.0.4_34c6212647451bc2f58a42b7a7c91125 - react-window: 1.8.7_react-dom@18.0.0+react@18.0.0 + notistack: 2.0.4 + react-window: 1.8.7 tinycolor2: 1.4.2 - tss-react: 3.6.2_0381be9ef9d4f3389e973d8e2731d4a2 + tss-react: 3.6.2 unstated-next: 1.1.0 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0 devDependencies: '@babel/core': 7.17.9 - '@storybook/addon-actions': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-essentials': 6.4.22_cd5e0d67351b139ccd79e9a787b5432a - '@storybook/addon-links': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/builder-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/manager-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/react': 6.4.22_ec31d3858f91e1329ce176d1ed57f64f + '@storybook/addon-actions': 6.4.22 + '@storybook/addon-essentials': 6.4.22_jkwtzdvpdr64onyrt7qvyh3euy + '@storybook/addon-links': 6.4.22 + '@storybook/builder-webpack5': 6.4.22 + '@storybook/manager-webpack5': 6.4.22 + '@storybook/react': 6.4.22_hengm5mrivop3evkvr7hyfh5we babel-loader: 8.2.5_@babel+core@7.17.9 packages/typed-message: @@ -1246,7 +1246,7 @@ importers: web3-eth-contract: 1.7.3 dependencies: '@typechain/web3-v1': 3.0.0_typechain@5.1.2 - typechain: 5.1.2_typescript@4.7.0-beta + typechain: 5.1.2 devDependencies: bn.js: 4.12.0 promievent: 0.1.5 @@ -1284,10 +1284,10 @@ importers: date-fns: 2.28.0 graphql-request: 3.5.0 json-stable-stringify: 1.0.1 - lodash-unified: 1.0.2_da03a4540fbd16bbaafbb96724306afd + lodash-unified: 1.0.2 lru-cache: 7.8.1 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 - rss3-next: 0.6.17_typescript@4.7.0-beta + react-use: 17.3.2 + rss3-next: 0.6.17 socket.io-client: 2.4.0 urlcat: 2.0.4 uuid: 8.3.2 @@ -1306,7 +1306,7 @@ importers: dependencies: bignumber.js: 9.0.2 date-fns: 2.28.0 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 reconnecting-websocket: 4.4.0 devDependencies: jest-websocket-mock: 2.3.0 @@ -1349,10 +1349,10 @@ importers: fortmatic: 2.2.1 fuse.js: 6.5.3 punycode: 2.1.1 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 unstated-next: 1.1.0 urlcat: 2.0.4 - use-subscription: 1.6.0_react@18.0.0 + use-subscription: 1.6.0 uuid: 8.3.2 wallet.ts: 1.0.1 web3: 1.7.3 @@ -1374,7 +1374,7 @@ importers: '@masknet/web3-constants': link:../../web3-constants '@masknet/web3-shared-base': link:../base '@onflow/types': 0.0.5 - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 urlcat: 2.0.4 packages/web3-shared/solana: @@ -1386,7 +1386,7 @@ importers: dependencies: '@masknet/web3-constants': link:../../web3-constants '@masknet/web3-shared-base': link:../base - react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + react-use: 17.3.2 urlcat: 2.0.4 packages: @@ -3615,7 +3615,7 @@ packages: '@types/node': 17.0.23 chalk: 4.1.2 cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 1.0.6_f533c3387680131348857b0baefd0f31 + cosmiconfig-typescript-loader: 1.0.6_6uz4godwqajrgsefpmf257ipge lodash: 4.17.21 resolve-from: 5.0.0 typescript: 4.6.3 @@ -4011,7 +4011,7 @@ packages: tslib: 2.3.1 dev: false - /@dimensiondev/holoflows-kit/0.9.0-20210902104757-7c3d0d0_webextension-polyfill@0.9.0: + /@dimensiondev/holoflows-kit/0.9.0-20210902104757-7c3d0d0_5owzivba7saavwcb3imbrcsadu: resolution: {integrity: sha512-Vk22WLOTW20OECTHdLGulGmDsTFguURQYB9Oq8S+eDVrmWHCxKD/N+4OU5uCFrWCkqjl/n7vec3fVWUSunpBeA==, tarball: download/@dimensiondev/holoflows-kit/0.9.0-20210902104757-7c3d0d0/bce56871014284e7863fc97177b316aec94f6dfddf627312e690958400e958e8} peerDependencies: webextension-polyfill: '*' @@ -4084,7 +4084,7 @@ packages: meow: 7.1.1 dev: false - /@dimensiondev/webextension-shim/0.0.3-20210823035705-4257e12_typescript@4.7.0-beta: + /@dimensiondev/webextension-shim/0.0.3-20210823035705-4257e12: resolution: {integrity: sha512-zkpb1xzfyhWu9c5FZc4HHa5aBrUVdQCNGfmnUzNk2kU6AaCtfVeB4i39LLaPVLCP5nKKAVnbWNe88fGYSmcryw==, tarball: download/@dimensiondev/webextension-shim/0.0.3-20210823035705-4257e12/f0cf9f4c48531ee9828e0a0d2842d70212dc0f371b409054026fc17fcd3eef93} hasBin: true peerDependencies: @@ -4093,7 +4093,6 @@ packages: async-call-rpc: 4.2.1 buffer: 6.0.3 systemjs: 6.3.2 - typescript: 4.7.0-beta web-ext-types: 3.2.1 dev: true @@ -4145,7 +4144,7 @@ packages: stylis: 4.0.13 dev: false - /@emotion/core/10.3.1_react@18.0.0: + /@emotion/core/10.3.1: resolution: {integrity: sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==} peerDependencies: react: '>=16.3.0' @@ -4156,7 +4155,6 @@ packages: '@emotion/serialize': 0.11.16 '@emotion/sheet': 0.9.4 '@emotion/utils': 0.11.3 - react: 18.0.0 dev: true /@emotion/css/10.0.27: @@ -4190,7 +4188,7 @@ packages: resolution: {integrity: sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==} dev: false - /@emotion/react/11.9.0_@types+react@18.0.2+react@18.0.0: + /@emotion/react/11.9.0_wu2ym3hmg7l4ose2cw56vw46fu: resolution: {integrity: sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==} peerDependencies: '@babel/core': ^7.0.0 @@ -4255,33 +4253,31 @@ packages: resolution: {integrity: sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==} dev: false - /@emotion/styled-base/10.3.0_614b3f3b148d4a7eace543f4ef60374e: + /@emotion/styled-base/10.3.0_@emotion+core@10.3.1: resolution: {integrity: sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==} peerDependencies: '@emotion/core': ^10.0.28 react: '>=16.3.0' dependencies: '@babel/runtime': 7.17.9 - '@emotion/core': 10.3.1_react@18.0.0 + '@emotion/core': 10.3.1 '@emotion/is-prop-valid': 0.8.8 '@emotion/serialize': 0.11.16 '@emotion/utils': 0.11.3 - react: 18.0.0 dev: true - /@emotion/styled/10.3.0_614b3f3b148d4a7eace543f4ef60374e: + /@emotion/styled/10.3.0_@emotion+core@10.3.1: resolution: {integrity: sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==} peerDependencies: '@emotion/core': ^10.0.27 react: '>=16.3.0' dependencies: - '@emotion/core': 10.3.1_react@18.0.0 - '@emotion/styled-base': 10.3.0_614b3f3b148d4a7eace543f4ef60374e + '@emotion/core': 10.3.1 + '@emotion/styled-base': 10.3.0_@emotion+core@10.3.1 babel-plugin-emotion: 10.2.2 - react: 18.0.0 dev: true - /@emotion/styled/11.8.1_d04d4cdfb6fe6aad6dcad79e21a129f6: + /@emotion/styled/11.8.1_2bguzx5w7zvk23ok26pcdijj6y: resolution: {integrity: sha512-OghEVAYBZMpEquHZwuelXcRjRJQOVayvbmNR0zr174NHdmMgrNkLC6TljKC5h9lZLkN5WGrdUcrKlOJ4phhoTQ==} peerDependencies: '@babel/core': ^7.0.0 @@ -4297,7 +4293,7 @@ packages: '@babel/runtime': 7.17.2 '@emotion/babel-plugin': 11.7.2 '@emotion/is-prop-valid': 1.1.2 - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 + '@emotion/react': 11.9.0_wu2ym3hmg7l4ose2cw56vw46fu '@emotion/serialize': 1.0.3 '@emotion/utils': 1.1.0 '@types/react': 18.0.2 @@ -4382,12 +4378,12 @@ packages: isomorphic-ws: 4.0.1_ws@8.5.0 js-sha3: 0.8.0 ky: 0.25.1 - ky-universal: 0.8.2_9d16fb08bee5537b54f3df10881f880a + ky-universal: 0.8.2_tulpwcf64vjxwvht34iiqh4ibi semver: 7.3.5 tar-js: 0.3.0 utf-8-validate: 5.0.8 web-streams-polyfill: 3.2.0 - ws: 8.5.0_bffff4271b89d628e8333ead80d3d8e8 + ws: 8.5.0_x777ijy3rhlcr2bth2wybu6y5a transitivePeerDependencies: - domexception dev: false @@ -4993,7 +4989,7 @@ packages: peerDependencies: react-hook-form: ^7.0.0 dependencies: - react-hook-form: 7.30.0_react@18.0.0 + react-hook-form: 7.30.0 dev: false /@humanwhocodes/config-array/0.9.5: @@ -5011,7 +5007,7 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@improbable-eng/grpc-web-node-http-transport/0.14.1_@improbable-eng+grpc-web@0.14.1: + /@improbable-eng/grpc-web-node-http-transport/0.14.1_p4qmepzqxnh62ysspkonijiajy: resolution: {integrity: sha512-ZsCTzI1iKUbmQjB5DNZSI5/hvdliuaPpS2h8mVj1QzynL3IFb5NrNnHVHbfcH1wbm26Ka6Z1CrKFGvKLrmbFIg==} peerDependencies: '@improbable-eng/grpc-web': '>=0.13.0' @@ -5097,7 +5093,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 28.0.0-alpha.3 - jest-config: 28.0.0-alpha.8_3becefdc590d7c673b4b4319aa21427a + jest-config: 28.0.0-alpha.8_hpwo7xczbv6goo2limm2uikcpi jest-haste-map: 28.0.0-alpha.8 jest-message-util: 28.0.0-alpha.8 jest-regex-util: 28.0.0-alpha.6 @@ -5383,11 +5379,11 @@ packages: yargs: 17.3.1 dev: true - /@mdx-js/loader/1.6.22_react@18.0.0: + /@mdx-js/loader/1.6.22: resolution: {integrity: sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==} dependencies: '@mdx-js/mdx': 1.6.22 - '@mdx-js/react': 1.6.22_react@18.0.0 + '@mdx-js/react': 1.6.22 loader-utils: 2.0.0 transitivePeerDependencies: - react @@ -5420,12 +5416,10 @@ packages: - supports-color dev: true - /@mdx-js/react/1.6.22_react@18.0.0: + /@mdx-js/react/1.6.22: resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} peerDependencies: react: ^16.13.1 || ^17.0.0 - dependencies: - react: 18.0.0 dev: true /@mdx-js/util/1.6.22: @@ -5585,7 +5579,7 @@ packages: engines: {node: '>= 10'} dev: false - /@mui/base/5.0.0-alpha.77_31fee5138b61bcdeb416e3946f47cd38: + /@mui/base/5.0.0-alpha.77_gh7oke4lmg6n5naw4okg6r6nha: resolution: {integrity: sha512-Zqm3qlczGViD3lJSYo8ZnQLHJ3PwGYftbDfVuh2Rq5OD88F7H6oDILlqknzty59NDkeSVO2qlymYmHOY1nLodg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5609,7 +5603,7 @@ packages: react-is: 17.0.2 dev: false - /@mui/icons-material/5.6.2_32f8b37479716651a818fda850aa5553: + /@mui/icons-material/5.6.2_gl4lg5dzoftfdkay7wufbksvkm: resolution: {integrity: sha512-9QdI7axKuBAyaGz4mtdi7Uy1j73/thqFmEuxpJHxNC7O8ADEK1Da3t2veK2tgmsXsUlAHcAG63gg+GvWWeQNqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5621,12 +5615,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@mui/material': 5.6.2_1376d0c029fe63cac75d7e36fe4212f4 + '@mui/material': 5.6.2_cn3nbqbj7zr4vr25py3p4qqs6q '@types/react': 18.0.2 react: 18.0.0 dev: false - /@mui/lab/5.0.0-alpha.78_84892e2e0410c34486d9be5ce2fc3fe3: + /@mui/lab/5.0.0-alpha.78_qses4lqecdbujbwzxzoof7b74m: resolution: {integrity: sha512-pvY5TfypHs5eD9G8g5IqOju3dhOaOvdkXf0TotNTkhPTjTQDzynfPEXmpwfdA8Tza4FTohYoZagV6yOAhSTIbw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5651,25 +5645,25 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@mui/base': 5.0.0-alpha.77_31fee5138b61bcdeb416e3946f47cd38 - '@mui/material': 5.6.2_1376d0c029fe63cac75d7e36fe4212f4 - '@mui/system': 5.6.2_de97b6be3b01c831652fad9cf8222fb8 + '@mui/base': 5.0.0-alpha.77_gh7oke4lmg6n5naw4okg6r6nha + '@mui/material': 5.6.2_cn3nbqbj7zr4vr25py3p4qqs6q + '@mui/system': 5.6.2_32l3npr3ahedczjpvwopqirpxa '@mui/utils': 5.6.1_react@18.0.0 - '@mui/x-date-pickers': 5.0.0-alpha.0_d79be74d1141b1f4572a79fd57afdc07 + '@mui/x-date-pickers': 5.0.0-alpha.0_26n6otirigy7ivzkph6vpl64a4 '@types/react': 18.0.2 clsx: 1.1.1 prop-types: 15.8.1 react: 18.0.0 react-dom: 18.0.0_react@18.0.0 react-is: 17.0.2 - react-transition-group: 4.4.2_react-dom@18.0.0+react@18.0.0 + react-transition-group: 4.4.2_zpnidt7m3osuk7shl3s4oenomq rifm: 0.12.1_react@18.0.0 transitivePeerDependencies: - '@emotion/react' - '@emotion/styled' dev: false - /@mui/material/5.6.2_1376d0c029fe63cac75d7e36fe4212f4: + /@mui/material/5.6.2_cn3nbqbj7zr4vr25py3p4qqs6q: resolution: {integrity: sha512-bwMvroBrMgUTwUh/BcjhtcJwEw9uH4chV3+ZSj6RckOJtMj8U4yEeD7S4NgHE8Ioj5eObKFzHpih/cTD1sDRpg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5687,10 +5681,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 - '@emotion/styled': 11.8.1_d04d4cdfb6fe6aad6dcad79e21a129f6 - '@mui/base': 5.0.0-alpha.77_31fee5138b61bcdeb416e3946f47cd38 - '@mui/system': 5.6.2_de97b6be3b01c831652fad9cf8222fb8 + '@emotion/react': 11.9.0_wu2ym3hmg7l4ose2cw56vw46fu + '@emotion/styled': 11.8.1_2bguzx5w7zvk23ok26pcdijj6y + '@mui/base': 5.0.0-alpha.77_gh7oke4lmg6n5naw4okg6r6nha + '@mui/system': 5.6.2_32l3npr3ahedczjpvwopqirpxa '@mui/types': 7.1.3_@types+react@18.0.2 '@mui/utils': 5.6.1_react@18.0.0 '@types/react': 18.0.2 @@ -5702,10 +5696,10 @@ packages: react: 18.0.0 react-dom: 18.0.0_react@18.0.0 react-is: 17.0.2 - react-transition-group: 4.4.2_react-dom@18.0.0+react@18.0.0 + react-transition-group: 4.4.2_zpnidt7m3osuk7shl3s4oenomq dev: false - /@mui/private-theming/5.6.2_@types+react@18.0.2+react@18.0.0: + /@mui/private-theming/5.6.2_wu2ym3hmg7l4ose2cw56vw46fu: resolution: {integrity: sha512-IbrSfFXfiZdyhRMC2bgGTFtb16RBQ5mccmjeh3MtAERWuepiCK7gkW5D9WhEsfTu6iez+TEjeUKSgmMHlsM2mg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5722,7 +5716,7 @@ packages: react: 18.0.0 dev: false - /@mui/styled-engine/5.6.1_840a430ee8e73823706c6e9dc692d93a: + /@mui/styled-engine/5.6.1_qqfegdxi444cg4dmn2o4newzhi: resolution: {integrity: sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5737,13 +5731,13 @@ packages: dependencies: '@babel/runtime': 7.17.9 '@emotion/cache': 11.7.1 - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 - '@emotion/styled': 11.8.1_d04d4cdfb6fe6aad6dcad79e21a129f6 + '@emotion/react': 11.9.0_wu2ym3hmg7l4ose2cw56vw46fu + '@emotion/styled': 11.8.1_2bguzx5w7zvk23ok26pcdijj6y prop-types: 15.8.1 react: 18.0.0 dev: false - /@mui/system/5.6.2_de97b6be3b01c831652fad9cf8222fb8: + /@mui/system/5.6.2_32l3npr3ahedczjpvwopqirpxa: resolution: {integrity: sha512-Wg9TRbvavSwEYk6UdpnoDx+CqJfaAN7AzlmwEx7DtGmx0snFVBST8FVb1Ev1vXosxEnq6/fe7ZDRobFVewvEPQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5760,10 +5754,10 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 - '@emotion/styled': 11.8.1_d04d4cdfb6fe6aad6dcad79e21a129f6 - '@mui/private-theming': 5.6.2_@types+react@18.0.2+react@18.0.0 - '@mui/styled-engine': 5.6.1_840a430ee8e73823706c6e9dc692d93a + '@emotion/react': 11.9.0_wu2ym3hmg7l4ose2cw56vw46fu + '@emotion/styled': 11.8.1_2bguzx5w7zvk23ok26pcdijj6y + '@mui/private-theming': 5.6.2_wu2ym3hmg7l4ose2cw56vw46fu + '@mui/styled-engine': 5.6.1_qqfegdxi444cg4dmn2o4newzhi '@mui/types': 7.1.3_@types+react@18.0.2 '@mui/utils': 5.6.1_react@18.0.0 '@types/react': 18.0.2 @@ -5798,7 +5792,7 @@ packages: react-is: 17.0.2 dev: false - /@mui/x-date-pickers/5.0.0-alpha.0_d79be74d1141b1f4572a79fd57afdc07: + /@mui/x-date-pickers/5.0.0-alpha.0_26n6otirigy7ivzkph6vpl64a4: resolution: {integrity: sha512-JTzTaNSWbxNi8KDUJjHCH6im0YlIEv88gPoKhGm7s6xCGT1q6FtMp/oQ40nhfwrJ73nkM5G1JXRIzI/yfsHXQQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5823,13 +5817,13 @@ packages: '@date-io/dayjs': 2.13.1 '@date-io/luxon': 2.13.1 '@date-io/moment': 2.13.1 - '@mui/material': 5.6.2_1376d0c029fe63cac75d7e36fe4212f4 - '@mui/system': 5.6.2_de97b6be3b01c831652fad9cf8222fb8 + '@mui/material': 5.6.2_cn3nbqbj7zr4vr25py3p4qqs6q + '@mui/system': 5.6.2_32l3npr3ahedczjpvwopqirpxa '@mui/utils': 5.6.1_react@18.0.0 clsx: 1.1.1 prop-types: 15.8.1 react: 18.0.0 - react-transition-group: 4.4.2_react-dom@18.0.0+react@18.0.0 + react-transition-group: 4.4.2_zpnidt7m3osuk7shl3s4oenomq rifm: 0.12.1_react@18.0.0 transitivePeerDependencies: - react-dom @@ -5845,7 +5839,7 @@ packages: peerDependencies: webpack: '>= 5' dependencies: - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 dev: true /@nice-labs/git-rev/3.5.0: @@ -5995,7 +5989,7 @@ packages: randombytes: 2.1.0 dev: false - /@pmmmwh/react-refresh-webpack-plugin/0.5.5_06cd85ae30adde416cafc06517ba554d: + /@pmmmwh/react-refresh-webpack-plugin/0.5.5_a3gyllrqvxpec3fpybsrposvju: resolution: {integrity: sha512-RbG7h6TuP6nFFYKJwbcToA1rjC1FyPg25NR2noAZ0vKI+la01KTSRPkuVPE+U88jXv7javx2JHglUcL1MHcshQ==} engines: {node: '>= 10.13'} peerDependencies: @@ -6034,7 +6028,7 @@ packages: webpack: 4.46.0 dev: true - /@pmmmwh/react-refresh-webpack-plugin/0.5.5_0e66e04607a9ff824bb732e14e5e1479: + /@pmmmwh/react-refresh-webpack-plugin/0.5.5_bztoarqhvh7yes5xglqu4xqupe: resolution: {integrity: sha512-RbG7h6TuP6nFFYKJwbcToA1rjC1FyPg25NR2noAZ0vKI+la01KTSRPkuVPE+U88jXv7javx2JHglUcL1MHcshQ==} engines: {node: '>= 10.13'} peerDependencies: @@ -6070,8 +6064,8 @@ packages: react-refresh: 0.12.0 schema-utils: 3.1.1 source-map: 0.7.3 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d - webpack-dev-server: 4.8.1_webpack-cli@4.9.2+webpack@5.72.0 + webpack: 5.72.0_webpack-cli@4.9.2 + webpack-dev-server: 4.8.1_q7qo2wgeiyigo3znjsjh7f36ue dev: true /@popperjs/core/2.11.5: @@ -6082,7 +6076,7 @@ packages: dependencies: '@blocto/protobuf': 0.1.10 '@improbable-eng/grpc-web': 0.14.1 - '@improbable-eng/grpc-web-node-http-transport': 0.14.1_@improbable-eng+grpc-web@0.14.1 + '@improbable-eng/grpc-web-node-http-transport': 0.14.1_p4qmepzqxnh62ysspkonijiajy '@onflow/rlp': 0.0.3 '@onflow/util-actor': 0.0.2 '@onflow/util-address': 0.0.0 @@ -6555,7 +6549,7 @@ packages: '@stablelib/xchacha20': 1.0.1 dev: false - /@storybook/addon-actions/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/addon-actions/6.4.22: resolution: {integrity: sha512-t2w3iLXFul+R/1ekYxIEzUOZZmvEa7EzUAVAuCHP4i6x0jBnTTZ7sAIUVRaxVREPguH5IqI/2OklYhKanty2Yw==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6566,21 +6560,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 + '@storybook/components': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/theming': 6.4.22 core-js: 3.22.2 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 polished: 4.2.2 prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-inspector: 5.1.1_react@18.0.0 + react-inspector: 5.1.1 regenerator-runtime: 0.13.9 telejson: 5.3.3 ts-dedent: 2.2.0 @@ -6590,7 +6582,7 @@ packages: - '@types/react' dev: true - /@storybook/addon-backgrounds/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/addon-backgrounds/6.4.22: resolution: {integrity: sha512-xQIV1SsjjRXP7P5tUoGKv+pul1EY8lsV7iBXQb5eGbp4AffBj3qoYBSZbX4uiazl21o0MQiQoeIhhaPVaFIIGg==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6601,18 +6593,16 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/components': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/theming': 6.4.22 core-js: 3.22.2 global: 4.4.0 memoizerific: 1.11.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -6620,7 +6610,7 @@ packages: - '@types/react' dev: true - /@storybook/addon-controls/6.4.22_d278050df1347aa58add7897bb82cf12: + /@storybook/addon-controls/6.4.22: resolution: {integrity: sha512-f/M/W+7UTEUnr/L6scBMvksq+ZA8GTfh3bomE5FtWyOyaFppq9k8daKAvdYNlzXAOrUUsoZVJDgpb20Z2VBiSQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6631,19 +6621,17 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/components': 6.4.22 + '@storybook/core-common': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.22 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 + '@storybook/theming': 6.4.22 core-js: 3.22.2 lodash: 4.17.21 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -6655,7 +6643,7 @@ packages: - webpack-command dev: true - /@storybook/addon-docs/6.4.22_1a045baa1ec103663eb08d0b8535b2eb: + /@storybook/addon-docs/6.4.22_dclt4naqw4kpwkahfqsmmzslbe: resolution: {integrity: sha512-9j+i+W+BGHJuRe4jUrqk6ubCzP4fc1xgFS2o8pakRiZgPn5kUQPdkticmsyh1XeEJifwhqjKJvkEDrcsleytDA==} peerDependencies: '@storybook/angular': 6.4.22 @@ -6708,25 +6696,25 @@ packages: '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.9 '@babel/preset-env': 7.16.11_@babel+core@7.17.9 '@jest/transform': 26.6.2 - '@mdx-js/loader': 1.6.22_react@18.0.0 + '@mdx-js/loader': 1.6.22 '@mdx-js/mdx': 1.6.22 - '@mdx-js/react': 1.6.22_react@18.0.0 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/builder-webpack4': 6.4.22_d278050df1347aa58add7897bb82cf12 + '@mdx-js/react': 1.6.22 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 + '@storybook/builder-webpack4': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/core': 6.4.22_00e9cc236bf0f4f97ac997d7df83b995 + '@storybook/components': 6.4.22 + '@storybook/core': 6.4.22_7tqogqlp6fsyu3hnbnt5jaietq '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/postinstall': 6.4.22 - '@storybook/preview-web': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/react': 6.4.22_ec31d3858f91e1329ce176d1ed57f64f - '@storybook/source-loader': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/preview-web': 6.4.22 + '@storybook/react': 6.4.22_hengm5mrivop3evkvr7hyfh5we + '@storybook/source-loader': 6.4.22 + '@storybook/store': 6.4.22 + '@storybook/theming': 6.4.22 acorn: 7.4.1 acorn-jsx: 5.3.2_acorn@7.4.1 acorn-walk: 7.2.0 @@ -6743,9 +6731,7 @@ packages: p-limit: 3.1.0 prettier: 2.3.0 prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-element-to-jsx-string: 14.3.4_react-dom@18.0.0+react@18.0.0 + react-element-to-jsx-string: 14.3.4 regenerator-runtime: 0.13.9 remark-external-links: 8.0.0 remark-slug: 6.1.0 @@ -6766,7 +6752,7 @@ packages: - webpack-command dev: true - /@storybook/addon-essentials/6.4.22_cd5e0d67351b139ccd79e9a787b5432a: + /@storybook/addon-essentials/6.4.22_jkwtzdvpdr64onyrt7qvyh3euy: resolution: {integrity: sha512-GTv291fqvWq2wzm7MruBvCGuWaCUiuf7Ca3kzbQ/WqWtve7Y/1PDsqRNQLGZrQxkXU0clXCqY1XtkTrtA3WGFQ==} peerDependencies: '@babel/core': ^7.9.6 @@ -6792,21 +6778,19 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@storybook/addon-actions': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-backgrounds': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-controls': 6.4.22_d278050df1347aa58add7897bb82cf12 - '@storybook/addon-docs': 6.4.22_1a045baa1ec103663eb08d0b8535b2eb - '@storybook/addon-measure': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-outline': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-toolbars': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addon-viewport': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addon-actions': 6.4.22 + '@storybook/addon-backgrounds': 6.4.22 + '@storybook/addon-controls': 6.4.22 + '@storybook/addon-docs': 6.4.22_dclt4naqw4kpwkahfqsmmzslbe + '@storybook/addon-measure': 6.4.22 + '@storybook/addon-outline': 6.4.22 + '@storybook/addon-toolbars': 6.4.22 + '@storybook/addon-viewport': 6.4.22 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/node-logger': 6.4.22 babel-loader: 8.2.5_@babel+core@7.17.9 core-js: 3.22.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -6832,7 +6816,7 @@ packages: - webpack-command dev: true - /@storybook/addon-links/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/addon-links/6.4.22: resolution: {integrity: sha512-OSOyDnTXnmcplJHlXTYUTMkrfpLqxtHp2R69IXfAyI1e8WNDb79mXflrEXDA/RSNEliLkqYwCyYby7gDMGds5Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6843,23 +6827,21 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/router': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/router': 6.4.22 '@types/qs': 6.9.7 core-js: 3.22.2 global: 4.4.0 prop-types: 15.8.1 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 dev: true - /@storybook/addon-measure/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/addon-measure/6.4.22: resolution: {integrity: sha512-CjDXoCNIXxNfXfgyJXPc0McjCcwN1scVNtHa9Ckr+zMjiQ8pPHY7wDZCQsG69KTqcWHiVfxKilI82456bcHYhQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6870,21 +6852,19 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/components': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.22.2 global: 4.4.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/addon-outline/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/addon-outline/6.4.22: resolution: {integrity: sha512-VIMEzvBBRbNnupGU7NV0ahpFFb6nKVRGYWGREjtABdFn2fdKr1YicOHFe/3U7hRGjb5gd+VazSvyUvhaKX9T7Q==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6895,23 +6875,21 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/components': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.22.2 global: 4.4.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/addon-toolbars/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/addon-toolbars/6.4.22: resolution: {integrity: sha512-FFyj6XDYpBBjcUu6Eyng7R805LUbVclEfydZjNiByAoDVyCde9Hb4sngFxn/T4fKAfBz/32HKVXd5iq4AHYtLg==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6922,19 +6900,17 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 + '@storybook/components': 6.4.22 + '@storybook/theming': 6.4.22 core-js: 3.22.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/addon-viewport/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/addon-viewport/6.4.22: resolution: {integrity: sha512-6jk0z49LemeTblez5u2bYXYr6U+xIdLbywe3G283+PZCBbEDE6eNYy2d2HDL+LbCLbezJBLYPHPalElphjJIcw==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6945,45 +6921,41 @@ packages: react-dom: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/components': 6.4.22 '@storybook/core-events': 6.4.22 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/theming': 6.4.22 core-js: 3.22.2 global: 4.4.0 memoizerific: 1.11.3 prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/addons/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/addons/6.4.22: resolution: {integrity: sha512-P/R+Jsxh7pawKLYo8MtE3QU/ilRFKbtCewV/T1o5U/gm8v7hKQdFz3YdRMAra4QuCY8bQIp7MKd2HrB5aH5a1A==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/api': 6.4.22 '@storybook/channels': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/router': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/router': 6.4.22 + '@storybook/theming': 6.4.22 '@types/webpack-env': 1.16.4 core-js: 3.22.2 global: 4.4.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 dev: true - /@storybook/api/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/api/6.4.22: resolution: {integrity: sha512-lAVI3o2hKupYHXFTt+1nqFct942up5dHH6YD7SZZJGyW21dwKC3HK1IzCsTawq3fZAKkgWFgmOO649hKk60yKg==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -6993,16 +6965,14 @@ packages: '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/router': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/router': 6.4.22 '@storybook/semver': 7.3.2 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/theming': 6.4.22 core-js: 3.22.2 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 store2: 2.13.2 telejson: 5.3.3 @@ -7010,7 +6980,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/builder-webpack4/6.4.22_d278050df1347aa58add7897bb82cf12: + /@storybook/builder-webpack4/6.4.22: resolution: {integrity: sha512-A+GgGtKGnBneRFSFkDarUIgUTI8pYFdLmUVKEAGdh2hL+vLXAz9A46sEY7C8LQ85XWa8TKy3OTDxqR4+4iWj3A==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7041,26 +7011,26 @@ packages: '@babel/preset-env': 7.16.11_@babel+core@7.17.9 '@babel/preset-react': 7.16.7_@babel+core@7.17.9 '@babel/preset-typescript': 7.16.7_@babel+core@7.17.9 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/channels': 6.4.22 - '@storybook/client-api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/client-api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/components': 6.4.22 + '@storybook/core-common': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/node-logger': 6.4.22 - '@storybook/preview-web': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/router': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/preview-web': 6.4.22 + '@storybook/router': 6.4.22 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/ui': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/store': 6.4.22 + '@storybook/theming': 6.4.22 + '@storybook/ui': 6.4.22 '@types/node': 17.0.26 '@types/webpack': 4.41.32 autoprefixer: 9.8.8 - babel-loader: 8.2.5_598a497cebab8e15ee8f9e5632178e63 + babel-loader: 8.2.5_lgfes7hlvohbl3uptzldef4omm babel-plugin-macros: 2.8.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.9 case-sensitive-paths-webpack-plugin: 2.4.0 @@ -7073,19 +7043,16 @@ packages: glob-promise: 3.4.0_glob@7.2.0 global: 4.4.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 - pnp-webpack-plugin: 1.6.4_typescript@4.7.0-beta + pnp-webpack-plugin: 1.6.4 postcss: 7.0.39 postcss-flexbugs-fixes: 4.2.1 - postcss-loader: 4.3.0_postcss@7.0.39+webpack@4.46.0 + postcss-loader: 4.3.0_gzaxsinx64nntyd3vmdqwl7coe raw-loader: 4.0.2_webpack@4.46.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 stable: 0.1.8 style-loader: 1.3.0_webpack@4.46.0 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 4.7.0-beta - url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 + url-loader: 4.1.1_lit45vopotvaqup7lrvlnvtxwy util-deprecate: 1.0.2 webpack: 4.46.0 webpack-dev-middleware: 3.7.3_webpack@4.46.0 @@ -7101,7 +7068,7 @@ packages: - webpack-command dev: true - /@storybook/builder-webpack5/6.4.22_579661f7ef1bb6ee25f7681121d08161: + /@storybook/builder-webpack5/6.4.22: resolution: {integrity: sha512-vvQ0HgkIIVz+cmaCXIRor0UFZbGZqh4aV0ISSof60BjdW5ld+R+XCr/bdTU6Zg8b2fL9CXh7/LE6fImnIMpRIA==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7131,43 +7098,40 @@ packages: '@babel/preset-env': 7.16.11_@babel+core@7.17.9 '@babel/preset-react': 7.16.7_@babel+core@7.17.9 '@babel/preset-typescript': 7.16.7_@babel+core@7.17.9 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/channels': 6.4.22 - '@storybook/client-api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/client-api': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/components': 6.4.22 + '@storybook/core-common': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/node-logger': 6.4.22 - '@storybook/preview-web': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/router': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/preview-web': 6.4.22 + '@storybook/router': 6.4.22 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 + '@storybook/theming': 6.4.22 '@types/node': 17.0.26 - babel-loader: 8.2.5_acba72ea4bf9d339cdfcd8f55cdb7006 + babel-loader: 8.2.5_vs5hf2sl7hjtttp43d2vzw3qay babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.9 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.22.2 css-loader: 5.2.7_webpack@5.72.0 - fork-ts-checker-webpack-plugin: 6.5.1_6744e73b405a0376cb80b869ea4846cf + fork-ts-checker-webpack-plugin: 6.5.1_webpack@5.72.0 glob: 7.2.0 glob-promise: 3.4.0_glob@7.2.0 html-webpack-plugin: 5.5.0_webpack@5.72.0 path-browserify: 1.0.1 process: 0.11.10 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 stable: 0.1.8 style-loader: 2.0.0_webpack@5.72.0 - terser-webpack-plugin: 5.3.1_@swc+core@1.2.165+webpack@5.72.0 + terser-webpack-plugin: 5.3.1_webpack@5.72.0 ts-dedent: 2.2.0 - typescript: 4.7.0-beta util-deprecate: 1.0.2 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 webpack-dev-middleware: 4.3.0_webpack@5.72.0 webpack-hot-middleware: 2.25.1 webpack-virtual-modules: 0.4.3 @@ -7214,19 +7178,19 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/client-api/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/client-api/6.4.22: resolution: {integrity: sha512-sO6HJNtrrdit7dNXQcZMdlmmZG1k6TswH3gAyP/DoYajycrTwSJ6ovkarzkO+0QcJ+etgra4TEdTIXiGHBMe/A==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/channels': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 '@types/qs': 6.9.7 '@types/webpack-env': 1.16.4 core-js: 3.22.2 @@ -7235,8 +7199,6 @@ packages: lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 store2: 2.13.2 synchronous-promise: 2.0.15 @@ -7251,7 +7213,7 @@ packages: global: 4.4.0 dev: true - /@storybook/components/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/components/6.4.22: resolution: {integrity: sha512-dCbXIJF9orMvH72VtAfCQsYbe57OP7fAADtR6YTwfCw9Sm1jFuZr8JbblQ1HcrXEoJG21nOyad3Hm5EYVb/sBw==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7260,7 +7222,7 @@ packages: '@popperjs/core': 2.11.5 '@storybook/client-logger': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/theming': 6.4.22 '@types/color-convert': 2.0.0 '@types/overlayscrollbars': 1.12.1 '@types/react-syntax-highlighter': 11.0.5 @@ -7269,17 +7231,15 @@ packages: fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 - markdown-to-jsx: 7.1.7_react@18.0.0 + markdown-to-jsx: 7.1.7 memoizerific: 1.11.3 overlayscrollbars: 1.13.1 polished: 4.2.2 prop-types: 15.8.1 - react: 18.0.0 - react-colorful: 5.5.1_react-dom@18.0.0+react@18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-popper-tooltip: 3.1.1_react-dom@18.0.0+react@18.0.0 - react-syntax-highlighter: 13.5.3_react@18.0.0 - react-textarea-autosize: 8.3.3_@types+react@18.0.2+react@18.0.0 + react-colorful: 5.5.1 + react-popper-tooltip: 3.1.1 + react-syntax-highlighter: 13.5.3 + react-textarea-autosize: 8.3.3 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -7287,7 +7247,7 @@ packages: - '@types/react' dev: true - /@storybook/core-client/6.4.22_0ac8a84fd488b5cdea5a942899f0b334: + /@storybook/core-client/6.4.22: resolution: {integrity: sha512-uHg4yfCBeM6eASSVxStWRVTZrAnb4FT6X6v/xDqr4uXCpCttZLlBzrSDwPBLNNLtCa7ntRicHM8eGKIOD5lMYQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7298,35 +7258,31 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/channel-websocket': 6.4.22 - '@storybook/client-api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/client-api': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/preview-web': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/ui': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/preview-web': 6.4.22 + '@storybook/store': 6.4.22 + '@storybook/ui': 6.4.22 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.22.2 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.7.0-beta unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.4.22_28aeb7e933b1113aa8f260c24922fc28: + /@storybook/core-client/6.4.22_webpack@4.46.0: resolution: {integrity: sha512-uHg4yfCBeM6eASSVxStWRVTZrAnb4FT6X6v/xDqr4uXCpCttZLlBzrSDwPBLNNLtCa7ntRicHM8eGKIOD5lMYQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7337,35 +7293,32 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/channel-websocket': 6.4.22 - '@storybook/client-api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/client-api': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/preview-web': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/ui': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/preview-web': 6.4.22 + '@storybook/store': 6.4.22 + '@storybook/ui': 6.4.22 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.22.2 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.7.0-beta unfetch: 4.2.0 util-deprecate: 1.0.2 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 4.46.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-client/6.4.22_ccf4397c41fc80734c9a43d281e5b69c: + /@storybook/core-client/6.4.22_webpack@5.72.0: resolution: {integrity: sha512-uHg4yfCBeM6eASSVxStWRVTZrAnb4FT6X6v/xDqr4uXCpCttZLlBzrSDwPBLNNLtCa7ntRicHM8eGKIOD5lMYQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7376,34 +7329,32 @@ packages: typescript: optional: true dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/channel-websocket': 6.4.22 - '@storybook/client-api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/client-api': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/preview-web': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/ui': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/preview-web': 6.4.22 + '@storybook/store': 6.4.22 + '@storybook/ui': 6.4.22 airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.22.2 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.7.0-beta unfetch: 4.2.0 util-deprecate: 1.0.2 + webpack: 5.72.0 transitivePeerDependencies: - '@types/react' dev: true - /@storybook/core-common/6.4.22_790980de2057cf207db9c1f3a7420d7b: + /@storybook/core-common/6.4.22: resolution: {integrity: sha512-PD3N/FJXPNRHeQS2zdgzYFtqPLdi3MLwAicbnw+U3SokcsspfsAuyYHZOYZgwO8IAEKy6iCc7TpBdiSJZ/vAKQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7438,7 +7389,7 @@ packages: '@storybook/semver': 7.3.2 '@types/node': 17.0.26 '@types/pretty-hrtime': 1.0.1 - babel-loader: 8.2.5_598a497cebab8e15ee8f9e5632178e63 + babel-loader: 8.2.5_lgfes7hlvohbl3uptzldef4omm babel-plugin-macros: 3.1.0 babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.9 chalk: 4.1.2 @@ -7446,7 +7397,7 @@ packages: express: 4.17.3 file-system-cache: 1.0.5 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.1_63ce4c92018c931e114f7f7e8d93682b + fork-ts-checker-webpack-plugin: 6.5.1_webpack@4.46.0 fs-extra: 9.1.0 glob: 7.2.0 handlebars: 4.7.7 @@ -7456,13 +7407,10 @@ packages: picomatch: 2.3.1 pkg-dir: 5.0.0 pretty-hrtime: 1.0.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 resolve-from: 5.0.0 slash: 3.0.0 telejson: 5.3.3 ts-dedent: 2.2.0 - typescript: 4.7.0-beta util-deprecate: 1.0.2 webpack: 4.46.0 transitivePeerDependencies: @@ -7479,7 +7427,7 @@ packages: core-js: 3.22.2 dev: true - /@storybook/core-server/6.4.22_00e9cc236bf0f4f97ac997d7df83b995: + /@storybook/core-server/6.4.22: resolution: {integrity: sha512-wFh3e2fa0un1d4+BJP+nd3FVWUO7uHTqv3OGBfOmzQMKp4NU1zaBNdSQG7Hz6mw0fYPBPZgBjPfsJRwIYLLZyw==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -7496,18 +7444,16 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.4.22_d278050df1347aa58add7897bb82cf12 - '@storybook/builder-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/core-client': 6.4.22_0ac8a84fd488b5cdea5a942899f0b334 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/builder-webpack4': 6.4.22 + '@storybook/core-client': 6.4.22_webpack@4.46.0 + '@storybook/core-common': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 - '@storybook/manager-webpack4': 6.4.22_d278050df1347aa58add7897bb82cf12 - '@storybook/manager-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 + '@storybook/manager-webpack4': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 '@types/node': 17.0.26 '@types/node-fetch': 2.6.1 '@types/pretty-hrtime': 1.0.1 @@ -7530,14 +7476,11 @@ packages: node-fetch: 2.6.7 pretty-hrtime: 1.0.3 prompts: 2.4.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 serve-favicon: 2.5.0 slash: 3.0.0 telejson: 5.3.3 ts-dedent: 2.2.0 - typescript: 4.7.0-beta util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 @@ -7554,7 +7497,7 @@ packages: - webpack-command dev: true - /@storybook/core-server/6.4.22_d278050df1347aa58add7897bb82cf12: + /@storybook/core-server/6.4.22_7tqogqlp6fsyu3hnbnt5jaietq: resolution: {integrity: sha512-wFh3e2fa0un1d4+BJP+nd3FVWUO7uHTqv3OGBfOmzQMKp4NU1zaBNdSQG7Hz6mw0fYPBPZgBjPfsJRwIYLLZyw==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -7571,16 +7514,18 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.4.22_d278050df1347aa58add7897bb82cf12 - '@storybook/core-client': 6.4.22_0ac8a84fd488b5cdea5a942899f0b334 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/builder-webpack4': 6.4.22 + '@storybook/builder-webpack5': 6.4.22 + '@storybook/core-client': 6.4.22_webpack@4.46.0 + '@storybook/core-common': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 - '@storybook/manager-webpack4': 6.4.22_d278050df1347aa58add7897bb82cf12 + '@storybook/manager-webpack4': 6.4.22 + '@storybook/manager-webpack5': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 '@types/node': 17.0.26 '@types/node-fetch': 2.6.1 '@types/pretty-hrtime': 1.0.1 @@ -7603,14 +7548,11 @@ packages: node-fetch: 2.6.7 pretty-hrtime: 1.0.3 prompts: 2.4.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 serve-favicon: 2.5.0 slash: 3.0.0 telejson: 5.3.3 ts-dedent: 2.2.0 - typescript: 4.7.0-beta util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 @@ -7627,7 +7569,7 @@ packages: - webpack-command dev: true - /@storybook/core/6.4.22_00e9cc236bf0f4f97ac997d7df83b995: + /@storybook/core/6.4.22_3fbhyijvrchqengy7suoplhr3y: resolution: {integrity: sha512-KZYJt7GM5NgKFXbPRZZZPEONZ5u/tE/cRbMdkn/zWN3He8+VP+65/tz8hbriI/6m91AWVWkBKrODSkeq59NgRA==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -7641,12 +7583,10 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/core-client': 6.4.22_ccf4397c41fc80734c9a43d281e5b69c - '@storybook/core-server': 6.4.22_00e9cc236bf0f4f97ac997d7df83b995 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - typescript: 4.7.0-beta + '@storybook/builder-webpack5': 6.4.22 + '@storybook/core-client': 6.4.22_webpack@4.46.0 + '@storybook/core-server': 6.4.22_7tqogqlp6fsyu3hnbnt5jaietq + webpack: 4.46.0 transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' @@ -7660,7 +7600,7 @@ packages: - webpack-command dev: true - /@storybook/core/6.4.22_0225a0111cb1f4be290566cc563ae446: + /@storybook/core/6.4.22_7tqogqlp6fsyu3hnbnt5jaietq: resolution: {integrity: sha512-KZYJt7GM5NgKFXbPRZZZPEONZ5u/tE/cRbMdkn/zWN3He8+VP+65/tz8hbriI/6m91AWVWkBKrODSkeq59NgRA==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -7674,12 +7614,9 @@ packages: typescript: optional: true dependencies: - '@storybook/core-client': 6.4.22_0ac8a84fd488b5cdea5a942899f0b334 - '@storybook/core-server': 6.4.22_d278050df1347aa58add7897bb82cf12 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - typescript: 4.7.0-beta - webpack: 4.46.0 + '@storybook/builder-webpack5': 6.4.22 + '@storybook/core-client': 6.4.22 + '@storybook/core-server': 6.4.22_7tqogqlp6fsyu3hnbnt5jaietq transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' @@ -7693,7 +7630,7 @@ packages: - webpack-command dev: true - /@storybook/core/6.4.22_d20759acd072fe363dbe65e256cea710: + /@storybook/core/6.4.22_webpack@4.46.0: resolution: {integrity: sha512-KZYJt7GM5NgKFXbPRZZZPEONZ5u/tE/cRbMdkn/zWN3He8+VP+65/tz8hbriI/6m91AWVWkBKrODSkeq59NgRA==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -7707,12 +7644,8 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack5': 6.4.22_579661f7ef1bb6ee25f7681121d08161 - '@storybook/core-client': 6.4.22_0ac8a84fd488b5cdea5a942899f0b334 - '@storybook/core-server': 6.4.22_00e9cc236bf0f4f97ac997d7df83b995 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - typescript: 4.7.0-beta + '@storybook/core-client': 6.4.22_webpack@4.46.0 + '@storybook/core-server': 6.4.22 webpack: 4.46.0 transitivePeerDependencies: - '@storybook/manager-webpack5' @@ -7757,7 +7690,7 @@ packages: lodash: 4.17.21 dev: true - /@storybook/manager-webpack4/6.4.22_d278050df1347aa58add7897bb82cf12: + /@storybook/manager-webpack4/6.4.22: resolution: {integrity: sha512-nzhDMJYg0vXdcG0ctwE6YFZBX71+5NYaTGkxg3xT7gbgnP1YFXn9gVODvgq3tPb3gcRapjyOIxUa20rV+r8edA==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7770,15 +7703,15 @@ packages: '@babel/core': 7.17.9 '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.9 '@babel/preset-react': 7.16.7_@babel+core@7.17.9 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/core-client': 6.4.22_0ac8a84fd488b5cdea5a942899f0b334 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/addons': 6.4.22 + '@storybook/core-client': 6.4.22_webpack@4.46.0 + '@storybook/core-common': 6.4.22 '@storybook/node-logger': 6.4.22 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/ui': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/theming': 6.4.22 + '@storybook/ui': 6.4.22 '@types/node': 17.0.26 '@types/webpack': 4.41.32 - babel-loader: 8.2.5_598a497cebab8e15ee8f9e5632178e63 + babel-loader: 8.2.5_lgfes7hlvohbl3uptzldef4omm case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.22.2 @@ -7790,9 +7723,7 @@ packages: fs-extra: 9.1.0 html-webpack-plugin: 4.5.2_webpack@4.46.0 node-fetch: 2.6.7 - pnp-webpack-plugin: 1.6.4_typescript@4.7.0-beta - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 + pnp-webpack-plugin: 1.6.4 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 resolve-from: 5.0.0 @@ -7800,8 +7731,7 @@ packages: telejson: 5.3.3 terser-webpack-plugin: 4.2.3_webpack@4.46.0 ts-dedent: 2.2.0 - typescript: 4.7.0-beta - url-loader: 4.1.1_file-loader@6.2.0+webpack@4.46.0 + url-loader: 4.1.1_lit45vopotvaqup7lrvlnvtxwy util-deprecate: 1.0.2 webpack: 4.46.0 webpack-dev-middleware: 3.7.3_webpack@4.46.0 @@ -7816,7 +7746,7 @@ packages: - webpack-command dev: true - /@storybook/manager-webpack5/6.4.22_579661f7ef1bb6ee25f7681121d08161: + /@storybook/manager-webpack5/6.4.22: resolution: {integrity: sha512-BMkOMselT4jOn7EQGt748FurM5ewtDfZtOQPCVK8MZX+HYE2AgjNOzm562TYODIxk12Fkhgj3EIz7GGMe1U3RA==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -7829,14 +7759,14 @@ packages: '@babel/core': 7.17.9 '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.9 '@babel/preset-react': 7.16.7_@babel+core@7.17.9 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/core-client': 6.4.22_28aeb7e933b1113aa8f260c24922fc28 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@storybook/addons': 6.4.22 + '@storybook/core-client': 6.4.22_webpack@5.72.0 + '@storybook/core-common': 6.4.22 '@storybook/node-logger': 6.4.22 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/ui': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/theming': 6.4.22 + '@storybook/ui': 6.4.22 '@types/node': 17.0.26 - babel-loader: 8.2.5_acba72ea4bf9d339cdfcd8f55cdb7006 + babel-loader: 8.2.5_vs5hf2sl7hjtttp43d2vzw3qay case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.22.2 @@ -7848,18 +7778,15 @@ packages: html-webpack-plugin: 5.5.0_webpack@5.72.0 node-fetch: 2.6.7 process: 0.11.10 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 resolve-from: 5.0.0 style-loader: 2.0.0_webpack@5.72.0 telejson: 5.3.3 - terser-webpack-plugin: 5.3.1_@swc+core@1.2.165+webpack@5.72.0 + terser-webpack-plugin: 5.3.1_webpack@5.72.0 ts-dedent: 2.2.0 - typescript: 4.7.0-beta util-deprecate: 1.0.2 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 webpack-dev-middleware: 4.3.0_webpack@5.72.0 webpack-virtual-modules: 0.4.3 transitivePeerDependencies: @@ -7892,25 +7819,23 @@ packages: core-js: 3.22.2 dev: true - /@storybook/preview-web/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/preview-web/6.4.22: resolution: {integrity: sha512-sWS+sgvwSvcNY83hDtWUUL75O2l2LY/GTAS0Zp2dh3WkObhtuJ/UehftzPZlZmmv7PCwhb4Q3+tZDKzMlFxnKQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/channel-postmessage': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 ansi-to-html: 0.6.15 core-js: 3.22.2 global: 4.4.0 lodash: 4.17.21 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 synchronous-promise: 2.0.15 ts-dedent: 2.2.0 @@ -7918,7 +7843,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/react-docgen-typescript-plugin/1.0.2-canary.253f8c1.0_f843efc4b66e8c6ad845137ddf469a47: + /@storybook/react-docgen-typescript-plugin/1.0.2-canary.253f8c1.0_webpack@4.46.0: resolution: {integrity: sha512-mmoRG/rNzAiTbh+vGP8d57dfcR2aP+5/Ll03KKFyfy5FqWFm/Gh7u27ikx1I3LmVMI8n6jh5SdWMkMKon7/tDw==} peerDependencies: typescript: '>= 3.x' @@ -7929,15 +7854,14 @@ packages: find-cache-dir: 3.3.2 flat-cache: 3.0.4 micromatch: 4.0.5 - react-docgen-typescript: 2.2.2_typescript@4.7.0-beta + react-docgen-typescript: 2.2.2 tslib: 2.4.0 - typescript: 4.7.0-beta webpack: 4.46.0 transitivePeerDependencies: - supports-color dev: true - /@storybook/react/6.4.22_d278050df1347aa58add7897bb82cf12: + /@storybook/react/6.4.22: resolution: {integrity: sha512-5BFxtiguOcePS5Ty/UoH7C6odmvBYIZutfiy4R3Ua6FYmtxac5vP9r5KjCz1IzZKT8mCf4X+PuK1YvDrPPROgQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -7954,15 +7878,15 @@ packages: dependencies: '@babel/preset-flow': 7.16.7 '@babel/preset-react': 7.16.7 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_06cd85ae30adde416cafc06517ba554d - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/core': 6.4.22_0225a0111cb1f4be290566cc563ae446 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_a3gyllrqvxpec3fpybsrposvju + '@storybook/addons': 6.4.22 + '@storybook/core': 6.4.22_webpack@4.46.0 + '@storybook/core-common': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.22 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0_f843efc4b66e8c6ad845137ddf469a47 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0_webpack@4.46.0 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 '@types/webpack-env': 1.16.4 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-named-asset-import: 0.3.8 @@ -7971,13 +7895,10 @@ packages: global: 4.4.0 lodash: 4.17.21 prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 react-refresh: 0.11.0 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.7.0-beta webpack: 4.46.0 transitivePeerDependencies: - '@storybook/builder-webpack5' @@ -7999,7 +7920,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/react/6.4.22_ec31d3858f91e1329ce176d1ed57f64f: + /@storybook/react/6.4.22_hengm5mrivop3evkvr7hyfh5we: resolution: {integrity: sha512-5BFxtiguOcePS5Ty/UoH7C6odmvBYIZutfiy4R3Ua6FYmtxac5vP9r5KjCz1IzZKT8mCf4X+PuK1YvDrPPROgQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -8017,15 +7938,15 @@ packages: '@babel/core': 7.17.9 '@babel/preset-flow': 7.16.7_@babel+core@7.17.9 '@babel/preset-react': 7.16.7_@babel+core@7.17.9 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_06cd85ae30adde416cafc06517ba554d - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/core': 6.4.22_d20759acd072fe363dbe65e256cea710 - '@storybook/core-common': 6.4.22_790980de2057cf207db9c1f3a7420d7b + '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_a3gyllrqvxpec3fpybsrposvju + '@storybook/addons': 6.4.22 + '@storybook/core': 6.4.22_3fbhyijvrchqengy7suoplhr3y + '@storybook/core-common': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.22 - '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0_f843efc4b66e8c6ad845137ddf469a47 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0_webpack@4.46.0 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/store': 6.4.22 '@types/webpack-env': 1.16.4 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-named-asset-import: 0.3.8_@babel+core@7.17.9 @@ -8034,13 +7955,10 @@ packages: global: 4.4.0 lodash: 4.17.21 prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 react-refresh: 0.11.0 read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.7.0-beta webpack: 4.46.0 transitivePeerDependencies: - '@storybook/builder-webpack5' @@ -8062,7 +7980,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/router/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/router/6.4.22: resolution: {integrity: sha512-zeuE8ZgFhNerQX8sICQYNYL65QEi3okyzw7ynF58Ud6nRw4fMxSOHcj2T+nZCIU5ufozRL4QWD/Rg9P2s/HtLw==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -8076,10 +7994,8 @@ packages: lodash: 4.17.21 memoizerific: 1.11.3 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-router: 6.3.0_react@18.0.0 - react-router-dom: 6.3.0_react-dom@18.0.0+react@18.0.0 + react-router: 6.3.0 + react-router-dom: 6.3.0 ts-dedent: 2.2.0 dev: true @@ -8092,13 +8008,13 @@ packages: find-up: 4.1.0 dev: true - /@storybook/source-loader/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/source-loader/6.4.22: resolution: {integrity: sha512-O4RxqPgRyOgAhssS6q1Rtc8LiOvPBpC1EqhCYWRV3K+D2EjFarfQMpjgPj18hC+QzpUSfzoBZYqsMECewEuLNw==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.22.2 @@ -8107,18 +8023,16 @@ packages: loader-utils: 2.0.2 lodash: 4.17.21 prettier: 2.3.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 dev: true - /@storybook/store/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/store/6.4.22: resolution: {integrity: sha512-lrmcZtYJLc2emO+1l6AG4Txm9445K6Pyv9cGAuhOJ9Kks0aYe0YtvMkZVVry0RNNAIv6Ypz72zyKc/QK+tZLAQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/addons': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 @@ -8127,8 +8041,6 @@ packages: global: 4.4.0 lodash: 4.17.21 memoizerific: 1.11.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 regenerator-runtime: 0.13.9 slash: 3.0.0 stable: 0.1.8 @@ -8137,60 +8049,56 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/theming/6.4.22_react-dom@18.0.0+react@18.0.0: + /@storybook/theming/6.4.22: resolution: {integrity: sha512-NVMKH/jxSPtnMTO4VCN1k47uztq+u9fWv4GSnzq/eezxdGg9ceGL4/lCrNGoNajht9xbrsZ4QvsJ/V2sVGM8wA==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@emotion/core': 10.3.1_react@18.0.0 + '@emotion/core': 10.3.1 '@emotion/is-prop-valid': 0.8.8 - '@emotion/styled': 10.3.0_614b3f3b148d4a7eace543f4ef60374e + '@emotion/styled': 10.3.0_@emotion+core@10.3.1 '@storybook/client-logger': 6.4.22 core-js: 3.22.2 deep-object-diff: 1.1.7 - emotion-theming: 10.3.0_614b3f3b148d4a7eace543f4ef60374e + emotion-theming: 10.3.0_@emotion+core@10.3.1 global: 4.4.0 memoizerific: 1.11.3 polished: 4.2.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 resolve-from: 5.0.0 ts-dedent: 2.2.0 dev: true - /@storybook/ui/6.4.22_31fee5138b61bcdeb416e3946f47cd38: + /@storybook/ui/6.4.22: resolution: {integrity: sha512-UVjMoyVsqPr+mkS1L7m30O/xrdIEgZ5SCWsvqhmyMUok3F3tRB+6M+OA5Yy+cIVfvObpA7MhxirUT1elCGXsWQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 dependencies: - '@emotion/core': 10.3.1_react@18.0.0 - '@storybook/addons': 6.4.22_react-dom@18.0.0+react@18.0.0 - '@storybook/api': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@emotion/core': 10.3.1 + '@storybook/addons': 6.4.22 + '@storybook/api': 6.4.22 '@storybook/channels': 6.4.22 '@storybook/client-logger': 6.4.22 - '@storybook/components': 6.4.22_31fee5138b61bcdeb416e3946f47cd38 + '@storybook/components': 6.4.22 '@storybook/core-events': 6.4.22 - '@storybook/router': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/router': 6.4.22 '@storybook/semver': 7.3.2 - '@storybook/theming': 6.4.22_react-dom@18.0.0+react@18.0.0 + '@storybook/theming': 6.4.22 copy-to-clipboard: 3.3.1 core-js: 3.22.2 core-js-pure: 3.22.2 - downshift: 6.1.7_react@18.0.0 - emotion-theming: 10.3.0_614b3f3b148d4a7eace543f4ef60374e + downshift: 6.1.7 + emotion-theming: 10.3.0_@emotion+core@10.3.1 fuse.js: 3.6.1 global: 4.4.0 lodash: 4.17.21 - markdown-to-jsx: 7.1.7_react@18.0.0 + markdown-to-jsx: 7.1.7 memoizerific: 1.11.3 polished: 4.2.2 qs: 6.10.3 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-draggable: 4.4.4_react-dom@18.0.0+react@18.0.0 - react-helmet-async: 1.3.0_react-dom@18.0.0+react@18.0.0 + react-draggable: 4.4.4 + react-helmet-async: 1.3.0 react-sizeme: 3.0.2 regenerator-runtime: 0.13.9 resolve-from: 5.0.0 @@ -8357,7 +8265,7 @@ packages: typechain: ^5.0.0 web3: ^1.0.0 dependencies: - typechain: 5.1.2_typescript@4.7.0-beta + typechain: 5.1.2 dev: false /@types/asn1js/2.0.2: @@ -9204,7 +9112,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.20.0_f7f609c132ab9ba239fc3391ae83df6c: + /@typescript-eslint/eslint-plugin/5.20.0_b6wjpiauegonnizpkx5mo3vwpa: resolution: {integrity: sha512-fapGzoxilCn3sBtC6NtXZX6+P/Hef7VDbyfGqTTpzYydwhlkevB+0vE0EnmHPVTVSy68GUncyJ/2PcrFBeCo5Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9215,36 +9123,34 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 + '@typescript-eslint/parser': 5.20.0 '@typescript-eslint/scope-manager': 5.20.0 - '@typescript-eslint/type-utils': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 - '@typescript-eslint/utils': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 + '@typescript-eslint/type-utils': 5.20.0 + '@typescript-eslint/utils': 5.20.0 debug: 4.3.4 - eslint: 8.14.0 functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.7 - tsutils: 3.21.0_typescript@4.7.0-beta - typescript: 4.7.0-beta + tsutils: 3.21.0 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.20.0_ed8c22e1d0ecb41733ac0352d51fd582: + /@typescript-eslint/experimental-utils/5.20.0_5wgcfyoq5s2bom5manjnkh6vqi: resolution: {integrity: sha512-w5qtx2Wr9x13Dp/3ic9iGOGmVXK5gMwyc8rwVgZU46K9WTjPZSyPvdER9Ycy+B5lNHvoz+z2muWhUvlTpQeu+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 + '@typescript-eslint/utils': 5.20.0_5wgcfyoq5s2bom5manjnkh6vqi eslint: 8.14.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/5.20.0_ed8c22e1d0ecb41733ac0352d51fd582: + /@typescript-eslint/parser/5.20.0: resolution: {integrity: sha512-UWKibrCZQCYvobmu3/N8TWbEeo/EPQbS41Ux1F9XqPzGuV7pfg6n50ZrFo6hryynD8qOTTfLHtHjjdQtxJ0h/w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9256,10 +9162,8 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.20.0 '@typescript-eslint/types': 5.20.0 - '@typescript-eslint/typescript-estree': 5.20.0_typescript@4.7.0-beta + '@typescript-eslint/typescript-estree': 5.20.0 debug: 4.3.4 - eslint: 8.14.0 - typescript: 4.7.0-beta transitivePeerDependencies: - supports-color dev: true @@ -9272,7 +9176,7 @@ packages: '@typescript-eslint/visitor-keys': 5.20.0 dev: true - /@typescript-eslint/type-utils/5.20.0_ed8c22e1d0ecb41733ac0352d51fd582: + /@typescript-eslint/type-utils/5.20.0: resolution: {integrity: sha512-WxNrCwYB3N/m8ceyoGCgbLmuZwupvzN0rE8NBuwnl7APgjv24ZJIjkNzoFBXPRCGzLNkoU/WfanW0exvp/+3Iw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9282,11 +9186,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.20.0_ed8c22e1d0ecb41733ac0352d51fd582 + '@typescript-eslint/utils': 5.20.0 debug: 4.3.4 - eslint: 8.14.0 - tsutils: 3.21.0_typescript@4.7.0-beta - typescript: 4.7.0-beta + tsutils: 3.21.0 transitivePeerDependencies: - supports-color dev: true @@ -9296,6 +9198,26 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@typescript-eslint/typescript-estree/5.20.0: + resolution: {integrity: sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.20.0 + '@typescript-eslint/visitor-keys': 5.20.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.7 + tsutils: 3.21.0 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree/5.20.0_typescript@4.7.0-beta: resolution: {integrity: sha512-36xLjP/+bXusLMrT9fMMYy1KJAGgHhlER2TqpUVDYUQg4w0q/NW/sg4UGAgVwAqb8V4zYg43KMUpM8vV2lve6w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9317,7 +9239,24 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.20.0_ed8c22e1d0ecb41733ac0352d51fd582: + /@typescript-eslint/utils/5.20.0: + resolution: {integrity: sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@typescript-eslint/scope-manager': 5.20.0 + '@typescript-eslint/types': 5.20.0 + '@typescript-eslint/typescript-estree': 5.20.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils/5.20.0_5wgcfyoq5s2bom5manjnkh6vqi: resolution: {integrity: sha512-lHONGJL1LIO12Ujyx8L8xKbwWSkoUKFSO+0wDAqGXiudWB2EO7WEUT+YZLtVbmOmSllAjLb9tpoIPwpRe5Tn6w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9705,14 +9644,14 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest/1.1.1_webpack-cli@4.9.2+webpack@5.72.0: + /@webpack-cli/configtest/1.1.1_q7qo2wgeiyigo3znjsjh7f36ue: resolution: {integrity: sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==} peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d - webpack-cli: 4.9.2_0d7fbf49284cee8179ee97aed7cf05b4 + webpack: 5.72.0_webpack-cli@4.9.2 + webpack-cli: 4.9.2_bv736sjijtxic6pos6xnptyfwq dev: true /@webpack-cli/info/1.4.1_webpack-cli@4.9.2: @@ -9721,10 +9660,10 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.9.2_0d7fbf49284cee8179ee97aed7cf05b4 + webpack-cli: 4.9.2_bv736sjijtxic6pos6xnptyfwq dev: true - /@webpack-cli/serve/1.6.1_8b27d5839a2bdf89ba2338e4c89fea10: + /@webpack-cli/serve/1.6.1_rmt5la42fppytordhdsmrh7kca: resolution: {integrity: sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==} peerDependencies: webpack-cli: 4.x.x @@ -9733,8 +9672,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.9.2_0d7fbf49284cee8179ee97aed7cf05b4 - webpack-dev-server: 4.8.1_webpack-cli@4.9.2+webpack@5.72.0 + webpack-cli: 4.9.2_bv736sjijtxic6pos6xnptyfwq + webpack-dev-server: 4.8.1_q7qo2wgeiyigo3znjsjh7f36ue dev: true /@xobotyi/scrollbar-width/1.9.5: @@ -10735,7 +10674,7 @@ packages: - supports-color dev: true - /babel-loader/8.2.5_598a497cebab8e15ee8f9e5632178e63: + /babel-loader/8.2.5_@babel+core@7.17.9: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -10747,10 +10686,9 @@ packages: loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 4.46.0 dev: true - /babel-loader/8.2.5_@babel+core@7.17.9: + /babel-loader/8.2.5_lgfes7hlvohbl3uptzldef4omm: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -10762,9 +10700,10 @@ packages: loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 + webpack: 4.46.0 dev: true - /babel-loader/8.2.5_acba72ea4bf9d339cdfcd8f55cdb7006: + /babel-loader/8.2.5_vs5hf2sl7hjtttp43d2vzw3qay: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -10776,7 +10715,7 @@ packages: loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 dev: true /babel-messages/6.23.0: @@ -12788,7 +12727,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.0.0 serialize-javascript: 6.0.0 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 dev: true /core-js-builder/3.22.2: @@ -12854,7 +12793,7 @@ packages: vary: 1.1.2 dev: false - /cosmiconfig-typescript-loader/1.0.6_f533c3387680131348857b0baefd0f31: + /cosmiconfig-typescript-loader/1.0.6_6uz4godwqajrgsefpmf257ipge: resolution: {integrity: sha512-2nEotziYJWtNtoTjKbchj9QrdTT6DBxCvqjNKoDKARw+e2yZmTQCa07uRrykLIZuvSgp69YXLH89UHc0WhdMfQ==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -12863,7 +12802,7 @@ packages: dependencies: '@types/node': 17.0.23 cosmiconfig: 7.0.1 - ts-node: 10.7.0_f533c3387680131348857b0baefd0f31 + ts-node: 10.7.0_6uz4godwqajrgsefpmf257ipge typescript: 4.6.3 transitivePeerDependencies: - '@swc/core' @@ -13180,7 +13119,7 @@ packages: postcss-value-parser: 4.2.0 schema-utils: 3.1.1 semver: 7.3.7 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 dev: true /css-select/4.1.3: @@ -14084,7 +14023,7 @@ packages: minimatch: 3.1.2 dev: false - /downshift/6.1.7_react@18.0.0: + /downshift/6.1.7: resolution: {integrity: sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==} peerDependencies: react: '>=16.12.0' @@ -14092,7 +14031,6 @@ packages: '@babel/runtime': 7.17.9 compute-scroll-into-view: 1.0.17 prop-types: 15.8.1 - react: 18.0.0 react-is: 17.0.2 tslib: 2.4.0 dev: true @@ -14237,17 +14175,16 @@ packages: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} - /emotion-theming/10.3.0_614b3f3b148d4a7eace543f4ef60374e: + /emotion-theming/10.3.0_@emotion+core@10.3.1: resolution: {integrity: sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==} peerDependencies: '@emotion/core': ^10.0.27 react: '>=16.3.0' dependencies: '@babel/runtime': 7.17.9 - '@emotion/core': 10.3.1_react@18.0.0 + '@emotion/core': 10.3.1 '@emotion/weak-memoize': 0.2.5 hoist-non-react-statics: 3.3.2 - react: 18.0.0 dev: true /enc-utils/3.0.0: @@ -14782,6 +14719,15 @@ packages: estraverse: 5.3.0 dev: true + /eslint-utils/3.0.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint-visitor-keys: 2.1.0 + dev: true + /eslint-utils/3.0.0_eslint@8.14.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -15957,7 +15903,7 @@ packages: worker-rpc: 0.1.1 dev: true - /fork-ts-checker-webpack-plugin/6.5.1_63ce4c92018c931e114f7f7e8d93682b: + /fork-ts-checker-webpack-plugin/6.5.1_webpack@4.46.0: resolution: {integrity: sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -15977,7 +15923,6 @@ packages: chokidar: 3.5.3 cosmiconfig: 6.0.0 deepmerge: 4.2.2 - eslint: 8.14.0 fs-extra: 9.1.0 glob: 7.2.0 memfs: 3.4.1 @@ -15985,11 +15930,10 @@ packages: schema-utils: 2.7.0 semver: 7.3.7 tapable: 1.1.3 - typescript: 4.7.0-beta webpack: 4.46.0 dev: true - /fork-ts-checker-webpack-plugin/6.5.1_6744e73b405a0376cb80b869ea4846cf: + /fork-ts-checker-webpack-plugin/6.5.1_webpack@5.72.0: resolution: {integrity: sha512-x1wumpHOEf4gDROmKTaB6i4/Q6H3LwmjVO7fIX47vBwlZbtPjU33hgoMuD/Q/y6SU8bnuYSoN6ZQOLshGp0T/g==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -16009,7 +15953,6 @@ packages: chokidar: 3.5.3 cosmiconfig: 6.0.0 deepmerge: 4.2.2 - eslint: 8.14.0 fs-extra: 9.1.0 glob: 7.2.0 memfs: 3.4.1 @@ -16017,8 +15960,7 @@ packages: schema-utils: 2.7.0 semver: 7.3.7 tapable: 1.1.3 - typescript: 4.7.0-beta - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 dev: true /form-data/2.3.3: @@ -16640,7 +16582,7 @@ packages: yargs: 7.1.2 dev: true - /gulp-zip/5.1.0_gulp@4.0.2: + /gulp-zip/5.1.0: resolution: {integrity: sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==} engines: {node: '>=8'} peerDependencies: @@ -16650,7 +16592,6 @@ packages: optional: true dependencies: get-stream: 5.2.0 - gulp: 4.0.2 plugin-error: 1.0.1 through2: 3.0.2 vinyl: 2.2.1 @@ -17085,7 +17026,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 transitivePeerDependencies: - acorn dev: true @@ -17317,7 +17258,7 @@ packages: resolution: {integrity: sha1-xg7taebY/bazEEofy8ocGS3FtQE=} dev: true - /iframe-resizer-react/1.1.0_react-dom@18.0.0+react@18.0.0: + /iframe-resizer-react/1.1.0: resolution: {integrity: sha512-FrytSq91AIJaDgE+6uK/Vdd6IR8CrwLoZ6eGmL2qQMPTzF0xlSV2jaSzRRUh5V2fttD7vzl21jvBl97bV40eBw==} engines: {node: '>=8', npm: '>=5'} peerDependencies: @@ -17326,8 +17267,6 @@ packages: react-dom: '>=16.8.0' dependencies: iframe-resizer: 4.3.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 warning: 4.0.3 dev: false @@ -17585,7 +17524,7 @@ packages: it-to-stream: 1.0.0 merge-options: 3.0.4 nanoid: 3.2.0 - native-fetch: 3.0.0_@achingbrain+node-fetch@2.6.7 + native-fetch: 3.0.0_hmwa7nplpltavckpkeobtw6pv4 node-fetch: /@achingbrain/node-fetch/2.6.7 react-native-fetch-api: 2.0.0 stream-to-it: 0.2.4 @@ -18160,7 +18099,7 @@ packages: peerDependencies: ws: '*' dependencies: - ws: 8.5.0_bffff4271b89d628e8333ead80d3d8e8 + ws: 8.5.0_x777ijy3rhlcr2bth2wybu6y5a dev: false /isstream/0.1.2: @@ -18358,7 +18297,7 @@ packages: - ts-node dev: true - /jest-config/28.0.0-alpha.8_3becefdc590d7c673b4b4319aa21427a: + /jest-config/28.0.0-alpha.8_hpwo7xczbv6goo2limm2uikcpi: resolution: {integrity: sha512-sybN6aAELdFEGnuTTF7pnijFpomR/fJf+gXXAksLDxRq3wFzRDIqfHI82wBpkZhNqVPAGC/p9ilsBwb9YMID7A==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.13.0 || >=17.0.0} peerDependencies: @@ -18393,7 +18332,7 @@ packages: pretty-format: 28.0.0-alpha.8 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.7.0_67134532d167564bacdc84129db6eba6 + ts-node: 10.7.0_m4jukmwrm5lexlg4qqjj3nxluy transitivePeerDependencies: - supports-color dev: true @@ -18432,7 +18371,7 @@ packages: pretty-format: 28.0.0-alpha.8 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.7.0_67134532d167564bacdc84129db6eba6 + ts-node: 10.7.0_m4jukmwrm5lexlg4qqjj3nxluy transitivePeerDependencies: - supports-color dev: true @@ -18578,7 +18517,7 @@ packages: '@types/node': 17.0.23 dev: true - /jest-pnp-resolver/1.2.2_jest-resolve@28.0.0-alpha.8: + /jest-pnp-resolver/1.2.2_3ztjfq6qe32ngbxntuzgfmfnjy: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -18617,7 +18556,7 @@ packages: chalk: 4.1.2 graceful-fs: 4.2.10 jest-haste-map: 28.0.0-alpha.8 - jest-pnp-resolver: 1.2.2_jest-resolve@28.0.0-alpha.8 + jest-pnp-resolver: 1.2.2_3ztjfq6qe32ngbxntuzgfmfnjy jest-util: 28.0.0-alpha.8 jest-validate: 28.0.0-alpha.8 resolve: 1.22.0 @@ -19236,7 +19175,7 @@ packages: engines: {node: '>= 8'} dev: true - /ky-universal/0.8.2_9d16fb08bee5537b54f3df10881f880a: + /ky-universal/0.8.2_tulpwcf64vjxwvht34iiqh4ibi: resolution: {integrity: sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==} engines: {node: '>=10.17'} peerDependencies: @@ -19516,7 +19455,15 @@ packages: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: false - /lodash-unified/1.0.2_da03a4540fbd16bbaafbb96724306afd: + /lodash-unified/1.0.2: + resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + dev: false + + /lodash-unified/1.0.2_3ib2ivapxullxkx3xftsimdk7u: resolution: {integrity: sha512-OGbEy+1P+UT26CYi4opY4gebD8cWRDxAT6MAObIVQMiqYdxZr1g3QHWCToVsm31x2NkLS4K3+MC2qInaRMa39g==} peerDependencies: '@types/lodash-es': '*' @@ -19753,13 +19700,11 @@ packages: resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} dev: true - /markdown-to-jsx/7.1.7_react@18.0.0: + /markdown-to-jsx/7.1.7: resolution: {integrity: sha512-VI3TyyHlGkO8uFle0IOibzpO1c1iJDcXcS/zBrQrXQQvJ2tpdwVzVZ7XdKsyRz1NdRmre4dqQkMZzUHaKIG/1w==} engines: {node: '>= 10'} peerDependencies: react: '>= 0.14.0' - dependencies: - react: 18.0.0 dev: true /matchdep/2.0.0: @@ -20389,7 +20334,7 @@ packages: resolution: {integrity: sha1-ulSMh578+5DaHE2eCX20pGySVe8=} dev: false - /nano-css/5.3.4_react-dom@18.0.0+react@18.0.0: + /nano-css/5.3.4: resolution: {integrity: sha512-wfcviJB6NOxDIDfr7RFn/GlaN7I/Bhe4d39ZRCJ3xvZX60LVe2qZ+rDqM49nm4YT81gAjzS+ZklhKP/Gnfnubg==} peerDependencies: react: '*' @@ -20399,8 +20344,6 @@ packages: csstype: 3.0.11 fastest-stable-stringify: 2.0.2 inline-style-prefixer: 6.0.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 rtl-css-js: 1.15.0 sourcemap-codec: 1.4.8 stacktrace-js: 2.0.2 @@ -20457,7 +20400,7 @@ packages: node-fetch: '*' dev: false - /native-fetch/3.0.0_@achingbrain+node-fetch@2.6.7: + /native-fetch/3.0.0_hmwa7nplpltavckpkeobtw6pv4: resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} peerDependencies: node-fetch: '*' @@ -20667,7 +20610,7 @@ packages: engines: {node: '>=8'} dev: false - /notistack/2.0.4_34c6212647451bc2f58a42b7a7c91125: + /notistack/2.0.4: resolution: {integrity: sha512-kOJmKvTG91ElMzi4aHu82BDe1liQ0zMrBp+TnWJptgowDsTbeTKbZmsRqJNIj145BmlOtZsEE9xjcrN46zVo3w==} peerDependencies: '@emotion/react': ^11.4.1 @@ -20681,13 +20624,8 @@ packages: '@emotion/styled': optional: true dependencies: - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 - '@emotion/styled': 11.8.1_d04d4cdfb6fe6aad6dcad79e21a129f6 - '@mui/material': 5.6.2_1376d0c029fe63cac75d7e36fe4212f4 clsx: 1.1.1 hoist-non-react-statics: 3.3.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 dev: false /now-and-later/2.0.1: @@ -21482,11 +21420,11 @@ packages: engines: {node: '>=10.13.0'} dev: false - /pnp-webpack-plugin/1.6.4_typescript@4.7.0-beta: + /pnp-webpack-plugin/1.6.4: resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} engines: {node: '>=6'} dependencies: - ts-pnp: 1.2.0_typescript@4.7.0-beta + ts-pnp: 1.2.0 transitivePeerDependencies: - typescript dev: true @@ -21516,7 +21454,7 @@ packages: postcss: 7.0.39 dev: true - /postcss-loader/4.3.0_postcss@7.0.39+webpack@4.46.0: + /postcss-loader/4.3.0_gzaxsinx64nntyd3vmdqwl7coe: resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -22081,7 +22019,7 @@ packages: webpack: 4.46.0 dev: true - /react-avatar-editor/12.0.0_cba0cb7a45c5be1acc73e969c348db7f: + /react-avatar-editor/12.0.0_@babel+core@7.17.9: resolution: {integrity: sha512-l7NrN8CXlUXbMhnbkuduAtR3+AlDz+DzYWlYBNr7q+rNeJMZlv26ap3Dk/D1WK/MPlnoS33iITlhLkuDsYQpug==} peerDependencies: react: ^0.14.0 || ^17.0.0 @@ -22090,21 +22028,16 @@ packages: '@babel/plugin-transform-runtime': 7.15.0_@babel+core@7.17.9 '@babel/runtime': 7.16.5 prop-types: 15.8.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /react-colorful/5.5.1_react-dom@18.0.0+react@18.0.0: + /react-colorful/5.5.1: resolution: {integrity: sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - dependencies: - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 dev: true /react-devtools-core/4.24.4: @@ -22123,7 +22056,7 @@ packages: dnd-core: 16.0.1 dev: false - /react-dnd/16.0.1_@types+react@18.0.2+react@18.0.0: + /react-dnd/16.0.1: resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} peerDependencies: '@types/hoist-non-react-statics': '>= 3.3.1' @@ -22140,14 +22073,12 @@ packages: dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 - '@types/react': 18.0.2 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 - react: 18.0.0 dev: false - /react-dnd/16.0.1_c04393f9f1378a61422a37e5c8ab0477: + /react-dnd/16.0.1_@types+node@17.0.26: resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} peerDependencies: '@types/hoist-non-react-statics': '>= 3.3.1' @@ -22165,19 +22096,15 @@ packages: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 '@types/node': 17.0.26 - '@types/react': 18.0.2 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 - react: 18.0.0 dev: false - /react-docgen-typescript/2.2.2_typescript@4.7.0-beta: + /react-docgen-typescript/2.2.2: resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' - dependencies: - typescript: 4.7.0-beta dev: true /react-docgen/5.4.0: @@ -22209,7 +22136,7 @@ packages: scheduler: 0.21.0 dev: false - /react-draggable/4.4.4_react-dom@18.0.0+react@18.0.0: + /react-draggable/4.4.4: resolution: {integrity: sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==} peerDependencies: react: '>= 16.3.0' @@ -22217,10 +22144,8 @@ packages: dependencies: clsx: 1.1.1 prop-types: 15.7.2 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - /react-element-to-jsx-string/14.3.4_react-dom@18.0.0+react@18.0.0: + /react-element-to-jsx-string/14.3.4: resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} peerDependencies: react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 @@ -22228,8 +22153,6 @@ packages: dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 react-is: 17.0.2 dev: true @@ -22237,16 +22160,15 @@ packages: resolution: {integrity: sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==} dev: true - /react-feather/2.0.9_react@18.0.0: + /react-feather/2.0.9: resolution: {integrity: sha512-yMfCGRkZdXwIs23Zw/zIWCJO3m3tlaUvtHiXlW+3FH7cIT6fiK1iJ7RJWugXq7Fso8ZaQyUm92/GOOHXvkiVUw==} peerDependencies: react: ^16.8.6 || ^17 dependencies: prop-types: 15.7.2 - react: 18.0.0 dev: false - /react-helmet-async/1.3.0_react-dom@18.0.0+react@18.0.0: + /react-helmet-async/1.3.0: resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} peerDependencies: react: ^16.6.0 || ^17.0.0 || ^18.0.0 @@ -22255,13 +22177,11 @@ packages: '@babel/runtime': 7.17.9 invariant: 2.2.4 prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 react-fast-compare: 3.2.0 shallowequal: 1.1.0 dev: true - /react-highlight-words/0.18.0_react@18.0.0: + /react-highlight-words/0.18.0: resolution: {integrity: sha512-5z+46eLPjB4JWgOhuQ0E+6iUPTD1U3amiy5KKjzZmeJ5zyvHr91hnzBT3UHya/KlySm5KRTKpYpba9vs67oO2A==} peerDependencies: react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 @@ -22269,19 +22189,34 @@ packages: highlight-words-core: 1.2.2 memoize-one: 4.0.3 prop-types: 15.8.1 - react: 18.0.0 dev: false - /react-hook-form/7.30.0_react@18.0.0: + /react-hook-form/7.30.0: resolution: {integrity: sha512-DzjiM6o2vtDGNMB9I4yCqW8J21P314SboNG1O0obROkbg7KVS0I7bMtwSdKyapnCPjHgnxc3L7E5PEdISeEUcQ==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 - dependencies: - react: 18.0.0 dev: false - /react-i18next/11.16.7_react-dom@18.0.0+react@18.0.0: + /react-i18next/11.16.7: + resolution: {integrity: sha512-7yotILJLnKfvUfrl/nt9eK9vFpVFjZPLWAwBzWL6XppSZZEvlmlKk0GBGDCAPfLfs8oND7WAbry8wGzdoiW5Nw==} + peerDependencies: + i18next: '>= 19.0.0' + react: '>= 16.8.0' + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@babel/runtime': 7.17.9 + html-escaper: 2.0.2 + html-parse-stringify: 3.0.1 + dev: true + + /react-i18next/11.16.7_zpnidt7m3osuk7shl3s4oenomq: resolution: {integrity: sha512-7yotILJLnKfvUfrl/nt9eK9vFpVFjZPLWAwBzWL6XppSZZEvlmlKk0GBGDCAPfLfs8oND7WAbry8wGzdoiW5Nw==} peerDependencies: i18next: '>= 19.0.0' @@ -22299,8 +22234,9 @@ packages: html-parse-stringify: 3.0.1 react: 18.0.0 react-dom: 18.0.0_react@18.0.0 + dev: false - /react-inspector/5.1.1_react@18.0.0: + /react-inspector/5.1.1: resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} peerDependencies: react: ^16.8.4 || ^17.0.0 @@ -22308,7 +22244,6 @@ packages: '@babel/runtime': 7.17.9 is-dom: 1.1.0 prop-types: 15.8.1 - react: 18.0.0 dev: true /react-is/16.13.1: @@ -22323,7 +22258,7 @@ packages: p-defer: 3.0.0 dev: false - /react-popper-tooltip/3.1.1_react-dom@18.0.0+react@18.0.0: + /react-popper-tooltip/3.1.1: resolution: {integrity: sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==} peerDependencies: react: ^16.6.0 || ^17.0.0 @@ -22331,24 +22266,21 @@ packages: dependencies: '@babel/runtime': 7.17.9 '@popperjs/core': 2.11.5 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-popper: 2.2.5_ddeceac54e80ad082dd3259289d97632 + react-popper: 2.2.5_@popperjs+core@2.11.5 dev: true - /react-popper/2.2.5_ddeceac54e80ad082dd3259289d97632: + /react-popper/2.2.5_@popperjs+core@2.11.5: resolution: {integrity: sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==} peerDependencies: '@popperjs/core': ^2.0.0 react: ^16.8.0 || ^17 dependencies: '@popperjs/core': 2.11.5 - react: 18.0.0 react-fast-compare: 3.2.0 warning: 4.0.3 dev: true - /react-qrcode-logo/2.7.0_react-dom@18.0.0+react@18.0.0: + /react-qrcode-logo/2.7.0: resolution: {integrity: sha512-79Ce+1GlETAbu8fQGAoHczjvXjsm044+FeVAutu9lwJ/w0hRKRRPPHQRkPmXZK4aPi/H9Fqv+7P29VYQ9Yo2dA==} peerDependencies: react: '>=16.4.1' @@ -22356,8 +22288,6 @@ packages: dependencies: lodash.isequal: 4.5.0 qrcode-generator: 1.4.4 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 dev: false /react-refresh/0.11.0: @@ -22370,24 +22300,21 @@ packages: engines: {node: '>=0.10.0'} dev: true - /react-router-dom/6.3.0_react-dom@18.0.0+react@18.0.0: + /react-router-dom/6.3.0: resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: history: 5.3.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-router: 6.3.0_react@18.0.0 + react-router: 6.3.0 - /react-router/6.3.0_react@18.0.0: + /react-router/6.3.0: resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==} peerDependencies: react: '>=16.8' dependencies: history: 5.3.0 - react: 18.0.0 /react-sizeme/3.0.2: resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} @@ -22398,7 +22325,7 @@ packages: throttle-debounce: 3.0.1 dev: true - /react-syntax-highlighter/13.5.3_react@18.0.0: + /react-syntax-highlighter/13.5.3: resolution: {integrity: sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==} peerDependencies: react: '>= 0.14.0' @@ -22407,36 +22334,44 @@ packages: highlight.js: 10.7.3 lowlight: 1.20.0 prismjs: 1.28.0 - react: 18.0.0 refractor: 3.6.0 dev: true - /react-textarea-autosize/8.3.3_@types+react@18.0.2+react@18.0.0: + /react-textarea-autosize/8.3.3: resolution: {integrity: sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 dependencies: '@babel/runtime': 7.17.9 - react: 18.0.0 - use-composed-ref: 1.3.0_react@18.0.0 - use-latest: 1.2.1_@types+react@18.0.2+react@18.0.0 + use-composed-ref: 1.3.0 + use-latest: 1.2.1 transitivePeerDependencies: - '@types/react' dev: true - /react-to-print/2.14.6_react-dom@18.0.0+react@18.0.0: + /react-to-print/2.14.6: resolution: {integrity: sha512-LlhbfNAzPm6AOGmCcsVzgyDIBFs5lTXOMpRL+IUmZRZU04i79rujEj5nXKmbRTPTZV8ezLIHSY6ecj4y0lD5iA==} peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: prop-types: 15.8.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 dev: false - /react-transition-group/4.4.2_react-dom@18.0.0+react@18.0.0: + /react-transition-group/4.4.2: + resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.17.2 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + dev: false + + /react-transition-group/4.4.2_zpnidt7m3osuk7shl3s4oenomq: resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} peerDependencies: react: '>=16.6.0' @@ -22450,17 +22385,16 @@ packages: react-dom: 18.0.0_react@18.0.0 dev: false - /react-universal-interface/0.6.2_react@18.0.0+tslib@2.3.1: + /react-universal-interface/0.6.2_tslib@2.3.1: resolution: {integrity: sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==} peerDependencies: react: '*' tslib: '*' dependencies: - react: 18.0.0 tslib: 2.3.1 dev: false - /react-use/17.3.2_react-dom@18.0.0+react@18.0.0: + /react-use/17.3.2: resolution: {integrity: sha512-bj7OD0/1wL03KyWmzFXAFe425zziuTf7q8olwCYBfOeFHY1qfO1FAMjROQLsLZYwG4Rx63xAfb7XAbBrJsZmEw==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -22472,10 +22406,8 @@ packages: fast-deep-equal: 3.1.3 fast-shallow-equal: 1.0.0 js-cookie: 2.2.1 - nano-css: 5.3.4_react-dom@18.0.0+react@18.0.0 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 - react-universal-interface: 0.6.2_react@18.0.0+tslib@2.3.1 + nano-css: 5.3.4 + react-universal-interface: 0.6.2_tslib@2.3.1 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 set-harmonic-interval: 1.0.1 @@ -22484,18 +22416,15 @@ packages: tslib: 2.3.1 dev: false - /react-virtualized-auto-sizer/1.0.6_react-dom@18.0.0+react@18.0.0: + /react-virtualized-auto-sizer/1.0.6: resolution: {integrity: sha512-7tQ0BmZqfVF6YYEWcIGuoR3OdYe8I/ZFbNclFlGOC3pMqunkYF/oL30NCjSGl9sMEb17AnzixDz98Kqc3N76HQ==} engines: {node: '>8.0.0'} peerDependencies: react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 - dependencies: - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 dev: false - /react-window/1.8.7_react-dom@18.0.0+react@18.0.0: + /react-window/1.8.7: resolution: {integrity: sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==} engines: {node: '>8.0.0'} peerDependencies: @@ -22504,8 +22433,6 @@ packages: dependencies: '@babel/runtime': 7.17.9 memoize-one: 5.2.1 - react: 18.0.0 - react-dom: 18.0.0_react@18.0.0 dev: false /react/18.0.0: @@ -23020,7 +22947,7 @@ packages: webpack: ^4.0.0 || ^5.0.0 dependencies: tslib: 2.3.1 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 dev: true /resolve-url/0.2.1: @@ -23138,7 +23065,7 @@ packages: dependencies: bn.js: 5.2.0 - /rollup-plugin-dts/4.2.1_026db45e8527a54e1375d6b6fce62498: + /rollup-plugin-dts/4.2.1_rollup@2.70.2: resolution: {integrity: sha512-eaxQZNUJ5iQcxNGlpJ1CUgG4OSVqWjDZ3nNSWBIoGrpcote2aNphSe1RJOaSYkb8dwn3o+rYm1vvld/5z3EGSQ==} engines: {node: '>=v12.22.11'} peerDependencies: @@ -23147,7 +23074,6 @@ packages: dependencies: magic-string: 0.26.1 rollup: 2.70.2 - typescript: 4.7.0-beta optionalDependencies: '@babel/code-frame': 7.16.7 dev: true @@ -23195,13 +23121,13 @@ packages: circular-json: 0.5.9 eventemitter3: 4.0.7 uuid: 8.3.2 - ws: 7.5.7_d6955b83f926115bf12ffeabab6deaae + ws: 7.5.7_22kvxa7zeyivx4jp72v2w3pkvy optionalDependencies: bufferutil: 4.0.6 utf-8-validate: 5.0.9 dev: false - /rss3-next/0.6.17_typescript@4.7.0-beta: + /rss3-next/0.6.17: resolution: {integrity: sha512-UEVpr9somInaz8kreZjUjVmo0cay/Q24CQSo8QJogChlphUpFyMAJSXtC7xS2p67ZSXL9CWPtzoPZtQ4wh0hBg==} dependencies: axios: 0.21.1 @@ -23211,7 +23137,7 @@ packages: js-cookie: 3.0.1 tweetnacl: 1.0.3 tweetnacl-util: 0.15.1 - typescript-is: 0.18.2_typescript@4.7.0-beta + typescript-is: 0.18.2 util: 0.12.4 transitivePeerDependencies: - bufferutil @@ -23831,7 +23757,7 @@ packages: abab: 2.0.5 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 dev: true /source-map-resolve/0.5.3: @@ -24395,7 +24321,7 @@ packages: dependencies: loader-utils: 2.0.2 schema-utils: 3.1.1 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 dev: true /style-to-object/0.3.0: @@ -24503,7 +24429,7 @@ packages: xhr-request: 1.1.0 dev: false - /swc-loader/0.2.0_@swc+core@1.2.165+webpack@5.72.0: + /swc-loader/0.2.0_mdkbl4nosxya5aeu2koghccwri: resolution: {integrity: sha512-HefatIgiOaAekVcUPwT5hRNrWF3nULGv5nqGuXeHR7wz1HNN/VGlgmJE830yhIA7X3dHPln4yUTPnZ3ws7B5Fg==} peerDependencies: '@swc/core': ^1.2.147 @@ -24513,6 +24439,15 @@ packages: webpack: 5.72.0_@swc+core@1.2.165 dev: true + /swc-loader/0.2.0_webpack@5.72.0: + resolution: {integrity: sha512-HefatIgiOaAekVcUPwT5hRNrWF3nULGv5nqGuXeHR7wz1HNN/VGlgmJE830yhIA7X3dHPln4yUTPnZ3ws7B5Fg==} + peerDependencies: + '@swc/core': ^1.2.147 + webpack: '>=2' + dependencies: + webpack: 5.72.0_webpack-cli@4.9.2 + dev: true + /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: false @@ -24657,7 +24592,7 @@ packages: webpack-sources: 1.4.3 dev: true - /terser-webpack-plugin/5.3.1_@swc+core@1.2.165+webpack@5.72.0: + /terser-webpack-plugin/5.3.1_mdkbl4nosxya5aeu2koghccwri: resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -24682,6 +24617,30 @@ packages: webpack: 5.72.0_@swc+core@1.2.165 dev: true + /terser-webpack-plugin/5.3.1_webpack@5.72.0: + resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + source-map: 0.6.1 + terser: 5.12.1 + webpack: 5.72.0 + dev: true + /terser/4.8.0: resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==} engines: {node: '>=6.0.0'} @@ -25027,19 +24986,17 @@ packages: resolution: {integrity: sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==} dev: false - /ts-essentials/7.0.2_typescript@4.7.0-beta: + /ts-essentials/7.0.2: resolution: {integrity: sha512-qWPVC1xZGdefbsgFP7tPo+bsgSA2ZIXL1XeEe5M2WoMZxIOr/HbsHxP/Iv75IFhiMHMDGL7cOOwi5SXcgx9mHw==} peerDependencies: typescript: '>=3.7.0' - dependencies: - typescript: 4.7.0-beta dev: false /ts-interface-checker/0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest/27.1.4_1fd21a321a4425bdf006ce36236383ec: + /ts-jest/27.1.4_d7jbumq2iqs334agzy3cgy4d5q: resolution: {integrity: sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -25072,7 +25029,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.7.0_67134532d167564bacdc84129db6eba6: + /ts-node/10.7.0: resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} hasBin: true peerDependencies: @@ -25087,7 +25044,6 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.7.0 - '@swc/core': 1.2.165 '@tsconfig/node10': 1.0.8 '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 @@ -25098,12 +25054,11 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.7.0-beta v8-compile-cache-lib: 3.0.0 yn: 3.1.1 dev: true - /ts-node/10.7.0_f533c3387680131348857b0baefd0f31: + /ts-node/10.7.0_6uz4godwqajrgsefpmf257ipge: resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} hasBin: true peerDependencies: @@ -25135,6 +25090,37 @@ packages: yn: 3.1.1 dev: true + /ts-node/10.7.0_m4jukmwrm5lexlg4qqjj3nxluy: + resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.7.0 + '@swc/core': 1.2.165 + '@tsconfig/node10': 1.0.8 + '@tsconfig/node12': 1.0.9 + '@tsconfig/node14': 1.0.1 + '@tsconfig/node16': 1.0.2 + acorn: 8.7.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.7.0-beta + v8-compile-cache-lib: 3.0.0 + yn: 3.1.1 + dev: true + /ts-node/6.2.0: resolution: {integrity: sha512-ZNT+OEGfUNVMGkpIaDJJ44Zq3Yr0bkU/ugN1PHbU+/01Z7UV1fsELRiTx1KuQNvQ1A3pGh3y25iYF6jXgxV21A==} engines: {node: '>=4.2.0'} @@ -25150,7 +25136,7 @@ packages: yn: 2.0.0 dev: false - /ts-pnp/1.2.0_typescript@4.7.0-beta: + /ts-pnp/1.2.0: resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} engines: {node: '>=6'} peerDependencies: @@ -25158,8 +25144,6 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - typescript: 4.7.0-beta dev: true /ts-results/3.3.0: @@ -25184,7 +25168,7 @@ packages: /tslib/2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - /tslint-eslint-rules/4.1.1_tslint@5.20.1+typescript@2.9.2: + /tslint-eslint-rules/4.1.1_ew7ikuw7vzbxz2yx5mufkmltai: resolution: {integrity: sha1-fDDniC8mvCdr/5HSOEl1xp2viLo=} peerDependencies: tslint: ^5.0.0 @@ -25220,7 +25204,7 @@ packages: typescript: 2.9.2 dev: false - /tss-react/3.6.2_0381be9ef9d4f3389e973d8e2731d4a2: + /tss-react/3.6.2: resolution: {integrity: sha512-+ecQIqCNFVlVJVk3NiCWZY2+5DhVKMVUVxIbEwv9nYsTRQA/KxyKCU8g+KMj5ByqFv9LW76+TUYzbWck/IHkfA==} peerDependencies: '@emotion/react': ^11.4.1 @@ -25231,10 +25215,8 @@ packages: optional: true dependencies: '@emotion/cache': 11.7.1 - '@emotion/react': 11.9.0_@types+react@18.0.2+react@18.0.0 '@emotion/serialize': 1.0.3 '@emotion/utils': 1.1.0 - react: 18.0.0 dev: false /tsutils/1.9.1_typescript@2.9.2: @@ -25254,6 +25236,14 @@ packages: typescript: 2.9.2 dev: false + /tsutils/3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + /tsutils/3.21.0_typescript@4.7.0-beta: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -25262,6 +25252,7 @@ packages: dependencies: tslib: 1.14.1 typescript: 4.7.0-beta + dev: true /tty-browserify/0.0.0: resolution: {integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=} @@ -25343,7 +25334,7 @@ packages: /type/2.5.0: resolution: {integrity: sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==} - /typechain/5.1.2_typescript@4.7.0-beta: + /typechain/5.1.2: resolution: {integrity: sha512-FuaCxJd7BD3ZAjVJoO+D6TnqKey3pQdsqOBsC83RKYWKli5BDhdf0TPkwfyjt20TUlZvOzJifz+lDwXsRkiSKA==} hasBin: true dependencies: @@ -25356,7 +25347,7 @@ packages: lodash: 4.17.21 mkdirp: 1.0.4 prettier: 2.3.2 - ts-essentials: 7.0.2_typescript@4.7.0-beta + ts-essentials: 7.0.2 transitivePeerDependencies: - supports-color - typescript @@ -25404,15 +25395,14 @@ packages: typescript: 2.9.2 dev: false - /typescript-is/0.18.2_typescript@4.7.0-beta: + /typescript-is/0.18.2: resolution: {integrity: sha512-TXgcmHLbuYaKtwyGy/v+oFWi9sIlEUSMcHSuRbIH7OtUuaMP6/bOPwOMDuEVRtGQ62Yx1XMdxFGbax81nXDKjg==} engines: {node: '>=6.14.4'} peerDependencies: typescript: ^4.1.5 dependencies: nested-error-stacks: 2.1.0 - tsutils: 3.21.0_typescript@4.7.0-beta - typescript: 4.7.0-beta + tsutils: 3.21.0 optionalDependencies: reflect-metadata: 0.1.13 dev: false @@ -25723,7 +25713,7 @@ packages: resolution: {integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=} deprecated: Please see https://github.com/lydell/urix#deprecated - /url-loader/4.1.1_file-loader@6.2.0+webpack@4.46.0: + /url-loader/4.1.1_lit45vopotvaqup7lrvlnvtxwy: resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -25780,15 +25770,13 @@ packages: resolution: {integrity: sha512-12c4Vi40DHVdZ/8mOLjZjp0asCzM6hi8Gj116fpImRP1FN4gBMCtMi9XhLNOmre/FEQYNqHbZmX8iyYAtIcy8Q==} dev: false - /use-composed-ref/1.3.0_react@18.0.0: + /use-composed-ref/1.3.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.0.0 dev: true - /use-isomorphic-layout-effect/1.1.2_@types+react@18.0.2+react@18.0.0: + /use-isomorphic-layout-effect/1.1.2: resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -25796,12 +25784,9 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.0.2 - react: 18.0.0 dev: true - /use-latest/1.2.1_@types+react@18.0.2+react@18.0.0: + /use-latest/1.2.1: resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -25810,17 +25795,21 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.0.2 - react: 18.0.0 - use-isomorphic-layout-effect: 1.1.2_@types+react@18.0.2+react@18.0.0 + use-isomorphic-layout-effect: 1.1.2 dev: true - /use-subscription/1.6.0_react@18.0.0: + /use-subscription/1.6.0: + resolution: {integrity: sha512-0Y/cTLlZfw547tJhJMoRA16OUbVqRm6DmvGpiGbmLST6BIA5KU5cKlvlz8DVMrACnWpyEjCkgmhLatthP4jUbA==} + peerDependencies: + react: ^18.0.0 + dev: false + + /use-subscription/1.6.0_react@packages+empty: resolution: {integrity: sha512-0Y/cTLlZfw547tJhJMoRA16OUbVqRm6DmvGpiGbmLST6BIA5KU5cKlvlz8DVMrACnWpyEjCkgmhLatthP4jUbA==} peerDependencies: react: ^18.0.0 dependencies: - react: 18.0.0 + react: link:packages/empty dev: false /use/3.1.1: @@ -26447,7 +26436,7 @@ packages: engines: {node: '>=12'} dev: false - /webpack-cli/4.9.2_0d7fbf49284cee8179ee97aed7cf05b4: + /webpack-cli/4.9.2_bv736sjijtxic6pos6xnptyfwq: resolution: {integrity: sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -26468,9 +26457,9 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.6 - '@webpack-cli/configtest': 1.1.1_webpack-cli@4.9.2+webpack@5.72.0 + '@webpack-cli/configtest': 1.1.1_q7qo2wgeiyigo3znjsjh7f36ue '@webpack-cli/info': 1.4.1_webpack-cli@4.9.2 - '@webpack-cli/serve': 1.6.1_8b27d5839a2bdf89ba2338e4c89fea10 + '@webpack-cli/serve': 1.6.1_rmt5la42fppytordhdsmrh7kca colorette: 2.0.16 commander: 7.2.0 execa: 5.1.1 @@ -26478,8 +26467,8 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d - webpack-dev-server: 4.8.1_webpack-cli@4.9.2+webpack@5.72.0 + webpack: 5.72.0_webpack-cli@4.9.2 + webpack-dev-server: 4.8.1_q7qo2wgeiyigo3znjsjh7f36ue webpack-merge: 5.8.0 dev: true @@ -26522,7 +26511,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 3.1.1 - webpack: 5.72.0_@swc+core@1.2.165 + webpack: 5.72.0 dev: true /webpack-dev-middleware/5.3.1_webpack@5.72.0: @@ -26536,7 +26525,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 dev: true /webpack-dev-server/3.11.3: @@ -26585,7 +26574,7 @@ packages: yargs: 13.3.2 dev: false - /webpack-dev-server/4.8.1_webpack-cli@4.9.2+webpack@5.72.0: + /webpack-dev-server/4.8.1_q7qo2wgeiyigo3znjsjh7f36ue: resolution: {integrity: sha512-dwld70gkgNJa33czmcj/PlKY/nOy/BimbrgZRaR9vDATBQAYgLzggR0nxDtPLJiLrMgZwbE6RRfJ5vnBBasTyg==} engines: {node: '>= 12.13.0'} hasBin: true @@ -26623,8 +26612,8 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d - webpack-cli: 4.9.2_0d7fbf49284cee8179ee97aed7cf05b4 + webpack: 5.72.0_webpack-cli@4.9.2 + webpack-cli: 4.9.2_bv736sjijtxic6pos6xnptyfwq webpack-dev-middleware: 5.3.1_webpack@5.72.0 ws: 8.5.0 transitivePeerDependencies: @@ -26684,7 +26673,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.72.0_d159b08e00e92b5d1326c67bfa14033d + webpack: 5.72.0_webpack-cli@4.9.2 dev: true /webpack-virtual-modules/0.2.2: @@ -26764,6 +26753,46 @@ packages: webpack-sources: 1.4.3 dev: true + /webpack/5.72.0: + resolution: {integrity: sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.3 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.7.0 + acorn-import-assertions: 1.8.0_acorn@8.7.0 + browserslist: 4.20.2 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.9.2 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-better-errors: 1.0.2 + loader-runner: 4.2.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.1_webpack@5.72.0 + watchpack: 2.3.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /webpack/5.72.0_@swc+core@1.2.165: resolution: {integrity: sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==} engines: {node: '>=10.13.0'} @@ -26795,7 +26824,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.1_@swc+core@1.2.165+webpack@5.72.0 + terser-webpack-plugin: 5.3.1_mdkbl4nosxya5aeu2koghccwri watchpack: 2.3.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -26804,7 +26833,7 @@ packages: - uglify-js dev: true - /webpack/5.72.0_d159b08e00e92b5d1326c67bfa14033d: + /webpack/5.72.0_webpack-cli@4.9.2: resolution: {integrity: sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==} engines: {node: '>=10.13.0'} hasBin: true @@ -26835,9 +26864,9 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.1_@swc+core@1.2.165+webpack@5.72.0 + terser-webpack-plugin: 5.3.1_webpack@5.72.0 watchpack: 2.3.1 - webpack-cli: 4.9.2_0d7fbf49284cee8179ee97aed7cf05b4 + webpack-cli: 4.9.2_bv736sjijtxic6pos6xnptyfwq webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -27131,7 +27160,7 @@ packages: utf-8-validate: optional: true - /ws/7.5.7_d6955b83f926115bf12ffeabab6deaae: + /ws/7.5.7_22kvxa7zeyivx4jp72v2w3pkvy: resolution: {integrity: sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==} engines: {node: '>=8.3.0'} peerDependencies: @@ -27159,7 +27188,7 @@ packages: utf-8-validate: optional: true - /ws/8.5.0_bffff4271b89d628e8333ead80d3d8e8: + /ws/8.5.0_x777ijy3rhlcr2bth2wybu6y5a: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -27548,7 +27577,7 @@ packages: dev: true github.com/ProjectOpenSea/wyvern-js/6f85f1b42f0962d2cc8e97b7e7f680865e3f26c1: - resolution: {tarball: https://codeload.github.com/ProjectOpenSea/wyvern-js/tar.gz/6f85f1b42f0962d2cc8e97b7e7f680865e3f26c1} + resolution: {commit: 6f85f1b42f0962d2cc8e97b7e7f680865e3f26c1, repo: git+ssh://git@github.com/ProjectOpenSea/wyvern-js.git, type: git} name: wyvern-js version: 3.2.0 dependencies: @@ -27568,7 +27597,7 @@ packages: dev: false github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e: - resolution: {tarball: https://codeload.github.com/ProjectOpenSea/wyvern-js/tar.gz/fabb7660f23f2252c141077e32193d281036299e} + resolution: {commit: fabb7660f23f2252c141077e32193d281036299e, repo: git+ssh://git@github.com/ProjectOpenSea/wyvern-js.git, type: git} name: wyvern-js version: 3.2.0 dependencies: @@ -27590,7 +27619,7 @@ packages: lodash: 4.17.21 ts-node: 6.2.0 tslint: 5.20.1_typescript@2.9.2 - tslint-eslint-rules: 4.1.1_tslint@5.20.1+typescript@2.9.2 + tslint-eslint-rules: 4.1.1_ew7ikuw7vzbxz2yx5mufkmltai types-bn: 0.0.1 types-ethereumjs-util: 0.0.5 typescript: 2.9.2 @@ -27600,7 +27629,7 @@ packages: dev: false github.com/ProjectOpenSea/wyvern-schemas/e1a08fcf8ce2b11a0fe9cbdc7c9f77c59fadef26: - resolution: {tarball: https://codeload.github.com/ProjectOpenSea/wyvern-schemas/tar.gz/e1a08fcf8ce2b11a0fe9cbdc7c9f77c59fadef26} + resolution: {commit: e1a08fcf8ce2b11a0fe9cbdc7c9f77c59fadef26, repo: git+ssh://git@github.com/ProjectOpenSea/wyvern-schemas.git, type: git} name: wyvern-schemas version: 0.10.7 dependencies: @@ -27615,7 +27644,7 @@ packages: dev: false github.com/ProjectWyvern/ethereumjs-abi/3d2d89641a6ad5984929b6ca4b646452ec74f73d: - resolution: {tarball: https://codeload.github.com/ProjectWyvern/ethereumjs-abi/tar.gz/3d2d89641a6ad5984929b6ca4b646452ec74f73d} + resolution: {commit: 3d2d89641a6ad5984929b6ca4b646452ec74f73d, repo: git+ssh://git@github.com/ProjectWyvern/ethereumjs-abi.git, type: git} name: ethereumjs-abi version: 0.6.6 dependencies: @@ -27624,7 +27653,7 @@ packages: dev: false github.com/ahultgren/async-eventemitter/fa06e39e56786ba541c180061dbf2c0a5bbf951c: - resolution: {tarball: https://codeload.github.com/ahultgren/async-eventemitter/tar.gz/fa06e39e56786ba541c180061dbf2c0a5bbf951c} + resolution: {commit: fa06e39e56786ba541c180061dbf2c0a5bbf951c, repo: git+ssh://git@github.com/ahultgren/async-eventemitter.git, type: git} name: async-eventemitter version: 0.2.3 dependencies: @@ -27632,7 +27661,7 @@ packages: dev: false github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0: - resolution: {tarball: https://codeload.github.com/ethereumjs/ethereumjs-abi/tar.gz/ee3994657fa7a427238e6ba92a84d0b529bbcde0} + resolution: {commit: ee3994657fa7a427238e6ba92a84d0b529bbcde0, repo: git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git, type: git} name: ethereumjs-abi version: 0.6.8 dependencies: @@ -27641,13 +27670,13 @@ packages: dev: false github.com/frozeman/bignumber.js-nolookahead/57692b3ecfc98bbdd6b3a516cb2353652ea49934: - resolution: {tarball: https://codeload.github.com/frozeman/bignumber.js-nolookahead/tar.gz/57692b3ecfc98bbdd6b3a516cb2353652ea49934} + resolution: {commit: 57692b3ecfc98bbdd6b3a516cb2353652ea49934, repo: git+ssh://git@github.com/frozeman/bignumber.js-nolookahead.git, type: git} name: bignumber.js version: 2.0.7 dev: false github.com/locize/html-parse-stringify2/d463109433b2c49c74a081044f54b2a6a1ccad7c: - resolution: {tarball: https://codeload.github.com/locize/html-parse-stringify2/tar.gz/d463109433b2c49c74a081044f54b2a6a1ccad7c} + resolution: {commit: d463109433b2c49c74a081044f54b2a6a1ccad7c, repo: git+ssh://git@github.com/locize/html-parse-stringify2.git, type: git} name: html-parse-stringify2 version: 2.0.1 dependencies: From 18eb26cd98505f358e8613e8ebfd423cead7be00 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 6 May 2022 15:27:10 +0800 Subject: [PATCH 33/44] chore: scroll for testing --- packages/mask/package.json | 1 + .../components/shared/ApplicationBoard.tsx | 48 +++++- .../shared/assets/react-carousel.es.css | 152 ++++++++++++++++++ .../UI/components/ApplicationEntry/index.tsx | 4 +- pnpm-lock.yaml | 40 ++++- 5 files changed, 233 insertions(+), 12 deletions(-) create mode 100644 packages/mask/src/components/shared/assets/react-carousel.es.css diff --git a/packages/mask/package.json b/packages/mask/package.json index 1ee15ff131aa..850601a5f373 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -97,6 +97,7 @@ "millify": "^4.0.0", "next-tick": "^1.0.0", "opensea-js": "^1.2.7", + "pure-react-carousel": "^1.28.1", "promievent": "^0.1.4", "protobufjs": "^6.11.2", "react-dnd": "^16.0.1", diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index ebc4beb1f3c9..a9a5943ffb2f 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,6 +1,6 @@ -import { useContext, createContext, PropsWithChildren, useMemo, useCallback } from 'react' +import { useContext, createContext, PropsWithChildren, useMemo, useCallback, useState } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' -import { Typography, Box } from '@mui/material' +import { Typography } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount, NetworkPluginID } from '@masknet/plugin-infra/web3' @@ -14,6 +14,7 @@ import { useNextIDConnectStatus } from '../DataSource/useNextID' import { usePersonaConnectStatus, usePersonaAgainstSNSConnectStatus } from '../DataSource/usePersonaConnectStatus' import { WalletMessages } from '../../plugins/Wallet/messages' import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' +import { CarouselProvider, Slider, Slide } from 'pure-react-carousel' const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { const smallQuery = `@media (max-width: ${theme.breakpoints.values.sm}px)` @@ -79,6 +80,17 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { display: 'none', }, }, + carousel: { + height: 130, + overflowX: 'scroll !important', + '& .carousel__slider': { + padding: '8px 2px 0px', + overflowX: 'scroll !important', + '&::-webkit-scrollbar': { + display: 'none', + }, + }, + }, } }) @@ -136,16 +148,38 @@ function ApplicationBoardContent(props: Props) { .filter((x) => Boolean(x.entry.RenderEntryComponent)), [snsAdaptorPlugins, currentWeb3Network, chainId, account], ) + + const [isPlaying, setPlaying] = useState(true) const recommendFeatureAppList = applicationList.filter((x) => x.entry.recommendFeature) + const [sliderList] = useState( + recommendFeatureAppList.concat(recommendFeatureAppList).concat(recommendFeatureAppList), + ) + const listedAppList = applicationList.filter((x) => !x.entry.recommendFeature).filter((x) => !getUnlistedApp(x)) const { classes } = useStyles({ shouldScroll: listedAppList.length > 12 }) return ( <> - - {recommendFeatureAppList.map((application) => ( - - ))} - + + + setPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> + {sliderList.map((application, i) => ( + + + + ))} + + {listedAppList.length > 0 ? (
diff --git a/packages/mask/src/components/shared/assets/react-carousel.es.css b/packages/mask/src/components/shared/assets/react-carousel.es.css new file mode 100644 index 000000000000..6791b4cc66cd --- /dev/null +++ b/packages/mask/src/components/shared/assets/react-carousel.es.css @@ -0,0 +1,152 @@ +.buttonBack___1mlaL, +.buttonFirst___2rhFr, +.buttonLast___2yuh0, +.buttonNext___2mOCa, +.buttonNext___3Lm3s, +.dot___3c3SI { + cursor: pointer; +} +.image___xtQGH { + display: block; + width: 100%; + height: 100%; +} +.spinner___27VUp { + position: absolute; + top: calc(50% - 15px); + left: calc(50% - 15px); + width: 30px; + height: 30px; + animation-name: spin___S3UuE; + animation-duration: 1s; + animation-timing-function: linear; + animation-iteration-count: infinite; + border: 4px solid #a9a9a9; + border-top-color: #000; + border-radius: 30px; +} +@keyframes spin___S3UuE { + 0% { + transform: rotate(0deg); + } + to { + transform: rotate(1turn); + } +} +.container___2O72F { + position: relative; + overflow: hidden; + height: 100%; + width: 100%; +} +.overlay___IV4qY { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + opacity: 0; + cursor: zoom-in; + transition: opacity 0.3s, transform 0.3s; +} +.hover___MYy31, +.loading___1pvNI, +.zoom___3kqYk { + opacity: 1; +} +.imageLoadingSpinnerContainer___3UIPD { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #f4f4f4; +} +.slide___3-Nqo { + position: relative; + display: block; + box-sizing: border-box; + height: 0; + margin: 0; + list-style-type: none; +} +.slide___3-Nqo:focus { + outline: none !important; +} +.slideHorizontal___1NzNV { + float: left; +} +[dir='rtl'] .slideHorizontal___1NzNV { + direction: rtl; + transform: scaleX(-1); +} +.slideInner___2mfX9 { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.focusRing___1airF { + position: absolute; + top: 5px; + right: 5px; + bottom: 5px; + left: 5px; + pointer-events: none; + outline-width: 5px; + outline-style: solid; + outline-color: Highlight; +} +@media (-webkit-min-device-pixel-ratio: 0) { + .focusRing___1airF { + outline-style: auto; + outline-color: -webkit-focus-ring-color; + } +} +.horizontalSlider___281Ls { + position: relative; + overflow: hidden; + height: 130px; +} +[dir='rtl'] .horizontalSlider___281Ls { + direction: ltr; + transform: scaleX(-1); +} +.horizontalSliderTray___1L-0W { + overflow: hidden; + width: 100%; +} +.verticalSlider___34ZFD { + position: relative; + overflow: hidden; +} +.verticalSliderTray___267D8 { + overflow: hidden; +} +.verticalTray___12Key { + float: left; +} +.verticalSlideTrayWrap___2nO7o { + overflow: hidden; +} +.sliderTray___-vHFQ { + display: block; + list-style: none; + padding: 0; + margin: 0; +} +.sliderAnimation___300FY { + transition: transform 0.5s; + transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1); + will-change: transform; +} +.masterSpinnerContainer___1Z6hB { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: #f4f4f4; +} +/*# sourceMappingURL=react-carousel.es.css.map */ diff --git a/packages/shared/src/UI/components/ApplicationEntry/index.tsx b/packages/shared/src/UI/components/ApplicationEntry/index.tsx index c6c62abc80fa..17f93f2f71b8 100644 --- a/packages/shared/src/UI/components/ApplicationEntry/index.tsx +++ b/packages/shared/src/UI/components/ApplicationEntry/index.tsx @@ -41,8 +41,8 @@ const useStyles = makeStyles<{ disabled: boolean }>()((theme, { disabled }) => ( }, }, recommendFeatureApplicationBox: { - width: 220, - minWidth: 220, + width: 225, + minWidth: 225, height: 97, marginRight: 12, cursor: 'pointer', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2cf2a7cedbb..e0f1dc77b06f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -406,6 +406,7 @@ importers: opensea-js: ^1.2.7 promievent: ^0.1.4 protobufjs: ^6.11.2 + pure-react-carousel: ^1.28.1 react-devtools-core: ^4.24.4 react-dnd: ^16.0.1 react-dnd-html5-backend: ^16.0.1 @@ -543,6 +544,7 @@ importers: opensea-js: 1.2.7 promievent: 0.1.5 protobufjs: 6.11.2 + pure-react-carousel: 1.28.1 react-dnd: 16.0.1_@types+node@17.0.26 react-dnd-html5-backend: 16.0.1 react-draggable: 4.4.4 @@ -13592,6 +13594,10 @@ packages: regexp.prototype.flags: 1.4.3 dev: false + /deep-freeze/0.0.1: + resolution: {integrity: sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=} + dev: false + /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -13599,6 +13605,11 @@ packages: resolution: {integrity: sha512-QkgBca0mL08P6HiOjoqvmm6xOAl2W6CT2+34Ljhg0OeFan8cwlcdq8jrLKsBBuUFAZLsN5b6y491KdKEoSo9lg==} dev: true + /deepmerge/2.2.1: + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} + dev: false + /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} engines: {node: '>=0.10.0'} @@ -14304,6 +14315,12 @@ packages: hasBin: true dev: true + /equals/1.0.5: + resolution: {integrity: sha1-ISBi3eXhpRDZVfE1mO/MamIbas4=} + dependencies: + jkroso-type: 1.1.1 + dev: false + /err-code/3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} dev: false @@ -18775,6 +18792,10 @@ packages: - ts-node dev: true + /jkroso-type/1.1.1: + resolution: {integrity: sha1-vEztbWxF/gdFKCuvyGqfjE/JzmE=} + dev: false + /joi/17.6.0: resolution: {integrity: sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==} dependencies: @@ -20733,7 +20754,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -21852,6 +21873,19 @@ packages: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} + /pure-react-carousel/1.28.1: + resolution: {integrity: sha512-adOMhlGLxHiQxHwJvBgFJ6SXTM2UPuMv6tO10wsJzvQCdnCXcN5bRYIem5f55WQpwr9X0Bbb9ORw41KbGpAJWQ==} + peerDependencies: + react: 15.x || 16.x || 17.x + react-dom: 15.x || 16.x || 17.x + dependencies: + '@babel/runtime': 7.17.9 + deep-freeze: 0.0.1 + deepmerge: 2.2.1 + equals: 1.0.5 + prop-types: 15.8.1 + dev: false + /pvtsutils/1.2.1: resolution: {integrity: sha512-Q867jEr30lBR2YSFFLZ0/XsEvpweqH6Kj096wmlRAFXrdRGPCNq2iz9B5Tk085EZ+OBZyYAVA5UhPkjSHGrUzQ==} dependencies: @@ -24207,13 +24241,13 @@ packages: resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 /string.prototype.trimstart/1.0.4: resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 /string_decoder/0.10.31: resolution: {integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=} From 795a44c2c74ce127ba24d29fd6b94ab9414bdda8 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 6 May 2022 15:39:14 +0800 Subject: [PATCH 34/44] chore: spell --- cspell.json | 1 + 1 file changed, 1 insertion(+) diff --git a/cspell.json b/cspell.json index e4212a7b6756..fdd99f9a174c 100644 --- a/cspell.json +++ b/cspell.json @@ -384,6 +384,7 @@ "txreceipt", "txts", "uaddr", + "uipd", "unauthenticate", "unitoken", "unlocklock", From 84d459e387bd7347479f56dd427b1e173e8afb3f Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 6 May 2022 15:41:27 +0800 Subject: [PATCH 35/44] chore: little fix --- packages/mask/shared-ui/locales/en-US.json | 2 +- .../mask/src/components/InjectedComponents/ToolboxUnstyled.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index f5ac3cffd2d8..a6a17759de00 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -309,7 +309,7 @@ "plugin_wallet_on_create": "Create Wallet", "plugin_wallet_on_connect": "Connect Wallet", "plugin_wallet_wrong_network": "Wrong Network", - "plugin_wallet_pending_transactions": "{{count}} Pending", + "plugin_wallet_pending_transactions": "{{count}} Pending{{plural}}", "plugin_wallet_import_wallet": "Import Wallet", "plugin_wallet_select_provider_dialog_title": "Connect Wallet", "plugin_wallet_qr_code_with_wallet_connect": "Scan QR code with a WalletConnect-compatible wallet", diff --git a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx index ba94cea7a5a1..c2e6530ba5df 100644 --- a/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx +++ b/packages/mask/src/components/InjectedComponents/ToolboxUnstyled.tsx @@ -240,6 +240,7 @@ function useToolbox() { {t('plugin_wallet_pending_transactions', { count: pendingTransactions.length, + plural: pendingTransactions.length > 1 ? 's' : '', })} From 3a1d2ea1223d749ab8a74c3f3fc7fffc13056e6f Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 6 May 2022 15:58:15 +0800 Subject: [PATCH 36/44] chore: remove debug code --- .../mask/src/components/CompositionDialog/CompositionUI.tsx | 5 ----- packages/mask/src/components/CompositionDialog/useSubmit.ts | 1 - 2 files changed, 6 deletions(-) diff --git a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx index 9cb25f1c1797..6d227566ef2b 100644 --- a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx +++ b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx @@ -156,11 +156,6 @@ export const CompositionDialogUI = forwardRef( const onSubmit = useCallback(() => { if (!Editor.current) return setSending(true) - console.log({ - editor: Editor.current.value, - encryptionKind, - onSubmit: props.onSubmit, - }) props .onSubmit({ content: Editor.current.value, diff --git a/packages/mask/src/components/CompositionDialog/useSubmit.ts b/packages/mask/src/components/CompositionDialog/useSubmit.ts index 261063922da0..3e87e8c4a03c 100644 --- a/packages/mask/src/components/CompositionDialog/useSubmit.ts +++ b/packages/mask/src/components/CompositionDialog/useSubmit.ts @@ -17,7 +17,6 @@ export function useSubmit(onClose: () => void, reason: 'timeline' | 'popup' | 'r return useCallback( async (info: SubmitComposition) => { const { content, encode, target } = info - console.log({ whoAmI, profiles: globalUIState.profiles }) const currentProfile = globalUIState.profiles.value?.[0].identifier const _encrypted = await Services.Crypto.encryptTo(content, target, whoAmI?.identifier ?? currentProfile) From 8b81d3ba008ecb8a101e8b15fbe1389005557d8a Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Fri, 6 May 2022 16:01:51 +0800 Subject: [PATCH 37/44] chore: solve type error --- packages/mask/src/components/shared/ApplicationBoard.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index a9a5943ffb2f..01e3de936f1c 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -82,10 +82,10 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { }, carousel: { height: 130, - overflowX: 'scroll !important', + overflowX: 'scroll', '& .carousel__slider': { padding: '8px 2px 0px', - overflowX: 'scroll !important', + overflowX: 'scroll', '&::-webkit-scrollbar': { display: 'none', }, From e972a096624091bac357ba4f2bdb68ebd3c2827e Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sat, 7 May 2022 16:41:00 +0800 Subject: [PATCH 38/44] chore: prevent scroll parent --- packages/mask/src/components/shared/ApplicationBoard.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 01e3de936f1c..8b7fbb1ccc9b 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -83,8 +83,10 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { carousel: { height: 130, overflowX: 'scroll', + overscrollBehavior: 'contain', '& .carousel__slider': { padding: '8px 2px 0px', + overscrollBehavior: 'contain', overflowX: 'scroll', '&::-webkit-scrollbar': { display: 'none', From 12edbe30e61c1c048c2e3fb1c0ef1b89fdb19a9e Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sat, 7 May 2022 17:24:03 +0800 Subject: [PATCH 39/44] fix: style --- .../shared/src/contexts/components/InjectedDialog.tsx | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/shared/src/contexts/components/InjectedDialog.tsx b/packages/shared/src/contexts/components/InjectedDialog.tsx index 8677e92dfc99..94eecb111da2 100644 --- a/packages/shared/src/contexts/components/InjectedDialog.tsx +++ b/packages/shared/src/contexts/components/InjectedDialog.tsx @@ -27,14 +27,6 @@ const useStyles = makeStyles()((theme, { clean }) => ({ dialogTitle: { padding: theme.spacing(1, 2), whiteSpace: 'nowrap', - gridTemplateColumns: '50px auto 50px', - }, - dialogTitleTail: { - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - minWidth: 46, - minHeight: 46, }, dialogContent: { overscrollBehavior: 'contain', @@ -153,7 +145,7 @@ export function InjectedDialog(props: InjectedDialogProps) { {title} -
{titleTail}
+ {titleTail} ) : null} From 9b2db6d14d058185e0a06e69fcca5fe9001dd3b2 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Sun, 8 May 2022 12:33:02 +0800 Subject: [PATCH 40/44] chore: remove code for test --- .../components/shared/ApplicationBoard.tsx | 51 ++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 8b7fbb1ccc9b..58ffb6595f76 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,6 +1,6 @@ import { useContext, createContext, PropsWithChildren, useMemo, useCallback, useState } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' -import { Typography } from '@mui/material' +import { Typography, Box } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount, NetworkPluginID } from '@masknet/plugin-infra/web3' @@ -153,35 +153,40 @@ function ApplicationBoardContent(props: Props) { const [isPlaying, setPlaying] = useState(true) const recommendFeatureAppList = applicationList.filter((x) => x.entry.recommendFeature) - const [sliderList] = useState( - recommendFeatureAppList.concat(recommendFeatureAppList).concat(recommendFeatureAppList), - ) const listedAppList = applicationList.filter((x) => !x.entry.recommendFeature).filter((x) => !getUnlistedApp(x)) const { classes } = useStyles({ shouldScroll: listedAppList.length > 12 }) return ( <> - - setPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> - {sliderList.map((application, i) => ( - - - + {recommendFeatureAppList.length > 2 ? ( + + setPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> + {recommendFeatureAppList.map((application, i) => ( + + + + ))} + + + ) : ( + + {recommendFeatureAppList.map((application) => ( + ))} - - + + )} {listedAppList.length > 0 ? (
From d5577f665e15389854c7ad372871ea45c6673706 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Mon, 9 May 2022 12:11:09 +0800 Subject: [PATCH 41/44] chore: reply code review --- .../DataSource/usePersonaConnectStatus.ts | 9 ++- .../components/shared/ApplicationBoard.tsx | 50 +++--------- .../shared/ApplicationRecommendArea.tsx | 77 +++++++++++++++++++ 3 files changed, 92 insertions(+), 44 deletions(-) create mode 100644 packages/mask/src/components/shared/ApplicationRecommendArea.tsx diff --git a/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts b/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts index 1c13ee9ff14f..36e1791e6d09 100644 --- a/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts +++ b/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts @@ -53,10 +53,11 @@ export function usePersonaAgainstSNSConnectStatus() { }, [lastState, lastRecognized]) const personas = useMyPersonas() - const checkSNSConnectToCurrentPersona = useCallback((persona: PersonaInformation) => { - if (!username) return undefined - return persona.linkedProfiles.some((x) => x.identifier.userId === username) - }, []) + const checkSNSConnectToCurrentPersona = useCallback( + (persona: PersonaInformation) => + username ? persona.linkedProfiles.some((x) => x.identifier.userId === username) : false, + [username], + ) return useAsync(async () => { const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 58ffb6595f76..d82501a87cdb 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,6 +1,6 @@ -import { useContext, createContext, PropsWithChildren, useMemo, useCallback, useState } from 'react' +import { useContext, createContext, PropsWithChildren, useMemo, useCallback } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' -import { Typography, Box } from '@mui/material' +import { Typography } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount, NetworkPluginID } from '@masknet/plugin-infra/web3' @@ -9,12 +9,12 @@ import { getCurrentSNSNetwork } from '../../social-network-adaptor/utils' import { activatedSocialNetworkUI } from '../../social-network' import { useI18N } from '../../utils' import { Application, getUnlistedApp } from './ApplicationSettingPluginList' +import { ApplicationRecommendArea } from './ApplicationRecommendArea' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { useNextIDConnectStatus } from '../DataSource/useNextID' import { usePersonaConnectStatus, usePersonaAgainstSNSConnectStatus } from '../DataSource/usePersonaConnectStatus' import { WalletMessages } from '../../plugins/Wallet/messages' import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' -import { CarouselProvider, Slider, Slide } from 'pure-react-carousel' const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { const smallQuery = `@media (max-width: ${theme.breakpoints.values.sm}px)` @@ -151,42 +151,16 @@ function ApplicationBoardContent(props: Props) { [snsAdaptorPlugins, currentWeb3Network, chainId, account], ) - const [isPlaying, setPlaying] = useState(true) const recommendFeatureAppList = applicationList.filter((x) => x.entry.recommendFeature) const listedAppList = applicationList.filter((x) => !x.entry.recommendFeature).filter((x) => !getUnlistedApp(x)) const { classes } = useStyles({ shouldScroll: listedAppList.length > 12 }) return ( <> - - {recommendFeatureAppList.length > 2 ? ( - - setPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> - {recommendFeatureAppList.map((application, i) => ( - - - - ))} - - - ) : ( - - {recommendFeatureAppList.map((application) => ( - - ))} - - )} + {listedAppList.length > 0 ? (
@@ -205,11 +179,7 @@ function ApplicationBoardContent(props: Props) { ) } -interface RenderEntryComponentProps { - application: Application -} - -function RenderEntryComponent({ application }: RenderEntryComponentProps) { +function RenderEntryComponent({ application }: { application: Application }) { const Entry = application.entry.RenderEntryComponent! const { t } = useI18N() const { openDialog: openSelectProviderDialog } = useRemoteControlledDialog( @@ -262,7 +232,7 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { const tooltipHint = useMemo(() => { if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') if (application.isWalletConnectedEVMRequired) return t('application_tooltip_hint_switch_to_evm_wallet') - if (!application.entry.nextIdRequired) return undefined + if (!application.entry.nextIdRequired) return if (ApplicationEntryStatus.isPersonaCreated === false && !disabled) return t('application_tooltip_hint_create_persona') if (ApplicationEntryStatus.isPersonaConnected === false && !disabled) @@ -279,7 +249,7 @@ function RenderEntryComponent({ application }: RenderEntryComponentProps) { 4, ), }) - return undefined + return }, [application, ApplicationEntryStatus, disabled]) // #endregion diff --git a/packages/mask/src/components/shared/ApplicationRecommendArea.tsx b/packages/mask/src/components/shared/ApplicationRecommendArea.tsx new file mode 100644 index 000000000000..ca5488f0cda2 --- /dev/null +++ b/packages/mask/src/components/shared/ApplicationRecommendArea.tsx @@ -0,0 +1,77 @@ +import { Box } from '@mui/material' +import { useState } from 'react' +import { makeStyles } from '@masknet/theme' +import type { Application } from './ApplicationSettingPluginList' +import { CarouselProvider, Slider, Slide } from 'pure-react-carousel' + +const useStyles = makeStyles()(() => { + return { + recommendFeatureAppListWrapper: { + display: 'flex', + overflowX: 'scroll', + margin: '0px 2px 4px 2px', + padding: '8px 2px 0 2px', + '&::-webkit-scrollbar': { + display: 'none', + }, + }, + carousel: { + height: 130, + overflowX: 'scroll', + overscrollBehavior: 'contain', + '& .carousel__slider': { + padding: '8px 2px 0px', + overscrollBehavior: 'contain', + overflowX: 'scroll', + '&::-webkit-scrollbar': { + display: 'none', + }, + }, + }, + } +}) + +interface Props { + recommendFeatureAppList: Application[] + RenderEntryComponent: (props: { application: Application }) => JSX.Element +} + +export function ApplicationRecommendArea(props: Props) { + const { recommendFeatureAppList, RenderEntryComponent } = props + const { classes } = useStyles() + const [isPlaying, setIsPlaying] = useState(true) + + return ( + <> + + {recommendFeatureAppList.length > 2 ? ( + + setIsPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> + {recommendFeatureAppList.map((application, i) => ( + + + + ))} + + + ) : ( + + {recommendFeatureAppList.map((application) => ( + + ))} + + )} + + ) +} From 08cff120452f5f3ee92d0eb173d9ed865212549d Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Mon, 9 May 2022 15:02:00 +0800 Subject: [PATCH 42/44] chore: reply code review --- .../usePersonaAgainstSNSConnectStatus.ts | 40 +++++++++++++++++++ .../DataSource/usePersonaConnectStatus.ts | 38 +----------------- .../components/shared/ApplicationBoard.tsx | 27 +++++++------ .../FileService/src/SNSAdaptor/index.tsx | 2 +- .../GoPlusSecurity/src/SNSAdaptor/index.tsx | 2 +- 5 files changed, 58 insertions(+), 51 deletions(-) create mode 100644 packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts diff --git a/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts b/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts new file mode 100644 index 000000000000..97df565ccbfb --- /dev/null +++ b/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts @@ -0,0 +1,40 @@ +import type { PersonaInformation, NextIDPlatform } from '@masknet/shared-base' +import { useAsync } from 'react-use' +import { useMemo, useCallback } from 'react' +import Services from '../../extension/service' +import { activatedSocialNetworkUI } from '../../social-network' +import { useLastRecognizedIdentity } from './useActivatedUI' +import { useMyPersonas } from './useMyPersonas' +import { useSetupGuideStatusState } from './useNextID' +import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' + +export function usePersonaAgainstSNSConnectStatus() { + const ui = activatedSocialNetworkUI + const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform + const lastState = useSetupGuideStatusState() + const { currentPersona } = PersonaContext.useContainer() + const lastRecognized = useLastRecognizedIdentity() + const username = useMemo(() => { + return lastState.username || lastRecognized.identifier?.userId + }, [lastState, lastRecognized]) + const personas = useMyPersonas() + + const checkSNSConnectToCurrentPersona = useCallback( + (persona: PersonaInformation) => + username ? persona.linkedProfiles.some((x) => x.identifier.userId === username) : false, + [username], + ) + + return useAsync(async () => { + const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() + const currentPersona = (await Services.Identity.queryOwnedPersonaInformation(true)).find( + (x) => x.identifier === currentPersonaIdentifier, + ) + const currentSNSConnectedPersona = personas.find(checkSNSConnectToCurrentPersona) + return { + isSNSConnectToCurrentPersona: currentPersona ? checkSNSConnectToCurrentPersona(currentPersona) : false, + currentPersonaPublicKey: currentPersona?.identifier.rawPublicKey, + currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.identifier.rawPublicKey, + } + }, [platform, username, ui, personas, currentPersona]) +} diff --git a/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts b/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts index 36e1791e6d09..aff3f7fa6499 100644 --- a/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts +++ b/packages/mask/src/components/DataSource/usePersonaConnectStatus.ts @@ -1,15 +1,12 @@ -import { DashboardRoutes, PersonaInformation, NextIDPlatform } from '@masknet/shared-base' +import { DashboardRoutes, PersonaInformation } from '@masknet/shared-base' import stringify from 'json-stable-stringify' -import { useAsync } from 'react-use' -import { useMemo, useCallback } from 'react' +import { useMemo } from 'react' import Services from '../../extension/service' import { currentSetupGuideStatus } from '../../settings/settings' import { activatedSocialNetworkUI } from '../../social-network' import { SetupGuideStep } from '../InjectedComponents/SetupGuide/types' import { useLastRecognizedIdentity } from './useActivatedUI' import { useMyPersonas } from './useMyPersonas' -import { useSetupGuideStatusState } from './useNextID' -import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' const createPersona = () => { Services.Helper.openDashboard(DashboardRoutes.Setup) @@ -41,34 +38,3 @@ export function usePersonaConnectStatus() { return { connected, action, hasPersona: !!personas.length, currentConnectedPersona } }, [personas, lastRecognized, activatedSocialNetworkUI]) } - -export function usePersonaAgainstSNSConnectStatus() { - const ui = activatedSocialNetworkUI - const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform - const lastState = useSetupGuideStatusState() - const { currentPersona } = PersonaContext.useContainer() - const lastRecognized = useLastRecognizedIdentity() - const username = useMemo(() => { - return lastState.username || lastRecognized.identifier?.userId - }, [lastState, lastRecognized]) - const personas = useMyPersonas() - - const checkSNSConnectToCurrentPersona = useCallback( - (persona: PersonaInformation) => - username ? persona.linkedProfiles.some((x) => x.identifier.userId === username) : false, - [username], - ) - - return useAsync(async () => { - const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() - const currentPersona = (await Services.Identity.queryOwnedPersonaInformation(true)).find( - (x) => x.identifier === currentPersonaIdentifier, - ) - const currentSNSConnectedPersona = personas.find(checkSNSConnectToCurrentPersona) - return { - isSNSConnectToCurrentPersona: currentPersona ? checkSNSConnectToCurrentPersona(currentPersona) : false, - currentPersonaPublicKey: currentPersona?.identifier.rawPublicKey, - currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.identifier.rawPublicKey, - } - }, [platform, username, ui, personas, currentPersona]) -} diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index d82501a87cdb..4a266dc6222c 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -12,7 +12,8 @@ import { Application, getUnlistedApp } from './ApplicationSettingPluginList' import { ApplicationRecommendArea } from './ApplicationRecommendArea' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { useNextIDConnectStatus } from '../DataSource/useNextID' -import { usePersonaConnectStatus, usePersonaAgainstSNSConnectStatus } from '../DataSource/usePersonaConnectStatus' +import { usePersonaConnectStatus } from '../DataSource/usePersonaConnectStatus' +import { usePersonaAgainstSNSConnectStatus } from '../DataSource/usePersonaAgainstSNSConnectStatus' import { WalletMessages } from '../../plugins/Wallet/messages' import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' @@ -216,20 +217,20 @@ function RenderEntryComponent({ application }: { application: Application }) { CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) }, []) - const clickHandler = - application.isWalletConnectedRequired || application.isWalletConnectedEVMRequired - ? openSelectProviderDialog - : !application.entry.nextIdRequired - ? undefined - : ApplicationEntryStatus.isPersonaConnected === false || ApplicationEntryStatus.isPersonaCreated === false - ? createOrConnectPersona - : ApplicationEntryStatus.shouldVerifyNextId - ? verifyPersona - : undefined + const clickHandler = (() => { + if (application.isWalletConnectedRequired || application.isWalletConnectedEVMRequired) + return openSelectProviderDialog + if (!application.entry.nextIdRequired) return + if (ApplicationEntryStatus.isPersonaConnected === false || ApplicationEntryStatus.isPersonaCreated === false) + return createOrConnectPersona + if (ApplicationEntryStatus.shouldVerifyNextId) return verifyPersona + return + })() + // #endregion // #region tooltip hint - const tooltipHint = useMemo(() => { + const tooltipHint = (() => { if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') if (application.isWalletConnectedEVMRequired) return t('application_tooltip_hint_switch_to_evm_wallet') if (!application.entry.nextIdRequired) return @@ -250,7 +251,7 @@ function RenderEntryComponent({ application }: { application: Application }) { ), }) return - }, [application, ApplicationEntryStatus, disabled]) + })() // #endregion return diff --git a/packages/plugins/FileService/src/SNSAdaptor/index.tsx b/packages/plugins/FileService/src/SNSAdaptor/index.tsx index ecc4c9a8591e..8763125cbfd9 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/index.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/index.tsx @@ -36,7 +36,7 @@ const definition: Plugin.SNSAdaptor.Definition = { ApplicationEntries: [ (() => { const icon = - const name = { fallback: 'File Service' } + const name = { i18nKey: '__plugin_name', fallback: 'File Service' } return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx index 167b6dceedbf..1a7a963e487b 100644 --- a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx @@ -12,7 +12,7 @@ const sns: Plugin.SNSAdaptor.Definition = { ApplicationEntries: [ (() => { const icon = - const name = { fallback: 'Check Security' } + const name = { i18nKey: '__plugin_name', fallback: 'Check Security' } return { ApplicationEntryID: base.ID, From 0b834ed946be8dfcde4d04a1314ca3ba074e81a7 Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 10 May 2022 13:49:29 +0800 Subject: [PATCH 43/44] chore: reply code review --- .../usePersonaAgainstSNSConnectStatus.ts | 18 ++++++------------ .../src/components/shared/ApplicationBoard.tsx | 10 ++++++++-- .../shared/ApplicationRecommendArea.tsx | 5 +---- .../CrossChainBridge/src/SNSAdaptor/index.tsx | 2 +- .../src/contexts/components/InjectedDialog.tsx | 2 -- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts b/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts index 97df565ccbfb..146f28b92f5b 100644 --- a/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts +++ b/packages/mask/src/components/DataSource/usePersonaAgainstSNSConnectStatus.ts @@ -1,31 +1,25 @@ import type { PersonaInformation, NextIDPlatform } from '@masknet/shared-base' -import { useAsync } from 'react-use' -import { useMemo, useCallback } from 'react' +import { useAsyncRetry } from 'react-use' +import { useMemo } from 'react' import Services from '../../extension/service' import { activatedSocialNetworkUI } from '../../social-network' import { useLastRecognizedIdentity } from './useActivatedUI' import { useMyPersonas } from './useMyPersonas' import { useSetupGuideStatusState } from './useNextID' -import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' export function usePersonaAgainstSNSConnectStatus() { const ui = activatedSocialNetworkUI const platform = ui.configuration.nextIDConfig?.platform as NextIDPlatform const lastState = useSetupGuideStatusState() - const { currentPersona } = PersonaContext.useContainer() const lastRecognized = useLastRecognizedIdentity() const username = useMemo(() => { return lastState.username || lastRecognized.identifier?.userId }, [lastState, lastRecognized]) const personas = useMyPersonas() - const checkSNSConnectToCurrentPersona = useCallback( - (persona: PersonaInformation) => - username ? persona.linkedProfiles.some((x) => x.identifier.userId === username) : false, - [username], - ) - - return useAsync(async () => { + return useAsyncRetry(async () => { + const checkSNSConnectToCurrentPersona = (persona: PersonaInformation) => + username ? persona.linkedProfiles.some((x) => x.identifier.userId === username) : false const currentPersonaIdentifier = await Services.Settings.getCurrentPersonaIdentifier() const currentPersona = (await Services.Identity.queryOwnedPersonaInformation(true)).find( (x) => x.identifier === currentPersonaIdentifier, @@ -36,5 +30,5 @@ export function usePersonaAgainstSNSConnectStatus() { currentPersonaPublicKey: currentPersona?.identifier.rawPublicKey, currentSNSConnectedPersonaPublicKey: currentSNSConnectedPersona?.identifier.rawPublicKey, } - }, [platform, username, ui, personas, currentPersona]) + }, [platform, username, ui, personas]) } diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 4a266dc6222c..d2f469ef9d60 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -1,4 +1,4 @@ -import { useContext, createContext, PropsWithChildren, useMemo, useCallback } from 'react' +import { useContext, createContext, PropsWithChildren, useMemo, useCallback, useEffect } from 'react' import { makeStyles, getMaskColor } from '@masknet/theme' import { Typography } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' @@ -16,6 +16,7 @@ import { usePersonaConnectStatus } from '../DataSource/usePersonaConnectStatus' import { usePersonaAgainstSNSConnectStatus } from '../DataSource/usePersonaAgainstSNSConnectStatus' import { WalletMessages } from '../../plugins/Wallet/messages' import { PersonaContext } from '../../extension/popups/pages/Personas/hooks/usePersonaContext' +import { MaskMessages } from '../../../shared' const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { const smallQuery = `@media (max-width: ${theme.breakpoints.values.sm}px)` @@ -285,7 +286,12 @@ function ApplicationEntryStatusProvider(props: PropsWithChildren<{}>) { const personaConnectStatus = usePersonaConnectStatus() const nextIDConnectStatus = useNextIDConnectStatus() - const { value: ApplicationCurrentStatus } = usePersonaAgainstSNSConnectStatus() + const { value: ApplicationCurrentStatus, retry } = usePersonaAgainstSNSConnectStatus() + + useEffect(() => { + return MaskMessages.events.currentPersonaIdentifier.on(retry) + }, []) + const { isSNSConnectToCurrentPersona, currentPersonaPublicKey, currentSNSConnectedPersonaPublicKey } = ApplicationCurrentStatus ?? {} diff --git a/packages/mask/src/components/shared/ApplicationRecommendArea.tsx b/packages/mask/src/components/shared/ApplicationRecommendArea.tsx index ca5488f0cda2..5f605fbc67ad 100644 --- a/packages/mask/src/components/shared/ApplicationRecommendArea.tsx +++ b/packages/mask/src/components/shared/ApplicationRecommendArea.tsx @@ -57,10 +57,7 @@ export function ApplicationRecommendArea(props: Props) { setIsPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> {recommendFeatureAppList.map((application, i) => ( - + ))} diff --git a/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx b/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx index 7b4a1f1ab652..09511e7f3052 100644 --- a/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx +++ b/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx @@ -12,7 +12,7 @@ const sns: Plugin.SNSAdaptor.Definition = { ApplicationEntries: [ (() => { const icon = - const name = { fallback: 'Cross-bridge' } + const name = { i18nKey: '__plugin_name', fallback: 'Cross-chain' } return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { diff --git a/packages/shared/src/contexts/components/InjectedDialog.tsx b/packages/shared/src/contexts/components/InjectedDialog.tsx index 94eecb111da2..88c79ca6dac1 100644 --- a/packages/shared/src/contexts/components/InjectedDialog.tsx +++ b/packages/shared/src/contexts/components/InjectedDialog.tsx @@ -48,7 +48,6 @@ const useStyles = makeStyles()((theme, { clean }) => ({ export type InjectedDialogClassKey = | DialogClassKey | 'dialogTitle' - | 'dialogTitleTail' | 'dialogContent' | 'dialogActions' | 'dialogTitleTypography' @@ -75,7 +74,6 @@ export function InjectedDialog(props: InjectedDialogProps) { dialogCloseButton, dialogContent, dialogTitle, - dialogTitleTail, dialogTitleTypography, dialogBackdropRoot, container, From 7dddc6f1fd97dc491cc2e6a5fdc09e90519cf84f Mon Sep 17 00:00:00 2001 From: zhouhanseng Date: Tue, 10 May 2022 13:53:30 +0800 Subject: [PATCH 44/44] chore: reply code review --- .../mask/src/components/shared/ApplicationRecommendArea.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/components/shared/ApplicationRecommendArea.tsx b/packages/mask/src/components/shared/ApplicationRecommendArea.tsx index 5f605fbc67ad..3d9cfc982b02 100644 --- a/packages/mask/src/components/shared/ApplicationRecommendArea.tsx +++ b/packages/mask/src/components/shared/ApplicationRecommendArea.tsx @@ -56,7 +56,7 @@ export function ApplicationRecommendArea(props: Props) { isPlaying={isPlaying}> setIsPlaying((e.target as HTMLDivElement).scrollLeft === 0)}> {recommendFeatureAppList.map((application, i) => ( - + ))}