feat(web): zoom gets an on-screen picker again, top-left - #132
Merged
Conversation
#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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
which looks like a dropdown, because it is a value sitting among other values. Clicking it does nothing —
renderStatusbar()only ever setstextContent. The sole hint that a control exists is a⌘Kglyph 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 sameapplyZoom()+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#pickerson 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⤢ fitandback-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.runtimeonly 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 --checkonweb/app.js, and the markup order asserted (h1→zoom-slot→meta). 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.