"use client" import * as React from "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 ( e.preventDefault()} onCloseAutoFocus={(e) => e.preventDefault()} className={cn( "fixed top-[50%] left-[50%] z-50 w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-[16px] border border-[var(--border)] text-[var(--foreground)] p-6 dialog-content-shadow outline-none duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg", "mobile-dialog-glass", className )} {...props}> {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, }