mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
Волна 5 эпика #674, перенос ТЗ (класс C). Из 240 файлов `docs/specs/` в `legacy/specs/` уехали 219: на них не ссылается ни один живой файл (код, тесты, скрипты, workflow, документы вне архива и ревью). Остались 21 ТЗ — на которые ссылаются код, ADR, ISOMETRIC, SUN, RADAR, LIGHT (`docs/specs/067`), DECOR-EDITOR, support-relay, и те, на которые ссылаются они сами; README каталога объясняет, где искать остальное. Открытых issue с файлом ТЗ среди перенесённых нет. Относительные ссылки перенесённых файлов переписаны (`../X` → `../../docs/X`, соседние оставшиеся ТЗ → `../../docs/specs/…`) — все 26 резолвятся. Попутно: битая ссылка в `089-isometric-view-stage1.md:8` на удалённый `089-isometric-view.md` — теперь команда `git show` по истории. Строка в `legacy/README.md`. Issue: #682 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
3.9 KiB
3.9 KiB
ТЗ #28 — Карточка комнаты в режиме View
- Issue: https://github.com/Matysh/houseplan-card/issues/28
- Приоритет: P1
- Статус ТЗ: draft, требуется UX-утверждение
- Зависимости: #31 использует карточку как основную доступную точку комнаты
Цель
Сделать информацию о комнате одинаково доступной мышью, touch и клавиатурой, не заменяя быстрый desktop hover и не меняя модель комнаты.
Нормативное поведение
- В View tap/click по свободной части чистого пола открывает компактный
hp-dialog«Комната». - Диалог показывает:
- отображаемое имя либо локализованное «Без названия»;
- чистую площадь через существующий
_roomArea()/clean-floor geometry; - только доступные temperature, humidity, LQI и light stats;
- подписанную кнопку «Открыть зону в Home Assistant» только при
room.area.
- Источники метрик и форматирование ровно те же, что у hover и room label:
_roomTemp,_roomHum,_roomLqi,resolvedLightSources/Stats. - Hover tooltip остаётся без клика; открытый dialog убирает hover tooltip.
- Комната без area открывает карточку, но не показывает навигационное действие.
- События устройства, проёма, room label/link, vacuum puck, control, tooltip и других интерактивных слоёв обязаны остановить propagation.
Gesture arbitration
- Решение принимается на
pointerup, только если pointerdown начался на той же room hit-shape и движение не превысило существующий click threshold. - Pan, pinch, long press, drag и
_suppressClickотменяют room activation. - Glow, sun rays, tunnel fills и hover outline остаются
pointer-events:none. - Для вложенных комнат выигрывает верхняя/самая внутренняя реальная hit-shape; отверстие пола родителя не является его hit-area.
- Один жест может открыть только один dialog.
Доступность
- Доступный trigger получает локализованное имя комнаты; Enter/Space открывают тот же dialog через модель навигации #31.
- Dialog наследует trap, initial/restore focus и Escape у
hp-dialog. - Метрики представлены текстом, не только иконками/цветом.
Эдж-кейсы
Толстые/скрытые стены, отверстия, перегородки и колонны используют уже вычисленную clean-floor path. Общая стена не принадлежит hit-area комнаты. Изменение HA state обновляет метрики открытой карточки. Удаление/смена пространства закрывает карточку без навигации.
Проверки и приёмка
- unit: единая projection модели карточки из room + aggregates;
- browser desktop/touch/keyboard: open/close, pan suppression, nested room;
- browser: click по device/opening/link не проваливается в room;
- площадь байт-в-байт совпадает с tooltip formatter;
- mobile golden: длинное имя, все/нет метрик, стабильный footer.