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 (
{mode !== "none" && (
<>
{parent && (
}
level="quiet"
pill
/>
)}
>
)}
{children}
{sm && }
{end && (
<>
>
)}
);
};