


























@@ -42,6 +42,9 @@ import androidx.compose.runtime.Composable
4242import androidx.compose.runtime.LaunchedEffect
4343import androidx.compose.runtime.collectAsState
4444import androidx.compose.runtime.getValue
45+import androidx.compose.runtime.mutableStateOf
46+import androidx.compose.runtime.saveable.rememberSaveable
47+import androidx.compose.runtime.setValue
4548import androidx.compose.ui.Alignment
4649import androidx.compose.ui.Modifier
4750import androidx.compose.ui.draw.clip
@@ -66,6 +69,7 @@ internal fun V2ProvidersModelsScreen(
6669val providerRows = providerRows(providers = providers, models = models)
6770val modelGroups = sortedModelGroups(models)
6871val setupRows = providerSetupRows(providerRows)
72+var expandedModelProviders by rememberSaveable { mutableStateOf(emptyList<String>()) }
69737074LaunchedEffect(isConnected) {
7175if (isConnected) {
@@ -149,7 +153,20 @@ internal fun V2ProvidersModelsScreen(
149153 }
150154 } else {
151155 items(modelGroups, key = { it.first }) { entry ->
152-V2ModelGroup(provider = entry.first, models = entry.second)
156+val expanded = expandedModelProviders.contains(entry.first)
157+V2ModelGroup(
158+ provider = entry.first,
159+ models = entry.second,
160+ expanded = expanded,
161+ onToggle = {
162+ expandedModelProviders =
163+if (expanded) {
164+ expandedModelProviders - entry.first
165+ } else {
166+ expandedModelProviders + entry.first
167+ }
168+ },
169+ )
153170 }
154171 }
155172 }
@@ -418,24 +435,33 @@ private fun V2ModelCatalogEmpty(
418435private fun V2ModelGroup(
419436provider: String,
420437models: List<GatewayModelSummary>,
438+expanded: Boolean,
439+onToggle: () -> Unit,
421440) {
422441ClawPanel(contentPadding = PaddingValues(horizontal = 0.dp, vertical = 0.dp)) {
423442Column {
424-Row(modifier = Modifier.fillMaxWidth().heightIn(min = 52.dp).padding(horizontal = 10.dp, vertical = 6.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(10.dp)) {
425-V2ProviderBadge(text = providerDisplayName(provider))
426-Text(text = providerDisplayName(provider), style = ClawTheme.type.body, color = ClawTheme.colors.text, modifier = Modifier.weight(1f), maxLines = 1)
427-V2ProviderMiniTag(text = "${models.size} models")
428-Icon(imageVector = Icons.Default.KeyboardArrowDown, contentDescription = null, modifier = Modifier.size(13.dp), tint = ClawTheme.colors.textMuted)
443+Surface(onClick = onToggle, color = Color.Transparent, contentColor = ClawTheme.colors.text) {
444+Row(modifier = Modifier.fillMaxWidth().heightIn(min = 52.dp).padding(horizontal = 10.dp, vertical = 6.dp), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(10.dp)) {
445+V2ProviderBadge(text = providerDisplayName(provider))
446+Text(text = providerDisplayName(provider), style = ClawTheme.type.body, color = ClawTheme.colors.text, modifier = Modifier.weight(1f), maxLines = 1)
447+V2ProviderMiniTag(text = "${models.size} models")
448+Icon(imageVector = if (expanded) Icons.Default.KeyboardArrowDown else Icons.AutoMirrored.Filled.KeyboardArrowRight, contentDescription = if (expanded) "Collapse ${providerDisplayName(provider)} models" else "Expand ${providerDisplayName(provider)} models", modifier = Modifier.size(14.dp), tint = ClawTheme.colors.textMuted)
449+ }
429450 }
430451HorizontalDivider(color = ClawTheme.colors.border, thickness = 1.dp)
431- models.take(3).forEach { model ->
452+val visibleModels = if (expanded) models else models.take(3)
453+ visibleModels.forEachIndexed { index, model ->
432454V2ModelRow(model)
433-HorizontalDivider(color = ClawTheme.colors.border, thickness = 1.dp)
455+if (index != visibleModels.lastIndex || models.size > visibleModels.size) {
456+HorizontalDivider(color = ClawTheme.colors.border, thickness = 1.dp)
457+ }
434458 }
435-if (models.size > 3) {
436-Row(modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp, vertical = 6.dp), verticalAlignment = Alignment.CenterVertically) {
437-Text(text = "View all models", style = ClawTheme.type.caption.copy(fontSize = 12.5.sp, lineHeight = 16.sp), color = ClawTheme.colors.textMuted, modifier = Modifier.weight(1f))
438-Icon(imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, contentDescription = null, modifier = Modifier.size(14.dp), tint = ClawTheme.colors.text)
459+if (models.size > visibleModels.size) {
460+Surface(onClick = onToggle, color = Color.Transparent, contentColor = ClawTheme.colors.text) {
461+Row(modifier = Modifier.fillMaxWidth().padding(horizontal = 10.dp, vertical = 8.dp), verticalAlignment = Alignment.CenterVertically) {
462+Text(text = "View all models", style = ClawTheme.type.caption.copy(fontSize = 12.5.sp, lineHeight = 16.sp), color = ClawTheme.colors.textMuted, modifier = Modifier.weight(1f))
463+Icon(imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight, contentDescription = "View all models", modifier = Modifier.size(14.dp), tint = ClawTheme.colors.text)
464+ }
439465 }
440466 }
441467 }
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。