From 04227fa5c88bd0b3a8984d4db0b664548295a3e6 Mon Sep 17 00:00:00 2001 From: b-dev-mobile Date: Wed, 8 Jul 2026 07:33:27 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=B8=D0=B7=D0=B0=D0=B9=D0=BD=20=D0=A4?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20(=D1=87=D0=B0=D0=BD=D0=BA=201)?= =?UTF-8?q?:=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0=20=D1=81=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=20=D0=BF=D0=BE=20=D0=BC=D0=B0=D0=BA=D0=B5?= =?UTF-8?q?=D1=82=D1=83=20(Figma=20F-18/F-21/F-22)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Имя + расширение инлайн (расширение серым TextSecondary), одна строка — вместо имени в 2 строки + мета (размер·дата). По мобильному макету. - Выбранная строка — светло-зелёный фон (F7Colors.PrimaryLight), скругление. - Иконка типа 28→24dp. На токенах F7Spacing/F7Radius. - Строка на существующей загрузке иконок с сервера; локальные ico + офлайн — следом. feature:files компилируется. Визуальная сверка — на устройстве (side-by-side). --- .../f7cloud/feature/files/FilesComponents.kt | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/feature/files/src/main/java/ru/forbion/f7cloud/feature/files/FilesComponents.kt b/feature/files/src/main/java/ru/forbion/f7cloud/feature/files/FilesComponents.kt index 834316d..6f8b2b9 100644 --- a/feature/files/src/main/java/ru/forbion/f7cloud/feature/files/FilesComponents.kt +++ b/feature/files/src/main/java/ru/forbion/f7cloud/feature/files/FilesComponents.kt @@ -64,8 +64,13 @@ import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupProperties import androidx.compose.ui.window.DialogProperties import coil.compose.AsyncImage +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.withStyle import ru.forbion.f7cloud.core.designsystem.F7AlertDialog import ru.forbion.f7cloud.core.designsystem.F7Colors +import ru.forbion.f7cloud.core.designsystem.F7Radius +import ru.forbion.f7cloud.core.designsystem.F7Spacing import ru.forbion.f7cloud.core.designsystem.F7OutlinedField import ru.forbion.f7cloud.core.designsystem.F7PrimaryButton import ru.forbion.f7cloud.core.designsystem.F7SecondaryButton @@ -775,16 +780,18 @@ fun FilesListRow( onMenuClick: (Rect) -> Unit, ) { var menuAnchor by remember { mutableStateOf(null) } - val displayName = if (showExtensions || item.isDirectory) { - item.name - } else { - item.name.substringBeforeLast('.', item.name) - } + // Имя + расширение (расширение серым, инлайн) — по макету моб. Файлов (F-18/F-22). + val hasExt = !item.isDirectory && item.name.contains('.') + val baseName = if (hasExt) item.name.substringBeforeLast('.') else item.name + val extension = if (hasExt && showExtensions) "." + item.name.substringAfterLast('.') else "" Row( modifier = Modifier .fillMaxWidth() + .clip(RoundedCornerShape(F7Radius.md)) + // выбранная строка — светло-зелёный фон (макет F-21) + .background(if (selected) F7Colors.PrimaryLight else Color.Transparent) .clickable(onClick = onOpenClick) - .padding(horizontal = 4.dp, vertical = 10.dp), + .padding(horizontal = F7Spacing.sm, vertical = 10.dp), verticalAlignment = Alignment.CenterVertically, ) { Checkbox( @@ -795,37 +802,25 @@ fun FilesListRow( AsyncImage( model = FileIcons.iconUrl(serverUrl, item.name, item.isDirectory), contentDescription = null, - modifier = Modifier.size(28.dp), + modifier = Modifier.size(24.dp), contentScale = ContentScale.Fit, ) - Column( + Text( + text = buildAnnotatedString { + append(baseName) + if (extension.isNotEmpty()) { + withStyle(SpanStyle(color = F7Colors.TextSecondary)) { append(" $extension") } + } + }, modifier = Modifier .weight(1f) - .padding(horizontal = 8.dp), - ) { - Text( - text = displayName, - style = MaterialTheme.typography.bodyMedium, - fontWeight = FontWeight.Medium, - maxLines = 2, - overflow = TextOverflow.Ellipsis, - ) - val meta = buildList { - if (!item.isDirectory && item.size != null && item.size > 0) { - add(formatFileSize(item.size)) - } - item.lastModified?.let { add(formatModified(it)) } - }.joinToString(" · ") - if (meta.isNotBlank()) { - Text( - text = meta, - style = MaterialTheme.typography.bodySmall, - color = F7Colors.TextSecondary, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - } - } + .padding(horizontal = F7Spacing.sm), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Medium, + color = F7Colors.TextPrimary, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) Box( modifier = Modifier .size(36.dp)