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:
parent
78f03ada99
commit
3560665e83
2 changed files with 11 additions and 5 deletions
|
|
@ -144,7 +144,7 @@ fun EmptyHero(userName: String, onPick: (String) -> Unit, modifier: Modifier = M
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@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 cs = MaterialTheme.colorScheme
|
||||||
val isDark = isSystemInDarkTheme()
|
val isDark = isSystemInDarkTheme()
|
||||||
|
|
||||||
|
|
@ -162,7 +162,7 @@ fun ModePillsRow(selected: Int, onSelect: (Int) -> Unit, modifier: Modifier = Mo
|
||||||
) {
|
) {
|
||||||
chatModes.forEach { mode ->
|
chatModes.forEach { mode ->
|
||||||
val label = stringResource(mode.labelRes)
|
val label = stringResource(mode.labelRes)
|
||||||
val active = mode.labelRes == selected
|
val active = mode.labelRes in selected
|
||||||
val backgroundFill = if (active) {
|
val backgroundFill = if (active) {
|
||||||
if (isDark) cs.surface.copy(alpha = 0.8f) else cs.surface.copy(alpha = 0.88f)
|
if (isDark) cs.surface.copy(alpha = 0.8f) else cs.surface.copy(alpha = 0.88f)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -174,7 +174,7 @@ fun ModePillsRow(selected: Int, onSelect: (Int) -> Unit, modifier: Modifier = Mo
|
||||||
.clip(KaizenShapes.pill)
|
.clip(KaizenShapes.pill)
|
||||||
.background(backgroundFill)
|
.background(backgroundFill)
|
||||||
.border(1.2.dp, glassBorder, KaizenShapes.pill)
|
.border(1.2.dp, glassBorder, KaizenShapes.pill)
|
||||||
.clickable { onSelect(mode.labelRes) }
|
.clickable { onToggle(mode.labelRes) }
|
||||||
.padding(horizontal = 13.dp, vertical = 8.dp),
|
.padding(horizontal = 13.dp, vertical = 8.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ fun ChatScreen(
|
||||||
var input by remember { mutableStateOf("") }
|
var input by remember { mutableStateOf("") }
|
||||||
var isStreaming by remember { mutableStateOf(false) }
|
var isStreaming by remember { mutableStateOf(false) }
|
||||||
var nextId by remember { mutableStateOf(0L) }
|
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
|
// Navigation State
|
||||||
var currentScreen by remember { mutableStateOf(AppScreen.Chat) }
|
var currentScreen by remember { mutableStateOf(AppScreen.Chat) }
|
||||||
|
|
@ -513,7 +513,13 @@ fun ChatScreen(
|
||||||
.then(if (isTablet) Modifier.widthIn(max = 720.dp) else Modifier)
|
.then(if (isTablet) Modifier.widthIn(max = 720.dp) else Modifier)
|
||||||
) {
|
) {
|
||||||
Spacer(Modifier.height(24.dp))
|
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))
|
Spacer(Modifier.height(10.dp))
|
||||||
ChatInput(
|
ChatInput(
|
||||||
value = input,
|
value = input,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue