diff --git a/changelogs/1.20.12.txt b/changelogs/1.20.12.txt new file mode 100644 index 00000000..619f4cd5 --- /dev/null +++ b/changelogs/1.20.12.txt @@ -0,0 +1 @@ +Bug fixes and performance improvements diff --git a/package-lock.json b/package-lock.json index 98abe29c..a5565007 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mytonwallet", - "version": "1.20.11", + "version": "1.20.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mytonwallet", - "version": "1.20.11", + "version": "1.20.12", "license": "GPL-3.0-or-later", "dependencies": { "@awesome-cordova-plugins/core": "^6.6.0", diff --git a/package.json b/package.json index 65ed6347..9a0bb666 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mytonwallet", - "version": "1.20.11", + "version": "1.20.12", "description": "The most feature-rich web wallet and browser extension for TON – with support of multi-accounts, tokens (jettons), NFT, TON DNS, TON Sites, TON Proxy, and TON Magic.", "main": "index.js", "scripts": { diff --git a/public/version.txt b/public/version.txt index 4bb1a22f..3b9e4a0c 100644 --- a/public/version.txt +++ b/public/version.txt @@ -1 +1 @@ -1.20.11 +1.20.12 diff --git a/src/components/addbuy/AddBuyModal.module.scss b/src/components/addbuy/AddBuyModal.module.scss index 209c10d1..2dc665ba 100644 --- a/src/components/addbuy/AddBuyModal.module.scss +++ b/src/components/addbuy/AddBuyModal.module.scss @@ -79,7 +79,7 @@ } @media (hover: hover) { - &:focus, + &:focus-visible, &:hover { background-color: var(--color-interactive-item-hover); } diff --git a/src/components/auth/Auth.module.scss b/src/components/auth/Auth.module.scss index af8ad3d4..3722dbea 100644 --- a/src/components/auth/Auth.module.scss +++ b/src/components/auth/Auth.module.scss @@ -424,7 +424,8 @@ font-weight: 600; color: var(--color-gray-3); - &:hover, &:focus { + &:hover, + &:focus-visible { color: var(--color-gray-1); } } diff --git a/src/components/auth/AuthCheckPassword.tsx b/src/components/auth/AuthCheckPassword.tsx index a94f74e8..54dfd2d2 100644 --- a/src/components/auth/AuthCheckPassword.tsx +++ b/src/components/auth/AuthCheckPassword.tsx @@ -38,12 +38,11 @@ function AuthCheckPassword({ isLoading={isLoading} error={error} containerClassName={styles.passwordForm} - placeholder={lang('Enter your password')} - onUpdate={cleanAuthError} - onSubmit={handleSubmit} submitLabel={lang('Send')} - onCancel={resetAuth} cancelLabel={lang('Back')} + onSubmit={handleSubmit} + onCancel={resetAuth} + onUpdate={cleanAuthError} >
{lang('Enter your password')}
diff --git a/src/components/common/TokenSelector.tsx b/src/components/common/TokenSelector.tsx index 8c13acf8..2ed09537 100644 --- a/src/components/common/TokenSelector.tsx +++ b/src/components/common/TokenSelector.tsx @@ -45,6 +45,12 @@ import styles from './TokenSelector.module.scss'; type Token = UserToken | UserSwapToken; +type TokenSortFactors = { + tickerExactMatch: number; + tickerMatchLength: number; + nameMatchLength: number; +}; + interface StateProps { token?: Token; userTokens?: Token[]; @@ -178,7 +184,7 @@ function TokenSelector({ return []; } - return tokensToFilter.filter(({ + const filteredTokens = tokensToFilter.filter(({ name, symbol, keywords, isDisabled, }) => { if (isDisabled) { @@ -190,7 +196,43 @@ function TokenSelector({ const isKeyword = keywords?.some((key) => key.toLowerCase().includes(lowerCaseSearchValue)); return isName || isSymbol || isKeyword; - }).sort((a, b) => Number(b.amount - a.amount)) ?? []; + }) ?? []; + + const sortFactors = filteredTokens.reduce((acc, searchResultToken) => { + const factors = { + tickerExactMatch: 0, + tickerMatchLength: 0, + nameMatchLength: 0, + }; + + const tokenSymbol = searchResultToken.symbol.toLowerCase(); + const tokenName = searchResultToken.name.toLowerCase(); + + if (tokenSymbol === lowerCaseSearchValue) { + factors.tickerExactMatch = 1; + } + + if (tokenSymbol.includes(lowerCaseSearchValue)) { + factors.tickerMatchLength = lowerCaseSearchValue.length; + } + + if (tokenName.includes(lowerCaseSearchValue)) { + factors.nameMatchLength = lowerCaseSearchValue.length; + } + + acc[searchResultToken.slug] = factors; + + return acc; + }, {} as Record); + + return filteredTokens.sort((a, b) => { + const factorA = sortFactors[a.slug]; + const factorB = sortFactors[b.slug]; + const comparisonResult = compareTokens(factorA, factorB); + if (comparisonResult !== 0) return comparisonResult; + + return Number(b.amount - a.amount); + }); }, [allUnimportedTonTokens, isInsideSettings, searchValue, swapTokensWithFilter]); const resetSearch = () => { @@ -531,3 +573,13 @@ function filterAndSortTokens(tokens: Token[], tokenInSlug?: string, pairsBySlug? return { ...token, canSwap }; }).sort((a, b) => Number(b.canSwap) - Number(a.canSwap)); } + +function compareTokens(a: TokenSortFactors, b: TokenSortFactors) { + if (a.tickerExactMatch !== b.tickerExactMatch) { + return b.tickerExactMatch - a.tickerExactMatch; + } + if (a.tickerMatchLength !== b.tickerMatchLength) { + return b.tickerMatchLength - a.tickerMatchLength; + } + return b.nameMatchLength - a.nameMatchLength; +} diff --git a/src/components/dapps/DappConnectModal.tsx b/src/components/dapps/DappConnectModal.tsx index 31c228f7..09efd082 100644 --- a/src/components/dapps/DappConnectModal.tsx +++ b/src/components/dapps/DappConnectModal.tsx @@ -171,7 +171,7 @@ function DappConnectModal({ ); return ( <> -

{lang('Select wallets to use on this dapp')}

+

{lang('Select wallet to use on this dapp')}

{iterableAccounts.map( ([accountId, { title, address, isHardware }]) => renderAccount(accountId, address, title, isHardware), diff --git a/src/components/dapps/DappPassword.tsx b/src/components/dapps/DappPassword.tsx index 37699914..ec09e246 100644 --- a/src/components/dapps/DappPassword.tsx +++ b/src/components/dapps/DappPassword.tsx @@ -39,13 +39,12 @@ function DappPassword({ ); diff --git a/src/components/dapps/DappTransferModal.tsx b/src/components/dapps/DappTransferModal.tsx index afb47b8d..c77b28d9 100644 --- a/src/components/dapps/DappTransferModal.tsx +++ b/src/components/dapps/DappTransferModal.tsx @@ -125,18 +125,17 @@ function DappTransferModal({ function renderPassword(isActive: boolean) { return ( <> - {!IS_CAPACITOR && } + {!IS_CAPACITOR && } ); diff --git a/src/components/ledger/LedgerModal.module.scss b/src/components/ledger/LedgerModal.module.scss index 44739e00..690f0cf9 100644 --- a/src/components/ledger/LedgerModal.module.scss +++ b/src/components/ledger/LedgerModal.module.scss @@ -237,7 +237,7 @@ background-color: var(--color-add-wallet-background) !important; border-radius: 0.5rem !important; - &:focus, + &:focus-visible, &:hover { color: var(--color-add-wallet-text-hover) !important; diff --git a/src/components/main/modals/AddAccountPasswordModal.tsx b/src/components/main/modals/AddAccountPasswordModal.tsx index a1f5b99b..28fa63e1 100644 --- a/src/components/main/modals/AddAccountPasswordModal.tsx +++ b/src/components/main/modals/AddAccountPasswordModal.tsx @@ -41,13 +41,13 @@ function AddAccountPasswordModal({ isActive={isActive} isLoading={isLoading} error={error} - placeholder={lang('Enter your password')} + operationType="passcode" withCloseButton={IS_CAPACITOR} - onUpdate={onClearError} - onSubmit={onSubmit} submitLabel={lang('Send')} - onCancel={onBack} cancelLabel={lang('Back')} + onSubmit={onSubmit} + onCancel={onBack} + onUpdate={onClearError} /> ); diff --git a/src/components/main/modals/BackupModal.tsx b/src/components/main/modals/BackupModal.tsx index e13bcc00..4b87adf1 100644 --- a/src/components/main/modals/BackupModal.tsx +++ b/src/components/main/modals/BackupModal.tsx @@ -140,13 +140,12 @@ function BackupModal({ isActive={isActive} isLoading={isLoading} error={error} - placeholder={lang('Enter your password')} - submitLabel={lang('Back Up')} withCloseButton={IS_CAPACITOR} - onUpdate={handleBackupErrorUpdate} - onSubmit={handlePasswordSubmit} + submitLabel={lang('Back Up')} cancelLabel={lang('Cancel')} + onSubmit={handlePasswordSubmit} onCancel={onClose} + onUpdate={handleBackupErrorUpdate} /> ); diff --git a/src/components/main/modals/QrScannerModal.module.scss b/src/components/main/modals/QrScannerModal.module.scss index 73e6d943..edafb19c 100644 --- a/src/components/main/modals/QrScannerModal.module.scss +++ b/src/components/main/modals/QrScannerModal.module.scss @@ -107,7 +107,7 @@ height: 1.875rem !important; &:hover, - &:focus { + &:focus-visible { color: var(--color-flashlight-button-enabled-text) !important; background-color: var(--color-flashlight-button-enabled-background) !important; diff --git a/src/components/main/modals/SignatureModal.tsx b/src/components/main/modals/SignatureModal.tsx index 13ba8f3e..828b961c 100644 --- a/src/components/main/modals/SignatureModal.tsx +++ b/src/components/main/modals/SignatureModal.tsx @@ -109,12 +109,11 @@ function SignatureModal({ ); diff --git a/src/components/main/modals/TransactionModal.module.scss b/src/components/main/modals/TransactionModal.module.scss index acfa20cd..55d1a691 100644 --- a/src/components/main/modals/TransactionModal.module.scss +++ b/src/components/main/modals/TransactionModal.module.scss @@ -91,7 +91,7 @@ } &:hover, - &:focus { + &:focus-visible { color: var(--color-blue); text-decoration: none; } diff --git a/src/components/main/modals/TransactionModal.tsx b/src/components/main/modals/TransactionModal.tsx index fba26e21..9bc03976 100644 --- a/src/components/main/modals/TransactionModal.tsx +++ b/src/components/main/modals/TransactionModal.tsx @@ -446,11 +446,11 @@ function TransactionModal({ {!IS_CAPACITOR && } (null); + const renderedTokens = useCurrentOrPrev(tokens, true); + const renderedMycoin = useCurrentOrPrev(mycoin, true); - const toncoin = useMemo(() => tokens?.find(({ slug }) => slug === TONCOIN_SLUG), [tokens])!; + const toncoin = useMemo(() => renderedTokens?.find(({ slug }) => slug === TONCOIN_SLUG), [renderedTokens])!; const userMycoin = useMemo(() => { - if (!tokens || !mycoin) return undefined; + if (!renderedTokens || !renderedMycoin) return undefined; - return tokens.find(({ slug }) => slug === mycoin.slug); - }, [mycoin, tokens]); + return renderedTokens.find(({ slug }) => slug === renderedMycoin.slug); + }, [renderedMycoin, renderedTokens]); const { isLandscape, isPortrait } = useDeviceScreen(); @@ -99,10 +102,10 @@ function Assets({ } = useVesting({ vesting, userMycoin }); const tokenSlugs = useMemo(() => ( - tokens + renderedTokens ?.filter(({ isDisabled }) => !isDisabled) .map(({ slug }) => slug) - ), [tokens]); + ), [renderedTokens]); const [viewportSlugs, getMore] = useInfiniteScroll( undefined, tokenSlugs, undefined, undefined, undefined, isActive, isPortrait, ); @@ -120,8 +123,8 @@ function Assets({ return index; }, [shouldRenderStakedToken, shouldRenderVestingToken, tokenSlugs, viewportSlugs]); const tokensBySlug = useMemo(() => ( - tokens ? buildCollectionByKey(tokens, 'slug') : undefined - ), [tokens]); + renderedTokens ? buildCollectionByKey(renderedTokens, 'slug') : undefined + ), [renderedTokens]); const withAbsolutePositioning = tokenSlugs && tokenSlugs.length > LIST_SLICE; const currentContainerHeight = useMemo(() => { @@ -194,7 +197,7 @@ function Assets({ return ( - {!tokens && ( + {!renderedTokens && (
diff --git a/src/components/main/sections/Content/Content.tsx b/src/components/main/sections/Content/Content.tsx index 2b55b0ea..25a2ad28 100644 --- a/src/components/main/sections/Content/Content.tsx +++ b/src/components/main/sections/Content/Content.tsx @@ -268,6 +268,7 @@ function Content({ diff --git a/src/components/main/sections/Content/Explore.module.scss b/src/components/main/sections/Content/Explore.module.scss index bfa77bdf..e7905817 100644 --- a/src/components/main/sections/Content/Explore.module.scss +++ b/src/components/main/sections/Content/Explore.module.scss @@ -80,7 +80,7 @@ transition: color 150ms; &:hover, - &:focus { + &:focus-visible { color: var(--color-gray-3); } } @@ -96,7 +96,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { text-decoration: none; .image { diff --git a/src/components/main/sections/Content/Nft.module.scss b/src/components/main/sections/Content/Nft.module.scss index b9b1a528..2a742940 100644 --- a/src/components/main/sections/Content/Nft.module.scss +++ b/src/components/main/sections/Content/Nft.module.scss @@ -57,7 +57,7 @@ transition: background-color 150ms, color 150ms; &:hover, - &:focus { + &:focus-visible { color: var(--color-blue-button-text-hover); text-decoration: none; @@ -105,14 +105,14 @@ &, &:hover, - &:focus, + &:focus-visible, &:active { text-decoration: none; } @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { .image { transform: scale(1.05); } diff --git a/src/components/main/sections/Content/Nft.tsx b/src/components/main/sections/Content/Nft.tsx index 174957b8..f5c8caf4 100644 --- a/src/components/main/sections/Content/Nft.tsx +++ b/src/components/main/sections/Content/Nft.tsx @@ -79,7 +79,7 @@ function Nft({ nft, selectedAddresses }: OwnProps) {
diff --git a/src/components/main/sections/Content/NftCollectionHeader.module.scss b/src/components/main/sections/Content/NftCollectionHeader.module.scss index adcab01e..2b35bbb0 100644 --- a/src/components/main/sections/Content/NftCollectionHeader.module.scss +++ b/src/components/main/sections/Content/NftCollectionHeader.module.scss @@ -70,7 +70,7 @@ color: var(--color-blue); &:hover, - &:focus { + &:focus-visible { color: var(--color-blue-button-background-hover); } } diff --git a/src/components/main/sections/Content/NftMenu.module.scss b/src/components/main/sections/Content/NftMenu.module.scss index a4a7d326..b574a916 100644 --- a/src/components/main/sections/Content/NftMenu.module.scss +++ b/src/components/main/sections/Content/NftMenu.module.scss @@ -76,7 +76,7 @@ } &:hover, - &:focus { + &:focus-visible { > :global(.icon) { color: var(--color-blue); } diff --git a/src/components/main/sections/Content/Token.module.scss b/src/components/main/sections/Content/Token.module.scss index 7dc3e9da..42013fd0 100644 --- a/src/components/main/sections/Content/Token.module.scss +++ b/src/components/main/sections/Content/Token.module.scss @@ -39,7 +39,7 @@ } @media (hover: hover) { - &:focus, + &:focus-visible, &:hover { background-color: var(--color-interactive-item-hover); diff --git a/src/components/main/sections/Content/Transaction.module.scss b/src/components/main/sections/Content/Transaction.module.scss index 6c8af27d..47ce300d 100644 --- a/src/components/main/sections/Content/Transaction.module.scss +++ b/src/components/main/sections/Content/Transaction.module.scss @@ -41,7 +41,7 @@ } @media (hover: hover) { - &:focus, + &:focus-visible, &:hover { background-color: var(--color-interactive-item-hover); } diff --git a/src/components/main/sections/Warnings/Warnings.module.scss b/src/components/main/sections/Warnings/Warnings.module.scss index cc015a2a..121e0408 100644 --- a/src/components/main/sections/Warnings/Warnings.module.scss +++ b/src/components/main/sections/Warnings/Warnings.module.scss @@ -109,7 +109,7 @@ transition: background-color 150ms; &:hover, - &:focus { + &:focus-visible { background-color: var(--color-red-warning-button-background-hover) !important; } diff --git a/src/components/mediaViewer/MediaViewer.module.scss b/src/components/mediaViewer/MediaViewer.module.scss index fd12ea50..69e9b13d 100644 --- a/src/components/mediaViewer/MediaViewer.module.scss +++ b/src/components/mediaViewer/MediaViewer.module.scss @@ -91,7 +91,7 @@ transition: background-color 0.15s, color 0.15s; &:hover, - &:focus { + &:focus-visible { color: white; text-decoration: none; @@ -129,7 +129,7 @@ background-color: rgba(0, 0, 0, 0.32); &:hover, - &:focus { + &:focus-visible { color: #A3A3A3; background-color: rgba(0, 0, 0, 0.32); @@ -157,7 +157,7 @@ } &:hover, - &:focus { + &:focus-visible { > :global(.icon) { color: var(--color-blue); } @@ -355,7 +355,8 @@ width: 20vw; } - &:hover, &:focus { + &:hover, + &:focus-visible { opacity: 1; } @@ -426,7 +427,8 @@ transition: color 0.15s; - &:focus, &:hover { + &:focus-visible, + &:hover { color: rgba(255, 255, 255, 1); text-decoration: none; diff --git a/src/components/mediaViewer/helpers/ghostAnimation.ts b/src/components/mediaViewer/helpers/ghostAnimation.ts index d5fca1dc..f02614f9 100644 --- a/src/components/mediaViewer/helpers/ghostAnimation.ts +++ b/src/components/mediaViewer/helpers/ghostAnimation.ts @@ -169,7 +169,9 @@ function getNode(type: MediaType, mediaId: string) { let image: HTMLImageElement | undefined; let container: HTMLElement | undefined; if (type === MediaType.Nft) { - container = document.querySelector(`#nft-${mediaId}`) as HTMLElement; + container = document.querySelector( + `.nfts-container > .Transition_slide-active [data-nft-address="${mediaId}"]`, + ) as HTMLElement; image = container?.querySelector('img') as HTMLImageElement; } return { container, image }; diff --git a/src/components/receive/ReceiveModal.module.scss b/src/components/receive/ReceiveModal.module.scss index cec6b7a0..6ab91e17 100644 --- a/src/components/receive/ReceiveModal.module.scss +++ b/src/components/receive/ReceiveModal.module.scss @@ -80,7 +80,7 @@ background-color: var(--color-gray-button-background) !important; - &:focus, + &:focus-visible, &:hover { background-color: var(--color-gray-button-background-hover) !important; } @@ -107,7 +107,7 @@ text-decoration-style: dotted; &:hover, - &:focus { + &:focus-visible { text-decoration: none; } } diff --git a/src/components/settings/Settings.module.scss b/src/components/settings/Settings.module.scss index 332a92fc..fcd60ff9 100644 --- a/src/components/settings/Settings.module.scss +++ b/src/components/settings/Settings.module.scss @@ -382,7 +382,7 @@ } @media (hover: hover) { - &:focus, + &:focus-visible, &:hover { color: var(--color-black); @@ -495,7 +495,7 @@ background: var(--color-background-first); border-radius: var(--border-radius-default); - &:focus, + &:focus-visible, &:hover { background-color: var(--color-interactive-item-hover); } @@ -560,6 +560,22 @@ margin-top: auto; } +.pinPadHeader { + display: flex; + flex-direction: column; + gap: 1rem; + align-items: center; + + margin-top: auto; +} + +.pinPadTitle { + font-size: 1.6875rem; + font-weight: 800; + line-height: 1; + text-align: center; +} + .title { margin-bottom: 1.25rem; diff --git a/src/components/settings/biometrics/NativeBiometricsTurnOn.tsx b/src/components/settings/biometrics/NativeBiometricsTurnOn.tsx index d3f54f9f..23bc014e 100644 --- a/src/components/settings/biometrics/NativeBiometricsTurnOn.tsx +++ b/src/components/settings/biometrics/NativeBiometricsTurnOn.tsx @@ -5,6 +5,7 @@ import { PIN_LENGTH } from '../../../config'; import buildClassName from '../../../util/buildClassName'; import { ANIMATED_STICKERS_PATHS } from '../../ui/helpers/animatedAssets'; +import { useDeviceScreen } from '../../../hooks/useDeviceScreen'; import useEffectWithPrevDeps from '../../../hooks/useEffectWithPrevDeps'; import useHistoryBack from '../../../hooks/useHistoryBack'; import useLang from '../../../hooks/useLang'; @@ -37,13 +38,14 @@ function NativeBiometricsTurnOn({ const { enableNativeBiometrics, clearNativeBiometricsError } = getActions(); const lang = useLang(); + const { isSmallHeight } = useDeviceScreen(); const [pin, setPin] = useState(''); const pinPadType = pin.length !== PIN_LENGTH ? undefined : (isPinAccepted ? 'success' : (error ? 'error' : undefined)); const pinTitle = isPinAccepted ? 'Correct' - : (error && pin.length === PIN_LENGTH ? error : 'Enter code'); + : (error && pin.length === PIN_LENGTH ? error : 'Enter your code'); useEffect(() => { if (!isActive) return; @@ -78,14 +80,19 @@ function NativeBiometricsTurnOn({ {lang('Back')} - + +
+ + + {!isSmallHeight &&
{lang('Confirm Passcode')}
} +
); diff --git a/src/components/staking/StakeModal.tsx b/src/components/staking/StakeModal.tsx index bb02bf3a..e8453656 100644 --- a/src/components/staking/StakeModal.tsx +++ b/src/components/staking/StakeModal.tsx @@ -117,14 +117,14 @@ function StakeModal({ isActive={isActive} isLoading={isLoading} error={error} - operationType="staking" - placeholder={lang('Confirm operation with your password')} withCloseButton={IS_CAPACITOR} - onUpdate={clearStakingError} - onSubmit={handleTransferSubmit} + operationType="staking" + placeholder="Confirm operation with your password" submitLabel={lang('Confirm')} - onCancel={handleBackClick} cancelLabel={lang('Back')} + onSubmit={handleTransferSubmit} + onCancel={handleBackClick} + onUpdate={clearStakingError} > {renderStakingShortInfo()} diff --git a/src/components/staking/Staking.module.scss b/src/components/staking/Staking.module.scss index 26b7e9f8..30acc7de 100644 --- a/src/components/staking/Staking.module.scss +++ b/src/components/staking/Staking.module.scss @@ -237,7 +237,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { text-decoration: none; } } diff --git a/src/components/staking/UnstakeModal.tsx b/src/components/staking/UnstakeModal.tsx index 3642a034..0159491a 100644 --- a/src/components/staking/UnstakeModal.tsx +++ b/src/components/staking/UnstakeModal.tsx @@ -453,14 +453,15 @@ function UnstakeModal({ {renderUnstakingShortInfo()} diff --git a/src/components/swap/Swap.module.scss b/src/components/swap/Swap.module.scss index 625df29b..1c883bf2 100644 --- a/src/components/swap/Swap.module.scss +++ b/src/components/swap/Swap.module.scss @@ -79,7 +79,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { text-decoration: none; } } @@ -593,7 +593,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-input-button-text); background-color: var(--color-input-button-background); diff --git a/src/components/swap/SwapPassword.tsx b/src/components/swap/SwapPassword.tsx index 98981928..4e99451d 100644 --- a/src/components/swap/SwapPassword.tsx +++ b/src/components/swap/SwapPassword.tsx @@ -41,15 +41,14 @@ function SwapPassword({ {children} diff --git a/src/components/transfer/NftInfo.module.scss b/src/components/transfer/NftInfo.module.scss index 65e26391..c5fcd7e7 100644 --- a/src/components/transfer/NftInfo.module.scss +++ b/src/components/transfer/NftInfo.module.scss @@ -25,7 +25,7 @@ .interactive { cursor: var(--custom-cursor, pointer); - &:focus, + &:focus-visible, &:hover { .icon { color: var(--color-blue); diff --git a/src/components/transfer/Transfer.module.scss b/src/components/transfer/Transfer.module.scss index 936f30eb..d40d52e2 100644 --- a/src/components/transfer/Transfer.module.scss +++ b/src/components/transfer/Transfer.module.scss @@ -40,7 +40,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-input-button-text); background-color: var(--color-input-button-background); @@ -63,7 +63,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-gray-2); opacity: 0.85; @@ -175,7 +175,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { text-decoration: none; } } @@ -316,7 +316,7 @@ } &:hover, - &:focus { + &:focus-visible { text-decoration: none; background-color: var(--color-interactive-drop-down-menu-hover); diff --git a/src/components/transfer/TransferModal.tsx b/src/components/transfer/TransferModal.tsx index 7b2ca27a..122e8127 100644 --- a/src/components/transfer/TransferModal.tsx +++ b/src/components/transfer/TransferModal.tsx @@ -6,7 +6,7 @@ import { getActions, withGlobal } from '../../global'; import type { GlobalState, HardwareConnectState, UserToken } from '../../global/types'; import { TransferState } from '../../global/types'; -import { IS_CAPACITOR, NFT_BATCH_SIZE } from '../../config'; +import { BURN_ADDRESS, IS_CAPACITOR, NFT_BATCH_SIZE } from '../../config'; import { selectCurrentAccountState, selectCurrentAccountTokens } from '../../global/selectors'; import buildClassName from '../../util/buildClassName'; import captureKeyboardListeners from '../../util/captureKeyboardListeners'; @@ -83,6 +83,7 @@ function TransferModal({ const renderedTransactionAmount = usePrevious(amount, true); const symbol = selectedToken?.symbol || ''; const isNftTransfer = Boolean(nfts?.length); + const isBurning = toAddress === BURN_ADDRESS; const { renderingKey, nextKey, updateNextKey } = useModalTransitionKeys(state, isOpen); @@ -183,6 +184,7 @@ function TransferModal({ void; @@ -19,7 +20,7 @@ interface OwnProps { } function TransferPassword({ - isActive, isLoading, error, children, onSubmit, onCancel, + isActive, isLoading, isBurning, error, children, onSubmit, onCancel, }: OwnProps) { const { cancelTransfer, @@ -33,21 +34,22 @@ function TransferPassword({ onBack: onCancel, }); + const title = isBurning ? 'Confirm Burning' : 'Confirm Sending'; + return ( <> - {!IS_CAPACITOR && } + {!IS_CAPACITOR && } {children} diff --git a/src/components/ui/Button.module.scss b/src/components/ui/Button.module.scss index bf6feee4..2ddde131 100644 --- a/src/components/ui/Button.module.scss +++ b/src/components/ui/Button.module.scss @@ -55,7 +55,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-gray-button-text-hover); background-color: var(--color-gray-button-background-hover); @@ -84,7 +84,7 @@ @media (hover: hover) { &:hover, - &:focus{ + &:focus-visible { color: var(--color-blue-button-background-hover); } } @@ -109,7 +109,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-blue-button-text-hover); background-color: var(--color-blue-button-background-hover); @@ -143,7 +143,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-red-button-text-hover); background-color: var(--color-red-button-background-hover); @@ -164,7 +164,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-red-button-background-hover); } } diff --git a/src/components/ui/Dropdown.module.scss b/src/components/ui/Dropdown.module.scss index 464e4717..a416a24a 100644 --- a/src/components/ui/Dropdown.module.scss +++ b/src/components/ui/Dropdown.module.scss @@ -58,7 +58,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { background-color: var(--color-input-button-background-hover); } } @@ -72,7 +72,7 @@ background: none; &:hover, - &:focus { + &:focus-visible { background: none; } } @@ -165,7 +165,7 @@ } &:hover, - &:focus { + &:focus-visible { background-color: var(--color-interactive-drop-down-menu-hover) !important; } } diff --git a/src/components/ui/InteractiveTextField.module.scss b/src/components/ui/InteractiveTextField.module.scss index 7eaf1d68..a8c1add3 100644 --- a/src/components/ui/InteractiveTextField.module.scss +++ b/src/components/ui/InteractiveTextField.module.scss @@ -30,7 +30,7 @@ transition: none; } - &:focus, + &:focus-visible, &:hover { .icon { color: var(--color-blue); diff --git a/src/components/ui/MenuItem.module.scss b/src/components/ui/MenuItem.module.scss index 9ea67b30..c1d86a5e 100644 --- a/src/components/ui/MenuItem.module.scss +++ b/src/components/ui/MenuItem.module.scss @@ -46,7 +46,7 @@ @media (hover: hover) { &:hover, - &:focus { + &:focus-visible { color: var(--color-blue); text-decoration: none; @@ -77,8 +77,7 @@ color: var(--color-red) !important; &:hover, - &:focus { + &:focus-visible { background-color: var(--color-interactive-popup-menu-descructive-hover); } - } diff --git a/src/components/ui/Modal.module.scss b/src/components/ui/Modal.module.scss index 8231a68d..45d97bb0 100644 --- a/src/components/ui/Modal.module.scss +++ b/src/components/ui/Modal.module.scss @@ -303,7 +303,7 @@ transition: background-color 150ms; &:hover, - &:focus { + &:focus-visible { color: var(--color-close-button-text-hover) !important; background-color: var(--color-close-button-background-hover) !important; diff --git a/src/components/ui/PasswordForm.module.scss b/src/components/ui/PasswordForm.module.scss index 3d87a5ad..eb5c41b5 100644 --- a/src/components/ui/PasswordForm.module.scss +++ b/src/components/ui/PasswordForm.module.scss @@ -16,6 +16,7 @@ font-size: 1.6875rem; font-weight: 800; line-height: 1; + text-align: center; } .errorMessage { diff --git a/src/components/ui/PasswordForm.tsx b/src/components/ui/PasswordForm.tsx index 36fbd2a5..b3c028c4 100644 --- a/src/components/ui/PasswordForm.tsx +++ b/src/components/ui/PasswordForm.tsx @@ -28,7 +28,7 @@ import PinPad from './PinPad'; import modalStyles from './Modal.module.scss'; import styles from './PasswordForm.module.scss'; -type OperationType = 'transfer' | 'staking' | 'unstaking' | 'swap'; +type OperationType = 'transfer' | 'sending' | 'staking' | 'unstaking' | 'swap' | 'unfreeze' | 'passcode'; interface OwnProps { isActive: boolean; @@ -69,7 +69,7 @@ function PasswordForm({ cancelLabel, submitLabel, stickerSize = STICKER_SIZE, - placeholder, + placeholder = 'Enter your password', error, help, containerClassName, @@ -151,8 +151,13 @@ function PasswordForm({ function getPinPadTitle() { switch (operationType) { + case 'unfreeze': + return 'Confirm Unfreezing'; + case 'passcode': + return 'Confirm Passcode'; case 'transfer': - return 'Confirm Transaction'; + case 'sending': + return 'Confirm Sending'; case 'staking': return 'Confirm Staking'; case 'unstaking': @@ -245,7 +250,7 @@ function PasswordForm({ id="first-password" inputMode={isPasswordNumeric ? 'numeric' : undefined} error={error ? lang(error) : localError} - placeholder={placeholder} + placeholder={lang(placeholder)} value={password} onInput={handleInput} maxLength={isPasswordNumeric ? PIN_LENGTH : undefined} diff --git a/src/components/ui/PinPad.module.scss b/src/components/ui/PinPad.module.scss index a5329959..bba1392e 100644 --- a/src/components/ui/PinPad.module.scss +++ b/src/components/ui/PinPad.module.scss @@ -127,7 +127,7 @@ transition: opacity 200ms; - @media (max-height: 43.5rem) { + @media (max-height: 55rem) { height: 4rem; } diff --git a/src/components/ui/UpdateAvailable.module.scss b/src/components/ui/UpdateAvailable.module.scss index 16d850bb..7a7c4597 100644 --- a/src/components/ui/UpdateAvailable.module.scss +++ b/src/components/ui/UpdateAvailable.module.scss @@ -27,7 +27,7 @@ transition: background-color 150ms, color 150ms, opacity 300ms !important; &:hover, - &:focus { + &:focus-visible { color: var(--color-blue-button-text-hover); background: var(--color-blue-button-background-hover); diff --git a/src/components/vesting/VestingModal.module.scss b/src/components/vesting/VestingModal.module.scss index 5e7b0693..43b33a0a 100644 --- a/src/components/vesting/VestingModal.module.scss +++ b/src/components/vesting/VestingModal.module.scss @@ -230,7 +230,7 @@ transition: background-color 150ms; @media (hover: hover) { - &:focus, + &:focus-visible, &:hover { background-color: var(--color-interactive-item-hover); } @@ -336,7 +336,7 @@ max-width: 100%; height: 2rem; - margin: 0 auto 1rem; + margin: 0 auto; padding: 0 0.5rem 0 0.375rem; font-size: 0.9375rem; @@ -347,6 +347,10 @@ border-radius: 1rem; } +.operationInfoWithGap { + margin-bottom: 1rem; +} + .operationInfoText { overflow: hidden; @@ -364,14 +368,16 @@ } .operationInfoFee { - margin-bottom: 2rem; - font-size: 0.9375rem; font-weight: 600; color: var(--color-gray-2); text-align: center; } +.operationInfoFeeWithGap { + margin-bottom: 2rem; +} + .partName { display: flex; flex-direction: column; diff --git a/src/components/vesting/VestingPasswordModal.tsx b/src/components/vesting/VestingPasswordModal.tsx index 1bfff6da..3379ed1b 100644 --- a/src/components/vesting/VestingPasswordModal.tsx +++ b/src/components/vesting/VestingPasswordModal.tsx @@ -7,6 +7,7 @@ import { VestingUnfreezeState } from '../../global/types'; import { CLAIM_AMOUNT, + IS_CAPACITOR, TON_SYMBOL, TONCOIN_SLUG, } from '../../config'; @@ -79,6 +80,7 @@ function VestingPasswordModal({ const claimAmount = toBig(CLAIM_AMOUNT); const hasAmountError = !balance || balance < CLAIM_AMOUNT; const { renderingKey, nextKey, updateNextKey } = useModalTransitionKeys(state, Boolean(isOpen)); + const withModalHeader = !isHardwareAccount && !IS_CAPACITOR; const currentlyReadyToUnfreezeAmount = useMemo(() => { if (!vesting) return '0'; @@ -103,7 +105,7 @@ function VestingPasswordModal({ function renderInfo() { return ( <> -
+
{lang('%amount% to %address%', { @@ -116,7 +118,7 @@ function VestingPasswordModal({ })}
-
+
{renderText(lang('$fee_value_bold', { fee: formatCurrency(claimAmount, TON_SYMBOL) }))}
@@ -152,14 +154,14 @@ function VestingPasswordModal({ return ( {renderInfo()} @@ -170,8 +172,8 @@ function VestingPasswordModal({ return ( {renderContent} - ); } diff --git a/src/config.ts b/src/config.ts index af01e1ef..dcb82028 100644 --- a/src/config.ts +++ b/src/config.ts @@ -123,7 +123,7 @@ export const PROXY_HOSTS = process.env.PROXY_HOSTS; export const TINY_TRANSFER_MAX_COST = 0.01; -export const LANG_CACHE_NAME = 'mtw-lang-114'; +export const LANG_CACHE_NAME = 'mtw-lang-115'; export const LANG_LIST: LangItem[] = [{ langCode: 'en', diff --git a/src/i18n/de.yaml b/src/i18n/de.yaml index 4d39b955..534b4039 100644 --- a/src/i18n/de.yaml +++ b/src/i18n/de.yaml @@ -175,7 +175,6 @@ Receiving Address: Empfangs adresse Fee: Gebühr Edit: Bearbeiten Confirm: Bestätigen -Confirm Transaction: Transaktion bestätigen Coins have been sent!: Die Coins wurden gesendet! Details: Details Change password visibility: Sichtbarkeit des Passworts ändern @@ -258,7 +257,7 @@ You can save this address for quick access while sending.: Sie können diese Adr Stake Again: Erneut staken Earned: Verdient Connect Dapp: Dapp verbinden -Select wallets to use on this dapp: Wählen Sie Wallet aus, die Sie auf dieser Dapp verwenden möchten. +Select wallet to use on this dapp: Wählen Sie die Brieftasche aus, die Sie für diese Dapp verwenden möchten. Connect: Verbinden Dapp Permissions: Dapp-Berechtigungen $dapp_can_view_balance: "%dappname% wird die Wallet adresse und den Kontostand anzeigen können." @@ -621,3 +620,7 @@ Open in Safari: In Safari öffnen Open in Browser: Im Browser öffnen CopyURL: URL kopieren Share: Teilen +Confirm Sending: Senden bestätigen +Confirm Burning: Brennen bestätigen +Confirm Passcode: Passcode bestätigen +Enter your code: Gib deinen Code ein diff --git a/src/i18n/en.yaml b/src/i18n/en.yaml index e6f0af24..df58d6c9 100644 --- a/src/i18n/en.yaml +++ b/src/i18n/en.yaml @@ -175,7 +175,6 @@ Receiving Address: Receiving Address Fee: Fee Edit: Edit Confirm: Confirm -Confirm Transaction: Confirm Transaction Coins have been sent!: Coins have been sent! Details: Details Change password visibility: Change password visibility @@ -257,7 +256,7 @@ You can save this address for quick access while sending.: You can save this add Stake Again: Stake Again Earned: Earned Connect Dapp: Connect Dapp -Select wallets to use on this dapp: Select wallets to use on this dapp +Select wallet to use on this dapp: Select wallet to use on this dapp Connect: Connect Dapp Permissions: Dapp Permissions $dapp_can_view_balance: "%dappname% will be able to view wallet address and balance." @@ -621,3 +620,7 @@ Open in Safari: Open in Safari Open in Browser: Open in browser CopyURL: Copy URL Share: Share +Confirm Sending: Confirm Sending +Confirm Burning: Confirm Burning +Confirm Passcode: Confirm Passcode +Enter your code: Enter your code diff --git a/src/i18n/es.yaml b/src/i18n/es.yaml index c00c9ca5..903e62ae 100644 --- a/src/i18n/es.yaml +++ b/src/i18n/es.yaml @@ -175,7 +175,6 @@ Receiving Address: Dirección del receptor Fee: Comisión Edit: Editar Confirm: Confirmar -Confirm Transaction: Confirmar transacción Coins have been sent!: ¡Se han enviado monedas! Details: Detalles Change password visibility: Cambiar la visibilidad de la contraseña @@ -256,7 +255,7 @@ You can save this address for quick access while sending.: Puede guardar esta di Stake Again: Apostar de nuevo Earned: Ganado Connect Dapp: Conectar Dapp -Select wallets to use on this dapp: Seleccione monederos para usar en esta dapp +Select wallet to use on this dapp: Seleccione la billetera para usar en esta dapp Connect: Conectar Dapp Permissions: Permisos de la Dapp $dapp_can_view_balance: "%dappname% podrá ver la dirección y el saldo del monedero." @@ -617,3 +616,7 @@ Open in Safari: Abrir en Safari Open in Browser: Abrir en el navegador CopyURL: Copiar URL Share: Compartir +Confirm Sending: Confirmar envío +Confirm Burning: Confirmar quema +Confirm Passcode: Confirmar contraseña +Enter your code: Ingrese su código diff --git a/src/i18n/pl.yaml b/src/i18n/pl.yaml index 6f0f1adb..4c00e459 100644 --- a/src/i18n/pl.yaml +++ b/src/i18n/pl.yaml @@ -175,7 +175,6 @@ Receiving Address: Adres odbioru Fee: Opłata Edit: Edytuj Confirm: Potwierdzenie -Confirm Transaction: Potwierdź transakcję Coins have been sent!: Monety zostały wysłane! Details: Szczegóły Change password visibility: Zmiana widoczności hasła @@ -257,7 +256,7 @@ You can save this address for quick access while sending.: Możesz zapisać ten Stake Again: Zastaw ponownie Earned: Zarobione Connect Dapp: Połącz aplikację -Select wallets to use on this dapp: Wybierz portfele do użycia w tej aplikacji +Select wallet to use on this dapp: Wybierz portfel, którego chcesz używać w tym dappie Connect: Połącz Dapp Permissions: Uprawnienia aplikacji $dapp_can_view_balance: "%dappname% będzie mógł zobaczyć adres portfela i saldo." @@ -622,3 +621,7 @@ Open in Safari: Otwórz w Safari Open in Browser: Otwórz w przeglądarce CopyURL: Kopiuj URL Share: Udostępnij +Confirm Sending: Potwierdź wysłanie +Confirm Burning: Potwierdź spalanie +Confirm Passcode: Potwierdź hasło +Enter your code: Wpisz swój kod diff --git a/src/i18n/ru.yaml b/src/i18n/ru.yaml index 3f22783e..c98f117d 100644 --- a/src/i18n/ru.yaml +++ b/src/i18n/ru.yaml @@ -176,7 +176,6 @@ Receiving Address: Адрес получателя Fee: Комиссия Edit: Исправить Confirm: Подтвердить -Confirm Transaction: Подтвердите перевод Coins have been sent!: Перевод отправлен! Details: Инфо Change password visibility: Изменить видимость пароля @@ -251,7 +250,7 @@ You can save this address for quick access while sending.: Вы можете с Stake Again: Повторить депозит Earned: Заработано Connect Dapp: Подключить приложение -Select wallets to use on this dapp: Выберите кошельки для использования с этим приложением +Select wallet to use on this dapp: Выберите кошелёк для использования с этим приложением Connect: Подключить Dapp Permissions: Разрешения для приложения $dapp_can_view_balance: "Для %dappname% будет доступен ваш адрес кошелька и баланс." @@ -619,3 +618,7 @@ Open in Safari: Открыть в Safari Open in Browser: Открыть в браузере CopyURL: Скопировать URL Share: Поделиться +Confirm Sending: Подтвердите отправку +Confirm Burning: Подтвердите сжигание +Confirm Passcode: Подтвердите пароль +Enter your code: Введите ваш код diff --git a/src/i18n/th.yaml b/src/i18n/th.yaml index b552be04..d298074b 100644 --- a/src/i18n/th.yaml +++ b/src/i18n/th.yaml @@ -175,7 +175,6 @@ Receiving Address: ที่อยู่บัญชีผู้รับ Fee: ค่าธรรมเนียม Edit: แก้ไข Confirm: ยืนยัน -Confirm Transaction: ยืนยันการทำรายการ Coins have been sent!: โทเคนได้ถูกส่งแล้ว! Details: รายละเอียด Change password visibility: เปลี่ยนการแสดงรหัสผ่าน @@ -257,7 +256,7 @@ You can save this address for quick access while sending.: คุณสามา Stake Again: สเต็กอีกครั้ง Earned: ได้รับแล้ว Connect Dapp: เชื่อมต่อ Dapp -Select wallets to use on this dapp: เลือกวอลเล็ตที่จะใช้ใน Dapp +Select wallet to use on this dapp: เลือกกระเป๋าเงินที่จะใช้กับ dapp นี้ Connect: เชื่อมต่อ Dapp Permissions: สิทธิในการใช้ Dapp $dapp_can_view_balance: "%dappname% จะสามารถดูที่อยู่บัญชีและยอดเงินของวอลเล็ตของคุณได้." @@ -622,3 +621,7 @@ Open in Safari: เปิดใน Safari Open in Browser: เปิดในเบราว์เซอร์ CopyURL: คัดลอก URL Share: แชร์ +Confirm Sending: ยืนยันการส่ง +Confirm Burning: ยืนยันการเผาไหม้ +Confirm Passcode: ยืนยันรหัสผ่าน +Enter your code: ใส่รหัสของคุณ diff --git a/src/i18n/tr.yaml b/src/i18n/tr.yaml index 38490ecb..e364987e 100644 --- a/src/i18n/tr.yaml +++ b/src/i18n/tr.yaml @@ -175,7 +175,6 @@ Receiving Address: Alıcı adresi Fee: Ücret Edit: Düzenle Confirm: Onayla -Confirm Transaction: İşlemi onayla Coins have been sent!: Coin'ler gönderildi! Details: Detaylar Change password visibility: Parola görünürlüğünü değiştir @@ -258,7 +257,7 @@ You can save this address for quick access while sending.: Gönderirken hızlı Stake Again: Yeniden stake edin Earned: Kazanıldı Connect Dapp: Dapp'ı bağla -Select wallets to use on this dapp: Bu Dapp üzerinde kullanılacak cüzdanları seçin +Select wallet to use on this dapp: Bu dapp üzerinde kullanılacak cüzdanı seçin Connect: Bağlan Dapp Permissions: Dapp İzinleri $dapp_can_view_balance: "%dappname% cüzdan adresini ve bakiyesini görüntüleyebilecek." @@ -620,3 +619,7 @@ Open in Safari: Safari'de Aç Open in Browser: Tarayıcıda Aç CopyURL: URL'yi Kopyala Share: Paylaş +Confirm Sending: Göndermeyi Onayla +Confirm Burning: Yazmayı Onayla +Confirm Passcode: Şifreyi Onayla +Enter your code: Kodunuzu girin diff --git a/src/i18n/uk.yaml b/src/i18n/uk.yaml index 580624f5..d8df257d 100644 --- a/src/i18n/uk.yaml +++ b/src/i18n/uk.yaml @@ -176,7 +176,6 @@ Receiving Address: Адреса одержувача Fee: Комісія Edit: Виправити Confirm: Підтвердити -Confirm Transaction: Підтвердіть переказ Coins have been sent!: Переказ надіслано! Details: Інфо Change password visibility: Змінити видимість пароля @@ -251,7 +250,7 @@ You can save this address for quick access while sending.: Ви можете з Stake Again: Повторити депозит Earned: Зароблено Connect Dapp: Підключити додаток -Select wallets to use on this dapp: Виберіть гаманці для використання з цим додатком +Select wallet to use on this dapp: Виберіть гаманець для використання в цій програмі Connect: Підключити Dapp Permissions: Дозволи для програми $dapp_can_view_balance: "Для %dappname% буде доступна ваша адреса гаманця і баланс." @@ -620,3 +619,7 @@ Open in Safari: Відкрити в Safari Open in Browser: Відкрити в браузері CopyURL: Скопіювати URL Share: Поділитися +Confirm Sending: Підтвердити відправку +Confirm Burning: Підтвердити запис +Confirm Passcode: Підтвердьте пароль +Enter your code: Введіть ваш код diff --git a/src/i18n/zh-Hans.yaml b/src/i18n/zh-Hans.yaml index ee2cca6b..166d19ef 100644 --- a/src/i18n/zh-Hans.yaml +++ b/src/i18n/zh-Hans.yaml @@ -169,7 +169,6 @@ Receiving Address: 接收地址 Fee: 手续费 Edit: 编辑 Confirm: 确认 -Confirm Transaction: 确认交易 Coins have been sent!: 代币已送出! Details: 明细 Change password visibility: 改变密码可见 @@ -245,7 +244,7 @@ You can save this address for quick access while sending.: 您可以保存此地 Stake Again: 再次质押 Earned: 获得 Connect Dapp: 连接Dapp -Select wallets to use on this dapp: 选择要在此 dapp 上使用的钱包 +Select wallet to use on this dapp: 选择在此 dapp 上使用的钱包 Connect: 连接 Dapp Permissions: Dapp 权限 $dapp_can_view_balance: "%dappname% 将能够查看钱包地址和余额。" @@ -604,3 +603,7 @@ Open in Safari: 在 Safari 中打开 Open in Browser: 在浏览器中打开 CopyURL: 复制链接 Share: 分享 +Confirm Sending: 确认发送 +Confirm Burning: 确认刻录 +Confirm Passcode: 确认密码 +Enter your code: 输入您的代码 diff --git a/src/i18n/zh-Hant.yaml b/src/i18n/zh-Hant.yaml index 802b2470..aa3bdd40 100644 --- a/src/i18n/zh-Hant.yaml +++ b/src/i18n/zh-Hant.yaml @@ -169,7 +169,6 @@ Receiving Address: 接收地址 Fee: 手續費 Edit: 編輯 Confirm: 確認 -Confirm Transaction: 確認交易 Coins have been sent!: 代幣已送出! Details: 明細 Change password visibility: 更改密碼能見度 @@ -245,7 +244,7 @@ You can save this address for quick access while sending.: 您可以保存此地 Stake Again: 再次質押 Earned: 獲得 Connect Dapp: 連接Dapp -Select wallets to use on this dapp: 選擇要在此 dapp 上使用的錢包 +Select wallet to use on this dapp: 選擇要在此 dapp 上使用的錢包 Connect: 連接 Dapp Permissions: Dapp 權限 $dapp_can_view_balance: "%dappname%將能夠查看錢包地址和余額。" @@ -604,3 +603,7 @@ Open in Safari: 在 Safari 中打開 Open in Browser: 在瀏覽器中打開 CopyURL: 複製鏈接 Share: 分享 +Confirm Sending: 確認發送 +Confirm Burning: 確認刻錄 +Confirm Passcode: 確認密碼 +Enter your code: 輸入您的代碼 diff --git a/src/util/fetch.ts b/src/util/fetch.ts index 12aa2530..abd3fd34 100644 --- a/src/util/fetch.ts +++ b/src/util/fetch.ts @@ -90,6 +90,7 @@ export async function fetchWithTimeout(url: string | URL, init?: RequestInit, ti return await fetch(url, { ...init, signal: controller.signal, + cache: 'no-cache', // TODO Remove it after a few releases }); } finally { clearTimeout(id);