Repository navigation
fix(web): custom snooze footer stays inside the dialog - #33759
Conversation
The custom snooze dialog was 24rem wide, so its three footer buttons (Edit snooze options, Cancel, Snooze) overflowed the footer's content box with wider interface fonts and justify-end pushed them past the dialog's left edge. Widen this dialog to 28rem at sm and up. Fixes #33740 AI-assisted; verified with the tests and tools listed above.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — The custom snooze dialog becomes wider on larger screens to give its footer buttons more room. This is a localized visual adjustment; mobile layout and snooze behavior remain unchanged. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
Problem
In the Custom snooze dialog, the footer's "Edit snooze options" button sticks out past the dialog's left border at desktop widths when the interface font is wider than the default (for example a monospace font). The dialog is capped at 24rem, and its three footer buttons (Edit snooze options, Cancel, Snooze) don't wrap or shrink, so
justify-endpushes the overflow out on the left.Reproduction on main (
4c361199f4, web dev server, 1280×800): Settings → Appearance → Interface font =DejaVu Sans Mono, then thread actions → Snooze → Custom…. The popup's left edge is at x=448 while "Edit snooze options" starts at x=438. The same thing happens on the Date and time tab and the Duration tab. The default font fits with no room to spare.Change
The Custom snooze dialog's width cap at
smand up goes fromsm:max-w-sm(24rem) tosm:max-w-md(28rem), the width most dialogs in the app use. The footer now has 400px of content width against the ~370px a monospace footer needs, so it stays on one row with Cancel and Snooze together. The width is rem-based, so this holds across the interface font size setting (12–20px). Belowsmthe dialog is a full-width bottom sheet and is unchanged.Scope and approval
Fixes #33740
Verification
vp run check:changed: format, lint, knip, typecheck and react compiler pass.vp test run apps/web/src/hooks/useThreadActionMenu.test.ts: 7/7 pass.smboundary), it sits 12.6px past before and 31px inside after.Evidence
F01 — Date and time tab · 1280×800 · dark · DejaVu Sans Mono 16px
4c361199f4b5b9a154b44c361199f4→b5b9a154b44c361199f4→b5b9a154b4F02 — Duration tab · 1280×800 · dark · DejaVu Sans Mono 16px
4c361199f4b5b9a154b44c361199f4→b5b9a154b44c361199f4→b5b9a154b4F07 — default font, Date and time · 1280×800 · light · 16px (what users on the default font see change)
4c361199f4b5b9a154b44c361199f4→b5b9a154b44c361199f4→b5b9a154b4F09 —
smboundary · 640×600 · dark · DejaVu Sans Mono 20px4c361199f4b5b9a154b44c361199f4→b5b9a154b44c361199f4→b5b9a154b4F11 — bottom sheet, below
sm· 390×844 · light · DejaVu Sans Mono 16px (unchanged: zero changed pixels)4c361199f4b5b9a154b44c361199f4→b5b9a154b44c361199f4→b5b9a154b4All 12 rows (both tabs, both validation errors, calendar open, unit menu, default font, the
smboundary, and the bottom sheet at 390 and 639px), with recordings of the scripted interactions: full evidence index · fixture matrix. Seed and driver scripts: seed.sh, reproduce.md, driver.js, sessions.js, stabilize.js, diff.py, seed-clock.py, f01.js. The F01 pair rebuilds from these scripts with 0 changed pixels.What else changed: at
smand up the dialog is 64px wider for everyone (80px at a 20px interface size), and its tabs, fields, footer, shadow and the calendar/Unit menu anchors move or widen with it. Text reflows: with the default font the description fits on one line, so the dialog is 20px shorter. The bottom sheet at 390 and 639px has zero changed pixels.Not checked: Electron (desktop wraps the same web view), other browser engines, and the reporter's macOS fonts. The captures drive the breadcrumb thread-actions launcher; the sidebar launchers open the same dialog host. Optional native empty-field validation and midnight rollover rows are out of scope for a width change.
AI-assisted; verified with the tests and tools listed above.