import { Box, BoxProps, Center, CloseButton, Flex, HStack, IconButton, IconButtonProps, useBreakpointValue, useColorModeValue, useUpdateEffect, } from "@chakra-ui/react" import { AnimatePresence, motion, useElementScroll } from "framer-motion" import useRouteChanged from "src/hooks/use-route-changed" import NextLink from "next/link" import { useRouter } from "next/router" import * as React from "react" import { AiOutlineMenu } from "react-icons/ai" import { RemoveScroll } from "react-remove-scroll" import Logo from "src/components/logo" function NavLink({ href, children }) { const { pathname } = useRouter() const [, group] = href.split("/") const isActive = pathname.includes(group) return (
{children}
) } interface MobileNavContentProps { isOpen?: boolean onClose?: () => void } export function MobileNavContent(props: MobileNavContentProps) { const { isOpen, onClose } = props const closeBtnRef = React.useRef() const { pathname } = useRouter() useRouteChanged(onClose) /** * Scenario: Menu is open on mobile, and user resizes to desktop/tablet viewport. * Result: We'll close the menu */ const showOnBreakpoint = useBreakpointValue({ base: true, lg: false }) React.useEffect(() => { if (showOnBreakpoint == false) { onClose() } }, [showOnBreakpoint]) useUpdateEffect(() => { if (isOpen) { requestAnimationFrame(() => { closeBtnRef.current?.focus() }) } }, [isOpen]) const [shadow, setShadow] = React.useState() return ( {isOpen && ( Docs Guides Team { setShadow(scrolled ? "md" : undefined) }} > )} ) } const ScrollView = (props: BoxProps & { onScroll?: any }) => { const { onScroll, ...rest } = props const [y, setY] = React.useState(0) const elRef = React.useRef() const { scrollY } = useElementScroll(elRef) React.useEffect(() => { return scrollY.onChange(() => setY(scrollY.get())) }, [scrollY]) useUpdateEffect(() => { onScroll?.(y > 5 ? true : false) }, [y]) return ( ) } export const MobileNavButton = React.forwardRef( (props: IconButtonProps, ref: React.Ref) => { return ( } {...props} /> ) }, )