feat: add auto theme mode

This commit is contained in:
Cory Dransfeldt 2024-10-26 18:16:52 -07:00
parent ab2d732ec5
commit 50640d0590
No known key found for this signature in database
6 changed files with 39 additions and 15 deletions

View file

@ -28,6 +28,23 @@ theme-toggle {
stroke: var(--moon);
}
& > .auto svg {
& path:nth-of-type(3) {
stroke: var(--moon);
}
& path:nth-of-type(2),
& path:nth-of-type(4),
& path:nth-of-type(5),
& path:nth-of-type(6) {
stroke: var(--sun);
}
& path:nth-of-type(7) {
stroke: var(--twilight);
}
}
.light,
.dark {
display: none;

View file

@ -51,6 +51,7 @@
--moon: #6a5acd;
--sun: #ffa500;
--twilight: #9e7485;
--article: light-dark(#007272, #00ffff);
--about: light-dark(#e4513a, #ff967d);

View file

@ -1,7 +1,10 @@
<script type="module" src="/assets/scripts/components/theme-toggle.js?v={% appVersion %}" crossorigin="anonymous"></script>
<span class="client-side">
<theme-toggle>
<button aria-label="Light and dark theme toggle" class="theme-toggle">
<theme-toggle mode="control">
<button aria-label="Auto, light, dark theme control" class="theme-toggle">
<span class="auto">
{% tablericon "sun-moon" %}
</span>
<span class="light">
{% tablericon "sun" %}
</span>

View file

@ -49,12 +49,15 @@
<body>
<script>
(() => {
const currentTheme = sessionStorage.getItem('theme');
const currentTheme = sessionStorage.getItem("theme") || "auto";
const metaColorScheme = document.querySelector('meta[name="color-scheme"]');
const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)').matches;
const themeToSet = currentTheme || (prefersDarkScheme ? 'dark' : 'light');
if (!currentTheme) sessionStorage.setItem('theme', themeToSet);
metaColorScheme.setAttribute('content', themeToSet);
if (currentTheme === "auto") {
metaColorScheme.setAttribute("content", "light dark");
document.documentElement.style.colorScheme = "";
} else {
metaColorScheme.setAttribute("content", currentTheme);
document.documentElement.style.colorScheme = currentTheme;
}
})();
</script>
<div class="main-wrapper">