Skip to content

feat(web): zoom gets an on-screen picker again, top-left - #132

Merged
lex00 merged 1 commit into
mainfrom
feat/zoom-picker-on-screen
Aug 5, 2026
Merged

feat(web): zoom gets an on-screen picker again, top-left#132
lex00 merged 1 commit into
mainfrom
feat/zoom-picker-on-screen

Conversation

@lex00

@lex00 lex00 commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Partly reverses #73 for one control, deliberately. Flagging that up front since #73 closed recently and its whole point was thinning on-screen chrome.

What happened

#73 moved the pickers into ⌘K and left the current value on the status strip — "hide controls, never state". On first contact that fails: the strip renders

zoom: components · env: dev

which looks like a dropdown, because it is a value sitting among other values. Clicking it does nothing — renderStatusbar() only ever sets textContent. The sole hint that a control exists is a ⌘K glyph at the opposite end of the header.

Reported verbatim as "the zoom drop down isnt working, cant pick a thing". That is a fair reading of what is on screen.

What changed

Zoom gets a real <select>. The palette keeps its entries; both call the same applyZoom() + load(). ⌘K loses nothing — it stops being the only way to reach the control people use most. Every other axis stays in the palette, so this is one visible control rather than the header of selects #73 was reacting to.

Placement is #zoom-slot, first after the wordmark. The first cut put it in #pickers on the far right, which is where chrome lives — theme select, lanes link, ⌘K hint — and a primary control inside a chrome cluster reads as chrome. The graph pane's corners were the other candidate and already carry ⤢ fit and back-to-infra.

The strip drops its zoom label. The same value in two places two slots apart reads as two pickers, one of which is broken — which is precisely how the first cut got reported back to me. It keeps env · stack · tier, the axes with no on-screen control, and clicking it now opens the palette instead of doing nothing.

runtime only lists with an env picked, since it descends below the declaration boundary to owner-referenced children that exist in a cluster and never in source.

Testing

node --check on web/app.js, and the markup order asserted (h1zoom-slotmeta). Exercised by hand against a live mixed-substrate estate (k3d + floci + the KubeMicroVM operator) at every level, with and without an env: the select drives the same loads the palette does, and the two stay in sync — changing zoom via ⌘K updates the select, and vice versa.

Related: #131, which is the other half of why stepping through zoom levels is confusing — several of them render identically to each other and never say why.

#73 moved every picker into the ⌘K palette and left the current value on
the status strip — "hide controls, never state". That reads well and fails
on first contact. The strip renders "zoom: components" next to "env: dev",
which looks like a dropdown because it is a value sitting among other
values, and clicking it does nothing: renderStatusbar() only ever sets
textContent. The one hint that a control exists is a "⌘K" glyph at the far
end of the header.

Reported as "the zoom drop down isnt working, cant pick a thing", which is
exactly what it looks like.

Zoom gets a real <select>. The palette keeps its entries and both call the
same applyZoom() + load(), so ⌘K loses nothing — it stops being the only
way to reach the control people use most. The other axes stay in the
palette: this is one visible control, not the header of selects #73 was
reacting to.

Placement is #zoom-slot, first after the wordmark, rather than #pickers on
the far right. #pickers is where chrome lives — the theme select, the
lanes link, the ⌘K hint — and a primary control in a chrome cluster reads
as chrome. The graph pane's top corners were the other candidate and
already hold ⤢ fit and back-to-infra.

The strip drops its zoom label, since the same value in two places two
slots apart reads as two pickers with one broken — which is how the first
cut of this was reported. It keeps env/stack/tier, the axes that still
have no on-screen control, and clicking it opens the palette rather than
doing nothing.

runtime only appears in the list with an env picked: it descends below the
declaration boundary to owner-referenced children, which exist in a
cluster and never in source.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TCV5kwB1jdnWH9if9ZbNXq
@lex00
lex00 merged commit d0a67b9 into main Aug 5, 2026
1 check passed
@lex00
lex00 deleted the feat/zoom-picker-on-screen branch August 5, 2026 04:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant