Referência da API

Todos os exports de @kkwaenggwari/animated-chorus, com props, tipos e valores padrão. Os mesmos nomes funcionam na web e no React Native.

17 APIs

Números e texto

MotionNumber

Um número cujas casas rolam como rodas.

PropTipoPadrãoDescrição
valuenumber | bigint | string—obrigatóriaO número, ou um texto numérico já formatado por quem chama.
mode'replace' | 'roll''replace'replace move cada casa alterada um passo; roll passa pelos dígitos intermediários.
direction'auto' | 'digit' | 'up' | 'down''auto'auto segue a mudança de grandeza, para o vai-um rolar em um sentido; digit compara cada casa por conta própria.
staggernumber45Milissegundos entre as casas alteradas, das unidades para fora. A onda inteira tem limite.
format(value) => string | Intl.NumberFormatOptionsUma função que retorna o texto a mostrar, ou opções de Intl.NumberFormat (com intl).
intlbooleanfalseUsa o Intl.NumberFormat embutido. Desligado por padrão para que nenhum ambiente precise de Intl.
localestring | string[]Locale para intl.
prefixstringTexto antes do número.
suffixstringTexto depois do número.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(value) => voidRoda com o valor quando as casas se acomodam.
Página do componente e bancada

MotionText

Texto que anima quando muda: texto numérico rola por casa, os demais trocam.

PropTipoPadrãoDescrição
childrenReactNodeO texto a mostrar.
aselement'span'O elemento a renderizar.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(text) => voidRoda quando o movimento se acomoda.
Página do componente e bancada

MotionStream

Texto em streaming exibido em ritmo constante, que alcança as rajadas.

PropTipoPadrãoDescrição
textstring—obrigatóriaO texto até agora. Texto que cresce aparece em ritmo constante; uma reescrita continua do começo em comum.
speednumber90Velocidade base de exibição, em caracteres por segundo.
catchUpnumber900Um acúmulo é exibido em cerca desse número de milissegundos, acelerando.
initialbooleanfalseExibe aos poucos também o texto presente na montagem (senão ele aparece na hora).
effect'fade' | 'none''fade'fade faz os caracteres novos aparecerem com fade; none os mostra direto.
children(visible: string) => ReactNodeUma função que recebe o texto no ritmo, por exemplo para renderizar Markdown.
aselement'span'O elemento a renderizar.
onMotionComplete(text) => voidRoda sempre que a exibição alcança text.
Página do componente e bancada

Conteúdo e tamanho

MotionSwap

Conteúdo que faz crossfade enquanto o elemento muda de tamanho.

PropTipoPadrãoDescrição
valueunknownIdentidade do conteúdo; um valor novo dispara a troca. Filhos de texto simples são a própria identidade.
childrenReactNodeO conteúdo.
aselement'span'O elemento a renderizar.
inlinebooleanas === 'span'true ajusta o tamanho ao conteúdo (rótulos, ícones); false ocupa a largura do pai e anima a altura.
align'start' | 'center' | 'end''center'Onde o conteúdo fica enquanto o tamanho muda.
effect'fade' | 'up' | 'down' | 'scale''fade'Como o conteúdo entra e sai: up sobe, down desce, scale cresce.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(value) => voidRoda quando o movimento se acomoda.
Página do componente e bancada

MotionHeight

Anima a altura conforme o conteúdo: recolher, expandir e mudanças de conteúdo.

PropTipoPadrãoDescrição
openbooleantruefalse recolhe até altura zero; o conteúdo continua montado, mas oculto e inerte.
childrenReactNodeO conteúdo.
aselement'div'O elemento a renderizar.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onMotionComplete(open) => voidRoda com open quando a altura se acomoda.
Página do componente e bancada

MotionPresence

Mantém o conteúdo montado enquanto ele entra e sai animado.

PropTipoPadrãoDescrição
presentboolean—obrigatóriaMostra ou oculta o conteúdo. Mude isto em vez de desmontar.
enterPose{ opacity: 1, translateY: 0 }A pose em repouso.
exitPose{ opacity: 0, translateY: -12 }A pose com que o conteúdo sai e a partir da qual entra.
aselement'div'O elemento a renderizar.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
onExitComplete() => voidRoda depois que o conteúdo saiu e foi removido.
Página do componente e bancada

Seleção e paginação

MotionHighlight

