| 1 | "use client"; |
| 2 | |
| 3 | import * as DialogPrimitive from "@radix-ui/react-dialog"; |
| 4 | import { X } from "lucide-react"; |
| 5 | import { cn } from "@/lib/utils"; |
| 6 | |
| 7 | export const Dialog = DialogPrimitive.Root; |
| 8 | export const DialogTrigger = DialogPrimitive.Trigger; |
| 9 | export const DialogClose = DialogPrimitive.Close; |
| 10 | |
| 11 | export function DialogContent({ |
| 12 | className, |
| 13 | children, |
| 14 | title, |
| 15 | ...props |
| 16 | }: React.ComponentProps<typeof DialogPrimitive.Content> & { title?: string }) { |
| 17 | return ( |
| 18 | <DialogPrimitive.Portal> |
| 19 | <DialogPrimitive.Overlay className="fixed inset-0 z-[var(--z-modal)] bg-black/55 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" /> |
| 20 | <DialogPrimitive.Content |
| 21 | className={cn( |
| 22 | "fixed left-1/2 top-1/2 z-[var(--z-modal)] w-[min(92vw,520px)] -translate-x-1/2 -translate-y-1/2", |
| 23 | "ring-frame overflow-hidden rounded-[var(--radius-lg)] border border-[var(--color-border-default)]", |
| 24 | "bg-[var(--color-bg-overlay)] shadow-[var(--shadow-pop)] focus:outline-none", |
| 25 | "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95", |
| 26 | className, |
| 27 | )} |
| 28 | {...props} |
| 29 | > |
| 30 | {title ? ( |
| 31 | <div className="flex items-center justify-between border-b border-[var(--color-border-subtle)] px-4 py-3"> |
| 32 | <DialogPrimitive.Title className="text-sm font-semibold text-[var(--color-fg-primary)]"> |
| 33 | {title} |
| 34 | </DialogPrimitive.Title> |
| 35 | <DialogPrimitive.Close |
| 36 | className="rounded-[var(--radius-sm)] text-[var(--color-fg-tertiary)] transition-colors hover:text-[var(--color-fg-primary)]" |
| 37 | aria-label="Close" |
| 38 | > |
| 39 | <X className="h-4 w-4" aria-hidden /> |
| 40 | </DialogPrimitive.Close> |
| 41 | </div> |
| 42 | ) : null} |
| 43 | {children} |
| 44 | </DialogPrimitive.Content> |
| 45 | </DialogPrimitive.Portal> |
| 46 | ); |
| 47 | } |