The Accordion component provides a way to organize content in expandable/collapsible sections, useful for FAQs, navigation menus, and multi-step forms.
Basic usage
import {
FlxAccordion,
FlxAccordionItem,
FlxAccordionItemHeader,
FlxAccordionItemTitle,
FlxAccordionItemContent
} from '@flowx/react-ui-toolkit';
function BasicAccordion() {
return (
<FlxAccordion>
<FlxAccordionItem>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Section 1
</FlxAccordionItemTitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>Content for section 1 goes here.</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
<FlxAccordionItem>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Section 2
</FlxAccordionItemTitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>Content for section 2 goes here.</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
</FlxAccordion>
);
}
With subtitles
Add subtitles to provide additional context for each accordion section:
import {
FlxAccordion,
FlxAccordionItem,
FlxAccordionItemHeader,
FlxAccordionItemTitle,
FlxAccordionItemSubtitle,
FlxAccordionItemContent
} from '@flowx/react-ui-toolkit';
function AccordionWithSubtitle() {
return (
<FlxAccordion>
<FlxAccordionItem>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Account Settings
</FlxAccordionItemTitle>
<FlxAccordionItemSubtitle>
Manage your account preferences
</FlxAccordionItemSubtitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>Account settings content here.</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
</FlxAccordion>
);
}
Controlled state
Control the open/closed state of accordion items:
import { useState } from 'react';
import { FlxAccordion, FlxAccordionItem, FlxAccordionItemHeader, FlxAccordionItemTitle, FlxAccordionItemContent } from '@flowx/react-ui-toolkit';
function ControlledAccordion() {
const [openItems, setOpenItems] = useState({ section1: false });
const handleToggle = (key) => (isOpen) => {
setOpenItems(prev => ({ ...prev, [key]: isOpen }));
};
return (
<FlxAccordion>
<FlxAccordionItem
open={openItems.section1}
onOpenChange={handleToggle('section1')}
>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Controlled Section
</FlxAccordionItemTitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>This section is controlled by state.</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
</FlxAccordion>
);
}
Completion states
Mark accordion items as completed, useful for multi-step processes:
import { FlxAccordion, FlxAccordionItem, FlxAccordionItemHeader, FlxAccordionItemTitle, FlxAccordionItemContent } from '@flowx/react-ui-toolkit';
function StepAccordion() {
return (
<FlxAccordion>
<FlxAccordionItem completed>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Step 1: Personal Information
</FlxAccordionItemTitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>Personal information form (completed)</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
<FlxAccordionItem>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Step 2: Contact Details
</FlxAccordionItemTitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>Contact details form (in progress)</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
</FlxAccordion>
);
}
When an accordion item is marked as completed, a checkmark icon will automatically appear next to the title.
Always opened
Create accordion items that cannot be collapsed:
<FlxAccordionItem alwaysOpened defaultOpen>
<FlxAccordionItemHeader>
<FlxAccordionItemTitle>
Important Information
</FlxAccordionItemTitle>
</FlxAccordionItemHeader>
<FlxAccordionItemContent>
<p>This content is always visible.</p>
</FlxAccordionItemContent>
</FlxAccordionItem>
Props
FlxAccordionItem
Controls whether the accordion item is expanded. Use with onOpenChange for controlled behavior.
Sets the initial open state for uncontrolled accordion items.
Callback fired when the accordion item is toggled. Receives the new open state.
Marks the accordion item as completed, displaying a checkmark icon.
When true, the accordion item cannot be collapsed and remains open.
Disables the accordion item, preventing user interaction.
FlxAccordionItemTitle
completedIcon
ElementType<FlxIconProps>
Custom icon component to display when the accordion item is marked as completed.
caretIcon
ElementType<FlxIconProps>
Custom icon component for the expand/collapse indicator.
FlxAccordionItemSubtitle
When true, the subtitle remains visible even when the accordion item is collapsed.
TypeScript
The Accordion component is fully typed:
import type {
FlxAccordionItemProps,
FlxAccordionItemTitleProps
} from '@flowx/react-ui-toolkit';
const accordionConfig: FlxAccordionItemProps = {
completed: true,
onOpenChange: (isOpen) => console.log(isOpen),
};
Accessibility
- Uses proper ARIA attributes for collapsible content
- Keyboard navigation with Enter/Space to toggle
- Focus management for sequential navigation
- Screen reader announcements for state changes
For better accessibility, always provide descriptive titles that clearly indicate the content within each accordion section.