Organizes content into collapsible sections, allowing users to focus on one section at a time.
To become a better person, to help others, and to leave the world a better place than you found it.
Read books, listen to podcasts, and surround yourself with people who inspire you.
Give them your time, attention, and love.
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 MyccordionItem component that makes it easier to reuse.
We used the WithoutChildrenOrChild type helper to omit the child and children snippet props from Accordion.ItemProps, since we are opting out of using Delegation and are already taking care of rendering the children as text via the content prop.
For our MyAccordion component, we'll accept all the props that Accordion.Root accepts, as well as an additional items prop that will be used to render the MyAccordionItem components.
Managing Value State
The value prop is used to determine which accordion item(s) are currently open. Bits UI provides flexible options for controlling and synchronizing the Accordion's value state.
Two-Way Binding
Use the bind:value directive for effortless two-way synchronization between your local state and the Accordion's internal state.
This setup enables opening the Accordion items via the custom button and ensures the local myValue state updates when the Accordion closes through any internal means (e.g., clicking on an item's trigger).
Change Handler
You can also use the onValueChange prop to update local state when the Accordion's value state changes. This is useful when you don't want two-way binding for one reason or another, or you want to perform additional logic when the Accordion opens or closes.
Single Type
Set the type prop to "single" to allow only one accordion item to be open at a time.
Content A
Content B
Content C
Multiple Type
Set the type prop to "multiple" to allow multiple accordion items to be open at the same time.
Content A
Content B
Content C
Default Open Items
To set default open items, pass them as the value prop, which will be an array if the type is "multiple", or a string if the type is "single".
Content A
Content B
Content C
Disable Items
To disable an individual accordion item, set the disabled prop to true. This will prevent users from interacting with the item.
Svelte 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.
For more information on using transitions with Bits UI components, see the Transitions documentation.
API Reference
Accordion.Root
The root accordion component used to set and manage the state of the accordion.
Property
Type
Description
typerequired prop
enum
The type of accordion. If set to 'multiple', the accordion will allow multiple items to be open at the same time. If set to single, the accordion will only allow a single item to be open.
Default: ——undefined
valuebindable prop
union
The value of the currently active accordion item. If type is 'single', this should be a string. If type is 'multiple', this should be an array of strings.
Default: ——undefined
onValueChange
function
A callback function called when the active accordion item value changes. If the type is 'single', the argument will be a string. If type is 'multiple', the argument will be an array of strings.
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
refbindable 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.
Accordion.Item
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
refbindable 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.
Accordion.Header
The header of the accordion item.
Property
Type
Description
level
union
The heading level of the header. This will be set as the aria-level attribute.
Default: 3
refbindable 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.
Accordion.Trigger
The button responsible for toggling the accordion item.
Property
Type
Description
refbindable 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.
Accordion.Content
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
refbindable 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.