UNPKG

flixburst-theme

Version:

A flexible and extensible package for theme management

121 lines (119 loc) 4.58 kB
"use strict"; "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { applyThemeToDOM: () => applyThemeToDOM, getSystemThemePreference: () => getSystemThemePreference, initializeTheme: () => initializeTheme, setTheme: () => setTheme, setupThemeManagement: () => setupThemeManagement, shouldUseDarkMode: () => shouldUseDarkMode, subscribeToSystemTheme: () => subscribeToSystemTheme }); module.exports = __toCommonJS(index_exports); // src/utils/dom.ts var getSystemThemePreference = /* @__PURE__ */ __name(() => { return window.matchMedia("(prefers-color-scheme: dark)").matches; }, "getSystemThemePreference"); var shouldUseDarkMode = /* @__PURE__ */ __name((theme) => { return theme === "dark" || theme === "system" && getSystemThemePreference(); }, "shouldUseDarkMode"); var applyThemeToDOM = /* @__PURE__ */ __name((isDark) => { const html = document.documentElement; if (isDark) { html.classList.add("dark"); html.setAttribute("data-theme", "dark"); } else { html.classList.remove("dark"); html.setAttribute("data-theme", "light"); } }, "applyThemeToDOM"); var setTheme = /* @__PURE__ */ __name((theme) => { localStorage.setItem("theme", theme); const isDark = shouldUseDarkMode(theme); applyThemeToDOM(isDark); }, "setTheme"); var initializeTheme = /* @__PURE__ */ __name(() => { const savedTheme = localStorage.getItem("theme"); const theme = savedTheme || "system"; const isDark = shouldUseDarkMode(theme); applyThemeToDOM(isDark); return theme; }, "initializeTheme"); var subscribeToSystemTheme = /* @__PURE__ */ __name((callback) => { const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)"); const handler = /* @__PURE__ */ __name((e) => { callback(e.matches); const theme = localStorage.getItem("theme") || "system"; if (theme === "system") { applyThemeToDOM(e.matches); } }, "handler"); mediaQuery.addEventListener("change", handler); return () => mediaQuery.removeEventListener("change", handler); }, "subscribeToSystemTheme"); var setupThemeManagement = /* @__PURE__ */ __name((params) => { const { setTheme: setTheme2, initializeTheme: initializeTheme2, onThemeChange, onSystemThemeChange } = params; initializeTheme2(); const cleanupSystemTheme = subscribeToSystemTheme((isDark) => { onSystemThemeChange?.(isDark); }); const handleThemeToggle = /* @__PURE__ */ __name((event) => { if (event.detail) { setTheme2(event.detail); onThemeChange?.(event.detail); } else { const storedTheme = localStorage.getItem("theme"); const theme = storedTheme || "system"; setTheme2(theme); onThemeChange?.(theme); } }, "handleThemeToggle"); const handleStorageChange = /* @__PURE__ */ __name((event) => { if (event.key === "theme" && event.newValue) { const newTheme = event.newValue; setTheme2(newTheme); onThemeChange?.(newTheme); } }, "handleStorageChange"); window.addEventListener("theme-toggle", handleThemeToggle); window.addEventListener("storage", handleStorageChange); const cleanupEventListeners = /* @__PURE__ */ __name(() => { window.removeEventListener("theme-toggle", handleThemeToggle); window.removeEventListener("storage", handleStorageChange); }, "cleanupEventListeners"); return () => { cleanupSystemTheme(); cleanupEventListeners(); }; }, "setupThemeManagement"); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { applyThemeToDOM, getSystemThemePreference, initializeTheme, setTheme, setupThemeManagement, shouldUseDarkMode, subscribeToSystemTheme }); //# sourceMappingURL=index.js.map