Collapsible
Radix collapsible region with an animated trigger and content for show and hide sections.
pnpm dlx @glinui/cli@latest add collapsibleInstallation
pnpm dlx @glinui/cli@latest add collapsiblePrefer the package?
Usage
Variants
Every vocabulary variant on the default tone. Omit variant to follow the ambient design style.
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@glinui/ui"
export function CollapsibleVariantsDemo() { return ( <div className="grid gap-4 md:grid-cols-2"> <Collapsible variant="glinr" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">glinr</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> <Collapsible variant="solid" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">solid</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> <Collapsible variant="plain" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">plain</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> <Collapsible variant="soft" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">soft</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> <Collapsible variant="outline" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">outline</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> <Collapsible variant="ghost" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">ghost</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> <Collapsible variant="gradient" defaultOpen className="p-4"><CollapsibleTrigger className="text-sm font-medium">gradient</CollapsibleTrigger><CollapsibleContent className="mt-2 text-sm">Content</CollapsibleContent></Collapsible> </div> )}Show more
Reveal the rest of a list.
5 repositories starred
import { useState } from "react"import { Button, Collapsible, CollapsibleContent, CollapsibleTrigger } from "@glinui/ui"
export function Demo() { const [open, setOpen] = useState(false) const repos = ["glinui/ui", "glinui/docs", "glinui/tokens", "glinui/cli", "glinui/motion"] return ( <Collapsible open={open} onOpenChange={setOpen} variant="plain" className="w-full max-w-sm"> <div className="flex items-center justify-between gap-3 px-4 py-3"> <h4 className="text-sm font-semibold">{repos.length} repositories starred</h4> <CollapsibleTrigger asChild> <Button variant="outline" size="sm">{open ? "Show less" : "Show all"}</Button> </CollapsibleTrigger> </div> <div className="mx-4 mb-3 rounded-lg border border-[var(--line-soft)] px-3 py-2 font-mono text-sm">{repos[0]}</div> <CollapsibleContent className="flex flex-col gap-2 px-4 pb-4"> {repos.slice(1).map((repo) => ( <div key={repo} className="rounded-lg border border-[var(--line-soft)] px-3 py-2 font-mono text-sm">{repo}</div> ))} </CollapsibleContent> </Collapsible> )}Accessibility
- Trigger is a native button wired to the content with aria-controls.
- Hidden content is removed from the accessibility tree.
- Visible violet focus ring on the trigger.
Keyboard Interactions
| Key | Action |
|---|---|
| Enter | Toggle the content. |
| Space | Toggle the content. |
ARIA Attributes
- `aria-expanded` on the trigger
- `aria-controls` links trigger to content
- `data-state` open or closed
Reduced Motion
Content fades and slides 4px on open. With prefers-reduced-motion the animation is removed and content appears instantly.
Affected properties
opacitytransformAPI Reference
Collapsible
| Prop | Type | Default | Description |
|---|---|---|---|
variant | "glinr" | "solid" | "plain" | "soft" | "outline" | "ghost" | "gradient" | "glass" | ambient (glinr) | Surface variant. Omit to follow the ambient design style (glinr by default, plain for minimal, glass for glass). |
tone | "neutral" | "accent" | "success" | "warning" | "danger" | "info" | neutral | Colour tone for the vocabulary variants. |
open | boolean | - | Controlled open state. |
defaultOpen | boolean | false | Initial open state when uncontrolled. |
onOpenChange | (open: boolean) => void | - | Called when the open state changes. |
disabled | boolean | false | Prevents toggling. |
CollapsibleTrigger / CollapsibleContent
| Prop | Type | Default | Description |
|---|---|---|---|
asChild | boolean | false | Merge props onto the child element, for example a Button. |
forceMount | boolean | - | Content only: keep mounted for custom animation control. |
Source
Import directly from the package or browse the source on GitHub. Click any file to view it.
Import
import { Collapsible } from "@glinui/ui"Source Files
Dependencies
@glinui/ui@radix-ui/react-collapsibleclass-variance-authorityGenerated API Snapshot
Beta
Generated API Snapshot
BetaAuto-extracted from TypeScript source in packages/ui/src/components/collapsible.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.
Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata
Primary Props Type
CollapsibleProps
CollapsibleContentProps
No explicit fields extracted for this props type.
CollapsibleProps
| Prop | Type | Required | Default | Description |
|---|---|---|---|---|
tone | SurfaceTone | No | - | - |
variant | SurfaceVariant | "default" | "raised" | "frosted" | No | - | Surface variant. Omit for the ambient design style (glinr by default, plain under `minimal`). Vocabulary: glinr, solid, plain, soft, outline, ghost, gradient, glass. `ghost` is chromeless like the shadcn primitive. |
CollapsibleTriggerProps
No explicit fields extracted for this props type.