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://turbo.build";
/**
* @type {import('nextra-theme-docs').DocsThemeConfig}
*/
const theme = {
sidebar: {
defaultMenuCollapseLevel: Number.POSITIVE_INFINITY,
},
docsRepositoryBase: "https://github.com/vercel/turbo/blob/main/docs",
useNextSeoProps: function SEO() {
const router = useRouter();
const { frontMatter } = useConfig();
let section = "Turbo";
if (router?.pathname.startsWith("/pack")) {
section = "Turbopack";
}
if (router?.pathname.startsWith("/repo")) {
section = "Turborepo";
}
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("/repo")
? "repo"
: asPath.startsWith("/pack")
? "pack"
: "";
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;