Collapsible
Componente para mostrar e ocultar conteúdo de forma interativa, com controle total sobre o trigger e o conteúdo.
Padrão de implementação
Snippets para o uso controlado e não-controlado do Collapsible.
Collapsible controlado
"use client"
import { useState } from "react"
import { Collapsible, CollapsibleTrigger, CollapsibleContent } from "@/components/ui/collapsible"
import { Button } from "@/components/ui/button"
export function MeuCollapsible() {
const [open, setOpen] = useState(false)
return (
<Collapsible open={open} onOpenChange={setOpen}>
<div className="flex items-center justify-between">
<h4 className="text-sm font-medium">Detalhes adicionais</h4>
<CollapsibleTrigger asChild>
<Button variant="ghost" size="icon-sm">
<ChevronsUpDownIcon />
</Button>
</CollapsibleTrigger>
</div>
<CollapsibleContent>
<p className="text-sm text-muted-foreground mt-2">
Conteúdo expandido que fica oculto por padrão.
</p>
</CollapsibleContent>
</Collapsible>
)
}Collapsible não-controlado (defaultOpen)
<Collapsible defaultOpen>
<CollapsibleTrigger>Ver mais</CollapsibleTrigger>
<CollapsibleContent>
Conteúdo adicional...
</CollapsibleContent>
</Collapsible>Props e uso
API dos sub-componentes do Collapsible.
Props principais
open
boolean
Estado controlado de abertura.
defaultOpen
boolean
Estado inicial não-controlado.
onOpenChange
(open: boolean) => void
Callback chamado ao abrir/fechar.
disabled
boolean
Desabilita a abertura/fechamento.
CollapsibleTrigger asChild
boolean
Mescla o trigger com o filho. Use para ter um Button ou elemento customizado como trigger.
Acessibilidade
O CollapsibleTrigger gerencia automaticamente os atributos aria-expanded e aria-controls.
Use asChild no trigger para que o elemento filho herde os atributos de acessibilidade.
O conteúdo colapsado é removido visualmente mas permanece no DOM com hidden quando fechado.
MN Design System · Primary #5FC318 · Brand Green #AFF000 · Font: Inter