@aotearoan/neon
Version:
Neon is a lightweight design library of Vue 3 components with minimal dependencies.
69 lines (68 loc) • 2.6 kB
JavaScript
var h = Object.defineProperty;
var s = (c, a, t) => a in c ? h(c, a, { enumerable: !0, configurable: !0, writable: !0, value: t }) : c[a] = t;
var r = (c, a, t) => (s(c, typeof a != "symbol" ? a + "" : a, t), t);
import { NeonMode as n } from "../enums/NeonMode.es.js";
const e = class e {
/**
* Get the current mode.
*
* @returns The current user light or dark mode.
*/
static getMode() {
return e.mode;
}
/**
* Set the initial mode.
*
* @param defaultMode The mode to set. If no mode is passed in the user preferences are used.
*/
static init(a) {
if (a)
e.defaultMode = a, e.mode = e.defaultMode;
else {
const t = window.matchMedia("(prefers-color-scheme: dark)").matches, i = window.matchMedia("(prefers-color-scheme: light)").matches;
t ? e.mode = n.Dark : i ? e.mode = n.Light : e.mode = e.defaultMode;
}
}
/**
* Add a callback to listen to mode changes made by the user.
*
* @param key The unique key for the listener.
* @param callback The callback function.
*/
static addListener(a, t) {
window.matchMedia && (Object.keys(e.callbacks).length === 0 && (window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e.onDarkChange), window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", e.onLightChange), window.matchMedia("(prefers-color-scheme: no-preference)").addEventListener("change", e.onNoPreferenceChange)), e.callbacks[a] = t, t(e.mode || e.defaultMode));
}
/**
* Remove a callback listener.
*
* @param key The unique key for the listener.
*/
static removeListener(a) {
delete e.callbacks[a], Object.keys(e.callbacks).length === 0 && window.matchMedia && (window.matchMedia("(prefers-color-scheme: dark)").removeEventListener("change", e.onDarkChange), window.matchMedia("(prefers-color-scheme: light)").removeEventListener("change", e.onLightChange), window.matchMedia("(prefers-color-scheme: no-preference)").removeEventListener("change", e.onNoPreferenceChange));
}
static getCallbacks() {
return e.callbacks;
}
static onDarkChange(a) {
e.onChange(a, n.Dark);
}
static onLightChange(a) {
e.onChange(a, n.Light);
}
static onNoPreferenceChange(a) {
e.onChange(a, e.defaultMode);
}
static onChange(a, t) {
a.matches && e.handleChange(t);
}
static handleChange(a) {
Object.values(e.callbacks).forEach((t) => t(a));
}
};
r(e, "callbacks", {}), r(e, "defaultMode", n.Dark), r(e, "mode", null);
let o = e;
export {
o as NeonModeUtils
};
//# sourceMappingURL=NeonModeUtils.es.js.map