Capítulo 73 de 108
Interactive panel that expands/collapses, built on Base UI's Collapsible primitive. Use for progressive disclosure of secondary content (details, settings, file trees) without a full accordion.
open/onOpenChange for controlled state.render={<Button .../>} to compose with an existing element instead of a default trigger.const [isOpen, setIsOpen] = React.useState(false)
<Collapsible open={isOpen} onOpenChange={setIsOpen} className="flex w-[350px] flex-col gap-2">
<div className="flex items-center justify-between gap-4 px-4">
<h4 className="text-sm font-semibold">Order #4189</h4>
<CollapsibleTrigger render={<Button variant="ghost" size="icon" className="size-8" />}>
<ChevronsUpDown />
<span className="sr-only">Toggle details</span>
</CollapsibleTrigger>
</div>
<CollapsibleContent className="flex flex-col gap-2">
<div className="rounded-md border px-4 py-2 text-sm">...</div>
</CollapsibleContent>
</Collapsible>
open/onOpenChange e trigger composto via render.<CollapsibleTrigger render={<Button variant="ghost" className="w-full" />}>
Product details
<ChevronDownIcon className="ml-auto group-data-panel-open/button:rotate-180" />
</CollapsibleTrigger>
data-panel-open do grupo.Collapsible
├── CollapsibleTrigger
└── CollapsibleContent
Collapsible (padrão File Tree), mas cuide da indentação (ml-5) em cada nível.@base-ui/react como dependência ao instalar manualmente.render prop é o padrão do Base UI para compor o trigger com qualquer componente (ex: Button).open/onOpenChange; use controlado só quando precisar sincronizar com outro elemento (ex: ícone maximize/minimize).CollapsibleContent pode usar grid-cols-subgrid para alinhar campos extras à grade do conteúdo visível.Collapsible compõe file trees/menus hierárquicos.dir prop para inverter layout.