import React, { lazy } from "react"; import ReactDOM from "react-dom/client"; import { RouterProvider, createBrowserRouter, createRoutesFromElements, Route, Navigate, } from "react-router-dom"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ToastProvider } from "./components/Toast"; import { RequireAuth } from "./components/RequireAuth"; import App from "./App"; import "./styles.css"; // Initialize theme before React renders const theme = (localStorage.getItem("theme") as "dark" | "light" | "system") || "system"; const actualTheme = theme === "system" ? (window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light") : theme; const colorScheme = (localStorage.getItem("colorScheme") as "blue" | "green" | "purple" | "orange") || "blue"; if (actualTheme === "dark") { document.documentElement.setAttribute("data-theme", "dark"); document.documentElement.classList.add("dark"); document.body.classList.add("dark"); document.body.setAttribute("data-theme", "dark"); } else { document.documentElement.setAttribute("data-theme", "light"); document.documentElement.classList.remove("dark"); document.body.classList.remove("dark"); document.body.setAttribute("data-theme", "light"); } document.documentElement.classList.remove("scheme-blue", "scheme-green", "scheme-purple", "scheme-orange"); document.documentElement.classList.add(`scheme-${colorScheme}`); const client = new QueryClient({ defaultOptions: { queries: { retry: 1, refetchOnWindowFocus: false, }, }, }); const DashboardPage = lazy(() => import("./pages/DashboardPage")); const SpendPage = lazy(() => import("./pages/SpendPage")); const IncomePage = lazy(() => import("./pages/IncomePage")); const TransactionsPage = lazy(() => import("./pages/TransactionsPage")); const SettingsPage = lazy(() => import("./pages/settings/SettingsPage")); const HealthPage = lazy(() => import("./pages/HealthPage")); const OnboardingPage = lazy(() => import("./pages/OnboardingPage")); const LoginPage = lazy(() => import("./pages/LoginPage")); const RegisterPage = lazy(() => import("./pages/RegisterPage")); const router = createBrowserRouter( createRoutesFromElements( }> {/* Public */} } /> } /> {/* Protected onboarding */} } /> {/* Authenticated app */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Fallback */} } /> ) ); ReactDOM.createRoot(document.getElementById("root")!).render( );