feat(form-kit): набор контролов по референсу и оболочка диалогов настроек

Серия 0 из пяти по #600. Ничего из четырёх диалогов ещё не переложено — эта
серия даёт им инструменты и оболочку.

Набор (`form-kit.ts` + `form-kit.styles.ts`), числа из §3.1 SPEC.md референса,
цвета через переменные темы HA:
- полная строка настройки `toggleRow` — сетка 28/1fr/44: иконка, название +
  «?», подпись, тумблер справа; тумблер — нативный чекбокс, нарисованный CSS,
  как у редактора панели: один вид в HA, на стенде и в golden, и всё тот же
  `input[type=checkbox]` для смоков; компактный вариант для однотипных списков;
- `field`, `fieldGrid` (две колонки и 1fr/175), `subsection`, `unitInput`,
  `rangeLine`, `rangeEnds`, `radioRow`, `choiceCards`;
- `valueTiles` (4 колонки), плитки цвета в CSS; `colorField` — компактная
  плашка вокруг существующего `hp-color-opacity` (Q5): свотч открывает ту же
  панель, рядом hex, число прозрачности и Reset; нативного пикера нет;
- `callout` (К5: сообщения о состоянии остаются на виду), `compass` 44 px,
  `footerStatus`, `chip`, `tintBlock`, `textLink`, `divider`;
- `segmented` получил образцы линии, иконки и `disabled`; вид — как в
  референсе: контейнер на канве, активный сегмент на тинте.

Оболочка (`hp-dialog.ts`, атрибут `form-shell` у четырёх диалогов настроек):
ширина 560 через `--hp-dialog-wide-width`, которую `:host([wide])` уже читал;
высота min(940px, 100vh − 48); единственный скроллер — `.content`, тело формы
высотой не владеет (К6, дефект 7 из issue); «✕» 44 px; бейдж имени пространства
в заголовке (`badge`). Generic `wide` и остальные диалоги не тронуты (Q7).

`hp-dialog[form-shell] .body` — без max-height и overflow, канва 16 px.

Фикстуры листа диалогов `test/fixtures/form-kit-card-dialog*.css` пересняты
намеренно; лист панели совпал с замороженным побайтово (К9, AC11).

`editor.loading` → «Загрузка…» в четырёх локалях (дефект 9); aria-текст прежний.

Потолок ленивого редакторского графа 222 900 → 225 900 с доводом в
`bundle-budget.mjs`: рост — CSS-строки набора, не код; значение промежуточное,
серии 1–4 выкидывают старые правила, итог замеряется в конце.

Гейты: typecheck, build, bundle:sync, `npm test` (2791 pass; красными были
только потолок — поднят — и неотслеженные файлы манифеста — добавлены),
`smoke_settings_dialog_cards`, `smoke_room_settings`.

Issue: #600
User-Visible: no
This commit is contained in:
Claude
2026-09-20 09:39:13 +03:00
parent 3b502c7d80
commit 30da00403d
64 changed files with 1711 additions and 500 deletions
+9 -1
View File
@@ -390,7 +390,15 @@ export function initialViewCeilingViolation(bytes, {
* оставался незафиксированным.
*/
export const LAZY_FURNITURE_ART_GZIP_CEILING = 17_900;
export const LAZY_EDITOR_GZIP_CEILING = 222_900;
/**
* #600, серия 0: 222 900 → 225 900. Набор контролов формы вырос до полного
* референса (`docs/design/600-settings-dialogs/reference/styles.css`): ряд с
* тумблером, компактная строка, плитки, плашка цвета, компас, футер со статусом.
* Рост — CSS-строки листа набора, не код. Значение промежуточное: серии 1–4
* выкидывают старую разметку и правила четырёх диалогов, и потолок ставится
* заново по итоговому замеру — вниз, если граф похудеет.
*/
export const LAZY_EDITOR_GZIP_CEILING = 225_900;
export const LAZY_GRAPH_CEILING_BAND = 2_000;
/**