Files
f7cloud_mobile/docs/app-map/deck.md
T
b-mob-deck 534dafc2c0 docs(app-map): deck.md — визуальная сверка на forbion (Browser 1, read-only)
Реальные подписи forbion (Ожидающие выполнения/Свойства/секции обзора), добавлен блок
«Режимы просмотра» (архивные/компактный/обложки), отмечено отсутствие Архивные/Shared
доски в мобильной навигации. Ни одной пишущей операции.
2026-07-12 22:28:18 +00:00

206 lines
22 KiB
Markdown

# Карта: Карточки (Deck)
Приложение «Карточки» (`/apps/deck/`) на forbion.f7cloud.ru. Структура кнопок/меню/переходов
снята **из кода** (метод mail/078): апстрим `nextcloud/deck` **v1.16.4** (`src/**/*.vue` — точная
версия с forbion, канон README) + мобильная тема forbion
(`design-reference/forbion-theme/css/pages/pages-mobile/_mobile-deck.css`,
`css/pages/app-deck/_app-deck.css`). Живой мобильный web (Browser 1, `cloude`, mail/079) — только
для визуальной сверки «как выглядит/порядок»; **строго read-only** (mail/073): ничего не
создаётся/не меняется/не удаляется. Приватность: реальные названия досок/карточек не
фиксируются — только структура UI и дерево переходов.
> Статус визуальной сверки на живом forbion: **выполнена 2026-07-12** (Browser 1, `cloude`,
> мобильный вьюпорт через same-origin iframe 390px, read-only — ни одной пишущей операции).
> Реальные русские подписи forbion внесены ниже; расхождения кода ↔ живой темы помечены
> `сверено:`. Пройдены: Обзор, Все доски, доска (Controls+стеки+карточки), сайдбар карточки.
## Компоненты-источники (nextcloud/deck v1.16.4)
Навигация: `navigation/AppNavigation.vue` (+ `AppNavigationAddBoard`, `AppNavigationBoard`,
`AppNavigationBoardCategory`, `AppNavigationImportBoard`, `BoardCloneModal`, `BoardExportModal`).
Список досок: `boards/Boards.vue`, `boards/BoardItem.vue`. Обзор: `overview/Overview.vue`
(+ `dashboard/Card.vue`, `views/DashboardToday|Tomorrow|Upcoming.vue`). Доска: `board/Board.vue`,
`board/Stack.vue`, `Controls.vue`. Карточка на доске: `cards/CardItem.vue`, `cards/CardMenu.vue`,
`cards/CardMenuEntries.vue`, `cards/CardBadges.vue`, `cards/AvatarList.vue`, `cards/badges/DueDate.vue`,
`cards/badges/CardId.vue`. Сайдбар карточки: `card/CardSidebar.vue` + табы `CardSidebarTabDetails`
(→ `TagSelector`, `AssignmentSelector`, `DueDateSelector`, `Description`, `AttachmentList`),
`CardSidebarTabAttachments`, `CardSidebarTabComments` (+ `CommentForm`, `CommentItem`),
`CardSidebarTabActivity`. Сайдбар доски: `board/BoardSidebar.vue` + `SharingTabSidebar`,
`TagsTabSidebar`, `DeletedTabSidebar`, `TimelineTabSidebar`. Диалоги: `CardMoveDialog.vue`,
`CardCreateDialog.vue`, `BoardSelector.vue`, `CardSelector.vue`. Настройки: `DeckAppSettings.vue`
(+ `KeyboardShortcuts.vue`).
## Вход
Шторка приложений (по «трём полоскам») → «Карточки», или прямой URL `/apps/deck/`. Оболочку
(нижняя панель, шторка, бургер) описывает `shell.md` (зона лида) — здесь только специфика
приложения. На мобильном (узкий вьюпорт) тема (`_mobile-deck.css`) раскладывает **доску
колонками по вертикали** (`.smooth-dnd-container.horizontal { flex-direction: column }`),
навигацию убирает под бургер/шторку навигации, а сайдбары/модалки/настройки раскрывает **на
весь экран** (`modal-container height:100%`, `modal-header` скрыт).
## Экран: Навигация приложения (левая шторка — `AppNavigation`)
На мобильном — за «бургером»/шторкой навигации приложения (не нижняя панель оболочки).
**Тело (пункты по порядку, `сверено:` подписи с forbion):**
- «**Ожидающие выполнения**» (Upcoming cards, `to="/"`) → экран «Обзор» (дашборд по срокам).
`сверено:` на forbion пункт назван «Ожидающие выполнения», это и есть лендинг приложения.
- «**Все доски**» (All boards, `to="/board"`, иконка deck) → список досок.
- Список **личных досок** (каждая — `AppNavigationBoard`, см. ниже), сгруппировано по категориям
(`AppNavigationBoardCategory`).
- «**Добавить доску**» (Add board, иконка +) → инлайн-создание: цветной bullet (палитра-пикер) +
поле «**Имя доски**» (Board name) + кнопки «Отмена правки»/«Сохранить доску». *(write — не жму.)*
- «**Импортировать доску**» (Import board, иконка upload) → диалог импорта (файл). *(write — не жму.)*
- Внизу: «**Настройки Deck**» (Deck settings, шестерёнка) → модалка настроек.
> `сверено:` в мобильной навигации forbion пунктов «**Архивные доски**» (`/board/archived`) и
> «**Доски, доступные вам**» (`/board/shared`) НЕ видно — в коде они есть (`AppNavigation`), но
> на узком вьюпорте тема их не выводит (или показывает только при непустом списке). Для нативного
> клиента это скорее плюс: паритет по видимой мобильной навигации не требует этих двух видов.
### Меню доски (⋯ на пункте доски — `AppNavigationBoard` NcActions)
Порядок пунктов из кода:
- «**Сведения о доске**» (Board details, icon-info) → открывает сайдбар доски (см. ниже).
- «**Редактировать доску**» (Edit board, icon-rename; если canManage и не архивная) →
инлайн-правка названия/цвета.
- «**Клонировать доску**» (Clone board; если canCreate) → модалка `BoardCloneModal`.
- «**Разархивировать доску**» / «**Архивировать доску**» (Unarchive/Archive board) — тумблер.
- «**Экспортировать доску**» (Export board, icon-download) → модалка `BoardExportModal`.
- «**Вкл./выкл. напоминания о сроках**» → подменю «**Напоминания о сроках**» (Due date reminders):
«Все карточки» (All cards) / «Назначенные карточки» (Assigned cards) / «Выкл.» (Off).
*(все write — не выполняю.)*
## Экран: Все доски (список — `Boards.vue`)
**Тело:** таблица-список досок. Тема (`_app-deck.css`, `_mobile-deck.css`) делает каждую строку
карточкой (border, radius 8px). Колонки-заголовки (`board-list-header-row`):
- «**Имя доски**» (Board name) — bullet цвета доски + название (тап по строке → открыть доску).
- «**Участники**» (Members) — аватары ACL (`AvatarList`; если >5 — «+N» иконкой more).
- Поле фильтра списка `navFilter` (быстрый поиск по названию доски) — `визуал(?)` (положение
на мобильной вёрстке).
**Пустое состояние:** стандартный `NcEmptyContent` (тема подставляет deck-иконку).
## Экран: Доска (`Board.vue` + `Controls.vue`)
**Шапка (`Controls`)** — `сверено:` на мобильном forbion в шапке доски 4 контрола (иконками):
- «**Добавить список**» (Add list) — инлайн-поле «**Имя списка**» (List name) + подтверждение.
*(write — не жму.)*
- «**Применить фильтр**» (иконка-воронка; активная = primary). Раскрывает поповер фильтров:
- «**Фильтр по метке**» (Filter by tag) — чекбоксы по меткам доски.
- «**Фильтр по назначенному**» (Filter by assigned user) — «Без назначения» (Unassigned) +
список пользователей доски.
- «**Фильтр по статусу**» (Filter by status) — «Открытые и выполненные» / «Открытые» / «Выполненные».
- «**Режимы просмотра**» (View modes, иконка-сетка) — `сверено:` поповер с переключателями:
«**Показывать архивные карточки**», «**Выбор компактного или обычного режима просмотра**»,
«**Показывать обложки карточек**». *(в карте кода этого блока не было — добавлено по сверке.)*
- «**Открыть подробности**» (Open details, ⋯) → сайдбар доски (Общий доступ/Метки/Удалённые/Активность).
- «**Добавить карточку**» (Add card) в коде тоже есть в Controls — на мобильном быстрый ввод идёт
из шапки колонки (см. Stack). *(write — не жму.)*
**Тело:** колонки-списки (`Stack`) по вертикали (мобильная тема), в каждой — карточки.
**Состояния:** «Загрузка доски» (Loading board) / «Доска не найдена» (Board not found) /
пусто «**Нет доступных списков**» (No lists available) + «Создать новый список, чтобы добавлять
карточки» + поле «Имя списка».
### Колонка-список (`Stack.vue`)
**Шапка колонки:**
- Заголовок списка — тап (canManage) → инлайн-правка «**Изменить заголовок списка**» (Edit list title).
- Меню колонки (⋯, `NcActions`): «**Архивировать все карточки**» (Archive all cards) /
«**Разархивировать все карточки**» (Unarchive all cards) → подтверждение
(«Архивировать все карточки в этом списке» + Архивировать/Отмена); «**Удалить список**»
(Delete list). *(все write — не выполняю.)*
- «**Добавить карточку**» (Add card) → инлайн-поле «**Имя карточки**» (Card name). *(write — не жму.)*
**Тело:** карточки (`CardItem`), drag-n-drop переносом между колонками (мышью/тачем).
### Карточка на доске (`CardItem` + `CardBadges`)
- Тап по карточке → сайдбар/деталь карточки.
- Заголовок (тап при canEdit / клавиша `E` → инлайн-правка «Edit card title»).
- Бейджи (`CardBadges`): срок (`DueDate` — цвет по просрочке, «выполнено»→галочка), счётчик
«**чек-пунктов**» (Todo items), счётчик «**комментариев**» (N comments, M unread), аватары
назначенных (`AvatarList`), ID карточки (если включён бейдж ID в настройках).
- Меню карточки (⋯ / long-press, `CardMenuEntries`): «**Сведения о карточке**» (Card details) →
сайдбар; «**Изменить заголовок**» (Edit title); «**Назначить мне**» / «**Снять назначение с
меня**» (Assign to me / Unassign myself); «**Отметить выполненной**» / «**Отметить
невыполненной**» (Mark as done / not done); «**Переместить/копировать карточку**» (Move/copy
card) → диалог; «**Архивировать**» / «**Разархивировать карточку**» (Archive/Unarchive card);
«**Удалить карточку**» (Delete card) — с тостом «Карточка удалена» + «Отменить» (undo).
*(все write — не выполняю.)*
- Клавиши на карточке: `E` правка заголовка, `S` назначить себя, archive/done по хоткею (см. настройки).
## Экран: Обзор / Предстоящие карточки (`Overview.vue`)
Дашборд карточек по срокам (`to="/"`, заголовок экрана «**Ожидающие выполнения**» + кнопка «+»),
колонки-секции (мобильная тема ставит их в столбец). `сверено:` реальные подписи forbion:
«**Просроченные**», «**Сегодня**», «**Завтра**», «**Ближайшие 7 дней**», «**Позже**»,
«**Без назначенной даты**». Каждая секция — список `dashboard/Card.vue` (карточки с меткой,
иконкой описания и ⋯). Состояние загрузки: «Загрузка отфильтрованного вида».
## Сайдбар карточки (`CardSidebar` — на мобильном во весь экран)
**Шапка:** заголовок карточки (редактируемый), меню (⋯): «**Открыть в боковом виде**» (Open in
sidebar view) / «**Открыть в большом виде**» (Open in bigger view). Подпись «Изменено … ⸱ Создано …».
**Табы (по порядку)**`сверено:` на forbion таб Details назван «**Свойства**», далее
«**Вложения**», «**Комментарии**», «**Активность**»:
- **Свойства** (Details) — `CardSidebarTabDetails`, порядок секций (сверено на живой карточке:
метка → назначение → срок → описание):
1. «**Назначить метку карточке…**» (`TagSelector`) — комбобокс «Выбрать или создать метку…»,
можно «Создать новую метку».
2. «**Назначить пользователю/группе/команде**» (`AssignmentSelector`) — «Выбрать пользователя…».
3. «**Назначить срок карточке…**» (`DueDateSelector`) — «Установить срок» / «Добавить срок»;
быстрые опции: «Позже сегодня», «Завтра», «В эти выходные», «На след. неделе»; «**Выбрать
дату**» (Choose a date) → пикер; «**Убрать срок**» (Remove due date); «**Отметить
выполненной**» (Mark as done); при наличии — «Срок: …»/«Не выполнено»; «Архивировать
карточку».
4. (если включены проекты) блок связанных проектов (`NcCollectionList`).
5. «**Описание**» (`Description`) — «Редактировать описание» / «Просмотр описания», «Справка по
форматированию», «Добавить вложение», плейсхолдер «Напишите описание …»; статусы «(Не
сохранено)»/«(Сохранение…)».
- **Вложения** (Attachments) — `CardSidebarTabAttachments` (+ `AttachmentList`): «**Загрузить новые
файлы**» (Upload new files), «**Поделиться из Файлов**» (Share from Files); по элементу:
«Показать в Файлах», «Скачать» (Download), «Удалить вложение», «Восстановить вложение»; drop-зона
«Перетащите файлы для загрузки»; «Эта доска только для чтения».
- **Комментарии** (Comments) — `CardSidebarTabComments` (+ `CommentForm`): поле ввода + «Сохранить»;
пусто «Пока нет комментариев. Начните обсуждение!».
- **Активность** (Activity) — `CardSidebarTabActivity` (если включён Activity-апп).
*(все действия табов — write, на forbion не выполняю.)*
## Сайдбар доски (`BoardSidebar` — во весь экран на мобильном)
Табы: «**Общий доступ**» (Sharing) — `SharingTabSidebar`: «Поделиться доской с пользователем,
группой или командой …», права по ACL (Can edit / Can share / Can manage / Owner), «Передать
доску» (Transfer) с подтверждением, «Удалить» доступ; «**Метки**» (Tags) — `TagsTabSidebar`:
список меток, «Добавить новую метку», по метке — «Редактировать»/«Удалить»; «**Удалённые
элементы**» (Deleted items) — `DeletedTabSidebar`: «Удалённые списки» / «Удалённые карточки»
(восстановление); «**Активность**» (Activity). *(все write — не выполняю.)*
## Диалог: Переместить/копировать карточку (`CardMoveDialog`)
- «**Выбрать доску**» (Select a board) — комбобокс.
- «**Выбрать список**» (Select a list; «Нет доступных списков», если пусто).
- Кнопки «**Переместить карточку**» (Move card) / «**Копировать карточку**» (Copy card).
## Модалка: Настройки Deck (`DeckAppSettings` — во весь экран на мобильном)
- **Общее** (General): «**Использовать увеличенный вид карточки**» (Use bigger card view).
- **Внешний вид** (Appearance): «**Показывать бейдж ID карточки**» (Show card ID badge),
«**Показывать доски в календаре/задачах**» (Show boards in calendar/tasks).
- **Настройки администратора** (Admin settings, если админ): «Ограничить создание досок группами».
- **Комбинации клавиш** (`KeyboardShortcuts`): действия доски (Scroll sideways, навигация
стрелками, Escape закрыть карточку, Ctrl+F поиск, F фильтры, X сброс фильтров, ? справка) и
карточки (Enter/Space открыть, E правка заголовка, S назначить себя). В теме forbion секция
клавиш может быть скрыта на мобильном — `визуал(?)`.
## Расхождения с нативным клиентом (`feature/deck`) — бэклог
Нативный модуль (`DeckRepository`/`DeckScreen`/`DeckCardSheet`/`DeckViewModel`) сейчас покрывает:
список неархивных досок, доску колонками, карточки (метки/срок/исполнители-**чтение**/done/
счётчик), деталь карточки (правка названия/описания, срок через пикер, done, toggle меток,
перенос между колонками, архив, удаление), создание карточки и колонки, учёт PERMISSION_EDIT.
**Отсутствует против веба (приоритетный бэклог):**
- **Обзор/Предстоящие карточки** — дашборда по срокам (Просрочено/Сегодня/…/Без срока) нет.
- **Архивные доски** и **Доски, доступные вам** — отдельных видов нет (архивные доски просто скрыты).
- **Фильтры доски** — по метке / назначенному / статусу; поиска по доске нет.
- **Исполнители — только чтение**: нет «Назначить мне/пользователю», снятия (совпадает с долгом №1
плана mail/071, п.2).
- **Комментарии** и **Вложения** карточки — нет совсем (вложения явно в зоне, mail/065).
- **Меню/CRUD колонки**: правка заголовка списка, «Архивировать/Разархивировать все карточки»,
«Удалить список» — в приложении нет (только создание).
- **CRUD досок**: создать/править/клонировать/архивировать/экспортировать/импортировать доску —
нет; переименования колонок нет.
- **Move/copy на другую доску** — нативно только перенос между колонками одной доски.
- **Метки (Tags) доски** — управления (создать/править/удалить) нет; toggle существующих есть.
- **Sharing / Deleted items / Activity** доски — нет.
- **Быстрые опции срока** (Позже сегодня/Завтра/Выходные/След. неделя) — в пикере нет.
- **Режимы просмотра доски** (`сверено:` шапка forbion): показ архивных карточек, компактный/
обычный режим, обложки карточек — в нативном клиенте нет.
- **Напоминания о сроках** (notify-due) и **бейдж ID / увеличенный вид** из настроек — нет.
- **Undo** при удалении карточки — в вебе есть тост-отмена; в нативном удаление сразу.
- Мелочь UI: счётчики чек-пунктов и комментариев на карточке доски — не показываются.