north-star / mobile / files / src / platform / darkmode.ts
Branch mobile · default branch · all branches
darkmode.ts
32796e53 2026-03-16 Pavel Safronov | 1 | import { PUBLIC_SETTINGS } from '../public_settings'; |
| 2 | ||
e790982a 2026-03-16 Pavel Safronov | 3 | export const DARK_MODE_STORAGE_KEY = 'friend-compass-dark-mode'; |
36d64b37 2026-03-15 Pavel Safronov | 4 | |
b4e7f682 2026-03-16 Pavel Safronov | 5 | export const initDarkMode = (toggleButton: HTMLElement | null) => { |
| 6 | const applyDarkMode = (dark: boolean) => { | |
36d64b37 2026-03-15 Pavel Safronov | 7 | document.body.classList.toggle('dark', dark); |
32796e53 2026-03-16 Pavel Safronov | 8 | 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 Safronov | 13 | 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 | }; |