import type { FunctionalComponent } from 'preact'; import { h, Fragment } from 'preact'; import { useState, useEffect } from 'preact/hooks'; const themes = ['system', 'light', 'dark']; const icons = [ , , , ]; const ThemeToggle: FunctionalComponent = () => { const [theme, setTheme] = useState(themes[0]); useEffect(() => { const user = localStorage.getItem('theme'); if (!user) return; setTheme(user); }, []); useEffect(() => { const root = document.documentElement; if (theme === 'system') { localStorage.removeItem('theme'); if (window.matchMedia('(prefers-color-scheme: dark)').matches) { root.classList.add('theme-dark'); } else { root.classList.remove('theme-dark'); } } else { localStorage.setItem('theme', theme); if (theme === 'light') { root.classList.remove('theme-dark'); } else { root.classList.add('theme-dark'); } } }, [theme]); return (
{themes.map((t, i) => { const icon = icons[i]; const checked = t === theme; return ( ); })}
); }; export default ThemeToggle; /option> Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/smoke/astro.build-main (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2023-07-11Filter out astro from `peerDependencies` in `astro add` (#7620)Gravatar Chris Swithinbank 2-1/+7
2023-07-11[ci] formatGravatar bluwy 1-1/+1
2023-07-11Refactor simple CLI commands (#7619)Gravatar Bjorn Lu 12-115/+123
2023-07-10fix: `astro info` command fallback for package manager (#7618)Gravatar Emanuele Stoppa 2-1/+7
2023-07-10Add CLI startup speed benchmark (#7617)Gravatar Bjorn Lu 5-11/+95
2023-07-10[ci] formatGravatar bluwy 1-1/+1