diff --git a/ui/docs/navigation.md b/ui/docs/navigation.md index a8bd24e..141fe90 100644 --- a/ui/docs/navigation.md +++ b/ui/docs/navigation.md @@ -179,8 +179,12 @@ arrows step `viewedTurn` by ±1 (disabled at boundaries `0` and popover (desktop) or a fixed full-width drawer (mobile, ≤ 767.98 px) listing every turn from `currentTurn` down to `0`. Selecting the current-turn row routes through `gameState.returnToCurrent()`; -any other row calls `gameState.viewTurn(N)`. The popover reuses -`view-menu.svelte`'s outside-click / Escape pattern. +any other row calls `gameState.viewTurn(N)`. Selecting the row +already on screen (`viewedTurn`) is a pure no-op — it only closes +the popover — so re-picking the live turn (most visibly turn 0, +where it is the only row) never re-fetches the report to redraw the +same snapshot. The popover reuses `view-menu.svelte`'s +outside-click / Escape pattern. `lib/header/history-banner.svelte` renders directly under the header whenever `gameState.historyMode === true`. It shows diff --git a/ui/frontend/src/lib/header/turn-navigator.svelte b/ui/frontend/src/lib/header/turn-navigator.svelte index 6a85e20..64e33a0 100644 --- a/ui/frontend/src/lib/header/turn-navigator.svelte +++ b/ui/frontend/src/lib/header/turn-navigator.svelte @@ -12,7 +12,10 @@ drawer below the 768 px breakpoint, mirroring `view-menu.svelte`. Selecting a row calls `gameState.viewTurn(N)`; the row that matches `currentTurn` delegates to `gameState.returnToCurrent()` so the -"leave history" path always flows through one method. +"leave history" path always flows through one method. Selecting the +row already on screen (`viewedTurn`) is a pure no-op — most visibly +at turn 0, where the sole row is the live turn — so the navigator +never re-fetches the report just to redraw the same snapshot. -->