Skip to Content
DocsCloud UI PrimitiveAccordion

Accordion

Divide content into collapsible sections.

Import

import { Accordion } from '@tidbcloud/uikit'

Usage

Accordion allows users to expand and collapse sections of content. It helps manage large amounts of information in a limited space by showing only the section headers initially and revealing content on interaction.

import { Accordion } from '@tidbcloud/uikit' const data = [ { emoji: '🍎', value: 'Apples', description: 'Crisp and refreshing fruit. Apples are known for their versatility and nutritional benefits.' }, { emoji: '🍌', value: 'Bananas', description: 'Naturally sweet and potassium-rich fruit. Bananas are a popular choice for their energy-boosting properties.' }, { emoji: '🥦', value: 'Broccoli', description: 'Nutrient-packed green vegetable. Broccoli is packed with vitamins, minerals, and fiber.' } ] function Demo() { const items = data.map((item) => ( <Accordion.Item key={item.value} value={item.value}> <Accordion.Control icon={item.emoji}>{item.value}</Accordion.Control> <Accordion.Panel>{item.description}</Accordion.Panel> </Accordion.Item> )) return <Accordion defaultValue="Apples">{items}</Accordion> }

Multiple items open

Set multiple prop to allow multiple items to be opened at the same time:

import { Accordion } from '@tidbcloud/uikit' function Demo() { return ( <Accordion multiple defaultValue={['item-1', 'item-2']}> <Accordion.Item value="item-1"> <Accordion.Control>First item</Accordion.Control> <Accordion.Panel>First panel content</Accordion.Panel> </Accordion.Item> <Accordion.Item value="item-2"> <Accordion.Control>Second item</Accordion.Control> <Accordion.Panel>Second panel content</Accordion.Panel> </Accordion.Item> </Accordion> ) }

Controlled

import { useState } from 'react' import { Accordion } from '@tidbcloud/uikit' function Demo() { const [value, setValue] = useState<string | null>(null) return ( <Accordion value={value} onChange={setValue}> <Accordion.Item value="item-1"> <Accordion.Control>Item 1</Accordion.Control> <Accordion.Panel>Panel 1</Accordion.Panel> </Accordion.Item> <Accordion.Item value="item-2"> <Accordion.Control>Item 2</Accordion.Control> <Accordion.Panel>Panel 2</Accordion.Panel> </Accordion.Item> </Accordion> ) }

Variants

Accordion supports several variants: default, contained, filled, and separated.

import { Accordion } from '@tidbcloud/uikit' function Demo() { return ( <Accordion variant="contained" radius="md"> <Accordion.Item value="item-1"> <Accordion.Control>Item 1</Accordion.Control> <Accordion.Panel>Panel 1</Accordion.Panel> </Accordion.Item> </Accordion> ) }

Disabled items

Set the disabled prop on Accordion.Control to disable it:

import { Accordion } from '@tidbcloud/uikit' function Demo() { return ( <Accordion> <Accordion.Item value="item-1"> <Accordion.Control>Enabled item</Accordion.Control> <Accordion.Panel>Content</Accordion.Panel> </Accordion.Item> <Accordion.Item value="item-2"> <Accordion.Control disabled>Disabled item</Accordion.Control> <Accordion.Panel>Content</Accordion.Panel> </Accordion.Item> </Accordion> ) }

Props

PropTypeDefaultDescription
chevronReact.ReactNode-Custom chevron icon
chevronPosition'left' | 'right''right'Position of the chevron relative to the item label
chevronSizenumber | string24Size of the chevron icon container
defaultValuestring | string[] | null-Uncontrolled component default value
disableChevronRotationboolean-If set, chevron rotation is disabled
loopbooleantrueIf set, arrow keys loop through items
multipleboolean-If set, multiple items can be opened at the same time
onChange(value) => void-Called when value changes
order2 | 3 | 4 | 5 | 6-Heading order, has no effect on visuals
radiusMantineRadius-Border radius
transitionDurationnumber200Transition duration in ms
valuestring | string[] | null-Controlled component value
variant'default' | 'contained' | 'filled' | 'separated''default'Visual variant
Last updated on