Files
houseplan-card/docs/specs/028-room-view-card.md
T
Matysh 112c260314
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
Release v1.61.0-beta.1
2026-08-09 21:51:33 +03:00

3.9 KiB
Raw Blame History

ТЗ #28 — Карточка комнаты в режиме View

  • Issue: https://github.com/Matysh/houseplan-card/issues/28
  • Приоритет: P1
  • Статус ТЗ: draft, требуется UX-утверждение
  • Зависимости: #31 использует карточку как основную доступную точку комнаты

Цель

Сделать информацию о комнате одинаково доступной мышью, touch и клавиатурой, не заменяя быстрый desktop hover и не меняя модель комнаты.

Нормативное поведение

  1. В View tap/click по свободной части чистого пола открывает компактный hp-dialog «Комната».
  2. Диалог показывает:
    • отображаемое имя либо локализованное «Без названия»;
    • чистую площадь через существующий _roomArea()/clean-floor geometry;
    • только доступные temperature, humidity, LQI и light stats;
    • подписанную кнопку «Открыть зону в Home Assistant» только при room.area.
  3. Источники метрик и форматирование ровно те же, что у hover и room label: _roomTemp, _roomHum, _roomLqi, resolvedLightSources/Stats.
  4. Hover tooltip остаётся без клика; открытый dialog убирает hover tooltip.
  5. Комната без area открывает карточку, но не показывает навигационное действие.
  6. События устройства, проёма, 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.