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

«Общие настройки», «Пространство» и «Устройство на плане» были плоскими
столбцами. В «Общих» девять подписей-заголовков шли вперемешку с рядами и
абзацами; в «Устройстве» на 760 строк формы не было ни одного деления, и
«Название» лежало в одном списке с «Дополнительными действиями».

Теперь это карточки общего набора: семь в «Общих», четыре в «Пространстве»,
пять в «Устройстве». Набор взят как есть — он поднят в #594 и доказан на диалоге
комнаты и редакторе панели (#597).

Шесть пояснений переехали под «?» к своему заголовку, подзаголовку или строке;
текст не переписан. Два сообщения о СОСТОЯНИИ остались на виду — решение
владельца: `gs.sun_missing` и `marker.run_target_gone` говорят, что настройка
сломана прямо сейчас, а второе ещё и называет пропавшую цель подстановкой,
которой в статической подсказке взяться неоткуда.

`gs.hint` при этом переехал из ленивого support-словаря в основной: «?» читает
текст через `_t`, а не `supportT`. Тест мёртвых ключей сливает оба словаря, так
что копия в support удалена во всех четырёх локалях.

Классы-опоры сохранены намеренно: `.srcrow`, `.dispsection`, `.gsrow`,
`.colorrow`, `.namein`, `.areasel`, `.tempin` остались на своих элементах, а
карточки добавились вокруг. За эти имена держатся одиннадцать смоков, и потеря
любого превратила бы ревью в чтение переписанных свидетелей.

Изменён ровно один смок — `smoke_general_settings`, и изменён в сторону
строгости: вместо одного списка подписей он снимает теперь два (заголовки
карточек и подзаголовки внутри), требует непустоты каждой карточки, проверяет
что радиус свечения лежит ВНУТРИ карточки свечения (подпись такой границей не
была), что четыре переехавших пояснения доступны кнопкой и что их абзацев в
форме не осталось.

`src/houseplan-onboarding-runtime.ts` затронут двумя строками: он второй
потребитель переименованных ключей `space.hide_*_tip` → `space.hide_*.help`.
Один текст — один ключ; дублировать его ради неприкосновенности файла хуже.

Потолок стартового графа поднят 291 400 → 292 500. Выросли СТРОКИ, а не код:
12 новых ключей в четырёх локалях плюс переехавший `gs.hint`. Разметка диалогов
как была в ленивом редакторском графе, так там и осталась.

Свидетели: `state-callout-hidden-under-help` прячет сообщение о состоянии под
«?» и краснит новый блок `smoke_tap_run`; `dialog-card-loses-its-heading`
обнуляет заголовок карточки и краснит `smoke_general_settings` — карточка без
заголовка это снова плоский список, только с рамкой.

Issue: #598
User-Visible: yes
This commit is contained in:
Claude
2026-09-19 17:52:49 +03:00
parent 2eaeb6f885
commit c22a1f43db
68 changed files with 1361 additions and 1094 deletions
+6 -1
View File
@@ -291,7 +291,12 @@ export const LOW_HEADROOM_WARNING_BYTES = 15_000;
* оставлял под прежним центром 354 Б сверху — внутри шумовой полосы метрики.
* Новый центр даёт 1 054 Б сверху и 946 Б до нижней границы полосы.
*/
export const INITIAL_VIEW_GZIP_CEILING = 291_400;
// #598: +119 B — три диалога настроек получили заголовки карточек, и это
// СТРОКИ: 12 новых ключей в четырёх локалях плюс `gs.hint`, переехавший из
// ленивого support-словаря в основной, потому что «?» читает его через `_t`.
// Код диалогов остался в ленивом графе; вырос словарь, который там же и был.
// Опущен до 291 400 в #593, поднят обратно осознанно — рост объяснён здесь.
export const INITIAL_VIEW_GZIP_CEILING = 292_500;
export const INITIAL_VIEW_CEILING_BAND = 2_000;
/**
+24
View File
@@ -10255,6 +10255,30 @@ const MUTANT_DEFINITIONS = [
replace: ' return ` ${cards.join(\',\\n \')} {\n min-width: 0;\n padding: 13px;',
}],
},
{
id: 'state-callout-hidden-under-help',
guard: 'node demo/smoke_tap_run.mjs',
because: '#598 К5: «Цель {id} не найдена» — сообщение о СОСТОЯНИИ, а не пояснение. '
+ 'Спрятать его под «?» заодно с шестью настоящими подсказками легко, и тогда человек '
+ 'узнает о сломанном действии, только если сам откроет подсказку — а подставить туда '
+ 'идентификатор пропавшей цели вообще нечем',
patches: [{
file: 'src/editors/marker-dialog.ts',
find: " ? html`<div class=\"rhint\">${this.host._t('marker.run_target_gone', { id: d.tapTarget })}</div>`",
replace: " ? html`<span title=${this.host._t('marker.run_target_gone', { id: d.tapTarget })}></span>`",
}],
},
{
id: 'dialog-card-loses-its-heading',
guard: 'node demo/smoke_general_settings.mjs',
because: '#598: карточка без заголовка — это снова плоский список, только с рамкой. '
+ 'Заголовок и есть то, ради чего задача делалась, и его потеря обязана краснеть',
patches: [{
file: 'src/editors/general-settings-dialog.ts',
find: " title: this.host._t('gs.card_fills'),",
replace: " title: '',",
}],
},
{
id: 'form-kit-writes-to-a-neighbour-key',
guard: 'node demo/smoke_room_settings.mjs',