Function
See GuideAutoplayProps
The guide as a labelled group, cycling through the steps and answering a horizontal drag
It is the prototype video's pacing, rebuilt from components so that the iOS labels it shows can be translated — the one thing the rendered MP4 could never do. A self-paced stepper was built alongside it and compared; this one was kept, and the other deleted.
What it buys is that the learner does nothing: the flow just runs. What that costs is the learner who looks away — at the «···» they were sent to find, or at Safari's own menu covering the page — and comes back to a guide that has moved on. Two things answer that. It says which step is showing and how many there are, rather than looping anonymously; and a horizontal drag moves it a frame either way, so the frame they missed is one gesture back rather than a whole loop away.
The gesture is a nudge, not a takeover. There is no pause, and no manual mode to get stranded in: the loop plays on, and the frame the learner landed on simply gets a full interval of its own before it does — which is what the per-frame timer below is for.
The steps come from INSTALL_STEPS.
Under prefers-reduced-motion it does not advance at all. The preference is
read after mount — it cannot be known while rendering on the server — so the
first step is painted either way and only the movement is conditional. The
drag keeps working there, and is the only thing that does: the preference
silences motion the learner did not ask for, and this is the motion they did.
It holds no dismissal state; onDismiss hands that to the caller.
The install guide, playing itself: the four steps on a loop, and a drag to move it by hand.