From 312537cd8a900422aca5f38e7298ba2fb1451fce Mon Sep 17 00:00:00 2001 From: b-dev-mobile Date: Wed, 8 Jul 2026 00:56:43 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A2=D1=80=D0=B5=D0=BA=20=D0=B4=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D0=B9=D0=BD=D0=B0:=20=D1=82=D0=BE=D0=BA=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B-=D1=84=D1=83=D0=BD=D0=B4=D0=B0=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=20(F7Spacing/F7Radius)=20+=20=D0=BA=D0=B0=D1=80=D1=82=D0=B0=20?= =?UTF-8?q?Figma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Снятие токенов из Figma роли design (ocVUCYCrfFUoqYYvlcLPBF): цвета сверены — совпадают с F7Colors; типографика Raleway 14/18/20/24 (база в F7Typography есть). - F7Spacing (4dp-сетка) + F7Radius — закрывают аудитный пробел «нет spacing-токенов». - docs/DESIGN-SOURCE.md: карта страниц/секций Figma, доступ по API, процесс попиксельной вёрстки, заметка про rate-limit (точечные node-запросы). Источник — Figma (боевой forbion не трогаю). Координация mail/044. designsystem компилируется. --- CHANGELOG.md | 2 + .../f7cloud/core/designsystem/F7Spacing.kt | 31 ++++++++++++ docs/DESIGN-SOURCE.md | 49 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Spacing.kt create mode 100644 docs/DESIGN-SOURCE.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 7327529..9107a83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ Формат: `ГГГГ-ММ-ДД | версия | изменение | контракты | риск` +- 2026-07-08 | v0.5.114 (122) | Трек дизайна (старт): снятие дизайн-токенов из Figma роли design (файл ocVUCYCrfFUoqYYvlcLPBF, доступ по API-токену вне git). Цвета сверены — совпадают с F7Colors; типографика — Raleway 14/18/20/24; заведены F7Spacing (4dp-сетка) + F7Radius (аудит: не было spacing-токенов, ~1087 инлайновых .dp). docs/DESIGN-SOURCE.md — карта Figma + процесс попиксельной вёрстки. Источник — Figma, боевой forbion НЕ трогаю. Координация — mail/044 | дизайн-система (аддитивно, пока не используется) | нет: новые токены, поведение не меняется + - 2026-07-07 | v0.5.114 (122) | Этап 1 (version catalog): заведён gradle/libs.versions.toml, 15 module build.gradle мигрированы на libs.* (скриптом). Устранён дрейф версий: coroutines 1.8.1/1.10.1→1.10.1, coil 2.6.0/2.7.0→2.7.0, lifecycle 2.8.1/2.8.7→2.8.7, activity-compose 1.9.0/1.10.1→1.10.1, core-ktx 1.13.1/1.15.0→1.15.0. Firebase в core/push переведён на bom (был explicit 24.0.1). Compose BOM в каталоге вместо дубля в каждом модуле. Проверено сборкой | контракты не менялись; версии унифицированы вверх (minor-бампы) | низкий: сборочная гигиена, унификация версий - 2026-07-07 | v0.5.114 (122) | Этап 1 (статанализ): detekt 1.23.8 + formatting-ruleset (ktlint) на все наши модули (vendor исключён), совместим с Kotlin 2.3. config/detekt/detekt.yml + per-module detekt-baseline.xml (~403 текущих замечаний зафиксированы → зелёный, ловит только новые). Добавлен в CI verify-джобу. Нормальные сборки (assembleDebug/Release) не затрагивает (detekt только в check/CI) | процесс качества | нет: тулинг, кода приложения не трогает - 2026-07-07 | v0.5.114 (122) | Этап 1 (единый OkHttpClient, ч.2 — 401 централизован): добавлен UnauthorizedInterceptor (401→UnauthorizedException) в NetworkFactory (флаг throwOnUnauthorized, по умолч. true). Удалены 75 ручных проверок `if(code==401) throw` в 16 репозиториях. Login-верификация (AuthVerifier) исключена (throwOnUnauthorized=false: 401=«неверный пароль», не session-expired). Побочно: теперь 401 ловится единообразно ВЕЗДЕ, включая пути, что раньше проверку забывали. +3 теста (MockWebServer: 401 бросает, 200/403 проходят) — всего 18. Проверено сборкой | контракты не менялись; поведение 401 сохранено (interceptor бросает то же исключение) | средний: затрагивает обработку 401 во всех репозиториях; login-путь исключён явно, покрыто тестами diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Spacing.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Spacing.kt new file mode 100644 index 0000000..f074a2e --- /dev/null +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7Spacing.kt @@ -0,0 +1,31 @@ +package ru.forbion.f7cloud.core.designsystem + +import androidx.compose.ui.unit.dp + +/** + * Токены отступов и радиусов (4dp-сетка). До этого отступы задавались числами по месту + * (аудит: ~1087 инлайновых .dp без токенов) — единая шкала для попиксельной вёрстки по Figma. + * Точные значения конкретных экранов сверяются с макетом; эти — базовая сетка. + */ +object F7Spacing { + val none = 0.dp + val xxs = 2.dp + val xs = 4.dp + val sm = 8.dp + val md = 12.dp + val lg = 16.dp + val xl = 20.dp + val xxl = 24.dp + val xxxl = 32.dp + + /** Горизонтальные поля экрана (мобильный контент). */ + val screenHorizontal = 16.dp +} + +object F7Radius { + val none = 0.dp + val sm = 6.dp + val md = 10.dp + val lg = 14.dp + val pill = 999.dp +} diff --git a/docs/DESIGN-SOURCE.md b/docs/DESIGN-SOURCE.md new file mode 100644 index 0000000..25691e3 --- /dev/null +++ b/docs/DESIGN-SOURCE.md @@ -0,0 +1,49 @@ +# Источник дизайна — Figma (попиксельная мобильная вёрстка) + +Задача: мобильный клиент = мобильная версия F7 попиксельно. Источник истины — **Figma роли `design`** +(не боевой forbion; glb устарел). Координация — mail/044 (через integrator-b). Приоритет: +**Файлы → Почта → Конференции**, референс **360dp**, тема светлая. + +## Доступ к Figma API + +Токен — вне git: `/root/.f7cloud-keys/figma.env` (`FIGMA_TOKEN`, `FIGMA_FILE=ocVUCYCrfFUoqYYvlcLPBF`). +```bash +source /root/.f7cloud-keys/figma.env +curl -H "X-Figma-Token: $FIGMA_TOKEN" "https://api.figma.com/v1/files/$FIGMA_FILE/nodes?ids=&depth=2" +``` +⚠️ **Rate limit:** глубокие сканы всей страницы (`1:90` depth≥3) ловят **429**. Работать ТОЧЕЧНО — +запрашивать конкретные node ID нужного экрана с малой глубиной. Рендер кадра в PNG: +`GET /v1/images/$FIGMA_FILE?ids=&format=png&scale=2`. + +## Карта файла (страницы) + +| ID | Страница | +|---|---| +| `1:90` | 🟢 Дизайн облачного рабочего места — ОСНОВНОЙ дизайн (65 секций по модулям) | +| `0:1` | Брендбук (токены: TYPOGRAPHY 1:116, цвета 97:8269) | +| `2095:46379` | ⚫️ Пробная тёмная тема (на будущее) | + +Мобильные экраны — кадры **360px** (полноэкранные ~360x800), разбросаны по секциям модулей и по +верхнему уровню `1:90`. Секции: Файлы `17:4427`/`948:65419`, Почта `97:16912`/`1609:71537`, +Конференции/Встречи `4:1166`, Конференция `1002:67493`. NB: ссылка владельца `1327:29454` — +ДЕСКТОП (1440), не мобиль. + +## Снятые токены (сверено с Figma) + +**Цвета** — совпадают с текущим `F7Colors` (палитра снята точно ранее): Primary `#70B62B`, +Background `#FBFBFB`, Surface `#FFFFFF`, SurfaceMuted `#F5F5F5`, TextPrimary `#151515`, +TextSecondary `#808080`, Border `#E6E6E6`, PrimaryLight `#F1F8EA`. + +**Типографика** — шрифт **Raleway** (medium 500 / semibold 600), шкала 14/18/20/24px +(lh 20/22/24/26). В `F7Typography` есть база; точные размеры конкретных экранов сверяются поэкранно. + +**Spacing/радиусы** — раньше НЕ было токенов (аудит: ~1087 инлайновых .dp). Заведены +`F7Spacing` (4dp-сетка) + `F7Radius`. Точные значения экрана — с макета. + +## Процесс попиксельной вёрстки (на экран) + +1. Найти node ID мобильного экрана (360) в Figma, отрендерить PNG-эталон (scale=2). +2. Извлечь измерения: размеры/паддинги/цвета/текст-стили дочерних узлов (точечный nodes-запрос). +3. Свести к токенам (`F7Colors`/`F7Spacing`/`F7Typography`), реализовать в Compose. +4. Верификация side-by-side: PNG Figma ↔ скриншот приложения (владелец — физ.телефон + BlueStacks; + universal debug-APK со всеми ABI готов, дефолт-URL glb).