Path: blob/master/gate-controller/components/ui/dialog.tsx
1085 views
"use client"12import * as React from "react"3import * as DialogPrimitive from "@radix-ui/react-dialog"4import { XIcon } from "lucide-react"56import { cn } from "@/lib/utils"78function Dialog({9...props10}: React.ComponentProps<typeof DialogPrimitive.Root>) {11return <DialogPrimitive.Root data-slot="dialog" {...props} />12}1314function DialogTrigger({15...props16}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {17return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />18}1920function DialogPortal({21...props22}: React.ComponentProps<typeof DialogPrimitive.Portal>) {23return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />24}2526function DialogClose({27...props28}: React.ComponentProps<typeof DialogPrimitive.Close>) {29return <DialogPrimitive.Close data-slot="dialog-close" {...props} />30}3132function DialogOverlay({33className,34...props35}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {36return (37<DialogPrimitive.Overlay38data-slot="dialog-overlay"39className={cn(40"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",41className42)}43{...props}44/>45)46}4748function DialogContent({49className,50children,51showCloseButton = true,52...props53}: React.ComponentProps<typeof DialogPrimitive.Content> & {54showCloseButton?: boolean55}) {56return (57<DialogPortal data-slot="dialog-portal">58<DialogOverlay />59<DialogPrimitive.Content60data-slot="dialog-content"61className={cn(62"bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",63className64)}65{...props}66>67{children}68{showCloseButton && (69<DialogPrimitive.Close70data-slot="dialog-close"71className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"72>73<XIcon />74<span className="sr-only">Close</span>75</DialogPrimitive.Close>76)}77</DialogPrimitive.Content>78</DialogPortal>79)80}8182function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {83return (84<div85data-slot="dialog-header"86className={cn("flex flex-col gap-2 text-center sm:text-left", className)}87{...props}88/>89)90}9192function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {93return (94<div95data-slot="dialog-footer"96className={cn(97"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",98className99)}100{...props}101/>102)103}104105function DialogTitle({106className,107...props108}: React.ComponentProps<typeof DialogPrimitive.Title>) {109return (110<DialogPrimitive.Title111data-slot="dialog-title"112className={cn("text-lg leading-none font-semibold", className)}113{...props}114/>115)116}117118function DialogDescription({119className,120...props121}: React.ComponentProps<typeof DialogPrimitive.Description>) {122return (123<DialogPrimitive.Description124data-slot="dialog-description"125className={cn("text-muted-foreground text-sm", className)}126{...props}127/>128)129}130131export {132Dialog,133DialogClose,134DialogContent,135DialogDescription,136DialogFooter,137DialogHeader,138DialogOverlay,139DialogPortal,140DialogTitle,141DialogTrigger,142}143144145