"use client"; import React, { useEffect, useId, useState } from "react"; import Link from "next/link"; import { Star } from "lucide-react"; import { VocalinuxLogo } from "@/components/optimized-image"; import { GITHUB_REPO_URL, VOCAHQ_URL } from "@/lib/seo"; import { footerGroups, homeNav, mobileExtraNav, pageNav, socialLinks, type NavLink, } from "@/lib/site-nav"; // Star count is fetched once at build time (next.config.js) so visitors never // call api.github.com. Empty or missing falls back to the "GitHub" label. const GITHUB_STARS = Number(process.env.NEXT_PUBLIC_GITHUB_STARS) || null; function SmartLink({ href, className, children, onClick, }: { href: string; className?: string; children: React.ReactNode; onClick?: () => void; }) { const external = href.startsWith("http"); if (external) { return ( {children} ); } if (href.startsWith("#")) { return ( {children} ); } return ( {children} ); } export function SiteChrome({ children, variant = "page", }: { children: React.ReactNode; variant?: "home" | "page"; }) { const [open, setOpen] = useState(false); const stars = GITHUB_STARS; const navId = useId(); const nav = variant === "home" ? homeNav : pageNav; const ctaHref = variant === "home" ? "#install" : "/#install"; const extras: NavLink[] = variant === "home" ? [ { href: "/screenshots/", label: "Screenshots" }, { href: "/install/", label: "Distro guides" }, ...mobileExtraNav, ] : mobileExtraNav; useEffect(() => { const onKey = (event: KeyboardEvent) => { if (event.key === "Escape") setOpen(false); }; const onResize = () => { if (window.innerWidth >= 921) setOpen(false); }; window.addEventListener("keydown", onKey); window.addEventListener("resize", onResize); return () => { window.removeEventListener("keydown", onKey); window.removeEventListener("resize", onResize); }; }, []); return (
); }