Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
interface
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
LuckySwap
interface
Commits
afb0d138
Commit
afb0d138
authored
Jun 16, 2025
by
Uniswap Labs Service Account
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ci(release): publish latest release
parent
91d554d4
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
219 additions
and
142 deletions
+219
-142
RELEASE
RELEASE
+2
-1
VERSION
VERSION
+1
-1
package.json
apps/extension/package.json
+1
-0
HomeScreen.tsx
apps/extension/src/app/features/home/HomeScreen.tsx
+8
-7
PortfolioActionButtons.tsx
...xtension/src/app/features/home/PortfolioActionButtons.tsx
+1
-8
manifest.json
apps/extension/src/manifest.json
+1
-1
build.gradle
apps/mobile/android/app/build.gradle
+3
-3
babel.config.js
apps/mobile/babel.config.js
+11
-10
project.pbxproj
apps/mobile/ios/Uniswap.xcodeproj/project.pbxproj
+24
-24
checkBundleSize.sh
apps/mobile/scripts/checkBundleSize.sh
+1
-1
batchedTransactionSaga.ts
...bile/src/features/walletConnect/batchedTransactionSaga.ts
+3
-1
HomeScreen.tsx
apps/mobile/src/screens/HomeScreen/HomeScreen.tsx
+1
-1
SelectWalletScreen.tsx
apps/mobile/src/screens/Import/SelectWalletScreen.tsx
+73
-30
SettingsFiatCurrencyModal.tsx
apps/mobile/src/screens/SettingsFiatCurrencyModal.tsx
+6
-2
WarningModal.tsx
...iswap/src/components/modals/WarningModal/WarningModal.tsx
+6
-4
urls.ts
packages/uniswap/src/constants/urls.ts
+0
-1
useIsChromeWindowFocused.ts
packages/uniswap/src/extension/useIsChromeWindowFocused.ts
+25
-31
flags.ts
packages/uniswap/src/features/gating/flags.ts
+2
-2
NetworkCostBanner.tsx
...wap/src/features/smartWallet/banner/NetworkCostBanner.tsx
+1
-3
TokenWarningModal.tsx
packages/uniswap/src/features/tokens/TokenWarningModal.tsx
+13
-1
NetworkFeeWarning.tsx
...ap/src/features/transactions/modals/NetworkFeeWarning.tsx
+7
-5
SwapFormTooltips.tsx
...form/SwapFormScreen/SwapFormTooltips/SwapFormTooltips.tsx
+1
-1
SmartWalletModal.tsx
...llet/src/features/smartWallet/modals/SmartWalletModal.tsx
+3
-2
yarn.lock
yarn.lock
+25
-2
No files found.
RELEASE
View file @
afb0d138
...
...
@@ -2,5 +2,6 @@ We are back with a large update: Smart wallets are here! Enable smart wallets fr
Other changes:
- When connected to Uniswap Web, you’ll see a new verification check mark so that you know you’re on the right website.
- Users can now enjoy multi-account signing, as well as 1 click Auth support, when connecting to external dapps via WalletConnect
- When connecting to external dapps, users can benefit from better malicious dapp detection.
- Various bug fixes and performance improvements
\ No newline at end of file
VERSION
View file @
afb0d138
extension/1.22.2
\ No newline at end of file
mobile/1.52.2
\ No newline at end of file
apps/extension/package.json
View file @
afb0d138
...
...
@@ -35,6 +35,7 @@
"react-native-reanimated"
:
"3.16.7"
,
"react-native-svg"
:
"15.10.1"
,
"react-native-web"
:
"0.19.13"
,
"react-player"
:
"2.16.0"
,
"react-qr-code"
:
"2.0.12"
,
"react-redux"
:
"8.0.5"
,
"react-router-dom"
:
"6.10.0"
,
...
...
apps/extension/src/app/features/home/HomeScreen.tsx
View file @
afb0d138
...
...
@@ -2,6 +2,7 @@ import { useApolloClient } from '@apollo/client'
import
{
SharedEventName
}
from
'
@uniswap/analytics-events
'
import
{
memo
,
useCallback
,
useEffect
,
useState
}
from
'
react
'
import
{
useTranslation
}
from
'
react-i18next
'
import
ReactPlayer
from
'
react-player
'
import
{
useDispatch
,
useSelector
}
from
'
react-redux
'
import
{
ActivityTab
}
from
'
src/app/components/tabs/ActivityTab
'
import
{
NftsTab
}
from
'
src/app/components/tabs/NftsTab
'
...
...
@@ -43,19 +44,19 @@ import { setSmartWalletConsent } from 'wallet/src/features/wallet/slice'
const
MemoizedVideo
=
memo
(()
=>
(
<
Flex
borderRadius=
"$rounded12"
overflow=
"hidden"
height=
"auto"
maxWidth=
"100%"
aspectRatio=
"16 / 9"
>
<
video
src=
{
SMART_WALLET_UPGRADE_VIDEO
}
<
ReactPlayer
url=
{
SMART_WALLET_UPGRADE_VIDEO
}
width=
"100%"
height=
"100%"
playing=
{
true
}
muted=
{
true
}
style=
{
{
width
:
'
100%
'
,
height
:
'
100%
'
,
objectFit
:
'
cover
'
,
}
}
autoPlay
muted
fallback=
{
undefined
}
/>
</
Flex
>
))
MemoizedVideo
.
displayName
=
'
MemoizedVideo
'
export
const
HomeScreen
=
memo
(
function
_HomeScreen
():
JSX
.
Element
{
...
...
apps/extension/src/app/features/home/PortfolioActionButtons.tsx
View file @
afb0d138
...
...
@@ -7,8 +7,6 @@ import { navigate } from 'src/app/navigation/state'
import
{
Flex
,
Text
,
getTokenValue
,
useMedia
}
from
'
ui/src
'
import
{
ArrowDownCircle
,
Bank
,
CoinConvert
,
SendAction
}
from
'
ui/src/components/icons
'
import
{
useEnabledChains
}
from
'
uniswap/src/features/chains/hooks/useEnabledChains
'
import
{
FeatureFlags
}
from
'
uniswap/src/features/gating/flags
'
import
{
useFeatureFlag
}
from
'
uniswap/src/features/gating/hooks
'
import
{
ElementName
}
from
'
uniswap/src/features/telemetry/constants
'
import
{
sendAnalyticsEvent
}
from
'
uniswap/src/features/telemetry/send
'
import
{
TestnetModeModal
}
from
'
uniswap/src/features/testnets/TestnetModeModal
'
...
...
@@ -74,7 +72,6 @@ export const PortfolioActionButtons = memo(function _PortfolioActionButtons(): J
const
{
t
}
=
useTranslation
()
const
media
=
useMedia
()
const
{
isTestnetModeEnabled
}
=
useEnabledChains
()
const
isFiatOffRampEnabled
=
useFeatureFlag
(
FeatureFlags
.
FiatOffRamp
)
const
onSendClick
=
():
void
=>
{
sendAnalyticsEvent
(
SharedEventName
.
ELEMENT_CLICKED
,
{
...
...
@@ -126,11 +123,7 @@ export const PortfolioActionButtons = memo(function _PortfolioActionButtons(): J
/>
<
Flex
row
shrink
gap=
"$spacing8"
width=
{
isGrid
?
'
100%
'
:
'
50%
'
}
>
<
ActionButton
Icon=
{
<
CoinConvert
/>
}
label=
{
t
(
'
home.label.swap
'
)
}
onClick=
{
onSwapClick
}
/>
<
ActionButton
Icon=
{
<
Bank
/>
}
label=
{
isFiatOffRampEnabled
?
t
(
'
home.label.for
'
)
:
t
(
'
home.label.buy
'
)
}
onClick=
{
onBuyClick
}
/>
<
ActionButton
Icon=
{
<
Bank
/>
}
label=
{
t
(
'
home.label.buy
'
)
}
onClick=
{
onBuyClick
}
/>
</
Flex
>
<
Flex
row
shrink
gap=
"$spacing8"
width=
{
isGrid
?
'
100%
'
:
'
50%
'
}
>
<
ActionButton
Icon=
{
<
SendAction
/>
}
label=
{
t
(
'
home.label.send
'
)
}
onClick=
{
onSendClick
}
/>
...
...
apps/extension/src/manifest.json
View file @
afb0d138
...
...
@@ -2,7 +2,7 @@
"manifest_version"
:
3
,
"name"
:
"Uniswap Extension"
,
"description"
:
"The Uniswap Extension is a self-custody crypto wallet that's built for swapping."
,
"version"
:
"1.2
2.2
"
,
"version"
:
"1.2
3.0
"
,
"minimum_chrome_version"
:
"116"
,
"icons"
:
{
"16"
:
"assets/icon16.png"
,
...
...
apps/mobile/android/app/build.gradle
View file @
afb0d138
...
...
@@ -71,9 +71,9 @@ if (isCI && datadogPropertiesAvailable) {
apply
from:
"../../../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle"
}
def
devVersionName
=
"1.5
3
"
def
betaVersionName
=
"1.5
3
"
def
prodVersionName
=
"1.5
3
"
def
devVersionName
=
"1.5
2.2
"
def
betaVersionName
=
"1.5
2.2
"
def
prodVersionName
=
"1.5
2.2
"
android
{
ndkVersion
rootProject
.
ext
.
ndkVersion
...
...
apps/mobile/babel.config.js
View file @
afb0d138
...
...
@@ -10,16 +10,17 @@ module.exports = function (api) {
plugins
=
[
...
plugins
,
process
.
env
.
NODE_ENV
===
'
test
'
?
null
:
[
'
@tamagui/babel-plugin
'
,
{
components
:
[
'
ui
'
],
// experimentalFlattenThemesOnNative: true,
config
:
'
../../packages/ui/src/tamagui.config.ts
'
,
},
],
// Disable compiler to fix mobile theme issues and media queries
// process.env.NODE_ENV === 'test'
// ? null
// : [
// '@tamagui/babel-plugin',
// {
// components: ['ui'],
// // experimentalFlattenThemesOnNative: true,
// config: '../../packages/ui/src/tamagui.config.ts',
// },
// ],
[
'
module-resolver
'
,
...
...
apps/mobile/ios/Uniswap.xcodeproj/project.pbxproj
View file @
afb0d138
...
...
@@ -2821,7 +2821,7 @@
"@executable_path/Frameworks"
,
"@loader_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_ENABLE_DEBUG_INFO
=
INCLUDE_SOURCE
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_DEBUG"
;
...
...
@@ -2874,7 +2874,7 @@
"@executable_path/Frameworks"
,
"@loader_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
schemes.WidgetsCore
;
...
...
@@ -2927,7 +2927,7 @@
"@executable_path/Frameworks"
,
"@loader_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
schemes.WidgetsCore
;
...
...
@@ -2980,7 +2980,7 @@
"@executable_path/Frameworks"
,
"@loader_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
schemes.WidgetsCore
;
...
...
@@ -3018,7 +3018,7 @@
GCC_C_LANGUAGE_STANDARD
=
gnu11
;
GENERATE_INFOPLIST_FILE
=
YES
;
IPHONEOS_DEPLOYMENT_TARGET
=
15.1
;
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_ENABLE_DEBUG_INFO
=
INCLUDE_SOURCE
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_DEBUG"
;
...
...
@@ -3054,7 +3054,7 @@
GCC_C_LANGUAGE_STANDARD
=
gnu11
;
GENERATE_INFOPLIST_FILE
=
YES
;
IPHONEOS_DEPLOYMENT_TARGET
=
15.1
;
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
schemes.WidgetsCoreTests
;
...
...
@@ -3089,7 +3089,7 @@
GCC_C_LANGUAGE_STANDARD
=
gnu11
;
GENERATE_INFOPLIST_FILE
=
YES
;
IPHONEOS_DEPLOYMENT_TARGET
=
15.1
;
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
schemes.WidgetsCoreTests
;
...
...
@@ -3124,7 +3124,7 @@
GCC_C_LANGUAGE_STANDARD
=
gnu11
;
GENERATE_INFOPLIST_FILE
=
YES
;
IPHONEOS_DEPLOYMENT_TARGET
=
15.1
;
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
schemes.WidgetsCoreTests
;
...
...
@@ -3171,7 +3171,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_ENABLE_DEBUG_INFO
=
INCLUDE_SOURCE
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_DEBUG"
;
...
...
@@ -3217,7 +3217,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.widgets
;
...
...
@@ -3263,7 +3263,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.dev.widgets
;
...
...
@@ -3309,7 +3309,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.beta.widgets
;
...
...
@@ -3351,7 +3351,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_ENABLE_DEBUG_INFO
=
INCLUDE_SOURCE
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_DEBUG"
;
...
...
@@ -3394,7 +3394,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.WidgetIntentExtension
;
...
...
@@ -3437,7 +3437,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.dev.WidgetIntentExtension
;
...
...
@@ -3480,7 +3480,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.beta.WidgetIntentExtension
;
...
...
@@ -3516,7 +3516,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
OTHER_LDFLAGS
=
(
"$(inherited)"
,
"-ObjC"
,
...
...
@@ -3554,7 +3554,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
OTHER_LDFLAGS
=
(
"$(inherited)"
,
"-ObjC"
,
...
...
@@ -3756,7 +3756,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_ENABLE_DEBUG_INFO
=
INCLUDE_SOURCE
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_DEBUG"
;
...
...
@@ -3801,7 +3801,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.OneSignalNotificationServiceExtension
;
...
...
@@ -3912,7 +3912,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
OTHER_LDFLAGS
=
(
"$(inherited)"
,
"-ObjC"
,
...
...
@@ -3984,7 +3984,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.beta.OneSignalNotificationServiceExtension
;
...
...
@@ -4095,7 +4095,7 @@
"$(inherited)"
,
"@executable_path/Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
OTHER_LDFLAGS
=
(
"$(inherited)"
,
"-ObjC"
,
...
...
@@ -4167,7 +4167,7 @@
"@executable_path/Frameworks"
,
"@executable_path/../../Frameworks"
,
);
MARKETING_VERSION
=
1.5
3
;
MARKETING_VERSION
=
1.5
2.2
;
MTL_FAST_MATH
=
YES
;
OTHER_SWIFT_FLAGS
=
"$(inherited) -D EXPO_CONFIGURATION_RELEASE"
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.uniswap.mobile.dev.OneSignalNotificationServiceExtension
;
...
...
apps/mobile/scripts/checkBundleSize.sh
View file @
afb0d138
#!/bin/bash
MAX_SIZE
=
2
4
MAX_SIZE
=
2
3.5
MAX_BUFFER
=
0.5
# Check OS type and use appropriate stat command
...
...
apps/mobile/src/features/walletConnect/batchedTransactionSaga.ts
View file @
afb0d138
...
...
@@ -175,7 +175,9 @@ export function* handleGetCapabilities({
const
detailsMap
=
delegationStatusResponse
.
delegationDetails
[
accountAddress
]
if
(
detailsMap
)
{
const
hasAtLeastOneDelegation
=
Object
.
values
(
detailsMap
).
some
((
details
)
=>
!!
details
.
currentDelegationAddress
)
const
hasAtLeastOneDelegation
=
Object
.
values
(
detailsMap
).
some
(
(
details
)
=>
!!
details
.
currentDelegationAddress
&&
!
details
.
isWalletDelegatedToUniswap
,
)
hasNoExistingDelegations
=
!
hasAtLeastOneDelegation
}
...
...
apps/mobile/src/screens/HomeScreen/HomeScreen.tsx
View file @
afb0d138
...
...
@@ -296,7 +296,7 @@ export function HomeScreen(props?: AppStackScreenProp<MobileScreens.Home>): JSX.
}
return
(
<
Flex
borderRadius=
"$rounded16"
width=
"100%"
aspectRatio=
{
16
/
9
}
overflow=
"hidden"
>
<
Flex
borderRadius=
"$rounded16"
width=
"100%"
aspectRatio=
{
16
/
9
}
overflow=
"hidden"
mb=
"$spacing8"
>
<
Video
source=
{
SMART_WALLET_UPGRADE_VIDEO
}
poster=
{
SMART_WALLET_UPGRADE_FALLBACK
}
...
...
apps/mobile/src/screens/Import/SelectWalletScreen.tsx
View file @
afb0d138
import
{
NativeStackScreenProps
}
from
'
@react-navigation/native-stack
'
import
React
,
{
ComponentProps
,
useCallback
}
from
'
react
'
import
{
Trans
,
useTranslation
}
from
'
react-i18next
'
import
{
ScrollView
}
from
'
react-native
'
import
{
ScrollView
,
StyleSheet
}
from
'
react-native
'
import
Animated
,
{
useAnimatedStyle
,
withTiming
}
from
'
react-native-reanimated
'
import
{
navigate
}
from
'
src/app/navigation/rootNavigation
'
import
{
OnboardingStackParamList
}
from
'
src/app/navigation/types
'
import
{
OnboardingScreen
}
from
'
src/features/onboarding/OnboardingScreen
'
import
{
Button
,
Flex
,
Loader
,
Text
,
TouchableArea
,
useLayoutAnimationOnChange
}
from
'
ui/src
'
import
{
Button
,
Flex
,
LinearGradient
,
Loader
,
Text
,
TouchableArea
,
useLayoutAnimationOnChange
,
useSporeColors
,
}
from
'
ui/src
'
import
{
WalletFilled
}
from
'
ui/src/components/icons
'
import
{
spacing
}
from
'
ui/src/theme
'
import
{
opacify
,
spacing
}
from
'
ui/src/theme
'
import
{
BaseCard
}
from
'
uniswap/src/components/BaseCard/BaseCard
'
import
{
FeatureFlags
}
from
'
uniswap/src/features/gating/flags
'
import
{
useFeatureFlag
}
from
'
uniswap/src/features/gating/hooks
'
...
...
@@ -31,6 +40,7 @@ export function SelectWalletScreen({ navigation, route: { params } }: Props): JS
const
{
t
}
=
useTranslation
()
const
{
selectImportedAccounts
,
getImportedAccountsAddresses
}
=
useOnboardingContext
()
const
importedAddresses
=
getImportedAccountsAddresses
()
const
colors
=
useSporeColors
()
const
{
importableAccounts
,
...
...
@@ -103,39 +113,54 @@ export function SelectWalletScreen({ navigation, route: { params } }: Props): JS
<
Loader
.
Wallets
repeat=
{
5
}
/>
</
Flex
>
)
:
(
<
ScrollView
testID=
{
TestID
.
SelectWalletScreenLoaded
}
>
<
Flex
height=
"$spacing12"
/>
<
Flex
gap=
"$gap12"
>
{
importableAccounts
?.
map
((
account
,
i
)
=>
{
const
{
address
,
balance
}
=
account
// prevents flickering and incorrect width calculation for long wallet names on Android
// it's not possible to deselect last wallet
if
(
selectedAddresses
.
length
===
0
)
{
return
null
}
return
(
<
Flex
key=
{
address
}
px=
"$spacing16"
>
<
WalletPreviewCard
key=
{
address
}
address=
{
address
}
balance=
{
balance
}
hideSelectionCircle=
{
isOnlyOneAccount
}
name=
{
ElementName
.
WalletCard
}
selected=
{
selectedAddresses
.
includes
(
address
)
}
testID=
{
`${TestID.WalletCard}-${i + 1}`
}
onSelect=
{
toggleAddressSelection
}
/>
</
Flex
>
)
})
}
</
Flex
>
</
ScrollView
>
<
Flex
flexGrow=
{
1
}
flexShrink=
{
1
}
>
<
LinearGradient
colors=
{
[
colors
.
surface1
.
val
,
opacify
(
0
,
colors
.
surface1
.
val
)]
}
end=
{
{
x
:
0
,
y
:
1
}
}
start=
{
{
x
:
0
,
y
:
0
}
}
style=
{
ListSheet
.
topGradient
}
/>
<
ScrollView
testID=
{
TestID
.
SelectWalletScreenLoaded
}
>
<
Flex
height=
"$spacing12"
/>
<
Flex
gap=
"$gap12"
>
{
importableAccounts
?.
map
((
account
,
i
)
=>
{
const
{
address
,
balance
}
=
account
// prevents flickering and incorrect width calculation for long wallet names on Android
// it's not possible to deselect last wallet
if
(
selectedAddresses
.
length
===
0
)
{
return
null
}
return
(
<
Flex
key=
{
address
}
px=
"$spacing16"
>
<
WalletPreviewCard
key=
{
address
}
address=
{
address
}
balance=
{
balance
}
hideSelectionCircle=
{
isOnlyOneAccount
}
name=
{
ElementName
.
WalletCard
}
selected=
{
selectedAddresses
.
includes
(
address
)
}
testID=
{
`${TestID.WalletCard}-${i + 1}`
}
onSelect=
{
toggleAddressSelection
}
/>
</
Flex
>
)
})
}
</
Flex
>
</
ScrollView
>
<
LinearGradient
colors=
{
[
opacify
(
0
,
colors
.
surface1
.
val
),
colors
.
surface1
.
val
]
}
end=
{
{
x
:
0
,
y
:
1
}
}
start=
{
{
x
:
0
,
y
:
0
}
}
style=
{
ListSheet
.
bottomGradient
}
/>
</
Flex
>
)
}
<
Animated
.
View
style=
{
[
opacityStyle
,
{
marginBottom
:
spacing
.
spacing16
,
marginTop
:
spacing
.
spacing16
,
marginHorizontal
:
spacing
.
spacing24
,
},
]
}
...
...
@@ -175,6 +200,24 @@ export function SelectWalletScreen({ navigation, route: { params } }: Props): JS
)
}
const
ListSheet
=
StyleSheet
.
create
({
bottomGradient
:
{
bottom
:
0
,
height
:
spacing
.
spacing16
,
left
:
0
,
position
:
'
absolute
'
,
width
:
'
100%
'
,
},
topGradient
:
{
height
:
spacing
.
spacing16
,
left
:
0
,
position
:
'
absolute
'
,
top
:
0
,
width
:
'
100%
'
,
zIndex
:
1
,
},
})
function
CustomHighlightText
(
props
:
ComponentProps
<
typeof
Text
>
):
JSX
.
Element
{
return
<
Text
variant=
"buttonLabel4"
color=
"$neutral1"
{
...
props
}
/>
}
apps/mobile/src/screens/SettingsFiatCurrencyModal.tsx
View file @
afb0d138
import
{
FlashList
}
from
'
@shopify/flash-list
'
import
React
,
{
useCallback
}
from
'
react
'
import
{
useTranslation
}
from
'
react-i18next
'
import
{
useDispatch
}
from
'
react-redux
'
import
{
useReactNavigationModal
}
from
'
src/components/modals/useReactNavigationModal
'
import
{
Flex
,
Text
,
TouchableArea
}
from
'
ui/src
'
import
{
AnimatedBottomSheetFlashList
}
from
'
ui/src/components/AnimatedFlashList/AnimatedFlashList
'
import
{
Check
}
from
'
ui/src/components/icons
'
import
{
Modal
}
from
'
uniswap/src/components/modals/Modal
'
import
{
FiatCurrency
,
ORDERED_CURRENCIES
}
from
'
uniswap/src/features/fiatCurrency/constants
'
...
...
@@ -29,7 +29,11 @@ export function SettingsFiatCurrencyModal(): JSX.Element {
<
Text
pb=
"$spacing12"
textAlign=
"center"
variant=
"subheading1"
>
{
t
(
'
settings.setting.currency.title
'
)
}
</
Text
>
<
FlashList
data=
{
ORDERED_CURRENCIES
}
keyExtractor=
{
(
item
:
FiatCurrency
)
=>
item
}
renderItem=
{
renderItem
}
/>
<
AnimatedBottomSheetFlashList
data=
{
ORDERED_CURRENCIES
}
keyExtractor=
{
(
item
:
FiatCurrency
)
=>
item
}
renderItem=
{
renderItem
}
/>
</
Modal
>
)
}
...
...
packages/uniswap/src/components/modals/WarningModal/WarningModal.tsx
View file @
afb0d138
...
...
@@ -10,7 +10,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace'
import
{
ElementName
,
ModalNameType
}
from
'
uniswap/src/features/telemetry/constants
'
import
{
SwapFormContext
}
from
'
uniswap/src/features/transactions/swap/contexts/SwapFormContext
'
import
{
TestID
}
from
'
uniswap/src/test/fixtures/testIDs
'
import
{
isWeb
}
from
'
utilities/src/platform
'
import
{
is
MobileApp
,
is
Web
}
from
'
utilities/src/platform
'
type
WarningModalContentProps
=
{
onClose
?:
()
=>
void
...
...
@@ -49,7 +49,7 @@ export function WarningModalContent({
titleComponent
,
caption
,
captionComponent
,
rejectText
:
rejectText
,
rejectText
,
acknowledgeText
,
severity
=
WarningSeverity
.
Medium
,
children
,
...
...
@@ -63,6 +63,8 @@ export function WarningModalContent({
const
colors
=
useSporeColors
()
const
{
headerText
:
alertHeaderTextColor
}
=
getAlertColor
(
severity
)
const
buttonSize
=
isMobileApp
?
'
medium
'
:
'
small
'
return
(
<
Flex
centered
...
...
@@ -107,14 +109,14 @@ export function WarningModalContent({
<
Flex
row
alignSelf=
"stretch"
gap=
"$spacing12"
pt=
{
children
?
'
$spacing12
'
:
'
$spacing24
'
}
>
{
rejectText
&&
(
<
Trace
logPress
element=
{
ElementName
.
BackButton
}
modal=
{
modalName
}
properties=
{
analyticsProperties
}
>
<
Button
emphasis=
"secondary"
onPress=
{
onReject
??
onClose
}
>
<
Button
size=
{
buttonSize
}
emphasis=
"secondary"
onPress=
{
onReject
??
onClose
}
>
{
rejectText
}
</
Button
>
</
Trace
>
)
}
{
acknowledgeText
&&
(
<
Trace
logPress
element=
{
ElementName
.
Confirm
}
modal=
{
modalName
}
properties=
{
analyticsProperties
}
>
<
Button
testID=
{
TestID
.
Confirm
}
onPress=
{
onAcknowledge
}
>
<
Button
size=
{
buttonSize
}
testID=
{
TestID
.
Confirm
}
onPress=
{
onAcknowledge
}
>
{
acknowledgeText
}
</
Button
>
</
Trace
>
...
...
packages/uniswap/src/constants/urls.ts
View file @
afb0d138
...
...
@@ -79,7 +79,6 @@ export const uniswapUrls = {
swapFeeInfo
:
createHelpArticleUrl
(
'
20131678274957
'
),
passkeysInfo
:
createHelpArticleUrl
(
'
35522111260173
'
),
smartWalletDelegation
:
createHelpArticleUrl
(
'
36391987158797
'
),
smartWalletNetworkCost
:
createHelpArticleUrl
(
'
8370337377805
'
),
swapProtection
:
createHelpArticleUrl
(
'
18814993155853
'
),
swapSlippage
:
createHelpArticleUrl
(
'
8643879653261-What-is-Price-Slippage-
'
),
tokenWarning
:
createHelpArticleUrl
(
'
8723118437133-What-are-token-warnings-
'
),
...
...
packages/uniswap/src/extension/useIsChromeWindowFocused.ts
View file @
afb0d138
import
{
useEffect
,
useState
}
from
'
react
'
import
{
use
Callback
,
use
Effect
,
useState
}
from
'
react
'
import
{
getChromeWithThrow
}
from
'
utilities/src/chrome/chrome
'
import
{
logger
}
from
'
utilities/src/logger/logger
'
import
{
isExtension
}
from
'
utilities/src/platform
'
import
{
useAsyncData
}
from
'
utilities/src/react/hooks
'
export
function
useIsChromeWindowFocused
():
boolean
{
const
[
isFocused
,
setIsFocused
]
=
useState
(
true
)
useEffect
(()
=>
{
if
(
!
isExtension
)
{
return
undefined
}
const
chrome
=
getChromeWithThrow
()
const
onFocusChangedListener
=
async
():
Promise
<
void
>
=>
{
const
{
focused
}
=
await
chrome
.
windows
.
getCurrent
()
setIsFocused
(
focused
)
}
// Get initial state
onFocusChangedListener
().
catch
((
error
)
=>
{
logger
.
error
(
error
,
{
tags
:
{
file
:
'
useIsChromeWindowFocused.ts
'
,
function
:
'
useIsChromeWindowFocused
'
,
},
})
})
chrome
.
windows
.
onFocusChanged
.
addListener
(
onFocusChangedListener
)
// Remove listener when component unmounts
return
()
=>
{
chrome
.
windows
.
onFocusChanged
.
removeListener
(
onFocusChangedListener
)
}
},
[])
useAsyncData
(
useCallback
(
async
()
=>
{
if
(
!
isExtension
)
{
// This hook is ignored and always returns `true` when not in the Extension.
return
undefined
}
const
onFocusChangedListener
=
async
():
Promise
<
void
>
=>
{
const
{
focused
}
=
await
chrome
.
windows
.
getCurrent
()
setIsFocused
(
focused
)
}
// We run this on first render to get the initial state.
await
onFocusChangedListener
()
const
chrome
=
getChromeWithThrow
()
chrome
.
windows
.
onFocusChanged
.
addListener
(
onFocusChangedListener
)
return
()
=>
{
chrome
.
windows
.
onFocusChanged
.
removeListener
(
onFocusChangedListener
)
}
},
[]),
)
return
isFocused
}
...
...
packages/uniswap/src/features/gating/flags.ts
View file @
afb0d138
...
...
@@ -13,7 +13,6 @@ export enum FeatureFlags {
Datadog
,
DisableSwap7702
,
EmbeddedWallet
,
FiatOffRamp
,
InstantTokenBalanceUpdate
,
MonadTestnet
,
MonadTestnetDown
,
...
...
@@ -59,6 +58,7 @@ export enum FeatureFlags {
AATestWeb
,
ConversionTracking
,
DummyFlagTest
,
FiatOffRamp
,
GoogleConversionTracking
,
GqlTokenLists
,
LimitsFees
,
...
...
@@ -82,7 +82,6 @@ export const SHARED_FEATURE_FLAG_NAMES = new Map<FeatureFlags, string>([
[
FeatureFlags
.
EmbeddedWallet
,
'
embedded_wallet
'
],
[
FeatureFlags
.
EnablePermitMismatchUX
,
'
enable_permit2_mismatch_ux
'
],
[
FeatureFlags
.
ExecuteTransactionV2
,
'
new_execute_transaction_arch
'
],
[
FeatureFlags
.
FiatOffRamp
,
'
fiat_offramp
'
],
[
FeatureFlags
.
ForceDisableWalletGetCapabilities
,
'
force_disable_wallet_get_capabilities
'
],
[
FeatureFlags
.
ForcePermitTransactions
,
'
force_permit_transactions
'
],
[
FeatureFlags
.
InstantTokenBalanceUpdate
,
'
instant-token-balance-update
'
],
...
...
@@ -110,6 +109,7 @@ export const WEB_FEATURE_FLAG_NAMES = new Map<FeatureFlags, string>([
[
FeatureFlags
.
BatchedSwaps
,
'
batched_swaps
'
],
[
FeatureFlags
.
ConversionTracking
,
'
conversion-tracking
'
],
[
FeatureFlags
.
DummyFlagTest
,
'
dummy_flag_test
'
],
[
FeatureFlags
.
FiatOffRamp
,
'
fiat_offramp
'
],
[
FeatureFlags
.
GoogleConversionTracking
,
'
google_conversion_tracking
'
],
[
FeatureFlags
.
GqlTokenLists
,
'
gql_token_lists
'
],
[
FeatureFlags
.
LimitsFees
,
'
limits_fees
'
],
...
...
packages/uniswap/src/features/smartWallet/banner/NetworkCostBanner.tsx
View file @
afb0d138
...
...
@@ -17,13 +17,11 @@ export function NetworkCostBanner({ bannerText, url }: NetworkCostBannerProps):
return
(
<
TouchableArea
row
centered
borderWidth=
"$spacing1"
borderColor=
"$surface3"
borderRadius=
"$rounded12"
p=
"$padding16"
gap=
"$gap12
"
alignSelf=
"stretch
"
onPress=
{
handleOnPress
}
>
<
Flex
row
alignItems=
"center"
justifyContent=
"space-between"
gap=
"$spacing12"
>
...
...
packages/uniswap/src/features/tokens/TokenWarningModal.tsx
View file @
afb0d138
...
...
@@ -30,6 +30,7 @@ import {
}
from
'
uniswap/src/features/tokens/safetyUtils
'
import
{
useDismissedTokenWarnings
}
from
'
uniswap/src/features/tokens/slice/hooks
'
import
{
currencyIdToAddress
}
from
'
uniswap/src/utils/currencyId
'
import
{
isMobileApp
}
from
'
utilities/src/platform
'
export
interface
FoTPercent
{
buyFeePercent
?:
number
...
...
@@ -199,7 +200,18 @@ function TokenWarningModalContent({
<
Text
variant=
"body3"
color=
"$neutral3"
>
<
Trans
i18nKey=
"common.poweredBy"
components=
{
{
name
:
<
BlockaidLogo
minHeight=
{
10
}
minWidth=
{
50
}
color=
"$neutral3"
/>
}
}
components=
{
{
name
:
(
<
BlockaidLogo
minHeight=
{
10
}
minWidth=
{
50
}
// Using the "size" prop does not work as expected for non-square icon like this one
// Found that only specifying width fixes all alignment and size issues on mobile
size=
{
isMobileApp
?
({
width
:
50
}
as
{
width
:
number
;
height
:
number
})
:
undefined
}
color=
"$neutral3"
/>
),
}
}
/>
</
Text
>
</
Flex
>
...
...
packages/uniswap/src/features/transactions/modals/NetworkFeeWarning.tsx
View file @
afb0d138
...
...
@@ -52,7 +52,7 @@ export function NetworkFeeWarning({
isMobileApp
&&
(
<
NetworkCostBanner
bannerText=
{
t
(
'
smartWallet.banner.networkCost
'
,
{
chainName
:
getChainInfo
(
chainId
).
label
})
}
url=
{
uniswapUrls
.
helpArticleUrls
.
smartWallet
NetworkCost
}
url=
{
uniswapUrls
.
helpArticleUrls
.
smartWallet
Delegation
}
/>
)
}
...
...
@@ -123,10 +123,12 @@ function InfoButton({
}):
JSX
.
Element
|
null
{
if
(
includesDelegation
&&
isMobileApp
)
{
return
(
<
LearnMoreLink
textVariant=
{
isWeb
?
'
body4
'
:
undefined
}
url=
{
uniswapUrls
.
helpArticleUrls
.
smartWalletNetworkCost
}
/>
<
Flex
mb=
"$spacing8"
>
<
LearnMoreLink
textVariant=
{
isWeb
?
'
body4
'
:
'
buttonLabel3
'
}
url=
{
uniswapUrls
.
helpArticleUrls
.
networkFeeInfo
}
/>
</
Flex
>
)
}
...
...
packages/uniswap/src/features/transactions/swap/form/SwapFormScreen/SwapFormTooltips/SwapFormTooltips.tsx
View file @
afb0d138
...
...
@@ -311,7 +311,7 @@ export function NetworkCostTooltipClassic({ chainId }: { chainId: UniverseChainI
logo=
{
<
NetworkLogo
chainId=
{
chainId
}
size=
{
16
}
/>
}
/>
<
SwapDetailsTooltip
.
Description
learnMoreUrl=
{
uniswapUrls
.
helpArticleUrls
.
smartWalletNetworkCost
}
learnMoreUrl=
{
uniswapUrls
.
helpArticleUrls
.
networkFeeInfo
}
text=
{
t
(
'
transaction.networkCost.description
'
)
}
/>
</
SwapDetailsTooltip
.
Outer
>
...
...
packages/wallet/src/features/smartWallet/modals/SmartWalletModal.tsx
View file @
afb0d138
...
...
@@ -55,6 +55,7 @@ export function SmartWalletModal({
}:
SmartWalletModalProps
):
JSX
.
Element
{
return
(
<
Modal
renderBehindTopInset
alignment=
{
alignment
}
isModalOpen=
{
isOpen
}
name=
{
modalName
}
...
...
@@ -69,10 +70,10 @@ export function SmartWalletModal({
px=
{
isExtension
?
null
:
'
$spacing24
'
}
mb=
{
isExtension
?
null
:
'
$spacing48
'
}
gap=
"$spacing16"
pt=
{
isExtension
?
null
:
video
?
'
$spacing24
'
:
'
$spacing12
'
}
>
{
video
?
video
:
icon
}
<
Flex
flexDirection=
"column"
alignItems=
"center"
gap=
"$spacing8"
>
<
Flex
flexDirection=
"column"
alignItems=
"center"
gap=
"$gap8"
>
<
Text
variant=
"subheading2"
color=
"$neutral1"
>
{
title
}
</
Text
>
...
...
yarn.lock
View file @
afb0d138
...
...
@@ -16782,6 +16782,7 @@ __metadata:
react-native-reanimated: 3.16.7
react-native-svg: 15.10.1
react-native-web: 0.19.13
react-player: 2.16.0
react-qr-code: 2.0.12
react-redux: 8.0.5
react-refresh: 0.14.0
...
...
@@ -24142,7 +24143,7 @@ __metadata:
languageName: node
linkType: hard
"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1":
"deepmerge@npm:^4.
0.0, deepmerge@npm:^4.
2.2, deepmerge@npm:^4.3.0, deepmerge@npm:^4.3.1":
version: 4.3.1
resolution: "deepmerge@npm:4.3.1"
checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052
...
...
@@ -34143,6 +34144,13 @@ __metadata:
languageName: node
linkType: hard
"load-script@npm:^1.0.0":
version: 1.0.0
resolution: "load-script@npm:1.0.0"
checksum: 8458e3f07b4a86f8d9d66e47a987811491a5d013af23ba7b371c6d3c9dc899885b072ccf65abf7874c10cb197d4975eacd8a7a125bfb38dbbcb267539f5dc1e9
languageName: node
linkType: hard
"loader-runner@npm:^4.2.0":
version: 4.3.0
resolution: "loader-runner@npm:4.3.0"
...
...
@@ -34893,7 +34901,7 @@ __metadata:
languageName: node
linkType: hard
"memoize-one@npm:>=3.1.1 <6, memoize-one@npm:^5.0.0":
"memoize-one@npm:>=3.1.1 <6, memoize-one@npm:^5.0.0
, memoize-one@npm:^5.1.1
":
version: 5.2.1
resolution: "memoize-one@npm:5.2.1"
checksum: a3cba7b824ebcf24cdfcd234aa7f86f3ad6394b8d9be4c96ff756dafb8b51c7f71320785fbc2304f1af48a0467cbbd2a409efc9333025700ed523f254cb52e3d
...
...
@@ -40760,6 +40768,21 @@ __metadata:
languageName: node
linkType: hard
"react-player@npm:2.16.0":
version: 2.16.0
resolution: "react-player@npm:2.16.0"
dependencies:
deepmerge: ^4.0.0
load-script: ^1.0.0
memoize-one: ^5.1.1
prop-types: ^15.7.2
react-fast-compare: ^3.0.1
peerDependencies:
react: ">=16.6.0"
checksum: 9cc78a6099fdf06bbb2e1db75aa57461fb152eb6207a00e6e026dde0675b6f4ad02a45cab7b6c18a9f19e001bf9695a5be0cbe7606eca57a0af501ced717fbe9
languageName: node
linkType: hard
"react-popper@npm:2.3.0":
version: 2.3.0
resolution: "react-popper@npm:2.3.0"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment