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

Class Class, % Method, % Branch, % Line, % Instruction, %
SurferArchivedAccountCardKt 100% (1/1) 80% (4/5) 62.5% (5/8) 100% (37/37) 98.8% (170/172)


 package com.georgeci.moneysurfer.uikit.components.account
 
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material3.Icon
 import androidx.compose.material3.LocalContentColor
 import androidx.compose.material3.OutlinedButton
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import com.georgeci.moneysurfer.uikit.atom.SurferActionCard
 import com.georgeci.moneysurfer.uikit.icons.SurferIcons
 import com.georgeci.moneysurfer.uikit.preview.SurferComponentPreview
 import com.georgeci.moneysurfer.uikit.semantics.SurferSemantics
 import com.georgeci.moneysurfer.uikit.theme.AppTheme
 
 /**
  * Tile representation of an archived account. Built on the dashed-outline [SurferActionCard]
  * atom, with a muted icon tile and a primary-colored "Restore" outlined button. The component
  * pins its own text colors so it isn't tinted primary by the action-card's content color.
  */
 @Composable
 fun SurferArchivedAccountCard(
     name: String,
     subtitle: String,
     icon: ImageVector,
     restoreLabel: String,
     onRestoreClick: () -> Unit,
     modifier: Modifier = Modifier,
 ) {
     SurferActionCard(modifier = modifier.fillMaxWidth()) {
         CompositionLocalProvider(LocalContentColor provides AppTheme.materialColors.onSurface) {
             Row(verticalAlignment = Alignment.CenterVertically) {
                 AccountIconTile(icon = icon, muted = true)
                 Spacer(Modifier.width(12.dp))
                 Column(modifier = Modifier.weight(1f)) {
                     Text(
                         text = name,
                         style = AppTheme.typography.titleSmall,
                         color = AppTheme.materialColors.onSurface,
                         maxLines = 1,
                         overflow = TextOverflow.Ellipsis,
                     )
                     Text(
                         text = subtitle,
                         style = AppTheme.typography.bodySmall,
                         color = AppTheme.materialColors.onSurfaceVariant,
                         maxLines = 1,
                         overflow = TextOverflow.Ellipsis,
                     )
                 }
                 OutlinedButton(
                     onClick = onRestoreClick,
                     modifier = Modifier.height(32.dp),
                     contentPadding = PaddingValues(horizontal = 14.dp, vertical = 0.dp),
                     shape = RoundedCornerShape(16.dp),
                 ) {
                     Icon(
                         imageVector = SurferIcons.Restore,
                         contentDescription = SurferSemantics.Decorative,
                         modifier = Modifier.size(14.dp),
                     )
                     Spacer(Modifier.width(6.dp))
                     Text(
                         text = restoreLabel,
                         style = AppTheme.typography.labelMedium,
                     )
                 }
             }
         }
     }
 }
 
 @Preview
 @Composable
 private fun SurferArchivedAccountCardPreview() {
     SurferComponentPreview {
         Row(
             modifier = Modifier.padding(16.dp),
             horizontalArrangement = Arrangement.spacedBy(12.dp),
         ) {
             SurferArchivedAccountCard(
                 name = "Revolut (old)",
                 subtitle = "Bank · •• 0093 · Archived Nov 2024",
                 icon = SurferIcons.CreditCard,
                 restoreLabel = "Restore",
                 onRestoreClick = {},
                 modifier = Modifier.weight(1f),
             )
         }
     }
 }