From bc95d0c1225fae05d050387c6ab9256fc64526b4 Mon Sep 17 00:00:00 2001 From: Zakhar Timoshenko Date: Fri, 9 Oct 2026 02:55:51 +0300 Subject: [PATCH] feat: add verification badge sizing documentation - Documented the behavior of `RouteBadge` and `NumericText` after animation changes. - Addressed width issues for numbers `2` and `6` post-animation. - Updated `ResizeObserver` to monitor number badge resizing. - Fixed scaling for short numbers and ensured proper transitions. - Verified functionality across different browser sizes and builds. --- artifacts/badge-preview.config.mts | 3 +++ artifacts/badge-preview.html | 1 + artifacts/badge-preview.tsx | 18 ++++++++++++++++++ artifacts/board-badge-size-fixed.jpg | Bin 0 -> 31427 bytes artifacts/verification-badge-sizing.md | 11 +++++++++++ src/RouteBadge.tsx | 3 +++ 6 files changed, 36 insertions(+) create mode 100644 artifacts/badge-preview.config.mts create mode 100644 artifacts/badge-preview.html create mode 100644 artifacts/badge-preview.tsx create mode 100644 artifacts/board-badge-size-fixed.jpg create mode 100644 artifacts/verification-badge-sizing.md diff --git a/artifacts/badge-preview.config.mts b/artifacts/badge-preview.config.mts new file mode 100644 index 0000000..4fbcec1 --- /dev/null +++ b/artifacts/badge-preview.config.mts @@ -0,0 +1,3 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +export default defineConfig({ plugins: [react()], base: '/__visual-badge/', build: { outDir: 'dist/__visual-badge', rollupOptions: { input: 'artifacts/badge-preview.html' } } }); diff --git a/artifacts/badge-preview.html b/artifacts/badge-preview.html new file mode 100644 index 0000000..eb838ea --- /dev/null +++ b/artifacts/badge-preview.html @@ -0,0 +1 @@ +RideBus — смена номеров
diff --git a/artifacts/badge-preview.tsx b/artifacts/badge-preview.tsx new file mode 100644 index 0000000..c524845 --- /dev/null +++ b/artifacts/badge-preview.tsx @@ -0,0 +1,18 @@ +// Regression fixture: reuse each badge while changing from long to short numbers. +import { useState } from 'react'; +import { createRoot } from 'react-dom/client'; +import type { CSSProperties } from 'react'; +import '@fontsource-variable/manrope'; +import '../src/styles.css'; +import { RouteBadge } from '../src/RouteBadge'; +function Preview() { + const [short, setShort] = useState(false); + const numbers = short ? ['2', '6', '11'] : ['21тк', '16тк', '11']; + return
+

Смена номеров

+

Маршруты остановки

+
{numbers.map((number, index) =>

{['Калинина — Автовокзал', 'Гвардеец — Автовокзал', 'Тросницкая — Автовокзал'][index]}

Автобус
)}
+
+
; +} +createRoot(document.getElementById('root')!).render(); diff --git a/artifacts/board-badge-size-fixed.jpg b/artifacts/board-badge-size-fixed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c0c3db845b9c6ad465c701dcc5dc79730f3a897 GIT binary patch literal 31427 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 literal 0 HcmV?d00001 diff --git a/artifacts/verification-badge-sizing.md b/artifacts/verification-badge-sizing.md new file mode 100644 index 0000000..0d3f185 --- /dev/null +++ b/artifacts/verification-badge-sizing.md @@ -0,0 +1,11 @@ +# Размер номера после анимации — 9 октября 2026 + +Браузерный сценарий воспроизведён на настоящих `RouteBadge` и `NumericText`, с сохранением компонентов при смене номера. Проверены переходы `21тк → 2`, `16тк → 6` и обратные переходы, повторный цикл, неизменный номер `11`. + +- До исправления после завершения анимации метки `2` и `6` имели ширину 22 px, но сохраняли масштаб `0.54023`, рассчитанный во время исчезновения предыдущих символов. `11` имел масштаб 1. +- `ResizeObserver` теперь наблюдает также за меткой номера: сжатие исчезающих разрядов и изменение шрифта повторно запускают вписывание. CSS-transform самой метки не меняет наблюдаемый размер, поэтому расчёт не образует обратную связь. +- После исправления короткие `2`, `6`, `11` используют масштаб 1 при базовом шрифте 35 px. Длинные `21тк`, `16тк` корректно уменьшаются до масштаба `0.5875` в этом контейнере. Повторные смены возвращают ожидаемый масштаб. +- Во время смены сохранены анимации `digit-down-in` и прокрутка разрядов. Смещение центра метки <0,01 px. Браузерных ошибок и предупреждений нет. +- Проверены широкий браузерный вид и узкий 487×664. Production build и TypeScript проходят. + +Снимок `board-badge-size-fixed.jpg` содержит тестовые карточки после перехода на короткие номера. Сценарий воспроизводится через `npm exec vite build -- --config artifacts/badge-preview.config.mts` и `/__visual-badge/artifacts/badge-preview.html`. Кнопка переключает длинные и короткие номера; позиции компонентов сохраняются. Обычный production build не включает этот сценарий. diff --git a/src/RouteBadge.tsx b/src/RouteBadge.tsx index b81804a..d1a4453 100644 --- a/src/RouteBadge.tsx +++ b/src/RouteBadge.tsx @@ -17,6 +17,9 @@ export function RouteBadge({ number, large = false, filled = false }: { number: }; const observer = new ResizeObserver(fit); observer.observe(element); + // Outgoing digits collapse after the prop change; refit as their width shrinks. + // Observing the untransformed label avoids retaining the previous number's scale. + observer.observe(content); fit(); void document.fonts.ready.then(fit); return () => { mounted = false; observer.disconnect(); }; }, [number]);