Display

Collapsible

Show and hide one region. Unstyled: the trigger and panel look like whatever you render.

packages/design-system/components/ui/collapsible.tsx

Examples

A ghost button opening a list. Click it

Anatomy

  1. 01Root
  2. 02Trigger
  3. 03Panel

Usage

import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@repo/design-system/components/ui/collapsible";

<Collapsible open={open} onOpenChange={setOpen}>
  <CollapsibleTrigger render={<Button variant="ghost" size="sm" />}>Show details</CollapsibleTrigger>
  <CollapsibleContent>...</CollapsibleContent>
</Collapsible>

Props

PropTypeDefaultDescription
open / defaultOpenbooleannoneControlled or uncontrolled open state, on the root.
onOpenChange(open: boolean, details) => voidnoneCalled when the popup opens or closes.
CollapsibleTrigger renderReactElement | (props, state) => ReactElementnoneBase UI's replacement for asChild: render the part as another element, such as a Button or a Link.
classNamestringnoneMerged last with cn(). Use it for layout (width, margin), not to restyle the component.

Guidance

Do

  • Say in the trigger what opening it will show.

Don't

  • Use several in a row for FAQs. That is an accordion.