diff --git a/docs/app-map/notifications.md b/docs/app-map/notifications.md new file mode 100644 index 0000000..6d41e13 --- /dev/null +++ b/docs/app-map/notifications.md @@ -0,0 +1,115 @@ +# Карта: Уведомления (forbion, мобильная веб-версия) + +Снято 2026-07-12. Метод по mail/078: структура берётся ИЗ КОДА +(апстрим `nextcloud/notifications`, компоненты `NotificationsApp.vue` / `NotificationItem.vue` / +`ActionButton.vue` / `IconNotification.vue`; на forbion версия 5.0.0-dev.0 — компоненты стабильны +между версиями), живой мобильный web forbion (вьюпорт 390px, аккаунт `cloude`, строго read-only +по mail/073) — для визуальной сверки размещения и порядка. Живой аккаунт `cloude` на момент съёмки +имел **пустую ленту** (empty-state), поэтому структура элемента уведомления и действий снята с кода, +а не с экрана. Пишущих кнопок («Скрыть», «Скрыть все», action-кнопки) НЕ нажимал — dismiss и +выполнение действий это записи (DELETE / произвольный HTTP-метод), а аккаунт реальный рабочий. + +Уведомления — НЕ отдельное приложение (нет пункта в шторке приложений и своего URL-роута), а +глобальный **дропдаун-лента в шапке** (компонент `NotificationsApp`, монтируется в `#notifications`). + +## Вход +В мобильной вёрстке forbion иконка-триггер (колокольчик) живёт в **шторке приложений**, а не на +плавающей нижней панели. Путь: +- Нижняя панель шелла → `≡` («три полоски», `#open-header-menu-mobile`) открывает шторку + `app-menu--mobile`. +- В шторке — слот `#mobile-header-notifications` (класс `f7-mobile-menu-control-slot`, + `mobile-bottom-slot--overlay`) с кнопкой-колокольчиком (`.notifications-button`, + `aria-label="Уведомления"`, `aria-expanded`). +- Нижняя плавающая панель (общая, зона лида, для ориентира): `<`/`>` (сайдбар-навигация, + `#mobile-header-left-sidebar-button`) · конверт → Почта (`/apps/mail/`) · «карточки» → Задачи + (`/apps/tasks/`) · камера → Конференции (`/apps/spreed/`) · `≡` → шторка приложений. + +## Триггер (колокольчик) — `IconNotification` +**Вид:** иконка «колокол». Индикатор состояния (`showDot`): +- точка-бейдж показывается, когда `notifications.length !== 0` **или** когда браузерные разрешения + ещё не запрошены (`webNotificationsGranted === null`); +- значок-предупреждение (`showWarning`) — когда push-уведомления задросселированы политикой + честного использования (`hasThrottledPushNotifications`). +**Действие:** тап → раскрывает дропдаун-ленту (`aria-expanded` false→true), эмит `@opened → onOpen` +(подгрузка/пометка ленты активной). Повторный тап или клик вне (кроме `.popover`) — закрывает. + +## Экран: Лента уведомлений (дропдаун `NcHeaderMenu`, класс `header-menu`) +Контейнер `.notification-container` внутри `.header-menu__content`. Тайтл шапки в мобильной +теме — «Уведомления» (`.tooltip-header--notifications`). Два взаимоисключающих состояния: + +### Состояние A — есть уведомления (`notifications.length > 0`) +**Тело:** список `