"use client" import * as React from "react" import { XIcon } from "lucide-react" import { Dialog as DialogPrimitive } from "radix-ui" import { cn } from "@/lib/utils" import {CloseIcon} from "@/app/components/Icons"; import { useBodyScrollLock } from "../../app/hooks/useBodyScrollLock"; function Dialog({ open: openProp, defaultOpen, onOpenChange, ...props }) { const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen ?? false); const isControlled = openProp !== undefined; const currentOpen = isControlled ? openProp : uncontrolledOpen; // 使用全局 hook 统一处理 body 滚动锁定 & 恢复,避免弹窗打开时页面跳到顶部 useBodyScrollLock(currentOpen); const handleOpenChange = React.useCallback( (next) => { if (!isControlled) setUncontrolledOpen(next); onOpenChange?.(next); }, [isControlled, onOpenChange] ); return ( ); } function DialogTrigger({ ...props }) { return ; } function DialogPortal({ ...props }) { return ; } function DialogClose({ ...props }) { return ; } function DialogOverlay({ className, ...props }) { return ( ); } function DialogContent({ className, children, showCloseButton = true, overlayClassName, overlayStyle, ...props }) { return ( {children} {showCloseButton && ( Close )} ); } function DialogHeader({ className, ...props }) { return (
); } function DialogFooter({ className, showCloseButton = false, children, ...props }) { return (
{children} {showCloseButton && ( )}
); } function DialogTitle({ className, ...props }) { return ( ); } function DialogDescription({ className, ...props }) { return ( ); } export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, }