Accordion
Organizes content into collapsible sections, allowing users to focus on one section at a time.
Structure
Reusable Components
If you're planning to use the Accordion
component throughout your application, it's recommended to create reusable wrapper components to reduce the amount of code you need to write each time.
For each invidual item, you need an Accordion.Item
, Accordion.Header
, Accordion.Trigger
and Accordion.Content
component. We can combine these into a single CustomAccordionItem
component that makes it easier to reuse.
We used the WithoutChild
type helper to omit the child
snippet prop from Accordion.ItemProps
, since we are opting out of using Delegation with our custom component.
Usage
Single
Set the type
prop to "single"
to allow only one accordion item to be open at a time.
Multiple
Set the type
prop to "multiple"
to allow multiple accordion items to be open at the same time.
Disable Items
To disable an individual accordion item, set the disabled
prop to true
. This will prevent users from interacting with the item.
Controlled Value
You can programmatically control the active of the accordion item(s) using the value
prop.
Value Change Side Effects
You can use the onValueChange
prop to handle side effects when the value of the accordion changes.
Alternatively, you can use bind:value
with an $effect
block to handle side effects when the value of the accordion changes.
Transitions
You can use the forceMount
prop on the Accordion.Content
component to forcefully mount the content regardless of whether the accordion item is open or closed. This is useful when you want more control over the transitions when the accordion item opens and closes using something like Svelte Transitions.
The open
snippet prop can be used for conditional rendering of the content based on whether the accordion item is open or closed.
API Reference
The root accordion component used to set and manage the state of the accordion.
Property | Type | Description |
---|---|---|
type Required | enum | The type of accordion. If set to Default: undefined |
value bindable prop | union | The value of the currently active accordion item. If Default: undefined |
onValueChange | function | A callback function called when the active accordion item value changes. If the Default: undefined |
disabled | boolean | Whether or not the accordion is disabled. When disabled, the accordion cannot be interacted with. Default: false |
loop | boolean | Whether or not the accordion should loop through items when reaching the end. Default: false |
orientation | enum | The orientation of the accordion. Default: vertical |
ref bindable prop | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See delegation docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-orientation | enum | The orientation of the component. |
data-disabled | '' | Present when the component is disabled. |
data-accordion-root | '' | Present on the root element. |
An accordion item.
Property | Type | Description |
---|---|---|
disabled | boolean | Whether or not the accordion item is disabled. Default: false |
value | string | The value of the accordion item. This is used to identify when the item is open or closed. If not provided, a unique ID will be generated for this value. Default: A random unique ID |
ref bindable prop | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See delegation docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-state | enum | Whether the accordion item is open or closed. |
data-disabled | '' | Present when the component is disabled. |
data-accordion-item | '' | Present on the item element. |
The header of the accordion item.
Property | Type | Description |
---|---|---|
level | union | The heading level of the header. This will be set as the Default: 3 |
ref bindable prop | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See delegation docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-orientation | enum | The orientation of the component. |
data-disabled | '' | Present when the component is disabled. |
data-heading-level | enum | The heading level of the element. |
data-accordion-header | '' | Present on the header element. |
The button responsible for toggling the accordion item.
Property | Type | Description |
---|---|---|
ref bindable prop | HTMLButtonElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See delegation docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-orientation | enum | The orientation of the component. |
data-disabled | '' | Present when the component is disabled. |
data-accordion-trigger | '' | Present on the trigger element. |
The accordion item content, which is displayed when the item is open.
Property | Type | Description |
---|---|---|
forceMount | boolean | Whether or not to forcefully mount the content. This is useful if you want to use Svelte transitions or another animation library for the content. Default: false |
ref bindable prop | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See delegation docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-orientation | enum | The orientation of the component. |
data-disabled | '' | Present when the component is disabled. |
data-accordion-content | '' | Present on the content element. |