diff --git a/package.json b/package.json index 3c642fbdcc31..02ed29abc266 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "yarn": ">=999.0.0", "npm": ">=999.0.0" }, - "version": "2.23.6", + "version": "2.23.7", "private": true, "license": "AGPL-3.0-or-later", "scripts": { diff --git a/packages/icons/general/Lock.svg b/packages/icons/general/Lock.svg index 79a1f7e5de78..95c3b16efb9c 100644 --- a/packages/icons/general/Lock.svg +++ b/packages/icons/general/Lock.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/packages/icons/icon-generated-as-jsx.js b/packages/icons/icon-generated-as-jsx.js index 07a19fffd6ac..4e458ba74cc7 100644 --- a/packages/icons/icon-generated-as-jsx.js +++ b/packages/icons/icon-generated-as-jsx.js @@ -2205,11 +2205,35 @@ export const LocalBackup = /*#__PURE__*/ __createIcon('LocalBackup', [ u: () => new URL('./general/LocalBackup.png', import.meta.url), }, ]) -export const Lock = /*#__PURE__*/ __createIcon('Lock', [ - { - u: () => new URL('./general/Lock.svg', import.meta.url), - }, -]) +export const Lock = /*#__PURE__*/ __createIcon( + 'Lock', + [ + { + u: () => new URL('./general/Lock.svg', import.meta.url), + j: () => + /*#__PURE__*/ _jsx('svg', { + xmlns: 'http://www.w3.org/2000/svg', + fill: 'none', + viewBox: '0 0 24 25', + children: /*#__PURE__*/ _jsxs('g', { + fill: 'currentColor', + fillRule: 'evenodd', + clipRule: 'evenodd', + children: [ + /*#__PURE__*/ _jsx('path', { + d: 'M7.748 5.01c-.697.866-.948 2.132-.948 3.74v2a.8.8 0 0 1-1.6 0v-2c0-1.704.25-3.438 1.302-4.744C7.585 2.662 9.363 1.95 12 1.95s4.416.713 5.498 2.057C18.55 5.312 18.8 7.046 18.8 8.75v2a.8.8 0 0 1-1.6 0v-2c0-1.607-.25-2.873-.948-3.74-.667-.828-1.889-1.46-4.252-1.46s-3.584.632-4.252 1.46zM12 15.05a1.7 1.7 0 1 0 0 3.4 1.7 1.7 0 0 0 0-3.4zm-3.3 1.7a3.3 3.3 0 1 1 6.6 0 3.3 3.3 0 0 1-6.6 0z', + }), + /*#__PURE__*/ _jsx('path', { + d: 'M3.566 12.315c-.496.495-.766 1.428-.766 3.434v2c0 2.006.27 2.939.766 3.434.495.496 1.428.766 3.434.766h10c2.006 0 2.939-.27 3.434-.766.496-.495.766-1.428.766-3.434v-2c0-2.006-.27-2.939-.765-3.434-.496-.496-1.43-.766-3.435-.766H7c-2.006 0-2.939.27-3.434.766zm-1.131-1.131C3.439 10.178 5.005 9.949 7 9.949h10c1.994 0 3.561.23 4.566 1.235 1.004 1.004 1.234 2.57 1.234 4.565v2c0 1.995-.23 3.562-1.234 4.566-1.005 1.004-2.572 1.234-4.566 1.234H7c-1.994 0-3.561-.23-4.565-1.234C1.43 21.31 1.2 19.743 1.2 17.749v-2c0-1.994.23-3.561 1.235-4.566z', + }), + ], + }), + }), + s: true, + }, + ], + [24, 25], +) export const MaskAvatar = /*#__PURE__*/ __createIcon('MaskAvatar', [ { c: ['dark'], diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index 17276351719f..0b06e90c35ae 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -261,7 +261,7 @@ "export": "Export", "confirm_swap_risk": "Confirm swap risk", "wallet_load_retry": "Failed to load {{symbol}}. Click to retry.", - "wallet_name": "Wallet Name", + "name": "Name", "wallet_rename": "Rename Wallet", "wallet_loading_nft_contract": "Loading NFT contract...", "wallet_search_contract_no_result": "No results or contract address does not meet the query criteria.", @@ -1157,7 +1157,7 @@ "wallet_edit_contact_successfully": "Edit contact successfully.", "wallet_delete_contact": "Delete Contact", "wallet_delete_contact_successfully": "Delete contact successfully.", - "wallet_name_wallet": "Name your wallet", + "wallet_name": "Name your wallet", "wallet_account": "Wallet Account", "wallet_imported": "Imported", "scan_address_to_payment": "Scan QR code to receive payment", diff --git a/packages/mask/src/components/InjectedComponents/PostDialogHint.tsx b/packages/mask/src/components/InjectedComponents/PostDialogHint.tsx index d96d3a75ae46..f10a38c65fe2 100644 --- a/packages/mask/src/components/InjectedComponents/PostDialogHint.tsx +++ b/packages/mask/src/components/InjectedComponents/PostDialogHint.tsx @@ -22,7 +22,7 @@ export interface PostDialogHintUIProps extends withClasses<'buttonTransform' | ' const useStyles = makeStyles()((theme) => ({ button: { // TODO: is it correct? (what about twitter?) - padding: isMobileFacebook ? 0 : '7px', + padding: isMobileFacebook ? 0 : 'var(--icon-padding, 10px)', }, text: { color: theme.palette.grey[300], @@ -39,15 +39,23 @@ const useStyles = makeStyles()((theme) => ({ const ICON_MAP: Record = { minds: , - default: , + default: ( + + ), } -const EntryIconButton = memo((props: PostDialogHintUIProps) => { +const EntryIconButton = memo(function EntryIconButton(props: PostDialogHintUIProps) { const { t } = useI18N() const { tooltip, disableGuideTip } = props const { classes, cx } = useStyles(undefined, { props }) - const getEntry = () => ( + const Entry = ( { ) return disableGuideTip ? ( - getEntry() + Entry ) : ( - {getEntry()} + {Entry} ) }) diff --git a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx index 701d2208c5ca..608da0844157 100644 --- a/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx +++ b/packages/mask/src/components/InjectedComponents/ProfileTabContent.tsx @@ -57,6 +57,7 @@ import Services from '#services' const useStyles = makeStyles()((theme) => ({ root: { width: Sniffings.is_facebook_page ? 876 : 'auto', + color: theme.palette.maskColor.main, }, container: { background: diff --git a/packages/mask/src/extension/popups/modals/AddContactModal/index.tsx b/packages/mask/src/extension/popups/modals/AddContactModal/index.tsx index 1a3f64f5374d..4c79bcb7c339 100644 --- a/packages/mask/src/extension/popups/modals/AddContactModal/index.tsx +++ b/packages/mask/src/extension/popups/modals/AddContactModal/index.tsx @@ -97,7 +97,7 @@ function AddContactDrawer({ onConfirm, address, name, setName, setAddress, ...re { diff --git a/packages/mask/src/extension/popups/modals/EditContactModal/index.tsx b/packages/mask/src/extension/popups/modals/EditContactModal/index.tsx index e843c547d2eb..4af97f445a3c 100644 --- a/packages/mask/src/extension/popups/modals/EditContactModal/index.tsx +++ b/packages/mask/src/extension/popups/modals/EditContactModal/index.tsx @@ -134,7 +134,7 @@ function EditContactDrawer({ onConfirm, address, name, setName, type, ...rest }: inputProps={{ style: { textAlign: 'center' } }} classes={{ root: classes.inputRoot }} spellCheck={false} - placeholder={t('wallet_name_wallet')} + placeholder={t('name')} className={classes.input} value={name} onChange={(ev) => { diff --git a/packages/mask/src/extension/popups/pages/Settings/index.tsx b/packages/mask/src/extension/popups/pages/Settings/index.tsx index 35a63a82b7cb..c8a6bf24f6f5 100644 --- a/packages/mask/src/extension/popups/pages/Settings/index.tsx +++ b/packages/mask/src/extension/popups/pages/Settings/index.tsx @@ -1,24 +1,24 @@ +import Services from '#services' +import { env } from '@masknet/flags' +import { Icons } from '@masknet/icons' +import { Appearance, LanguageOptions } from '@masknet/public-api' +import { DashboardRoutes, PopupModalRoutes, Sniffings } from '@masknet/shared-base' +import { openWindow } from '@masknet/shared-base-ui' +import { makeStyles } from '@masknet/theme' +import { Box, List, ListItem, ListItemText, Typography, useTheme } from '@mui/material' import { memo, useCallback, useMemo } from 'react' import { Trans } from 'react-i18next' -import { Box, List, ListItem, ListItemText, Typography, useTheme } from '@mui/material' +import { UserContext, useAppearance, useLanguage } from '../../../../../shared-ui/index.js' import { useI18N } from '../../../../utils/i18n-next-ui.js' -import { useTitle } from '../../hooks/useTitle.js' -import { makeStyles } from '@masknet/theme' -import { Icons } from '@masknet/icons' import { NormalHeader, useModalNavigate } from '../../components/index.js' -import { env } from '@masknet/flags' -import { UserContext, useAppearance, useLanguage } from '../../../../../shared-ui/index.js' -import { Appearance, LanguageOptions } from '@masknet/public-api' -import { openWindow } from '@masknet/shared-base-ui' -import { DashboardRoutes, PopupModalRoutes, Sniffings } from '@masknet/shared-base' import { useSupportedSites } from '../../hooks/useSupportedSites.js' -import Services from '#services' +import { useTitle } from '../../hooks/useTitle.js' const useStyles = makeStyles()((theme) => ({ container: { padding: theme.spacing(2), flex: 1, - maxHeight: 474, + paddingBottom: 80, overflow: 'auto', display: 'flex', flexDirection: 'column', diff --git a/packages/mask/src/site-adaptors/twitter.com/injection/PostDialogHint.tsx b/packages/mask/src/site-adaptors/twitter.com/injection/PostDialogHint.tsx index 2e6b46d19108..0f1f47a00862 100644 --- a/packages/mask/src/site-adaptors/twitter.com/injection/PostDialogHint.tsx +++ b/packages/mask/src/site-adaptors/twitter.com/injection/PostDialogHint.tsx @@ -1,16 +1,17 @@ -import { useCallback } from 'react' -import { alpha } from '@mui/material' -import { makeStyles, MaskColorVar } from '@masknet/theme' -import { makeTypedMessageText } from '@masknet/typed-message' import { MutationObserverWatcher, type LiveSelector } from '@dimensiondev/holoflows-kit' import { CrossIsolationMessages, sayHelloShowed } from '@masknet/shared-base' -import { isReplyPageSelector, postEditorInPopupSelector, searchReplyToolbarSelector } from '../utils/selector.js' -import { startWatch, type WatchOptions } from '../../../utils/startWatch.js' -import { attachReactTreeWithContainer } from '../../../utils/shadow-root/renderInShadowRoot.js' +import { makeStyles, MaskColorVar } from '@masknet/theme' +import { makeTypedMessageText } from '@masknet/typed-message' +import { alpha } from '@mui/material' +import { clamp } from 'lodash-es' +import { useCallback } from 'react' import { PostDialogHint } from '../../../components/InjectedComponents/PostDialogHint.js' -import { twitterBase } from '../base.js' import { useI18N } from '../../../utils/index.js' +import { attachReactTreeWithContainer } from '../../../utils/shadow-root/renderInShadowRoot.js' +import { startWatch, type WatchOptions } from '../../../utils/startWatch.js' +import { twitterBase } from '../base.js' import { hasEditor, isCompose } from '../utils/postBox.js' +import { isReplyPageSelector, postEditorInPopupSelector, searchReplyToolbarSelector } from '../utils/selector.js' const useStyles = makeStyles()((theme) => ({ iconButton: { @@ -48,13 +49,34 @@ export function injectPostDialogHintAtTwitter(signal: AbortSignal) { ) } -function renderPostDialogHintTo(reason: 'timeline' | 'popup', ls: LiveSelector, options: WatchOptions) { +function renderPostDialogHintTo( + reason: 'timeline' | 'popup', + ls: LiveSelector, + options: WatchOptions, +) { const watcher = new MutationObserverWatcher(ls) startWatch(watcher, options) - attachReactTreeWithContainer(watcher.firstDOMProxy.afterShadow, { signal: options.signal }).render( - , - ) + attachReactTreeWithContainer(watcher.firstDOMProxy.afterShadow, { + signal: options.signal, + tag: () => { + // Vertical center the button when font size of Twitter is set to `large` or `very large` + const tag = document.createElement('span') + Object.assign(tag.style, { + display: 'inline-flex', + alignItems: 'center', + height: '100%', + }) + const svgIcon = document.querySelector('[data-testid="geoButton"] svg') + const size = svgIcon ? clamp(svgIcon.getBoundingClientRect().width, 18, 24) : undefined + const geoButton = document.querySelector('[data-testid="geoButton"]') + const padding = geoButton && size ? (geoButton.getBoundingClientRect().width - size) / 2 : undefined + if (padding) tag.style.setProperty('--icon-padding', `${padding}px`) + if (size) tag.style.setProperty('--icon-size', `${size}px`) + + return tag + }, + }).render() } function PostDialogHintAtTwitter({ reason }: { reason: 'timeline' | 'popup' }) { diff --git a/packages/mask/src/site-adaptors/twitter.com/utils/selector.ts b/packages/mask/src/site-adaptors/twitter.com/utils/selector.ts index edcb7d2b1e78..4e37edafc27d 100644 --- a/packages/mask/src/site-adaptors/twitter.com/utils/selector.ts +++ b/packages/mask/src/site-adaptors/twitter.com/utils/selector.ts @@ -90,7 +90,9 @@ export const postEditorContentInPopupSelector: () => LiveSelector = () '[aria-labelledby="modal-header"] > div:first-child > div:first-child > div:first-child > div:nth-child(3)', ) export const postEditorInPopupSelector: () => LiveSelector = () => - querySelector('[aria-labelledby="modal-header"] div[data-testid="toolBar"] div[data-testid="geoButton"]') + querySelector( + '[aria-labelledby="modal-header"] div[data-testid="toolBar"] [role="presentation"]:has(> div[data-testid="geoButton"])', + ) export const sideBarProfileSelector: () => LiveSelector = () => querySelector('[role="banner"] [role="navigation"] [data-testid="AppTabBar_Profile_Link"] > div') export const postEditorInTimelineSelector: () => LiveSelector = () => @@ -163,8 +165,8 @@ export const postsContentSelector = () => querySelectorAll( [ // tweets on timeline page - '[data-testid="tweet"] div + div div[lang]', - '[data-testid="tweet"] div + div div[data-testid="card.wrapper"]', + '[data-testid="tweet"] [data-testid="tweetText"]', + '[data-testid="tweet"]:not(:has([data-testid="tweetText"])) [data-testid="tweetPhoto"]', // tweets with only image. // tweets on detailed page '[data-testid="tweet"] + div > div:first-child div[lang]', @@ -174,9 +176,6 @@ export const postsContentSelector = () => '[data-testid="tweet"] [aria-labelledby] div[role="link"] div[lang]', // quoted tweets in detail page '[data-testid="tweet"] > div:last-child div[role="link"] div[lang]', - - // reply-tweets - '[data-testid="tweet"] + div div div[lang][dir]', ].join(','), ) @@ -279,7 +278,7 @@ export const searchTwitterAvatarNFTLinkSelector = () => querySelector('a[href export const searchReplyToolbarSelector = () => querySelector('div[data-testid="primaryColumn"] div[data-testid="toolBar"]').querySelector( - 'div[data-testid="geoButton"]', + '[role="presentation"]:has(> div[data-testid="geoButton"])', ) // nameTag dom diff --git a/packages/plugins/NextID/src/components/Actions/index.tsx b/packages/plugins/NextID/src/components/Actions/index.tsx index 31543ac52b74..c2b9a6158f65 100644 --- a/packages/plugins/NextID/src/components/Actions/index.tsx +++ b/packages/plugins/NextID/src/components/Actions/index.tsx @@ -1,6 +1,6 @@ import { memo } from 'react' import { makeStyles } from '@masknet/theme' -import { Button, Stack, Typography } from '@mui/material' +import { Button, Stack, Typography, useTheme } from '@mui/material' import { Icons } from '@masknet/icons' import { useI18N } from '../../locales/index.js' import { PersonaSelectPanel } from '@masknet/shared' @@ -64,11 +64,11 @@ interface AddWalletPersonaActionProps { export const AddWalletPersonaAction = memo(({ onAddWallet }) => { const t = useI18N() - const { classes } = useStyles() + const { classes, theme } = useStyles() return ( <> - + {t.add_wallet_intro()} @@ -84,9 +84,10 @@ export const AddWalletPersonaAction = memo(({ onAdd export const OtherLackWalletAction = memo(() => { const t = useI18N() + const theme = useTheme() return ( - + {t.others_lack_wallet()} diff --git a/packages/plugins/NextID/src/components/NextIdPage.tsx b/packages/plugins/NextID/src/components/NextIdPage.tsx index 71d5b3679e33..387273d0abd6 100644 --- a/packages/plugins/NextID/src/components/NextIdPage.tsx +++ b/packages/plugins/NextID/src/components/NextIdPage.tsx @@ -82,11 +82,11 @@ export const NextIdPage = memo(function NextIdPage() { return ( <> - - + + {ActionComponent} - - + + {openBindDialog && currentPersona && isOwn ? ( { return { @@ -101,57 +108,63 @@ export function Snapshot() { - - - + + + + {proposal.space.name} + + } + placement="top" + classes={{ tooltip: classes.tooltip, arrow: classes.arrow }} + arrow> + + {proposal.space.name} + + + + + by + + + {proposal.space.id} + + + + + - {proposal.space.name} - - } + title={{proposal.title}} placement="top" classes={{ tooltip: classes.tooltip, arrow: classes.arrow }} arrow> - - {proposal.space.name} - - - - by - - - {proposal.space.id} + fontWeight="700" + color={theme.palette.maskColor.publicSecond} + sx={{ width: 300, whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden' }}> + {proposal.title} - + - - {proposal.title}} - placement="top" - classes={{ tooltip: classes.tooltip, arrow: classes.arrow }} - arrow> - - {proposal.title} - - - + }> - {votes.map(function voteItemIter(v) { + {votes?.map(function voteItemIter(v) { const isAverageWeight = v.choices?.every((c) => c.weight === 1) const fullChoiceText = v.totalWeight && v.choices diff --git a/packages/plugins/Tips/src/components/TipsButton/index.tsx b/packages/plugins/Tips/src/components/TipsButton/index.tsx index 45c2bf6bfb30..6fe6ef0fa92a 100644 --- a/packages/plugins/Tips/src/components/TipsButton/index.tsx +++ b/packages/plugins/Tips/src/components/TipsButton/index.tsx @@ -1,4 +1,9 @@ import { Icons } from '@masknet/icons' +import { + PostInfoContext, + useCurrentVisitingIdentity, + useSocialIdentityByUserId, +} from '@masknet/plugin-infra/content-script' import { EMPTY_LIST, NetworkPluginID, @@ -9,15 +14,11 @@ import { import { makeStyles } from '@masknet/theme' import type { Web3Helper } from '@masknet/web3-helpers' import { useNetworkContext } from '@masknet/web3-hooks-base' -import { useCallback, useEffect, useMemo, type HTMLProps, type MouseEventHandler, useContext } from 'react' +import { useCallback, useContext, useEffect, useMemo, type HTMLProps, type MouseEventHandler } from 'react' +import { useLocation } from 'react-use' import { useProfilePublicKey } from '../../hooks/useProfilePublicKey.js' import { PluginTipsMessages } from '../../messages.js' import { useTipsAccounts } from './useTipsAccounts.js' -import { - PostInfoContext, - useCurrentVisitingIdentity, - useSocialIdentityByUserId, -} from '@masknet/plugin-infra/content-script' interface Props extends HTMLProps { // This is workaround solution, link issue mf-2536 and pr #7576. @@ -121,10 +122,11 @@ export function TipButton(props: Props) { }) }, [recipient, receiverUserId, accounts]) + const location = useLocation() useEffect(() => { if (disabled || !info?.actionsElement?.realCurrent) return info.actionsElement.realCurrent.style.flex = '1' - }, [disabled, info]) + }, [disabled, info?.actionsElement?.realCurrent, location.pathname]) if (disabled) return null diff --git a/packages/shared/src/UI/components/PluginCardFrame/index.tsx b/packages/shared/src/UI/components/PluginCardFrame/index.tsx index fe6b91d88a4c..1176181a6fd5 100644 --- a/packages/shared/src/UI/components/PluginCardFrame/index.tsx +++ b/packages/shared/src/UI/components/PluginCardFrame/index.tsx @@ -10,6 +10,7 @@ const useStyles = makeStyles()((theme) => ({ display: 'flex', alignItems: 'center', justifyContent: 'center', + color: theme.palette.maskColor.main, }, container: { background: @@ -47,7 +48,7 @@ export interface PluginCardFrameMiniProps { export function PluginCardFrameMini({ icon, title, provider, providerLink, children }: PluginCardFrameMiniProps) { const t = useSharedI18N() - const { classes } = useStyles() + const { classes, theme } = useStyles() const PluginName = useMemo(() => { return ( @@ -83,7 +84,11 @@ export function PluginCardFrameMini({ icon, title, provider, providerLink, child - {children ?? {t.plugin_card_frame_loading()}} + {children ?? ( + + {t.plugin_card_frame_loading()} + + )} ) diff --git a/packages/shared/src/UI/components/ProfileTabContent/ProfileTab/WalletSettingEntry.tsx b/packages/shared/src/UI/components/ProfileTabContent/ProfileTab/WalletSettingEntry.tsx index 475a54037525..2987fd8b5c9a 100644 --- a/packages/shared/src/UI/components/ProfileTabContent/ProfileTab/WalletSettingEntry.tsx +++ b/packages/shared/src/UI/components/ProfileTabContent/ProfileTab/WalletSettingEntry.tsx @@ -1,8 +1,8 @@ +import { memo } from 'react' import { Icons } from '@masknet/icons' import { CrossIsolationMessages } from '@masknet/shared-base' import { makeStyles } from '@masknet/theme' import { Button, Stack, Typography } from '@mui/material' -import { memo } from 'react' import { useSharedI18N } from '../../../../locales/index.js' const useStyles = makeStyles()((theme) => ({ @@ -22,12 +22,12 @@ function openWeb3ProfileSettingDialog() { } export const WalletSettingEntry = memo(function WalletSettingEntry() { const t = useSharedI18N() - const { classes } = useStyles() + const { classes, theme } = useStyles() return ( <> - + {t.show_wallet_setting_intro()} diff --git a/packages/web3-shared/evm/src/constants/chains.json b/packages/web3-shared/evm/src/constants/chains.json index c26390da4f41..5865d29bb507 100644 --- a/packages/web3-shared/evm/src/constants/chains.json +++ b/packages/web3-shared/evm/src/constants/chains.json @@ -476,11 +476,11 @@ "decimals": 18, "logoURL": "https://imagedelivery.net/PCnTHRkdRhGodr0AWBAvMA/Assets/blockchains/avalanchec/info/logo.png/quality=85" }, - "infoURL": "https://snowtrace.io/", + "infoURL": "https://snowtrace.dev/", "explorers": [ { "name": "snowtrace", - "url": "https://snowtrace.io/", + "url": "https://snowtrace.dev/", "standard": "EIP3091" } ]