Mobile Settings: full-screen compact-touch surface - #1384
Open
backnotprop wants to merge 2 commits into
Open
Conversation
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.
Why
The shared Settings dialog was still a dense desktop modal on phones: a centered card, a horizontally scrolling tab strip, small controls, and nested viewport behavior that did not match the compact touch shells around it.
This PR keeps the existing
@plannotator/uiSettings implementation and setting bodies, but gives compact-touch sessions a full visual-viewport surface with progressive section navigation. The root screen groups preferences and integrations into large rows; selecting a row opens the unchanged setting content behind a single Back control.Scope
Non-goals
Before / after
Matched state: dark Plannotator theme, identity
RC QA Persistence, 390×844 viewport. BEFORE was captured from exactorigin/mainat1080436d; AFTER was captured from this candidate. Environment: Codex in-app Chromium responsive emulation. The compact-touch media result was forced in the local QA harness because the desktop browser exposes a fine primary pointer; that harness change is not committed.Plan / annotate shell — 390×844
Code review shell — 390×844
The image files live only on
pr-assets-1384; no screenshot binaries are part of the implementation branch.Rendered QA
Validated in the in-app Chromium browser at:
Exercised opening/closing, every section in plan/review/annotate, scrolling to the final section, Back navigation, text input, native selects, toggles, light/dark themes, resize/orientation, Escape, Tab containment, and invocation focus restoration. With a text input focused, a visual-viewport contraction from 568px to 400px high kept the stage and single scroll owner aligned; compact editable controls computed to 16px and 44px high.
This was Chromium viewport emulation, not physical iOS Safari. Physical iPhone/iPad Safari validation remains the final follow-up, especially real software-keyboard/browser-chrome interaction and hardware safe-area insets.
Desktop regression statement
The 1440×900 fine-pointer dialog retains the exact origin/main geometry: 672×526.56 at x=384, y=186.72, with the same sidebar/content composition. The only deliberate desktop behavior change fixes a concrete accessibility gap: focus now enters the modal, is contained while it is open, Escape closes it, and focus returns to the invoking Options button.
Automated validation
DOM_TESTS=1 bun test packages/ui/components/Settings.mobile.test.tsx packages/ui/components/Settings.compactDisplay.test.tsx packages/ui/components/Settings.analysis.test.tsx packages/ui/components/Settings.vim.test.tsx— 13 passedbun run typecheck— passedbun run build:ui-css— passedbun run build:review— passedbun run build:hook— passedbun run build:opencode— passedbun run --cwd apps/guides-show build:viewer && bun run --cwd apps/guides-show check:budgets && bun run --cwd apps/guides-show sync:manifest && bun run --cwd apps/guides-show check:manifest— passedgit diff --check— passedFocused coverage proves compact full-stage composition, all section reachability across all three modes, close/Back/focus/Escape behavior, 16px editable styles, touch affordances, reduced motion, compact review behavior, and a desktop-control assertion.