Repository navigation
fix(devknobs): safari's bottom bar shows the whole host and the real page under it - #100
Merged
Merged
Conversation
…che for the star count
… commented imports
One pass over the text skips comments, strings, template literals and regex bodies. It replaces the comment-stripping regex, the directive regex that backtracked exponentially on long comment heads, and the import-line regex. Strings that look like comments no longer hide a mount.
Read the knobs key first, then the devknobs key. Write and remove both for two minor releases so an old copy and a new copy on one origin share state. The storage view and fresh mode treat both prefixes as our own.
An old copy (the 0.7.0 extension) writes and removes only devknobs keys, so reads follow the old name and writes put it first. The storage view group label reads knobs.
Docs, skill, READMEs, install prompt, init and the demo use the new names: window.knobs, Knobs, Knobs* types, x-knobs-now, ?knobs=fresh, data-knobs*, knobs storage keys. Old names still work. Bump package and extension to 0.8.0.
Docs, skill and install prompt name window.devknobs for pages with a knobs of their own and copies before 0.8. A named element no longer keeps the api off window.knobs (Object.hasOwn).
Same text as the 0.7.1 store update, so 0.8.0 keeps it.
…e room, no cut hosts
…ered overlays, no repaint loop
…ody scroller, ask cors quietly
…py keeps its margins
…fusal from missing
…ts start, never an ellipsis
… descenders stay whole
…ame, under what covers them
…deos keep one picture
…and every context trigger
…s and content-visibility are
Collaborator
Author
mertbuilds
added a commit
that referenced
this pull request
Nov 14, 2026
* chore(release): knobs 0.7.2 Bump @vinena/knobs and the extension to 0.7.2 with the changelog entry for the bottom bar fix (#100). * docs(knobs): Safari with a capital in the 0.7.2 entry --------- Co-authored-by: Mert Duzgun <46185450+mert-duzgun@users.noreply.github.com>
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.






Safari's bottom bar in the phone frame: the domain pill no longer cuts the host, and the band under the bar shows the page's real images and videos instead of a grey slab with a hard cut.
Bug (0.7.1, iPhone frame, mertduzgun.com dark): the pill read "mertduzgun.c..." with room left, and a video card was cut at the bar with a grey box under it.
Root cause
copyPageblanks every image, and the band, unlike the fold pictures, never drew them back. So every img, video, canvas and CSS background under the bar showed as its empty box (the grey is the site's ownbackground-coloron the media box). Videos had three more causes: a positioned sound button over the video dropped it, a video without a frame was skipped, and Chrome drew its media controls into the copy (a stray "/" under the pill).What changes
domainRoom/domainFitgives both the text limit and the pill size. The domain lays out at its real size per state (FLIP scale only during the morph). The expanded field follows real iOS Safari, measured on the simulator: 17pt when it fits, shrinks to fit down to 13pt, then keeps the end of the host with a 9px start fade. No ellipsis anywhere. Text room keeps 21pt from the icons (25 on the Duo cover). Descenders are no longer clipped.bandmedia.ts): images, video frames, canvases and CSS backgrounds near the band go into the copy as real pixels. Images from other origins are asked plain first, then with CORS only for files that came, and a host is dropped after two refusals, so the console sees at most one line per address. Pictures that cannot be read go on an overlay, with whatever paints above them (by stacking-context rules) drawn back on top. Playing videos redraw on every frame; videos without a frame show their poster.html,body{height:100%} body{overflow-x:hidden}no longer get a blank band), follows a body scroller, and hides Chrome's media controls (also in the fold pictures).scripts/underbar-oracle.ts: a headless check that compares the band with the live page, pixel by pixel, on built-in fixtures (images, backgrounds, canvas, videos, paint-order cases) or any URL. Not run in CI.Proof
bun testin packages/devknobs: 4580 pass, 1 fail (time.test.ts:376, zone name on this Mac only; fails on main too).tsc,pnpm lint,pnpm format:checkclean.body{overflow-x:hidden}page, textKnown limits
contextOf(for example-webkit-box-reflect) are guessed as no context.body, Safari's bars do not minimize on scroll (pre-existing, not touched).bun test --randomize, 34 Duo-fold and frame tests fail on main too (test order coupling, not touched).Risk
Normal: drawing only, inside knobs' own frame (packages/devknobs engine). No storage, network to new hosts, permissions or release files. It ships to users with the next knobs release; the site picks it up on merge.
How to revert
Revert the squash commit. No state or data depends on it.