Repository navigation
New Tab: keep dot names visible during keyboard focus - #27341
Conversation
|
Bead |
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Passes: CI passes on CI passes on Written by red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base f8b0183; does not block |
|
Found 6 test failures on Blacksmith runners: Failures
|
|
Review (codex-review-box/gpt-6-astra high, lane-place): SHIP at a0f26c6 SHIP
No blocking defects found at |
Bugbot needs on-demand usage enabledBugbot uses usage-based billing for this team and requires on-demand usage to be enabled. A team admin can enable on-demand usage in the Cursor dashboard. |
|
Shipped in:
|
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
New Tab dot names currently follow pointer hover or a 1.1-second selection timer. Keyboard focus alone does not keep the name displayed: a previously hovered option can still be fading out as another dot gains focus, and an arrow-selected name disappears while its radio remains focused. Keep the keyboard-focused name visible until blur. A fresh pointer hover can preview another name; keyboard interaction clears a stationary pointer's old label.
Leo: "I feel like you guys could be doing more audits of the app. Like there's some amount of, like, satisfying and pretty stuff that can happen that we're not quite taking full advantage of."
Checklist: keyboard discoverability and worst-case interaction. DotSwitch keeps its existing accessible names and layout. It also serves composer look dots, so risk is limited to name visibility across pointer/keyboard transitions. Pointer press clears keyboard-name state, including when clicking the already-selected radio does not fire a change event. Only pointer picks start timed name feedback. Keyboard picks use focus state, so an immediate Tab away clears the name instead of exposing a stale selection timer. No new timer, observer or animation; the pointer selection timer clears on replacement and unmount.
Before / after
Real DotSwitch and shipped styles in the isolated
new-tab.dot-focusgallery; synthetic labels only. Captured on ce06325. These captures show the retained-focus behavior. The subsequent immediate-blur correction changes only what happens after keyboard focus leaves; no new screenshot is claimed for that transition.The Tab before-shot catches the outgoing hover-label fade. It demonstrates the wrong option's name during the focus transition, not immediate visual absence. The later arrow shots show the fully expired label.
Validation
Gallery sizing gate fix at
079015c8bb1fc8cb37bed801e3f8081d3a8d4435: the fixture fills its stage withheight: 100vhinstead of declaring a raw 200px control height. The gallery entry continues to own the default stage height. No baseline entry or production code changed. Exact-head fast checks pass the design-token ratchet and all 11 dot-switch tests / 97 assertions. The earlier screenshots retain their original capture geometry; this delta changes only fixture sizing.Immediate-blur regression: Playwright's clock is installed before page load, paused before ArrowRight, and advanced only 32ms for the focus-restoration frame. Time stays paused through Tab and the visibility assertions, so a slow CI shard cannot accidentally expire the 1100ms pointer timer. Reverting only the pointer-only
pickedassignment fails all four blur cases; the fixed version passes all 11 tests / 97 assertions, formatting, lint, fixed-wait guard and typecheck in the red/green run. The test awaits the label's actual animations and checks rendered opacity as well asdata-shown.Current head
a0f26c66b3dbf9b65eeb8053a9f937e2f959d300passes web CI, attempt 2. The remaining cmux-next check failure isNo new SwiftUI (macOS UI is AppKit), also failing on basef8b0183ff86b6f6a880ead08a5ae589049a8024b; this PR changes only five webview files.Earlier remote checks passed: targeted formatting and lint, fixed-wait guard, browser tests (4 cases / 44 assertions), existing style-switch tests (3 / 25), and full typecheck (2715 files). Cases covered light/dark × 340/760 px, pointer/keyboard handoff and clicking the already-selected radio. That harness did not explicitly set the gallery's Reduced Motion parameter; the new regression now does and asserts the effective media query.
Baseline comparison used the same fixture and baseline de67de9. Baseline mode deliberately expects the defect; this is a before/after observation, not a red regression-test run. That run passed both browser modes and the existing suite, then failed only at artifact export; captures were subsequently rerun remotely.
data-shownafter Tab and pointer exitdata-shown1400 ms after arrow selectionThe flag measures requested label visibility, not instantaneous opacity during the 80 ms exit fade.
Overlap: #20598 changes style-switch presentation in the same file but does not fix focus-name retention. DotSwitch's API is preserved.
Agent session: agent session