Alert
Displays a callout for user attention.
Playground
Heads up
New registry items are ready to install.
Usage spike
This account is trending above forecast.
Heads up
New registry items are ready to install.
Usage spike
This account is trending above forecast.
Installation
Install in any React + Tailwind project:
$npx shadcn@latest add https://twigs.globirdenergy.com.au/r/alert.json
Source
The exact source file used by this page, preferring the Twigs registry file when one exists and falling back to the current shadcn-generated primitive.
import * as React from 'react';
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
// Spec source: Figma "APP Re-design Phase 1" → page "Alert ✅"
// radius=16 (rounded-2xl), padding=16 (p-4), border 1px #e5e5e5 (border)
const alertVariants = cva(
'relative grid w-full grid-cols-[0_1fr] items-start gap-y-3 rounded-2xl border px-4 py-4 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-5 [&>svg]:translate-y-0.5 [&>svg]:text-current',
{
variants: {
variant: {
default: 'bg-card text-card-foreground',
destructive:
'bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current',
},
},
defaultVariants: { variant: 'default' },
},
);
function Alert({
className,
variant,
...props
}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {
return (
<div data-slot="alert" role="alert" className={cn(alertVariants({ variant }), className)} {...props} />
);
}
function AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot="alert-title"
className={cn('col-start-2 line-clamp-1 min-h-4 font-headline text-base font-medium tracking-tight', className)}
{...props}
/>
);
}
function AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {
return (
<div
data-slot="alert-description"
className={cn(
'col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed',
className,
)}
{...props}
/>
);
}
export { Alert, AlertTitle, AlertDescription };