Accordion

A set of collapsible panels for FAQs and progressive disclosure. Accessible by default. Base UI handles aria-expanded, heading semantics and keyboard navigation.

Default

Yes. We ship to 140 countries as long as your customs form doesn't say "definitely not a rocket".

import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from "@/components/ui/accordion"

export default function Example() {
  return (
    <div className="flex w-full justify-center">
      <Accordion defaultValue={["shipping"]} className="w-full max-w-13">
        <AccordionItem value="shipping">
          <AccordionTrigger>Do you ship internationally?</AccordionTrigger>
          <AccordionContent>
            Yes. We ship to 140 countries as long as your customs form doesn't
            say "definitely not a rocket".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="returns">
          <AccordionTrigger>What's your return policy?</AccordionTrigger>
          <AccordionContent>
            30 days, no questions asked. Slightly burnt rocket fuel residue is
            still considered "like new".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="warranty">
          <AccordionTrigger>Is there a warranty?</AccordionTrigger>
          <AccordionContent>
            Lifetime coverage against spontaneous combustion. Atmospheric
            re-entry scratches not included.
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="support">
          <AccordionTrigger>How do I reach support?</AccordionTrigger>
          <AccordionContent>
            Ping us anytime. Response times range from "instant" to "after we
            land" depending on orbital position.
          </AccordionContent>
        </AccordionItem>
      </Accordion>
    </div>
  )
}

Multiple

Yes. We ship to 140 countries as long as your customs form doesn't say "definitely not a rocket".

import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from "@/components/ui/accordion"

export default function Example() {
  return (
    <div className="flex w-full justify-center">
      <Accordion multiple defaultValue={["shipping"]} className="w-full max-w-13">
        <AccordionItem value="shipping">
          <AccordionTrigger>Do you ship internationally?</AccordionTrigger>
          <AccordionContent>
            Yes. We ship to 140 countries as long as your customs form doesn't
            say "definitely not a rocket".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="returns">
          <AccordionTrigger>What's your return policy?</AccordionTrigger>
          <AccordionContent>
            30 days, no questions asked. Slightly burnt rocket fuel residue is
            still considered "like new".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="warranty">
          <AccordionTrigger>Is there a warranty?</AccordionTrigger>
          <AccordionContent>
            Lifetime coverage against spontaneous combustion. Atmospheric
            re-entry scratches not included.
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="support">
          <AccordionTrigger>How do I reach support?</AccordionTrigger>
          <AccordionContent>
            Ping us anytime. Response times range from "instant" to "after we
            land" depending on orbital position.
          </AccordionContent>
        </AccordionItem>
      </Accordion>
    </div>
  )
}

Disabled

Yes. We ship to 140 countries as long as your customs form doesn't say "definitely not a rocket".

import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from "@/components/ui/accordion"

export default function Example() {
  return (
    <div className="flex w-full justify-center">
      <Accordion defaultValue={["shipping"]} className="w-full max-w-13">
        <AccordionItem value="shipping">
          <AccordionTrigger>Do you ship internationally?</AccordionTrigger>
          <AccordionContent>
            Yes. We ship to 140 countries as long as your customs form doesn't
            say "definitely not a rocket".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="classified" disabled>
          <AccordionTrigger>Where is the secret launch pad?</AccordionTrigger>
          <AccordionContent>
            Nice try. This one's classified until you clear the background check.
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="support">
          <AccordionTrigger>How do I reach support?</AccordionTrigger>
          <AccordionContent>
            Ping us anytime. Response times range from "instant" to "after we
            land" depending on orbital position.
          </AccordionContent>
        </AccordionItem>
      </Accordion>
    </div>
  )
}

Borderless

Yes. We ship to 140 countries as long as your customs form doesn't say "definitely not a rocket".

import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from "@/components/ui/accordion"

export default function Example() {
  return (
    <div className="flex w-full justify-center">
      <Accordion bordered={false} defaultValue={["shipping"]} className="w-full max-w-13">
        <AccordionItem value="shipping">
          <AccordionTrigger>Do you ship internationally?</AccordionTrigger>
          <AccordionContent>
            Yes. We ship to 140 countries as long as your customs form doesn't
            say "definitely not a rocket".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="returns">
          <AccordionTrigger>What's your return policy?</AccordionTrigger>
          <AccordionContent>
            30 days, no questions asked. Slightly burnt rocket fuel residue is
            still considered "like new".
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="warranty">
          <AccordionTrigger>Is there a warranty?</AccordionTrigger>
          <AccordionContent>
            Lifetime coverage against spontaneous combustion. Atmospheric
            re-entry scratches not included.
          </AccordionContent>
        </AccordionItem>
        <AccordionItem value="support">
          <AccordionTrigger>How do I reach support?</AccordionTrigger>
          <AccordionContent>
            Ping us anytime. Response times range from "instant" to "after we
            land" depending on orbital position.
          </AccordionContent>
        </AccordionItem>
      </Accordion>
    </div>
  )
}

Props

Accordion

PropTypeDefault
borderedbooleantrue
multiplebooleanfalse
valuestring[]
defaultValuestring[]
onValueChange(value: string[], eventDetails) => void
disabledbooleanfalse

AccordionItem

PropTypeDefault
valuestringauto-generated
disabledbooleanfalse