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(
);