Skip to content

Desktop drag

button, a, input, textarea, select, label, [contenteditable], [data-scrollsheet-no-drag]

pointerType: 'mouse' can grab the panel anywhere and drag it; the last ~100ms of pointer samples project velocity on release, so a flick lands past the cursor. Touch and pen skip this path and keep riding native scroll-snap. The elements above opt out automatically; add data-scrollsheet-no-drag to anything else that needs the same treatment.

Trackpad and wheel input ride native scroll-snap too, not this drag path, but a single-detent sheet only has two snap stops (0 and the one detent), so an ambiguous wheel gesture used to land wherever the browser’s own snap heuristic put it, ignoring closeThreshold. A short wheel-idle correction pass now compares the gesture against closeThreshold once it settles and only overrides when the two disagree, so closeThreshold governs a wheel dismissal the same way it governs a drag. Multi-detent sheets need no correction: enough stops between them for native snap to land correctly on its own.

Grab the panel anywhere with a mouse and fling it. Release mid-flight and it lands on the nearest of three heights.