washiveil
uiglass-accordionsource: ok · refreshed
Glass Accordion
Accordion on glass with soft dividers, built on Radix Accordion.
npx shadcn add "https://washiveil.alexchih.com/r/glass-accordion.json"free
Visual style
glass-blurpastel
Interaction
accordion
Tags auto-generated by rules on 9/24/2026 — empty means no evidence, not lack of support.
Dependencies
Bundle weight · lighticonslucide-react
Registry dependencies
https://washiveil.alexchih.com/r/theme.json
Files1 · source cached 10/8/2026, 8:50:30 AM
registry/washiveil/ui/glass-accordion.tsx
'use client'
import * as React from 'react'
import { Accordion as AccordionPrimitive } from 'radix-ui'
import { ChevronDown } from 'lucide-react'
import { cn } from '@/lib/utils'
const GlassAccordion = AccordionPrimitive.Root
const GlassAccordionItem = React.forwardRef<
React.ComponentRef<typeof AccordionPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
>(({ className, ...props }, ref) => (
<AccordionPrimitive.Item
ref={ref}
className={cn('border-b border-foreground/10 last:border-b-0', className)}
{...props}
/>
))
GlassAccordionItem.displayName = 'GlassAccordionItem'
const GlassAccordionTrigger = React.forwardRef<
React.ComponentRef<typeof AccordionPrimitive.Trigger>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Header className="flex">
<AccordionPrimitive.Trigger
ref={ref}
className={cn(
'flex flex-1 items-center justify-between py-4 text-left text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:text-ruri dark:hover:text-ruri-soft [&[data-state=open]>svg]:rotate-180',
className,
)}
{...props}
>
{children}
<ChevronDown className="size-4 shrink-0 text-faint transition-transform duration-200" />
</AccordionPrimitive.Trigger>
</AccordionPrimitive.Header>
))
GlassAccordionTrigger.displayName = 'GlassAccordionTrigger'
const GlassAccordionContent = React.forwardRef<
React.ComponentRef<typeof AccordionPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
>(({ className, children, ...props }, ref) => (
<AccordionPrimitive.Content
ref={ref}
className="overflow-hidden text-sm text-body data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
{...props}
>
<div className={cn('pb-4', className)}>{children}</div>
</AccordionPrimitive.Content>
))
GlassAccordionContent.displayName = 'GlassAccordionContent'
export { GlassAccordion, GlassAccordionItem, GlassAccordionTrigger, GlassAccordionContent }