Alert
Displays a callout for user attention.
Playground
Heads up!
You can add components to your app using the cli.
Error
Your session has expired. Please log in again.
Heads up!
You can add components to your app using the cli.
Error
Your session has expired. Please log in again.
Installation
Install in any React + Tailwind project:
$npx shadcn@latest add https://twigs.globirdenergy.com.au/r/alert.json
Source
The exact file the registry serves to consumers.
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 };