ci(release): publish latest release

parent 5daa12ea
...@@ -2,6 +2,7 @@ ignores: [ ...@@ -2,6 +2,7 @@ ignores: [
# Dependencies that depcheck thinks are unused but are actually used # Dependencies that depcheck thinks are unused but are actually used
'@graphql-codegen/*', '@graphql-codegen/*',
'@commitlint/*', '@commitlint/*',
'@uniswap/eslint-config',
'i18next', 'i18next',
'moti', 'moti',
# Dependencies that depcheck thinks are missing but are actually present or never used # Dependencies that depcheck thinks are missing but are actually present or never used
......
diff --git a/src/components/bottomSheet/BottomSheet.tsx b/src/components/bottomSheet/BottomSheet.tsx
index 1050af591cedd3395c3f21553f9b125d85ca9d11..0761eb562be2af0ebccfda02f06a9ec79289d4ae 100644
--- a/src/components/bottomSheet/BottomSheet.tsx
+++ b/src/components/bottomSheet/BottomSheet.tsx
@@ -501,7 +501,7 @@ const BottomSheetComponent = forwardRef<BottomSheet, BottomSheetProps>(
animatedAnimationSource.value === ANIMATION_SOURCE.SNAP_POINT_CHANGE &&
animatedAnimationState.value === ANIMATION_STATE.RUNNING
) {
- return animatedNextPositionIndex.value;
+ return Math.max(animatedCurrentIndex.value, currentIndex);
}
return currentIndex;
diff --git a/ios/ReactNativePerformance/ReactNativePerformance.m b/ios/ReactNativePerformance/ReactNativePerformance.m
index 485211356fc14de4205e6d0c7e06eb5116992e0b..dbb4bb5637656b7f62fc88249b4ed5402c22290d 100644
--- a/ios/ReactNativePerformance/ReactNativePerformance.m
+++ b/ios/ReactNativePerformance/ReactNativePerformance.m
@@ -1,5 +1,5 @@
#import "ReactNativePerformance.h"
-#import "ReactNativePerformance-Swift.h"
+#import <ReactNativePerformance/ReactNativePerformance-Swift.h>
static NSTimeInterval startupTimestamp = -1.0;
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmXSmkbZBfMGwWiC7fzw8oDCxvmfGENb7ahoaZVWsstaTF` - CIDv0: `QmRAsMChBURwebWNq1p91nAXfAbhZEoGqNQfQpivBqYTDt`
- CIDv1: `bafybeiehjkqxfubc7qylb2q67pnqzri4j5kqxcllryecaq7nuqntzzjrfy` - CIDv1: `bafybeibkcgfvpyahakei5eufru4vcmypgcp7jc4wmh7lacvph4ethbhnnm`
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
...@@ -10,66 +10,73 @@ You can also access the Uniswap Interface from an IPFS gateway. ...@@ -10,66 +10,73 @@ You can also access the Uniswap Interface from an IPFS gateway.
Your Uniswap settings are never remembered across different URLs. Your Uniswap settings are never remembered across different URLs.
IPFS gateways: IPFS gateways:
- https://bafybeiehjkqxfubc7qylb2q67pnqzri4j5kqxcllryecaq7nuqntzzjrfy.ipfs.dweb.link/ - https://bafybeibkcgfvpyahakei5eufru4vcmypgcp7jc4wmh7lacvph4ethbhnnm.ipfs.dweb.link/
- https://bafybeiehjkqxfubc7qylb2q67pnqzri4j5kqxcllryecaq7nuqntzzjrfy.ipfs.cf-ipfs.com/ - https://bafybeibkcgfvpyahakei5eufru4vcmypgcp7jc4wmh7lacvph4ethbhnnm.ipfs.cf-ipfs.com/
- [ipfs://QmXSmkbZBfMGwWiC7fzw8oDCxvmfGENb7ahoaZVWsstaTF/](ipfs://QmXSmkbZBfMGwWiC7fzw8oDCxvmfGENb7ahoaZVWsstaTF/) - [ipfs://QmRAsMChBURwebWNq1p91nAXfAbhZEoGqNQfQpivBqYTDt/](ipfs://QmRAsMChBURwebWNq1p91nAXfAbhZEoGqNQfQpivBqYTDt/)
## 5.57.0 (2024-11-07) ## 5.58.0 (2024-11-12)
### Features ### Features
* **web:** [v4] add v4 data to explore graphs (#13174) 3d2b961 * **web:** add a pool out of sync error to the create flow (#13687) 686db59
* **web:** add hook functionality and update the UI (#13415) 4dfcd67 * **web:** add dynamic fee tier speedbump (#13749) f24ca9d
* **web:** Add liq button on pools explore page (#13400) d116542 * **web:** add fiat amount to pool position price display (#13705) 5d96363
* **web:** add loading states to all LP actions buttons (#13408) 9aa091b * **web:** add hookAddress to PDP and explore table (#13522) 8f7f225
* **web:** adding dynamic fee tier option to fee tier search modal (#13478) 7276ef7 * **web:** add multichain context (#13681) 0f911ed
* **web:** animate fee tier dropdown (#13542) 13f32e2 * **web:** add poolId to pair (#13280) 44c11ec
* **web:** design fixes on PosDP (#13543) 5f93dfc * **web:** add tx parsing for v4 transactions in the mini portfolio and fix pending toasts for create + migrate (#13761) 1059b2d
* **web:** handle one-sided liq input in increase modal (#13370) 4fa66d4 * **web:** add v4 analytics - add/remove/migrate (#13366) d9e94ea
* **web:** redirect to positions list after creating a position (#13444) 160adc6 * **web:** Add v4 Pools to TDP (#13507) d1d724d
* **web:** refetch position queries when pending LP txs change (#13483) 70ae19d * **web:** adding apr to positions cards (#13630) 58de358
* **web:** remove thai from supported languages and translations (#13528) 36fe674 * **web:** adding position row button (#13519) 9900a9e
* **web:** update explore table header styles (#13386) e272167 * **web:** adding top pools table for empty positions (#13726) 369874f
* **web:** updating fee tiers search modal to include the default fee tiers (#13464) aa0bfcf * **web:** animated crosshair on LP price chart (#13643) e6f0395
* **web:** use the new rest endpoint on the mini portfolio pools tab (#13521) 555de82 * **web:** change 7d to 30d volume (#13739) 5f083b1
* **web:** fix Add Liq button color on light mode (#13611) 6ac6738
* **web:** mini price charts in LP position cards (mvp) (#13614) 631c32d
* **web:** move swap fields to multichain provider (#13688) 6395ab3
* **web:** remove multichainUXEnabled (#13690) 9dd774f
* **web:** Remove NFTs from explore menu and search results (#13744) 9149460
* **web:** top pools positions page (#13725) de77cf0
* **web:** update mini portfolio cards (#13633) 203c2ce
* **web:** update PDP to use getPositions query (#13534) 1df4fcc
* **web:** use mainnet txs on multichain explore ux (#13748) af78802
* **web:** v4 collect fees analytics (#13629) ecf0ee0
* **web:** v4 page hook analytics (#13637) ebde907
* **web:** v4 page viewed analytics (#13632) 2887504
* **web:** v4 PDP support (#13401) bc6a1a9
* **web:** v4 select fee tier analytics (#13706) ad618a0
### Bug Fixes ### Bug Fixes
* **web:** Add error message for missing trade routes (#13327) 004265a * **web:** add link to tdp and fix styling nit (#13607) 75a1e8a
* **web:** add insuffient balance error state for the button (#13447) eb4ea2d * **web:** align chevrons + show full range (#13639) dc8b232
* **web:** allow testnets to be backend supported chains (#13424) b968f05 * **web:** align widths (#13584) cc1945f
* **web:** better default fee tier selection (#13526) 5976b4b * **web:** bunch of ui nits (#13770) a551b09
* **web:** change view position to view positions (#13511) bcee0e3 * **web:** clean up multichain buy flow (#13352) 1ed6784
* **web:** cypress tests (#13402) f78f58b * **web:** crash on PosDP (#13664) d09692b
* **web:** fee tier fixes (#13240) 16ad294 * **web:** create page design nits (#13672) 357e42a
* **web:** filter to testnets when in testnet mode (#13356) b1a67be * **web:** fix activity-history e2e test (#13661) 41b514c
* **web:** fix token sorting for v2 positions (#13504) 7c460ff * **web:** fix token warning on nav (#13443) 3793aab
* **web:** fixing uniswap context provider for web (#13566) c7511a4 * **web:** fix useEffect in usePendingLPTransactionsChangeListener (#13595) 1ff8cec
* **web:** hide the collect button if there are no fees to collect (#13459) 9a98813 * **web:** for unavailable text overflow (#13759) 56e0490
* **web:** improve LiquidityChartRangeInput behavior when inverting tokens (#13550) 523eb00 * **web:** liquidity modal padding (#13686) d7af07b
* **web:** landing page redirection when connected (#13425) 6b5993e * **web:** lp flow design nits (#13741) 41f10e3
* **web:** position cards text sizing (#13307) e406dd1 * **web:** polish, use link instead of router nav (#13588) c5d2800
* **web:** remove confusing subgraph naming from v3 tick query (#13436) f1d7d14 * **web:** pool tab zindex was too damn high - staging (#13793) fbc78a4
* **web:** Remove default mainnet chain ID in NetworkFilter (#13272) 4993213 * **web:** remove extra breadcrumb arrow (#13704) 3202db9
* **web:** stop using multicall for Position NFT data fetching (#13414) 5d9db63 * **web:** remove network selector in nav on positions and migration (v3) (#13353) b93aec4
* **web:** udpate scroll behavior on explore page (#12277) bb14b4d * **web:** scrollable adaptive web modal (#13489) 2d32a7d
* **web:** update creating pool banner to be persistent (#13456) 94b7801 * **web:** search icon color in light mode (#13694) a5a699f
* **web:** update loading/error states in LiquidityChartRangeInput (#13498) a5f6b0e * **web:** send sorted tokens to the create endpoint of the trading API (#13710) 9b468bb
* **web:** update url when switching protocol versions in create (#13422) f3edc84 * **web:** token protection polish (#13764) 9be51b7
* **web:** use DropdownSelector for position filters (#13544) dc63bdd * **web:** update invalid price state (#13719) 6afcbb5
* **web:** use NATIVE in url to add liquidity (#13262) 48aa927
* **web:** version dropdown ordering, clickable Sidebar in create flow (#13551) a86ee47
### Continuous Integration ### Continuous Integration
* **web:** update sitemaps d3686aa * **web:** update sitemaps a82abd3
### Tests
* **web:** cron job run web e2e tests (#13482) 8eda2da
web/5.57.0 web/5.58.0
\ No newline at end of file \ No newline at end of file
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
"@svgr/webpack": "8.0.1", "@svgr/webpack": "8.0.1",
"@tamagui/core": "1.108.4", "@tamagui/core": "1.108.4",
"@types/uuid": "9.0.1", "@types/uuid": "9.0.1",
"@uniswap/analytics-events": "2.38.0", "@uniswap/analytics-events": "2.39.0",
"@uniswap/uniswapx-sdk": "2.1.0-beta.18", "@uniswap/uniswapx-sdk": "2.1.0-beta.18",
"@uniswap/universal-router-sdk": "4.5.2", "@uniswap/universal-router-sdk": "4.5.2",
"@uniswap/v3-sdk": "3.18.1", "@uniswap/v3-sdk": "3.18.1",
...@@ -51,37 +51,37 @@ ...@@ -51,37 +51,37 @@
"zod": "3.22.4" "zod": "3.22.4"
}, },
"devDependencies": { "devDependencies": {
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@pmmmwh/react-refresh-webpack-plugin": "0.5.11",
"@testing-library/dom": "^7.11.0", "@testing-library/dom": "7.31.2",
"@testing-library/react": "13.4.0", "@testing-library/react": "13.4.0",
"@types/chrome": "0.0.254", "@types/chrome": "0.0.254",
"@types/jest": "29.5.0", "@types/jest": "29.5.0",
"@types/react": "^18.0.15", "@types/react": "18.0.38",
"@types/react-dom": "^18.0.6", "@types/react-dom": "18.2.15",
"@types/redux-logger": "3.0.9", "@types/redux-logger": "3.0.9",
"@types/redux-persist-webextension-storage": "1.0.3", "@types/redux-persist-webextension-storage": "1.0.3",
"@types/ua-parser-js": "0.7.31", "@types/ua-parser-js": "0.7.31",
"@uniswap/eslint-config": "workspace:^", "@uniswap/eslint-config": "workspace:^",
"@welldone-software/why-did-you-render": "8.0.1", "@welldone-software/why-did-you-render": "8.0.1",
"clean-webpack-plugin": "^4.0.0", "clean-webpack-plugin": "4.0.0",
"concurrently": "^8.0.1", "concurrently": "8.2.2",
"copy-webpack-plugin": "^11.0.0", "copy-webpack-plugin": "11.0.0",
"esbuild-loader": "^3.0.1", "esbuild-loader": "3.2.0",
"eslint": "8.44.0", "eslint": "8.44.0",
"jest": "29.7.0", "jest": "29.7.0",
"jest-chrome": "0.8.0", "jest-chrome": "0.8.0",
"jest-environment-jsdom": "29.5.0", "jest-environment-jsdom": "29.5.0",
"jest-extended": "4.0.1", "jest-extended": "4.0.1",
"mini-css-extract-plugin": "^2.7.6", "mini-css-extract-plugin": "2.9.1",
"react-refresh": "^0.14.0", "react-refresh": "0.14.0",
"serve": "^14.2.0", "serve": "14.2.4",
"statsig-js": "4.41.0", "statsig-js": "4.41.0",
"swc-loader": "^0.2.3", "swc-loader": "0.2.6",
"tamagui-loader": "1.108.4", "tamagui-loader": "1.108.4",
"typescript": "5.3.3", "typescript": "5.3.3",
"webpack": "5.90.0", "webpack": "5.90.0",
"webpack-cli": "^5.0.1", "webpack-cli": "5.1.4",
"webpack-dev-server": "^4.13.1" "webpack-dev-server": "4.15.1"
}, },
"private": true, "private": true,
"scripts": { "scripts": {
......
...@@ -32,6 +32,7 @@ import { ...@@ -32,6 +32,7 @@ import {
RotatableChevron, RotatableChevron,
Settings, Settings,
ShieldQuestion, ShieldQuestion,
Wrench,
} from 'ui/src/components/icons' } from 'ui/src/components/icons'
import { iconSizes } from 'ui/src/theme' import { iconSizes } from 'ui/src/theme'
import { uniswapUrls } from 'uniswap/src/constants/urls' import { uniswapUrls } from 'uniswap/src/constants/urls'
...@@ -191,7 +192,7 @@ export function SettingsScreen(): JSX.Element { ...@@ -191,7 +192,7 @@ export function SettingsScreen(): JSX.Element {
onPress={(): void => navigateTo(`${AppRoutes.Settings}/${SettingsRoutes.Privacy}`)} onPress={(): void => navigateTo(`${AppRoutes.Settings}/${SettingsRoutes.Privacy}`)}
/> />
<SettingsToggleRow <SettingsToggleRow
Icon={ShieldQuestion} Icon={Wrench}
checked={isTestnetModeEnabled} checked={isTestnetModeEnabled}
title={t('settings.setting.wallet.testnetMode.title')} title={t('settings.setting.wallet.testnetMode.title')}
onCheckedChange={handleTestnetModeToggle} onCheckedChange={handleTestnetModeToggle}
......
import { useState } from 'react'
import { useExtensionNavigation } from 'src/app/navigation/utils' import { useExtensionNavigation } from 'src/app/navigation/utils'
import { Flex } from 'ui/src' import { Flex } from 'ui/src'
import { useEnabledChains } from 'uniswap/src/features/chains/hooks' import { useEnabledChains } from 'uniswap/src/features/chains/hooks'
...@@ -14,7 +15,10 @@ export function SwapFlowScreen(): JSX.Element { ...@@ -14,7 +15,10 @@ export function SwapFlowScreen(): JSX.Element {
const inputCurrencyId = useHighestBalanceNativeCurrencyId(account.address) const inputCurrencyId = useHighestBalanceNativeCurrencyId(account.address)
const initialState = prepareSwapFormState({ inputCurrencyId, defaultChainId }) const initialState = prepareSwapFormState({ inputCurrencyId, defaultChainId })
const swapPrefilledState = useSwapPrefilledState(locationState?.initialTransactionState ?? initialState) /** Initialize the initial state once. On navigation the locationState changes causing an unwanted re-render. */
const [initialTransactionState] = useState(() => locationState?.initialTransactionState ?? initialState)
const swapPrefilledState = useSwapPrefilledState(initialTransactionState)
return ( return (
<Flex fill p="$spacing12"> <Flex fill p="$spacing12">
......
...@@ -24,14 +24,15 @@ import androidx.compose.runtime.mutableStateOf ...@@ -24,14 +24,15 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.KeyboardCapitalization import androidx.compose.ui.text.input.KeyboardCapitalization
...@@ -39,6 +40,7 @@ import androidx.compose.ui.text.input.KeyboardType ...@@ -39,6 +40,7 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.focus.focusRequester
import com.uniswap.R import com.uniswap.R
import com.uniswap.onboarding.import.SeedPhraseInputViewModel.MnemonicError.InvalidPhrase import com.uniswap.onboarding.import.SeedPhraseInputViewModel.MnemonicError.InvalidPhrase
import com.uniswap.onboarding.import.SeedPhraseInputViewModel.MnemonicError.InvalidWord import com.uniswap.onboarding.import.SeedPhraseInputViewModel.MnemonicError.InvalidWord
...@@ -52,6 +54,7 @@ import com.uniswap.theme.UniswapTheme ...@@ -52,6 +54,7 @@ import com.uniswap.theme.UniswapTheme
import com.uniswap.theme.relativeOffset import com.uniswap.theme.relativeOffset
import kotlin.math.abs import kotlin.math.abs
@OptIn(ExperimentalComposeUiApi::class)
@Composable @Composable
fun SeedPhraseInput( fun SeedPhraseInput(
viewModel: SeedPhraseInputViewModel viewModel: SeedPhraseInputViewModel
...@@ -59,9 +62,15 @@ fun SeedPhraseInput( ...@@ -59,9 +62,15 @@ fun SeedPhraseInput(
val focusRequester = remember { FocusRequester() } val focusRequester = remember { FocusRequester() }
val density = LocalDensity.current.density val density = LocalDensity.current.density
var buttonOffset by remember { mutableStateOf(20.dp) } var buttonOffset by remember { mutableStateOf(20.dp) }
val keyboardController = LocalSoftwareKeyboardController.current
LaunchedEffect(Unit) { LaunchedEffect(viewModel.isFocused) {
focusRequester.requestFocus() if (viewModel.isFocused) {
focusRequester.requestFocus()
} else {
focusRequester.freeFocus()
keyboardController?.hide()
}
} }
Column( Column(
......
...@@ -122,7 +122,15 @@ class SeedPhraseInputViewManager : ViewGroupManager<ComposeView>() { ...@@ -122,7 +122,15 @@ class SeedPhraseInputViewManager : ViewGroupManager<ComposeView>() {
override fun receiveCommand(root: ComposeView, commandId: String?, args: ReadableArray?) { override fun receiveCommand(root: ComposeView, commandId: String?, args: ReadableArray?) {
super.receiveCommand(root, commandId, args) super.receiveCommand(root, commandId, args)
when (commandId) { when (commandId) {
COMMAND_HANDLE_SUBMIT -> viewModel.handleSubmit() COMMAND_HANDLE_SUBMIT -> {
viewModel.handleSubmit()
}
COMMAND_FOCUS -> {
viewModel.focus()
}
COMMAND_BLUR -> {
viewModel.blur()
}
else -> Unit else -> Unit
} }
} }
...@@ -150,6 +158,8 @@ class SeedPhraseInputViewManager : ViewGroupManager<ComposeView>() { ...@@ -150,6 +158,8 @@ class SeedPhraseInputViewManager : ViewGroupManager<ComposeView>() {
private const val EVENT_MNEMONIC_STORED = "onMnemonicStored" private const val EVENT_MNEMONIC_STORED = "onMnemonicStored"
private const val EVENT_HEIGHT_MEASURED = "onHeightMeasured" private const val EVENT_HEIGHT_MEASURED = "onHeightMeasured"
private const val COMMAND_HANDLE_SUBMIT = "handleSubmit" private const val COMMAND_HANDLE_SUBMIT = "handleSubmit"
private const val COMMAND_FOCUS = "focus"
private const val COMMAND_BLUR = "blur"
private const val FIELD_MNEMONIC_ID = "mnemonicId" private const val FIELD_MNEMONIC_ID = "mnemonicId"
private const val FIELD_CAN_SUBMIT = "canSubmit" private const val FIELD_CAN_SUBMIT = "canSubmit"
private const val FIELD_HEIGHT = "height" private const val FIELD_HEIGHT = "height"
......
...@@ -13,6 +13,9 @@ import kotlinx.coroutines.Dispatchers ...@@ -13,6 +13,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import android.content.Context
import android.view.inputmethod.InputMethodManager
import android.view.View
class SeedPhraseInputViewModel( class SeedPhraseInputViewModel(
private val ethersRs: RnEthersRs, private val ethersRs: RnEthersRs,
...@@ -63,6 +66,17 @@ class SeedPhraseInputViewModel( ...@@ -63,6 +66,17 @@ class SeedPhraseInputViewModel(
private var validateLastWordTimeout: Long = 1000 private var validateLastWordTimeout: Long = 1000
private var validateLastWordJob: Job? = null private var validateLastWordJob: Job? = null
var isFocused by mutableStateOf(false)
private set
fun focus() {
isFocused = true
}
fun blur() {
isFocused = false
}
fun handleInputChange(value: TextFieldValue) { fun handleInputChange(value: TextFieldValue) {
input = value input = value
...@@ -154,4 +168,5 @@ class SeedPhraseInputViewModel( ...@@ -154,4 +168,5 @@ class SeedPhraseInputViewModel(
private const val MIN_LENGTH = 12 private const val MIN_LENGTH = 12
private const val MAX_LENGTH = 24 private const val MAX_LENGTH = 24
} }
} }
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/splashscreen_background"/> <item android:drawable="@color/splashscreen_background" />
<item> <item
<bitmap android:gravity="center" android:src="@drawable/ic_launcher_foreground" /> android:drawable="@drawable/uniswap_logo"
</item> android:width="150dp"
android:height="150dp"
android:gravity="center" />
</layer-list> </layer-list>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item
<inset android:width="110dp"
android:drawable="@drawable/ic_launcher_foreground" android:height="110dp"
android:insetLeft="25%" android:gravity="center">
android:insetTop="25%" <inset
android:insetRight="25%" android:insetLeft="15%"
android:insetBottom="25%" /> android:insetTop="15%"
</item> android:insetRight="15%"
android:insetBottom="15%"
android:drawable="@drawable/splash_logo"
/>
</item>
</layer-list> </layer-list>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="1024dp"
android:height="1024dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M808.1,154.8C809.5,130.6 812.8,114.6 819.4,100C822,94.3 824.5,89.5 824.9,89.5C825.2,89.5 824.1,93.8 822.3,99C817.5,113.2 816.7,132.5 820,155C824.2,183.6 826.6,187.7 857,218.6C871.2,233 887.7,251.3 893.7,259.1L904.6,273.4L893.7,263.2C880.4,250.8 849.7,226.5 843,223C838.4,220.7 837.7,220.7 834.9,223.5C832.3,226 831.8,229.9 831.4,248.1C830.9,276.4 827,294.6 817.6,312.8C812.6,322.6 811.8,320.5 816.4,309.4C819.8,301.1 820.1,297.5 820.1,270C820.1,214.9 813.5,201.7 775,179C765.2,173.2 749.1,164.9 739.2,160.6C729.3,156.2 721.5,152.4 721.7,152.1C722.8,151 760.4,161.9 775.5,167.7C798,176.3 801.7,177.4 804.5,176.4C806.3,175.7 807.2,170.4 808.1,154.8Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M332.7,74.6C319.4,72.6 318.8,72.3 325.1,71.4C337.1,69.5 365.5,72 385.1,76.6C430.8,87.4 472.5,115.1 516.9,164.3L528.7,177.3L545.5,174.6C616.7,163.3 689,172.3 749.5,200.1C766.1,207.7 792.4,222.9 795.7,226.8C796.7,228.1 798.6,236.1 799.9,244.6C804.4,274.2 802.2,296.9 793.1,313.9C788.1,323.1 787.8,326 791.2,333.9C793.8,340.2 801.2,344.9 808.6,344.9C823.6,344.9 839.8,320.7 847.3,287.1L850.3,273.7L856.2,280.4C888.6,316.8 914,366.5 918.3,401.9L919.5,411.1L914,402.7C904.7,388.3 895.3,378.5 883.2,370.6C861.5,356.3 838.5,351.4 777.7,348.2C722.8,345.4 691.7,340.7 660.9,330.7C608.5,313.7 582,291.1 519.7,209.9C492.1,173.8 475,153.9 458,137.8C419.3,101.3 381.3,82.1 332.7,74.6Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M358.6,249.3C331.5,212.2 314.8,155.4 318.4,112.9L319.5,99.8L325.7,100.9C337.3,103 357.2,110.4 366.6,116C392.3,131.5 403.4,151.9 414.7,204.2C418,219.6 422.3,236.9 424.3,242.8C427.5,252.3 439.7,274.4 449.6,288.7C456.7,299 452,303.9 436.2,302.5C412.2,300.4 379.6,278 358.6,249.3Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M775.2,525.2C648.6,474.5 604,430.5 604,356.3C604,345.4 604.3,336.5 604.8,336.5C605.3,336.5 610.2,340.1 615.7,344.5C641.4,365 670.1,373.7 749.7,385.2C796.6,392 822.9,397.5 847.2,405.5C924.5,431 972.3,482.7 983.8,553.1C987.1,573.6 985.1,611.9 979.8,632.1C975.5,648.1 962.6,676.9 959.1,678C958.2,678.3 957.2,674.7 957,669.8C955.7,643.3 942.3,617.6 919.7,598.3C894,576.4 859.5,558.9 775.2,525.2Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M686.3,546.2C684.7,536.9 682,524.9 680.2,519.6L676.9,510L682.9,516.7C691.3,526 697.8,537.9 703.4,553.6C707.6,565.7 708.1,569.3 708.1,588.9C708,608.1 707.5,612.1 703.6,623C697.4,640.1 689.7,652.2 676.9,665.2C653.7,688.6 624,701.5 581.1,706.9C573.6,707.9 551.9,709.4 532.8,710.4C484.6,712.9 452.9,718 424.4,728C420.3,729.4 416.6,730.3 416.3,729.9C415.1,728.8 434.5,717.3 450.5,709.6C473.1,698.8 495.6,692.9 546,684.6C570.9,680.4 596.6,675.5 603.1,673.5C664.8,654.7 696.4,606.2 686.3,546.2Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M744.3,648.7C727.5,612.7 723.7,578 732.9,545.7C733.9,542.2 735.4,539.4 736.4,539.4C737.3,539.4 741.3,541.5 745.2,544.1C753,549.3 768.5,558.1 809.9,580.5C861.6,608.5 891.1,630.2 911.2,655C928.7,676.7 939.6,701.4 944.8,731.5C947.8,748.6 946,789.7 941.6,806.8C927.7,861 895.4,903.6 849.3,928.5C842.6,932.1 836.5,935.1 835.9,935.1C835.2,935.1 837.7,928.9 841.3,921.3C856.8,889.1 858.6,857.8 846.9,822.9C839.7,801.6 825.1,775.5 795.5,731.5C761.2,680.3 752.8,666.7 744.3,648.7Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M268.7,842.6C315.7,803.2 374.2,775.2 427.4,766.6C450.4,762.9 488.6,764.3 509.9,769.7C543.9,778.4 574.4,797.8 590.3,820.9C605.8,843.5 612.4,863.2 619.3,907C622.1,924.3 625,941.7 625.9,945.6C631.1,968.3 641.2,986.4 653.8,995.6C673.7,1010 707.9,1010.9 741.6,997.9C747.4,995.7 752.3,994.1 752.7,994.5C753.9,995.7 736.9,1007 724.9,1012.9C708.8,1020.9 696,1024 679,1024C648.1,1024 622.5,1008.4 601.1,976.6C596.9,970.3 587.4,951.5 580.1,934.9C557.5,883.7 546.3,868.1 520.1,851C497.3,836.2 467.9,833.5 445.7,844.3C416.6,858.5 408.5,895.4 429.4,918.8C437.6,928.1 453.1,936.1 465.7,937.7C489.3,940.6 509.6,922.8 509.6,899.1C509.6,883.7 503.7,874.9 488.7,868.2C468.2,859 446.2,869.7 446.3,888.8C446.4,897 449.9,902.1 458.2,905.8C463.4,908.2 463.6,908.4 459.3,907.5C440.5,903.6 436.1,881.1 451.2,866.2C469.3,848.3 506.8,856.2 519.6,880.6C525,890.9 525.7,911.4 521,923.7C510.4,951.4 479.7,965.9 448.5,958C427.2,952.6 418.6,946.8 393,920.6C348.4,875 331.2,866.2 267,856.2L254.7,854.3L268.7,842.6Z"
android:fillColor="#F50DB4"/>
<path
android:pathData="M59.9,27.2C208.5,206.5 310.9,280.5 322.3,296.1C331.6,309 328.1,320.6 312,329.7C303.1,334.7 284.7,339.8 275.5,339.8C265,339.8 261.5,335.9 261.5,335.9C255.4,330.2 252,331.2 221,276.4C177.9,210 141.9,155 140.9,154C138.6,151.9 138.7,152 216.6,290.5C229.2,319.4 219.1,330 219.1,334.1C219.1,342.5 216.8,346.9 206.4,358.4C189.1,377.6 181.4,399.2 175.8,443.8C169.5,493.9 151.9,529.2 103.1,589.7C74.5,625.1 69.8,631.6 62.6,645.9C53.6,663.8 51.1,673.9 50,696.6C49,720.6 51.1,736.1 58.4,759.1C64.9,779.1 71.6,792.4 88.9,818.9C103.8,841.8 112.3,858.8 112.3,865.5C112.3,870.8 113.3,870.8 136.4,865.6C191.5,853.3 236.3,831.5 261.5,804.8C277.1,788.3 280.8,779.2 280.9,756.5C281,741.7 280.4,738.6 276.4,730.1C269.9,716.3 257.9,704.7 231.6,686.9C197.2,663.5 182.5,644.6 178.4,618.7C175.1,597.4 178.9,582.4 198,542.7C217.7,501.7 222.6,484.1 225.9,442.7C228.1,416 231,405.4 238.8,396.9C246.8,388.1 254.1,385.1 274.1,382.4C306.6,378 327.3,369.6 344.4,354C359.2,340.5 365.4,327.4 366.3,307.8L367,292.9L358.8,283.3C328.9,248.7 39.9,0 38,0C37.6,0 47.5,12.3 59.9,27.2ZM129.1,723.8C135.9,711.9 132.3,696.6 121,689.1C110.3,682 93.7,685.3 93.7,694.6C93.7,697.4 95.2,699.4 98.8,701.2C104.7,704.2 105.1,707.7 100.4,714.6C95.7,721.7 96.1,727.9 101.5,732.1C110.3,738.9 122.6,735.2 129.1,723.8Z"
android:fillColor="#F50DB4"
android:fillType="evenOdd"/>
<path
android:pathData="M387.6,390.2C372.3,394.9 357.4,411 352.8,427.8C350,438.1 351.6,456.2 355.8,461.8C362.6,470.8 369.2,473.2 387,473C421.8,472.8 452,458 455.5,439.4C458.4,424.2 445.1,403.2 426.8,393.9C417.4,389.1 397.3,387.2 387.6,390.2ZM428.3,421.8C433.6,414.2 431.3,406 422.2,400.5C404.8,390 378.5,398.7 378.5,415C378.5,423.1 392.2,432 404.8,432C413.1,432 424.6,427 428.3,421.8Z"
android:fillColor="#F50DB4"
android:fillType="evenOdd"/>
</vector>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/> <background android:drawable="@color/ic_launcher_background"/>
<foreground> <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<inset android:drawable="@drawable/ic_launcher_foreground"
android:inset="25%"/>
</foreground>
</adaptive-icon> </adaptive-icon>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
\ No newline at end of file
<resources> <resources>
<color name="splashscreen_background">#000000</color> <color name="splashscreen_background">#131313</color>
<color name="item_background">#303030</color> <color name="item_background">#303030</color>
<color name="text_primary">#ffffff</color> <color name="text_primary">#ffffff</color>
</resources> </resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FEF4FF</color>
</resources>
...@@ -2,14 +2,21 @@ ...@@ -2,14 +2,21 @@
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require_relative '../../../node_modules/react-native/scripts/react_native_pods' require_relative '../../../node_modules/react-native/scripts/react_native_pods'
require_relative '../../../node_modules/@react-native-community/cli-platform-ios/native_modules' require_relative '../../../node_modules/@react-native-community/cli-platform-ios/native_modules'
require_relative '../../../node_modules/react-native-permissions/scripts/setup'
platform :ios, '15.0' platform :ios, '15.0'
prepare_react_native_project! prepare_react_native_project!
$FirebaseSDKVersion = '10.15.0' setup_permissions([
'FaceID',
'Notifications',
])
$RNFirebaseAsStaticFramework = true
$RNFirebaseAnalyticsWithoutAdIdSupport=true $RNFirebaseAnalyticsWithoutAdIdSupport=true
target 'Uniswap' do target 'Uniswap' do
use_frameworks! :linkage => :static
use_expo_modules! use_expo_modules!
post_integrate do |installer| post_integrate do |installer|
begin begin
...@@ -38,12 +45,6 @@ target 'Uniswap' do ...@@ -38,12 +45,6 @@ target 'Uniswap' do
pod 'EthersRS', :path => '../../../node_modules/@uniswap/ethers-rs-mobile' pod 'EthersRS', :path => '../../../node_modules/@uniswap/ethers-rs-mobile'
pod 'Argon2Swift', '1.0.3' pod 'Argon2Swift', '1.0.3'
permissions_path = '../../../node_modules/react-native-permissions/ios'
pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
pod 'FirebaseCore', $FirebaseSDKVersion, :modular_headers => true
pod 'GoogleUtilities', '7.11.5', :modular_headers => true
post_install do |installer| post_install do |installer|
react_native_post_install(installer, "../../../node_modules/react-native") react_native_post_install(installer, "../../../node_modules/react-native")
...@@ -57,27 +58,30 @@ target 'Uniswap' do ...@@ -57,27 +58,30 @@ target 'Uniswap' do
end end
target 'OneSignalNotificationServiceExtension' do target 'OneSignalNotificationServiceExtension' do
use_frameworks! :linkage => :static
pod 'OneSignalXCFramework', '3.12.6' pod 'OneSignalXCFramework', '3.12.6'
end end
def widget_pods def prepare_target_commons
use_frameworks! :linkage => :static
pod 'Apollo', '1.2.1' pod 'Apollo', '1.2.1'
pod 'UIImageColors', '2.1.0' pod 'UIImageColors', '2.1.0'
end end
target 'Widgets' do target 'Widgets' do
widget_pods prepare_target_commons
# Pods for widgets # Pods for widgets
end end
target 'WidgetsCore' do target 'WidgetsCore' do
widget_pods prepare_target_commons
# Pods for widgets core # Pods for widgets core
end end
target 'WidgetsCoreTests' do target 'WidgetsCoreTests' do
widget_pods prepare_target_commons
# Pods for widgets core test # Pods for widgets core test
end end
target 'WidgetIntentExtension' do target 'WidgetIntentExtension' do
widget_pods prepare_target_commons
# Pods for intent extension # Pods for intent extension
end end
This diff is collapsed.
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
#import <React/RCTBundleURLProvider.h> #import <React/RCTBundleURLProvider.h>
#import <ReactNativePerformance/ReactNativePerformance.h> #import <ReactNativePerformance/ReactNativePerformance.h>
#import <RCTAppSetupUtils.h> #import <RCTAppSetupUtils.h>
#import "RNSplashScreen.h"
@implementation AppDelegate @implementation AppDelegate
...@@ -48,8 +47,6 @@ ...@@ -48,8 +47,6 @@
[super application:application didFinishLaunchingWithOptions:newLaunchOptions]; [super application:application didFinishLaunchingWithOptions:newLaunchOptions];
[RNSplashScreen show];
[[RCTI18nUtil sharedInstance] allowRTL:NO]; [[RCTI18nUtil sharedInstance] allowRTL:NO];
return YES; return YES;
......
{ {
"images" : [ "images" : [
{ {
"filename" : "AppIcon-20@2x.png", "filename" : "40.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "2x", "scale" : "2x",
"size" : "20x20" "size" : "20x20"
}, },
{ {
"filename" : "AppIcon-20@3x.png", "filename" : "60.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "3x", "scale" : "3x",
"size" : "20x20" "size" : "20x20"
}, },
{ {
"filename" : "AppIcon-29@1x.png", "filename" : "29.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "1x", "scale" : "1x",
"size" : "29x29" "size" : "29x29"
}, },
{ {
"filename" : "AppIcon-29@2x.png", "filename" : "58.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "2x", "scale" : "2x",
"size" : "29x29" "size" : "29x29"
}, },
{ {
"filename" : "AppIcon-29@3x.png", "filename" : "87.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "3x", "scale" : "3x",
"size" : "29x29" "size" : "29x29"
}, },
{ {
"filename" : "AppIcon-40@2x.png", "filename" : "80.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "2x", "scale" : "2x",
"size" : "40x40" "size" : "40x40"
}, },
{ {
"filename" : "AppIcon-40@3x.png", "filename" : "120.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "3x", "scale" : "3x",
"size" : "40x40" "size" : "40x40"
}, },
{ {
"filename" : "AppIcon-60@2x.png", "filename" : "57.png",
"idiom" : "iphone",
"scale" : "1x",
"size" : "57x57"
},
{
"filename" : "114.png",
"idiom" : "iphone",
"scale" : "2x",
"size" : "57x57"
},
{
"filename" : "120.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "2x", "scale" : "2x",
"size" : "60x60" "size" : "60x60"
}, },
{ {
"filename" : "AppIcon-60@3x.png", "filename" : "180.png",
"idiom" : "iphone", "idiom" : "iphone",
"scale" : "3x", "scale" : "3x",
"size" : "60x60" "size" : "60x60"
}, },
{ {
"filename" : "iPad-AppIcon-20@1x.png", "filename" : "20.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "1x", "scale" : "1x",
"size" : "20x20" "size" : "20x20"
}, },
{ {
"filename" : "iPad-AppIcon-20@2x.png", "filename" : "40.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "2x", "scale" : "2x",
"size" : "20x20" "size" : "20x20"
}, },
{ {
"filename" : "iPad-AppIcon-29@1x.png", "filename" : "29.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "1x", "scale" : "1x",
"size" : "29x29" "size" : "29x29"
}, },
{ {
"filename" : "iPad-AppIcon-29@2x.png", "filename" : "58.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "2x", "scale" : "2x",
"size" : "29x29" "size" : "29x29"
}, },
{ {
"filename" : "iPad-AppIcon-40@1x.png", "filename" : "40.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "1x", "scale" : "1x",
"size" : "40x40" "size" : "40x40"
}, },
{ {
"filename" : "iPad-AppIcon-40@2x-1.png", "filename" : "80.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "2x", "scale" : "2x",
"size" : "40x40" "size" : "40x40"
}, },
{ {
"filename" : "iPad-AppIcon-76@1x.png", "filename" : "50.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "50x50"
},
{
"filename" : "100.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "50x50"
},
{
"filename" : "72.png",
"idiom" : "ipad",
"scale" : "1x",
"size" : "72x72"
},
{
"filename" : "144.png",
"idiom" : "ipad",
"scale" : "2x",
"size" : "72x72"
},
{
"filename" : "76.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "1x", "scale" : "1x",
"size" : "76x76" "size" : "76x76"
}, },
{ {
"filename" : "iPad-AppIcon-76@2x.png", "filename" : "152.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "2x", "scale" : "2x",
"size" : "76x76" "size" : "76x76"
}, },
{ {
"filename" : "iPad-AppIcon-83.5@2x.png", "filename" : "167.png",
"idiom" : "ipad", "idiom" : "ipad",
"scale" : "2x", "scale" : "2x",
"size" : "83.5x83.5" "size" : "83.5x83.5"
}, },
{ {
"filename" : "AppIcon-1024@1x.png", "filename" : "1024.png",
"idiom" : "ios-marketing", "idiom" : "ios-marketing",
"scale" : "1x", "scale" : "1x",
"size" : "1024x1024" "size" : "1024x1024"
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment