Alert Dialog
A confirmation dialog modal that interrupts the user with critical content requiring an explicit response before proceeding.
alertDialog.tsx
Core implementation of the AlertDialog component featuring accessible Radix UI primitives and neutral theme colors.
ReactRadix UITailwindOverlaysDialog
"use client";
import * as React from "react";
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
import { cn } from "@/lib/utils";
const AlertDialog = AlertDialogPrimitive.Root;
const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
const AlertDialogPortal = AlertDialogPrimitive.Portal;
const AlertDialogOverlay = React.forwardRef<
React.ComponentRef<typeof AlertDialogPrimitive.Overlay>,
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
<AlertDialogPrimitive.Overlay
className={cn(
"fixed inset-0 z-50 bg-black/60 backdrop-blur-xs data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
className
)}
{...props}
ref={ref}
/>
));
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
const AlertDialogContent = React.forwardRef<
React.ComponentRef<typeof AlertDialogPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
>(({ className, ...props }, ref) => (
<AlertDialogPortal>
<AlertDialogOverlay />
<AlertDialogPrimitive.Content
ref={ref}
className={cn(
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-zinc-200/80 dark:border-zinc-800/80 bg-white dark:bg-zinc-900 p-6 shadow-2xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-3xl",
className
)}
{...props}
/>
</AlertDialogPortal>
));
AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
const AlertDialogHeader = ({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn(
"flex flex-col space-y-2 text-center sm:text-left",
className
)}
{...props}
/>
);
AlertDialogHeader.displayName = "AlertDialogHeader";
const AlertDialogFooter = ({
className,
...props
}: React.HTMLAttributes<HTMLDivElement>) => (
<div
className={cn(
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 gap-2 mt-4",
className
)}
{...props}
/>
);
AlertDialogFooter.displayName = "AlertDialogFooter";
const AlertDialogTitle = React.forwardRef<
React.ComponentRef<typeof AlertDialogPrimitive.Title>,
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
>(({ className, ...props }, ref) => (
<AlertDialogPrimitive.Title
ref={ref}
className={cn("text-lg font-bold text-zinc-900 dark:text-zinc-100 tracking-tight", className)}
{...props}
/>
));
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
const AlertDialogDescription = React.forwardRef<
React.ComponentRef<typeof AlertDialogPrimitive.Description>,
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
>(({ className, ...props }, ref) => (
<AlertDialogPrimitive.Description
ref={ref}
className={cn("text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed", className)}
{...props}
/>
));
AlertDialogDescription.displayName =
AlertDialogPrimitive.Description.displayName;
export type AlertDialogActionColor =
| "danger"
| "primary"
| "secondary"
| "accent"
| "success"
| "warning"
| "default";
export interface AlertDialogActionProps
extends React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action> {
color?: AlertDialogActionColor;
}
const actionColorMap: Record<AlertDialogActionColor, string> = {
danger: "bg-danger text-danger-foreground hover:opacity-90",
primary: "bg-primary text-primary-foreground hover:opacity-90",
secondary: "bg-secondary text-secondary-foreground hover:opacity-90",
accent: "bg-accent text-accent-foreground hover:opacity-90",
success: "bg-success text-success-foreground hover:opacity-90",
warning: "bg-warning text-warning-foreground hover:opacity-90",
default: "bg-default text-default-foreground hover:opacity-90",
};
const AlertDialogAction = React.forwardRef<
React.ComponentRef<typeof AlertDialogPrimitive.Action>,
AlertDialogActionProps
>(({ className, color = "danger", ...props }, ref) => (
<AlertDialogPrimitive.Action
ref={ref}
className={cn(
"inline-flex h-9 items-center justify-center rounded-xl px-4 text-sm font-medium cursor-pointer transition-all duration-200 shadow-md",
actionColorMap[color],
className
)}
{...props}
/>
));
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
const AlertDialogCancel = React.forwardRef<
React.ComponentRef<typeof AlertDialogPrimitive.Cancel>,
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
>(({ className, ...props }, ref) => (
<AlertDialogPrimitive.Cancel
ref={ref}
className={cn(
"inline-flex h-9 items-center justify-center rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900 px-4 text-sm font-medium text-zinc-700 dark:text-zinc-300 hover:bg-zinc-100 dark:hover:bg-zinc-800 cursor-pointer transition-all duration-200 mt-2 sm:mt-0",
className
)}
{...props}
/>
));
AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
export {
AlertDialog,
AlertDialogPortal,
AlertDialogOverlay,
AlertDialogTrigger,
AlertDialogContent,
AlertDialogHeader,
AlertDialogFooter,
AlertDialogTitle,
AlertDialogDescription,
AlertDialogAction,
AlertDialogCancel,
};
Default
A standard confirmation dialog modal that interrupts the user with critical content requiring an explicit response before proceeding.
Action Colors (Primary, Success & Warning)
Customize the confirm action button using the color prop on AlertDialogAction (danger, primary, warning, success, default).
API Reference
Subcomponents — AlertDialog
Primitives available for building accessible confirmation dialogs.
| Component | Description |
|---|---|
| AlertDialog | Root container component managing open state. |
| AlertDialogTrigger | Button or element that opens the dialog modal. |
| AlertDialogContent | Modal overlay card container formatted with clean dark/light neutral colors. |
| AlertDialogHeader | Header container wrapping the dialog title and description. |
| AlertDialogTitle | Accessible heading title for the confirmation dialog. |
| AlertDialogDescription | Body text explaining the consequences of the confirmation action. |
| AlertDialogFooter | Footer layout container aligning action buttons. |
| AlertDialogAction | Primary action button executing the operation. Supports 'color' prop. |
| AlertDialogCancel | Cancel button closing the dialog with neutral hover background. |
Props — AlertDialogAction
Properties for customizing the confirmation action button.
| Prop | Type | Default | Description |
|---|---|---|---|
| color | 'danger' | 'primary' | 'warning' | 'success' | 'default' | 'danger' | Semantic color theme for the confirmation action button. |