Movimiento
Sistema de motion
Cada animación de Alea es uno de 33 patrones, hechos solo con los tokens de movimiento. El movimiento explica qué cambió: de dónde vino algo, a dónde fue la selección, que se escuchó un toque. Con movimiento reducido, nada se desplaza; las cosas igual se desvanecen.
Cámbialo, en tres niveles
Cada componente tiene un valor por defecto sensato. Tú decides dónde va el movimiento y cuál, sin modificar nada del kit.
- Toda la app:
ThemeProvider motiondefine el modo (expressive, productive, reduced u off), sigue o reemplaza el ajuste de movimiento reducido del sistema, escala la velocidad y la intensidad, y cambia el valor por defecto por tipo de componente. - Un tipo de componente, en CSS:
.alea-popover { --alea-enter: alea-m-fade-in; --alea-exit: alea-m-fade-out; }. Estas variables no se heredan, así un diálogo nunca pasa su movimiento al select de adentro. - Una instancia: cada overlay acepta una prop
motion: un preset,false, o{ enter, exit, duration, easing, delay }. Míralo en vivo.
<ThemeProvider motion={{mode: 'productive', // expressive (default) | productive | reduced | offreduced: 'system', // follow the OS (default) | 'always' | 'never'speed: 0.9, // multiplies every durationintensity: 1.2, // multiplies distances, scales and blurcomponents: { dialog: 'scale', tooltip: 'fade', toast: { enter: 'slide-left', duration: 300 } },}}><Select motion="blur" /><DialogModal motion={{ enter: 'zoom', duration: 320, easing: 'spring' }} /><Popover motion={false} />
Presets: fade, scale, pop, rise, drop, slide-up, slide-down, slide-left, slide-right, blur, zoom, flip, morph, none. Cada uno es un par de keyframes, alea-m-<preset>-in y -out, que también puedes usar en tu propio CSS.
Modos
Prueba los mismos controles en cada modo. Productive es más corto y discreto, para apps densas; reduced mantiene los fundidos y quita los desplazamientos; off quita todas las animaciones.
Pasa el mouse
Patrones
El botón abajo de la pantalla repite las demos automáticas; el resto lo puedes probar a mano.
Pop pop
Los overlays anclados crecen desde lo que los abrió, del lado en que se abren, y se encogen más rápido de lo que llegaron.
Rise rise
Los overlays de página suben un poco mientras el fondo se desvanece. Los toasts suben con un pequeño rebote y salen hacia el costado.
Slide slide
Los paneles entran desde su borde y vuelven por el mismo lado.
Stagger stagger
Los elementos de una lista recién abierta llegan uno tras otro, así la vista los lee de arriba abajo. Solo esperan los primeros doce.
Expand expand
El contenido se abre hasta su propia altura, luego aparece gradualmente, así el diseño de abajo se mueve con suavidad.
Glide glide
Un indicador por grupo se mueve al nuevo elemento y toma su tamaño, con un leve rebote. Ves a dónde fue la selección.
Pasa el mouse
Sube 4 px.
Lift lift
Las superficies clicables suben un poco y proyectan una sombra más profunda con hover.
Press press
Los controles se encogen un poco al presionarlos y vuelven con un resorte, así un toque se siente respondido.
Morph morph
Un ícono pasa a su otro estado en lugar de cambiarse de golpe: los chevrons giran, los checks aparecen, la hamburguesa se vuelve un ícono de cerrar, los switches rebotan.
Tint tint
Los colores de hover y selección aparecen muy rápido; lo bastante rápido para sentirse instantáneo, lo bastante suave para no parpadear.
Nudge nudge
Un campo que pasa a inválido se sacude una vez, con el texto de error, así el problema se encuentra sin buscarlo.
Draw draw
Trazos y barras crecen hasta su lugar: progreso, pasos y líneas de gráficos.
Pulse pulse
Lo que está en vivo o es nuevo respira despacio. Se detiene con movimiento reducido.
Shimmer shimmer
Un brillo recorre los rellenos mientras carga el contenido.
Swap swap
El texto o un ícono cambia con un breve fundido con desenfoque, así notas la palabra nueva sin un salto.
Roll roll
Los dígitos ruedan hasta el nuevo número, así un cambio de valor se lee como un cambio, no como un parpadeo.
Badge pop badge
Un contador salta con un pequeño resorte cuando cambia (no en el primer render).
Éxito success
El estado ocupado se convierte en un check que se dibuja solo, y luego vuelve a la etiqueta.
Dissolve dissolve
Lo que se quita se desenfoca, se encoge y se desvanece antes de irse, así ves qué se fue.
Alea Motion anima lo que cambió.
Resize resize
Cuando el contenido crece o se achica, la caja se anima hasta su nueva altura en lugar de saltar.
Fan fan
Los elementos superpuestos se separan con hover o foco, así cada uno se puede ver.
Ripple ripple
La respuesta al presionar crece desde donde presionaste (opcional, apagada por defecto).
Hold hold
Mantener presionado llena una barra; la acción corre solo cuando se llena. Soltar cancela.
Hint hint
Una flecha se mueve hacia donde va un enlace, con hover y foco de teclado.
Tokens
Componentes
Movimiento
Reveal reveal
Las secciones entran al aparecer con el scroll, los hijos uno tras otro. El contenido que empieza en pantalla, o sin JavaScript, nunca se oculta.
Mira la barra en lo más alto de esta página mientras haces scroll.
Scroll scroll
Una barra se llena mientras lees; un encabezado puede ocultarse al bajar y volver al subir.
Pensando…
Stream stream
El texto transmitido aparece por partes con un cursor; un brillo indica que el modelo está pensando.
Stack stack
Los toasts se apilan detrás del más nuevo y se abren en abanico con hover o foco de teclado, así muchas notificaciones nunca tapan la página.
Abre un toast con la demo de Stack y arrástralo de lado.
Swipe swipe
Arrastra un toast de lado para cerrarlo: pasados 80 px o con un movimiento rápido se va, si no vuelve con un resorte. El botón de cerrar sigue ahí para todos los demás.
Cargando loading
Algo está trabajando: un spinner gira, una barra hace un barrido cuando no hay porcentaje. Siguen moviéndose con movimiento reducido porque llevan significado; todo lo decorativo se detiene.
Count count
Un número cuenta hasta su valor cuando aparece por primera vez, así una estadística se lee como un resultado. Los lectores de pantalla reciben el número final de una vez.
Ambient ambient
Un movimiento lento y tranquilo en el fondo le da vida a una superficie sin pedir atención: los orbes flotan, un punto respira, una aurora se desplaza. Se detiene por completo con movimiento reducido.
Muévete entre páginas de esta documentación: se funden.
Route route
Los cambios de página se funden, deslizan o hacen zoom con la API View Transitions (fundido por defecto).
Curvas
--alea-motion-ease-out--alea-motion-ease-in-out--alea-motion-ease-standard--alea-motion-ease-emphasized--alea-motion-ease-inDuraciones, distancias y escalas
--alea-motion-duration-instant120ms--alea-motion-duration-fast200ms--alea-motion-duration-base320ms--alea-motion-duration-slow480ms--alea-motion-duration-slower720ms--alea-motion-distance-sm8px--alea-motion-distance-md12px--alea-motion-distance-lg24px--alea-motion-scale-from0.92--alea-motion-scale-press0.96--alea-motion-stagger40ms--alea-motion-lift-4pxMovimiento reducido
- Las distancias, escalas, la elevación y el stagger van a cero: los overlays y elementos aparecen en su lugar, nada cruza la pantalla.
- Las duraciones lentas se acortan a base; la curva emphasized deja de rebotar.
- Los bucles decorativos se detienen (pulse, orbes, el ping del indicador); el brillo del esqueleto baja a 3 s. Los spinners siguen girando porque te dicen que algo está pasando.
- Nada importante espera a una animación: las salidas terminan en menos de 200 ms, y el foco se mueve de inmediato.
Reglas para componentes nuevos
- Usa un patrón; si ninguno sirve, agrega uno aquí primero. Nunca un keyframe suelto.
- Entra con ease-out, sal con ease-in y más rápido que la entrada.
- Aparece desde 0.01, no desde 0, así la primera pintura cuenta.
- Anima solo transform y opacity (y height para expand): sin saltos de diseño.
- En Figma, los mismos patrones son componentes interactivos con Smart Animate en la curva ease-out.