Saltar al contenido
Alea0.1
Pro
  1. Alea
  2. Motion
  3. Componentes de movimiento

Motion

Componentes de movimiento

La prop motion en cada overlay, y los componentes pequeños detrás de los patrones: swap, roll, reveal, dissolve, resize, stream y progreso de scroll.

import { TextSwap, NumberRoll, Reveal, Presence, AutoHeight, StreamingText, ScrollProgress } from '@alea/motion';

Ejemplos

Swap y roll

El texto se funde con un desenfoque cuando cambia; los dígitos ruedan hasta el nuevo número.

$1,290

Reveal y stagger

El contenido entra al aparecer con el scroll; con stagger, los hijos llegan uno tras otro. El HTML del servidor sigue visible.

Tokens

Components

Motion

Presencia y tamaño

Lo que se quita se disuelve antes de desmontarse; AutoHeight anima los cambios de tamaño.

DesignCodeMotion

Alea Motion animates what changed.

Stream

Una respuesta que llega por partes: cada parte aparece gradualmente, un cursor se muestra mientras transmite, un brillo mientras piensa.

Éxito, onda, badge y abanico

Patrones incluidos en los componentes: isSuccess, ripple, CountBadge y el abanico de AvatarGroup.

La prop motion

Cada overlay acepta motion: un preset, false, o { enter, exit, duration, easing, delay }.

Preset

Morph, puntos y revelado

Un menú que crece desde su disparador, el loader de 16 puntos, y un esqueleto que se funde con el contenido.

Props

TextSwap props

Texto o un ícono que cambia con un breve fundido con desenfoque (el patrón swap). Dale un valor que sirva como key.

PropTipoPor defectoDescripción
asElementType'span'
classNamestring-
direction"up" | "down"'up'
variant"scale" | "blur"'blur'

NumberRoll props

Un número cuyos dígitos ruedan hasta el nuevo valor (el patrón roll). Los lectores de pantalla reciben el valor con formato una vez.

PropTipoPor defectoDescripción
valueobligatorianumber-
classNamestring-
formatNumberFormatOptions-
localestring-

Reveal props

Contenido que entra cuando aparece con el scroll (una vez). Sin JavaScript simplemente se muestra.

PropTipoPor defectoDescripción
asElementType'div'
classNamestring-
delaynumber-Demora en ms.
motion"fade" | "scale" | "pop" | "rise" | "drop" | "slide-up" | "slide-down" | "slide-left" | "slide-right" | "blur" | "zoom" | "flip" | "morph" | "none" | MotionO…'rise'El preset de entrada. Por defecto rise.
oncebooleantrue
staggerboolean-Los hijos entran uno tras otro en lugar de todo el bloque.
styleCSSProperties-

Presence props

Mantiene montado un hijo mientras hace su salida (el preset dissolve por defecto), y luego lo desmonta.

PropTipoPor defectoDescripción
showobligatoriaboolean-
exitClassNamestring'alea-dissolve-out'

AutoHeight props

Anima su altura cuando su contenido cambia de tamaño (el patrón resize).

PropTipoPor defectoDescripción
asElementType'div'
classNamestring-

StreamingText props

Texto que llega por partes (respuestas de IA): las partes nuevas aparecen gradualmente, un cursor se muestra mientras transmite.

PropTipoPor defectoDescripción
chunksobligatoriastring[]-
asElementType'p'
classNamestring-
streamingbooleanfalse

ScrollProgress props

Una barra fina arriba que se llena al hacer scroll en la página (scroll timeline de CSS donde está disponible).

PropTipoPor defectoDescripción
classNamestring-

Especificaciones

Generado desde el código: las variantes de los tipos, los estados y tokens del CSS, y los patrones de motion que aplican. Las grillas muestran el componente real en ambos temas; los números se miden en la página.

TextSwap

Variantes
directionupdown
variantscaleblur
Motion
swapmore
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-swap.alea-swap-out.alea-swap-in

NumberRoll

Motion
roll
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-roll.alea-roll-digit.alea-roll-strip

Presence

Motion
dissolve
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-dissolve-out

AutoHeight

Motion
resize
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-autoheight

StreamingText

Motion
streamroute
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-stream.alea-stream-chunk

ScrollProgress

Motion
scroll
Oscuro y claro
Cada color viene de tokens del tema, así que sigue a data-theme (y a presets como Graphite) en la página o en cualquier contenedor. El contraste se revisa en ambos temas.
Clases para estilos
.alea-scroll-progress

Accesibilidad

  • Todo sigue prefers-reduced-motion: distancias, escalas y desenfoque van a cero, los bucles se detienen, y los fundidos se mantienen para que los cambios se sigan notando.
  • NumberRoll y TextSwap anuncian el nuevo valor una vez (de forma polite), nunca en cada cuadro.
  • Reveal solo oculta contenido que empieza debajo del pliegue y solo después de que corre JavaScript, así el HTML del servidor y los buscadores ven todo.
  • StreamingText pone aria-busy mientras transmite.

Qué hacer y qué evitar

Hacer

  • Elige un preset según lo que cambió: pop para cosas ancladas, rise para nivel de página, slide para paneles.
  • Cambia el movimiento de forma global con ThemeProvider motion={{ mode, speed, intensity, components }} antes de recurrir a props por instancia.
  • Usa isSuccess por un momento después de que una acción funcionó, y luego vuelve.

Evitar

  • No animes propiedades de diseño (width, top); los presets usan transform y opacity.
  • No hagas esperar a la gente a que termine una animación para actuar.
  • No apagues el movimiento para todos; respeta el ajuste del sistema, u ofrece tu propio interruptor con reduced="never".
Probado con axe, teclado y roles de lector de pantalla