2024-03-01 17:21:45 +00:00
|
|
|
import type { ComputedRef } from "vue";
|
|
|
|
import type { DaisyTheme } from "~~/lib/data/themes";
|
2022-10-07 02:54:09 +00:00
|
|
|
|
|
|
|
export interface UseTheme {
|
|
|
|
theme: ComputedRef<DaisyTheme>;
|
|
|
|
setTheme: (theme: DaisyTheme) => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
const themeRef = ref<DaisyTheme>("garden");
|
|
|
|
|
|
|
|
export function useTheme(): UseTheme {
|
|
|
|
const preferences = useViewPreferences();
|
|
|
|
themeRef.value = preferences.value.theme;
|
|
|
|
|
|
|
|
const setTheme = (newTheme: DaisyTheme) => {
|
|
|
|
preferences.value.theme = newTheme;
|
|
|
|
|
|
|
|
if (htmlEl) {
|
2023-02-18 06:41:01 +00:00
|
|
|
htmlEl.value?.setAttribute("data-theme", newTheme);
|
2022-10-07 02:54:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
themeRef.value = newTheme;
|
|
|
|
};
|
|
|
|
|
2023-02-18 06:41:01 +00:00
|
|
|
const htmlEl = ref<HTMLElement | null>();
|
2022-10-07 02:54:09 +00:00
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
if (htmlEl.value) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
htmlEl.value = document.querySelector("html");
|
|
|
|
});
|
|
|
|
|
|
|
|
const theme = computed(() => {
|
|
|
|
return themeRef.value;
|
|
|
|
});
|
|
|
|
|
|
|
|
return { theme, setTheme };
|
|
|
|
}
|
2024-02-29 18:58:26 +00:00
|
|
|
|
|
|
|
export function useIsDark() {
|
|
|
|
const theme = useTheme();
|
|
|
|
|
|
|
|
const darkthemes = [
|
|
|
|
"synthwave",
|
|
|
|
"retro",
|
|
|
|
"cyberpunk",
|
|
|
|
"valentine",
|
|
|
|
"halloween",
|
|
|
|
"forest",
|
|
|
|
"aqua",
|
|
|
|
"black",
|
|
|
|
"luxury",
|
|
|
|
"dracula",
|
|
|
|
"business",
|
|
|
|
"night",
|
|
|
|
"coffee",
|
|
|
|
];
|
|
|
|
|
|
|
|
return computed(() => {
|
|
|
|
return darkthemes.includes(theme.theme.value);
|
|
|
|
});
|
|
|
|
}
|