vueless 0.0.499 → 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.
- package/composables/useDarkMode.ts +22 -0
- package/package.json +1 -1
- package/ui.form-calendar/UCalendar.vue +8 -2
- package/utils/theme.ts +6 -27
- package/web-types.json +1 -1
|
@@ -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
|
@@ -340,7 +340,7 @@ const unwatchInit = watch(
|
|
|
340
340
|
() => {
|
|
341
341
|
if (isInit) unwatchInit();
|
|
342
342
|
|
|
343
|
-
if (selectedDate.value && isTimepickerEnabled.value && isInputRefs.value) {
|
|
343
|
+
if (selectedDate.value && isTimepickerEnabled.value && isInputRefs.value && props.timepicker) {
|
|
344
344
|
hoursRef.value!.value = String(selectedDate.value.getHours()).padStart(2, "0");
|
|
345
345
|
minutesRef.value!.value = String(selectedDate.value.getMinutes()).padStart(2, "0");
|
|
346
346
|
secondsRef.value!.value = String(selectedDate.value.getSeconds()).padStart(2, "0");
|
|
@@ -349,8 +349,14 @@ const unwatchInit = watch(
|
|
|
349
349
|
|
|
350
350
|
isInit = true;
|
|
351
351
|
}
|
|
352
|
+
|
|
353
|
+
if (selectedDate.value) {
|
|
354
|
+
emit("userDateChange", userFormattedDate.value);
|
|
355
|
+
|
|
356
|
+
isInit = true;
|
|
357
|
+
}
|
|
352
358
|
},
|
|
353
|
-
{ deep: true },
|
|
359
|
+
{ deep: true, immediate: true },
|
|
354
360
|
);
|
|
355
361
|
|
|
356
362
|
function getCurrentValueType(value: DateValue): DateValue {
|
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;
|