fix(tradein/v2): a11y P3a — нативные контролы + модальный диалог + aria-live (#2062) #2076

Merged
lekss361 merged 1 commit from fix/tradein-v2-a11y-native into main 2026-06-28 18:30:10 +00:00
Owner

CRITICAL-доступность, часть 1 (#2062 P3). Перевод click-only <div> на нативные элементы + модальный диалог + статус-анонсы. 0 визуальных изменений (chrome-reset кнопок вынесен в CSS-классы — :hover и font-size сохранены; проверено code-reviewer'ом после фикса F1–F7). next build зелёный, tsc чисто.

Изменения

  • Клик-only <div><button>: nav-табы (aria-current), user-меню (aria-haspopup/aria-expanded + Esc-close), «Выйти», «Подробнее →» (4 шт в ResultPanel, aria-label по разделу), строки 03 СВОДКИ (ObjectSummary, aria-label). Все с полным style-reset → выглядят идентично.
  • SectionOverlay → настоящая модалка: role=dialog + aria-modal + aria-labelledby; Esc-close; фокус на диалог при открытии; focus-trap (Tab/Shift+Tab); возврат фокуса на триггер при закрытии; «← К ОЦЕНКЕ» → <button>.
  • page.tsx: aria-live="polite" role=status — «Идёт расчёт… / Оценка готова / Недостаточно данных / Ошибка загрузки»; фон (content-wrap) inert когда открыт оверлей/drawer (сами оверлей и drawer остаются интерактивны).

Code review

: первый проход поймал 7 CSS-cascade регрессий (font:"inherit" затирал font-size; inline background/color бил :hover) — все исправлены (reset перенесён в классы). Повторная проверка чистая.

Дальше

P3b (отдельный PR): ParamsPanel-форма — Dd<button aria-haspopup=listbox>+role=listbox/option+клавиши, БАЛКОН→radiogroup, инпуты <label htmlFor>/aria-invalid — закрывает headline аудита «с клавиатуры нельзя завершить оценку».

Прод-QA (клавиатура + axe) — после деплоя. Дочерняя к #2036.

CRITICAL-доступность, часть 1 (#2062 P3). Перевод click-only `<div>` на нативные элементы + модальный диалог + статус-анонсы. **0 визуальных изменений** (chrome-reset кнопок вынесен в CSS-классы — `:hover` и font-size сохранены; проверено code-reviewer'ом после фикса F1–F7). `next build` зелёный, `tsc` чисто. ## Изменения - **Клик-only `<div>` → `<button>`**: nav-табы (`aria-current`), user-меню (`aria-haspopup`/`aria-expanded` + Esc-close), «Выйти», «Подробнее →» (4 шт в ResultPanel, `aria-label` по разделу), строки 03 СВОДКИ (ObjectSummary, `aria-label`). Все с полным style-reset → выглядят идентично. - **SectionOverlay → настоящая модалка**: `role=dialog` + `aria-modal` + `aria-labelledby`; Esc-close; фокус на диалог при открытии; focus-trap (Tab/Shift+Tab); возврат фокуса на триггер при закрытии; «← К ОЦЕНКЕ» → `<button>`. - **page.tsx**: `aria-live="polite" role=status` — «Идёт расчёт… / Оценка готова / Недостаточно данных / Ошибка загрузки»; фон (`content-wrap`) `inert` когда открыт оверлей/drawer (сами оверлей и drawer остаются интерактивны). ## Code review ❌→✅: первый проход поймал 7 CSS-cascade регрессий (`font:"inherit"` затирал font-size; inline `background`/`color` бил `:hover`) — все исправлены (reset перенесён в классы). Повторная проверка чистая. ## Дальше **P3b** (отдельный PR): ParamsPanel-форма — `Dd`→`<button aria-haspopup=listbox>`+`role=listbox/option`+клавиши, БАЛКОН→radiogroup, инпуты `<label htmlFor>`/`aria-invalid` — закрывает headline аудита «с клавиатуры нельзя завершить оценку». Прод-QA (клавиатура + axe) — после деплоя. Дочерняя к #2036.
lekss361 added 1 commit 2026-06-28 18:29:44 +00:00
fix(tradein/v2): a11y P3a — нативные контролы + модальный диалог + aria-live (#2062)
All checks were successful
CI / changes (pull_request) Successful in 6s
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
7066117cb8
CRITICAL-доступность (часть 1): клавиатура/скринридер. Без визуальных изменений
(chrome-reset кнопок вынесен в CSS-классы, :hover и font-size сохранены).

- Клик-only <div> → нативные <button>: nav-табы (+aria-current), user-меню
  (aria-haspopup/expanded + Esc-close), «Выйти», «Подробнее →» (ResultPanel,
  +aria-label по разделу), строки 03 СВОДКИ (ObjectSummary, +aria-label).
- SectionOverlay → настоящая модалка: role=dialog, aria-modal, aria-labelledby,
  Esc-close, фокус на диалог при открытии, focus-trap (Tab/Shift+Tab),
  возврат фокуса на триггер при закрытии; «← К ОЦЕНКЕ» → <button>.
- page.tsx: aria-live="polite" role=status — «Идёт расчёт… / Оценка готова /
  Недостаточно данных / Ошибка»; фон (content-wrap) inert когда открыт
  оверлей или drawer (overlay/drawer остаются интерактивны).

Остаётся P3b: ParamsPanel-форма (Dd→listbox+клавиши, БАЛКОН→radiogroup,
input <label>/aria) — заход «с клавиатуры можно завершить оценку».
lekss361 merged commit f60f2b24e6 into main 2026-06-28 18:30:10 +00:00
lekss361 deleted branch fix/tradein-v2-a11y-native 2026-06-28 18:30:10 +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#2076
No description provided.