import clsx from "clsx"; import React, { FC, PropsWithChildren } from "react"; import { CloseIcon } from "./icons/close"; import { Transition } from "@headlessui/react"; import { createPortal } from "react-dom"; import { useScroll } from "framer-motion"; import BrowserOnly from "@docusaurus/BrowserOnly"; import { useOutsideClick } from "../hooks/use-outside-click"; import { useKeyDown } from "../hooks/use-keydown"; type Props = { title?: string; onClose: () => void; open: boolean; }; export const CommonDrawer: FC> = (props) => { React.useEffect(() => { if (props.open) { document.body.style.overflow = "hidden"; } else { document.body.style.overflow = "auto"; } return () => { document.body.style.overflow = "auto"; }; }, [props.open]); return ( {() => createPortal(, document.body)} ); }; const DEFAULT_TOP_OFFSET = 48; const DrawerComponent: FC> = ({ children, title, open, onClose, }) => { const [topOffset, setTopOffset] = React.useState(DEFAULT_TOP_OFFSET); const { scrollY } = useScroll(); const drawerRef = React.useRef(null); useOutsideClick(drawerRef, (event) => { event.stopPropagation(); onClose(); }); useKeyDown(drawerRef, ["Escape"], () => { onClose(); }); // this is required for the component. React.useEffect(() => { const unsubscribeScrollY = scrollY.onChange((latest) => { if (latest >= 48) { setTopOffset(0); return; } setTopOffset(DEFAULT_TOP_OFFSET - latest); }); return () => unsubscribeScrollY(); }, []); return (

{title}

{children}
); };