blob: e5078bc41fe8cba8010d1bba4719e6b065771adc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com>
// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1
import { ref, watch } from "vue";
export const supportedLocales = ["en-US", "de-DE", "ru-RU"] as const;
export type Locale = (typeof supportedLocales)[number];
export type Theme = "dark" | "light";
function storedLocale(): Locale {
const stored = localStorage.getItem("vxs-locale");
return supportedLocales.find((supported) => supported === stored) ?? "en-US";
}
function storedTheme(): Theme {
return localStorage.getItem("vxs-theme") === "light" ? "light" : "dark";
}
export const locale = ref<Locale>(storedLocale());
export const theme = ref<Theme>(storedTheme());
watch(
locale,
(value) => {
document.documentElement.lang = value;
localStorage.setItem("vxs-locale", value);
},
{ immediate: true },
);
watch(
theme,
(value) => {
document.documentElement.dataset.theme = value;
localStorage.setItem("vxs-theme", value);
},
{ immediate: true },
);
|