Skip to content

Accordion

A fully accessible, headless Accordion component for React. Composed of multiple subcomponents for flexible usage.

Features

  • Accessible (keyboard navigation, ARIA attributes)
  • Headless (no styles, fully customizable)
  • Composable API (Accordion, AccordionItem, AccordionHeader, AccordionPanel)
  • Context-powered hooks

Installation

bash
npm install react-headless-ui-kit

Usage

tsx
import {
  Accordion,
  AccordionItem,
  AccordionHeader,
  AccordionPanel,
  useAccordion,
} from "react-headless-ui-kit";

function MultipleOpenAccordion() {
  return (
    <Accordion multiple defaultOpenItems={["item-1"]}>
      <AccordionItem>
        <AccordionHeader value="item-1">
          Section 1
        </AccordionHeader>
        <AccordionPanel value="item-1">
          Content for section 1.
        </AccordionPanel>
      </AccordionItem>
      <AccordionItem>
        <AccordionHeader value="item-2">
          Section 2
        </AccordionHeader>
        <AccordionPanel value="item-2">
          Content for section 2.
        </AccordionPanel>
      </AccordionItem>
    </Accordion>
  );
}

function SingleOpenAccordion() {
  return (
    <Accordion>
      <AccordionItem>
        <AccordionHeader value="item-1">
          Section 1
        </AccordionHeader>
        <AccordionPanel value="item-1">
          Content for section 1.
        </AccordionPanel>
      </AccordionItem>
      <AccordionItem>
        <AccordionHeader value="item-2">
          Section 2
        </AccordionHeader>
        <AccordionPanel value="item-2">
          Content for section 2.
        </AccordionPanel>
      </AccordionItem>
    </Accordion>
  );
}

API Reference

<Accordion />

PropTypeDescription
childrenReactNodeAccordion items
multiplebooleanAllow multiple items open at once
defaultOpenItemsstring[]Items open by default

<AccordionItem />

Wraps each accordion section.

PropTypeDescription
childrenReactNodeItem content
valuestringUnique item identifier

<AccordionHeader />

Accordion section header and trigger.

PropTypeDescription
childrenReactNodeHeader content
valuestringItem identifier

<AccordionPanel />

Accordion section panel (content).

PropTypeDescription
childrenReactNodePanel content
valuestringItem identifier

useAccordion()

Hook to access accordion context values inside subcomponents.

Return valueDescription
openItemsArray of open item ids
toggleItemToggle item callback
multipleMultiple open mode

Accessibility

  • Keyboard navigation and ARIA attributes for screen readers.
  • Each header is linked to its panel via ARIA attributes.
  • Only one or multiple panels can be open, depending on multiple prop.

Customization

All components are unstyled. Use your own styles via className or style props.