mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 20:18:14 +00:00
46 lines
1.6 KiB
JavaScript
46 lines
1.6 KiB
JavaScript
(() => {
|
|
const systemTheme = window.matchMedia('(prefers-color-scheme: light)');
|
|
let mode = 'system';
|
|
let palette = 'eucalyptus';
|
|
|
|
const normalize = value => ['system', 'dark', 'light'].includes(value) ? value : 'system';
|
|
const normalizePalette = value => ['eucalyptus', 'cyber', 'graphite'].includes(value) ? value : 'eucalyptus';
|
|
|
|
const apply = value => {
|
|
mode = normalize(value);
|
|
const light = mode === 'light' || (mode === 'system' && systemTheme.matches);
|
|
document.documentElement.classList.toggle('theme-light', light);
|
|
document.documentElement.dataset.theme = light ? 'light' : 'dark';
|
|
document.documentElement.style.colorScheme = light ? 'light' : 'dark';
|
|
};
|
|
|
|
const applyPalette = value => {
|
|
palette = normalizePalette(value);
|
|
document.documentElement.dataset.palette = palette;
|
|
};
|
|
|
|
apply('system');
|
|
applyPalette('eucalyptus');
|
|
window.koalaTheme = {
|
|
getMode: () => mode,
|
|
setMode: apply,
|
|
getPalette: () => palette,
|
|
setPalette: applyPalette
|
|
};
|
|
|
|
systemTheme.addEventListener('change', () => {
|
|
if (mode === 'system') apply('system');
|
|
});
|
|
|
|
if (!globalThis.chrome?.storage?.local) return;
|
|
chrome.storage.local.get(['themeMode', 'themePalette'], data => {
|
|
apply(data.themeMode);
|
|
applyPalette(data.themePalette);
|
|
});
|
|
chrome.storage.onChanged.addListener((changes, area) => {
|
|
if (area !== 'local') return;
|
|
if (changes.themeMode) apply(changes.themeMode.newValue);
|
|
if (changes.themePalette) applyPalette(changes.themePalette.newValue);
|
|
});
|
|
})();
|