Skip to content

feat(lab): RefreshControl pulls under a pen or a mouse as under a finger (spec:AST-094 FR43) - #8688

Closed
vjeux wants to merge 1999 commits into
meta:mainfrom
vjeux:uikit/c28-refresh-every-pointer
Closed

vjeux wants to merge 1999 commits into
meta:mainfrom
vjeux:uikit/c28-refresh-every-pointer

Conversation

@vjeux

@vjeux vjeux commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Depends on #8175 and #8665 (with #8666's pen driver). Carries #8562 (Core's internal entries) as a dependency; if the entries land differently, this follows her decision. Review only this PR's change: vjeux/astryx@01e856a...2758073; later heads only merge #8175, #8665 and #8666.

Why

With a mouse or a stylus, nothing pulls to refresh: the pull reads only a finger, so a drag at the top of a refreshable list does nothing.

What led to it

Part of the touch-presentations program (spec:AST-094). Its FR43, now on main, has gestures run for every pointer, keeping off only what it lists; the pull to refresh isn't on that list.

Options and tradeoffs

  • Keep the mouse off, as a row swipe is: FR43 doesn't list it.
  • Take the top edge under every pointer: under a fine pointer, overscroll-behavior: none would remove the page's own rubber band, with no pull to replace it for a wheel.
  • One pull for every pointer, leaving the top edge to the browser under a fine pointer.

Why this choice

The third follows FR43 with the least new behavior: every pointer shares one mapping, trigger, settle and drawing. Under a fine pointer the browser keeps its own overscroll at the page's top, and the control watches no scroll (FR24). A pen's or a mouse's pull clears the text selection its drag started, then holds selection off, as a finger's does. Under Reduce Motion a release cross-fades where a finger let go or the primary pointer is coarse (design:reduced-motion DR2) and lands at once elsewhere (DR3). A trackpad's or a wheel's scroll follows in #8697.

How to check it

In a desktop browser, on the RefreshControl story "On the page":

  1. Drag down from the top with the mouse: the content follows, the spinner turns past the trigger, and on release it settles under the spinner until the refresh ends.
  2. Start the drag on text: the selection it began is cleared, and nothing is selected while pulling.
  3. Turn on Reduce Motion and release a pull: the content lands at once.

Evidence

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot. needs:design-review Affects visuals — Design should review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants