From 36253c02152ca750130ca66ff093516d378b0197 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Fri, 4 Sep 2026 01:09:19 +0200 Subject: [PATCH] =?UTF-8?q?feat(speedtest):=20responsive=20polish=20?= =?UTF-8?q?=E2=80=94=20readout=20in=20dial=20mouth,=20self-centering=20til?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../speedtest/speedtest-rpc-client.tsx | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/src/components/speedtest/speedtest-rpc-client.tsx b/src/components/speedtest/speedtest-rpc-client.tsx index 234c26d8..679c9f15 100644 --- a/src/components/speedtest/speedtest-rpc-client.tsx +++ b/src/components/speedtest/speedtest-rpc-client.tsx @@ -347,19 +347,26 @@ function Gauge({ )} -
-
+ {/* Readout sits in the dial's open mouth (the 240° sweep leaves + the bottom-center free), Speedtest-style: number, then the unit + under it. Sized to never collide with the 1/1000 scale labels + at the mouth edges, at any tile width. */} +
+
{eased == null ? "—" : Math.round(eased)} - - - ms -
-

{label}

-

{sub}

+
+ + MS +
+
+ {/* Identity in normal flow below the dial: immune to overlap. */} +
+

{label}

+

{sub}

); @@ -811,27 +818,22 @@ export function SpeedtestRpcClient() { const blocked = endpoints.filter((e) => e.status === "cors_blocked"); return ( <> -
- {visible.map((ep) => { + {/* Flex-wrap + justify-center: tiles keep an ideal width + at every count and orphan rows self-center (4 tiles + read as a clean 2x2, a lone 7th sits centered). */} +
+ {visible.map((ep, tileIdx) => { const s = stats(ep); const isActive = ep.id === activeId; const dirEntry = directoryEntryForUrl(ep.url); return (
{dirEntry && (