fuzzyworld

north-star / mobile / files / src / platform / darkmode.ts

Branch mobile · default branch · all branches

darkmode.ts

Blame: the commit that last changed each line · file · history

32796e53 2026-03-16 Pavel Safronov1import { PUBLIC_SETTINGS } from '../public_settings';
2
e790982a 2026-03-16 Pavel Safronov3export const DARK_MODE_STORAGE_KEY = 'friend-compass-dark-mode';
36d64b37 2026-03-15 Pavel Safronov4
b4e7f682 2026-03-16 Pavel Safronov5export const initDarkMode = (toggleButton: HTMLElement | null) => {
6 const applyDarkMode = (dark: boolean) => {
36d64b37 2026-03-15 Pavel Safronov7 document.body.classList.toggle('dark', dark);
32796e53 2026-03-16 Pavel Safronov8 if (toggleButton) {
9 toggleButton.textContent = dark
10 ? PUBLIC_SETTINGS.ui.emojis.darkMode.on
11 : PUBLIC_SETTINGS.ui.emojis.darkMode.off;
12 }
36d64b37 2026-03-15 Pavel Safronov13 localStorage.setItem(DARK_MODE_STORAGE_KEY, dark ? '1' : '0');
14 };
15
16 const storedDarkMode = localStorage.getItem(DARK_MODE_STORAGE_KEY);
17 const prefersDark = storedDarkMode !== null
18 ? storedDarkMode === '1'
19 : window.matchMedia('(prefers-color-scheme: dark)').matches;
20
21 applyDarkMode(prefersDark);
22
23 if (toggleButton) {
24 toggleButton.addEventListener('click', () => {
25 applyDarkMode(!document.body.classList.contains('dark'));
26 });
27 }
28
29 return { applyDarkMode };
30};