Componentdata-display

Text Flip

Stable

Um espaço de texto que troca o item exibido pelo próximo, no lugar. Funciona melhor no fim de uma linha, onde a mudança de largura não empurra nada, e numa frase que faz sentido com qualquer um dos itens — o leitor de tela lê o item da vez, e a troca não é anunciada de propósito. `play` pausa o ciclo; sob movimento reduzido a troca vira um cross-fade.

Instalação

npx up-web-ds add text-flip

Preview

Basic

Primitives

In Heading

Um catálogo para primitives

Inline

Instale qualquer item com up-web-ds add button

Slower

Validando o catálogo e as políticas do design system

With Index

primitives

1 de 5

Pausable

Status do build: typecheck

Stopped

Parado no primeiro item

All states

Basic

Primitives

In Heading

Um catálogo para primitives

Inline

Instale qualquer item com up-web-ds add button

Slower

Validando o catálogo e as políticas do design system

With Index

primitives

1 de 5

Pausable

Status do build: typecheck

Stopped

Parado no primeiro item

Usage

@/components/text-flip
import { TextFlip } from '@/components/text-flip'
Text Flip
<TextFlip>
  <span>Primitives</span>
  <span>Recipes</span>
  <span>Components</span>
</TextFlip>

Props

Props de TextFlip
PropTypeDefaultDescription
children, obrigatóriaReact.ReactNode[]sem valor padrãoThe items to cycle through, one at a time.
asMotionElementmotion.pMotion element to render. Use `motion.span` inside a sentence.
classNamestringsem valor padrão
intervalnumber2Time in seconds between each flip.
onIndexChange((index: number) => void)sem valor padrãoCalled with the new index after each flip.
playbooleantrueWhether the items cycle.
transitionTransition{ duration: 0.3 }Motion transition configuration.
variantsVariantsenters from above and leaves downwards, with a blurMotion variants for the enter and exit animations. Ignored under reduced motion, where the swap is always a cross-fade.

prop obrigatória.

Metadata

Notas de acessibilidade

Verificado em tests/e2e/text-flip.spec.ts no Chromium desktop e mobile, em light e dark, com Axe sem violações WCAG 2.2 AA. Teclado: o item é texto, não entra na sequência de Tab. Leitor de tela: a troca não fica numa região live — anunciar a cada dois segundos afogaria o resto da página —, então o leitor lê o item da vez, e a frase em volta precisa fazer sentido com qualquer um; verificado por teste e em navegador que só o item atual está na árvore. `onIndexChange` dispara uma vez por troca (o upstream o chamava dentro de um updater de estado, que o React pode executar duas vezes) e um callback novo a cada render não reinicia o timer; com menos de dois itens o timer nem começa. Pausa (WCAG 2.2.2): `play` interrompe o ciclo, verificado em navegador, e no exemplo pausable o controle vem antes do texto. Touch verificado em 320px com emulação de toque: o título com a palavra que troca quebra dentro da própria caixa, e o controle de pausa atende ao piso de 24x24 e responde ao toque. Reduced motion verificado em navegador com prefers-reduced-motion: reduce — a troca continua, porque é conteúdo, mas nenhum quadro desloca ou desfoca o item: via useReducedMotion a troca vira um cross-fade e as variants do consumidor são ignoradas. O upstream deslizava e desfocava cada troca sem olhar a preferência.

Classificação

Layer
Component
Domínio
Application
Categoria
data-display
Status
Stable

Origem e distribuição

Fonte
ncdai registry / text-flip
Licença
MIT
Distribuição
Interna

Acessibilidade

  • Teclado: revisado
  • Leitor de tela: revisado
  • Touch: revisado
  • Reduced motion: revisado

Dependências

Pacotes
motion
Ícones
Nenhum
Construído sobre
Nenhum
Usado por
Nenhum ainda