chore(openspec): archive grid-keyboard-navigation and sync main specs
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Proposal
|
||||
|
||||
## Why
|
||||
|
||||
Сетку фото можно выбирать только мышью: клавиатура не даёт перемещаться между фото, а снять
|
||||
выделение можно лишь выбрав другое фото. Пользователю в «lightroom»-режиме нужна навигация
|
||||
стрелками и быстрый возврат к свойствам альбома кликом по пустому месту сетки.
|
||||
|
||||
## What Changes
|
||||
|
||||
- **Курсор сетки (новое состояние).** Сетка получает «курсор» — текущую ячейку, отдельную от
|
||||
выделения. Стрелки двигают курсор; выделение при этом не меняется, поэтому правая панель
|
||||
остаётся на прежнем фото или свойствах альбома.
|
||||
- **Клавиши.** `←/→` — курсор по документу (с переносом на соседнюю строку), `↑/↓` — на строку
|
||||
(`density.cols`), с упором в границы. `Space` — переключить выделение ячейки под курсором
|
||||
(правая панель обновляется), `Shift+стрелки` — двигать курсор и расширять выделение от
|
||||
якоря, `Enter` — открыть просмотр, `Esc` — снять выделение. Клавиши работают, только когда
|
||||
фокус внутри сетки.
|
||||
- **Снятие выделения кликом.** Клик по области сетки и её отступам (не по фото и не по
|
||||
элементам тулбара/панелей) снимает выделение и возвращает в правой панели свойства
|
||||
альбома; фокус остаётся в сетке, чтобы стрелки работали сразу.
|
||||
- **Визуализация.** Курсор показывается отдельным контуром, отличимым от рамки выделения;
|
||||
оба состояния могут отображаться на одной ячейке.
|
||||
- **Возврат фокуса из просмотра.** При закрытии просмотра сетка выделяет последнее просмотренное
|
||||
фото, ставит на него курсор, возвращает фокус и прокручивает к ячейке; фото догружается, если
|
||||
его нет на загруженной странице.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
Нет.
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `ui-workspace`: добавляются требования «Курсор в сетке фото», «Клавиши сетки фото» и «Снятие
|
||||
выделения кликом по пустому месту». Поведение выбора мышью не меняется.
|
||||
|
||||
## Impact
|
||||
|
||||
- **Frontend:** `lib/components/PhotoGrid.svelte` (состояние курсора, обработка клавиш, контур,
|
||||
roving tabindex), `routes/(app)/albums/[id]/+page.svelte` (курсор/якорь/снятие выделения,
|
||||
обработчик клика по пустому месту, `scrollIntoView`, догрузка при выходе за загруженные
|
||||
фото). Стор выделения (`lib/stores/selection.svelte.ts`) не меняет контракт.
|
||||
- **Спеки:** `ui-workspace` (дельта).
|
||||
- **Совместимость:** API и данные не затрагиваются; поведение мыши (клик, ctrl/shift, двойной
|
||||
клик, контекстное меню, drag) сохраняется.
|
||||
Reference in New Issue
Block a user