docs(app-map): карта Карточек (Deck) из кода — deck v1.16.4 + тема forbion, mail/078
Дерево экранов: навигация/доски/обзор/доска-стек-карточка/сайдбары карточки и доски/ диалоги/настройки. Структура из апстрим-src, живой web — визуальная сверка (визуал(?)). Секция расхождений с feature/deck = приоритетный бэклог.
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
# Карта: Карточки (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: **ожидает**. Дерево ниже построено из кода и
|
||||
> валидно; отметки `визуал(?)` = требуют финального взгляда на экран (порядок элементов,
|
||||
> что именно показывает мобильная тема). Как только владелец подтвердит выбор браузера
|
||||
> `Browser 1 (c9284989)` — пройду экраны и сниму `визуал(?)`.
|
||||
|
||||
## Компоненты-источники (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`)
|
||||
На мобильном — за «бургером»/шторкой навигации приложения (не нижняя панель оболочки).
|
||||
**Тело (пункты по порядку из кода):**
|
||||
- «**Предстоящие карточки**» (Upcoming cards, `to="/"`) → экран «Обзор» (дашборд по срокам).
|
||||
- «**Все доски**» (All boards, `to="/board"`, иконка deck) → список досок.
|
||||
- «**Архивные доски**» (Archived boards, `to="/board/archived"`) → список архивных досок.
|
||||
- «**Доски, доступные вам**» (Shared with you, `to="/board/shared"`) → список расшаренных досок.
|
||||
- Список **личных досок** (каждая — `AppNavigationBoard`, см. ниже), сгруппировано по категориям
|
||||
(`AppNavigationBoardCategory`: персональные / расшаренные — показывается непусто).
|
||||
- «**Добавить доску**» (Add board, иконка +) → инлайн-создание: цветной bullet (палитра-пикер) +
|
||||
поле «**Имя доски**» (Board name) + кнопки «Отмена правки»/«Сохранить доску». *(write — не жму.)*
|
||||
- «**Импорт доски**» (Import board, иконка upload) → диалог импорта (файл). *(write — не жму.)*
|
||||
- Внизу: «**Настройки Deck**» (Deck settings, шестерёнка) → модалка настроек.
|
||||
|
||||
### Меню доски (⋯ на пункте доски — `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`):**
|
||||
- «**Название доски**» (bullet цвета в теме скрыт на мобильном) — тап (?) → сайдбар добки. `визуал(?)`
|
||||
- «**Добавить карточку**» (Add card) — быстрый ввод в первую колонку. *(write — не жму.)*
|
||||
- Индикатор «(**Архивные карточки**)» (Archived cards) — режим показа архивных.
|
||||
- «**Добавить список**» (Add list) — инлайн-поле «**Имя списка**» (List name) + подтверждение.
|
||||
*(write — не жму.)*
|
||||
- «**Фильтр**» (иконка воронки; активная = primary). Раскрывает поповер «Фильтры»:
|
||||
- «**Фильтр по метке**» (Filter by tag) — чекбоксы по меткам доски.
|
||||
- «**Фильтр по назначенному**» (Filter by assigned user) — «Без назначения» (Unassigned) +
|
||||
список пользователей доски.
|
||||
- «**Фильтр по статусу**» (Filter by status) — «Открытые и выполненные» (Open and completed) /
|
||||
«Открытые» (Open) / «Выполненные» (?). `визуал(?)`
|
||||
**Тело:** колонки-списки (`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="/"`), колонки-секции (мобильная тема ставит их в столбец):
|
||||
«**Просрочено**» (Overdue), «**Сегодня**» (Today), «**Завтра**» (Tomorrow), «**Ближайшие 7
|
||||
дней**» (Next 7 days), «**Позже**» (Later), «**Без срока**» (No due). Каждая секция — список
|
||||
`dashboard/Card.vue`. Состояние загрузки: «Загрузка отфильтрованного вида». `визуал(?)` (порядок/
|
||||
свёрнутость секций на узком экране).
|
||||
|
||||
## Сайдбар карточки (`CardSidebar` — на мобильном во весь экран)
|
||||
**Шапка:** заголовок карточки (редактируемый), меню (⋯): «**Открыть в боковом виде**» (Open in
|
||||
sidebar view) / «**Открыть в большом виде**» (Open in bigger view). Подпись «Изменено … ⸱ Создано …».
|
||||
**Табы (по порядку):**
|
||||
- **Детали** (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** доски — нет.
|
||||
- **Быстрые опции срока** (Позже сегодня/Завтра/Выходные/След. неделя) — в пикере нет.
|
||||
- **Напоминания о сроках** (notify-due) и **бейдж ID / увеличенный вид** из настроек — нет.
|
||||
- **Undo** при удалении карточки — в вебе есть тост-отмена; в нативном удаление сразу.
|
||||
- Мелочь UI: счётчики чек-пунктов и комментариев на карточке доски — не показываются.
|
||||
Reference in New Issue
Block a user