From d2fb252a98c1e6ff5bcebef545ce1afdd6764848 Mon Sep 17 00:00:00 2001 From: Kamil Krzywda Date: Tue, 29 Sep 2026 08:21:14 +0000 Subject: [PATCH 1/2] =?UTF-8?q?feat(ui):=20only=20the=20middle=20column=20?= =?UTF-8?q?scrolls=20=E2=80=94=20side=20panes=20stay=20fixed=20(#21)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pin the wide layout to the viewport (height:100vh + overflow:hidden on the root), add min-height:0 to the BODY wrapper and 3-column grid so the flex chain actually constrains, and make the OPERATIONS panel a flex column whose PanelContent is the scroll area (header stays pinned; the Panel root's default overflow:hidden would otherwise clip). Columns' existing overflow-y:auto now scrolls inside their tracks. Narrow mode keeps natural body flow. --- components/mission-control.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/components/mission-control.tsx b/components/mission-control.tsx index 91f2234..a158956 100644 --- a/components/mission-control.tsx +++ b/components/mission-control.tsx @@ -107,6 +107,10 @@ export function MissionControl() {
- + {/* flex column + minHeight:0 so the tab content scrolls inside the panel (#21) — + the Panel root's default overflow:hidden would otherwise clip it */} + OPERATIONS // SHIP COMMAND
@@ -346,7 +354,7 @@ export function MissionControl() {
- + Date: Tue, 29 Sep 2026 08:21:14 +0000 Subject: [PATCH 2/2] release v0.9.3 --- CHANGELOG.md | 7 +++++++ package.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0fab6..975734f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v0.9.3 — 2026-09-29 08:20 +- Layout (#21): only the middle column scrolls now — the app is pinned to the viewport (`height: 100vh` + `overflow: hidden` on the root in wide mode) so body-level scrolling no longer moves the side panes. Left/right columns keep their existing `overflow-y: auto`, so any overflowing content (e.g. a long planet list) scrolls inside its own track instead. +- Added `min-height: 0` to the BODY wrapper and the 3-column grid — flex/grid items default to a content-based minimum size, which is what let the page grow past the viewport before. +- The middle OPERATIONS panel became a flex column with its PanelContent as the scroll area (`flex: 1; min-height: 0; overflow-y: auto`): long tab content scrolls inside the panel while the "OPERATIONS // SHIP COMMAND" header stays pinned — without this, the Panel root's default `overflow: hidden` would have clipped it. +- Narrow layout (<900px) is unchanged: stacked columns with natural body scroll (the viewport pin applies to wide mode only). +- e2e: no spec changes needed — none use mouse.wheel/scrollTo, and Playwright scrolls click targets into view within any scroll container. All 15 specs compile unchanged. + ## v0.9.2 — 2026-09-29 08:00 - WORLD MAP (#19): the bottom JUMP ROUTES button list is gone — jumps now happen by clicking galactic chart fields. Systems adjacent to the current one (the same set as before, undiscovered included) are clickable nodes with a pointer cursor and a `// JUMP` sublabel; the current system stays bright green with CURRENT, unreachable systems are dimmed (OFFLINE) and not clickable. - NodeGraph (`components/ui/node-graph.tsx`) gained two optional, backward-compatible additions: an `onNodeClick(id)` prop that turns non-disabled nodes into buttons (click + Enter/Space, role=button, aria-label, focusable), and a per-node `disabled` flag — while a jump is in flight every node locks, mirroring the old disabled-button behaviour. diff --git a/package.json b/package.json index c811354..1955063 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "space-wanderer", - "version": "0.9.2", + "version": "0.9.3", "private": true, "scripts": { "dev": "next dev -p 3000",