What happened?
On a real phone, tapping the mobile peek bar or the "Filters" button sometimes
doesn't visibly open the bottom sheet. The underlying React state does flip
(data-state="open" on the vaul drawer), but the sheet's transform is never
applied, so it stays positioned off-screen below the viewport.
Root cause: src/components/map/map-sheet.tsx uses modal={false} with
percentage snapPoints (["48%", "92%"]) on vaul@1.1.2. Inside
vaul's internals, snapPointsOffset depends on windowDimensions being
hydrated, and the transform only gets applied once delayedSnapPoints flips
via requestAnimationFrame. Real-device timing/touch-event sequencing can
leave this incomplete.
What did you expect to happen?
Tapping the peek bar or Filters button should always open the sheet to a
visible, usable position.
Steps to reproduce
- Open the map page on a real phone (not devtools emulation — this didn't
reproduce reliably there).
- Tap "Filters" or the peek bar at the bottom of the map.
- Sheet may not visibly appear, or appears stuck off-screen.
Browser and OS
Real mobile devices (Android/iOS) — did not reliably reproduce in headless
Chrome DevTools emulation.
Checklist
What happened?
On a real phone, tapping the mobile peek bar or the "Filters" button sometimes
doesn't visibly open the bottom sheet. The underlying React state does flip
(
data-state="open"on the vaul drawer), but the sheet'stransformis neverapplied, so it stays positioned off-screen below the viewport.
Root cause:
src/components/map/map-sheet.tsxusesmodal={false}withpercentage
snapPoints(["48%", "92%"]) onvaul@1.1.2. Insidevaul's internals,snapPointsOffsetdepends onwindowDimensionsbeinghydrated, and the transform only gets applied once
delayedSnapPointsflipsvia
requestAnimationFrame. Real-device timing/touch-event sequencing canleave this incomplete.
What did you expect to happen?
Tapping the peek bar or Filters button should always open the sheet to a
visible, usable position.
Steps to reproduce
reproduce reliably there).
Browser and OS
Real mobile devices (Android/iOS) — did not reliably reproduce in headless
Chrome DevTools emulation.
Checklist