"use client"; import * as DialogPrimitive from "@radix-ui/react-dialog"; import { XIcon } from "lucide-react"; import * as React from "react"; import { cn } from "./lib/utils"; export type { DialogProps } from "@radix-ui/react-dialog"; const Dialog = DialogPrimitive.Root; const DialogTrigger = DialogPrimitive.Trigger; const DialogClose = DialogPrimitive.Close; const DialogPortal = ({ className, children, ...props }: DialogPrimitive.DialogPortalProps) => (
{children}
); DialogPortal.displayName = DialogPrimitive.Portal.displayName; const DialogOverlay = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; const DialogContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { size?: "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl"; hideCloseButton?: boolean; } >(({ className, children, size = "md", hideCloseButton, ...props }, ref) => ( {children} {!hideCloseButton ? ( <> Close ) : null} )); 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; function useDialog() { const [isOpen, setIsOpen] = React.useState(false); const triggerRef = React.useRef(); function trigger() { setIsOpen(true); } function dismiss() { setIsOpen(false); triggerRef.current?.focus(); } return { triggerProps: { ref: triggerRef, onClick: trigger, }, dialogProps: { open: isOpen, onOpenChange: (open: boolean) => { if (open) trigger(); else dismiss(); }, }, trigger, dismiss, }; } export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, useDialog, };