Accordion
Sekumpulan heading interaktif yang ditumpuk vertikal, masing-masing membuka satu bagian konten.
bun x bosia@latest add accordionKomponen majemuk untuk mengecilkan bagian konten. Dibangun di atas trigger aria-expanded yang tersambung ke panel role="region", dengan navigasi tombol panah roving dan dukungan mode buka-tunggal atau buka-banyak.
Preview
Yes. It follows the WAI-ARIA design pattern and ships with full keyboard navigation.
Yes. It comes with default styles that match the other components' aesthetic.
The chevron rotates on open. You can layer your own height/opacity transitions on top if
desired.
Props Accordion
| Prop | Type | Default |
|---|---|---|
type |
"single" | "multiple" |
"single" |
value |
string | string[] |
""/[] |
collapsible |
boolean |
false |
disabled |
boolean |
false |
class |
string |
"" |
value bersifat $bindable(). Dalam mode single ia berupa string; dalam mode multiple ia berupa string[]. collapsible hanya berlaku saat type="single" — saat true, mengklik item yang terbuka akan menutupnya.
Props AccordionItem
| Prop | Type | Default |
|---|---|---|
value |
string |
— |
disabled |
boolean |
false |
class |
string |
"" |
Props AccordionTrigger
| Prop | Type | Default |
|---|---|---|
level |
1 | 2 | 3 | 4 | 5 | 6 |
3 |
class |
string |
"" |
level menetapkan elemen heading semantik (<h1>–<h6>) yang membungkus tombol trigger, sesuai pola accordion WAI-ARIA.
Props AccordionContent
| Prop | Type | Default |
|---|---|---|
class |
string |
"" |
Penggunaan
<script lang="ts">
import {
Accordion,
AccordionItem,
AccordionTrigger,
AccordionContent,
} from "$lib/components/ui/accordion";
let value = $state("item-1");
</script>
<Accordion type="single" collapsible bind:value>
<AccordionItem value="item-1">
<AccordionTrigger>Is it accessible?</AccordionTrigger>
<AccordionContent>Yes. It ships with full keyboard navigation.</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>Is it styled?</AccordionTrigger>
<AccordionContent>Yes. It matches the rest of the registry.</AccordionContent>
</AccordionItem>
</Accordion>Banyak Terbuka
<script lang="ts">
import {
Accordion,
AccordionItem,
AccordionTrigger,
AccordionContent,
} from "$lib/components/ui/accordion";
let value = $state<string[]>(["a"]);
</script>
<Accordion type="multiple" bind:value>
<AccordionItem value="a">
<AccordionTrigger>Section A</AccordionTrigger>
<AccordionContent>A content.</AccordionContent>
</AccordionItem>
<AccordionItem value="b">
<AccordionTrigger>Section B</AccordionTrigger>
<AccordionContent>B content.</AccordionContent>
</AccordionItem>
</Accordion>Item Nonaktif
<Accordion type="single" collapsible>
<AccordionItem value="a">
<AccordionTrigger>Enabled</AccordionTrigger>
<AccordionContent>Open me.</AccordionContent>
</AccordionItem>
<AccordionItem value="b" disabled>
<AccordionTrigger>Disabled</AccordionTrigger>
<AccordionContent>Never shown.</AccordionContent>
</AccordionItem>
</Accordion>Navigasi Keyboard
| Tombol | Aksi |
|---|---|
ArrowDown |
Pindah fokus ke trigger berikutnya |
ArrowUp |
Pindah fokus ke trigger sebelumnya |
Home |
Pindah fokus ke trigger pertama |
End |
Pindah fokus ke trigger terakhir |
Space/Enter |
Toggle item yang difokuskan |