"use client" import { buttonVariants } from "@/components/ui/button" import { cn } from "@/lib/utils" import * as DialogPrimitive from "@radix-ui/react-dialog" import { cva, type VariantProps } from "class-variance-authority" import * as React from "react" const Dialog = DialogPrimitive.Root const DialogTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( {children} )) DialogTrigger.displayName = DialogPrimitive.Trigger.displayName const DialogPortal = DialogPrimitive.Portal const DialogClose = DialogPrimitive.Close const DialogOverlay = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) DialogOverlay.displayName = DialogPrimitive.Overlay.displayName const dialogContentVariants = cva( "fixed z-50 grid max-w-md gap-4 backdrop-blur-sm border-border/90 bg-background shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 lg:w-full w-[92%] max-w-md", { variants: { position: { default: "left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] 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%]", top: "left-[50%] top-[5%] translate-x-[-50%] translate-y-[30%] data-[state=closed]:slide-out-to-top-0 data-[state=open]:slide-in-from-top-0 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[50%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[50%] ", bottom: "left-[50%] bottom-[5%] translate-x-[-50%] translate-y-[-30%] data-[state=closed]:slide-out-to-bottom-0 data-[state=open]:slide-in-from-bottom-0 data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-bottom-[50%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[50%] ", }, appearance: { default: "bg-white/95 dark:bg-neutral-900", destructive: "bg-white dark:bg-neutral-900", }, }, defaultVariants: { appearance: "default", position: "default", }, } ) export interface DialogContentProps extends React.ComponentPropsWithoutRef, VariantProps { closeOnClickOutside?: boolean } const DialogContent = React.forwardRef< React.ElementRef, DialogContentProps >( ( { className, appearance, position = "default", closeOnClickOutside = true, children, ...props }, ref ) => ( e.stopPropagation()} /> {children} ) ) DialogContent.displayName = DialogPrimitive.Content.displayName const DialogHeader = ({ className, ...props }: React.HTMLAttributes) => (
) DialogHeader.displayName = "DialogHeader" const DialogFooter = ({ className, ...props }: React.HTMLAttributes) => (
) DialogFooter.displayName = "DialogFooter" const DialogTitle = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) DialogTitle.displayName = DialogPrimitive.Title.displayName const DialogDescription = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )) DialogDescription.displayName = DialogPrimitive.Description.displayName const DialogAction = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { variant?: VariantProps["variant"] size?: VariantProps["size"] } >(({ className, variant = "default", size = "default", ...props }, ref) => ( )) DialogAction.displayName = "DialogAction" const DialogCancel = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { variant?: VariantProps["variant"] size?: VariantProps["size"] } >(({ className, variant = "outline", size = "default", ...props }, ref) => ( )) DialogCancel.displayName = "DialogCancel" export { Dialog, DialogAction, DialogCancel, DialogClose, DialogContent, dialogContentVariants, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger }