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.