AURORA-1944: таблицы форм — шаг прокрутки колесом мыши ×2 #247

Open
aep wants to merge 3 commits from feat/246-aurora-1944-wheel-scroll-step into test
Owner

Closes #246
Jira: AURORA-1944 (эпик AURORA-1834)

Зачем

Жалоба заказчика: на формах за щелчок колеса уезжает мало строк. Браузер прокручивает 100 px за щелчок, вёрстка масштабируется от ширины окна (html font-size .83vw): на любом экране видно ~15 строк, за щелчок уезжает 2,1 (1920×1080) / 2,5 (1600×900) / 2,9 (1366×768) строки.

Что сделано

  • utils/wheelScroll.js: getWheelScrollDelta — шаг щелчка колеса мыши ×2 (WHEEL_SCROLL_MULTIPLIER = 2); null (событие отдаётся браузеру) для тачпада (|deltaY| < 50 px), Ctrl/Shift, горизонтали, deltaMode=2; Firefox (deltaMode=1) — строки × 33 px × 2. canScrollBy — у края таблицы событие отдаётся браузеру.
  • hooks/useWheelScrollStep.js: wheel-listener { passive: false } на области прокрутки таблицы; внутри textarea/select/input/listbox колесо работает как обычно.
  • RealtimeTable.jsx: useWheelScrollStep(containerRef) после useHeaderPortal().

Тесты

  • node --test src/components/RealtimeTable/utils/wheelScroll.test.js — 7/7 (тест написан первым).
  • biome по новым файлам — чисто; RealtimeTable.jsx — те же 2 ошибки / 5 предупреждений, что в test. npm run build — проходит.
  • Вживую (Playwright, 1920×1080, FORM_2/AHR, стенд perf, масштаб 2): щелчок колеса test 100 px (2,09 строки) → 200 px (4,18 строки); вверх −100 → −200; тачпад 5×10 px — 50 px в обеих сборках; Shift+колесо и прокрутка вверх у начала таблицы — как в test.

Проверить руками (Windows, обычная мышь)

  • щелчок колеса на листе FORM_1 и FORM_2 прокручивает ~вдвое больше строк, без рывков
  • Shift+колесо прокручивает по горизонтали, как раньше
  • Ctrl+колесо масштабирует страницу, как раньше
  • колесо в открытом выпадающем списке / редакторе ячейки прокручивает список, а не таблицу
  • у конца таблицы колесо прокручивает страницу, как раньше
  • тачпад ноутбука — без изменений

Замер до/после

Не требуется: меняется длина шага, а не стоимость отрисовки. Шаги и доли экрана — в разделе «Тесты».

Rulings I made

  • R-1: порог «щелчок мыши» — |deltaY| ≥ 50 px; мелкие шаги считаются тачпадом. Цена ошибки: мышь с мелким шагом (высокоточные колёса) останется на прежней скорости — не хуже, чем сейчас.
  • R-2: прокрутка без анимации (scrollTop += delta), как в Excel. Цена ошибки: если нужна плавность — scrollTo({behavior:'smooth'}) с накоплением цели.
  • R-3: Firefox (deltaMode=1) — 33 px на строку. Цена ошибки: шаг в Firefox чуть больше/меньше, чем в Chrome.
  • R-4: только таблицы форм (RealtimeTable); своды 1 и 2 и настраиваемый шаг — следующим шагом (в Jira).

Находки

Маркер Суть Статус
O-1 columnLayoutUtils.test.js в worktree без node_modules падает ERR_MODULE_NOT_FOUND (окружение, не код) rejected: окружение
O-2 своды 1 и 2 — тот же шаг 100 px deferred
O-3 настраиваемый шаг на панели таблицы deferred

🤖 Generated with Claude Code

