SHiNE-server/shine-UI/docs/design/messages-list-v2.md

5.3 KiB
Raw Blame History

Личные сообщения (messages-list) — дизайн v2

Экран ЛС — списочная форма экрана «Связи»: тип отношения читается через цвет обода/ауры аватара и один правый статус. Тёмный космический фон + золотой header.

Reference source: owner-approved chat visual reference; image asset is not yet stored in repository.

Источник данных

  • Demo/lab: мок js/mock-data.jsdirectMessages (семантические поля, цвет не хранится).
  • Прод: те же поля придут из реальных relations (relationFlagsForTarget / shineConfirmed / shine).
  • Маршруты:
    • /messages-list — защищённый (требует сессии).
    • /messages-list/lab — гость-демо (мок, без сети/WS, пригоден для скриншотов).

Семантика → визуал

Решает только js/pages/messages/dm-visual-resolver.js. В данных цвет НЕ хранится.

Поля сообщения: relationType (contact|friend|family), relationRole, isShining, isConfirmed, hasActiveLink, unreadCount, preview. (toneOverride — только для теста.)

Цвета (значение)

Цвет Токен Значение
violet --rel-contact #8C63FF обычный контакт (дефолт)
gold --rel-family #F0B82E семья / близкий круг / важная связь
celestial --rel-shining #68D8FF сияющий
emerald --rel-link #19E58A ТОЛЬКО активный статус «Связь»

Обод аватара: isShining → celestial; иначе family → gold; иначе → violet. «Подтверждён» НЕ красит обод золотым (золото = семья; подтверждение — правый статус).

Приоритет правого статуса

hasActiveLink → «Связь» (emerald) > isConfirmed → «Подтверждён» (gold shield) > ничего. На карточке максимум ОДИН главный статус.

Unread

Отдельная violet/cool сфера (НЕ изумруд). Только при >0; 199, далее 99+. Идёт после статуса, перед chevron.

Матрица состояний (demo-мок покрывает все)

# relationType shining confirmed link unread Обод Правый статус Бейдж
M01 contact 0 violet 🛡 Подтверждён
M02 contact 2 violet 🔗 Связь 2
M03 contact 5 celestial 🔗 Связь 5
M04 contact 0 violet
M05 family 0 gold 🛡 Подтверждён
M06 family 1 gold 🔗 Связь (приоритет link>confirmed) 1

Размеры

  • Карточка: min-height 92px, radius 26px.
  • Зазор списка: 8px (flex-column).
  • Аватар-обод .dm-av: 56px (фото/инициалы — 50px внутри).
  • Капсула «Связь»: высота 32px, radius 16px, изумрудный бордер, почти прозрачный fill.
  • Header: grid 1fr auto 1fr (бренд слева / title строго по центру / «+» справа), title 18px.

Сияющая сфера — связь с «Связями» (обязательно)

DM-сияние НЕ изобретает свой эффект, а повторяет язык сияющего узла графа:

  • те же общие keyframes из styles/network-graph.css: fg-shine-glow (пульс box-shadow)
    • fg-shine-halo (дыхание ореола: scale/opacity);
  • та же небесная палитра и тот же rim rgba(150,240,255,0.62);
  • тот же радиальный ореол (те же стопы градиента), inset: -12px — как у узла графа (узел 58px ↔ аватар 56px, scale ≈ 1, отдельный масштабный коэффициент не нужен);
  • filter: blur(3.4px)feGaussianBlur stdDeviation="3.4" SVG-фильтра #fg-shine-glow графа. CSS-blur используется потому, что SVG-фильтр объявлен только на странице «Связи»;
  • prefers-reduced-motion → анимации выключаются.

Разрешён только controlled scale factor; никаких отдельных hardcoded-параметров, если они уже существуют в визуальном языке «Связей».

Фон

Фон .dm-screen (#05070A + орбы dm-orbs-drift) — утверждённая база, НЕ меняется. Все эффекты редизайна ограничены .dm-* (карточка, обод аватара, статус, бейдж, header, «+»). Критерий: если скрыть карточки/аватары/header/nav/статусы — фон остаётся прежним.