From 4838df315931bb883f704ec3e1abe2685f296cdf Mon Sep 17 00:00:00 2001 From: HsiangNianian Date: Sat, 22 Apr 2023 19:52:26 +0800 Subject: 😀 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/theme.config.js | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 docs/theme.config.js (limited to 'docs/theme.config.js') diff --git a/docs/theme.config.js b/docs/theme.config.js new file mode 100644 index 0000000..0704c09 --- /dev/null +++ b/docs/theme.config.js @@ -0,0 +1,178 @@ +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; -- cgit v1.2.3-70-g09d2