feat(ui): open the move history at the newest move; scale the landscape rack glyphs
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Has been skipped
CI / integration (pull_request) Has been skipped
CI / ui (pull_request) Successful in 1m18s
CI / conformance (pull_request) Successful in 10s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 2m6s

The move table fills top to bottom, oldest first, so it used to open on the
opening moves — the least interesting end of a long game. Pin it to its last
row when it is shown (the portrait drawer and the landscape dock alike), once
per showing rather than on every arriving move, so a player reading back
through the journal is not yanked to the bottom by an opponent's move.

The landscape tray shares the narrow left panel, so its tiles — and with them
the cqw-sized glyphs — come out markedly smaller than the full-width portrait
tray. Scale the letter and Erudit's blank star up a quarter there; the point
value keeps its size (it reads fine small, and growing it would crowd the
letter on a tile that size).
This commit is contained in:
Ilia Denisov
2026-07-27 21:11:34 +02:00
parent f383442430
commit 92700d0646
5 changed files with 96 additions and 2 deletions
+10 -1
View File
@@ -202,6 +202,11 @@ e2e and the screenshots.
the **move history** — a fixed-height slide-down drawer whose bottom border (and its
shadow) pins to the board as the board slides down, instead of tracking the table as
moves accumulate; its scrollbar gutter is reserved so the centred cells do not jitter. The
table is shown **scrolled to its newest row**: the grid fills top to bottom, oldest first, so an
untouched scroller would open on the opening moves — the least interesting end. It is pinned once
per showing (in landscape, once the moves reach the already-docked table), never on each arriving
move, so a player reading back through a long game is not yanked to the bottom by an opponent's
move. The
history is a **ruled matrix** — one column per seat, aligned under the score plaques, each
seat's moves filling its column top to bottom: no player names (the plaque heads the column)
and no running total, just the word(s) and the move score, `WORD (12)`, centred. A non-play
@@ -247,7 +252,11 @@ e2e and the screenshots.
portrait layout is byte-for-byte unchanged; both layouts render from the same snippets, so the
behaviour and markup stay single-sourced. The rack is a **seven-column grid** filling the tray
width in both layouts, so the tiles are square and as large as the row allows (the confirm ✅ takes
the fixed 7th slot while a play is staged).
the fixed 7th slot while a play is staged). The landscape tray shares the narrow left panel, so its
tiles — and with them the `cqw`-sized glyphs — come out smaller than the full-width portrait tray:
the **letter** and Erudit's **blank star** are scaled up a quarter there (a `(orientation:
landscape)` query in `Rack.svelte`) to stay comfortably legible, while the point value keeps its
size — it reads fine small, and growing it would crowd the letter on a tile that size.
- **Highlights**: while composing a play the staged tiles are **tinted by legality** — a light
green once they form a word (a shade darker on the committed board tiles the word runs through —
in a **single-word game** only the main word lights up, since the engine ignores cross words),