Reveal
An entrance for page content: what it wraps starts slightly offset and transparent, then travels into place and fades in when it reaches the viewport. It fires once and stays, so content that has arrived never leaves again.
Direction chooses the axis it travels from, with fromBelow the default and fromAbove, fromLeft, fromRight the alternatives (that is also the precedence order if more than one is passed). pronounced travels further, brisk arrives faster, and deepInView holds the entrance until the element is properly inside the viewport instead of firing as it enters.
Stagger is structural rather than numeric: wrap a set in RevealGroup and each child arrives after the one before it, so no call site ever computes a delay. RevealGroup renders no box of its own, so it can sit between a grid and the items the grid lays out.
The trigger is measured against the window rather than the nearest scrolling parent, so content sitting inside a short inner scroller can arrive before that scroller has been scrolled to it; reveal on the page scroll, which is what this is for. Under Reduce Motion the content renders its final frame immediately, with no measuring and no timers, and the stagger is skipped along with the motion.
Rises into place
iOS
Rises into place
Android
Rises into place
Web
tsx
Default
From above
From the left
From the right
Pronounced
Brisk
Deep in view
Staggered group
Replay
Props
RevealGroup
Reveal
Do & Don’t
stagger
Don’t
Leave a set ungrouped: every card fires at the same instant, so the row lands as one slab instead of a cascade.
Do
First
Second
Third
Wrap the set in a RevealGroup and let each item's position set its own rhythm.
direction
Don’t
Mix a direction per item; the set reads as scattered rather than as one movement.
Do
Rises
Rises
Give a set one direction, so it arrives as a single gesture.
scope
Don’t
Reveal each leaf inside one card; the card assembles itself in pieces in front of the reader.
Do
One entrance
The card and its lines arrive as a single object.
Reveal the block, so its contents arrive together as one piece of content.
the real thing
Don’t
Hand-roll it with a wrapper and a hard-coded opacity: it never arrives, never watches the scroll position, and ignores Reduce Motion.
Do
Reveals itself
Use the atom, so the entrance is one prop, plays on scroll, and honors Reduce Motion.