componentes / stepper
Stepper
Mostra o progresso em um fluxo sequencial, como checkout ou onboarding.
Como usar
Coloque `Step`s dentro de um `Stepper` e defina `current` (base zero): as etapas anteriores ficam concluídas (check), a atual fica destacada com `aria-current="step"` e as seguintes ficam pendentes. Ele só exibe o progresso; sua tela cuida de avançar e validar. Passe `onStepClick` para transformar etapas concluídas em botões que voltam. Use `orientation="vertical"` com `description` em cada etapa.
preview
- Endereço
- Pagamento
Stepper.tsx
import { Step, Stepper } from "vaiperui"; <Stepper current={1} aria-label="Etapas do cadastro"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper>Cores
preview
- ContaCompleted
- Endereço
- Pagamento
- ContaCompleted
- Endereço
- Pagamento
- ContaCompleted
- Endereço
- Pagamento
- ContaCompleted
- Endereço
- Pagamento
cores.tsx
<Stepper current={1} variantColor="primary"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper> <Stepper current={1} variantColor="success"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper> <Stepper current={1} variantColor="warning"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper> <Stepper current={1} variantColor="danger"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper>Tamanhos
preview
- ContaCompleted
- Endereço
- Pagamento
- ContaCompleted
- Endereço
- Pagamento
- ContaCompleted
- Endereço
- Pagamento
tamanhos.tsx
<Stepper current={1} size="sm"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper> <Stepper current={1} size="md"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper> <Stepper current={1} size="lg"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper>Cor personalizada
preview
- ContaCompleted
- Endereço
- Pagamento
- ContaCompleted
- Endereço
- Pagamento
cor-personalizada.tsx
<Stepper current={1} customColor="#f97316"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper> <Stepper current={1} customColor="#8b5cf6"> <Step>Conta</Step> <Step>Endereço</Step> <Step>Pagamento</Step></Stepper>Vertical
preview
- ContaE-mail e senhaCompleted
- EndereçoOnde entregar
- PagamentoCartão ou boleto
vertical.tsx
<Stepper current={1} orientation="vertical"> <Step description="…">Conta</Step> …</Stepper>Props
| Prop | Valores | Padrão | Descrição |
|---|---|---|---|
| current | number | obrigatório | Índice (base zero) da etapa ativa |
| orientation | horizontal | vertical | horizontal | Disposição das etapas |
| onStepClick | (index: number) => void | nenhum | Transforma etapas concluídas em botões que chamam isto com o índice |
| completedLabel | string | Completed | Texto para leitores de tela adicionado às etapas concluídas |
| variantColor | primary | success | warning | danger | primary | Cor de destaque do estado ativo e do anel de foco |
| customColor | string | { light, dark } | nenhum | Qualquer cor CSS (ou um par por tema). Substitui o variantColor |
| size | sm | md | lg | md | Tamanho do controle e do texto |
| animation | none | smooth | fast | bounce | smooth | Transição entre estados |
| Step: children, description | ReactNode, ReactNode | nenhum | O rótulo da etapa e uma linha secundária opcional |
Acessibilidade
- Renderiza uma lista ordenada (`<ol>`) com um `<li>` por etapa, em ordem de leitura.
- O `<li>` da etapa atual tem `aria-current="step"`.
- Etapas concluídas incluem texto visualmente oculto vindo de `completedLabel` (padrão "Completed").
- O número, o ícone de check e as linhas de conexão são `aria-hidden`.
- Com `onStepClick`, só as etapas concluídas viram botões nativos; etapa atual e futuras são texto simples.
Teclado
| Tecla | Ação |
|---|---|
| Tab | Percorre as etapas concluídas quando `onStepClick` está definido. |
| Enter / Space | Ativa a etapa concluída focada. |
Tenha em mente
- Traduza `completedLabel`; o padrão está em inglês.
- É um indicador de progresso, não um widget de navegação: não adiciona `aria-label` à lista e não permite pular para etapas futuras.