# Diff: Почта (веб forbion ↔ нативный `feature/mail`) Итерация 1 (по mail/081). Вход — карта `mail.md` (живой forbion, аккаунт `cloude`, read-only) + код модуля `feature/mail` на 91aaaba. Тип: **Ф** — функционал, **Д** — дизайн/вёрстка. Приоритет: P1 (болит/ядро), P2 (заметно), P3 (мелочь/косметика). Статус: `open` — есть в вебе, нет/иначе в нативе; `device?` — требует проверки на устройстве. > Общий вывод: нативный клиент функционально зрелый — расширенный поиск (все поля), > подтверждение прочтения, важность/спам/метки/переместить/создать задачу/создать событие/ > запланированная отправка **уже есть и совпадают**. Ниже — только реальные пробелы. ## Функциональные | # | Элемент / функция | В вебе (forbion) | В нативе (`feature/mail`) | Тип | Приор. | Статус | |---|---|---|---|---|---|---| | 1 | Черновики | Папка «Черновики» + композер сохраняет и восстанавливает черновик | Композер **не сохраняет** черновик — набранное теряется (`MailComposeViewModel`) | Ф | **P1** | open | | 2 | Композер «⋯» → «Текстовые шаблоны» | Вставка шаблона/подписи в тело письма | Текстовые блоки только в настройках (`MailRepository`), в композер не вставляются | Ф | P2 | open | | 3 | Композер «⋯» → «Умный подборщик» (smart picker) | Есть (вставка ссылок/упоминаний/виджетов) | Нет | Ф | P3 | open | | 4 | Меню письма → «Ответить встречей» | Создание ответа-приглашения (iMIP) | Нет (есть смежное «Создать событие» `MailComponents.kt:1254`) | Ф | P3 | open | | 5 | Меню письма → «Скачать письмо» (.eml) | Выгрузка исходника письма | Нет | Ф | P3 | open | | 6 | Меню письма → «Редактировать как новое сообщение» | Открывает композер с телом письма | Нет | Ф | P3 | open | | 7 | Действие «Архивировать» над письмом | Отдельная кнопка «в архив» | Нет отдельного пункта; архив только через «Переместить» (`MailComponents.kt:1259`) | Ф | P3 | open | ## Дизайн / вёрстка | # | Элемент | В вебе (forbion) | В нативе | Тип | Приор. | Статус | |---|---|---|---|---|---|---| | 8 | Подписи виртуальных папок | «Непрочитанное», «Избранные» | «Непрочитанные», «Избранное» (`MailRepository.kt:672-673`) | Д | P2 | open | | 9 | Порядок папок | Приоритетные→Входящие→Непрочитанное→Избранные→Черновики→Отправленные→Спам→Корзина | Входящие→Непрочитанные→Избранное→Отправленные→Черновики→Архив→Корзина→Спам (`MailRepository.kt:671-680`) | Д | P2 | open | | 10 | Быстрые действия строки списка | Inline-иконки при наведении (✉/🌿/🗑/⋯) | Свайп справа-налево (`f7SwipeFromRightToDismiss`) | Д | P3 | **device?** | ## Требуют device-сверки (карта live не покрыла) | # | Что | Причина | Статус | |---|---|---|---| | A | Экран открытого письма/треда: панель действий (Ответить/Переслать/Архив/Спам/Корзина/Удалить), меты, вложения, HTML-тело | live не проходился — открытие непрочитанного = запись `\Seen`; структура достроена по `MessageView.vue`+макетам | device? | | B | Модалка «Параметры эл. почты» по подразделам (native — 6 разделов) | JS-модалка, live не раскрыта по пунктам | device? | | C | Диалоги «Изменить метки» / «Переместить» / «Запланированная отправка» — состав форм | live не раскрывались (пишущие) | device? | | D | Действия «⋯» по папке и по аккаунту в шторке навигации | live не раскрывались | device? | | E | Проверить #10: hover-иконки vs свайп — не артефакт ли desktop-web на узком экране | нужен реальный мобильный web/устройство | device? | ## Примечание по методу - Пункт #10 помечен `device?`: наблюдённые inline-hover-действия могут быть поведением desktop-web в узком вьюпорте, а не мобильным паттерном — до проверки на реальном мобильном не тащить в реализацию. - Метрику ≤2% (mail/081 п.2) считаю по чек-листу «элементы+функции на экран» — жду формулу лида.