Spaces:
Sleeping
Sleeping
File size: 1,865 Bytes
73e9550 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import { ExternalLink, Menu, X } from "lucide-react"
import GithubIcon from "./GithubIcon"
import { useState } from "react"
import { LINKS, NAV_ITEMS } from "../constants"
export default function Header({ onNavigate }) {
const [menuOpen, setMenuOpen] = useState(false)
function handleNav(id) {
onNavigate(id)
setMenuOpen(false)
}
return (
<header className="site-header">
<div className="site-header__inner">
<button type="button" className="site-logo" onClick={() => handleNav("verify")}>
<span className="site-logo__mark">CV</span>
<span className="site-logo__text">
<strong>ClearVoice</strong>
<small>Medical fact-checker</small>
</span>
</button>
<nav className={`site-nav ${menuOpen ? "site-nav--open" : ""}`}>
{NAV_ITEMS.map(({ id, label }) => (
<button key={id} type="button" className="btn btn-ghost btn-sm" onClick={() => handleNav(id)}>
{label}
</button>
))}
<a href={LINKS.github} target="_blank" rel="noopener noreferrer" className="btn btn-ghost btn-sm">
<GithubIcon size={15} />
GitHub
</a>
<a href={LINKS.api} target="_blank" rel="noopener noreferrer" className="btn btn-outline btn-sm">
API
<ExternalLink size={13} />
</a>
<a href={LINKS.demo} target="_blank" rel="noopener noreferrer" className="btn btn-primary btn-sm">
Live demo
</a>
</nav>
<button
type="button"
className="site-menu-toggle"
aria-label={menuOpen ? "Close menu" : "Open menu"}
onClick={() => setMenuOpen((v) => !v)}
>
{menuOpen ? <X size={20} /> : <Menu size={20} />}
</button>
</div>
</header>
)
}
|