UNPKG

starlight-view-modes

Version:

Starlight plugin adding view mode capabilities to your documentation website.

98 lines (90 loc) 2.91 kB
/// <reference path="./locals.d.ts" /> import type { StarlightPlugin } from "@astrojs/starlight/types"; import { type StarlightViewModesConfig, type StarlightViewModesUserConfig, validateConfig, } from "./libs/config"; import { overrideStarlightComponent } from "./libs/starlight"; import { vitePluginStarlightViewModesConfig } from "./libs/vite"; import { Translations } from "./translations"; export type { StarlightViewModesConfig, StarlightViewModesUserConfig }; export default function starlightViewModes( userConfig?: StarlightViewModesUserConfig ): StarlightPlugin { const config = validateConfig(userConfig); return { name: "starlight-view-modes", hooks: { "i18n:setup"({ injectTranslations }) { injectTranslations(Translations); }, "config:setup"({ addIntegration, addRouteMiddleware, config: starlightConfig, astroConfig, logger, updateConfig, }) { addRouteMiddleware({ entrypoint: "starlight-view-modes/middleware", order: "pre", }); updateConfig({ components: { ...starlightConfig.components, ...overrideStarlightComponent( starlightConfig.components, logger, "PageTitle", "PageTitle" ), ...overrideStarlightComponent( starlightConfig.components, logger, "Search" /* Override because should stay in zen-mode for all search results */, "Search" ), ...overrideStarlightComponent( starlightConfig.components, logger, "SocialIcons", "SocialIcons" ), ...overrideStarlightComponent( starlightConfig.components, logger, "TableOfContents", "TableOfContents" ), }, }); addIntegration({ name: "starlight-view-modes-integration", hooks: { "astro:config:setup": ({ injectRoute, updateConfig }) => { updateConfig({ vite: { plugins: [ vitePluginStarlightViewModesConfig(config, { base: astroConfig.base, trailingSlash: astroConfig.trailingSlash, }), ], }, }); if (config.zenModeSettings.enabled) { injectRoute({ entrypoint: `starlight-view-modes/routes/ZenMode.astro`, pattern: "[...locale]/zen-mode/[...path]", // trailingSlash: "never" not supported if path is undefined (#67) prerender: true, }); } }, }, }); }, }, }; }