● Zion Boggan
repos/Drophawk/frontend/components/ui/dialog.tsx
zionboggan.com ↗
47 lines · tsx
History for this file →
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
}