From 4384ce7da0d815f273617a4545397c785a7126e4 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Wed, 16 Oct 2024 09:37:18 +0200 Subject: [PATCH 01/33] Add border tokens in the demo app --- .../main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt | 2 ++ .../com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index cf533e24..5d2fea88 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -48,6 +48,8 @@ import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance } +private val defaultIllustrationSize = 64.dp + @Immutable sealed class TokenCategory( @StringRes val nameRes: Int, diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index e0093adc..72a1b8ef 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -54,7 +54,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory) { items(tokenCategory.properties) { tokenProperty -> Spacer(modifier = Modifier.height(OudsSpacingFixedKeyToken.Medium.value)) - + tokenProperty.nameRes?.let { Text( modifier = Modifier From 6a862e35f794f3a32d29a44f73723359090e71a0 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 17 Oct 2024 13:29:04 +0200 Subject: [PATCH 02/33] Review: Change dashedBorder modifier signature --- .../main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt | 4 ++-- .../orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt | 2 +- .../src/main/java/com/orange/ouds/theme/OudsBorderStyle.kt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index 5d2fea88..8d5e4eb3 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -113,9 +113,9 @@ sealed class TokenProperty( .size(defaultIllustrationSize) .border( width = 1.dp, - color = OudsColorKeyToken.OnSurface.value, + color = OudsColorKeyToken.OnSurface.value, //TODO use ContentDefault token when available shape = RoundedCornerShape(radius) - ) //TODO use ContentDefault token when available + ) .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available ) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 72a1b8ef..e0093adc 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -54,7 +54,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory) { items(tokenCategory.properties) { tokenProperty -> Spacer(modifier = Modifier.height(OudsSpacingFixedKeyToken.Medium.value)) - + tokenProperty.nameRes?.let { Text( modifier = Modifier diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/OudsBorderStyle.kt b/theme-contract/src/main/java/com/orange/ouds/theme/OudsBorderStyle.kt index b02db859..67f75c4e 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/OudsBorderStyle.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/OudsBorderStyle.kt @@ -27,4 +27,4 @@ enum class OudsBorderStyle { } } } -} +} \ No newline at end of file From 5d0f34a24404be8bb85e58127b979d7e915203f6 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 17 Oct 2024 13:38:15 +0200 Subject: [PATCH 03/33] Review: Move defaultIllustrationSize variable in the companion object of TokenProperty --- .../main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index 8d5e4eb3..af8240b1 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -48,8 +48,6 @@ import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance } -private val defaultIllustrationSize = 64.dp - @Immutable sealed class TokenCategory( @StringRes val nameRes: Int, From c81a14b9248c03c0211e621a146646160d9dcea7 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 17 Oct 2024 16:49:59 +0200 Subject: [PATCH 04/33] Add ic_spacing icon --- NOTICE.txt | 1 + app/src/main/res/drawable/ic_spacing.xml | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 app/src/main/res/drawable/ic_spacing.xml diff --git a/NOTICE.txt b/NOTICE.txt index 87a5c90e..9754cb9b 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -16,6 +16,7 @@ app/src/main/res/drawable/ic_info.xml app/src/main/res/drawable/ic_layers.xml app/src/main/res/drawable/ic_solar_palette.xml app/src/main/res/drawable/ic_typography.xml +app/src/main/res/drawable/ic_spacing.xml app/src/main/res/drawable/ic_ui_dark_mode.xml app/src/main/res/drawable/ic_ui_light_mode.xml app/src/main/res/drawable/il_opacity_union.xml diff --git a/app/src/main/res/drawable/ic_spacing.xml b/app/src/main/res/drawable/ic_spacing.xml new file mode 100644 index 00000000..135d802a --- /dev/null +++ b/app/src/main/res/drawable/ic_spacing.xml @@ -0,0 +1,13 @@ + + + + + + From 858ae9776808022059accee6c81743cf212dd21f Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Fri, 18 Oct 2024 15:57:52 +0200 Subject: [PATCH 05/33] Start adding dimension tokens in demo app --- .../ouds/app/ui/navigation/AppNavGraph.kt | 4 +- .../ouds/app/ui/tokens/TokenCategory.kt | 27 +++- .../ui/tokens/TokenCategoryDetailScreen.kt | 118 +++++++++++------- .../ouds/app/ui/tokens/TokensNavGraph.kt | 11 +- .../orange/ouds/app/ui/tokens/TokensScreen.kt | 8 +- app/src/main/res/drawable/ic_spacing.xml | 14 ++- app/src/main/res/values/strings.xml | 12 ++ 7 files changed, 135 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/navigation/AppNavGraph.kt b/app/src/main/java/com/orange/ouds/app/ui/navigation/AppNavGraph.kt index fd7fa9c6..1b99d06b 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/navigation/AppNavGraph.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/navigation/AppNavGraph.kt @@ -28,7 +28,7 @@ import com.orange.ouds.app.ui.tokens.addTokensNavGraph * Root navigation graph of the application */ fun NavGraphBuilder.appNavGraph(navController: NavController) { - addTokensNavGraph() + addTokensNavGraph(navController) addAboutNavGraph() addBottomBarNavGraph(navController) } @@ -38,7 +38,7 @@ fun NavGraphBuilder.appNavGraph(navController: NavController) { */ private fun NavGraphBuilder.addBottomBarNavGraph(navController: NavController) { composable(BottomBarItem.Tokens.route) { from -> - TokensScreen(onTokenClick = { id -> navController.navigateToElement(TokensNavigation.TokenCategoryDetailRoute, id, from) }) + TokensScreen(onTokenCategoryClick = { id -> navController.navigateToElement(TokensNavigation.TokenCategoryDetailRoute, id, from) }) } composable(BottomBarItem.Components.route) { _ -> ComponentsScreen() diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index af8240b1..c3d1e6fb 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -46,14 +46,16 @@ import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken -val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance } +val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance }.filter { !it.subcategory } @Immutable sealed class TokenCategory( @StringRes val nameRes: Int, @DrawableRes val imageRes: Int, @StringRes val descriptionRes: Int, - val properties: List + val properties: List = emptyList(), + val subcategories: List = emptyList(), + val subcategory: Boolean = false ) { companion object { @@ -69,6 +71,27 @@ sealed class TokenCategory( listOf(TokenProperty.BorderWidth, TokenProperty.BorderRadius, TokenProperty.BorderStyle) ) + data object Dimension : TokenCategory( + R.string.app_tokens_dimension_label, + R.drawable.ic_spacing, + R.string.app_tokens_dimension_description_text, + subcategories = listOf(Spacing, Size) + ) { + data object Spacing : TokenCategory( + R.string.app_tokens_spacing_label, + R.drawable.ic_spacing, + R.string.app_tokens_spacing_description_text, + subcategory = true + ) + + data object Size : TokenCategory( + R.string.app_tokens_size_label, + R.drawable.ic_spacing, + R.string.app_tokens_size_description_text, + subcategory = true + ) + } + data object Elevation : TokenCategory( R.string.app_tokens_elevation_label, R.drawable.ic_layers, diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index e0093adc..22f3ed11 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -12,6 +12,7 @@ package com.orange.ouds.app.ui.tokens +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -41,7 +42,7 @@ import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @Composable -fun TokenCategoryDetailScreen(tokenCategory: TokenCategory) { +fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: (Long) -> Unit) { Screen { LazyColumn(contentPadding = PaddingValues(bottom = OudsSpacingFixedKeyToken.Medium.value)) { @@ -52,61 +53,82 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory) { ) } - items(tokenCategory.properties) { tokenProperty -> - Spacer(modifier = Modifier.height(OudsSpacingFixedKeyToken.Medium.value)) - - tokenProperty.nameRes?.let { - Text( - modifier = Modifier - .fillMaxWidth() - .padding(OudsSpacingFixedKeyToken.Medium.value), - text = stringResource(id = tokenProperty.nameRes), - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.HeadingMedium.value - ) - } - - tokenProperty.tokens().forEach { token -> + if (tokenCategory.subcategories.isNotEmpty()) { + items(tokenCategory.subcategories) { subcategory -> Row( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) + .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .clickable { onSubcategoryClick(subcategory.id) } ) { - when (tokenProperty) { - is TokenProperty.BorderWidth -> tokenProperty.Illustration(width = token.value as Dp) - is TokenProperty.BorderRadius -> tokenProperty.Illustration(radius = token.value as Dp) - is TokenProperty.BorderStyle -> tokenProperty.Illustration(style = token.value as OudsBorderStyle) - is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) - is TokenProperty.Opacity -> tokenProperty.Illustration(opacity = token.value as Float) - is TokenProperty.Typography -> Unit - } + Text( + modifier = Modifier + .fillMaxWidth() + .padding(OudsSpacingFixedKeyToken.Medium.value), + text = stringResource(id = subcategory.nameRes), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = OudsTypographyKeyToken.HeadingMedium.value + ) + } + } + } else { + items(tokenCategory.properties) { tokenProperty -> + Spacer(modifier = Modifier.height(OudsSpacingFixedKeyToken.Medium.value)) - val isTypographyProperty = tokenProperty is TokenProperty.Typography + tokenProperty.nameRes?.let { + Text( + modifier = Modifier + .fillMaxWidth() + .padding(OudsSpacingFixedKeyToken.Medium.value), + text = stringResource(id = tokenProperty.nameRes), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = OudsTypographyKeyToken.HeadingMedium.value + ) + } - Column( + tokenProperty.tokens().forEach { token -> + Row( modifier = Modifier - .weight(1f) - .padding(start = if (isTypographyProperty) OudsSpacingFixedKeyToken.None.value else OudsSpacingFixedKeyToken.Medium.value) + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) ) { - Text( - modifier = Modifier.fillMaxWidth(), - text = token.name, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = if (isTypographyProperty) { - token.value as TextStyle - } else { - OudsTypographyKeyToken.BodyStrongLarge.value - } - ) - Text( - modifier = Modifier.fillMaxWidth(), - text = token.literalValue, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.Tertiary.value) //TODO use ContentMuted token when available - ) + when (tokenProperty) { + is TokenProperty.BorderWidth -> tokenProperty.Illustration(width = token.value as Dp) + is TokenProperty.BorderRadius -> tokenProperty.Illustration(radius = token.value as Dp) + is TokenProperty.BorderStyle -> tokenProperty.Illustration(style = token.value as OudsBorderStyle) + is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) + is TokenProperty.Opacity -> tokenProperty.Illustration(opacity = token.value as Float) + is TokenProperty.Typography -> Unit + } + + val isTypographyProperty = tokenProperty is TokenProperty.Typography + + Column( + modifier = Modifier + .weight(1f) + .padding(start = if (isTypographyProperty) OudsSpacingFixedKeyToken.None.value else OudsSpacingFixedKeyToken.Medium.value) + ) { + Text( + modifier = Modifier.fillMaxWidth(), + text = token.name, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = if (isTypographyProperty) { + token.value as TextStyle + } else { + OudsTypographyKeyToken.BodyStrongLarge.value + } + ) + Text( + modifier = Modifier.fillMaxWidth(), + text = token.literalValue, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.Tertiary.value) //TODO use ContentMuted token when available + ) + } } } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensNavGraph.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensNavGraph.kt index 6dee7e28..aa740dd6 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensNavGraph.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensNavGraph.kt @@ -13,17 +13,19 @@ package com.orange.ouds.app.ui.tokens import androidx.compose.runtime.remember +import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavType import androidx.navigation.compose.composable import androidx.navigation.navArgument +import com.orange.ouds.app.ui.navigation.navigateToElement object TokensNavigation { const val TokenCategoryDetailRoute = "tokenCategory" const val TokenCategoryIdKey = "tokenCategoryId" } -fun NavGraphBuilder.addTokensNavGraph() { +fun NavGraphBuilder.addTokensNavGraph(navController: NavController) { composable( "${TokensNavigation.TokenCategoryDetailRoute}/{${TokensNavigation.TokenCategoryIdKey}}", arguments = listOf(navArgument(TokensNavigation.TokenCategoryIdKey) { type = NavType.LongType }) @@ -33,7 +35,12 @@ fun NavGraphBuilder.addTokensNavGraph() { val tokenCategory = remember(routeTokenCategoryId) { TokenCategory.fromId(routeTokenCategoryId) } tokenCategory?.let { - TokenCategoryDetailScreen(tokenCategory = tokenCategory) + TokenCategoryDetailScreen( + tokenCategory = tokenCategory, + onSubcategoryClick = { id -> + navController.navigateToElement(TokensNavigation.TokenCategoryDetailRoute, id, from) + } + ) } } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt index 78916b4f..487bc2dd 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt @@ -29,15 +29,15 @@ import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken @Composable -fun TokensScreen(onTokenClick: (Long) -> Unit) { +fun TokensScreen(onTokenCategoryClick: (Long) -> Unit) { TokensScreen( tokenCategories = tokenCategories, - onTokenClick = onTokenClick + onTokenCategoryClick = onTokenCategoryClick ) } @Composable -private fun TokensScreen(tokenCategories: List, onTokenClick: (Long) -> Unit) { +private fun TokensScreen(tokenCategories: List, onTokenCategoryClick: (Long) -> Unit) { Screen { Column( modifier = Modifier @@ -50,7 +50,7 @@ private fun TokensScreen(tokenCategories: List, onTokenClick: (Lo LargeCard( title = stringResource(id = token.nameRes), imageRes = token.imageRes, - onClick = { onTokenClick(token.id) } + onClick = { onTokenCategoryClick(token.id) } ) } } diff --git a/app/src/main/res/drawable/ic_spacing.xml b/app/src/main/res/drawable/ic_spacing.xml index 135d802a..e6fcd809 100644 --- a/app/src/main/res/drawable/ic_spacing.xml +++ b/app/src/main/res/drawable/ic_spacing.xml @@ -1,3 +1,15 @@ + + + android:fillColor="#000000"/> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8124a2fa..146877a2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -41,6 +41,18 @@ Radius Style + + Dimension + Dimension provides standard sizing and spacing to ensure visual consistency across the UI. + + + Spacing + Space refers to the measurements used to define the spacing between UI elements. + + + Size + Size refers to the specific measurements used to define the dimensions of UI elements within the design system. + Elevation Shadows are used to give the impression of distance or elevation between surfaces, which adds depth to our designs. From 8254ed57baa303f073dc63d8705cbea195eff1a1 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Fri, 18 Oct 2024 16:51:52 +0200 Subject: [PATCH 06/33] Fix subcategories detail display --- .../main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt | 2 +- app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index c3d1e6fb..ae369823 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -46,7 +46,7 @@ import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken -val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance }.filter { !it.subcategory } +val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance } @Immutable sealed class TokenCategory( diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt index 487bc2dd..c8c06512 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt @@ -46,7 +46,7 @@ private fun TokensScreen(tokenCategories: List, onTokenCategoryCl .padding(OudsSpacingFixedKeyToken.Medium.value), verticalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Medium.value) ) { - tokenCategories.forEach { token -> + tokenCategories.filter { !it.subcategory }.forEach { token -> LargeCard( title = stringResource(id = token.nameRes), imageRes = token.imageRes, From 457a2b6fbe7dd54487b100b2ed2b79b52330492d Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Mon, 21 Oct 2024 11:22:10 +0200 Subject: [PATCH 07/33] Reorder OudsSizeIconWithTextKeyToken --- .../ouds/theme/tokens/OudsSizeKeyTokens.kt | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt index a531a7fa..988f617a 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt @@ -23,18 +23,30 @@ enum class OudsSizeIconDecorativeKeyToken { } enum class OudsSizeIconWithTextKeyToken { - HeadingSmallSizeShort, - HeadingSmallSizeMedium, - HeadingSmallSizeTall, - HeadingMediumSizeShort, - HeadingMediumSizeMedium, - HeadingMediumSizeTall, - HeadingLargeSizeShort, - HeadingLargeSizeMedium, - HeadingLargeSizeTall, HeadingExtraLargeSizeShort, HeadingExtraLargeSizeMedium, HeadingExtraLargeSizeTall, + HeadingLargeSizeShort, + HeadingLargeSizeMedium, + HeadingLargeSizeTall, + HeadingMediumSizeShort, + HeadingMediumSizeMedium, + HeadingMediumSizeTall, + HeadingSmallSizeShort, + HeadingSmallSizeMedium, + HeadingSmallSizeTall, + BodyLargeSizeShort, + BodyLargeSizeMedium, + BodyLargeSizeTall, + BodyMediumSizeShort, + BodyMediumSizeMedium, + BodyMediumSizeTall, + BodySmallSizeShort, + BodySmallSizeMedium, + BodySmallSizeTall, + LabelExtraLargeSizeShort, + LabelExtraLargeSizeMedium, + LabelExtraLargeSizeTall, LabelLargeSizeShorter, LabelLargeSizeShort, LabelLargeSizeMedium, @@ -46,18 +58,6 @@ enum class OudsSizeIconWithTextKeyToken { LabelSmallSizeShort, LabelSmallSizeMedium, LabelSmallSizeTall, - LabelExtraLargeSizeShort, - LabelExtraLargeSizeMedium, - LabelExtraLargeSizeTall, - BodySmallSizeShort, - BodySmallSizeMedium, - BodySmallSizeTall, - BodyMediumSizeShort, - BodyMediumSizeMedium, - BodyMediumSizeTall, - BodyLargeSizeShort, - BodyLargeSizeMedium, - BodyLargeSizeTall, } enum class OudsSizeMaxWidthTypeKeyToken { From 378812b046893b00bd850051309449cb9ef33cc5 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Mon, 21 Oct 2024 11:22:44 +0200 Subject: [PATCH 08/33] Display dimension size tokens --- .../ouds/app/ui/tokens/TokenCategory.kt | 62 +++++++++++++ .../ui/tokens/TokenCategoryDetailScreen.kt | 93 ++++++++++++------- app/src/main/res/values/strings.xml | 6 +- 3 files changed, 126 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index ae369823..8732b498 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -18,22 +18,30 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.orange.ouds.app.R import com.orange.ouds.core.theme.value +import com.orange.ouds.foundation.extensions.orElse import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.dashedBorder import com.orange.ouds.theme.dottedBorder @@ -42,6 +50,8 @@ import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken +import com.orange.ouds.theme.tokens.OudsSizeIconDecorativeKeyToken +import com.orange.ouds.theme.tokens.OudsSizeIconWithTextKeyToken import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -88,6 +98,7 @@ sealed class TokenCategory( R.string.app_tokens_size_label, R.drawable.ic_spacing, R.string.app_tokens_size_description_text, + listOf(TokenProperty.SizeIconDecorative, TokenProperty.SizeIconWithLabel), subcategory = true ) } @@ -216,6 +227,57 @@ sealed class TokenProperty( } } + data object SizeIconDecorative : TokenProperty( + nameRes = R.string.app_tokens_size_iconDecorative_label, + tokens = { OudsSizeIconDecorativeKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp) { + Box( + modifier = Modifier + .size(80.dp) + .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + contentAlignment = Alignment.Center, + ) { + Icon( + modifier = Modifier.size(size), + painter = painterResource(R.drawable.ic_design_token_figma), + tint = Color(0xFF26B2FF), //TODO use AlwaysInfo token when available + contentDescription = null + ) + } + } + } + + data object SizeIconWithLabel : TokenProperty( + nameRes = R.string.app_tokens_size_iconWithLabel_label, + tokens = { OudsSizeIconWithTextKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp, tokenName: String) { + val label = tokenName.substringBefore("Size") + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Shorter.value), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + modifier = Modifier.size(size), + painter = painterResource(R.drawable.ic_design_token_figma), + tint = Color(0xFF26B2FF), //TODO use AlwaysInfo token when available + contentDescription = null + ) + Text( + modifier = Modifier.weight(1f), + text = label, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = OudsTypographyKeyToken.entries.firstOrNull { it.name == label }?.value.orElse { OudsTypographyKeyToken.BodyStrongLarge.value } + ) + } + } + } + data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 22f3ed11..51743d4b 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -30,13 +30,14 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.Dp +import com.orange.ouds.app.R import com.orange.ouds.app.ui.utilities.composable.DetailScreenHeader import com.orange.ouds.app.ui.utilities.composable.Screen import com.orange.ouds.core.theme.value -import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews +import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -89,46 +90,58 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: } tokenProperty.tokens().forEach { token -> - Row( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) - ) { - when (tokenProperty) { - is TokenProperty.BorderWidth -> tokenProperty.Illustration(width = token.value as Dp) - is TokenProperty.BorderRadius -> tokenProperty.Illustration(radius = token.value as Dp) - is TokenProperty.BorderStyle -> tokenProperty.Illustration(style = token.value as OudsBorderStyle) - is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) - is TokenProperty.Opacity -> tokenProperty.Illustration(opacity = token.value as Float) - is TokenProperty.Typography -> Unit - } - - val isTypographyProperty = tokenProperty is TokenProperty.Typography - + if (tokenProperty == TokenProperty.SizeIconWithLabel) { Column( modifier = Modifier - .weight(1f) - .padding(start = if (isTypographyProperty) OudsSpacingFixedKeyToken.None.value else OudsSpacingFixedKeyToken.Medium.value) + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) ) { + TokenIllustration(tokenProperty = tokenProperty, token = token) Text( modifier = Modifier.fillMaxWidth(), - text = token.name, + text = stringResource(id = R.string.app_tokens_size_iconWithLabelTokenName_label, token.name, token.literalValue), maxLines = 1, overflow = TextOverflow.Ellipsis, - style = if (isTypographyProperty) { - token.value as TextStyle - } else { - OudsTypographyKeyToken.BodyStrongLarge.value - } - ) - Text( - modifier = Modifier.fillMaxWidth(), - text = token.literalValue, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.Tertiary.value) //TODO use ContentMuted token when available + style = OudsTypographyKeyToken.BodyDefaultMedium.value, + color = OudsColorKeyToken.OnSurfaceVariant.value //TODO use ContentMuted token when available ) } + } else { + val isTypographyProperty = tokenProperty is TokenProperty.Typography + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) + ) { + TokenIllustration(tokenProperty = tokenProperty, token = token) + + Column( + modifier = Modifier + .weight(1f) + .padding(start = if (isTypographyProperty) OudsSpacingFixedKeyToken.None.value else OudsSpacingFixedKeyToken.Medium.value) + ) { + Text( + modifier = Modifier.fillMaxWidth(), + text = token.name, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = if (isTypographyProperty) { + token.value as TextStyle + } else { + OudsTypographyKeyToken.BodyStrongLarge.value + } + ) + Text( + modifier = Modifier.fillMaxWidth(), + text = token.literalValue, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.Tertiary.value), //TODO use ContentMuted token when available + color = OudsColorKeyToken.OnSurfaceVariant.value //TODO use ContentMuted token when available + ) + } + } } } } @@ -137,12 +150,24 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: } } +@Composable +private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = when (tokenProperty) { + is TokenProperty.BorderWidth -> tokenProperty.Illustration(width = token.value as Dp) + is TokenProperty.BorderRadius -> tokenProperty.Illustration(radius = token.value as Dp) + is TokenProperty.BorderStyle -> tokenProperty.Illustration(style = token.value as OudsBorderStyle) + is TokenProperty.Opacity -> tokenProperty.Illustration(opacity = token.value as Float) + is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) + is TokenProperty.SizeIconDecorative -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SizeIconWithLabel -> tokenProperty.Illustration(size = token.value as Dp, token.name) + is TokenProperty.Typography -> Unit +} + @UiModePreviews.Default @Composable private fun PreviewTokenCategoryDetailScreen( @PreviewParameter(TokenCategoryDetailScreenPreviewParameterProvider::class) parameter: TokenCategory ) = OudsPreview { - TokenCategoryDetailScreen(parameter) + TokenCategoryDetailScreen(parameter, {}) } private class TokenCategoryDetailScreenPreviewParameterProvider : BasicPreviewParameterProvider(*previewParameterValues.toTypedArray()) @@ -151,4 +176,4 @@ private val previewParameterValues: List get() = listOf( TokenCategory.Opacity, TokenCategory.Elevation - ) + ) \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 146877a2..4ea691a8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -49,9 +49,13 @@ Spacing Space refers to the measurements used to define the spacing between UI elements. - + Size Size refers to the specific measurements used to define the dimensions of UI elements within the design system. + Icon decorative + Icon with label + %1$s (%2$s) + Elevation From 1d6cbcd5e85001cd68ab3a53ac405db1b4a62c39 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Mon, 21 Oct 2024 16:29:49 +0200 Subject: [PATCH 09/33] Display all spacing tokens in the demo app --- .../ouds/app/ui/tokens/TokenCategory.kt | 210 +---------- .../ui/tokens/TokenCategoryDetailScreen.kt | 7 + .../ouds/app/ui/tokens/TokenProperty.kt | 349 ++++++++++++++++++ app/src/main/res/values/strings.xml | 7 + 4 files changed, 367 insertions(+), 206 deletions(-) create mode 100644 app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index 8732b498..1d42e810 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -14,47 +14,8 @@ package com.orange.ouds.app.ui.tokens import androidx.annotation.DrawableRes import androidx.annotation.StringRes -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Icon -import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp import com.orange.ouds.app.R -import com.orange.ouds.core.theme.value -import com.orange.ouds.foundation.extensions.orElse -import com.orange.ouds.theme.OudsBorderStyle -import com.orange.ouds.theme.dashedBorder -import com.orange.ouds.theme.dottedBorder -import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken -import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken -import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken -import com.orange.ouds.theme.tokens.OudsElevationKeyToken -import com.orange.ouds.theme.tokens.OudsOpacityKeyToken -import com.orange.ouds.theme.tokens.OudsSizeIconDecorativeKeyToken -import com.orange.ouds.theme.tokens.OudsSizeIconWithTextKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken -import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken val tokenCategories = TokenCategory::class.sealedSubclasses.mapNotNull { it.objectInstance } @@ -91,6 +52,10 @@ sealed class TokenCategory( R.string.app_tokens_spacing_label, R.drawable.ic_spacing, R.string.app_tokens_spacing_description_text, + listOf( + TokenProperty.SpacingScaled, TokenProperty.SpacingFixed, TokenProperty.SpacingPaddingInline, TokenProperty.SpacingPaddingStack, + TokenProperty.SpacingPaddingInset, TokenProperty.SpacingColumnGap, TokenProperty.SpacingRowGap + ), subcategory = true ) @@ -123,171 +88,4 @@ sealed class TokenCategory( R.string.app_tokens_typography_description_text, listOf(TokenProperty.Typography) ) - -} - -sealed class TokenProperty( - @StringRes val nameRes: Int?, - val tokens: @Composable () -> List> -) { - protected companion object { - val defaultIllustrationSize = 64.dp - } - - data object BorderRadius : TokenProperty( - nameRes = R.string.app_tokens_border_radius_label, - tokens = { OudsBorderRadiusKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(radius: Dp) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .border( - width = 1.dp, - color = OudsColorKeyToken.OnSurface.value, //TODO use ContentDefault token when available - shape = RoundedCornerShape(radius) - ) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } - } - - data object BorderStyle : TokenProperty( - nameRes = R.string.app_tokens_border_style_label, - tokens = { OudsBorderStyleKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(style: OudsBorderStyle) { - val borderColor = OudsColorKeyToken.OnSurface.value //TODO use ContentDefault token when available - val borderWidth = 1.dp - val modifier = when (style) { - OudsBorderStyle.None -> Modifier - OudsBorderStyle.Solid -> Modifier.border(width = borderWidth, color = borderColor) - OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = borderWidth, color = borderColor) - OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = borderWidth, color = borderColor) - } - Box( - modifier = modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } - } - - data object BorderWidth : TokenProperty( - nameRes = R.string.app_tokens_border_width_label, - tokens = { OudsBorderWidthKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(width: Dp) { - val borderColor = OudsColorKeyToken.OnSurface.value //TODO use ContentDefault token when available - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .border(width = width, color = borderColor) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } - } - - data object Elevation : TokenProperty( - nameRes = null, - tokens = { OudsElevationKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(elevation: Dp) { - Surface(shadowElevation = elevation) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } - } - } - - data object Opacity : TokenProperty( - nameRes = null, - tokens = { OudsOpacityKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(opacity: Float) { - val squareColor = if (isSystemInDarkTheme()) Color.White else Color.Black - Box { - Image(painter = painterResource(id = R.drawable.il_opacity_union), contentDescription = null) - Box( - modifier = Modifier - .padding(top = OudsSpacingFixedKeyToken.Medium.value, start = OudsSpacingFixedKeyToken.Medium.value) - .size(48.dp) - .background(color = squareColor.copy(alpha = opacity)) - .border(width = 1.dp, color = squareColor) - ) - } - } - } - - data object SizeIconDecorative : TokenProperty( - nameRes = R.string.app_tokens_size_iconDecorative_label, - tokens = { OudsSizeIconDecorativeKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp) { - Box( - modifier = Modifier - .size(80.dp) - .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - contentAlignment = Alignment.Center, - ) { - Icon( - modifier = Modifier.size(size), - painter = painterResource(R.drawable.ic_design_token_figma), - tint = Color(0xFF26B2FF), //TODO use AlwaysInfo token when available - contentDescription = null - ) - } - } - } - - data object SizeIconWithLabel : TokenProperty( - nameRes = R.string.app_tokens_size_iconWithLabel_label, - tokens = { OudsSizeIconWithTextKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp, tokenName: String) { - val label = tokenName.substringBefore("Size") - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Shorter.value), - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - modifier = Modifier.size(size), - painter = painterResource(R.drawable.ic_design_token_figma), - tint = Color(0xFF26B2FF), //TODO use AlwaysInfo token when available - contentDescription = null - ) - Text( - modifier = Modifier.weight(1f), - text = label, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.entries.firstOrNull { it.name == label }?.value.orElse { OudsTypographyKeyToken.BodyStrongLarge.value } - ) - } - } - } - - data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) -} - -data class Token(val name: String, val value: T) { - val literalValue: String - @Composable - get() = when (value) { - is Dp -> stringResource(id = R.string.app_tokens_dpFormat_label, value.toString().replace(".0.dp", "").substringBeforeLast(".dp")) - is Float -> stringResource(id = R.string.app_tokens_floatFormat_label, value) - is TextStyle -> stringResource(id = R.string.app_tokens_spFormat_label, value.fontSize.toString().replace(".0.sp", "").substringBeforeLast(".sp")) - else -> value.toString() - } } \ No newline at end of file diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 51743d4b..318a8558 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -159,6 +159,13 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) is TokenProperty.SizeIconDecorative -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SizeIconWithLabel -> tokenProperty.Illustration(size = token.value as Dp, token.name) + is TokenProperty.SpacingColumnGap -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingPaddingInline -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingPaddingInset -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingPaddingStack -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingFixed -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingRowGap -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingScaled -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.Typography -> Unit } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt new file mode 100644 index 00000000..a387c420 --- /dev/null +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -0,0 +1,349 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.app.ui.tokens + +import androidx.annotation.StringRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.orange.ouds.app.R +import com.orange.ouds.core.theme.value +import com.orange.ouds.foundation.extensions.orElse +import com.orange.ouds.theme.OudsBorderStyle +import com.orange.ouds.theme.dashedBorder +import com.orange.ouds.theme.dottedBorder +import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken +import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken +import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken +import com.orange.ouds.theme.tokens.OudsElevationKeyToken +import com.orange.ouds.theme.tokens.OudsOpacityKeyToken +import com.orange.ouds.theme.tokens.OudsSizeIconDecorativeKeyToken +import com.orange.ouds.theme.tokens.OudsSizeIconWithTextKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingColumnGapKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingInsetKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingPaddingBlockKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingPaddingInlineKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingRowGapKeyToken +import com.orange.ouds.theme.tokens.OudsSpacingScaledKeyToken +import com.orange.ouds.theme.tokens.OudsTypographyKeyToken +import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken + +sealed class TokenProperty( + @StringRes val nameRes: Int?, + val tokens: @Composable () -> List> +) { + protected companion object { + val defaultIllustrationSize = 64.dp + } + + data object Opacity : TokenProperty( + nameRes = null, + tokens = { OudsOpacityKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(opacity: Float) { + val squareColor = if (isSystemInDarkTheme()) Color.White else Color.Black + Box { + Image(painter = painterResource(id = R.drawable.il_opacity_union), contentDescription = null) + Box( + modifier = Modifier + .padding(top = OudsSpacingFixedKeyToken.Medium.value, start = OudsSpacingFixedKeyToken.Medium.value) + .size(48.dp) + .background(color = squareColor.copy(alpha = opacity)) + .run { + if (opacity <= 0f) { + border(width = 1.dp, color = squareColor) + } else this + } + ) + } + } + } + + data object Elevation : TokenProperty( + nameRes = null, + tokens = { OudsElevationKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(elevation: Dp) { + Surface(shadowElevation = elevation) { + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available + ) + } + } + } + + data object BorderRadius : TokenProperty( + nameRes = R.string.app_tokens_border_radius_label, + tokens = { OudsBorderRadiusKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(radius: Dp) { + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .border( + width = 1.dp, + color = OudsColorKeyToken.OnSurface.value, + shape = RoundedCornerShape(radius) + ) //TODO use ContentDefault token when available + .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available + ) + } + } + + data object BorderWidth : TokenProperty( + nameRes = R.string.app_tokens_border_width_label, + tokens = { OudsBorderWidthKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(width: Dp) { + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .border(width = width, color = OudsColorKeyToken.OnSurface.value) //TODO use ContentDefault token when available + .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available + ) + } + } + + data object BorderStyle : TokenProperty( + nameRes = R.string.app_tokens_border_style_label, + tokens = { OudsBorderStyleKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(style: OudsBorderStyle) { + val borderColor = OudsColorKeyToken.OnSurface.value //TODO use ContentDefault token when available + val borderWidth = 1.dp + val modifier = when (style) { + OudsBorderStyle.None -> Modifier + OudsBorderStyle.Solid -> Modifier.border(width = borderWidth, color = borderColor) + OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = borderWidth, color = borderColor) + OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = borderWidth, color = borderColor) + } + Box( + modifier = modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available + ) + } + } + + data object SizeIconDecorative : TokenProperty( + nameRes = R.string.app_tokens_size_iconDecorative_label, + tokens = { OudsSizeIconDecorativeKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp) { + Box( + modifier = Modifier + .size(80.dp) + .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + contentAlignment = Alignment.Center, + ) { + Icon( + modifier = Modifier.size(size), + painter = painterResource(R.drawable.ic_design_token_figma), + tint = Color(0xFF26B2FF), //TODO use AlwaysInfo token when available + contentDescription = null + ) + } + } + } + + data object SizeIconWithLabel : TokenProperty( + nameRes = R.string.app_tokens_size_iconWithLabel_label, + tokens = { OudsSizeIconWithTextKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp, tokenName: String) { + val label = tokenName.substringBefore("Size") + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Shorter.value), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + modifier = Modifier.size(size), + painter = painterResource(R.drawable.ic_design_token_figma), + tint = Color(0xFF26B2FF), //TODO use AlwaysInfo token when available + contentDescription = null + ) + Text( + modifier = Modifier.weight(1f), + text = label, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = OudsTypographyKeyToken.entries.firstOrNull { it.name == label }?.value.orElse { OudsTypographyKeyToken.BodyStrongLarge.value } + ) + } + } + } + + data object SpacingColumnGap : TokenProperty( + nameRes = R.string.app_tokens_spacing_columnGap_label, + tokens = { OudsSpacingColumnGapKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp) = SpacingIllustration(size = size, contentAlignment = Alignment.Center) + } + + data object SpacingPaddingInline : TokenProperty( + nameRes = R.string.app_tokens_spacing_paddingInline_label, + tokens = { OudsSpacingPaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp) = SpacingIllustration(size = size) + } + + data object SpacingPaddingStack : TokenProperty( + nameRes = R.string.app_tokens_spacing_paddingStack_label, + tokens = { OudsSpacingPaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } + ) { + + @Composable + fun Illustration(size: Dp) = SpacingIllustration( + size = size, + orientation = DimensionOrientation.Vertical + ) + } + + data object SpacingPaddingInset : TokenProperty( + nameRes = R.string.app_tokens_spacing_paddingInset_label, + tokens = { OudsSpacingInsetKeyToken.entries.map { Token(it.name, it.value) } } + ) { + + @Composable + fun Illustration(size: Dp) { + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .height(height = size) + .background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + ) + Box( + modifier = Modifier + .fillMaxHeight() + .width(width = size) + .background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + ) + } + } + } + + data object SpacingFixed : TokenProperty( + nameRes = R.string.app_tokens_spacing_fixed_label, + tokens = { OudsSpacingFixedKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp) = SpacingIllustration(size, contentAlignment = Alignment.Center) + } + + data object SpacingRowGap : TokenProperty( + nameRes = R.string.app_tokens_spacing_rowGap_label, + tokens = { OudsSpacingRowGapKeyToken.entries.map { Token(it.name, it.value) } } + ) { + + @Composable + fun Illustration(size: Dp) = SpacingIllustration( + size = size, + orientation = DimensionOrientation.Vertical, + contentAlignment = Alignment.Center + ) + } + + data object SpacingScaled : TokenProperty( + nameRes = R.string.app_tokens_spacing_scaled_label, + tokens = { OudsSpacingScaledKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(size: Dp) = SpacingIllustration(size = size, contentAlignment = Alignment.Center) + } + + data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) + + @Composable + protected fun SpacingIllustration( + size: Dp, + orientation: DimensionOrientation = DimensionOrientation.Horizontal, + contentAlignment: Alignment = Alignment.TopStart + ) { + val dimensionBoxModifier = when (orientation) { + DimensionOrientation.Horizontal -> Modifier + .fillMaxHeight() + .width(width = size) + + DimensionOrientation.Vertical -> Modifier + .fillMaxWidth() + .height(height = size) + } + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + contentAlignment = contentAlignment, + ) { + Box( + modifier = dimensionBoxModifier.background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + ) + } + } + + protected enum class DimensionOrientation { + Horizontal, Vertical + } +} + +data class Token(val name: String, val value: T) { + val literalValue: String + @Composable + get() = when (value) { + is Float -> stringResource(id = R.string.app_tokens_floatFormat_label, value) + is Dp -> stringResource(id = R.string.app_tokens_dpFormat_label, value.toString().replace(".0.dp", "").substringBeforeLast(".dp")) + is TextStyle -> stringResource(id = R.string.app_tokens_spFormat_label, value.fontSize.toString().replace(".0.sp", "").substringBeforeLast(".sp")) + else -> value.toString() + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4ea691a8..d42158a4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -48,6 +48,13 @@ Spacing Space refers to the measurements used to define the spacing between UI elements. + Scaled + Fixed + Padding inline + Padding stack + Padding inset + Column gap + Row gap Size From 3da3c0de841d0c70aed56bc0188464d521b75c88 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 11:07:14 +0200 Subject: [PATCH 10/33] Apply filter before calling private composable --- .../main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt index c8c06512..c9c5ca27 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt @@ -31,7 +31,7 @@ import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken @Composable fun TokensScreen(onTokenCategoryClick: (Long) -> Unit) { TokensScreen( - tokenCategories = tokenCategories, + tokenCategories = tokenCategories.filter { !it.subcategory }, onTokenCategoryClick = onTokenCategoryClick ) } @@ -46,7 +46,7 @@ private fun TokensScreen(tokenCategories: List, onTokenCategoryCl .padding(OudsSpacingFixedKeyToken.Medium.value), verticalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Medium.value) ) { - tokenCategories.filter { !it.subcategory }.forEach { token -> + tokenCategories.forEach { token -> LargeCard( title = stringResource(id = token.nameRes), imageRes = token.imageRes, From 057b1c73d6d9cee6d74886bbe12336a066b6a29e Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 14:26:47 +0200 Subject: [PATCH 11/33] Reorder properties --- .../ouds/app/ui/tokens/TokenProperty.kt | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index a387c420..30fc675c 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -68,47 +68,7 @@ sealed class TokenProperty( val tokens: @Composable () -> List> ) { protected companion object { - val defaultIllustrationSize = 64.dp - } - - data object Opacity : TokenProperty( - nameRes = null, - tokens = { OudsOpacityKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(opacity: Float) { - val squareColor = if (isSystemInDarkTheme()) Color.White else Color.Black - Box { - Image(painter = painterResource(id = R.drawable.il_opacity_union), contentDescription = null) - Box( - modifier = Modifier - .padding(top = OudsSpacingFixedKeyToken.Medium.value, start = OudsSpacingFixedKeyToken.Medium.value) - .size(48.dp) - .background(color = squareColor.copy(alpha = opacity)) - .run { - if (opacity <= 0f) { - border(width = 1.dp, color = squareColor) - } else this - } - ) - } - } - } - - data object Elevation : TokenProperty( - nameRes = null, - tokens = { OudsElevationKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(elevation: Dp) { - Surface(shadowElevation = elevation) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } - } + protected val defaultIllustrationSize = 64.dp } data object BorderRadius : TokenProperty( @@ -130,21 +90,6 @@ sealed class TokenProperty( } } - data object BorderWidth : TokenProperty( - nameRes = R.string.app_tokens_border_width_label, - tokens = { OudsBorderWidthKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(width: Dp) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .border(width = width, color = OudsColorKeyToken.OnSurface.value) //TODO use ContentDefault token when available - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } - } - data object BorderStyle : TokenProperty( nameRes = R.string.app_tokens_border_style_label, tokens = { OudsBorderStyleKeyToken.entries.map { Token(it.name, it.value) } } @@ -167,6 +112,61 @@ sealed class TokenProperty( } } + data object BorderWidth : TokenProperty( + nameRes = R.string.app_tokens_border_width_label, + tokens = { OudsBorderWidthKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(width: Dp) { + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .border(width = width, color = OudsColorKeyToken.OnSurface.value) //TODO use ContentDefault token when available + .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available + ) + } + } + + data object Elevation : TokenProperty( + nameRes = null, + tokens = { OudsElevationKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(elevation: Dp) { + Surface(shadowElevation = elevation) { + Box( + modifier = Modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available + ) + } + } + } + + data object Opacity : TokenProperty( + nameRes = null, + tokens = { OudsOpacityKeyToken.entries.map { Token(it.name, it.value) } } + ) { + @Composable + fun Illustration(opacity: Float) { + val squareColor = if (isSystemInDarkTheme()) Color.White else Color.Black + Box { + Image(painter = painterResource(id = R.drawable.il_opacity_union), contentDescription = null) + Box( + modifier = Modifier + .padding(top = OudsSpacingFixedKeyToken.Medium.value, start = OudsSpacingFixedKeyToken.Medium.value) + .size(48.dp) + .background(color = squareColor.copy(alpha = opacity)) + .run { + if (opacity <= 0f) { + border(width = 1.dp, color = squareColor) + } else this + } + ) + } + } + } + data object SizeIconDecorative : TokenProperty( nameRes = R.string.app_tokens_size_iconDecorative_label, tokens = { OudsSizeIconDecorativeKeyToken.entries.map { Token(it.name, it.value) } } @@ -226,24 +226,20 @@ sealed class TokenProperty( fun Illustration(size: Dp) = SpacingIllustration(size = size, contentAlignment = Alignment.Center) } - data object SpacingPaddingInline : TokenProperty( - nameRes = R.string.app_tokens_spacing_paddingInline_label, - tokens = { OudsSpacingPaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } + data object SpacingFixed : TokenProperty( + nameRes = R.string.app_tokens_spacing_fixed_label, + tokens = { OudsSpacingFixedKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration(size = size) + fun Illustration(size: Dp) = SpacingIllustration(size, contentAlignment = Alignment.Center) } - data object SpacingPaddingStack : TokenProperty( - nameRes = R.string.app_tokens_spacing_paddingStack_label, - tokens = { OudsSpacingPaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } + data object SpacingPaddingInline : TokenProperty( + nameRes = R.string.app_tokens_spacing_paddingInline_label, + tokens = { OudsSpacingPaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } ) { - @Composable - fun Illustration(size: Dp) = SpacingIllustration( - size = size, - orientation = DimensionOrientation.Vertical - ) + fun Illustration(size: Dp) = SpacingIllustration(size = size) } data object SpacingPaddingInset : TokenProperty( @@ -274,12 +270,16 @@ sealed class TokenProperty( } } - data object SpacingFixed : TokenProperty( - nameRes = R.string.app_tokens_spacing_fixed_label, - tokens = { OudsSpacingFixedKeyToken.entries.map { Token(it.name, it.value) } } + data object SpacingPaddingStack : TokenProperty( + nameRes = R.string.app_tokens_spacing_paddingStack_label, + tokens = { OudsSpacingPaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } ) { + @Composable - fun Illustration(size: Dp) = SpacingIllustration(size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpacingIllustration( + size = size, + orientation = DimensionOrientation.Vertical + ) } data object SpacingRowGap : TokenProperty( From a04f3d3233bd78bad276c4897e2469e0b50b776d Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 15:36:19 +0200 Subject: [PATCH 12/33] Update illustrations for spacing inline with icon --- NOTICE.txt | 1 + .../ui/tokens/TokenCategoryDetailScreen.kt | 2 +- .../ouds/app/ui/tokens/TokenProperty.kt | 26 ++++++++++++++++++- .../ic_design_token_figma_no_padding.xml | 10 +++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_design_token_figma_no_padding.xml diff --git a/NOTICE.txt b/NOTICE.txt index 9754cb9b..be4522da 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -11,6 +11,7 @@ Any use or displaying shall constitute an infringement under intellectual proper app/src/main/res/drawable/ic_border.xml app/src/main/res/drawable/ic_component_atom.xml app/src/main/res/drawable/ic_design_token_figma.xml +app/src/main/res/drawable/ic_design_token_figma_no_padding.xml app/src/main/res/drawable/ic_filter_effects.xml app/src/main/res/drawable/ic_info.xml app/src/main/res/drawable/ic_layers.xml diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 318a8558..3f390caf 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -160,7 +160,7 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.SizeIconDecorative -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SizeIconWithLabel -> tokenProperty.Illustration(size = token.value as Dp, token.name) is TokenProperty.SpacingColumnGap -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacingPaddingInline -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacingPaddingInline -> tokenProperty.Illustration(size = token.value as Dp, token.name) is TokenProperty.SpacingPaddingInset -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SpacingPaddingStack -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SpacingFixed -> tokenProperty.Illustration(size = token.value as Dp) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 30fc675c..e796c849 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -34,6 +34,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle @@ -239,7 +240,30 @@ sealed class TokenProperty( tokens = { OudsSpacingPaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration(size = size) + fun Illustration(size: Dp, tokenName: String) = when { + tokenName.contains("WithIcon") -> { + Row( + modifier = Modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + verticalAlignment = Alignment.CenterVertically + ) { + Box( + modifier = Modifier + .fillMaxHeight() + .width(width = size) + .background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + ) + Image( + modifier = Modifier.padding(horizontal = 1.dp), + painter = painterResource(R.drawable.ic_design_token_figma_no_padding), + contentDescription = null, + contentScale = ContentScale.None + ) + } + } + else -> SpacingIllustration(size = size) + } } data object SpacingPaddingInset : TokenProperty( diff --git a/app/src/main/res/drawable/ic_design_token_figma_no_padding.xml b/app/src/main/res/drawable/ic_design_token_figma_no_padding.xml new file mode 100644 index 00000000..e1a92b39 --- /dev/null +++ b/app/src/main/res/drawable/ic_design_token_figma_no_padding.xml @@ -0,0 +1,10 @@ + + + From 0b22f2bc5e227023c8deffd5a820671bb745a7a5 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Wed, 23 Oct 2024 14:56:26 +0200 Subject: [PATCH 13/33] Rename spacing into space --- NOTICE.txt | 2 +- .../app/ui/components/ComponentsScreen.kt | 4 +- .../ouds/app/ui/tokens/TokenCategory.kt | 18 +- .../ui/tokens/TokenCategoryDetailScreen.kt | 32 +-- .../ouds/app/ui/tokens/TokenProperty.kt | 74 ++--- .../orange/ouds/app/ui/tokens/TokensScreen.kt | 6 +- .../composable/DetailScreenHeader.kt | 4 +- .../app/ui/utilities/composable/LargeCard.kt | 4 +- .../{ic_spacing.xml => ic_dimension.xml} | 0 app/src/main/res/values/strings.xml | 20 +- .../theme/{OudsSpacings.kt => OudsSpaces.kt} | 260 +++++++++--------- .../com/orange/ouds/core/theme/OudsTheme.kt | 8 +- .../orange/ouds/theme/OudsThemeContract.kt | 8 +- ...cingKeyTokens.kt => OudsSpaceKeyTokens.kt} | 14 +- .../tokens/components/OudsButtonTokens.kt | 6 +- ...icTokens.kt => OudsSpaceSemanticTokens.kt} | 2 +- .../ouds/theme/whitelabel/WhiteLabelTheme.kt | 6 +- 17 files changed, 234 insertions(+), 234 deletions(-) rename app/src/main/res/drawable/{ic_spacing.xml => ic_dimension.xml} (100%) rename core/src/main/java/com/orange/ouds/core/theme/{OudsSpacings.kt => OudsSpaces.kt} (57%) rename theme-contract/src/main/java/com/orange/ouds/theme/tokens/{OudsSpacingKeyTokens.kt => OudsSpaceKeyTokens.kt} (87%) rename theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/{OudsSpacingSemanticTokens.kt => OudsSpaceSemanticTokens.kt} (99%) diff --git a/NOTICE.txt b/NOTICE.txt index be4522da..6b7545d7 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -12,12 +12,12 @@ app/src/main/res/drawable/ic_border.xml app/src/main/res/drawable/ic_component_atom.xml app/src/main/res/drawable/ic_design_token_figma.xml app/src/main/res/drawable/ic_design_token_figma_no_padding.xml +app/src/main/res/drawable/ic_dimension.xml app/src/main/res/drawable/ic_filter_effects.xml app/src/main/res/drawable/ic_info.xml app/src/main/res/drawable/ic_layers.xml app/src/main/res/drawable/ic_solar_palette.xml app/src/main/res/drawable/ic_typography.xml -app/src/main/res/drawable/ic_spacing.xml app/src/main/res/drawable/ic_ui_dark_mode.xml app/src/main/res/drawable/ic_ui_light_mode.xml app/src/main/res/drawable/il_opacity_union.xml diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt index 5231d3b9..05091940 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt @@ -32,7 +32,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.tokens.OudsGridKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken @Composable fun ComponentsScreen() { @@ -49,7 +49,7 @@ fun ComponentsScreen() { Box( modifier = Modifier - .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value) .width(OudsGridKeyToken.Margin.value) .height(OudsGridKeyToken.ColumnGap.value) .background(OudsTheme.colorScheme.primary) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index 1d42e810..a6991a9a 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -44,24 +44,24 @@ sealed class TokenCategory( data object Dimension : TokenCategory( R.string.app_tokens_dimension_label, - R.drawable.ic_spacing, + R.drawable.ic_dimension, R.string.app_tokens_dimension_description_text, - subcategories = listOf(Spacing, Size) + subcategories = listOf(Space, Size) ) { - data object Spacing : TokenCategory( - R.string.app_tokens_spacing_label, - R.drawable.ic_spacing, - R.string.app_tokens_spacing_description_text, + data object Space : TokenCategory( + R.string.app_tokens_space_label, + R.drawable.ic_dimension, + R.string.app_tokens_space_description_text, listOf( - TokenProperty.SpacingScaled, TokenProperty.SpacingFixed, TokenProperty.SpacingPaddingInline, TokenProperty.SpacingPaddingStack, - TokenProperty.SpacingPaddingInset, TokenProperty.SpacingColumnGap, TokenProperty.SpacingRowGap + TokenProperty.SpaceScaled, TokenProperty.SpaceFixed, TokenProperty.SpacePaddingInline, TokenProperty.SpacePaddingStack, + TokenProperty.SpacePaddingInset, TokenProperty.SpaceColumnGap, TokenProperty.SpaceRowGap ), subcategory = true ) data object Size : TokenCategory( R.string.app_tokens_size_label, - R.drawable.ic_spacing, + R.drawable.ic_dimension, R.string.app_tokens_size_description_text, listOf(TokenProperty.SizeIconDecorative, TokenProperty.SizeIconWithLabel), subcategory = true diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 3f390caf..b6bbd7a0 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -38,7 +38,7 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.OudsBorderStyle -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -46,7 +46,7 @@ import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: (Long) -> Unit) { Screen { - LazyColumn(contentPadding = PaddingValues(bottom = OudsSpacingFixedKeyToken.Medium.value)) { + LazyColumn(contentPadding = PaddingValues(bottom = OudsSpaceFixedKeyToken.Medium.value)) { item { DetailScreenHeader( descriptionRes = tokenCategory.descriptionRes, @@ -59,13 +59,13 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Row( modifier = Modifier .fillMaxWidth() - .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value) .clickable { onSubcategoryClick(subcategory.id) } ) { Text( modifier = Modifier .fillMaxWidth() - .padding(OudsSpacingFixedKeyToken.Medium.value), + .padding(OudsSpaceFixedKeyToken.Medium.value), text = stringResource(id = subcategory.nameRes), maxLines = 1, overflow = TextOverflow.Ellipsis, @@ -75,13 +75,13 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: } } else { items(tokenCategory.properties) { tokenProperty -> - Spacer(modifier = Modifier.height(OudsSpacingFixedKeyToken.Medium.value)) + Spacer(modifier = Modifier.height(OudsSpaceFixedKeyToken.Medium.value)) tokenProperty.nameRes?.let { Text( modifier = Modifier .fillMaxWidth() - .padding(OudsSpacingFixedKeyToken.Medium.value), + .padding(OudsSpaceFixedKeyToken.Medium.value), text = stringResource(id = tokenProperty.nameRes), maxLines = 1, overflow = TextOverflow.Ellipsis, @@ -94,7 +94,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Column( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value, vertical = OudsSpaceFixedKeyToken.Shorter.value) ) { TokenIllustration(tokenProperty = tokenProperty, token = token) Text( @@ -112,14 +112,14 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Row( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value, vertical = OudsSpacingFixedKeyToken.Shorter.value) + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value, vertical = OudsSpaceFixedKeyToken.Shorter.value) ) { TokenIllustration(tokenProperty = tokenProperty, token = token) Column( modifier = Modifier .weight(1f) - .padding(start = if (isTypographyProperty) OudsSpacingFixedKeyToken.None.value else OudsSpacingFixedKeyToken.Medium.value) + .padding(start = if (isTypographyProperty) OudsSpaceFixedKeyToken.None.value else OudsSpaceFixedKeyToken.Medium.value) ) { Text( modifier = Modifier.fillMaxWidth(), @@ -159,13 +159,13 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) is TokenProperty.SizeIconDecorative -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SizeIconWithLabel -> tokenProperty.Illustration(size = token.value as Dp, token.name) - is TokenProperty.SpacingColumnGap -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacingPaddingInline -> tokenProperty.Illustration(size = token.value as Dp, token.name) - is TokenProperty.SpacingPaddingInset -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacingPaddingStack -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacingFixed -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacingRowGap -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacingScaled -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpaceColumnGap -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacePaddingInline -> tokenProperty.Illustration(size = token.value as Dp, token.name) + is TokenProperty.SpacePaddingInset -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacePaddingStack -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpaceFixed -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpaceRowGap -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpaceScaled -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.Typography -> Unit } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index e796c849..00c48c53 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -54,13 +54,13 @@ import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken import com.orange.ouds.theme.tokens.OudsSizeIconDecorativeKeyToken import com.orange.ouds.theme.tokens.OudsSizeIconWithTextKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingColumnGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingInsetKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingPaddingBlockKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingPaddingInlineKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingRowGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingScaledKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceColumnGapKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceInsetKeyToken +import com.orange.ouds.theme.tokens.OudsSpacePaddingBlockKeyToken +import com.orange.ouds.theme.tokens.OudsSpacePaddingInlineKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceRowGapKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceScaledKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -155,7 +155,7 @@ sealed class TokenProperty( Image(painter = painterResource(id = R.drawable.il_opacity_union), contentDescription = null) Box( modifier = Modifier - .padding(top = OudsSpacingFixedKeyToken.Medium.value, start = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value, start = OudsSpaceFixedKeyToken.Medium.value) .size(48.dp) .background(color = squareColor.copy(alpha = opacity)) .run { @@ -199,7 +199,7 @@ sealed class TokenProperty( val label = tokenName.substringBefore("Size") Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Shorter.value), + horizontalArrangement = Arrangement.spacedBy(OudsSpaceFixedKeyToken.Shorter.value), verticalAlignment = Alignment.CenterVertically ) { Icon( @@ -219,25 +219,25 @@ sealed class TokenProperty( } } - data object SpacingColumnGap : TokenProperty( - nameRes = R.string.app_tokens_spacing_columnGap_label, - tokens = { OudsSpacingColumnGapKeyToken.entries.map { Token(it.name, it.value) } } + data object SpaceColumnGap : TokenProperty( + nameRes = R.string.app_tokens_space_columnGap_label, + tokens = { OudsSpaceColumnGapKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration(size = size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpaceIllustration(size = size, contentAlignment = Alignment.Center) } - data object SpacingFixed : TokenProperty( - nameRes = R.string.app_tokens_spacing_fixed_label, - tokens = { OudsSpacingFixedKeyToken.entries.map { Token(it.name, it.value) } } + data object SpaceFixed : TokenProperty( + nameRes = R.string.app_tokens_space_fixed_label, + tokens = { OudsSpaceFixedKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration(size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpaceIllustration(size, contentAlignment = Alignment.Center) } - data object SpacingPaddingInline : TokenProperty( - nameRes = R.string.app_tokens_spacing_paddingInline_label, - tokens = { OudsSpacingPaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } + data object SpacePaddingInline : TokenProperty( + nameRes = R.string.app_tokens_space_paddingInline_label, + tokens = { OudsSpacePaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable fun Illustration(size: Dp, tokenName: String) = when { @@ -262,13 +262,13 @@ sealed class TokenProperty( ) } } - else -> SpacingIllustration(size = size) + else -> SpaceIllustration(size = size) } } - data object SpacingPaddingInset : TokenProperty( - nameRes = R.string.app_tokens_spacing_paddingInset_label, - tokens = { OudsSpacingInsetKeyToken.entries.map { Token(it.name, it.value) } } + data object SpacePaddingInset : TokenProperty( + nameRes = R.string.app_tokens_space_paddingInset_label, + tokens = { OudsSpaceInsetKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -294,43 +294,43 @@ sealed class TokenProperty( } } - data object SpacingPaddingStack : TokenProperty( - nameRes = R.string.app_tokens_spacing_paddingStack_label, - tokens = { OudsSpacingPaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } + data object SpacePaddingStack : TokenProperty( + nameRes = R.string.app_tokens_space_paddingStack_label, + tokens = { OudsSpacePaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration( + fun Illustration(size: Dp) = SpaceIllustration( size = size, orientation = DimensionOrientation.Vertical ) } - data object SpacingRowGap : TokenProperty( - nameRes = R.string.app_tokens_spacing_rowGap_label, - tokens = { OudsSpacingRowGapKeyToken.entries.map { Token(it.name, it.value) } } + data object SpaceRowGap : TokenProperty( + nameRes = R.string.app_tokens_space_rowGap_label, + tokens = { OudsSpaceRowGapKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration( + fun Illustration(size: Dp) = SpaceIllustration( size = size, orientation = DimensionOrientation.Vertical, contentAlignment = Alignment.Center ) } - data object SpacingScaled : TokenProperty( - nameRes = R.string.app_tokens_spacing_scaled_label, - tokens = { OudsSpacingScaledKeyToken.entries.map { Token(it.name, it.value) } } + data object SpaceScaled : TokenProperty( + nameRes = R.string.app_tokens_space_scaled_label, + tokens = { OudsSpaceScaledKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpacingIllustration(size = size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpaceIllustration(size = size, contentAlignment = Alignment.Center) } data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) @Composable - protected fun SpacingIllustration( + protected fun SpaceIllustration( size: Dp, orientation: DimensionOrientation = DimensionOrientation.Horizontal, contentAlignment: Alignment = Alignment.TopStart diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt index c9c5ca27..c4fd6daf 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt @@ -26,7 +26,7 @@ import com.orange.ouds.app.ui.utilities.composable.Screen import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken @Composable fun TokensScreen(onTokenCategoryClick: (Long) -> Unit) { @@ -43,8 +43,8 @@ private fun TokensScreen(tokenCategories: List, onTokenCategoryCl modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()) - .padding(OudsSpacingFixedKeyToken.Medium.value), - verticalArrangement = Arrangement.spacedBy(OudsSpacingFixedKeyToken.Medium.value) + .padding(OudsSpaceFixedKeyToken.Medium.value), + verticalArrangement = Arrangement.spacedBy(OudsSpaceFixedKeyToken.Medium.value) ) { tokenCategories.forEach { token -> LargeCard( diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt index 9d857644..c5a51e17 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt @@ -32,7 +32,7 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -54,7 +54,7 @@ fun DetailScreenHeader( ) DetailScreenDescription( - modifier = Modifier.padding(all = OudsSpacingFixedKeyToken.Medium.value), + modifier = Modifier.padding(all = OudsSpaceFixedKeyToken.Medium.value), descriptionRes = descriptionRes ) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt index f3d39646..163c0faa 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt @@ -32,7 +32,7 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -59,7 +59,7 @@ fun LargeCard( contentScale = ContentScale.None ) Column( - modifier = Modifier.padding(OudsSpacingFixedKeyToken.Medium.value) + modifier = Modifier.padding(OudsSpaceFixedKeyToken.Medium.value) ) { Text( text = title, diff --git a/app/src/main/res/drawable/ic_spacing.xml b/app/src/main/res/drawable/ic_dimension.xml similarity index 100% rename from app/src/main/res/drawable/ic_spacing.xml rename to app/src/main/res/drawable/ic_dimension.xml diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d42158a4..ae18cb43 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,16 +45,16 @@ Dimension Dimension provides standard sizing and spacing to ensure visual consistency across the UI. - - Spacing - Space refers to the measurements used to define the spacing between UI elements. - Scaled - Fixed - Padding inline - Padding stack - Padding inset - Column gap - Row gap + + Space + Space refers to the measurements used to define the spacing between UI elements. + Scaled + Fixed + Padding inline + Padding stack + Padding inset + Column gap + Row gap Size diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsSpacings.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt similarity index 57% rename from core/src/main/java/com/orange/ouds/core/theme/OudsSpacings.kt rename to core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt index e7db845e..3286f1cd 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsSpacings.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt @@ -20,16 +20,16 @@ import androidx.compose.ui.unit.dp import com.orange.ouds.theme.OudsAdaptiveTokenValue import com.orange.ouds.theme.OudsAdaptiveWindowType import com.orange.ouds.theme.currentWindowWidth -import com.orange.ouds.theme.tokens.OudsSpacingColumnGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingInsetKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingPaddingBlockKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingPaddingInlineKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingRowGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingScaledKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsSpacingSemanticTokens +import com.orange.ouds.theme.tokens.OudsSpaceColumnGapKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceInsetKeyToken +import com.orange.ouds.theme.tokens.OudsSpacePaddingBlockKeyToken +import com.orange.ouds.theme.tokens.OudsSpacePaddingInlineKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceRowGapKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceScaledKeyToken +import com.orange.ouds.theme.tokens.semantic.OudsSpaceSemanticTokens -data class OudsSpacings( +data class OudsSpaces( val fixedNone: Dp, val fixedSmash: Dp, val fixedShortest: Dp, @@ -131,7 +131,7 @@ data class OudsSpacings( val rowGapWithIconTall: Dp, ) -fun OudsSpacingSemanticTokens.getSpacings() = OudsSpacings( +fun OudsSpaceSemanticTokens.getSpaces() = OudsSpaces( fixedNone = fixedNone.dp, fixedSmash = fixedSmash.dp, fixedShortest = fixedShortest.dp, @@ -274,36 +274,36 @@ fun OudsSpacingSemanticTokens.getSpacings() = OudsSpacings( ) @Stable -fun OudsSpacings.fromToken(token: OudsSpacingFixedKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceFixedKeyToken): Dp { return when (token) { - OudsSpacingFixedKeyToken.None -> fixedNone - OudsSpacingFixedKeyToken.Smash -> fixedSmash - OudsSpacingFixedKeyToken.Shortest -> fixedShortest - OudsSpacingFixedKeyToken.Shorter -> fixedShorter - OudsSpacingFixedKeyToken.Short -> fixedShort - OudsSpacingFixedKeyToken.Medium -> fixedMedium - OudsSpacingFixedKeyToken.Tall -> fixedTall - OudsSpacingFixedKeyToken.Taller -> fixedTaller - OudsSpacingFixedKeyToken.Tallest -> fixedTallest - OudsSpacingFixedKeyToken.Spacious -> fixedSpacious - OudsSpacingFixedKeyToken.Huge -> fixedHuge - OudsSpacingFixedKeyToken.Jumbo -> fixedJumbo + OudsSpaceFixedKeyToken.None -> fixedNone + OudsSpaceFixedKeyToken.Smash -> fixedSmash + OudsSpaceFixedKeyToken.Shortest -> fixedShortest + OudsSpaceFixedKeyToken.Shorter -> fixedShorter + OudsSpaceFixedKeyToken.Short -> fixedShort + OudsSpaceFixedKeyToken.Medium -> fixedMedium + OudsSpaceFixedKeyToken.Tall -> fixedTall + OudsSpaceFixedKeyToken.Taller -> fixedTaller + OudsSpaceFixedKeyToken.Tallest -> fixedTallest + OudsSpaceFixedKeyToken.Spacious -> fixedSpacious + OudsSpaceFixedKeyToken.Huge -> fixedHuge + OudsSpaceFixedKeyToken.Jumbo -> fixedJumbo } } @Stable -fun OudsSpacings.fromToken(token: OudsSpacingScaledKeyToken, adaptiveWindowType: OudsAdaptiveWindowType): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceScaledKeyToken, adaptiveWindowType: OudsAdaptiveWindowType): Dp { val dimensionAdaptableSpaceToken = when (token) { - OudsSpacingScaledKeyToken.None -> scaledNone - OudsSpacingScaledKeyToken.Smash -> scaledSmash - OudsSpacingScaledKeyToken.Shortest -> scaledShortest - OudsSpacingScaledKeyToken.Shorter -> scaledShorter - OudsSpacingScaledKeyToken.Short -> scaledShort - OudsSpacingScaledKeyToken.Medium -> scaledMedium - OudsSpacingScaledKeyToken.Tall -> scaledTall - OudsSpacingScaledKeyToken.Taller -> scaledTaller - OudsSpacingScaledKeyToken.Tallest -> scaledTallest - OudsSpacingScaledKeyToken.Spacious -> scaledSpacious + OudsSpaceScaledKeyToken.None -> scaledNone + OudsSpaceScaledKeyToken.Smash -> scaledSmash + OudsSpaceScaledKeyToken.Shortest -> scaledShortest + OudsSpaceScaledKeyToken.Shorter -> scaledShorter + OudsSpaceScaledKeyToken.Short -> scaledShort + OudsSpaceScaledKeyToken.Medium -> scaledMedium + OudsSpaceScaledKeyToken.Tall -> scaledTall + OudsSpaceScaledKeyToken.Taller -> scaledTaller + OudsSpaceScaledKeyToken.Tallest -> scaledTallest + OudsSpaceScaledKeyToken.Spacious -> scaledSpacious } return when (adaptiveWindowType) { @@ -314,163 +314,163 @@ fun OudsSpacings.fromToken(token: OudsSpacingScaledKeyToken, adaptiveWindowType: } @Stable -fun OudsSpacings.fromToken(token: OudsSpacingPaddingInlineKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpacePaddingInlineKeyToken): Dp { return when (token) { - OudsSpacingPaddingInlineKeyToken.None -> paddingInlineNone - OudsSpacingPaddingInlineKeyToken.Shorter -> paddingInlineShorter - OudsSpacingPaddingInlineKeyToken.Short -> paddingInlineShort - OudsSpacingPaddingInlineKeyToken.Medium -> paddingInlineMedium - OudsSpacingPaddingInlineKeyToken.Tall -> paddingInlineTall - OudsSpacingPaddingInlineKeyToken.Taller -> paddingInlineTaller - OudsSpacingPaddingInlineKeyToken.Tallest -> paddingInlineTallest - OudsSpacingPaddingInlineKeyToken.WithIconNone -> paddingInlineWithIconNone - OudsSpacingPaddingInlineKeyToken.WithIconShortest -> paddingInlineWithIconShortest - OudsSpacingPaddingInlineKeyToken.WithIconShorter -> paddingInlineWithIconShorter - OudsSpacingPaddingInlineKeyToken.WithIconShort -> paddingInlineWithIconShort - OudsSpacingPaddingInlineKeyToken.WithIconMedium -> paddingInlineWithIconMedium - OudsSpacingPaddingInlineKeyToken.WithIconTall -> paddingInlineWithIconTall - OudsSpacingPaddingInlineKeyToken.WithIconTaller -> paddingInlineWithIconTaller - OudsSpacingPaddingInlineKeyToken.WithIconTallest -> paddingInlineWithIconTallest - OudsSpacingPaddingInlineKeyToken.WithArrowNone -> paddingInlineWithArrowNone - OudsSpacingPaddingInlineKeyToken.WithArrowShortest -> paddingInlineWithArrowShortest - OudsSpacingPaddingInlineKeyToken.WithArrowShorter -> paddingInlineWithArrowShorter - OudsSpacingPaddingInlineKeyToken.WithArrowShort -> paddingInlineWithArrowShort - OudsSpacingPaddingInlineKeyToken.WithArrowMedium -> paddingInlineWithArrowMedium - OudsSpacingPaddingInlineKeyToken.WithArrowTall -> paddingInlineWithArrowTall - OudsSpacingPaddingInlineKeyToken.WithArrowTaller -> paddingInlineWithArrowTaller - OudsSpacingPaddingInlineKeyToken.WithArrowTallest -> paddingInlineWithArrowTallest + OudsSpacePaddingInlineKeyToken.None -> paddingInlineNone + OudsSpacePaddingInlineKeyToken.Shorter -> paddingInlineShorter + OudsSpacePaddingInlineKeyToken.Short -> paddingInlineShort + OudsSpacePaddingInlineKeyToken.Medium -> paddingInlineMedium + OudsSpacePaddingInlineKeyToken.Tall -> paddingInlineTall + OudsSpacePaddingInlineKeyToken.Taller -> paddingInlineTaller + OudsSpacePaddingInlineKeyToken.Tallest -> paddingInlineTallest + OudsSpacePaddingInlineKeyToken.WithIconNone -> paddingInlineWithIconNone + OudsSpacePaddingInlineKeyToken.WithIconShortest -> paddingInlineWithIconShortest + OudsSpacePaddingInlineKeyToken.WithIconShorter -> paddingInlineWithIconShorter + OudsSpacePaddingInlineKeyToken.WithIconShort -> paddingInlineWithIconShort + OudsSpacePaddingInlineKeyToken.WithIconMedium -> paddingInlineWithIconMedium + OudsSpacePaddingInlineKeyToken.WithIconTall -> paddingInlineWithIconTall + OudsSpacePaddingInlineKeyToken.WithIconTaller -> paddingInlineWithIconTaller + OudsSpacePaddingInlineKeyToken.WithIconTallest -> paddingInlineWithIconTallest + OudsSpacePaddingInlineKeyToken.WithArrowNone -> paddingInlineWithArrowNone + OudsSpacePaddingInlineKeyToken.WithArrowShortest -> paddingInlineWithArrowShortest + OudsSpacePaddingInlineKeyToken.WithArrowShorter -> paddingInlineWithArrowShorter + OudsSpacePaddingInlineKeyToken.WithArrowShort -> paddingInlineWithArrowShort + OudsSpacePaddingInlineKeyToken.WithArrowMedium -> paddingInlineWithArrowMedium + OudsSpacePaddingInlineKeyToken.WithArrowTall -> paddingInlineWithArrowTall + OudsSpacePaddingInlineKeyToken.WithArrowTaller -> paddingInlineWithArrowTaller + OudsSpacePaddingInlineKeyToken.WithArrowTallest -> paddingInlineWithArrowTallest } } @Stable -fun OudsSpacings.fromToken(token: OudsSpacingPaddingBlockKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpacePaddingBlockKeyToken): Dp { return when (token) { - OudsSpacingPaddingBlockKeyToken.None -> paddingBlockNone - OudsSpacingPaddingBlockKeyToken.Shorter -> paddingBlockShorter - OudsSpacingPaddingBlockKeyToken.Short -> paddingBlockShort - OudsSpacingPaddingBlockKeyToken.Medium -> paddingBlockMedium - OudsSpacingPaddingBlockKeyToken.Tall -> paddingBlockTall - OudsSpacingPaddingBlockKeyToken.Taller -> paddingBlockTaller - OudsSpacingPaddingBlockKeyToken.Tallest -> paddingBlockTallest - OudsSpacingPaddingBlockKeyToken.WithIconNone -> paddingBlockWithIconNone - OudsSpacingPaddingBlockKeyToken.WithIconShortest -> paddingBlockWithIconShortest - OudsSpacingPaddingBlockKeyToken.WithIconShorter -> paddingBlockWithIconShorter - OudsSpacingPaddingBlockKeyToken.WithIconShort -> paddingBlockWithIconShort - OudsSpacingPaddingBlockKeyToken.WithIconMedium -> paddingBlockWithIconMedium - OudsSpacingPaddingBlockKeyToken.WithIconTall -> paddingBlockWithIconTall - OudsSpacingPaddingBlockKeyToken.WithIconTaller -> paddingBlockWithIconTaller + OudsSpacePaddingBlockKeyToken.None -> paddingBlockNone + OudsSpacePaddingBlockKeyToken.Shorter -> paddingBlockShorter + OudsSpacePaddingBlockKeyToken.Short -> paddingBlockShort + OudsSpacePaddingBlockKeyToken.Medium -> paddingBlockMedium + OudsSpacePaddingBlockKeyToken.Tall -> paddingBlockTall + OudsSpacePaddingBlockKeyToken.Taller -> paddingBlockTaller + OudsSpacePaddingBlockKeyToken.Tallest -> paddingBlockTallest + OudsSpacePaddingBlockKeyToken.WithIconNone -> paddingBlockWithIconNone + OudsSpacePaddingBlockKeyToken.WithIconShortest -> paddingBlockWithIconShortest + OudsSpacePaddingBlockKeyToken.WithIconShorter -> paddingBlockWithIconShorter + OudsSpacePaddingBlockKeyToken.WithIconShort -> paddingBlockWithIconShort + OudsSpacePaddingBlockKeyToken.WithIconMedium -> paddingBlockWithIconMedium + OudsSpacePaddingBlockKeyToken.WithIconTall -> paddingBlockWithIconTall + OudsSpacePaddingBlockKeyToken.WithIconTaller -> paddingBlockWithIconTaller } } @Stable -fun OudsSpacings.fromToken(token: OudsSpacingInsetKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceInsetKeyToken): Dp { return when (token) { - OudsSpacingInsetKeyToken.None -> insetNone - OudsSpacingInsetKeyToken.Smash -> insetSmash - OudsSpacingInsetKeyToken.Shortest -> insetShortest - OudsSpacingInsetKeyToken.Shorter -> insetShorter - OudsSpacingInsetKeyToken.Short -> insetShort - OudsSpacingInsetKeyToken.Medium -> insetMedium - OudsSpacingInsetKeyToken.Tall -> insetTall - OudsSpacingInsetKeyToken.Taller -> insetTaller - OudsSpacingInsetKeyToken.Tallest -> insetTallest - OudsSpacingInsetKeyToken.Spacious -> insetSpacious + OudsSpaceInsetKeyToken.None -> insetNone + OudsSpaceInsetKeyToken.Smash -> insetSmash + OudsSpaceInsetKeyToken.Shortest -> insetShortest + OudsSpaceInsetKeyToken.Shorter -> insetShorter + OudsSpaceInsetKeyToken.Short -> insetShort + OudsSpaceInsetKeyToken.Medium -> insetMedium + OudsSpaceInsetKeyToken.Tall -> insetTall + OudsSpaceInsetKeyToken.Taller -> insetTaller + OudsSpaceInsetKeyToken.Tallest -> insetTallest + OudsSpaceInsetKeyToken.Spacious -> insetSpacious } } @Stable -fun OudsSpacings.fromToken(token: OudsSpacingColumnGapKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceColumnGapKeyToken): Dp { return when (token) { - OudsSpacingColumnGapKeyToken.None -> columnGapNone - OudsSpacingColumnGapKeyToken.Shorter -> columnGapShorter - OudsSpacingColumnGapKeyToken.Short -> columnGapShort - OudsSpacingColumnGapKeyToken.Medium -> columnGapMedium - OudsSpacingColumnGapKeyToken.Tall -> columnGapTall - OudsSpacingColumnGapKeyToken.Taller -> columnGapTaller - OudsSpacingColumnGapKeyToken.WithIconNone -> columnGapWithIconNone - OudsSpacingColumnGapKeyToken.WithIconShortest -> columnGapWithIconShortest - OudsSpacingColumnGapKeyToken.WithIconShorter -> columnGapWithIconShorter - OudsSpacingColumnGapKeyToken.WithIconShort -> columnGapWithIconShort - OudsSpacingColumnGapKeyToken.WithIconMedium -> columnGapWithIconMedium - OudsSpacingColumnGapKeyToken.WithIconTall -> columnGapWithIconTall - OudsSpacingColumnGapKeyToken.WithArrowNone -> columnGapWithArrowNone - OudsSpacingColumnGapKeyToken.WithArrowShortest -> columnGapWithArrowShortest - OudsSpacingColumnGapKeyToken.WithArrowShorter -> columnGapWithArrowShorter - OudsSpacingColumnGapKeyToken.WithArrowShort -> columnGapWithArrowShort - OudsSpacingColumnGapKeyToken.WithArrowMedium -> columnGapWithArrowMedium - OudsSpacingColumnGapKeyToken.WithArrowTall -> columnGapWithArrowTall + OudsSpaceColumnGapKeyToken.None -> columnGapNone + OudsSpaceColumnGapKeyToken.Shorter -> columnGapShorter + OudsSpaceColumnGapKeyToken.Short -> columnGapShort + OudsSpaceColumnGapKeyToken.Medium -> columnGapMedium + OudsSpaceColumnGapKeyToken.Tall -> columnGapTall + OudsSpaceColumnGapKeyToken.Taller -> columnGapTaller + OudsSpaceColumnGapKeyToken.WithIconNone -> columnGapWithIconNone + OudsSpaceColumnGapKeyToken.WithIconShortest -> columnGapWithIconShortest + OudsSpaceColumnGapKeyToken.WithIconShorter -> columnGapWithIconShorter + OudsSpaceColumnGapKeyToken.WithIconShort -> columnGapWithIconShort + OudsSpaceColumnGapKeyToken.WithIconMedium -> columnGapWithIconMedium + OudsSpaceColumnGapKeyToken.WithIconTall -> columnGapWithIconTall + OudsSpaceColumnGapKeyToken.WithArrowNone -> columnGapWithArrowNone + OudsSpaceColumnGapKeyToken.WithArrowShortest -> columnGapWithArrowShortest + OudsSpaceColumnGapKeyToken.WithArrowShorter -> columnGapWithArrowShorter + OudsSpaceColumnGapKeyToken.WithArrowShort -> columnGapWithArrowShort + OudsSpaceColumnGapKeyToken.WithArrowMedium -> columnGapWithArrowMedium + OudsSpaceColumnGapKeyToken.WithArrowTall -> columnGapWithArrowTall } } @Stable -fun OudsSpacings.fromToken(token: OudsSpacingRowGapKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceRowGapKeyToken): Dp { return when (token) { - OudsSpacingRowGapKeyToken.None -> rowGapNone - OudsSpacingRowGapKeyToken.Shortest -> rowGapShortest - OudsSpacingRowGapKeyToken.Shorter -> rowGapShorter - OudsSpacingRowGapKeyToken.Short -> rowGapShort - OudsSpacingRowGapKeyToken.Medium -> rowGapMedium - OudsSpacingRowGapKeyToken.Tall -> rowGapTall - OudsSpacingRowGapKeyToken.WithIconNone -> rowGapWithIconNone - OudsSpacingRowGapKeyToken.WithIconShortest -> rowGapWithIconShortest - OudsSpacingRowGapKeyToken.WithIconShorter -> rowGapWithIconShorter - OudsSpacingRowGapKeyToken.WithIconShort -> rowGapWithIconShort - OudsSpacingRowGapKeyToken.WithIconMedium -> rowGapWithIconMedium - OudsSpacingRowGapKeyToken.WithIconTall -> rowGapWithIconTall + OudsSpaceRowGapKeyToken.None -> rowGapNone + OudsSpaceRowGapKeyToken.Shortest -> rowGapShortest + OudsSpaceRowGapKeyToken.Shorter -> rowGapShorter + OudsSpaceRowGapKeyToken.Short -> rowGapShort + OudsSpaceRowGapKeyToken.Medium -> rowGapMedium + OudsSpaceRowGapKeyToken.Tall -> rowGapTall + OudsSpaceRowGapKeyToken.WithIconNone -> rowGapWithIconNone + OudsSpaceRowGapKeyToken.WithIconShortest -> rowGapWithIconShortest + OudsSpaceRowGapKeyToken.WithIconShorter -> rowGapWithIconShorter + OudsSpaceRowGapKeyToken.WithIconShort -> rowGapWithIconShort + OudsSpaceRowGapKeyToken.WithIconMedium -> rowGapWithIconMedium + OudsSpaceRowGapKeyToken.WithIconTall -> rowGapWithIconTall } } /** * Converts an OUDS column gap space token to the local column gap space value provided by the theme. */ -val OudsSpacingColumnGapKeyToken.value: Dp +val OudsSpaceColumnGapKeyToken.value: Dp @ReadOnlyComposable @Composable - get() = OudsTheme.spacings.fromToken(this) + get() = OudsTheme.spaces.fromToken(this) /** * Converts an OUDS fixed space token to the local space value provided by the theme. */ -val OudsSpacingFixedKeyToken.value: Dp +val OudsSpaceFixedKeyToken.value: Dp @ReadOnlyComposable @Composable - get() = OudsTheme.spacings.fromToken(this) + get() = OudsTheme.spaces.fromToken(this) /** * Converts an OUDS block padding token to the local block padding value provided by the theme. */ -val OudsSpacingPaddingBlockKeyToken.value: Dp +val OudsSpacePaddingBlockKeyToken.value: Dp @ReadOnlyComposable @Composable - get() = OudsTheme.spacings.fromToken(this) + get() = OudsTheme.spaces.fromToken(this) /** * Converts an OUDS inline padding token to the local inline padding value provided by the theme. */ -val OudsSpacingPaddingInlineKeyToken.value: Dp +val OudsSpacePaddingInlineKeyToken.value: Dp @ReadOnlyComposable @Composable - get() = OudsTheme.spacings.fromToken(this) + get() = OudsTheme.spaces.fromToken(this) /** * Converts an OUDS inset token to the local inset value provided by the theme. */ -val OudsSpacingInsetKeyToken.value: Dp +val OudsSpaceInsetKeyToken.value: Dp @ReadOnlyComposable @Composable - get() = OudsTheme.spacings.fromToken(this) + get() = OudsTheme.spaces.fromToken(this) /** * Converts an OUDS row gap space token to the local row gap space value provided by the theme. */ -val OudsSpacingRowGapKeyToken.value: Dp +val OudsSpaceRowGapKeyToken.value: Dp @ReadOnlyComposable @Composable - get() = OudsTheme.spacings.fromToken(this) + get() = OudsTheme.spaces.fromToken(this) /** * Converts an OUDS scaled space token to the local space value provided by the theme depending on the window size. */ -val OudsSpacingScaledKeyToken.value: Dp +val OudsSpaceScaledKeyToken.value: Dp @Composable - get() = OudsTheme.spacings.fromToken(this, OudsAdaptiveWindowType.fromWindowWidth(currentWindowWidth())) + get() = OudsTheme.spaces.fromToken(this, OudsAdaptiveWindowType.fromWindowWidth(currentWindowWidth())) diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt index 21fba5ae..48b1079f 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt @@ -32,7 +32,7 @@ private val LocalTypography = staticCompositionLocalOf { missing private val LocalGrids = staticCompositionLocalOf { missingCompositionLocalError("LocalGrids") } private val LocalOpacities = staticCompositionLocalOf { missingCompositionLocalError("LocalOpacities") } private val LocalSizes = staticCompositionLocalOf { missingCompositionLocalError("LocalSizes") } -private val LocalSpacing = staticCompositionLocalOf { missingCompositionLocalError("LocalSpacing") } +private val LocalSpaces = staticCompositionLocalOf { missingCompositionLocalError("LocalSpaces") } private val LocalComponentsTokens = staticCompositionLocalOf { missingCompositionLocalError("LocalComponentsTokens") } object OudsTheme { @@ -71,10 +71,10 @@ object OudsTheme { @ReadOnlyComposable get() = LocalSizes.current - val spacings: OudsSpacings + val spaces: OudsSpaces @Composable @ReadOnlyComposable - get() = LocalSpacing.current + get() = LocalSpaces.current val componentsTokens: OudsComponentsTokens @Composable @@ -106,7 +106,7 @@ fun OudsTheme( LocalGrids provides themeContract.gridTokens.getGrids(), LocalOpacities provides themeContract.opacityTokens.getOpacity(), LocalSizes provides themeContract.sizeTokens.getSizes(), - LocalSpacing provides themeContract.spacingTokens.getSpacings(), + LocalSpaces provides themeContract.spaceTokens.getSpaces(), LocalComponentsTokens provides themeContract.componentsTokens ) { MaterialTheme(colorScheme = if (darkThemeEnabled) themeContract.colorTokens.materialDarkColorScheme else themeContract.colorTokens.materialLightColorScheme) { diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt b/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt index 10e669c0..6cf9eb90 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt @@ -22,7 +22,7 @@ import com.orange.ouds.theme.tokens.semantic.OudsFontSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsGridSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsOpacitySemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsSizeSemanticTokens -import com.orange.ouds.theme.tokens.semantic.OudsSpacingSemanticTokens +import com.orange.ouds.theme.tokens.semantic.OudsSpaceSemanticTokens interface OudsThemeContract : Parcelable { @@ -80,10 +80,10 @@ interface OudsThemeContract : Parcelable { get() = OudsSizeSemanticTokens() /** - * Spacing semantic tokens values used in the theme + * Space semantic tokens values used in the theme */ - val spacingTokens: OudsSpacingSemanticTokens - get() = OudsSpacingSemanticTokens() + val spaceTokens: OudsSpaceSemanticTokens + get() = OudsSpaceSemanticTokens() /** * Customization of the OUDS components if needed diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpacingKeyTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt similarity index 87% rename from theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpacingKeyTokens.kt rename to theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt index 505dd368..30246e55 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpacingKeyTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt @@ -12,7 +12,7 @@ package com.orange.ouds.theme.tokens -enum class OudsSpacingFixedKeyToken { +enum class OudsSpaceFixedKeyToken { None, Smash, Shortest, @@ -27,7 +27,7 @@ enum class OudsSpacingFixedKeyToken { Jumbo } -enum class OudsSpacingScaledKeyToken { +enum class OudsSpaceScaledKeyToken { None, Smash, Shortest, @@ -40,7 +40,7 @@ enum class OudsSpacingScaledKeyToken { Spacious } -enum class OudsSpacingPaddingInlineKeyToken { +enum class OudsSpacePaddingInlineKeyToken { None, Shorter, Short, @@ -66,7 +66,7 @@ enum class OudsSpacingPaddingInlineKeyToken { WithArrowTallest, } -enum class OudsSpacingPaddingBlockKeyToken { +enum class OudsSpacePaddingBlockKeyToken { None, Shorter, Short, @@ -83,7 +83,7 @@ enum class OudsSpacingPaddingBlockKeyToken { WithIconTaller, } -enum class OudsSpacingInsetKeyToken { +enum class OudsSpaceInsetKeyToken { None, Smash, Shortest, @@ -96,7 +96,7 @@ enum class OudsSpacingInsetKeyToken { Spacious, } -enum class OudsSpacingColumnGapKeyToken { +enum class OudsSpaceColumnGapKeyToken { None, Shorter, Short, @@ -117,7 +117,7 @@ enum class OudsSpacingColumnGapKeyToken { WithArrowTall, } -enum class OudsSpacingRowGapKeyToken { +enum class OudsSpaceRowGapKeyToken { None, Shortest, Shorter, diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt index afc4d8bc..66c87cd4 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt @@ -14,7 +14,7 @@ package com.orange.ouds.theme.tokens.components import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -30,6 +30,6 @@ open class OudsButtonTokens( val hoveredElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val disabledElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val labelStyle: OudsTypographyKeyToken = OudsTypographyKeyToken.BodyStrongLarge, - val verticalContentPadding: OudsSpacingFixedKeyToken = OudsSpacingFixedKeyToken.Smash, - val horizontalContentPadding: OudsSpacingFixedKeyToken = OudsSpacingFixedKeyToken.Tall + val verticalContentPadding: OudsSpaceFixedKeyToken = OudsSpaceFixedKeyToken.Smash, + val horizontalContentPadding: OudsSpaceFixedKeyToken = OudsSpaceFixedKeyToken.Tall ) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsSpacingSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsSpaceSemanticTokens.kt similarity index 99% rename from theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsSpacingSemanticTokens.kt rename to theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsSpaceSemanticTokens.kt index 872f8fd3..6cbd2a48 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsSpacingSemanticTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsSpaceSemanticTokens.kt @@ -14,7 +14,7 @@ package com.orange.ouds.theme.tokens.semantic import com.orange.ouds.tokens.global.raw.DimensionRawTokens -data class OudsSpacingSemanticTokens( +data class OudsSpaceSemanticTokens( val fixedNone: Float = DimensionRawTokens.dimension0, val fixedSmash: Float = DimensionRawTokens.dimension25, val fixedShortest: Float = DimensionRawTokens.dimension50, diff --git a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt index fbbdbbf3..34118916 100644 --- a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt +++ b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.text.font.FontFamily import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken -import com.orange.ouds.theme.tokens.OudsSpacingFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens @@ -45,8 +45,8 @@ open class WhiteLabelTheme : OudsThemeContract { focusedElevation = OudsElevationKeyToken.OverlayDefault, hoveredElevation = OudsElevationKeyToken.OverlayDefault, labelStyle = OudsTypographyKeyToken.BodyDefaultLarge, - verticalContentPadding = OudsSpacingFixedKeyToken.Shortest, - horizontalContentPadding = OudsSpacingFixedKeyToken.Short + verticalContentPadding = OudsSpaceFixedKeyToken.Shortest, + horizontalContentPadding = OudsSpaceFixedKeyToken.Short ) ) } From 7f91d845daea2c0b085ea0e990dccbb77e8c213c Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Wed, 23 Oct 2024 14:59:12 +0200 Subject: [PATCH 14/33] Rename strings --- .../ouds/app/ui/tokens/TokenCategory.kt | 8 +++--- .../ui/tokens/TokenCategoryDetailScreen.kt | 2 +- .../ouds/app/ui/tokens/TokenProperty.kt | 18 ++++++------ app/src/main/res/values/strings.xml | 28 +++++++++---------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index a6991a9a..8ac2ad74 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -49,9 +49,9 @@ sealed class TokenCategory( subcategories = listOf(Space, Size) ) { data object Space : TokenCategory( - R.string.app_tokens_space_label, + R.string.app_tokens_dimension_space_label, R.drawable.ic_dimension, - R.string.app_tokens_space_description_text, + R.string.app_tokens_dimension_space_description_text, listOf( TokenProperty.SpaceScaled, TokenProperty.SpaceFixed, TokenProperty.SpacePaddingInline, TokenProperty.SpacePaddingStack, TokenProperty.SpacePaddingInset, TokenProperty.SpaceColumnGap, TokenProperty.SpaceRowGap @@ -60,9 +60,9 @@ sealed class TokenCategory( ) data object Size : TokenCategory( - R.string.app_tokens_size_label, + R.string.app_tokens_dimension_size_label, R.drawable.ic_dimension, - R.string.app_tokens_size_description_text, + R.string.app_tokens_dimension_size_description_text, listOf(TokenProperty.SizeIconDecorative, TokenProperty.SizeIconWithLabel), subcategory = true ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index b6bbd7a0..c5080b6d 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -99,7 +99,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: TokenIllustration(tokenProperty = tokenProperty, token = token) Text( modifier = Modifier.fillMaxWidth(), - text = stringResource(id = R.string.app_tokens_size_iconWithLabelTokenName_label, token.name, token.literalValue), + text = stringResource(id = R.string.app_tokens_dimension_size_iconWithLabelTokenName_label, token.name, token.literalValue), maxLines = 1, overflow = TextOverflow.Ellipsis, style = OudsTypographyKeyToken.BodyDefaultMedium.value, diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 00c48c53..282f7b85 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -169,7 +169,7 @@ sealed class TokenProperty( } data object SizeIconDecorative : TokenProperty( - nameRes = R.string.app_tokens_size_iconDecorative_label, + nameRes = R.string.app_tokens_dimension_size_iconDecorative_label, tokens = { OudsSizeIconDecorativeKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -191,7 +191,7 @@ sealed class TokenProperty( } data object SizeIconWithLabel : TokenProperty( - nameRes = R.string.app_tokens_size_iconWithLabel_label, + nameRes = R.string.app_tokens_dimension_size_iconWithLabel_label, tokens = { OudsSizeIconWithTextKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -220,7 +220,7 @@ sealed class TokenProperty( } data object SpaceColumnGap : TokenProperty( - nameRes = R.string.app_tokens_space_columnGap_label, + nameRes = R.string.app_tokens_dimension_space_columnGap_label, tokens = { OudsSpaceColumnGapKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -228,7 +228,7 @@ sealed class TokenProperty( } data object SpaceFixed : TokenProperty( - nameRes = R.string.app_tokens_space_fixed_label, + nameRes = R.string.app_tokens_dimension_space_fixed_label, tokens = { OudsSpaceFixedKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -236,7 +236,7 @@ sealed class TokenProperty( } data object SpacePaddingInline : TokenProperty( - nameRes = R.string.app_tokens_space_paddingInline_label, + nameRes = R.string.app_tokens_dimension_space_paddingInline_label, tokens = { OudsSpacePaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -267,7 +267,7 @@ sealed class TokenProperty( } data object SpacePaddingInset : TokenProperty( - nameRes = R.string.app_tokens_space_paddingInset_label, + nameRes = R.string.app_tokens_dimension_space_paddingInset_label, tokens = { OudsSpaceInsetKeyToken.entries.map { Token(it.name, it.value) } } ) { @@ -295,7 +295,7 @@ sealed class TokenProperty( } data object SpacePaddingStack : TokenProperty( - nameRes = R.string.app_tokens_space_paddingStack_label, + nameRes = R.string.app_tokens_dimension_space_paddingStack_label, tokens = { OudsSpacePaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } ) { @@ -307,7 +307,7 @@ sealed class TokenProperty( } data object SpaceRowGap : TokenProperty( - nameRes = R.string.app_tokens_space_rowGap_label, + nameRes = R.string.app_tokens_dimension_space_rowGap_label, tokens = { OudsSpaceRowGapKeyToken.entries.map { Token(it.name, it.value) } } ) { @@ -320,7 +320,7 @@ sealed class TokenProperty( } data object SpaceScaled : TokenProperty( - nameRes = R.string.app_tokens_space_scaled_label, + nameRes = R.string.app_tokens_dimension_space_scaled_label, tokens = { OudsSpaceScaledKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ae18cb43..615753fc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,22 +46,22 @@ Dimension provides standard sizing and spacing to ensure visual consistency across the UI. - Space - Space refers to the measurements used to define the spacing between UI elements. - Scaled - Fixed - Padding inline - Padding stack - Padding inset - Column gap - Row gap + Space + Space refers to the measurements used to define the spacing between UI elements. + Scaled + Fixed + Padding inline + Padding stack + Padding inset + Column gap + Row gap - Size - Size refers to the specific measurements used to define the dimensions of UI elements within the design system. - Icon decorative - Icon with label - %1$s (%2$s) + Size + Size refers to the specific measurements used to define the dimensions of UI elements within the design system. + Icon decorative + Icon with label + %1$s (%2$s) From 9b762044035c970f3d104969a18d5f6448411991 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Wed, 23 Oct 2024 16:13:27 +0200 Subject: [PATCH 15/33] Add WithArrow tokens illustrations Factorize token properties illustrations --- .../com/orange/ouds/app/ui/tokens/Token.kt | 30 ++++ .../ouds/app/ui/tokens/TokenProperty.kt | 164 +++--------------- .../ui/tokens/TokenPropertyIllustration.kt | 129 ++++++++++++++ app/src/main/res/drawable/ic_chevron_down.xml | 9 + 4 files changed, 192 insertions(+), 140 deletions(-) create mode 100644 app/src/main/java/com/orange/ouds/app/ui/tokens/Token.kt create mode 100644 app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt create mode 100644 app/src/main/res/drawable/ic_chevron_down.xml diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/Token.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/Token.kt new file mode 100644 index 00000000..aa38901e --- /dev/null +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/Token.kt @@ -0,0 +1,30 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.app.ui.tokens + +import androidx.compose.runtime.Composable +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.Dp +import com.orange.ouds.app.R + +data class Token(val name: String, val value: T) { + val literalValue: String + @Composable + get() = when (value) { + is Float -> stringResource(id = R.string.app_tokens_floatFormat_label, value) + is Dp -> stringResource(id = R.string.app_tokens_dpFormat_label, value.toString().replace(".0.dp", "").substringBeforeLast(".dp")) + is TextStyle -> stringResource(id = R.string.app_tokens_spFormat_label, value.fontSize.toString().replace(".0.sp", "").substringBeforeLast(".sp")) + else -> value.toString() + } +} diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 282f7b85..84eb1a62 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -34,10 +34,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -45,8 +42,6 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.foundation.extensions.orElse import com.orange.ouds.theme.OudsBorderStyle -import com.orange.ouds.theme.dashedBorder -import com.orange.ouds.theme.dottedBorder import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken @@ -68,27 +63,12 @@ sealed class TokenProperty( @StringRes val nameRes: Int?, val tokens: @Composable () -> List> ) { - protected companion object { - protected val defaultIllustrationSize = 64.dp - } - data object BorderRadius : TokenProperty( nameRes = R.string.app_tokens_border_radius_label, tokens = { OudsBorderRadiusKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(radius: Dp) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .border( - width = 1.dp, - color = OudsColorKeyToken.OnSurface.value, - shape = RoundedCornerShape(radius) - ) //TODO use ContentDefault token when available - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } + fun Illustration(radius: Dp) = BorderIllustrationBox(shape = RoundedCornerShape(radius)) } data object BorderStyle : TokenProperty( @@ -96,21 +76,7 @@ sealed class TokenProperty( tokens = { OudsBorderStyleKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(style: OudsBorderStyle) { - val borderColor = OudsColorKeyToken.OnSurface.value //TODO use ContentDefault token when available - val borderWidth = 1.dp - val modifier = when (style) { - OudsBorderStyle.None -> Modifier - OudsBorderStyle.Solid -> Modifier.border(width = borderWidth, color = borderColor) - OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = borderWidth, color = borderColor) - OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = borderWidth, color = borderColor) - } - Box( - modifier = modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } + fun Illustration(style: OudsBorderStyle) = BorderIllustrationBox(style = style) } data object BorderWidth : TokenProperty( @@ -118,14 +84,7 @@ sealed class TokenProperty( tokens = { OudsBorderWidthKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(width: Dp) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .border(width = width, color = OudsColorKeyToken.OnSurface.value) //TODO use ContentDefault token when available - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) - } + fun Illustration(width: Dp) = BorderIllustrationBox(width = width) } data object Elevation : TokenProperty( @@ -135,11 +94,7 @@ sealed class TokenProperty( @Composable fun Illustration(elevation: Dp) { Surface(shadowElevation = elevation) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.Surface.value), //TODO use BgDefaultSecondary token when available - ) + IllustrationBox(backgroundColor = OudsColorKeyToken.Surface.value) //TODO use BgDefaultSecondary token when available } } } @@ -158,11 +113,7 @@ sealed class TokenProperty( .padding(top = OudsSpaceFixedKeyToken.Medium.value, start = OudsSpaceFixedKeyToken.Medium.value) .size(48.dp) .background(color = squareColor.copy(alpha = opacity)) - .run { - if (opacity <= 0f) { - border(width = 1.dp, color = squareColor) - } else this - } + .border(width = 1.dp, color = squareColor) ) } } @@ -174,12 +125,7 @@ sealed class TokenProperty( ) { @Composable fun Illustration(size: Dp) { - Box( - modifier = Modifier - .size(80.dp) - .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - contentAlignment = Alignment.Center, - ) { + IllustrationBox(modifier = Modifier.size(80.dp), contentAlignment = Alignment.Center) { Icon( modifier = Modifier.size(size), painter = painterResource(R.drawable.ic_design_token_figma), @@ -224,7 +170,7 @@ sealed class TokenProperty( tokens = { OudsSpaceColumnGapKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpaceIllustration(size = size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpaceIllustrationBox(size = size, contentAlignment = Alignment.Center) } data object SpaceFixed : TokenProperty( @@ -232,7 +178,7 @@ sealed class TokenProperty( tokens = { OudsSpaceFixedKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpaceIllustration(size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpaceIllustrationBox(size, contentAlignment = Alignment.Center) } data object SpacePaddingInline : TokenProperty( @@ -241,28 +187,16 @@ sealed class TokenProperty( ) { @Composable fun Illustration(size: Dp, tokenName: String) = when { - tokenName.contains("WithIcon") -> { - Row( - modifier = Modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - verticalAlignment = Alignment.CenterVertically - ) { - Box( - modifier = Modifier - .fillMaxHeight() - .width(width = size) - .background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available - ) - Image( - modifier = Modifier.padding(horizontal = 1.dp), - painter = painterResource(R.drawable.ic_design_token_figma_no_padding), - contentDescription = null, - contentScale = ContentScale.None - ) - } - } - else -> SpaceIllustration(size = size) + tokenName.contains("WithIcon") -> SpacePaddingInlineWithImageIllustrationRow( + spaceSize = size, + imagePainter = painterResource(R.drawable.ic_design_token_figma_no_padding), + imageModifier = Modifier.padding(horizontal = 1.dp) + ) + tokenName.contains("WithArrow") -> SpacePaddingInlineWithImageIllustrationRow( + spaceSize = size, + imagePainter = painterResource(R.drawable.ic_chevron_down) + ) + else -> SpaceIllustrationBox(size = size) } } @@ -273,11 +207,7 @@ sealed class TokenProperty( @Composable fun Illustration(size: Dp) { - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - ) { + IllustrationBox { Box( modifier = Modifier .fillMaxWidth() @@ -298,23 +228,18 @@ sealed class TokenProperty( nameRes = R.string.app_tokens_dimension_space_paddingStack_label, tokens = { OudsSpacePaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustration( - size = size, - orientation = DimensionOrientation.Vertical - ) + fun Illustration(size: Dp) = SpaceIllustrationBox(size = size, orientation = SpaceOrientation.Vertical) } data object SpaceRowGap : TokenProperty( nameRes = R.string.app_tokens_dimension_space_rowGap_label, tokens = { OudsSpaceRowGapKeyToken.entries.map { Token(it.name, it.value) } } ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustration( + fun Illustration(size: Dp) = SpaceIllustrationBox( size = size, - orientation = DimensionOrientation.Vertical, + orientation = SpaceOrientation.Vertical, contentAlignment = Alignment.Center ) } @@ -324,50 +249,9 @@ sealed class TokenProperty( tokens = { OudsSpaceScaledKeyToken.entries.map { Token(it.name, it.value) } } ) { @Composable - fun Illustration(size: Dp) = SpaceIllustration(size = size, contentAlignment = Alignment.Center) + fun Illustration(size: Dp) = SpaceIllustrationBox(size = size, contentAlignment = Alignment.Center) } data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) - @Composable - protected fun SpaceIllustration( - size: Dp, - orientation: DimensionOrientation = DimensionOrientation.Horizontal, - contentAlignment: Alignment = Alignment.TopStart - ) { - val dimensionBoxModifier = when (orientation) { - DimensionOrientation.Horizontal -> Modifier - .fillMaxHeight() - .width(width = size) - - DimensionOrientation.Vertical -> Modifier - .fillMaxWidth() - .height(height = size) - } - Box( - modifier = Modifier - .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - contentAlignment = contentAlignment, - ) { - Box( - modifier = dimensionBoxModifier.background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available - ) - } - } - - protected enum class DimensionOrientation { - Horizontal, Vertical - } -} - -data class Token(val name: String, val value: T) { - val literalValue: String - @Composable - get() = when (value) { - is Float -> stringResource(id = R.string.app_tokens_floatFormat_label, value) - is Dp -> stringResource(id = R.string.app_tokens_dpFormat_label, value.toString().replace(".0.dp", "").substringBeforeLast(".dp")) - is TextStyle -> stringResource(id = R.string.app_tokens_spFormat_label, value.fontSize.toString().replace(".0.sp", "").substringBeforeLast(".sp")) - else -> value.toString() - } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt new file mode 100644 index 00000000..ffe2f491 --- /dev/null +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -0,0 +1,129 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.app.ui.tokens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.orange.ouds.core.theme.value +import com.orange.ouds.theme.OudsBorderStyle +import com.orange.ouds.theme.dashedBorder +import com.orange.ouds.theme.dottedBorder +import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken + +private val defaultIllustrationSize = 64.dp + +@Composable +fun IllustrationBox( + modifier: Modifier = Modifier, + backgroundColor: Color = OudsColorKeyToken.OnSurface.value, + contentAlignment: Alignment = Alignment.TopStart, + content: @Composable BoxScope.() -> Unit = { } +) { + Box( + modifier = modifier + .size(defaultIllustrationSize) + .background(color = backgroundColor), + contentAlignment = contentAlignment, + ) { + content() + } +} + +@Composable +fun BorderIllustrationBox( + width: Dp = 1.dp, + shape: Shape = RectangleShape, + style: OudsBorderStyle = OudsBorderStyle.Solid +) { + val borderColor = OudsColorKeyToken.OnSurface.value //TODO use ContentDefault token when available + val modifier = when (style) { + OudsBorderStyle.None -> Modifier + OudsBorderStyle.Solid -> Modifier.border(width = width, color = borderColor, shape = shape) + OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = width, color = borderColor, shape = shape) + OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = width, color = borderColor, shape = shape) + } + IllustrationBox(modifier = modifier, backgroundColor = Color.Transparent) +} + +@Composable +fun SpaceIllustrationBox( + size: Dp, + orientation: SpaceOrientation = SpaceOrientation.Horizontal, + contentAlignment: Alignment = Alignment.TopStart +) { + val dimensionBoxModifier = when (orientation) { + SpaceOrientation.Horizontal -> Modifier + .fillMaxHeight() + .width(width = size) + + SpaceOrientation.Vertical -> Modifier + .fillMaxWidth() + .height(height = size) + } + IllustrationBox(contentAlignment = contentAlignment) { + Box( + modifier = dimensionBoxModifier.background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + ) + } +} + +enum class SpaceOrientation { + Horizontal, Vertical +} + +@Composable +fun SpacePaddingInlineWithImageIllustrationRow( + spaceSize: Dp, + imagePainter: Painter, + modifier: Modifier = Modifier, + imageModifier: Modifier = Modifier +) { + Row( + modifier = modifier + .size(defaultIllustrationSize) + .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + verticalAlignment = Alignment.CenterVertically + ) { + Box( + modifier = Modifier + .fillMaxHeight() + .width(width = spaceSize) + .background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + ) + Image( + modifier = imageModifier, + painter = imagePainter, + contentDescription = null, + contentScale = ContentScale.None + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_chevron_down.xml b/app/src/main/res/drawable/ic_chevron_down.xml new file mode 100644 index 00000000..1bd51497 --- /dev/null +++ b/app/src/main/res/drawable/ic_chevron_down.xml @@ -0,0 +1,9 @@ + + + From b696f73be84bdb47ddd2d9e5950c994ee64ce2fd Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 24 Oct 2024 10:36:59 +0200 Subject: [PATCH 16/33] Replace hardcoded spaces by tokens --- .../main/java/com/orange/ouds/app/ui/MainScreen.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt index 7acf746c..e2eb13ef 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt @@ -49,6 +49,7 @@ import com.orange.ouds.app.R import com.orange.ouds.app.ui.navigation.appNavGraph import com.orange.ouds.app.ui.utilities.isDarkModeEnabled import com.orange.ouds.core.theme.OudsTheme +import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.extensions.orElse import com.orange.ouds.foundation.utilities.UiModePreviews @@ -56,6 +57,7 @@ import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.orange.ORANGE_THEME_NAME import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.orangecountry.OrangeCountryTheme +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.whitelabel.WhiteLabelTheme @Composable @@ -155,12 +157,11 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U .background(OudsTheme.colorScheme.surfaceVariant) .selectableGroup() ) { - //TODO Replace hard coded values by tokens when available and use OUDS typography Text( text = stringResource(R.string.app_themeDialog_label), modifier = Modifier - .padding(top = 16.dp, bottom = 8.dp) - .padding(horizontal = 16.dp), + .padding(top = OudsSpaceFixedKeyToken.Medium.value, bottom = OudsSpaceFixedKeyToken.Short.value) + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value), style = MaterialTheme.typography.titleLarge ) themeManager.availableThemes.forEach { theme -> @@ -180,7 +181,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U }, role = Role.RadioButton ) - .padding(horizontal = 16.dp), + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value), verticalAlignment = Alignment.CenterVertically ) { RadioButton( @@ -190,7 +191,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U Text( text = theme.name, style = MaterialTheme.typography.bodyLarge, - modifier = Modifier.padding(start = 16.dp) + modifier = Modifier.padding(start = OudsSpaceFixedKeyToken.Medium.value) ) } } From 79ca7abfe119be59a1c052dbe4a8fbc41f9e6327 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 24 Oct 2024 17:35:12 +0200 Subject: [PATCH 17/33] Factorize some code --- .../ui/tokens/TokenCategoryDetailScreen.kt | 21 +++++---- .../ouds/app/ui/tokens/TokenProperty.kt | 44 ++++--------------- 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index c5080b6d..363daa5a 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -22,8 +22,10 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle @@ -152,20 +154,21 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: @Composable private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = when (tokenProperty) { - is TokenProperty.BorderWidth -> tokenProperty.Illustration(width = token.value as Dp) - is TokenProperty.BorderRadius -> tokenProperty.Illustration(radius = token.value as Dp) - is TokenProperty.BorderStyle -> tokenProperty.Illustration(style = token.value as OudsBorderStyle) + is TokenProperty.BorderWidth -> BorderIllustrationBox(width = token.value as Dp) + is TokenProperty.BorderRadius -> BorderIllustrationBox(shape = RoundedCornerShape(token.value as Dp)) + is TokenProperty.BorderStyle -> BorderIllustrationBox(style = token.value as OudsBorderStyle) is TokenProperty.Opacity -> tokenProperty.Illustration(opacity = token.value as Float) is TokenProperty.Elevation -> tokenProperty.Illustration(elevation = token.value as Dp) is TokenProperty.SizeIconDecorative -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SizeIconWithLabel -> tokenProperty.Illustration(size = token.value as Dp, token.name) - is TokenProperty.SpaceColumnGap -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpaceColumnGap, TokenProperty.SpaceFixed, TokenProperty.SpaceScaled -> SpaceIllustrationBox( + size = token.value as Dp, + contentAlignment = Alignment.Center + ) is TokenProperty.SpacePaddingInline -> tokenProperty.Illustration(size = token.value as Dp, token.name) is TokenProperty.SpacePaddingInset -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpacePaddingStack -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpaceFixed -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpaceRowGap -> tokenProperty.Illustration(size = token.value as Dp) - is TokenProperty.SpaceScaled -> tokenProperty.Illustration(size = token.value as Dp) + is TokenProperty.SpacePaddingStack -> SpaceIllustrationBox(size = token.value as Dp, orientation = SpaceOrientation.Vertical) + is TokenProperty.SpaceRowGap -> SpaceIllustrationBox(size = token.value as Dp, orientation = SpaceOrientation.Vertical, contentAlignment = Alignment.Center) is TokenProperty.Typography -> Unit } @@ -174,7 +177,7 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = private fun PreviewTokenCategoryDetailScreen( @PreviewParameter(TokenCategoryDetailScreenPreviewParameterProvider::class) parameter: TokenCategory ) = OudsPreview { - TokenCategoryDetailScreen(parameter, {}) + TokenCategoryDetailScreen(parameter) {} } private class TokenCategoryDetailScreenPreviewParameterProvider : BasicPreviewParameterProvider(*previewParameterValues.toTypedArray()) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 84eb1a62..e82e35cb 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -66,26 +66,17 @@ sealed class TokenProperty( data object BorderRadius : TokenProperty( nameRes = R.string.app_tokens_border_radius_label, tokens = { OudsBorderRadiusKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(radius: Dp) = BorderIllustrationBox(shape = RoundedCornerShape(radius)) - } + ) data object BorderStyle : TokenProperty( nameRes = R.string.app_tokens_border_style_label, tokens = { OudsBorderStyleKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(style: OudsBorderStyle) = BorderIllustrationBox(style = style) - } + ) data object BorderWidth : TokenProperty( nameRes = R.string.app_tokens_border_width_label, tokens = { OudsBorderWidthKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(width: Dp) = BorderIllustrationBox(width = width) - } + ) data object Elevation : TokenProperty( nameRes = null, @@ -168,18 +159,12 @@ sealed class TokenProperty( data object SpaceColumnGap : TokenProperty( nameRes = R.string.app_tokens_dimension_space_columnGap_label, tokens = { OudsSpaceColumnGapKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustrationBox(size = size, contentAlignment = Alignment.Center) - } + ) data object SpaceFixed : TokenProperty( nameRes = R.string.app_tokens_dimension_space_fixed_label, tokens = { OudsSpaceFixedKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustrationBox(size, contentAlignment = Alignment.Center) - } + ) data object SpacePaddingInline : TokenProperty( nameRes = R.string.app_tokens_dimension_space_paddingInline_label, @@ -227,30 +212,17 @@ sealed class TokenProperty( data object SpacePaddingStack : TokenProperty( nameRes = R.string.app_tokens_dimension_space_paddingStack_label, tokens = { OudsSpacePaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustrationBox(size = size, orientation = SpaceOrientation.Vertical) - } + ) data object SpaceRowGap : TokenProperty( nameRes = R.string.app_tokens_dimension_space_rowGap_label, tokens = { OudsSpaceRowGapKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustrationBox( - size = size, - orientation = SpaceOrientation.Vertical, - contentAlignment = Alignment.Center - ) - } + ) data object SpaceScaled : TokenProperty( nameRes = R.string.app_tokens_dimension_space_scaled_label, tokens = { OudsSpaceScaledKeyToken.entries.map { Token(it.name, it.value) } } - ) { - @Composable - fun Illustration(size: Dp) = SpaceIllustrationBox(size = size, contentAlignment = Alignment.Center) - } + ) data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) From 3776da31989616b001601c8cd55ae784d90da3d8 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Fri, 25 Oct 2024 12:03:12 +0200 Subject: [PATCH 18/33] Improve size and space key tokens organization --- .../java/com/orange/ouds/app/ui/MainScreen.kt | 10 +- .../app/ui/components/ComponentsScreen.kt | 4 +- .../ui/tokens/TokenCategoryDetailScreen.kt | 18 +- .../ouds/app/ui/tokens/TokenProperty.kt | 35 +-- .../orange/ouds/app/ui/tokens/TokensScreen.kt | 6 +- .../composable/DetailScreenHeader.kt | 4 +- .../app/ui/utilities/composable/LargeCard.kt | 4 +- .../com/orange/ouds/core/theme/OudsSizes.kt | 120 +++++---- .../com/orange/ouds/core/theme/OudsSpaces.kt | 234 +++++++++--------- .../ouds/theme/tokens/OudsSizeKeyToken.kt | 76 ++++++ .../ouds/theme/tokens/OudsSizeKeyTokens.kt | 74 ------ .../ouds/theme/tokens/OudsSpaceKeyToken.kt | 135 ++++++++++ .../ouds/theme/tokens/OudsSpaceKeyTokens.kt | 133 ---------- .../tokens/components/OudsButtonTokens.kt | 6 +- .../ouds/theme/whitelabel/WhiteLabelTheme.kt | 6 +- 15 files changed, 426 insertions(+), 439 deletions(-) create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyToken.kt delete mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyToken.kt delete mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt diff --git a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt index e2eb13ef..c632789d 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt @@ -57,7 +57,7 @@ import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.orange.ORANGE_THEME_NAME import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.orangecountry.OrangeCountryTheme -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.whitelabel.WhiteLabelTheme @Composable @@ -160,8 +160,8 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U Text( text = stringResource(R.string.app_themeDialog_label), modifier = Modifier - .padding(top = OudsSpaceFixedKeyToken.Medium.value, bottom = OudsSpaceFixedKeyToken.Short.value) - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value), + .padding(top = OudsSpaceKeyToken.Fixed.Medium.value, bottom = OudsSpaceKeyToken.Fixed.Short.value) + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value), style = MaterialTheme.typography.titleLarge ) themeManager.availableThemes.forEach { theme -> @@ -181,7 +181,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U }, role = Role.RadioButton ) - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value), + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value), verticalAlignment = Alignment.CenterVertically ) { RadioButton( @@ -191,7 +191,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U Text( text = theme.name, style = MaterialTheme.typography.bodyLarge, - modifier = Modifier.padding(start = OudsSpaceFixedKeyToken.Medium.value) + modifier = Modifier.padding(start = OudsSpaceKeyToken.Fixed.Medium.value) ) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt index 05091940..1b2d401c 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt @@ -32,7 +32,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.tokens.OudsGridKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken @Composable fun ComponentsScreen() { @@ -49,7 +49,7 @@ fun ComponentsScreen() { Box( modifier = Modifier - .padding(top = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .width(OudsGridKeyToken.Margin.value) .height(OudsGridKeyToken.ColumnGap.value) .background(OudsTheme.colorScheme.primary) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 363daa5a..e825582b 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -40,7 +40,7 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.OudsBorderStyle -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -48,7 +48,7 @@ import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: (Long) -> Unit) { Screen { - LazyColumn(contentPadding = PaddingValues(bottom = OudsSpaceFixedKeyToken.Medium.value)) { + LazyColumn(contentPadding = PaddingValues(bottom = OudsSpaceKeyToken.Fixed.Medium.value)) { item { DetailScreenHeader( descriptionRes = tokenCategory.descriptionRes, @@ -61,13 +61,13 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Row( modifier = Modifier .fillMaxWidth() - .padding(top = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .clickable { onSubcategoryClick(subcategory.id) } ) { Text( modifier = Modifier .fillMaxWidth() - .padding(OudsSpaceFixedKeyToken.Medium.value), + .padding(OudsSpaceKeyToken.Fixed.Medium.value), text = stringResource(id = subcategory.nameRes), maxLines = 1, overflow = TextOverflow.Ellipsis, @@ -77,13 +77,13 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: } } else { items(tokenCategory.properties) { tokenProperty -> - Spacer(modifier = Modifier.height(OudsSpaceFixedKeyToken.Medium.value)) + Spacer(modifier = Modifier.height(OudsSpaceKeyToken.Fixed.Medium.value)) tokenProperty.nameRes?.let { Text( modifier = Modifier .fillMaxWidth() - .padding(OudsSpaceFixedKeyToken.Medium.value), + .padding(OudsSpaceKeyToken.Fixed.Medium.value), text = stringResource(id = tokenProperty.nameRes), maxLines = 1, overflow = TextOverflow.Ellipsis, @@ -96,7 +96,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Column( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value, vertical = OudsSpaceFixedKeyToken.Shorter.value) + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value, vertical = OudsSpaceKeyToken.Fixed.Shorter.value) ) { TokenIllustration(tokenProperty = tokenProperty, token = token) Text( @@ -114,14 +114,14 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Row( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value, vertical = OudsSpaceFixedKeyToken.Shorter.value) + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value, vertical = OudsSpaceKeyToken.Fixed.Shorter.value) ) { TokenIllustration(tokenProperty = tokenProperty, token = token) Column( modifier = Modifier .weight(1f) - .padding(start = if (isTypographyProperty) OudsSpaceFixedKeyToken.None.value else OudsSpaceFixedKeyToken.Medium.value) + .padding(start = if (isTypographyProperty) OudsSpaceKeyToken.Fixed.None.value else OudsSpaceKeyToken.Fixed.Medium.value) ) { Text( modifier = Modifier.fillMaxWidth(), diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index e82e35cb..1a0de290 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -26,7 +26,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -41,21 +40,13 @@ import androidx.compose.ui.unit.dp import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.foundation.extensions.orElse -import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken -import com.orange.ouds.theme.tokens.OudsSizeIconDecorativeKeyToken -import com.orange.ouds.theme.tokens.OudsSizeIconWithTextKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceColumnGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceInsetKeyToken -import com.orange.ouds.theme.tokens.OudsSpacePaddingBlockKeyToken -import com.orange.ouds.theme.tokens.OudsSpacePaddingInlineKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceRowGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceScaledKeyToken +import com.orange.ouds.theme.tokens.OudsSizeKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -101,7 +92,7 @@ sealed class TokenProperty( Image(painter = painterResource(id = R.drawable.il_opacity_union), contentDescription = null) Box( modifier = Modifier - .padding(top = OudsSpaceFixedKeyToken.Medium.value, start = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceKeyToken.Fixed.Medium.value, start = OudsSpaceKeyToken.Fixed.Medium.value) .size(48.dp) .background(color = squareColor.copy(alpha = opacity)) .border(width = 1.dp, color = squareColor) @@ -112,7 +103,7 @@ sealed class TokenProperty( data object SizeIconDecorative : TokenProperty( nameRes = R.string.app_tokens_dimension_size_iconDecorative_label, - tokens = { OudsSizeIconDecorativeKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSizeKeyToken.IconDecorative.entries.map { Token(it.name, it.value) } } ) { @Composable fun Illustration(size: Dp) { @@ -129,14 +120,14 @@ sealed class TokenProperty( data object SizeIconWithLabel : TokenProperty( nameRes = R.string.app_tokens_dimension_size_iconWithLabel_label, - tokens = { OudsSizeIconWithTextKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSizeKeyToken.IconWithText.entries.map { Token(it.name, it.value) } } ) { @Composable fun Illustration(size: Dp, tokenName: String) { val label = tokenName.substringBefore("Size") Row( modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(OudsSpaceFixedKeyToken.Shorter.value), + horizontalArrangement = Arrangement.spacedBy(OudsSpaceKeyToken.Fixed.Shorter.value), verticalAlignment = Alignment.CenterVertically ) { Icon( @@ -158,17 +149,17 @@ sealed class TokenProperty( data object SpaceColumnGap : TokenProperty( nameRes = R.string.app_tokens_dimension_space_columnGap_label, - tokens = { OudsSpaceColumnGapKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.ColumnGap.entries.map { Token(it.name, it.value) } } ) data object SpaceFixed : TokenProperty( nameRes = R.string.app_tokens_dimension_space_fixed_label, - tokens = { OudsSpaceFixedKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.Fixed.entries.map { Token(it.name, it.value) } } ) data object SpacePaddingInline : TokenProperty( nameRes = R.string.app_tokens_dimension_space_paddingInline_label, - tokens = { OudsSpacePaddingInlineKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.PaddingInline.entries.map { Token(it.name, it.value) } } ) { @Composable fun Illustration(size: Dp, tokenName: String) = when { @@ -187,7 +178,7 @@ sealed class TokenProperty( data object SpacePaddingInset : TokenProperty( nameRes = R.string.app_tokens_dimension_space_paddingInset_label, - tokens = { OudsSpaceInsetKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.Inset.entries.map { Token(it.name, it.value) } } ) { @Composable @@ -211,17 +202,17 @@ sealed class TokenProperty( data object SpacePaddingStack : TokenProperty( nameRes = R.string.app_tokens_dimension_space_paddingStack_label, - tokens = { OudsSpacePaddingBlockKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.PaddingBlock.entries.map { Token(it.name, it.value) } } ) data object SpaceRowGap : TokenProperty( nameRes = R.string.app_tokens_dimension_space_rowGap_label, - tokens = { OudsSpaceRowGapKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.RowGap.entries.map { Token(it.name, it.value) } } ) data object SpaceScaled : TokenProperty( nameRes = R.string.app_tokens_dimension_space_scaled_label, - tokens = { OudsSpaceScaledKeyToken.entries.map { Token(it.name, it.value) } } + tokens = { OudsSpaceKeyToken.Scaled.entries.map { Token(it.name, it.value) } } ) data object Typography : TokenProperty(nameRes = null, tokens = { OudsTypographyKeyToken.entries.map { Token(it.name, it.value) } }) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt index c4fd6daf..e7d312c0 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokensScreen.kt @@ -26,7 +26,7 @@ import com.orange.ouds.app.ui.utilities.composable.Screen import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken @Composable fun TokensScreen(onTokenCategoryClick: (Long) -> Unit) { @@ -43,8 +43,8 @@ private fun TokensScreen(tokenCategories: List, onTokenCategoryCl modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()) - .padding(OudsSpaceFixedKeyToken.Medium.value), - verticalArrangement = Arrangement.spacedBy(OudsSpaceFixedKeyToken.Medium.value) + .padding(OudsSpaceKeyToken.Fixed.Medium.value), + verticalArrangement = Arrangement.spacedBy(OudsSpaceKeyToken.Fixed.Medium.value) ) { tokenCategories.forEach { token -> LargeCard( diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt index c5a51e17..3e649f77 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt @@ -32,7 +32,7 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -54,7 +54,7 @@ fun DetailScreenHeader( ) DetailScreenDescription( - modifier = Modifier.padding(all = OudsSpaceFixedKeyToken.Medium.value), + modifier = Modifier.padding(all = OudsSpaceKeyToken.Fixed.Medium.value), descriptionRes = descriptionRes ) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt index 163c0faa..37bd6af4 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt @@ -32,7 +32,7 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -59,7 +59,7 @@ fun LargeCard( contentScale = ContentScale.None ) Column( - modifier = Modifier.padding(OudsSpaceFixedKeyToken.Medium.value) + modifier = Modifier.padding(OudsSpaceKeyToken.Fixed.Medium.value) ) { Text( text = title, diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsSizes.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsSizes.kt index b05b004c..40e7a888 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsSizes.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsSizes.kt @@ -20,9 +20,7 @@ import androidx.compose.ui.unit.dp import com.orange.ouds.theme.OudsAdaptiveTokenValue import com.orange.ouds.theme.OudsAdaptiveWindowType import com.orange.ouds.theme.currentWindowWidth -import com.orange.ouds.theme.tokens.OudsSizeIconDecorativeKeyToken -import com.orange.ouds.theme.tokens.OudsSizeIconWithTextKeyToken -import com.orange.ouds.theme.tokens.OudsSizeMaxWidthTypeKeyToken +import com.orange.ouds.theme.tokens.OudsSizeKeyToken import com.orange.ouds.theme.tokens.semantic.OudsSizeSemanticTokens data class OudsSizes( @@ -260,56 +258,56 @@ fun OudsSizeSemanticTokens.getSizes() = OudsSizes( ) @Stable -fun OudsSizes.fromToken(token: OudsSizeIconDecorativeKeyToken): Dp { +fun OudsSizes.fromToken(token: OudsSizeKeyToken.IconDecorative): Dp { return when (token) { - OudsSizeIconDecorativeKeyToken.Shortest -> iconDecorativeShortest - OudsSizeIconDecorativeKeyToken.Shorter -> iconDecorativeShorter - OudsSizeIconDecorativeKeyToken.Short -> iconDecorativeShort - OudsSizeIconDecorativeKeyToken.Medium -> iconDecorativeMedium - OudsSizeIconDecorativeKeyToken.Tall -> iconDecorativeTall - OudsSizeIconDecorativeKeyToken.Taller -> iconDecorativeTaller - OudsSizeIconDecorativeKeyToken.Tallest -> iconDecorativeTallest + OudsSizeKeyToken.IconDecorative.Shortest -> iconDecorativeShortest + OudsSizeKeyToken.IconDecorative.Shorter -> iconDecorativeShorter + OudsSizeKeyToken.IconDecorative.Short -> iconDecorativeShort + OudsSizeKeyToken.IconDecorative.Medium -> iconDecorativeMedium + OudsSizeKeyToken.IconDecorative.Tall -> iconDecorativeTall + OudsSizeKeyToken.IconDecorative.Taller -> iconDecorativeTaller + OudsSizeKeyToken.IconDecorative.Tallest -> iconDecorativeTallest } } @Stable -fun OudsSizes.fromToken(token: OudsSizeIconWithTextKeyToken, adaptiveWindowType: OudsAdaptiveWindowType): Dp { +fun OudsSizes.fromToken(token: OudsSizeKeyToken.IconWithText, adaptiveWindowType: OudsAdaptiveWindowType): Dp { val dimensionSizeIconWithTextValue: Any = when (token) { - OudsSizeIconWithTextKeyToken.HeadingSmallSizeShort -> iconWithHeadingSmallSizeShort - OudsSizeIconWithTextKeyToken.HeadingSmallSizeMedium -> iconWithHeadingSmallSizeMedium - OudsSizeIconWithTextKeyToken.HeadingSmallSizeTall -> iconWithHeadingSmallSizeTall - OudsSizeIconWithTextKeyToken.HeadingMediumSizeShort -> iconWithHeadingMediumSizeShort - OudsSizeIconWithTextKeyToken.HeadingMediumSizeMedium -> iconWithHeadingMediumSizeMedium - OudsSizeIconWithTextKeyToken.HeadingMediumSizeTall -> iconWithHeadingMediumSizeTall - OudsSizeIconWithTextKeyToken.HeadingLargeSizeShort -> iconWithHeadingLargeSizeShort - OudsSizeIconWithTextKeyToken.HeadingLargeSizeMedium -> iconWithBodyLargeSizeMedium - OudsSizeIconWithTextKeyToken.HeadingLargeSizeTall -> iconWithHeadingLargeSizeTall - OudsSizeIconWithTextKeyToken.HeadingExtraLargeSizeShort -> iconWithHeadingExtraLargeSizeShort - OudsSizeIconWithTextKeyToken.HeadingExtraLargeSizeMedium -> iconWithHeadingExtraLargeSizeMedium - OudsSizeIconWithTextKeyToken.HeadingExtraLargeSizeTall -> iconWithHeadingExtraLargeSizeTall - OudsSizeIconWithTextKeyToken.LabelLargeSizeShorter -> iconWithLabelLargeSizeShorter - OudsSizeIconWithTextKeyToken.LabelLargeSizeShort -> iconWithLabelLargeSizeShort - OudsSizeIconWithTextKeyToken.LabelLargeSizeMedium -> iconWithLabelLargeSizeMedium - OudsSizeIconWithTextKeyToken.LabelLargeSizeTall -> iconWithLabelLargeSizeTall - OudsSizeIconWithTextKeyToken.LabelLargeSizeTaller -> iconWithLabelLargeSizeTaller - OudsSizeIconWithTextKeyToken.LabelMediumSizeShort -> iconWithLabelMediumSizeShort - OudsSizeIconWithTextKeyToken.LabelMediumSizeMedium -> iconWithLabelMediumSizeMedium - OudsSizeIconWithTextKeyToken.LabelMediumSizeTall -> iconWithLabelMediumSizeTall - OudsSizeIconWithTextKeyToken.LabelSmallSizeShort -> iconWithLabelSmallSizeShort - OudsSizeIconWithTextKeyToken.LabelSmallSizeMedium -> iconWithLabelSmallSizeMedium - OudsSizeIconWithTextKeyToken.LabelSmallSizeTall -> iconWithLabelSmallSizeTall - OudsSizeIconWithTextKeyToken.LabelExtraLargeSizeShort -> iconWithLabelExtraLargeSizeShort - OudsSizeIconWithTextKeyToken.LabelExtraLargeSizeMedium -> iconWithLabelExtraLargeSizeMedium - OudsSizeIconWithTextKeyToken.LabelExtraLargeSizeTall -> iconWithLabelExtraLargeSizeTall - OudsSizeIconWithTextKeyToken.BodySmallSizeShort -> iconWithBodySmallSizeShort - OudsSizeIconWithTextKeyToken.BodySmallSizeMedium -> iconWithBodySmallSizeMedium - OudsSizeIconWithTextKeyToken.BodySmallSizeTall -> iconWithBodySmallSizeTall - OudsSizeIconWithTextKeyToken.BodyMediumSizeShort -> iconWithBodyMediumSizeShort - OudsSizeIconWithTextKeyToken.BodyMediumSizeMedium -> iconWithBodyMediumSizeMedium - OudsSizeIconWithTextKeyToken.BodyMediumSizeTall -> iconWithBodyMediumSizeTall - OudsSizeIconWithTextKeyToken.BodyLargeSizeShort -> iconWithBodyLargeSizeShort - OudsSizeIconWithTextKeyToken.BodyLargeSizeMedium -> iconWithBodyLargeSizeMedium - OudsSizeIconWithTextKeyToken.BodyLargeSizeTall -> iconWithBodyLargeSizeTall + OudsSizeKeyToken.IconWithText.HeadingSmallSizeShort -> iconWithHeadingSmallSizeShort + OudsSizeKeyToken.IconWithText.HeadingSmallSizeMedium -> iconWithHeadingSmallSizeMedium + OudsSizeKeyToken.IconWithText.HeadingSmallSizeTall -> iconWithHeadingSmallSizeTall + OudsSizeKeyToken.IconWithText.HeadingMediumSizeShort -> iconWithHeadingMediumSizeShort + OudsSizeKeyToken.IconWithText.HeadingMediumSizeMedium -> iconWithHeadingMediumSizeMedium + OudsSizeKeyToken.IconWithText.HeadingMediumSizeTall -> iconWithHeadingMediumSizeTall + OudsSizeKeyToken.IconWithText.HeadingLargeSizeShort -> iconWithHeadingLargeSizeShort + OudsSizeKeyToken.IconWithText.HeadingLargeSizeMedium -> iconWithBodyLargeSizeMedium + OudsSizeKeyToken.IconWithText.HeadingLargeSizeTall -> iconWithHeadingLargeSizeTall + OudsSizeKeyToken.IconWithText.HeadingExtraLargeSizeShort -> iconWithHeadingExtraLargeSizeShort + OudsSizeKeyToken.IconWithText.HeadingExtraLargeSizeMedium -> iconWithHeadingExtraLargeSizeMedium + OudsSizeKeyToken.IconWithText.HeadingExtraLargeSizeTall -> iconWithHeadingExtraLargeSizeTall + OudsSizeKeyToken.IconWithText.LabelLargeSizeShorter -> iconWithLabelLargeSizeShorter + OudsSizeKeyToken.IconWithText.LabelLargeSizeShort -> iconWithLabelLargeSizeShort + OudsSizeKeyToken.IconWithText.LabelLargeSizeMedium -> iconWithLabelLargeSizeMedium + OudsSizeKeyToken.IconWithText.LabelLargeSizeTall -> iconWithLabelLargeSizeTall + OudsSizeKeyToken.IconWithText.LabelLargeSizeTaller -> iconWithLabelLargeSizeTaller + OudsSizeKeyToken.IconWithText.LabelMediumSizeShort -> iconWithLabelMediumSizeShort + OudsSizeKeyToken.IconWithText.LabelMediumSizeMedium -> iconWithLabelMediumSizeMedium + OudsSizeKeyToken.IconWithText.LabelMediumSizeTall -> iconWithLabelMediumSizeTall + OudsSizeKeyToken.IconWithText.LabelSmallSizeShort -> iconWithLabelSmallSizeShort + OudsSizeKeyToken.IconWithText.LabelSmallSizeMedium -> iconWithLabelSmallSizeMedium + OudsSizeKeyToken.IconWithText.LabelSmallSizeTall -> iconWithLabelSmallSizeTall + OudsSizeKeyToken.IconWithText.LabelExtraLargeSizeShort -> iconWithLabelExtraLargeSizeShort + OudsSizeKeyToken.IconWithText.LabelExtraLargeSizeMedium -> iconWithLabelExtraLargeSizeMedium + OudsSizeKeyToken.IconWithText.LabelExtraLargeSizeTall -> iconWithLabelExtraLargeSizeTall + OudsSizeKeyToken.IconWithText.BodySmallSizeShort -> iconWithBodySmallSizeShort + OudsSizeKeyToken.IconWithText.BodySmallSizeMedium -> iconWithBodySmallSizeMedium + OudsSizeKeyToken.IconWithText.BodySmallSizeTall -> iconWithBodySmallSizeTall + OudsSizeKeyToken.IconWithText.BodyMediumSizeShort -> iconWithBodyMediumSizeShort + OudsSizeKeyToken.IconWithText.BodyMediumSizeMedium -> iconWithBodyMediumSizeMedium + OudsSizeKeyToken.IconWithText.BodyMediumSizeTall -> iconWithBodyMediumSizeTall + OudsSizeKeyToken.IconWithText.BodyLargeSizeShort -> iconWithBodyLargeSizeShort + OudsSizeKeyToken.IconWithText.BodyLargeSizeMedium -> iconWithBodyLargeSizeMedium + OudsSizeKeyToken.IconWithText.BodyLargeSizeTall -> iconWithBodyLargeSizeTall } return if (dimensionSizeIconWithTextValue is OudsAdaptiveTokenValue<*>) { @@ -320,18 +318,18 @@ fun OudsSizes.fromToken(token: OudsSizeIconWithTextKeyToken, adaptiveWindowType: } @Stable -fun OudsSizes.fromToken(token: OudsSizeMaxWidthTypeKeyToken, adaptiveWindowType: OudsAdaptiveWindowType): Dp { +fun OudsSizes.fromToken(token: OudsSizeKeyToken.MaxWidthType, adaptiveWindowType: OudsAdaptiveWindowType): Dp { val dimensionMaxWidthTypeToken = when (token) { - OudsSizeMaxWidthTypeKeyToken.DisplaySmall -> maxWidthTypeDisplaySmall - OudsSizeMaxWidthTypeKeyToken.DisplayMedium -> maxWidthTypeDisplayMedium - OudsSizeMaxWidthTypeKeyToken.DisplayLarge -> maxWidthTypeDisplayLarge - OudsSizeMaxWidthTypeKeyToken.HeadingSmall -> maxWidthTypeHeadingSmall - OudsSizeMaxWidthTypeKeyToken.HeadingMedium -> maxWidthTypeHeadingMedium - OudsSizeMaxWidthTypeKeyToken.HeadingLarge -> maxWidthTypeHeadingLarge - OudsSizeMaxWidthTypeKeyToken.HeadingExtraLarge -> maxWidthTypeHeadingExtraLarge - OudsSizeMaxWidthTypeKeyToken.BodySmall -> maxWidthTypeBodySmall - OudsSizeMaxWidthTypeKeyToken.BodyMedium -> maxWidthTypeBodyMedium - OudsSizeMaxWidthTypeKeyToken.BodyLarge -> maxWidthTypeBodyLarge + OudsSizeKeyToken.MaxWidthType.DisplaySmall -> maxWidthTypeDisplaySmall + OudsSizeKeyToken.MaxWidthType.DisplayMedium -> maxWidthTypeDisplayMedium + OudsSizeKeyToken.MaxWidthType.DisplayLarge -> maxWidthTypeDisplayLarge + OudsSizeKeyToken.MaxWidthType.HeadingSmall -> maxWidthTypeHeadingSmall + OudsSizeKeyToken.MaxWidthType.HeadingMedium -> maxWidthTypeHeadingMedium + OudsSizeKeyToken.MaxWidthType.HeadingLarge -> maxWidthTypeHeadingLarge + OudsSizeKeyToken.MaxWidthType.HeadingExtraLarge -> maxWidthTypeHeadingExtraLarge + OudsSizeKeyToken.MaxWidthType.BodySmall -> maxWidthTypeBodySmall + OudsSizeKeyToken.MaxWidthType.BodyMedium -> maxWidthTypeBodyMedium + OudsSizeKeyToken.MaxWidthType.BodyLarge -> maxWidthTypeBodyLarge } return when (adaptiveWindowType) { @@ -344,7 +342,7 @@ fun OudsSizes.fromToken(token: OudsSizeMaxWidthTypeKeyToken, adaptiveWindowType: /** * Converts an OUDS decorative icon size token to the local decorative icon size value provided by the theme. */ -val OudsSizeIconDecorativeKeyToken.value: Dp +val OudsSizeKeyToken.IconDecorative.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.sizes.fromToken(this) @@ -352,13 +350,13 @@ val OudsSizeIconDecorativeKeyToken.value: Dp /** * Converts an OUDS icon size with typography token to the local icon size with typography value provided by the theme depending on the window size. */ -val OudsSizeIconWithTextKeyToken.value: Dp +val OudsSizeKeyToken.IconWithText.value: Dp @Composable get() = OudsTheme.sizes.fromToken(this, OudsAdaptiveWindowType.fromWindowWidth(currentWindowWidth())) /** * Converts an OUDS max width with typography token to the local max width with typography value provided by the theme depending on the window size. */ -val OudsSizeMaxWidthTypeKeyToken.value: Dp +val OudsSizeKeyToken.MaxWidthType.value: Dp @Composable get() = OudsTheme.sizes.fromToken(this, OudsAdaptiveWindowType.fromWindowWidth(currentWindowWidth())) \ No newline at end of file diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt index 3286f1cd..5612623b 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsSpaces.kt @@ -20,13 +20,7 @@ import androidx.compose.ui.unit.dp import com.orange.ouds.theme.OudsAdaptiveTokenValue import com.orange.ouds.theme.OudsAdaptiveWindowType import com.orange.ouds.theme.currentWindowWidth -import com.orange.ouds.theme.tokens.OudsSpaceColumnGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceInsetKeyToken -import com.orange.ouds.theme.tokens.OudsSpacePaddingBlockKeyToken -import com.orange.ouds.theme.tokens.OudsSpacePaddingInlineKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceRowGapKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceScaledKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.semantic.OudsSpaceSemanticTokens data class OudsSpaces( @@ -274,36 +268,36 @@ fun OudsSpaceSemanticTokens.getSpaces() = OudsSpaces( ) @Stable -fun OudsSpaces.fromToken(token: OudsSpaceFixedKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.Fixed): Dp { return when (token) { - OudsSpaceFixedKeyToken.None -> fixedNone - OudsSpaceFixedKeyToken.Smash -> fixedSmash - OudsSpaceFixedKeyToken.Shortest -> fixedShortest - OudsSpaceFixedKeyToken.Shorter -> fixedShorter - OudsSpaceFixedKeyToken.Short -> fixedShort - OudsSpaceFixedKeyToken.Medium -> fixedMedium - OudsSpaceFixedKeyToken.Tall -> fixedTall - OudsSpaceFixedKeyToken.Taller -> fixedTaller - OudsSpaceFixedKeyToken.Tallest -> fixedTallest - OudsSpaceFixedKeyToken.Spacious -> fixedSpacious - OudsSpaceFixedKeyToken.Huge -> fixedHuge - OudsSpaceFixedKeyToken.Jumbo -> fixedJumbo + OudsSpaceKeyToken.Fixed.None -> fixedNone + OudsSpaceKeyToken.Fixed.Smash -> fixedSmash + OudsSpaceKeyToken.Fixed.Shortest -> fixedShortest + OudsSpaceKeyToken.Fixed.Shorter -> fixedShorter + OudsSpaceKeyToken.Fixed.Short -> fixedShort + OudsSpaceKeyToken.Fixed.Medium -> fixedMedium + OudsSpaceKeyToken.Fixed.Tall -> fixedTall + OudsSpaceKeyToken.Fixed.Taller -> fixedTaller + OudsSpaceKeyToken.Fixed.Tallest -> fixedTallest + OudsSpaceKeyToken.Fixed.Spacious -> fixedSpacious + OudsSpaceKeyToken.Fixed.Huge -> fixedHuge + OudsSpaceKeyToken.Fixed.Jumbo -> fixedJumbo } } @Stable -fun OudsSpaces.fromToken(token: OudsSpaceScaledKeyToken, adaptiveWindowType: OudsAdaptiveWindowType): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.Scaled, adaptiveWindowType: OudsAdaptiveWindowType): Dp { val dimensionAdaptableSpaceToken = when (token) { - OudsSpaceScaledKeyToken.None -> scaledNone - OudsSpaceScaledKeyToken.Smash -> scaledSmash - OudsSpaceScaledKeyToken.Shortest -> scaledShortest - OudsSpaceScaledKeyToken.Shorter -> scaledShorter - OudsSpaceScaledKeyToken.Short -> scaledShort - OudsSpaceScaledKeyToken.Medium -> scaledMedium - OudsSpaceScaledKeyToken.Tall -> scaledTall - OudsSpaceScaledKeyToken.Taller -> scaledTaller - OudsSpaceScaledKeyToken.Tallest -> scaledTallest - OudsSpaceScaledKeyToken.Spacious -> scaledSpacious + OudsSpaceKeyToken.Scaled.None -> scaledNone + OudsSpaceKeyToken.Scaled.Smash -> scaledSmash + OudsSpaceKeyToken.Scaled.Shortest -> scaledShortest + OudsSpaceKeyToken.Scaled.Shorter -> scaledShorter + OudsSpaceKeyToken.Scaled.Short -> scaledShort + OudsSpaceKeyToken.Scaled.Medium -> scaledMedium + OudsSpaceKeyToken.Scaled.Tall -> scaledTall + OudsSpaceKeyToken.Scaled.Taller -> scaledTaller + OudsSpaceKeyToken.Scaled.Tallest -> scaledTallest + OudsSpaceKeyToken.Scaled.Spacious -> scaledSpacious } return when (adaptiveWindowType) { @@ -314,116 +308,116 @@ fun OudsSpaces.fromToken(token: OudsSpaceScaledKeyToken, adaptiveWindowType: Oud } @Stable -fun OudsSpaces.fromToken(token: OudsSpacePaddingInlineKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.PaddingInline): Dp { return when (token) { - OudsSpacePaddingInlineKeyToken.None -> paddingInlineNone - OudsSpacePaddingInlineKeyToken.Shorter -> paddingInlineShorter - OudsSpacePaddingInlineKeyToken.Short -> paddingInlineShort - OudsSpacePaddingInlineKeyToken.Medium -> paddingInlineMedium - OudsSpacePaddingInlineKeyToken.Tall -> paddingInlineTall - OudsSpacePaddingInlineKeyToken.Taller -> paddingInlineTaller - OudsSpacePaddingInlineKeyToken.Tallest -> paddingInlineTallest - OudsSpacePaddingInlineKeyToken.WithIconNone -> paddingInlineWithIconNone - OudsSpacePaddingInlineKeyToken.WithIconShortest -> paddingInlineWithIconShortest - OudsSpacePaddingInlineKeyToken.WithIconShorter -> paddingInlineWithIconShorter - OudsSpacePaddingInlineKeyToken.WithIconShort -> paddingInlineWithIconShort - OudsSpacePaddingInlineKeyToken.WithIconMedium -> paddingInlineWithIconMedium - OudsSpacePaddingInlineKeyToken.WithIconTall -> paddingInlineWithIconTall - OudsSpacePaddingInlineKeyToken.WithIconTaller -> paddingInlineWithIconTaller - OudsSpacePaddingInlineKeyToken.WithIconTallest -> paddingInlineWithIconTallest - OudsSpacePaddingInlineKeyToken.WithArrowNone -> paddingInlineWithArrowNone - OudsSpacePaddingInlineKeyToken.WithArrowShortest -> paddingInlineWithArrowShortest - OudsSpacePaddingInlineKeyToken.WithArrowShorter -> paddingInlineWithArrowShorter - OudsSpacePaddingInlineKeyToken.WithArrowShort -> paddingInlineWithArrowShort - OudsSpacePaddingInlineKeyToken.WithArrowMedium -> paddingInlineWithArrowMedium - OudsSpacePaddingInlineKeyToken.WithArrowTall -> paddingInlineWithArrowTall - OudsSpacePaddingInlineKeyToken.WithArrowTaller -> paddingInlineWithArrowTaller - OudsSpacePaddingInlineKeyToken.WithArrowTallest -> paddingInlineWithArrowTallest + OudsSpaceKeyToken.PaddingInline.None -> paddingInlineNone + OudsSpaceKeyToken.PaddingInline.Shorter -> paddingInlineShorter + OudsSpaceKeyToken.PaddingInline.Short -> paddingInlineShort + OudsSpaceKeyToken.PaddingInline.Medium -> paddingInlineMedium + OudsSpaceKeyToken.PaddingInline.Tall -> paddingInlineTall + OudsSpaceKeyToken.PaddingInline.Taller -> paddingInlineTaller + OudsSpaceKeyToken.PaddingInline.Tallest -> paddingInlineTallest + OudsSpaceKeyToken.PaddingInline.WithIconNone -> paddingInlineWithIconNone + OudsSpaceKeyToken.PaddingInline.WithIconShortest -> paddingInlineWithIconShortest + OudsSpaceKeyToken.PaddingInline.WithIconShorter -> paddingInlineWithIconShorter + OudsSpaceKeyToken.PaddingInline.WithIconShort -> paddingInlineWithIconShort + OudsSpaceKeyToken.PaddingInline.WithIconMedium -> paddingInlineWithIconMedium + OudsSpaceKeyToken.PaddingInline.WithIconTall -> paddingInlineWithIconTall + OudsSpaceKeyToken.PaddingInline.WithIconTaller -> paddingInlineWithIconTaller + OudsSpaceKeyToken.PaddingInline.WithIconTallest -> paddingInlineWithIconTallest + OudsSpaceKeyToken.PaddingInline.WithArrowNone -> paddingInlineWithArrowNone + OudsSpaceKeyToken.PaddingInline.WithArrowShortest -> paddingInlineWithArrowShortest + OudsSpaceKeyToken.PaddingInline.WithArrowShorter -> paddingInlineWithArrowShorter + OudsSpaceKeyToken.PaddingInline.WithArrowShort -> paddingInlineWithArrowShort + OudsSpaceKeyToken.PaddingInline.WithArrowMedium -> paddingInlineWithArrowMedium + OudsSpaceKeyToken.PaddingInline.WithArrowTall -> paddingInlineWithArrowTall + OudsSpaceKeyToken.PaddingInline.WithArrowTaller -> paddingInlineWithArrowTaller + OudsSpaceKeyToken.PaddingInline.WithArrowTallest -> paddingInlineWithArrowTallest } } @Stable -fun OudsSpaces.fromToken(token: OudsSpacePaddingBlockKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.PaddingBlock): Dp { return when (token) { - OudsSpacePaddingBlockKeyToken.None -> paddingBlockNone - OudsSpacePaddingBlockKeyToken.Shorter -> paddingBlockShorter - OudsSpacePaddingBlockKeyToken.Short -> paddingBlockShort - OudsSpacePaddingBlockKeyToken.Medium -> paddingBlockMedium - OudsSpacePaddingBlockKeyToken.Tall -> paddingBlockTall - OudsSpacePaddingBlockKeyToken.Taller -> paddingBlockTaller - OudsSpacePaddingBlockKeyToken.Tallest -> paddingBlockTallest - OudsSpacePaddingBlockKeyToken.WithIconNone -> paddingBlockWithIconNone - OudsSpacePaddingBlockKeyToken.WithIconShortest -> paddingBlockWithIconShortest - OudsSpacePaddingBlockKeyToken.WithIconShorter -> paddingBlockWithIconShorter - OudsSpacePaddingBlockKeyToken.WithIconShort -> paddingBlockWithIconShort - OudsSpacePaddingBlockKeyToken.WithIconMedium -> paddingBlockWithIconMedium - OudsSpacePaddingBlockKeyToken.WithIconTall -> paddingBlockWithIconTall - OudsSpacePaddingBlockKeyToken.WithIconTaller -> paddingBlockWithIconTaller + OudsSpaceKeyToken.PaddingBlock.None -> paddingBlockNone + OudsSpaceKeyToken.PaddingBlock.Shorter -> paddingBlockShorter + OudsSpaceKeyToken.PaddingBlock.Short -> paddingBlockShort + OudsSpaceKeyToken.PaddingBlock.Medium -> paddingBlockMedium + OudsSpaceKeyToken.PaddingBlock.Tall -> paddingBlockTall + OudsSpaceKeyToken.PaddingBlock.Taller -> paddingBlockTaller + OudsSpaceKeyToken.PaddingBlock.Tallest -> paddingBlockTallest + OudsSpaceKeyToken.PaddingBlock.WithIconNone -> paddingBlockWithIconNone + OudsSpaceKeyToken.PaddingBlock.WithIconShortest -> paddingBlockWithIconShortest + OudsSpaceKeyToken.PaddingBlock.WithIconShorter -> paddingBlockWithIconShorter + OudsSpaceKeyToken.PaddingBlock.WithIconShort -> paddingBlockWithIconShort + OudsSpaceKeyToken.PaddingBlock.WithIconMedium -> paddingBlockWithIconMedium + OudsSpaceKeyToken.PaddingBlock.WithIconTall -> paddingBlockWithIconTall + OudsSpaceKeyToken.PaddingBlock.WithIconTaller -> paddingBlockWithIconTaller } } @Stable -fun OudsSpaces.fromToken(token: OudsSpaceInsetKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.Inset): Dp { return when (token) { - OudsSpaceInsetKeyToken.None -> insetNone - OudsSpaceInsetKeyToken.Smash -> insetSmash - OudsSpaceInsetKeyToken.Shortest -> insetShortest - OudsSpaceInsetKeyToken.Shorter -> insetShorter - OudsSpaceInsetKeyToken.Short -> insetShort - OudsSpaceInsetKeyToken.Medium -> insetMedium - OudsSpaceInsetKeyToken.Tall -> insetTall - OudsSpaceInsetKeyToken.Taller -> insetTaller - OudsSpaceInsetKeyToken.Tallest -> insetTallest - OudsSpaceInsetKeyToken.Spacious -> insetSpacious + OudsSpaceKeyToken.Inset.None -> insetNone + OudsSpaceKeyToken.Inset.Smash -> insetSmash + OudsSpaceKeyToken.Inset.Shortest -> insetShortest + OudsSpaceKeyToken.Inset.Shorter -> insetShorter + OudsSpaceKeyToken.Inset.Short -> insetShort + OudsSpaceKeyToken.Inset.Medium -> insetMedium + OudsSpaceKeyToken.Inset.Tall -> insetTall + OudsSpaceKeyToken.Inset.Taller -> insetTaller + OudsSpaceKeyToken.Inset.Tallest -> insetTallest + OudsSpaceKeyToken.Inset.Spacious -> insetSpacious } } @Stable -fun OudsSpaces.fromToken(token: OudsSpaceColumnGapKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.ColumnGap): Dp { return when (token) { - OudsSpaceColumnGapKeyToken.None -> columnGapNone - OudsSpaceColumnGapKeyToken.Shorter -> columnGapShorter - OudsSpaceColumnGapKeyToken.Short -> columnGapShort - OudsSpaceColumnGapKeyToken.Medium -> columnGapMedium - OudsSpaceColumnGapKeyToken.Tall -> columnGapTall - OudsSpaceColumnGapKeyToken.Taller -> columnGapTaller - OudsSpaceColumnGapKeyToken.WithIconNone -> columnGapWithIconNone - OudsSpaceColumnGapKeyToken.WithIconShortest -> columnGapWithIconShortest - OudsSpaceColumnGapKeyToken.WithIconShorter -> columnGapWithIconShorter - OudsSpaceColumnGapKeyToken.WithIconShort -> columnGapWithIconShort - OudsSpaceColumnGapKeyToken.WithIconMedium -> columnGapWithIconMedium - OudsSpaceColumnGapKeyToken.WithIconTall -> columnGapWithIconTall - OudsSpaceColumnGapKeyToken.WithArrowNone -> columnGapWithArrowNone - OudsSpaceColumnGapKeyToken.WithArrowShortest -> columnGapWithArrowShortest - OudsSpaceColumnGapKeyToken.WithArrowShorter -> columnGapWithArrowShorter - OudsSpaceColumnGapKeyToken.WithArrowShort -> columnGapWithArrowShort - OudsSpaceColumnGapKeyToken.WithArrowMedium -> columnGapWithArrowMedium - OudsSpaceColumnGapKeyToken.WithArrowTall -> columnGapWithArrowTall + OudsSpaceKeyToken.ColumnGap.None -> columnGapNone + OudsSpaceKeyToken.ColumnGap.Shorter -> columnGapShorter + OudsSpaceKeyToken.ColumnGap.Short -> columnGapShort + OudsSpaceKeyToken.ColumnGap.Medium -> columnGapMedium + OudsSpaceKeyToken.ColumnGap.Tall -> columnGapTall + OudsSpaceKeyToken.ColumnGap.Taller -> columnGapTaller + OudsSpaceKeyToken.ColumnGap.WithIconNone -> columnGapWithIconNone + OudsSpaceKeyToken.ColumnGap.WithIconShortest -> columnGapWithIconShortest + OudsSpaceKeyToken.ColumnGap.WithIconShorter -> columnGapWithIconShorter + OudsSpaceKeyToken.ColumnGap.WithIconShort -> columnGapWithIconShort + OudsSpaceKeyToken.ColumnGap.WithIconMedium -> columnGapWithIconMedium + OudsSpaceKeyToken.ColumnGap.WithIconTall -> columnGapWithIconTall + OudsSpaceKeyToken.ColumnGap.WithArrowNone -> columnGapWithArrowNone + OudsSpaceKeyToken.ColumnGap.WithArrowShortest -> columnGapWithArrowShortest + OudsSpaceKeyToken.ColumnGap.WithArrowShorter -> columnGapWithArrowShorter + OudsSpaceKeyToken.ColumnGap.WithArrowShort -> columnGapWithArrowShort + OudsSpaceKeyToken.ColumnGap.WithArrowMedium -> columnGapWithArrowMedium + OudsSpaceKeyToken.ColumnGap.WithArrowTall -> columnGapWithArrowTall } } @Stable -fun OudsSpaces.fromToken(token: OudsSpaceRowGapKeyToken): Dp { +fun OudsSpaces.fromToken(token: OudsSpaceKeyToken.RowGap): Dp { return when (token) { - OudsSpaceRowGapKeyToken.None -> rowGapNone - OudsSpaceRowGapKeyToken.Shortest -> rowGapShortest - OudsSpaceRowGapKeyToken.Shorter -> rowGapShorter - OudsSpaceRowGapKeyToken.Short -> rowGapShort - OudsSpaceRowGapKeyToken.Medium -> rowGapMedium - OudsSpaceRowGapKeyToken.Tall -> rowGapTall - OudsSpaceRowGapKeyToken.WithIconNone -> rowGapWithIconNone - OudsSpaceRowGapKeyToken.WithIconShortest -> rowGapWithIconShortest - OudsSpaceRowGapKeyToken.WithIconShorter -> rowGapWithIconShorter - OudsSpaceRowGapKeyToken.WithIconShort -> rowGapWithIconShort - OudsSpaceRowGapKeyToken.WithIconMedium -> rowGapWithIconMedium - OudsSpaceRowGapKeyToken.WithIconTall -> rowGapWithIconTall + OudsSpaceKeyToken.RowGap.None -> rowGapNone + OudsSpaceKeyToken.RowGap.Shortest -> rowGapShortest + OudsSpaceKeyToken.RowGap.Shorter -> rowGapShorter + OudsSpaceKeyToken.RowGap.Short -> rowGapShort + OudsSpaceKeyToken.RowGap.Medium -> rowGapMedium + OudsSpaceKeyToken.RowGap.Tall -> rowGapTall + OudsSpaceKeyToken.RowGap.WithIconNone -> rowGapWithIconNone + OudsSpaceKeyToken.RowGap.WithIconShortest -> rowGapWithIconShortest + OudsSpaceKeyToken.RowGap.WithIconShorter -> rowGapWithIconShorter + OudsSpaceKeyToken.RowGap.WithIconShort -> rowGapWithIconShort + OudsSpaceKeyToken.RowGap.WithIconMedium -> rowGapWithIconMedium + OudsSpaceKeyToken.RowGap.WithIconTall -> rowGapWithIconTall } } /** * Converts an OUDS column gap space token to the local column gap space value provided by the theme. */ -val OudsSpaceColumnGapKeyToken.value: Dp +val OudsSpaceKeyToken.ColumnGap.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.spaces.fromToken(this) @@ -431,7 +425,7 @@ val OudsSpaceColumnGapKeyToken.value: Dp /** * Converts an OUDS fixed space token to the local space value provided by the theme. */ -val OudsSpaceFixedKeyToken.value: Dp +val OudsSpaceKeyToken.Fixed.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.spaces.fromToken(this) @@ -439,7 +433,7 @@ val OudsSpaceFixedKeyToken.value: Dp /** * Converts an OUDS block padding token to the local block padding value provided by the theme. */ -val OudsSpacePaddingBlockKeyToken.value: Dp +val OudsSpaceKeyToken.PaddingBlock.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.spaces.fromToken(this) @@ -447,7 +441,7 @@ val OudsSpacePaddingBlockKeyToken.value: Dp /** * Converts an OUDS inline padding token to the local inline padding value provided by the theme. */ -val OudsSpacePaddingInlineKeyToken.value: Dp +val OudsSpaceKeyToken.PaddingInline.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.spaces.fromToken(this) @@ -455,7 +449,7 @@ val OudsSpacePaddingInlineKeyToken.value: Dp /** * Converts an OUDS inset token to the local inset value provided by the theme. */ -val OudsSpaceInsetKeyToken.value: Dp +val OudsSpaceKeyToken.Inset.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.spaces.fromToken(this) @@ -463,7 +457,7 @@ val OudsSpaceInsetKeyToken.value: Dp /** * Converts an OUDS row gap space token to the local row gap space value provided by the theme. */ -val OudsSpaceRowGapKeyToken.value: Dp +val OudsSpaceKeyToken.RowGap.value: Dp @ReadOnlyComposable @Composable get() = OudsTheme.spaces.fromToken(this) @@ -471,6 +465,6 @@ val OudsSpaceRowGapKeyToken.value: Dp /** * Converts an OUDS scaled space token to the local space value provided by the theme depending on the window size. */ -val OudsSpaceScaledKeyToken.value: Dp +val OudsSpaceKeyToken.Scaled.value: Dp @Composable get() = OudsTheme.spaces.fromToken(this, OudsAdaptiveWindowType.fromWindowWidth(currentWindowWidth())) diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyToken.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyToken.kt new file mode 100644 index 00000000..305de011 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyToken.kt @@ -0,0 +1,76 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens + +class OudsSizeKeyToken { + enum class IconDecorative { + Shortest, + Shorter, + Short, + Medium, + Tall, + Taller, + Tallest, + } + + enum class IconWithText { + HeadingExtraLargeSizeShort, + HeadingExtraLargeSizeMedium, + HeadingExtraLargeSizeTall, + HeadingLargeSizeShort, + HeadingLargeSizeMedium, + HeadingLargeSizeTall, + HeadingMediumSizeShort, + HeadingMediumSizeMedium, + HeadingMediumSizeTall, + HeadingSmallSizeShort, + HeadingSmallSizeMedium, + HeadingSmallSizeTall, + BodyLargeSizeShort, + BodyLargeSizeMedium, + BodyLargeSizeTall, + BodyMediumSizeShort, + BodyMediumSizeMedium, + BodyMediumSizeTall, + BodySmallSizeShort, + BodySmallSizeMedium, + BodySmallSizeTall, + LabelExtraLargeSizeShort, + LabelExtraLargeSizeMedium, + LabelExtraLargeSizeTall, + LabelLargeSizeShorter, + LabelLargeSizeShort, + LabelLargeSizeMedium, + LabelLargeSizeTall, + LabelLargeSizeTaller, + LabelMediumSizeShort, + LabelMediumSizeMedium, + LabelMediumSizeTall, + LabelSmallSizeShort, + LabelSmallSizeMedium, + LabelSmallSizeTall, + } + + enum class MaxWidthType { + DisplaySmall, + DisplayMedium, + DisplayLarge, + HeadingSmall, + HeadingMedium, + HeadingLarge, + HeadingExtraLarge, + BodySmall, + BodyMedium, + BodyLarge + } +} \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt deleted file mode 100644 index 988f617a..00000000 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSizeKeyTokens.kt +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.tokens - -enum class OudsSizeIconDecorativeKeyToken { - Shortest, - Shorter, - Short, - Medium, - Tall, - Taller, - Tallest, -} - -enum class OudsSizeIconWithTextKeyToken { - HeadingExtraLargeSizeShort, - HeadingExtraLargeSizeMedium, - HeadingExtraLargeSizeTall, - HeadingLargeSizeShort, - HeadingLargeSizeMedium, - HeadingLargeSizeTall, - HeadingMediumSizeShort, - HeadingMediumSizeMedium, - HeadingMediumSizeTall, - HeadingSmallSizeShort, - HeadingSmallSizeMedium, - HeadingSmallSizeTall, - BodyLargeSizeShort, - BodyLargeSizeMedium, - BodyLargeSizeTall, - BodyMediumSizeShort, - BodyMediumSizeMedium, - BodyMediumSizeTall, - BodySmallSizeShort, - BodySmallSizeMedium, - BodySmallSizeTall, - LabelExtraLargeSizeShort, - LabelExtraLargeSizeMedium, - LabelExtraLargeSizeTall, - LabelLargeSizeShorter, - LabelLargeSizeShort, - LabelLargeSizeMedium, - LabelLargeSizeTall, - LabelLargeSizeTaller, - LabelMediumSizeShort, - LabelMediumSizeMedium, - LabelMediumSizeTall, - LabelSmallSizeShort, - LabelSmallSizeMedium, - LabelSmallSizeTall, -} - -enum class OudsSizeMaxWidthTypeKeyToken { - DisplaySmall, - DisplayMedium, - DisplayLarge, - HeadingSmall, - HeadingMedium, - HeadingLarge, - HeadingExtraLarge, - BodySmall, - BodyMedium, - BodyLarge -} diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyToken.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyToken.kt new file mode 100644 index 00000000..7e4efd2b --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyToken.kt @@ -0,0 +1,135 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens + +class OudsSpaceKeyToken { + enum class Fixed { + None, + Smash, + Shortest, + Shorter, + Short, + Medium, + Tall, + Taller, + Tallest, + Spacious, + Huge, + Jumbo + } + + enum class Scaled { + None, + Smash, + Shortest, + Shorter, + Short, + Medium, + Tall, + Taller, + Tallest, + Spacious + } + + enum class PaddingInline { + None, + Shorter, + Short, + Medium, + Tall, + Taller, + Tallest, + WithIconNone, + WithIconShortest, + WithIconShorter, + WithIconShort, + WithIconMedium, + WithIconTall, + WithIconTaller, + WithIconTallest, + WithArrowNone, + WithArrowShortest, + WithArrowShorter, + WithArrowShort, + WithArrowMedium, + WithArrowTall, + WithArrowTaller, + WithArrowTallest, + } + + enum class PaddingBlock { + None, + Shorter, + Short, + Medium, + Tall, + Taller, + Tallest, + WithIconNone, + WithIconShortest, + WithIconShorter, + WithIconShort, + WithIconMedium, + WithIconTall, + WithIconTaller, + } + + enum class Inset { + None, + Smash, + Shortest, + Shorter, + Short, + Medium, + Tall, + Taller, + Tallest, + Spacious, + } + + enum class ColumnGap { + None, + Shorter, + Short, + Medium, + Tall, + Taller, + WithIconNone, + WithIconShortest, + WithIconShorter, + WithIconShort, + WithIconMedium, + WithIconTall, + WithArrowNone, + WithArrowShortest, + WithArrowShorter, + WithArrowShort, + WithArrowMedium, + WithArrowTall, + } + + enum class RowGap { + None, + Shortest, + Shorter, + Short, + Medium, + Tall, + WithIconNone, + WithIconShortest, + WithIconShorter, + WithIconShort, + WithIconMedium, + WithIconTall, + } +} \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt deleted file mode 100644 index 30246e55..00000000 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsSpaceKeyTokens.kt +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.tokens - -enum class OudsSpaceFixedKeyToken { - None, - Smash, - Shortest, - Shorter, - Short, - Medium, - Tall, - Taller, - Tallest, - Spacious, - Huge, - Jumbo -} - -enum class OudsSpaceScaledKeyToken { - None, - Smash, - Shortest, - Shorter, - Short, - Medium, - Tall, - Taller, - Tallest, - Spacious -} - -enum class OudsSpacePaddingInlineKeyToken { - None, - Shorter, - Short, - Medium, - Tall, - Taller, - Tallest, - WithIconNone, - WithIconShortest, - WithIconShorter, - WithIconShort, - WithIconMedium, - WithIconTall, - WithIconTaller, - WithIconTallest, - WithArrowNone, - WithArrowShortest, - WithArrowShorter, - WithArrowShort, - WithArrowMedium, - WithArrowTall, - WithArrowTaller, - WithArrowTallest, -} - -enum class OudsSpacePaddingBlockKeyToken { - None, - Shorter, - Short, - Medium, - Tall, - Taller, - Tallest, - WithIconNone, - WithIconShortest, - WithIconShorter, - WithIconShort, - WithIconMedium, - WithIconTall, - WithIconTaller, -} - -enum class OudsSpaceInsetKeyToken { - None, - Smash, - Shortest, - Shorter, - Short, - Medium, - Tall, - Taller, - Tallest, - Spacious, -} - -enum class OudsSpaceColumnGapKeyToken { - None, - Shorter, - Short, - Medium, - Tall, - Taller, - WithIconNone, - WithIconShortest, - WithIconShorter, - WithIconShort, - WithIconMedium, - WithIconTall, - WithArrowNone, - WithArrowShortest, - WithArrowShorter, - WithArrowShort, - WithArrowMedium, - WithArrowTall, -} - -enum class OudsSpaceRowGapKeyToken { - None, - Shortest, - Shorter, - Short, - Medium, - Tall, - WithIconNone, - WithIconShortest, - WithIconShorter, - WithIconShort, - WithIconMedium, - WithIconTall, -} \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt index 66c87cd4..7a8d09f6 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt @@ -14,7 +14,7 @@ package com.orange.ouds.theme.tokens.components import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @@ -30,6 +30,6 @@ open class OudsButtonTokens( val hoveredElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val disabledElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val labelStyle: OudsTypographyKeyToken = OudsTypographyKeyToken.BodyStrongLarge, - val verticalContentPadding: OudsSpaceFixedKeyToken = OudsSpaceFixedKeyToken.Smash, - val horizontalContentPadding: OudsSpaceFixedKeyToken = OudsSpaceFixedKeyToken.Tall + val verticalContentPadding: OudsSpaceKeyToken.Fixed = OudsSpaceKeyToken.Fixed.Smash, + val horizontalContentPadding: OudsSpaceKeyToken.Fixed = OudsSpaceKeyToken.Fixed.Tall ) \ No newline at end of file diff --git a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt index 34118916..43bd9a4c 100644 --- a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt +++ b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.text.font.FontFamily import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens @@ -45,8 +45,8 @@ open class WhiteLabelTheme : OudsThemeContract { focusedElevation = OudsElevationKeyToken.OverlayDefault, hoveredElevation = OudsElevationKeyToken.OverlayDefault, labelStyle = OudsTypographyKeyToken.BodyDefaultLarge, - verticalContentPadding = OudsSpaceFixedKeyToken.Shortest, - horizontalContentPadding = OudsSpaceFixedKeyToken.Short + verticalContentPadding = OudsSpaceKeyToken.Fixed.Shortest, + horizontalContentPadding = OudsSpaceKeyToken.Fixed.Short ) ) } From d42faf4c7b6270281e31106804acfccd2354f2fa Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Fri, 18 Oct 2024 15:57:52 +0200 Subject: [PATCH 19/33] Start adding dimension tokens in demo app --- app/src/main/res/values/strings.xml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 615753fc..095dae82 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,6 +45,13 @@ Dimension Dimension provides standard sizing and spacing to ensure visual consistency across the UI. + + Size + Size refers to the specific measurements used to define the dimensions of UI elements within the design system. + Icon decorative + Icon with label + %1$s (%2$s) + Space Space refers to the measurements used to define the spacing between UI elements. @@ -55,15 +62,7 @@ Padding inset Column gap Row gap - - - Size - Size refers to the specific measurements used to define the dimensions of UI elements within the design system. - Icon decorative - Icon with label - %1$s (%2$s) - - + Elevation Shadows are used to give the impression of distance or elevation between surfaces, which adds depth to our designs. From 2629b8eeed324d1550e5191eb277588cabff1d44 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 11:39:40 +0200 Subject: [PATCH 20/33] Add grid icon --- NOTICE.txt | 1 + app/src/main/res/drawable/ic_menu_grid.xml | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 app/src/main/res/drawable/ic_menu_grid.xml diff --git a/NOTICE.txt b/NOTICE.txt index 6b7545d7..28b02c94 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -16,6 +16,7 @@ app/src/main/res/drawable/ic_dimension.xml app/src/main/res/drawable/ic_filter_effects.xml app/src/main/res/drawable/ic_info.xml app/src/main/res/drawable/ic_layers.xml +app/src/main/res/drawable/ic_menu_grid.xml app/src/main/res/drawable/ic_solar_palette.xml app/src/main/res/drawable/ic_typography.xml app/src/main/res/drawable/ic_ui_dark_mode.xml diff --git a/app/src/main/res/drawable/ic_menu_grid.xml b/app/src/main/res/drawable/ic_menu_grid.xml new file mode 100644 index 00000000..02cfc565 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_grid.xml @@ -0,0 +1,10 @@ + + + From 116c5166c6bb66cb692cc36d41ea7431a1866ec4 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 11:55:35 +0200 Subject: [PATCH 21/33] Display grid tokens in demo app --- .../java/com/orange/ouds/app/ui/tokens/TokenCategory.kt | 7 +++++++ .../ouds/app/ui/tokens/TokenCategoryDetailScreen.kt | 8 ++++---- .../java/com/orange/ouds/app/ui/tokens/TokenProperty.kt | 8 +++++++- app/src/main/res/values/strings.xml | 4 ++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt index 8ac2ad74..e936d630 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategory.kt @@ -75,6 +75,13 @@ sealed class TokenCategory( listOf(TokenProperty.Elevation) ) + data object Grid : TokenCategory( + R.string.app_tokens_grid_label, + R.drawable.ic_menu_grid, + R.string.app_tokens_grid_description_text, + listOf(TokenProperty.Grid) + ) + data object Opacity : TokenCategory( R.string.app_tokens_opacity_label, R.drawable.ic_filter_effects, diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index e825582b..659b7b35 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -109,7 +109,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: ) } } else { - val isTypographyProperty = tokenProperty is TokenProperty.Typography + val noIllustrationProperty = tokenProperty in listOf(TokenProperty.Typography, TokenProperty.Grid) Row( modifier = Modifier @@ -121,14 +121,14 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: Column( modifier = Modifier .weight(1f) - .padding(start = if (isTypographyProperty) OudsSpaceKeyToken.Fixed.None.value else OudsSpaceKeyToken.Fixed.Medium.value) + .padding(start = if (noIllustrationProperty) OudsSpaceKeyToken.Fixed.None.value else OudsSpaceKeyToken.Fixed.Medium.value) ) { Text( modifier = Modifier.fillMaxWidth(), text = token.name, maxLines = 1, overflow = TextOverflow.Ellipsis, - style = if (isTypographyProperty) { + style = if (tokenProperty == TokenProperty.Typography) { token.value as TextStyle } else { OudsTypographyKeyToken.BodyStrongLarge.value @@ -169,7 +169,7 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.SpacePaddingInset -> tokenProperty.Illustration(size = token.value as Dp) is TokenProperty.SpacePaddingStack -> SpaceIllustrationBox(size = token.value as Dp, orientation = SpaceOrientation.Vertical) is TokenProperty.SpaceRowGap -> SpaceIllustrationBox(size = token.value as Dp, orientation = SpaceOrientation.Vertical, contentAlignment = Alignment.Center) - is TokenProperty.Typography -> Unit + is TokenProperty.Typography, TokenProperty.Grid -> Unit } @UiModePreviews.Default diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 1a0de290..219ecfa1 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -44,6 +44,7 @@ import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken +import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken import com.orange.ouds.theme.tokens.OudsSizeKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken @@ -81,6 +82,11 @@ sealed class TokenProperty( } } + data object Grid : TokenProperty( + nameRes = null, + tokens = { OudsGridKeyToken.entries.map { Token(it.name, it.value) } } + ) + data object Opacity : TokenProperty( nameRes = null, tokens = { OudsOpacityKeyToken.entries.map { Token(it.name, it.value) } } @@ -100,7 +106,7 @@ sealed class TokenProperty( } } } - + data object SizeIconDecorative : TokenProperty( nameRes = R.string.app_tokens_dimension_size_iconDecorative_label, tokens = { OudsSizeKeyToken.IconDecorative.entries.map { Token(it.name, it.value) } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 095dae82..3b1491ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,6 +67,10 @@ Elevation Shadows are used to give the impression of distance or elevation between surfaces, which adds depth to our designs. + + Grid + Grids are used to position content and create consistent page layouts. + Opacity Opacity can help distinguish foreground elements from background elements, making content easier to read and important actions more noticeable. From cb5932d7b0aed5f1f7fc0dea38b8348e0509dd9f Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 14:07:27 +0200 Subject: [PATCH 22/33] Add grid illustrations --- NOTICE.txt | 30 +++++++++++++ .../ui/tokens/TokenCategoryDetailScreen.kt | 40 +++++++++++++++++- .../il_tokens_grid_column_margin.png | Bin 0 -> 4278 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 2696 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 2428 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 2810 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 1758 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 1581 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 4501 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 2786 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 2564 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 2895 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 1800 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 1619 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 4987 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 3653 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 3205 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 9186 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 6115 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 5424 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 9186 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 6115 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 5424 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 4752 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 3434 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 3040 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 8747 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 6000 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 5306 bytes .../il_tokens_grid_column_margin.png | Bin 0 -> 11325 bytes .../il_tokens_grid_max_width.png | Bin 0 -> 8677 bytes .../il_tokens_grid_min_width.png | Bin 0 -> 7825 bytes 32 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable-hdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-hdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-hdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-mdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-mdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-mdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-night-hdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-night-hdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-night-hdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-night-mdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-night-mdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-night-mdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-night-xhdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-night-xhdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-night-xhdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-xhdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-xhdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-xhdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-xxhdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-xxhdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-xxhdpi/il_tokens_grid_min_width.png create mode 100644 app/src/main/res/drawable-xxxhdpi/il_tokens_grid_column_margin.png create mode 100644 app/src/main/res/drawable-xxxhdpi/il_tokens_grid_max_width.png create mode 100644 app/src/main/res/drawable-xxxhdpi/il_tokens_grid_min_width.png diff --git a/NOTICE.txt b/NOTICE.txt index 28b02c94..b15ca0f5 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -22,6 +22,36 @@ app/src/main/res/drawable/ic_typography.xml app/src/main/res/drawable/ic_ui_dark_mode.xml app/src/main/res/drawable/ic_ui_light_mode.xml app/src/main/res/drawable/il_opacity_union.xml +app/src/main/res/drawable-hdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-hdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-hdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-mdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-mdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-mdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-xhdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-xhdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-xhdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-xxhdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-xxhdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-xxhdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-xxxhdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-xxxhdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-xxxhdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-night-hdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-night-hdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-night-hdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-night-mdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-night-mdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-night-mdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-night-xhdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-night-xhdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-night-xhdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_min_width.png +app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_column_margin.png +app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_max_width.png +app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_min_width.png docs/images/favicon-16x16.png docs/images/orange-logo.svg diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 659b7b35..cb5d3bad 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -12,6 +12,8 @@ package com.orange.ouds.app.ui.tokens +import androidx.compose.foundation.Image +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -27,6 +29,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow @@ -54,6 +57,10 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: descriptionRes = tokenCategory.descriptionRes, imageRes = tokenCategory.imageRes ) + + if (tokenCategory == TokenCategory.Grid) { + GridIllustrations() + } } if (tokenCategory.subcategories.isNotEmpty()) { @@ -172,6 +179,36 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.Typography, TokenProperty.Grid -> Unit } +@Composable +private fun GridIllustrations() { + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), + contentDescription = null + ) + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_min_width), + contentDescription = null + ) + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_max_width), + contentDescription = null + ) +} + @UiModePreviews.Default @Composable private fun PreviewTokenCategoryDetailScreen( @@ -185,5 +222,6 @@ private class TokenCategoryDetailScreenPreviewParameterProvider : BasicPreviewPa private val previewParameterValues: List get() = listOf( TokenCategory.Opacity, - TokenCategory.Elevation + TokenCategory.Elevation, + TokenCategory.Grid ) \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-hdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae4ef4a7672b24d97513aa3a88ad9a3d052f4d2 GIT binary patch literal 4278 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-hdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..b285e6a5adf89ae6bb0841229620bbf95da8e0fa GIT binary patch literal 2696 zcmeHJc~H|y7XD=j7#*TAg18CDjLa&|C?g$gP`5rkZe`}bD4Rr}}etLlFJzUu1t-q&5P z-^~+2DCh>*1^@t{M-Cqh0RWJ6Z7qkGt|NGdvxgIx?xdVk40(KbS?sybM^7iYqTfwW7;ePHdxO!6s$@z`D`LVoCbCUX7QK zwTi~o^!~O53pn^Sg8mBhniYNph65Wm|9jx_?e-i+JR*PfB0X0%&zDRw@!3t>zaJ}y zHBw_u))5phtS`7x_8!QyTwa_`%a%=@KYri)G`@<-WWMlPmI+dNGSb`&??cjZ}?cDz(7ZTZ^T zasS(;9Xv+UJN|j9M*sd{=~mRQxaP1au$5AMfdDPFL#Dc?PVu_OU?>s}T&XIKU*SdX zu^YcwYKv$M7fUCa*ZoG)vqcc6pW-L1C1T&9YUFect1G^`sdNVODxWpY);(xX5=Pr(LLTH&2!x^K%onuDs#&9(T<)fVX3f*%87`$3j(j9f`vry?Ljd zQO}jfaOneo(A#Y)ttHZh1zWysVX_TXURsOK+(%TuA2vKw9NH$TPDX>B4E5dIeUFTnjKgOMN zTORm?JrPfCi)^*y=6L6i*GD1L_iC;Ph^e6sD2XXTW2JIoS*Sl{2KMF8S*8VMR1geK zOXC%J>tX-$rU{>2#la}mmv7Y)Sp>zq7ccDv1^0?Gn70y$Mhr@UQE~!^D~2roz;JTE z_d80>l`4=eLP^%o8eDi!TF0y13Fdul>$E*5H)C7x55=ka;dD2f@ibLLx;eyoq`MwA zem-<6&bE4QSKiXc_imXhGpHIRSK59Z9$H}LWh}7G&G+^_P^MhPSu;$CLHZQs;Or#{ zA@FC#Hc@n;U5a$IAhpftF@v73aS4x;&Ob^VoLB1MuMQxk7|A6Rg>-_be7TF1Xn#_H zdvxgqIvp2!O6szxo+ibln?ttUTG{`E}@^{p^-qK`qCT z`isN}S6x!kKJvVaRIpo}Wtm%4nf6UQ0@qTNO&06CL%5)jelnI;hi}=0y&v0WmRKiB zp(ZcZ4>|_jVYdVoYDMYG$1gP4lkeJdSArkwZbX=QBJ;|$0}T||x28EA)NhKRtJ3D7 ztuZ36#o(Z`;!YgQ=Q(`%_L3+}6HHFF=UGTR@`M6Glr9QupYU3w&cY(Q>hTL5#7gAx zS`*}66tB@g*JWa)(0*`ium^QcHIhR;iY)Pt;QGg|x)05XN*4M*tS}0gWZt1eeCS$= z5H|)m*Q;}JbxHEepg3v<*Bs7rBEMGkHzrD;bI=6Ol1cgM#rs=_EZEBT_%dFS5MAB0 zNV>6U(a$bIbKNu?-57V(IT_btgJN6sLsHGBEAH653Z1d|sDqpaJ0pFqCcR#zaX+H+ zw$09@KSXti5W+x~sKkSS3IVfKJtSRmc z-F>}E#_63^4a6Ory!+q?d$xO+=eOU)EGSOGfnjT9#h+?rgR`5IjFse^D)+hF!uH)M zAFcmV)bwz~V+Wbez-a9V@?OJF^ldU1qm8OR)ljmqhwkXRGtD9LcTTOiN<|ynguCsX ziX|ob>g0VU?#*asG%i6epXoE{hGIv%PU_)HQx%*f8XW7?o0Rf&gIi=k<3wJ4oQWUk z3KTGfxB-^m@_-X-UoSE7wM6=h5c%Dh&5A#UfM){AQKZzWWV0h_TDnAA2 zkvt(SDLnQH3!jP{aXiOe^bcoDTFJ3}S)Rja8Vo4*K|(v;ytN`3iv<^3dsBLb4n-qW zc4y85QdKjq*_`^!bC;eCew%0^<>d0v*)ZTk1_lGhXKw!^sTlz+ye6x|U^2n@Yhw36 z7CWJU86Qkzfi^~p&x#(Vc8=Prz0UQ@z8wh&I#_=o H_R2p2gAIzg literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-hdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..b61e5cad188ced1018b79e9b3ad6e7f8281b49d3 GIT binary patch literal 2428 zcmeHJdr;F?7XC%v=?3X^7#=~QyK7frd6Y_^fJ77oiaZq9pdkqk4?)92Fd>ou?Hap+sPjbt;Lx za`s;A=|9>;S$jLU9wqgF3idUk2`}ti3qfgj{n@pa?OArXPTTOQjMKLPtD%g$cN1AJ zE5Y56yk9;xcGDw0dL;`UNEd$u@@vMl>n`m7y)tOWQi??KYsEcNIqlW0{DMNihLC)A z80B4>u{pcFZf=Ns6dJ__9V}0?I05ji%K<6`09itTeYSAG(g6q99-IUmPW(GyXUnj? zLC|l?r`WLI;NZ@jJZaxpx$#3>przyE*BPT~8CO=*x3MG?-q+|gO3(O29uqHF(I2N6 zi0~m%Ydn;Vph7Bt9%+f}l-TTd|DlEHGZz-Ixi~~qDaIHqti{i1WO2Dg@y?cNYJ9%8 zXi0pwcxC1}L93QppvJ{gG-^ap3(NmYoUX<`@W^hdG!lsf|MPcjOh2&$6iG|#98sh! zHwPDIAtpMe#eVJRpPrF)lO5@*`PX&%xa;G(5<|6w8vpL(EQcaN*ImbkEx(YCST7}%BB5I|f3^~Zb^%4k#t&n&uYj$$u zfnZ|pzSkx5brZe`cG{3TrAauqyY%;*e}9km4h9yov7UA#bn$mFoWoPL<3# z05R}TBoJ0^=ruRuV|L#t;3;WObLX;Od2A12);AO)Fr6Rly89 zn7HtCIh3`11PMqO0nT{TA(dh&G;bv6%ZYqL-?Cb*zHYi;f`hj>ivb8GhF((B0VdIx z3_Vs|P@Hosp66LzGqjb?!Z+!1=XS12k|8J-Nv(7`bbev8EocTcm?S6@2&Fzz=bVnX zm@#@eia~Z}(y?ek-A?~21<_pjoqVY_S&R1=7F9gAg#OLf%wzHsU?HevuXsdeo8Vd5 zx9!wvghq<6g;S+(momM7_|E6-LrMGdWrgZ6=FQm(+tepmmL{_C6-XCM*7~#JN26glHnqo!n-GS#7t;l#8u65m|z^;p;FjAS94J^hH+$oSwUBtTOAYV7_c^UPudr`j{f|4V*P zHrWiMOmv?RI9Y7}bLqm9_y7vCqhz>5tvw*)K6>OX@;NB-5wCaQ<)U|MtEQ}fASMjT zF|QKo{lMc5XVd|c2dP715{g}QcoOHv`RRWXonKXn41?3Y9gwZ%q@xW|r!v6dN>DS# zr9!nQ;O8sl!R2=YPB$>mnoF!U}-;1x}yE>nI?myiGt@sF%5<`V3=azllt^l|P z;=)dvKYw-Q+Q8NMZQ4HjmyE<)PauH~rYA(KchirbD-aFVZeJuqW^Sf+w(URyZ3WPN z8(!97Z!0?+{@5=>EY)b=BFd!9z(qK1Gx~i&nju!D!8xn#q1N%xm{`{sNLj)X##CIQ zQrFd^WEAZwNjTSJ5U2))h@2O*+j_b=hqhc#FC8_lE(pb}(4BdMg9`Q4ElW~Wkm@~c zrHr^PV424TjFeB)(UhH+@#2*MU5<89o!X?zJU|VRr9`poCHm9tpwLDnG-?myzw7(2RR13En;+rtME&Q) aV6sWR?bfTfkvz0FvP4J3g)>j4QU3)BhxaQ0 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-mdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8ac22f49e435597e4eec7242f40b50a928e423 GIT binary patch literal 2810 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 O33fl&TUS|LiT@qU{S|@$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-mdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebc3c11aaaef37655fff49a40c4706d764a6f9e GIT binary patch literal 1581 zcmeAS@N?(olHy`uVBq!ia0y~yVDtd87jUov$-I)U89<7&z$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(Ggg^^m8FV@L(#+q--7M8YK+9&Tn)5>RTm z)S%=#K}kvU!a|c7eS9k%yc$<(91KtR&7|~ztEcz<>+VhC&CM-w&(83aX#%aq12$~*OUwufHI1_O72TG#4( z@wRh~hYT!(Z}e?$U8pjFfwPgtgG0r^Nr6#_iF1O0$G53JfBrPGwA}e_#>|;Bd5=2? zcx-!mb94IA%P&nf-qaP`x;g#)w53azmiVv~B_$=@eS7BIxjYNDCWlSB&(F`-U%Ytn z(=#)TQ@6+LtJxW|yKL%ZR%S*ENum5|ltp3o~*Vn_Z z?Ja!lw(FhSZ!Vt3Rjbrig}z#RK+A4d?eDU$kB)X{<>js0Rq)U$)IWLkuNNDt{{5-k z{N~@^-)DDJ$UoZoySCPEeWm>CZLhc7ewkWWxbf#2JEfRNvB$f&OD4(RGW;m}vF_`> z{{DXR-*WFCf9|ip(trPAU*)GKp2lg`zok}-B-BUiPq;hJu6CEu)OQPxZZZptRJhGi zn!mg{a(mUOn5)kXXJ0p5rsJ-iB%>6wQDoa8;_@8gWG@)^eVy}f!dW^>*fcc1gs zwc8@2Z-%!`cDQ6-=xXI8uGsUrUhqss3rE@!<3%^UrC+U$x!AT=$m5q<--Abj;$2D| zZ*^@7LnOXy9aEl``nqjy%-*(M4wYI__nyMnel8n(<8-<+%Z}(eFL!Okyd^7zrU1v^+Z^B#9DzL+O?_r|dsHzGba zto^aZz~t5H?aE&-pLq3jx&QpQ;w56=+1K%f+~Jn|KYOX|rD$8VcdBQ$7616~@RIkM z>L({A7JYwrck0_CHzM9YJ3Bi&&!zwUj*^!_pMPCh8T|Cx+GyW|cwk~Hnz+2$J}LV7 zxw+c;_x5DQ#qX^uwf=1t&0ew0pyZF=EX7SVyH8alu2y?pFQdlgd|X6YK@l_gH?%nL ziT}T!S1rcvupg9h68Z~SPR4BvNaz>z_|`R%sk+DEQu)^}R&`!SpFT~$VGQ*A>k_NN zj~Qh@B_-TG-k#5uGjYH9-{K7$R{v?UX^@lQ+#vh!-k0+Z{}0^xarH#~zAF2#zc1aM zXvDDZ=c9nexj!DyFHa4qDgX5O=lVXmJ%RJ1<20DF7BK(3zPh|P+5Ug+!>_;jQw9Ef zc)O9w`s3yN|I-``zg%ei^!R)HxtiKH7p595VEd)@O}{&zU9Ha`CvN}mfI8U;H)D_G t+F|5vpy!xWScGu+dsGTu2*LvDqrApRVY~K{Pme)mtf#A=%Q~loCIEbum{I@$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-hdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-night-hdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..311d3a7cd9811a6baa2059e8c2728b55b0ceaf9e GIT binary patch literal 4501 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-hdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-night-hdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..0daae302db97dd34331be9ff5a3b8c053de256d4 GIT binary patch literal 2786 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 bpbqOvK+$hRHLf!0``Zb-W@C=K>ha(o@)}q7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-mdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-night-mdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..0c394643af21244eabb32f35f0c5fb10fa3a1ec3 GIT binary patch literal 1800 zcmeHI`BTzq82@U-X66=|f-ak8X-!_GYu<&1*SO;5W@>q)6r>17n2K6v-izXqn<c zP&`0b2M-4TU}dYW25$raaIqWG;dqSFG~Y8l|17*kiZxVc=R5A|(VwhnL~Rc6dRHe7 z;Ma*uudRQ}bDHmQYQwGB8eX+r*8q*^?DH&2+_4Y2FQw?r0AVgps)fOdL>wbrUAJgM zM<(~ljO|SKXn}}~jdWL1K>xR0sZ`Sdx0X3koYPWMn@l=iE-fvI9UV`A~S#6VD<^~9{OLn!Vof6KdFctO`+UggEz}&v1vMC5m(Ha9NLSY*PO4A>2!1WjDuxZfT#MI5ltcE8l}7^ zWD<{a5oaFt=>y9kiiK2zFw(t^NIuL!ezIBn=t;~$!xBJ3z=l<`<-mpTu=sh+k&)hHLzlaBA~ z)^nsC!cTr#h1{Z9MzE7Kx#~)pa&(kd7+pY*&9HLL7x)Y4de4gwQdtVP`k82xa={nd zpd>4qRa&=}andUbSA)C#5*y~o`xOfqBu^D;^25lf+B0r(1_Q=r>h9C&9%?@0Lyt() z26oeW6ASsjQ?a!nX1{dLR`o#01B7M$3u2h=tr(jXh} zfe>^tHVKcfhv;Lnq!@RRmyM&=O4}9-nnPbsRP#~E9JMoFfyVN$(Gg}82FHh21RklD zW=e1H-s7?tia$f0s=yCO)`2Csd%}x$o}Fd_`e-?Vh_V>)<WHI$Z*tHT!6^C3$3I z#QQ$Yn=ep|6KzMy!x|Wx9})PjFd*LPpluqrVbK74s~iPnnvY#Rzj8p7jFSqAOEOm>{GlWBsl>K{_t$v$F3IOg)~hEkhmY~eLcEV}aG!i_X?Rx5`*2GtoN1N|-b8;K=;73?x)+v@ zN9xYl#V$V+4fEH>m^+Wq8+JbvCIvSiQ^pL+n&kn6BQZ9itHtDqeCFYR`K~n8@%tvE zcXS4tza%JO5J77R3HIL`9$E0^cj;@E{w+}d)`Y*b>;KZ%O8$>-NOj6k*Kg`awkkd> O0C00cA!{5@U;P7wCl}2C literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-mdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-night-mdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..2c28a0c12c8eb2117c41ada227ecbc3b2d553a00 GIT binary patch literal 1619 zcmeAS@N?(olHy`uVBq!ia0y~yVDtd87jUov$-I)U89<7&z$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(Ggg^@XR4V@L(#+q>2sA?Xqg59@o~0;aHR z4Qlcf+~U1-f*My;_cq46Q5!teqmGy)O?EpP=E4-#)jGA@XE8_T)mgkcY}d}YM(RIk zy?dtogU;sNpWlj>m)V?WK73}5rFlxl&;P}2+eLu(;sG;a;};s5<=nV%|N8aveFplE zA3y%9tgI}~)w_Ao1&Os5dAet!U*CUw+ew*I#lcB|QHY6if`CUuivyDi%cS$CzP-JD zdZMy>T1@)!KH1Idm>m@&C)iehn{x2rK`k?H)kS5$zrEd5_xD%H+?^~%&(Fw+RJ^&r zzy8uDiPo+D-pMXvw{vfATU#anI&M$J#>aJ5ohu7+?#nG_X6Ku-I()rf)cY$dgRd_B zEAjT#T)BPa_sgC=Hp#a+N_3kT=84UtgB|J<9R@&CSii>mOgtTld_nm{VnH)h-!BtKw%q zqU&dzJGNz8oS0IAap!|A`NF?nnzZ&R9JTuTFKKQ^iOyUU^cffpxC*tAInx6(*E~vV6F( z&^c7(^^2odtlg#uitJf@0cx=Cd8;o&7`7|99*gfs1S32OO8ppV6<+)w?n6?5xep9Suf7I)NB2q0`+b$4pZP5;{Np=|?dFcc z$DP+MuW$YNYpv*G;nrh@N7+0$Fmi*Cg5m^TBQvvaiwyGD)^C5#x*+=4@#DX_b&TC6 z=!pAs=@>JeEZVsGfRXZqlGyC3zoD;RF7H3TA%{aH_WJef;^zJD>T1|#tuS?x(l_wm zXMT6{rVUG??tc|#Z8+J(62WnQ_Pdua{~K)oy7%U<`>Xk%|F8X+7ygp*{@VD^1j9DB z`_tn#{(Y_g|K6Umr~j^PeX73H{cDLrd;H%2uczC)*H!#YT=S)A{{HXcKO*MXvsFJo ze`j6n)1JEOX1%<$|E@*o3e lBMT0{k4nMHMf8CB&n*Ai%EClQz7SLpd%F6$taD0e0stg3v6KJ+ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xhdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-night-xhdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..741f740a1839a521393402bcb3e03aca37f46c9c GIT binary patch literal 4987 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 H|NH*~o0xts literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xhdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-night-xhdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..817fb52df98d0b26710a8fb4bc52f30362fb2b12 GIT binary patch literal 3653 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xhdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-night-xhdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..0585141bceadba53c90ee630d645dabd009f8e4e GIT binary patch literal 3205 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

2;DCp5xHIc@AJD>qb4ai;QFJMoU2kb z_s)XW{HsgXYb2pZ#a)}KB~381fE(g+h58YAYfb?@b0b>ugGu?He&&a_LoGuOwdHb@ ze&&dmyIE>p121{yj_0n~tY(^F(YGfT807w8vypoKmXWClAtZ98&1Y>%{1w~RX21j< zEtPtKuS^dWHQzyoOLMnn)0k5+q?M((Ir;B4gGiHwmA4K09q0SR^6kCNhTaz5`{1_1~JNRy14yTgsl2N;gj-5N&bmXi6O&-c-fM%?(FyZZN>LQE&@ zkoee4vsX=sSriC<@PpZp#J$4vMsjFI2deeNxsYmP%~pxR`{&;yw{pUAXdhSCR+0s8 zyt*WlH{hVc848a}qJSGt9G5(n>gvE$jZBUy(%Q`bg;5Jcy zF#>WD0cI*flUJRY$wF^oc@jBkvweP!wdv3u1U?qxK5&OILKd>;X0lYHgPTLtdxI!_^Tfr}Yh!h+J4ZBG1UAbN3vzRb=Aw`X*|Mmzxke#w@>yEb&l7%- zJJ6A*g~r;2c8%K$?K%s%3Y#mKmF7+JI0J<$3BY#?(MHh*R%nwfMEm?gG&>u{wV+lm zo>8?EQ~qab<02NxIW}vbi-4380HDqA0coy~2U@=7?Bts~{O-&avy4@@b@t{aM-~JC z%>Jz<5{&MAwfWy~Vvkno2vd_y^fdstn18f)CU1V6M59qh{=W5jpVRug&qx4(ju5l8 zNB?7Kp#Pg>(?7HPA7u3Y0r?-0|I=CHe{Ad@8~guZW9yKQY46>k7j~qI{U5+tJEv1s IC!u%#3pC(WqW}N^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd45f94a9f2fc546896287d8be72e0f5edca5a0 GIT binary patch literal 6115 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%0A+-nkqG%MEiHQMfQCWPdW#*CC}mpg zNEnbEC8_vJ0pMKlB^qeBXJ=haP42|--7>!mqCvjBSz!6Sdx#O$ zo@LOvk^ojQz-L?a8NEXr)Bw~r*UGpyrtxK9!$UnMWg54{!oDuQStkNpEypI@1{wN> zbM{TIEzW$ejDJGw1=&=~!MD2SSJ#%gBR;4BK=p}2hgV>Ne>H_%2LSUaU);;eOkFJ2 z6dePA-5UQU{O?Ohb6gky0<>}IqwA_&Tj%aJgl*d+Jpc$Y#Hf+|)W`?p;^IU)!%8`C zMpcsy-EdK-*)YO6$?|fOZkK|M1nb^%2Kk&KV5D#XHs8ppI6lw#h{kHM2%E}tY0He>nS~^3dXXRi$~nI)fx8;9AQOx|6>!(R_CeX=BgL+( zDRMTrg6tP+U2ORNrAZ}Q?cvw_8=|a*M#aj8>Wj)iLnl2|OjioX|`G~SM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-night-xxhdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0d109cb9673e688649616e800463bb1da7a816 GIT binary patch literal 5424 zcmeHLX;f2L621`y1_ZPPdKxgX8%M+qyIGqpZMSSA;DRhNhQtLT5Qcp*VTszxh)RaW z7El6qqaqTL*sQVzK?p9a0TR{-5d#Jcfhk4!uEXl=MOQSC*lG4(qZjJxZV012P+Zr z$2`6V^lr0R_+dT%fX@K{9#eExr#1j!*zR@k!0{Bs{5bl0VPZO4!jB8Mw_V6F_RMLy zT%POW7WxAB1sC_?S*NdV%}?FN`{Dw5zm*%_x_;9T|MKLuFZTuwY}4sqe=z6BcTcaj zK5g;3a3;E$bp5=XJvaC2Jw6$qjI|11=q45y;MIRry0G|5q+ks=j8E6UW`Nv;FGDa( z_gYz@ToPt_#qLAIA(COK}Oq|dZ zD2rM&c>?zfO=Dy?VUJ}CVjB|yz_#yjaH78>x4`8=1{d_;^$_b!VYzO-9W2*t6JV*m z2`(Y9>347-|DXqOTF%RFa_662-4fZHysC!egMrxUDs?l`HI+AUUP#phqh4@OPQU)D z=(u4D+bq6$9`%Pge9`#_7*;yeC+k74p2TS|=e;*;;SM{bt5TG&FByzj6sPu2q$$Re z=6H`ghWw=yO(aF%67lV;0!={3ZqdXYu1gdJC!5VvD;De zIoq_f)Uw$*z^QWFl}@kFy+L zLl0Ei_D8h`+NCe8SYv=(VSVvma=*5-AF59)CfhPm)aF?M1s#If7-?MHwdJt0Bf~S}_)1uB<6wR~sdo zrjdu#U7y9s%=A!)HcZkkU>Jhldj{KwNOZenl>0@cL|?97Ee3(js~2a@hp#9EM8)Xp zD;lc*<~Y#+#O!y_G$niNa@@5m!Z0?NywU$)lX^u|j>eu^9QsRiml46}0`zb?=^;B& zG*sc^LjTdk1^Fn4f1=Pa@sUjFpLauAi$xW^+VU%BApTfMCugcYuqOkha*C?uYk;{7 zcP1jJHx&?ogqx=~ezY!v_9eOZo)orG7n`im%gI10swP zoysCe^CR!oWzdz}``uiOU#n6%?s+5IfIr$GK?2Xbxy_dQP3 zwLbq(Oy%Y|wc0+?d7AX_banTAmsyRUh%9enlSP3c #hAOqL4Ej+4fU?+f3eb+m zp8Ulr%I3+`y{|$?cGsDbZNo5med zLq0I3bkNMHxyD_O#4p}Z+($9?i#Jn3RRk5cxRqbRg<`0bPmZ`Yf*krVvCmgOXZ*A_5}Cmo^Qigc(> z@6UP-g)=+Md!awS$z7+E&T=B@(ZZdT;RAqqt3{K%^?1%0s(gZ?Z%~@T{hMNcr~U06 z6a1khqy;sozzoQ@z;nTgFfv=eD?gL%s4(y4Jh-Z0W4Y%PN$v~o!YNJiC3l=gi@u1` zhIEfbx0CwIdarPvWpbV;$4TqWTvO{10KJ(9m~9cq&pZ6)>^wcR$GlhMvqda$u5KAl zDJH?e4#5b<)Lkj#+YUB7xMJY(i*ok$8PN^0L2ZRmbFMir*Vu;iuB_AqEUbmoaF_BX zOK{^sCS~y4VoU-tHJC9ulT0M0`1ml4dNX%WPj3YJ-+VMgV*=Y{Wqzed4CCjH(!EFQ zHqPjXCTl{Se0v5nb{;8tZ|tZ+E`~v#w*i{1k07RGsAM*f82cnHv`aQ0^qR)%$r9;) zzOU*8rZMF)q9uI?jN*CHQjtlp_=D)N&dj8?B4+!O?^7Hci;gLVJ><(v!qEb2yxmyM z6!8P1m9}zJ1y2(j5OjR)Or8@rV{~uI*iJo_P?EO+sv&89q^CJq&~amsTx5f3bbl+J zXlj`46S*=)@-_ShxXoK5KnwkkR%SKBOM%>Ti}zxDii*kuIU|garj<&|*=khc7e&D| zUvxlTMZPrXU9(8Vm#O>*xINxF8GskQw(QaNQz)LPj{&ND6UyT)k5lQK4^Gu7z=oA(2KF9BGw8#QQ^8_Ple@Av&i4rB zr(_{Izu1?cNw~o(B~#BD#o`V{Sl6Fw!{+2{F5;Sfy-GY>F~UazlCY*zY|uo%+^~p z8f_0HeOcHyJ=_Nq-_R!r&@v&xB`n7zJZY+`N+^A5tWB_sGUOT!DBSZ(5}|9+tY|Z5 zmZ}_U19&f+)vIV*efmo6D?XBV)2%prAKv{J=+q^jO+3O2N-Xq#<~P;b)pX9piu8^= zGa8ys*aQg}2KKOP`s(wxj;HeE4CtENfTa#4z3=1?44U-0TK+b?k&UZ7VH?+^60bu3 zN=l#GNe#dZOp~zD)fr00YNRZBRG#+(QVgZ+-2Tc9XIQygz za9R<7hmENJ@Oj3!D#@&7{AWBu$0C={fD4SrHoMd{22YdUpXUGP^}kjTpF;Y*{%(Cb rhflTish0kiA2>dB-2ZLIslI5#|Lx)i&Br)+$N(=l--Gn;aTosqqWx0( literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c5bb1b36238dc714024894320e6194b645b866 GIT binary patch literal 9186 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

2;DCp5xHIc@AJD>qb4ai;QFJMoU2kb z_s)XW{HsgXYb2pZ#a)}KB~381fE(g+h58YAYfb?@b0b>ugGu?He&&a_LoGuOwdHb@ ze&&dmyIE>p121{yj_0n~tY(^F(YGfT807w8vypoKmXWClAtZ98&1Y>%{1w~RX21j< zEtPtKuS^dWHQzyoOLMnn)0k5+q?M((Ir;B4gGiHwmA4K09q0SR^6kCNhTaz5`{1_1~JNRy14yTgsl2N;gj-5N&bmXi6O&-c-fM%?(FyZZN>LQE&@ zkoee4vsX=sSriC<@PpZp#J$4vMsjFI2deeNxsYmP%~pxR`{&;yw{pUAXdhSCR+0s8 zyt*WlH{hVc848a}qJSGt9G5(n>gvE$jZBUy(%Q`bg;5Jcy zF#>WD0cI*flUJRY$wF^oc@jBkvweP!wdv3u1U?qxK5&OILKd>;X0lYHgPTLtdxI!_^Tfr}Yh!h+J4ZBG1UAbN3vzRb=Aw`X*|Mmzxke#w@>yEb&l7%- zJJ6A*g~r;2c8%K$?K%s%3Y#mKmF7+JI0J<$3BY#?(MHh*R%nwfMEm?gG&>u{wV+lm zo>8?EQ~qab<02NxIW}vbi-4380HDqA0coy~2U@=7?Bts~{O-&avy4@@b@t{aM-~JC z%>Jz<5{&MAwfWy~Vvkno2vd_y^fdstn18f)CU1V6M59qh{=W5jpVRug&qx4(ju5l8 zNB?7Kp#Pg>(?7HPA7u3Y0r?-0|I=CHe{Ad@8~guZW9yKQY46>k7j~qI{U5+tJEv1s IC!u%#3pC(WqW}N^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd45f94a9f2fc546896287d8be72e0f5edca5a0 GIT binary patch literal 6115 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%0A+-nkqG%MEiHQMfQCWPdW#*CC}mpg zNEnbEC8_vJ0pMKlB^qeBXJ=haP42|--7>!mqCvjBSz!6Sdx#O$ zo@LOvk^ojQz-L?a8NEXr)Bw~r*UGpyrtxK9!$UnMWg54{!oDuQStkNpEypI@1{wN> zbM{TIEzW$ejDJGw1=&=~!MD2SSJ#%gBR;4BK=p}2hgV>Ne>H_%2LSUaU);;eOkFJ2 z6dePA-5UQU{O?Ohb6gky0<>}IqwA_&Tj%aJgl*d+Jpc$Y#Hf+|)W`?p;^IU)!%8`C zMpcsy-EdK-*)YO6$?|fOZkK|M1nb^%2Kk&KV5D#XHs8ppI6lw#h{kHM2%E}tY0He>nS~^3dXXRi$~nI)fx8;9AQOx|6>!(R_CeX=BgL+( zDRMTrg6tP+U2ORNrAZ}Q?cvw_8=|a*M#aj8>Wj)iLnl2|OjioX|`G~SM literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-night-xxxhdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0d109cb9673e688649616e800463bb1da7a816 GIT binary patch literal 5424 zcmeHLX;f2L621`y1_ZPPdKxgX8%M+qyIGqpZMSSA;DRhNhQtLT5Qcp*VTszxh)RaW z7El6qqaqTL*sQVzK?p9a0TR{-5d#Jcfhk4!uEXl=MOQSC*lG4(qZjJxZV012P+Zr z$2`6V^lr0R_+dT%fX@K{9#eExr#1j!*zR@k!0{Bs{5bl0VPZO4!jB8Mw_V6F_RMLy zT%POW7WxAB1sC_?S*NdV%}?FN`{Dw5zm*%_x_;9T|MKLuFZTuwY}4sqe=z6BcTcaj zK5g;3a3;E$bp5=XJvaC2Jw6$qjI|11=q45y;MIRry0G|5q+ks=j8E6UW`Nv;FGDa( z_gYz@ToPt_#qLAIA(COK}Oq|dZ zD2rM&c>?zfO=Dy?VUJ}CVjB|yz_#yjaH78>x4`8=1{d_;^$_b!VYzO-9W2*t6JV*m z2`(Y9>347-|DXqOTF%RFa_662-4fZHysC!egMrxUDs?l`HI+AUUP#phqh4@OPQU)D z=(u4D+bq6$9`%Pge9`#_7*;yeC+k74p2TS|=e;*;;SM{bt5TG&FByzj6sPu2q$$Re z=6H`ghWw=yO(aF%67lV;0!={3ZqdXYu1gdJC!5VvD;De zIoq_f)Uw$*z^QWFl}@kFy+L zLl0Ei_D8h`+NCe8SYv=(VSVvma=*5-AF59)CfhPm)aF?M1s#If7-?MHwdJt0Bf~S}_)1uB<6wR~sdo zrjdu#U7y9s%=A!)HcZkkU>Jhldj{KwNOZenl>0@cL|?97Ee3(js~2a@hp#9EM8)Xp zD;lc*<~Y#+#O!y_G$niNa@@5m!Z0?NywU$)lX^u|j>eu^9QsRiml46}0`zb?=^;B& zG*sc^LjTdk1^Fn4f1=Pa@sUjFpLauAi$xW^+VU%BApTfMCugcYuqOkha*C?uYk;{7 zcP1jJHx&?ogqx=~ezY!v_9eOZo)orG7n`im%gI10swP zoysCe^CR!oWzdz}``uiOU#n6%?s+5IfIr$GK?2Xbxy_dQP3 zwLbq(Oy%Y|wc0+?d7AX_banTAmsyRUh%9enlSP3c #hAOqL4Ej+4fU?+f3eb+m zp8Ulr%I3+`y{|$?cGsDbZNo5med zLq0I3bkNMHxyD_O#4p}Z+($9?i#Jn3RRk5cxRqbRg<`0bPmZ`Yf*krVvCmgOXZ*A_5}Cmo^Qigc(> z@6UP-g)=+Md!awS$z7+E&T=B@(ZZdT;RAqqt3{K%^?1%0s(gZ?Z%~@T{hMNcr~U06 z6a1khqy;sozzoQ@z;nTgFfv=eD?gL%s4(y4Jh-Z0W4Y%PN$v~o!YNJiC3l=gi@u1` zhIEfbx0CwIdarPvWpbV;$4TqWTvO{10KJ(9m~9cq&pZ6)>^wcR$GlhMvqda$u5KAl zDJH?e4#5b<)Lkj#+YUB7xMJY(i*ok$8PN^0L2ZRmbFMir*Vu;iuB_AqEUbmoaF_BX zOK{^sCS~y4VoU-tHJC9ulT0M0`1ml4dNX%WPj3YJ-+VMgV*=Y{Wqzed4CCjH(!EFQ zHqPjXCTl{Se0v5nb{;8tZ|tZ+E`~v#w*i{1k07RGsAM*f82cnHv`aQ0^qR)%$r9;) zzOU*8rZMF)q9uI?jN*CHQjtlp_=D)N&dj8?B4+!O?^7Hci;gLVJ><(v!qEb2yxmyM z6!8P1m9}zJ1y2(j5OjR)Or8@rV{~uI*iJo_P?EO+sv&89q^CJq&~amsTx5f3bbl+J zXlj`46S*=)@-_ShxXoK5KnwkkR%SKBOM%>Ti}zxDii*kuIU|garj<&|*=khc7e&D| zUvxlTMZPrXU9(8Vm#O>*xINxF8GskQw(QaNQz)LPj{&ND6UyT)k5lQK4^Gu7z=oA(2KF9BGw8#QQ^8_Ple@Av&i4rB zr(_{Izu1?cNw~o(B~#BD#o`V{Sl6Fw!{+2{F5;Sfy-GY>F~UazlCY*zY|uo%+^~p z8f_0HeOcHyJ=_Nq-_R!r&@v&xB`n7zJZY+`N+^A5tWB_sGUOT!DBSZ(5}|9+tY|Z5 zmZ}_U19&f+)vIV*efmo6D?XBV)2%prAKv{J=+q^jO+3O2N-Xq#<~P;b)pX9piu8^= zGa8ys*aQg}2KKOP`s(wxj;HeE4CtENfTa#4z3=1?44U-0TK+b?k&UZ7VH?+^60bu3 zN=l#GNe#dZOp~zD)fr00YNRZBRG#+(QVgZ+-2Tc9XIQygz za9R<7hmENJ@Oj3!D#@&7{AWBu$0C={fD4SrHoMd{22YdUpXUGP^}kjTpF;Y*{%(Cb rhflTish0kiA2>dB-2ZLIslI5#|Lx)i&Br)+$N(=l--Gn;aTosqqWx0( literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-xhdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..09f936f974c476ee78292ab5a6976716ba8dc3b9 GIT binary patch literal 4752 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-xhdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..dd885145fe8d3e629925b0676775736b9ba97f8b GIT binary patch literal 3434 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 X{HE|9mIWK%F0o@DANQpkO*s26z6V4i literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-xhdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..d35067dbe6cf1a29f48f4e253b80fa5680d967ee GIT binary patch literal 3040 zcmeHJe>Bs3AOCFGZMdQi6~>fGw@Yp(+(M@EvqGtENJgbSF(ynlHoM(WDN{T=rR*u! zGxFOo=Esy}Y8Tx&pWp-l)^GhhVZMP|X0;$J zA<+8(sOm*cYBxH#{eJrasHN+#L?E<0qOZsP6UngY5eyxLgF$n+Cy2DGqsB-*J?6tC zUr)U5)X&U4E#9Lmdht|5=r8(B3HxK1^u#p=B^Le1!o6SXTs?c;$OvvHt5`wNGe-of z2LuA8g+X^1ZWFW(-MyW#_(~?}$%ku0|23l~EEkS1nM@?RzL%H;amTvP$FqUULHDQm zX7Kosk9WR?O-gkoIn^crAdx-*Y=*A`v}-gSV71u_2Cn^4i1t0-McR6NTW&X=q+TKI zt!~WbxY2l9t$sYL__e=yenCL!J1{;s21TA8X{V&D$1l!|d<(#-r*Z?Lc(C%~NGqpR zqgD>YB*w?bbLd3Uf@DbE8vDNK(kAgmajE!pCR}1{ozqc5mbNYWOS#IKmPqrFRuU_e zOQj^GAsdJ4c0v%u92i)Xey|4xq7Yb3v*%T+6PT$Zj6p2KVy+qQ|tVpv@Xc=w8 zw;e88ULyJLXik{uos7P(kWDw;CqC-?&X2;Wiin~*6EIWc-Z$CM(nd=Z>V6gTrvIZ! zdPLfaSmh}=?q$;-D!*h0I^MCT&}z4%QT2Jpj>-=k^B)*f6!SUc4j*T4O5C$R}a<0PpotXZo7?ZN1Q(T*}!?>}ey zURylEl}t3SQu@vfMaC^dZb}L3&ad_t)ZI3W*7+dK+>OrdVoBo+G{6kNl7vhKl}yI8 zS&=pOrX9zFq2Ot;YgNaLQBKDpAz55mXSW=1qm1!tBpPctFvu!Fyz@p=92QB6xlf#Y zM=!zFl&Peq#5Hjyx<26(a>kY2mcjUkL1VStO0+3I8dDHv+{P7-ajNd>*2Kcs@qO*S z7GDc5Y@G2n71Spd&de}Q5d`v7j79qm-rd2~$;XjC;Wn>Q(4RUp4RLJZiCRB9o-*d= z8pH*S8cNi8Q)*pfptGeWcRAO0xa+Kbx0CZweQw6E(oztEE-0U3d+WLZ?dL6*rA1Us zTWY{S=0ql%nmnF>*fzUuT~0^ul>G!tQZeOpYs3p3eZFyb^YN6F6y~C#q2UJqNM5NQ zJP;2r@N|c}lymO~3_xcHu9XjpTz9L7)V8w%Hlbj(p=HnJM!(xUsRasUd*&2Zr3gHz zzzI&cbZ|ny1uhjC?{^g6h^e1%Es&bJI6FHVJm>T%6B!HC?zx5?kl-YPCkzPgWIeu3 zj*kxngHMoKY6h0qLM$(n=q`oyOzMNRU5)Kpi^x-{RLyiY2#vhg>egp73<@p=(kdM+ zjH|9L1Ph49wHf~=?KC{mFe&B*LnObi5PVbhPnmXGt(uR(*Cl0rga6b1`G1J~FuHzd zHWR`BM(f~}S_d!gxaYSmcLD*zHyAvj1Qz^ORN_P#{m@SwV*rAl$xD8Rjzp{iHFcX% z1b@v083t&PVPVfFN&#qLhPewo>wOJ07h?Z&`QQtwIn7Rl5BXTPMCsf)AIt~9qsoMT z)(ZhXj_Ud}4xc{?2D>z+by=SeG+L{zw;o5NG5qgjmvBu(=J}@)AZUED2IapkcXj%$ zwK?Vvzl_;y)Y3_HF%FymL8ZW^XUTHWspSCw21;9g95+Xms|b0FHQX^SB__~%J}kmo z=TpYp+t4OUI#pfB&BJKMFzHze7MjY`a;nob?5E^ZX(860yF7O}+C#W&U9+ihRr6l% z(h?ne-5Ve&ZY$HN@=Sa2h)en{qnyG78JnSD0nl7PP;pN3kuY80?%@vqJ$aoi0IdB2 lX|M5%5?|iLU-cC}aoy&g-^cVEwENr=`+E9&R2>Mv@?RVYGL!%S literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-xxhdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..381ad2f53c7dd28cd7ea57750854954ba730a3d8 GIT binary patch literal 8747 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-xxhdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..140a3ea2820071a9c28348480e54b0ea397da8be GIT binary patch literal 6000 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 BfD-@! literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-xxhdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..856d1384d3fc0b75656484ea0b6191dc3dcdda8b GIT binary patch literal 5306 zcmeHLdsI@{8sCOl*_dN53r(7CSEtOJUPhXc6`A8J%dXFm#?moCEyV|@P~91ODZL#7 zrJ2e{BvMXlkxH*YqwqS2fQWB1MI;|UazyTNtvhSY{l9zH{Lx z{X6H}{s3<)OQavqR>8#6#MA+igm1CBBaHsgrD+}7p8u8JW^A2MNE%!MtaO0M)b!yvl$0d$Ee7H$; zL4vpQ_T*xq>!7QQ|;VxsCVr97*Z2fcjvj_O{O>ux3Cmu|R)%7+0ZB4NE#fL;%v*Kf8z43^oVLzKWU4H3C1BsV8 zd6MDhsD6FjnNlr}#A@C$w(6@@m9b4oz;!rf#V<&LbZXs*l2@y7wp6(>*g+kW!9#7F zw2^jsrwH(m!z+xacwTX1I+l6K>@Nsf`cRR3Vq zne&4KO{}c|pS<_a4qwv)?8`)(59cS`jH)Xuj+ZuaZv?5{NL?S{%ImER(yG@`&n@CK z(>fXjR{G!(k$BR!Vo0yibaJ?*SI=Fy%oEU2)g^(fJlyNDU40$36ty@Ivm$FaTqCcH zg`}Y)$|odtmQEf^acT|U>nUYyP1Gey$t>#hXb;=vfiIopXs!jKZ8$vXu?iV@4Fzw`y^bh#NsG$m$C+0*r5jxfpUyl({TRTUZ zR^y~2xc+hX+$=ap(1>F3;7E$UYg8Sxb@!Y6FucY%)qLBV(rIlXG;f?=GANCr)|!6O z8rR*s5ng>GtYMut91<|GlIM`9N6XKOS8jy*pS5Y?4;sfsJqcynq00AB(uW3pFe@!l zcj0U^k#tQ{2PL@A*WJYokc+aZ>|-^#g6T}TU_=Y?GkJwQJGcsf*4v-4;@2VN?B)h! zt;+jvwq-VaWYB#``o2f2lG^5l(+g(zHSKkw@2;&-R3}zw>lPlLNdI0=Y+-fta8g-m zdkM}#IH^DjPhTE@$)o=o|VQXwQL@36YXv!M%2>=t0hz0-a)=u9hJ?U z2uK*@g%daAK%JR|-N}-yGHNcL4<@^y?j|mj1G4kR4!y zqWC|`U7(2iZHLBfBR117OT@0zV=Kn5=}#$P+#poPp}F~0b%L{|pwY z=ojW&w->R#Ileslb`j~9vfgjpelL1zdT6-Zmwk=={j$nO0lC@M)fyS8WWXTs`$2u8 z2(7Lm{xLw8xmNtr*58veC`%r{w1UI?S|ljG;j}BAU}=iW+lS!0!6=h-+VJ&?3w;K8 zQVO{)0AtKv)}3tpb-d;4aaoG)FL*eGslT{CVFPibOa45SL zPvooa`6gJo@(xk6W%FJe_#>`z$(+nxm?2zK+)Xr?`T<_^!GF=`N+&)X+ItIXR>QD~ zs>!l_RUpmH-iL#+^N1lI)YfFxV8|1t zo)q111Id{qEjZ9Y@3D40VgVF;VPC8XTim?lx^Yw#y|mC=%}wfTd68qSkf};(4vh6U zugvjxZ((>f%0)%s{0D8-kOD}}+*KZf+SWC6p1QCFMdhy z?Td*%{_@G`N$#e?CP@~qF7vTIT)NFIQ$Aou6UUg_bJc@4taQZI-Z$z-QyKw%Uj9g z&He7p@}z4SJFeiUxQe*xnK3!i2nRtg7S<_I&WnGzXXTx13h5>S%%t~1c_YRL?B3w^telU6)Oy&2Z~ zh(&;^R{=1)18yPtgNC>XgU?K-b<=#6U2zTq@MlkmH{AC44xIea$sOU=t69^vdfNpw z_cAhu0b7rQ%}#mFX0CSH2CLCv=Ca=rXmKO3TOLr0pb_DqB(=kf@kz4-1l#81ped&J8v0K`hF>rK&=kMFYBR7DjAHTLmU zV9u`R-c Rqz;A{;DZg=!`X#D{cn9W3+(^^ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/il_tokens_grid_column_margin.png b/app/src/main/res/drawable-xxxhdpi/il_tokens_grid_column_margin.png new file mode 100644 index 0000000000000000000000000000000000000000..bca049c35a3dc6b69f340e4529a4a0be4e798482 GIT binary patch literal 11325 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/il_tokens_grid_max_width.png b/app/src/main/res/drawable-xxxhdpi/il_tokens_grid_max_width.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9841207add3f07ac5bb2a8117ec83684b3a931 GIT binary patch literal 8677 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/il_tokens_grid_min_width.png b/app/src/main/res/drawable-xxxhdpi/il_tokens_grid_min_width.png new file mode 100644 index 0000000000000000000000000000000000000000..f189a900d4583601a6119aaf5027c51a0ee0c907 GIT binary patch literal 7825 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 Date: Wed, 23 Oct 2024 16:28:17 +0200 Subject: [PATCH 23/33] Replace Spacing by Space --- .../ouds/app/ui/tokens/TokenCategoryDetailScreen.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index cb5d3bad..0c42dc62 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -184,7 +184,7 @@ private fun GridIllustrations() { Image( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), contentDescription = null @@ -192,8 +192,8 @@ private fun GridIllustrations() { Image( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) - .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value) .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available painter = painterResource(id = R.drawable.il_tokens_grid_min_width), contentDescription = null @@ -201,8 +201,8 @@ private fun GridIllustrations() { Image( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) - .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value) .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available painter = painterResource(id = R.drawable.il_tokens_grid_max_width), contentDescription = null From f02c08fcd413f0449fbc3ba6e73c9df8e3c06975 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 24 Oct 2024 10:38:51 +0200 Subject: [PATCH 24/33] Add header --- app/src/main/res/drawable/ic_menu_grid.xml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/drawable/ic_menu_grid.xml b/app/src/main/res/drawable/ic_menu_grid.xml index 02cfc565..971d435a 100644 --- a/app/src/main/res/drawable/ic_menu_grid.xml +++ b/app/src/main/res/drawable/ic_menu_grid.xml @@ -1,10 +1,22 @@ + + - + From d846e480375bfd2e9ce3e028f7facb3f27bb299e Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 24 Oct 2024 17:26:03 +0200 Subject: [PATCH 25/33] Move grid illustrations in TokenPropertyIllustration file --- .../ui/tokens/TokenCategoryDetailScreen.kt | 33 ------------------ .../ui/tokens/TokenPropertyIllustration.kt | 34 +++++++++++++++++++ 2 files changed, 34 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 0c42dc62..71b2e8e5 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -12,8 +12,6 @@ package com.orange.ouds.app.ui.tokens -import androidx.compose.foundation.Image -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -29,7 +27,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow @@ -179,36 +176,6 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.Typography, TokenProperty.Grid -> Unit } -@Composable -private fun GridIllustrations() { - Image( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), - contentDescription = null - ) - Image( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) - .padding(top = OudsSpaceFixedKeyToken.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - painter = painterResource(id = R.drawable.il_tokens_grid_min_width), - contentDescription = null - ) - Image( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) - .padding(top = OudsSpaceFixedKeyToken.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - painter = painterResource(id = R.drawable.il_tokens_grid_max_width), - contentDescription = null - ) -} - @UiModePreviews.Default @Composable private fun PreviewTokenCategoryDetailScreen( diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt index ffe2f491..02df96b9 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable @@ -31,12 +32,15 @@ import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.graphics.Shape import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.dashedBorder import com.orange.ouds.theme.dottedBorder +import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken private val defaultIllustrationSize = 64.dp @@ -126,4 +130,34 @@ fun SpacePaddingInlineWithImageIllustrationRow( contentScale = ContentScale.None ) } +} + +@Composable +fun GridIllustrations() { + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), + contentDescription = null + ) + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_min_width), + contentDescription = null + ) + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) + .padding(top = OudsSpaceFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_max_width), + contentDescription = null + ) } \ No newline at end of file From 7fabe55806caec1f9ba7a97d4512024c53d71021 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Fri, 25 Oct 2024 16:49:38 +0200 Subject: [PATCH 26/33] Fix broken build during rebase --- .../ouds/app/ui/tokens/TokenPropertyIllustration.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt index 02df96b9..86fbc797 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -40,7 +40,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.dashedBorder import com.orange.ouds.theme.dottedBorder -import com.orange.ouds.theme.tokens.OudsSpaceFixedKeyToken +import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken private val defaultIllustrationSize = 64.dp @@ -137,7 +137,7 @@ fun GridIllustrations() { Image( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), contentDescription = null @@ -145,8 +145,8 @@ fun GridIllustrations() { Image( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) - .padding(top = OudsSpaceFixedKeyToken.Medium.value) + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) + .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available painter = painterResource(id = R.drawable.il_tokens_grid_min_width), contentDescription = null @@ -154,8 +154,8 @@ fun GridIllustrations() { Image( modifier = Modifier .fillMaxWidth() - .padding(horizontal = OudsSpaceFixedKeyToken.Medium.value) - .padding(top = OudsSpaceFixedKeyToken.Medium.value) + .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) + .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available painter = painterResource(id = R.drawable.il_tokens_grid_max_width), contentDescription = null From 133e5cb1ad61279157feb8e5763a08f18ef3ed03 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Tue, 22 Oct 2024 14:07:27 +0200 Subject: [PATCH 27/33] Add grid illustrations --- .../ui/tokens/TokenCategoryDetailScreen.kt | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index 71b2e8e5..cb5d3bad 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -12,6 +12,8 @@ package com.orange.ouds.app.ui.tokens +import androidx.compose.foundation.Image +import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -27,6 +29,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow @@ -176,6 +179,36 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.Typography, TokenProperty.Grid -> Unit } +@Composable +private fun GridIllustrations() { + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), + contentDescription = null + ) + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_min_width), + contentDescription = null + ) + Image( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) + .padding(top = OudsSpacingFixedKeyToken.Medium.value) + .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + painter = painterResource(id = R.drawable.il_tokens_grid_max_width), + contentDescription = null + ) +} + @UiModePreviews.Default @Composable private fun PreviewTokenCategoryDetailScreen( From ae85afae84d8440ccc4b5fc27997875c3220824c Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Wed, 23 Oct 2024 14:17:59 +0200 Subject: [PATCH 28/33] Add color tokens to the library and use them in the demo app --- .../java/com/orange/ouds/app/ui/MainScreen.kt | 3 +- .../java/com/orange/ouds/app/ui/TopBar.kt | 6 +- .../app/ui/components/ComponentsScreen.kt | 7 +- .../ui/tokens/TokenCategoryDetailScreen.kt | 40 +- .../ouds/app/ui/tokens/TokenProperty.kt | 6 +- .../ui/tokens/TokenPropertyIllustration.kt | 18 +- .../composable/DetailScreenHeader.kt | 8 +- .../app/ui/utilities/composable/LargeCard.kt | 15 +- .../app/ui/utilities/composable/Screen.kt | 4 +- .../ouds/core/component/button/OudsButton.kt | 4 +- .../orange/ouds/core/theme/OudsColorScheme.kt | 1003 +++++++++++++++++ .../com/orange/ouds/core/theme/OudsColors.kt | 27 - .../com/orange/ouds/core/theme/OudsTheme.kt | 1 - .../orange/ouds/core/utilities/OudsPreview.kt | 4 +- .../ouds/tokens/global/raw/ColorRawTokens.kt | 154 +++ .../global/raw/OrangeBrandColorRawTokens.kt | 38 + .../com/orange/ouds/theme/OudsColorScheme.kt | 90 -- .../orange/ouds/theme/OudsThemeContract.kt | 5 +- .../ouds/theme/tokens/OudsColorKeyToken.kt | 218 ++++ .../tokens/components/OudsButtonTokens.kt | 10 +- .../semantic/OudsColorSemanticTokens.kt | 464 ++++++++ .../theme/tokens/semantic/OudsColorTokens.kt | 236 ---- .../theme/orangecountry/OrangeCountryTheme.kt | 19 +- .../tokens/OrangeCountryRawColorTokens.kt | 20 - .../OrangeCountrySemanticColorTokens.kt | 23 - .../orange/ouds/theme/orange/OrangeTheme.kt | 4 - .../orange/tokens/OrangeRawColorTokens.kt | 49 - .../tokens/OrangeSemanticColorTokens.kt | 59 - .../ouds/theme/whitelabel/WhiteLabelTheme.kt | 4 +- .../tokens/WhiteLabelSemanticColorTokens.kt | 50 +- 30 files changed, 1955 insertions(+), 634 deletions(-) create mode 100644 core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt delete mode 100644 core/src/main/java/com/orange/ouds/core/theme/OudsColors.kt create mode 100644 global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/ColorRawTokens.kt create mode 100644 global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/OrangeBrandColorRawTokens.kt delete mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/OudsColorScheme.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt delete mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorTokens.kt delete mode 100644 theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountryRawColorTokens.kt delete mode 100644 theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountrySemanticColorTokens.kt delete mode 100644 theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeRawColorTokens.kt delete mode 100644 theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeSemanticColorTokens.kt diff --git a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt index c632789d..bcf17c36 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt @@ -57,6 +57,7 @@ import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.orange.ORANGE_THEME_NAME import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.orangecountry.OrangeCountryTheme +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.whitelabel.WhiteLabelTheme @@ -154,7 +155,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U Dialog(onDismissRequest = dismissDialog) { Column( modifier = Modifier - .background(OudsTheme.colorScheme.surfaceVariant) + .background(OudsColorKeyToken.BgSecondary.value) .selectableGroup() ) { Text( diff --git a/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt b/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt index 70337ec5..54a61818 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt @@ -34,8 +34,8 @@ import com.orange.ouds.app.ui.utilities.isDarkModeEnabled import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @Composable @@ -70,7 +70,7 @@ private fun TopBar( Image( imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(id = R.string.app_common_back_a11y), - colorFilter = ColorFilter.tint(OudsColorKeyToken.OnSurface.value) //TODO use ContentDefault token when available + colorFilter = ColorFilter.tint(OudsColorKeyToken.ContentDefault.value) ) } } @@ -78,7 +78,7 @@ private fun TopBar( title = { Text( text = title, - color = OudsColorKeyToken.OnSurface.value, //TODO use ContentDefault token when available + color = OudsColorKeyToken.ContentDefault.value, modifier = Modifier.semantics { traversalIndex = -1f }, style = OudsTypographyKeyToken.HeadingMedium.value ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt index 1b2d401c..f1ce6e93 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt @@ -27,10 +27,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.orange.ouds.app.ui.utilities.composable.Screen import com.orange.ouds.core.component.button.OudsButton -import com.orange.ouds.core.theme.OudsTheme import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken @@ -38,8 +38,7 @@ import com.orange.ouds.theme.tokens.OudsSpaceKeyToken fun ComponentsScreen() { Screen { Column( - modifier = Modifier - .fillMaxSize(), + modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { @@ -52,7 +51,7 @@ fun ComponentsScreen() { .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .width(OudsGridKeyToken.Margin.value) .height(OudsGridKeyToken.ColumnGap.value) - .background(OudsTheme.colorScheme.primary) + .background(OudsColorKeyToken.BgBrandPrimary.value) ) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index cb5d3bad..d4a18a0f 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -12,8 +12,6 @@ package com.orange.ouds.app.ui.tokens -import androidx.compose.foundation.Image -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -29,7 +27,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.style.TextOverflow @@ -43,9 +40,9 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.OudsBorderStyle +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken @Composable fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: (Long) -> Unit) { @@ -112,7 +109,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: maxLines = 1, overflow = TextOverflow.Ellipsis, style = OudsTypographyKeyToken.BodyDefaultMedium.value, - color = OudsColorKeyToken.OnSurfaceVariant.value //TODO use ContentMuted token when available + color = OudsColorKeyToken.ContentMuted.value ) } } else { @@ -146,8 +143,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: text = token.literalValue, maxLines = 1, overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.Tertiary.value), //TODO use ContentMuted token when available - color = OudsColorKeyToken.OnSurfaceVariant.value //TODO use ContentMuted token when available + style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.ContentMuted.value) ) } } @@ -179,36 +175,6 @@ private fun TokenIllustration(tokenProperty: TokenProperty, token: Token) = is TokenProperty.Typography, TokenProperty.Grid -> Unit } -@Composable -private fun GridIllustrations() { - Image( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), - contentDescription = null - ) - Image( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) - .padding(top = OudsSpacingFixedKeyToken.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - painter = painterResource(id = R.drawable.il_tokens_grid_min_width), - contentDescription = null - ) - Image( - modifier = Modifier - .fillMaxWidth() - .padding(horizontal = OudsSpacingFixedKeyToken.Medium.value) - .padding(top = OudsSpacingFixedKeyToken.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available - painter = painterResource(id = R.drawable.il_tokens_grid_max_width), - contentDescription = null - ) -} - @UiModePreviews.Default @Composable private fun PreviewTokenCategoryDetailScreen( diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 219ecfa1..7641a068 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -43,13 +43,13 @@ import com.orange.ouds.foundation.extensions.orElse import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken import com.orange.ouds.theme.tokens.OudsSizeKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken sealed class TokenProperty( @StringRes val nameRes: Int?, @@ -77,7 +77,7 @@ sealed class TokenProperty( @Composable fun Illustration(elevation: Dp) { Surface(shadowElevation = elevation) { - IllustrationBox(backgroundColor = OudsColorKeyToken.Surface.value) //TODO use BgDefaultSecondary token when available + IllustrationBox(backgroundColor = OudsColorKeyToken.BgSecondary.value) } } } @@ -106,7 +106,7 @@ sealed class TokenProperty( } } } - + data object SizeIconDecorative : TokenProperty( nameRes = R.string.app_tokens_dimension_size_iconDecorative_label, tokens = { OudsSizeKeyToken.IconDecorative.entries.map { Token(it.name, it.value) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt index 86fbc797..743e55f3 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -40,15 +40,15 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.dashedBorder import com.orange.ouds.theme.dottedBorder +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken private val defaultIllustrationSize = 64.dp @Composable fun IllustrationBox( modifier: Modifier = Modifier, - backgroundColor: Color = OudsColorKeyToken.OnSurface.value, + backgroundColor: Color = OudsColorKeyToken.BgEmphasized.value, contentAlignment: Alignment = Alignment.TopStart, content: @Composable BoxScope.() -> Unit = { } ) { @@ -68,7 +68,7 @@ fun BorderIllustrationBox( shape: Shape = RectangleShape, style: OudsBorderStyle = OudsBorderStyle.Solid ) { - val borderColor = OudsColorKeyToken.OnSurface.value //TODO use ContentDefault token when available + val borderColor = OudsColorKeyToken.ContentDefault.value val modifier = when (style) { OudsBorderStyle.None -> Modifier OudsBorderStyle.Solid -> Modifier.border(width = width, color = borderColor, shape = shape) @@ -95,7 +95,7 @@ fun SpaceIllustrationBox( } IllustrationBox(contentAlignment = contentAlignment) { Box( - modifier = dimensionBoxModifier.background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + modifier = dimensionBoxModifier.background(color = OudsColorKeyToken.AlwaysInfo.value) ) } } @@ -114,14 +114,14 @@ fun SpacePaddingInlineWithImageIllustrationRow( Row( modifier = modifier .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + .background(color = OudsColorKeyToken.BgEmphasized.value), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier .fillMaxHeight() .width(width = spaceSize) - .background(Color(0xFF26B2FF)) //TODO use AlwaysInfo token when available + .background(color = OudsColorKeyToken.AlwaysInfo.value) ) Image( modifier = imageModifier, @@ -138,7 +138,7 @@ fun GridIllustrations() { modifier = Modifier .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + .background(OudsColorKeyToken.BgEmphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), contentDescription = null ) @@ -147,7 +147,7 @@ fun GridIllustrations() { .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + .background(OudsColorKeyToken.BgEmphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_min_width), contentDescription = null ) @@ -156,7 +156,7 @@ fun GridIllustrations() { .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + .background(OudsColorKeyToken.BgEmphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_max_width), contentDescription = null ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt index 3e649f77..989f7915 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt @@ -34,7 +34,7 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun DetailScreenHeader( @@ -44,12 +44,12 @@ fun DetailScreenHeader( Column { Image( painter = painterResource(imageRes), - colorFilter = ColorFilter.tint(OudsColorKeyToken.InverseOnSurface.value), //TODO use OnBgEmphasized token when available + colorFilter = ColorFilter.tint(OudsColorKeyToken.ContentDefaultOnBgEmphasized.value), contentDescription = null, modifier = Modifier .fillMaxWidth() .height(186.dp) - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + .background(OudsColorKeyToken.BgEmphasized.value), contentScale = ContentScale.None ) @@ -68,7 +68,7 @@ private fun DetailScreenDescription( Text( modifier = modifier, text = stringResource(descriptionRes), - color = OudsColorKeyToken.OnSurface.value, //TODO use ContentDefault token when available + color = OudsColorKeyToken.ContentDefault.value, style = OudsTypographyKeyToken.BodyDefaultLarge.value ) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt index 37bd6af4..65f97861 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt @@ -20,6 +20,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults.cardElevation +import androidx.compose.material3.CardElevation import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -34,7 +36,8 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsElevationKeyToken /** * Temporary large card used by the demo app @@ -46,16 +49,16 @@ fun LargeCard( onClick: () -> Unit, modifier: Modifier = Modifier, ) { - Card(modifier = modifier, onClick = onClick) { - Column { + Card(modifier = modifier, elevation = cardElevation(defaultElevation = OudsElevationKeyToken.Raised.value), onClick = onClick) { + Column(modifier = Modifier.background(OudsColorKeyToken.ElevationRaised.value)) { Image( painter = painterResource(imageRes), - colorFilter = ColorFilter.tint(OudsColorKeyToken.InverseOnSurface.value), //TODO use OnBgEmphasized token when available + colorFilter = ColorFilter.tint(OudsColorKeyToken.ContentDefaultOnBgEmphasized.value), contentDescription = null, modifier = Modifier .fillMaxWidth() .height(184.dp) //TODO use token when available - .background(OudsColorKeyToken.OnSurface.value), //TODO use BgEmphasizedPrimary token when available + .background(OudsColorKeyToken.BgEmphasized.value), contentScale = ContentScale.None ) Column( @@ -63,7 +66,7 @@ fun LargeCard( ) { Text( text = title, - color = OudsColorKeyToken.OnSurface.value, //TODO use ContentDefault token when available + color = OudsColorKeyToken.ContentDefault.value, overflow = TextOverflow.Ellipsis, maxLines = 1, style = OudsTypographyKeyToken.HeadingMedium.value diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt index e6198591..de16dbcb 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt @@ -20,14 +20,14 @@ import androidx.compose.ui.Modifier import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun Screen(content: @Composable () -> Unit) { Box( modifier = Modifier .fillMaxSize() - .background(OudsColorKeyToken.Background.value) //TODO use BgDefaultPrimary token when available + .background(OudsColorKeyToken.BgPrimary.value) ) { content() } diff --git a/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt b/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt index 115b0873..e9b20744 100644 --- a/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt +++ b/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt @@ -28,6 +28,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews +import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun OudsButton( @@ -64,7 +65,8 @@ fun OudsButton( Text( modifier = modifier, text = text, - style = labelStyle.value + style = labelStyle.value, + color = OudsColorKeyToken.ContentOnActionPrimaryEnabled.value ) } } diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt new file mode 100644 index 00000000..8cae4f39 --- /dev/null +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt @@ -0,0 +1,1003 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.core.theme + +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.Stable +import androidx.compose.ui.graphics.Color +import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens + +data class OudsColorScheme( + val globalColors: Global, + val actionColors: Action, + val alwaysColors: Always, + val backgroundColors: Background, + val borderColors: Border, + val brandColors: Brand, + val contentColors: Content, + val elevationColors: Elevation, + val gradientColors: Gradient, + val decorativeColors: Decorative, +) { + + data class Global( + val transparentDefault: Color + ) + + data class Action( + val disabled: Color, + val disabledOnBgEmphasized: Color, + val negativeEnabled: Color, + val negativeFocus: Color, + val negativeHover: Color, + val negativeLoading: Color, + val negativePressed: Color, + val primaryEnabled: Color, + val primaryEnabledOnBgEmphasized: Color, + val primaryFocus: Color, + val primaryFocusOnBgEmphasized: Color, + val primaryHover: Color, + val primaryHoverOnBgEmphasized: Color, + val primaryLoading: Color, + val primaryLoadingOnBgEmphasized: Color, + val primaryPressed: Color, + val primaryPressedOnBgEmphasized: Color, + val secondaryEnabled: Color, + val secondaryEnabledOnBgEmphasized: Color, + val secondaryFocus: Color, + val secondaryFocusOnBgEmphasized: Color, + val secondaryHover: Color, + val secondaryHoverOnBgEmphasized: Color, + val secondaryLoading: Color, + val secondaryLoadingOnBgEmphasized: Color, + val secondaryPressed: Color, + val secondaryPressedOnBgEmphasized: Color, + val selected: Color, + val selectedOnBgEmphasized: Color, + val visited: Color, + val visitedOnBgEmphasized: Color, + ) + + data class Always( + val accent: Color, + val black: Color, + val info: Color, + val negative: Color, + val onAccent: Color, + val onBlack: Color, + val onInfo: Color, + val onNegative: Color, + val onPositive: Color, + val onWarning: Color, + val onWhite: Color, + val positive: Color, + val warning: Color, + val white: Color, + ) + + data class Background( + val brandPrimary: Color, + val emphasized: Color, + val primary: Color, + val secondary: Color, + val statusAccentEmphasized: Color, + val statusAccentMuted: Color, + val statusAccentMutedOnBgEmphasized: Color, + val statusInfoEmphasized: Color, + val statusInfoMuted: Color, + val statusInfoMutedOnBgEmphasized: Color, + val statusNegativeEmphasized: Color, + val statusNegativeMuted: Color, + val statusNegativeMutedOnBgEmphasized: Color, + val statusNeutral: Color, + val statusNeutralOnBgEmphasized: Color, + val statusPositiveEmphasized: Color, + val statusPositiveMuted: Color, + val statusPositiveMutedOnBgEmphasized: Color, + val statusWarningEmphasized: Color, + val statusWarningMuted: Color, + val statusWarningMutedOnBgEmphasized: Color, + val tertiary: Color, + ) + + data class Border( + val brandPrimary: Color, + val brandPrimaryOnBgEmphasized: Color, + val default: Color, + val defaultOnBgEmphasized: Color, + val emphasized: Color, + val emphasizedOnBgEmphasized: Color, + val focus: Color, + val focusInset: Color, + val focusInsetOnBgEmphasized: Color, + val focusOnBgEmphasized: Color, + val onBrandPrimary: Color, + ) + + data class Brand( + val accentDefault: Color, + val accentHigh: Color, + val accentHighest: Color, + val accentLowest: Color, + val infoDefault: Color, + val infoHighest: Color, + val infoLowest: Color, + val negativeDefault: Color, + val negativeHigh: Color, + val negativeHigher: Color, + val negativeHighest: Color, + val negativeLowest: Color, + val neutralEmphasizedBlack: Color, + val neutralEmphasizedHigh: Color, + val neutralEmphasizedHigher: Color, + val neutralEmphasizedHighest: Color, + val neutralEmphasizedLow: Color, + val neutralEmphasizedLower: Color, + val neutralEmphasizedLowest: Color, + val neutralEmphasizedMedium: Color, + val neutralMutedHighest: Color, + val neutralMutedLow: Color, + val neutralMutedLower: Color, + val neutralMutedLowest: Color, + val neutralMutedMedium: Color, + val neutralMutedWhite: Color, + val positiveDefault: Color, + val positiveHighest: Color, + val positiveLowest: Color, + val primaryDefault: Color, + val primaryLow: Color, + val warningDefault: Color, + val warningHigh: Color, + val warningHighest: Color, + val warningLowest: Color, + ) + + data class Content( + val brandPrimary: Color, + val brandPrimaryOnBgEmphasized: Color, + val default: Color, + val defaultOnBgEmphasized: Color, + val disabled: Color, + val disabledOnBgEmphasized: Color, + val muted: Color, + val mutedOnBgEmphasized: Color, + val onActionDisabled: Color, + val onActionDisabledOnBgEmphasized: Color, + val onActionNegative: Color, + val onActionPrimaryEnabled: Color, + val onActionPrimaryEnabledOnBgEmphasized: Color, + val onActionPrimaryFocus: Color, + val onActionPrimaryFocusOnBgEmphasized: Color, + val onActionPrimaryHover: Color, + val onActionPrimaryHoverOnBgEmphasized: Color, + val onActionPrimaryLoading: Color, + val onActionPrimaryLoadingOnBgEmphasized: Color, + val onActionPrimaryPressed: Color, + val onActionPrimaryPressedOnBgEmphasized: Color, + val onBrandPrimary: Color, + val onStatusAccentEmphasized: Color, + val onStatusAccentMuted: Color, + val onStatusAccentMutedOnBgEmphasized: Color, + val onStatusInfoEmphasized: Color, + val onStatusInfoMuted: Color, + val onStatusInfoMutedOnBgEmphasized: Color, + val onStatusNegativeEmphasized: Color, + val onStatusNegativeMuted: Color, + val onStatusNegativeMutedOnBgEmphasized: Color, + val onStatusPositiveEmphasized: Color, + val onStatusPositiveMuted: Color, + val onStatusPositiveMutedOnBgEmphasized: Color, + val onStatusWarningEmphasized: Color, + val onStatusWarningMuted: Color, + val onStatusWarningMutedOnBgEmphasized: Color, + val statusInfo: Color, + val statusNegative: Color, + val statusPositive: Color, + val statusWarning: Color, + ) + + data class Elevation( + val drag: Color, + val dragOnBgEmphasized: Color, + val dragOnBgSecondary: Color, + val modal: Color, + val overlayDefault: Color, + val overlayDefaultOnBgEmphasized: Color, + val overlayDefaultOnBgSecondary: Color, + val overlayEmphasized: Color, + val overlayEmphasizedOnBgEmphasized: Color, + val overlayEmphasizedOnBgSecondary: Color, + val raised: Color, + val raisedOnBgEmphasized: Color, + val raisedOnBgSecondary: Color, + ) + + data class Gradient( + val skeletonMiddle: Color, + val skeletonMiddleOnBgEmphasized: Color, + val skeletonStartEnd: Color, + val skeletonStartEndOnBgEmphasized: Color, + ) + + data class Decorative( + val accent1Default: Color, + val accent1Emphasized: Color, + val accent1Muted: Color, + val accent2Default: Color, + val accent2Emphasized: Color, + val accent2Muted: Color, + val accent3Default: Color, + val accent3Emphasized: Color, + val accent3Muted: Color, + val accent4Default: Color, + val accent4Emphasized: Color, + val accent4Muted: Color, + val accent5Default: Color, + val accent5Emphasized: Color, + val accent5Muted: Color, + val brandPrimary: Color, + val brandSecondary: Color, + val brandTertiary: Color, + val neutralDefault: Color, + val neutralEmphasized: Color, + val neutralMuted: Color, + val skinTint100: Color, + val skinTint200: Color, + val skinTint300: Color, + val skinTint400: Color, + val skinTint500: Color, + val skinTint600: Color, + val skinTint700: Color, + val skinTint800: Color, + val skinTint900: Color, + ) +} + +val OudsColorSemanticTokens.lightColorScheme: OudsColorScheme + get() = OudsColorScheme( + globalColors = OudsColorScheme.Global( + transparentDefault = globalColorTokens.transparentDefaultLight, + ), + actionColors = OudsColorScheme.Action( + disabled = actionColorTokens.actionDisabledLight, + disabledOnBgEmphasized = actionColorTokens.actionDisabledOnBgEmphasizedLight, + negativeEnabled = actionColorTokens.actionNegativeEnabledLight, + negativeFocus = actionColorTokens.actionNegativeFocusLight, + negativeHover = actionColorTokens.actionNegativeHoverLight, + negativeLoading = actionColorTokens.actionNegativeLoadingLight, + negativePressed = actionColorTokens.actionNegativePressedLight, + primaryEnabled = actionColorTokens.actionPrimaryEnabledLight, + primaryEnabledOnBgEmphasized = actionColorTokens.actionPrimaryEnabledOnBgEmphasizedLight, + primaryFocus = actionColorTokens.actionPrimaryFocusLight, + primaryFocusOnBgEmphasized = actionColorTokens.actionPrimaryFocusOnBgEmphasizedLight, + primaryHover = actionColorTokens.actionPrimaryHoverLight, + primaryHoverOnBgEmphasized = actionColorTokens.actionPrimaryHoverOnBgEmphasizedLight, + primaryLoading = actionColorTokens.actionPrimaryLoadingLight, + primaryLoadingOnBgEmphasized = actionColorTokens.actionPrimaryLoadingOnBgEmphasizedLight, + primaryPressed = actionColorTokens.actionPrimaryPressedLight, + primaryPressedOnBgEmphasized = actionColorTokens.actionPrimaryPressedOnBgEmphasizedLight, + secondaryEnabled = actionColorTokens.actionSecondaryEnabledLight, + secondaryEnabledOnBgEmphasized = actionColorTokens.actionSecondaryEnabledOnBgEmphasizedLight, + secondaryFocus = actionColorTokens.actionSecondaryFocusLight, + secondaryFocusOnBgEmphasized = actionColorTokens.actionSecondaryFocusOnBgEmphasizedLight, + secondaryHover = actionColorTokens.actionSecondaryHoverLight, + secondaryHoverOnBgEmphasized = actionColorTokens.actionSecondaryHoverOnBgEmphasizedLight, + secondaryLoading = actionColorTokens.actionSecondaryLoadingLight, + secondaryLoadingOnBgEmphasized = actionColorTokens.actionSecondaryLoadingOnBgEmphasizedLight, + secondaryPressed = actionColorTokens.actionSecondaryPressedLight, + secondaryPressedOnBgEmphasized = actionColorTokens.actionSecondaryPressedOnBgEmphasizedLight, + selected = actionColorTokens.actionSelectedLight, + selectedOnBgEmphasized = actionColorTokens.actionSelectedOnBgEmphasizedLight, + visited = actionColorTokens.actionVisitedLight, + visitedOnBgEmphasized = actionColorTokens.actionVisitedOnBgEmphasizedLight, + ), + alwaysColors = OudsColorScheme.Always( + accent = alwaysColorTokens.alwaysAccentLight, + black = alwaysColorTokens.alwaysBlackLight, + info = alwaysColorTokens.alwaysInfoLight, + negative = alwaysColorTokens.alwaysNegativeLight, + onAccent = alwaysColorTokens.alwaysOnAccentLight, + onBlack = alwaysColorTokens.alwaysOnBlackLight, + onInfo = alwaysColorTokens.alwaysOnInfoLight, + onNegative = alwaysColorTokens.alwaysOnNegativeLight, + onPositive = alwaysColorTokens.alwaysOnPositiveLight, + onWarning = alwaysColorTokens.alwaysOnWarningLight, + onWhite = alwaysColorTokens.alwaysOnWhiteLight, + positive = alwaysColorTokens.alwaysPositiveLight, + warning = alwaysColorTokens.alwaysWarningLight, + white = alwaysColorTokens.alwaysWhiteLight, + ), + backgroundColors = OudsColorScheme.Background( + brandPrimary = backgroundColorTokens.bgBrandPrimaryLight, + emphasized = backgroundColorTokens.bgEmphasizedLight, + primary = backgroundColorTokens.bgPrimaryLight, + secondary = backgroundColorTokens.bgSecondaryLight, + statusAccentEmphasized = backgroundColorTokens.bgStatusAccentEmphasizedLight, + statusAccentMuted = backgroundColorTokens.bgStatusAccentMutedLight, + statusAccentMutedOnBgEmphasized = backgroundColorTokens.bgStatusAccentMutedOnBgEmphasizedLight, + statusInfoEmphasized = backgroundColorTokens.bgStatusInfoEmphasizedLight, + statusInfoMuted = backgroundColorTokens.bgStatusInfoMutedLight, + statusInfoMutedOnBgEmphasized = backgroundColorTokens.bgStatusInfoMutedOnBgEmphasizedLight, + statusNegativeEmphasized = backgroundColorTokens.bgStatusNegativeEmphasizedLight, + statusNegativeMuted = backgroundColorTokens.bgStatusNegativeMutedLight, + statusNegativeMutedOnBgEmphasized = backgroundColorTokens.bgStatusNegativeMutedOnBgEmphasizedLight, + statusNeutral = backgroundColorTokens.bgStatusNeutralLight, + statusNeutralOnBgEmphasized = backgroundColorTokens.bgStatusNeutralOnBgEmphasizedLight, + statusPositiveEmphasized = backgroundColorTokens.bgStatusPositiveEmphasizedLight, + statusPositiveMuted = backgroundColorTokens.bgStatusPositiveMutedLight, + statusPositiveMutedOnBgEmphasized = backgroundColorTokens.bgStatusPositiveMutedOnBgEmphasizedLight, + statusWarningEmphasized = backgroundColorTokens.bgStatusWarningEmphasizedLight, + statusWarningMuted = backgroundColorTokens.bgStatusWarningMutedLight, + statusWarningMutedOnBgEmphasized = backgroundColorTokens.bgStatusWarningMutedOnBgEmphasizedLight, + tertiary = backgroundColorTokens.bgTertiaryLight, + ), + borderColors = OudsColorScheme.Border( + brandPrimary = borderColorTokens.borderBrandPrimaryLight, + brandPrimaryOnBgEmphasized = borderColorTokens.borderBrandPrimaryOnBgEmphasizedLight, + default = borderColorTokens.borderDefaultLight, + defaultOnBgEmphasized = borderColorTokens.borderDefaultOnBgEmphasizedLight, + emphasized = borderColorTokens.borderEmphasizedLight, + emphasizedOnBgEmphasized = borderColorTokens.borderEmphasizedOnBgEmphasizedLight, + focus = borderColorTokens.borderFocusLight, + focusInset = borderColorTokens.borderFocusInsetLight, + focusInsetOnBgEmphasized = borderColorTokens.borderFocusInsetOnBgEmphasizedLight, + focusOnBgEmphasized = borderColorTokens.borderFocusOnBgEmphasizedLight, + onBrandPrimary = borderColorTokens.borderOnBrandPrimaryLight, + ), + brandColors = OudsColorScheme.Brand( + accentDefault = brandColorTokens.brandAccentDefaultLight, + accentHigh = brandColorTokens.brandAccentHighLight, + accentHighest = brandColorTokens.brandAccentHighestLight, + accentLowest = brandColorTokens.brandAccentLowestLight, + infoDefault = brandColorTokens.brandInfoDefaultLight, + infoHighest = brandColorTokens.brandInfoHighestLight, + infoLowest = brandColorTokens.brandInfoLowestLight, + negativeDefault = brandColorTokens.brandNegativeDefaultLight, + negativeHigh = brandColorTokens.brandNegativeHighLight, + negativeHigher = brandColorTokens.brandNegativeHigherLight, + negativeHighest = brandColorTokens.brandNegativeHighestLight, + negativeLowest = brandColorTokens.brandNegativeLowestLight, + neutralEmphasizedBlack = brandColorTokens.brandNeutralEmphasizedBlackLight, + neutralEmphasizedHigh = brandColorTokens.brandNeutralEmphasizedHighLight, + neutralEmphasizedHigher = brandColorTokens.brandNeutralEmphasizedHigherLight, + neutralEmphasizedHighest = brandColorTokens.brandNeutralEmphasizedHighestLight, + neutralEmphasizedLow = brandColorTokens.brandNeutralEmphasizedLowLight, + neutralEmphasizedLower = brandColorTokens.brandNeutralEmphasizedLowerLight, + neutralEmphasizedLowest = brandColorTokens.brandNeutralEmphasizedLowestLight, + neutralEmphasizedMedium = brandColorTokens.brandNeutralEmphasizedMediumLight, + neutralMutedHighest = brandColorTokens.brandNeutralMutedHighestLight, + neutralMutedLow = brandColorTokens.brandNeutralMutedLowLight, + neutralMutedLower = brandColorTokens.brandNeutralMutedLowerLight, + neutralMutedLowest = brandColorTokens.brandNeutralMutedLowestLight, + neutralMutedMedium = brandColorTokens.brandNeutralMutedMediumLight, + neutralMutedWhite = brandColorTokens.brandNeutralMutedWhiteLight, + positiveDefault = brandColorTokens.brandPositiveDefaultLight, + positiveHighest = brandColorTokens.brandPositiveHighestLight, + positiveLowest = brandColorTokens.brandPositiveLowestLight, + primaryDefault = brandColorTokens.brandPrimaryDefaultLight, + primaryLow = brandColorTokens.brandPrimaryLowLight, + warningDefault = brandColorTokens.brandWarningDefaultLight, + warningHigh = brandColorTokens.brandWarningHighLight, + warningHighest = brandColorTokens.brandWarningHighestLight, + warningLowest = brandColorTokens.brandWarningLowestLight, + ), + contentColors = OudsColorScheme.Content( + brandPrimary = contentColorTokens.contentBrandPrimaryLight, + brandPrimaryOnBgEmphasized = contentColorTokens.contentBrandPrimaryOnBgEmphasizedLight, + default = contentColorTokens.contentDefaultLight, + defaultOnBgEmphasized = contentColorTokens.contentDefaultOnBgEmphasizedLight, + disabled = contentColorTokens.contentDisabledLight, + disabledOnBgEmphasized = contentColorTokens.contentDisabledOnBgEmphasizedLight, + muted = contentColorTokens.contentMutedLight, + mutedOnBgEmphasized = contentColorTokens.contentMutedOnBgEmphasizedLight, + onActionDisabled = contentColorTokens.contentOnActionDisabledLight, + onActionDisabledOnBgEmphasized = contentColorTokens.contentOnActionDisabledOnBgEmphasizedLight, + onActionNegative = contentColorTokens.contentOnActionNegativeLight, + onActionPrimaryEnabled = contentColorTokens.contentOnActionPrimaryEnabledLight, + onActionPrimaryEnabledOnBgEmphasized = contentColorTokens.contentOnActionPrimaryEnabledOnBgEmphasizedLight, + onActionPrimaryFocus = contentColorTokens.contentOnActionPrimaryFocusLight, + onActionPrimaryFocusOnBgEmphasized = contentColorTokens.contentOnActionPrimaryFocusOnBgEmphasizedLight, + onActionPrimaryHover = contentColorTokens.contentOnActionPrimaryHoverLight, + onActionPrimaryHoverOnBgEmphasized = contentColorTokens.contentOnActionPrimaryHoverOnBgEmphasizedLight, + onActionPrimaryLoading = contentColorTokens.contentOnActionPrimaryLoadingLight, + onActionPrimaryLoadingOnBgEmphasized = contentColorTokens.contentOnActionPrimaryLoadingOnBgEmphasizedLight, + onActionPrimaryPressed = contentColorTokens.contentOnActionPrimaryPressedLight, + onActionPrimaryPressedOnBgEmphasized = contentColorTokens.contentOnActionPrimaryPressedOnBgEmphasizedLight, + onBrandPrimary = contentColorTokens.contentOnBrandPrimaryLight, + onStatusAccentEmphasized = contentColorTokens.contentOnStatusAccentEmphasizedLight, + onStatusAccentMuted = contentColorTokens.contentOnStatusAccentMutedLight, + onStatusAccentMutedOnBgEmphasized = contentColorTokens.contentOnStatusAccentMutedOnBgEmphasizedLight, + onStatusInfoEmphasized = contentColorTokens.contentOnStatusInfoEmphasizedLight, + onStatusInfoMuted = contentColorTokens.contentOnStatusInfoMutedLight, + onStatusInfoMutedOnBgEmphasized = contentColorTokens.contentOnStatusInfoMutedOnBgEmphasizedLight, + onStatusNegativeEmphasized = contentColorTokens.contentOnStatusNegativeEmphasizedLight, + onStatusNegativeMuted = contentColorTokens.contentOnStatusNegativeMutedLight, + onStatusNegativeMutedOnBgEmphasized = contentColorTokens.contentOnStatusNegativeMutedOnBgEmphasizedLight, + onStatusPositiveEmphasized = contentColorTokens.contentOnStatusPositiveEmphasizedLight, + onStatusPositiveMuted = contentColorTokens.contentOnStatusPositiveMutedLight, + onStatusPositiveMutedOnBgEmphasized = contentColorTokens.contentOnStatusPositiveMutedOnBgEmphasizedLight, + onStatusWarningEmphasized = contentColorTokens.contentOnStatusWarningEmphasizedLight, + onStatusWarningMuted = contentColorTokens.contentOnStatusWarningMutedLight, + onStatusWarningMutedOnBgEmphasized = contentColorTokens.contentOnStatusWarningMutedOnBgEmphasizedLight, + statusInfo = contentColorTokens.contentStatusInfoLight, + statusNegative = contentColorTokens.contentStatusNegativeLight, + statusPositive = contentColorTokens.contentStatusPositiveLight, + statusWarning = contentColorTokens.contentStatusWarningLight, + ), + elevationColors = OudsColorScheme.Elevation( + drag = elevationColorTokens.elevationDragLight, + dragOnBgEmphasized = elevationColorTokens.elevationDragOnBgEmphasizedLight, + dragOnBgSecondary = elevationColorTokens.elevationDragOnBgSecondaryLight, + modal = elevationColorTokens.elevationModalLight, + overlayDefault = elevationColorTokens.elevationOverlayDefaultLight, + overlayDefaultOnBgEmphasized = elevationColorTokens.elevationOverlayDefaultOnBgEmphasizedLight, + overlayDefaultOnBgSecondary = elevationColorTokens.elevationOverlayDefaultOnBgSecondaryLight, + overlayEmphasized = elevationColorTokens.elevationOverlayEmphasizedLight, + overlayEmphasizedOnBgEmphasized = elevationColorTokens.elevationOverlayEmphasizedOnBgEmphasizedLight, + overlayEmphasizedOnBgSecondary = elevationColorTokens.elevationOverlayEmphasizedOnBgSecondaryLight, + raised = elevationColorTokens.elevationRaisedLight, + raisedOnBgEmphasized = elevationColorTokens.elevationRaisedOnBgEmphasizedLight, + raisedOnBgSecondary = elevationColorTokens.elevationRaisedOnBgSecondaryLight, + ), + gradientColors = OudsColorScheme.Gradient( + skeletonMiddle = gradientColorTokens.gradientSkeletonMiddleLight, + skeletonMiddleOnBgEmphasized = gradientColorTokens.gradientSkeletonMiddleOnBgEmphasizedLight, + skeletonStartEnd = gradientColorTokens.gradientSkeletonStartEndLight, + skeletonStartEndOnBgEmphasized = gradientColorTokens.gradientSkeletonStartEndOnBgEmphasizedLight, + ), + decorativeColors = OudsColorScheme.Decorative( + accent1Default = decorativeColorTokens.decorativeAccent1DefaultLight, + accent1Emphasized = decorativeColorTokens.decorativeAccent1EmphasizedLight, + accent1Muted = decorativeColorTokens.decorativeAccent1MutedLight, + accent2Default = decorativeColorTokens.decorativeAccent2DefaultLight, + accent2Emphasized = decorativeColorTokens.decorativeAccent2EmphasizedLight, + accent2Muted = decorativeColorTokens.decorativeAccent2MutedLight, + accent3Default = decorativeColorTokens.decorativeAccent3DefaultLight, + accent3Emphasized = decorativeColorTokens.decorativeAccent3EmphasizedLight, + accent3Muted = decorativeColorTokens.decorativeAccent3MutedLight, + accent4Default = decorativeColorTokens.decorativeAccent4DefaultLight, + accent4Emphasized = decorativeColorTokens.decorativeAccent4EmphasizedLight, + accent4Muted = decorativeColorTokens.decorativeAccent4MutedLight, + accent5Default = decorativeColorTokens.decorativeAccent5DefaultLight, + accent5Emphasized = decorativeColorTokens.decorativeAccent5EmphasizedLight, + accent5Muted = decorativeColorTokens.decorativeAccent5MutedLight, + brandPrimary = decorativeColorTokens.decorativeBrandPrimaryLight, + brandSecondary = decorativeColorTokens.decorativeBrandSecondaryLight, + brandTertiary = decorativeColorTokens.decorativeBrandTertiaryLight, + neutralDefault = decorativeColorTokens.decorativeNeutralDefaultLight, + neutralEmphasized = decorativeColorTokens.decorativeNeutralEmphasizedLight, + neutralMuted = decorativeColorTokens.decorativeNeutralMutedLight, + skinTint100 = decorativeColorTokens.decorativeSkinTint100Light, + skinTint200 = decorativeColorTokens.decorativeSkinTint200Light, + skinTint300 = decorativeColorTokens.decorativeSkinTint300Light, + skinTint400 = decorativeColorTokens.decorativeSkinTint400Light, + skinTint500 = decorativeColorTokens.decorativeSkinTint500Light, + skinTint600 = decorativeColorTokens.decorativeSkinTint600Light, + skinTint700 = decorativeColorTokens.decorativeSkinTint700Light, + skinTint800 = decorativeColorTokens.decorativeSkinTint800Light, + skinTint900 = decorativeColorTokens.decorativeSkinTint900Light, + ), + ) + +val OudsColorSemanticTokens.darkColorScheme: OudsColorScheme + get() = OudsColorScheme( + globalColors = OudsColorScheme.Global( + transparentDefault = globalColorTokens.transparentDefaultDark, + ), + actionColors = OudsColorScheme.Action( + disabled = actionColorTokens.actionDisabledDark, + disabledOnBgEmphasized = actionColorTokens.actionDisabledOnBgEmphasizedDark, + negativeEnabled = actionColorTokens.actionNegativeEnabledDark, + negativeFocus = actionColorTokens.actionNegativeFocusDark, + negativeHover = actionColorTokens.actionNegativeHoverDark, + negativeLoading = actionColorTokens.actionNegativeLoadingDark, + negativePressed = actionColorTokens.actionNegativePressedDark, + primaryEnabled = actionColorTokens.actionPrimaryEnabledDark, + primaryEnabledOnBgEmphasized = actionColorTokens.actionPrimaryEnabledOnBgEmphasizedDark, + primaryFocus = actionColorTokens.actionPrimaryFocusDark, + primaryFocusOnBgEmphasized = actionColorTokens.actionPrimaryFocusOnBgEmphasizedDark, + primaryHover = actionColorTokens.actionPrimaryHoverDark, + primaryHoverOnBgEmphasized = actionColorTokens.actionPrimaryHoverOnBgEmphasizedDark, + primaryLoading = actionColorTokens.actionPrimaryLoadingDark, + primaryLoadingOnBgEmphasized = actionColorTokens.actionPrimaryLoadingOnBgEmphasizedDark, + primaryPressed = actionColorTokens.actionPrimaryPressedDark, + primaryPressedOnBgEmphasized = actionColorTokens.actionPrimaryPressedOnBgEmphasizedDark, + secondaryEnabled = actionColorTokens.actionSecondaryEnabledDark, + secondaryEnabledOnBgEmphasized = actionColorTokens.actionSecondaryEnabledOnBgEmphasizedDark, + secondaryFocus = actionColorTokens.actionSecondaryFocusDark, + secondaryFocusOnBgEmphasized = actionColorTokens.actionSecondaryFocusOnBgEmphasizedDark, + secondaryHover = actionColorTokens.actionSecondaryHoverDark, + secondaryHoverOnBgEmphasized = actionColorTokens.actionSecondaryHoverOnBgEmphasizedDark, + secondaryLoading = actionColorTokens.actionSecondaryLoadingDark, + secondaryLoadingOnBgEmphasized = actionColorTokens.actionSecondaryLoadingOnBgEmphasizedDark, + secondaryPressed = actionColorTokens.actionSecondaryPressedDark, + secondaryPressedOnBgEmphasized = actionColorTokens.actionSecondaryPressedOnBgEmphasizedDark, + selected = actionColorTokens.actionSelectedDark, + selectedOnBgEmphasized = actionColorTokens.actionSelectedOnBgEmphasizedDark, + visited = actionColorTokens.actionVisitedDark, + visitedOnBgEmphasized = actionColorTokens.actionVisitedOnBgEmphasizedDark, + ), + alwaysColors = OudsColorScheme.Always( + accent = alwaysColorTokens.alwaysAccentDark, + black = alwaysColorTokens.alwaysBlackDark, + info = alwaysColorTokens.alwaysInfoDark, + negative = alwaysColorTokens.alwaysNegativeDark, + onAccent = alwaysColorTokens.alwaysOnAccentDark, + onBlack = alwaysColorTokens.alwaysOnBlackDark, + onInfo = alwaysColorTokens.alwaysOnInfoDark, + onNegative = alwaysColorTokens.alwaysOnNegativeDark, + onPositive = alwaysColorTokens.alwaysOnPositiveDark, + onWarning = alwaysColorTokens.alwaysOnWarningDark, + onWhite = alwaysColorTokens.alwaysOnWhiteDark, + positive = alwaysColorTokens.alwaysPositiveDark, + warning = alwaysColorTokens.alwaysWarningDark, + white = alwaysColorTokens.alwaysWhiteDark, + ), + backgroundColors = OudsColorScheme.Background( + brandPrimary = backgroundColorTokens.bgBrandPrimaryDark, + emphasized = backgroundColorTokens.bgEmphasizedDark, + primary = backgroundColorTokens.bgPrimaryDark, + secondary = backgroundColorTokens.bgSecondaryDark, + statusAccentEmphasized = backgroundColorTokens.bgStatusAccentEmphasizedDark, + statusAccentMuted = backgroundColorTokens.bgStatusAccentMutedDark, + statusAccentMutedOnBgEmphasized = backgroundColorTokens.bgStatusAccentMutedOnBgEmphasizedDark, + statusInfoEmphasized = backgroundColorTokens.bgStatusInfoEmphasizedDark, + statusInfoMuted = backgroundColorTokens.bgStatusInfoMutedDark, + statusInfoMutedOnBgEmphasized = backgroundColorTokens.bgStatusInfoMutedOnBgEmphasizedDark, + statusNegativeEmphasized = backgroundColorTokens.bgStatusNegativeEmphasizedDark, + statusNegativeMuted = backgroundColorTokens.bgStatusNegativeMutedDark, + statusNegativeMutedOnBgEmphasized = backgroundColorTokens.bgStatusNegativeMutedOnBgEmphasizedDark, + statusNeutral = backgroundColorTokens.bgStatusNeutralDark, + statusNeutralOnBgEmphasized = backgroundColorTokens.bgStatusNeutralOnBgEmphasizedDark, + statusPositiveEmphasized = backgroundColorTokens.bgStatusPositiveEmphasizedDark, + statusPositiveMuted = backgroundColorTokens.bgStatusPositiveMutedDark, + statusPositiveMutedOnBgEmphasized = backgroundColorTokens.bgStatusPositiveMutedOnBgEmphasizedDark, + statusWarningEmphasized = backgroundColorTokens.bgStatusWarningEmphasizedDark, + statusWarningMuted = backgroundColorTokens.bgStatusWarningMutedDark, + statusWarningMutedOnBgEmphasized = backgroundColorTokens.bgStatusWarningMutedOnBgEmphasizedDark, + tertiary = backgroundColorTokens.bgTertiaryDark, + ), + borderColors = OudsColorScheme.Border( + brandPrimary = borderColorTokens.borderBrandPrimaryDark, + brandPrimaryOnBgEmphasized = borderColorTokens.borderBrandPrimaryOnBgEmphasizedDark, + default = borderColorTokens.borderDefaultDark, + defaultOnBgEmphasized = borderColorTokens.borderDefaultOnBgEmphasizedDark, + emphasized = borderColorTokens.borderEmphasizedDark, + emphasizedOnBgEmphasized = borderColorTokens.borderEmphasizedOnBgEmphasizedDark, + focus = borderColorTokens.borderFocusDark, + focusInset = borderColorTokens.borderFocusInsetDark, + focusInsetOnBgEmphasized = borderColorTokens.borderFocusInsetOnBgEmphasizedDark, + focusOnBgEmphasized = borderColorTokens.borderFocusOnBgEmphasizedDark, + onBrandPrimary = borderColorTokens.borderOnBrandPrimaryDark, + ), + brandColors = OudsColorScheme.Brand( + accentDefault = brandColorTokens.brandAccentDefaultDark, + accentHigh = brandColorTokens.brandAccentHighDark, + accentHighest = brandColorTokens.brandAccentHighestDark, + accentLowest = brandColorTokens.brandAccentLowestDark, + infoDefault = brandColorTokens.brandInfoDefaultDark, + infoHighest = brandColorTokens.brandInfoHighestDark, + infoLowest = brandColorTokens.brandInfoLowestDark, + negativeDefault = brandColorTokens.brandNegativeDefaultDark, + negativeHigh = brandColorTokens.brandNegativeHighDark, + negativeHigher = brandColorTokens.brandNegativeHigherDark, + negativeHighest = brandColorTokens.brandNegativeHighestDark, + negativeLowest = brandColorTokens.brandNegativeLowestDark, + neutralEmphasizedBlack = brandColorTokens.brandNeutralEmphasizedBlackDark, + neutralEmphasizedHigh = brandColorTokens.brandNeutralEmphasizedHighDark, + neutralEmphasizedHigher = brandColorTokens.brandNeutralEmphasizedHigherDark, + neutralEmphasizedHighest = brandColorTokens.brandNeutralEmphasizedHighestDark, + neutralEmphasizedLow = brandColorTokens.brandNeutralEmphasizedLowDark, + neutralEmphasizedLower = brandColorTokens.brandNeutralEmphasizedLowerDark, + neutralEmphasizedLowest = brandColorTokens.brandNeutralEmphasizedLowestDark, + neutralEmphasizedMedium = brandColorTokens.brandNeutralEmphasizedMediumDark, + neutralMutedHighest = brandColorTokens.brandNeutralMutedHighestDark, + neutralMutedLow = brandColorTokens.brandNeutralMutedLowDark, + neutralMutedLower = brandColorTokens.brandNeutralMutedLowerDark, + neutralMutedLowest = brandColorTokens.brandNeutralMutedLowestDark, + neutralMutedMedium = brandColorTokens.brandNeutralMutedMediumDark, + neutralMutedWhite = brandColorTokens.brandNeutralMutedWhiteDark, + positiveDefault = brandColorTokens.brandPositiveDefaultDark, + positiveHighest = brandColorTokens.brandPositiveHighestDark, + positiveLowest = brandColorTokens.brandPositiveLowestDark, + primaryDefault = brandColorTokens.brandPrimaryDefaultDark, + primaryLow = brandColorTokens.brandPrimaryLowDark, + warningDefault = brandColorTokens.brandWarningDefaultDark, + warningHigh = brandColorTokens.brandWarningHighDark, + warningHighest = brandColorTokens.brandWarningHighestDark, + warningLowest = brandColorTokens.brandWarningLowestDark, + ), + contentColors = OudsColorScheme.Content( + brandPrimary = contentColorTokens.contentBrandPrimaryDark, + brandPrimaryOnBgEmphasized = contentColorTokens.contentBrandPrimaryOnBgEmphasizedDark, + default = contentColorTokens.contentDefaultDark, + defaultOnBgEmphasized = contentColorTokens.contentDefaultOnBgEmphasizedDark, + disabled = contentColorTokens.contentDisabledDark, + disabledOnBgEmphasized = contentColorTokens.contentDisabledOnBgEmphasizedDark, + muted = contentColorTokens.contentMutedDark, + mutedOnBgEmphasized = contentColorTokens.contentMutedOnBgEmphasizedDark, + onActionDisabled = contentColorTokens.contentOnActionDisabledDark, + onActionDisabledOnBgEmphasized = contentColorTokens.contentOnActionDisabledOnBgEmphasizedDark, + onActionNegative = contentColorTokens.contentOnActionNegativeDark, + onActionPrimaryEnabled = contentColorTokens.contentOnActionPrimaryEnabledDark, + onActionPrimaryEnabledOnBgEmphasized = contentColorTokens.contentOnActionPrimaryEnabledOnBgEmphasizedDark, + onActionPrimaryFocus = contentColorTokens.contentOnActionPrimaryFocusDark, + onActionPrimaryFocusOnBgEmphasized = contentColorTokens.contentOnActionPrimaryFocusOnBgEmphasizedDark, + onActionPrimaryHover = contentColorTokens.contentOnActionPrimaryHoverDark, + onActionPrimaryHoverOnBgEmphasized = contentColorTokens.contentOnActionPrimaryHoverOnBgEmphasizedDark, + onActionPrimaryLoading = contentColorTokens.contentOnActionPrimaryLoadingDark, + onActionPrimaryLoadingOnBgEmphasized = contentColorTokens.contentOnActionPrimaryLoadingOnBgEmphasizedDark, + onActionPrimaryPressed = contentColorTokens.contentOnActionPrimaryPressedDark, + onActionPrimaryPressedOnBgEmphasized = contentColorTokens.contentOnActionPrimaryPressedOnBgEmphasizedDark, + onBrandPrimary = contentColorTokens.contentOnBrandPrimaryDark, + onStatusAccentEmphasized = contentColorTokens.contentOnStatusAccentEmphasizedDark, + onStatusAccentMuted = contentColorTokens.contentOnStatusAccentMutedDark, + onStatusAccentMutedOnBgEmphasized = contentColorTokens.contentOnStatusAccentMutedOnBgEmphasizedDark, + onStatusInfoEmphasized = contentColorTokens.contentOnStatusInfoEmphasizedDark, + onStatusInfoMuted = contentColorTokens.contentOnStatusInfoMutedDark, + onStatusInfoMutedOnBgEmphasized = contentColorTokens.contentOnStatusInfoMutedOnBgEmphasizedDark, + onStatusNegativeEmphasized = contentColorTokens.contentOnStatusNegativeEmphasizedDark, + onStatusNegativeMuted = contentColorTokens.contentOnStatusNegativeMutedDark, + onStatusNegativeMutedOnBgEmphasized = contentColorTokens.contentOnStatusNegativeMutedOnBgEmphasizedDark, + onStatusPositiveEmphasized = contentColorTokens.contentOnStatusPositiveEmphasizedDark, + onStatusPositiveMuted = contentColorTokens.contentOnStatusPositiveMutedDark, + onStatusPositiveMutedOnBgEmphasized = contentColorTokens.contentOnStatusPositiveMutedOnBgEmphasizedDark, + onStatusWarningEmphasized = contentColorTokens.contentOnStatusWarningEmphasizedDark, + onStatusWarningMuted = contentColorTokens.contentOnStatusWarningMutedDark, + onStatusWarningMutedOnBgEmphasized = contentColorTokens.contentOnStatusWarningMutedOnBgEmphasizedDark, + statusInfo = contentColorTokens.contentStatusInfoDark, + statusNegative = contentColorTokens.contentStatusNegativeDark, + statusPositive = contentColorTokens.contentStatusPositiveDark, + statusWarning = contentColorTokens.contentStatusWarningDark, + ), + elevationColors = OudsColorScheme.Elevation( + drag = elevationColorTokens.elevationDragDark, + dragOnBgEmphasized = elevationColorTokens.elevationDragOnBgEmphasizedDark, + dragOnBgSecondary = elevationColorTokens.elevationDragOnBgSecondaryDark, + modal = elevationColorTokens.elevationModalDark, + overlayDefault = elevationColorTokens.elevationOverlayDefaultDark, + overlayDefaultOnBgEmphasized = elevationColorTokens.elevationOverlayDefaultOnBgEmphasizedDark, + overlayDefaultOnBgSecondary = elevationColorTokens.elevationOverlayDefaultOnBgSecondaryDark, + overlayEmphasized = elevationColorTokens.elevationOverlayEmphasizedDark, + overlayEmphasizedOnBgEmphasized = elevationColorTokens.elevationOverlayEmphasizedOnBgEmphasizedDark, + overlayEmphasizedOnBgSecondary = elevationColorTokens.elevationOverlayEmphasizedOnBgSecondaryDark, + raised = elevationColorTokens.elevationRaisedDark, + raisedOnBgEmphasized = elevationColorTokens.elevationRaisedOnBgEmphasizedDark, + raisedOnBgSecondary = elevationColorTokens.elevationRaisedOnBgSecondaryDark, + ), + gradientColors = OudsColorScheme.Gradient( + skeletonMiddle = gradientColorTokens.gradientSkeletonMiddleDark, + skeletonMiddleOnBgEmphasized = gradientColorTokens.gradientSkeletonMiddleOnBgEmphasizedDark, + skeletonStartEnd = gradientColorTokens.gradientSkeletonStartEndDark, + skeletonStartEndOnBgEmphasized = gradientColorTokens.gradientSkeletonStartEndOnBgEmphasizedDark, + ), + decorativeColors = OudsColorScheme.Decorative( + accent1Default = decorativeColorTokens.decorativeAccent1DefaultDark, + accent1Emphasized = decorativeColorTokens.decorativeAccent1EmphasizedDark, + accent1Muted = decorativeColorTokens.decorativeAccent1MutedDark, + accent2Default = decorativeColorTokens.decorativeAccent2DefaultDark, + accent2Emphasized = decorativeColorTokens.decorativeAccent2EmphasizedDark, + accent2Muted = decorativeColorTokens.decorativeAccent2MutedDark, + accent3Default = decorativeColorTokens.decorativeAccent3DefaultDark, + accent3Emphasized = decorativeColorTokens.decorativeAccent3EmphasizedDark, + accent3Muted = decorativeColorTokens.decorativeAccent3MutedDark, + accent4Default = decorativeColorTokens.decorativeAccent4DefaultDark, + accent4Emphasized = decorativeColorTokens.decorativeAccent4EmphasizedDark, + accent4Muted = decorativeColorTokens.decorativeAccent4MutedDark, + accent5Default = decorativeColorTokens.decorativeAccent5DefaultDark, + accent5Emphasized = decorativeColorTokens.decorativeAccent5EmphasizedDark, + accent5Muted = decorativeColorTokens.decorativeAccent5MutedDark, + brandPrimary = decorativeColorTokens.decorativeBrandPrimaryDark, + brandSecondary = decorativeColorTokens.decorativeBrandSecondaryDark, + brandTertiary = decorativeColorTokens.decorativeBrandTertiaryDark, + neutralDefault = decorativeColorTokens.decorativeNeutralDefaultDark, + neutralEmphasized = decorativeColorTokens.decorativeNeutralEmphasizedDark, + neutralMuted = decorativeColorTokens.decorativeNeutralMutedDark, + skinTint100 = decorativeColorTokens.decorativeSkinTint100Dark, + skinTint200 = decorativeColorTokens.decorativeSkinTint200Dark, + skinTint300 = decorativeColorTokens.decorativeSkinTint300Dark, + skinTint400 = decorativeColorTokens.decorativeSkinTint400Dark, + skinTint500 = decorativeColorTokens.decorativeSkinTint500Dark, + skinTint600 = decorativeColorTokens.decorativeSkinTint600Dark, + skinTint700 = decorativeColorTokens.decorativeSkinTint700Dark, + skinTint800 = decorativeColorTokens.decorativeSkinTint800Dark, + skinTint900 = decorativeColorTokens.decorativeSkinTint900Dark, + ), + ) + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorKeyToken): Color { + return when (token) { + OudsColorKeyToken.TransparentDefault -> globalColors.transparentDefault + OudsColorKeyToken.ActionDisabled -> actionColors.disabled + OudsColorKeyToken.ActionDisabledOnBgEmphasized -> actionColors.disabledOnBgEmphasized + OudsColorKeyToken.ActionNegativeEnabled -> actionColors.negativeEnabled + OudsColorKeyToken.ActionNegativeFocus -> actionColors.negativeFocus + OudsColorKeyToken.ActionNegativeHover -> actionColors.negativeHover + OudsColorKeyToken.ActionNegativeLoading -> actionColors.negativeLoading + OudsColorKeyToken.ActionNegativePressed -> actionColors.negativePressed + OudsColorKeyToken.ActionPrimaryEnabled -> actionColors.primaryEnabled + OudsColorKeyToken.ActionPrimaryEnabledOnBgEmphasized -> actionColors.primaryEnabledOnBgEmphasized + OudsColorKeyToken.ActionPrimaryFocus -> actionColors.primaryFocus + OudsColorKeyToken.ActionPrimaryFocusOnBgEmphasized -> actionColors.primaryFocusOnBgEmphasized + OudsColorKeyToken.ActionPrimaryHover -> actionColors.primaryHover + OudsColorKeyToken.ActionPrimaryHoverOnBgEmphasized -> actionColors.primaryHoverOnBgEmphasized + OudsColorKeyToken.ActionPrimaryLoading -> actionColors.primaryLoading + OudsColorKeyToken.ActionPrimaryLoadingOnBgEmphasized -> actionColors.primaryLoadingOnBgEmphasized + OudsColorKeyToken.ActionPrimaryPressed -> actionColors.primaryPressed + OudsColorKeyToken.ActionPrimaryPressedOnBgEmphasized -> actionColors.primaryPressedOnBgEmphasized + OudsColorKeyToken.ActionSecondaryEnabled -> actionColors.secondaryEnabled + OudsColorKeyToken.ActionSecondaryEnabledOnBgEmphasized -> actionColors.secondaryEnabledOnBgEmphasized + OudsColorKeyToken.ActionSecondaryFocus -> actionColors.secondaryFocus + OudsColorKeyToken.ActionSecondaryFocusOnBgEmphasized -> actionColors.secondaryFocusOnBgEmphasized + OudsColorKeyToken.ActionSecondaryHover -> actionColors.secondaryHover + OudsColorKeyToken.ActionSecondaryHoverOnBgEmphasized -> actionColors.secondaryHoverOnBgEmphasized + OudsColorKeyToken.ActionSecondaryLoading -> actionColors.secondaryLoading + OudsColorKeyToken.ActionSecondaryLoadingOnBgEmphasized -> actionColors.secondaryLoadingOnBgEmphasized + OudsColorKeyToken.ActionSecondaryPressed -> actionColors.secondaryPressed + OudsColorKeyToken.ActionSecondaryPressedOnBgEmphasized -> actionColors.secondaryPressedOnBgEmphasized + OudsColorKeyToken.ActionSelected -> actionColors.selected + OudsColorKeyToken.ActionSelectedOnBgEmphasized -> actionColors.selectedOnBgEmphasized + OudsColorKeyToken.ActionVisited -> actionColors.visited + OudsColorKeyToken.ActionVisitedOnBgEmphasized -> actionColors.visitedOnBgEmphasized + OudsColorKeyToken.AlwaysAccent -> alwaysColors.accent + OudsColorKeyToken.AlwaysBlack -> alwaysColors.black + OudsColorKeyToken.AlwaysInfo -> alwaysColors.info + OudsColorKeyToken.AlwaysNegative -> alwaysColors.negative + OudsColorKeyToken.AlwaysOnAccent -> alwaysColors.onAccent + OudsColorKeyToken.AlwaysOnBlack -> alwaysColors.onBlack + OudsColorKeyToken.AlwaysOnInfo -> alwaysColors.onInfo + OudsColorKeyToken.AlwaysOnNegative -> alwaysColors.onNegative + OudsColorKeyToken.AlwaysOnPositive -> alwaysColors.onPositive + OudsColorKeyToken.AlwaysOnWarning -> alwaysColors.onWarning + OudsColorKeyToken.AlwaysOnWhite -> alwaysColors.onWhite + OudsColorKeyToken.AlwaysPositive -> alwaysColors.positive + OudsColorKeyToken.AlwaysWarning -> alwaysColors.warning + OudsColorKeyToken.AlwaysWhite -> alwaysColors.white + OudsColorKeyToken.BgBrandPrimary -> backgroundColors.brandPrimary + OudsColorKeyToken.BgEmphasized -> backgroundColors.emphasized + OudsColorKeyToken.BgPrimary -> backgroundColors.primary + OudsColorKeyToken.BgSecondary -> backgroundColors.secondary + OudsColorKeyToken.BgStatusAccentEmphasized -> backgroundColors.statusAccentEmphasized + OudsColorKeyToken.BgStatusAccentMuted -> backgroundColors.statusAccentMuted + OudsColorKeyToken.BgStatusAccentMutedOnBgEmphasized -> backgroundColors.statusAccentMutedOnBgEmphasized + OudsColorKeyToken.BgStatusInfoEmphasized -> backgroundColors.statusInfoEmphasized + OudsColorKeyToken.BgStatusInfoMuted -> backgroundColors.statusInfoMuted + OudsColorKeyToken.BgStatusInfoMutedOnBgEmphasized -> backgroundColors.statusInfoMutedOnBgEmphasized + OudsColorKeyToken.BgStatusNegativeEmphasized -> backgroundColors.statusNegativeEmphasized + OudsColorKeyToken.BgStatusNegativeMuted -> backgroundColors.statusNegativeMuted + OudsColorKeyToken.BgStatusNegativeMutedOnBgEmphasized -> backgroundColors.statusNegativeMutedOnBgEmphasized + OudsColorKeyToken.BgStatusNeutral -> backgroundColors.statusNeutral + OudsColorKeyToken.BgStatusNeutralOnBgEmphasized -> backgroundColors.statusNeutralOnBgEmphasized + OudsColorKeyToken.BgStatusPositiveEmphasized -> backgroundColors.statusPositiveEmphasized + OudsColorKeyToken.BgStatusPositiveMuted -> backgroundColors.statusPositiveMuted + OudsColorKeyToken.BgStatusPositiveMutedOnBgEmphasized -> backgroundColors.statusPositiveMutedOnBgEmphasized + OudsColorKeyToken.BgStatusWarningEmphasized -> backgroundColors.statusWarningEmphasized + OudsColorKeyToken.BgStatusWarningMuted -> backgroundColors.statusWarningMuted + OudsColorKeyToken.BgStatusWarningMutedOnBgEmphasized -> backgroundColors.statusWarningMutedOnBgEmphasized + OudsColorKeyToken.BgTertiary -> backgroundColors.tertiary + OudsColorKeyToken.BorderBrandPrimary -> borderColors.brandPrimary + OudsColorKeyToken.BorderBrandPrimaryOnBgEmphasized -> borderColors.brandPrimaryOnBgEmphasized + OudsColorKeyToken.BorderDefault -> borderColors.default + OudsColorKeyToken.BorderDefaultOnBgEmphasized -> borderColors.defaultOnBgEmphasized + OudsColorKeyToken.BorderEmphasized -> borderColors.emphasized + OudsColorKeyToken.BorderEmphasizedOnBgEmphasized -> borderColors.emphasizedOnBgEmphasized + OudsColorKeyToken.BorderFocus -> borderColors.focus + OudsColorKeyToken.BorderFocusInset -> borderColors.focusInset + OudsColorKeyToken.BorderFocusInsetOnBgEmphasized -> borderColors.focusInsetOnBgEmphasized + OudsColorKeyToken.BorderFocusOnBgEmphasized -> borderColors.focusOnBgEmphasized + OudsColorKeyToken.BorderOnBrandPrimary -> borderColors.onBrandPrimary + OudsColorKeyToken.BrandAccentDefault -> brandColors.accentDefault + OudsColorKeyToken.BrandAccentHigh -> brandColors.accentHigh + OudsColorKeyToken.BrandAccentHighest -> brandColors.accentHighest + OudsColorKeyToken.BrandAccentLowest -> brandColors.accentLowest + OudsColorKeyToken.BrandInfoDefault -> brandColors.infoDefault + OudsColorKeyToken.BrandInfoHighest -> brandColors.infoHighest + OudsColorKeyToken.BrandInfoLowest -> brandColors.infoLowest + OudsColorKeyToken.BrandNegativeDefault -> brandColors.negativeDefault + OudsColorKeyToken.BrandNegativeHigh -> brandColors.negativeHigh + OudsColorKeyToken.BrandNegativeHigher -> brandColors.negativeHigher + OudsColorKeyToken.BrandNegativeHighest -> brandColors.negativeHighest + OudsColorKeyToken.BrandNegativeLowest -> brandColors.negativeLowest + OudsColorKeyToken.BrandNeutralEmphasizedBlack -> brandColors.neutralEmphasizedBlack + OudsColorKeyToken.BrandNeutralEmphasizedHigh -> brandColors.neutralEmphasizedHigh + OudsColorKeyToken.BrandNeutralEmphasizedHigher -> brandColors.neutralEmphasizedHigher + OudsColorKeyToken.BrandNeutralEmphasizedHighest -> brandColors.neutralEmphasizedHighest + OudsColorKeyToken.BrandNeutralEmphasizedLow -> brandColors.neutralEmphasizedLow + OudsColorKeyToken.BrandNeutralEmphasizedLower -> brandColors.neutralEmphasizedLower + OudsColorKeyToken.BrandNeutralEmphasizedLowest -> brandColors.neutralEmphasizedLowest + OudsColorKeyToken.BrandNeutralEmphasizedMedium -> brandColors.neutralEmphasizedMedium + OudsColorKeyToken.BrandNeutralMutedHighest -> brandColors.neutralMutedHighest + OudsColorKeyToken.BrandNeutralMutedLow -> brandColors.neutralMutedLow + OudsColorKeyToken.BrandNeutralMutedLower -> brandColors.neutralMutedLower + OudsColorKeyToken.BrandNeutralMutedLowest -> brandColors.neutralMutedLowest + OudsColorKeyToken.BrandNeutralMutedMedium -> brandColors.neutralMutedMedium + OudsColorKeyToken.BrandNeutralMutedWhite -> brandColors.neutralMutedWhite + OudsColorKeyToken.BrandPositiveDefault -> brandColors.positiveDefault + OudsColorKeyToken.BrandPositiveHighest -> brandColors.positiveHighest + OudsColorKeyToken.BrandPositiveLowest -> brandColors.positiveLowest + OudsColorKeyToken.BrandPrimaryDefault -> brandColors.primaryDefault + OudsColorKeyToken.BrandPrimaryLow -> brandColors.primaryLow + OudsColorKeyToken.BrandWarningDefault -> brandColors.warningDefault + OudsColorKeyToken.BrandWarningHigh -> brandColors.warningHigh + OudsColorKeyToken.BrandWarningHighest -> brandColors.warningHighest + OudsColorKeyToken.BrandWarningLowest -> brandColors.warningLowest + OudsColorKeyToken.ContentBrandPrimary -> contentColors.brandPrimary + OudsColorKeyToken.ContentBrandPrimaryOnBgEmphasized -> contentColors.brandPrimaryOnBgEmphasized + OudsColorKeyToken.ContentDefault -> contentColors.default + OudsColorKeyToken.ContentDefaultOnBgEmphasized -> contentColors.defaultOnBgEmphasized + OudsColorKeyToken.ContentDisabled -> contentColors.disabled + OudsColorKeyToken.ContentDisabledOnBgEmphasized -> contentColors.disabledOnBgEmphasized + OudsColorKeyToken.ContentMuted -> contentColors.muted + OudsColorKeyToken.ContentMutedOnBgEmphasized -> contentColors.mutedOnBgEmphasized + OudsColorKeyToken.ContentOnActionDisabled -> contentColors.onActionDisabled + OudsColorKeyToken.ContentOnActionDisabledOnBgEmphasized -> contentColors.onActionDisabledOnBgEmphasized + OudsColorKeyToken.ContentOnActionNegative -> contentColors.onActionNegative + OudsColorKeyToken.ContentOnActionPrimaryEnabled -> contentColors.onActionPrimaryEnabled + OudsColorKeyToken.ContentOnActionPrimaryEnabledOnBgEmphasized -> contentColors.onActionPrimaryEnabledOnBgEmphasized + OudsColorKeyToken.ContentOnActionPrimaryFocus -> contentColors.onActionPrimaryFocus + OudsColorKeyToken.ContentOnActionPrimaryFocusOnBgEmphasized -> contentColors.onActionPrimaryFocusOnBgEmphasized + OudsColorKeyToken.ContentOnActionPrimaryHover -> contentColors.onActionPrimaryHover + OudsColorKeyToken.ContentOnActionPrimaryHoverOnBgEmphasized -> contentColors.onActionPrimaryHoverOnBgEmphasized + OudsColorKeyToken.ContentOnActionPrimaryLoading -> contentColors.onActionPrimaryLoading + OudsColorKeyToken.ContentOnActionPrimaryLoadingOnBgEmphasized -> contentColors.onActionPrimaryLoadingOnBgEmphasized + OudsColorKeyToken.ContentOnActionPrimaryPressed -> contentColors.onActionPrimaryPressed + OudsColorKeyToken.ContentOnActionPrimaryPressedOnBgEmphasized -> contentColors.onActionPrimaryPressedOnBgEmphasized + OudsColorKeyToken.ContentOnBrandPrimary -> contentColors.onBrandPrimary + OudsColorKeyToken.ContentOnStatusAccentEmphasized -> contentColors.onStatusAccentEmphasized + OudsColorKeyToken.ContentOnStatusAccentMuted -> contentColors.onStatusAccentMuted + OudsColorKeyToken.ContentOnStatusAccentMutedOnBgEmphasized -> contentColors.onStatusAccentMutedOnBgEmphasized + OudsColorKeyToken.ContentOnStatusInfoEmphasized -> contentColors.onStatusInfoEmphasized + OudsColorKeyToken.ContentOnStatusInfoMuted -> contentColors.onStatusInfoMuted + OudsColorKeyToken.ContentOnStatusInfoMutedOnBgEmphasized -> contentColors.onStatusInfoMutedOnBgEmphasized + OudsColorKeyToken.ContentOnStatusNegativeEmphasized -> contentColors.onStatusNegativeEmphasized + OudsColorKeyToken.ContentOnStatusNegativeMuted -> contentColors.onStatusNegativeMuted + OudsColorKeyToken.ContentOnStatusNegativeMutedOnBgEmphasized -> contentColors.onStatusNegativeMutedOnBgEmphasized + OudsColorKeyToken.ContentOnStatusPositiveEmphasized -> contentColors.onStatusPositiveEmphasized + OudsColorKeyToken.ContentOnStatusPositiveMuted -> contentColors.onStatusPositiveMuted + OudsColorKeyToken.ContentOnStatusPositiveMutedOnBgEmphasized -> contentColors.onStatusPositiveMutedOnBgEmphasized + OudsColorKeyToken.ContentOnStatusWarningEmphasized -> contentColors.onStatusWarningEmphasized + OudsColorKeyToken.ContentOnStatusWarningMuted -> contentColors.onStatusWarningMuted + OudsColorKeyToken.ContentOnStatusWarningMutedOnBgEmphasized -> contentColors.onStatusWarningMutedOnBgEmphasized + OudsColorKeyToken.ContentStatusInfo -> contentColors.statusInfo + OudsColorKeyToken.ContentStatusNegative -> contentColors.statusNegative + OudsColorKeyToken.ContentStatusPositive -> contentColors.statusPositive + OudsColorKeyToken.ContentStatusWarning -> contentColors.statusWarning + OudsColorKeyToken.ElevationDrag -> elevationColors.drag + OudsColorKeyToken.ElevationDragOnBgEmphasized -> elevationColors.dragOnBgEmphasized + OudsColorKeyToken.ElevationDragOnBgSecondary -> elevationColors.dragOnBgSecondary + OudsColorKeyToken.ElevationModal -> elevationColors.modal + OudsColorKeyToken.ElevationOverlayDefault -> elevationColors.overlayDefault + OudsColorKeyToken.ElevationOverlayDefaultOnBgEmphasized -> elevationColors.overlayDefaultOnBgEmphasized + OudsColorKeyToken.ElevationOverlayDefaultOnBgSecondary -> elevationColors.overlayDefaultOnBgSecondary + OudsColorKeyToken.ElevationOverlayEmphasized -> elevationColors.overlayEmphasized + OudsColorKeyToken.ElevationOverlayEmphasizedOnBgEmphasized -> elevationColors.overlayEmphasizedOnBgEmphasized + OudsColorKeyToken.ElevationOverlayEmphasizedOnBgSecondary -> elevationColors.overlayEmphasizedOnBgSecondary + OudsColorKeyToken.ElevationRaised -> elevationColors.raised + OudsColorKeyToken.ElevationRaisedOnBgEmphasized -> elevationColors.raisedOnBgEmphasized + OudsColorKeyToken.ElevationRaisedOnBgSecondary -> elevationColors.raisedOnBgSecondary + OudsColorKeyToken.GradientSkeletonMiddle -> gradientColors.skeletonMiddle + OudsColorKeyToken.GradientSkeletonMiddleOnBgEmphasized -> gradientColors.skeletonMiddleOnBgEmphasized + OudsColorKeyToken.GradientSkeletonStartEnd -> gradientColors.skeletonStartEnd + OudsColorKeyToken.GradientSkeletonStartEndOnBgEmphasized -> gradientColors.skeletonStartEndOnBgEmphasized + OudsColorKeyToken.DecorativeAccent1Default -> decorativeColors.accent1Default + OudsColorKeyToken.DecorativeAccent1Emphasized -> decorativeColors.accent1Emphasized + OudsColorKeyToken.DecorativeAccent1Muted -> decorativeColors.accent1Muted + OudsColorKeyToken.DecorativeAccent2Default -> decorativeColors.accent2Default + OudsColorKeyToken.DecorativeAccent2Emphasized -> decorativeColors.accent2Emphasized + OudsColorKeyToken.DecorativeAccent2Muted -> decorativeColors.accent2Muted + OudsColorKeyToken.DecorativeAccent3Default -> decorativeColors.accent3Default + OudsColorKeyToken.DecorativeAccent3Emphasized -> decorativeColors.accent3Emphasized + OudsColorKeyToken.DecorativeAccent3Muted -> decorativeColors.accent3Muted + OudsColorKeyToken.DecorativeAccent4Default -> decorativeColors.accent4Default + OudsColorKeyToken.DecorativeAccent4Emphasized -> decorativeColors.accent4Emphasized + OudsColorKeyToken.DecorativeAccent4Muted -> decorativeColors.accent4Muted + OudsColorKeyToken.DecorativeAccent5Default -> decorativeColors.accent5Default + OudsColorKeyToken.DecorativeAccent5Emphasized -> decorativeColors.accent5Emphasized + OudsColorKeyToken.DecorativeAccent5Muted -> decorativeColors.accent5Muted + OudsColorKeyToken.DecorativeBrandPrimary -> decorativeColors.brandPrimary + OudsColorKeyToken.DecorativeBrandSecondary -> decorativeColors.brandSecondary + OudsColorKeyToken.DecorativeBrandTertiary -> decorativeColors.brandTertiary + OudsColorKeyToken.DecorativeNeutralDefault -> decorativeColors.neutralDefault + OudsColorKeyToken.DecorativeNeutralEmphasized -> decorativeColors.neutralEmphasized + OudsColorKeyToken.DecorativeNeutralMuted -> decorativeColors.neutralMuted + OudsColorKeyToken.DecorativeSkinTint100 -> decorativeColors.skinTint100 + OudsColorKeyToken.DecorativeSkinTint200 -> decorativeColors.skinTint200 + OudsColorKeyToken.DecorativeSkinTint300 -> decorativeColors.skinTint300 + OudsColorKeyToken.DecorativeSkinTint400 -> decorativeColors.skinTint400 + OudsColorKeyToken.DecorativeSkinTint500 -> decorativeColors.skinTint500 + OudsColorKeyToken.DecorativeSkinTint600 -> decorativeColors.skinTint600 + OudsColorKeyToken.DecorativeSkinTint700 -> decorativeColors.skinTint700 + OudsColorKeyToken.DecorativeSkinTint800 -> decorativeColors.skinTint800 + OudsColorKeyToken.DecorativeSkinTint900 -> decorativeColors.skinTint900 + } +} + +val OudsColorSemanticTokens.materialLightColorScheme: ColorScheme + get() = lightColorScheme( + primary = backgroundColorTokens.bgBrandPrimaryLight, + onPrimary = contentColorTokens.contentDefaultLight, + primaryContainer = backgroundColorTokens.bgPrimaryLight, + onPrimaryContainer = contentColorTokens.contentDefaultLight, + inversePrimary = backgroundColorTokens.bgBrandPrimaryDark, + secondary = backgroundColorTokens.bgSecondaryLight, + onSecondary = elevationColorTokens.elevationDragOnBgSecondaryLight, + secondaryContainer = backgroundColorTokens.bgEmphasizedLight, + onSecondaryContainer = contentColorTokens.contentDefaultDark, + tertiary = backgroundColorTokens.bgTertiaryLight, + onTertiary = contentColorTokens.contentDefaultDark, + tertiaryContainer = decorativeColorTokens.decorativeBrandTertiaryLight, + onTertiaryContainer = contentColorTokens.contentDefaultOnBgEmphasizedLight, + background = backgroundColorTokens.bgPrimaryLight, + onBackground = contentColorTokens.contentDefaultLight, + surface = elevationColorTokens.elevationRaisedLight, + onSurface = contentColorTokens.contentDefaultLight, + surfaceVariant = elevationColorTokens.elevationModalLight, + onSurfaceVariant = contentColorTokens.contentDefaultLight, + surfaceTint = elevationColorTokens.elevationModalLight, + inverseSurface = elevationColorTokens.elevationRaisedDark, + inverseOnSurface = contentColorTokens.contentDefaultDark, + error = backgroundColorTokens.bgStatusNegativeMutedLight, + onError = contentColorTokens.contentOnActionNegativeLight, + errorContainer = backgroundColorTokens.bgStatusNegativeEmphasizedLight, + onErrorContainer = contentColorTokens.contentOnActionDisabledOnBgEmphasizedLight, + outline = borderColorTokens.borderBrandPrimaryLight, + outlineVariant = borderColorTokens.borderBrandPrimaryLight, + scrim = contentColorTokens.contentBrandPrimaryLight, + ) + +val OudsColorSemanticTokens.materialDarkColorScheme: ColorScheme + get() = darkColorScheme( + primary = backgroundColorTokens.bgBrandPrimaryDark, + onPrimary = contentColorTokens.contentDefaultDark, + primaryContainer = backgroundColorTokens.bgPrimaryDark, + onPrimaryContainer = contentColorTokens.contentDefaultDark, + inversePrimary = backgroundColorTokens.bgBrandPrimaryLight, + secondary = backgroundColorTokens.bgSecondaryDark, + onSecondary = elevationColorTokens.elevationDragOnBgSecondaryDark, + secondaryContainer = backgroundColorTokens.bgEmphasizedDark, + onSecondaryContainer = contentColorTokens.contentDefaultOnBgEmphasizedDark, + tertiary = backgroundColorTokens.bgTertiaryDark, + onTertiary = contentColorTokens.contentDefaultDark, + tertiaryContainer = decorativeColorTokens.decorativeBrandTertiaryDark, + onTertiaryContainer = contentColorTokens.contentDefaultOnBgEmphasizedDark, + background = backgroundColorTokens.bgPrimaryDark, + onBackground = contentColorTokens.contentDefaultDark, + surface = elevationColorTokens.elevationRaisedDark, + onSurface = contentColorTokens.contentDefaultDark, + surfaceVariant = elevationColorTokens.elevationModalDark, + onSurfaceVariant = contentColorTokens.contentDefaultDark, + surfaceTint = elevationColorTokens.elevationModalDark, + inverseSurface = elevationColorTokens.elevationRaisedLight, + inverseOnSurface = contentColorTokens.contentDefaultLight, + error = backgroundColorTokens.bgStatusNegativeMutedDark, + onError = contentColorTokens.contentOnActionNegativeDark, + errorContainer = backgroundColorTokens.bgStatusNegativeEmphasizedDark, + onErrorContainer = contentColorTokens.contentOnStatusNegativeEmphasizedDark, + outline = borderColorTokens.borderBrandPrimaryDark, + outlineVariant = borderColorTokens.borderBrandPrimaryDark, + scrim = contentColorTokens.contentBrandPrimaryDark, + ) + +/** + * Converts an OUDS color token to the local color value provided by the theme. + */ +val OudsColorKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsColors.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsColors.kt deleted file mode 100644 index 5199430d..00000000 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsColors.kt +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.core.theme - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.ReadOnlyComposable -import androidx.compose.ui.graphics.Color -import com.orange.ouds.theme.fromToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken - -/** - * Converts an OUDS color token to the local color value provided by the theme. - */ -val OudsColorKeyToken.value: Color - @ReadOnlyComposable - @Composable - get() = OudsTheme.colorScheme.fromToken(this) diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt index 48b1079f..25fa84b8 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsTheme.kt @@ -18,7 +18,6 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.staticCompositionLocalOf -import com.orange.ouds.theme.OudsColorScheme import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.tokens.components.OudsComponentsTokens diff --git a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt index 2448d12a..b36f6c93 100644 --- a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt +++ b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt @@ -17,6 +17,8 @@ import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import com.orange.ouds.core.BuildConfig import com.orange.ouds.core.theme.OudsTheme +import com.orange.ouds.core.theme.value +import com.orange.ouds.theme.tokens.OudsColorKeyToken /** * Configures the Compose OUDS preview environment in Android Studio. @@ -27,6 +29,6 @@ import com.orange.ouds.core.theme.OudsTheme @Composable fun OudsPreview(darkThemeEnabled: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) { OudsTheme(themeContract = BuildConfig.PREVIEW_THEME, darkThemeEnabled) { - Surface(color = OudsTheme.colorScheme.background, content = content) // Add a surface to be able to see components + Surface(color = OudsColorKeyToken.BgPrimary.value, content = content) // Add a surface to be able to see components } } diff --git a/global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/ColorRawTokens.kt b/global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/ColorRawTokens.kt new file mode 100644 index 00000000..1a857c87 --- /dev/null +++ b/global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/ColorRawTokens.kt @@ -0,0 +1,154 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.tokens.global.raw + +import androidx.compose.ui.graphics.Color + +object ColorRawTokens { + val colorDecorativeAmber100 = Color(0xfffff0cc) + val colorDecorativeAmber200 = Color(0xffffe199) + val colorDecorativeAmber300 = Color(0xffffd266) + val colorDecorativeAmber400 = Color(0xffffc333) + val colorDecorativeAmber500 = Color(0xffffb400) + val colorDecorativeAmber600 = Color(0xffcc9000) + val colorDecorativeAmber700 = Color(0xff996c00) + val colorDecorativeAmber800 = Color(0xff664800) + val colorDecorativeAmber900 = Color(0xff332400) + val colorDecorativeAmethyst100 = Color(0xfff1ecf9) + val colorDecorativeAmethyst200 = Color(0xffe0d4f2) + val colorDecorativeAmethyst300 = Color(0xffc5ade6) + val colorDecorativeAmethyst400 = Color(0xffa885d8) + val colorDecorativeAmethyst500 = Color(0xff8d60cd) + val colorDecorativeAmethyst600 = Color(0xff5b2f98) + val colorDecorativeAmethyst700 = Color(0xff432371) + val colorDecorativeAmethyst800 = Color(0xff2c174a) + val colorDecorativeAmethyst900 = Color(0xff150b23) + val colorDecorativeDeepPeach100 = Color(0xfffbebdf) + val colorDecorativeDeepPeach200 = Color(0xfff4cfb2) + val colorDecorativeDeepPeach300 = Color(0xffe3b591) + val colorDecorativeDeepPeach400 = Color(0xffc19372) + val colorDecorativeDeepPeach500 = Color(0xffcf7e3f) + val colorDecorativeDeepPeach600 = Color(0xffaa6631) + val colorDecorativeDeepPeach700 = Color(0xff7e4f2a) + val colorDecorativeDeepPeach800 = Color(0xff553720) + val colorDecorativeDeepPeach900 = Color(0xff2e2014) + val colorDecorativeEmerald100 = Color(0xffe5f5ed) + val colorDecorativeEmerald200 = Color(0xffc0e8d4) + val colorDecorativeEmerald300 = Color(0xff9bdaba) + val colorDecorativeEmerald400 = Color(0xff75cca1) + val colorDecorativeEmerald500 = Color(0xff50be87) + val colorDecorativeEmerald600 = Color(0xff3ba06e) + val colorDecorativeEmerald700 = Color(0xff2e7b54) + val colorDecorativeEmerald800 = Color(0xff20563b) + val colorDecorativeEmerald900 = Color(0xff123021) + val colorDecorativeShockingPink100 = Color(0xffffe5f6) + val colorDecorativeShockingPink200 = Color(0xffffb4e6) + val colorDecorativeShockingPink300 = Color(0xffff80d4) + val colorDecorativeShockingPink400 = Color(0xffff4dc3) + val colorDecorativeShockingPink500 = Color(0xffff1ab2) + val colorDecorativeShockingPink600 = Color(0xffe50099) + val colorDecorativeShockingPink700 = Color(0xffb20077) + val colorDecorativeShockingPink800 = Color(0xff800055) + val colorDecorativeShockingPink900 = Color(0xff4d0033) + val colorDecorativeSky100 = Color(0xffd2ecf9) + val colorDecorativeSky200 = Color(0xffa5daf3) + val colorDecorativeSky300 = Color(0xff79c7ec) + val colorDecorativeSky400 = Color(0xff4ab4e6) + val colorDecorativeSky500 = Color(0xff1fa2e0) + val colorDecorativeSky600 = Color(0xff1982b3) + val colorDecorativeSky700 = Color(0xff136186) + val colorDecorativeSky800 = Color(0xff0c415a) + val colorDecorativeSky900 = Color(0xff06202d) + val colorFunctionalBlack = Color(0xff000000) + val colorFunctionalDarkGray160 = Color(0xff707070) + val colorFunctionalDarkGray240 = Color(0xff666666) + val colorFunctionalDarkGray320 = Color(0xff5c5c5c) + val colorFunctionalDarkGray400 = Color(0xff555555) + val colorFunctionalDarkGray480 = Color(0xff444444) + val colorFunctionalDarkGray560 = Color(0xff3d3d3d) + val colorFunctionalDarkGray640 = Color(0xff333333) + val colorFunctionalDarkGray720 = Color(0xff272727) + val colorFunctionalDarkGray80 = Color(0xff7a7a7a) + val colorFunctionalDarkGray800 = Color(0xff1f1f1f) + val colorFunctionalDarkGray880 = Color(0xff141414) + val colorFunctionalDarkGray960 = Color(0xff0a0a0a) + val colorFunctionalDodgerBlue100 = Color(0xfff0faff) + val colorFunctionalDodgerBlue200 = Color(0xffbde7ff) + val colorFunctionalDodgerBlue300 = Color(0xff8ad5ff) + val colorFunctionalDodgerBlue400 = Color(0xff57c3ff) + val colorFunctionalDodgerBlue500 = Color(0xff26b2ff) + val colorFunctionalDodgerBlue600 = Color(0xff009bf0) + val colorFunctionalDodgerBlue700 = Color(0xff007abd) + val colorFunctionalDodgerBlue800 = Color(0xff00598a) + val colorFunctionalDodgerBlue900 = Color(0xff003857) + val colorFunctionalLightGray160 = Color(0xffeeeeee) + val colorFunctionalLightGray240 = Color(0xffe0e0e0) + val colorFunctionalLightGray320 = Color(0xffd6d6d6) + val colorFunctionalLightGray400 = Color(0xffcccccc) + val colorFunctionalLightGray480 = Color(0xffc2c2c2) + val colorFunctionalLightGray560 = Color(0xffbbbbbb) + val colorFunctionalLightGray640 = Color(0xffadadad) + val colorFunctionalLightGray720 = Color(0xffa3a3a3) + val colorFunctionalLightGray80 = Color(0xfff4f4f4) + val colorFunctionalLightGray800 = Color(0xff999999) + val colorFunctionalLightGray880 = Color(0xff8f8f8f) + val colorFunctionalLightGray960 = Color(0xff858585) + val colorFunctionalMalachite100 = Color(0xffedfcf0) + val colorFunctionalMalachite200 = Color(0xffc1f6ca) + val colorFunctionalMalachite300 = Color(0xff94f0a4) + val colorFunctionalMalachite400 = Color(0xff67e97e) + val colorFunctionalMalachite500 = Color(0xff3de35a) + val colorFunctionalMalachite600 = Color(0xff1ecd3c) + val colorFunctionalMalachite700 = Color(0xff17a02f) + val colorFunctionalMalachite800 = Color(0xff0e621d) + val colorFunctionalMalachite900 = Color(0xff0a4715) + val colorFunctionalScarlet100 = Color(0xffffe5e6) + val colorFunctionalScarlet200 = Color(0xffffb2b3) + val colorFunctionalScarlet300 = Color(0xffff8081) + val colorFunctionalScarlet400 = Color(0xffff4d4e) + val colorFunctionalScarlet500 = Color(0xffff1a1b) + val colorFunctionalScarlet600 = Color(0xffea0305) + val colorFunctionalScarlet700 = Color(0xffb20002) + val colorFunctionalScarlet800 = Color(0xff800001) + val colorFunctionalScarlet900 = Color(0xff4d0001) + val colorFunctionalSun100 = Color(0xfffff7d6) + val colorFunctionalSun200 = Color(0xffffed99) + val colorFunctionalSun300 = Color(0xffffe270) + val colorFunctionalSun400 = Color(0xffffd73d) + val colorFunctionalSun500 = Color(0xffffd000) + val colorFunctionalSun600 = Color(0xffd6aa00) + val colorFunctionalSun700 = Color(0xffa38200) + val colorFunctionalSun800 = Color(0xff665100) + val colorFunctionalSun900 = Color(0xff3d3100) + val colorFunctionalWhite = Color(0xffffffff) + val colorTransparentBlack0 = Color(0x00000000) + val colorTransparentBlack100 = Color(0x0a000000) + val colorTransparentBlack200 = Color(0x14000000) + val colorTransparentBlack300 = Color(0x29000000) + val colorTransparentBlack400 = Color(0x3d000000) + val colorTransparentBlack500 = Color(0x52000000) + val colorTransparentBlack600 = Color(0x7a000000) + val colorTransparentBlack700 = Color(0xa3000000) + val colorTransparentBlack800 = Color(0xe0000000) + val colorTransparentBlack900 = Color(0xff000000) + val colorTransparentWhite0 = Color(0x00ffffff) + val colorTransparentWhite100 = Color(0x0affffff) + val colorTransparentWhite200 = Color(0x14ffffff) + val colorTransparentWhite300 = Color(0x29ffffff) + val colorTransparentWhite400 = Color(0x3dffffff) + val colorTransparentWhite500 = Color(0x52ffffff) + val colorTransparentWhite600 = Color(0x7affffff) + val colorTransparentWhite700 = Color(0xa3ffffff) + val colorTransparentWhite800 = Color(0xe0ffffff) + val colorTransparentWhite900 = Color(0xffffffff) +} \ No newline at end of file diff --git a/global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/OrangeBrandColorRawTokens.kt b/global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/OrangeBrandColorRawTokens.kt new file mode 100644 index 00000000..af7dab43 --- /dev/null +++ b/global-raw-tokens/src/main/java/com/orange/ouds/tokens/global/raw/OrangeBrandColorRawTokens.kt @@ -0,0 +1,38 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.tokens.global.raw + +import androidx.compose.ui.graphics.Color + +object OrangeBrandColorRawTokens { + val colorOrange100 = Color(0xffffd5b0) + val colorOrange200 = Color(0xffffc18a) + val colorOrange300 = Color(0xffffa554) + val colorOrange400 = Color(0xffff9433) + val colorOrange50 = Color(0xfffff2e6) + val colorOrange500 = Color(0xffff7900) + val colorOrange550 = Color(0xfff16e00) + val colorOrange600 = Color(0xffe86e00) + val colorOrange700 = Color(0xffb55600) + val colorOrange800 = Color(0xff8c4300) + val colorOrange900 = Color(0xff6b3300) + val colorWarmGray100 = Color(0xfff9f5f0) + val colorWarmGray200 = Color(0xffe9ddce) + val colorWarmGray300 = Color(0xffd6c4ae) + val colorWarmGray400 = Color(0xffc1ab90) + val colorWarmGray500 = Color(0xffa99275) + val colorWarmGray600 = Color(0xff8a7860) + val colorWarmGray700 = Color(0xff685d50) + val colorWarmGray800 = Color(0xff48433d) + val colorWarmGray900 = Color(0xff353228) +} \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/OudsColorScheme.kt b/theme-contract/src/main/java/com/orange/ouds/theme/OudsColorScheme.kt deleted file mode 100644 index 41fe9121..00000000 --- a/theme-contract/src/main/java/com/orange/ouds/theme/OudsColorScheme.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme - -import androidx.compose.runtime.Stable -import androidx.compose.ui.graphics.Color -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken - -class OudsColorScheme( - val primary: Color, - val onPrimary: Color, - val primaryContainer: Color, - val onPrimaryContainer: Color, - val inversePrimary: Color, - val secondary: Color, - val onSecondary: Color, - val secondaryContainer: Color, - val onSecondaryContainer: Color, - val tertiary: Color, - val onTertiary: Color, - val tertiaryContainer: Color, - val onTertiaryContainer: Color, - val background: Color, - val onBackground: Color, - val surface: Color, - val onSurface: Color, - val surfaceVariant: Color, - val onSurfaceVariant: Color, - val surfaceTint: Color, - val inverseSurface: Color, - val inverseOnSurface: Color, - val error: Color, - val onError: Color, - val errorContainer: Color, - val onErrorContainer: Color, - val outline: Color, - val outlineVariant: Color, - val scrim: Color, - val positive: Color, - val onPositive: Color, - val negative: Color, - val onNegative: Color, - val info: Color, - val alert: Color, -) - -@Stable -fun OudsColorScheme.fromToken(value: OudsColorKeyToken): Color { - return when (value) { - OudsColorKeyToken.Background -> background - OudsColorKeyToken.Error -> error - OudsColorKeyToken.ErrorContainer -> errorContainer - OudsColorKeyToken.InverseOnSurface -> inverseOnSurface - OudsColorKeyToken.InversePrimary -> inversePrimary - OudsColorKeyToken.InverseSurface -> inverseSurface - OudsColorKeyToken.OnBackground -> onBackground - OudsColorKeyToken.OnError -> onError - OudsColorKeyToken.OnErrorContainer -> onErrorContainer - OudsColorKeyToken.OnPrimary -> onPrimary - OudsColorKeyToken.OnPrimaryContainer -> onPrimaryContainer - OudsColorKeyToken.OnSecondary -> onSecondary - OudsColorKeyToken.OnSecondaryContainer -> onSecondaryContainer - OudsColorKeyToken.OnSurface -> onSurface - OudsColorKeyToken.OnSurfaceVariant -> onSurfaceVariant - OudsColorKeyToken.SurfaceTint -> surfaceTint - OudsColorKeyToken.OnTertiary -> onTertiary - OudsColorKeyToken.OnTertiaryContainer -> onTertiaryContainer - OudsColorKeyToken.Outline -> outline - OudsColorKeyToken.OutlineVariant -> outlineVariant - OudsColorKeyToken.Primary -> primary - OudsColorKeyToken.PrimaryContainer -> primaryContainer - OudsColorKeyToken.Scrim -> scrim - OudsColorKeyToken.Secondary -> secondary - OudsColorKeyToken.SecondaryContainer -> secondaryContainer - OudsColorKeyToken.Surface -> surface - OudsColorKeyToken.SurfaceVariant -> surfaceVariant - OudsColorKeyToken.Tertiary -> tertiary - OudsColorKeyToken.TertiaryContainer -> tertiaryContainer - } -} \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt b/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt index 6cf9eb90..bc8952cd 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/OudsThemeContract.kt @@ -16,7 +16,7 @@ import android.os.Parcelable import androidx.compose.ui.text.font.FontFamily import com.orange.ouds.theme.tokens.components.OudsComponentsTokens import com.orange.ouds.theme.tokens.semantic.OudsBorderSemanticTokens -import com.orange.ouds.theme.tokens.semantic.OudsColorTokens +import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsElevationSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsFontSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsGridSemanticTokens @@ -34,7 +34,8 @@ interface OudsThemeContract : Parcelable { /** * Color semantic tokens values used in the theme */ - val colorTokens: OudsColorTokens + val colorTokens: OudsColorSemanticTokens + get() = OudsColorSemanticTokens() /** * Border semantic tokens values used in the theme diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt new file mode 100644 index 00000000..6622d276 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt @@ -0,0 +1,218 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens + +enum class OudsColorKeyToken { + TransparentDefault, + ActionDisabled, + ActionDisabledOnBgEmphasized, + ActionNegativeEnabled, + ActionNegativeFocus, + ActionNegativeHover, + ActionNegativeLoading, + ActionNegativePressed, + ActionPrimaryEnabled, + ActionPrimaryEnabledOnBgEmphasized, + ActionPrimaryFocus, + ActionPrimaryFocusOnBgEmphasized, + ActionPrimaryHover, + ActionPrimaryHoverOnBgEmphasized, + ActionPrimaryLoading, + ActionPrimaryLoadingOnBgEmphasized, + ActionPrimaryPressed, + ActionPrimaryPressedOnBgEmphasized, + ActionSecondaryEnabled, + ActionSecondaryEnabledOnBgEmphasized, + ActionSecondaryFocus, + ActionSecondaryFocusOnBgEmphasized, + ActionSecondaryHover, + ActionSecondaryHoverOnBgEmphasized, + ActionSecondaryLoading, + ActionSecondaryLoadingOnBgEmphasized, + ActionSecondaryPressed, + ActionSecondaryPressedOnBgEmphasized, + ActionSelected, + ActionSelectedOnBgEmphasized, + ActionVisited, + ActionVisitedOnBgEmphasized, + AlwaysAccent, + AlwaysBlack, + AlwaysInfo, + AlwaysNegative, + AlwaysOnAccent, + AlwaysOnBlack, + AlwaysOnInfo, + AlwaysOnNegative, + AlwaysOnPositive, + AlwaysOnWarning, + AlwaysOnWhite, + AlwaysPositive, + AlwaysWarning, + AlwaysWhite, + BgBrandPrimary, + BgEmphasized, + BgPrimary, + BgSecondary, + BgStatusAccentEmphasized, + BgStatusAccentMuted, + BgStatusAccentMutedOnBgEmphasized, + BgStatusInfoEmphasized, + BgStatusInfoMuted, + BgStatusInfoMutedOnBgEmphasized, + BgStatusNegativeEmphasized, + BgStatusNegativeMuted, + BgStatusNegativeMutedOnBgEmphasized, + BgStatusNeutral, + BgStatusNeutralOnBgEmphasized, + BgStatusPositiveEmphasized, + BgStatusPositiveMuted, + BgStatusPositiveMutedOnBgEmphasized, + BgStatusWarningEmphasized, + BgStatusWarningMuted, + BgStatusWarningMutedOnBgEmphasized, + BgTertiary, + BorderBrandPrimary, + BorderBrandPrimaryOnBgEmphasized, + BorderDefault, + BorderDefaultOnBgEmphasized, + BorderEmphasized, + BorderEmphasizedOnBgEmphasized, + BorderFocus, + BorderFocusInset, + BorderFocusInsetOnBgEmphasized, + BorderFocusOnBgEmphasized, + BorderOnBrandPrimary, + BrandAccentDefault, + BrandAccentHigh, + BrandAccentHighest, + BrandAccentLowest, + BrandInfoDefault, + BrandInfoHighest, + BrandInfoLowest, + BrandNegativeDefault, + BrandNegativeHigh, + BrandNegativeHigher, + BrandNegativeHighest, + BrandNegativeLowest, + BrandNeutralEmphasizedBlack, + BrandNeutralEmphasizedHigh, + BrandNeutralEmphasizedHigher, + BrandNeutralEmphasizedHighest, + BrandNeutralEmphasizedLow, + BrandNeutralEmphasizedLower, + BrandNeutralEmphasizedLowest, + BrandNeutralEmphasizedMedium, + BrandNeutralMutedHighest, + BrandNeutralMutedLow, + BrandNeutralMutedLower, + BrandNeutralMutedLowest, + BrandNeutralMutedMedium, + BrandNeutralMutedWhite, + BrandPositiveDefault, + BrandPositiveHighest, + BrandPositiveLowest, + BrandPrimaryDefault, + BrandPrimaryLow, + BrandWarningDefault, + BrandWarningHigh, + BrandWarningHighest, + BrandWarningLowest, + ContentBrandPrimary, + ContentBrandPrimaryOnBgEmphasized, + ContentDefault, + ContentDefaultOnBgEmphasized, + ContentDisabled, + ContentDisabledOnBgEmphasized, + ContentMuted, + ContentMutedOnBgEmphasized, + ContentOnActionDisabled, + ContentOnActionDisabledOnBgEmphasized, + ContentOnActionNegative, + ContentOnActionPrimaryEnabled, + ContentOnActionPrimaryEnabledOnBgEmphasized, + ContentOnActionPrimaryFocus, + ContentOnActionPrimaryFocusOnBgEmphasized, + ContentOnActionPrimaryHover, + ContentOnActionPrimaryHoverOnBgEmphasized, + ContentOnActionPrimaryLoading, + ContentOnActionPrimaryLoadingOnBgEmphasized, + ContentOnActionPrimaryPressed, + ContentOnActionPrimaryPressedOnBgEmphasized, + ContentOnBrandPrimary, + ContentOnStatusAccentEmphasized, + ContentOnStatusAccentMuted, + ContentOnStatusAccentMutedOnBgEmphasized, + ContentOnStatusInfoEmphasized, + ContentOnStatusInfoMuted, + ContentOnStatusInfoMutedOnBgEmphasized, + ContentOnStatusNegativeEmphasized, + ContentOnStatusNegativeMuted, + ContentOnStatusNegativeMutedOnBgEmphasized, + ContentOnStatusPositiveEmphasized, + ContentOnStatusPositiveMuted, + ContentOnStatusPositiveMutedOnBgEmphasized, + ContentOnStatusWarningEmphasized, + ContentOnStatusWarningMuted, + ContentOnStatusWarningMutedOnBgEmphasized, + ContentStatusInfo, + ContentStatusNegative, + ContentStatusPositive, + ContentStatusWarning, + ElevationDrag, + ElevationDragOnBgEmphasized, + ElevationDragOnBgSecondary, + ElevationModal, + ElevationOverlayDefault, + ElevationOverlayDefaultOnBgEmphasized, + ElevationOverlayDefaultOnBgSecondary, + ElevationOverlayEmphasized, + ElevationOverlayEmphasizedOnBgEmphasized, + ElevationOverlayEmphasizedOnBgSecondary, + ElevationRaised, + ElevationRaisedOnBgEmphasized, + ElevationRaisedOnBgSecondary, + GradientSkeletonMiddle, + GradientSkeletonMiddleOnBgEmphasized, + GradientSkeletonStartEnd, + GradientSkeletonStartEndOnBgEmphasized, + DecorativeAccent1Default, + DecorativeAccent1Emphasized, + DecorativeAccent1Muted, + DecorativeAccent2Default, + DecorativeAccent2Emphasized, + DecorativeAccent2Muted, + DecorativeAccent3Default, + DecorativeAccent3Emphasized, + DecorativeAccent3Muted, + DecorativeAccent4Default, + DecorativeAccent4Emphasized, + DecorativeAccent4Muted, + DecorativeAccent5Default, + DecorativeAccent5Emphasized, + DecorativeAccent5Muted, + DecorativeBrandPrimary, + DecorativeBrandSecondary, + DecorativeBrandTertiary, + DecorativeNeutralDefault, + DecorativeNeutralEmphasized, + DecorativeNeutralMuted, + DecorativeSkinTint100, + DecorativeSkinTint200, + DecorativeSkinTint300, + DecorativeSkinTint400, + DecorativeSkinTint500, + DecorativeSkinTint600, + DecorativeSkinTint700, + DecorativeSkinTint800, + DecorativeSkinTint900, +} \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt index 7a8d09f6..71e91d0e 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt @@ -13,16 +13,16 @@ package com.orange.ouds.theme.tokens.components import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.semantic.OudsColorKeyToken open class OudsButtonTokens( - val containerColor: OudsColorKeyToken = OudsColorKeyToken.Primary, - val contentColor: OudsColorKeyToken = OudsColorKeyToken.OnPrimary, - val disabledContainerColor: OudsColorKeyToken = OudsColorKeyToken.Secondary, - val disabledContentColor: OudsColorKeyToken = OudsColorKeyToken.OnSecondary, + val containerColor: OudsColorKeyToken = OudsColorKeyToken.BgBrandPrimary, + val contentColor: OudsColorKeyToken = OudsColorKeyToken.ContentBrandPrimary, + val disabledContainerColor: OudsColorKeyToken = OudsColorKeyToken.ActionDisabled, + val disabledContentColor: OudsColorKeyToken = OudsColorKeyToken.ContentDisabled, val cornerRadius: OudsBorderRadiusKeyToken = OudsBorderRadiusKeyToken.None, val defaultElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val pressedElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt new file mode 100644 index 00000000..f7d776b2 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt @@ -0,0 +1,464 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorSemanticTokens( + val globalColorTokens: OudsGlobalColorSemanticTokens = OudsGlobalColorSemanticTokens(), + val actionColorTokens: OudsActionColorSemanticTokens = OudsActionColorSemanticTokens(), + val alwaysColorTokens: OudsAlwaysColorSemanticTokens = OudsAlwaysColorSemanticTokens(), + val backgroundColorTokens: OudsBgColorSemanticTokens = OudsBgColorSemanticTokens(), + val borderColorTokens: OudsBorderColorSemanticTokens = OudsBorderColorSemanticTokens(), + val brandColorTokens: OudsBrandColorSemanticTokens = OudsBrandColorSemanticTokens(), + val contentColorTokens: OudsContentColorSemanticTokens = OudsContentColorSemanticTokens(), + val elevationColorTokens: OudsElevationColorSemanticTokens = OudsElevationColorSemanticTokens(), + val gradientColorTokens: OudsGradientColorSemanticTokens = OudsGradientColorSemanticTokens(), + val decorativeColorTokens: OudsDecorativeColorSemanticTokens = OudsDecorativeColorSemanticTokens(), +) + +data class OudsGlobalColorSemanticTokens( + val transparentDefaultLight: Color = ColorRawTokens.colorTransparentBlack0, + val transparentDefaultDark: Color = ColorRawTokens.colorTransparentBlack0, +) + +data class OudsActionColorSemanticTokens( + val actionDisabledLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val actionDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionNegativeEnabledLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val actionNegativeFocusLight: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeHoverLight: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeLoadingLight: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionNegativePressedLight: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionPrimaryEnabledLight: Color = ColorRawTokens.colorFunctionalBlack, + val actionPrimaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionPrimaryFocusLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionPrimaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryHoverLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionPrimaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryLoadingLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val actionPrimaryLoadingOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryPressedLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val actionPrimaryPressedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionSecondaryEnabledLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val actionSecondaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val actionSecondaryFocusLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryHoverLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryLoadingLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryLoadingOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryPressedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryPressedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSelectedLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val actionSelectedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionVisitedLight: Color = ColorRawTokens.colorDecorativeAmethyst600, + val actionVisitedOnBgEmphasizedLight: Color = ColorRawTokens.colorDecorativeAmethyst400, + val actionDisabledDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionNegativeEnabledDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val actionNegativeFocusDark: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeHoverDark: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeLoadingDark: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionNegativePressedDark: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionPrimaryEnabledDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionPrimaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionPrimaryFocusDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryHoverDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryLoadingDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryLoadingOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryPressedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryPressedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionSecondaryEnabledDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val actionSecondaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val actionSecondaryFocusDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryHoverDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryLoadingDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryLoadingOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryPressedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryPressedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSelectedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionSelectedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionVisitedDark: Color = ColorRawTokens.colorDecorativeAmethyst400, + val actionVisitedOnBgEmphasizedDark: Color = ColorRawTokens.colorDecorativeAmethyst400, +) + +data class OudsAlwaysColorSemanticTokens( + val alwaysAccentLight: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysBlackLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysInfoLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val alwaysNegativeLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val alwaysOnAccentLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnBlackLight: Color = ColorRawTokens.colorFunctionalWhite, + val alwaysOnInfoLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnNegativeLight: Color = ColorRawTokens.colorFunctionalWhite, + val alwaysOnPositiveLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnWarningLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnWhiteLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysPositiveLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val alwaysWarningLight: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysWhiteLight: Color = ColorRawTokens.colorFunctionalWhite, + val alwaysAccentDark: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysBlackDark: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysInfoDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val alwaysNegativeDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val alwaysOnAccentDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnBlackDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val alwaysOnInfoDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnNegativeDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val alwaysOnPositiveDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnWarningDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnWhiteDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysPositiveDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val alwaysWarningDark: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysWhiteDark: Color = ColorRawTokens.colorFunctionalWhite, +) + +data class OudsBgColorSemanticTokens( + val bgBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val bgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray880, + val bgPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val bgSecondaryLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val bgStatusAccentEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusAccentMutedLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val bgStatusAccentMutedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val bgStatusInfoEmphasizedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val bgStatusInfoMutedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue100, + val bgStatusInfoMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val bgStatusNegativeEmphasizedLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val bgStatusNegativeMutedLight: Color = ColorRawTokens.colorFunctionalScarlet100, + val bgStatusNegativeMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalScarlet900, + val bgStatusNeutralLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val bgStatusNeutralOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val bgStatusPositiveEmphasizedLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val bgStatusPositiveMutedLight: Color = ColorRawTokens.colorFunctionalMalachite100, + val bgStatusPositiveMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalMalachite900, + val bgStatusWarningEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusWarningMutedLight: Color = ColorRawTokens.colorFunctionalSun100, + val bgStatusWarningMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun900, + val bgTertiaryLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val bgBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val bgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val bgPrimaryDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val bgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val bgStatusAccentEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusAccentMutedDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val bgStatusAccentMutedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val bgStatusInfoEmphasizedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val bgStatusInfoMutedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val bgStatusInfoMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val bgStatusNegativeEmphasizedDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val bgStatusNegativeMutedDark: Color = ColorRawTokens.colorFunctionalScarlet900, + val bgStatusNegativeMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalScarlet900, + val bgStatusNeutralDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val bgStatusNeutralOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val bgStatusPositiveEmphasizedDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val bgStatusPositiveMutedDark: Color = ColorRawTokens.colorFunctionalMalachite900, + val bgStatusPositiveMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalMalachite900, + val bgStatusWarningEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusWarningMutedDark: Color = ColorRawTokens.colorFunctionalSun900, + val bgStatusWarningMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun900, + val bgTertiaryDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, +) + +data class OudsBorderColorSemanticTokens( + val borderBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val borderBrandPrimaryOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val borderDefaultLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val borderDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val borderEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val borderEmphasizedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusLight: Color = ColorRawTokens.colorFunctionalBlack, + val borderFocusInsetLight: Color = ColorRawTokens.colorFunctionalWhite, + val borderFocusInsetOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray880, + val borderFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderOnBrandPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val borderBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val borderBrandPrimaryOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val borderDefaultDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val borderDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val borderEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderEmphasizedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusInsetDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val borderFocusInsetOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val borderOnBrandPrimaryDark: Color = ColorRawTokens.colorFunctionalBlack, +) + +data class OudsBrandColorSemanticTokens( + val brandAccentDefaultLight: Color = ColorRawTokens.colorFunctionalSun500, + val brandAccentHighLight: Color = ColorRawTokens.colorFunctionalSun600, + val brandAccentHighestLight: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val brandAccentLowestLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val brandInfoDefaultLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val brandInfoHighestLight: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val brandInfoLowestLight: Color = ColorRawTokens.colorFunctionalDodgerBlue100, + val brandNegativeDefaultLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val brandNegativeHighLight: Color = ColorRawTokens.colorFunctionalScarlet700, + val brandNegativeHigherLight: Color = ColorRawTokens.colorFunctionalScarlet800, + val brandNegativeHighestLight: Color = ColorRawTokens.colorFunctionalScarlet900, + val brandNegativeLowestLight: Color = ColorRawTokens.colorFunctionalScarlet100, + val brandNeutralEmphasizedBlackLight: Color = ColorRawTokens.colorFunctionalBlack, + val brandNeutralEmphasizedHighLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val brandNeutralEmphasizedHigherLight: Color = ColorRawTokens.colorFunctionalDarkGray800, + val brandNeutralEmphasizedHighestLight: Color = ColorRawTokens.colorFunctionalDarkGray880, + val brandNeutralEmphasizedLowLight: Color = ColorRawTokens.colorFunctionalDarkGray560, + val brandNeutralEmphasizedLowerLight: Color = ColorRawTokens.colorFunctionalDarkGray480, + val brandNeutralEmphasizedLowestLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val brandNeutralEmphasizedMediumLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val brandNeutralMutedHighestLight: Color = ColorRawTokens.colorFunctionalDarkGray160, + val brandNeutralMutedLowLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val brandNeutralMutedLowerLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val brandNeutralMutedLowestLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val brandNeutralMutedMediumLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val brandNeutralMutedWhiteLight: Color = ColorRawTokens.colorFunctionalWhite, + val brandPositiveDefaultLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val brandPositiveHighestLight: Color = ColorRawTokens.colorFunctionalMalachite900, + val brandPositiveLowestLight: Color = ColorRawTokens.colorFunctionalMalachite100, + val brandPrimaryDefaultLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val brandPrimaryLowLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val brandWarningDefaultLight: Color = ColorRawTokens.colorFunctionalSun500, + val brandWarningHighLight: Color = ColorRawTokens.colorFunctionalSun600, + val brandWarningHighestLight: Color = ColorRawTokens.colorFunctionalSun900, + val brandWarningLowestLight: Color = ColorRawTokens.colorFunctionalSun100, + val brandAccentDefaultDark: Color = ColorRawTokens.colorFunctionalSun500, + val brandAccentHighDark: Color = ColorRawTokens.colorFunctionalSun600, + val brandAccentHighestDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val brandAccentLowestDark: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val brandInfoDefaultDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val brandInfoHighestDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val brandInfoLowestDark: Color = ColorRawTokens.colorFunctionalDodgerBlue100, + val brandNegativeDefaultDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val brandNegativeHighDark: Color = ColorRawTokens.colorFunctionalScarlet700, + val brandNegativeHigherDark: Color = ColorRawTokens.colorFunctionalScarlet800, + val brandNegativeHighestDark: Color = ColorRawTokens.colorFunctionalScarlet900, + val brandNegativeLowestDark: Color = ColorRawTokens.colorFunctionalScarlet100, + val brandNeutralEmphasizedBlackDark: Color = ColorRawTokens.colorFunctionalBlack, + val brandNeutralEmphasizedHighDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val brandNeutralEmphasizedHigherDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val brandNeutralEmphasizedHighestDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val brandNeutralEmphasizedLowDark: Color = ColorRawTokens.colorFunctionalDarkGray560, + val brandNeutralEmphasizedLowerDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val brandNeutralEmphasizedLowestDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val brandNeutralEmphasizedMediumDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val brandNeutralMutedHighestDark: Color = ColorRawTokens.colorFunctionalDarkGray160, + val brandNeutralMutedLowDark: Color = ColorRawTokens.colorFunctionalLightGray400, + val brandNeutralMutedLowerDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val brandNeutralMutedLowestDark: Color = ColorRawTokens.colorFunctionalLightGray80, + val brandNeutralMutedMediumDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val brandNeutralMutedWhiteDark: Color = ColorRawTokens.colorFunctionalWhite, + val brandPositiveDefaultDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val brandPositiveHighestDark: Color = ColorRawTokens.colorFunctionalMalachite900, + val brandPositiveLowestDark: Color = ColorRawTokens.colorFunctionalMalachite100, + val brandPrimaryDefaultDark: Color = OrangeBrandColorRawTokens.colorOrange550, + val brandPrimaryLowDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val brandWarningDefaultDark: Color = ColorRawTokens.colorFunctionalSun500, + val brandWarningHighDark: Color = ColorRawTokens.colorFunctionalSun600, + val brandWarningHighestDark: Color = ColorRawTokens.colorFunctionalSun900, + val brandWarningLowestDark: Color = ColorRawTokens.colorFunctionalSun100, +) + +data class OudsContentColorSemanticTokens( + val contentBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val contentBrandPrimaryOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val contentDefaultLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentDisabledLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val contentDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentMutedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val contentOnActionDisabledLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionNegativeLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryEnabledLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryFocusLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryHoverLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryLoadingLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryLoadingOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryPressedLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryPressedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnBrandPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnStatusAccentEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusInfoEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusInfoMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusInfoMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusNegativeEmphasizedLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnStatusNegativeMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusNegativeMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusPositiveEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusPositiveMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusPositiveMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusWarningEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusWarningMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusWarningMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentStatusInfoLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val contentStatusNegativeLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val contentStatusPositiveLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val contentStatusWarningLight: Color = ColorRawTokens.colorFunctionalSun500, + val contentBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val contentBrandPrimaryOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val contentDefaultDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentDisabledDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentMutedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val contentMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val contentOnActionDisabledDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionNegativeDark: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryEnabledDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryFocusDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryHoverDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryLoadingDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryLoadingOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryPressedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryPressedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnBrandPrimaryDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusAccentMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusInfoEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusInfoMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusInfoMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusNegativeEmphasizedDark: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnStatusNegativeMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusNegativeMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusPositiveEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusPositiveMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusPositiveMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusWarningEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusWarningMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusWarningMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentStatusInfoDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val contentStatusNegativeDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val contentStatusPositiveDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val contentStatusWarningDark: Color = ColorRawTokens.colorFunctionalSun500, +) + +data class OudsElevationColorSemanticTokens( + val elevationDragLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val elevationDragOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationDragOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val elevationModalLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationOverlayDefaultLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationOverlayDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationOverlayDefaultOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationOverlayEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationOverlayEmphasizedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val elevationOverlayEmphasizedOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationRaisedLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationRaisedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray800, + val elevationRaisedOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationDragDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationDragOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationDragOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationModalDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationOverlayDefaultDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationOverlayDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationOverlayDefaultOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationOverlayEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationOverlayEmphasizedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val elevationOverlayEmphasizedOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationRaisedDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val elevationRaisedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray560, + val elevationRaisedOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray720, +) + +data class OudsGradientColorSemanticTokens( + val gradientSkeletonMiddleLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val gradientSkeletonMiddleOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val gradientSkeletonStartEndLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val gradientSkeletonStartEndOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val gradientSkeletonMiddleDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val gradientSkeletonMiddleOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray560, + val gradientSkeletonStartEndDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val gradientSkeletonStartEndOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, +) + +data class OudsDecorativeColorSemanticTokens( + val decorativeAccent1DefaultLight: Color = ColorRawTokens.colorDecorativeEmerald500, + val decorativeAccent1EmphasizedLight: Color = ColorRawTokens.colorDecorativeEmerald700, + val decorativeAccent1MutedLight: Color = ColorRawTokens.colorDecorativeEmerald200, + val decorativeAccent2DefaultLight: Color = ColorRawTokens.colorDecorativeSky400, + val decorativeAccent2EmphasizedLight: Color = ColorRawTokens.colorDecorativeSky700, + val decorativeAccent2MutedLight: Color = ColorRawTokens.colorDecorativeSky200, + val decorativeAccent3DefaultLight: Color = ColorRawTokens.colorFunctionalSun500, + val decorativeAccent3EmphasizedLight: Color = ColorRawTokens.colorDecorativeAmber500, + val decorativeAccent3MutedLight: Color = ColorRawTokens.colorFunctionalSun200, + val decorativeAccent4DefaultLight: Color = ColorRawTokens.colorDecorativeAmethyst400, + val decorativeAccent4EmphasizedLight: Color = ColorRawTokens.colorDecorativeAmethyst800, + val decorativeAccent4MutedLight: Color = ColorRawTokens.colorDecorativeAmethyst200, + val decorativeAccent5DefaultLight: Color = ColorRawTokens.colorDecorativeShockingPink200, + val decorativeAccent5EmphasizedLight: Color = ColorRawTokens.colorDecorativeShockingPink300, + val decorativeAccent5MutedLight: Color = ColorRawTokens.colorDecorativeShockingPink100, + val decorativeBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val decorativeBrandSecondaryLight: Color = ColorRawTokens.colorFunctionalBlack, + val decorativeBrandTertiaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val decorativeNeutralDefaultLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val decorativeNeutralEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val decorativeNeutralMutedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val decorativeSkinTint100Light: Color = ColorRawTokens.colorDecorativeDeepPeach100, + val decorativeSkinTint200Light: Color = ColorRawTokens.colorDecorativeDeepPeach200, + val decorativeSkinTint300Light: Color = ColorRawTokens.colorDecorativeDeepPeach300, + val decorativeSkinTint400Light: Color = ColorRawTokens.colorDecorativeDeepPeach400, + val decorativeSkinTint500Light: Color = ColorRawTokens.colorDecorativeDeepPeach500, + val decorativeSkinTint600Light: Color = ColorRawTokens.colorDecorativeDeepPeach600, + val decorativeSkinTint700Light: Color = ColorRawTokens.colorDecorativeDeepPeach700, + val decorativeSkinTint800Light: Color = ColorRawTokens.colorDecorativeDeepPeach800, + val decorativeSkinTint900Light: Color = ColorRawTokens.colorDecorativeDeepPeach900, + val decorativeAccent1DefaultDark: Color = ColorRawTokens.colorDecorativeEmerald500, + val decorativeAccent1EmphasizedDark: Color = ColorRawTokens.colorDecorativeEmerald700, + val decorativeAccent1MutedDark: Color = ColorRawTokens.colorDecorativeEmerald200, + val decorativeAccent2DefaultDark: Color = ColorRawTokens.colorDecorativeSky400, + val decorativeAccent2EmphasizedDark: Color = ColorRawTokens.colorDecorativeSky700, + val decorativeAccent2MutedDark: Color = ColorRawTokens.colorDecorativeSky200, + val decorativeAccent3DefaultDark: Color = ColorRawTokens.colorFunctionalSun500, + val decorativeAccent3EmphasizedDark: Color = ColorRawTokens.colorDecorativeAmber500, + val decorativeAccent3MutedDark: Color = ColorRawTokens.colorFunctionalSun200, + val decorativeAccent4DefaultDark: Color = ColorRawTokens.colorDecorativeAmethyst400, + val decorativeAccent4EmphasizedDark: Color = ColorRawTokens.colorDecorativeAmethyst800, + val decorativeAccent4MutedDark: Color = ColorRawTokens.colorDecorativeAmethyst200, + val decorativeAccent5DefaultDark: Color = ColorRawTokens.colorDecorativeShockingPink200, + val decorativeAccent5EmphasizedDark: Color = ColorRawTokens.colorDecorativeShockingPink300, + val decorativeAccent5MutedDark: Color = ColorRawTokens.colorDecorativeShockingPink100, + val decorativeBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val decorativeBrandSecondaryDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val decorativeBrandTertiaryDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val decorativeNeutralDefaultDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val decorativeNeutralEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val decorativeNeutralMutedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val decorativeSkinTint100Dark: Color = ColorRawTokens.colorDecorativeDeepPeach100, + val decorativeSkinTint200Dark: Color = ColorRawTokens.colorDecorativeDeepPeach200, + val decorativeSkinTint300Dark: Color = ColorRawTokens.colorDecorativeDeepPeach300, + val decorativeSkinTint400Dark: Color = ColorRawTokens.colorDecorativeDeepPeach400, + val decorativeSkinTint500Dark: Color = ColorRawTokens.colorDecorativeDeepPeach500, + val decorativeSkinTint600Dark: Color = ColorRawTokens.colorDecorativeDeepPeach600, + val decorativeSkinTint700Dark: Color = ColorRawTokens.colorDecorativeDeepPeach700, + val decorativeSkinTint800Dark: Color = ColorRawTokens.colorDecorativeDeepPeach800, + val decorativeSkinTint900Dark: Color = ColorRawTokens.colorDecorativeDeepPeach900 +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorTokens.kt deleted file mode 100644 index c6878c4c..00000000 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorTokens.kt +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.tokens.semantic - -import androidx.compose.material3.ColorScheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.ui.graphics.Color -import com.orange.ouds.theme.OudsColorScheme - -data class OudsColorTokens( - val primary: OudsColorTokenValue, - val onPrimary: OudsColorTokenValue, - val primaryContainer: OudsColorTokenValue, - val onPrimaryContainer: OudsColorTokenValue, - val inversePrimary: OudsColorTokenValue, - val secondary: OudsColorTokenValue, - val onSecondary: OudsColorTokenValue, - val secondaryContainer: OudsColorTokenValue, - val onSecondaryContainer: OudsColorTokenValue, - val tertiary: OudsColorTokenValue, - val onTertiary: OudsColorTokenValue, - val tertiaryContainer: OudsColorTokenValue, - val onTertiaryContainer: OudsColorTokenValue, - val background: OudsColorTokenValue, - val onBackground: OudsColorTokenValue, - val surface: OudsColorTokenValue, - val onSurface: OudsColorTokenValue, - val surfaceVariant: OudsColorTokenValue, - val onSurfaceVariant: OudsColorTokenValue, - val surfaceTint: OudsColorTokenValue, - val inverseSurface: OudsColorTokenValue, - val inverseOnSurface: OudsColorTokenValue, - val error: OudsColorTokenValue, - val onError: OudsColorTokenValue, - val errorContainer: OudsColorTokenValue, - val onErrorContainer: OudsColorTokenValue, - val outline: OudsColorTokenValue, - val outlineVariant: OudsColorTokenValue, - val scrim: OudsColorTokenValue, - val positive: OudsColorTokenValue, - val onPositive: OudsColorTokenValue, - val negative: OudsColorTokenValue, - val onNegative: OudsColorTokenValue, - val info: OudsColorTokenValue, - val alert: OudsColorTokenValue, -) { - - val lightColorScheme: OudsColorScheme - get() = OudsColorScheme( - primary = primary.light, - onPrimary = onPrimary.light, - primaryContainer = primaryContainer.light, - onPrimaryContainer = onPrimaryContainer.light, - inversePrimary = inversePrimary.light, - secondary = secondary.light, - onSecondary = onSecondary.light, - secondaryContainer = secondaryContainer.light, - onSecondaryContainer = onSecondaryContainer.light, - tertiary = tertiary.light, - onTertiary = onTertiary.light, - tertiaryContainer = tertiaryContainer.light, - onTertiaryContainer = onTertiaryContainer.light, - background = background.light, - onBackground = onBackground.light, - surface = surface.light, - onSurface = onSurface.light, - surfaceVariant = surfaceVariant.light, - onSurfaceVariant = onSurfaceVariant.light, - surfaceTint = surfaceTint.light, - inverseSurface = inverseSurface.light, - inverseOnSurface = inverseOnSurface.light, - error = error.light, - onError = onError.light, - errorContainer = errorContainer.light, - onErrorContainer = onErrorContainer.light, - outline = outline.light, - outlineVariant = outlineVariant.light, - scrim = scrim.light, - positive = positive.light, - onPositive = onPositive.light, - negative = negative.light, - onNegative = onNegative.light, - info = info.light, - alert = alert.light - ) - - val darkColorScheme: OudsColorScheme - get() = OudsColorScheme( - primary = primary.dark, - onPrimary = onPrimary.dark, - primaryContainer = primaryContainer.dark, - onPrimaryContainer = onPrimaryContainer.dark, - inversePrimary = inversePrimary.dark, - secondary = secondary.dark, - onSecondary = onSecondary.dark, - secondaryContainer = secondaryContainer.dark, - onSecondaryContainer = onSecondaryContainer.dark, - tertiary = tertiary.dark, - onTertiary = onTertiary.dark, - tertiaryContainer = tertiaryContainer.dark, - onTertiaryContainer = onTertiaryContainer.dark, - background = background.dark, - onBackground = onBackground.dark, - surface = surface.dark, - onSurface = onSurface.dark, - surfaceVariant = surfaceVariant.dark, - onSurfaceVariant = onSurfaceVariant.dark, - surfaceTint = surfaceTint.dark, - inverseSurface = inverseSurface.dark, - inverseOnSurface = inverseOnSurface.dark, - error = error.dark, - onError = onError.dark, - errorContainer = errorContainer.dark, - onErrorContainer = onErrorContainer.dark, - outline = outline.dark, - outlineVariant = outlineVariant.dark, - scrim = scrim.dark, - positive = positive.dark, - onPositive = onPositive.dark, - negative = negative.dark, - onNegative = onNegative.dark, - info = info.dark, - alert = alert.dark - ) - - val materialLightColorScheme: ColorScheme - get() = lightColorScheme( - primary = primary.light, - onPrimary = onPrimary.light, - primaryContainer = primaryContainer.light, - onPrimaryContainer = onPrimaryContainer.light, - inversePrimary = inversePrimary.light, - secondary = secondary.light, - onSecondary = onSecondary.light, - secondaryContainer = secondaryContainer.light, - onSecondaryContainer = onSecondaryContainer.light, - tertiary = tertiary.light, - onTertiary = onTertiary.light, - tertiaryContainer = tertiaryContainer.light, - onTertiaryContainer = onTertiaryContainer.light, - background = background.light, - onBackground = onBackground.light, - surface = surface.light, - onSurface = onSurface.light, - surfaceVariant = surfaceVariant.light, - onSurfaceVariant = onSurfaceVariant.light, - surfaceTint = surfaceTint.light, - inverseSurface = inverseSurface.light, - inverseOnSurface = inverseOnSurface.light, - error = error.light, - onError = onError.light, - errorContainer = errorContainer.light, - onErrorContainer = onErrorContainer.light, - outline = outline.light, - outlineVariant = outlineVariant.light, - scrim = scrim.light, - ) - - val materialDarkColorScheme: ColorScheme - get() = darkColorScheme( - primary = primary.dark, - onPrimary = onPrimary.dark, - primaryContainer = primaryContainer.dark, - onPrimaryContainer = onPrimaryContainer.dark, - inversePrimary = inversePrimary.dark, - secondary = secondary.dark, - onSecondary = onSecondary.dark, - secondaryContainer = secondaryContainer.dark, - onSecondaryContainer = onSecondaryContainer.dark, - tertiary = tertiary.dark, - onTertiary = onTertiary.dark, - tertiaryContainer = tertiaryContainer.dark, - onTertiaryContainer = onTertiaryContainer.dark, - background = background.dark, - onBackground = onBackground.dark, - surface = surface.dark, - onSurface = onSurface.dark, - surfaceVariant = surfaceVariant.dark, - onSurfaceVariant = onSurfaceVariant.dark, - surfaceTint = surfaceTint.dark, - inverseSurface = inverseSurface.dark, - inverseOnSurface = inverseOnSurface.dark, - error = error.dark, - onError = onError.dark, - errorContainer = errorContainer.dark, - onErrorContainer = onErrorContainer.dark, - outline = outline.dark, - outlineVariant = outlineVariant.dark, - scrim = scrim.dark, - ) -} - -data class OudsColorTokenValue(val light: Color, val dark: Color) - -enum class OudsColorKeyToken { - Background, - Error, - ErrorContainer, - InverseOnSurface, - InversePrimary, - InverseSurface, - OnBackground, - OnError, - OnErrorContainer, - OnPrimary, - OnPrimaryContainer, - OnSecondary, - OnSecondaryContainer, - OnSurface, - OnSurfaceVariant, - OnTertiary, - OnTertiaryContainer, - Outline, - OutlineVariant, - Primary, - PrimaryContainer, - Scrim, - Secondary, - SecondaryContainer, - Surface, - SurfaceTint, - SurfaceVariant, - Tertiary, - TertiaryContainer, -} \ No newline at end of file diff --git a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt index a9a7d202..4cfb6a20 100644 --- a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt +++ b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt @@ -12,23 +12,32 @@ package com.orange.ouds.theme.orangecountry +import androidx.compose.ui.graphics.Color import com.orange.ouds.theme.orange.OrangeTheme -import com.orange.ouds.theme.orangecountry.tokens.orangeCountrySemanticColorTokens import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens -import com.orange.ouds.theme.tokens.semantic.OudsColorTokens +import com.orange.ouds.theme.tokens.semantic.OudsBgColorSemanticTokens +import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens +import kotlinx.parcelize.Parcelize +@Parcelize class OrangeCountryTheme : OrangeTheme() { override val name: String get() = "Orange country" - override val colorTokens: OudsColorTokens - get() = orangeCountrySemanticColorTokens + override val colorTokens: OudsColorSemanticTokens + get() = OudsColorSemanticTokens( + backgroundColorTokens = OudsBgColorSemanticTokens( + bgBrandPrimaryLight = Color(0xFF34D349), + bgBrandPrimaryDark = Color(0xFF069D1A) + ) + ) override val componentsTokens: OudsComponentsTokens get() = OudsComponentsTokens( - button = OudsButtonTokens(cornerRadius = OudsBorderRadiusKeyToken.Short) + button = OudsButtonTokens(containerColor = OudsColorKeyToken.BgStatusAccentEmphasized, cornerRadius = OudsBorderRadiusKeyToken.Short) ) } \ No newline at end of file diff --git a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountryRawColorTokens.kt b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountryRawColorTokens.kt deleted file mode 100644 index 90e51d72..00000000 --- a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountryRawColorTokens.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.orangecountry.tokens - -import androidx.compose.ui.graphics.Color - -internal object OrangeCountryRawColorTokens { - val alert100 = Color(0xFFFFCC00) - val alert200 = Color(0xFF8F7200) -} \ No newline at end of file diff --git a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountrySemanticColorTokens.kt b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountrySemanticColorTokens.kt deleted file mode 100644 index 2dedfb95..00000000 --- a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/tokens/OrangeCountrySemanticColorTokens.kt +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.orangecountry.tokens - -import com.orange.ouds.theme.orange.tokens.orangeSemanticColorTokens -import com.orange.ouds.theme.tokens.semantic.OudsColorTokenValue - -val orangeCountrySemanticColorTokens - get() = with(OrangeCountryRawColorTokens) { - orangeSemanticColorTokens.copy( - primary = OudsColorTokenValue(alert200, alert100) - ) - } \ No newline at end of file diff --git a/theme-orange/src/main/java/com/orange/ouds/theme/orange/OrangeTheme.kt b/theme-orange/src/main/java/com/orange/ouds/theme/orange/OrangeTheme.kt index 233ff304..37cb5235 100644 --- a/theme-orange/src/main/java/com/orange/ouds/theme/orange/OrangeTheme.kt +++ b/theme-orange/src/main/java/com/orange/ouds/theme/orange/OrangeTheme.kt @@ -13,8 +13,6 @@ package com.orange.ouds.theme.orange import com.orange.ouds.theme.OudsThemeContract -import com.orange.ouds.theme.orange.tokens.orangeSemanticColorTokens -import com.orange.ouds.theme.tokens.semantic.OudsColorTokens import kotlinx.parcelize.Parcelize const val ORANGE_THEME_NAME = "Orange" @@ -25,6 +23,4 @@ open class OrangeTheme : OudsThemeContract { override val name: String get() = ORANGE_THEME_NAME - override val colorTokens: OudsColorTokens - get() = orangeSemanticColorTokens } diff --git a/theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeRawColorTokens.kt b/theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeRawColorTokens.kt deleted file mode 100644 index 747f21c3..00000000 --- a/theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeRawColorTokens.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.orange.tokens - -import androidx.compose.ui.graphics.Color - -internal object OrangeRawColorTokens { - val orange100 = Color(0xFFFF7900) - val orange200 = Color(0xFFF16E00) - val tmpOrangeFFA14D = Color(0xFFFFA14D) - val tmpOrangeFFB68E = Color(0xFFFFB68E) - - val white100 = Color(0xFFFFFFFF) - val black900 = Color(0xFF000000) - - val tmpBrown362F2C = Color(0xFF362F2C) - val tmpBrown9C4500 = Color(0xFF9C4500) - val tmpBrown52443C = Color(0xFF52443C) - val tmpGrey333333 = Color(0xFF333333) - val tmpGrey666666 = Color(0xFF666666) - val tmpGrey999999 = Color(0xFF999999) - val tmpGreyCCCCCC = Color(0xFFCCCCCC) - val tmpGreyEBEBEB = Color(0xFFEBEBEB) - val tmpGreyEEEEEE = Color(0xFFEEEEEE) - - val info100 = Color(0xFF527EDB) - val info200 = Color(0xFF4170D8) - val alert100 = Color(0xFFFFCC00) - val alert200 = Color(0xFF8F7200) - val positive100 = Color(0xFF32C832) - val positive200 = Color(0xFF228722) - val negative100 = Color(0xFFD53F15) - val negative200 = Color(0xFFCD3C14) - - val tmpRedD53F15 = Color(0xFFD53F15) - val tmpRedFFDAD6 = Color(0xFFFFDAD6) - val tmpRed410002 = Color(0xFF410002) - val tmpRed93000A = Color(0xFF93000A) -} \ No newline at end of file diff --git a/theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeSemanticColorTokens.kt b/theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeSemanticColorTokens.kt deleted file mode 100644 index aebc463c..00000000 --- a/theme-orange/src/main/java/com/orange/ouds/theme/orange/tokens/OrangeSemanticColorTokens.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Software Name: OUDS Android - * SPDX-FileCopyrightText: Copyright (c) Orange SA - * SPDX-License-Identifier: MIT - * - * This software is distributed under the MIT license, - * the text of which is available at https://opensource.org/license/MIT/ - * or see the "LICENSE" file for more details. - * - * Software description: Android library of reusable graphical components - */ - -package com.orange.ouds.theme.orange.tokens - -import com.orange.ouds.theme.tokens.semantic.OudsColorTokenValue -import com.orange.ouds.theme.tokens.semantic.OudsColorTokens - -val orangeSemanticColorTokens - get() = with(OrangeRawColorTokens) { - OudsColorTokens( - primary = OudsColorTokenValue(orange200, orange100), - onPrimary = OudsColorTokenValue(white100, black900), - primaryContainer = OudsColorTokenValue(tmpOrangeFFA14D, tmpOrangeFFA14D), - onPrimaryContainer = OudsColorTokenValue(black900, black900), - inversePrimary = OudsColorTokenValue(tmpOrangeFFB68E, tmpBrown9C4500), - - secondary = OudsColorTokenValue(orange200, white100), - onSecondary = OudsColorTokenValue(black900, black900), - secondaryContainer = OudsColorTokenValue(tmpGrey333333, tmpGreyCCCCCC), - onSecondaryContainer = OudsColorTokenValue(white100, black900), - - tertiary = OudsColorTokenValue(tmpGrey666666, tmpGreyCCCCCC), - onTertiary = OudsColorTokenValue(white100, black900), - tertiaryContainer = OudsColorTokenValue(tmpGreyCCCCCC, tmpGrey333333), - onTertiaryContainer = OudsColorTokenValue(black900, white100), - background = OudsColorTokenValue(white100, black900), - onBackground = OudsColorTokenValue(black900, white100), - surface = OudsColorTokenValue(white100, black900), - onSurface = OudsColorTokenValue(black900, white100), - surfaceVariant = OudsColorTokenValue(tmpGreyEEEEEE, tmpGrey333333), - onSurfaceVariant = OudsColorTokenValue(black900, tmpGreyEEEEEE), - surfaceTint = OudsColorTokenValue(tmpGrey999999, white100), - inverseSurface = OudsColorTokenValue(tmpBrown362F2C, tmpGreyEEEEEE), - inverseOnSurface = OudsColorTokenValue(white100, black900), - error = OudsColorTokenValue(negative200, tmpRedD53F15), - onError = OudsColorTokenValue(white100, black900), - errorContainer = OudsColorTokenValue(tmpRedFFDAD6, tmpRed93000A), - onErrorContainer = OudsColorTokenValue(tmpRed410002, tmpRedFFDAD6), - outline = OudsColorTokenValue(black900, tmpGreyEEEEEE), - outlineVariant = OudsColorTokenValue(tmpGreyEBEBEB, tmpBrown52443C), - scrim = OudsColorTokenValue(black900, black900), - positive = OudsColorTokenValue(positive200, positive100), - onPositive = OudsColorTokenValue(white100, black900), - negative = OudsColorTokenValue(negative200, negative100), - onNegative = OudsColorTokenValue(white100, white100), - info = OudsColorTokenValue(info200, info100), - alert = OudsColorTokenValue(alert200, alert100) - ) - } \ No newline at end of file diff --git a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt index 43bd9a4c..d80ef016 100644 --- a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt +++ b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/WhiteLabelTheme.kt @@ -21,7 +21,7 @@ import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens -import com.orange.ouds.theme.tokens.semantic.OudsColorTokens +import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens import com.orange.ouds.theme.whitelabel.tokens.whiteLabelSemanticColorTokens import kotlinx.parcelize.Parcelize @@ -31,7 +31,7 @@ open class WhiteLabelTheme : OudsThemeContract { override val name: String get() = "White label" - override val colorTokens: OudsColorTokens + override val colorTokens: OudsColorSemanticTokens get() = whiteLabelSemanticColorTokens override val fontFamily: FontFamily diff --git a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt index ea30a098..d03e7f55 100644 --- a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt +++ b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt @@ -12,47 +12,17 @@ package com.orange.ouds.theme.whitelabel.tokens -import com.orange.ouds.theme.tokens.semantic.OudsColorTokenValue -import com.orange.ouds.theme.tokens.semantic.OudsColorTokens +import androidx.compose.ui.graphics.Color +import com.orange.ouds.theme.tokens.semantic.OudsBgColorSemanticTokens +import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens val whiteLabelSemanticColorTokens = with(WhiteLabelRawColorTokens) { - OudsColorTokens( - primary = OudsColorTokenValue(primary40, primary80), - onPrimary = OudsColorTokenValue(white, primary20), - primaryContainer = OudsColorTokenValue(primary90, primary30), - onPrimaryContainer = OudsColorTokenValue(white, white), - inversePrimary = OudsColorTokenValue(primary80, primary40), - - secondary = OudsColorTokenValue(secondary40, secondary80), - onSecondary = OudsColorTokenValue(white, secondary20), - secondaryContainer = OudsColorTokenValue(secondary90, secondary30), - onSecondaryContainer = OudsColorTokenValue(secondary10, secondary90), - - tertiary = OudsColorTokenValue(tertiary40, tertiary80), - onTertiary = OudsColorTokenValue(white, tertiary20), - tertiaryContainer = OudsColorTokenValue(tertiary90, tertiary30), - onTertiaryContainer = OudsColorTokenValue(tertiary10, tertiary90), - background = OudsColorTokenValue(white, black), - onBackground = OudsColorTokenValue(black, white), - surface = OudsColorTokenValue(neutral98, neutral6), - onSurface = OudsColorTokenValue(black, neutral90), - surfaceVariant = OudsColorTokenValue(neutral94, neutral24), - onSurfaceVariant = OudsColorTokenValue(black, neutralVariant90), - surfaceTint = OudsColorTokenValue(white, neutral98), - inverseSurface = OudsColorTokenValue(neutral20, neutral90), - inverseOnSurface = OudsColorTokenValue(neutral95, neutral20), - error = OudsColorTokenValue(error40, error80), - onError = OudsColorTokenValue(white, error20), - errorContainer = OudsColorTokenValue(error90, error30), - onErrorContainer = OudsColorTokenValue(white, error90), - outline = OudsColorTokenValue(neutralVariant50, neutralVariant60), - outlineVariant = OudsColorTokenValue(neutralVariant80, neutralVariant30), - scrim = OudsColorTokenValue(black, black), - positive = OudsColorTokenValue(green, green), - onPositive = OudsColorTokenValue(white, white), - negative = OudsColorTokenValue(red, red), - onNegative = OudsColorTokenValue(white, white), - info = OudsColorTokenValue(info, info), - alert = OudsColorTokenValue(yellow, yellow) + OudsColorSemanticTokens( + backgroundColorTokens = OudsBgColorSemanticTokens( + bgBrandPrimaryLight = Color(0xFF34D349), + bgBrandPrimaryDark = Color(0xFF069D1A), + bgSecondaryLight = secondary40, + bgSecondaryDark = secondary80, + ) ) } \ No newline at end of file From b1891e86edafa0d95295db4aada7be099bc21907 Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Wed, 23 Oct 2024 14:30:33 +0200 Subject: [PATCH 29/33] Split color semantic tokens file in several files --- .../semantic/OudsColorActionSemanticTokens.kt | 82 ++++ .../semantic/OudsColorAlwaysSemanticTokens.kt | 47 ++ .../semantic/OudsColorBgSemanticTokens.kt | 64 +++ .../semantic/OudsColorBorderSemanticTokens.kt | 42 ++ .../semantic/OudsColorBrandSemanticTokens.kt | 90 ++++ .../OudsColorContentSemanticTokens.kt | 102 ++++ .../OudsColorDecorativeSemanticTokens.kt | 80 +++ .../OudsColorElevationSemanticTokens.kt | 45 ++ .../semantic/OudsColorGlobalSemanticTokens.kt | 21 + .../OudsColorGradientSemanticTokens.kt | 27 ++ .../semantic/OudsColorSemanticTokens.kt | 458 +----------------- .../theme/orangecountry/OrangeCountryTheme.kt | 4 +- .../tokens/WhiteLabelSemanticColorTokens.kt | 4 +- 13 files changed, 614 insertions(+), 452 deletions(-) create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorActionSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorAlwaysSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBgSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBorderSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBrandSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorContentSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorDecorativeSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorElevationSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGlobalSemanticTokens.kt create mode 100644 theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGradientSemanticTokens.kt diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorActionSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorActionSemanticTokens.kt new file mode 100644 index 00000000..adc6ce19 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorActionSemanticTokens.kt @@ -0,0 +1,82 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorActionSemanticTokens( + val actionDisabledLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val actionDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionNegativeEnabledLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val actionNegativeFocusLight: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeHoverLight: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeLoadingLight: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionNegativePressedLight: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionPrimaryEnabledLight: Color = ColorRawTokens.colorFunctionalBlack, + val actionPrimaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionPrimaryFocusLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionPrimaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryHoverLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionPrimaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryLoadingLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val actionPrimaryLoadingOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryPressedLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val actionPrimaryPressedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionSecondaryEnabledLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val actionSecondaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val actionSecondaryFocusLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryHoverLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryLoadingLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryLoadingOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryPressedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionSecondaryPressedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSelectedLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val actionSelectedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionVisitedLight: Color = ColorRawTokens.colorDecorativeAmethyst600, + val actionVisitedOnBgEmphasizedLight: Color = ColorRawTokens.colorDecorativeAmethyst400, + val actionDisabledDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val actionNegativeEnabledDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val actionNegativeFocusDark: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeHoverDark: Color = ColorRawTokens.colorFunctionalScarlet700, + val actionNegativeLoadingDark: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionNegativePressedDark: Color = ColorRawTokens.colorFunctionalScarlet800, + val actionPrimaryEnabledDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionPrimaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val actionPrimaryFocusDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryHoverDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val actionPrimaryLoadingDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryLoadingOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryPressedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionPrimaryPressedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionSecondaryEnabledDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val actionSecondaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val actionSecondaryFocusDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryHoverDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryLoadingDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryLoadingOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryPressedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSecondaryPressedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val actionSelectedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionSelectedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val actionVisitedDark: Color = ColorRawTokens.colorDecorativeAmethyst400, + val actionVisitedOnBgEmphasizedDark: Color = ColorRawTokens.colorDecorativeAmethyst400, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorAlwaysSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorAlwaysSemanticTokens.kt new file mode 100644 index 00000000..7685d943 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorAlwaysSemanticTokens.kt @@ -0,0 +1,47 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens + +data class OudsColorAlwaysSemanticTokens( + val alwaysAccentLight: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysBlackLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysInfoLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val alwaysNegativeLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val alwaysOnAccentLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnBlackLight: Color = ColorRawTokens.colorFunctionalWhite, + val alwaysOnInfoLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnNegativeLight: Color = ColorRawTokens.colorFunctionalWhite, + val alwaysOnPositiveLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnWarningLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysOnWhiteLight: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysPositiveLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val alwaysWarningLight: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysWhiteLight: Color = ColorRawTokens.colorFunctionalWhite, + val alwaysAccentDark: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysBlackDark: Color = ColorRawTokens.colorFunctionalBlack, + val alwaysInfoDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val alwaysNegativeDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val alwaysOnAccentDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnBlackDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val alwaysOnInfoDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnNegativeDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val alwaysOnPositiveDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnWarningDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysOnWhiteDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val alwaysPositiveDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val alwaysWarningDark: Color = ColorRawTokens.colorFunctionalSun500, + val alwaysWhiteDark: Color = ColorRawTokens.colorFunctionalWhite, +) diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBgSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBgSemanticTokens.kt new file mode 100644 index 00000000..79e822d1 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBgSemanticTokens.kt @@ -0,0 +1,64 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorBgSemanticTokens( + val bgBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val bgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray880, + val bgPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val bgSecondaryLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val bgStatusAccentEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusAccentMutedLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val bgStatusAccentMutedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val bgStatusInfoEmphasizedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val bgStatusInfoMutedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue100, + val bgStatusInfoMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val bgStatusNegativeEmphasizedLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val bgStatusNegativeMutedLight: Color = ColorRawTokens.colorFunctionalScarlet100, + val bgStatusNegativeMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalScarlet900, + val bgStatusNeutralLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val bgStatusNeutralOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val bgStatusPositiveEmphasizedLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val bgStatusPositiveMutedLight: Color = ColorRawTokens.colorFunctionalMalachite100, + val bgStatusPositiveMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalMalachite900, + val bgStatusWarningEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusWarningMutedLight: Color = ColorRawTokens.colorFunctionalSun100, + val bgStatusWarningMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun900, + val bgTertiaryLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val bgBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val bgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val bgPrimaryDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val bgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val bgStatusAccentEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusAccentMutedDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val bgStatusAccentMutedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val bgStatusInfoEmphasizedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val bgStatusInfoMutedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val bgStatusInfoMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val bgStatusNegativeEmphasizedDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val bgStatusNegativeMutedDark: Color = ColorRawTokens.colorFunctionalScarlet900, + val bgStatusNegativeMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalScarlet900, + val bgStatusNeutralDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val bgStatusNeutralOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val bgStatusPositiveEmphasizedDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val bgStatusPositiveMutedDark: Color = ColorRawTokens.colorFunctionalMalachite900, + val bgStatusPositiveMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalMalachite900, + val bgStatusWarningEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun500, + val bgStatusWarningMutedDark: Color = ColorRawTokens.colorFunctionalSun900, + val bgStatusWarningMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun900, + val bgTertiaryDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBorderSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBorderSemanticTokens.kt new file mode 100644 index 00000000..c731f7b8 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBorderSemanticTokens.kt @@ -0,0 +1,42 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorBorderSemanticTokens( + val borderBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val borderBrandPrimaryOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val borderDefaultLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val borderDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val borderEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val borderEmphasizedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusLight: Color = ColorRawTokens.colorFunctionalBlack, + val borderFocusInsetLight: Color = ColorRawTokens.colorFunctionalWhite, + val borderFocusInsetOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray880, + val borderFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderOnBrandPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val borderBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val borderBrandPrimaryOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val borderDefaultDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val borderDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val borderEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderEmphasizedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusInsetDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val borderFocusInsetOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val borderFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val borderOnBrandPrimaryDark: Color = ColorRawTokens.colorFunctionalBlack, +) diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBrandSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBrandSemanticTokens.kt new file mode 100644 index 00000000..fa091c93 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorBrandSemanticTokens.kt @@ -0,0 +1,90 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorBrandSemanticTokens( + val brandAccentDefaultLight: Color = ColorRawTokens.colorFunctionalSun500, + val brandAccentHighLight: Color = ColorRawTokens.colorFunctionalSun600, + val brandAccentHighestLight: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val brandAccentLowestLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val brandInfoDefaultLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val brandInfoHighestLight: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val brandInfoLowestLight: Color = ColorRawTokens.colorFunctionalDodgerBlue100, + val brandNegativeDefaultLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val brandNegativeHighLight: Color = ColorRawTokens.colorFunctionalScarlet700, + val brandNegativeHigherLight: Color = ColorRawTokens.colorFunctionalScarlet800, + val brandNegativeHighestLight: Color = ColorRawTokens.colorFunctionalScarlet900, + val brandNegativeLowestLight: Color = ColorRawTokens.colorFunctionalScarlet100, + val brandNeutralEmphasizedBlackLight: Color = ColorRawTokens.colorFunctionalBlack, + val brandNeutralEmphasizedHighLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val brandNeutralEmphasizedHigherLight: Color = ColorRawTokens.colorFunctionalDarkGray800, + val brandNeutralEmphasizedHighestLight: Color = ColorRawTokens.colorFunctionalDarkGray880, + val brandNeutralEmphasizedLowLight: Color = ColorRawTokens.colorFunctionalDarkGray560, + val brandNeutralEmphasizedLowerLight: Color = ColorRawTokens.colorFunctionalDarkGray480, + val brandNeutralEmphasizedLowestLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val brandNeutralEmphasizedMediumLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val brandNeutralMutedHighestLight: Color = ColorRawTokens.colorFunctionalDarkGray160, + val brandNeutralMutedLowLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val brandNeutralMutedLowerLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val brandNeutralMutedLowestLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val brandNeutralMutedMediumLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val brandNeutralMutedWhiteLight: Color = ColorRawTokens.colorFunctionalWhite, + val brandPositiveDefaultLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val brandPositiveHighestLight: Color = ColorRawTokens.colorFunctionalMalachite900, + val brandPositiveLowestLight: Color = ColorRawTokens.colorFunctionalMalachite100, + val brandPrimaryDefaultLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val brandPrimaryLowLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val brandWarningDefaultLight: Color = ColorRawTokens.colorFunctionalSun500, + val brandWarningHighLight: Color = ColorRawTokens.colorFunctionalSun600, + val brandWarningHighestLight: Color = ColorRawTokens.colorFunctionalSun900, + val brandWarningLowestLight: Color = ColorRawTokens.colorFunctionalSun100, + val brandAccentDefaultDark: Color = ColorRawTokens.colorFunctionalSun500, + val brandAccentHighDark: Color = ColorRawTokens.colorFunctionalSun600, + val brandAccentHighestDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, + val brandAccentLowestDark: Color = OrangeBrandColorRawTokens.colorWarmGray100, + val brandInfoDefaultDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val brandInfoHighestDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, + val brandInfoLowestDark: Color = ColorRawTokens.colorFunctionalDodgerBlue100, + val brandNegativeDefaultDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val brandNegativeHighDark: Color = ColorRawTokens.colorFunctionalScarlet700, + val brandNegativeHigherDark: Color = ColorRawTokens.colorFunctionalScarlet800, + val brandNegativeHighestDark: Color = ColorRawTokens.colorFunctionalScarlet900, + val brandNegativeLowestDark: Color = ColorRawTokens.colorFunctionalScarlet100, + val brandNeutralEmphasizedBlackDark: Color = ColorRawTokens.colorFunctionalBlack, + val brandNeutralEmphasizedHighDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val brandNeutralEmphasizedHigherDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val brandNeutralEmphasizedHighestDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val brandNeutralEmphasizedLowDark: Color = ColorRawTokens.colorFunctionalDarkGray560, + val brandNeutralEmphasizedLowerDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val brandNeutralEmphasizedLowestDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val brandNeutralEmphasizedMediumDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val brandNeutralMutedHighestDark: Color = ColorRawTokens.colorFunctionalDarkGray160, + val brandNeutralMutedLowDark: Color = ColorRawTokens.colorFunctionalLightGray400, + val brandNeutralMutedLowerDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val brandNeutralMutedLowestDark: Color = ColorRawTokens.colorFunctionalLightGray80, + val brandNeutralMutedMediumDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val brandNeutralMutedWhiteDark: Color = ColorRawTokens.colorFunctionalWhite, + val brandPositiveDefaultDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val brandPositiveHighestDark: Color = ColorRawTokens.colorFunctionalMalachite900, + val brandPositiveLowestDark: Color = ColorRawTokens.colorFunctionalMalachite100, + val brandPrimaryDefaultDark: Color = OrangeBrandColorRawTokens.colorOrange550, + val brandPrimaryLowDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val brandWarningDefaultDark: Color = ColorRawTokens.colorFunctionalSun500, + val brandWarningHighDark: Color = ColorRawTokens.colorFunctionalSun600, + val brandWarningHighestDark: Color = ColorRawTokens.colorFunctionalSun900, + val brandWarningLowestDark: Color = ColorRawTokens.colorFunctionalSun100, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorContentSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorContentSemanticTokens.kt new file mode 100644 index 00000000..90a63b27 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorContentSemanticTokens.kt @@ -0,0 +1,102 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorContentSemanticTokens( + val contentBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, + val contentBrandPrimaryOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val contentDefaultLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentDisabledLight: Color = ColorRawTokens.colorFunctionalLightGray400, + val contentDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentMutedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, + val contentOnActionDisabledLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionNegativeLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryEnabledLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryFocusLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryHoverLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryLoadingLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryLoadingOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryPressedLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryPressedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnBrandPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnStatusAccentEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusInfoEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusInfoMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusInfoMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusNegativeEmphasizedLight: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnStatusNegativeMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusNegativeMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusPositiveEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusPositiveMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusPositiveMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusWarningEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusWarningMutedLight: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusWarningMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentStatusInfoLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val contentStatusNegativeLight: Color = ColorRawTokens.colorFunctionalScarlet600, + val contentStatusPositiveLight: Color = ColorRawTokens.colorFunctionalMalachite500, + val contentStatusWarningLight: Color = ColorRawTokens.colorFunctionalSun500, + val contentBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val contentBrandPrimaryOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val contentDefaultDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentDisabledDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val contentMutedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val contentMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val contentOnActionDisabledDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionNegativeDark: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnActionPrimaryEnabledDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryFocusDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryHoverDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryLoadingDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryLoadingOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryPressedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnActionPrimaryPressedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnBrandPrimaryDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusAccentMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusAccentMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusInfoEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusInfoMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusInfoMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusNegativeEmphasizedDark: Color = ColorRawTokens.colorFunctionalWhite, + val contentOnStatusNegativeMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusNegativeMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusPositiveEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusPositiveMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusPositiveMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusWarningEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, + val contentOnStatusWarningMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentOnStatusWarningMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val contentStatusInfoDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, + val contentStatusNegativeDark: Color = ColorRawTokens.colorFunctionalScarlet600, + val contentStatusPositiveDark: Color = ColorRawTokens.colorFunctionalMalachite500, + val contentStatusWarningDark: Color = ColorRawTokens.colorFunctionalSun500, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorDecorativeSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorDecorativeSemanticTokens.kt new file mode 100644 index 00000000..4eb09ff3 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorDecorativeSemanticTokens.kt @@ -0,0 +1,80 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens +import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens + +data class OudsColorDecorativeSemanticTokens( + val decorativeAccent1DefaultLight: Color = ColorRawTokens.colorDecorativeEmerald500, + val decorativeAccent1EmphasizedLight: Color = ColorRawTokens.colorDecorativeEmerald700, + val decorativeAccent1MutedLight: Color = ColorRawTokens.colorDecorativeEmerald200, + val decorativeAccent2DefaultLight: Color = ColorRawTokens.colorDecorativeSky400, + val decorativeAccent2EmphasizedLight: Color = ColorRawTokens.colorDecorativeSky700, + val decorativeAccent2MutedLight: Color = ColorRawTokens.colorDecorativeSky200, + val decorativeAccent3DefaultLight: Color = ColorRawTokens.colorFunctionalSun500, + val decorativeAccent3EmphasizedLight: Color = ColorRawTokens.colorDecorativeAmber500, + val decorativeAccent3MutedLight: Color = ColorRawTokens.colorFunctionalSun200, + val decorativeAccent4DefaultLight: Color = ColorRawTokens.colorDecorativeAmethyst400, + val decorativeAccent4EmphasizedLight: Color = ColorRawTokens.colorDecorativeAmethyst800, + val decorativeAccent4MutedLight: Color = ColorRawTokens.colorDecorativeAmethyst200, + val decorativeAccent5DefaultLight: Color = ColorRawTokens.colorDecorativeShockingPink200, + val decorativeAccent5EmphasizedLight: Color = ColorRawTokens.colorDecorativeShockingPink300, + val decorativeAccent5MutedLight: Color = ColorRawTokens.colorDecorativeShockingPink100, + val decorativeBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange500, + val decorativeBrandSecondaryLight: Color = ColorRawTokens.colorFunctionalBlack, + val decorativeBrandTertiaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val decorativeNeutralDefaultLight: Color = ColorRawTokens.colorFunctionalDarkGray400, + val decorativeNeutralEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val decorativeNeutralMutedLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val decorativeSkinTint100Light: Color = ColorRawTokens.colorDecorativeDeepPeach100, + val decorativeSkinTint200Light: Color = ColorRawTokens.colorDecorativeDeepPeach200, + val decorativeSkinTint300Light: Color = ColorRawTokens.colorDecorativeDeepPeach300, + val decorativeSkinTint400Light: Color = ColorRawTokens.colorDecorativeDeepPeach400, + val decorativeSkinTint500Light: Color = ColorRawTokens.colorDecorativeDeepPeach500, + val decorativeSkinTint600Light: Color = ColorRawTokens.colorDecorativeDeepPeach600, + val decorativeSkinTint700Light: Color = ColorRawTokens.colorDecorativeDeepPeach700, + val decorativeSkinTint800Light: Color = ColorRawTokens.colorDecorativeDeepPeach800, + val decorativeSkinTint900Light: Color = ColorRawTokens.colorDecorativeDeepPeach900, + val decorativeAccent1DefaultDark: Color = ColorRawTokens.colorDecorativeEmerald500, + val decorativeAccent1EmphasizedDark: Color = ColorRawTokens.colorDecorativeEmerald700, + val decorativeAccent1MutedDark: Color = ColorRawTokens.colorDecorativeEmerald200, + val decorativeAccent2DefaultDark: Color = ColorRawTokens.colorDecorativeSky400, + val decorativeAccent2EmphasizedDark: Color = ColorRawTokens.colorDecorativeSky700, + val decorativeAccent2MutedDark: Color = ColorRawTokens.colorDecorativeSky200, + val decorativeAccent3DefaultDark: Color = ColorRawTokens.colorFunctionalSun500, + val decorativeAccent3EmphasizedDark: Color = ColorRawTokens.colorDecorativeAmber500, + val decorativeAccent3MutedDark: Color = ColorRawTokens.colorFunctionalSun200, + val decorativeAccent4DefaultDark: Color = ColorRawTokens.colorDecorativeAmethyst400, + val decorativeAccent4EmphasizedDark: Color = ColorRawTokens.colorDecorativeAmethyst800, + val decorativeAccent4MutedDark: Color = ColorRawTokens.colorDecorativeAmethyst200, + val decorativeAccent5DefaultDark: Color = ColorRawTokens.colorDecorativeShockingPink200, + val decorativeAccent5EmphasizedDark: Color = ColorRawTokens.colorDecorativeShockingPink300, + val decorativeAccent5MutedDark: Color = ColorRawTokens.colorDecorativeShockingPink100, + val decorativeBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, + val decorativeBrandSecondaryDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val decorativeBrandTertiaryDark: Color = ColorRawTokens.colorFunctionalDarkGray880, + val decorativeNeutralDefaultDark: Color = ColorRawTokens.colorFunctionalLightGray560, + val decorativeNeutralEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, + val decorativeNeutralMutedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val decorativeSkinTint100Dark: Color = ColorRawTokens.colorDecorativeDeepPeach100, + val decorativeSkinTint200Dark: Color = ColorRawTokens.colorDecorativeDeepPeach200, + val decorativeSkinTint300Dark: Color = ColorRawTokens.colorDecorativeDeepPeach300, + val decorativeSkinTint400Dark: Color = ColorRawTokens.colorDecorativeDeepPeach400, + val decorativeSkinTint500Dark: Color = ColorRawTokens.colorDecorativeDeepPeach500, + val decorativeSkinTint600Dark: Color = ColorRawTokens.colorDecorativeDeepPeach600, + val decorativeSkinTint700Dark: Color = ColorRawTokens.colorDecorativeDeepPeach700, + val decorativeSkinTint800Dark: Color = ColorRawTokens.colorDecorativeDeepPeach800, + val decorativeSkinTint900Dark: Color = ColorRawTokens.colorDecorativeDeepPeach900 +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorElevationSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorElevationSemanticTokens.kt new file mode 100644 index 00000000..9ea03981 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorElevationSemanticTokens.kt @@ -0,0 +1,45 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens + +data class OudsColorElevationSemanticTokens( + val elevationDragLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val elevationDragOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationDragOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val elevationModalLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationOverlayDefaultLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationOverlayDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationOverlayDefaultOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationOverlayEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationOverlayEmphasizedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val elevationOverlayEmphasizedOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationRaisedLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationRaisedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray800, + val elevationRaisedOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalWhite, + val elevationDragDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationDragOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationDragOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationModalDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationOverlayDefaultDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val elevationOverlayDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationOverlayDefaultOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray640, + val elevationOverlayEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationOverlayEmphasizedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, + val elevationOverlayEmphasizedOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray480, + val elevationRaisedDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val elevationRaisedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray560, + val elevationRaisedOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray720, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGlobalSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGlobalSemanticTokens.kt new file mode 100644 index 00000000..c51789a3 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGlobalSemanticTokens.kt @@ -0,0 +1,21 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens + +data class OudsColorGlobalSemanticTokens( + val transparentDefaultLight: Color = ColorRawTokens.colorTransparentBlack0, + val transparentDefaultDark: Color = ColorRawTokens.colorTransparentBlack0, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGradientSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGradientSemanticTokens.kt new file mode 100644 index 00000000..53354eb4 --- /dev/null +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorGradientSemanticTokens.kt @@ -0,0 +1,27 @@ +/* + * Software Name: OUDS Android + * SPDX-FileCopyrightText: Copyright (c) Orange SA + * SPDX-License-Identifier: MIT + * + * This software is distributed under the MIT license, + * the text of which is available at https://opensource.org/license/MIT/ + * or see the "LICENSE" file for more details. + * + * Software description: Android library of reusable graphical components + */ + +package com.orange.ouds.theme.tokens.semantic + +import androidx.compose.ui.graphics.Color +import com.orange.ouds.tokens.global.raw.ColorRawTokens + +data class OudsColorGradientSemanticTokens( + val gradientSkeletonMiddleLight: Color = ColorRawTokens.colorFunctionalLightGray160, + val gradientSkeletonMiddleOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, + val gradientSkeletonStartEndLight: Color = ColorRawTokens.colorFunctionalLightGray80, + val gradientSkeletonStartEndOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, + val gradientSkeletonMiddleDark: Color = ColorRawTokens.colorFunctionalDarkGray720, + val gradientSkeletonMiddleOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray560, + val gradientSkeletonStartEndDark: Color = ColorRawTokens.colorFunctionalDarkGray800, + val gradientSkeletonStartEndOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, +) \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt index f7d776b2..95c1d790 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/semantic/OudsColorSemanticTokens.kt @@ -12,453 +12,15 @@ package com.orange.ouds.theme.tokens.semantic -import androidx.compose.ui.graphics.Color -import com.orange.ouds.tokens.global.raw.ColorRawTokens -import com.orange.ouds.tokens.global.raw.OrangeBrandColorRawTokens - data class OudsColorSemanticTokens( - val globalColorTokens: OudsGlobalColorSemanticTokens = OudsGlobalColorSemanticTokens(), - val actionColorTokens: OudsActionColorSemanticTokens = OudsActionColorSemanticTokens(), - val alwaysColorTokens: OudsAlwaysColorSemanticTokens = OudsAlwaysColorSemanticTokens(), - val backgroundColorTokens: OudsBgColorSemanticTokens = OudsBgColorSemanticTokens(), - val borderColorTokens: OudsBorderColorSemanticTokens = OudsBorderColorSemanticTokens(), - val brandColorTokens: OudsBrandColorSemanticTokens = OudsBrandColorSemanticTokens(), - val contentColorTokens: OudsContentColorSemanticTokens = OudsContentColorSemanticTokens(), - val elevationColorTokens: OudsElevationColorSemanticTokens = OudsElevationColorSemanticTokens(), - val gradientColorTokens: OudsGradientColorSemanticTokens = OudsGradientColorSemanticTokens(), - val decorativeColorTokens: OudsDecorativeColorSemanticTokens = OudsDecorativeColorSemanticTokens(), -) - -data class OudsGlobalColorSemanticTokens( - val transparentDefaultLight: Color = ColorRawTokens.colorTransparentBlack0, - val transparentDefaultDark: Color = ColorRawTokens.colorTransparentBlack0, -) - -data class OudsActionColorSemanticTokens( - val actionDisabledLight: Color = ColorRawTokens.colorFunctionalLightGray400, - val actionDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val actionNegativeEnabledLight: Color = ColorRawTokens.colorFunctionalScarlet600, - val actionNegativeFocusLight: Color = ColorRawTokens.colorFunctionalScarlet700, - val actionNegativeHoverLight: Color = ColorRawTokens.colorFunctionalScarlet700, - val actionNegativeLoadingLight: Color = ColorRawTokens.colorFunctionalScarlet800, - val actionNegativePressedLight: Color = ColorRawTokens.colorFunctionalScarlet800, - val actionPrimaryEnabledLight: Color = ColorRawTokens.colorFunctionalBlack, - val actionPrimaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionPrimaryFocusLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val actionPrimaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, - val actionPrimaryHoverLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val actionPrimaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, - val actionPrimaryLoadingLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val actionPrimaryLoadingOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionPrimaryPressedLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val actionPrimaryPressedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionSecondaryEnabledLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val actionSecondaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, - val actionSecondaryFocusLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionSecondaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryHoverLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionSecondaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryLoadingLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionSecondaryLoadingOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryPressedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionSecondaryPressedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSelectedLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val actionSelectedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionVisitedLight: Color = ColorRawTokens.colorDecorativeAmethyst600, - val actionVisitedOnBgEmphasizedLight: Color = ColorRawTokens.colorDecorativeAmethyst400, - val actionDisabledDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val actionDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val actionNegativeEnabledDark: Color = ColorRawTokens.colorFunctionalScarlet600, - val actionNegativeFocusDark: Color = ColorRawTokens.colorFunctionalScarlet700, - val actionNegativeHoverDark: Color = ColorRawTokens.colorFunctionalScarlet700, - val actionNegativeLoadingDark: Color = ColorRawTokens.colorFunctionalScarlet800, - val actionNegativePressedDark: Color = ColorRawTokens.colorFunctionalScarlet800, - val actionPrimaryEnabledDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionPrimaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val actionPrimaryFocusDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val actionPrimaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val actionPrimaryHoverDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val actionPrimaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val actionPrimaryLoadingDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionPrimaryLoadingOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionPrimaryPressedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionPrimaryPressedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionSecondaryEnabledDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val actionSecondaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val actionSecondaryFocusDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryHoverDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryLoadingDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryLoadingOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryPressedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSecondaryPressedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val actionSelectedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionSelectedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val actionVisitedDark: Color = ColorRawTokens.colorDecorativeAmethyst400, - val actionVisitedOnBgEmphasizedDark: Color = ColorRawTokens.colorDecorativeAmethyst400, -) - -data class OudsAlwaysColorSemanticTokens( - val alwaysAccentLight: Color = ColorRawTokens.colorFunctionalSun500, - val alwaysBlackLight: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysInfoLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val alwaysNegativeLight: Color = ColorRawTokens.colorFunctionalScarlet600, - val alwaysOnAccentLight: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysOnBlackLight: Color = ColorRawTokens.colorFunctionalWhite, - val alwaysOnInfoLight: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysOnNegativeLight: Color = ColorRawTokens.colorFunctionalWhite, - val alwaysOnPositiveLight: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysOnWarningLight: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysOnWhiteLight: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysPositiveLight: Color = ColorRawTokens.colorFunctionalMalachite500, - val alwaysWarningLight: Color = ColorRawTokens.colorFunctionalSun500, - val alwaysWhiteLight: Color = ColorRawTokens.colorFunctionalWhite, - val alwaysAccentDark: Color = ColorRawTokens.colorFunctionalSun500, - val alwaysBlackDark: Color = ColorRawTokens.colorFunctionalBlack, - val alwaysInfoDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val alwaysNegativeDark: Color = ColorRawTokens.colorFunctionalScarlet600, - val alwaysOnAccentDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val alwaysOnBlackDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val alwaysOnInfoDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val alwaysOnNegativeDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val alwaysOnPositiveDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val alwaysOnWarningDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val alwaysOnWhiteDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val alwaysPositiveDark: Color = ColorRawTokens.colorFunctionalMalachite500, - val alwaysWarningDark: Color = ColorRawTokens.colorFunctionalSun500, - val alwaysWhiteDark: Color = ColorRawTokens.colorFunctionalWhite, -) - -data class OudsBgColorSemanticTokens( - val bgBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val bgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray880, - val bgPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, - val bgSecondaryLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val bgStatusAccentEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun500, - val bgStatusAccentMutedLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, - val bgStatusAccentMutedOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorWarmGray900, - val bgStatusInfoEmphasizedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val bgStatusInfoMutedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue100, - val bgStatusInfoMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDodgerBlue900, - val bgStatusNegativeEmphasizedLight: Color = ColorRawTokens.colorFunctionalScarlet600, - val bgStatusNegativeMutedLight: Color = ColorRawTokens.colorFunctionalScarlet100, - val bgStatusNegativeMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalScarlet900, - val bgStatusNeutralLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val bgStatusNeutralOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, - val bgStatusPositiveEmphasizedLight: Color = ColorRawTokens.colorFunctionalMalachite500, - val bgStatusPositiveMutedLight: Color = ColorRawTokens.colorFunctionalMalachite100, - val bgStatusPositiveMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalMalachite900, - val bgStatusWarningEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun500, - val bgStatusWarningMutedLight: Color = ColorRawTokens.colorFunctionalSun100, - val bgStatusWarningMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalSun900, - val bgTertiaryLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, - val bgBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val bgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val bgPrimaryDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val bgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray800, - val bgStatusAccentEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun500, - val bgStatusAccentMutedDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, - val bgStatusAccentMutedOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, - val bgStatusInfoEmphasizedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val bgStatusInfoMutedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, - val bgStatusInfoMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, - val bgStatusNegativeEmphasizedDark: Color = ColorRawTokens.colorFunctionalScarlet600, - val bgStatusNegativeMutedDark: Color = ColorRawTokens.colorFunctionalScarlet900, - val bgStatusNegativeMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalScarlet900, - val bgStatusNeutralDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val bgStatusNeutralOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val bgStatusPositiveEmphasizedDark: Color = ColorRawTokens.colorFunctionalMalachite500, - val bgStatusPositiveMutedDark: Color = ColorRawTokens.colorFunctionalMalachite900, - val bgStatusPositiveMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalMalachite900, - val bgStatusWarningEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun500, - val bgStatusWarningMutedDark: Color = ColorRawTokens.colorFunctionalSun900, - val bgStatusWarningMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalSun900, - val bgTertiaryDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, -) - -data class OudsBorderColorSemanticTokens( - val borderBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val borderBrandPrimaryOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val borderDefaultLight: Color = ColorRawTokens.colorFunctionalLightGray400, - val borderDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val borderEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val borderEmphasizedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val borderFocusLight: Color = ColorRawTokens.colorFunctionalBlack, - val borderFocusInsetLight: Color = ColorRawTokens.colorFunctionalWhite, - val borderFocusInsetOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray880, - val borderFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val borderOnBrandPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, - val borderBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val borderBrandPrimaryOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val borderDefaultDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val borderDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val borderEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val borderEmphasizedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val borderFocusDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val borderFocusInsetDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val borderFocusInsetOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val borderFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val borderOnBrandPrimaryDark: Color = ColorRawTokens.colorFunctionalBlack, -) - -data class OudsBrandColorSemanticTokens( - val brandAccentDefaultLight: Color = ColorRawTokens.colorFunctionalSun500, - val brandAccentHighLight: Color = ColorRawTokens.colorFunctionalSun600, - val brandAccentHighestLight: Color = OrangeBrandColorRawTokens.colorWarmGray900, - val brandAccentLowestLight: Color = OrangeBrandColorRawTokens.colorWarmGray100, - val brandInfoDefaultLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val brandInfoHighestLight: Color = ColorRawTokens.colorFunctionalDodgerBlue900, - val brandInfoLowestLight: Color = ColorRawTokens.colorFunctionalDodgerBlue100, - val brandNegativeDefaultLight: Color = ColorRawTokens.colorFunctionalScarlet600, - val brandNegativeHighLight: Color = ColorRawTokens.colorFunctionalScarlet700, - val brandNegativeHigherLight: Color = ColorRawTokens.colorFunctionalScarlet800, - val brandNegativeHighestLight: Color = ColorRawTokens.colorFunctionalScarlet900, - val brandNegativeLowestLight: Color = ColorRawTokens.colorFunctionalScarlet100, - val brandNeutralEmphasizedBlackLight: Color = ColorRawTokens.colorFunctionalBlack, - val brandNeutralEmphasizedHighLight: Color = ColorRawTokens.colorFunctionalDarkGray720, - val brandNeutralEmphasizedHigherLight: Color = ColorRawTokens.colorFunctionalDarkGray800, - val brandNeutralEmphasizedHighestLight: Color = ColorRawTokens.colorFunctionalDarkGray880, - val brandNeutralEmphasizedLowLight: Color = ColorRawTokens.colorFunctionalDarkGray560, - val brandNeutralEmphasizedLowerLight: Color = ColorRawTokens.colorFunctionalDarkGray480, - val brandNeutralEmphasizedLowestLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val brandNeutralEmphasizedMediumLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val brandNeutralMutedHighestLight: Color = ColorRawTokens.colorFunctionalDarkGray160, - val brandNeutralMutedLowLight: Color = ColorRawTokens.colorFunctionalLightGray400, - val brandNeutralMutedLowerLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val brandNeutralMutedLowestLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val brandNeutralMutedMediumLight: Color = ColorRawTokens.colorFunctionalLightGray560, - val brandNeutralMutedWhiteLight: Color = ColorRawTokens.colorFunctionalWhite, - val brandPositiveDefaultLight: Color = ColorRawTokens.colorFunctionalMalachite500, - val brandPositiveHighestLight: Color = ColorRawTokens.colorFunctionalMalachite900, - val brandPositiveLowestLight: Color = ColorRawTokens.colorFunctionalMalachite100, - val brandPrimaryDefaultLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val brandPrimaryLowLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val brandWarningDefaultLight: Color = ColorRawTokens.colorFunctionalSun500, - val brandWarningHighLight: Color = ColorRawTokens.colorFunctionalSun600, - val brandWarningHighestLight: Color = ColorRawTokens.colorFunctionalSun900, - val brandWarningLowestLight: Color = ColorRawTokens.colorFunctionalSun100, - val brandAccentDefaultDark: Color = ColorRawTokens.colorFunctionalSun500, - val brandAccentHighDark: Color = ColorRawTokens.colorFunctionalSun600, - val brandAccentHighestDark: Color = OrangeBrandColorRawTokens.colorWarmGray900, - val brandAccentLowestDark: Color = OrangeBrandColorRawTokens.colorWarmGray100, - val brandInfoDefaultDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val brandInfoHighestDark: Color = ColorRawTokens.colorFunctionalDodgerBlue900, - val brandInfoLowestDark: Color = ColorRawTokens.colorFunctionalDodgerBlue100, - val brandNegativeDefaultDark: Color = ColorRawTokens.colorFunctionalScarlet600, - val brandNegativeHighDark: Color = ColorRawTokens.colorFunctionalScarlet700, - val brandNegativeHigherDark: Color = ColorRawTokens.colorFunctionalScarlet800, - val brandNegativeHighestDark: Color = ColorRawTokens.colorFunctionalScarlet900, - val brandNegativeLowestDark: Color = ColorRawTokens.colorFunctionalScarlet100, - val brandNeutralEmphasizedBlackDark: Color = ColorRawTokens.colorFunctionalBlack, - val brandNeutralEmphasizedHighDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val brandNeutralEmphasizedHigherDark: Color = ColorRawTokens.colorFunctionalDarkGray800, - val brandNeutralEmphasizedHighestDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val brandNeutralEmphasizedLowDark: Color = ColorRawTokens.colorFunctionalDarkGray560, - val brandNeutralEmphasizedLowerDark: Color = ColorRawTokens.colorFunctionalDarkGray480, - val brandNeutralEmphasizedLowestDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val brandNeutralEmphasizedMediumDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val brandNeutralMutedHighestDark: Color = ColorRawTokens.colorFunctionalDarkGray160, - val brandNeutralMutedLowDark: Color = ColorRawTokens.colorFunctionalLightGray400, - val brandNeutralMutedLowerDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val brandNeutralMutedLowestDark: Color = ColorRawTokens.colorFunctionalLightGray80, - val brandNeutralMutedMediumDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val brandNeutralMutedWhiteDark: Color = ColorRawTokens.colorFunctionalWhite, - val brandPositiveDefaultDark: Color = ColorRawTokens.colorFunctionalMalachite500, - val brandPositiveHighestDark: Color = ColorRawTokens.colorFunctionalMalachite900, - val brandPositiveLowestDark: Color = ColorRawTokens.colorFunctionalMalachite100, - val brandPrimaryDefaultDark: Color = OrangeBrandColorRawTokens.colorOrange550, - val brandPrimaryLowDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val brandWarningDefaultDark: Color = ColorRawTokens.colorFunctionalSun500, - val brandWarningHighDark: Color = ColorRawTokens.colorFunctionalSun600, - val brandWarningHighestDark: Color = ColorRawTokens.colorFunctionalSun900, - val brandWarningLowestDark: Color = ColorRawTokens.colorFunctionalSun100, -) - -data class OudsContentColorSemanticTokens( - val contentBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange550, - val contentBrandPrimaryOnBgEmphasizedLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val contentDefaultLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentDisabledLight: Color = ColorRawTokens.colorFunctionalLightGray400, - val contentDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val contentMutedLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val contentMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray560, - val contentOnActionDisabledLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionDisabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionNegativeLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryEnabledLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryEnabledOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryFocusLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryFocusOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryHoverLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryHoverOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryLoadingLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryLoadingOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryPressedLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryPressedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnBrandPrimaryLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnStatusAccentEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusAccentMutedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusAccentMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusInfoEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusInfoMutedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusInfoMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusNegativeEmphasizedLight: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnStatusNegativeMutedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusNegativeMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusPositiveEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusPositiveMutedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusPositiveMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusWarningEmphasizedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusWarningMutedLight: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusWarningMutedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentStatusInfoLight: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val contentStatusNegativeLight: Color = ColorRawTokens.colorFunctionalScarlet600, - val contentStatusPositiveLight: Color = ColorRawTokens.colorFunctionalMalachite500, - val contentStatusWarningLight: Color = ColorRawTokens.colorFunctionalSun500, - val contentBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val contentBrandPrimaryOnBgEmphasizedDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val contentDefaultDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentDisabledDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val contentDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val contentMutedDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val contentMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val contentOnActionDisabledDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionDisabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionNegativeDark: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnActionPrimaryEnabledDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryEnabledOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryFocusDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryFocusOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryHoverDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryHoverOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryLoadingDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryLoadingOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryPressedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnActionPrimaryPressedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnBrandPrimaryDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusAccentEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusAccentMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusAccentMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusInfoEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusInfoMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusInfoMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusNegativeEmphasizedDark: Color = ColorRawTokens.colorFunctionalWhite, - val contentOnStatusNegativeMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusNegativeMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusPositiveEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusPositiveMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusPositiveMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusWarningEmphasizedDark: Color = ColorRawTokens.colorFunctionalBlack, - val contentOnStatusWarningMutedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentOnStatusWarningMutedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val contentStatusInfoDark: Color = ColorRawTokens.colorFunctionalDodgerBlue500, - val contentStatusNegativeDark: Color = ColorRawTokens.colorFunctionalScarlet600, - val contentStatusPositiveDark: Color = ColorRawTokens.colorFunctionalMalachite500, - val contentStatusWarningDark: Color = ColorRawTokens.colorFunctionalSun500, -) - -data class OudsElevationColorSemanticTokens( - val elevationDragLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val elevationDragOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, - val elevationDragOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val elevationModalLight: Color = ColorRawTokens.colorFunctionalWhite, - val elevationOverlayDefaultLight: Color = ColorRawTokens.colorFunctionalWhite, - val elevationOverlayDefaultOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, - val elevationOverlayDefaultOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalWhite, - val elevationOverlayEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val elevationOverlayEmphasizedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val elevationOverlayEmphasizedOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val elevationRaisedLight: Color = ColorRawTokens.colorFunctionalWhite, - val elevationRaisedOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray800, - val elevationRaisedOnBgSecondaryLight: Color = ColorRawTokens.colorFunctionalWhite, - val elevationDragDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val elevationDragOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, - val elevationDragOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val elevationModalDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val elevationOverlayDefaultDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val elevationOverlayDefaultOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, - val elevationOverlayDefaultOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray640, - val elevationOverlayEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray480, - val elevationOverlayEmphasizedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray400, - val elevationOverlayEmphasizedOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray480, - val elevationRaisedDark: Color = ColorRawTokens.colorFunctionalDarkGray800, - val elevationRaisedOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray560, - val elevationRaisedOnBgSecondaryDark: Color = ColorRawTokens.colorFunctionalDarkGray720, -) - -data class OudsGradientColorSemanticTokens( - val gradientSkeletonMiddleLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val gradientSkeletonMiddleOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val gradientSkeletonStartEndLight: Color = ColorRawTokens.colorFunctionalLightGray80, - val gradientSkeletonStartEndOnBgEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray720, - val gradientSkeletonMiddleDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val gradientSkeletonMiddleOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray560, - val gradientSkeletonStartEndDark: Color = ColorRawTokens.colorFunctionalDarkGray800, - val gradientSkeletonStartEndOnBgEmphasizedDark: Color = ColorRawTokens.colorFunctionalDarkGray640, -) - -data class OudsDecorativeColorSemanticTokens( - val decorativeAccent1DefaultLight: Color = ColorRawTokens.colorDecorativeEmerald500, - val decorativeAccent1EmphasizedLight: Color = ColorRawTokens.colorDecorativeEmerald700, - val decorativeAccent1MutedLight: Color = ColorRawTokens.colorDecorativeEmerald200, - val decorativeAccent2DefaultLight: Color = ColorRawTokens.colorDecorativeSky400, - val decorativeAccent2EmphasizedLight: Color = ColorRawTokens.colorDecorativeSky700, - val decorativeAccent2MutedLight: Color = ColorRawTokens.colorDecorativeSky200, - val decorativeAccent3DefaultLight: Color = ColorRawTokens.colorFunctionalSun500, - val decorativeAccent3EmphasizedLight: Color = ColorRawTokens.colorDecorativeAmber500, - val decorativeAccent3MutedLight: Color = ColorRawTokens.colorFunctionalSun200, - val decorativeAccent4DefaultLight: Color = ColorRawTokens.colorDecorativeAmethyst400, - val decorativeAccent4EmphasizedLight: Color = ColorRawTokens.colorDecorativeAmethyst800, - val decorativeAccent4MutedLight: Color = ColorRawTokens.colorDecorativeAmethyst200, - val decorativeAccent5DefaultLight: Color = ColorRawTokens.colorDecorativeShockingPink200, - val decorativeAccent5EmphasizedLight: Color = ColorRawTokens.colorDecorativeShockingPink300, - val decorativeAccent5MutedLight: Color = ColorRawTokens.colorDecorativeShockingPink100, - val decorativeBrandPrimaryLight: Color = OrangeBrandColorRawTokens.colorOrange500, - val decorativeBrandSecondaryLight: Color = ColorRawTokens.colorFunctionalBlack, - val decorativeBrandTertiaryLight: Color = ColorRawTokens.colorFunctionalWhite, - val decorativeNeutralDefaultLight: Color = ColorRawTokens.colorFunctionalDarkGray400, - val decorativeNeutralEmphasizedLight: Color = ColorRawTokens.colorFunctionalDarkGray640, - val decorativeNeutralMutedLight: Color = ColorRawTokens.colorFunctionalLightGray160, - val decorativeSkinTint100Light: Color = ColorRawTokens.colorDecorativeDeepPeach100, - val decorativeSkinTint200Light: Color = ColorRawTokens.colorDecorativeDeepPeach200, - val decorativeSkinTint300Light: Color = ColorRawTokens.colorDecorativeDeepPeach300, - val decorativeSkinTint400Light: Color = ColorRawTokens.colorDecorativeDeepPeach400, - val decorativeSkinTint500Light: Color = ColorRawTokens.colorDecorativeDeepPeach500, - val decorativeSkinTint600Light: Color = ColorRawTokens.colorDecorativeDeepPeach600, - val decorativeSkinTint700Light: Color = ColorRawTokens.colorDecorativeDeepPeach700, - val decorativeSkinTint800Light: Color = ColorRawTokens.colorDecorativeDeepPeach800, - val decorativeSkinTint900Light: Color = ColorRawTokens.colorDecorativeDeepPeach900, - val decorativeAccent1DefaultDark: Color = ColorRawTokens.colorDecorativeEmerald500, - val decorativeAccent1EmphasizedDark: Color = ColorRawTokens.colorDecorativeEmerald700, - val decorativeAccent1MutedDark: Color = ColorRawTokens.colorDecorativeEmerald200, - val decorativeAccent2DefaultDark: Color = ColorRawTokens.colorDecorativeSky400, - val decorativeAccent2EmphasizedDark: Color = ColorRawTokens.colorDecorativeSky700, - val decorativeAccent2MutedDark: Color = ColorRawTokens.colorDecorativeSky200, - val decorativeAccent3DefaultDark: Color = ColorRawTokens.colorFunctionalSun500, - val decorativeAccent3EmphasizedDark: Color = ColorRawTokens.colorDecorativeAmber500, - val decorativeAccent3MutedDark: Color = ColorRawTokens.colorFunctionalSun200, - val decorativeAccent4DefaultDark: Color = ColorRawTokens.colorDecorativeAmethyst400, - val decorativeAccent4EmphasizedDark: Color = ColorRawTokens.colorDecorativeAmethyst800, - val decorativeAccent4MutedDark: Color = ColorRawTokens.colorDecorativeAmethyst200, - val decorativeAccent5DefaultDark: Color = ColorRawTokens.colorDecorativeShockingPink200, - val decorativeAccent5EmphasizedDark: Color = ColorRawTokens.colorDecorativeShockingPink300, - val decorativeAccent5MutedDark: Color = ColorRawTokens.colorDecorativeShockingPink100, - val decorativeBrandPrimaryDark: Color = OrangeBrandColorRawTokens.colorOrange500, - val decorativeBrandSecondaryDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val decorativeBrandTertiaryDark: Color = ColorRawTokens.colorFunctionalDarkGray880, - val decorativeNeutralDefaultDark: Color = ColorRawTokens.colorFunctionalLightGray560, - val decorativeNeutralEmphasizedDark: Color = ColorRawTokens.colorFunctionalLightGray160, - val decorativeNeutralMutedDark: Color = ColorRawTokens.colorFunctionalDarkGray720, - val decorativeSkinTint100Dark: Color = ColorRawTokens.colorDecorativeDeepPeach100, - val decorativeSkinTint200Dark: Color = ColorRawTokens.colorDecorativeDeepPeach200, - val decorativeSkinTint300Dark: Color = ColorRawTokens.colorDecorativeDeepPeach300, - val decorativeSkinTint400Dark: Color = ColorRawTokens.colorDecorativeDeepPeach400, - val decorativeSkinTint500Dark: Color = ColorRawTokens.colorDecorativeDeepPeach500, - val decorativeSkinTint600Dark: Color = ColorRawTokens.colorDecorativeDeepPeach600, - val decorativeSkinTint700Dark: Color = ColorRawTokens.colorDecorativeDeepPeach700, - val decorativeSkinTint800Dark: Color = ColorRawTokens.colorDecorativeDeepPeach800, - val decorativeSkinTint900Dark: Color = ColorRawTokens.colorDecorativeDeepPeach900 + val globalColorTokens: OudsColorGlobalSemanticTokens = OudsColorGlobalSemanticTokens(), + val actionColorTokens: OudsColorActionSemanticTokens = OudsColorActionSemanticTokens(), + val alwaysColorTokens: OudsColorAlwaysSemanticTokens = OudsColorAlwaysSemanticTokens(), + val backgroundColorTokens: OudsColorBgSemanticTokens = OudsColorBgSemanticTokens(), + val borderColorTokens: OudsColorBorderSemanticTokens = OudsColorBorderSemanticTokens(), + val brandColorTokens: OudsColorBrandSemanticTokens = OudsColorBrandSemanticTokens(), + val contentColorTokens: OudsColorContentSemanticTokens = OudsColorContentSemanticTokens(), + val elevationColorTokens: OudsColorElevationSemanticTokens = OudsColorElevationSemanticTokens(), + val gradientColorTokens: OudsColorGradientSemanticTokens = OudsColorGradientSemanticTokens(), + val decorativeColorTokens: OudsColorDecorativeSemanticTokens = OudsColorDecorativeSemanticTokens(), ) \ No newline at end of file diff --git a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt index 4cfb6a20..8935e3e3 100644 --- a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt +++ b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt @@ -18,7 +18,7 @@ import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens -import com.orange.ouds.theme.tokens.semantic.OudsBgColorSemanticTokens +import com.orange.ouds.theme.tokens.semantic.OudsColorBgSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens import kotlinx.parcelize.Parcelize @@ -30,7 +30,7 @@ class OrangeCountryTheme : OrangeTheme() { override val colorTokens: OudsColorSemanticTokens get() = OudsColorSemanticTokens( - backgroundColorTokens = OudsBgColorSemanticTokens( + backgroundColorTokens = OudsColorBgSemanticTokens( bgBrandPrimaryLight = Color(0xFF34D349), bgBrandPrimaryDark = Color(0xFF069D1A) ) diff --git a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt index d03e7f55..e7161a33 100644 --- a/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt +++ b/theme-white-label/src/main/java/com/orange/ouds/theme/whitelabel/tokens/WhiteLabelSemanticColorTokens.kt @@ -13,12 +13,12 @@ package com.orange.ouds.theme.whitelabel.tokens import androidx.compose.ui.graphics.Color -import com.orange.ouds.theme.tokens.semantic.OudsBgColorSemanticTokens +import com.orange.ouds.theme.tokens.semantic.OudsColorBgSemanticTokens import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens val whiteLabelSemanticColorTokens = with(WhiteLabelRawColorTokens) { OudsColorSemanticTokens( - backgroundColorTokens = OudsBgColorSemanticTokens( + backgroundColorTokens = OudsColorBgSemanticTokens( bgBrandPrimaryLight = Color(0xFF34D349), bgBrandPrimaryDark = Color(0xFF069D1A), bgSecondaryLight = secondary40, From 5fa3502600f73cc1f6c985f48306ffc2826877df Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 24 Oct 2024 11:35:56 +0200 Subject: [PATCH 30/33] Fix colors to match demo app design --- .../com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt | 2 +- .../com/orange/ouds/app/ui/utilities/composable/LargeCard.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt index 743e55f3..27e2b26d 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -75,7 +75,7 @@ fun BorderIllustrationBox( OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = width, color = borderColor, shape = shape) OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = width, color = borderColor, shape = shape) } - IllustrationBox(modifier = modifier, backgroundColor = Color.Transparent) + IllustrationBox(modifier = modifier, backgroundColor = OudsColorKeyToken.BgSecondary.value) } @Composable diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt index 65f97861..54a1f521 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt @@ -26,6 +26,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextOverflow @@ -49,7 +50,7 @@ fun LargeCard( onClick: () -> Unit, modifier: Modifier = Modifier, ) { - Card(modifier = modifier, elevation = cardElevation(defaultElevation = OudsElevationKeyToken.Raised.value), onClick = onClick) { + Card(modifier = modifier, shape = RectangleShape, elevation = cardElevation(defaultElevation = OudsElevationKeyToken.Raised.value), onClick = onClick) { Column(modifier = Modifier.background(OudsColorKeyToken.ElevationRaised.value)) { Image( painter = painterResource(imageRes), From 4d1a863910e4ab80c5317c33c4517c8f142b6d7c Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Thu, 24 Oct 2024 11:49:24 +0200 Subject: [PATCH 31/33] Update paparazzi snapshots --- ...est_takeOudsButtonDarkThemeSnapshot[0].png | Bin 2048 -> 2031 bytes ...est_takeOudsButtonDarkThemeSnapshot[1].png | Bin 2229 -> 1909 bytes ...st_takeOudsButtonLightThemeSnapshot[1].png | Bin 2053 -> 1804 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/core/src/test/snapshots/images/com.orange.ouds.core.component.button_OudsButtonTest_takeOudsButtonDarkThemeSnapshot[0].png b/core/src/test/snapshots/images/com.orange.ouds.core.component.button_OudsButtonTest_takeOudsButtonDarkThemeSnapshot[0].png index 92eca943496ea19297e99feaf2c10a909b906331..7074e427ce2141ee0f79f3c3fa3da699769e2010 100644 GIT binary patch literal 2031 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 diff --git a/core/src/test/snapshots/images/com.orange.ouds.core.component.button_OudsButtonTest_takeOudsButtonDarkThemeSnapshot[1].png b/core/src/test/snapshots/images/com.orange.ouds.core.component.button_OudsButtonTest_takeOudsButtonDarkThemeSnapshot[1].png index 117bf340c34d91cd0337700d2fa4a8517c00e840..bbaf69083fe6d24e4e58d3c4df8d33b86f518d5c 100644 GIT binary patch literal 1909 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 diff --git a/core/src/test/snapshots/images/com.orange.ouds.core.component.button_OudsButtonTest_takeOudsButtonLightThemeSnapshot[1].png b/core/src/test/snapshots/images/com.orange.ouds.core.component.button_OudsButtonTest_takeOudsButtonLightThemeSnapshot[1].png index df7762eec4911e76139971d13e0b7fb3aa0393cd..32ea3bd86c5e66102d43039be074128e495cdfac 100644 GIT binary patch literal 1804 zcmd5-X;cze6n2hH=8{$}<;ujAqPdhM>WDZgWJZIyWFrPvu1SHQxRpB7Oq!SwC(W%~ zFeNi#Owkm@Ml%_lWJGg|(ZaRNeaD5tPW_rQ^SdAK-E;2w?m73n_j~V4K_Ojts_3aG zC@Ac7I|=iY$2s}Ay<@xlw)O@uDkyC4bb}rDj=@ffRlPb-?`t9QWFeZ*5ABd(U^7iE z-17tW_ubOmE4g$i5!=2l{F7in)DL4a-N3o{$X{>k=clbGI`dzu!i}GQqm{ku7gV6L znloMb$d3O^To%`n%M`;aJp!L8z_+WRzLsiSf z02V~4;0Dn4GJy~+v-WRHz{IM5uL{Q(@SiG!NQ&_GqMo^hg~+asjt)W0X;->Fh?K{T zo_-;lvd)LbqjhQTKB8RcV=i?4>gwvc9=5-`XWQ!Ps$k`aFyF~PR^1XbcMU`WHs~UV zmgC-9u~04h-EdYBf4-2PvKd4NIL37~#IIF5I5R`_g2Tntj!R@Kz)i;8zANNU-PMrnnNHGBhh0x zM3`rB%Hg0MbC#&@VwPY!J<#B%JJ@;P4GrKVak=|0kuYgO0Q%Z72ak2GHG=uK8-9YC_AG5NZf! zYfi>;@DRKo5{Z<|1Xca`EwwRGmJm%QYbRSW=BB5nEL*#=cYHu|ky`d1lRt2gbT-$7 zYFeIG7cquho*xt1UCWN)l{;QDoei&F%BgauGmH2sVTAq(oz;=HOrlpJ?CbTJx6K!? zBNDsY{WvvUg^}xq3^%rC(osQOYFQ+RHMXa1S<;f)qI7fIzFS0_IMQch2uG%40u5CX zWt)!pFx^SrphmEa5WjRjBjU!Zm~T)<)sQ{!EJwqbe^88I-JDkOBcv?tv=#b@#j|##!nb8tihitM^1y^MyzZ8pj?2zxZ6*?J4lA z+IN5|B*|q3x0e~C_4I0vCIN-XKof!alk{LJr`tC(Q?jCFHbQ3D^b-9(QNRrMV@^nG z?07KEkY+zs1lkrBYC$&jqVD-Ts~Xlp_v}!SeTAU3;VRAw%N?t2+|P )#Z0Vjv~ zTRi@QV`tRqF%0X2-xa;oh_8ZJ4_G~J8vicbyo4t;83^tz!`OBYN%etYcf!3`hccH| zD9|h^xAs`XK)+6cTv(%^C+aB(ghg`4whR@f^(z5`)anOVTo$c96%97^mc5s zti4zeugM5F4cgWdv8R}4_oTPp4MA>fmSZQc^5hdCJ1umfhUFgsqn2VGx1R18VPQrT z>-XSUDBnd6ceeIq`E3rjaC3CZi~^C%@mL5QUQ8Kl@M1{Pc@0HTGUBB4w{{M$Cl|MD zGQj~&b|e?_x2Q$ztz|~|+-FuVUCvSNzEG(X`~1quD?aC5Er1INolgFr(EP4+mmqyuBiPbS5U7hmTg1k~`$< zA{R(7)^vNLy$xhyOKn{d*Xk#h%b8+LVBF))q)(myG4W-+bw%Q1W&T7dA&xCx`5Fn9^i^PiAVGjjkVSZ%Z5*BCQB*%{)^t2o^T;c4zf6vD2heP)0 zv-X=YfaUWukjhvGOPF^_K8$?jyeD(m)9SxLfB$s_3EMO(w)L7bfo-y~`O}!l)fB!| zHvam)mLu+L6kA8ib()Lc-$R+zTEHS#sbk%Fjic1F)NqBd1>a8n=(|7{HwD04~)6} zy6&RP5Re`uvx>9k`O0w=$f%{-re{EqFti8m?Gxr5F9rKlp}M;qL%Y|=X|;z6qJBVk zXGQ=czE0$WcZub^LIeD7V6pB^d)( z<5*&RCk`;D1_20ntI6S5+JW#dG!QGg4bl*1|trzQpU-?W*osROQx=NF`s^B zEYXDS>nNB0IHmc^>~(#7IB?&(Llq>g)_@u}wm{`%NU!3E%wYQ-V}WSA5FF%pklb$b zn+nyp8ZbW84#GB#+>K1K>y4<$C+5&Q&!#>&jAXTBS&NRAXeiHfFEUgr-n08jG=A?t zJ<5dJ^yll3phH}!fHrJ(0!AY}+K!uoiv$n1?nPW{M~=+kKV7gf&Z9vpXi_h%&c%qN zekew=6>ML`GG?Zd6TeGb6O2lB&5^n(E|t$5b?D7n{9F4$USX=NTJ3}GJM4<9*J&O- zwf&imvw6GJy2mgc^ag_pzU&Ml5|f3+iq|ADs?3|aq*vC8)#uR9@(h+DL@9@l0nBe$ zWj_lLIUZ>1C$vbwq51@wZ^D$08&gOAiX!@=lI1*U=zNDNX4sWAotcQ8_^&z`xICPU z0VmE4j6awFheYvrrkjeeq!lfe`P9Mq(|CZ=+5rX!5m72|sGM@{8q_dSuGB3Dy@O!r zAg6{vUg3Ve&W{Y*&8G;*_RxxnlxXI^`?1Vc`H9#OudwjhU!KU5#;)veG^G^&$Je87 zXx_Nx`cZMX)404VoHlm?u6SXSj{XEw!OmDh)yL8?w1ujXa-K%NuH6$tuL(Mun(OYL z)(Iy5p5o1rj^@a%3aFDcYsaEm5v5Ad9Zs?x2a|q}h&tiA>d>>0*2?BB>FowXij-X} z@&1|hb=Ut5?Tz+Znm>1~l1NfK%7%fd)nWozt6)NqzPHrx7gOFf%a?1-~VOI5+2pQ0+s0QJ~OvXw`o(h)P$RL%||cz zQs#EkM9S-v&}NT8?rZ3q68*+i&bDMH1zy&DHB4nlf`bLA`q3v~a<+BrhTmzg!RvaL zMZmk8xJ$C(TuDNFxH^{NghZU)fNB-I%QMdHc=i*?PHkWG$iNeMgAvO&i#Y?{TcRUh zje_cuq=#kv7=KaU# z@xXv?NgwP1ZIt1(M6iQy1pf@C|5Q3dJGLbnQKzF#!I?3;jO8)`ZVV0Ah9l^Poq6VE ztcf9>-x7*h6?-ys?(>=E_0YxAR>77L=}sbJzy=v0Oe8NFhBWv+YX@In<%kX-1#Y~T zT<>d&qV|}*;i$Bn^uP>~{jo20H#;0)vq`9yigwNpgElaiX?Z9BxU}idWZtQz_5aty dKN8Isj;a@?gxZ&79~$M| Date: Thu, 24 Oct 2024 17:12:41 +0200 Subject: [PATCH 32/33] Split color tokens keys in several enums --- .../java/com/orange/ouds/app/ui/MainScreen.kt | 4 +- .../java/com/orange/ouds/app/ui/TopBar.kt | 6 +- .../app/ui/components/ComponentsScreen.kt | 4 +- .../ui/tokens/TokenCategoryDetailScreen.kt | 6 +- .../ouds/app/ui/tokens/TokenProperty.kt | 4 +- .../ui/tokens/TokenPropertyIllustration.kt | 22 +- .../composable/DetailScreenHeader.kt | 9 +- .../app/ui/utilities/composable/LargeCard.kt | 17 +- .../app/ui/utilities/composable/Screen.kt | 4 +- .../ouds/core/component/button/OudsButton.kt | 4 +- .../orange/ouds/core/theme/OudsColorScheme.kt | 539 +++++++++++------- .../orange/ouds/core/utilities/OudsPreview.kt | 4 +- .../ouds/theme/tokens/OudsColorKeyToken.kt | 431 +++++++------- .../tokens/components/OudsButtonTokens.kt | 12 +- .../theme/orangecountry/OrangeCountryTheme.kt | 4 +- 15 files changed, 615 insertions(+), 455 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt index bcf17c36..f455b0ab 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt @@ -57,7 +57,7 @@ import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.orange.ORANGE_THEME_NAME import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.orangecountry.OrangeCountryTheme -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.whitelabel.WhiteLabelTheme @@ -155,7 +155,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U Dialog(onDismissRequest = dismissDialog) { Column( modifier = Modifier - .background(OudsColorKeyToken.BgSecondary.value) + .background(OudsColorBackgroundKeyToken.Secondary.value) .selectableGroup() ) { Text( diff --git a/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt b/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt index 54a61818..ec0a8902 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt @@ -34,7 +34,7 @@ import com.orange.ouds.app.ui.utilities.isDarkModeEnabled import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken @@ -70,7 +70,7 @@ private fun TopBar( Image( imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(id = R.string.app_common_back_a11y), - colorFilter = ColorFilter.tint(OudsColorKeyToken.ContentDefault.value) + colorFilter = ColorFilter.tint(OudsColorContentKeyToken.Default.value) ) } } @@ -78,7 +78,7 @@ private fun TopBar( title = { Text( text = title, - color = OudsColorKeyToken.ContentDefault.value, + color = OudsColorContentKeyToken.Default.value, modifier = Modifier.semantics { traversalIndex = -1f }, style = OudsTypographyKeyToken.HeadingMedium.value ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt index f1ce6e93..66c1df80 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt @@ -30,7 +30,7 @@ import com.orange.ouds.core.component.button.OudsButton import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken @@ -51,7 +51,7 @@ fun ComponentsScreen() { .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .width(OudsGridKeyToken.Margin.value) .height(OudsGridKeyToken.ColumnGap.value) - .background(OudsColorKeyToken.BgBrandPrimary.value) + .background(OudsColorBackgroundKeyToken.BrandPrimary.value) ) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index d4a18a0f..d1c27ff1 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -40,7 +40,7 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.OudsBorderStyle -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken @@ -109,7 +109,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: maxLines = 1, overflow = TextOverflow.Ellipsis, style = OudsTypographyKeyToken.BodyDefaultMedium.value, - color = OudsColorKeyToken.ContentMuted.value + color = OudsColorContentKeyToken.Muted.value ) } } else { @@ -143,7 +143,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: text = token.literalValue, maxLines = 1, overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.ContentMuted.value) + style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorContentKeyToken.Muted.value) ) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index 7641a068..a93ec1a8 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -43,7 +43,7 @@ import com.orange.ouds.foundation.extensions.orElse import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken @@ -77,7 +77,7 @@ sealed class TokenProperty( @Composable fun Illustration(elevation: Dp) { Surface(shadowElevation = elevation) { - IllustrationBox(backgroundColor = OudsColorKeyToken.BgSecondary.value) + IllustrationBox(backgroundColor = OudsColorBackgroundKeyToken.Secondary.value) } } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt index 27e2b26d..1182819c 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -40,7 +40,9 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.dashedBorder import com.orange.ouds.theme.dottedBorder -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorAlwaysKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken private val defaultIllustrationSize = 64.dp @@ -48,7 +50,7 @@ private val defaultIllustrationSize = 64.dp @Composable fun IllustrationBox( modifier: Modifier = Modifier, - backgroundColor: Color = OudsColorKeyToken.BgEmphasized.value, + backgroundColor: Color = OudsColorBackgroundKeyToken.Emphasized.value, contentAlignment: Alignment = Alignment.TopStart, content: @Composable BoxScope.() -> Unit = { } ) { @@ -68,14 +70,14 @@ fun BorderIllustrationBox( shape: Shape = RectangleShape, style: OudsBorderStyle = OudsBorderStyle.Solid ) { - val borderColor = OudsColorKeyToken.ContentDefault.value + val borderColor = OudsColorContentKeyToken.Default.value val modifier = when (style) { OudsBorderStyle.None -> Modifier OudsBorderStyle.Solid -> Modifier.border(width = width, color = borderColor, shape = shape) OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = width, color = borderColor, shape = shape) OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = width, color = borderColor, shape = shape) } - IllustrationBox(modifier = modifier, backgroundColor = OudsColorKeyToken.BgSecondary.value) + IllustrationBox(modifier = modifier, backgroundColor = OudsColorBackgroundKeyToken.Secondary.value) } @Composable @@ -95,7 +97,7 @@ fun SpaceIllustrationBox( } IllustrationBox(contentAlignment = contentAlignment) { Box( - modifier = dimensionBoxModifier.background(color = OudsColorKeyToken.AlwaysInfo.value) + modifier = dimensionBoxModifier.background(color = OudsColorAlwaysKeyToken.Info.value) ) } } @@ -114,14 +116,14 @@ fun SpacePaddingInlineWithImageIllustrationRow( Row( modifier = modifier .size(defaultIllustrationSize) - .background(color = OudsColorKeyToken.BgEmphasized.value), + .background(color = OudsColorBackgroundKeyToken.Emphasized.value), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier .fillMaxHeight() .width(width = spaceSize) - .background(color = OudsColorKeyToken.AlwaysInfo.value) + .background(color = OudsColorAlwaysKeyToken.Info.value) ) Image( modifier = imageModifier, @@ -138,7 +140,7 @@ fun GridIllustrations() { modifier = Modifier .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorKeyToken.BgEmphasized.value), + .background(OudsColorBackgroundKeyToken.Emphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), contentDescription = null ) @@ -147,7 +149,7 @@ fun GridIllustrations() { .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorKeyToken.BgEmphasized.value), + .background(OudsColorBackgroundKeyToken.Emphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_min_width), contentDescription = null ) @@ -156,7 +158,7 @@ fun GridIllustrations() { .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorKeyToken.BgEmphasized.value), + .background(OudsColorBackgroundKeyToken.Emphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_max_width), contentDescription = null ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt index 989f7915..69643c8f 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt @@ -32,9 +32,10 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun DetailScreenHeader( @@ -44,12 +45,12 @@ fun DetailScreenHeader( Column { Image( painter = painterResource(imageRes), - colorFilter = ColorFilter.tint(OudsColorKeyToken.ContentDefaultOnBgEmphasized.value), + colorFilter = ColorFilter.tint(OudsColorContentKeyToken.DefaultOnBgEmphasized.value), contentDescription = null, modifier = Modifier .fillMaxWidth() .height(186.dp) - .background(OudsColorKeyToken.BgEmphasized.value), + .background(OudsColorBackgroundKeyToken.Emphasized.value), contentScale = ContentScale.None ) @@ -68,7 +69,7 @@ private fun DetailScreenDescription( Text( modifier = modifier, text = stringResource(descriptionRes), - color = OudsColorKeyToken.ContentDefault.value, + color = OudsColorContentKeyToken.Default.value, style = OudsTypographyKeyToken.BodyDefaultLarge.value ) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt index 54a1f521..cdb7b99a 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults.cardElevation -import androidx.compose.material3.CardElevation import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -35,10 +34,12 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorElevationKeyToken +import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken -import com.orange.ouds.theme.tokens.OudsColorKeyToken -import com.orange.ouds.theme.tokens.OudsElevationKeyToken /** * Temporary large card used by the demo app @@ -51,15 +52,15 @@ fun LargeCard( modifier: Modifier = Modifier, ) { Card(modifier = modifier, shape = RectangleShape, elevation = cardElevation(defaultElevation = OudsElevationKeyToken.Raised.value), onClick = onClick) { - Column(modifier = Modifier.background(OudsColorKeyToken.ElevationRaised.value)) { + Column(modifier = Modifier.background(OudsColorElevationKeyToken.Raised.value)) { Image( painter = painterResource(imageRes), - colorFilter = ColorFilter.tint(OudsColorKeyToken.ContentDefaultOnBgEmphasized.value), + colorFilter = ColorFilter.tint(OudsColorContentKeyToken.DefaultOnBgEmphasized.value), contentDescription = null, modifier = Modifier .fillMaxWidth() - .height(184.dp) //TODO use token when available - .background(OudsColorKeyToken.BgEmphasized.value), + .height(184.dp) + .background(OudsColorBackgroundKeyToken.Emphasized.value), contentScale = ContentScale.None ) Column( @@ -67,7 +68,7 @@ fun LargeCard( ) { Text( text = title, - color = OudsColorKeyToken.ContentDefault.value, + color = OudsColorContentKeyToken.Default.value, overflow = TextOverflow.Ellipsis, maxLines = 1, style = OudsTypographyKeyToken.HeadingMedium.value diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt index de16dbcb..6e9ca0c6 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt @@ -20,14 +20,14 @@ import androidx.compose.ui.Modifier import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken @Composable fun Screen(content: @Composable () -> Unit) { Box( modifier = Modifier .fillMaxSize() - .background(OudsColorKeyToken.BgPrimary.value) + .background(OudsColorBackgroundKeyToken.Primary.value) ) { content() } diff --git a/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt b/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt index e9b20744..8d4842e3 100644 --- a/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt +++ b/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt @@ -28,7 +28,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken @Composable fun OudsButton( @@ -66,7 +66,7 @@ fun OudsButton( modifier = modifier, text = text, style = labelStyle.value, - color = OudsColorKeyToken.ContentOnActionPrimaryEnabled.value + color = OudsColorContentKeyToken.OnActionPrimaryEnabled.value ) } } diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt index 8cae4f39..f66bcdb2 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt @@ -19,7 +19,16 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.Stable import androidx.compose.ui.graphics.Color -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorActionKeyToken +import com.orange.ouds.theme.tokens.OudsColorAlwaysKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorBorderKeyToken +import com.orange.ouds.theme.tokens.OudsColorBrandKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorDecorativeKeyToken +import com.orange.ouds.theme.tokens.OudsColorElevationKeyToken +import com.orange.ouds.theme.tokens.OudsColorGlobalKeyToken +import com.orange.ouds.theme.tokens.OudsColorGradientKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens data class OudsColorScheme( @@ -721,210 +730,264 @@ val OudsColorSemanticTokens.darkColorScheme: OudsColorScheme ) @Stable -fun OudsColorScheme.fromToken(token: OudsColorKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorActionKeyToken): Color { return when (token) { - OudsColorKeyToken.TransparentDefault -> globalColors.transparentDefault - OudsColorKeyToken.ActionDisabled -> actionColors.disabled - OudsColorKeyToken.ActionDisabledOnBgEmphasized -> actionColors.disabledOnBgEmphasized - OudsColorKeyToken.ActionNegativeEnabled -> actionColors.negativeEnabled - OudsColorKeyToken.ActionNegativeFocus -> actionColors.negativeFocus - OudsColorKeyToken.ActionNegativeHover -> actionColors.negativeHover - OudsColorKeyToken.ActionNegativeLoading -> actionColors.negativeLoading - OudsColorKeyToken.ActionNegativePressed -> actionColors.negativePressed - OudsColorKeyToken.ActionPrimaryEnabled -> actionColors.primaryEnabled - OudsColorKeyToken.ActionPrimaryEnabledOnBgEmphasized -> actionColors.primaryEnabledOnBgEmphasized - OudsColorKeyToken.ActionPrimaryFocus -> actionColors.primaryFocus - OudsColorKeyToken.ActionPrimaryFocusOnBgEmphasized -> actionColors.primaryFocusOnBgEmphasized - OudsColorKeyToken.ActionPrimaryHover -> actionColors.primaryHover - OudsColorKeyToken.ActionPrimaryHoverOnBgEmphasized -> actionColors.primaryHoverOnBgEmphasized - OudsColorKeyToken.ActionPrimaryLoading -> actionColors.primaryLoading - OudsColorKeyToken.ActionPrimaryLoadingOnBgEmphasized -> actionColors.primaryLoadingOnBgEmphasized - OudsColorKeyToken.ActionPrimaryPressed -> actionColors.primaryPressed - OudsColorKeyToken.ActionPrimaryPressedOnBgEmphasized -> actionColors.primaryPressedOnBgEmphasized - OudsColorKeyToken.ActionSecondaryEnabled -> actionColors.secondaryEnabled - OudsColorKeyToken.ActionSecondaryEnabledOnBgEmphasized -> actionColors.secondaryEnabledOnBgEmphasized - OudsColorKeyToken.ActionSecondaryFocus -> actionColors.secondaryFocus - OudsColorKeyToken.ActionSecondaryFocusOnBgEmphasized -> actionColors.secondaryFocusOnBgEmphasized - OudsColorKeyToken.ActionSecondaryHover -> actionColors.secondaryHover - OudsColorKeyToken.ActionSecondaryHoverOnBgEmphasized -> actionColors.secondaryHoverOnBgEmphasized - OudsColorKeyToken.ActionSecondaryLoading -> actionColors.secondaryLoading - OudsColorKeyToken.ActionSecondaryLoadingOnBgEmphasized -> actionColors.secondaryLoadingOnBgEmphasized - OudsColorKeyToken.ActionSecondaryPressed -> actionColors.secondaryPressed - OudsColorKeyToken.ActionSecondaryPressedOnBgEmphasized -> actionColors.secondaryPressedOnBgEmphasized - OudsColorKeyToken.ActionSelected -> actionColors.selected - OudsColorKeyToken.ActionSelectedOnBgEmphasized -> actionColors.selectedOnBgEmphasized - OudsColorKeyToken.ActionVisited -> actionColors.visited - OudsColorKeyToken.ActionVisitedOnBgEmphasized -> actionColors.visitedOnBgEmphasized - OudsColorKeyToken.AlwaysAccent -> alwaysColors.accent - OudsColorKeyToken.AlwaysBlack -> alwaysColors.black - OudsColorKeyToken.AlwaysInfo -> alwaysColors.info - OudsColorKeyToken.AlwaysNegative -> alwaysColors.negative - OudsColorKeyToken.AlwaysOnAccent -> alwaysColors.onAccent - OudsColorKeyToken.AlwaysOnBlack -> alwaysColors.onBlack - OudsColorKeyToken.AlwaysOnInfo -> alwaysColors.onInfo - OudsColorKeyToken.AlwaysOnNegative -> alwaysColors.onNegative - OudsColorKeyToken.AlwaysOnPositive -> alwaysColors.onPositive - OudsColorKeyToken.AlwaysOnWarning -> alwaysColors.onWarning - OudsColorKeyToken.AlwaysOnWhite -> alwaysColors.onWhite - OudsColorKeyToken.AlwaysPositive -> alwaysColors.positive - OudsColorKeyToken.AlwaysWarning -> alwaysColors.warning - OudsColorKeyToken.AlwaysWhite -> alwaysColors.white - OudsColorKeyToken.BgBrandPrimary -> backgroundColors.brandPrimary - OudsColorKeyToken.BgEmphasized -> backgroundColors.emphasized - OudsColorKeyToken.BgPrimary -> backgroundColors.primary - OudsColorKeyToken.BgSecondary -> backgroundColors.secondary - OudsColorKeyToken.BgStatusAccentEmphasized -> backgroundColors.statusAccentEmphasized - OudsColorKeyToken.BgStatusAccentMuted -> backgroundColors.statusAccentMuted - OudsColorKeyToken.BgStatusAccentMutedOnBgEmphasized -> backgroundColors.statusAccentMutedOnBgEmphasized - OudsColorKeyToken.BgStatusInfoEmphasized -> backgroundColors.statusInfoEmphasized - OudsColorKeyToken.BgStatusInfoMuted -> backgroundColors.statusInfoMuted - OudsColorKeyToken.BgStatusInfoMutedOnBgEmphasized -> backgroundColors.statusInfoMutedOnBgEmphasized - OudsColorKeyToken.BgStatusNegativeEmphasized -> backgroundColors.statusNegativeEmphasized - OudsColorKeyToken.BgStatusNegativeMuted -> backgroundColors.statusNegativeMuted - OudsColorKeyToken.BgStatusNegativeMutedOnBgEmphasized -> backgroundColors.statusNegativeMutedOnBgEmphasized - OudsColorKeyToken.BgStatusNeutral -> backgroundColors.statusNeutral - OudsColorKeyToken.BgStatusNeutralOnBgEmphasized -> backgroundColors.statusNeutralOnBgEmphasized - OudsColorKeyToken.BgStatusPositiveEmphasized -> backgroundColors.statusPositiveEmphasized - OudsColorKeyToken.BgStatusPositiveMuted -> backgroundColors.statusPositiveMuted - OudsColorKeyToken.BgStatusPositiveMutedOnBgEmphasized -> backgroundColors.statusPositiveMutedOnBgEmphasized - OudsColorKeyToken.BgStatusWarningEmphasized -> backgroundColors.statusWarningEmphasized - OudsColorKeyToken.BgStatusWarningMuted -> backgroundColors.statusWarningMuted - OudsColorKeyToken.BgStatusWarningMutedOnBgEmphasized -> backgroundColors.statusWarningMutedOnBgEmphasized - OudsColorKeyToken.BgTertiary -> backgroundColors.tertiary - OudsColorKeyToken.BorderBrandPrimary -> borderColors.brandPrimary - OudsColorKeyToken.BorderBrandPrimaryOnBgEmphasized -> borderColors.brandPrimaryOnBgEmphasized - OudsColorKeyToken.BorderDefault -> borderColors.default - OudsColorKeyToken.BorderDefaultOnBgEmphasized -> borderColors.defaultOnBgEmphasized - OudsColorKeyToken.BorderEmphasized -> borderColors.emphasized - OudsColorKeyToken.BorderEmphasizedOnBgEmphasized -> borderColors.emphasizedOnBgEmphasized - OudsColorKeyToken.BorderFocus -> borderColors.focus - OudsColorKeyToken.BorderFocusInset -> borderColors.focusInset - OudsColorKeyToken.BorderFocusInsetOnBgEmphasized -> borderColors.focusInsetOnBgEmphasized - OudsColorKeyToken.BorderFocusOnBgEmphasized -> borderColors.focusOnBgEmphasized - OudsColorKeyToken.BorderOnBrandPrimary -> borderColors.onBrandPrimary - OudsColorKeyToken.BrandAccentDefault -> brandColors.accentDefault - OudsColorKeyToken.BrandAccentHigh -> brandColors.accentHigh - OudsColorKeyToken.BrandAccentHighest -> brandColors.accentHighest - OudsColorKeyToken.BrandAccentLowest -> brandColors.accentLowest - OudsColorKeyToken.BrandInfoDefault -> brandColors.infoDefault - OudsColorKeyToken.BrandInfoHighest -> brandColors.infoHighest - OudsColorKeyToken.BrandInfoLowest -> brandColors.infoLowest - OudsColorKeyToken.BrandNegativeDefault -> brandColors.negativeDefault - OudsColorKeyToken.BrandNegativeHigh -> brandColors.negativeHigh - OudsColorKeyToken.BrandNegativeHigher -> brandColors.negativeHigher - OudsColorKeyToken.BrandNegativeHighest -> brandColors.negativeHighest - OudsColorKeyToken.BrandNegativeLowest -> brandColors.negativeLowest - OudsColorKeyToken.BrandNeutralEmphasizedBlack -> brandColors.neutralEmphasizedBlack - OudsColorKeyToken.BrandNeutralEmphasizedHigh -> brandColors.neutralEmphasizedHigh - OudsColorKeyToken.BrandNeutralEmphasizedHigher -> brandColors.neutralEmphasizedHigher - OudsColorKeyToken.BrandNeutralEmphasizedHighest -> brandColors.neutralEmphasizedHighest - OudsColorKeyToken.BrandNeutralEmphasizedLow -> brandColors.neutralEmphasizedLow - OudsColorKeyToken.BrandNeutralEmphasizedLower -> brandColors.neutralEmphasizedLower - OudsColorKeyToken.BrandNeutralEmphasizedLowest -> brandColors.neutralEmphasizedLowest - OudsColorKeyToken.BrandNeutralEmphasizedMedium -> brandColors.neutralEmphasizedMedium - OudsColorKeyToken.BrandNeutralMutedHighest -> brandColors.neutralMutedHighest - OudsColorKeyToken.BrandNeutralMutedLow -> brandColors.neutralMutedLow - OudsColorKeyToken.BrandNeutralMutedLower -> brandColors.neutralMutedLower - OudsColorKeyToken.BrandNeutralMutedLowest -> brandColors.neutralMutedLowest - OudsColorKeyToken.BrandNeutralMutedMedium -> brandColors.neutralMutedMedium - OudsColorKeyToken.BrandNeutralMutedWhite -> brandColors.neutralMutedWhite - OudsColorKeyToken.BrandPositiveDefault -> brandColors.positiveDefault - OudsColorKeyToken.BrandPositiveHighest -> brandColors.positiveHighest - OudsColorKeyToken.BrandPositiveLowest -> brandColors.positiveLowest - OudsColorKeyToken.BrandPrimaryDefault -> brandColors.primaryDefault - OudsColorKeyToken.BrandPrimaryLow -> brandColors.primaryLow - OudsColorKeyToken.BrandWarningDefault -> brandColors.warningDefault - OudsColorKeyToken.BrandWarningHigh -> brandColors.warningHigh - OudsColorKeyToken.BrandWarningHighest -> brandColors.warningHighest - OudsColorKeyToken.BrandWarningLowest -> brandColors.warningLowest - OudsColorKeyToken.ContentBrandPrimary -> contentColors.brandPrimary - OudsColorKeyToken.ContentBrandPrimaryOnBgEmphasized -> contentColors.brandPrimaryOnBgEmphasized - OudsColorKeyToken.ContentDefault -> contentColors.default - OudsColorKeyToken.ContentDefaultOnBgEmphasized -> contentColors.defaultOnBgEmphasized - OudsColorKeyToken.ContentDisabled -> contentColors.disabled - OudsColorKeyToken.ContentDisabledOnBgEmphasized -> contentColors.disabledOnBgEmphasized - OudsColorKeyToken.ContentMuted -> contentColors.muted - OudsColorKeyToken.ContentMutedOnBgEmphasized -> contentColors.mutedOnBgEmphasized - OudsColorKeyToken.ContentOnActionDisabled -> contentColors.onActionDisabled - OudsColorKeyToken.ContentOnActionDisabledOnBgEmphasized -> contentColors.onActionDisabledOnBgEmphasized - OudsColorKeyToken.ContentOnActionNegative -> contentColors.onActionNegative - OudsColorKeyToken.ContentOnActionPrimaryEnabled -> contentColors.onActionPrimaryEnabled - OudsColorKeyToken.ContentOnActionPrimaryEnabledOnBgEmphasized -> contentColors.onActionPrimaryEnabledOnBgEmphasized - OudsColorKeyToken.ContentOnActionPrimaryFocus -> contentColors.onActionPrimaryFocus - OudsColorKeyToken.ContentOnActionPrimaryFocusOnBgEmphasized -> contentColors.onActionPrimaryFocusOnBgEmphasized - OudsColorKeyToken.ContentOnActionPrimaryHover -> contentColors.onActionPrimaryHover - OudsColorKeyToken.ContentOnActionPrimaryHoverOnBgEmphasized -> contentColors.onActionPrimaryHoverOnBgEmphasized - OudsColorKeyToken.ContentOnActionPrimaryLoading -> contentColors.onActionPrimaryLoading - OudsColorKeyToken.ContentOnActionPrimaryLoadingOnBgEmphasized -> contentColors.onActionPrimaryLoadingOnBgEmphasized - OudsColorKeyToken.ContentOnActionPrimaryPressed -> contentColors.onActionPrimaryPressed - OudsColorKeyToken.ContentOnActionPrimaryPressedOnBgEmphasized -> contentColors.onActionPrimaryPressedOnBgEmphasized - OudsColorKeyToken.ContentOnBrandPrimary -> contentColors.onBrandPrimary - OudsColorKeyToken.ContentOnStatusAccentEmphasized -> contentColors.onStatusAccentEmphasized - OudsColorKeyToken.ContentOnStatusAccentMuted -> contentColors.onStatusAccentMuted - OudsColorKeyToken.ContentOnStatusAccentMutedOnBgEmphasized -> contentColors.onStatusAccentMutedOnBgEmphasized - OudsColorKeyToken.ContentOnStatusInfoEmphasized -> contentColors.onStatusInfoEmphasized - OudsColorKeyToken.ContentOnStatusInfoMuted -> contentColors.onStatusInfoMuted - OudsColorKeyToken.ContentOnStatusInfoMutedOnBgEmphasized -> contentColors.onStatusInfoMutedOnBgEmphasized - OudsColorKeyToken.ContentOnStatusNegativeEmphasized -> contentColors.onStatusNegativeEmphasized - OudsColorKeyToken.ContentOnStatusNegativeMuted -> contentColors.onStatusNegativeMuted - OudsColorKeyToken.ContentOnStatusNegativeMutedOnBgEmphasized -> contentColors.onStatusNegativeMutedOnBgEmphasized - OudsColorKeyToken.ContentOnStatusPositiveEmphasized -> contentColors.onStatusPositiveEmphasized - OudsColorKeyToken.ContentOnStatusPositiveMuted -> contentColors.onStatusPositiveMuted - OudsColorKeyToken.ContentOnStatusPositiveMutedOnBgEmphasized -> contentColors.onStatusPositiveMutedOnBgEmphasized - OudsColorKeyToken.ContentOnStatusWarningEmphasized -> contentColors.onStatusWarningEmphasized - OudsColorKeyToken.ContentOnStatusWarningMuted -> contentColors.onStatusWarningMuted - OudsColorKeyToken.ContentOnStatusWarningMutedOnBgEmphasized -> contentColors.onStatusWarningMutedOnBgEmphasized - OudsColorKeyToken.ContentStatusInfo -> contentColors.statusInfo - OudsColorKeyToken.ContentStatusNegative -> contentColors.statusNegative - OudsColorKeyToken.ContentStatusPositive -> contentColors.statusPositive - OudsColorKeyToken.ContentStatusWarning -> contentColors.statusWarning - OudsColorKeyToken.ElevationDrag -> elevationColors.drag - OudsColorKeyToken.ElevationDragOnBgEmphasized -> elevationColors.dragOnBgEmphasized - OudsColorKeyToken.ElevationDragOnBgSecondary -> elevationColors.dragOnBgSecondary - OudsColorKeyToken.ElevationModal -> elevationColors.modal - OudsColorKeyToken.ElevationOverlayDefault -> elevationColors.overlayDefault - OudsColorKeyToken.ElevationOverlayDefaultOnBgEmphasized -> elevationColors.overlayDefaultOnBgEmphasized - OudsColorKeyToken.ElevationOverlayDefaultOnBgSecondary -> elevationColors.overlayDefaultOnBgSecondary - OudsColorKeyToken.ElevationOverlayEmphasized -> elevationColors.overlayEmphasized - OudsColorKeyToken.ElevationOverlayEmphasizedOnBgEmphasized -> elevationColors.overlayEmphasizedOnBgEmphasized - OudsColorKeyToken.ElevationOverlayEmphasizedOnBgSecondary -> elevationColors.overlayEmphasizedOnBgSecondary - OudsColorKeyToken.ElevationRaised -> elevationColors.raised - OudsColorKeyToken.ElevationRaisedOnBgEmphasized -> elevationColors.raisedOnBgEmphasized - OudsColorKeyToken.ElevationRaisedOnBgSecondary -> elevationColors.raisedOnBgSecondary - OudsColorKeyToken.GradientSkeletonMiddle -> gradientColors.skeletonMiddle - OudsColorKeyToken.GradientSkeletonMiddleOnBgEmphasized -> gradientColors.skeletonMiddleOnBgEmphasized - OudsColorKeyToken.GradientSkeletonStartEnd -> gradientColors.skeletonStartEnd - OudsColorKeyToken.GradientSkeletonStartEndOnBgEmphasized -> gradientColors.skeletonStartEndOnBgEmphasized - OudsColorKeyToken.DecorativeAccent1Default -> decorativeColors.accent1Default - OudsColorKeyToken.DecorativeAccent1Emphasized -> decorativeColors.accent1Emphasized - OudsColorKeyToken.DecorativeAccent1Muted -> decorativeColors.accent1Muted - OudsColorKeyToken.DecorativeAccent2Default -> decorativeColors.accent2Default - OudsColorKeyToken.DecorativeAccent2Emphasized -> decorativeColors.accent2Emphasized - OudsColorKeyToken.DecorativeAccent2Muted -> decorativeColors.accent2Muted - OudsColorKeyToken.DecorativeAccent3Default -> decorativeColors.accent3Default - OudsColorKeyToken.DecorativeAccent3Emphasized -> decorativeColors.accent3Emphasized - OudsColorKeyToken.DecorativeAccent3Muted -> decorativeColors.accent3Muted - OudsColorKeyToken.DecorativeAccent4Default -> decorativeColors.accent4Default - OudsColorKeyToken.DecorativeAccent4Emphasized -> decorativeColors.accent4Emphasized - OudsColorKeyToken.DecorativeAccent4Muted -> decorativeColors.accent4Muted - OudsColorKeyToken.DecorativeAccent5Default -> decorativeColors.accent5Default - OudsColorKeyToken.DecorativeAccent5Emphasized -> decorativeColors.accent5Emphasized - OudsColorKeyToken.DecorativeAccent5Muted -> decorativeColors.accent5Muted - OudsColorKeyToken.DecorativeBrandPrimary -> decorativeColors.brandPrimary - OudsColorKeyToken.DecorativeBrandSecondary -> decorativeColors.brandSecondary - OudsColorKeyToken.DecorativeBrandTertiary -> decorativeColors.brandTertiary - OudsColorKeyToken.DecorativeNeutralDefault -> decorativeColors.neutralDefault - OudsColorKeyToken.DecorativeNeutralEmphasized -> decorativeColors.neutralEmphasized - OudsColorKeyToken.DecorativeNeutralMuted -> decorativeColors.neutralMuted - OudsColorKeyToken.DecorativeSkinTint100 -> decorativeColors.skinTint100 - OudsColorKeyToken.DecorativeSkinTint200 -> decorativeColors.skinTint200 - OudsColorKeyToken.DecorativeSkinTint300 -> decorativeColors.skinTint300 - OudsColorKeyToken.DecorativeSkinTint400 -> decorativeColors.skinTint400 - OudsColorKeyToken.DecorativeSkinTint500 -> decorativeColors.skinTint500 - OudsColorKeyToken.DecorativeSkinTint600 -> decorativeColors.skinTint600 - OudsColorKeyToken.DecorativeSkinTint700 -> decorativeColors.skinTint700 - OudsColorKeyToken.DecorativeSkinTint800 -> decorativeColors.skinTint800 - OudsColorKeyToken.DecorativeSkinTint900 -> decorativeColors.skinTint900 + OudsColorActionKeyToken.Disabled -> actionColors.disabled + OudsColorActionKeyToken.DisabledOnBgEmphasized -> actionColors.disabledOnBgEmphasized + OudsColorActionKeyToken.NegativeEnabled -> actionColors.negativeEnabled + OudsColorActionKeyToken.NegativeFocus -> actionColors.negativeFocus + OudsColorActionKeyToken.NegativeHover -> actionColors.negativeHover + OudsColorActionKeyToken.NegativeLoading -> actionColors.negativeLoading + OudsColorActionKeyToken.NegativePressed -> actionColors.negativePressed + OudsColorActionKeyToken.PrimaryEnabled -> actionColors.primaryEnabled + OudsColorActionKeyToken.PrimaryEnabledOnBgEmphasized -> actionColors.primaryEnabledOnBgEmphasized + OudsColorActionKeyToken.PrimaryFocus -> actionColors.primaryFocus + OudsColorActionKeyToken.PrimaryFocusOnBgEmphasized -> actionColors.primaryFocusOnBgEmphasized + OudsColorActionKeyToken.PrimaryHover -> actionColors.primaryHover + OudsColorActionKeyToken.PrimaryHoverOnBgEmphasized -> actionColors.primaryHoverOnBgEmphasized + OudsColorActionKeyToken.PrimaryLoading -> actionColors.primaryLoading + OudsColorActionKeyToken.PrimaryLoadingOnBgEmphasized -> actionColors.primaryLoadingOnBgEmphasized + OudsColorActionKeyToken.PrimaryPressed -> actionColors.primaryPressed + OudsColorActionKeyToken.PrimaryPressedOnBgEmphasized -> actionColors.primaryPressedOnBgEmphasized + OudsColorActionKeyToken.SecondaryEnabled -> actionColors.secondaryEnabled + OudsColorActionKeyToken.SecondaryEnabledOnBgEmphasized -> actionColors.secondaryEnabledOnBgEmphasized + OudsColorActionKeyToken.SecondaryFocus -> actionColors.secondaryFocus + OudsColorActionKeyToken.SecondaryFocusOnBgEmphasized -> actionColors.secondaryFocusOnBgEmphasized + OudsColorActionKeyToken.SecondaryHover -> actionColors.secondaryHover + OudsColorActionKeyToken.SecondaryHoverOnBgEmphasized -> actionColors.secondaryHoverOnBgEmphasized + OudsColorActionKeyToken.SecondaryLoading -> actionColors.secondaryLoading + OudsColorActionKeyToken.SecondaryLoadingOnBgEmphasized -> actionColors.secondaryLoadingOnBgEmphasized + OudsColorActionKeyToken.SecondaryPressed -> actionColors.secondaryPressed + OudsColorActionKeyToken.SecondaryPressedOnBgEmphasized -> actionColors.secondaryPressedOnBgEmphasized + OudsColorActionKeyToken.Selected -> actionColors.selected + OudsColorActionKeyToken.SelectedOnBgEmphasized -> actionColors.selectedOnBgEmphasized + OudsColorActionKeyToken.Visited -> actionColors.visited + OudsColorActionKeyToken.VisitedOnBgEmphasized -> actionColors.visitedOnBgEmphasized + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorAlwaysKeyToken): Color { + return when (token) { + OudsColorAlwaysKeyToken.Accent -> alwaysColors.accent + OudsColorAlwaysKeyToken.Black -> alwaysColors.black + OudsColorAlwaysKeyToken.Info -> alwaysColors.info + OudsColorAlwaysKeyToken.Negative -> alwaysColors.negative + OudsColorAlwaysKeyToken.OnAccent -> alwaysColors.onAccent + OudsColorAlwaysKeyToken.OnBlack -> alwaysColors.onBlack + OudsColorAlwaysKeyToken.OnInfo -> alwaysColors.onInfo + OudsColorAlwaysKeyToken.OnNegative -> alwaysColors.onNegative + OudsColorAlwaysKeyToken.OnPositive -> alwaysColors.onPositive + OudsColorAlwaysKeyToken.OnWarning -> alwaysColors.onWarning + OudsColorAlwaysKeyToken.OnWhite -> alwaysColors.onWhite + OudsColorAlwaysKeyToken.Positive -> alwaysColors.positive + OudsColorAlwaysKeyToken.Warning -> alwaysColors.warning + OudsColorAlwaysKeyToken.White -> alwaysColors.white + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorBackgroundKeyToken): Color { + return when (token) { + OudsColorBackgroundKeyToken.BrandPrimary -> backgroundColors.brandPrimary + OudsColorBackgroundKeyToken.Emphasized -> backgroundColors.emphasized + OudsColorBackgroundKeyToken.Primary -> backgroundColors.primary + OudsColorBackgroundKeyToken.Secondary -> backgroundColors.secondary + OudsColorBackgroundKeyToken.StatusAccentEmphasized -> backgroundColors.statusAccentEmphasized + OudsColorBackgroundKeyToken.StatusAccentMuted -> backgroundColors.statusAccentMuted + OudsColorBackgroundKeyToken.StatusAccentMutedOnBgEmphasized -> backgroundColors.statusAccentMutedOnBgEmphasized + OudsColorBackgroundKeyToken.StatusInfoEmphasized -> backgroundColors.statusInfoEmphasized + OudsColorBackgroundKeyToken.StatusInfoMuted -> backgroundColors.statusInfoMuted + OudsColorBackgroundKeyToken.StatusInfoMutedOnBgEmphasized -> backgroundColors.statusInfoMutedOnBgEmphasized + OudsColorBackgroundKeyToken.StatusNegativeEmphasized -> backgroundColors.statusNegativeEmphasized + OudsColorBackgroundKeyToken.StatusNegativeMuted -> backgroundColors.statusNegativeMuted + OudsColorBackgroundKeyToken.StatusNegativeMutedOnBgEmphasized -> backgroundColors.statusNegativeMutedOnBgEmphasized + OudsColorBackgroundKeyToken.StatusNeutral -> backgroundColors.statusNeutral + OudsColorBackgroundKeyToken.StatusNeutralOnBgEmphasized -> backgroundColors.statusNeutralOnBgEmphasized + OudsColorBackgroundKeyToken.StatusPositiveEmphasized -> backgroundColors.statusPositiveEmphasized + OudsColorBackgroundKeyToken.StatusPositiveMuted -> backgroundColors.statusPositiveMuted + OudsColorBackgroundKeyToken.StatusPositiveMutedOnBgEmphasized -> backgroundColors.statusPositiveMutedOnBgEmphasized + OudsColorBackgroundKeyToken.StatusWarningEmphasized -> backgroundColors.statusWarningEmphasized + OudsColorBackgroundKeyToken.StatusWarningMuted -> backgroundColors.statusWarningMuted + OudsColorBackgroundKeyToken.StatusWarningMutedOnBgEmphasized -> backgroundColors.statusWarningMutedOnBgEmphasized + OudsColorBackgroundKeyToken.Tertiary -> backgroundColors.tertiary + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorBorderKeyToken): Color { + return when (token) { + OudsColorBorderKeyToken.BrandPrimary -> borderColors.brandPrimary + OudsColorBorderKeyToken.BrandPrimaryOnBgEmphasized -> borderColors.brandPrimaryOnBgEmphasized + OudsColorBorderKeyToken.Default -> borderColors.default + OudsColorBorderKeyToken.DefaultOnBgEmphasized -> borderColors.defaultOnBgEmphasized + OudsColorBorderKeyToken.Emphasized -> borderColors.emphasized + OudsColorBorderKeyToken.EmphasizedOnBgEmphasized -> borderColors.emphasizedOnBgEmphasized + OudsColorBorderKeyToken.Focus -> borderColors.focus + OudsColorBorderKeyToken.FocusInset -> borderColors.focusInset + OudsColorBorderKeyToken.FocusInsetOnBgEmphasized -> borderColors.focusInsetOnBgEmphasized + OudsColorBorderKeyToken.FocusOnBgEmphasized -> borderColors.focusOnBgEmphasized + OudsColorBorderKeyToken.OnBrandPrimary -> borderColors.onBrandPrimary + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorBrandKeyToken): Color { + return when (token) { + OudsColorBrandKeyToken.AccentDefault -> brandColors.accentDefault + OudsColorBrandKeyToken.AccentHigh -> brandColors.accentHigh + OudsColorBrandKeyToken.AccentHighest -> brandColors.accentHighest + OudsColorBrandKeyToken.AccentLowest -> brandColors.accentLowest + OudsColorBrandKeyToken.InfoDefault -> brandColors.infoDefault + OudsColorBrandKeyToken.InfoHighest -> brandColors.infoHighest + OudsColorBrandKeyToken.InfoLowest -> brandColors.infoLowest + OudsColorBrandKeyToken.NegativeDefault -> brandColors.negativeDefault + OudsColorBrandKeyToken.NegativeHigh -> brandColors.negativeHigh + OudsColorBrandKeyToken.NegativeHigher -> brandColors.negativeHigher + OudsColorBrandKeyToken.NegativeHighest -> brandColors.negativeHighest + OudsColorBrandKeyToken.NegativeLowest -> brandColors.negativeLowest + OudsColorBrandKeyToken.NeutralEmphasizedBlack -> brandColors.neutralEmphasizedBlack + OudsColorBrandKeyToken.NeutralEmphasizedHigh -> brandColors.neutralEmphasizedHigh + OudsColorBrandKeyToken.NeutralEmphasizedHigher -> brandColors.neutralEmphasizedHigher + OudsColorBrandKeyToken.NeutralEmphasizedHighest -> brandColors.neutralEmphasizedHighest + OudsColorBrandKeyToken.NeutralEmphasizedLow -> brandColors.neutralEmphasizedLow + OudsColorBrandKeyToken.NeutralEmphasizedLower -> brandColors.neutralEmphasizedLower + OudsColorBrandKeyToken.NeutralEmphasizedLowest -> brandColors.neutralEmphasizedLowest + OudsColorBrandKeyToken.NeutralEmphasizedMedium -> brandColors.neutralEmphasizedMedium + OudsColorBrandKeyToken.NeutralMutedHighest -> brandColors.neutralMutedHighest + OudsColorBrandKeyToken.NeutralMutedLow -> brandColors.neutralMutedLow + OudsColorBrandKeyToken.NeutralMutedLower -> brandColors.neutralMutedLower + OudsColorBrandKeyToken.NeutralMutedLowest -> brandColors.neutralMutedLowest + OudsColorBrandKeyToken.NeutralMutedMedium -> brandColors.neutralMutedMedium + OudsColorBrandKeyToken.NeutralMutedWhite -> brandColors.neutralMutedWhite + OudsColorBrandKeyToken.PositiveDefault -> brandColors.positiveDefault + OudsColorBrandKeyToken.PositiveHighest -> brandColors.positiveHighest + OudsColorBrandKeyToken.PositiveLowest -> brandColors.positiveLowest + OudsColorBrandKeyToken.PrimaryDefault -> brandColors.primaryDefault + OudsColorBrandKeyToken.PrimaryLow -> brandColors.primaryLow + OudsColorBrandKeyToken.WarningDefault -> brandColors.warningDefault + OudsColorBrandKeyToken.WarningHigh -> brandColors.warningHigh + OudsColorBrandKeyToken.WarningHighest -> brandColors.warningHighest + OudsColorBrandKeyToken.WarningLowest -> brandColors.warningLowest + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorContentKeyToken): Color { + return when (token) { + OudsColorContentKeyToken.BrandPrimary -> contentColors.brandPrimary + OudsColorContentKeyToken.BrandPrimaryOnBgEmphasized -> contentColors.brandPrimaryOnBgEmphasized + OudsColorContentKeyToken.Default -> contentColors.default + OudsColorContentKeyToken.DefaultOnBgEmphasized -> contentColors.defaultOnBgEmphasized + OudsColorContentKeyToken.Disabled -> contentColors.disabled + OudsColorContentKeyToken.DisabledOnBgEmphasized -> contentColors.disabledOnBgEmphasized + OudsColorContentKeyToken.Muted -> contentColors.muted + OudsColorContentKeyToken.MutedOnBgEmphasized -> contentColors.mutedOnBgEmphasized + OudsColorContentKeyToken.OnActionDisabled -> contentColors.onActionDisabled + OudsColorContentKeyToken.OnActionDisabledOnBgEmphasized -> contentColors.onActionDisabledOnBgEmphasized + OudsColorContentKeyToken.OnActionNegative -> contentColors.onActionNegative + OudsColorContentKeyToken.OnActionPrimaryEnabled -> contentColors.onActionPrimaryEnabled + OudsColorContentKeyToken.OnActionPrimaryEnabledOnBgEmphasized -> contentColors.onActionPrimaryEnabledOnBgEmphasized + OudsColorContentKeyToken.OnActionPrimaryFocus -> contentColors.onActionPrimaryFocus + OudsColorContentKeyToken.OnActionPrimaryFocusOnBgEmphasized -> contentColors.onActionPrimaryFocusOnBgEmphasized + OudsColorContentKeyToken.OnActionPrimaryHover -> contentColors.onActionPrimaryHover + OudsColorContentKeyToken.OnActionPrimaryHoverOnBgEmphasized -> contentColors.onActionPrimaryHoverOnBgEmphasized + OudsColorContentKeyToken.OnActionPrimaryLoading -> contentColors.onActionPrimaryLoading + OudsColorContentKeyToken.OnActionPrimaryLoadingOnBgEmphasized -> contentColors.onActionPrimaryLoadingOnBgEmphasized + OudsColorContentKeyToken.OnActionPrimaryPressed -> contentColors.onActionPrimaryPressed + OudsColorContentKeyToken.OnActionPrimaryPressedOnBgEmphasized -> contentColors.onActionPrimaryPressedOnBgEmphasized + OudsColorContentKeyToken.OnBrandPrimary -> contentColors.onBrandPrimary + OudsColorContentKeyToken.OnStatusAccentEmphasized -> contentColors.onStatusAccentEmphasized + OudsColorContentKeyToken.OnStatusAccentMuted -> contentColors.onStatusAccentMuted + OudsColorContentKeyToken.OnStatusAccentMutedOnBgEmphasized -> contentColors.onStatusAccentMutedOnBgEmphasized + OudsColorContentKeyToken.OnStatusInfoEmphasized -> contentColors.onStatusInfoEmphasized + OudsColorContentKeyToken.OnStatusInfoMuted -> contentColors.onStatusInfoMuted + OudsColorContentKeyToken.OnStatusInfoMutedOnBgEmphasized -> contentColors.onStatusInfoMutedOnBgEmphasized + OudsColorContentKeyToken.OnStatusNegativeEmphasized -> contentColors.onStatusNegativeEmphasized + OudsColorContentKeyToken.OnStatusNegativeMuted -> contentColors.onStatusNegativeMuted + OudsColorContentKeyToken.OnStatusNegativeMutedOnBgEmphasized -> contentColors.onStatusNegativeMutedOnBgEmphasized + OudsColorContentKeyToken.OnStatusPositiveEmphasized -> contentColors.onStatusPositiveEmphasized + OudsColorContentKeyToken.OnStatusPositiveMuted -> contentColors.onStatusPositiveMuted + OudsColorContentKeyToken.OnStatusPositiveMutedOnBgEmphasized -> contentColors.onStatusPositiveMutedOnBgEmphasized + OudsColorContentKeyToken.OnStatusWarningEmphasized -> contentColors.onStatusWarningEmphasized + OudsColorContentKeyToken.OnStatusWarningMuted -> contentColors.onStatusWarningMuted + OudsColorContentKeyToken.OnStatusWarningMutedOnBgEmphasized -> contentColors.onStatusWarningMutedOnBgEmphasized + OudsColorContentKeyToken.StatusInfo -> contentColors.statusInfo + OudsColorContentKeyToken.StatusNegative -> contentColors.statusNegative + OudsColorContentKeyToken.StatusPositive -> contentColors.statusPositive + OudsColorContentKeyToken.StatusWarning -> contentColors.statusWarning + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorElevationKeyToken): Color { + return when (token) { + OudsColorElevationKeyToken.Drag -> elevationColors.drag + OudsColorElevationKeyToken.DragOnBgEmphasized -> elevationColors.dragOnBgEmphasized + OudsColorElevationKeyToken.DragOnBgSecondary -> elevationColors.dragOnBgSecondary + OudsColorElevationKeyToken.Modal -> elevationColors.modal + OudsColorElevationKeyToken.OverlayDefault -> elevationColors.overlayDefault + OudsColorElevationKeyToken.OverlayDefaultOnBgEmphasized -> elevationColors.overlayDefaultOnBgEmphasized + OudsColorElevationKeyToken.OverlayDefaultOnBgSecondary -> elevationColors.overlayDefaultOnBgSecondary + OudsColorElevationKeyToken.OverlayEmphasized -> elevationColors.overlayEmphasized + OudsColorElevationKeyToken.OverlayEmphasizedOnBgEmphasized -> elevationColors.overlayEmphasizedOnBgEmphasized + OudsColorElevationKeyToken.OverlayEmphasizedOnBgSecondary -> elevationColors.overlayEmphasizedOnBgSecondary + OudsColorElevationKeyToken.Raised -> elevationColors.raised + OudsColorElevationKeyToken.RaisedOnBgEmphasized -> elevationColors.raisedOnBgEmphasized + OudsColorElevationKeyToken.RaisedOnBgSecondary -> elevationColors.raisedOnBgSecondary + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorGradientKeyToken): Color { + return when (token) { + OudsColorGradientKeyToken.SkeletonMiddle -> gradientColors.skeletonMiddle + OudsColorGradientKeyToken.SkeletonMiddleOnBgEmphasized -> gradientColors.skeletonMiddleOnBgEmphasized + OudsColorGradientKeyToken.SkeletonStartEnd -> gradientColors.skeletonStartEnd + OudsColorGradientKeyToken.SkeletonStartEndOnBgEmphasized -> gradientColors.skeletonStartEndOnBgEmphasized + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorDecorativeKeyToken): Color { + return when (token) { + OudsColorDecorativeKeyToken.Accent1Default -> decorativeColors.accent1Default + OudsColorDecorativeKeyToken.Accent1Emphasized -> decorativeColors.accent1Emphasized + OudsColorDecorativeKeyToken.Accent1Muted -> decorativeColors.accent1Muted + OudsColorDecorativeKeyToken.Accent2Default -> decorativeColors.accent2Default + OudsColorDecorativeKeyToken.Accent2Emphasized -> decorativeColors.accent2Emphasized + OudsColorDecorativeKeyToken.Accent2Muted -> decorativeColors.accent2Muted + OudsColorDecorativeKeyToken.Accent3Default -> decorativeColors.accent3Default + OudsColorDecorativeKeyToken.Accent3Emphasized -> decorativeColors.accent3Emphasized + OudsColorDecorativeKeyToken.Accent3Muted -> decorativeColors.accent3Muted + OudsColorDecorativeKeyToken.Accent4Default -> decorativeColors.accent4Default + OudsColorDecorativeKeyToken.Accent4Emphasized -> decorativeColors.accent4Emphasized + OudsColorDecorativeKeyToken.Accent4Muted -> decorativeColors.accent4Muted + OudsColorDecorativeKeyToken.Accent5Default -> decorativeColors.accent5Default + OudsColorDecorativeKeyToken.Accent5Emphasized -> decorativeColors.accent5Emphasized + OudsColorDecorativeKeyToken.Accent5Muted -> decorativeColors.accent5Muted + OudsColorDecorativeKeyToken.BrandPrimary -> decorativeColors.brandPrimary + OudsColorDecorativeKeyToken.BrandSecondary -> decorativeColors.brandSecondary + OudsColorDecorativeKeyToken.BrandTertiary -> decorativeColors.brandTertiary + OudsColorDecorativeKeyToken.NeutralDefault -> decorativeColors.neutralDefault + OudsColorDecorativeKeyToken.NeutralEmphasized -> decorativeColors.neutralEmphasized + OudsColorDecorativeKeyToken.NeutralMuted -> decorativeColors.neutralMuted + OudsColorDecorativeKeyToken.SkinTint100 -> decorativeColors.skinTint100 + OudsColorDecorativeKeyToken.SkinTint200 -> decorativeColors.skinTint200 + OudsColorDecorativeKeyToken.SkinTint300 -> decorativeColors.skinTint300 + OudsColorDecorativeKeyToken.SkinTint400 -> decorativeColors.skinTint400 + OudsColorDecorativeKeyToken.SkinTint500 -> decorativeColors.skinTint500 + OudsColorDecorativeKeyToken.SkinTint600 -> decorativeColors.skinTint600 + OudsColorDecorativeKeyToken.SkinTint700 -> decorativeColors.skinTint700 + OudsColorDecorativeKeyToken.SkinTint800 -> decorativeColors.skinTint800 + OudsColorDecorativeKeyToken.SkinTint900 -> decorativeColors.skinTint900 + } +} + +@Stable +fun OudsColorScheme.fromToken(token: OudsColorGlobalKeyToken): Color { + return when (token) { + OudsColorGlobalKeyToken.TransparentDefault -> globalColors.transparentDefault } } @@ -995,9 +1058,73 @@ val OudsColorSemanticTokens.materialDarkColorScheme: ColorScheme ) /** - * Converts an OUDS color token to the local color value provided by the theme. + * Converts an OUDS action color token to the local color value provided by the theme. + */ +val OudsColorActionKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS always color token to the local color value provided by the theme. + */ +val OudsColorAlwaysKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS background color token to the local color value provided by the theme. + */ +val OudsColorBackgroundKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS border color token to the local color value provided by the theme. + */ +val OudsColorBorderKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS brand color token to the local color value provided by the theme. */ -val OudsColorKeyToken.value: Color +val OudsColorBrandKeyToken.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS content color token to the local color value provided by the theme. + */ +val OudsColorContentKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS elevation color token to the local color value provided by the theme. + */ +val OudsColorElevationKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS gradient color token to the local color value provided by the theme. + */ +val OudsColorGradientKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) + +/** + * Converts an OUDS decorative color token to the local color value provided by the theme. + */ +val OudsColorDecorativeKeyToken.value: Color + @ReadOnlyComposable + @Composable + get() = OudsTheme.colorScheme.fromToken(this) \ No newline at end of file diff --git a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt index b36f6c93..45893291 100644 --- a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt +++ b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.Composable import com.orange.ouds.core.BuildConfig import com.orange.ouds.core.theme.OudsTheme import com.orange.ouds.core.theme.value -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken /** * Configures the Compose OUDS preview environment in Android Studio. @@ -29,6 +29,6 @@ import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun OudsPreview(darkThemeEnabled: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) { OudsTheme(themeContract = BuildConfig.PREVIEW_THEME, darkThemeEnabled) { - Surface(color = OudsColorKeyToken.BgPrimary.value, content = content) // Add a surface to be able to see components + Surface(color = OudsColorBackgroundKeyToken.Primary.value, content = content) // Add a surface to be able to see components } } diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt index 6622d276..fca887e1 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt @@ -12,207 +12,234 @@ package com.orange.ouds.theme.tokens -enum class OudsColorKeyToken { +enum class OudsColorGlobalKeyToken { TransparentDefault, - ActionDisabled, - ActionDisabledOnBgEmphasized, - ActionNegativeEnabled, - ActionNegativeFocus, - ActionNegativeHover, - ActionNegativeLoading, - ActionNegativePressed, - ActionPrimaryEnabled, - ActionPrimaryEnabledOnBgEmphasized, - ActionPrimaryFocus, - ActionPrimaryFocusOnBgEmphasized, - ActionPrimaryHover, - ActionPrimaryHoverOnBgEmphasized, - ActionPrimaryLoading, - ActionPrimaryLoadingOnBgEmphasized, - ActionPrimaryPressed, - ActionPrimaryPressedOnBgEmphasized, - ActionSecondaryEnabled, - ActionSecondaryEnabledOnBgEmphasized, - ActionSecondaryFocus, - ActionSecondaryFocusOnBgEmphasized, - ActionSecondaryHover, - ActionSecondaryHoverOnBgEmphasized, - ActionSecondaryLoading, - ActionSecondaryLoadingOnBgEmphasized, - ActionSecondaryPressed, - ActionSecondaryPressedOnBgEmphasized, - ActionSelected, - ActionSelectedOnBgEmphasized, - ActionVisited, - ActionVisitedOnBgEmphasized, - AlwaysAccent, - AlwaysBlack, - AlwaysInfo, - AlwaysNegative, - AlwaysOnAccent, - AlwaysOnBlack, - AlwaysOnInfo, - AlwaysOnNegative, - AlwaysOnPositive, - AlwaysOnWarning, - AlwaysOnWhite, - AlwaysPositive, - AlwaysWarning, - AlwaysWhite, - BgBrandPrimary, - BgEmphasized, - BgPrimary, - BgSecondary, - BgStatusAccentEmphasized, - BgStatusAccentMuted, - BgStatusAccentMutedOnBgEmphasized, - BgStatusInfoEmphasized, - BgStatusInfoMuted, - BgStatusInfoMutedOnBgEmphasized, - BgStatusNegativeEmphasized, - BgStatusNegativeMuted, - BgStatusNegativeMutedOnBgEmphasized, - BgStatusNeutral, - BgStatusNeutralOnBgEmphasized, - BgStatusPositiveEmphasized, - BgStatusPositiveMuted, - BgStatusPositiveMutedOnBgEmphasized, - BgStatusWarningEmphasized, - BgStatusWarningMuted, - BgStatusWarningMutedOnBgEmphasized, - BgTertiary, - BorderBrandPrimary, - BorderBrandPrimaryOnBgEmphasized, - BorderDefault, - BorderDefaultOnBgEmphasized, - BorderEmphasized, - BorderEmphasizedOnBgEmphasized, - BorderFocus, - BorderFocusInset, - BorderFocusInsetOnBgEmphasized, - BorderFocusOnBgEmphasized, - BorderOnBrandPrimary, - BrandAccentDefault, - BrandAccentHigh, - BrandAccentHighest, - BrandAccentLowest, - BrandInfoDefault, - BrandInfoHighest, - BrandInfoLowest, - BrandNegativeDefault, - BrandNegativeHigh, - BrandNegativeHigher, - BrandNegativeHighest, - BrandNegativeLowest, - BrandNeutralEmphasizedBlack, - BrandNeutralEmphasizedHigh, - BrandNeutralEmphasizedHigher, - BrandNeutralEmphasizedHighest, - BrandNeutralEmphasizedLow, - BrandNeutralEmphasizedLower, - BrandNeutralEmphasizedLowest, - BrandNeutralEmphasizedMedium, - BrandNeutralMutedHighest, - BrandNeutralMutedLow, - BrandNeutralMutedLower, - BrandNeutralMutedLowest, - BrandNeutralMutedMedium, - BrandNeutralMutedWhite, - BrandPositiveDefault, - BrandPositiveHighest, - BrandPositiveLowest, - BrandPrimaryDefault, - BrandPrimaryLow, - BrandWarningDefault, - BrandWarningHigh, - BrandWarningHighest, - BrandWarningLowest, - ContentBrandPrimary, - ContentBrandPrimaryOnBgEmphasized, - ContentDefault, - ContentDefaultOnBgEmphasized, - ContentDisabled, - ContentDisabledOnBgEmphasized, - ContentMuted, - ContentMutedOnBgEmphasized, - ContentOnActionDisabled, - ContentOnActionDisabledOnBgEmphasized, - ContentOnActionNegative, - ContentOnActionPrimaryEnabled, - ContentOnActionPrimaryEnabledOnBgEmphasized, - ContentOnActionPrimaryFocus, - ContentOnActionPrimaryFocusOnBgEmphasized, - ContentOnActionPrimaryHover, - ContentOnActionPrimaryHoverOnBgEmphasized, - ContentOnActionPrimaryLoading, - ContentOnActionPrimaryLoadingOnBgEmphasized, - ContentOnActionPrimaryPressed, - ContentOnActionPrimaryPressedOnBgEmphasized, - ContentOnBrandPrimary, - ContentOnStatusAccentEmphasized, - ContentOnStatusAccentMuted, - ContentOnStatusAccentMutedOnBgEmphasized, - ContentOnStatusInfoEmphasized, - ContentOnStatusInfoMuted, - ContentOnStatusInfoMutedOnBgEmphasized, - ContentOnStatusNegativeEmphasized, - ContentOnStatusNegativeMuted, - ContentOnStatusNegativeMutedOnBgEmphasized, - ContentOnStatusPositiveEmphasized, - ContentOnStatusPositiveMuted, - ContentOnStatusPositiveMutedOnBgEmphasized, - ContentOnStatusWarningEmphasized, - ContentOnStatusWarningMuted, - ContentOnStatusWarningMutedOnBgEmphasized, - ContentStatusInfo, - ContentStatusNegative, - ContentStatusPositive, - ContentStatusWarning, - ElevationDrag, - ElevationDragOnBgEmphasized, - ElevationDragOnBgSecondary, - ElevationModal, - ElevationOverlayDefault, - ElevationOverlayDefaultOnBgEmphasized, - ElevationOverlayDefaultOnBgSecondary, - ElevationOverlayEmphasized, - ElevationOverlayEmphasizedOnBgEmphasized, - ElevationOverlayEmphasizedOnBgSecondary, - ElevationRaised, - ElevationRaisedOnBgEmphasized, - ElevationRaisedOnBgSecondary, - GradientSkeletonMiddle, - GradientSkeletonMiddleOnBgEmphasized, - GradientSkeletonStartEnd, - GradientSkeletonStartEndOnBgEmphasized, - DecorativeAccent1Default, - DecorativeAccent1Emphasized, - DecorativeAccent1Muted, - DecorativeAccent2Default, - DecorativeAccent2Emphasized, - DecorativeAccent2Muted, - DecorativeAccent3Default, - DecorativeAccent3Emphasized, - DecorativeAccent3Muted, - DecorativeAccent4Default, - DecorativeAccent4Emphasized, - DecorativeAccent4Muted, - DecorativeAccent5Default, - DecorativeAccent5Emphasized, - DecorativeAccent5Muted, - DecorativeBrandPrimary, - DecorativeBrandSecondary, - DecorativeBrandTertiary, - DecorativeNeutralDefault, - DecorativeNeutralEmphasized, - DecorativeNeutralMuted, - DecorativeSkinTint100, - DecorativeSkinTint200, - DecorativeSkinTint300, - DecorativeSkinTint400, - DecorativeSkinTint500, - DecorativeSkinTint600, - DecorativeSkinTint700, - DecorativeSkinTint800, - DecorativeSkinTint900, +} + +enum class OudsColorActionKeyToken { + Disabled, + DisabledOnBgEmphasized, + NegativeEnabled, + NegativeFocus, + NegativeHover, + NegativeLoading, + NegativePressed, + PrimaryEnabled, + PrimaryEnabledOnBgEmphasized, + PrimaryFocus, + PrimaryFocusOnBgEmphasized, + PrimaryHover, + PrimaryHoverOnBgEmphasized, + PrimaryLoading, + PrimaryLoadingOnBgEmphasized, + PrimaryPressed, + PrimaryPressedOnBgEmphasized, + SecondaryEnabled, + SecondaryEnabledOnBgEmphasized, + SecondaryFocus, + SecondaryFocusOnBgEmphasized, + SecondaryHover, + SecondaryHoverOnBgEmphasized, + SecondaryLoading, + SecondaryLoadingOnBgEmphasized, + SecondaryPressed, + SecondaryPressedOnBgEmphasized, + Selected, + SelectedOnBgEmphasized, + Visited, + VisitedOnBgEmphasized, +} + +enum class OudsColorAlwaysKeyToken { + Accent, + Black, + Info, + Negative, + OnAccent, + OnBlack, + OnInfo, + OnNegative, + OnPositive, + OnWarning, + OnWhite, + Positive, + Warning, + White, +} + +enum class OudsColorBackgroundKeyToken { + BrandPrimary, + Emphasized, + Primary, + Secondary, + StatusAccentEmphasized, + StatusAccentMuted, + StatusAccentMutedOnBgEmphasized, + StatusInfoEmphasized, + StatusInfoMuted, + StatusInfoMutedOnBgEmphasized, + StatusNegativeEmphasized, + StatusNegativeMuted, + StatusNegativeMutedOnBgEmphasized, + StatusNeutral, + StatusNeutralOnBgEmphasized, + StatusPositiveEmphasized, + StatusPositiveMuted, + StatusPositiveMutedOnBgEmphasized, + StatusWarningEmphasized, + StatusWarningMuted, + StatusWarningMutedOnBgEmphasized, + Tertiary, +} + +enum class OudsColorBorderKeyToken { + BrandPrimary, + BrandPrimaryOnBgEmphasized, + Default, + DefaultOnBgEmphasized, + Emphasized, + EmphasizedOnBgEmphasized, + Focus, + FocusInset, + FocusInsetOnBgEmphasized, + FocusOnBgEmphasized, + OnBrandPrimary, +} + +enum class OudsColorBrandKeyToken { + AccentDefault, + AccentHigh, + AccentHighest, + AccentLowest, + InfoDefault, + InfoHighest, + InfoLowest, + NegativeDefault, + NegativeHigh, + NegativeHigher, + NegativeHighest, + NegativeLowest, + NeutralEmphasizedBlack, + NeutralEmphasizedHigh, + NeutralEmphasizedHigher, + NeutralEmphasizedHighest, + NeutralEmphasizedLow, + NeutralEmphasizedLower, + NeutralEmphasizedLowest, + NeutralEmphasizedMedium, + NeutralMutedHighest, + NeutralMutedLow, + NeutralMutedLower, + NeutralMutedLowest, + NeutralMutedMedium, + NeutralMutedWhite, + PositiveDefault, + PositiveHighest, + PositiveLowest, + PrimaryDefault, + PrimaryLow, + WarningDefault, + WarningHigh, + WarningHighest, + WarningLowest, +} + +enum class OudsColorContentKeyToken { + BrandPrimary, + BrandPrimaryOnBgEmphasized, + Default, + DefaultOnBgEmphasized, + Disabled, + DisabledOnBgEmphasized, + Muted, + MutedOnBgEmphasized, + OnActionDisabled, + OnActionDisabledOnBgEmphasized, + OnActionNegative, + OnActionPrimaryEnabled, + OnActionPrimaryEnabledOnBgEmphasized, + OnActionPrimaryFocus, + OnActionPrimaryFocusOnBgEmphasized, + OnActionPrimaryHover, + OnActionPrimaryHoverOnBgEmphasized, + OnActionPrimaryLoading, + OnActionPrimaryLoadingOnBgEmphasized, + OnActionPrimaryPressed, + OnActionPrimaryPressedOnBgEmphasized, + OnBrandPrimary, + OnStatusAccentEmphasized, + OnStatusAccentMuted, + OnStatusAccentMutedOnBgEmphasized, + OnStatusInfoEmphasized, + OnStatusInfoMuted, + OnStatusInfoMutedOnBgEmphasized, + OnStatusNegativeEmphasized, + OnStatusNegativeMuted, + OnStatusNegativeMutedOnBgEmphasized, + OnStatusPositiveEmphasized, + OnStatusPositiveMuted, + OnStatusPositiveMutedOnBgEmphasized, + OnStatusWarningEmphasized, + OnStatusWarningMuted, + OnStatusWarningMutedOnBgEmphasized, + StatusInfo, + StatusNegative, + StatusPositive, + StatusWarning, +} + +enum class OudsColorElevationKeyToken { + Drag, + DragOnBgEmphasized, + DragOnBgSecondary, + Modal, + OverlayDefault, + OverlayDefaultOnBgEmphasized, + OverlayDefaultOnBgSecondary, + OverlayEmphasized, + OverlayEmphasizedOnBgEmphasized, + OverlayEmphasizedOnBgSecondary, + Raised, + RaisedOnBgEmphasized, + RaisedOnBgSecondary, +} + +enum class OudsColorGradientKeyToken { + SkeletonMiddle, + SkeletonMiddleOnBgEmphasized, + SkeletonStartEnd, + SkeletonStartEndOnBgEmphasized, +} + +enum class OudsColorDecorativeKeyToken { + Accent1Default, + Accent1Emphasized, + Accent1Muted, + Accent2Default, + Accent2Emphasized, + Accent2Muted, + Accent3Default, + Accent3Emphasized, + Accent3Muted, + Accent4Default, + Accent4Emphasized, + Accent4Muted, + Accent5Default, + Accent5Emphasized, + Accent5Muted, + BrandPrimary, + BrandSecondary, + BrandTertiary, + NeutralDefault, + NeutralEmphasized, + NeutralMuted, + SkinTint100, + SkinTint200, + SkinTint300, + SkinTint400, + SkinTint500, + SkinTint600, + SkinTint700, + SkinTint800, + SkinTint900, } \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt index 71e91d0e..983a4802 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt @@ -13,16 +13,18 @@ package com.orange.ouds.theme.tokens.components import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorActionKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorContentKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken open class OudsButtonTokens( - val containerColor: OudsColorKeyToken = OudsColorKeyToken.BgBrandPrimary, - val contentColor: OudsColorKeyToken = OudsColorKeyToken.ContentBrandPrimary, - val disabledContainerColor: OudsColorKeyToken = OudsColorKeyToken.ActionDisabled, - val disabledContentColor: OudsColorKeyToken = OudsColorKeyToken.ContentDisabled, + val containerColor: OudsColorBackgroundKeyToken = OudsColorBackgroundKeyToken.BrandPrimary, + val contentColor: OudsColorContentKeyToken = OudsColorContentKeyToken.BrandPrimary, + val disabledContainerColor: OudsColorActionKeyToken = OudsColorActionKeyToken.Disabled, + val disabledContentColor: OudsColorContentKeyToken = OudsColorContentKeyToken.Disabled, val cornerRadius: OudsBorderRadiusKeyToken = OudsBorderRadiusKeyToken.None, val defaultElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val pressedElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, diff --git a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt index 8935e3e3..2d23583e 100644 --- a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt +++ b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt @@ -15,7 +15,7 @@ package com.orange.ouds.theme.orangecountry import androidx.compose.ui.graphics.Color import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken -import com.orange.ouds.theme.tokens.OudsColorKeyToken +import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens import com.orange.ouds.theme.tokens.semantic.OudsColorBgSemanticTokens @@ -38,6 +38,6 @@ class OrangeCountryTheme : OrangeTheme() { override val componentsTokens: OudsComponentsTokens get() = OudsComponentsTokens( - button = OudsButtonTokens(containerColor = OudsColorKeyToken.BgStatusAccentEmphasized, cornerRadius = OudsBorderRadiusKeyToken.Short) + button = OudsButtonTokens(containerColor = OudsColorBackgroundKeyToken.StatusAccentEmphasized, cornerRadius = OudsBorderRadiusKeyToken.Short) ) } \ No newline at end of file From f6ee355ef2b1a86c998ab5977626f826d8bea63c Mon Sep 17 00:00:00 2001 From: Pauline Auvray Date: Fri, 25 Oct 2024 11:27:42 +0200 Subject: [PATCH 33/33] Improve color key tokens organization --- .../java/com/orange/ouds/app/ui/MainScreen.kt | 4 +- .../java/com/orange/ouds/app/ui/TopBar.kt | 6 +- .../app/ui/components/ComponentsScreen.kt | 4 +- .../ui/tokens/TokenCategoryDetailScreen.kt | 6 +- .../ouds/app/ui/tokens/TokenProperty.kt | 4 +- .../ui/tokens/TokenPropertyIllustration.kt | 22 +- .../composable/DetailScreenHeader.kt | 9 +- .../app/ui/utilities/composable/LargeCard.kt | 12 +- .../app/ui/utilities/composable/Screen.kt | 4 +- .../ouds/core/component/button/OudsButton.kt | 4 +- .../orange/ouds/core/theme/OudsColorScheme.kt | 453 +++++++++--------- .../orange/ouds/core/utilities/OudsPreview.kt | 4 +- .../ouds/theme/tokens/OudsColorKeyToken.kt | 444 ++++++++--------- .../tokens/components/OudsButtonTokens.kt | 12 +- .../theme/orangecountry/OrangeCountryTheme.kt | 4 +- 15 files changed, 489 insertions(+), 503 deletions(-) diff --git a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt index f455b0ab..f67a075d 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/MainScreen.kt @@ -57,7 +57,7 @@ import com.orange.ouds.theme.OudsThemeContract import com.orange.ouds.theme.orange.ORANGE_THEME_NAME import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.orangecountry.OrangeCountryTheme -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.whitelabel.WhiteLabelTheme @@ -155,7 +155,7 @@ private fun ChangeThemeDialog(themeManager: ThemeManager, dismissDialog: () -> U Dialog(onDismissRequest = dismissDialog) { Column( modifier = Modifier - .background(OudsColorBackgroundKeyToken.Secondary.value) + .background(OudsColorKeyToken.Background.Secondary.value) .selectableGroup() ) { Text( diff --git a/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt b/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt index ec0a8902..e9f457df 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/TopBar.kt @@ -34,7 +34,7 @@ import com.orange.ouds.app.ui.utilities.isDarkModeEnabled import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken @@ -70,7 +70,7 @@ private fun TopBar( Image( imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(id = R.string.app_common_back_a11y), - colorFilter = ColorFilter.tint(OudsColorContentKeyToken.Default.value) + colorFilter = ColorFilter.tint(OudsColorKeyToken.Content.Default.value) ) } } @@ -78,7 +78,7 @@ private fun TopBar( title = { Text( text = title, - color = OudsColorContentKeyToken.Default.value, + color = OudsColorKeyToken.Content.Default.value, modifier = Modifier.semantics { traversalIndex = -1f }, style = OudsTypographyKeyToken.HeadingMedium.value ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt index 66c1df80..5f2df873 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/components/ComponentsScreen.kt @@ -30,7 +30,7 @@ import com.orange.ouds.core.component.button.OudsButton import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken @@ -51,7 +51,7 @@ fun ComponentsScreen() { .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) .width(OudsGridKeyToken.Margin.value) .height(OudsGridKeyToken.ColumnGap.value) - .background(OudsColorBackgroundKeyToken.BrandPrimary.value) + .background(OudsColorKeyToken.Background.BrandPrimary.value) ) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt index d1c27ff1..a5fed052 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenCategoryDetailScreen.kt @@ -40,7 +40,7 @@ import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews import com.orange.ouds.theme.OudsBorderStyle -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken @@ -109,7 +109,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: maxLines = 1, overflow = TextOverflow.Ellipsis, style = OudsTypographyKeyToken.BodyDefaultMedium.value, - color = OudsColorContentKeyToken.Muted.value + color = OudsColorKeyToken.Content.Muted.value ) } } else { @@ -143,7 +143,7 @@ fun TokenCategoryDetailScreen(tokenCategory: TokenCategory, onSubcategoryClick: text = token.literalValue, maxLines = 1, overflow = TextOverflow.Ellipsis, - style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorContentKeyToken.Muted.value) + style = OudsTypographyKeyToken.BodyDefaultMedium.value.copy(color = OudsColorKeyToken.Content.Muted.value) ) } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt index a93ec1a8..ae2c801e 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenProperty.kt @@ -43,7 +43,7 @@ import com.orange.ouds.foundation.extensions.orElse import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken import com.orange.ouds.theme.tokens.OudsBorderStyleKeyToken import com.orange.ouds.theme.tokens.OudsBorderWidthKeyToken -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsGridKeyToken import com.orange.ouds.theme.tokens.OudsOpacityKeyToken @@ -77,7 +77,7 @@ sealed class TokenProperty( @Composable fun Illustration(elevation: Dp) { Surface(shadowElevation = elevation) { - IllustrationBox(backgroundColor = OudsColorBackgroundKeyToken.Secondary.value) + IllustrationBox(backgroundColor = OudsColorKeyToken.Background.Secondary.value) } } } diff --git a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt index 1182819c..4eda6f90 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/tokens/TokenPropertyIllustration.kt @@ -40,9 +40,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.theme.OudsBorderStyle import com.orange.ouds.theme.dashedBorder import com.orange.ouds.theme.dottedBorder -import com.orange.ouds.theme.tokens.OudsColorAlwaysKeyToken -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken private val defaultIllustrationSize = 64.dp @@ -50,7 +48,7 @@ private val defaultIllustrationSize = 64.dp @Composable fun IllustrationBox( modifier: Modifier = Modifier, - backgroundColor: Color = OudsColorBackgroundKeyToken.Emphasized.value, + backgroundColor: Color = OudsColorKeyToken.Background.Emphasized.value, contentAlignment: Alignment = Alignment.TopStart, content: @Composable BoxScope.() -> Unit = { } ) { @@ -70,14 +68,14 @@ fun BorderIllustrationBox( shape: Shape = RectangleShape, style: OudsBorderStyle = OudsBorderStyle.Solid ) { - val borderColor = OudsColorContentKeyToken.Default.value + val borderColor = OudsColorKeyToken.Content.Default.value val modifier = when (style) { OudsBorderStyle.None -> Modifier OudsBorderStyle.Solid -> Modifier.border(width = width, color = borderColor, shape = shape) OudsBorderStyle.Dashed -> Modifier.dashedBorder(width = width, color = borderColor, shape = shape) OudsBorderStyle.Dotted -> Modifier.dottedBorder(width = width, color = borderColor, shape = shape) } - IllustrationBox(modifier = modifier, backgroundColor = OudsColorBackgroundKeyToken.Secondary.value) + IllustrationBox(modifier = modifier, backgroundColor = OudsColorKeyToken.Background.Secondary.value) } @Composable @@ -97,7 +95,7 @@ fun SpaceIllustrationBox( } IllustrationBox(contentAlignment = contentAlignment) { Box( - modifier = dimensionBoxModifier.background(color = OudsColorAlwaysKeyToken.Info.value) + modifier = dimensionBoxModifier.background(color = OudsColorKeyToken.Always.Info.value) ) } } @@ -116,14 +114,14 @@ fun SpacePaddingInlineWithImageIllustrationRow( Row( modifier = modifier .size(defaultIllustrationSize) - .background(color = OudsColorBackgroundKeyToken.Emphasized.value), + .background(color = OudsColorKeyToken.Background.Emphasized.value), verticalAlignment = Alignment.CenterVertically ) { Box( modifier = Modifier .fillMaxHeight() .width(width = spaceSize) - .background(color = OudsColorAlwaysKeyToken.Info.value) + .background(color = OudsColorKeyToken.Always.Info.value) ) Image( modifier = imageModifier, @@ -140,7 +138,7 @@ fun GridIllustrations() { modifier = Modifier .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorBackgroundKeyToken.Emphasized.value), + .background(OudsColorKeyToken.Background.Emphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_column_margin), contentDescription = null ) @@ -149,7 +147,7 @@ fun GridIllustrations() { .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorBackgroundKeyToken.Emphasized.value), + .background(OudsColorKeyToken.Background.Emphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_min_width), contentDescription = null ) @@ -158,7 +156,7 @@ fun GridIllustrations() { .fillMaxWidth() .padding(horizontal = OudsSpaceKeyToken.Fixed.Medium.value) .padding(top = OudsSpaceKeyToken.Fixed.Medium.value) - .background(OudsColorBackgroundKeyToken.Emphasized.value), + .background(OudsColorKeyToken.Background.Emphasized.value), painter = painterResource(id = R.drawable.il_tokens_grid_max_width), contentDescription = null ) diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt index 69643c8f..62a6fe74 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/DetailScreenHeader.kt @@ -32,8 +32,7 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken @@ -45,12 +44,12 @@ fun DetailScreenHeader( Column { Image( painter = painterResource(imageRes), - colorFilter = ColorFilter.tint(OudsColorContentKeyToken.DefaultOnBgEmphasized.value), + colorFilter = ColorFilter.tint(OudsColorKeyToken.Content.DefaultOnBgEmphasized.value), contentDescription = null, modifier = Modifier .fillMaxWidth() .height(186.dp) - .background(OudsColorBackgroundKeyToken.Emphasized.value), + .background(OudsColorKeyToken.Background.Emphasized.value), contentScale = ContentScale.None ) @@ -69,7 +68,7 @@ private fun DetailScreenDescription( Text( modifier = modifier, text = stringResource(descriptionRes), - color = OudsColorContentKeyToken.Default.value, + color = OudsColorKeyToken.Content.Default.value, style = OudsTypographyKeyToken.BodyDefaultLarge.value ) } diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt index cdb7b99a..02713ad7 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/LargeCard.kt @@ -34,9 +34,7 @@ import com.orange.ouds.app.R import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken -import com.orange.ouds.theme.tokens.OudsColorElevationKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken @@ -52,15 +50,15 @@ fun LargeCard( modifier: Modifier = Modifier, ) { Card(modifier = modifier, shape = RectangleShape, elevation = cardElevation(defaultElevation = OudsElevationKeyToken.Raised.value), onClick = onClick) { - Column(modifier = Modifier.background(OudsColorElevationKeyToken.Raised.value)) { + Column(modifier = Modifier.background(OudsColorKeyToken.Elevation.Raised.value)) { Image( painter = painterResource(imageRes), - colorFilter = ColorFilter.tint(OudsColorContentKeyToken.DefaultOnBgEmphasized.value), + colorFilter = ColorFilter.tint(OudsColorKeyToken.Content.DefaultOnBgEmphasized.value), contentDescription = null, modifier = Modifier .fillMaxWidth() .height(184.dp) - .background(OudsColorBackgroundKeyToken.Emphasized.value), + .background(OudsColorKeyToken.Background.Emphasized.value), contentScale = ContentScale.None ) Column( @@ -68,7 +66,7 @@ fun LargeCard( ) { Text( text = title, - color = OudsColorContentKeyToken.Default.value, + color = OudsColorKeyToken.Content.Default.value, overflow = TextOverflow.Ellipsis, maxLines = 1, style = OudsTypographyKeyToken.HeadingMedium.value diff --git a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt index 6e9ca0c6..fef5b794 100644 --- a/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt +++ b/app/src/main/java/com/orange/ouds/app/ui/utilities/composable/Screen.kt @@ -20,14 +20,14 @@ import androidx.compose.ui.Modifier import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun Screen(content: @Composable () -> Unit) { Box( modifier = Modifier .fillMaxSize() - .background(OudsColorBackgroundKeyToken.Primary.value) + .background(OudsColorKeyToken.Background.Primary.value) ) { content() } diff --git a/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt b/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt index 8d4842e3..be40f5ec 100644 --- a/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt +++ b/core/src/main/java/com/orange/ouds/core/component/button/OudsButton.kt @@ -28,7 +28,7 @@ import com.orange.ouds.core.theme.value import com.orange.ouds.core.utilities.OudsPreview import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider import com.orange.ouds.foundation.utilities.UiModePreviews -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken @Composable fun OudsButton( @@ -66,7 +66,7 @@ fun OudsButton( modifier = modifier, text = text, style = labelStyle.value, - color = OudsColorContentKeyToken.OnActionPrimaryEnabled.value + color = OudsColorKeyToken.Content.OnActionPrimaryEnabled.value ) } } diff --git a/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt b/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt index f66bcdb2..fbfac2e1 100644 --- a/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt +++ b/core/src/main/java/com/orange/ouds/core/theme/OudsColorScheme.kt @@ -19,16 +19,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.Stable import androidx.compose.ui.graphics.Color -import com.orange.ouds.theme.tokens.OudsColorActionKeyToken -import com.orange.ouds.theme.tokens.OudsColorAlwaysKeyToken -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken -import com.orange.ouds.theme.tokens.OudsColorBorderKeyToken -import com.orange.ouds.theme.tokens.OudsColorBrandKeyToken -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken -import com.orange.ouds.theme.tokens.OudsColorDecorativeKeyToken -import com.orange.ouds.theme.tokens.OudsColorElevationKeyToken -import com.orange.ouds.theme.tokens.OudsColorGlobalKeyToken -import com.orange.ouds.theme.tokens.OudsColorGradientKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.semantic.OudsColorSemanticTokens data class OudsColorScheme( @@ -730,264 +721,264 @@ val OudsColorSemanticTokens.darkColorScheme: OudsColorScheme ) @Stable -fun OudsColorScheme.fromToken(token: OudsColorActionKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Action): Color { return when (token) { - OudsColorActionKeyToken.Disabled -> actionColors.disabled - OudsColorActionKeyToken.DisabledOnBgEmphasized -> actionColors.disabledOnBgEmphasized - OudsColorActionKeyToken.NegativeEnabled -> actionColors.negativeEnabled - OudsColorActionKeyToken.NegativeFocus -> actionColors.negativeFocus - OudsColorActionKeyToken.NegativeHover -> actionColors.negativeHover - OudsColorActionKeyToken.NegativeLoading -> actionColors.negativeLoading - OudsColorActionKeyToken.NegativePressed -> actionColors.negativePressed - OudsColorActionKeyToken.PrimaryEnabled -> actionColors.primaryEnabled - OudsColorActionKeyToken.PrimaryEnabledOnBgEmphasized -> actionColors.primaryEnabledOnBgEmphasized - OudsColorActionKeyToken.PrimaryFocus -> actionColors.primaryFocus - OudsColorActionKeyToken.PrimaryFocusOnBgEmphasized -> actionColors.primaryFocusOnBgEmphasized - OudsColorActionKeyToken.PrimaryHover -> actionColors.primaryHover - OudsColorActionKeyToken.PrimaryHoverOnBgEmphasized -> actionColors.primaryHoverOnBgEmphasized - OudsColorActionKeyToken.PrimaryLoading -> actionColors.primaryLoading - OudsColorActionKeyToken.PrimaryLoadingOnBgEmphasized -> actionColors.primaryLoadingOnBgEmphasized - OudsColorActionKeyToken.PrimaryPressed -> actionColors.primaryPressed - OudsColorActionKeyToken.PrimaryPressedOnBgEmphasized -> actionColors.primaryPressedOnBgEmphasized - OudsColorActionKeyToken.SecondaryEnabled -> actionColors.secondaryEnabled - OudsColorActionKeyToken.SecondaryEnabledOnBgEmphasized -> actionColors.secondaryEnabledOnBgEmphasized - OudsColorActionKeyToken.SecondaryFocus -> actionColors.secondaryFocus - OudsColorActionKeyToken.SecondaryFocusOnBgEmphasized -> actionColors.secondaryFocusOnBgEmphasized - OudsColorActionKeyToken.SecondaryHover -> actionColors.secondaryHover - OudsColorActionKeyToken.SecondaryHoverOnBgEmphasized -> actionColors.secondaryHoverOnBgEmphasized - OudsColorActionKeyToken.SecondaryLoading -> actionColors.secondaryLoading - OudsColorActionKeyToken.SecondaryLoadingOnBgEmphasized -> actionColors.secondaryLoadingOnBgEmphasized - OudsColorActionKeyToken.SecondaryPressed -> actionColors.secondaryPressed - OudsColorActionKeyToken.SecondaryPressedOnBgEmphasized -> actionColors.secondaryPressedOnBgEmphasized - OudsColorActionKeyToken.Selected -> actionColors.selected - OudsColorActionKeyToken.SelectedOnBgEmphasized -> actionColors.selectedOnBgEmphasized - OudsColorActionKeyToken.Visited -> actionColors.visited - OudsColorActionKeyToken.VisitedOnBgEmphasized -> actionColors.visitedOnBgEmphasized + OudsColorKeyToken.Action.Disabled -> actionColors.disabled + OudsColorKeyToken.Action.DisabledOnBgEmphasized -> actionColors.disabledOnBgEmphasized + OudsColorKeyToken.Action.NegativeEnabled -> actionColors.negativeEnabled + OudsColorKeyToken.Action.NegativeFocus -> actionColors.negativeFocus + OudsColorKeyToken.Action.NegativeHover -> actionColors.negativeHover + OudsColorKeyToken.Action.NegativeLoading -> actionColors.negativeLoading + OudsColorKeyToken.Action.NegativePressed -> actionColors.negativePressed + OudsColorKeyToken.Action.PrimaryEnabled -> actionColors.primaryEnabled + OudsColorKeyToken.Action.PrimaryEnabledOnBgEmphasized -> actionColors.primaryEnabledOnBgEmphasized + OudsColorKeyToken.Action.PrimaryFocus -> actionColors.primaryFocus + OudsColorKeyToken.Action.PrimaryFocusOnBgEmphasized -> actionColors.primaryFocusOnBgEmphasized + OudsColorKeyToken.Action.PrimaryHover -> actionColors.primaryHover + OudsColorKeyToken.Action.PrimaryHoverOnBgEmphasized -> actionColors.primaryHoverOnBgEmphasized + OudsColorKeyToken.Action.PrimaryLoading -> actionColors.primaryLoading + OudsColorKeyToken.Action.PrimaryLoadingOnBgEmphasized -> actionColors.primaryLoadingOnBgEmphasized + OudsColorKeyToken.Action.PrimaryPressed -> actionColors.primaryPressed + OudsColorKeyToken.Action.PrimaryPressedOnBgEmphasized -> actionColors.primaryPressedOnBgEmphasized + OudsColorKeyToken.Action.SecondaryEnabled -> actionColors.secondaryEnabled + OudsColorKeyToken.Action.SecondaryEnabledOnBgEmphasized -> actionColors.secondaryEnabledOnBgEmphasized + OudsColorKeyToken.Action.SecondaryFocus -> actionColors.secondaryFocus + OudsColorKeyToken.Action.SecondaryFocusOnBgEmphasized -> actionColors.secondaryFocusOnBgEmphasized + OudsColorKeyToken.Action.SecondaryHover -> actionColors.secondaryHover + OudsColorKeyToken.Action.SecondaryHoverOnBgEmphasized -> actionColors.secondaryHoverOnBgEmphasized + OudsColorKeyToken.Action.SecondaryLoading -> actionColors.secondaryLoading + OudsColorKeyToken.Action.SecondaryLoadingOnBgEmphasized -> actionColors.secondaryLoadingOnBgEmphasized + OudsColorKeyToken.Action.SecondaryPressed -> actionColors.secondaryPressed + OudsColorKeyToken.Action.SecondaryPressedOnBgEmphasized -> actionColors.secondaryPressedOnBgEmphasized + OudsColorKeyToken.Action.Selected -> actionColors.selected + OudsColorKeyToken.Action.SelectedOnBgEmphasized -> actionColors.selectedOnBgEmphasized + OudsColorKeyToken.Action.Visited -> actionColors.visited + OudsColorKeyToken.Action.VisitedOnBgEmphasized -> actionColors.visitedOnBgEmphasized } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorAlwaysKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Always): Color { return when (token) { - OudsColorAlwaysKeyToken.Accent -> alwaysColors.accent - OudsColorAlwaysKeyToken.Black -> alwaysColors.black - OudsColorAlwaysKeyToken.Info -> alwaysColors.info - OudsColorAlwaysKeyToken.Negative -> alwaysColors.negative - OudsColorAlwaysKeyToken.OnAccent -> alwaysColors.onAccent - OudsColorAlwaysKeyToken.OnBlack -> alwaysColors.onBlack - OudsColorAlwaysKeyToken.OnInfo -> alwaysColors.onInfo - OudsColorAlwaysKeyToken.OnNegative -> alwaysColors.onNegative - OudsColorAlwaysKeyToken.OnPositive -> alwaysColors.onPositive - OudsColorAlwaysKeyToken.OnWarning -> alwaysColors.onWarning - OudsColorAlwaysKeyToken.OnWhite -> alwaysColors.onWhite - OudsColorAlwaysKeyToken.Positive -> alwaysColors.positive - OudsColorAlwaysKeyToken.Warning -> alwaysColors.warning - OudsColorAlwaysKeyToken.White -> alwaysColors.white + OudsColorKeyToken.Always.Accent -> alwaysColors.accent + OudsColorKeyToken.Always.Black -> alwaysColors.black + OudsColorKeyToken.Always.Info -> alwaysColors.info + OudsColorKeyToken.Always.Negative -> alwaysColors.negative + OudsColorKeyToken.Always.OnAccent -> alwaysColors.onAccent + OudsColorKeyToken.Always.OnBlack -> alwaysColors.onBlack + OudsColorKeyToken.Always.OnInfo -> alwaysColors.onInfo + OudsColorKeyToken.Always.OnNegative -> alwaysColors.onNegative + OudsColorKeyToken.Always.OnPositive -> alwaysColors.onPositive + OudsColorKeyToken.Always.OnWarning -> alwaysColors.onWarning + OudsColorKeyToken.Always.OnWhite -> alwaysColors.onWhite + OudsColorKeyToken.Always.Positive -> alwaysColors.positive + OudsColorKeyToken.Always.Warning -> alwaysColors.warning + OudsColorKeyToken.Always.White -> alwaysColors.white } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorBackgroundKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Background): Color { return when (token) { - OudsColorBackgroundKeyToken.BrandPrimary -> backgroundColors.brandPrimary - OudsColorBackgroundKeyToken.Emphasized -> backgroundColors.emphasized - OudsColorBackgroundKeyToken.Primary -> backgroundColors.primary - OudsColorBackgroundKeyToken.Secondary -> backgroundColors.secondary - OudsColorBackgroundKeyToken.StatusAccentEmphasized -> backgroundColors.statusAccentEmphasized - OudsColorBackgroundKeyToken.StatusAccentMuted -> backgroundColors.statusAccentMuted - OudsColorBackgroundKeyToken.StatusAccentMutedOnBgEmphasized -> backgroundColors.statusAccentMutedOnBgEmphasized - OudsColorBackgroundKeyToken.StatusInfoEmphasized -> backgroundColors.statusInfoEmphasized - OudsColorBackgroundKeyToken.StatusInfoMuted -> backgroundColors.statusInfoMuted - OudsColorBackgroundKeyToken.StatusInfoMutedOnBgEmphasized -> backgroundColors.statusInfoMutedOnBgEmphasized - OudsColorBackgroundKeyToken.StatusNegativeEmphasized -> backgroundColors.statusNegativeEmphasized - OudsColorBackgroundKeyToken.StatusNegativeMuted -> backgroundColors.statusNegativeMuted - OudsColorBackgroundKeyToken.StatusNegativeMutedOnBgEmphasized -> backgroundColors.statusNegativeMutedOnBgEmphasized - OudsColorBackgroundKeyToken.StatusNeutral -> backgroundColors.statusNeutral - OudsColorBackgroundKeyToken.StatusNeutralOnBgEmphasized -> backgroundColors.statusNeutralOnBgEmphasized - OudsColorBackgroundKeyToken.StatusPositiveEmphasized -> backgroundColors.statusPositiveEmphasized - OudsColorBackgroundKeyToken.StatusPositiveMuted -> backgroundColors.statusPositiveMuted - OudsColorBackgroundKeyToken.StatusPositiveMutedOnBgEmphasized -> backgroundColors.statusPositiveMutedOnBgEmphasized - OudsColorBackgroundKeyToken.StatusWarningEmphasized -> backgroundColors.statusWarningEmphasized - OudsColorBackgroundKeyToken.StatusWarningMuted -> backgroundColors.statusWarningMuted - OudsColorBackgroundKeyToken.StatusWarningMutedOnBgEmphasized -> backgroundColors.statusWarningMutedOnBgEmphasized - OudsColorBackgroundKeyToken.Tertiary -> backgroundColors.tertiary + OudsColorKeyToken.Background.BrandPrimary -> backgroundColors.brandPrimary + OudsColorKeyToken.Background.Emphasized -> backgroundColors.emphasized + OudsColorKeyToken.Background.Primary -> backgroundColors.primary + OudsColorKeyToken.Background.Secondary -> backgroundColors.secondary + OudsColorKeyToken.Background.StatusAccentEmphasized -> backgroundColors.statusAccentEmphasized + OudsColorKeyToken.Background.StatusAccentMuted -> backgroundColors.statusAccentMuted + OudsColorKeyToken.Background.StatusAccentMutedOnBgEmphasized -> backgroundColors.statusAccentMutedOnBgEmphasized + OudsColorKeyToken.Background.StatusInfoEmphasized -> backgroundColors.statusInfoEmphasized + OudsColorKeyToken.Background.StatusInfoMuted -> backgroundColors.statusInfoMuted + OudsColorKeyToken.Background.StatusInfoMutedOnBgEmphasized -> backgroundColors.statusInfoMutedOnBgEmphasized + OudsColorKeyToken.Background.StatusNegativeEmphasized -> backgroundColors.statusNegativeEmphasized + OudsColorKeyToken.Background.StatusNegativeMuted -> backgroundColors.statusNegativeMuted + OudsColorKeyToken.Background.StatusNegativeMutedOnBgEmphasized -> backgroundColors.statusNegativeMutedOnBgEmphasized + OudsColorKeyToken.Background.StatusNeutral -> backgroundColors.statusNeutral + OudsColorKeyToken.Background.StatusNeutralOnBgEmphasized -> backgroundColors.statusNeutralOnBgEmphasized + OudsColorKeyToken.Background.StatusPositiveEmphasized -> backgroundColors.statusPositiveEmphasized + OudsColorKeyToken.Background.StatusPositiveMuted -> backgroundColors.statusPositiveMuted + OudsColorKeyToken.Background.StatusPositiveMutedOnBgEmphasized -> backgroundColors.statusPositiveMutedOnBgEmphasized + OudsColorKeyToken.Background.StatusWarningEmphasized -> backgroundColors.statusWarningEmphasized + OudsColorKeyToken.Background.StatusWarningMuted -> backgroundColors.statusWarningMuted + OudsColorKeyToken.Background.StatusWarningMutedOnBgEmphasized -> backgroundColors.statusWarningMutedOnBgEmphasized + OudsColorKeyToken.Background.Tertiary -> backgroundColors.tertiary } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorBorderKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Border): Color { return when (token) { - OudsColorBorderKeyToken.BrandPrimary -> borderColors.brandPrimary - OudsColorBorderKeyToken.BrandPrimaryOnBgEmphasized -> borderColors.brandPrimaryOnBgEmphasized - OudsColorBorderKeyToken.Default -> borderColors.default - OudsColorBorderKeyToken.DefaultOnBgEmphasized -> borderColors.defaultOnBgEmphasized - OudsColorBorderKeyToken.Emphasized -> borderColors.emphasized - OudsColorBorderKeyToken.EmphasizedOnBgEmphasized -> borderColors.emphasizedOnBgEmphasized - OudsColorBorderKeyToken.Focus -> borderColors.focus - OudsColorBorderKeyToken.FocusInset -> borderColors.focusInset - OudsColorBorderKeyToken.FocusInsetOnBgEmphasized -> borderColors.focusInsetOnBgEmphasized - OudsColorBorderKeyToken.FocusOnBgEmphasized -> borderColors.focusOnBgEmphasized - OudsColorBorderKeyToken.OnBrandPrimary -> borderColors.onBrandPrimary + OudsColorKeyToken.Border.BrandPrimary -> borderColors.brandPrimary + OudsColorKeyToken.Border.BrandPrimaryOnBgEmphasized -> borderColors.brandPrimaryOnBgEmphasized + OudsColorKeyToken.Border.Default -> borderColors.default + OudsColorKeyToken.Border.DefaultOnBgEmphasized -> borderColors.defaultOnBgEmphasized + OudsColorKeyToken.Border.Emphasized -> borderColors.emphasized + OudsColorKeyToken.Border.EmphasizedOnBgEmphasized -> borderColors.emphasizedOnBgEmphasized + OudsColorKeyToken.Border.Focus -> borderColors.focus + OudsColorKeyToken.Border.FocusInset -> borderColors.focusInset + OudsColorKeyToken.Border.FocusInsetOnBgEmphasized -> borderColors.focusInsetOnBgEmphasized + OudsColorKeyToken.Border.FocusOnBgEmphasized -> borderColors.focusOnBgEmphasized + OudsColorKeyToken.Border.OnBrandPrimary -> borderColors.onBrandPrimary } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorBrandKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Brand): Color { return when (token) { - OudsColorBrandKeyToken.AccentDefault -> brandColors.accentDefault - OudsColorBrandKeyToken.AccentHigh -> brandColors.accentHigh - OudsColorBrandKeyToken.AccentHighest -> brandColors.accentHighest - OudsColorBrandKeyToken.AccentLowest -> brandColors.accentLowest - OudsColorBrandKeyToken.InfoDefault -> brandColors.infoDefault - OudsColorBrandKeyToken.InfoHighest -> brandColors.infoHighest - OudsColorBrandKeyToken.InfoLowest -> brandColors.infoLowest - OudsColorBrandKeyToken.NegativeDefault -> brandColors.negativeDefault - OudsColorBrandKeyToken.NegativeHigh -> brandColors.negativeHigh - OudsColorBrandKeyToken.NegativeHigher -> brandColors.negativeHigher - OudsColorBrandKeyToken.NegativeHighest -> brandColors.negativeHighest - OudsColorBrandKeyToken.NegativeLowest -> brandColors.negativeLowest - OudsColorBrandKeyToken.NeutralEmphasizedBlack -> brandColors.neutralEmphasizedBlack - OudsColorBrandKeyToken.NeutralEmphasizedHigh -> brandColors.neutralEmphasizedHigh - OudsColorBrandKeyToken.NeutralEmphasizedHigher -> brandColors.neutralEmphasizedHigher - OudsColorBrandKeyToken.NeutralEmphasizedHighest -> brandColors.neutralEmphasizedHighest - OudsColorBrandKeyToken.NeutralEmphasizedLow -> brandColors.neutralEmphasizedLow - OudsColorBrandKeyToken.NeutralEmphasizedLower -> brandColors.neutralEmphasizedLower - OudsColorBrandKeyToken.NeutralEmphasizedLowest -> brandColors.neutralEmphasizedLowest - OudsColorBrandKeyToken.NeutralEmphasizedMedium -> brandColors.neutralEmphasizedMedium - OudsColorBrandKeyToken.NeutralMutedHighest -> brandColors.neutralMutedHighest - OudsColorBrandKeyToken.NeutralMutedLow -> brandColors.neutralMutedLow - OudsColorBrandKeyToken.NeutralMutedLower -> brandColors.neutralMutedLower - OudsColorBrandKeyToken.NeutralMutedLowest -> brandColors.neutralMutedLowest - OudsColorBrandKeyToken.NeutralMutedMedium -> brandColors.neutralMutedMedium - OudsColorBrandKeyToken.NeutralMutedWhite -> brandColors.neutralMutedWhite - OudsColorBrandKeyToken.PositiveDefault -> brandColors.positiveDefault - OudsColorBrandKeyToken.PositiveHighest -> brandColors.positiveHighest - OudsColorBrandKeyToken.PositiveLowest -> brandColors.positiveLowest - OudsColorBrandKeyToken.PrimaryDefault -> brandColors.primaryDefault - OudsColorBrandKeyToken.PrimaryLow -> brandColors.primaryLow - OudsColorBrandKeyToken.WarningDefault -> brandColors.warningDefault - OudsColorBrandKeyToken.WarningHigh -> brandColors.warningHigh - OudsColorBrandKeyToken.WarningHighest -> brandColors.warningHighest - OudsColorBrandKeyToken.WarningLowest -> brandColors.warningLowest + OudsColorKeyToken.Brand.AccentDefault -> brandColors.accentDefault + OudsColorKeyToken.Brand.AccentHigh -> brandColors.accentHigh + OudsColorKeyToken.Brand.AccentHighest -> brandColors.accentHighest + OudsColorKeyToken.Brand.AccentLowest -> brandColors.accentLowest + OudsColorKeyToken.Brand.InfoDefault -> brandColors.infoDefault + OudsColorKeyToken.Brand.InfoHighest -> brandColors.infoHighest + OudsColorKeyToken.Brand.InfoLowest -> brandColors.infoLowest + OudsColorKeyToken.Brand.NegativeDefault -> brandColors.negativeDefault + OudsColorKeyToken.Brand.NegativeHigh -> brandColors.negativeHigh + OudsColorKeyToken.Brand.NegativeHigher -> brandColors.negativeHigher + OudsColorKeyToken.Brand.NegativeHighest -> brandColors.negativeHighest + OudsColorKeyToken.Brand.NegativeLowest -> brandColors.negativeLowest + OudsColorKeyToken.Brand.NeutralEmphasizedBlack -> brandColors.neutralEmphasizedBlack + OudsColorKeyToken.Brand.NeutralEmphasizedHigh -> brandColors.neutralEmphasizedHigh + OudsColorKeyToken.Brand.NeutralEmphasizedHigher -> brandColors.neutralEmphasizedHigher + OudsColorKeyToken.Brand.NeutralEmphasizedHighest -> brandColors.neutralEmphasizedHighest + OudsColorKeyToken.Brand.NeutralEmphasizedLow -> brandColors.neutralEmphasizedLow + OudsColorKeyToken.Brand.NeutralEmphasizedLower -> brandColors.neutralEmphasizedLower + OudsColorKeyToken.Brand.NeutralEmphasizedLowest -> brandColors.neutralEmphasizedLowest + OudsColorKeyToken.Brand.NeutralEmphasizedMedium -> brandColors.neutralEmphasizedMedium + OudsColorKeyToken.Brand.NeutralMutedHighest -> brandColors.neutralMutedHighest + OudsColorKeyToken.Brand.NeutralMutedLow -> brandColors.neutralMutedLow + OudsColorKeyToken.Brand.NeutralMutedLower -> brandColors.neutralMutedLower + OudsColorKeyToken.Brand.NeutralMutedLowest -> brandColors.neutralMutedLowest + OudsColorKeyToken.Brand.NeutralMutedMedium -> brandColors.neutralMutedMedium + OudsColorKeyToken.Brand.NeutralMutedWhite -> brandColors.neutralMutedWhite + OudsColorKeyToken.Brand.PositiveDefault -> brandColors.positiveDefault + OudsColorKeyToken.Brand.PositiveHighest -> brandColors.positiveHighest + OudsColorKeyToken.Brand.PositiveLowest -> brandColors.positiveLowest + OudsColorKeyToken.Brand.PrimaryDefault -> brandColors.primaryDefault + OudsColorKeyToken.Brand.PrimaryLow -> brandColors.primaryLow + OudsColorKeyToken.Brand.WarningDefault -> brandColors.warningDefault + OudsColorKeyToken.Brand.WarningHigh -> brandColors.warningHigh + OudsColorKeyToken.Brand.WarningHighest -> brandColors.warningHighest + OudsColorKeyToken.Brand.WarningLowest -> brandColors.warningLowest } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorContentKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Content): Color { return when (token) { - OudsColorContentKeyToken.BrandPrimary -> contentColors.brandPrimary - OudsColorContentKeyToken.BrandPrimaryOnBgEmphasized -> contentColors.brandPrimaryOnBgEmphasized - OudsColorContentKeyToken.Default -> contentColors.default - OudsColorContentKeyToken.DefaultOnBgEmphasized -> contentColors.defaultOnBgEmphasized - OudsColorContentKeyToken.Disabled -> contentColors.disabled - OudsColorContentKeyToken.DisabledOnBgEmphasized -> contentColors.disabledOnBgEmphasized - OudsColorContentKeyToken.Muted -> contentColors.muted - OudsColorContentKeyToken.MutedOnBgEmphasized -> contentColors.mutedOnBgEmphasized - OudsColorContentKeyToken.OnActionDisabled -> contentColors.onActionDisabled - OudsColorContentKeyToken.OnActionDisabledOnBgEmphasized -> contentColors.onActionDisabledOnBgEmphasized - OudsColorContentKeyToken.OnActionNegative -> contentColors.onActionNegative - OudsColorContentKeyToken.OnActionPrimaryEnabled -> contentColors.onActionPrimaryEnabled - OudsColorContentKeyToken.OnActionPrimaryEnabledOnBgEmphasized -> contentColors.onActionPrimaryEnabledOnBgEmphasized - OudsColorContentKeyToken.OnActionPrimaryFocus -> contentColors.onActionPrimaryFocus - OudsColorContentKeyToken.OnActionPrimaryFocusOnBgEmphasized -> contentColors.onActionPrimaryFocusOnBgEmphasized - OudsColorContentKeyToken.OnActionPrimaryHover -> contentColors.onActionPrimaryHover - OudsColorContentKeyToken.OnActionPrimaryHoverOnBgEmphasized -> contentColors.onActionPrimaryHoverOnBgEmphasized - OudsColorContentKeyToken.OnActionPrimaryLoading -> contentColors.onActionPrimaryLoading - OudsColorContentKeyToken.OnActionPrimaryLoadingOnBgEmphasized -> contentColors.onActionPrimaryLoadingOnBgEmphasized - OudsColorContentKeyToken.OnActionPrimaryPressed -> contentColors.onActionPrimaryPressed - OudsColorContentKeyToken.OnActionPrimaryPressedOnBgEmphasized -> contentColors.onActionPrimaryPressedOnBgEmphasized - OudsColorContentKeyToken.OnBrandPrimary -> contentColors.onBrandPrimary - OudsColorContentKeyToken.OnStatusAccentEmphasized -> contentColors.onStatusAccentEmphasized - OudsColorContentKeyToken.OnStatusAccentMuted -> contentColors.onStatusAccentMuted - OudsColorContentKeyToken.OnStatusAccentMutedOnBgEmphasized -> contentColors.onStatusAccentMutedOnBgEmphasized - OudsColorContentKeyToken.OnStatusInfoEmphasized -> contentColors.onStatusInfoEmphasized - OudsColorContentKeyToken.OnStatusInfoMuted -> contentColors.onStatusInfoMuted - OudsColorContentKeyToken.OnStatusInfoMutedOnBgEmphasized -> contentColors.onStatusInfoMutedOnBgEmphasized - OudsColorContentKeyToken.OnStatusNegativeEmphasized -> contentColors.onStatusNegativeEmphasized - OudsColorContentKeyToken.OnStatusNegativeMuted -> contentColors.onStatusNegativeMuted - OudsColorContentKeyToken.OnStatusNegativeMutedOnBgEmphasized -> contentColors.onStatusNegativeMutedOnBgEmphasized - OudsColorContentKeyToken.OnStatusPositiveEmphasized -> contentColors.onStatusPositiveEmphasized - OudsColorContentKeyToken.OnStatusPositiveMuted -> contentColors.onStatusPositiveMuted - OudsColorContentKeyToken.OnStatusPositiveMutedOnBgEmphasized -> contentColors.onStatusPositiveMutedOnBgEmphasized - OudsColorContentKeyToken.OnStatusWarningEmphasized -> contentColors.onStatusWarningEmphasized - OudsColorContentKeyToken.OnStatusWarningMuted -> contentColors.onStatusWarningMuted - OudsColorContentKeyToken.OnStatusWarningMutedOnBgEmphasized -> contentColors.onStatusWarningMutedOnBgEmphasized - OudsColorContentKeyToken.StatusInfo -> contentColors.statusInfo - OudsColorContentKeyToken.StatusNegative -> contentColors.statusNegative - OudsColorContentKeyToken.StatusPositive -> contentColors.statusPositive - OudsColorContentKeyToken.StatusWarning -> contentColors.statusWarning + OudsColorKeyToken.Content.BrandPrimary -> contentColors.brandPrimary + OudsColorKeyToken.Content.BrandPrimaryOnBgEmphasized -> contentColors.brandPrimaryOnBgEmphasized + OudsColorKeyToken.Content.Default -> contentColors.default + OudsColorKeyToken.Content.DefaultOnBgEmphasized -> contentColors.defaultOnBgEmphasized + OudsColorKeyToken.Content.Disabled -> contentColors.disabled + OudsColorKeyToken.Content.DisabledOnBgEmphasized -> contentColors.disabledOnBgEmphasized + OudsColorKeyToken.Content.Muted -> contentColors.muted + OudsColorKeyToken.Content.MutedOnBgEmphasized -> contentColors.mutedOnBgEmphasized + OudsColorKeyToken.Content.OnActionDisabled -> contentColors.onActionDisabled + OudsColorKeyToken.Content.OnActionDisabledOnBgEmphasized -> contentColors.onActionDisabledOnBgEmphasized + OudsColorKeyToken.Content.OnActionNegative -> contentColors.onActionNegative + OudsColorKeyToken.Content.OnActionPrimaryEnabled -> contentColors.onActionPrimaryEnabled + OudsColorKeyToken.Content.OnActionPrimaryEnabledOnBgEmphasized -> contentColors.onActionPrimaryEnabledOnBgEmphasized + OudsColorKeyToken.Content.OnActionPrimaryFocus -> contentColors.onActionPrimaryFocus + OudsColorKeyToken.Content.OnActionPrimaryFocusOnBgEmphasized -> contentColors.onActionPrimaryFocusOnBgEmphasized + OudsColorKeyToken.Content.OnActionPrimaryHover -> contentColors.onActionPrimaryHover + OudsColorKeyToken.Content.OnActionPrimaryHoverOnBgEmphasized -> contentColors.onActionPrimaryHoverOnBgEmphasized + OudsColorKeyToken.Content.OnActionPrimaryLoading -> contentColors.onActionPrimaryLoading + OudsColorKeyToken.Content.OnActionPrimaryLoadingOnBgEmphasized -> contentColors.onActionPrimaryLoadingOnBgEmphasized + OudsColorKeyToken.Content.OnActionPrimaryPressed -> contentColors.onActionPrimaryPressed + OudsColorKeyToken.Content.OnActionPrimaryPressedOnBgEmphasized -> contentColors.onActionPrimaryPressedOnBgEmphasized + OudsColorKeyToken.Content.OnBrandPrimary -> contentColors.onBrandPrimary + OudsColorKeyToken.Content.OnStatusAccentEmphasized -> contentColors.onStatusAccentEmphasized + OudsColorKeyToken.Content.OnStatusAccentMuted -> contentColors.onStatusAccentMuted + OudsColorKeyToken.Content.OnStatusAccentMutedOnBgEmphasized -> contentColors.onStatusAccentMutedOnBgEmphasized + OudsColorKeyToken.Content.OnStatusInfoEmphasized -> contentColors.onStatusInfoEmphasized + OudsColorKeyToken.Content.OnStatusInfoMuted -> contentColors.onStatusInfoMuted + OudsColorKeyToken.Content.OnStatusInfoMutedOnBgEmphasized -> contentColors.onStatusInfoMutedOnBgEmphasized + OudsColorKeyToken.Content.OnStatusNegativeEmphasized -> contentColors.onStatusNegativeEmphasized + OudsColorKeyToken.Content.OnStatusNegativeMuted -> contentColors.onStatusNegativeMuted + OudsColorKeyToken.Content.OnStatusNegativeMutedOnBgEmphasized -> contentColors.onStatusNegativeMutedOnBgEmphasized + OudsColorKeyToken.Content.OnStatusPositiveEmphasized -> contentColors.onStatusPositiveEmphasized + OudsColorKeyToken.Content.OnStatusPositiveMuted -> contentColors.onStatusPositiveMuted + OudsColorKeyToken.Content.OnStatusPositiveMutedOnBgEmphasized -> contentColors.onStatusPositiveMutedOnBgEmphasized + OudsColorKeyToken.Content.OnStatusWarningEmphasized -> contentColors.onStatusWarningEmphasized + OudsColorKeyToken.Content.OnStatusWarningMuted -> contentColors.onStatusWarningMuted + OudsColorKeyToken.Content.OnStatusWarningMutedOnBgEmphasized -> contentColors.onStatusWarningMutedOnBgEmphasized + OudsColorKeyToken.Content.StatusInfo -> contentColors.statusInfo + OudsColorKeyToken.Content.StatusNegative -> contentColors.statusNegative + OudsColorKeyToken.Content.StatusPositive -> contentColors.statusPositive + OudsColorKeyToken.Content.StatusWarning -> contentColors.statusWarning } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorElevationKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Elevation): Color { return when (token) { - OudsColorElevationKeyToken.Drag -> elevationColors.drag - OudsColorElevationKeyToken.DragOnBgEmphasized -> elevationColors.dragOnBgEmphasized - OudsColorElevationKeyToken.DragOnBgSecondary -> elevationColors.dragOnBgSecondary - OudsColorElevationKeyToken.Modal -> elevationColors.modal - OudsColorElevationKeyToken.OverlayDefault -> elevationColors.overlayDefault - OudsColorElevationKeyToken.OverlayDefaultOnBgEmphasized -> elevationColors.overlayDefaultOnBgEmphasized - OudsColorElevationKeyToken.OverlayDefaultOnBgSecondary -> elevationColors.overlayDefaultOnBgSecondary - OudsColorElevationKeyToken.OverlayEmphasized -> elevationColors.overlayEmphasized - OudsColorElevationKeyToken.OverlayEmphasizedOnBgEmphasized -> elevationColors.overlayEmphasizedOnBgEmphasized - OudsColorElevationKeyToken.OverlayEmphasizedOnBgSecondary -> elevationColors.overlayEmphasizedOnBgSecondary - OudsColorElevationKeyToken.Raised -> elevationColors.raised - OudsColorElevationKeyToken.RaisedOnBgEmphasized -> elevationColors.raisedOnBgEmphasized - OudsColorElevationKeyToken.RaisedOnBgSecondary -> elevationColors.raisedOnBgSecondary + OudsColorKeyToken.Elevation.Drag -> elevationColors.drag + OudsColorKeyToken.Elevation.DragOnBgEmphasized -> elevationColors.dragOnBgEmphasized + OudsColorKeyToken.Elevation.DragOnBgSecondary -> elevationColors.dragOnBgSecondary + OudsColorKeyToken.Elevation.Modal -> elevationColors.modal + OudsColorKeyToken.Elevation.OverlayDefault -> elevationColors.overlayDefault + OudsColorKeyToken.Elevation.OverlayDefaultOnBgEmphasized -> elevationColors.overlayDefaultOnBgEmphasized + OudsColorKeyToken.Elevation.OverlayDefaultOnBgSecondary -> elevationColors.overlayDefaultOnBgSecondary + OudsColorKeyToken.Elevation.OverlayEmphasized -> elevationColors.overlayEmphasized + OudsColorKeyToken.Elevation.OverlayEmphasizedOnBgEmphasized -> elevationColors.overlayEmphasizedOnBgEmphasized + OudsColorKeyToken.Elevation.OverlayEmphasizedOnBgSecondary -> elevationColors.overlayEmphasizedOnBgSecondary + OudsColorKeyToken.Elevation.Raised -> elevationColors.raised + OudsColorKeyToken.Elevation.RaisedOnBgEmphasized -> elevationColors.raisedOnBgEmphasized + OudsColorKeyToken.Elevation.RaisedOnBgSecondary -> elevationColors.raisedOnBgSecondary } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorGradientKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Gradient): Color { return when (token) { - OudsColorGradientKeyToken.SkeletonMiddle -> gradientColors.skeletonMiddle - OudsColorGradientKeyToken.SkeletonMiddleOnBgEmphasized -> gradientColors.skeletonMiddleOnBgEmphasized - OudsColorGradientKeyToken.SkeletonStartEnd -> gradientColors.skeletonStartEnd - OudsColorGradientKeyToken.SkeletonStartEndOnBgEmphasized -> gradientColors.skeletonStartEndOnBgEmphasized + OudsColorKeyToken.Gradient.SkeletonMiddle -> gradientColors.skeletonMiddle + OudsColorKeyToken.Gradient.SkeletonMiddleOnBgEmphasized -> gradientColors.skeletonMiddleOnBgEmphasized + OudsColorKeyToken.Gradient.SkeletonStartEnd -> gradientColors.skeletonStartEnd + OudsColorKeyToken.Gradient.SkeletonStartEndOnBgEmphasized -> gradientColors.skeletonStartEndOnBgEmphasized } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorDecorativeKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Decorative): Color { return when (token) { - OudsColorDecorativeKeyToken.Accent1Default -> decorativeColors.accent1Default - OudsColorDecorativeKeyToken.Accent1Emphasized -> decorativeColors.accent1Emphasized - OudsColorDecorativeKeyToken.Accent1Muted -> decorativeColors.accent1Muted - OudsColorDecorativeKeyToken.Accent2Default -> decorativeColors.accent2Default - OudsColorDecorativeKeyToken.Accent2Emphasized -> decorativeColors.accent2Emphasized - OudsColorDecorativeKeyToken.Accent2Muted -> decorativeColors.accent2Muted - OudsColorDecorativeKeyToken.Accent3Default -> decorativeColors.accent3Default - OudsColorDecorativeKeyToken.Accent3Emphasized -> decorativeColors.accent3Emphasized - OudsColorDecorativeKeyToken.Accent3Muted -> decorativeColors.accent3Muted - OudsColorDecorativeKeyToken.Accent4Default -> decorativeColors.accent4Default - OudsColorDecorativeKeyToken.Accent4Emphasized -> decorativeColors.accent4Emphasized - OudsColorDecorativeKeyToken.Accent4Muted -> decorativeColors.accent4Muted - OudsColorDecorativeKeyToken.Accent5Default -> decorativeColors.accent5Default - OudsColorDecorativeKeyToken.Accent5Emphasized -> decorativeColors.accent5Emphasized - OudsColorDecorativeKeyToken.Accent5Muted -> decorativeColors.accent5Muted - OudsColorDecorativeKeyToken.BrandPrimary -> decorativeColors.brandPrimary - OudsColorDecorativeKeyToken.BrandSecondary -> decorativeColors.brandSecondary - OudsColorDecorativeKeyToken.BrandTertiary -> decorativeColors.brandTertiary - OudsColorDecorativeKeyToken.NeutralDefault -> decorativeColors.neutralDefault - OudsColorDecorativeKeyToken.NeutralEmphasized -> decorativeColors.neutralEmphasized - OudsColorDecorativeKeyToken.NeutralMuted -> decorativeColors.neutralMuted - OudsColorDecorativeKeyToken.SkinTint100 -> decorativeColors.skinTint100 - OudsColorDecorativeKeyToken.SkinTint200 -> decorativeColors.skinTint200 - OudsColorDecorativeKeyToken.SkinTint300 -> decorativeColors.skinTint300 - OudsColorDecorativeKeyToken.SkinTint400 -> decorativeColors.skinTint400 - OudsColorDecorativeKeyToken.SkinTint500 -> decorativeColors.skinTint500 - OudsColorDecorativeKeyToken.SkinTint600 -> decorativeColors.skinTint600 - OudsColorDecorativeKeyToken.SkinTint700 -> decorativeColors.skinTint700 - OudsColorDecorativeKeyToken.SkinTint800 -> decorativeColors.skinTint800 - OudsColorDecorativeKeyToken.SkinTint900 -> decorativeColors.skinTint900 + OudsColorKeyToken.Decorative.Accent1Default -> decorativeColors.accent1Default + OudsColorKeyToken.Decorative.Accent1Emphasized -> decorativeColors.accent1Emphasized + OudsColorKeyToken.Decorative.Accent1Muted -> decorativeColors.accent1Muted + OudsColorKeyToken.Decorative.Accent2Default -> decorativeColors.accent2Default + OudsColorKeyToken.Decorative.Accent2Emphasized -> decorativeColors.accent2Emphasized + OudsColorKeyToken.Decorative.Accent2Muted -> decorativeColors.accent2Muted + OudsColorKeyToken.Decorative.Accent3Default -> decorativeColors.accent3Default + OudsColorKeyToken.Decorative.Accent3Emphasized -> decorativeColors.accent3Emphasized + OudsColorKeyToken.Decorative.Accent3Muted -> decorativeColors.accent3Muted + OudsColorKeyToken.Decorative.Accent4Default -> decorativeColors.accent4Default + OudsColorKeyToken.Decorative.Accent4Emphasized -> decorativeColors.accent4Emphasized + OudsColorKeyToken.Decorative.Accent4Muted -> decorativeColors.accent4Muted + OudsColorKeyToken.Decorative.Accent5Default -> decorativeColors.accent5Default + OudsColorKeyToken.Decorative.Accent5Emphasized -> decorativeColors.accent5Emphasized + OudsColorKeyToken.Decorative.Accent5Muted -> decorativeColors.accent5Muted + OudsColorKeyToken.Decorative.BrandPrimary -> decorativeColors.brandPrimary + OudsColorKeyToken.Decorative.BrandSecondary -> decorativeColors.brandSecondary + OudsColorKeyToken.Decorative.BrandTertiary -> decorativeColors.brandTertiary + OudsColorKeyToken.Decorative.NeutralDefault -> decorativeColors.neutralDefault + OudsColorKeyToken.Decorative.NeutralEmphasized -> decorativeColors.neutralEmphasized + OudsColorKeyToken.Decorative.NeutralMuted -> decorativeColors.neutralMuted + OudsColorKeyToken.Decorative.SkinTint100 -> decorativeColors.skinTint100 + OudsColorKeyToken.Decorative.SkinTint200 -> decorativeColors.skinTint200 + OudsColorKeyToken.Decorative.SkinTint300 -> decorativeColors.skinTint300 + OudsColorKeyToken.Decorative.SkinTint400 -> decorativeColors.skinTint400 + OudsColorKeyToken.Decorative.SkinTint500 -> decorativeColors.skinTint500 + OudsColorKeyToken.Decorative.SkinTint600 -> decorativeColors.skinTint600 + OudsColorKeyToken.Decorative.SkinTint700 -> decorativeColors.skinTint700 + OudsColorKeyToken.Decorative.SkinTint800 -> decorativeColors.skinTint800 + OudsColorKeyToken.Decorative.SkinTint900 -> decorativeColors.skinTint900 } } @Stable -fun OudsColorScheme.fromToken(token: OudsColorGlobalKeyToken): Color { +fun OudsColorScheme.fromToken(token: OudsColorKeyToken.Global): Color { return when (token) { - OudsColorGlobalKeyToken.TransparentDefault -> globalColors.transparentDefault + OudsColorKeyToken.Global.TransparentDefault -> globalColors.transparentDefault } } @@ -1060,7 +1051,7 @@ val OudsColorSemanticTokens.materialDarkColorScheme: ColorScheme /** * Converts an OUDS action color token to the local color value provided by the theme. */ -val OudsColorActionKeyToken.value: Color +val OudsColorKeyToken.Action.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1068,7 +1059,7 @@ val OudsColorActionKeyToken.value: Color /** * Converts an OUDS always color token to the local color value provided by the theme. */ -val OudsColorAlwaysKeyToken.value: Color +val OudsColorKeyToken.Always.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1076,7 +1067,7 @@ val OudsColorAlwaysKeyToken.value: Color /** * Converts an OUDS background color token to the local color value provided by the theme. */ -val OudsColorBackgroundKeyToken.value: Color +val OudsColorKeyToken.Background.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1084,7 +1075,7 @@ val OudsColorBackgroundKeyToken.value: Color /** * Converts an OUDS border color token to the local color value provided by the theme. */ -val OudsColorBorderKeyToken.value: Color +val OudsColorKeyToken.Border.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1092,7 +1083,7 @@ val OudsColorBorderKeyToken.value: Color /** * Converts an OUDS brand color token to the local color value provided by the theme. */ -val OudsColorBrandKeyToken.value: Color +val OudsColorKeyToken.Brand.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1100,7 +1091,7 @@ val OudsColorBrandKeyToken.value: Color /** * Converts an OUDS content color token to the local color value provided by the theme. */ -val OudsColorContentKeyToken.value: Color +val OudsColorKeyToken.Content.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1108,7 +1099,7 @@ val OudsColorContentKeyToken.value: Color /** * Converts an OUDS elevation color token to the local color value provided by the theme. */ -val OudsColorElevationKeyToken.value: Color +val OudsColorKeyToken.Elevation.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1116,7 +1107,7 @@ val OudsColorElevationKeyToken.value: Color /** * Converts an OUDS gradient color token to the local color value provided by the theme. */ -val OudsColorGradientKeyToken.value: Color +val OudsColorKeyToken.Gradient.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) @@ -1124,7 +1115,7 @@ val OudsColorGradientKeyToken.value: Color /** * Converts an OUDS decorative color token to the local color value provided by the theme. */ -val OudsColorDecorativeKeyToken.value: Color +val OudsColorKeyToken.Decorative.value: Color @ReadOnlyComposable @Composable get() = OudsTheme.colorScheme.fromToken(this) \ No newline at end of file diff --git a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt index 45893291..2869283b 100644 --- a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt +++ b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt @@ -18,7 +18,7 @@ import androidx.compose.runtime.Composable import com.orange.ouds.core.BuildConfig import com.orange.ouds.core.theme.OudsTheme import com.orange.ouds.core.theme.value -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken /** * Configures the Compose OUDS preview environment in Android Studio. @@ -29,6 +29,6 @@ import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken @Composable fun OudsPreview(darkThemeEnabled: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) { OudsTheme(themeContract = BuildConfig.PREVIEW_THEME, darkThemeEnabled) { - Surface(color = OudsColorBackgroundKeyToken.Primary.value, content = content) // Add a surface to be able to see components + Surface(color = OudsColorKeyToken.Background.Primary.value, content = content) // Add a surface to be able to see components } } diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt index fca887e1..f8347be2 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/OudsColorKeyToken.kt @@ -12,234 +12,236 @@ package com.orange.ouds.theme.tokens -enum class OudsColorGlobalKeyToken { - TransparentDefault, -} +class OudsColorKeyToken { + enum class Global { + TransparentDefault, + } -enum class OudsColorActionKeyToken { - Disabled, - DisabledOnBgEmphasized, - NegativeEnabled, - NegativeFocus, - NegativeHover, - NegativeLoading, - NegativePressed, - PrimaryEnabled, - PrimaryEnabledOnBgEmphasized, - PrimaryFocus, - PrimaryFocusOnBgEmphasized, - PrimaryHover, - PrimaryHoverOnBgEmphasized, - PrimaryLoading, - PrimaryLoadingOnBgEmphasized, - PrimaryPressed, - PrimaryPressedOnBgEmphasized, - SecondaryEnabled, - SecondaryEnabledOnBgEmphasized, - SecondaryFocus, - SecondaryFocusOnBgEmphasized, - SecondaryHover, - SecondaryHoverOnBgEmphasized, - SecondaryLoading, - SecondaryLoadingOnBgEmphasized, - SecondaryPressed, - SecondaryPressedOnBgEmphasized, - Selected, - SelectedOnBgEmphasized, - Visited, - VisitedOnBgEmphasized, -} + enum class Action { + Disabled, + DisabledOnBgEmphasized, + NegativeEnabled, + NegativeFocus, + NegativeHover, + NegativeLoading, + NegativePressed, + PrimaryEnabled, + PrimaryEnabledOnBgEmphasized, + PrimaryFocus, + PrimaryFocusOnBgEmphasized, + PrimaryHover, + PrimaryHoverOnBgEmphasized, + PrimaryLoading, + PrimaryLoadingOnBgEmphasized, + PrimaryPressed, + PrimaryPressedOnBgEmphasized, + SecondaryEnabled, + SecondaryEnabledOnBgEmphasized, + SecondaryFocus, + SecondaryFocusOnBgEmphasized, + SecondaryHover, + SecondaryHoverOnBgEmphasized, + SecondaryLoading, + SecondaryLoadingOnBgEmphasized, + SecondaryPressed, + SecondaryPressedOnBgEmphasized, + Selected, + SelectedOnBgEmphasized, + Visited, + VisitedOnBgEmphasized, + } -enum class OudsColorAlwaysKeyToken { - Accent, - Black, - Info, - Negative, - OnAccent, - OnBlack, - OnInfo, - OnNegative, - OnPositive, - OnWarning, - OnWhite, - Positive, - Warning, - White, -} + enum class Always { + Accent, + Black, + Info, + Negative, + OnAccent, + OnBlack, + OnInfo, + OnNegative, + OnPositive, + OnWarning, + OnWhite, + Positive, + Warning, + White, + } -enum class OudsColorBackgroundKeyToken { - BrandPrimary, - Emphasized, - Primary, - Secondary, - StatusAccentEmphasized, - StatusAccentMuted, - StatusAccentMutedOnBgEmphasized, - StatusInfoEmphasized, - StatusInfoMuted, - StatusInfoMutedOnBgEmphasized, - StatusNegativeEmphasized, - StatusNegativeMuted, - StatusNegativeMutedOnBgEmphasized, - StatusNeutral, - StatusNeutralOnBgEmphasized, - StatusPositiveEmphasized, - StatusPositiveMuted, - StatusPositiveMutedOnBgEmphasized, - StatusWarningEmphasized, - StatusWarningMuted, - StatusWarningMutedOnBgEmphasized, - Tertiary, -} + enum class Background { + BrandPrimary, + Emphasized, + Primary, + Secondary, + StatusAccentEmphasized, + StatusAccentMuted, + StatusAccentMutedOnBgEmphasized, + StatusInfoEmphasized, + StatusInfoMuted, + StatusInfoMutedOnBgEmphasized, + StatusNegativeEmphasized, + StatusNegativeMuted, + StatusNegativeMutedOnBgEmphasized, + StatusNeutral, + StatusNeutralOnBgEmphasized, + StatusPositiveEmphasized, + StatusPositiveMuted, + StatusPositiveMutedOnBgEmphasized, + StatusWarningEmphasized, + StatusWarningMuted, + StatusWarningMutedOnBgEmphasized, + Tertiary, + } -enum class OudsColorBorderKeyToken { - BrandPrimary, - BrandPrimaryOnBgEmphasized, - Default, - DefaultOnBgEmphasized, - Emphasized, - EmphasizedOnBgEmphasized, - Focus, - FocusInset, - FocusInsetOnBgEmphasized, - FocusOnBgEmphasized, - OnBrandPrimary, -} + enum class Border { + BrandPrimary, + BrandPrimaryOnBgEmphasized, + Default, + DefaultOnBgEmphasized, + Emphasized, + EmphasizedOnBgEmphasized, + Focus, + FocusInset, + FocusInsetOnBgEmphasized, + FocusOnBgEmphasized, + OnBrandPrimary, + } -enum class OudsColorBrandKeyToken { - AccentDefault, - AccentHigh, - AccentHighest, - AccentLowest, - InfoDefault, - InfoHighest, - InfoLowest, - NegativeDefault, - NegativeHigh, - NegativeHigher, - NegativeHighest, - NegativeLowest, - NeutralEmphasizedBlack, - NeutralEmphasizedHigh, - NeutralEmphasizedHigher, - NeutralEmphasizedHighest, - NeutralEmphasizedLow, - NeutralEmphasizedLower, - NeutralEmphasizedLowest, - NeutralEmphasizedMedium, - NeutralMutedHighest, - NeutralMutedLow, - NeutralMutedLower, - NeutralMutedLowest, - NeutralMutedMedium, - NeutralMutedWhite, - PositiveDefault, - PositiveHighest, - PositiveLowest, - PrimaryDefault, - PrimaryLow, - WarningDefault, - WarningHigh, - WarningHighest, - WarningLowest, -} + enum class Brand { + AccentDefault, + AccentHigh, + AccentHighest, + AccentLowest, + InfoDefault, + InfoHighest, + InfoLowest, + NegativeDefault, + NegativeHigh, + NegativeHigher, + NegativeHighest, + NegativeLowest, + NeutralEmphasizedBlack, + NeutralEmphasizedHigh, + NeutralEmphasizedHigher, + NeutralEmphasizedHighest, + NeutralEmphasizedLow, + NeutralEmphasizedLower, + NeutralEmphasizedLowest, + NeutralEmphasizedMedium, + NeutralMutedHighest, + NeutralMutedLow, + NeutralMutedLower, + NeutralMutedLowest, + NeutralMutedMedium, + NeutralMutedWhite, + PositiveDefault, + PositiveHighest, + PositiveLowest, + PrimaryDefault, + PrimaryLow, + WarningDefault, + WarningHigh, + WarningHighest, + WarningLowest, + } -enum class OudsColorContentKeyToken { - BrandPrimary, - BrandPrimaryOnBgEmphasized, - Default, - DefaultOnBgEmphasized, - Disabled, - DisabledOnBgEmphasized, - Muted, - MutedOnBgEmphasized, - OnActionDisabled, - OnActionDisabledOnBgEmphasized, - OnActionNegative, - OnActionPrimaryEnabled, - OnActionPrimaryEnabledOnBgEmphasized, - OnActionPrimaryFocus, - OnActionPrimaryFocusOnBgEmphasized, - OnActionPrimaryHover, - OnActionPrimaryHoverOnBgEmphasized, - OnActionPrimaryLoading, - OnActionPrimaryLoadingOnBgEmphasized, - OnActionPrimaryPressed, - OnActionPrimaryPressedOnBgEmphasized, - OnBrandPrimary, - OnStatusAccentEmphasized, - OnStatusAccentMuted, - OnStatusAccentMutedOnBgEmphasized, - OnStatusInfoEmphasized, - OnStatusInfoMuted, - OnStatusInfoMutedOnBgEmphasized, - OnStatusNegativeEmphasized, - OnStatusNegativeMuted, - OnStatusNegativeMutedOnBgEmphasized, - OnStatusPositiveEmphasized, - OnStatusPositiveMuted, - OnStatusPositiveMutedOnBgEmphasized, - OnStatusWarningEmphasized, - OnStatusWarningMuted, - OnStatusWarningMutedOnBgEmphasized, - StatusInfo, - StatusNegative, - StatusPositive, - StatusWarning, -} + enum class Content { + BrandPrimary, + BrandPrimaryOnBgEmphasized, + Default, + DefaultOnBgEmphasized, + Disabled, + DisabledOnBgEmphasized, + Muted, + MutedOnBgEmphasized, + OnActionDisabled, + OnActionDisabledOnBgEmphasized, + OnActionNegative, + OnActionPrimaryEnabled, + OnActionPrimaryEnabledOnBgEmphasized, + OnActionPrimaryFocus, + OnActionPrimaryFocusOnBgEmphasized, + OnActionPrimaryHover, + OnActionPrimaryHoverOnBgEmphasized, + OnActionPrimaryLoading, + OnActionPrimaryLoadingOnBgEmphasized, + OnActionPrimaryPressed, + OnActionPrimaryPressedOnBgEmphasized, + OnBrandPrimary, + OnStatusAccentEmphasized, + OnStatusAccentMuted, + OnStatusAccentMutedOnBgEmphasized, + OnStatusInfoEmphasized, + OnStatusInfoMuted, + OnStatusInfoMutedOnBgEmphasized, + OnStatusNegativeEmphasized, + OnStatusNegativeMuted, + OnStatusNegativeMutedOnBgEmphasized, + OnStatusPositiveEmphasized, + OnStatusPositiveMuted, + OnStatusPositiveMutedOnBgEmphasized, + OnStatusWarningEmphasized, + OnStatusWarningMuted, + OnStatusWarningMutedOnBgEmphasized, + StatusInfo, + StatusNegative, + StatusPositive, + StatusWarning, + } -enum class OudsColorElevationKeyToken { - Drag, - DragOnBgEmphasized, - DragOnBgSecondary, - Modal, - OverlayDefault, - OverlayDefaultOnBgEmphasized, - OverlayDefaultOnBgSecondary, - OverlayEmphasized, - OverlayEmphasizedOnBgEmphasized, - OverlayEmphasizedOnBgSecondary, - Raised, - RaisedOnBgEmphasized, - RaisedOnBgSecondary, -} + enum class Elevation { + Drag, + DragOnBgEmphasized, + DragOnBgSecondary, + Modal, + OverlayDefault, + OverlayDefaultOnBgEmphasized, + OverlayDefaultOnBgSecondary, + OverlayEmphasized, + OverlayEmphasizedOnBgEmphasized, + OverlayEmphasizedOnBgSecondary, + Raised, + RaisedOnBgEmphasized, + RaisedOnBgSecondary, + } -enum class OudsColorGradientKeyToken { - SkeletonMiddle, - SkeletonMiddleOnBgEmphasized, - SkeletonStartEnd, - SkeletonStartEndOnBgEmphasized, -} + enum class Gradient { + SkeletonMiddle, + SkeletonMiddleOnBgEmphasized, + SkeletonStartEnd, + SkeletonStartEndOnBgEmphasized, + } -enum class OudsColorDecorativeKeyToken { - Accent1Default, - Accent1Emphasized, - Accent1Muted, - Accent2Default, - Accent2Emphasized, - Accent2Muted, - Accent3Default, - Accent3Emphasized, - Accent3Muted, - Accent4Default, - Accent4Emphasized, - Accent4Muted, - Accent5Default, - Accent5Emphasized, - Accent5Muted, - BrandPrimary, - BrandSecondary, - BrandTertiary, - NeutralDefault, - NeutralEmphasized, - NeutralMuted, - SkinTint100, - SkinTint200, - SkinTint300, - SkinTint400, - SkinTint500, - SkinTint600, - SkinTint700, - SkinTint800, - SkinTint900, + enum class Decorative { + Accent1Default, + Accent1Emphasized, + Accent1Muted, + Accent2Default, + Accent2Emphasized, + Accent2Muted, + Accent3Default, + Accent3Emphasized, + Accent3Muted, + Accent4Default, + Accent4Emphasized, + Accent4Muted, + Accent5Default, + Accent5Emphasized, + Accent5Muted, + BrandPrimary, + BrandSecondary, + BrandTertiary, + NeutralDefault, + NeutralEmphasized, + NeutralMuted, + SkinTint100, + SkinTint200, + SkinTint300, + SkinTint400, + SkinTint500, + SkinTint600, + SkinTint700, + SkinTint800, + SkinTint900, + } } \ No newline at end of file diff --git a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt index 983a4802..79d299d7 100644 --- a/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt +++ b/theme-contract/src/main/java/com/orange/ouds/theme/tokens/components/OudsButtonTokens.kt @@ -13,18 +13,16 @@ package com.orange.ouds.theme.tokens.components import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken -import com.orange.ouds.theme.tokens.OudsColorActionKeyToken -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken -import com.orange.ouds.theme.tokens.OudsColorContentKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.OudsElevationKeyToken import com.orange.ouds.theme.tokens.OudsSpaceKeyToken import com.orange.ouds.theme.tokens.OudsTypographyKeyToken open class OudsButtonTokens( - val containerColor: OudsColorBackgroundKeyToken = OudsColorBackgroundKeyToken.BrandPrimary, - val contentColor: OudsColorContentKeyToken = OudsColorContentKeyToken.BrandPrimary, - val disabledContainerColor: OudsColorActionKeyToken = OudsColorActionKeyToken.Disabled, - val disabledContentColor: OudsColorContentKeyToken = OudsColorContentKeyToken.Disabled, + val containerColor: OudsColorKeyToken.Background = OudsColorKeyToken.Background.BrandPrimary, + val contentColor: OudsColorKeyToken.Content = OudsColorKeyToken.Content.BrandPrimary, + val disabledContainerColor: OudsColorKeyToken.Action = OudsColorKeyToken.Action.Disabled, + val disabledContentColor: OudsColorKeyToken.Content = OudsColorKeyToken.Content.Disabled, val cornerRadius: OudsBorderRadiusKeyToken = OudsBorderRadiusKeyToken.None, val defaultElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, val pressedElevation: OudsElevationKeyToken = OudsElevationKeyToken.None, diff --git a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt index 2d23583e..103f337b 100644 --- a/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt +++ b/theme-orange-country/src/main/java/com/orange/ouds/theme/orangecountry/OrangeCountryTheme.kt @@ -15,7 +15,7 @@ package com.orange.ouds.theme.orangecountry import androidx.compose.ui.graphics.Color import com.orange.ouds.theme.orange.OrangeTheme import com.orange.ouds.theme.tokens.OudsBorderRadiusKeyToken -import com.orange.ouds.theme.tokens.OudsColorBackgroundKeyToken +import com.orange.ouds.theme.tokens.OudsColorKeyToken import com.orange.ouds.theme.tokens.components.OudsButtonTokens import com.orange.ouds.theme.tokens.components.OudsComponentsTokens import com.orange.ouds.theme.tokens.semantic.OudsColorBgSemanticTokens @@ -38,6 +38,6 @@ class OrangeCountryTheme : OrangeTheme() { override val componentsTokens: OudsComponentsTokens get() = OudsComponentsTokens( - button = OudsButtonTokens(containerColor = OudsColorBackgroundKeyToken.StatusAccentEmphasized, cornerRadius = OudsBorderRadiusKeyToken.Short) + button = OudsButtonTokens(containerColor = OudsColorKeyToken.Background.StatusAccentEmphasized, cornerRadius = OudsBorderRadiusKeyToken.Short) ) } \ No newline at end of file