import { Box, Flex, HStack, HTMLChakraProps, Icon, IconButton, Link, chakra, useColorMode, useColorModeValue, useDisclosure, useUpdateEffect, } from '@chakra-ui/react' import { useScroll } from 'framer-motion' import NextLink from 'next/link' import { useEffect, useRef, useState } from 'react' import { FaMoon, FaSun, FaYoutube } from 'react-icons/fa' import Logo, { LogoIcon } from './logo' import { MobileNavButton, MobileNavContent } from './mobile-nav' import Search from './omni-search' import SponsorButton from './sponsor-button' import VersionSwitcher from './version-switcher' import { DiscordIcon, GithubIcon } from 'components/icons' import siteConfig from 'configs/site-config.json' function HeaderContent() { const mobileNav = useDisclosure() const { toggleColorMode: toggleMode } = useColorMode() const text = useColorModeValue('dark', 'light') const SwitchIcon = useColorModeValue(FaMoon, FaSun) const mobileNavBtnRef = useRef() useUpdateEffect(() => { mobileNavBtnRef.current?.focus() }, [mobileNav.isOpen]) return ( <> } /> ) } function Header(props: HTMLChakraProps<'header'>) { const { maxW = '8xl', maxWidth = '8xl' } = props const ref = useRef() const [y, setY] = useState(0) const { height = 0 } = ref.current?.getBoundingClientRect() ?? {} const { scrollY } = useScroll() useEffect(() => { return scrollY.onChange(() => setY(scrollY.get())) }, [scrollY]) return ( height ? 'sm' : undefined} transition='box-shadow 0.2s, background-color 0.2s' pos='sticky' top='0' zIndex='11' bg='white' _dark={{ bg: 'gray.800' }} left='0' right='0' width='full' {...props} > ) } export default Header