package com.saglitzdesign.recipes.listrow import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.size import androidx.compose.foundation.selection.toggleable import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material3.Icon import androidx.compose.material3.ListItem import androidx.compose.material3.ListItemDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.semantics.Role import androidx.compose.ui.semantics.clearAndSetSemantics import androidx.compose.ui.unit.dp // Material 3 ListItem-based settings rows. Trailing slot is a chevron OR a control, // never both. Rows meet the 48dp target and grow with sp for two-line content. // Navigation row — whole row is clickable and shows a chevron. @Composable fun SaglitzNavigationRow( icon: ImageVector, title: String, onClick: () -> Unit, modifier: Modifier = Modifier, subtitle: String? = null, ) { ListItem( headlineContent = { Text(title) }, supportingContent = subtitle?.let { { Text(it) } }, leadingContent = { Icon(icon, contentDescription = null) }, // decorative; title names the row trailingContent = { Icon(Icons.AutoMirrored.Filled.KeyboardArrowRight, contentDescription = null) }, modifier = modifier .defaultMinSize(minHeight = 56.dp) .clickable(onClick = onClick), ) } // Switch row — only the toggle interacts; the row is toggleable with Role.Switch. @Composable fun SaglitzToggleRow( icon: ImageVector, title: String, checked: Boolean, onCheckedChange: (Boolean) -> Unit, modifier: Modifier = Modifier, subtitle: String? = null, enabled: Boolean = true, ) { ListItem( headlineContent = { Text(title) }, supportingContent = subtitle?.let { { Text(it) } }, leadingContent = { Icon(icon, contentDescription = null) }, trailingContent = { // Row owns the toggle semantics; clear the Switch's own to avoid a double target. Switch( checked = checked, onCheckedChange = null, modifier = Modifier.clearAndSetSemantics {}, ) }, modifier = modifier .defaultMinSize(minHeight = 56.dp) .toggleable( value = checked, enabled = enabled, role = Role.Switch, onValueChange = onCheckedChange, // 48dp+ target across the whole row ), ) } // Value row — trailing detail text + chevron; one navigation target. @Composable fun SaglitzValueRow( icon: ImageVector, title: String, value: String, onClick: () -> Unit, modifier: Modifier = Modifier, ) { ListItem( headlineContent = { Text(title) }, leadingContent = { Icon(icon, contentDescription = null) }, trailingContent = { Row(verticalAlignment = Alignment.CenterVertically) { Text(value, color = MaterialTheme.colorScheme.onSurfaceVariant) Icon( Icons.AutoMirrored.Filled.KeyboardArrowRight, contentDescription = null, modifier = Modifier.size(24.dp), ) } }, colors = ListItemDefaults.colors(), modifier = modifier .defaultMinSize(minHeight = 56.dp) .clickable(onClick = onClick), ) }