From e97e568111ccba1264003e4665105f5ea4970d4e Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 8 Sep 2026 10:05:45 +0300 Subject: [PATCH] docs: record the real HA panel container and mount order in the #486 spec Issue: #488 User-Visible: no --- docs/specs/486-house-plan-panel.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/specs/486-house-plan-panel.md b/docs/specs/486-house-plan-panel.md index dd37e779..106435f3 100644 --- a/docs/specs/486-house-plan-panel.md +++ b/docs/specs/486-house-plan-panel.md @@ -392,12 +392,26 @@ sidebar в kiosk, это не включает card kiosk и не открыва Shell — grid/flex из `appbar auto` и `content minmax(0, 1fr)`: -- занимает доступные `width:100%` и `height:100%` HA panel viewport; +- занимает `width:100%` и высоту **viewport**: `100vh`, затем + `calc(100dvh − safe-area-inset-top − safe-area-inset-bottom)` (уточнение + #488: `` — блок с safe-area-паддингами и без высоты, поэтому + `height:100%` резолвится в `auto`, и стейдж схлопывается в 0 px; HA для + iframe-панелей по той же причине берёт `100dvh`); - не создаёт page/horizontal scroll; - content и child имеют `min-width:0`, `min-height:0`, `overflow:hidden`; -- HA-owned safe-area не вычитается вручную второй раз; +- паддинги safe-area, которые ставит сам `ha-panel-custom`, вычитаются из + высоты `:host` ровно один раз — сверху и снизу; боковые уже учтены шириной; - outer card border/radius/shadow убираются только в panel-host mode. +Порядок монтирования у HA (#488): `ha-panel-custom` создаёт элемент и +присваивает `panel`/`hass`/`narrow`/`route` сразу после `load` module-скрипта, +а entry панели определяет класс после top-level `await import('./houseplan-card.js')`. +Значения ложатся собственными свойствами инстанса и затеняют accessors; +`houseplan-panel` в конструкторе и `connectedCallback` переприсваивает их через +accessors (`_adoptPreUpgradeProperties`). Смок `smoke_houseplan_panel.mjs` +воспроизводит именно этот порядок и контейнер без высоты; два мутанта держат +оба контракта. + Panel-host mode считает stage от **измеренного контейнера**, вычитая только собственный card header/editor chrome. Он не использует `100dvh − HA chrome`. Существующий ResizeObserver получает итоговый stage rect и выполняет обычный