Closes #246 Jira: AURORA-1944 (эпик AURORA-1834) ## Зачем Жалоба заказчика: на формах за щелчок колеса уезжает мало строк. Браузер прокручивает 100 px за щелчок, вёрстка масштабируется от ширины окна (html font-size .83vw): на любом экране видно ~15 строк, за щелчок уезжает 2,1 (1920×1080) / 2,5 (1600×900) / 2,9 (1366×768) строки. ## Что сделано - `utils/wheelScroll.js`: `getWheelScrollDelta` — шаг щелчка колеса мыши ×2 (`WHEEL_SCROLL_MULTIPLIER = 2`); null (событие отдаётся браузеру) для тачпада (|deltaY| < 50 px), Ctrl/Shift, горизонтали, deltaMode=2; Firefox (deltaMode=1) — строки × 33 px × 2. `canScrollBy` — у края таблицы событие отдаётся браузеру. - `hooks/useWheelScrollStep.js`: wheel-listener `{ passive: false }` на области прокрутки таблицы; внутри textarea/select/input/listbox колесо работает как обычно. - `RealtimeTable.jsx`: `useWheelScrollStep(containerRef)` после `useHeaderPortal()`. ## Тесты - `node --test src/components/RealtimeTable/utils/wheelScroll.test.js` — 7/7 (тест написан первым). - biome по новым файлам — чисто; `RealtimeTable.jsx` — те же 2 ошибки / 5 предупреждений, что в test. `npm run build` — проходит. - Вживую (Playwright, 1920×1080, FORM_2/AHR, стенд perf, масштаб 2): щелчок колеса test 100 px (2,09 строки) → 200 px (4,18 строки); вверх −100 → −200; тачпад 5×10 px — 50 px в обеих сборках; Shift+колесо и прокрутка вверх у начала таблицы — как в test. ## Проверить руками (Windows, обычная мышь) - [ ] щелчок колеса на листе FORM_1 и FORM_2 прокручивает ~вдвое больше строк, без рывков - [ ] Shift+колесо прокручивает по горизонтали, как раньше - [ ] Ctrl+колесо масштабирует страницу, как раньше - [ ] колесо в открытом выпадающем списке / редакторе ячейки прокручивает список, а не таблицу - [ ] у конца таблицы колесо прокручивает страницу, как раньше - [ ] тачпад ноутбука — без изменений ## Замер до/после Не требуется: меняется длина шага, а не стоимость отрисовки. Шаги и доли экрана — в разделе «Тесты». ## Rulings I made - R-1: порог «щелчок мыши» — |deltaY| ≥ 50 px; мелкие шаги считаются тачпадом. Цена ошибки: мышь с мелким шагом (высокоточные колёса) останется на прежней скорости — не хуже, чем сейчас. - R-2: прокрутка без анимации (scrollTop += delta), как в Excel. Цена ошибки: если нужна плавность — scrollTo({behavior:'smooth'}) с накоплением цели. - R-3: Firefox (deltaMode=1) — 33 px на строку. Цена ошибки: шаг в Firefox чуть больше/меньше, чем в Chrome. - R-4: только таблицы форм (RealtimeTable); своды 1 и 2 и настраиваемый шаг — следующим шагом (в Jira). ## Находки | Маркер | Суть | Статус | |---|---|---| | O-1 | `columnLayoutUtils.test.js` в worktree без node_modules падает ERR_MODULE_NOT_FOUND (окружение, не код) | rejected: окружение | | O-2 | своды 1 и 2 — тот же шаг 100 px | deferred | | O-3 | настраиваемый шаг на панели таблицы | deferred | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 2 commits 2026-10-29 17:27:48 +03:00
Чистые функции getWheelScrollDelta и canScrollBy для шага прокрутки
колесом мыши в таблице форм (AURORA-1944), с тестами node:test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Хук useWheelScrollStep перехватывает щелчок колеса мыши над таблицей и
прокручивает вдвое больше (~100 px браузера -> 200 px). Тачпад, Ctrl и
Shift + колесо, горизонтальная прокрутка и поля ввода не меняются.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep added 1 commit 2026-10-29 17:37:13 +03:00
Author
Owner

H-1: «стало дёргаться» — исправлено (dfccd20)

Причина: R-2 (мгновенный scrollTop += 200) убирал штатную плавную прокрутку Chrome/Edge на Windows — таблица прыгала скачком и сразу дорисовывала вдвое больше строк.
Исправление: анимацию делает браузер — scrollTo({ top, behavior: 'smooth' }); цель копится (getWheelScrollTarget, WHEEL_TARGET_RESET_MS = 300), чтобы при быстром вращении ход не терялся; при prefers-reduced-motion — без анимации.
Проверка (стенд, dev-сборка, 1920×1080): один щелчок = 200 px за 4 кадра (1 → 137 → 55 → 7 px); 4 быстрых щелчка = 800 px; тачпад 5×10 px = 50 px (без изменений). Тесты 12/12, biome, build — ок.
R-2 заменён на: плавная прокрутка браузером с накоплением цели. Статус R-2 (мгновенный прыжок): rejected — дёргание (H-1).

## H-1: «стало дёргаться» — исправлено (dfccd20) Причина: R-2 (мгновенный `scrollTop += 200`) убирал штатную плавную прокрутку Chrome/Edge на Windows — таблица прыгала скачком и сразу дорисовывала вдвое больше строк. Исправление: анимацию делает браузер — `scrollTo({ top, behavior: 'smooth' })`; цель копится (`getWheelScrollTarget`, `WHEEL_TARGET_RESET_MS = 300`), чтобы при быстром вращении ход не терялся; при prefers-reduced-motion — без анимации. Проверка (стенд, dev-сборка, 1920×1080): один щелчок = 200 px за 4 кадра (1 → 137 → 55 → 7 px); 4 быстрых щелчка = 800 px; тачпад 5×10 px = 50 px (без изменений). Тесты 12/12, biome, build — ок. R-2 заменён на: плавная прокрутка браузером с накоплением цели. Статус R-2 (мгновенный прыжок): rejected — дёргание (H-1).
This pull request can be merged automatically.
You are not authorized to merge this pull request.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/246-aurora-1944-wheel-scroll-step:feat/246-aurora-1944-wheel-scroll-step
git checkout feat/246-aurora-1944-wheel-scroll-step
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#247
No description provided.