From 0904aea10b668ee4d5f67eba61443abcc38518d5 Mon Sep 17 00:00:00 2001 From: net <96362337+netqo@users.noreply.github.com> Date: Wed, 24 Jun 2026 15:07:18 -0300 Subject: [PATCH] refactor: consolidate duplicated tokens and the monogram avatar Several design tokens and one widget were declared identically in many files. Collapse them onto single shared definitions (behavior-preserving; every value/render is unchanged): - TabularNums: removed ~9 local `val`s plus ~10 inline `TextStyle(fontFeatureSettings = "tnum")` uses; all reference the one in ui.theme. - Tracked 1.2.sp letter spacing: removed ~19 copies that lived under six different names (TrackedLetterSpacing / ActionLetterSpacing / ChipLetterSpacing / FooterLetterSpacing / LabelLetterSpacing / LetterSpacingTracked); all now use the shared TrackedLetterSpacing. - Preview background: replaced the 0xFF0B0B12 literal in 24 @Preview annotations with a single PREVIEW_BACKGROUND_COLOR const. - MonogramAvatar: extracted the initials-on-accent square that was copied in the lobby header, profile identity card and login "Continue as" card. Renamed ui/theme/GameTokens.kt to Tokens.kt since the typography tokens are app-wide, not game-only. --- .../assistant/AssistantConversationBody.kt | 1 + .../feature/assistant/AssistantScreen.kt | 10 +++-- .../feature/assistant/AssistantWelcomeBody.kt | 1 + .../stackcasino/feature/auth/LoginScreen.kt | 30 +++++-------- .../feature/blackjack/BlackjackScreen.kt | 3 +- .../feature/coinflip/CoinflipScreen.kt | 3 +- .../stackcasino/feature/crash/CrashScreen.kt | 3 +- .../feature/history/HistoryScreen.kt | 13 +++--- .../feature/housewallet/HouseWalletActive.kt | 2 + .../housewallet/HouseWalletBiometricPrompt.kt | 1 + .../feature/housewallet/HouseWalletScreen.kt | 13 +++--- .../feature/housewallet/HouseWalletUnset.kt | 1 + .../stackcasino/feature/kyc/KycBanners.kt | 1 + .../stackcasino/feature/kyc/KycScreen.kt | 16 +++---- .../stackcasino/feature/kyc/KycSlot.kt | 1 + .../feature/lobby/LobbyBalanceHero.kt | 7 +-- .../feature/lobby/LobbyGamesSection.kt | 5 ++- .../stackcasino/feature/lobby/LobbyHeader.kt | 21 ++------- .../feature/lobby/LobbyQuickActions.kt | 1 + .../feature/lobby/LobbyRecentActivity.kt | 7 +-- .../stackcasino/feature/lobby/LobbyScreen.kt | 8 ++-- .../stackcasino/feature/mines/MinesScreen.kt | 3 +- .../feature/news/NewsDetailScreen.kt | 8 +++- .../stackcasino/feature/news/NewsScreen.kt | 1 - .../feature/news/NewsSuccessBody.kt | 1 + .../notifications/NotificationsSheet.kt | 5 +-- .../feature/profile/ProfileAccountSection.kt | 1 + .../feature/profile/ProfileGameActivity.kt | 4 +- .../feature/profile/ProfileIdentityCard.kt | 20 ++------- .../feature/profile/ProfilePnlCard.kt | 4 +- .../feature/profile/ProfileScreen.kt | 8 ++-- .../feature/profile/ProfileSettingsSheet.kt | 4 +- .../feature/roulette/RouletteScreen.kt | 3 +- .../rounddetail/RoundDetailProvablyFair.kt | 1 + .../feature/rounddetail/RoundDetailScreen.kt | 8 ++-- .../rounddetail/RoundDetailTimeline.kt | 3 +- .../feature/wallet/WalletDepositTab.kt | 1 + .../feature/wallet/WalletScreen.kt | 11 ++--- .../feature/wallet/WalletTransactionsTab.kt | 7 +-- .../feature/wallet/WalletWithdrawTab.kt | 12 ++--- .../stackcasino/ui/components/BalancePill.kt | 15 ++++--- .../ui/components/CurrencyDropdown.kt | 5 ++- .../stackcasino/ui/components/EmptyState.kt | 5 ++- .../stackcasino/ui/components/ErrorState.kt | 14 +++--- .../ui/components/FilterChipRow.kt | 9 ++-- .../ui/components/MonogramAvatar.kt | 45 +++++++++++++++++++ .../stackcasino/ui/components/RulesSheet.kt | 5 +-- .../stackcasino/ui/components/Skeleton.kt | 3 +- .../ui/components/StackBottomBar.kt | 4 +- .../stackcasino/ui/components/StackCard.kt | 7 +-- .../ui/components/StackOutlineButton.kt | 4 +- .../stackcasino/ui/components/StackToast.kt | 3 +- .../ui/theme/{GameTokens.kt => Tokens.kt} | 18 +++++--- 53 files changed, 220 insertions(+), 170 deletions(-) create mode 100644 app/src/main/java/com/plainstudio/stackcasino/ui/components/MonogramAvatar.kt rename app/src/main/java/com/plainstudio/stackcasino/ui/theme/{GameTokens.kt => Tokens.kt} (57%) diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantConversationBody.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantConversationBody.kt index f03afe1..7d2d6dd 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantConversationBody.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantConversationBody.kt @@ -37,6 +37,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Conversation state: the scrollable message list (LazyColumn so long diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantScreen.kt index 3be0322..145c970 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantScreen.kt @@ -52,13 +52,16 @@ import com.plainstudio.stackcasino.R import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.components.PulsingDot import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Nep assistant chat reproducing the cu-14 mockup @@ -341,7 +344,7 @@ private fun InputBarFooter(charCount: Int) { color = TextLow, fontSize = FooterFontSize, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -351,7 +354,6 @@ private fun InputBarFooter(charCount: Int) { // --------------------------------------------------------------------------- internal val ScreenHorizontalPadding = 16.dp -internal val TrackedLetterSpacing = 1.2.sp internal val ConversationGap = 12.dp internal val NepBubbleAuthorFontSize = 10.sp internal val MessageBodyFontSize = 13.sp @@ -378,7 +380,7 @@ private const val DISABLED_SEND_ALPHA = 0.40f private val SystemDotSize = 4.dp private val FooterFontSize = 9.sp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun AssistantContentWelcomePreview() { StackcasinoTheme { @@ -391,7 +393,7 @@ private fun AssistantContentWelcomePreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun AssistantContentConversationPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantWelcomeBody.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantWelcomeBody.kt index f4cb7d3..c98abaa 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantWelcomeBody.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/assistant/AssistantWelcomeBody.kt @@ -26,6 +26,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Welcome state shown until the user sends the first message: Nep diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/auth/LoginScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/auth/LoginScreen.kt index 26a5740..39321ca 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/auth/LoginScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/auth/LoginScreen.kt @@ -46,10 +46,12 @@ import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.plainstudio.stackcasino.R +import com.plainstudio.stackcasino.ui.components.MonogramAvatar import com.plainstudio.stackcasino.ui.components.PulsingDot import com.plainstudio.stackcasino.ui.components.gridBackground import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.AccentVioletSoft +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme @@ -59,6 +61,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import com.plainstudio.stackcasino.util.initialsOf /** @@ -421,23 +424,13 @@ private fun ContinueAsCard( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp), ) { - Box( - modifier = Modifier.background(AccentViolet).size(ContinueAsAvatarSize), - contentAlignment = Alignment.Center, - ) { - Text( - text = initialsOf(state.displayName), - color = Color.White, - fontSize = 14.sp, - fontWeight = FontWeight.Bold, - ) - } + MonogramAvatar(initials = initialsOf(state.displayName), size = ContinueAsAvatarSize) Column(modifier = Modifier.weight(1f)) { Text( text = "CONTINUE AS", color = AccentVioletSoft, fontSize = 9.sp, - letterSpacing = LetterSpacingTracked, + letterSpacing = TrackedLetterSpacing, ) Spacer(modifier = Modifier.height(2.dp)) Text( @@ -468,7 +461,7 @@ private fun UseAnotherAccountLink(onClick: () -> Unit) { text = "USE ANOTHER ACCOUNT", color = TextMedium, fontSize = 10.sp, - letterSpacing = LetterSpacingTracked, + letterSpacing = TrackedLetterSpacing, textAlign = TextAlign.Center, modifier = Modifier @@ -525,7 +518,7 @@ private fun ErrorBanner( text = "SIGN-IN FAILED", color = SemanticDanger, fontSize = 10.sp, - letterSpacing = LetterSpacingTracked, + letterSpacing = TrackedLetterSpacing, fontWeight = FontWeight.Bold, ) Spacer(modifier = Modifier.height(4.dp)) @@ -612,7 +605,6 @@ private const val RETURNING_CARD_BORDER_ALPHA = 0.5f // Tracked letter-spacings (uppercase tracked text in the mockup). private val LetterSpacingMeta = 1.5.sp -private val LetterSpacingTracked = 1.2.sp private val LetterSpacingTight = 1.sp private val LetterSpacingSubtitle = 3.sp private val LetterSpacingHero = 7.sp @@ -622,7 +614,7 @@ private val LetterSpacingLegal = 0.5.sp // Previews // --------------------------------------------------------------------------- -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun LoginScreenIdlePreview() { StackcasinoTheme { @@ -635,7 +627,7 @@ private fun LoginScreenIdlePreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun LoginScreenReturningPreview() { StackcasinoTheme { @@ -653,7 +645,7 @@ private fun LoginScreenReturningPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun LoginScreenLoadingPreview() { StackcasinoTheme { @@ -666,7 +658,7 @@ private fun LoginScreenLoadingPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun LoginScreenErrorPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/blackjack/BlackjackScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/blackjack/BlackjackScreen.kt index 69227c6..8119d72 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/blackjack/BlackjackScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/blackjack/BlackjackScreen.kt @@ -40,6 +40,7 @@ import com.plainstudio.stackcasino.ui.components.StatCell import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.DISABLED_ALPHA import com.plainstudio.stackcasino.ui.theme.MetaFontSize +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.ScreenHorizontalPadding import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticInfo @@ -462,7 +463,7 @@ private const val ACTION_FILL_ALPHA = 0.10f private const val ACTION_BORDER_ALPHA = 0.50f private const val CARD_BACK_ALPHA = 0.30f -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 800) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 800) @Composable private fun BlackjackScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/coinflip/CoinflipScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/coinflip/CoinflipScreen.kt index 4ceab8c..a1a1189 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/coinflip/CoinflipScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/coinflip/CoinflipScreen.kt @@ -48,6 +48,7 @@ import com.plainstudio.stackcasino.ui.components.StatCell import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.AccentVioletSoft import com.plainstudio.stackcasino.ui.theme.MetaFontSize +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.ScreenHorizontalPadding import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk @@ -382,7 +383,7 @@ private const val LABEL_ALPHA = 0.6f private const val SPIN_DURATION_MS = 750 private const val CAMERA_DISTANCE = 12f -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 800) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 800) @Composable private fun CoinflipScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/crash/CrashScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/crash/CrashScreen.kt index 622140d..4859277 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/crash/CrashScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/crash/CrashScreen.kt @@ -46,6 +46,7 @@ import com.plainstudio.stackcasino.ui.components.StatCell import com.plainstudio.stackcasino.ui.components.gridBackground import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.MetaFontSize +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.ScreenHorizontalPadding import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk @@ -428,7 +429,7 @@ private const val CURVE_STEPS = 24 private const val CURVE_EXPONENT = 2.2 private const val CURVE_STROKE_ALPHA = 0.85f -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 800) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 800) @Composable private fun CrashScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/history/HistoryScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/history/HistoryScreen.kt index 1c0bb6a..7a0a4bb 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/history/HistoryScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/history/HistoryScreen.kt @@ -33,7 +33,6 @@ 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.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview @@ -52,15 +51,18 @@ import com.plainstudio.stackcasino.ui.components.VerticalHairline import com.plainstudio.stackcasino.ui.components.gridBackground import com.plainstudio.stackcasino.ui.iconRes import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * History screen reproducing the cu-10 mockup @@ -256,7 +258,7 @@ private fun SummaryCell( color = valueColor, fontSize = SummaryValueFontSize, fontWeight = FontWeight.Bold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -333,7 +335,7 @@ private fun RoundHeader(round: HistoryRound) { text = round.timestampLabel, color = TextLow, fontSize = TimestampFontSize, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } Icon( @@ -415,7 +417,7 @@ private fun MetricCell( color = valueColor, fontSize = MetricFontSize, fontWeight = FontWeight.SemiBold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -490,7 +492,6 @@ private val SearchVerticalPadding = 16.dp private val FilterGroupGap = 12.dp private val MetaFontSize = 10.sp private val SmallMetaFontSize = 9.sp -private val TrackedLetterSpacing = 1.2.sp private val SummaryCellPadding = 12.dp private val SummaryValueFontSize = 18.sp @@ -504,7 +505,7 @@ private val TimestampFontSize = 11.sp private val MetricFontSize = 14.sp private val EmptyIconSize = 24.dp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1400) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1400) @Composable private fun HistoryScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletActive.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletActive.kt index f3c91ee..b193f95 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletActive.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletActive.kt @@ -49,9 +49,11 @@ import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceElevated import com.plainstudio.stackcasino.ui.theme.SurfaceOutline +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import com.plainstudio.stackcasino.util.truncateMiddle /** Configured-wallet state: balance, address, the key card, and admin actions. */ diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletBiometricPrompt.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletBiometricPrompt.kt index f71a105..8942088 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletBiometricPrompt.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletBiometricPrompt.kt @@ -33,6 +33,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Biometric prompt overlay shown while revealing the private key. The diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletScreen.kt index cd3dfc4..1c55cd5 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletScreen.kt @@ -32,19 +32,20 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import kotlinx.coroutines.delay /** @@ -220,10 +221,8 @@ internal fun SectionLabel( internal val ScreenHorizontalPadding = 16.dp internal val SectionGap = 12.dp internal val CardPadding = 16.dp -internal val TrackedLetterSpacing = 1.2.sp internal val MetaFontSize = 10.sp internal val SmallMetaFontSize = 9.sp -internal val TabularNums = TextStyle(fontFeatureSettings = "tnum") internal const val REVEAL_SECONDS = 10 private const val COUNTDOWN_TICK_MILLIS = 1000L @@ -234,25 +233,25 @@ private val HeaderButtonSize = 36.dp private val HeaderIconSize = 16.dp private val BadgeIconSize = 10.dp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1000) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1000) @Composable private fun HouseWalletUnsetPreview() { StackcasinoTheme { HouseWalletPreview(HouseWalletUiState.Unset) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1400) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1400) @Composable private fun HouseWalletActivePreview() { StackcasinoTheme { HouseWalletPreview(HouseWalletUiState.Wallet(keyRevealed = false)) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1400) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1400) @Composable private fun HouseWalletKeyRevealedPreview() { StackcasinoTheme { HouseWalletPreview(HouseWalletUiState.Wallet(keyRevealed = true)) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 600) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 600) @Composable private fun HouseWalletNoBiometricPreview() { StackcasinoTheme { HouseWalletPreview(HouseWalletUiState.NoBiometric) } diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletUnset.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletUnset.kt index d883c79..899fc32 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletUnset.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/housewallet/HouseWalletUnset.kt @@ -42,6 +42,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** Setup state: the intro plus the generate / import choice cards. */ @Composable diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycBanners.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycBanners.kt index b18a2a6..384a4eb 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycBanners.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycBanners.kt @@ -30,6 +30,7 @@ import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SemanticWarn import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Review-outcome banners. Each collapses the KYC screen to a single diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycScreen.kt index c84e410..ff8391a 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycScreen.kt @@ -30,7 +30,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview @@ -40,13 +39,16 @@ import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.components.cardSurface import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.AccentVioletSoft +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import kotlinx.coroutines.delay /** @@ -322,10 +324,8 @@ private fun SubmitCta( internal val ScreenHorizontalPadding = 16.dp internal val SectionGap = 16.dp internal val CardPadding = 16.dp -internal val TrackedLetterSpacing = 1.2.sp internal val MetaFontSize = 10.sp internal val SmallMetaFontSize = 9.sp -internal val TabularNums = TextStyle(fontFeatureSettings = "tnum") private const val UPLOAD_SIMULATION_MILLIS = 1200L private const val REQUIRED_PHOTOS = 2 @@ -336,31 +336,31 @@ private val HeaderIconSize = 16.dp private val NoteIconSize = 14.dp private val ProgressBarHeight = 4.dp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1200) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1200) @Composable private fun KycEmptyPreview() { StackcasinoTheme { KycPreview(KycUiState.Form(SlotStatus.Empty, SlotStatus.Empty)) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1200) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1200) @Composable private fun KycBothUploadedPreview() { StackcasinoTheme { KycPreview(KycUiState.Form(SlotStatus.Uploaded, SlotStatus.Uploaded)) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1200) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1200) @Composable private fun KycUploadingPreview() { StackcasinoTheme { KycPreview(KycUiState.Form(SlotStatus.Uploading, SlotStatus.Empty)) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 600) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 600) @Composable private fun KycPendingPreview() { StackcasinoTheme { KycPreview(KycUiState.Pending) } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 600) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 600) @Composable private fun KycSuspendedPreview() { StackcasinoTheme { KycPreview(KycUiState.Suspended) } diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycSlot.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycSlot.kt index 528a1b2..9252699 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycSlot.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/kyc/KycSlot.kt @@ -42,6 +42,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceElevated import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * A single ID photo slot: the empty dropzone with Camera / Gallery diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyBalanceHero.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyBalanceHero.kt index fa4e7e0..9e3d251 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyBalanceHero.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyBalanceHero.kt @@ -14,15 +14,16 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.components.BalancePill import com.plainstudio.stackcasino.ui.components.CurrencyDropdown import com.plainstudio.stackcasino.ui.theme.SemanticOk +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Balance hero: the left column stacks the AVAILABLE label, the today @@ -60,7 +61,7 @@ internal fun BalanceHero( color = TextLow, fontSize = SessionStatsFontSize, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) Spacer(modifier = Modifier.height(4.dp)) BalancePill( @@ -125,7 +126,7 @@ private fun PnLChip( fontSize = PnlChipFontSize, fontWeight = FontWeight.SemiBold, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyGamesSection.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyGamesSection.kt index 1f0110f..cbcc25d 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyGamesSection.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyGamesSection.kt @@ -19,7 +19,6 @@ 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.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -29,9 +28,11 @@ import com.plainstudio.stackcasino.ui.iconRes import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Games section: the title row plus a two-column grid of [GameCard]s, @@ -139,7 +140,7 @@ private fun GameCard( color = TextLow, fontSize = SmallMetaFontSize, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, modifier = Modifier.alignByBaseline(), ) } diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyHeader.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyHeader.kt index 9bce3ef..b7bc976 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyHeader.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyHeader.kt @@ -19,16 +19,16 @@ 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.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.components.MonogramAvatar import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import com.plainstudio.stackcasino.util.initialsOf /** @@ -54,7 +54,7 @@ internal fun LobbyHeader( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(12.dp), ) { - AvatarTile(displayName = user.displayName) + MonogramAvatar(initials = initialsOf(user.displayName), size = AvatarSize) Column(modifier = Modifier.weight(1f)) { Text( text = user.greeting.uppercase(), @@ -77,21 +77,6 @@ internal fun LobbyHeader( } } -@Composable -private fun AvatarTile(displayName: String) { - Box( - modifier = Modifier.size(AvatarSize).background(AccentViolet), - contentAlignment = Alignment.Center, - ) { - Text( - text = initialsOf(displayName), - color = Color.White, - fontSize = 14.sp, - fontWeight = FontWeight.Bold, - ) - } -} - @Composable private fun NotificationsButton( hasUnread: Boolean, diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyQuickActions.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyQuickActions.kt index b189da0..1325ef7 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyQuickActions.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyQuickActions.kt @@ -27,6 +27,7 @@ import com.plainstudio.stackcasino.ui.theme.SemanticWarn import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing // Tab keys the lobby passes back to the nav-host so wallet deep-links // land on the right pane. Match [WalletTab.name.lowercase()]. diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyRecentActivity.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyRecentActivity.kt index 88e7602..c9af44d 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyRecentActivity.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyRecentActivity.kt @@ -20,7 +20,6 @@ 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.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -31,9 +30,11 @@ import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SurfaceOutline +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Recent activity section: the RECENT title with a VIEW ALL affordance @@ -129,7 +130,7 @@ private fun RecentRoundRow(round: RecentRound) { color = TextLow, fontSize = SmallMetaFontSize, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } Text( @@ -137,7 +138,7 @@ private fun RecentRoundRow(round: RecentRound) { color = amountColor, fontSize = 13.sp, fontWeight = FontWeight.SemiBold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyScreen.kt index 8d24172..d202241 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/lobby/LobbyScreen.kt @@ -34,6 +34,7 @@ import com.plainstudio.stackcasino.ui.components.ErrorStateDefaults import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.components.gridBackground import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase @@ -248,7 +249,6 @@ internal val RecentRowGap = 8.dp internal val MetaFontSize = 10.sp internal val SmallMetaFontSize = 9.sp internal val SectionTitleFontSize = 11.sp -internal val TrackedLetterSpacing = 1.2.sp private val NepFabSize = 48.dp private val NepFabBorderWidth = 2.dp @@ -258,7 +258,7 @@ private val NepFabPadding = PaddingValues(end = 16.dp, bottom = 16.dp) // Previews // --------------------------------------------------------------------------- -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun LobbyScreenSuccessPreview() { StackcasinoTheme { @@ -272,7 +272,7 @@ private fun LobbyScreenSuccessPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun LobbyScreenLoadingPreview() { StackcasinoTheme { @@ -286,7 +286,7 @@ private fun LobbyScreenLoadingPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun LobbyScreenErrorPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/mines/MinesScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/mines/MinesScreen.kt index 9c74612..7250015 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/mines/MinesScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/mines/MinesScreen.kt @@ -39,6 +39,7 @@ import com.plainstudio.stackcasino.ui.components.StatCell import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.CHIP_BORDER_ALPHA import com.plainstudio.stackcasino.ui.theme.MetaFontSize +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.ScreenHorizontalPadding import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk @@ -444,7 +445,7 @@ private val RiskBarHeight = 2.dp private const val PILL_SELECTED_ALPHA = 0.10f private const val TILE_TINT_ALPHA = 0.18f -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 800) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 800) @Composable private fun MinesScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsDetailScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsDetailScreen.kt index 8084ad9..a7089fb 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsDetailScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsDetailScreen.kt @@ -48,6 +48,7 @@ import com.plainstudio.stackcasino.domain.news.NewsArticle import com.plainstudio.stackcasino.ui.components.EmptyState import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceElevated @@ -56,6 +57,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Detail screen for a single news article (cu-13). @@ -318,7 +320,11 @@ private val ReadFullFontSize = 12.sp private val ReadFullIconSize = 14.dp private val NotFoundIconSize = 24.dp -@androidx.compose.ui.tooling.preview.Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@androidx.compose.ui.tooling.preview.Preview( + showBackground = true, + backgroundColor = PREVIEW_BACKGROUND_COLOR, + heightDp = 900, +) @Composable private fun NewsDetailLoadedPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsScreen.kt index 8b24fd8..a64abf0 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsScreen.kt @@ -179,7 +179,6 @@ internal val ScreenHorizontalPadding = 16.dp internal val SectionVerticalPadding = 16.dp internal val MetaFontSize = 10.sp internal val SmallMetaFontSize = 9.sp -internal val TrackedLetterSpacing = 1.2.sp private val HeaderTopPadding = 24.dp private val HeaderBottomPadding = 16.dp diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsSuccessBody.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsSuccessBody.kt index 8d20f17..2daabe3 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsSuccessBody.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/news/NewsSuccessBody.kt @@ -43,6 +43,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Success body: the FEATURED swipeable carousel (HorizontalPager diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/notifications/NotificationsSheet.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/notifications/NotificationsSheet.kt index 737e233..3edf57b 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/notifications/NotificationsSheet.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/notifications/NotificationsSheet.kt @@ -32,7 +32,6 @@ import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -48,9 +47,11 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceElevated import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Lobby notification inbox (CU-03), reached from the bell. Renders the @@ -270,7 +271,6 @@ private const val ICON_BORDER_ALPHA = 0.40f private const val ICON_FILL_ALPHA = 0.10f private const val RAIL_WIDTH_PX = 8f -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val SheetPadding = 16.dp private val IconBadgeSize = 36.dp private val IconSize = 16.dp @@ -278,4 +278,3 @@ private val UnreadDotSize = 6.dp private val LabelFontSize = 10.sp private val MetaFontSize = 9.sp private val SmallMetaFontSize = 9.sp -private val TrackedLetterSpacing = 1.2.sp diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileAccountSection.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileAccountSection.kt index 89bb83b..cd6ed60 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileAccountSection.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileAccountSection.kt @@ -35,6 +35,7 @@ import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Account actions: verify identity (KYC), house wallet (operator), diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileGameActivity.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileGameActivity.kt index 78afe34..c0f2c64 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileGameActivity.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileGameActivity.kt @@ -19,7 +19,6 @@ 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.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -35,9 +34,11 @@ import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SemanticWarn import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Game activity section: a by-volume breakdown, one row per game with a @@ -172,7 +173,6 @@ private fun ActivityAccent.color(): Color = ActivityAccent.Danger -> SemanticDanger } -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val SectionTitleFontSize = 11.sp private val GlyphBoxSize = 32.dp private val GlyphIconSize = 14.dp diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileIdentityCard.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileIdentityCard.kt index b77f577..363304e 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileIdentityCard.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileIdentityCard.kt @@ -24,13 +24,14 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.R import com.plainstudio.stackcasino.ui.components.HairlineDivider +import com.plainstudio.stackcasino.ui.components.MonogramAvatar import com.plainstudio.stackcasino.ui.components.cardSurface -import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SemanticWarn import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Identity card: avatar monogram, name, email, the Google provider line @@ -44,7 +45,7 @@ internal fun ProfileIdentityCard( ) { Column(modifier = Modifier.fillMaxWidth().cardSurface().padding(CardPadding)) { Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { - AvatarTile(initials = identity.initials) + MonogramAvatar(initials = identity.initials, size = AvatarSize, fontSize = 20.sp) Column(modifier = Modifier.weight(1f)) { Text( text = identity.displayName, @@ -82,21 +83,6 @@ internal fun ProfileIdentityCard( } } -@Composable -private fun AvatarTile(initials: String) { - Box( - modifier = Modifier.size(AvatarSize).background(AccentViolet), - contentAlignment = Alignment.Center, - ) { - Text( - text = initials, - color = Color.White, - fontSize = 20.sp, - fontWeight = FontWeight.Bold, - ) - } -} - @Composable private fun ProviderLine() { Row( diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfilePnlCard.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfilePnlCard.kt index 996e360..a3425e0 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfilePnlCard.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfilePnlCard.kt @@ -16,7 +16,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.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -25,8 +24,10 @@ import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * All-time profit and loss card: the net figure over a won-vs-wagered @@ -126,6 +127,5 @@ private fun Legend( } } -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val BarHeight = 6.dp private val LegendDotSize = 8.dp diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileScreen.kt index a604879..985bab5 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileScreen.kt @@ -37,6 +37,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.plainstudio.stackcasino.ui.components.ErrorState import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.components.gridBackground +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase @@ -232,7 +233,6 @@ private fun ProfileErrorBody( internal val ScreenHorizontalPadding = 16.dp internal val SectionGap = 20.dp internal val CardPadding = 16.dp -internal val TrackedLetterSpacing = 1.2.sp internal val MetaFontSize = 10.sp internal val SmallMetaFontSize = 9.sp @@ -246,7 +246,7 @@ private val ErrorIconSize = 24.dp // bottom navigation bar. internal val BottomScrollPadding = 96.dp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1500) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1500) @Composable private fun ProfileScreenSuccessPreview() { StackcasinoTheme { @@ -261,7 +261,7 @@ private fun ProfileScreenSuccessPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun ProfileScreenLoadingPreview() { StackcasinoTheme { @@ -276,7 +276,7 @@ private fun ProfileScreenLoadingPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 900) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 900) @Composable private fun ProfileScreenErrorPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileSettingsSheet.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileSettingsSheet.kt index 2ba06b2..feeab35 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileSettingsSheet.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/profile/ProfileSettingsSheet.kt @@ -22,7 +22,6 @@ import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -38,8 +37,10 @@ import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SurfaceElevated import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import java.util.Locale /** @@ -277,7 +278,6 @@ private fun formatBytes(bytes: Long?): String = private const val KILOBYTE = 1024L private const val MEGABYTE = KILOBYTE * 1024L -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val RowHorizontalPadding = 20.dp private val RowVerticalPadding = 16.dp private val CategoryIndent = 12.dp diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/roulette/RouletteScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/roulette/RouletteScreen.kt index 6d9d1fa..5372506 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/roulette/RouletteScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/roulette/RouletteScreen.kt @@ -47,6 +47,7 @@ import com.plainstudio.stackcasino.ui.components.OutcomeTone import com.plainstudio.stackcasino.ui.components.StatCell import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.MetaFontSize +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.ScreenHorizontalPadding import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk @@ -683,7 +684,7 @@ private const val NUMBER_FILL_ALPHA = 0.25f private const val NUMBER_BORDER_ALPHA = 0.40f private const val REEL_POINTER_ALPHA = 0.90f -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 800) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 800) @Composable private fun RouletteScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailProvablyFair.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailProvablyFair.kt index 49c8454..1e7cc20 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailProvablyFair.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailProvablyFair.kt @@ -41,6 +41,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing import com.plainstudio.stackcasino.util.truncateMiddle import kotlinx.coroutines.delay diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailScreen.kt index 294dda1..39989bc 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailScreen.kt @@ -31,7 +31,6 @@ 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.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -43,6 +42,7 @@ import com.plainstudio.stackcasino.ui.components.StackCard import com.plainstudio.stackcasino.ui.components.cardSurface import com.plainstudio.stackcasino.ui.iconRes import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme @@ -50,9 +50,11 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceElevated import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Round detail screen reproducing the cu-11 mockup @@ -440,11 +442,9 @@ private fun StatTone.color(): Color = } internal val CardPadding = 16.dp -internal val TrackedLetterSpacing = 1.2.sp internal val LabelFontSize = 10.sp internal val FootnoteFontSize = 9.sp -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val BottomScrollPadding = 24.dp private val HeaderButtonSize = 36.dp private val HeaderIconSize = 16.dp @@ -458,7 +458,7 @@ private val AuditIconSize = 10.dp private val NotFoundIconSize = 24.dp private const val CASHOUT_FILL_ALPHA = 0.40f -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1200) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1200) @Composable private fun RoundDetailScreenPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailTimeline.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailTimeline.kt index 412a7b0..6605dae 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailTimeline.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/rounddetail/RoundDetailTimeline.kt @@ -17,13 +17,13 @@ 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.text.TextStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.components.VerticalHairline import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium @@ -82,7 +82,6 @@ private fun TimelineTone.color(): Color = TimelineTone.Danger -> SemanticDanger } -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val RailWidth = 16.dp private val NodeSize = 7.dp private val NodeTopPadding = 3.dp diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletDepositTab.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletDepositTab.kt index 08a9d2f..d163ce6 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletDepositTab.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletDepositTab.kt @@ -48,6 +48,7 @@ import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Deposit tab. Renders the mock QR card, the deposit address row with diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletScreen.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletScreen.kt index f5966f3..ca05a6c 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletScreen.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletScreen.kt @@ -23,7 +23,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -33,10 +32,13 @@ import com.plainstudio.stackcasino.ui.components.CurrencyDropdown import com.plainstudio.stackcasino.ui.components.HairlineDivider import com.plainstudio.stackcasino.ui.components.gridBackground import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceBase +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Wallet screen reproducing the cu-04 mockup @@ -147,7 +149,7 @@ private fun BalanceBlock(data: WalletData) { color = TextHigh, fontSize = AmountFontSize, fontWeight = FontWeight.Bold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) Spacer(modifier = Modifier.height(4.dp)) CurrencyDropdown( @@ -168,7 +170,7 @@ private fun BalanceBlock(data: WalletData) { color = TextMedium, fontSize = LockedAmountFontSize, fontWeight = FontWeight.SemiBold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -250,9 +252,8 @@ private val TabIndicatorHeight = 2.dp private val AmountFontSize = 36.sp private val LockedAmountFontSize = 18.sp private val MetaFontSize = 10.sp -internal val TrackedLetterSpacing = 1.2.sp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12, heightDp = 1200) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR, heightDp = 1200) @Composable private fun WalletScreenDepositPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletTransactionsTab.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletTransactionsTab.kt index 8c7f1a4..80f74c6 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletTransactionsTab.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletTransactionsTab.kt @@ -26,7 +26,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp @@ -38,9 +37,11 @@ import com.plainstudio.stackcasino.ui.components.StackCard import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SemanticWarn +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Transactions tab. Renders a FilterChipRow plus the filtered ledger. @@ -123,7 +124,7 @@ private fun TransactionPrimaryColumn(tx: WalletTransaction) { text = tx.timestampLabel, color = TextLow, fontSize = RowMetaFontSize, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) HashRow(shortHash = tx.shortHash) } @@ -162,7 +163,7 @@ private fun TransactionAmountColumn(tx: WalletTransaction) { color = tx.amountColor(), fontSize = AmountFontSize, fontWeight = FontWeight.SemiBold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) Text( text = tx.currencyCode, diff --git a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletWithdrawTab.kt b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletWithdrawTab.kt index 9af1b1c..e1f0837 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletWithdrawTab.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/feature/wallet/WalletWithdrawTab.kt @@ -37,9 +37,11 @@ import com.plainstudio.stackcasino.ui.theme.SemanticWarn import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Withdraw tab. Renders the destination + amount form, the inline @@ -172,7 +174,7 @@ private fun AmountField( color = TextLow, fontSize = SmallLabelFontSize, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -221,7 +223,7 @@ private fun AmountChip( lineHeight = AmountChipFontSize, fontWeight = FontWeight.SemiBold, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -252,7 +254,7 @@ private fun MaxAmountChip( lineHeight = AmountChipFontSize, fontWeight = FontWeight.SemiBold, letterSpacing = TrackedLetterSpacing, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -337,7 +339,7 @@ private fun FeeRow( text = amount, color = TextHigh, fontSize = FeeFontSize, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } @@ -359,7 +361,7 @@ private fun FeeReceiveRow() { color = AccentViolet, fontSize = FeeFontSize, fontWeight = FontWeight.SemiBold, - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) } } diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/BalancePill.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/BalancePill.kt index f45b8d4..72db0a0 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/BalancePill.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/BalancePill.kt @@ -18,15 +18,17 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Balance hero block used by the Lobby header and the Wallet header. @@ -61,7 +63,7 @@ fun BalancePill( text = label.uppercase(), color = TextMedium, fontSize = LabelFontSize, - letterSpacing = LabelLetterSpacing, + letterSpacing = TrackedLetterSpacing, ) // Both versions share the same slot so toggling visibility // never shifts surrounding layout. Mirrors the mockup recipe @@ -76,7 +78,7 @@ fun BalancePill( fontWeight = FontWeight.Bold, // tabular-nums keeps the digits monospaced so amounts // don't shift width when a single digit changes. - style = TextStyle(fontFeatureSettings = "tnum"), + style = TabularNums, ) Text( text = HIDDEN_PLACEHOLDER, @@ -111,12 +113,11 @@ fun BalancePill( private const val HIDDEN_PLACEHOLDER = "••••••" private val LabelFontSize = 10.sp -private val LabelLetterSpacing = 1.2.sp private val AmountFontSize = 36.sp private val EyeIconSize = 18.dp private val EyeHitArea = 36.dp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun BalancePillShownPreview() { StackcasinoTheme { @@ -130,7 +131,7 @@ private fun BalancePillShownPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun BalancePillHiddenPreview() { StackcasinoTheme { @@ -145,7 +146,7 @@ private fun BalancePillHiddenPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun BalancePillReadOnlyPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/CurrencyDropdown.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/CurrencyDropdown.kt index 4756ea2..79a3dde 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/CurrencyDropdown.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/CurrencyDropdown.kt @@ -27,10 +27,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceElevated import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Currency picker shown under the balance hero on the lobby and the @@ -121,11 +123,10 @@ private fun CurrencyMenuRow( private val DefaultOptions = listOf("USDC", "USDT") private val LabelFontSize = 10.sp -private val TrackedLetterSpacing = 1.2.sp private val ChevronSize = 10.dp private val DotSize = 6.dp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun CurrencyDropdownPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/EmptyState.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/EmptyState.kt index cbaead3..fd26848 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/EmptyState.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/EmptyState.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.SurfaceRaised @@ -122,7 +123,7 @@ private val TitleFontSize = 16.sp private val MessageFontSize = 12.sp private val MessageLineHeight = 18.sp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun EmptyStateBasicPreview() { StackcasinoTheme { @@ -136,7 +137,7 @@ private fun EmptyStateBasicPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun EmptyStateWithActionPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/ErrorState.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/ErrorState.kt index ce0dc33..cebcd7e 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/ErrorState.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/ErrorState.kt @@ -27,12 +27,14 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Centered error card with retry. Used by Lobby ("Connection Lost" @@ -155,7 +157,7 @@ private fun ErrorActionButton( color = textColor, fontSize = ActionFontSize, fontWeight = FontWeight.SemiBold, - letterSpacing = ActionLetterSpacing, + letterSpacing = TrackedLetterSpacing, ) } } @@ -169,7 +171,7 @@ private fun FooterRow(text: String) { text = text.uppercase(), color = TextLow, fontSize = FooterFontSize, - letterSpacing = FooterLetterSpacing, + letterSpacing = TrackedLetterSpacing, textAlign = TextAlign.Center, ) } @@ -202,11 +204,9 @@ private val TitleFontSize = 16.sp private val MessageFontSize = 12.sp private val MessageLineHeight = 18.sp private val ActionFontSize = 11.sp -private val ActionLetterSpacing = 1.2.sp private val FooterFontSize = 9.sp -private val FooterLetterSpacing = 1.2.sp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun ErrorStateBasicPreview() { StackcasinoTheme { @@ -222,7 +222,7 @@ private fun ErrorStateBasicPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun ErrorStateLobbyPreview() { StackcasinoTheme { @@ -240,7 +240,7 @@ private fun ErrorStateLobbyPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun ErrorStateWithFooterPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/FilterChipRow.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/FilterChipRow.kt index d6cfd7a..a769711 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/FilterChipRow.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/FilterChipRow.kt @@ -21,9 +21,11 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Single-select horizontal chip row used by history filters, wallet @@ -117,7 +119,7 @@ private fun Chip( color = textColor, fontSize = ChipFontSize, fontWeight = FontWeight.SemiBold, - letterSpacing = ChipLetterSpacing, + letterSpacing = TrackedLetterSpacing, ) } } @@ -126,9 +128,8 @@ private val ChipGap = 8.dp private val ChipPaddingHorizontal = 12.dp private val ChipPaddingVertical = 6.dp private val ChipFontSize = 10.sp -private val ChipLetterSpacing = 1.2.sp -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun FilterChipRowPreview() { StackcasinoTheme { @@ -148,7 +149,7 @@ private fun FilterChipRowPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun FilterChipRowScrollablePreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/MonogramAvatar.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/MonogramAvatar.kt new file mode 100644 index 0000000..bcf4f31 --- /dev/null +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/MonogramAvatar.kt @@ -0,0 +1,45 @@ +package com.plainstudio.stackcasino.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +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.text.font.FontWeight +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.plainstudio.stackcasino.ui.theme.AccentViolet + +/** + * Square accent-violet avatar showing a user's [initials] in white bold, + * shared by the lobby header, profile identity card and the login + * "Continue as" card. Callers compute the initials (e.g. via `initialsOf`). + * + * @param initials the one-or-two letter monogram to render. + * @param size edge length of the square tile. + * @param fontSize size of the monogram text. + */ +@Composable +fun MonogramAvatar( + initials: String, + modifier: Modifier = Modifier, + size: Dp = 40.dp, + fontSize: TextUnit = 14.sp, +) { + Box( + modifier = modifier.size(size).background(AccentViolet), + contentAlignment = Alignment.Center, + ) { + Text( + text = initials, + color = Color.White, + fontSize = fontSize, + fontWeight = FontWeight.Bold, + ) + } +} diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/RulesSheet.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/RulesSheet.kt index 4f16550..693cdaf 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/RulesSheet.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/RulesSheet.kt @@ -14,16 +14,17 @@ import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.SurfaceRaised +import com.plainstudio.stackcasino.ui.theme.TabularNums import com.plainstudio.stackcasino.ui.theme.TextHigh import com.plainstudio.stackcasino.ui.theme.TextLow import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Shared game rules bottom sheet, styled after the mockup's legal sheets @@ -107,8 +108,6 @@ private fun RuleSection( } } -private val TabularNums = TextStyle(fontFeatureSettings = "tnum") private val SheetPadding = 20.dp private val LabelFontSize = 10.sp private val MetaFontSize = 9.sp -private val TrackedLetterSpacing = 1.2.sp diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/Skeleton.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/Skeleton.kt index fbb32aa..67dd1ab 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/Skeleton.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/Skeleton.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme import com.plainstudio.stackcasino.ui.theme.SurfaceElevated @@ -72,7 +73,7 @@ private const val PULSE_DURATION_MILLIS = 1000 // Mirrors Tailwind's `animate-pulse` cubic-bezier(0.4, 0, 0.6, 1). private val PulseEasing = CubicBezierEasing(0.4f, 0f, 0.6f, 1f) -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun SkeletonShapesPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackBottomBar.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackBottomBar.kt index 83971f7..a0b73af 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackBottomBar.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackBottomBar.kt @@ -28,6 +28,7 @@ import com.plainstudio.stackcasino.ui.theme.AccentViolet import com.plainstudio.stackcasino.ui.theme.SurfaceBase import com.plainstudio.stackcasino.ui.theme.SurfaceOutline import com.plainstudio.stackcasino.ui.theme.TextMedium +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Bottom navigation bar mirroring the mockup spec @@ -119,7 +120,7 @@ private fun BottomNavTab( text = tab.label.uppercase(), color = tint, fontSize = LabelFontSize, - letterSpacing = LabelLetterSpacing, + letterSpacing = TrackedLetterSpacing, ) } } @@ -140,4 +141,3 @@ private val TopBorderWidth = 1.dp private val IconSize = 18.dp private val IconLabelGap = 4.dp private val LabelFontSize = 9.sp -private val LabelLetterSpacing = 1.2.sp diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackCard.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackCard.kt index 7030fb6..1f6d095 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackCard.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackCard.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.StackcasinoTheme @@ -83,7 +84,7 @@ object StackCardDefaults { val accentWidth = 3.dp } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun StackCardDefaultPreview() { StackcasinoTheme { @@ -95,7 +96,7 @@ private fun StackCardDefaultPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun StackCardWithAccentsPreview() { StackcasinoTheme { @@ -111,7 +112,7 @@ private fun StackCardWithAccentsPreview() { } } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun StackCardElevatedDangerPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackOutlineButton.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackOutlineButton.kt index 7b7e0d7..7920b1a 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackOutlineButton.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackOutlineButton.kt @@ -13,6 +13,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.TrackedLetterSpacing /** * Compact violet outline action button used by the empty and error @@ -48,11 +49,10 @@ fun StackOutlineButton( color = AccentViolet, fontSize = ActionFontSize, fontWeight = FontWeight.SemiBold, - letterSpacing = ActionLetterSpacing, + letterSpacing = TrackedLetterSpacing, ) } } private val ActionPadding = PaddingValues(horizontal = 16.dp, vertical = 10.dp) private val ActionFontSize = 11.sp -private val ActionLetterSpacing = 1.2.sp diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackToast.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackToast.kt index f46de41..8475d48 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackToast.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/components/StackToast.kt @@ -40,6 +40,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.plainstudio.stackcasino.ui.theme.AccentViolet +import com.plainstudio.stackcasino.ui.theme.PREVIEW_BACKGROUND_COLOR import com.plainstudio.stackcasino.ui.theme.SemanticDanger import com.plainstudio.stackcasino.ui.theme.SemanticOk import com.plainstudio.stackcasino.ui.theme.SemanticWarn @@ -178,7 +179,7 @@ private fun ToastType.icon(): ImageVector = ToastType.Warn -> Icons.Outlined.WarningAmber } -@Preview(showBackground = true, backgroundColor = 0xFF0B0B12) +@Preview(showBackground = true, backgroundColor = PREVIEW_BACKGROUND_COLOR) @Composable private fun StackToastPreview() { StackcasinoTheme { diff --git a/app/src/main/java/com/plainstudio/stackcasino/ui/theme/GameTokens.kt b/app/src/main/java/com/plainstudio/stackcasino/ui/theme/Tokens.kt similarity index 57% rename from app/src/main/java/com/plainstudio/stackcasino/ui/theme/GameTokens.kt rename to app/src/main/java/com/plainstudio/stackcasino/ui/theme/Tokens.kt index 60e58a8..0c5ae70 100644 --- a/app/src/main/java/com/plainstudio/stackcasino/ui/theme/GameTokens.kt +++ b/app/src/main/java/com/plainstudio/stackcasino/ui/theme/Tokens.kt @@ -6,11 +6,12 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp /* - * Shared layout/typography tokens for the five game screens and their - * chrome (header, stat cells, action buttons). These were previously - * re-declared identically at the bottom of every *Screen.kt; centralizing - * them removes that duplication. Per-screen tokens that genuinely differ - * (e.g. recent-chip size, controls padding) stay local to each screen. + * Shared design tokens. The typography tokens (TabularNums, CenteredGlyph, + * TrackedLetterSpacing) and the preview background are used app-wide; the + * dp dimensions and chip alphas are the game-screen chrome (header, stat + * cells, action buttons). Both were previously re-declared identically in + * many files; centralizing them here removes that duplication. Per-screen + * tokens that genuinely differ (e.g. controls padding) stay local. */ /** Tabular figures so digit columns do not shift width as values change. */ @@ -19,6 +20,9 @@ val TabularNums = TextStyle(fontFeatureSettings = "tnum") /** Drops the font's vertical padding so a single glyph centers in small chips. */ val CenteredGlyph = TextStyle(platformStyle = PlatformTextStyle(includeFontPadding = false)) +/** Letter spacing for tracked uppercase labels and meta text. */ +val TrackedLetterSpacing = 1.2.sp + val ScreenHorizontalPadding = 16.dp val HeaderVerticalPadding = 16.dp val HeaderButtonSize = 36.dp @@ -27,8 +31,10 @@ val SubtitleIconSize = 10.dp val TinyFontSize = 9.sp val MetaFontSize = 10.sp -val TrackedLetterSpacing = 1.2.sp const val DISABLED_ALPHA = 0.40f const val CHIP_TINT_ALPHA = 0.15f const val CHIP_BORDER_ALPHA = 0.40f + +/** Dark canvas behind `@Preview` composables, mirroring the app surface. */ +const val PREVIEW_BACKGROUND_COLOR = 0xFF0B0B12L