Itens a partir de dados com um destaque que viaja até o item selecionado.

PropTipoPadrãoDescrição
itemsreadonly T[]—obrigatóriaSeu array de dados.
valuekey | null—obrigatóriaKey do item destacado; null esconde o destaque.
onValueChange(key, item) => voidRoda com a key e o item quando um item é pressionado.
getKey(item) => string | numberitem.idRetorna uma key única e estável para um item. Por padrão item.id, ou o próprio item para strings e números.
renderItem(item, { selected, index }) => ReactNodeitem.labelDesenha um item; recebe se ele está selecionado.
hoverbooleanfalseSegue o ponteiro sobre os itens e volta para value ao sair (web).
itemAselement'button'O elemento de cada item.
itemClassNamestringClasse do elemento de cada item; itemStyle define o estilo inline.
highlightClassNamestringClasse do destaque; highlightStyle define o estilo inline.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

MotionPager

Páginas deslizáveis a partir de dados.

PropTipoPadrãoDescrição
itemsreadonly T[]—obrigatóriaSeu array de dados.
indexnumberA página exibida. Omita para o paginador cuidar da própria.
defaultIndexnumber0Página inicial quando index não é controlado.
onIndexChange(index, item) => voidRoda com o índice e o item assim que um deslize, uma tecla ou a roda do mouse se acomoda.
getKey(item) => string | numberitem.idRetorna uma key única e estável para um item. Por padrão item.id, ou o próprio item para strings e números.
renderItem(item, { index, active }) => ReactNodeitem.labelDesenha uma página; recebe o índice e se ela está ativa.
gapnumber0Espaço entre as páginas, em pixels.
itemClassNamestringClasse do elemento de cada item; itemStyle define o estilo inline.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

Listas

MotionList

Uma lista com keys, a partir de dados, que anima só o que mudou.

PropTipoPadrãoDescrição
itemsreadonly T[]—obrigatóriaSeu array de dados.
getKey(item) => string | numberitem.idRetorna uma key única e estável para um item. Por padrão item.id, ou o próprio item para strings e números.
renderItem(item, index) => ReactNodeitem.labelDesenha um item.
aselement'div'O elemento a renderizar.
itemAselement'li' | 'div'O elemento de cada item.
itemClassNamestringClasse do elemento de cada item; itemStyle define o estilo inline.
effect'rise' | 'fade' | 'scale' | 'slide''rise'Como os itens entram e saem.
distancenumber16Percurso de rise e slide, em pixels.
staggernumber40Milissegundos entre os itens que entram.
order'forward' | 'reverse''forward'Direção do escalonamento.
presentbooleantruefalse anima a saída de todos os itens mantendo o layout; true os traz de volta.
initialbooleantrueReproduz a entrada quando a lista é montada.
playKeystring | numberMudá-lo repete a entrada.
transitionTransitionspringTransição dos itens que entram e saem.
layoutTransitionTransitionspringTransição dos itens que deslizam até novas posições.
Página do componente e bancada

MotionReorder

Arraste para reordenar uma lista ou grade, com movimento por teclado.

PropTipoPadrãoDescrição
itemsreadonly T[]Os itens, quando você controla a ordem.
defaultItemsreadonly T[][]Itens iniciais, quando o componente guarda a ordem.
onItemsChange(items, { reason, key }) => voidRoda com a nova ordem e se ela veio de um arraste, de soltar ou do teclado.
getKey(item) => string | numberitemRetorna uma key única para um item. Por padrão, o próprio item.
renderItem(item, { index, dragging }) => ReactNodeitem.labelDesenha um item; recebe o índice e se ele está sendo arrastado.
reorder'live' | 'drop''live'live move os outros itens durante o arraste; drop espera você soltar.
layout'list' | 'grid''grid'list ou grid.
columnsnumber3Colunas de uma grade.
gapnumber12Espaço entre os itens, em pixels.
disabledbooleanfalseDesliga o arraste.
durationnumber260Milissegundos para os itens que abrem espaço.
itemClassNamestringClasse do elemento de cada item; itemStyle define o estilo inline.
Página do componente e bancada

Gestos

MotionSwipe

Uma linha que revela ações com um deslize horizontal e pode ser descartada deslizando.

