Expandable sections for FAQs, settings groups, and stacked content.
Introduction
Accordion groups related content into expandable sections—FAQs, settings groups, and stacked detail panels. Compose with AccordionItem. By default only one item is open; set multiple to allow several at once.
Use the framework selector in the site header to switch between React and Vue.
Import
import { Accordion } from "@bridge-ui/vue/Components/Accordion";
import { AccordionItem } from "@bridge-ui/vue/Components/AccordionItem";import { Accordion } from "@bridge-ui/react/Components/Accordion";
import { AccordionItem } from "@bridge-ui/react/Components/AccordionItem";Basic usage
Control expansion with value / onChange (React) or v-model (Vue). Each AccordionItem needs a stable value and a title for the trigger.
Multiple open
Set multiple so more than one panel can stay expanded. The controlled value becomes an array of item values.
Variants
Set the structural layout with variant: default (flush dividers), outlined (boxed group), plain (quiet spacing, no borders), and separated (individual cards with gap).
plain
default
outlined
separated
plain
default
outlined
separated
Colors
Use the color prop for the expanded trigger and indicator accent. Available colors: primary, secondary, success, info, warning, error, and dark.
dark
info
error
primary
success
warning
secondary
dark
info
error
primary
success
warning
secondary
Sizes
Control density with size: sm, md (default), or lg.
lg
md
sm
lg
md
sm
Disabled item
Pass disabled on an AccordionItem to lock that section, or on Accordion to disable the whole group.
Custom title slot
Override the trigger label with a custom title. In React, use slots.title; in Vue, use the #title slot.
Related components
Accessibility
Each item uses a button trigger with aria-expanded and aria-controls pointing at a panel with role="region". Collapsed panels use aria-hidden. Arrow keys, Home, and End move focus between enabled triggers.
Anatomy
<div> <!-- Accordion root -->
<div> <!-- AccordionItem root -->
<button> <!-- trigger -->
<span> <!-- title -->
<!-- indicator (chevron or slots.indicator) -->
</button>
<div role="region"> <!-- panel -->
</div>
</div>Target parts with classes on Accordion (root) or AccordionItem (root, trigger, title, indicator, panel).
API
Accordion
| Prop | Type | Default | Description |
|---|---|---|---|
| v-model / modelValue | string | string[] | — | Expanded value(s). |
| @update:model-value | (value: AccordionValue) => void | — | Emitted when expansion changes. |
| @change | (value: AccordionValue) => void | — | Same payload as model updates. |
| Prop | Type | Default | Description |
|---|---|---|---|
| value | string | string[] | — | Controlled expanded value(s). |
| defaultValue | string | string[] | — | Initial value when uncontrolled. |
| onChange | (value: AccordionValue) => void | — | Called when expansion changes. |
| Prop | Type | Default | Description |
|---|---|---|---|
| multiple | boolean | false | Allow more than one item expanded at once. |
| disabled | boolean | false | Disable all items. |
| variant | AccordionVariant | "default" | Structural layout: default, outlined, plain, or separated. |
| color | AccordionColor | "primary" | Accent for the expanded trigger and indicator. |
| size | AccordionSize | "md" | Density of triggers and panels. |
| classes | AccordionClasses | — | Classes for root. |
| customProps | AccordionCustomProps | — | Props forwarded to the root element. Root HTML attributes stay on the component top level. |
AccordionItem
| Prop | Type | Default | Description |
|---|---|---|---|
| value | string | required | Stable id for expanded state. |
| title | ReactNode / Vue slot content | — | Trigger label. |
| disabled | boolean | false | Disable this item. |
| classes | AccordionItemClasses | — | Classes for root, trigger, title, indicator, panel. |
| customProps | AccordionItemCustomProps | — | Props forwarded to internal parts. |
| slots | { title?, indicator? } | — | Custom title or expand indicator (React). Vue: #title, #indicator. |
| children | panel content | — | Content shown when expanded. |