docs / core / reveal
Reveal
six scroll reveals under one idea: things resolve out of mist as they come into view. assign the variant by content role, so a page does not replay one identical entrance.
intensity · guidesrsc · client
provenance
authored in usvalayer
core / motionintensity
guides · leads the eye through a sequence, then clearscomposition
sections, cards and media on marketing and content pagesstagger lives inside one RevealGroup, never across sectionsnot in dense task UI. a dashboard someone works in reveals nothingnever a Reveal inside a RevealGroup, the group already animates each childa11y
renders static underprefers-reduced-motion, nothing ever arms · content ships visible before hydration · as keeps the element semanticjest-axedependencies
motionlive · six variants
each reveal is assigned by content role, not position.
cast
headings · titles · eyebrows
veil
prose · sections · footers (default)
surface
cards · panels · CTAs · hero
focus
images · media frames
tick
stats · tables (grouped)
lean
quotes · asides · callouts
props
| prop | type | default | notes |
|---|---|---|---|
| variant | "veil" | "cast" | "surface" | "focus" | "tick" | "lean" | "veil" | assign by content role, never by position. cast for headings, veil for prose, surface for cards and CTAs, focus for media, tick for data, lean for quotes. |
| as | RevealTag | "div" | the rendered element. h2, section, p, li, figure and friends keep their semantics. |
| intensity | number | — | overrides the ambient RevealConfigProvider scalar. 1 is kajo-bold, ~0.45 sisu-quiet, 0 switches the reveal off. |
| delay | number | 0 | seconds before the enter starts. |
| amount | number | 0.35 | fraction of the element that must be visible to trigger. |
| force | boolean | false | reveal even when already in view at mount. demos and explicit entrances. |
get it
bun add @usva-ui/reactusage
import { Reveal, RevealGroup } from "@usva-ui/react/motion/reveal";
<Reveal variant="cast" as="h2">Section title</Reveal>
<Reveal variant="veil">Body copy resolves out of the mist.</Reveal>
<RevealGroup variant="tick" className="grid grid-cols-3 gap-3">
<StatCard />
<StatCard />
<StatCard />
</RevealGroup>