Cycles through a list of items with an enter/exit animation, powered by Motion. A React component.
Made by AxylHeadline that cycles through a set of phrases on an interval.
Pause cycling and drive the index manually:
| Prop | Type | Default |
|---|---|---|
children | ReactNode[] | - |
interval? | number | 2 |
trigger? | boolean | true |
mode? | "sync" | "wait" | "popLayout" | "popLayout" |
live? | "off" | "polite" | "assertive" | "off" |
variants? | Variants | - |
transition? | Transition | - |
onIndexChange? | (index: number) => void | - |
className? | string | - |
Use TextLoop for short rotating copy where a hard cut would feel abrupt: hero headlines, rotating value props, or status text that changes over time. Keep items short and similar in width, since the container does not reserve space for the widest item.
Set live="polite" if the cycling text conveys information users should be notified of; leave it "off" (default) for purely decorative rotating copy, since a live region firing every interval seconds is disruptive for screen reader users. When prefers-reduced-motion: reduce is set, the component still swaps the active item on each interval but skips the enter/exit motion via useReducedMotion() — no extra configuration needed.
Inspired by motion-primitives.
Text Roll
A per-character vertical text roll animation for label swaps and micro-interactions, powered by Motion. React.
Rolling Text
Per-character slot-machine reveal that rolls each letter into place once it scrolls into view, powered by Motion. React.
Built by Axyl. A motion-first component registry for React.
Last updated: 9/14/2026
Help keep SoraLabs moving.
Every contribution helps us build and maintain open-source tools for the community.
Sponsor on GitHub