vueless 0.0.500 → 0.0.501

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ import { nextTick } from "process";
2
+ import { DARK_MODE_SELECTOR } from "../constants.js";
3
+ import { onMounted, ref } from "vue";
4
+
5
+ export function useDarkMode() {
6
+ const isDarkMode = ref(false);
7
+
8
+ onMounted(() => {
9
+ nextTick(() => {
10
+ const isDarkModeClass = document.documentElement.classList.contains(DARK_MODE_SELECTOR);
11
+ const isDarkModeCache = Boolean(localStorage.getItem(DARK_MODE_SELECTOR));
12
+
13
+ isDarkMode.value = isDarkModeCache || isDarkModeClass;
14
+
15
+ window.addEventListener("darkModeChange", ((event: CustomEvent) => {
16
+ isDarkMode.value = Boolean(event.detail);
17
+ }) as EventListener);
18
+ });
19
+ });
20
+
21
+ return { isDarkMode };
22
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vueless",
3
- "version": "0.0.500",
3
+ "version": "0.0.501",
4
4
  "license": "MIT",
5
5
  "description": "Vue Styleless UI Component Library, powered by Tailwind CSS.",
6
6
  "keywords": [
package/utils/theme.ts CHANGED
@@ -41,10 +41,10 @@ export function themeInit() {
41
41
 
42
42
  const prefersColorSchemeDark = window.matchMedia("(prefers-color-scheme: dark)");
43
43
 
44
- setTheme({ systemDarkMode: prefersColorSchemeDark.matches });
44
+ setTheme({ systemDarkMode: prefersColorSchemeDark.matches, darkMode: vuelessConfig.darkMode });
45
45
 
46
46
  prefersColorSchemeDark.addEventListener("change", (event) =>
47
- setTheme({ systemDarkMode: event.matches }),
47
+ setTheme({ systemDarkMode: event.matches, darkMode: vuelessConfig.darkMode }),
48
48
  );
49
49
  }
50
50
 
@@ -139,36 +139,15 @@ export function setTheme(config: InternalThemeConfig = {}) {
139
139
  return rootVariables;
140
140
  }
141
141
 
142
- // todo: need to be reactive same like loader state
143
- export function getDarkMode() {
144
- let isDarkMode = undefined;
145
- let storedDarkMode = null;
146
-
147
- if (isCSR) {
148
- storedDarkMode = localStorage.getItem(DARK_MODE_SELECTOR);
149
- }
150
-
151
- if (storedDarkMode !== null) {
152
- isDarkMode = !!Number(storedDarkMode);
153
- }
154
-
155
- return isDarkMode;
156
- }
157
-
158
142
  function setDarkMode(config: InternalThemeConfig) {
159
143
  config?.darkMode === undefined
160
144
  ? isCSR && localStorage.removeItem(DARK_MODE_SELECTOR)
161
145
  : isCSR && localStorage.setItem(DARK_MODE_SELECTOR, Number(config?.darkMode).toString());
162
146
 
163
147
  let storedDarkMode = null;
164
- let darkModeAsClass = null;
165
148
 
166
149
  if (isCSR) {
167
- const classList = document.documentElement.classList;
168
-
169
150
  storedDarkMode = localStorage.getItem(DARK_MODE_SELECTOR);
170
- darkModeAsClass = classList.contains(DARK_MODE_SELECTOR) ? true : null;
171
- darkModeAsClass = classList.contains(LIGHT_MODE_SELECTOR) ? false : null;
172
151
  }
173
152
 
174
153
  let isDarkMode = !!(config?.darkMode ?? vuelessConfig.darkMode ?? config?.systemDarkMode);
@@ -177,11 +156,9 @@ function setDarkMode(config: InternalThemeConfig) {
177
156
  isDarkMode = !!Number(storedDarkMode);
178
157
  }
179
158
 
180
- if (darkModeAsClass !== null) {
181
- isDarkMode = darkModeAsClass;
182
- }
183
-
184
159
  if (isCSR) {
160
+ const darkModeChange = new CustomEvent("darkModeChange", { detail: isDarkMode });
161
+
185
162
  if (isDarkMode) {
186
163
  document.documentElement.classList.remove(LIGHT_MODE_SELECTOR);
187
164
  document.documentElement.classList.add(DARK_MODE_SELECTOR);
@@ -189,6 +166,8 @@ function setDarkMode(config: InternalThemeConfig) {
189
166
  document.documentElement.classList.remove(DARK_MODE_SELECTOR);
190
167
  document.documentElement.classList.add(LIGHT_MODE_SELECTOR);
191
168
  }
169
+
170
+ window.dispatchEvent(darkModeChange);
192
171
  }
193
172
 
194
173
  return isDarkMode;
package/web-types.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "framework": "vue",
3
3
  "name": "vueless",
4
- "version": "0.0.500",
4
+ "version": "0.0.501",
5
5
  "contributions": {
6
6
  "html": {
7
7
  "description-markup": "markdown",