import type { HTMLAttributes } from "corvos/plugins/jsx.ts"; import { Icon } from "$/ui/objects/Icon.tsx"; import { nav } from "../../data/nav.ts"; import { ActionButton } from "../objects/ActionButton.tsx"; import { Navbar } from "../objects/Navbar.tsx"; import { NavbarItem } from "../objects/NavbarItem.tsx"; import { Logo } from "./Logo.tsx"; export type Props = HTMLAttributes<"header"> & { "url": string; "mode"?: "compact" | "none"; "at-end"?: boolean; "hidden"?: boolean; "sm"?: JSX.Element; "end"?: JSX.Element; "children"?: JSX.Element; }; export const SiteHeader = ({ children, sm, url, mode, "at-end": atEnd, hidden, end, class: cls, ...props }: Props) => { const navItems = nav.map((item) => ({ ...item, selected: new RegExp(`^${item.url.replace("/#", "/")}`).test(url), })); const parent = navItems .filter((item) => item.url !== url) .reduce( (parent: (typeof navItems)[number] | undefined, item) => item.selected && item.url.length > (parent?.url.length ?? 0) ? item : parent, undefined, ); const selected = navItems.reduce( (sel, item) => (item.selected && item.url.length > sel.url.length ? item : sel), { icon: "", label: "Back", selected: true, url: "/", }, ); const variant = atEnd ? "static-white" : undefined; return ( ); };