import { useEffect, useState } from "react" import styled from "styled-components" import { Link } from "react-router-dom" import ReactTooltip from "react-tooltip" import { isMobile } from "react-device-detect" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { faSearch } from "@fortawesome/free-solid-svg-icons" import ThemeToggleButton from "./ThemeToggleButton" import Sidebar from "./Sidebar" import theming from "../theming" import NavbarData from "../data/NavbarData" const StyledNav = styled.nav` /* set z index to arbitrarily high value to prevent other components from drawing over the navbar */ z-index: 9999; position: fixed; width: 100%; background-color: ${(props) => theming.theme(props.theme.currentTheme, { light: theming.light.backgroundColor0, dark: theming.dark.backgroundColor0, })}; color: ${(props) => theming.theme(props.theme.currentTheme, { light: theming.light.color0, dark: theming.dark.color0, })}; box-shadow: 0 4px 10px rgb(0 0 0 / 5%); ` const StyledContainer = styled.div` margin: 0 auto; align-items: center; display: flex; height: 2rem; padding: 1rem; /* account for 20px scrollbar width */ @media only screen and (min-width: calc(${theming.size .screen_size2} + 20px)) { width: calc(${theming.size.screen_size2} - 20px); } .right { margin-left: auto; } ` const StyledNavLinks = styled.div` @media only screen and (max-width: ${theming.size.screen_size1}) { display: none; } ` const StyledImg = styled.img` height: 2rem; margin: 1rem; ` const StyledLink = styled(Link)` ${theming.styles.navbarButtonStyle} margin: 0 0.2rem 0 0.2rem; ` const StyledReadProgress = styled.div` height: 2px; background-color: ${(props) => theming.theme(props.theme.currentTheme, { light: theming.light.color1, dark: theming.dark.color1, })}; ` const ReadProgress = () => { const [scroll, setScroll] = useState(0) useEffect(() => { const st = "scrollTop" const sh = "scrollHeight" const scrollHandler = () => { const h = document.documentElement const b = document.body setScroll( ((h[st] || b[st]) / ((h[sh] || b[sh]) - h.clientHeight)) * 100 ) } window.addEventListener("scroll", scrollHandler) return () => { window.removeEventListener("scroll", scrollHandler) } }, []) return } const Navbar = () => { return ( {NavbarData.map((item, index) => ( {item.title} ))} {!isMobile && ( Search )} ) } export default Navbar