import { useState, useEffect } from "react"; import { useRouter } from "next/router"; import { useConfig, useTheme } from "nextra-theme-docs"; import { Footer } from "./components/Footer"; import Navigation from "./components/Navigation"; import HeaderLogo from "./components/HeaderLogo"; import ExtraContent from "./components/ExtraContent"; import { Discord, Github } from "./components/Social"; const SITE_ROOT = "https://hydroroll.retrofor.space"; /** * @type {import('nextra-theme-docs').DocsThemeConfig} */ const theme = { sidebar: { defaultMenuCollapseLevel: Number.POSITIVE_INFINITY, }, docsRepositoryBase: "https://github.com/retrofor/HydroRoll/blob/main/docs", useNextSeoProps: function SEO() { const router = useRouter(); const { frontMatter } = useConfig(); let section = "HydroRoll"; if (router?.pathname.startsWith("/AI")) { section = "HydroRollAI"; } if (router?.pathname.startsWith("/TRPG")) { section = "HydroRollTRPG"; } const defaultTitle = frontMatter.overrideTitle || section; return { description: frontMatter.description, defaultTitle, titleTemplate: `%s – ${section}`, }; }, gitTimestamp({ timestamp }) { // eslint-disable-next-line react-hooks/rules-of-hooks const [dateString, setDateString] = useState(timestamp.toISOString()); // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { try { setDateString( timestamp.toLocaleDateString(navigator.language, { day: "numeric", month: "long", year: "numeric", }) ); } catch (e) { // Ignore errors here; they get the ISO string. // At least one person out there has manually misconfigured navigator.language. } }, [timestamp]); return <>Last updated on {dateString}; }, unstable_flexsearch: true, unstable_staticImage: true, toc: { float: true, extraContent: ExtraContent, }, font: false, feedback: { link: "Question? Give us feedback →", }, logo: HeaderLogo, logoLink: false, head: function Head() { const router = useRouter(); const { systemTheme = "dark" } = useTheme(); const { frontMatter } = useConfig(); const fullUrl = router.asPath === "/" ? SITE_ROOT : `${SITE_ROOT}${router.asPath}`; const asPath = router.asPath; let ogUrl; if (asPath === "/") { ogUrl = `${SITE_ROOT}/api/og`; } else if (frontMatter?.ogImage) { ogUrl = `${SITE_ROOT}${frontMatter.ogImage}`; } else { const type = asPath.startsWith("/AI") ? "AI" : asPath.startsWith("/TRPG") ? "TRPG" : ""; const title = frontMatter.title ? `&title=${encodeURIComponent(frontMatter.title)}` : ""; ogUrl = `${SITE_ROOT}/api/og?type=${type}${title}`; } return ( <> ); }, editLink: { text: "Edit this page on GitHub", }, navbar: { component: Navigation, extraContent: ( <> ), }, search: { placeholder: "Search documentation…", }, footer: { component: Footer, }, nextThemes: { defaultTheme: "dark", }, }; export default theme;