fix: mode pills are now multi-select toggles instead of single-select

Modes like Sampling, Bild, Suche can be combined — they're not mutually
exclusive. Changed from single Int to Set<Int> with toggle logic.
This commit is contained in:
Bruno Deanoz 2026-06-21 17:39:47 +02:00
parent 78f03ada99
commit 3560665e83
2 changed files with 11 additions and 5 deletions

View file

@ -144,7 +144,7 @@ fun EmptyHero(userName: String, onPick: (String) -> Unit, modifier: Modifier = M
}
@Composable
fun ModePillsRow(selected: Int, onSelect: (Int) -> Unit, modifier: Modifier = Modifier) {
fun ModePillsRow(selected: Set<Int>, onToggle: (Int) -> Unit, modifier: Modifier = Modifier) {
val cs = MaterialTheme.colorScheme
val isDark = isSystemInDarkTheme()
@ -162,7 +162,7 @@ fun ModePillsRow(selected: Int, onSelect: (Int) -> Unit, modifier: Modifier = Mo
) {
chatModes.forEach { mode ->
val label = stringResource(mode.labelRes)
val active = mode.labelRes == selected
val active = mode.labelRes in selected
val backgroundFill = if (active) {
if (isDark) cs.surface.copy(alpha = 0.8f) else cs.surface.copy(alpha = 0.88f)
} else {
@ -174,7 +174,7 @@ fun ModePillsRow(selected: Int, onSelect: (Int) -> Unit, modifier: Modifier = Mo
.clip(KaizenShapes.pill)
.background(backgroundFill)
.border(1.2.dp, glassBorder, KaizenShapes.pill)
.clickable { onSelect(mode.labelRes) }
.clickable { onToggle(mode.labelRes) }
.padding(horizontal = 13.dp, vertical = 8.dp),
verticalAlignment = Alignment.CenterVertically,
) {

View file

@ -94,7 +94,7 @@ fun ChatScreen(
var input by remember { mutableStateOf("") }
var isStreaming by remember { mutableStateOf(false) }
var nextId by remember { mutableStateOf(0L) }
var selectedMode by remember { mutableStateOf(R.string.mode_standard) }
var selectedModes by remember { mutableStateOf(setOf(R.string.mode_standard)) }
// Navigation State
var currentScreen by remember { mutableStateOf(AppScreen.Chat) }
@ -513,7 +513,13 @@ fun ChatScreen(
.then(if (isTablet) Modifier.widthIn(max = 720.dp) else Modifier)
) {
Spacer(Modifier.height(24.dp))
ModePillsRow(selected = selectedMode, onSelect = { selectedMode = it; haptics.tick() })
ModePillsRow(
selected = selectedModes,
onToggle = { mode ->
selectedModes = if (mode in selectedModes) selectedModes - mode else selectedModes + mode
haptics.tick()
},
)
Spacer(Modifier.height(10.dp))
ChatInput(
value = input,