dark-reader-aware-theme-toggle-button
Version:
Dark mode toggle button that detects the Dark Reader extension and steps aside
2 lines • 2.2 kB
JavaScript
;(()=>{function h(e=document){let t=e.documentElement;return t.hasAttribute("data-darkreader-scheme")||t.hasAttribute("data-darkreader-mode")||e.querySelector('meta[name="darkreader"]')!=null||e.getElementById("dark-reader-style")!=null}function s(e,t=document){let r=t.documentElement,n=()=>e(h(t));n();let o=new MutationObserver(n);o.observe(r,{attributes:!0,attributeFilter:["data-darkreader-scheme","data-darkreader-mode"]});let a=null;return t.head&&(a=new MutationObserver(n),a.observe(t.head,{childList:!0,subtree:!0})),()=>{o.disconnect(),a?.disconnect()}}function v(e){return e.defaultView?.localStorage??null}function y(e){return e.defaultView?.matchMedia("(prefers-color-scheme: dark)").matches??!1}function l(e={},t=document){let{storageKey:r="theme",respectSystemPreference:n=!1}=e,o=v(t)?.getItem(r);return o==="dark"||o==="light"?o:n&&y(t)?"dark":"light"}function m(e,t={},r=document){let{storageKey:n="theme",attribute:o="data-theme",darkValue:a="dark"}=t,u=r.documentElement;e==="dark"?u.setAttribute(o,a):u.removeAttribute(o),v(r)?.setItem(n,e)}function c(e={},t=document){let{attribute:r="data-theme",darkValue:n="dark"}=e;return t.documentElement.getAttribute(r)===n?"dark":"light"}function d(e={},t=document){let r=c(e,t)==="dark"?"light":"dark";return m(r,e,t),r}function f(e={},t=document){let r=l(e,t);return m(r,e,t),r}function D(e,t){return typeof e=="string"?t.querySelector(e):e}function T(e,t=document){let r=D(e.button,t);if(!r)throw new Error("mountThemeToggleButton: button element not found");let n=e.label?D(e.label,t):null,o=e.labels??{light:"Dark",dark:"Light"},a=e.hideWhenDarkReaderActive!==!1,u=i=>{let b=i==="dark"?o.dark:o.light;n?n.textContent=b:r.textContent=b},g=l(e,t);m(g,e,t),u(g),e.onThemeChange?.(g);let k=()=>{let i=d(e,t);u(i),e.onThemeChange?.(i)};r.addEventListener("click",k);let p;return a&&(p=s(i=>{r.style.visibility=i?"hidden":""},t)),()=>{r.removeEventListener("click",k),p?.()}}var x={isDarkReaderActive:h,watchDarkReader:s,getTheme:l,setTheme:m,getCurrentTheme:c,toggleTheme:d,initThemeEarly:f,mount:T,mountThemeToggleButton:T},I=x;typeof window<"u"&&(window.DarkReaderAwareThemeToggle=x);})();
//# sourceMappingURL=global.js.map