diff --git a/frontend-modern/src/App.tsx b/frontend-modern/src/App.tsx index 16fe5739e..3c61da123 100644 --- a/frontend-modern/src/App.tsx +++ b/frontend-modern/src/App.tsx @@ -73,13 +73,8 @@ function App() { // Version info const [versionInfo, setVersionInfo] = createSignal(null); - // Dark mode - check localStorage first, only use system preference if never set - const savedDarkMode = localStorage.getItem(STORAGE_KEYS.DARK_MODE); - const [darkMode, setDarkMode] = createSignal( - savedDarkMode !== null - ? savedDarkMode === 'true' - : window.matchMedia('(prefers-color-scheme: dark)').matches - ); + // Dark mode - only apply user preferences after authentication + const [darkMode, setDarkMode] = createSignal(false); // Toggle dark mode const toggleDarkMode = () => { @@ -94,12 +89,7 @@ function App() { logger.info('Theme changed', { mode: newMode ? 'dark' : 'light' }); }; - // Initialize dark mode - ensure it matches the signal - if (darkMode()) { - document.documentElement.classList.add('dark'); - } else { - document.documentElement.classList.remove('dark'); - } + // Don't initialize dark mode here - will be handled based on auth state // Check auth on mount onMount(async () => { @@ -146,12 +136,36 @@ function App() { setNeedsAuth(false); // Only initialize WebSocket after successful auth check setWsStore(getGlobalWebSocketStore()); + + // Apply user's theme preference only after successful authentication + const savedDarkMode = localStorage.getItem(STORAGE_KEYS.DARK_MODE); + const prefersDark = savedDarkMode !== null + ? savedDarkMode === 'true' + : window.matchMedia('(prefers-color-scheme: dark)').matches; + setDarkMode(prefersDark); + if (prefersDark) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } } } catch (error) { console.error('Auth check error:', error); // On error, try to proceed without auth setNeedsAuth(false); setWsStore(getGlobalWebSocketStore()); + + // Apply theme preference if we're proceeding without auth + const savedDarkMode = localStorage.getItem(STORAGE_KEYS.DARK_MODE); + const prefersDark = savedDarkMode !== null + ? savedDarkMode === 'true' + : window.matchMedia('(prefers-color-scheme: dark)').matches; + setDarkMode(prefersDark); + if (prefersDark) { + document.documentElement.classList.add('dark'); + } else { + document.documentElement.classList.remove('dark'); + } } finally { setIsLoading(false); } diff --git a/frontend-modern/src/components/FirstRunSetup.tsx b/frontend-modern/src/components/FirstRunSetup.tsx index 0fcc9da0a..10c670e12 100644 --- a/frontend-modern/src/components/FirstRunSetup.tsx +++ b/frontend-modern/src/components/FirstRunSetup.tsx @@ -16,16 +16,9 @@ export const FirstRunSetup: Component = () => { const [savedToken, setSavedToken] = createSignal(''); const [copied, setCopied] = createSignal<'password' | 'token' | null>(null); - // Additional setup options - const [darkMode, setDarkMode] = createSignal( - window.matchMedia('(prefers-color-scheme: dark)').matches - ); - onMount(() => { - // Apply dark mode immediately if selected - if (darkMode()) { - document.documentElement.classList.add('dark'); - } + // Force dark mode for setup screen + document.documentElement.classList.add('dark'); }); const generatePassword = () => { @@ -80,8 +73,7 @@ export const FirstRunSetup: Component = () => { body: JSON.stringify({ username: username(), password: finalPassword, - apiToken: token, - darkMode: darkMode() + apiToken: token }) }); @@ -103,8 +95,6 @@ export const FirstRunSetup: Component = () => { setSavedPassword(useCustomPassword() ? password() : generatedPassword()); setSavedToken(token); - // Apply settings - use consistent storage key - localStorage.setItem('darkMode', String(darkMode())); // Show credentials setShowCredentials(true); @@ -263,44 +253,6 @@ IMPORTANT: Keep these credentials secure! - {/* Additional Settings */} -
-

- Initial Configuration -

- - {/* Dark Mode */} -
-
- -

- Use dark theme for the dashboard -

-
- -
-
{/* Info Box */}
diff --git a/frontend-modern/src/components/Login.tsx b/frontend-modern/src/components/Login.tsx index 533e6ecf7..269275eb5 100644 --- a/frontend-modern/src/components/Login.tsx +++ b/frontend-modern/src/components/Login.tsx @@ -1,6 +1,5 @@ import { Component, createSignal, Show, onMount, lazy, Suspense } from 'solid-js'; import { setBasicAuth } from '@/utils/apiClient'; -import { STORAGE_KEYS } from '@/constants'; // Force include FirstRunSetup with lazy loading const FirstRunSetup = lazy(() => import('./FirstRunSetup').then(m => ({ default: m.FirstRunSetup }))); @@ -18,13 +17,8 @@ export const Login: Component = (props) => { const [loadingAuth, setLoadingAuth] = createSignal(true); onMount(async () => { - // Apply saved theme preference - const savedTheme = localStorage.getItem(STORAGE_KEYS.DARK_MODE); - if (savedTheme === 'true') { - document.documentElement.classList.add('dark'); - } else { - document.documentElement.classList.remove('dark'); - } + // Force dark mode for login screen + document.documentElement.classList.add('dark'); console.log('[Login] Starting auth check...'); try {