95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
import * as React from "react"
|
|
import * as DialogPrimitive from "@radix-ui/react-dialog"
|
|
import { X } from "lucide-react"
|
|
|
|
import { cn } from "@/lib/utils"
|
|
|
|
const Dialog = DialogPrimitive.Root
|
|
|
|
const DialogTrigger = DialogPrimitive.Trigger
|
|
|
|
const DialogPortal = DialogPrimitive.Portal
|
|
|
|
const DialogClose = DialogPrimitive.Close
|
|
|
|
const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (
|
|
<DialogPrimitive.Overlay
|
|
ref={ref}
|
|
className={cn(
|
|
"fixed inset-0 z-50 bg-black/80 flex animate-in fade-in-0 overflow-auto",
|
|
className
|
|
)}
|
|
{...props} />
|
|
))
|
|
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
|
|
|
|
const DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (
|
|
<DialogPortal>
|
|
<DialogOverlay>
|
|
<DialogPrimitive.Content
|
|
ref={ref}
|
|
className={cn(
|
|
"relative m-auto z-50 grid w-full max-w-lg gap-4 border bg-background p-6 shadow-lg sm:rounded-lg",
|
|
className
|
|
)}
|
|
{...props}>
|
|
{children}
|
|
<DialogPrimitive.Close
|
|
className="absolute end-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none bg-accent text-muted-foreground">
|
|
<X className="h-4 w-4" />
|
|
<span className="sr-only">Close</span>
|
|
</DialogPrimitive.Close>
|
|
</DialogPrimitive.Content>
|
|
</DialogOverlay>
|
|
</DialogPortal>
|
|
))
|
|
DialogContent.displayName = DialogPrimitive.Content.displayName
|
|
|
|
const DialogHeader = ({
|
|
className,
|
|
...props
|
|
}) => (
|
|
<div
|
|
className={cn("flex flex-col space-y-1.5 text-center sm:text-start", className)}
|
|
{...props} />
|
|
)
|
|
DialogHeader.displayName = "DialogHeader"
|
|
|
|
const DialogFooter = ({
|
|
className,
|
|
...props
|
|
}) => (
|
|
<div
|
|
className={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)}
|
|
{...props} />
|
|
)
|
|
DialogFooter.displayName = "DialogFooter"
|
|
|
|
const DialogTitle = React.forwardRef(({ className, ...props }, ref) => (
|
|
<DialogPrimitive.Title
|
|
ref={ref}
|
|
className={cn("text-lg font-semibold leading-none tracking-tight", className)}
|
|
{...props} />
|
|
))
|
|
DialogTitle.displayName = DialogPrimitive.Title.displayName
|
|
|
|
const DialogDescription = React.forwardRef(({ className, ...props }, ref) => (
|
|
<DialogPrimitive.Description
|
|
ref={ref}
|
|
className={cn("text-sm text-muted-foreground", className)}
|
|
{...props} />
|
|
))
|
|
DialogDescription.displayName = DialogPrimitive.Description.displayName
|
|
|
|
export {
|
|
Dialog,
|
|
DialogPortal,
|
|
DialogOverlay,
|
|
DialogTrigger,
|
|
DialogClose,
|
|
DialogContent,
|
|
DialogHeader,
|
|
DialogFooter,
|
|
DialogTitle,
|
|
DialogDescription,
|
|
}
|