# Карта: Почта Снята по **мобильной веб-версии** forbion.f7cloud.ru (вьюпорт ~400px, плавающая нижняя панель — мобильная тема), аккаунт `cloude` / почтовый ящик `cloude@forbion.ru`, **строго read-only** (mail/073). Живой UI — полный **Nextcloud Mail 5.7.15**. **Источники узлов:** `[live]` — пройдено в браузере; `[src]` — достроено по читаемому исходнику `design-reference/forbion-apps/f7mail/src` (форк f7mail) + nextcloud/mail 5.7.15, т.к. узел требует записи и live не проходился; `[mockup]` — сверено с `design/screens/mail/*.png`. > ⚠️ **Ограничение read-only для Почты.** В NC Mail пометкой `\Seen` является само **открытие** > непрочитанного письма — это запись на сервер. У `cloude` все 3 письма во «Входящих» — > непрочитанные, «Отправленные»/«Черновики» пусты, прочитанных писем нет. Поэтому **экран > открытого письма live не проходился**; его дерево дано по `[src]`/`[mockup]` и помечено > `не-пройдено-live: \Seen`. Composer открывался пустым и закрывался без ввода (черновик не > создавался). Ни одно пишущее действие (отправка/удаление/спам/перемещение/пометки) не нажималось. --- ## Вход Нижняя плавающая панель оболочки → иконка «конверт» (раздел «Почта», активна) → открывается **Список писем** текущей папки (по умолчанию «Приоритетные входящие», `/apps/mail/box/priority`). Оболочку панели/шторки описывает `shell.md` (зона лида). --- ## Экран: Список писем (папка) `[live]` URL: `/apps/mail/box/` (напр. priority, 517=Входящие). **Шапка:** - Поле «Искать в папке» → фокус строки поиска в текущей папке. - Иконка-слайдеры (справа в поле) → открывает модалку **«Параметры поиска»** (расширенный поиск). - Круглая зелёная «+» → открывает **Композер** (сворачивается в плашку «Сообщение без названия»). **Тело:** вертикальный список карточек-писем. Пустая папка → центр-заглушка «**В этой папке нет сообщений**» + логотип F7 `[live]` (наблюдалось в «Отправленных»). **Карточка письма (строка):** - Аватар/инициалы отправителя (цветной кружок). - Имя отправителя (жирным) + строка-превью темы/начала письма. - Справа: относительное время («1:00», «вс») + **зелёная точка** = непрочитано. - Тап по карточке → **Экран открытого письма/треда** (`/box//thread/`). ⚠️ помечает `\Seen` — live не нажималось. **Быстрые действия строки (появляются при наведении/выборе)** `[live]`: - ✉ конверт → пометить прочитанным/непрочитанным *(запись)*. - 🌿 лист → важное/снять важность *(запись)*. - 🗑 корзина → удалить ветку *(запись)*. - ⋯ → контекстное меню (ниже). ### Контекстное меню письма (⋯ «Больше действий») `[live]` Верхний ряд иконок: **В избранное** (звезда) · **Прочитать** (конверт) · **Снять важность** (лист). Далее пункты: - 🕐 `<дата и время письма>` (инфо-строка, напр. «13 июля 2026 г., 1:00»). - ⓘ **Пометить как спам** *(запись)*. - 🏷 **Изменить метки** → диалог выбора/назначения меток *(запись при сохранении)*. - ⏰ **Запланированная отправка** *(в native — открывает composer-ответ с выбором времени)*. - **Переместить ветку** → выбор папки назначения *(запись)*. - 🗑 **Удалить ветку** *(запись)*. - ⋯ **Больше действий** → подменю: - **Редактировать как новое сообщение** → Композер с телом письма. - **Ответить встречей** → создание события-приглашения (CalDAV). - **Создать задачу** → создание задачи из письма (Tasks). - **Скачать письмо** → выгрузка .eml. --- ## Экран: Параметры поиска (расширенный поиск) `[live]` Открывается иконкой-слайдерами в поле поиска. Модалка «**Параметры поиска**», крестик ✕ (закрыть). **Поля:** - **Тема** (строка). - **Тело** — «Найти» (строка). - **Дата**: «Дата начала» и «Дата окончания» — два пикера даты (иконка календаря). - **От** — «Выберите отправителей» (мультиселект). - **Кому** — «Выберите получателей». - **Коп** — получатели CC. - **СкрКоп** — получатели BCC. - **Метки** — «Выбор меток». - **Отмечено как** (чекбоксы): Важное · В избранное · Непрочитанное · Имеет вложения · Упоминания меня. **Низ:** «Очистить» (сброс) · «**Поиск**» (зелёная). --- ## Экран: Композер (новое сообщение) `[live]` Открытие: «+» в шапке списка. Сначала **свёрнутая плашка** снизу «Сообщение без названия» с иконками ⤢ (развернуть) и ✕ (закрыть/отменить). Развёрнутый вид — полноэкранная форма: **Шапка:** заголовок «Новое сообщение», под ним отправитель «cloude »; справа — («свернуть») и ✕ («закрыть»). **Поля:** - **Кому:** с шевроном-раскрытием → раскрывает **Копия:** (Cc) и **Ск:** (Bcc). - **Тема сообщения**. - **Текст** (тело, шеврон сворачивания); в правом нижнем углу тела — 📎 **скрепка** (вложения). **Низ-панель:** - **≡A** → панель форматирования текста (rich-text: жирный/курсив/списки и т.п.) `[src]`. - **⋯** → меню: **Умный подборщик** · **Текстовые шаблоны** · **Отправить позже** · ☐ **Запросить подтверждение прочтения**. - **▷ Отправить** (зелёная, неактивна при пустых получателях) *(запись — не нажималось)*. расхождение: native-композер «⋯» содержит только «Отправить позже» + «Запросить подтверждение прочтения» (`MailComposeScreen.kt:758,767`) — **нет «Умного подборщика» и «Текстовых шаблонов»** (см. Расхождения п.2–3). Запланированная отправка, подтверждение прочтения, вложения, rich-text (≡A) — совпадают. --- ## Экран: Открытое письмо / тред `[src] [mockup]` — не-пройдено-live: \Seen URL: `/apps/mail/box//thread/`. Структура по `MessageView.vue` + макетам `Почта _ Окно сообщения*.png`, `Сообщение с перепиской *.png`: **Шапка:** тема письма (заголовок h2). Для локального (черновик/исходящее) — метка статуса. **Панель действий над письмом:** - Обычное письмо: **Ответить** · **Переслать** · **В избранное** (toggle) · **Отметить непрочитанным** (если `\Seen`) · **Архивировать** · **В спам** · **В корзину** · **Удалить**. - Черновик/исходящее: **Отправить** (если можно) · **Изменить черновик** · **Удалить**. **Мета-строки:** Кому (to), Копия (cc), «Отправить в» (sendAt — для запланированных). **Перемещение:** выпадающий выбор папки + кнопка «Переместить». **Вложения:** список карточек вложений (если есть). **Тело:** HTML-письмо в WebView-контейнере, либо текстовое в Compose (в native). **Тред:** несколько писем переписки — сворачиваемые карточки (закрытые/открытое), см. `Сообщение с перепиской закрытые.png` / `... открытое.png`. **Плавающая кнопка «↩ Ответить»** (native `MailReplyFab`) — сверено ранее, `[mockup]`. --- ## Навигация папок (шторка «Открыть навигацию») `[live]` Кнопка-гамбургер почты → выезжает список папок ящика. Сверху: «**Создать сообщение**» и «**Обновить**». Далее: - **Приоритетные входящие** (`/box/priority`). - Аккаунт **cloude@forbion.ru** + кнопка «**Действия**» (⋯ по аккаунту). - **Входящие** (`/box/517`) · **Непрочитанное** (`/box/unread/517`) · **Избранные** (`/box/starred/517`) · **Черновики** (`/box/516`) · **Отправленные** (`/box/515`) · **Спам** (`/box/513`) · **Корзина** (`/box/514`). - У каждой папки — кнопка «**Действия**» (⋯: переименование/очистка/подписка и т.п. `[src]`). --- ## Экран: Параметры эл. почты (настройки) `[live] вход` / `[src] глубина` Точка входа: пункт «**Параметры эл. почты**» (в меню настроек шапки; JS-модалка, `href="#"`). Глубину подтверждает native `MailSettingsScreens.kt` + макеты `Параметры электронной почты.png`, `Параметры учётной записи.png`: - **Основные** (общие параметры почты). - **Учётные записи** (аккаунты; форма `AccountForm.vue` `[src]`). - **Внешний вид**. - **Текстовые шаблоны / подписи**. - **Конфиденциальность**. - **Безопасность**. - **Фильтры** (sieve) — `FiltersSettingsView.vue` `[src]`; в native — общий официальный API `/apps/mail/api/filter` (список/вкл/выкл/удаление/правка простых; сложные — долг v1). расхождение(?): live-модалку «Параметры эл. почты» не раскрывал по пунктам (JS-диалог) — при сверке на устройстве пройти каждый подраздел и сверить состав с native. --- ## Пустые/особые состояния `[live]` - Пустая папка: «В этой папке нет сообщений» + логотип F7 по центру. - Свёрнутый композер: плашка «Сообщение без названия» (⤢ / ✕) поверх списка. --- ## Расхождения с нативным `feature/mail` Сверка карты (живой forbion) с кодом модуля на 91aaaba. Нативный клиент оказался функционально богат — расширенный поиск, подтверждение прочтения, важность/спам/метки/ создать задачу/создать событие/запланированная отправка **уже есть** и совпадают. Ниже — только то, где native **отстаёт или отличается** от живого web (это бэклог на добивку). ### Функциональные (native отстаёт) — бэклог 1. **Черновики не сохраняются** `[приоритет]`. Live: папка «Черновики» + композер сохраняет/ восстанавливает черновик. Native: `MailComposeViewModel` не пишет и не восстанавливает черновик — набранное теряется. (Совпадает с долгом №1 представления mail/070; план п.2.) 2. **Композер «⋯» → «Текстовые шаблоны»** — вставки в тело нет. Live: пункт есть. Native: текстовые блоки только в настройках (`MailRepository`), в композере не вставляются (`MailComposeScreen.kt` меню «⋯» = только «Отправить позже» + «Запросить подтверждение прочтения»). 3. **Композер «⋯» → «Умный подборщик»** (NC smart picker) — в native отсутствует. 4. **Меню письма → «Ответить встречей»** — в native нет (есть смежное «Создать событие» `MailComponents.kt:1254`, но это не invite-reply). 5. **Меню письма → «Скачать письмо» (.eml)** — в native отсутствует. 6. **Меню письма → «Редактировать как новое сообщение»** — в native отсутствует. 7. **Действие «Архивировать» над письмом** — в native нет отдельного пункта (папка «Архив» и `archiveMailboxId` есть, но архивирование только через «Переместить сообщение» `MailComponents.kt:1259`). ### Косметические / вёрстка (для попиксельной сверки) 8. **Подписи виртуальных папок.** Live: «Непрочитанное», «Избранные». Native: «Непрочитанные», «Избранное» (`MailRepository.kt:672-673`) — число/форма слова расходятся. 9. **Порядок папок.** Live: Приоритетные → Входящие → Непрочитанное → Избранные → Черновики → Отправленные → Спам → Корзина. Native: Входящие → Непрочитанные → Избранное → Отправленные → Черновики → Архив → Корзина → Спам (`MailRepository.kt:671-680`). Порядок отличается. 10. **Быстрые действия строки списка.** Live-web (даже в узком вьюпорте): inline-иконки при наведении (✉ прочитать / 🌿 важность / 🗑 удалить / ⋯). Native: свайп справа-налево (`f7SwipeFromRightToDismiss`). ⚠️ вероятно артефакт desktop-web на узком экране, а не мобильный паттерн — **проверить на реальном мобильном web/устройстве** прежде чем считать расхождением. ## Открытые вопросы (добить при сверке на устройстве) 1. **Экран открытого письма/треда** — пройти live, когда будет прочитанное письмо или write-ОК на `\Seen`; там же сверить панель действий и расхождения (архив/скачать/редактировать-как-новое). 2. Модалка «Параметры эл. почты» — раскрыть каждый подраздел live (native — 6 разделов). 3. Действия «⋯» по папке и по аккаунту — раскрыть состав live. 4. Диалоги «Изменить метки», «Переместить», «Запланированная отправка» — раскрыть формы live. 5. Проверить п.10 (быстрые действия строки) на реальном мобильном — hover-иконки vs свайп.