Accordion
Títulos empilhados que revelam cada um um painel, com movimento de altura que você pode reverter no meio e painéis que continuam pesquisáveis enquanto fechados.
pnpm dlx shadcn@latest add https://hextaui.com/r/accordion.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/accordion.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Outline
Os itens compartilham uma única superfície com borda, com os cantos externos arredondados.
Separado
Cada item é o seu próprio card.
Ghost
Sem bordas. Os gatilhos ganham um preenchimento suave ao passar o mouse e quando abertos.
Múltiplo
Defina multiple para permitir que mais de um item fique aberto.
Desabilitado
Desative um único item com disabled em <AccordionItem />, ou o accordion inteiro na raiz.
Controlado
Passe value e onValueChange para manter os itens abertos no seu próprio estado.
Ícone personalizado
Passe qualquer elemento para icon. Estilize seu estado aberto com group-data-panel-open/accordion-trigger.
Ícones iniciais
Ícones antes do rótulo são dimensionados e alinhados para você. icon={null} remove o chevron.
Conteúdo longo
Títulos longos quebram de linha enquanto o ícone permanece na primeira linha. Os painéis fechados continuam pesquisáveis, então Cmd/Ctrl+F por “retention” abre este.
Aninhado
Um accordion interno mantém sua própria variant, estilos de foco e navegação por teclas de seta.
Da direita para a esquerda
O conteúdo, os ícones e o movimento de abertura seguem a direção de leitura.
| Tecla | Ação |
|---|---|
| EnterSpace | Abre ou fecha o item em foco. |
| ↓ | Move o foco para o próximo gatilho. |
| ↑ | Move o foco para o gatilho anterior. |
| Home | Move o foco para o primeiro gatilho. |
| End | Move o foco para o último gatilho. |
| Tab | Move o foco para dentro do painel aberto e depois para o próximo gatilho. |
Construído sobre o accordion do Base UI. Cada parte aceita as props da primitiva que envolve.
| Prop | Tipo | Padrão |
|---|---|---|
variant | "default" | "outline" | "separated" | "ghost" | "default" |
multiplePermite que mais de um item fique aberto. | boolean | false |
value | Value[] | – |
defaultValue | Value[] | – |
onValueChange | (value: Value[], details) => void | – |
disabled | boolean | false |
hiddenUntilFoundMantém os painéis fechados localizáveis pela busca da página do navegador. | boolean | true |
keepMountedIgnorado enquanto hiddenUntilFound está ativo. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="accordion" | Selecione a raiz no CSS. |
data-variant | A variante atual. |
data-disabled | Presente quando o accordion está desativado. |
| Prop | Tipo | Padrão |
|---|---|---|
valueGerado automaticamente quando omitido. | Value | – |
disabled | boolean | false |
onOpenChange | (open: boolean, details) => void | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descrição |
|---|---|
data-slot="accordion-item" | Selecione itens no CSS. |
data-open | Presente quando o item está aberto. |
data-disabled | Presente quando o item está desabilitado. |
data-index | A posição do item, começando em 0. |
| Prop | Tipo | Padrão |
|---|---|---|
iconnull remove o ícone. | ReactNode | null | <IconChevronDown /> |
render | ReactElement | (props, state) => ReactElement | <button> |
| Atributo | Descrição |
|---|---|
data-slot="accordion-trigger" | Selecione os gatilhos no CSS. |
data-panel-open | Presente quando o painel está aberto. Estilize o ícone com group-data-panel-open/accordion-trigger. |
data-disabled | Presente quando o item está desabilitado. |
| Prop | Tipo | Padrão |
|---|---|---|
classNameAplicado ao wrapper interno, para que o padding nunca entre em conflito com a animação de altura. | string | – |
keepMounted | boolean | false |
hiddenUntilFound | boolean | – |
| Atributo | Descrição |
|---|---|
data-slot="accordion-content" | Alvo dos painéis no CSS. |
data-open | Presente quando o painel está aberto. |
data-starting-style | Presente enquanto o painel anima a entrada. |
data-ending-style | Presente enquanto o painel anima a saída. |
data-settled | Presente quando o painel está totalmente aberto. Nesse momento ele deixa de cortar o conteúdo, então os anéis de foco dentro de um accordion aninhado aparecem por inteiro. |
--accordion-panel-height | A altura medida do painel, usada para a animação de altura. |
- Aspect ratioUma caixa que mantém sua forma antes de a mídia carregar, exibe um shimmer durante o carregamento, faz a mídia aparecer com fade e usa um fallback quando ela falha.
- CarouselSlides nativos com scroll-snap, com inércia no toque, arrastar com o mouse, setas do teclado, pontos, miniaturas e um autoplay que pausa quando deve.
- CollapsibleUm painel que aparece e desaparece com um movimento de altura que você pode reverter no meio, sem fazer o layout pular.
- ResizablePainéis que você pode separar arrastando, com um divisor discreto que desperta no hover, tamanhos que deslizam ao redefinir ou recolher e layouts que persistem.
- Scroll areaRolagem nativa com uma barra de rolagem mínima, bordas que esmaecem apenas onde há mais a ver e um peek opcional que corta o último item ao meio.
- SeparatorUma linha fina que divide o conteúdo na horizontal ou na vertical, com rótulo opcional e um modo decorativo para linhas puramente visuais.