import { AnimatePresence, domAnimation, LazyMotion, m } from 'framer-motion' import { X } from 'lucide-react' import Image from 'next/image' import Link from 'next/link' import { usePathname } from 'next/navigation' import { Dispatch, Fragment, SetStateAction, useEffect } from 'react' import { useKey } from 'react-use' import { useIsLoggedIn, useIsUserLoading } from 'common' import { Accordion, Button, cn } from 'ui' import { ThemeToggle } from 'ui-patterns/ThemeToggle' import { getCustomContent } from '~/lib/custom-content/getCustomContent' import type { DropdownMenuItem } from '../Navigation.types' import { MenuItem, useActiveMenuLabel } from './GlobalNavigationMenu' import { GLOBAL_MENU_ITEMS } from './NavigationMenu.constants' const DEFAULT_EASE = [0.24, 0.25, 0.05, 1] const container = { hidden: { opacity: 0 }, show: { opacity: 1, transition: { duration: 0.15, staggerChildren: 0.05, ease: DEFAULT_EASE } }, exit: { opacity: 0, transition: { duration: 0.15 } }, } const listItem = { hidden: { opacity: 0, y: 10 }, show: { opacity: 1, y: 0, transition: { duration: 0.25, ease: DEFAULT_EASE } }, exit: { opacity: 0, transition: { duration: 0.05 } }, } const itemClassName = 'block py-2 pl-2 pr-3.5 text-sm text-foreground-light hover:bg-surface-200 focus-visible:ring-2 focus-visible:outline-hidden focus-visible:ring-foreground-lighter focus-visible:rounded-sm' const AccordionMenuItem = ({ section }: { section: DropdownMenuItem[] }) => { const activeLabel = useActiveMenuLabel(GLOBAL_MENU_ITEMS) return ( {section[0].menuItems ? ( {section[0].menuItems?.map((menuItem, menuItemIndex) => ( {menuItem .filter((item) => item.enabled !== false) .map((item) => !item.href ? ( {item.label} ) : ( ) )} ))} ) : ( {section[0].label} )} ) } const Menu = () => ( {GLOBAL_MENU_ITEMS.filter((section) => section[0].enabled !== false).map((section) => ( ))} ) interface Props { open: boolean setOpen: Dispatch> } const GlobalMobileMenu = ({ open, setOpen }: Props) => { const isLoggedIn = useIsLoggedIn() const isUserLoading = useIsUserLoading() const pathname = usePathname() const { navigationLogo } = getCustomContent(['navigation:logo']) // Close mobile menu on route change useEffect(() => { setOpen(false) }, [pathname]) useKey('Escape', () => setOpen(false)) return ( {open && ( DOCS setOpen(false)} type="button" className="inline-flex items-center justify-center focus:ring-brand bg-surface-100 hover:bg-surface-200 focus:outline-hidden focus:ring-2 focus:ring-inset border border-default bg-surface-100/75 text-foreground-light rounded-sm min-w-[30px] w-[30px] h-[30px]" > Close menu {!isUserLoading && ( <> {isLoggedIn ? ( Dashboard ) : ( <> Sign in Start your project > )} > )} )} {open && ( )} ) } export default GlobalMobileMenu