From 279d79f96e4ef86992d1d3c7f8433a7c909ad096 Mon Sep 17 00:00:00 2001 From: Marco Walz Date: Tue, 28 Apr 2026 14:35:10 +0200 Subject: [PATCH] infra(theme): add mobile theme toggle and default to system color scheme - Add custom Header.astro that renders ThemeSelect on mobile (outside the sl-hidden md:sl-flex right-group, which is desktop-only) - Default theme to prefers-color-scheme instead of hardcoded light in both ThemeProvider.astro and ThemeSelect.astro; stored preference still takes precedence on return visits --- astro.config.mjs | 1 + src/components/Header.astro | 91 ++++++++++++++++++++++++++++++ src/components/ThemeProvider.astro | 5 +- src/components/ThemeSelect.astro | 10 ++-- 4 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 src/components/Header.astro diff --git a/astro.config.mjs b/astro.config.mjs index 6c348667..7d0a64f8 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -26,6 +26,7 @@ export default defineConfig({ components: { EditLink: "./src/components/EditLink.astro", Footer: "./src/components/Footer.astro", + Header: "./src/components/Header.astro", Hero: "./src/components/Hero.astro", SiteTitle: "./src/components/SiteTitle.astro", ThemeProvider: "./src/components/ThemeProvider.astro", diff --git a/src/components/Header.astro b/src/components/Header.astro new file mode 100644 index 00000000..01733b33 --- /dev/null +++ b/src/components/Header.astro @@ -0,0 +1,91 @@ +--- +import config from 'virtual:starlight/user-config'; + +import LanguageSelect from 'virtual:starlight/components/LanguageSelect'; +import Search from 'virtual:starlight/components/Search'; +import SiteTitle from 'virtual:starlight/components/SiteTitle'; +import SocialIcons from 'virtual:starlight/components/SocialIcons'; +import ThemeSelect from 'virtual:starlight/components/ThemeSelect'; + +const shouldRenderSearch = + config.pagefind || config.components.Search !== '@astrojs/starlight/components/Search.astro'; +--- + +
+
+ +
+
+ {shouldRenderSearch && } +
+ {/* Mobile-only theme toggle — desktop uses the one inside right-group */} +
+ +
+
+ + + +
+
+ + diff --git a/src/components/ThemeProvider.astro b/src/components/ThemeProvider.astro index 867ec14c..7fddc1ae 100644 --- a/src/components/ThemeProvider.astro +++ b/src/components/ThemeProvider.astro @@ -1,12 +1,13 @@ --- --- -{/* Inlined to avoid FOUC. Defaults to light; dark is opt-in. Never auto-switches on prefers-color-scheme. */} +{/* Inlined to avoid FOUC. Defaults to system prefers-color-scheme; overridden by stored user preference. */}