Coverage Summary for Class: AppThemeKt (com.georgeci.moneysurfer.uikit.theme)

Class Class, % Method, % Branch, % Line, % Instruction, %
AppThemeKt 100% (1/1) 75% (3/4) 35.7% (10/28) 82.1% (23/28) 75.3% (268/356)


 package com.georgeci.moneysurfer.uikit.theme
 
 import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.material3.ColorScheme
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Shapes
 import androidx.compose.material3.Typography
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.ui.graphics.Color
 import com.materialkolor.PaletteStyle
 import com.materialkolor.dynamicColorScheme as materialKolorScheme
 
 /**
  * Style used by `materialKolor` to expand a single seed colour into the full M3 colour scheme.
  * Acts as an app-wide knob — flip the value here and every seed-based palette regenerates.
  *
  * Options (selected): `TonalSpot` (Material You default), `Vibrant`, `Expressive`, `Fidelity`,
  * `Content`, `Neutral`, `Monochrome`, `Rainbow`, `FruitSalad`. See `PaletteStyle` KDoc for
  * the visual differences each strategy produces.
  */
 internal val SeedPaletteStyle: PaletteStyle = PaletteStyle.TonalSpot
 
 @Composable
 fun AppTheme(
     darkTheme: Boolean = isSystemInDarkTheme(),
     seedColor: Color? = null,
     dynamicColor: Boolean = false,
     containerStyle: SurferContainerStyle = SurferContainerStyle.Card,
     content: @Composable () -> Unit,
 ) {
     val colorScheme = when {
         dynamicColor && isDynamicColorAvailable -> dynamicColorScheme(darkTheme)
         seedColor != null -> schemeFromSeed(seedColor, darkTheme)
         darkTheme -> DarkColorScheme
         else -> LightColorScheme
     }
 
 //    ConfigureSystemBars(darkTheme = darkTheme)
 
     val semanticColors = if (darkTheme) DarkSemanticColors else LightSemanticColors
 
     CompositionLocalProvider(
         LocalSpacing provides Spacing(),
         LocalContainerStyle provides containerStyle,
         LocalSemanticColors provides semanticColors,
     ) {
         MaterialTheme(
             colorScheme = colorScheme,
             typography = AppTypography,
             shapes = AppShapes,
             content = content,
         )
     }
 }
 
 /**
  * Builds a full Material 3 colour scheme from a single seed via HCT tonal palettes
  * (Hue/Chroma/Tone). Powered by `material-kolor`, the KMP port of Google's
  * `material-color-utilities`. `TonalSpot` is the default style used by Material You.
  */
 private fun schemeFromSeed(seed: Color, dark: Boolean): ColorScheme =
     materialKolorScheme(
         seedColor = seed,
         isDark = dark,
         style = SeedPaletteStyle,
     )
 
 object AppTheme {
     val materialColors: ColorScheme
         @Composable
         @androidx.compose.runtime.ReadOnlyComposable
         get() = MaterialTheme.colorScheme
 
     val typography: Typography
         @Composable
         @androidx.compose.runtime.ReadOnlyComposable
         get() = MaterialTheme.typography
 
     val shapes: Shapes
         @Composable
         @androidx.compose.runtime.ReadOnlyComposable
         get() = MaterialTheme.shapes
 
     val spacing: Spacing
         @Composable
         @androidx.compose.runtime.ReadOnlyComposable
         get() = LocalSpacing.current
 
     val containerStyle: SurferContainerStyle
         @Composable
         @androidx.compose.runtime.ReadOnlyComposable
         get() = LocalContainerStyle.current
 
     val semanticColors: SemanticColors
         @Composable
         @androidx.compose.runtime.ReadOnlyComposable
         get() = LocalSemanticColors.current
 }