Updated on 2026-08-14
|
|
@ -27,10 +27,6 @@
|
|||
"name": "alephium",
|
||||
"version": "5.21.0"
|
||||
},
|
||||
{
|
||||
"name": "scroll",
|
||||
"version": "undefined"
|
||||
},
|
||||
{
|
||||
"name": "zklink",
|
||||
"version": "undefined"
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ internal class TangemPay(
|
|||
|
||||
private fun createProdEnvironment(): ApiEnvironmentConfig = ApiEnvironmentConfig(
|
||||
environment = ApiEnvironment.PROD,
|
||||
baseUrl = "https://api.paera.com/bff/",
|
||||
baseUrl = "https://api.us.paera.com/bff/",
|
||||
headers = createHeaders(),
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ interface TangemTechApi {
|
|||
@Path("walletId") walletId: String,
|
||||
@Header("If-Match") eTag: String,
|
||||
@Body body: SaveWalletAccountsResponse,
|
||||
): ApiResponse<Unit>
|
||||
): ApiResponse<GetWalletAccountsResponse>
|
||||
|
||||
@GET("/v1/wallets/{walletId}/accounts/archived")
|
||||
suspend fun getWalletArchivedAccounts(
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.tangem.datasource.api.common.response.ApiResponse
|
|||
import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldModuleStatusResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldSupplyChangeTokenStatusBody
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldTokenStatusResponse
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldTokenChartResponse
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
|
|
@ -15,13 +15,13 @@ import retrofit2.http.Query
|
|||
interface YieldSupplyApi {
|
||||
|
||||
@GET("api/v1/yield/markets")
|
||||
suspend fun getYieldMarkets(@Query("chainId") chainId: Int? = null): ApiResponse<YieldMarketsResponse>
|
||||
suspend fun getYieldMarkets(@Query("chainId") chainId: String? = null): ApiResponse<YieldMarketsResponse>
|
||||
|
||||
@GET("api/v1/yield/token/{chainId}/{tokenAddress}")
|
||||
suspend fun getYieldTokenStatus(
|
||||
@Path("chainId") chainId: Int,
|
||||
@Path("tokenAddress") tokenAddress: String,
|
||||
): ApiResponse<YieldTokenStatusResponse>
|
||||
): ApiResponse<YieldSupplyMarketTokenDto>
|
||||
|
||||
@GET("api/v1/yield/token/{chainId}/{tokenAddress}/chart")
|
||||
suspend fun getYieldTokenChart(
|
||||
|
|
|
|||
|
|
@ -2,21 +2,9 @@ package com.tangem.datasource.api.tangemTech.models
|
|||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import java.math.BigDecimal
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class YieldMarketsResponse(
|
||||
@Json(name = "tokens") val marketDtos: List<MarketDto>,
|
||||
@Json(name = "tokens") val marketDtos: List<YieldSupplyMarketTokenDto>,
|
||||
@Json(name = "lastUpdatedAt") val lastUpdated: String,
|
||||
) {
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class MarketDto(
|
||||
@Json(name = "tokenAddress") val tokenAddress: String? = null,
|
||||
@Json(name = "tokenSymbol") val tokenSymbol: String? = null,
|
||||
@Json(name = "tokenName") val tokenName: String? = null,
|
||||
@Json(name = "apy") val apy: BigDecimal,
|
||||
@Json(name = "isActive") val isActive: Boolean,
|
||||
@Json(name = "chainId") val chainId: Int? = null,
|
||||
)
|
||||
}
|
||||
)
|
||||
|
|
@ -5,7 +5,7 @@ import com.squareup.moshi.JsonClass
|
|||
import java.math.BigDecimal
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class YieldTokenStatusResponse(
|
||||
data class YieldSupplyMarketTokenDto(
|
||||
@Json(name = "tokenAddress") val tokenAddress: String? = null,
|
||||
@Json(name = "tokenSymbol") val tokenSymbol: String? = null,
|
||||
@Json(name = "tokenName") val tokenName: String? = null,
|
||||
|
|
@ -2,8 +2,37 @@ package com.tangem.datasource.api.tangemTech.models.account
|
|||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.utils.SerializeNulls
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class SaveWalletAccountsResponse(
|
||||
@Json(name = "accounts") val accounts: List<WalletAccountDTO>,
|
||||
)
|
||||
@Json(name = "accounts") val accounts: List<AccountDTO>,
|
||||
) {
|
||||
|
||||
@SerializeNulls
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class AccountDTO(
|
||||
@Json(name = "id") val id: String,
|
||||
@Json(name = "name") val name: String?,
|
||||
@Json(name = "derivation") val derivationIndex: Int,
|
||||
@Json(name = "icon") val icon: String,
|
||||
@Json(name = "iconColor") val iconColor: String,
|
||||
)
|
||||
|
||||
companion object {
|
||||
|
||||
operator fun invoke(accounts: List<WalletAccountDTO>): SaveWalletAccountsResponse {
|
||||
return SaveWalletAccountsResponse(
|
||||
accounts = accounts.map { accountDto ->
|
||||
AccountDTO(
|
||||
id = accountDto.id,
|
||||
name = accountDto.name,
|
||||
derivationIndex = accountDto.derivationIndex,
|
||||
icon = accountDto.icon,
|
||||
iconColor = accountDto.iconColor,
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import com.tangem.common.json.MoshiJsonConverter
|
|||
import com.tangem.datasource.api.common.adapter.*
|
||||
import com.tangem.datasource.local.config.providers.models.ProviderModel
|
||||
import com.tangem.datasource.local.network.entity.NetworkStatusDM
|
||||
import com.tangem.datasource.utils.SerializeNullsFactory
|
||||
import com.tangem.domain.models.scan.serialization.*
|
||||
import com.tangem.domain.visa.model.VisaActivationRemoteState
|
||||
import com.tangem.domain.visa.model.VisaCardActivationStatus
|
||||
|
|
@ -28,6 +29,7 @@ class MoshiModule {
|
|||
@NetworkMoshi
|
||||
fun provideNetworkMoshi(): Moshi {
|
||||
return Moshi.Builder()
|
||||
.add(SerializeNullsFactory)
|
||||
.add(
|
||||
PolymorphicJsonAdapterFactory.of(ProviderModel::class.java, "type")
|
||||
.withSubtype(ProviderModel.Public::class.java, "public")
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@ import android.content.Context
|
|||
import androidx.datastore.core.DataStoreFactory
|
||||
import androidx.datastore.dataStoreFile
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto
|
||||
import com.tangem.datasource.local.yieldsupply.DefaultYieldMarketsStore
|
||||
import com.tangem.datasource.local.yieldsupply.YieldMarketsStore
|
||||
import com.tangem.datasource.utils.MoshiDataStoreSerializer
|
||||
import com.tangem.datasource.utils.listTypes
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketToken
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
|
@ -34,7 +34,7 @@ object YieldSupplyModule {
|
|||
persistenceStore = DataStoreFactory.create(
|
||||
serializer = MoshiDataStoreSerializer(
|
||||
moshi = moshi,
|
||||
types = listTypes<YieldMarketToken>(),
|
||||
types = listTypes<YieldSupplyMarketTokenDto>(),
|
||||
defaultValue = emptyList(),
|
||||
),
|
||||
produceFile = { context.dataStoreFile(fileName = "yield_markets_cache") },
|
||||
|
|
|
|||
|
|
@ -12,5 +12,7 @@ interface TangemPayStorage {
|
|||
|
||||
suspend fun getOrderId(customerWalletAddress: String): String?
|
||||
|
||||
suspend fun clear(customerWalletAddress: String)
|
||||
suspend fun clearOrderId(customerWalletAddress: String)
|
||||
|
||||
suspend fun clearAll(customerWalletAddress: String)
|
||||
}
|
||||
|
|
@ -1,21 +1,21 @@
|
|||
package com.tangem.datasource.local.yieldsupply
|
||||
|
||||
import androidx.datastore.core.DataStore
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketToken
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
|
||||
internal class DefaultYieldMarketsStore(
|
||||
private val persistenceStore: DataStore<List<YieldMarketToken>>,
|
||||
private val persistenceStore: DataStore<List<YieldSupplyMarketTokenDto>>,
|
||||
) : YieldMarketsStore {
|
||||
|
||||
override fun get(): Flow<List<YieldMarketToken>> = persistenceStore.data
|
||||
override fun get(): Flow<List<YieldSupplyMarketTokenDto>> = persistenceStore.data
|
||||
|
||||
override suspend fun getSyncOrNull(): List<YieldMarketToken>? {
|
||||
override suspend fun getSyncOrNull(): List<YieldSupplyMarketTokenDto>? {
|
||||
return persistenceStore.data.firstOrNull()
|
||||
}
|
||||
|
||||
override suspend fun store(items: List<YieldMarketToken>) {
|
||||
override suspend fun store(items: List<YieldSupplyMarketTokenDto>) {
|
||||
persistenceStore.updateData { _ -> items }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,13 @@
|
|||
package com.tangem.datasource.local.yieldsupply
|
||||
|
||||
import com.tangem.domain.yield.supply.models.YieldMarketToken
|
||||
import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
interface YieldMarketsStore {
|
||||
|
||||
fun get(): Flow<List<YieldMarketToken>>
|
||||
fun get(): Flow<List<YieldSupplyMarketTokenDto>>
|
||||
|
||||
suspend fun getSyncOrNull(): List<YieldMarketToken>?
|
||||
suspend fun getSyncOrNull(): List<YieldSupplyMarketTokenDto>?
|
||||
|
||||
suspend fun store(items: List<YieldMarketToken>)
|
||||
suspend fun store(items: List<YieldSupplyMarketTokenDto>)
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.tangem.datasource.utils
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
annotation class SerializeNulls
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.tangem.datasource.utils
|
||||
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.Types
|
||||
import java.lang.reflect.Type
|
||||
|
||||
/**
|
||||
* Factory to serialize nulls in Moshi if the class is annotated with [SerializeNulls].
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal object SerializeNullsFactory : JsonAdapter.Factory {
|
||||
|
||||
override fun create(type: Type, annotations: MutableSet<out Annotation>, moshi: Moshi): JsonAdapter<*>? {
|
||||
val rawType = Types.getRawType(type)
|
||||
if (!rawType.isAnnotationPresent(SerializeNulls::class.java)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val nextAdapter: JsonAdapter<Any> = moshi.nextAdapter(this, type, annotations)
|
||||
|
||||
return nextAdapter.serializeNulls()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package com.tangem.datasource.utils
|
||||
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.squareup.moshi.Moshi
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.TestInstance
|
||||
|
||||
// --- DTO ---
|
||||
@SerializeNulls
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class UserWithNulls(val id: String?, val name: String?)
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class UserWithoutNulls(val id: String?, val name: String?)
|
||||
|
||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||
class SerializeNullsFactoryTest {
|
||||
|
||||
private val moshi = Moshi.Builder()
|
||||
.add(SerializeNullsFactory)
|
||||
.build()
|
||||
|
||||
@Test
|
||||
fun `should serialize nulls for annotated class`() {
|
||||
val adapter = moshi.adapter(UserWithNulls::class.java)
|
||||
|
||||
val json = adapter.toJson(UserWithNulls(id = null, name = "John"))
|
||||
|
||||
assertThat(json).isEqualTo("""{"id":null,"name":"John"}""")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should skip nulls for non-annotated class`() {
|
||||
val adapter = moshi.adapter(UserWithoutNulls::class.java)
|
||||
|
||||
val json = adapter.toJson(UserWithoutNulls(id = null, name = "John"))
|
||||
|
||||
assertThat(json).isEqualTo("""{"name":"John"}""")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should deserialize annotated class correctly`() {
|
||||
val adapter = moshi.adapter(UserWithNulls::class.java)
|
||||
|
||||
val json = """{"id":null,"name":"Jane"}"""
|
||||
val result = adapter.fromJson(json)
|
||||
|
||||
assertThat(result).isEqualTo(UserWithNulls(id = null, name = "Jane"))
|
||||
}
|
||||
}
|
||||
|
|
@ -40,7 +40,7 @@ fun SimpleSettingsRow(
|
|||
onItemsClick()
|
||||
}
|
||||
},
|
||||
).testTag(BaseBottomSheetTestTags.ACTION_TITLE),
|
||||
).testTag(BaseBottomSheetTestTags.ACTION_BUTTON),
|
||||
horizontalArrangement = Arrangement.Start,
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
|
|
@ -48,7 +48,8 @@ fun SimpleSettingsRow(
|
|||
painter = painterResource(id = icon),
|
||||
contentDescription = null,
|
||||
modifier = Modifier
|
||||
.padding(horizontal = if (redesign) TangemTheme.dimens.spacing12 else TangemTheme.dimens.spacing20),
|
||||
.padding(horizontal = if (redesign) TangemTheme.dimens.spacing12 else TangemTheme.dimens.spacing20)
|
||||
.testTag(BaseBottomSheetTestTags.ACTION_ICON),
|
||||
tint = rowColors.iconColor(enabled = enabled).value,
|
||||
)
|
||||
Column(
|
||||
|
|
|
|||
|
|
@ -1,12 +1,54 @@
|
|||
package com.tangem.core.ui.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.SideEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import com.google.accompanist.systemuicontroller.SystemUiController
|
||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||
import com.tangem.core.ui.res.LocalIsInDarkTheme
|
||||
|
||||
val LocalSystemBarsIconsController = staticCompositionLocalOf<SystemBarsIconsController> {
|
||||
error("No SystemBarsIconsController provided")
|
||||
}
|
||||
|
||||
class SystemBarsIconsController(private val systemUiController: SystemUiController) {
|
||||
private var count by mutableIntStateOf(0)
|
||||
|
||||
fun setIcons(darkIcons: Boolean, isNavigationBarContrastEnforced: Boolean) {
|
||||
if (count == 0) {
|
||||
systemUiController.systemBarsDarkContentEnabled = darkIcons
|
||||
systemUiController.isNavigationBarContrastEnforced = isNavigationBarContrastEnforced
|
||||
}
|
||||
count++
|
||||
}
|
||||
|
||||
fun restoreIcons(isDarkTheme: Boolean) {
|
||||
count--
|
||||
if (count == 0) {
|
||||
systemUiController.systemBarsDarkContentEnabled = !isDarkTheme
|
||||
systemUiController.isNavigationBarContrastEnforced = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProvideSystemBarsIconsController(content: @Composable () -> Unit) {
|
||||
val systemUiController = rememberSystemUiController()
|
||||
val controller = remember(systemUiController) { SystemBarsIconsController(systemUiController) }
|
||||
|
||||
CompositionLocalProvider(
|
||||
LocalSystemBarsIconsController provides controller,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the ability to set a scrim for 3-button navigation
|
||||
*
|
||||
|
|
@ -43,19 +85,16 @@ fun NavigationBar3ButtonsScrim() {
|
|||
*/
|
||||
@Composable
|
||||
fun SystemBarsIconsDisposable(darkIcons: Boolean, isNavigationBarContrastEnforced: Boolean = false) {
|
||||
val systemUiController = rememberSystemUiController()
|
||||
val controller = LocalSystemBarsIconsController.current
|
||||
val isDarkTheme = LocalIsInDarkTheme.current
|
||||
|
||||
SideEffect {
|
||||
systemUiController.systemBarsDarkContentEnabled = darkIcons
|
||||
systemUiController.isNavigationBarContrastEnforced = isNavigationBarContrastEnforced
|
||||
controller.setIcons(darkIcons, isNavigationBarContrastEnforced)
|
||||
}
|
||||
|
||||
val isDarkTheme = LocalIsInDarkTheme.current
|
||||
|
||||
DisposableEffect(isDarkTheme) {
|
||||
onDispose {
|
||||
systemUiController.systemBarsDarkContentEnabled = !isDarkTheme
|
||||
systemUiController.isNavigationBarContrastEnforced = false
|
||||
controller.restoreIcons(isDarkTheme)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -51,7 +51,19 @@ fun BlockItem(model: BlockUM, modifier: Modifier = Modifier) {
|
|||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
|
||||
model.label?.let { Label(it) }
|
||||
when (val endContent = model.endContent) {
|
||||
is BlockUM.EndContent.None -> Unit
|
||||
is BlockUM.EndContent.Icon -> Icon(
|
||||
painter = painterResource(id = endContent.resId),
|
||||
contentDescription = null,
|
||||
tint = when (endContent.accentType) {
|
||||
BlockUM.AccentType.NONE -> TangemTheme.colors.text.primary1
|
||||
BlockUM.AccentType.ACCENT -> TangemTheme.colors.text.accent
|
||||
BlockUM.AccentType.WARNING -> TangemTheme.colors.text.warning
|
||||
},
|
||||
)
|
||||
is BlockUM.EndContent.Label -> Label(endContent.label)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,15 +3,29 @@ package com.tangem.core.ui.components.block.model
|
|||
import androidx.annotation.DrawableRes
|
||||
import com.tangem.core.ui.components.label.entity.LabelUM
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import javax.annotation.concurrent.Immutable
|
||||
|
||||
data class BlockUM(
|
||||
val text: TextReference,
|
||||
@DrawableRes val iconRes: Int,
|
||||
val onClick: () -> Unit,
|
||||
val accentType: AccentType = AccentType.NONE,
|
||||
val label: LabelUM? = null,
|
||||
val endContent: EndContent = EndContent.None,
|
||||
) {
|
||||
|
||||
@Immutable
|
||||
sealed interface EndContent {
|
||||
data object None : EndContent
|
||||
data class Label(
|
||||
val label: LabelUM,
|
||||
) : EndContent
|
||||
|
||||
data class Icon(
|
||||
val resId: Int,
|
||||
val accentType: AccentType = AccentType.NONE,
|
||||
) : EndContent
|
||||
}
|
||||
|
||||
enum class AccentType {
|
||||
NONE, ACCENT, WARNING,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,15 +27,20 @@ private const val DISABLED_ICON_ALPHA = 0.4f
|
|||
* [Figma Component](https://www.figma.com/design/14ISV23YB1yVW1uNVwqrKv/Android?node-id=2737-2800&t=ewlXfWwbDnRhjw4B-4)
|
||||
* */
|
||||
@Composable
|
||||
fun BlockchainRow(model: BlockchainRowUM, modifier: Modifier = Modifier, action: @Composable BoxScope.() -> Unit) {
|
||||
fun BlockchainRow(
|
||||
model: BlockchainRowUM,
|
||||
modifier: Modifier = Modifier,
|
||||
itemPadding: PaddingValues = PaddingValues(
|
||||
top = TangemTheme.dimens.spacing8,
|
||||
bottom = TangemTheme.dimens.spacing8,
|
||||
start = TangemTheme.dimens.spacing8,
|
||||
),
|
||||
action: @Composable BoxScope.() -> Unit,
|
||||
) {
|
||||
RowContentContainer(
|
||||
modifier = modifier
|
||||
.heightIn(min = TangemTheme.dimens.size52)
|
||||
.padding(
|
||||
top = TangemTheme.dimens.spacing8,
|
||||
bottom = TangemTheme.dimens.spacing8,
|
||||
start = TangemTheme.dimens.spacing8,
|
||||
),
|
||||
.padding(itemPadding),
|
||||
icon = {
|
||||
RowIcon(
|
||||
resId = model.iconResId,
|
||||
|
|
@ -58,7 +63,7 @@ fun BlockchainRow(model: BlockchainRowUM, modifier: Modifier = Modifier, action:
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun RowIcon(
|
||||
fun RowIcon(
|
||||
@DrawableRes resId: Int,
|
||||
isColored: Boolean,
|
||||
showAccentBadge: Boolean,
|
||||
|
|
|
|||
|
|
@ -60,10 +60,10 @@ fun TokenListItem(state: TokensListItemUM, isBalanceHidden: Boolean, modifier: M
|
|||
@Composable
|
||||
fun PortfolioListItem(state: TokensListItemUM.Portfolio, isBalanceHidden: Boolean, modifier: Modifier = Modifier) {
|
||||
if (state.isExpanded) {
|
||||
ExpandedPortfolioHeader(state.state, modifier)
|
||||
ExpandedPortfolioHeader(state = state.tokenItemUM, isCollapsable = state.isCollapsable, modifier = modifier)
|
||||
} else {
|
||||
TokenItem(
|
||||
state = state.state,
|
||||
state = state.tokenItemUM,
|
||||
isBalanceHidden = isBalanceHidden,
|
||||
modifier = modifier,
|
||||
)
|
||||
|
|
@ -83,7 +83,7 @@ fun PortfolioTokensListItem(state: PortfolioTokensListItemUM, isBalanceHidden: B
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun ExpandedPortfolioHeader(state: TokenItemState, modifier: Modifier = Modifier) {
|
||||
private fun ExpandedPortfolioHeader(state: TokenItemState, isCollapsable: Boolean, modifier: Modifier = Modifier) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = modifier
|
||||
|
|
@ -130,11 +130,13 @@ private fun ExpandedPortfolioHeader(state: TokenItemState, modifier: Modifier =
|
|||
)
|
||||
}
|
||||
|
||||
Icon(
|
||||
modifier = Modifier.size(TangemTheme.dimens.size16),
|
||||
painter = painterResource(id = R.drawable.ic_minimize_24),
|
||||
tint = TangemTheme.colors.icon.inactive,
|
||||
contentDescription = null,
|
||||
)
|
||||
if (isCollapsable) {
|
||||
Icon(
|
||||
modifier = Modifier.size(TangemTheme.dimens.size16),
|
||||
painter = painterResource(id = R.drawable.ic_minimize_24),
|
||||
tint = TangemTheme.colors.icon.inactive,
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4,6 +4,7 @@ import androidx.compose.runtime.Immutable
|
|||
import com.tangem.core.ui.components.fields.entity.SearchBarUM
|
||||
import com.tangem.core.ui.components.token.state.TokenItemState
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
/** Tokens list item state */
|
||||
@Immutable
|
||||
|
|
@ -41,11 +42,12 @@ sealed interface TokensListItemUM {
|
|||
}
|
||||
|
||||
data class Portfolio(
|
||||
val state: TokenItemState,
|
||||
val tokenItemUM: TokenItemState,
|
||||
val isExpanded: Boolean,
|
||||
val tokens: List<PortfolioTokensListItemUM>,
|
||||
val isCollapsable: Boolean,
|
||||
val tokens: ImmutableList<PortfolioTokensListItemUM>,
|
||||
) : TokensListItemUM {
|
||||
override val id: String = state.id
|
||||
override val id: String = tokenItemUM.id
|
||||
}
|
||||
|
||||
data class Text(override val id: Any, val text: TextReference) : TokensListItemUM
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
package com.tangem.core.ui.decompose
|
||||
|
||||
import androidx.compose.foundation.lazy.LazyListScope
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.compose.ui.Modifier
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
@Stable
|
||||
interface ComposableListContentComponent<T> {
|
||||
|
||||
val uiState: StateFlow<T>
|
||||
|
||||
fun LazyListScope.content(uiState: T, modifier: Modifier)
|
||||
|
||||
companion object {
|
||||
val EMPTY = EmptyComposableListContentComponent
|
||||
}
|
||||
}
|
||||
|
||||
object EmptyComposableListContentComponent : ComposableListContentComponent<Unit> {
|
||||
override val uiState: StateFlow<Unit> = MutableStateFlow(Unit)
|
||||
|
||||
override fun LazyListScope.content(uiState: Unit, modifier: Modifier) { /* no-op */
|
||||
}
|
||||
}
|
||||
|
|
@ -90,12 +90,14 @@ fun getActiveIconRes(blockchainId: String): Int {
|
|||
"bitrock", "bitrock/test" -> R.drawable.img_bitrock_22
|
||||
"sonic", "sonic/test" -> R.drawable.img_sonic_22
|
||||
"apechain", "apechain/test" -> R.drawable.img_apecoin_22
|
||||
"scroll", "scroll/test" -> R.drawable.ic_alert_24 // FIXME: add icon during full integration
|
||||
"scroll", "scroll/test" -> R.drawable.img_scroll_22
|
||||
"zklink", "zklink/test" -> R.drawable.img_zklink_22
|
||||
"vanar-chain", "vanar-chain/test" -> R.drawable.img_vanar_22
|
||||
"pepecoin", "pepecoin/test" -> R.drawable.img_pepecoin_22
|
||||
"hyperliquid", "hyperliquid/test" -> R.drawable.img_hyperliquid_22
|
||||
"quai", "quai/test" -> R.drawable.img_quai_22
|
||||
"linea", "linea/test" -> R.drawable.img_linea_22
|
||||
"arbitrum-nova" -> R.drawable.img_arbitrum_nova_22
|
||||
else -> R.drawable.ic_alert_24
|
||||
}
|
||||
}
|
||||
|
|
@ -184,12 +186,14 @@ fun getActiveIconResByCoinId(coinId: String): Int {
|
|||
"bitrock", "bitrock/test" -> R.drawable.img_bitrock_22
|
||||
"sonic", "sonic/test" -> R.drawable.img_sonic_22
|
||||
"apechain", "apechain/test" -> R.drawable.img_apecoin_22
|
||||
"scroll", "scroll/test" -> R.drawable.ic_alert_24 // FIXME: add icon during full integration
|
||||
"scroll", "scroll/test" -> R.drawable.img_scroll_22
|
||||
"zklink", "zklink/test" -> R.drawable.img_zklink_22
|
||||
"vanar-chain", "vanar-chain/test" -> R.drawable.img_vanar_22
|
||||
"pepecoin-network", "pepecoin-network/test" -> R.drawable.img_pepecoin_22
|
||||
"hyperliquid", "hyperliquid/test" -> R.drawable.img_hyperliquid_22
|
||||
"quai", "quai/test" -> R.drawable.img_quai_22
|
||||
"linea", "linea/test" -> R.drawable.img_linea_22
|
||||
"arbitrum-nova" -> R.drawable.img_arbitrum_nova_22
|
||||
else -> R.drawable.ic_alert_24
|
||||
}
|
||||
}
|
||||
|
|
@ -281,12 +285,14 @@ fun getGreyedOutIconRes(blockchainId: String): Int {
|
|||
"bitrock", "bitrock/test" -> R.drawable.ic_bitrock_22
|
||||
"sonic", "sonic/test" -> R.drawable.ic_sonic_22
|
||||
"apechain", "apechain/test" -> R.drawable.ic_apecoin_22
|
||||
"scroll", "scroll/test" -> R.drawable.ic_alert_24 // FIXME: add icon during full integration
|
||||
"scroll", "scroll/test" -> R.drawable.ic_scroll_22
|
||||
"zklink", "zklink/test" -> R.drawable.ic_zklink_22
|
||||
"vanar-chain", "vanar-chain/test" -> R.drawable.ic_vanar_22
|
||||
"pepecoin", "pepecoin/test" -> R.drawable.ic_pepecoin_22
|
||||
"hyperliquid", "hyperliquid/test" -> R.drawable.ic_hyperliquid_22
|
||||
"quai", "quai/test" -> R.drawable.ic_quai_22
|
||||
"linea", "linea/test" -> R.drawable.ic_linea_22
|
||||
"arbitrum-nova" -> R.drawable.ic_arbitrum_nova_22
|
||||
else -> R.drawable.ic_alert_24
|
||||
}
|
||||
}
|
||||
|
|
@ -13,6 +13,8 @@ import androidx.compose.ui.graphics.Color
|
|||
import androidx.compose.ui.platform.LocalView
|
||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||
import com.tangem.core.ui.UiDependencies
|
||||
import com.tangem.core.ui.components.LocalSystemBarsIconsController
|
||||
import com.tangem.core.ui.components.SystemBarsIconsController
|
||||
import com.tangem.core.ui.components.TangemShimmer
|
||||
import com.tangem.core.ui.components.text.BladeAnimation
|
||||
import com.tangem.core.ui.components.text.rememberBladeAnimation
|
||||
|
|
@ -65,6 +67,8 @@ fun TangemTheme(
|
|||
val themeColors = if (isDark) darkThemeColors() else lightThemeColors()
|
||||
val rememberedColors = remember { themeColors }
|
||||
.also { it.update(themeColors) }
|
||||
val systemUiController = rememberSystemUiController()
|
||||
val systemBarsIconsController = remember(systemUiController) { SystemBarsIconsController(systemUiController) }
|
||||
|
||||
val shapes = remember { TangemShapes(dimens) }
|
||||
|
||||
|
|
@ -103,6 +107,7 @@ fun TangemTheme(
|
|||
LocalEventMessageHandler provides eventMessageHandler,
|
||||
LocalWindowSize provides windowSize,
|
||||
LocalBladeAnimation provides rememberBladeAnimation(),
|
||||
LocalSystemBarsIconsController provides systemBarsIconsController,
|
||||
) {
|
||||
CompositionLocalProvider(
|
||||
LocalTangemShimmer provides TangemShimmer,
|
||||
|
|
@ -119,6 +124,14 @@ fun TangemTheme(
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ForceDarkTheme(content: @Composable () -> Unit) {
|
||||
CompositionLocalProvider(
|
||||
LocalTangemColors provides darkThemeColors(),
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
||||
object TangemTheme {
|
||||
val colors: TangemColors
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
package com.tangem.core.ui.test
|
||||
|
||||
object BaseBottomSheetTestTags {
|
||||
const val ACTION_TITLE = "BASE_BOTTOM_SHEET_ACTION_TITLE"
|
||||
const val ACTION_BUTTON = "BASE_BOTTOM_SHEET_ACTION_BUTTON"
|
||||
const val ACTION_ICON = "BASE_BOTTOM_SHEET_ACTION_ICON"
|
||||
const val TITLE = "BASE_BOTTOM_SHEET_TITLE"
|
||||
const val SUBTITLE = "BASE_BOTTOM_SHEET_SUBTITLE"
|
||||
const val CLOSE_BUTTON = "BASE_BOTTOM_SHEET_CLOSE_BUTTON"
|
||||
|
|
|
|||
|
|
@ -4,13 +4,11 @@ object SendScreenTestTags {
|
|||
const val SCREEN_CONTAINER = "SEND_SCREEN_CONTAINER"
|
||||
|
||||
const val AMOUNT_CONTAINER_TITLE = "SEND_SCREEN_AMOUNT_CONTAINER_TITLE"
|
||||
const val AMOUNT_CONTAINER_TEXT = "SEND_SCREEN_AMOUNT_CONTAINER_TEXT"
|
||||
const val INPUT_TEXT_FIELD = "SEND_SCREEN_INPUT_TEXT_FIELD"
|
||||
const val TOKEN_NAME = "SEND_SCREEN_TOKEN_NAME"
|
||||
const val PRIMARY_AMOUNT = "SEND_SCREEN_PRIMARY_AMOUNT"
|
||||
const val SECONDARY_AMOUNT = "SEND_SCREEN_SECONDARY_AMOUNT"
|
||||
|
||||
const val CURRENCY_BUTTON = "SEND_SCREEN_CURRENCY_BUTTON"
|
||||
const val FIAT_ICON = "SEND_SCREEN_FIAT_ICON"
|
||||
const val CURRENCY_ICON = "SEND_SCREEN_CURRENCY_ICON"
|
||||
const val MAX_BUTTON = "END_SCREEN_MAX_BUTTON"
|
||||
const val MAX_BUTTON = "SEND_SCREEN_MAX_BUTTON"
|
||||
const val PREVIOUS_BUTTON = "SEND_SCREEN_PREVIOUS_BUTTON"
|
||||
}
|
||||
|
|
@ -9,6 +9,6 @@ object SwapTokenScreenTestTags {
|
|||
const val PROVIDERS_BLOCK = "SWAP_TOKEN_SCREEN_PROVIDERS_BLOCK"
|
||||
const val SWAP_BUTTON = "SWAP_TOKEN_SCREEN_SWAP_BUTTON"
|
||||
const val TOKEN = "SWAP_TOKEN_SCREEN_TOKEN"
|
||||
const val TOKEN_NAME = "SWAP_TOKEN_SCREEN_TOKEN_NAME"
|
||||
const val TOKEN_SYMBOL = "SWAP_TOKEN_SCREEN_TOKEN_SYMBOL"
|
||||
const val TOKEN_ICON = "SWAP_TOKEN_SCREEN_TOKEN_ICON"
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package com.tangem.core.ui.test
|
||||
|
||||
object TokenReceiveQrCodeBottomSheetTestTags {
|
||||
const val TITLE = "TOKEN_RECEIVE_QR_CODE_BOTTOM_SHEET_TITLE"
|
||||
const val QR_CODE = "TOKEN_RECEIVE_QR_CODE_BOTTOM_SHEET_QR_CODE"
|
||||
const val ADDRESS = "TOKEN_RECEIVE_QR_CODE_BOTTOM_SHEET_ADDRESS"
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.tangem.core.ui.test
|
||||
|
||||
object TokenReceiveWarningBottomSheetTestTags {
|
||||
const val BOTTOM_SHEET = "TOKEN_RECEIVE_WARNING_BOTTOM_SHEET"
|
||||
}
|
||||
|
|
@ -7,4 +7,5 @@ object WalletConnectScreenTestTags {
|
|||
const val APP_NAME = "WALLET_CONNECT_SCREEN_APP_NAME"
|
||||
const val APPROVE_ICON = "WALLET_CONNECT_SCREEN_APPROVE_ICON"
|
||||
const val APP_URL = "WALLET_CONNECT_SCREEN_APP_URL"
|
||||
const val WALLET_CONNECT_IMAGE = "WALLET_CONNECT_SCREEN_WALLET_CONNECT_IMAGE"
|
||||
}
|
||||
BIN
core/ui/src/main/res/drawable-hdpi/img_hardware_wallet.webp
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
core/ui/src/main/res/drawable-hdpi/img_mobile_wallet.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
core/ui/src/main/res/drawable-mdpi/img_hardware_wallet.webp
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
core/ui/src/main/res/drawable-mdpi/img_mobile_wallet.webp
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
core/ui/src/main/res/drawable-xhdpi/img_hardware_wallet.webp
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
core/ui/src/main/res/drawable-xhdpi/img_mobile_wallet.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
core/ui/src/main/res/drawable-xxhdpi/img_hardware_wallet.webp
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
core/ui/src/main/res/drawable-xxhdpi/img_mobile_wallet.webp
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
core/ui/src/main/res/drawable-xxxhdpi/img_hardware_wallet.webp
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
core/ui/src/main/res/drawable-xxxhdpi/img_mobile_wallet.webp
Normal file
|
After Width: | Height: | Size: 128 KiB |
10
core/ui/src/main/res/drawable/ic_add_wallet_16.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M11.413,2.426C12.757,2.426 13.43,2.426 13.943,2.688C14.395,2.918 14.762,3.285 14.992,3.736C15.254,4.25 15.253,4.922 15.253,6.266V9.736C15.253,11.079 15.254,11.752 14.992,12.265C14.762,12.716 14.395,13.084 13.943,13.314C13.43,13.575 12.757,13.575 11.413,13.575H4.587C3.243,13.575 2.57,13.575 2.057,13.314C1.605,13.084 1.238,12.716 1.008,12.265C0.746,11.752 0.746,11.079 0.746,9.736V6.266C0.746,4.922 0.746,4.25 1.008,3.736C1.238,3.285 1.605,2.918 2.057,2.688C2.57,2.426 3.243,2.426 4.587,2.426H11.413ZM8,5.063C7.876,5.063 7.814,5.063 7.763,5.073C7.551,5.115 7.386,5.281 7.344,5.492C7.334,5.544 7.333,5.606 7.333,5.729V7.334H5.729C5.606,7.334 5.544,7.334 5.492,7.344C5.281,7.386 5.115,7.551 5.073,7.763C5.063,7.815 5.063,7.877 5.063,8.001C5.063,8.124 5.063,8.186 5.073,8.238C5.115,8.449 5.281,8.615 5.492,8.657C5.544,8.667 5.606,8.667 5.729,8.667H7.333V10.271C7.333,10.394 7.334,10.456 7.344,10.508C7.386,10.719 7.551,10.885 7.763,10.927C7.814,10.937 7.876,10.938 8,10.938C8.124,10.938 8.186,10.937 8.238,10.927C8.449,10.885 8.615,10.719 8.657,10.508C8.667,10.456 8.667,10.394 8.667,10.271V8.667H10.27C10.394,8.667 10.456,8.667 10.508,8.657C10.719,8.615 10.885,8.449 10.927,8.238C10.937,8.186 10.937,8.124 10.937,8.001C10.937,7.877 10.937,7.815 10.927,7.763C10.885,7.551 10.719,7.386 10.508,7.344C10.456,7.333 10.394,7.334 10.27,7.334H8.667V5.729C8.667,5.606 8.667,5.544 8.657,5.492C8.615,5.281 8.449,5.115 8.238,5.073C8.186,5.063 8.124,5.063 8,5.063Z"
|
||||
android:fillColor="#0099FF"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
||||
9
core/ui/src/main/res/drawable/ic_arbitrum_nova_22.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:viewportWidth="22"
|
||||
android:viewportHeight="22">
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M8.857,6H7.575C7.486,6 7.407,6.058 7.377,6.146L4.006,15.851C3.981,15.924 4.032,16 4.105,16H5.388C5.476,16 5.555,15.942 5.586,15.855L8.956,6.149C8.981,6.076 8.93,6 8.857,6ZM10.416,10.067C10.383,9.97 10.252,9.97 10.218,10.067L9.554,11.981C9.537,12.03 9.537,12.084 9.554,12.133L10.846,15.854C10.876,15.942 10.955,16 11.044,16H12.326C12.399,16 12.45,15.924 12.425,15.851L10.416,10.067ZM13.685,11.941C13.719,12.038 13.849,12.038 13.883,11.941L15.894,6.149C15.919,6.076 15.868,6 15.795,6H14.513C14.424,6 14.345,6.058 14.315,6.146L13.02,9.874C13.003,9.923 13.003,9.977 13.02,10.026L13.685,11.941ZM11.157,6.144C11.127,6.058 11.048,6 10.96,6H9.674C9.585,6 9.506,6.058 9.476,6.145L6.106,15.851C6.081,15.924 6.132,16 6.205,16H7.487C7.576,16 7.655,15.942 7.685,15.855L10.265,8.423C10.282,8.374 10.348,8.374 10.365,8.423L12.945,15.855C12.976,15.942 13.055,16 13.143,16H14.425C14.499,16 14.55,15.924 14.524,15.851L11.157,6.144ZM17.895,6H16.612C16.524,6 16.445,6.058 16.414,6.145L14.07,12.898C14.053,12.946 14.053,13 14.07,13.049L14.735,14.964C14.768,15.061 14.899,15.061 14.933,14.964L17.253,8.28L17.993,6.149C18.019,6.076 17.968,6 17.895,6Z" />
|
||||
</vector>
|
||||
9
core/ui/src/main/res/drawable/ic_chevron_right_18x24.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="19dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="19"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M12.632,12.113C12.632,12.331 12.552,12.511 12.382,12.682L8.287,16.687C8.148,16.825 7.984,16.889 7.787,16.889C7.388,16.889 7.063,16.575 7.063,16.176C7.063,15.979 7.149,15.798 7.292,15.655L10.93,12.118L7.292,8.57C7.149,8.427 7.063,8.251 7.063,8.049C7.063,7.65 7.388,7.331 7.787,7.331C7.984,7.331 8.148,7.4 8.287,7.538L12.382,11.543C12.558,11.714 12.632,11.894 12.632,12.113Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
9
core/ui/src/main/res/drawable/ic_flash_16.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="17dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="17"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M10.49,1.932C10.866,2.174 11.072,2.631 10.988,3.121L10.323,7.004C10.312,7.067 10.355,7.127 10.418,7.138L12.198,7.443C12.706,7.53 12.997,7.933 13.079,8.318C13.162,8.702 13.063,9.161 12.713,9.481L7.814,13.946C7.422,14.304 6.898,14.317 6.51,14.067C6.135,13.825 5.928,13.368 6.012,12.878L6.677,8.995C6.688,8.932 6.646,8.872 6.582,8.861L4.803,8.556C4.295,8.469 4.003,8.066 3.921,7.681C3.839,7.297 3.937,6.838 4.288,6.519L9.186,2.053C9.579,1.695 10.102,1.682 10.49,1.932Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
</vector>
|
||||
9
core/ui/src/main/res/drawable/ic_import_seed_16.xml
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M12.054,1.505C13.173,1.505 13.733,1.505 14.161,1.723C14.537,1.914 14.843,2.221 15.035,2.597C15.253,3.024 15.253,3.585 15.253,4.705V11.296C15.253,12.416 15.253,12.976 15.035,13.404C14.843,13.781 14.537,14.087 14.161,14.278C13.733,14.496 13.173,14.496 12.054,14.496H3.946C2.827,14.496 2.267,14.496 1.839,14.278C1.463,14.087 1.157,13.78 0.965,13.404C0.747,12.976 0.746,12.416 0.746,11.296V4.705C0.746,3.585 0.747,3.024 0.965,2.597C1.157,2.221 1.463,1.914 1.839,1.723C2.267,1.505 2.827,1.505 3.946,1.505H12.054ZM3.597,10.534C3.21,10.535 2.897,10.848 2.896,11.234C2.896,11.621 3.21,11.934 3.597,11.935H6.563C6.949,11.935 7.263,11.621 7.263,11.234C7.263,10.848 6.949,10.534 6.563,10.534H3.597ZM10.921,6.947C10.535,6.947 10.221,7.261 10.221,7.647V9.544L9.72,9.043C9.446,8.77 9.003,8.77 8.729,9.043C8.456,9.316 8.457,9.76 8.729,10.033L10.426,11.729C10.699,12.002 11.142,12.002 11.415,11.729L13.111,10.034C13.384,9.761 13.384,9.317 13.111,9.044C12.838,8.771 12.394,8.77 12.121,9.043L11.62,9.544V7.647C11.62,7.261 11.307,6.947 10.921,6.947ZM3.597,7.301C3.21,7.301 2.897,7.615 2.896,8.001C2.897,8.387 3.21,8.701 3.597,8.701H6.563C6.949,8.701 7.262,8.387 7.263,8.001C7.263,7.615 6.949,7.301 6.563,7.301H3.597ZM3.597,4.066C3.21,4.067 2.897,4.38 2.896,4.767C2.896,5.153 3.21,5.467 3.597,5.467H6.563C6.949,5.467 7.263,5.153 7.263,4.767C7.263,4.38 6.949,4.066 6.563,4.066H3.597ZM9.438,4.066C9.051,4.067 8.737,4.38 8.737,4.767C8.737,5.153 9.051,5.467 9.438,5.467H12.403C12.79,5.467 13.104,5.153 13.104,4.767C13.103,4.38 12.79,4.067 12.403,4.066H9.438Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
</vector>
|
||||
15
core/ui/src/main/res/drawable/ic_linea_22.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:viewportWidth="22"
|
||||
android:viewportHeight="22">
|
||||
<group>
|
||||
<clip-path android:pathData="M15.573,6H6V16H15.573V6Z" />
|
||||
<path
|
||||
android:fillColor="#121212"
|
||||
android:pathData="M13.951,16H6V7.623H7.819V14.376H13.951V15.999V16Z" />
|
||||
<path
|
||||
android:fillColor="#121212"
|
||||
android:pathData="M13.95,9.245C14.847,9.245 15.573,8.519 15.573,7.623C15.573,6.727 14.847,6 13.95,6C13.054,6 12.328,6.727 12.328,7.623C12.328,8.519 13.054,9.245 13.95,9.245Z" />
|
||||
</group>
|
||||
</vector>
|
||||
14
core/ui/src/main/res/drawable/ic_mobile_wallet_16.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M4.559,7.397C5.105,7.397 5.547,7.839 5.547,8.385V13.432C5.547,13.977 5.105,14.419 4.559,14.419H1.91C1.364,14.419 0.922,13.977 0.922,13.432V8.385C0.922,7.839 1.364,7.397 1.91,7.397H4.559ZM2.773,8.382C2.482,8.382 2.246,8.617 2.246,8.908C2.246,9.199 2.482,9.435 2.773,9.435H3.695C3.986,9.435 4.221,9.199 4.221,8.908C4.221,8.617 3.986,8.382 3.695,8.382H2.773Z"
|
||||
android:fillColor="#0099FF"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M9.376,1.58C9.887,1.58 10.267,1.58 10.596,1.668C11.485,1.905 12.179,2.598 12.417,3.484C12.473,3.693 12.493,3.923 12.501,4.194C12.597,4.203 12.689,4.213 12.778,4.225C13.375,4.305 13.902,4.479 14.324,4.9C14.746,5.322 14.922,5.848 15.002,6.443C15.078,7.011 15.078,7.727 15.078,8.596V9.971C15.078,10.84 15.078,11.557 15.002,12.124C14.922,12.72 14.746,13.246 14.324,13.667C13.902,14.089 13.375,14.263 12.778,14.343C12.209,14.419 11.491,14.419 10.619,14.419H6.666C6.658,14.419 6.65,14.419 6.642,14.419C6.784,14.12 6.865,13.785 6.865,13.432V8.385C6.865,7.112 5.833,6.08 4.56,6.08H1.91C1.557,6.08 1.221,6.16 0.922,6.302V3.506C0.922,2.442 1.786,1.58 2.852,1.58H9.376ZM12.271,8.29C11.645,8.29 11.138,8.797 11.138,9.423C11.138,10.048 11.645,10.555 12.271,10.555C12.896,10.555 13.404,10.048 13.404,9.423C13.403,8.797 12.896,8.29 12.271,8.29ZM2.852,2.864C2.497,2.864 2.208,3.151 2.208,3.506C2.208,3.86 2.497,4.148 2.852,4.148H10.619C10.825,4.148 11.022,4.148 11.211,4.149C11.205,3.983 11.194,3.892 11.173,3.816C11.054,3.373 10.707,3.026 10.263,2.908C10.12,2.869 9.926,2.864 9.286,2.864H2.852Z"
|
||||
android:fillColor="#0099FF"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
||||
21
core/ui/src/main/res/drawable/ic_scroll_22.xml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:viewportWidth="22"
|
||||
android:viewportHeight="22">
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M6.498,9.623C6.039,9.179 5.717,8.609 5.717,7.926V7.856C5.754,6.697 6.691,5.762 7.831,5.729H15.093C15.281,5.739 15.433,5.874 15.433,6.071V12.321C15.598,12.349 15.681,12.372 15.842,12.433C15.97,12.48 16.145,12.583 16.145,12.583V6.071C16.136,5.477 15.672,5 15.088,5H7.826C6.259,5.023 5,6.328 5,7.926C5,8.857 5.418,9.651 6.098,10.208C6.144,10.245 6.19,10.297 6.31,10.297C6.521,10.297 6.673,10.123 6.664,9.937C6.664,9.778 6.595,9.722 6.498,9.623Z" />
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M14.904,12.732H9.21C8.829,12.737 8.521,13.05 8.521,13.438V14.27C8.53,14.653 8.852,14.981 9.238,14.981H9.661V14.27H9.233V13.457C9.233,13.457 9.339,13.457 9.463,13.457C10.184,13.457 10.713,14.134 10.713,14.864C10.713,15.509 10.134,16.331 9.169,16.266C8.314,16.21 7.85,15.434 7.85,14.864V7.805C7.85,7.487 7.592,7.225 7.28,7.225H6.71V7.95H7.133V14.868C7.11,16.275 8.116,16.981 9.169,16.981L14.909,17C16.063,17 17,16.046 17,14.868C17.005,13.69 16.063,12.732 14.904,12.732ZM16.288,14.915C16.265,15.668 15.654,16.275 14.904,16.275L10.915,16.261C11.232,15.887 11.425,15.401 11.425,14.868C11.425,14.036 10.938,13.461 10.938,13.461H14.909C15.672,13.461 16.292,14.092 16.292,14.868L16.288,14.915Z" />
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M13.369,8.08H9.076V7.356H13.369C13.562,7.356 13.723,7.515 13.723,7.716C13.727,7.917 13.571,8.08 13.369,8.08Z" />
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M13.369,11.479H9.076V10.759H13.369C13.562,10.759 13.723,10.918 13.723,11.119C13.727,11.315 13.571,11.479 13.369,11.479Z" />
|
||||
<path
|
||||
android:fillColor="#000000"
|
||||
android:pathData="M14.127,9.777H9.076V9.053H14.123C14.316,9.053 14.477,9.212 14.477,9.413C14.486,9.613 14.325,9.777 14.127,9.777Z" />
|
||||
</vector>
|
||||
10
core/ui/src/main/res/drawable/ic_shield_check_16.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M7.973,1.085C8.088,1.085 8.207,1.096 8.331,1.118C8.455,1.14 8.572,1.167 8.682,1.198C8.829,1.247 9.036,1.316 9.302,1.405C9.573,1.494 9.871,1.596 10.197,1.712C10.523,1.828 10.849,1.943 11.175,2.059C11.505,2.17 11.806,2.275 12.077,2.373C12.348,2.471 12.559,2.551 12.711,2.613C13.046,2.746 13.293,2.905 13.454,3.087C13.615,3.269 13.695,3.556 13.695,3.948V8.912C13.695,9.508 13.606,10.035 13.427,10.493C13.248,10.947 12.956,11.372 12.552,11.768C12.149,12.164 11.609,12.562 10.934,12.962C10.264,13.367 9.435,13.816 8.448,14.31C8.361,14.355 8.274,14.385 8.187,14.403C8.104,14.426 8.033,14.436 7.973,14.436C7.913,14.436 7.84,14.425 7.753,14.403C7.67,14.385 7.585,14.355 7.498,14.31C6.529,13.79 5.708,13.324 5.033,12.915C4.363,12.51 3.823,12.117 3.414,11.734C3.006,11.347 2.71,10.929 2.526,10.48C2.343,10.031 2.251,9.508 2.251,8.912V3.948C2.251,3.556 2.331,3.269 2.492,3.087C2.653,2.905 2.9,2.746 3.235,2.613C3.387,2.555 3.598,2.477 3.869,2.379C4.14,2.277 4.438,2.168 4.764,2.052C5.09,1.937 5.416,1.823 5.742,1.712C6.072,1.596 6.371,1.494 6.637,1.405C6.908,1.316 7.117,1.247 7.264,1.198C7.379,1.167 7.496,1.14 7.615,1.118C7.739,1.096 7.858,1.085 7.973,1.085ZM11.402,5.142C11.057,4.855 10.545,4.902 10.258,5.246L7.505,8.554L6.188,7.237C5.871,6.92 5.357,6.92 5.04,7.237C4.723,7.555 4.723,8.069 5.04,8.386L6.986,10.332C7.147,10.494 7.369,10.58 7.597,10.569C7.825,10.559 8.039,10.453 8.185,10.278L11.507,6.285C11.794,5.941 11.747,5.429 11.402,5.142Z"
|
||||
android:fillColor="#0099FF"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
||||
12
core/ui/src/main/res/drawable/ic_sparkles_16.xml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="17dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="17"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M10.313,1.505C10.524,1.505 10.708,1.652 10.755,1.858L11.08,3.303C11.318,4.358 12.142,5.182 13.196,5.42L14.642,5.745C14.848,5.792 14.995,5.975 14.995,6.187C14.995,6.399 14.848,6.583 14.642,6.629L13.196,6.955C12.142,7.193 11.318,8.016 11.08,9.071L10.755,10.516C10.708,10.723 10.524,10.87 10.313,10.87C10.101,10.87 9.917,10.723 9.87,10.516L9.545,9.071C9.307,8.016 8.484,7.193 7.429,6.955L5.984,6.629C5.777,6.583 5.63,6.399 5.63,6.187C5.63,5.975 5.777,5.792 5.984,5.745L7.429,5.42C8.484,5.182 9.307,4.358 9.545,3.303L9.87,1.858C9.917,1.652 10.101,1.505 10.313,1.505Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
<path
|
||||
android:pathData="M5.479,7.547C5.691,7.547 5.874,7.694 5.921,7.9L6.154,8.933C6.312,9.637 6.863,10.188 7.567,10.346L8.6,10.579C8.806,10.625 8.953,10.809 8.953,11.021C8.953,11.233 8.806,11.416 8.6,11.463L7.567,11.696C6.863,11.854 6.312,12.405 6.154,13.109L5.921,14.142C5.874,14.348 5.691,14.495 5.479,14.495C5.267,14.495 5.083,14.348 5.037,14.142L4.804,13.109C4.646,12.405 4.095,11.854 3.391,11.696L2.358,11.463C2.152,11.416 2.005,11.233 2.005,11.021C2.005,10.809 2.152,10.625 2.358,10.579L3.391,10.346C4.095,10.188 4.646,9.637 4.804,8.933L5.037,7.9C5.083,7.694 5.267,7.547 5.479,7.547Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
</vector>
|
||||
15
core/ui/src/main/res/drawable/ic_stack_fill_new_16.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="16dp"
|
||||
android:height="16dp"
|
||||
android:viewportWidth="16"
|
||||
android:viewportHeight="16">
|
||||
<path
|
||||
android:pathData="M12.94,10.526C13.241,10.375 13.608,10.497 13.758,10.798C13.909,11.099 13.786,11.465 13.485,11.615L8.459,14.129C8.422,14.148 8.3,14.215 8.16,14.241C8.054,14.261 7.945,14.261 7.839,14.241C7.7,14.215 7.578,14.148 7.541,14.129L2.515,11.615C2.214,11.465 2.091,11.099 2.241,10.798C2.392,10.497 2.758,10.375 3.059,10.526L8,12.995L12.94,10.526Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
<path
|
||||
android:pathData="M12.94,7.455C13.241,7.305 13.608,7.427 13.758,7.727C13.909,8.028 13.786,8.394 13.485,8.545L8.459,11.059C8.422,11.077 8.299,11.144 8.16,11.171C8.054,11.191 7.945,11.191 7.839,11.171C7.7,11.144 7.578,11.077 7.541,11.059L2.515,8.545C2.214,8.394 2.091,8.028 2.241,7.727C2.392,7.427 2.758,7.305 3.059,7.455L8,9.925L12.94,7.455Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
<path
|
||||
android:pathData="M8.08,1.749L8.16,1.76L8.261,1.786C8.355,1.817 8.431,1.857 8.459,1.871L13.485,4.385C13.692,4.488 13.822,4.7 13.823,4.93C13.823,5.161 13.691,5.372 13.485,5.475L8.459,7.989C8.422,8.008 8.299,8.074 8.16,8.1C8.054,8.12 7.945,8.12 7.839,8.1C7.7,8.074 7.578,8.008 7.541,7.989L2.514,5.475C2.308,5.372 2.177,5.161 2.177,4.93C2.177,4.7 2.308,4.488 2.514,4.385L7.541,1.871C7.578,1.853 7.7,1.786 7.839,1.76L7.92,1.749C7.973,1.744 8.026,1.744 8.08,1.749Z"
|
||||
android:fillColor="#0099FF"/>
|
||||
</vector>
|
||||
18
core/ui/src/main/res/drawable/img_arbitrum_nova_22.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:viewportWidth="22"
|
||||
android:viewportHeight="22">
|
||||
<group>
|
||||
<clip-path android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z" />
|
||||
<path
|
||||
android:fillColor="#ffffff"
|
||||
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z" />
|
||||
<path
|
||||
android:fillColor="#181818"
|
||||
android:pathData="M0,0h22v22h-22z" />
|
||||
<path
|
||||
android:fillColor="#EF8220"
|
||||
android:pathData="M8.857,6H7.575C7.486,6 7.407,6.058 7.377,6.146L4.006,15.851C3.981,15.924 4.032,16 4.105,16H5.388C5.476,16 5.555,15.942 5.586,15.855L8.956,6.149C8.981,6.076 8.93,6 8.857,6ZM10.416,10.067C10.383,9.97 10.252,9.97 10.218,10.067L9.554,11.981C9.537,12.03 9.537,12.084 9.554,12.133L10.846,15.854C10.876,15.942 10.955,16 11.044,16H12.326C12.399,16 12.45,15.924 12.425,15.851L10.416,10.067ZM13.685,11.941C13.719,12.038 13.849,12.038 13.883,11.941L15.894,6.149C15.919,6.076 15.868,6 15.795,6H14.513C14.424,6 14.345,6.058 14.315,6.146L13.02,9.874C13.003,9.923 13.003,9.977 13.02,10.026L13.685,11.941ZM11.157,6.144C11.127,6.058 11.048,6 10.96,6H9.674C9.585,6 9.506,6.058 9.476,6.145L6.106,15.851C6.081,15.924 6.132,16 6.205,16H7.487C7.576,16 7.655,15.942 7.685,15.855L10.265,8.423C10.282,8.374 10.348,8.374 10.365,8.423L12.945,15.855C12.976,15.942 13.055,16 13.143,16H14.425C14.499,16 14.55,15.924 14.524,15.851L11.157,6.144ZM17.895,6H16.612C16.524,6 16.445,6.058 16.414,6.145L14.07,12.898C14.053,12.946 14.053,13 14.07,13.049L14.735,14.964C14.768,15.061 14.899,15.061 14.933,14.964L17.253,8.28L17.993,6.149C18.019,6.076 17.968,6 17.895,6Z" />
|
||||
</group>
|
||||
</vector>
|
||||
26
core/ui/src/main/res/drawable/img_linea_22.xml
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:viewportWidth="22"
|
||||
android:viewportHeight="22">
|
||||
<group>
|
||||
<clip-path
|
||||
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z"/>
|
||||
<path
|
||||
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M0,0h22v22h-22z"
|
||||
android:fillColor="#61DFFF"/>
|
||||
<group>
|
||||
<clip-path
|
||||
android:pathData="M15.573,6H6V16H15.573V6Z"/>
|
||||
<path
|
||||
android:pathData="M13.951,16H6V7.623H7.819V14.376H13.951V15.999V16Z"
|
||||
android:fillColor="#121212"/>
|
||||
<path
|
||||
android:pathData="M13.95,9.245C14.847,9.245 15.573,8.519 15.573,7.623C15.573,6.727 14.847,6 13.95,6C13.054,6 12.328,6.727 12.328,7.623C12.328,8.519 13.054,9.245 13.95,9.245Z"
|
||||
android:fillColor="#121212"/>
|
||||
</group>
|
||||
</group>
|
||||
</vector>
|
||||
36
core/ui/src/main/res/drawable/img_scroll_22.xml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="22dp"
|
||||
android:height="22dp"
|
||||
android:viewportWidth="22"
|
||||
android:viewportHeight="22">
|
||||
<group>
|
||||
<clip-path android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z" />
|
||||
<path
|
||||
android:fillColor="#ffffff"
|
||||
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z" />
|
||||
<path
|
||||
android:fillColor="#FFEEDA"
|
||||
android:pathData="M0,0h22v22h-22z" />
|
||||
<path
|
||||
android:fillColor="#FFEEDA"
|
||||
android:pathData="M16.145,13.145V6.07C16.136,5.477 15.672,5 15.088,5H7.826C6.259,5.023 5,6.327 5,7.925C5,8.463 5.142,8.925 5.358,9.332C5.542,9.668 5.832,9.986 6.117,10.224C6.2,10.29 6.158,10.262 6.406,10.416C6.746,10.626 7.137,10.734 7.137,10.734L7.132,14.967C7.142,15.168 7.16,15.36 7.215,15.542C7.376,16.14 7.785,16.598 8.337,16.818C8.566,16.911 8.828,16.972 9.109,16.977L14.909,16.996C16.062,16.996 17,16.042 17,14.865C17.004,14.164 16.66,13.538 16.145,13.145Z" />
|
||||
<path
|
||||
android:fillColor="#EBC28E"
|
||||
android:pathData="M16.287,14.916C16.264,15.668 15.653,16.276 14.904,16.276L10.915,16.262C11.232,15.888 11.425,15.402 11.425,14.87C11.425,14.038 10.938,13.463 10.938,13.463H14.909C15.672,13.463 16.292,14.094 16.292,14.87L16.287,14.916Z" />
|
||||
<path
|
||||
android:fillColor="#101010"
|
||||
android:pathData="M6.498,9.626C6.039,9.183 5.717,8.612 5.717,7.93V7.86C5.754,6.701 6.691,5.767 7.831,5.734H15.092C15.281,5.743 15.433,5.879 15.433,6.075V12.323C15.598,12.351 15.681,12.374 15.842,12.435C15.97,12.482 16.145,12.585 16.145,12.585V6.075C16.136,5.482 15.672,5.005 15.088,5.005H7.826C6.259,5.028 5,6.332 5,7.93C5,8.86 5.418,9.655 6.098,10.211C6.144,10.248 6.19,10.299 6.31,10.299C6.521,10.299 6.673,10.127 6.664,9.94C6.664,9.781 6.595,9.725 6.498,9.626Z" />
|
||||
<path
|
||||
android:fillColor="#101010"
|
||||
android:pathData="M14.904,12.733H9.21C8.829,12.738 8.521,13.051 8.521,13.439V14.271C8.53,14.654 8.852,14.981 9.238,14.981H9.661V14.271H9.233V13.458C9.233,13.458 9.339,13.458 9.463,13.458C10.184,13.458 10.713,14.135 10.713,14.864C10.713,15.509 10.134,16.332 9.169,16.266C8.314,16.21 7.85,15.434 7.85,14.864V7.808C7.85,7.49 7.592,7.229 7.28,7.229H6.71V7.953H7.133V14.869C7.11,16.276 8.116,16.981 9.169,16.981L14.909,17C16.063,17 17,16.047 17,14.869C17.005,13.691 16.063,12.733 14.904,12.733ZM16.288,14.916C16.265,15.668 15.653,16.276 14.904,16.276L10.915,16.262C11.232,15.888 11.425,15.402 11.425,14.869C11.425,14.037 10.938,13.462 10.938,13.462H14.909C15.672,13.462 16.292,14.093 16.292,14.869L16.288,14.916Z" />
|
||||
<path
|
||||
android:fillColor="#101010"
|
||||
android:pathData="M13.369,8.084H9.076V7.36H13.369C13.562,7.36 13.723,7.519 13.723,7.72C13.727,7.921 13.571,8.084 13.369,8.084Z" />
|
||||
<path
|
||||
android:fillColor="#101010"
|
||||
android:pathData="M13.369,11.482H9.076V10.762H13.369C13.562,10.762 13.723,10.921 13.723,11.122C13.727,11.318 13.571,11.482 13.369,11.482Z" />
|
||||
<path
|
||||
android:fillColor="#101010"
|
||||
android:pathData="M14.127,9.78H9.076V9.056H14.123C14.316,9.056 14.477,9.215 14.477,9.416C14.486,9.617 14.325,9.78 14.127,9.78Z" />
|
||||
</group>
|
||||
</vector>
|
||||