fix(tradein/ui): не обрезать длинные названия городов в селекторе (#2576) #2591

Merged
lekss361 merged 1 commit from fix/tradein-ui-city-label-clip into main 2026-07-31 18:46:55 +00:00
Owner

Косметика, найдена живой проверкой прода после мержа #2584: подпись по умолчанию «Определить автоматически» переносилась на две строки внутри контрола высотой 22px и нижняя строка срезалась.

Замер, а не глазомер. Автор скачал реальный шрифт Manrope 400 (тот, что грузится в app/v2/layout.tsx) и посчитал ширину через opentype.js:

Строка Ширина при 11px
«Определить автоматически» 146.1
«Автоопределение» (новое) 95.5
«Каменск-Уральский» (самый длинный город) 108.2
остальные города 33–83

Бюджет одной строки внутри триггера: 176 − 2×13 отступа − стрелка143.3px. Старая подпись превышала на ~2.8px — ровно отсюда перенос (сходится с живым замером: scrollWidth=174 при width=176). «Каменск-Уральский» укладывается с запасом 35px, второго фикса не требует.

Решение — сократить единственную не влезающую строку, без правок CSS и компонента:

  • расширять контрол рискованно — рядом подпись «АДРЕС (YANDEX / NOMINATIM)», сейчас наложения нет;
  • увеличивать высоту — поедет alignItems:center и всё, что ниже;
  • nowrap + многоточие потребовало бы структурной правки общего компонента Dd (текст — голый текстовый узел во flex-контейнере), то есть задело бы все выпадающие списки ради дефекта в одной строке.

Проверено грепом: класс pp-dd-trigger-dashed фактически рендерится только здесь — второе место с тем же вариантом отключено и получает другой класс. Константа UNCONFIRMED_CITY_LABEL нигде не сравнивается по строке и на бэкенд не уходит (пока город не подтверждён, city_hint вообще не отправляется).

Микрокопия сверена с .claude/rules/ui-microcopy.md: «Автоопределение» — не аббревиатура, смысл сохранён; голое «Авто» рядом со списком городов читалось бы двусмысленно.

tsc --noEmit + lint + build чисто. Отдельно: npx prettier зацепил несвязанную функцию (тот самый задокументированный в CI антипаттерн с плавающей версией) — откачено вручную, диф остался точечным.

Косметика, найдена живой проверкой прода после мержа #2584: подпись по умолчанию «Определить автоматически» переносилась на две строки внутри контрола высотой 22px и нижняя строка срезалась. **Замер, а не глазомер.** Автор скачал реальный шрифт Manrope 400 (тот, что грузится в `app/v2/layout.tsx`) и посчитал ширину через `opentype.js`: | Строка | Ширина при 11px | |---|---| | «Определить автоматически» | **146.1** | | «Автоопределение» (новое) | 95.5 | | «Каменск-Уральский» (самый длинный город) | 108.2 | | остальные города | 33–83 | Бюджет одной строки внутри триггера: `176 − 2×13 отступа − стрелка` ≈ **143.3px**. Старая подпись превышала на ~2.8px — ровно отсюда перенос (сходится с живым замером: `scrollWidth=174` при `width=176`). «Каменск-Уральский» укладывается с запасом 35px, второго фикса не требует. **Решение — сократить единственную не влезающую строку**, без правок CSS и компонента: - расширять контрол рискованно — рядом подпись «АДРЕС (YANDEX / NOMINATIM)», сейчас наложения нет; - увеличивать высоту — поедет `alignItems:center` и всё, что ниже; - `nowrap` + многоточие потребовало бы структурной правки общего компонента `Dd` (текст — голый текстовый узел во flex-контейнере), то есть задело бы **все** выпадающие списки ради дефекта в одной строке. Проверено грепом: класс `pp-dd-trigger-dashed` фактически рендерится только здесь — второе место с тем же вариантом отключено и получает другой класс. Константа `UNCONFIRMED_CITY_LABEL` нигде не сравнивается по строке и на бэкенд не уходит (пока город не подтверждён, `city_hint` вообще не отправляется). Микрокопия сверена с `.claude/rules/ui-microcopy.md`: «Автоопределение» — не аббревиатура, смысл сохранён; голое «Авто» рядом со списком городов читалось бы двусмысленно. `tsc --noEmit` + lint + build чисто. Отдельно: `npx prettier` зацепил несвязанную функцию (тот самый задокументированный в CI антипаттерн с плавающей версией) — откачено вручную, диф остался точечным.
lekss361 added 1 commit 2026-07-31 16:11:52 +00:00
fix(tradein/ui): не обрезать длинные названия городов в селекторе (#2576)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m8s
62aca75994
Живая проверка прода после #2584: триггер городского дропдауна
(pp-dd-trigger-dashed, ParamsPanel.tsx) — фиксированные 176x22px,
font-size 11px. Дефолтный лейбл "Определить автоматически" (~146px
в Manrope 400, замерено opentype.js против реального шрифта прода)
не влезал в однострочный бюджет ~143px, переносился на вторую
строку и обрезался высотой триггера.

Заменил UNCONFIRMED_CITY_LABEL на "Автоопределение" (~96px, большой
запас) — сохраняет смысл, перекликается с "Авто" у РАДИУС АНАЛИЗА,
но не двусмысленно рядом с названиями городов. Самое длинное
название города в CITY_LABELS, "Каменск-Уральский" (~108px),
укладывается в тот же бюджет без переноса — второго фикса не
требует.
lekss361 merged commit 24387d0455 into main 2026-07-31 18:46:55 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2591
No description provided.