Schulportal-Konventionen übernommen: Dark Mode (ThemeToggle), beispieldaten.py + generated.json, kimi.md, mail-server (Postfix-Relay + API), Deploy-Workflow (pscp/plink, npm_default), Screenshots in preview/
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
/** Dark-Mode-Helfer: Klasse auf <html>, Präferenz in localStorage. */
|
||||
|
||||
export const THEME_KEY = 'mp-theme'
|
||||
|
||||
export function initTheme() {
|
||||
let dunkel = false
|
||||
try {
|
||||
const gespeichert = localStorage.getItem(THEME_KEY)
|
||||
dunkel = gespeichert
|
||||
? gespeichert === 'dark'
|
||||
: window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
} catch {
|
||||
dunkel = false
|
||||
}
|
||||
document.documentElement.classList.toggle('dark', dunkel)
|
||||
}
|
||||
|
||||
export function istDunkel(): boolean {
|
||||
return document.documentElement.classList.contains('dark')
|
||||
}
|
||||
|
||||
export function setzeTheme(dunkel: boolean) {
|
||||
document.documentElement.classList.toggle('dark', dunkel)
|
||||
try {
|
||||
localStorage.setItem(THEME_KEY, dunkel ? 'dark' : 'light')
|
||||
} catch {
|
||||
// Speicher nicht verfügbar – Theme gilt nur für diese Sitzung
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user