1.2.0 - 2026-10-11
animationSpeed on Sheet.Root makes every sheet animation faster or slower (#1). 2 halves every duration and 0.5 doubles it: the open/close spring, programmatic detent travel, the content-height morph, and the backdrop, recede, and backgroundEffect transitions. The spring keeps its shape (same damping ratio, no added overshoot), and an interrupted leg still hands its velocity to the next one. Finger-driven travel is unaffected and prefers-reduced-motion still wins. Drawer.Root and Dialog.Root forward it.
- Fixed:
backgroundEffect snapped instead of easing with the sheet. The page wrapper sits outside the dialog, so the --scrollsheet-dur and --scrollsheet-ease variables its transition referenced had no value there, which voided the whole declaration. It now carries literal spring timing.
- Fixed: changing
detents (or vaul snapPoints) while a sheet was open had no effect. The snap stops kept the old list and a new activeDetent resolved against it. The sheet now re-measures and moves to the new stop.
- Fixed: the second Android back gesture navigated away when a Toaster still had toasts left, or when a controlled non-modal sheet refused the first close. A close watcher only fires once; it now re-arms.
- Toast fixes for Sonner parity. Escape in the toast region no longer dismisses a
dismissible: false toast. toast.promise shows no loading toast when loading is omitted, and dismisses instead of showing a made-up “Success” or “Error” toast when the settled branch has no handler. toastOptions.className on the Toaster now reaches every toast.
- Fixed:
Sheet.Handle announced a numeric pixel detent such as 320 as “32000%”.
- The
Sheet entry dropped from 16.9 to 16.4 kB gzip, with all of the above included. Nested-scroll support (the data-scrollsheet-nested-scroll handoff and its overlay thumbs) now loads only when a sheet contains such a region, and the iOS body freeze loads only on iOS. Every entry shrinks by about 1 kB: Drawer 17.2, Dialog 15.9, the zero-config auto entry 20.8. Each system behaves as before once loaded, and a failed chunk fetch degrades that one system the same way the keyboard engine already does.
See the full changelog on GitHub