Accordion

A vertically stacked set of interactive headings that each reveal a section of content.

Default

Only one panel is open at a time. Setting collapsible allows the open panel to be closed again.

Hummingbird UI is a class-based design system. Components ship their looks as semantic CSS classes and use Radix UI primitives for behavior.

tsx

import { Accordion } from "@hummingbirdui/react";

export default function AccordionDefault() {
  return (
    <Accordion
      type="single"
      collapsible
      defaultValue="item-1"
      className="mx-auto max-w-2xl"
    >
      <Accordion.Item value="item-1">
        <Accordion.Header>
          <Accordion.Trigger>What is Hummingbird UI?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Hummingbird UI is a class-based design system. Components ship their
          looks as semantic CSS classes and use Radix UI primitives for
          behavior.
        </Accordion.Content>
      </Accordion.Item>
      <Accordion.Item value="item-2">
        <Accordion.Header>
          <Accordion.Trigger>Is it accessible?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Yes. The Accordion is built on Radix UI&apos;s headless primitive, so
          keyboard navigation and ARIA wiring are handled for you.
        </Accordion.Content>
      </Accordion.Item>
      <Accordion.Item value="item-3">
        <Accordion.Header>
          <Accordion.Trigger>Can multiple panels stay open?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Use <code>type=&quot;multiple&quot;</code> to let several items expand
          at once, or <code>type=&quot;single&quot;</code> with{" "}
          <code>collapsible</code> to allow closing the open item.
        </Accordion.Content>
      </Accordion.Item>
    </Accordion>
  );
}

Multiple

Use type="multiple" to let any number of panels stay open at once.

tsx

import { Accordion } from "@hummingbirdui/react";

export default function AccordionMultiple() {
  return (
    <Accordion type="multiple" className="mx-auto max-w-2xl">
      <Accordion.Item value="item-1">
        <Accordion.Header>
          <Accordion.Trigger>What is Hummingbird UI?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Hummingbird UI is a class-based design system. Components ship their
          looks as semantic CSS classes and use Radix UI primitives for
          behavior.
        </Accordion.Content>
      </Accordion.Item>
      <Accordion.Item value="item-2">
        <Accordion.Header>
          <Accordion.Trigger>Is it accessible?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Yes. The Accordion is built on Radix UI&apos;s headless primitive, so
          keyboard navigation and ARIA wiring are handled for you.
        </Accordion.Content>
      </Accordion.Item>
      <Accordion.Item value="item-3">
        <Accordion.Header>
          <Accordion.Trigger>Can multiple panels stay open?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Yes. With <code>type=&quot;multiple&quot;</code> every panel toggles
          independently, so any number of them can be open at the same time.
        </Accordion.Content>
      </Accordion.Item>
    </Accordion>
  );
}

Disabled

Add disabled to an Accordion.Item to prevent it from opening, or to the Accordion root to disable every item.

Hummingbird UI is a class-based design system. Components ship their looks as semantic CSS classes and use Radix UI primitives for behavior.

tsx

import { Accordion } from "@hummingbirdui/react";

export default function AccordionDisabled() {
  return (
    <Accordion
      type="single"
      collapsible
      defaultValue="item-1"
      className="mx-auto max-w-2xl"
    >
      <Accordion.Item value="item-1">
        <Accordion.Header>
          <Accordion.Trigger>What is Hummingbird UI?</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          Hummingbird UI is a class-based design system. Components ship their
          looks as semantic CSS classes and use Radix UI primitives for
          behavior.
        </Accordion.Content>
      </Accordion.Item>
      <Accordion.Item value="item-2" disabled>
        <Accordion.Header>
          <Accordion.Trigger>This item is disabled</Accordion.Trigger>
        </Accordion.Header>
        <Accordion.Content>
          You won&apos;t be able to open this panel.
        </Accordion.Content>
      </Accordion.Item>
    </Accordion>
  );
}

API Reference

Built on the Radix UI Accordion primitive. Each part forwards all props to its Radix counterpart.

Accordion

Contains all the parts of an accordion.

PropTypeDefault
asChildbooleanfalse
type*enum
valuestring
defaultValuestring
onValueChangefunction
valuestring[][]
defaultValuestring[][]
onValueChangefunction
collapsiblebooleanfalse
disabledbooleanfalse
direnum"ltr"
orientationenum"vertical"
classNamestring

Data attributeValues
[data-orientation]"vertical" | "horizontal"

Accordion.Item

Contains all the parts of a collapsible section.

PropTypeDefault
asChildbooleanfalse
disabledbooleanfalse
value*string
classNamestring

Data attributeValues
[data-state]"open" | "closed"
[data-disabled]Present when disabled
[data-orientation]"vertical" | "horizontal"

Accordion.Header

Wraps an Accordion.Trigger. Use the asChild prop to update it to the appropriate heading level for your page.

PropTypeDefault
asChildbooleanfalse
classNamestring

Data attributeValues
[data-state]"open" | "closed"
[data-disabled]Present when disabled
[data-orientation]"vertical" | "horizontal"

Accordion.Trigger

Toggles the collapsed state of its associated item. It should be nested inside of an Accordion.Header.

PropTypeDefault
asChildbooleanfalse
classNamestring

Data attributeValues
[data-state]"open" | "closed"
[data-disabled]Present when disabled
[data-orientation]"vertical" | "horizontal"

Accordion.Content

Contains the collapsible content for an item.

PropTypeDefault
asChildbooleanfalse
forceMountboolean
classNamestring

Data attributeValues
[data-state]"open" | "closed"
[data-disabled]Present when disabled
[data-orientation]"vertical" | "horizontal"

CSS VariableDescription
--radix-accordion-content-widthThe width of the content when it opens/closes.
--radix-accordion-content-heightThe height of the content when it opens/closes.

Styling

Hummingbird React accordion is styled entirely through Hummingbird's utility classes and CSS variables.

  • See the full list of available accordion classes in the Class overview.
  • Visit the CSS Variables documentation to explore all available variables.