"use client"; import { useEffect, useRef, useState } from "react"; import { MediaContents } from "components/Media"; import { Separator } from "components/Layout"; import { MenuSmall } from "components/Icons/MenuSmall"; import { CloseTiny } from "components/Icons/CloseTiny"; import { useSidebarStore } from "./Sidebar"; import { SearchTiny } from "components/Icons/SearchTiny"; import { useCardBorderHidden } from "components/Pages/useCardBorderHidden"; export const MobileNavigation = (props: { search?: React.ReactNode; mobileActions?: React.ReactNode; pageTitle: string; }) => { let [state, setState] = useState<"search" | "default">("default"); let [hidden, setHidden] = useState(false); let [sticky, setSticky] = useState(false); let [scrollPos, setScrollPos] = useState(0); let lastScrollY = useRef(0); let stickyRef = useRef(false); let cardBorderHidden = useCardBorderHidden(); useEffect(() => { const homeContent = document.getElementById("home-content"); if (!homeContent) return; const handleScroll = () => { const currentScrollY = homeContent.scrollTop; const delta = currentScrollY - lastScrollY.current; lastScrollY.current = currentScrollY; setScrollPos(currentScrollY); if (currentScrollY === 0) { stickyRef.current = false; setSticky(false); setHidden(false); return; } if (delta > 8) { if (stickyRef.current) setHidden(true); } else if (delta < -1 && currentScrollY > 0) { if (!stickyRef.current) { stickyRef.current = true; setSticky(true); setHidden(true); requestAnimationFrame(() => { requestAnimationFrame(() => setHidden(false)); }); } else { setHidden(false); } } }; homeContent.addEventListener("scroll", handleScroll, { passive: true }); return () => homeContent.removeEventListener("scroll", handleScroll); }, []); let headerBGColor = cardBorderHidden ? "var(--bg-leaflet)" : "var(--bg-page)"; return ( {state === "default" ? ( <> {props.search && ( { setState("search"); }} > )} {props.mobileActions} > ) : ( <> {props.search} { setState("default"); }} > > )} ); }; const MobileSidebarTrigger = (props: { pageTitle: string }) => { let setOpen = useSidebarStore((s) => s.setOpen); return ( setOpen(true)} > {props.pageTitle} ); };