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