---import { ChevronsUpDownIcon } from '@lucide/astro';
import { Button } from '@bejamas/ui/components/button';import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@bejamas/ui/components/collapsible';---
<Collapsible class="w-[350px] flex flex-col gap-2"> <div class="flex items-center justify-between gap-4 px-4"> <span class="text-sm font-semibold">@thomkrupa starred 3 repositories</span> <CollapsibleTrigger asChild> <Button variant="ghost" size="icon" class="size-8"> <ChevronsUpDownIcon class="size-4" /> <span class="sr-only">Toggle</span> </Button> </CollapsibleTrigger> </div> <div class="rounded-md border px-4 py-2 font-mono text-sm">@data-slot/collapsible</div> <CollapsibleContent class="flex flex-col gap-2"> <div class="rounded-md border px-4 py-2 font-mono text-sm">@bejamas/ui</div> <div class="rounded-md border px-4 py-2 font-mono text-sm">@astrojs/astro</div> </CollapsibleContent></Collapsible>Installation
Section titled “Installation”bunx bejamas add collapsiblenpx bejamas add collapsiblepnpm dlx bejamas add collapsibleyarn dlx bejamas add collapsible---import { Collapsible, CollapsibleTrigger, CollapsibleContent } from '@bejamas/ui/components/collapsible';import { Button } from '@bejamas/ui/components/button';---
<Collapsible> <CollapsibleTrigger> <Button variant="ghost">Toggle</Button> </CollapsibleTrigger> <CollapsibleContent> Hidden content here </CollapsibleContent></Collapsible>Examples
Section titled “Examples”Default open
Section titled “Default open”---import { ChevronsUpDownIcon } from '@lucide/astro';
import { Button } from '@bejamas/ui/components/button';import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@bejamas/ui/components/collapsible';---
<Collapsible open class="w-[350px] flex flex-col gap-2"> <div class="flex items-center justify-between gap-4 px-4"> <span class="text-sm font-semibold">Expanded by default</span> <CollapsibleTrigger asChild> <Button variant="ghost" size="icon" class="size-8"> <ChevronsUpDownIcon class="size-4" /> <span class="sr-only">Toggle</span> </Button> </CollapsibleTrigger> </div> <CollapsibleContent class="flex flex-col gap-2"> <div class="rounded-md border px-4 py-2 font-mono text-sm">This content is visible by default</div> </CollapsibleContent></Collapsible>API Reference
Section titled “API Reference”Events
Section titled “Events”The collapsible emits custom events that you can listen to:
| Event | Detail | Description |
|---|---|---|
collapsible:change | { open: boolean } | Fired when the open state changes |
<Collapsible id="my-collapsible"> <CollapsibleTrigger>Toggle</CollapsibleTrigger> <CollapsibleContent>Hidden content</CollapsibleContent></Collapsible>
<script> const collapsible = document.getElementById('my-collapsible');
collapsible.addEventListener('collapsible:change', (e) => { console.log('Is open:', e.detail.open); });</script>Programmatic Control
Section titled “Programmatic Control”You can control the collapsible programmatically by dispatching a collapsible:set event:
const collapsible = document.getElementById('my-collapsible');
// Open the collapsiblecollapsible.dispatchEvent(new CustomEvent('collapsible:set', { detail: { open: true }}));
// Close the collapsiblecollapsible.dispatchEvent(new CustomEvent('collapsible:set', { detail: { open: false }}));Data Attributes
Section titled “Data Attributes”The collapsible sets these data attributes that you can use for styling or querying state:
| Attribute | Element | Description |
|---|---|---|
data-state | collapsible, collapsible-content | Current state (open or closed) |