v12-ui
Version:
A React component library with a focus on utility-first design and accessibility.
32 lines (31 loc) • 1.1 kB
JavaScript
import { useState as u, useEffect as c } from "react";
const d = ["dark", "light", "transparent"];
function m(t) {
const [s, o] = u(() => {
if (t) return t;
if (typeof window > "u") return "dark";
const e = document.documentElement.getAttribute("data-theme");
return e && d.includes(e) ? e : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
});
return c(() => {
t && o(t);
const e = window.matchMedia("(prefers-color-scheme: dark)"), n = (r) => {
o(r.matches ? "dark" : "light");
};
return e.addEventListener("change", n), () => {
e.removeEventListener("change", n);
};
}, [t]), c(() => {
const e = new MutationObserver((n) => {
for (const r of n) {
if (r.type !== "attributes" || r.attributeName !== "data-theme") return;
const i = document.documentElement.getAttribute("data-theme");
i && d.includes(i) && o(i);
}
});
return e.observe(document.documentElement, { attributes: !0 }), () => e.disconnect();
}, []), { theme: s };
}
export {
m as useDataTheme
};