React · React Native · 16 componentes

Interações difíceis, já prontas.

O Animated Chorus é um conjunto de componentes de animação para as interações que dão trabalho para acertar à mão: números que rolam, texto em streaming, trocas que redimensionam, sheets, paginadores, ações de deslizar e listas que animam só o que mudou. Uma tag e seus dados. Sem provider, sem configuração.

Instalar
npm install @kkwaenggwari/animated-chorus

Medido neste build

Chrome, 2026-09-28. Todas as condições e amostras estão no guia de desempenho. Como foi medido

  • 28.0KBKB gzip para os 16 exports

    Toda a entrada web, minificada. React é a única dependência peer.

  • 0Callbacks de quadro de JS durante a animação

    Um número, uma altura e um destaque mudando juntos: o navegador reproduz todas as 12 animações.

  • 1Commit do React por mudança de valor

    MotionNumber renderiza quando o valor muda, nunca enquanto rola.

  • 11Commits do React para 3000 caracteres em streaming

    MotionStream adiciona caracteres diretamente e os incorpora ao React poucas vezes por segundo.

01O mais fácil

Uma tag e seus dados

Todo componente funciona sozinho: sem provider, componente envolvente ou chamada de configuração. Coleções recebem items e renderItem, e seu layout, texto e estilos continuam sendo seus.

  • Importe um componente e passe um valor. Essa é toda a integração.
  • Listas, abas e paginadores leem seu array; as keys usam item.id por padrão.
  • O texto continua sendo texto de verdade: quebra linha, acompanha o tamanho da fonte e pode ser selecionado.
  • <MotionNumber value={total} />;
  • <MotionSwap value={status}>{label}</MotionSwap>;
  • <MotionHeight open={open}>{details}</MotionHeight>;
  • <MotionHighlight items={tabs} value={tab} onValueChange={setTab} />;
  • <MotionList items={tasks} renderItem={(task) => task.title} />;
  • <ProgressRing value={progress} />;

Seis componentes ao vivo e a linha de código por trás de cada um.

Preparando o exemplo…

02O mais rápido

O navegador reproduz. O React fica parado.

Na web não há biblioteca de animação para carregar: os componentes entregam o movimento à Web Animations API, então um número que rola ou um painel que muda de tamanho não custam JavaScript por quadro nem render do React enquanto se movem.

  • 0 callbacks de quadro de JS enquanto 12 animações rodam juntas.
  • Um commit do React por mudança de valor, não um por quadro.
  • Texto em streaming: 11 commits do React para 3000 caracteres. O exemplo abaixo conta os próprios renders.

Preparando o exemplo…

03O mais estável

Interrompa o que quiser. Nada salta.

Todo valor novo começa do que está na tela e as molas mantêm a velocidade, então cliques rápidos, rajadas de dados e inversões parecem intencionais. Quando o movimento termina, nada fica rodando.

  • Os números nunca se partem: as casas que ficam deslizam enquanto rolam.
  • 200 valores novos com 5 ms de intervalo: depois sobram 0 animações e o texto final exato.
  • Seguro no React StrictMode. Em um app React Native em segundo plano, o movimento se acomoda no estado final.

Preparando o exemplo…

16 componentes, agrupados pelo que fazem

Números e texto, conteúdo que muda de tamanho, seleção, listas, gestos, sobreposições e progresso. Cada um tem uma bancada ao vivo com as props ao lado.

Todos os componentes

O mesmo import na web e no React Native

O Metro escolhe a implementação nativa e os bundlers web, a do DOM. Cada plataforma reproduz o movimento do jeito que faz melhor.

App.jsx
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';

export function Score({ points, players }) {
  return (
    <>
      <MotionNumber value={points} />
      <MotionList items={players} renderItem={(player) => player.name} />
    </>
  );
}
ParteWebReact Native
Transforms e opacidadeWeb Animations API, molas amostradas analiticamenteAnimated com o driver nativo
Largura e alturaWeb Animations APIAnimated com o driver JS, porque é layout
Texto em streamingCaracteres adicionados com fade; poucos renders do React por segundoUm Text de verdade, exibido sem fade
Sheets e zoomUm dialog nativo na camada superiorUm Modal transparente; o botão voltar fecha

Comece em dois minutos

Instale, importe um componente e passe um valor.

npm install @kkwaenggwari/animated-chorus

Pesquisar

Digite para pesquisar na documentação.