mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
Набор контролов был поднят из редактора боковой панели в #594, но сама панель осталась на своей копии тех же правил. Две копии расходятся молча: правка в наборе не доедет до панели, и наоборот. Просто вызвать `formKitCss` из панели нельзя. Общие правила в её листе не идут подряд: между карточкой-группой и обводкой фокуса стоит сетка `.summary-general-grid`, между фокусом и выключенным состоянием — `button { font: inherit }`, между ним и рядом-переключателем — `svg`. Вставить один общий кусок значило бы переставить её объявления, а перестановка правил равной специфичности — уже не подстановка: проверять пришлось бы каждое правило по отдельности. Поэтому генератор разрезан на пять именованных фрагментов — карточка-группа, обводка фокуса, выключенное состояние, ряд-переключатель, подпись ряда, — и панель подставляет каждый на своё место. `formKitCss` остаётся их композицией, чтобы у диалогов не появилось пяти вызовов вместо одного. Доказательство вместо обещания. У настроек панели нет ни одного golden-кадра: в матрице нет сцены `dialog: 'summary'`, и «панель не изменилась» показать пикселями нечем. Замена эталону — побайтовое сравнение собранного листа с замороженным снимком с `origin/dev`: длина было 14585 стало 14585 — ПОБАЙТОВО СОВПАЛО Две находки ревью ТЗ закрыты тестами, а не формулировками: - проверка «копии не осталось» ловила один фрагмент из пяти (`min-height: 54px` встречается только в ряду-переключателе). Теперь цикл по всем пяти текстам; проба — фрагмент карточки-группы, оставленный в комментарии, — краснит именно этот цикл, а прежняя проверка была бы зелёной; - «выход `formKitCss` остаётся байт в байт» опиралось на тесты, сравнивающие подстроки и счётчики. Добавлены две фикстуры с полным текстом обеих форм листа диалогов — с рядом-переключателем и без. Форма с переключателем сегодня не используется никем, и её расхождение не поймал бы никто до первого потребителя. Три замороженные фикстуры — осознанный долг: они удаляются на том шаге эпика, который законно меняет вид панели. Записано рядом с фикстурой. Issue: #597 User-Visible: no
68 lines
1.8 KiB
CSS
68 lines
1.8 KiB
CSS
.hpf-card {
|
|
min-width: 0;
|
|
padding: 14px;
|
|
border: 1px solid var(--hpf-line);
|
|
border-radius: 11px;
|
|
background: var(--hpf-surface);
|
|
}
|
|
.hpf-form input:focus-visible,
|
|
.hpf-form select:focus-visible,
|
|
.hpf-form button:focus-visible,
|
|
.hpf-footer button:focus-visible {
|
|
outline: 2px solid var(--hpf-accent);
|
|
outline-offset: 2px;
|
|
}
|
|
.hpf-form button:disabled,
|
|
.hpf-form input:disabled,
|
|
.hpf-form select:disabled { opacity: .4; cursor: default; }
|
|
.hpf-form { display: grid; gap: 12px; }
|
|
.hpf-head {
|
|
display: flex;
|
|
min-width: 0;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
margin: 0 0 10px;
|
|
}
|
|
.hpf-head h3 { margin: 0; font-size: 1rem; line-height: 1.3; font-weight: 600; }
|
|
.hpf-row {
|
|
display: flex;
|
|
min-width: 0;
|
|
min-height: 44px;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
}
|
|
.hpf-row > .hpf-label { min-width: 0; overflow-wrap: anywhere; }
|
|
.hpf-seg {
|
|
display: flex;
|
|
min-width: 0;
|
|
border: 1px solid var(--hpf-line);
|
|
border-radius: 9px;
|
|
overflow: hidden;
|
|
}
|
|
.hpf-seg label {
|
|
display: flex;
|
|
min-width: 0;
|
|
min-height: 44px;
|
|
flex: 1 1 0;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 6px;
|
|
padding: 0 12px;
|
|
cursor: pointer;
|
|
text-align: center;
|
|
}
|
|
.hpf-seg label + label { border-left: 1px solid var(--hpf-line); }
|
|
.hpf-seg input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
|
|
.hpf-seg label:has(input:checked) {
|
|
background: var(--hpf-accent);
|
|
color: var(--text-primary-color, #fff);
|
|
}
|
|
.hpf-seg label:has(input:focus-visible) {
|
|
outline: 2px solid var(--hpf-accent);
|
|
outline-offset: -2px;
|
|
}
|
|
.hpf-color { display: flex; min-width: 0; align-items: center; gap: 12px; }
|
|
.hpf-color hp-color-opacity { flex: 0 0 auto; }
|