xtreme-ui
Version:
Collection of reusable components that can be used in web projects
40 lines (32 loc) • 1.74 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../components/context/Theme/types.cjs"),e=require("../constants/theme.cjs"),a=({scheme:t,color:o,defScheme:r=s.defaultScheme,defColor:l=e.defaultColorPreset}={})=>{const m=t!=null?`'${t}'`:"null",n=o?JSON.stringify(o):"null",c=JSON.stringify(l);return`(function() {
try {
let storedScheme = localStorage.getItem('${e.STORAGE.themeScheme}');
const themeScheme = ${m} ?? storedScheme ?? '${r}';
const themeColorRaw = localStorage.getItem('${e.STORAGE.themeColor}');
let { h, s, l } = ${c};
const preferredColor = ${n};
if (preferredColor) {
({ h, s, l } = preferredColor);
} else {
try {
const parsed = JSON.parse(themeColorRaw);
if (parsed && typeof parsed.h === 'number' && typeof parsed.s === 'number' && typeof parsed.l === 'number') {
({ h, s, l } = parsed);
}
} catch {}
}
document.documentElement.setAttribute('${e.STORAGE.themeSchemeAttr}', themeScheme);
const style = document.getElementById('${e.STORAGE.themeColor}') ||
document.head.appendChild(Object.assign(document.createElement('style'), { id: '${e.STORAGE.themeColor}' }));
style.textContent = \`:root{ --H: \${h}; --S: \${s}%; --L: \${l}% }\`;
let meta = document.head.querySelector('meta[name="theme-color"]');
if (!meta) {
meta = document.createElement('meta');
meta.name = 'theme-color';
document.head.appendChild(meta);
}
meta.content = \`hsl(\${h},\${s}%,\${l}%)\`;
localStorage.setItem('${e.STORAGE.themeScheme}', themeScheme);
localStorage.setItem('${e.STORAGE.themeColor}', JSON.stringify({ h, s, l }));
} catch {}
})();`};exports.themeController=a;