Collapsible
Atom
Collapsible revela ou oculta conteúdo secundário. O conteúdo essencial para a decisão deve permanecer visível.
Use para detalhes progressivos, filtros avançados, listas de evidências ou explicações opcionais. Em operação de crise, não esconda status crítico, consequência ou ação necessária dentro de um Collapsible fechado.
Exemplos copiáveis
React
React
import * as React from "react"
type PulsoCollapsibleProps = {
title: string
summary?: string
children: React.ReactNode
defaultOpen?: boolean
}
export function PulsoCollapsible({ title, summary, children, defaultOpen = false }: PulsoCollapsibleProps) {
const [open, setOpen] = React.useState(defaultOpen)
const panelId = React.useId()
return (
<section className="rounded-[var(--radius-md)] border border-[var(--border)] bg-[var(--card)]">
<button
type="button"
aria-expanded={open}
aria-controls={panelId}
onClick={() => setOpen((value) => !value)}
className="flex w-full items-center justify-between gap-4 px-4 py-3 text-left focus-visible:outline focus-visible:outline-[var(--ring-width)] focus-visible:outline-offset-2 focus-visible:outline-[var(--ring)]"
>
<span>
<span className="block text-sm font-semibold text-[var(--fg-strong)]">{title}</span>
{summary ? <span className="mt-0.5 block text-xs text-[var(--fg-muted)]">{summary}</span> : null}
</span>
<span aria-hidden="true" className="font-mono text-[var(--fg-subtle)]">{open ? "−" : "+"}</span>
</button>
{open ? <div id={panelId} className="border-t border-[var(--border)] px-4 py-3 text-sm text-[var(--fg-muted)]">{children}</div> : null}
</section>
)
}<PulsoCollapsible title="Evidências verificadas" summary="12 fontes · última atualização há 4 min">
Links, trechos e origem auditável da recomendação.
</PulsoCollapsible>Quando usar
- Detalhes opcionais.
- Filtros avançados.
- Evidências secundárias.
- Explicações longas que não precisam estar abertas por padrão.
Quando não usar
- Para informação crítica ou ação obrigatória.
- Para navegação principal.
- Para resolver excesso de conteúdo que deveria ser reorganizado.
- Para esconder erro ou permissão negada.
Acessibilidade
- Trigger precisa ser botão ou
summarynativo. - Use
aria-expandedearia-controlsquando customizado. - Estado aberto/fechado deve ser visível.
- Conteúdo essencial não deve depender de expansão.
Regras
- Título sempre visível.
- Resumo indica o valor do conteúdo oculto.
- Não esconda risco crítico fechado.
- Motion de abertura deve ser opcional e respeitar redução de movimento.
- Um Collapsible fechado não deve bloquear entendimento da página.
Last updated on