PropTipoPadrãoDescrição
childrenReactNodeO conteúdo da linha.
startActionsReactNodeAparecem no começo da linha quando ela é arrastada para o fim.
endActionsReactNodeAparecem no fim da linha quando ela é arrastada para o começo.
dismiss'start' | 'end' | 'both'Lados em que um deslize longo ou um arremesso remove a linha.
onDismiss(side) => voidRoda depois que a linha saiu e foi recolhida; remova o item dos seus dados aqui.
onOpenChange(side | null) => voidRoda com o lado aberto, ou null quando a linha fecha.
disabledbooleanfalseDesliga o deslize.
contentClassNamestringClasse do conteúdo da linha; contentStyle define o estilo inline.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

MotionHold

Pressione e segure para confirmar; soltar antes volta atrás.

PropTipoPadrãoDescrição
childrenReactNodeO rótulo do botão.
onConfirm() => voidRoda uma vez quando o tempo de segurar se completa.
durationnumber1200Milissegundos que é preciso segurar.
disabledbooleanfalseDesativa o botão.
fillClassNamestringClasse do preenchimento que cresce; fillStyle define o estilo inline.
Página do componente e bancada

Sobreposições

MotionSheet

Um bottom sheet, top sheet ou gaveta lateral com pontos de parada.

PropTipoPadrãoDescrição
openbooleanfalseSe o sheet está visível.
onOpenChange(open) => voidRoda com false quando o sheet é fechado por arraste, toque ou Escape.
detents(number | 'content')[]['content']Tamanhos de repouso: uma fração da tela, pixels ou 'content'.
detentnumberÍndice controlado do ponto de parada.
defaultDetentnumber0Índice do ponto de parada usado ao abrir sem detent.
onDetentChange(index) => voidRoda com o índice do ponto em que o sheet se acomoda.
side'bottom' | 'top' | 'start' | 'end''bottom'A borda de onde o sheet vem.
modalbooleantrueAdiciona um fundo, mantém o foco dentro e deixa a página inerte.
dismissiblebooleantrueArrastar além do menor ponto de parada, o fundo e Escape o fecham.
backdropClassNamestringClasse do fundo; backdropStyle define o estilo inline.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

MotionZoom

Uma imagem que amplia de onde está até preencher a tela.

PropTipoPadrãoDescrição
srcstringA imagem exibida no lugar.
zoomSrcstringUma imagem maior exibida depois de carregar; mantenha a mesma proporção.
marginnumber24Espaço mantido em volta da imagem ampliada, em pixels.
disabledbooleanfalseDesliga o zoom.
onZoomChange(zoomed) => voidRoda com true ao ampliar e false ao fechar.
backdropStyleCSSPropertiesEstilo inline do fundo.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

Progresso

ProgressBar

Uma linha de progresso controlada, com estado indeterminado.

PropTipoPadrãoDescrição
valuenumber | nullProgresso de 0 a max; null é indeterminado.
maxnumber100O valor que significa concluído.
colorstring'currentColor'Cor do preenchimento.
trackColorstring'#e7ece9'Cor da trilha.
thicknessnumber8Espessura da linha, em pixels.
direction'ltr' | 'rtl''ltr'Preencher pela esquerda (ltr) ou pela direita (rtl).
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

ProgressRing

Um anel de progresso controlado, com estado indeterminado.

PropTipoPadrãoDescrição
valuenumber | nullProgresso de 0 a max; null é indeterminado.
maxnumber100O valor que significa concluído.
sizenumber96Diâmetro, em pixels.
thicknessnumber8Espessura do anel, em pixels.
colorstring'currentColor'Cor do arco.
trackColorstring'#e7ece9'Cor da trilha.
childrenReactNodeUm rótulo exibido no centro.
transitionTransitionspringUma curva de tempo { duration, easing } ou uma mola { tempo: 'spring', spring }. As molas mantêm o embalo quando interrompidas.
Página do componente e bancada

Transições

motionTokens

Valores prontos para qualquer prop transition.

PropTipoPadrãoDescrição
duration{ instant, fast, normal, slow }0 · 140 · 280 · 520Durações em milissegundos.
easing{ ease, easeOut, expoOut, backOut }TransitionTransições de tempo com duração e uma curva nomeada.
spring{ quick, basic, gentle, bouncy }TransitionTransições de mola, das rápidas e firmes às suaves e saltitantes.
Transições
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} />
    </>
  );
}

Pesquisar

Digite para pesquisar na documentação.