import { useEffect, useId, useState } from "react";
import { NavLink, useLocation } from "react-router-dom";
import Icon from "./Icon";
import { useAdmin } from "./AdminSession";
import ThemeToggle from "./ThemeToggle";
const navItems = [
{ label: "About", to: "/" },
{ label: "Experience", to: "/experience" },
{ label: "Skills", to: "/skills" },
{ label: "Journal", to: "/blog" },
{ label: "Contact", to: "/contact" },
];
function Header({ name }) {
const { isAdmin, checking, openSignIn } = useAdmin();
const [menuOpen, setMenuOpen] = useState(false);
const navigationId = useId();
const location = useLocation();
useEffect(() => setMenuOpen(false), [location.pathname]);
return (
{name}
);
}
function Footer({ name }) {
const now = new Date();
const monthAndYear = new Intl.DateTimeFormat("en-US", {
month: "short",
year: "numeric",
}).format(now);
return (
);
}
export default function Layout({ children, profile }) {
const location = useLocation();
const name = profile?.display_name ?? "Alex Herlan";
const isAbout = location.pathname === "/";
useEffect(() => {
let pressed = null;
let origin = null;
const clear = () => {
pressed?.removeAttribute("data-pressed");
pressed = null;
origin = null;
};
const press = (event) => {
clear();
if (!event.isPrimary || event.button !== 0) return;
const control = event.target.closest?.(".button, .culture-link");
if (!control || control.matches(":disabled")) return;
pressed = control;
origin = { x: event.clientX, y: event.clientY };
pressed.setAttribute("data-pressed", "true");
};
const move = (event) => {
if (origin && Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > 10) clear();
};
window.addEventListener("pointerdown", press, { passive: true });
window.addEventListener("pointermove", move, { passive: true });
window.addEventListener("pointerup", clear);
window.addEventListener("pointercancel", clear);
window.addEventListener("blur", clear);
return () => {
clear();
window.removeEventListener("pointerdown", press);
window.removeEventListener("pointermove", move);
window.removeEventListener("pointerup", clear);
window.removeEventListener("pointercancel", clear);
window.removeEventListener("blur", clear);
};
}, []);
return (
);
}