import { Router, Route } from '@solidjs/router' import { QueryClient, QueryClientProvider } from '@tanstack/solid-query' import { Layout } from '@/components/layout/Layout' import { ProtectedRoute } from '@/components/ProtectedRoute' import { ToastContainer } from '@/components/ui/Toast' import { Dashboard } from '@/pages/misc/Dashboard' import { Bookmarks } from '@/pages/content/Bookmarks' import { Tasks } from '@/pages/productivity/Tasks' import { Files } from '@/pages/content/Files' import { Notes } from '@/pages/content/Notes' import Chat from '@/pages/communication/Chat' import { Settings } from '@/pages/settings/Settings' import { Login } from '@/pages/auth/Login' import { Youtube } from '@/pages/content/Youtube' import { Members } from '@/pages/admin/Members' import { RemovedStuff } from '@/pages/misc/RemovedStuff' import { AdminSettings } from '@/pages/admin/AdminSettings' import { ColorSwitcher } from '@/pages/settings/ColorSwitcher' import { AdminDashboard } from '@/pages/admin/AdminDashboard' import { Stats } from '@/pages/productivity/Stats' import { Profile } from '@/pages/auth/Profile' import { LearningPaths } from '@/pages/content/LearningPaths' import { GitHub } from '@/pages/content/GitHub' import { TimeTracking } from '@/pages/productivity/TimeTracking' import { Calendar } from '@/pages/productivity/Calendar' import { AuthCallback } from '@/pages/auth/AuthCallback' import { AuthProvider, useAuth } from '@/lib/auth' import { Search } from '@/pages/content/Search' import { Analytics } from '@/pages/admin/Analytics' import { Messages } from '@/pages/communication/Messages' import { ShareTarget } from '@/pages/misc/ShareTarget' import BrowserExtensionSettings from '@/pages/settings/BrowserExtensionSettings' import { initializeDemoMode, clearDemoMode, isEnvDemoMode } from '@/lib/demo-mode' import { onMount, createEffect } from 'solid-js' import { useNavigate } from '@solidjs/router' // Initialize dark mode immediately before anything else const initializeDarkMode = () => { // Check if user has a saved theme preference const savedTheme = localStorage.getItem('theme'); const user = localStorage.getItem('user') || localStorage.getItem('trackeep_user'); if (user) { try { const userData = JSON.parse(user); // Prefer user's saved theme from profile, fallback to localStorage const userTheme = userData.theme || savedTheme; if (userTheme === 'dark') { document.documentElement.setAttribute('data-kb-theme', 'dark'); } else { document.documentElement.removeAttribute('data-kb-theme'); } } catch (e) { // Fallback to localStorage or dark mode if user data is invalid if (savedTheme === 'dark') { document.documentElement.setAttribute('data-kb-theme', 'dark'); } else { document.documentElement.removeAttribute('data-kb-theme'); } } } else if (savedTheme === 'dark') { document.documentElement.setAttribute('data-kb-theme', 'dark'); } else { // Default to dark mode document.documentElement.setAttribute('data-kb-theme', 'dark'); } }; // Initialize dark mode immediately initializeDarkMode(); // Create a client const queryClient = new QueryClient({ defaultOptions: { queries: { retry: 1, refetchOnWindowFocus: false, }, }, }) // Component to handle root route logic const RootRoute = () => { const { authState } = useAuth(); const navigate = useNavigate(); createEffect(() => { // If demo mode is enabled and user is authenticated, navigate to app if (isEnvDemoMode() && authState.isAuthenticated && !authState.isLoading) { navigate('/app', { replace: true }); return; } // If not demo mode and user is authenticated, navigate to app if (!isEnvDemoMode() && authState.isAuthenticated && !authState.isLoading) { navigate('/app', { replace: true }); return; } // If not authenticated and not loading, show login if (!authState.isAuthenticated && !authState.isLoading) { navigate('/login', { replace: true }); return; } }); // Show loading spinner while checking auth return (
Loading...