Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/frontend/src/preferences.ts
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 },
);