Components
Loading preview...
import * as React from 'react';
import { Accordion } from '@base-ui-components/react/accordion';
export default function ExampleAccordion() {
return (
<Accordion.Root className="flex w-96 max-w-[calc(100vw-8rem)] flex-col justify-center text-gray-900 dark:text-gray-100">
<Accordion.Item className="border-b border-gray-200 dark:border-gray-700">
<Accordion.Header>
<Accordion.Trigger className="group relative flex w-full items-baseline justify-between gap-4 bg-gray-50 py-2 pr-1 pl-3 text-left font-medium hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 focus-visible:z-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-blue-800 dark:focus-visible:outline-blue-400">
What is Base UI?
<PlusIcon className="mr-2 size-3 shrink-0 transition-all ease-out group-data-[panel-open]:scale-110 group-data-[panel-open]:rotate-45" />
</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel className="h-[var(--accordion-panel-height)] overflow-hidden text-base text-gray-600 dark:text-gray-300 transition-[height] ease-out data-[ending-style]:h-0 data-[starting-style]:h-0">
<div className="p-3">
Base UI is a library of high-quality unstyled React components for design
systems and web apps.
</div>
</Accordion.Panel>
</Accordion.Item>
<Accordion.Item className="border-b border-gray-200 dark:border-gray-700">
<Accordion.Header>
<Accordion.Trigger className="group relative flex w-full items-baseline justify-between gap-4 bg-gray-50 py-2 pr-1 pl-3 text-left font-medium hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 focus-visible:z-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-blue-800 dark:focus-visible:outline-blue-400">
How do I get started?
<PlusIcon className="mr-2 size-3 shrink-0 transition-all ease-out group-data-[panel-open]:scale-110 group-data-[panel-open]:rotate-45" />
</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel className="h-[var(--accordion-panel-height)] overflow-hidden text-base text-gray-600 dark:text-gray-300 transition-[height] ease-out data-[ending-style]:h-0 data-[starting-style]:h-0">
<div className="p-3">
Head to the “Quick start” guide in the docs. If you’ve used unstyled
libraries before, you’ll feel at home.
</div>
</Accordion.Panel>
</Accordion.Item>
<Accordion.Item className="border-b border-gray-200 dark:border-gray-700">
<Accordion.Header>
<Accordion.Trigger className="group relative flex w-full items-baseline justify-between gap-4 bg-gray-50 py-2 pr-1 pl-3 text-left font-medium hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700 focus-visible:z-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-blue-800 dark:focus-visible:outline-blue-400">
Can I use it for my project?
<PlusIcon className="mr-2 size-3 shrink-0 transition-all ease-out group-data-[panel-open]:scale-110 group-data-[panel-open]:rotate-45" />
</Accordion.Trigger>
</Accordion.Header>
<Accordion.Panel className="h-[var(--accordion-panel-height)] overflow-hidden text-base text-gray-600 dark:text-gray-300 transition-[height] ease-out data-[ending-style]:h-0 data-[starting-style]:h-0">
<div className="p-3">Of course! Base UI is free and open source.</div>
</Accordion.Panel>
</Accordion.Item>
</Accordion.Root>
);
}
function PlusIcon(props: React.ComponentProps<'svg'>) {
return (
<svg viewBox="0 0 12 12" fill="currentcolor" {...props}>
<path d="M6.75 0H5.25V5.25H0V6.75L5.25 6.75V12H6.75V6.75L12 6.75V5.25H6.75V0Z" />
</svg>
);
}Part of Base UI — browse the full library on 21st.dev.