import { useEffect, type ReactNode } from 'react'; import { AnimatePresence, motion, useDragControls } from 'motion/react'; import { X } from 'lucide-react'; /** * برگه‌ای که از پایین بالا می‌آید؛ با زدنِ پس‌زمینه، Escape، یا کشیدنِ دستگیره/سرِ برگه به پایین بسته می‌شود. * کشیدن فقط از بالای برگه شروع می‌شود تا با اسکرولِ محتوای بلندِ برگه قاطی نشود. */ export function Sheet({ open, onClose, title, children, }: { open: boolean; onClose: () => void; title?: ReactNode; children: ReactNode; }) { const drag = useDragControls(); useEffect(() => { if (!open) return; const onKey = (e: KeyboardEvent) => e.key === 'Escape' && onClose(); window.addEventListener('keydown', onKey); return () => window.removeEventListener('keydown', onKey); }, [open, onClose]); return ( {open && (
{ if (info.offset.y > 90 || info.velocity.y > 600) onClose(); }} >
drag.start(e)}>
{title && (
drag.start(e)}>

{title}

)} {children}
)} ); }