Coverage Summary for Class: SurferOutlinedChipKt (com.georgeci.moneysurfer.uikit.components.base)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| SurferOutlinedChipKt |
100%
(1/1)
|
66.7%
(2/3)
|
37.5%
(3/8)
|
100%
(26/26)
|
98.3%
(289/294)
|
package com.georgeci.moneysurfer.uikit.components.base
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.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.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
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
/**
* Small outlined action chip: a leading glyph and a label inside a 32dp pill.
*
* Lighter than a button and not a filter — it is the "one more thing you may add" affordance,
* such as the optional account fields or a workspace row's inline action.
*/
@Composable
fun SurferOutlinedChip(
label: String,
icon: ImageVector,
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
) {
Row(
modifier = modifier
.height(ChipHeight)
.clip(RoundedCornerShape(ChipCorner))
.border(1.dp, AppTheme.materialColors.outline, RoundedCornerShape(ChipCorner))
.clickable(enabled = enabled, onClick = onClick)
.padding(horizontal = 12.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(6.dp),
) {
Icon(
imageVector = icon,
contentDescription = SurferSemantics.Decorative,
tint = AppTheme.materialColors.onSurface,
modifier = Modifier.size(IconSize),
)
Text(
text = label,
style = AppTheme.typography.labelMedium,
color = AppTheme.materialColors.onSurface,
)
}
}
private val ChipHeight = 32.dp
private val ChipCorner = 16.dp
private val IconSize = 14.dp
@Preview
@Composable
private fun SurferOutlinedChipPreview() {
SurferComponentPreview {
Row(horizontalArrangement = Arrangement.spacedBy(AppTheme.spacing.small)) {
SurferOutlinedChip(label = "IBAN", icon = SurferIcons.Add, onClick = {})
SurferOutlinedChip(label = "Description", icon = SurferIcons.Add, onClick = {})
}
}
}