"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"; const GITHUB_API_REPO_URL = `https://api.github.com/repos/${GITHUB_REPO_URL.replace("https://github.com/", "")}`; 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, setStars] = useState(null); 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); }; }, []); useEffect(() => { fetch(GITHUB_API_REPO_URL) .then((res) => res.json()) .then((data: { stargazers_count?: number }) => { if (data.stargazers_count) setStars(data.stargazers_count); }) .catch(() => setStars(null)); }, []); return (
Skip to content
Vocalinux
{children}
); }