componentes / stack
Stack
Layout flex em uma direção com gap, alinhamento e divisor opcional.
Como usar
Alinha os filhos na vertical (padrão) ou na horizontal. `direction` pode mudar por breakpoint: `{ base: 'vertical', md: 'horizontal' }`. `divider` é renderizado entre cada par de filhos, nunca antes do primeiro nem depois do último.
preview
1
2
3
Stack.tsx
import { Divider, Stack } from "vaiperui"; <Stack direction={{ base: "vertical", md: "horizontal" }} gap={3} align="center" divider={<Divider orientation="vertical" />}> <span>One</span> <span>Two</span></Stack>Direção
preview
1
2
3
1
2
3
direcao.tsx
<Stack direction="vertical" /><Stack direction="horizontal" />Gap
preview
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
gap.tsx
<Stack direction="horizontal" gap={1} /><Stack direction="horizontal" gap={8} />Alinhamento e justify
preview
1
2
1
2
3
alinhamento.tsx
<Stack direction="horizontal" align="end" /><Stack direction="horizontal" justify="between" />Divider
preview
1
2
3
divider.tsx
<Stack divider={<Divider />}>...</Stack>Props
| Prop | Valores | Padrão | Descrição |
|---|---|---|---|
| direction | vertical | horizontal | { base, sm, md, lg, xl } | vertical | Eixo principal, opcionalmente por breakpoint |
| gap | 0 | 1 | 2 | 3 | 4 | 6 | 8 | 4 | Espaço entre os filhos (passos de 4px) |
| align | start | center | end | stretch | baseline | nenhum | Alinhamento no eixo cruzado (`align-items`) |
| justify | start | center | end | between | around | evenly | nenhum | Distribuição no eixo principal (`justify-content`) |
| wrap | boolean | false | Deixa os filhos quebrarem de linha |
| divider | ReactNode | nenhum | Elemento renderizado entre os filhos |
| as | ElementType | "div" | Elemento ou componente a renderizar (`section`, `ul`, `main`...) |
Acessibilidade
- Renderiza um `<div>` (flex) simples por padrão, sem papel; `as` troca o elemento (por exemplo `ul`, `nav`, `section`).
- Não adiciona foco, teclado nem comportamento ARIA; props extras chegam ao elemento.
- `direction` responsivo só muda a aparência; a ordem de leitura e de Tab continua sendo a do DOM.
- A prop `divider` é inserida entre os filhos como foi passada, então um `Divider` ali é anunciado como separador, a menos que seja `decorative`.
Tenha em mente
- Com `as="ul"`, um divider entre os itens vira filho do `ul` que não é `li`, o que é HTML inválido.