Skip to main content

Accordion

Accordion displays collapsible content sections for organizing information.

Open in Storybook

Import

import { Accordion, AccordionItem } from "@tosui/react";

Basic Usage

Default Expanded

This section is open by default.

Allow Multiple

Enable multiple sections to be open simultaneously.

This can stay open

While this is also open

Disabled Items

Common Patterns

FAQ Section

<Accordion>
<AccordionItem index={0} title="What is Tosui?">
Tosui is a themable, orderly, simple UI component library built on
constraint-driven simplicity.
</AccordionItem>
<AccordionItem index={1} title="How do I install it?">
<Text>Run the following command:</Text>
<Code variant="subtle" mt={2} display="block">npm install @tosui/react</Code>
</AccordionItem>
<AccordionItem index={2} title="Is it accessible?">
Yes! All components follow WAI-ARIA guidelines and support keyboard navigation.
</AccordionItem>
</Accordion>

Settings Sections

<Accordion allowMultiple>
<AccordionItem index={0} title="Account Settings">
<VStack gap={3} align="stretch">
<HStack justify="space-between">
<Text>Email notifications</Text>
<Switch />
</HStack>
<HStack justify="space-between">
<Text>Two-factor authentication</Text>
<Switch />
</HStack>
</VStack>
</AccordionItem>
<AccordionItem index={1} title="Privacy Settings">
<VStack gap={3} align="stretch">
<HStack justify="space-between">
<Text>Profile visibility</Text>
<Select defaultValue="public">
<option value="public">Public</option>
<option value="private">Private</option>
</Select>
</HStack>
</VStack>
</AccordionItem>
</Accordion>

Product Features

<Accordion>
<AccordionItem index={0} title="Free Plan">
<List styleType="disc" spacing={2}>
<ListItem>5 projects</ListItem>
<ListItem>Basic support</ListItem>
<ListItem>1GB storage</ListItem>
</List>
</AccordionItem>
<AccordionItem index={1} title="Pro Plan">
<List styleType="disc" spacing={2}>
<ListItem>Unlimited projects</ListItem>
<ListItem>Priority support</ListItem>
<ListItem>100GB storage</ListItem>
<ListItem>Custom domains</ListItem>
</List>
</AccordionItem>
</Accordion>

Props Reference

Accordion

PropTypeDefaultDescription
defaultIndexnumber | number[]-Default expanded index(es)
allowMultiplebooleanfalseAllow multiple items expanded
classNamestring-Additional CSS class
childrenReactNode-AccordionItem children

AccordionItem

PropTypeDefaultDescription
indexnumber-Item index (required)
titleReactNode-Item header (required)
disabledbooleanfalseWhether item is disabled
classNamestring-Additional CSS class
childrenReactNode-Item content

Accessibility

  • Uses aria-expanded on trigger buttons
  • Uses aria-disabled for disabled items
  • Keyboard accessible via Tab and Enter/Space

TypeScript

import { Accordion, AccordionItem, type AccordionProps, type AccordionItemProps } from "@tosui/react";