From bfa870c0212da417309bcf8b9347af2a74774b7e Mon Sep 17 00:00:00 2001 From: b-dev-mobile Date: Mon, 13 Jul 2026 10:37:57 +0000 Subject: [PATCH] =?UTF-8?q?designsystem:=20detekt=20=D0=B7=D0=B5=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=D1=8B=D0=B9=20+=20Fd-=D1=84=D0=B8=D0=BA=D1=81=20?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=D0=BF=D0=BE=D0=BA=20=D1=83=D0=B2=D0=B5=D0=B4?= =?UTF-8?q?=D0=BE=D0=BC=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20(mail/114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - detekt --auto-correct: NoMultipleSpaces/ImportOrdering/NoUnusedImports/spacing по F7Colors/F7Components/F7MobileBottomBar/F7AppMenuSheet/F7Typography (был красный на main, 18) - F7NotificationActionUi вынесен в свой файл (fix MatchingDeclarationName) - NotificationActionButton: подпись 1.5× вместо 2× (на w360dp удвоенный кегль рвал слово «Присоединитьс/я»; forbion не переносит), maxLines=2, паддинги 16/9 - зазор subject↔message 6→10dp (сливались на 360dp) Модуль detekt+compile green. --- .../core/designsystem/F7AppMenuSheet.kt | 3 +- .../f7cloud/core/designsystem/F7Colors.kt | 24 +++---- .../f7cloud/core/designsystem/F7Components.kt | 30 ++++---- .../core/designsystem/F7MobileBottomBar.kt | 3 +- .../designsystem/F7NotificationActionUi.kt | 7 ++ .../core/designsystem/F7NotificationRow.kt | 20 +++--- .../f7cloud/core/designsystem/F7Typography.kt | 71 ++++++++++++++++--- 7 files changed, 107 insertions(+), 51 deletions(-) create mode 100644 core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationActionUi.kt diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7AppMenuSheet.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7AppMenuSheet.kt index 88f20e1..4dd38bf 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7AppMenuSheet.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7AppMenuSheet.kt @@ -13,15 +13,14 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.navigationBarsPadding -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Colors.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Colors.kt index 6bd793c..6a2baa2 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Colors.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Colors.kt @@ -8,18 +8,18 @@ import androidx.compose.ui.graphics.Color */ object F7Colors { // --- Base palette (Figma «Брендбук») — точные значения --- - val Black = Color(0xFF151515) // Base/Black — основной текст - val Black2 = Color(0xFF1F1F1F) // Base/Black 2 - val Grey1 = Color(0xFF808080) // Base/Grey 1 — вторичный текст - val Grey2 = Color(0xFFF5F5F5) // Base/Grey 2 — приглушённый фон - val Grey3 = Color(0xFFE6E6E6) // Base/Grey 3 — границы - val Green = Color(0xFF70B62B) // Base/Green — primary - val Green30 = Color(0x4D70B62B) // Base/Green 30% - val Green10 = Color(0x1A70B62B) // Base/Green 10% - val Yellow = Color(0xFFF6E120) // Base/Yellow (тег «Позже» и т.п.) - val Purple = Color(0xFF9747FF) // Base/Purple (тег «Личное» и т.п.) - val Red = Color(0xFFFF7A66) // Base/Red — ошибки/удаление (дизайн!) - val Red10 = Color(0x1AFF7A66) // Base/Red 10% — фон ошибки + val Black = Color(0xFF151515) // Base/Black — основной текст + val Black2 = Color(0xFF1F1F1F) // Base/Black 2 + val Grey1 = Color(0xFF808080) // Base/Grey 1 — вторичный текст + val Grey2 = Color(0xFFF5F5F5) // Base/Grey 2 — приглушённый фон + val Grey3 = Color(0xFFE6E6E6) // Base/Grey 3 — границы + val Green = Color(0xFF70B62B) // Base/Green — primary + val Green30 = Color(0x4D70B62B) // Base/Green 30% + val Green10 = Color(0x1A70B62B) // Base/Green 10% + val Yellow = Color(0xFFF6E120) // Base/Yellow (тег «Позже» и т.п.) + val Purple = Color(0xFF9747FF) // Base/Purple (тег «Личное» и т.п.) + val Red = Color(0xFFFF7A66) // Base/Red — ошибки/удаление (дизайн!) + val Red10 = Color(0x1AFF7A66) // Base/Red 10% — фон ошибки val Primary = Green val PrimaryHover = Color(0xFF6FAF2E) diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Components.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Components.kt index 370c8ea..588f741 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Components.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Components.kt @@ -5,52 +5,52 @@ import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.horizontalScroll -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.widthIn -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.TextButton import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextFieldDefaults import androidx.compose.material3.Surface import androidx.compose.material3.Text +import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable -import androidx.compose.foundation.text.KeyboardActions -import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type -import androidx.compose.ui.text.input.KeyboardCapitalization -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.text.input.VisualTransformation -import androidx.compose.ui.draw.clip import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.KeyboardCapitalization +import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.draw.shadow -import androidx.compose.ui.graphics.Brush -import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7MobileBottomBar.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7MobileBottomBar.kt index 72d869c..a0452ad 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7MobileBottomBar.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7MobileBottomBar.kt @@ -7,9 +7,9 @@ import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable @@ -44,6 +44,7 @@ private fun barIcon(name: String): String = "file:///android_asset/menu/$name" private val BottomBarWidth = 328.dp private val BottomBarHeight = 61.dp private val BottomBarButtonSize = 55.dp + // Живой сайт: app-link/бургер img = 25px; стрелка «назад» мельче. private val BottomBarIconSize = 25.dp private val BottomBarSectionIconSize = 25.dp diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationActionUi.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationActionUi.kt new file mode 100644 index 0000000..6759210 --- /dev/null +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationActionUi.kt @@ -0,0 +1,7 @@ +package ru.forbion.f7cloud.core.designsystem + +/** Кнопка-действие уведомления (label/link/type/primary) для рендера в строке. */ +data class F7NotificationActionUi( + val label: String, + val primary: Boolean, +) diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationRow.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationRow.kt index ed8779d..4d10b91 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationRow.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7NotificationRow.kt @@ -30,13 +30,6 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import coil.request.ImageRequest -import okhttp3.Credentials - -/** Кнопка-действие уведомления (label/link/type/primary) для рендера в строке. */ -data class F7NotificationActionUi( - val label: String, - val primary: Boolean, -) private fun TextStyle.doubled(): TextStyle = copy( fontSize = fontSize * 2, @@ -145,7 +138,7 @@ fun F7NotificationRow( overflow = TextOverflow.Ellipsis, modifier = Modifier .fillMaxWidth() - .padding(start = 78.dp, top = 6.dp), + .padding(start = 78.dp, top = 10.dp), ) } if (actions.isNotEmpty()) { @@ -188,15 +181,22 @@ private fun NotificationActionButton( .background(F7Colors.Surface, shape) .border(BorderStroke(1.dp, F7Colors.Border), shape) } + val labelStyle = MaterialTheme.typography.labelLarge.let { s -> + // Подпись действия — 1.5× (не 2×): на w360dp удвоенный кегль рвал длинные слова + // («Присоединитьс/я»); на вебе forbion кнопки не переносятся посреди слова. + s.copy(fontSize = s.fontSize * 1.5f, lineHeight = s.lineHeight * 1.5f) + } Box( - modifier = boxModifier.padding(horizontal = 20.dp, vertical = 10.dp), + modifier = boxModifier.padding(horizontal = 16.dp, vertical = 9.dp), contentAlignment = Alignment.Center, ) { Text( text = label, - style = MaterialTheme.typography.labelLarge.doubled(), + style = labelStyle, fontWeight = FontWeight.SemiBold, color = if (primary) F7Colors.TextOnPrimary else F7Colors.TextPrimary, + maxLines = 2, + overflow = TextOverflow.Ellipsis, ) } } diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Typography.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Typography.kt index 9c366e4..7d1f110 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Typography.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Typography.kt @@ -6,7 +6,6 @@ import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp -import ru.forbion.f7cloud.core.designsystem.R val RalewayFamily = FontFamily( Font(R.font.raleway_medium, FontWeight.Medium), @@ -14,14 +13,64 @@ val RalewayFamily = FontFamily( ) val F7Typography = Typography( - displayLarge = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.SemiBold, fontSize = 24.sp, lineHeight = 28.sp), - titleLarge = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.SemiBold, fontSize = 24.sp, lineHeight = 28.sp), - titleMedium = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 16.sp, lineHeight = 20.sp), - titleSmall = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp), - bodyLarge = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 16.sp, lineHeight = 20.sp), - bodyMedium = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp), - bodySmall = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp), - labelLarge = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp), - labelMedium = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp), - labelSmall = TextStyle(fontFamily = RalewayFamily, fontWeight = FontWeight.Medium, fontSize = 11.sp, lineHeight = 14.sp), + displayLarge = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 24.sp, + lineHeight = 28.sp + ), + titleLarge = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.SemiBold, + fontSize = 24.sp, + lineHeight = 28.sp + ), + titleMedium = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 20.sp + ), + titleSmall = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 20.sp + ), + bodyLarge = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 20.sp + ), + bodyMedium = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 20.sp + ), + bodySmall = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp + ), + labelLarge = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 20.sp + ), + labelMedium = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp + ), + labelSmall = TextStyle( + fontFamily = RalewayFamily, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 14.sp + ), )