componentes / exibição
Accordion
Seções empilhadas em forma de árvore de prompt de terminal, com uma animação suave de altura.
accordion-default.tsx
import { Accordion, AccordionItem, AccordionPanel, AccordionTrigger } from "@/components/ui/accordion";
const faqs = [
{ value: "install", question: "How do I install a component?", answer: "Run the shadcn CLI with the component URL. The file lands in your project and you own the code." },
{ value: "theme", question: "Can I change the colors?", answer: "Yes. Every color is a CSS variable in your globals.css, so you can swap the palette in one place." },
{ value: "motion", question: "Does it respect reduced motion?", answer: "Yes. Transitions and animations are turned off for people who prefer reduced motion." },
];
export default function AccordionDefault() {
return (
<Accordion className="w-full max-w-md" defaultValue={["install"]}>
{faqs.map((f) => (
<AccordionItem key={f.value} value={f.value}>
<AccordionTrigger>{f.question}</AccordionTrigger>
<AccordionPanel>{f.answer}</AccordionPanel>
</AccordionItem>
))}
</Accordion>
);
}Instalação
$ npx shadcn@latest add https://cd-ui.vercel.app/r/accordion.jsonprimeira vez? configure o components.json e o tema antes: veja instalação.
Uso
import { Accordion, AccordionItem, AccordionPanel, AccordionTrigger } from "@/components/ui/accordion"
<Accordion defaultValue={["a"]}>
<AccordionItem value="a">
<AccordionTrigger>Question</AccordionTrigger>
<AccordionPanel>Answer</AccordionPanel>
</AccordionItem>
</Accordion>Exemplos
Indicador de chevron
accordion-chevron.tsx
import { Accordion, AccordionItem, AccordionPanel, AccordionTrigger } from "@/components/ui/accordion";
export default function AccordionChevron() {
return (
<Accordion className="w-full max-w-md" defaultValue={["install"]} indicator="chevron">
<AccordionItem value="install">
<AccordionTrigger>How do I install a component?</AccordionTrigger>
<AccordionPanel>Run the shadcn CLI with the component URL. The file lands in your project and you own the code.</AccordionPanel>
</AccordionItem>
<AccordionItem value="theme">
<AccordionTrigger>Can I change the colors?</AccordionTrigger>
<AccordionPanel>Yes. Every color is a CSS variable in your globals.css, so you can swap the palette in one place.</AccordionPanel>
</AccordionItem>
</Accordion>
);
}API
Accordion
Base UI · Accordion.RootRaiz. Por padrão só um item fica aberto; passe multiple para permitir vários.
| prop | tipo | padrão |
|---|---|---|
value · defaultValueItens abertos, como array de valores dos itens. Controlado ou inicial. | string[] | - |
multiplePermite mais de um item aberto ao mesmo tempo. | boolean | false |
indicator
| "prompt" | "chevron" | "prompt" |
onValueChangeChamado ao abrir ou fechar um item. | (value: string[]) => void | - |
classNameClasses extras, mescladas com | string | - |
AccordionItem
Base UI · Accordion.ItemUma seção, identificada pelo value.
| prop | tipo | padrão |
|---|---|---|
valueIdentificador do item. | string | - |
classNameClasses extras, mescladas com | string | - |
AccordionTrigger
Base UI · Accordion.TriggerBotão do cabeçalho. O marcador ▸ gira 90° em 120ms (ou o chevron 180° em 160ms) enquanto o painel abre.
| prop | tipo | padrão |
|---|---|---|
classNameClasses extras, mescladas com | string | - |
AccordionPanel
Base UI · Accordion.PanelConteúdo. Anima altura e opacidade em 160ms e sai da página enquanto fechado.
| prop | tipo | padrão |
|---|---|---|
classNameClasses extras, mescladas com | string | - |
Teclado
| tecla | ação |
|---|---|
| EnterSpace | Abre ou fecha o item em foco. |
| ↑↓ | Move o foco entre os cabeçalhos. |
| HomeEnd | Foca o primeiro ou o último cabeçalho. |
Acessibilidade
- Cada gatilho fica dentro de um título e é ligado ao painel com
aria-expandedearia-controls.