uttrflow / uttrflow/uttrflow-swift
Onboarding's page slide and the last page's spring-and-rings arrival ignore Reduce Motion
- Dominant language
- Swift
- Stars
- 4
- Forks
- 17
- Avg merge
- 3h 32m
- Merged PRs (30d)
- 277
Description
## What happens
#377 made the Home demonstration, the dock and the working dots respect Reduce Motion through `MotionBudget` (`Sources/Uttrflow/Motion/MotionBudget.swift`). The onboarding window was left out. With Reduce Motion on, these animations still run:
- Every page change slides the new page up by 8 pt while it fades (`Sources/Uttrflow/Onboarding/OnboardingView.swift:59`, `.animation(.smooth(duration: 0.26), value: model.page.position)`, and the `.offset(y: 8)` transition at `:69-72`).
- The last page's tile springs in from 72% scale with an underdamped spring (`OnboardingView.swift:231-237`, `.spring(response: 0.52, dampingFraction: 0.58)`), and three rings scale out from 0.72 to up to 1.95 times the tile (`:260-271`).
Nothing in `Sources/Uttrflow/Onboarding` reads `accessibilityDisplayShouldReduceMotion`, `@Environment(\.accessibilityReduceMotion)` or `MotionBudget`.
## Why it matters
People with vestibular disorders turn on Reduce Motion to avoid scaling and zooming effects. The bouncing tile and expanding rings are exactly that kind of effect, and they appear on the first screen of the app, before the user has any way to change anything.
## How to reproduce
1. Turn on System Settings, Accessibility, Display, Reduce Motion.
2. Reset first run and go through onboarding to the last page. The pages slide, and the tile springs in with expanding rings.
## Acceptance criteria
- With Reduce Motion on, pages cross-fade (or switch instantly) with no offset. The last page's tile and rings appear at their final size with no spring and no scaling.
- With Reduce Motion off, nothing changes.
- A test covers the choice, for example by extending `MotionBudget` with an onboarding flag and adding a case to `Tests/UttrflowTests/MotionBudgetTests.swift`.
## Where to start
- `Sources/Uttrflow/Onboarding/OnboardingView.swift`, the `page` transition and `Glyph`. `@Environment(\.accessibilityReduceMotion)` is the smallest change. Going through `MotionBudget` keeps one source of truth.
- Run `make verify`, and see `CONTRIBUTING.md`.
Size: small.
Contributor guide
Research direction
Start with Sources/Uttrflow/Onboarding/OnboardingView.swift, focusing on the page transition and Glyph, then compare Sources/Uttrflow/Motion/MotionBudget.swift with Tests/UttrflowTests/MotionBudgetTests.swift. Run make verify and confirm Reduce Motion removes page offsets, springs, and scaling while normal motion remains unchanged.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, swift
- Domain
- accessibility, desktop
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 85/100