diff --git a/frontend/src/app/services/theme.service.spec.ts b/frontend/src/app/services/theme.service.spec.ts index d4c8915..56b6b07 100644 --- a/frontend/src/app/services/theme.service.spec.ts +++ b/frontend/src/app/services/theme.service.spec.ts @@ -3,9 +3,26 @@ import { vi } from 'vitest'; import { ThemeService } from './theme.service'; describe('ThemeService', () => { + beforeEach(() => localStorage.clear()); + + it('defaults to the operating-system preference', () => { + vi.stubGlobal( + 'matchMedia', + vi.fn(() => ({ matches: true, addEventListener: vi.fn() })), + ); + const service = TestBed.inject(ThemeService); + TestBed.tick(); + + expect(service.preference()).toBe('system'); + expect(document.documentElement.dataset['theme']).toBe('dark'); + }); + it('persists explicit and system preferences', () => { const listener = vi.fn(); - vi.stubGlobal('matchMedia', vi.fn(() => ({ matches: true, addEventListener: listener }))); + vi.stubGlobal( + 'matchMedia', + vi.fn(() => ({ matches: true, addEventListener: listener })), + ); localStorage.setItem('lmnp-theme', 'system'); const service = TestBed.inject(ThemeService); TestBed.tick(); diff --git a/frontend/src/app/services/theme.service.ts b/frontend/src/app/services/theme.service.ts index fa2ef6f..3674ff7 100644 --- a/frontend/src/app/services/theme.service.ts +++ b/frontend/src/app/services/theme.service.ts @@ -40,6 +40,6 @@ export class ThemeService { const storedPreference = localStorage.getItem(THEME_STORAGE_KEY); return storedPreference === 'dark' || storedPreference === 'system' ? storedPreference - : 'light'; + : 'system'; } } diff --git a/frontend/src/index.html b/frontend/src/index.html index 00ff979..2cec810 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -1,16 +1,28 @@ +
+ +