From bddfda95490c7dd8e01eabcf2dabe6a01ebbcbc9 Mon Sep 17 00:00:00 2001 From: Prashan Dharmasena Date: Wed, 5 Jun 2024 19:33:20 -0400 Subject: [PATCH 1/2] MOB-537: Add CEX transfer warning. --- .../feature/receipt/DydxReceiptView.kt | 14 ++- .../transfer/components/TransferAmountBox.kt | 4 +- .../transfer/components/TransferMemoBox.kt | 93 +++++++++++++++++++ .../transferout/DydxTransferOutView.kt | 10 ++ .../transferout/DydxTransferOutViewModel.kt | 14 +++ v4/platformUI/build.gradle | 2 + .../components/alerts/PlatformInlineAlert.kt | 75 +++++++++++++++ 7 files changed, 207 insertions(+), 5 deletions(-) create mode 100644 v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferMemoBox.kt create mode 100644 v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt diff --git a/v4/feature/receipt/src/main/java/exchange/dydx/trading/feature/receipt/DydxReceiptView.kt b/v4/feature/receipt/src/main/java/exchange/dydx/trading/feature/receipt/DydxReceiptView.kt index acabd821..47470d1e 100644 --- a/v4/feature/receipt/src/main/java/exchange/dydx/trading/feature/receipt/DydxReceiptView.kt +++ b/v4/feature/receipt/src/main/java/exchange/dydx/trading/feature/receipt/DydxReceiptView.kt @@ -4,8 +4,10 @@ import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items @@ -102,7 +104,7 @@ object DydxReceiptView : DydxComponent { Box( modifier = modifier - .height(state.height ?: 210.dp) + .heightIn(max = state.height ?: 210.dp) .fillMaxWidth() .padding(horizontal = state.padding ?: ThemeShapes.HorizontalPadding) .background( @@ -113,8 +115,10 @@ object DydxReceiptView : DydxComponent { LazyColumn( modifier = Modifier .fillMaxWidth() - .padding(horizontal = ThemeShapes.HorizontalPadding) - .padding(vertical = ThemeShapes.VerticalPadding * 2), + .padding( + horizontal = ThemeShapes.HorizontalPadding, + vertical = ThemeShapes.VerticalPadding * 2, + ), verticalArrangement = Arrangement.spacedBy(ThemeShapes.VerticalPadding), ) { items(state.lineTypes, key = { it }) { lineType -> @@ -180,6 +184,10 @@ object DydxReceiptView : DydxComponent { } } } + + item { + Spacer(modifier = Modifier.height(ThemeShapes.VerticalPadding)) + } } } } diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferAmountBox.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferAmountBox.kt index beb23266..2c6594d0 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferAmountBox.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferAmountBox.kt @@ -89,8 +89,8 @@ object TransferAmountBox { return } - Column { - InputFieldScaffold(modifier.zIndex(1f)) { + Column(modifier) { + InputFieldScaffold(Modifier.zIndex(1f)) { TopContent(modifier, state) } val shape = RoundedCornerShape(0.dp, 0.dp, 8.dp, 8.dp) diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferMemoBox.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferMemoBox.kt new file mode 100644 index 00000000..0c39c696 --- /dev/null +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/components/TransferMemoBox.kt @@ -0,0 +1,93 @@ +package exchange.dydx.trading.feature.transfer.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import exchange.dydx.abacus.protocols.LocalizerProtocol +import exchange.dydx.platformui.components.alerts.PlatformInlineAlert +import exchange.dydx.platformui.components.inputs.PlatformTextInput +import exchange.dydx.platformui.designSystem.theme.ThemeColor +import exchange.dydx.platformui.designSystem.theme.ThemeFont +import exchange.dydx.platformui.designSystem.theme.ThemeShapes +import exchange.dydx.platformui.designSystem.theme.dydxDefault +import exchange.dydx.platformui.designSystem.theme.themeColor +import exchange.dydx.platformui.designSystem.theme.themeFont +import exchange.dydx.platformui.theme.DydxThemedPreviewSurface +import exchange.dydx.platformui.theme.MockLocalizer +import exchange.dydx.trading.feature.shared.scaffolds.InputFieldScaffold + +@Preview +@Composable +fun Preview_TransferMemoBox() { + DydxThemedPreviewSurface { + TransferMemoBox.Content(Modifier, TransferMemoBox.ViewState.preview) + } +} + +object TransferMemoBox { + data class ViewState( + val localizer: LocalizerProtocol, + val value: String? = null, + val showCexWarning: Boolean, + val onEditAction: (String) -> Unit = {}, + ) { + companion object { + val preview = ViewState( + localizer = MockLocalizer(), + showCexWarning = true, + ) + } + } + + @Composable + fun Content(modifier: Modifier, state: ViewState?) { + if (state == null) { + return + } + Column(modifier) { + InputFieldScaffold { + Column( + modifier = modifier + .padding(horizontal = ThemeShapes.HorizontalPadding) + .padding(vertical = ThemeShapes.VerticalPadding), + verticalArrangement = Arrangement.spacedBy(6.dp), + ) { + Text( + text = state.localizer.localize("APP.GENERAL.MEMO"), + style = TextStyle.dydxDefault + .themeColor(ThemeColor.SemanticColor.text_tertiary) + .themeFont(fontSize = ThemeFont.FontSize.mini), + ) + + PlatformTextInput( + modifier = Modifier.fillMaxWidth(), + value = state.value ?: "", + textStyle = TextStyle.dydxDefault + .themeColor(ThemeColor.SemanticColor.text_primary) + .themeFont(fontSize = ThemeFont.FontSize.medium), + placeHolder = state.localizer.localize("APP.DIRECT_TRANSFER_MODAL.REQUIRED_FOR_CEX"), + onValueChange = { state.onEditAction(it) }, + ) + } + } + if (state.showCexWarning) { + Spacer(modifier = Modifier.height(24.dp)) + + PlatformInlineAlert( + text = state.localizer.localize("ERRORS.TRANSFER_MODAL.TRANSFER_WITHOUT_MEMO"), + level = PlatformInlineAlert.Level.WARNING, + modifier = Modifier.fillMaxWidth(), + ) + } + } + } +} diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt index 0523ac94..33e18b27 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt @@ -25,6 +25,7 @@ import exchange.dydx.trading.feature.transfer.components.AddressInputBox import exchange.dydx.trading.feature.transfer.components.ChainsComboBox import exchange.dydx.trading.feature.transfer.components.TokensComboBox import exchange.dydx.trading.feature.transfer.components.TransferAmountBox +import exchange.dydx.trading.feature.transfer.components.TransferMemoBox @Preview @Composable @@ -41,7 +42,9 @@ object DydxTransferOutView : DydxComponent { val chainsComboBox: ChainsComboBox.ViewState? = null, val tokensComboBox: TokensComboBox.ViewState? = null, val transferAmount: TransferAmountBox.ViewState? = null, + val transferMemo: TransferMemoBox.ViewState? = null, ) { + companion object { val preview = ViewState( localizer = MockLocalizer(), @@ -108,6 +111,13 @@ object DydxTransferOutView : DydxComponent { ) } + item { + TransferMemoBox.Content( + modifier = Modifier.animateItemPlacement(), + state = state.transferMemo, + ) + } + item { DydxValidationView.Content(Modifier.animateItemPlacement()) } diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt index f413c111..b76fe874 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt @@ -22,6 +22,7 @@ import exchange.dydx.trading.feature.transfer.components.AddressInputBox import exchange.dydx.trading.feature.transfer.components.ChainsComboBox import exchange.dydx.trading.feature.transfer.components.TokensComboBox import exchange.dydx.trading.feature.transfer.components.TransferAmountBox +import exchange.dydx.trading.feature.transfer.components.TransferMemoBox import exchange.dydx.trading.feature.transfer.search.DydxTransferSearchParam import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow @@ -173,6 +174,17 @@ class DydxTransferOutViewModel @Inject constructor( } }, ), + transferMemo = TransferMemoBox.ViewState( + localizer = localizer, + value = transferInput?.memo, + showCexWarning = transferInput?.token != USDC_TOKEN && (transferInput?.memo?.isEmpty() ?: true), + onEditAction = { memo -> + abacusStateManager.transfer( + input = memo, + type = TransferInputField.MEMO, + ) + }, + ), addressInput = AddressInputBox.ViewState( localizer = localizer, formatter = formatter, @@ -189,3 +201,5 @@ class DydxTransferOutViewModel @Inject constructor( ) } } + +private const val USDC_TOKEN = "usdc" diff --git a/v4/platformUI/build.gradle b/v4/platformUI/build.gradle index 81bb5bd7..21e3a779 100644 --- a/v4/platformUI/build.gradle +++ b/v4/platformUI/build.gradle @@ -61,6 +61,8 @@ dependencies { api "androidx.compose.material:material:$composeVersion" implementation "androidx.compose.material3:material3:$material3Version" implementation "androidx.hilt:hilt-navigation-compose:$hiltAndroidXVersion" + implementation "androidx.compose.ui:ui-tooling-preview:$composeVersion" + debugImplementation "androidx.compose.ui:ui-tooling:$composeVersion" implementation "com.google.code.gson:gson:$gsonVersion" diff --git a/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt b/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt new file mode 100644 index 00000000..1266e61a --- /dev/null +++ b/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt @@ -0,0 +1,75 @@ +package exchange.dydx.platformui.components.alerts + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.dp +import exchange.dydx.platformui.designSystem.theme.ThemeColor +import exchange.dydx.platformui.designSystem.theme.ThemeFont +import exchange.dydx.platformui.designSystem.theme.ThemeShapes +import exchange.dydx.platformui.designSystem.theme.color +import exchange.dydx.platformui.designSystem.theme.dydxDefault +import exchange.dydx.platformui.designSystem.theme.themeColor +import exchange.dydx.platformui.designSystem.theme.themeFont + +object PlatformInlineAlert { + enum class Level { + WARNING, + ERROR, + } +} + +private val PlatformInlineAlert.Level.color: Color + get() = when (this) { + PlatformInlineAlert.Level.WARNING -> ThemeColor.SemanticColor.color_yellow.color + PlatformInlineAlert.Level.ERROR -> ThemeColor.SemanticColor.color_red.color + } + +private val PlatformInlineAlert.Level.backgroundColor: Color + get() = when (this) { + PlatformInlineAlert.Level.WARNING -> ThemeColor.SemanticColor.color_faded_yellow.color + PlatformInlineAlert.Level.ERROR -> ThemeColor.SemanticColor.color_faded_red.color + } + +@Composable +fun PlatformInlineAlert( + text: String, + level: PlatformInlineAlert.Level, + modifier: Modifier = Modifier +) { + Row( + modifier + .clip(RoundedCornerShape(4.dp)) + .background(level.backgroundColor) + .height(IntrinsicSize.Min), + ) { + Box( + Modifier + .width(3.dp) + .fillMaxHeight() + .background(level.color), + ) + + Text( + text = text, + style = TextStyle.dydxDefault.themeFont(fontSize = ThemeFont.FontSize.small).themeColor(ThemeColor.SemanticColor.color_white), + modifier = Modifier + .padding( + horizontal = ThemeShapes.HorizontalPadding, + vertical = ThemeShapes.VerticalPadding, + ), + ) + } +} From bc755562f7b15dcfa48dd4e99babd7cd409d8a0b Mon Sep 17 00:00:00 2001 From: Prashan Dharmasena Date: Thu, 6 Jun 2024 18:45:59 -0400 Subject: [PATCH 2/2] Fix state de-sync bug --- .../resources/DydxMarketResourcesView.kt | 32 ++++++++++--------- .../shared/viewstate/SharedMarketViewState.kt | 4 +-- .../transferout/DydxTransferOutView.kt | 25 ++++++++------- .../transferout/DydxTransferOutViewModel.kt | 27 ++++++---------- .../components/alerts/PlatformInlineAlert.kt | 2 +- 5 files changed, 43 insertions(+), 47 deletions(-) diff --git a/v4/feature/market/src/main/java/exchange/dydx/trading/feature/market/marketinfo/components/resources/DydxMarketResourcesView.kt b/v4/feature/market/src/main/java/exchange/dydx/trading/feature/market/marketinfo/components/resources/DydxMarketResourcesView.kt index 660a9c61..9ccf4131 100644 --- a/v4/feature/market/src/main/java/exchange/dydx/trading/feature/market/marketinfo/components/resources/DydxMarketResourcesView.kt +++ b/v4/feature/market/src/main/java/exchange/dydx/trading/feature/market/marketinfo/components/resources/DydxMarketResourcesView.kt @@ -73,22 +73,24 @@ object DydxMarketResourcesView : DydxComponent { ) { HeaderView(state = state) - Spacer(modifier = Modifier.padding(ThemeShapes.VerticalPadding)) - - Text( - text = state.sharedMarketViewState?.primaryDescription ?: "", - style = TextStyle.dydxDefault - .themeFont(fontSize = ThemeFont.FontSize.base), - ) - - Spacer(modifier = Modifier.padding(ThemeShapes.VerticalPadding)) + state.sharedMarketViewState?.primaryDescription?.let { + Spacer(modifier = Modifier.padding(ThemeShapes.VerticalPadding)) + Text( + text = it, + style = TextStyle.dydxDefault + .themeFont(fontSize = ThemeFont.FontSize.base), + ) + } - Text( - text = state.sharedMarketViewState?.secondaryDescription ?: "", - style = TextStyle.dydxDefault - .themeFont(fontSize = ThemeFont.FontSize.base) - .themeColor(ThemeColor.SemanticColor.text_tertiary), - ) + state.sharedMarketViewState?.secondaryDescription?.let { + Spacer(modifier = Modifier.padding(ThemeShapes.VerticalPadding)) + Text( + text = it, + style = TextStyle.dydxDefault + .themeFont(fontSize = ThemeFont.FontSize.base) + .themeColor(ThemeColor.SemanticColor.text_tertiary), + ) + } } } diff --git a/v4/feature/shared/src/main/java/exchange/dydx/trading/feature/shared/viewstate/SharedMarketViewState.kt b/v4/feature/shared/src/main/java/exchange/dydx/trading/feature/shared/viewstate/SharedMarketViewState.kt index fd0a18ac..4279b8c2 100644 --- a/v4/feature/shared/src/main/java/exchange/dydx/trading/feature/shared/viewstate/SharedMarketViewState.kt +++ b/v4/feature/shared/src/main/java/exchange/dydx/trading/feature/shared/viewstate/SharedMarketViewState.kt @@ -72,10 +72,10 @@ data class SharedMarketViewState( coloringOption = SignedAmountView.ColoringOption.AllText, ), primaryDescription = asset?.resources?.primaryDescriptionKey?.let { key -> - localizer.localize("APP.$key") + localizer.localize("APP.$key").takeUnless { it.startsWith("APP.__ASSETS.") } }, secondaryDescription = asset?.resources?.secondaryDescriptionKey?.let { key -> - localizer.localize("APP.$key") + localizer.localize("APP.$key").takeUnless { it.startsWith("APP.__ASSETS.") } }, websiteUrl = asset?.resources?.websiteLink, whitepaperUrl = asset?.resources?.whitepaperLink, diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt index 33e18b27..ae18e4ae 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutView.kt @@ -3,10 +3,13 @@ package exchange.dydx.trading.feature.transfer.transferout import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -84,17 +87,17 @@ object DydxTransferOutView : DydxComponent { verticalArrangement = Arrangement.spacedBy(16.dp), ) { item { - ChainsComboBox.Content( - modifier = Modifier.animateItemPlacement(), - state = state.chainsComboBox, - ) - } - - item { - AddressInputBox.Content( - modifier = Modifier.animateItemPlacement(), - state = state.addressInput, - ) + Row(Modifier.animateItemPlacement()) { + AddressInputBox.Content( + modifier = Modifier.weight(1f), + state = state.addressInput, + ) + Spacer(Modifier.width(ThemeShapes.HorizontalPadding)) + ChainsComboBox.Content( + modifier = Modifier.weight(1f), + state = state.chainsComboBox, + ) + } } item { diff --git a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt index b76fe874..48169c3f 100644 --- a/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt +++ b/v4/feature/transfer/src/main/java/exchange/dydx/trading/feature/transfer/transferout/DydxTransferOutViewModel.kt @@ -43,7 +43,6 @@ class DydxTransferOutViewModel @Inject constructor( private val router: DydxRouter, private val paramFlow: MutableStateFlow, ) : ViewModel(), DydxViewModel { - private val selectedChainFlow: MutableStateFlow = MutableStateFlow(null) private val selectedTokenFlow: MutableStateFlow = MutableStateFlow(null) val state: Flow = @@ -52,27 +51,22 @@ class DydxTransferOutViewModel @Inject constructor( abacusStateManager.state.selectedSubaccount .map { it?.freeCollateral?.current }, abacusStateManager.state.accountBalance(abacusStateManager.nativeTokenDenom), - selectedChainFlow, selectedTokenFlow, - ) { transferInput, freeCollateral, nativeTokenAmount, selectedChain, selectedToken -> - createViewState(transferInput, freeCollateral, nativeTokenAmount, selectedChain, selectedToken) + ) { transferInput, freeCollateral, nativeTokenAmount, selectedToken -> + createViewState(transferInput, freeCollateral, nativeTokenAmount, selectedToken) } .distinctUntilChanged() init { abacusStateManager.state.transferInput - .map { it?.transferOutOptions?.chains?.toList() } - .distinctUntilChanged() - .onEach { chains -> - selectedChainFlow.value = chains?.firstOrNull() + .map { input -> + input?.transferOutOptions?.assets?.run { + firstOrNull { it.type == input.token } ?: firstOrNull() + } } - .launchIn(viewModelScope) - - abacusStateManager.state.transferInput - .map { it?.transferOutOptions?.assets?.toList() } .distinctUntilChanged() - .onEach { tokens -> - selectedTokenFlow.value = tokens?.firstOrNull() + .onEach { + selectedTokenFlow.value = it } .launchIn(viewModelScope) } @@ -81,7 +75,6 @@ class DydxTransferOutViewModel @Inject constructor( transferInput: TransferInput?, freeCollateral: Double?, nativeTokenAmount: Double?, - chain: SelectionOption?, token: SelectionOption?, ): DydxTransferOutView.ViewState { val tokenSymbol = token?.localizedString(localizer) @@ -177,7 +170,7 @@ class DydxTransferOutViewModel @Inject constructor( transferMemo = TransferMemoBox.ViewState( localizer = localizer, value = transferInput?.memo, - showCexWarning = transferInput?.token != USDC_TOKEN && (transferInput?.memo?.isEmpty() ?: true), + showCexWarning = transferInput?.token != abacusStateManager.usdcTokenKey && transferInput?.memo.isNullOrEmpty(), onEditAction = { memo -> abacusStateManager.transfer( input = memo, @@ -201,5 +194,3 @@ class DydxTransferOutViewModel @Inject constructor( ) } } - -private const val USDC_TOKEN = "usdc" diff --git a/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt b/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt index 1266e61a..479a8e56 100644 --- a/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt +++ b/v4/platformUI/src/main/java/exchange/dydx/platformui/components/alerts/PlatformInlineAlert.kt @@ -57,7 +57,7 @@ fun PlatformInlineAlert( ) { Box( Modifier - .width(3.dp) + .width(6.dp) .fillMaxHeight() .background(level.color), )