Files
authentik/packages/docusaurus-config/lib/theme.js
Teffen Ellis caa5617ce6 website: Touch up shared config. (#15153)
* website: Touch up shared config.

* website: Update deps. Fix issues surrounding cross-package formatting.
2025-06-19 14:11:55 -04:00

106 lines
2.8 KiB
JavaScript

/**
* @file Docusaurus theme configuration for the authentik website.
*
* @import { UserThemeConfig as UserThemeConfigCommon } from "@docusaurus/theme-common";
* @import { UserThemeConfig as UserThemeConfigAlgolia } from "@docusaurus/theme-search-algolia";
* @import { NavbarItemOverrides } from "./navbar.js"
*/
import { deepmerge } from "deepmerge-ts";
import { themes as prismThemes } from "prism-react-renderer";
import { createNavbarItems } from "./navbar.js";
//#region Types
/**
* @typedef {Object} UserThemeConfigExtra
* @property {Partial<NavbarItemOverrides>} [navbarReplacements] The replacements for the navbar.
*
*/
/**
* Combined theme configuration for Docusaurus, Algolia, and our own configuration.
*
* @typedef {UserThemeConfigCommon & UserThemeConfigAlgolia} UserThemeConfig
*
*/
//#endregion
//#region Functions
/**
* @returns {string} The copyright string.
*/
export function formatCopyright() {
return `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`;
}
/**
* Creates a Prisma configuration for Docusaurus.
*
* @param {Partial<UserThemeConfigCommon['prism']>} overrides - Overrides for the default Prisma configuration.
* @returns {UserThemeConfigCommon['prism']}
*/
export function createPrismConfig(overrides = {}) {
/**
* @type {UserThemeConfigCommon['prism']}
*/
const prismConfig = {
theme: prismThemes.oneLight,
darkTheme: prismThemes.oneDark,
additionalLanguages: [
// ---
"apacheconf",
"diff",
"http",
"json",
"nginx",
"python",
"bash",
],
};
return deepmerge(prismConfig, overrides);
}
/**
* Creates a theme configuration for Docusaurus.
*
* @param {Partial<UserThemeConfig & UserThemeConfigExtra>} overrides - Overrides for the default theme configuration.
* @returns {UserThemeConfig}
*/
export function createThemeConfig({ prism, navbarReplacements, ...overrides } = {}) {
/**
* @type {UserThemeConfig}
*/
const themeConfig = {
image: "img/social.png",
tableOfContents: {
minHeadingLevel: 2,
maxHeadingLevel: 3,
},
colorMode: {
respectPrefersColorScheme: true,
},
algolia: {
appId: "36ROD0O0FV",
apiKey: "727db511300ca9aec5425645bbbddfb5",
},
footer: {
copyright: `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`,
},
navbar: {
logo: {
alt: "authentik logo",
src: "img/icon_left_brand.svg",
},
items: createNavbarItems(navbarReplacements),
},
prism: createPrismConfig(prism),
};
return deepmerge(themeConfig, overrides);
}