# Карта: Карточки (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: счётчики чек-пунктов и комментариев на карточке доски — не показываются.