Coverage Summary for Class: SurferSplashKt (com.georgeci.moneysurfer.uikit.components)

Class Class, % Method, % Branch, % Line, % Instruction, %
SurferSplashKt 0% (0/1) 0% (0/3) 0% (0/4) 0% (0/31) 0% (0/256)


 package com.georgeci.moneysurfer.uikit.components
 
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.CircularProgressIndicator
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.draw.shadow
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import com.georgeci.moneysurfer.uikit.preview.SurferComponentPreview
 import com.georgeci.moneysurfer.uikit.semantics.SurferSemantics
 import com.georgeci.moneysurfer.uikit.theme.AppTheme
 import moneysurfer.uikit.generated.resources.Res
 import moneysurfer.uikit.generated.resources.uikit_app_icon
 import moneysurfer.uikit.generated.resources.uikit_brand
 import org.jetbrains.compose.resources.painterResource
 import org.jetbrains.compose.resources.stringResource
 
 /**
  * Full-screen launch placeholder shown while the app decides where to navigate. Deliberately
  * static — no data, no view model — so it can render on the very first frame, before Koin
  * graph resolution finishes anywhere else.
  */
 @Composable
 fun SurferSplash(modifier: Modifier = Modifier) {
     Box(
         modifier = modifier
             .fillMaxSize()
             .background(AppTheme.materialColors.background),
         contentAlignment = Alignment.Center,
     ) {
         Column(
             horizontalAlignment = Alignment.CenterHorizontally,
             verticalArrangement = Arrangement.spacedBy(AppTheme.spacing.medium),
         ) {
             Image(
                 painter = painterResource(Res.drawable.uikit_app_icon),
                 contentDescription = SurferSemantics.Decorative,
                 modifier = Modifier
                     .size(ICON_SIZE)
                     .shadow(elevation = 8.dp, shape = RoundedCornerShape(ICON_CORNER))
                     .clip(RoundedCornerShape(ICON_CORNER)),
             )
             Text(
                 text = stringResource(Res.string.uikit_brand),
                 style = AppTheme.typography.titleLarge,
                 color = AppTheme.materialColors.onBackground,
             )
             CircularProgressIndicator(
                 modifier = Modifier.size(PROGRESS_SIZE),
                 color = AppTheme.materialColors.primary,
                 trackColor = AppTheme.materialColors.surfaceVariant,
                 strokeWidth = 3.dp,
             )
         }
     }
 }
 
 private val ICON_SIZE = 96.dp
 private val ICON_CORNER = 24.dp
 private val PROGRESS_SIZE = 28.dp
 
 @Preview
 @Composable
 private fun SurferSplashPreview() {
     SurferComponentPreview {
         SurferSplash()
     }
 }