Components
Accordion
A vertically stacked set of interactive headings that each reveal a section of content.
We offer standard (5-7 days), express (2-3 days), and overnight shipping. Free shipping on international orders.
Installation#
Install the dependencies
npm install cn radix-ui lucide-reactCopy the source into your project
components/ui/accordion.tsx"use client"import * as React from "react"import { cn } from "cn"import { Accordion as AccordionPrimitive } from "radix-ui"import { ChevronDownIcon, ChevronUpIcon } from "lucide-react"function Accordion({ className, ...props}: React.ComponentProps<typeof AccordionPrimitive.Root>) { return ( <AccordionPrimitive.Root data-slot="accordion" className={cn("flex w-full flex-col", className)} {...props} /> )}function AccordionItem({ className, ...props}: React.ComponentProps<typeof AccordionPrimitive.Item>) { return ( <AccordionPrimitive.Item data-slot="accordion-item" className={cn("not-last:border-b", className)} {...props} /> )}function AccordionTrigger({ className, children, ...props}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) { return ( <AccordionPrimitive.Header className="flex"> <AccordionPrimitive.Trigger data-slot="accordion-trigger" className={cn( "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground", className )} {...props} > {children} <ChevronDownIcon data-slot="accordion-trigger-icon" className="pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden" /> <ChevronUpIcon data-slot="accordion-trigger-icon" className="pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline" /> </AccordionPrimitive.Trigger> </AccordionPrimitive.Header> )}function AccordionContent({ className, children, ...props}: React.ComponentProps<typeof AccordionPrimitive.Content>) { return ( <AccordionPrimitive.Content data-slot="accordion-content" className="overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up" {...props} > <div className={cn( "h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className )} > {children} </div> </AccordionPrimitive.Content> )}export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }Make sure the foundation is in place
Components read their colors, radius and surfaces from the tokens in
app/globals.css. See Theming.
Usage#
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent,} from "@/components/ui/accordion"Examples#
Basic
Click on 'Forgot Password' on the login page, enter your email address, and we'll send you a link to reset your password. The link will expire in 24 hours.
Borders
We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members.
Card
Disabled
Multiple
Manage how you receive notifications. You can enable email alerts for updates or push notifications for mobile devices.