Skip to content

Commit 103d0f7

Browse files
ci(release): publish latest release
1 parent be33720 commit 103d0f7

File tree

1,074 files changed

+44791
-41595
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,074 files changed

+44791
-41595
lines changed

.yarn/patches/@tamagui-web-npm-1.121.7-4de089c18f.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ index 40466f28af50e22730462702a96e2c8b41969276..92f8f589a72098efc72e58f7cf64fb80
4343
}, 50))), content;
4444
});
4545
+ // UNISWAP PATCH: Using key to avoid conditionally calling useAnimation hook
46-
+ var component = /* @__PURE__ */ React.forwardRef(function(propsIn, forwardedRef) {
46+
+ var component = /* @__PURE__ */ import_react.default.forwardRef(function(propsIn, forwardedRef) {
4747
+ return /* @__PURE__ */ _jsx(OldComponent, {
4848
+ ref: forwardedRef,
4949
+ ...propsIn,

CODEOWNERS

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @uniswap/web-admins

RELEASE

+71-12
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,71 @@
1-
We are back with some new updates! Here’s the latest:
2-
3-
Unichain Updates: Enjoy faster swap speeds, more onramp options, and more token data.
4-
Monad Testnet Support: Swap here by toggling to testnet mode in settings
5-
6-
Other changes:
7-
- VND currency support
8-
- Improvements to our NFT Spam reporting feature
9-
- Stronger warnings when sending funds to token contracts
10-
- New icon for the Buy/Sell button on the homepage
11-
- Various bug fixes and performance improvements
12-
- Improved help center articles
1+
IPFS hash of the deployment:
2+
- CIDv0: `QmcmxzrNZV6PSQUvi77szywWtT7oG5MB13GwMoaN7nbpBU`
3+
- CIDv1: `bafybeigwp7iptpdnrs7ot27t2aibq7d6mgmptfe6tivot3wp2lvfig3wtm`
4+
5+
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
6+
7+
You can also access the Uniswap Interface from an IPFS gateway.
8+
**BEWARE**: The Uniswap interface uses [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to remember your settings, such as which tokens you have imported.
9+
**You should always use an IPFS gateway that enforces origin separation**, or our hosted deployment of the latest release at [app.uniswap.org](https://app.uniswap.org).
10+
Your Uniswap settings are never remembered across different URLs.
11+
12+
IPFS gateways:
13+
- https://bafybeigwp7iptpdnrs7ot27t2aibq7d6mgmptfe6tivot3wp2lvfig3wtm.ipfs.dweb.link/
14+
- [ipfs://QmcmxzrNZV6PSQUvi77szywWtT7oG5MB13GwMoaN7nbpBU/](ipfs://QmcmxzrNZV6PSQUvi77szywWtT7oG5MB13GwMoaN7nbpBU/)
15+
16+
## 5.77.0 (2025-03-19)
17+
18+
19+
### Features
20+
21+
* **web:** [creating pool] modify setting initial price style (#17104) 2a3047e
22+
* **web:** [lp] add migrate button on v3 positions (#17301) 48dcf56
23+
* **web:** [lp] add warnings based on price differential (#17163) e655444
24+
* **web:** add wallet connection/status to datadog issues (#17125) 3ea2492
25+
* **web:** avoid non-actionable rpc errors for testnet chains (#17188) cfdd7af
26+
* **web:** delete legacy swap :O (#16378) 246d6da
27+
* **web:** initialize creating a pool with current price info (#17075) 9c2e992
28+
29+
30+
### Bug Fixes
31+
32+
* **web:** [lp] mweb cleanups (#17260) 5327e78
33+
* **web:** add back h1 to swap tab header (#16941) c12b85d
34+
* **web:** add missing version to DD initialization (#17314) e51f608
35+
* **web:** dont fail test if snapshot revert fails (#17230) 4034ce9
36+
* **web:** filter internal RPC errors in wrapSaga on testnets (#16952) e8264f2
37+
* **web:** fix swapping on TDP (#17379) fa90c53
38+
* **web:** fix X IconButton in enter hook address form (#17261) 54bbce1
39+
* **web:** gap in positions cards as a result of using AdaptiveDropdown, and some more minor enhancements (#16384) b56607b
40+
* **web:** remove sentry from error boundary to fix double render (#17… (#17524) af665cd
41+
* **web:** remove sprinkles from NFT common.css (#16753) f359718
42+
* **web:** remove sprinkles from NFT index.css file (#16755) 1c71867
43+
* **web:** remove sprinkles from nft loading.css (#16754) 55d7321
44+
* **web:** remove sprinkles from web app (#16756) 2dd0b72
45+
* **web:** remove styled from ActivitySwitcher (#17002) 64151b1
46+
* **web:** remove styled from NFT CollectionSearch (#17003) 1097730
47+
* **web:** remove unused dep - immer (#17187) 2c3d3ab
48+
* **web:** remove vanilla-extract from Cells.css (#17168) 0f96de7
49+
* **web:** remove vanilla-extract from CollectionDetails (#17005) 5e720d9
50+
* **web:** remove vanilla-extract from FilterButton (#17006) 32a583c
51+
* **web:** remove vanilla-extract from Filters.css (#17007) de5aa23
52+
* **web:** remove vanilla-extract from LoadingSparkle (#17166) 42f2485
53+
* **web:** remove vanilla-extract from NFT Activity (#17004) 480bce6
54+
* **web:** remove vanilla-extract from PriceRange (#17008) 0689ffa
55+
* **web:** remove vanilla-extract from SortDropdown (#17167) 82a18ee
56+
* **web:** reverse animation direction for extension (#17110) c0758d2
57+
* **web:** send do not allow fiat input testnet (#16675) 16ee4be
58+
* **web:** tweak stagehand landing page commands (#17281) b64a525
59+
60+
61+
### Continuous Integration
62+
63+
* **web:** update sitemaps e4d288c
64+
65+
66+
### Code Refactoring
67+
68+
* **web:** buy e2e test (#17164) ca807e8
69+
* **web:** landing page e2e test migration to playwright (#17207) 23c402d
70+
71+

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
mobile/1.47.1
1+
web/5.77.0

apps/extension/.eslintrc.js

+22-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
const rulesDirPlugin = require('eslint-plugin-rulesdir')
2+
rulesDirPlugin.RULES_DIR = '../../packages/uniswap/eslint_rules'
3+
14
module.exports = {
25
root: true,
3-
extends: ['@uniswap/eslint-config/native'],
6+
extends: ['@uniswap/eslint-config/native-app'],
7+
plugins: ['rulesdir'],
48
ignorePatterns: [
59
'node_modules',
610
'dist',
@@ -20,6 +24,7 @@ module.exports = {
2024
ecmaVersion: 2018,
2125
sourceType: 'module',
2226
},
27+
rules: {},
2328
overrides: [
2429
{
2530
files: ['src/assets/index.ts', 'src/contentScript/index.tsx'],
@@ -38,6 +43,21 @@ module.exports = {
3843
],
3944
},
4045
},
46+
{
47+
files: ['**/contentScript/injected.ts'],
48+
rules: {
49+
'no-restricted-syntax': [
50+
'error',
51+
{
52+
selector: 'CallExpression[callee.object.name="logger"][callee.property.name!=/^(debug)$/]',
53+
message:
54+
'Only logger.debug is allowed in this file. Please handle errors and info logs explicitly using ErrorLog and InfoLog message passing.',
55+
},
56+
],
57+
},
58+
},
4159
],
42-
rules: {},
60+
rules: {
61+
'rulesdir/i18n': 'error',
62+
},
4363
}

apps/extension/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@uniswap/v3-sdk": "3.25.2",
1717
"@uniswap/v4-sdk": "1.21.2",
1818
"dotenv-webpack": "8.0.1",
19+
"eslint-plugin-rulesdir": "0.2.2",
1920
"ethers": "5.7.2",
2021
"eventemitter3": "5.0.1",
2122
"framer-motion": "10.17.6",

apps/extension/src/app/apollo.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ApolloProvider } from '@apollo/client'
22
import { PropsWithChildren } from 'react'
33
import { localStorage } from 'redux-persist-webextension-storage'
44
import { getReduxStore } from 'src/store/store'
5-
// eslint-disable-next-line no-restricted-imports
5+
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
66
import { usePersistedApolloClient } from 'wallet/src/data/apollo/usePersistedApolloClient'
77

88
// Extension local storage has 10 MB limit, so we want to be very careful to leave enough space for the redux store + any other data that we might want to store in local storage

apps/extension/src/app/components/ComingSoon.tsx

-33
This file was deleted.

apps/extension/src/app/components/PasswordInput.tsx

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { forwardRef } from 'react'
22
import { useTranslation } from 'react-i18next'
33
import { TextInput } from 'react-native'
44
import { Input, InputProps } from 'src/app/components/Input'
5-
import { DeprecatedButton, Flex, FlexProps, IconProps, Text } from 'ui/src'
5+
import { Flex, FlexProps, IconProps, Text, TouchableArea } from 'ui/src'
66
import { Eye, EyeOff } from 'ui/src/components/icons'
77
import { PasswordStrength, getPasswordStrengthTextAndColor } from 'wallet/src/utils/password'
88

@@ -34,16 +34,17 @@ export const PasswordInput = forwardRef<TextInput, PasswordInputProps>(function
3434
<StrengthIndicator strength={passwordStrength} />
3535
) : (
3636
onToggleHideInput && (
37-
<DeprecatedButton
37+
<TouchableArea
3838
backgroundColor="$transparent"
3939
hoverStyle={hoverStyle}
4040
position="absolute"
4141
pressStyle={hoverStyle}
4242
right="$spacing8"
43+
p="$spacing12"
4344
onPress={(): void => onToggleHideInput(!hideInput)}
4445
>
4546
{hideInput ? <Eye {...iconProps} /> : <EyeOff {...iconProps} />}
46-
</DeprecatedButton>
47+
</TouchableArea>
4748
)
4849
)}
4950
</Flex>

apps/extension/src/app/components/Trace/TraceUserProperties.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useAppFiatCurrencyInfo } from 'uniswap/src/features/fiatCurrency/hooks'
55
import { useCurrentLanguage } from 'uniswap/src/features/language/hooks'
66
import { useHideSmallBalancesSetting, useHideSpamTokensSetting } from 'uniswap/src/features/settings/hooks'
77
import { ExtensionUserPropertyName, setUserProperty } from 'uniswap/src/features/telemetry/user'
8-
// eslint-disable-next-line no-restricted-imports
8+
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
99
import { analytics } from 'utilities/src/telemetry/analytics/analytics'
1010
import { useGatingUserPropertyUsernames } from 'wallet/src/features/gating/userPropertyHooks'
1111
import { useActiveAccount, useSignerAccounts, useViewOnlyAccounts } from 'wallet/src/features/wallet/hooks'

apps/extension/src/app/components/loading/LoadingSpinner.tsx

-28
This file was deleted.

apps/extension/src/app/components/loading/SelectWalletSkeleton.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SkeletonBox } from 'src/app/components/loading/SkeletonBox'
22
import { Flex } from 'ui/src'
3-
import { WALLET_PREVIEW_CARD_HEIGHT } from 'wallet/src/components/WalletPreviewCard/WalletPreviewCard'
3+
import { WALLET_PREVIEW_CARD_MIN_HEIGHT } from 'wallet/src/components/WalletPreviewCard/WalletPreviewCard'
44

55
export function SelectWalletsSkeleton({ repeat = 3 }: { repeat?: number }): JSX.Element {
66
return (
@@ -20,7 +20,7 @@ function WalletSkeleton({ opacity }: { opacity: number }): JSX.Element {
2020
borderColor="$surface3"
2121
borderRadius="$rounded20"
2222
borderWidth="$spacing1"
23-
height={WALLET_PREVIEW_CARD_HEIGHT}
23+
height={WALLET_PREVIEW_CARD_MIN_HEIGHT}
2424
justifyContent="flex-start"
2525
opacity={opacity}
2626
overflow="hidden"

apps/extension/src/app/components/loading/SkeletonBox.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ export function SkeletonBox({
1212
height: number | string
1313
borderRadius?: string
1414
}): JSX.Element {
15+
// eslint-disable-next-line react/forbid-elements
1516
return <div className="skeleton-box" style={{ width, height, borderRadius }} />
1617
}

apps/extension/src/app/components/modal/InfoModal.tsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ReactNode } from 'react'
2-
import { Anchor, DeprecatedButton, Flex, Text, TouchableArea, useSporeColors } from 'ui/src'
2+
import { Anchor, Button, ButtonEmphasis, Flex, Text, TouchableArea, useSporeColors } from 'ui/src'
33
import { X } from 'ui/src/components/icons'
44
import { zIndexes } from 'ui/src/theme'
55
import { Modal } from 'uniswap/src/components/modals/Modal'
@@ -14,7 +14,7 @@ export interface ModalProps {
1414
title: string
1515
description: string
1616
buttonText: string
17-
buttonTheme?: 'primary' | 'secondary' | 'tertiary'
17+
buttonEmphasis?: ButtonEmphasis
1818
onButtonPress?: () => void
1919
linkText?: string
2020
linkUrl?: string
@@ -29,7 +29,7 @@ export function InfoModal({
2929
title,
3030
description,
3131
buttonText,
32-
buttonTheme,
32+
buttonEmphasis,
3333
onButtonPress,
3434
linkText,
3535
linkUrl,
@@ -60,9 +60,11 @@ export function InfoModal({
6060
{description}
6161
</Text>
6262
</Flex>
63-
<DeprecatedButton size="medium" theme={buttonTheme} width="100%" onPress={onButtonPress}>
64-
{buttonText}
65-
</DeprecatedButton>
63+
<Flex row alignSelf="stretch">
64+
<Button size="medium" emphasis={buttonEmphasis} onPress={onButtonPress}>
65+
{buttonText}
66+
</Button>
67+
</Flex>
6668
{linkText && linkUrl && (
6769
<Anchor href={linkUrl} lineHeight={16} p="$spacing12" target="_blank" textDecorationLine="none">
6870
<Text color="$neutral2" textAlign="center" variant="buttonLabel3">

apps/extension/src/app/core/PopupApp.tsx

+17-14
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ErrorElement } from 'src/app/components/ErrorElement'
99
import { BaseAppContainer } from 'src/app/core/BaseAppContainer'
1010
import { DatadogAppNameTag } from 'src/app/datadog'
1111
import { initExtensionAnalytics } from 'src/app/utils/analytics'
12-
import { DeprecatedButton, Flex, Image, Text } from 'ui/src'
12+
import { Button, Flex, Image, Text } from 'ui/src'
1313
import { CHROME_LOGO, UNISWAP_LOGO } from 'ui/src/assets'
1414
import { iconSizes, spacing } from 'ui/src/theme'
1515
import { syncAppWithDeviceLanguage } from 'uniswap/src/features/settings/slice'
@@ -75,19 +75,22 @@ function PopupContent(): JSX.Element {
7575
<Flex fill />
7676

7777
<Trace logPress element={ElementName.ExtensionPopupOpenButton}>
78-
<DeprecatedButton
79-
theme="primary"
80-
width="100%"
81-
onPress={async () => {
82-
if (windowIdNumber) {
83-
// eslint-disable-next-line security/detect-non-literal-fs-filename
84-
await chrome.sidePanel.open({ tabId: tabIdNumber, windowId: windowIdNumber })
85-
window.close()
86-
}
87-
}}
88-
>
89-
{t('extension.popup.chrome.button')}
90-
</DeprecatedButton>
78+
<Flex>
79+
<Button
80+
variant="branded"
81+
emphasis="primary"
82+
size="medium"
83+
width="100%"
84+
onPress={async () => {
85+
if (windowIdNumber) {
86+
await chrome.sidePanel.open({ tabId: tabIdNumber, windowId: windowIdNumber })
87+
window.close()
88+
}
89+
}}
90+
>
91+
{t('extension.popup.chrome.button')}
92+
</Button>
93+
</Flex>
9194
</Trace>
9295
</Flex>
9396
</Trace>

apps/extension/src/app/core/SidebarApp.tsx

-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import { ReceiveScreen } from 'src/app/features/receive/ReceiveScreen'
1616
import { SendFlow } from 'src/app/features/send/SendFlow'
1717
import { DevMenuScreen } from 'src/app/features/settings/DevMenuScreen'
1818
import { SettingsManageConnectionsScreen } from 'src/app/features/settings/SettingsManageConnectionsScreen/SettingsManageConnectionsScreen'
19-
import { SettingsPermissionsScreen } from 'src/app/features/settings/SettingsPermissionsScreen'
2019
import { RemoveRecoveryPhraseVerify } from 'src/app/features/settings/SettingsRecoveryPhraseScreen/RemoveRecoveryPhraseVerify'
2120
import { RemoveRecoveryPhraseWallets } from 'src/app/features/settings/SettingsRecoveryPhraseScreen/RemoveRecoveryPhraseWallets'
2221
import { SettingsViewRecoveryPhraseScreen } from 'src/app/features/settings/SettingsRecoveryPhraseScreen/ViewRecoveryPhraseScreen'
@@ -96,11 +95,6 @@ const router = createHashRouter([
9695
},
9796
],
9897
},
99-
{
100-
path: SettingsRoutes.Privacy,
101-
element: <SettingsPermissionsScreen />,
102-
},
103-
{ path: SettingsRoutes.Permissions, element: <SettingsPermissionsScreen /> },
10498
{
10599
path: SettingsRoutes.ManageConnections,
106100
element: <SettingsManageConnectionsScreen />,

0 commit comments

Comments
 (0)