Phone hit: viewer headers and UIA stages (group 9) #135

Merged
void merged 2 commits from void/phone-hit-viewers into dev 2026-11-13 12:42:11 +00:00
Member

Group 9 of the IconButton phone-hit audit: viewers and UIA stages. Nothing drawn changes.

Changed (7 files, 9 buttons)

File Button Variant Reason
uia-stages/PasswordStage close (Icon 24 + pad 4*2 = 32) PhoneHit alone at header end; the title is not tappable (audit said 32 px: confirmed)
uia-stages/SSOStage close (32) PhoneHit same
UIAFlowOverlay exit (24) PhoneHit beside a Chip as="div" (step counter), not tappable
text-viewer/TextViewer back (24) PhoneHit beside a title Text; the Copy chip is in the other Box
image-editor/ImageEditor back (24) PhoneHit same
image-viewer/ImageViewer back (24) PhoneHit same
image-viewer/ImageViewer zoom out, zoom in (24) PhoneHitSpread24 each beside the tappable zoom Chip
Pdf-viewer/PdfViewer back (24) PhoneHit same as above
Pdf-viewer/PdfViewer zoom out, zoom in (24) PhoneHitSpread24 same as ImageViewer

Back/close buttons in a header are single-row, no tappable horizontal neighbour, so plain PhoneHit (no vertical stacks in this group).

Skipped: UrlPreviewCard (2 scroll arrows, 30 px)

The audit proposed PhoneHit. That is wrong: UrlPreviewHolderBtn is position: absolute (left/right 0, translateX +-25%), and PhoneHit sets position: relative on phones. Which wins depends on stylesheet order, and if PhoneHit wins the arrows drop into the flow and the layout changes. Not applied. Needs a variant that keeps the position (or a hit-area-only class) in PhoneHit.css.ts, which this PR may not touch. Clipping check: the arrows' containing block is the outer relative Box, not the Scroll, so the Scroll does not clip the ::after; the translate puts the drawn button 7.5 px past the holder edge and the 44 px hit area ~14 px past, so whether an ancestor (message/timeline container) clips it is unmeasured.

Not measured on a real phone

All of it: hit areas are checked by class and drawn size only (test kit), not by tapping on the Starfire phone run. In the viewer headers the zoom Spread24 adds 10 px margin each side on phones, so the header row grows; not looked at on a 390 px width.

Test

src/app/phoneHit.viewers.test.ts: variant per IconButton in source order plus size tie, no allow-list entries. Mutants (swap in source, test dies): ImageViewer zoom Spread24 -> PhoneHit; SSOStage PhoneHit -> Spread24 (both checks die); PdfViewer Spread24 -> Spread28 (both die); UIAFlowOverlay variant removed.

🤖 Generated with Claude Code

Group 9 of the IconButton phone-hit audit: viewers and UIA stages. Nothing drawn changes. ## Changed (7 files, 9 buttons) | File | Button | Variant | Reason | |---|---|---|---| | uia-stages/PasswordStage | close (Icon 24 + pad 4*2 = 32) | PhoneHit | alone at header end; the title is not tappable (audit said 32 px: confirmed) | | uia-stages/SSOStage | close (32) | PhoneHit | same | | UIAFlowOverlay | exit (24) | PhoneHit | beside a `Chip as="div"` (step counter), not tappable | | text-viewer/TextViewer | back (24) | PhoneHit | beside a title Text; the Copy chip is in the other Box | | image-editor/ImageEditor | back (24) | PhoneHit | same | | image-viewer/ImageViewer | back (24) | PhoneHit | same | | image-viewer/ImageViewer | zoom out, zoom in (24) | PhoneHitSpread24 | each beside the tappable zoom Chip | | Pdf-viewer/PdfViewer | back (24) | PhoneHit | same as above | | Pdf-viewer/PdfViewer | zoom out, zoom in (24) | PhoneHitSpread24 | same as ImageViewer | Back/close buttons in a header are single-row, no tappable horizontal neighbour, so plain PhoneHit (no vertical stacks in this group). ## Skipped: UrlPreviewCard (2 scroll arrows, 30 px) The audit proposed PhoneHit. That is wrong: `UrlPreviewHolderBtn` is `position: absolute` (left/right 0, translateX +-25%), and PhoneHit sets `position: relative` on phones. Which wins depends on stylesheet order, and if PhoneHit wins the arrows drop into the flow and the layout changes. Not applied. Needs a variant that keeps the position (or a hit-area-only class) in PhoneHit.css.ts, which this PR may not touch. Clipping check: the arrows' containing block is the outer relative Box, not the Scroll, so the Scroll does not clip the ::after; the translate puts the drawn button 7.5 px past the holder edge and the 44 px hit area ~14 px past, so whether an ancestor (message/timeline container) clips it is unmeasured. ## Not measured on a real phone All of it: hit areas are checked by class and drawn size only (test kit), not by tapping on the Starfire phone run. In the viewer headers the zoom Spread24 adds 10 px margin each side on phones, so the header row grows; not looked at on a 390 px width. ## Test `src/app/phoneHit.viewers.test.ts`: variant per IconButton in source order plus size tie, no allow-list entries. Mutants (swap in source, test dies): ImageViewer zoom Spread24 -> PhoneHit; SSOStage PhoneHit -> Spread24 (both checks die); PdfViewer Spread24 -> Spread28 (both die); UIAFlowOverlay variant removed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Phone hit: viewer headers and UIA stages
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 3m58s
200cf8fdb8
Back/close buttons beside non-tappable titles take PhoneHit; the zoom out/in
buttons beside the zoom Chip take PhoneHitSpread24. Test pins each variant and
ties the sized ones to the drawn size.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge branch 'dev' into void/phone-hit-viewers
All checks were successful
Build pull request / Build pull request (pull_request) Successful in 4m10s
6c395d7aef
void merged commit 8d25db2775 into dev 2026-11-13 12:42:11 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Ratatoskr!135
No description provided.