Motion

Duration, easing, spring, and stagger tokens for consistent, editorial-tempo animation. Import from @repo/ui.

Durations

TokenSecondsMillisecondsUse Case
durations.instant0.1100Color changes, icon toggles
durations.fast0.15150Button hover, tab indicators
durations.normal0.2200Modal entrance, popover
durations.moderate0.3300Accordion, page transitions
durations.slow0.4400Chart animations, layout shifts

Each bar slides to full width at its duration tier.

instant (100ms)
fast (150ms)
normal (200ms)
moderate (300ms)
slow (400ms)

Easings

TokenCSS ValueWhen
easings.defaultcubic-bezier(0.16, 1, 0.3, 1)General entrance
easings.incubic-bezier(0.4, 0, 1, 1)Elements leaving
easings.outcubic-bezier(0, 0, 0.2, 1)Elements entering
easings.inOutcubic-bezier(0.4, 0, 0.2, 1)Repositioning on-screen
easings.springcubic-bezier(0.34, 1.56, 0.64, 1)Overshoot emphasis

Ball slides across the track with each easing curve (300ms).

default
in
out
inOut
spring

Springs

TokenConfigUse Case
springs.snappystiffness 500, damping 30UI responses
springs.gentlestiffness 200, damping 20Layout animations
springs.smoothduration 0.3Size changes
springs.bouncystiffness 400, damping 10Emphasis / celebration

Click a box to see its spring preset in action.

Stagger

TokenPer-item delayUse Case
stagger.fast20msTable rows, dense lists
stagger.normal40msCard grids, metric cards
stagger.slow60msOnboarding, feature showcase
stagger.maxTotal400msHard cap for total stagger time

12 blocks staggered at stagger.normal (40ms each).

1
2
3
4
5
6
7
8
9
10
11
12

Variant Presets

fadeUpItem / fadeDownExit

Fade + translate-y for list items

fadeUpItem

scaleIn

Scale + fade for modals and dialogs

scaleIn

slideIn

Directional slide from any edge

slideIn("up")

Import Reference

import {
  durations, durationsMs, exitDuration,
  easings, easingsCss,
  springs,
  stagger, staggerDelay,
  fadeUpItem, fadeDownExit, scaleIn, staggerContainer, slideIn,
} from "@repo/ui";

import { useMotionSafety } from "@repo/ui";