diff --git a/app/src/main/kotlin/top/yeij/cyrene/ui/sessions/SessionDrawerContent.kt b/app/src/main/kotlin/top/yeij/cyrene/ui/sessions/SessionDrawerContent.kt index 235f6d6..f62c67e 100644 --- a/app/src/main/kotlin/top/yeij/cyrene/ui/sessions/SessionDrawerContent.kt +++ b/app/src/main/kotlin/top/yeij/cyrene/ui/sessions/SessionDrawerContent.kt @@ -23,11 +23,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog +import top.yukonga.miuix.kmp.basic.BasicComponent import top.yukonga.miuix.kmp.basic.Text import top.yukonga.miuix.kmp.basic.TextButton import top.yukonga.miuix.kmp.theme.MiuixTheme -/** 侧边栏内容:会话列表 + IoT/设置占位 + 登出。 */ +/** 侧边栏内容:会话列表 + IoT/设置占位 + 登出。列表项统一用 Miuix 的 MD3 圆角卡片。 */ @Composable fun ColumnScope.SessionDrawerContent( state: SessionsUiState, @@ -52,14 +53,17 @@ fun ColumnScope.SessionDrawerContent( Row( modifier = Modifier .fillMaxWidth() - .padding(horizontal = 20.dp, vertical = 4.dp), + .padding(start = 20.dp, end = 12.dp, bottom = 4.dp), verticalAlignment = Alignment.CenterVertically, ) { Text("会话", style = MiuixTheme.textStyles.subtitle, modifier = Modifier.weight(1f)) TextButton("新建", onClick = onCreate) } - LazyColumn(modifier = Modifier.weight(1f)) { + LazyColumn( + modifier = Modifier.weight(1f), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { items(items = state.sessions, key = { it.id }) { session -> SessionRow( session = session, @@ -86,9 +90,11 @@ fun ColumnScope.SessionDrawerContent( ) } - Spacer(Modifier.height(8.dp)) + Spacer(Modifier.height(12.dp)) DrawerAction("IoT(规划中)", onOpenIot) - DrawerAction("App 设置(规划中)", onOpenSettings) + Spacer(Modifier.height(8.dp)) + DrawerAction("App 设置", onOpenSettings) + Spacer(Modifier.height(8.dp)) DrawerAction("登出", onLogout) Spacer(Modifier.height(16.dp)) @@ -113,42 +119,35 @@ private fun SessionRow( onClick: () -> Unit, onDelete: () -> Unit, ) { - Row( - modifier = Modifier - .fillMaxWidth() - .clickable(onClick = onClick) - .padding(horizontal = 20.dp, vertical = 12.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Text( - text = session.title, - style = MiuixTheme.textStyles.main, - color = if (active) MiuixTheme.colorScheme.primary else MiuixTheme.colorScheme.onBackground, - modifier = Modifier.weight(1f), - ) - if (!session.isMain) { - Text( - text = "删除", - style = MiuixTheme.textStyles.footnote1, - color = MiuixTheme.colorScheme.error, - modifier = Modifier - .clickable(onClick = onDelete) - .padding(horizontal = 8.dp, vertical = 4.dp), - ) - } - } + BasicComponent( + title = session.title, + onClick = onClick, + endActions = { + if (active) { + Text( + text = "✓", + style = MiuixTheme.textStyles.main, + color = MiuixTheme.colorScheme.primary, + modifier = Modifier.padding(horizontal = 6.dp), + ) + } + if (!session.isMain) { + Text( + text = "删除", + style = MiuixTheme.textStyles.footnote1, + color = MiuixTheme.colorScheme.error, + modifier = Modifier + .clickable(onClick = onDelete) + .padding(horizontal = 8.dp, vertical = 4.dp), + ) + } + }, + ) } @Composable private fun DrawerAction(label: String, onClick: () -> Unit) { - Text( - text = label, - style = MiuixTheme.textStyles.main, - modifier = Modifier - .fillMaxWidth() - .clickable(onClick = onClick) - .padding(horizontal = 20.dp, vertical = 14.dp), - ) + BasicComponent(title = label, onClick = onClick) } @Composable diff --git a/app/src/main/kotlin/top/yeij/cyrene/ui/settings/SettingsScreen.kt b/app/src/main/kotlin/top/yeij/cyrene/ui/settings/SettingsScreen.kt index f828fab..cd9249e 100644 --- a/app/src/main/kotlin/top/yeij/cyrene/ui/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/top/yeij/cyrene/ui/settings/SettingsScreen.kt @@ -1,6 +1,5 @@ package top.yeij.cyrene.ui.settings -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -22,6 +21,7 @@ import top.yeij.cyrene.BuildConfig import top.yeij.cyrene.app.AppContainer import top.yeij.cyrene.core.prefs.AppPrefs import top.yeij.cyrene.core.prefs.ThemeMode +import top.yukonga.miuix.kmp.basic.BasicComponent import top.yukonga.miuix.kmp.basic.Scaffold import top.yukonga.miuix.kmp.basic.SmallTopAppBar import top.yukonga.miuix.kmp.basic.Text @@ -59,6 +59,7 @@ fun SettingsScreen( selected = prefs.themeMode == mode, onClick = { scope.launch { settings.setThemeMode(mode) } }, ) + Spacer(Modifier.height(8.dp)) } SectionTitle("聊天") @@ -68,6 +69,7 @@ fun SettingsScreen( checked = prefs.showNarration, onCheckedChange = { scope.launch { settings.setShowNarration(it) } }, ) + Spacer(Modifier.height(8.dp)) SwitchPreference( title = "思维链默认展开", summary = "流式期间展开思维链,结束后自动折叠", @@ -110,22 +112,19 @@ private fun ThemeOption( selected: Boolean, onClick: () -> Unit, ) { - Row( - modifier = Modifier - .fillMaxWidth() - .clickable(onClick = onClick) - .padding(horizontal = 20.dp, vertical = 14.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - Text(label, style = MiuixTheme.textStyles.main, modifier = Modifier.weight(1f)) - if (selected) { - Text( - text = "✓", - style = MiuixTheme.textStyles.main, - color = MiuixTheme.colorScheme.primary, - ) - } - } + BasicComponent( + title = label, + onClick = onClick, + endActions = { + if (selected) { + Text( + text = "✓", + style = MiuixTheme.textStyles.main, + color = MiuixTheme.colorScheme.primary, + ) + } + }, + ) } private fun ThemeMode.label(): String = when (this) {