/** * Application root component. * * Wraps the entire application in: * 1. `FluentProvider` — supplies the Fluent UI theme and design tokens. * 2. `BrowserRouter` — enables client-side routing via React Router. * 3. `AuthProvider` — manages session state and exposes `useAuth()`. * * Routes: * - `/setup` — first-run setup wizard (always accessible; redirects to /login if already done) * - `/login` — master password login (redirects to /setup if not done) * - `/` — dashboard (protected, inside MainLayout) * - `/map` — world map (protected) * - `/jails` — jail list (protected) * - `/jails/:name` — jail detail (protected) * - `/config` — configuration editor (protected) * - `/history` — event history (protected) * - `/blocklists` — blocklist management (protected) * All unmatched paths redirect to `/`. */ import { FluentProvider } from "@fluentui/react-components"; import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom"; import { lightTheme } from "./theme/customTheme"; import { AuthProvider } from "./providers/AuthProvider"; import { TimezoneProvider } from "./providers/TimezoneProvider"; import { RequireAuth } from "./components/RequireAuth"; import { SetupGuard } from "./components/SetupGuard"; import { MainLayout } from "./layouts/MainLayout"; import { SetupPage } from "./pages/SetupPage"; import { LoginPage } from "./pages/LoginPage"; import { DashboardPage } from "./pages/DashboardPage"; import { MapPage } from "./pages/MapPage"; import { JailsPage } from "./pages/JailsPage"; import { JailDetailPage } from "./pages/JailDetailPage"; import { ConfigPage } from "./pages/ConfigPage"; import { HistoryPage } from "./pages/HistoryPage"; import { BlocklistsPage } from "./pages/BlocklistsPage"; /** * Root application component — mounts providers and top-level routes. */ function App(): React.JSX.Element { return ( {/* Setup wizard — always accessible; redirects to /login if already done */} } /> {/* Login — requires setup to be complete */} } /> {/* Protected routes — require setup AND authentication */} } > } /> } /> } /> } /> } /> } /> } /> {/* Fallback — redirect unknown paths to dashboard */} } /> ); } export default App;