Files
specs/openspec/specs/frontend-loading-presentation/spec.md
T

75 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# frontend-loading-presentation Specification
## Purpose
Определяет единое пользовательское представление ожидания во frontend, чтобы
структура будущего содержимого оставалась понятной без потери уже доступного
контекста.
## Requirements
### Requirement: Структурные placeholders для загрузки содержимого
Frontend SHALL при первичной загрузке содержимого без доступного результата
показывать skeleton placeholders, которые передают расположение и визуальную
иерархию основных ожидаемых блоков. При частичной загрузке frontend MUST
ограничивать skeleton незагруженным блоком и сохранять уже доступные части
экрана видимыми. В этих состояниях frontend MUST NOT использовать отдельный
spinner как основное представление ожидаемого содержимого.
Skeleton placeholders MUST NOT содержать правдоподобные пользовательские
данные, быть интерактивными или попадать в последовательность клавиатурного
фокуса; область ожидания MUST оставаться доступно обозначенной как занятая.
#### Scenario: Экран впервые ожидает содержимое
- **WHEN** User открывает экран, для которого ещё нет доступного результата
- **THEN** frontend показывает структурные skeleton placeholders основных блоков без отдельного spinner в роли основного loading-состояния
#### Scenario: Загружается отдельный блок экрана
- **WHEN** часть экрана уже доступна, а один из его содержательных блоков всё ещё ожидает результат
- **THEN** frontend сохраняет доступные части видимыми и показывает skeleton только в границах ожидающего блока
#### Scenario: Пользователь перемещает клавиатурный фокус во время загрузки
- **WHEN** на экране видны skeleton placeholders и User перемещает клавиатурный фокус
- **THEN** placeholders не получают фокус и не воспринимаются как доступные действия или реальные пользовательские данные
### Requirement: Представление загрузки маршрута и восстановления сессии
Frontend SHALL во время загрузки отложенно открываемого маршрута показывать
skeleton ожидаемой области содержимого, сохраняя уже доступный каркас
приложения. Во время начального восстановления пользовательской сессии
frontend MUST показывать нейтральный skeleton каркаса до определения доступного
пользователю потока и MUST NOT кратковременно показывать содержимое public или
protected маршрута как результат загрузки. В обоих случаях отдельный spinner
MUST NOT быть основным loading-состоянием.
#### Scenario: Загружается отложенно открываемый маршрут
- **WHEN** User переходит на маршрут, содержимое которого ещё загружается
- **THEN** frontend сохраняет доступный каркас приложения и показывает skeleton в ожидаемой области содержимого без отдельного spinner в роли основного loading-состояния
#### Scenario: Приложение восстанавливает сессию при запуске
- **WHEN** frontend ещё не определил результат начального восстановления пользовательской сессии
- **THEN** User видит нейтральный skeleton каркаса без преждевременного отображения public или protected содержимого
### Requirement: Контекстная индикация действий и фонового обновления
Frontend MUST сохранять уже доступное содержимое или элемент управления
основным контекстом, когда выполняется пользовательское действие либо фоновое
обновление Client Cached Snapshot. В этих состояниях frontend SHALL показывать
компактный progress indicator рядом с соответствующим контекстом и MUST NOT
заменять этот контекст skeleton placeholders.
#### Scenario: Выполняется пользовательское действие
- **WHEN** User запустил действие и его результат ещё ожидается
- **THEN** frontend сохраняет соответствующий элемент управления или окружающий контекст видимым, показывает компактную индикацию процесса и не заменяет интерфейс skeleton placeholders
#### Scenario: Обновляется уже показанный snapshot
- **WHEN** frontend обновляет данные при наличии видимого Client Cached Snapshot
- **THEN** frontend оставляет snapshot видимым, показывает компактную индикацию фонового обновления и не заменяет snapshot skeleton placeholders