PeachSegmentedControl.kt

2.5 KB · raw

1package com.peachpasswords.ui.components23import androidx.compose.foundation.clickable4import androidx.compose.foundation.layout.Arrangement5import androidx.compose.foundation.layout.Row6import androidx.compose.foundation.layout.defaultMinSize7import androidx.compose.foundation.layout.fillMaxWidth8import androidx.compose.foundation.layout.padding9import androidx.compose.foundation.shape.RoundedCornerShape10import androidx.compose.material3.Surface11import androidx.compose.material3.Text12import androidx.compose.runtime.Composable13import androidx.compose.ui.Alignment14import androidx.compose.ui.Modifier15import androidx.compose.ui.unit.dp16import com.peachpasswords.ui.theme.LocalPeachAccent17import com.peachpasswords.ui.theme.PeachSpacing18import com.peachpasswords.ui.theme.PeachType19import com.peachpasswords.ui.theme.peachColors2021data class PeachSegment(22    val key: String,23    val label: String,24)2526@Composable27fun PeachSegmentedControl(28    segments: List<PeachSegment>,29    selectedKey: String,30    onSelected: (String) -> Unit,31    modifier: Modifier = Modifier,32) {33    val accent = LocalPeachAccent.current34    Surface(35        modifier = modifier.fillMaxWidth(),36        color = peachColors.S1,37        shape = RoundedCornerShape(999.dp),38        tonalElevation = 1.dp,39    ) {40        Row(41            modifier = Modifier.padding(PeachSpacing.xs),42            verticalAlignment = Alignment.CenterVertically,43            horizontalArrangement = Arrangement.spacedBy(PeachSpacing.xs),44        ) {45            segments.forEach { segment ->46                val selected = segment.key == selectedKey47                Surface(48                    modifier = Modifier49                        .weight(1f)50                        .defaultMinSize(minHeight = 34.dp)51                        .clickable { onSelected(segment.key) },52                    color = if (selected) accent else peachColors.S2,53                    contentColor = if (selected) peachColors.Bg else peachColors.T1,54                    shape = RoundedCornerShape(999.dp),55                ) {56                    Row(57                        modifier = Modifier.padding(horizontal = PeachSpacing.sm, vertical = PeachSpacing.sm),58                        horizontalArrangement = Arrangement.Center,59                        verticalAlignment = Alignment.CenterVertically,60                    ) {61                        Text(segment.label.uppercase(), style = PeachType.sortPill)62                    }63                }64            }65        }66    }67}