- ThemeContext (features/theme/) : charge/applique le thème du profil connecté via l'attribut data-theme (SYSTEM = pas d'attribut, laisse la media query prefers-color-scheme décider) ; échec réseau non bloquant (worst case reste au thème courant, pas d'unhandled rejection) - UserPreferencesPage, routée /parametres/preferences-utilisateur, hot-save (3 boutons radio Clair/Sombre/Système) - layout.settings.nav.preferences renommé "Préférences alimentaires" (évite la confusion avec ce nouveau concept plus large), nouvelle entrée "Préférences utilisateur" - _theme.scss: commentaires mis à jour (l'attribut data-theme est désormais réellement posé, plus une simple anticipation)
29 lines
990 B
TypeScript
29 lines
990 B
TypeScript
import { StrictMode } from "react";
|
|
import { createRoot } from "react-dom/client";
|
|
import { BrowserRouter } from "react-router-dom";
|
|
import { App } from "./App";
|
|
import { AuthProvider } from "./features/auth/AuthContext";
|
|
import { ThemeProvider } from "./features/theme/ThemeContext";
|
|
// Side-effect import: initializes the i18next instance before anything
|
|
// renders (react-i18next reads it via context under the hood). See i18n/i18n.ts.
|
|
import "./i18n/i18n";
|
|
// Global stylesheet (theme tokens + minimal reset) — the only .scss import
|
|
// that isn't colocated with a specific component/page. See styles/global.scss.
|
|
import "./styles/global.scss";
|
|
|
|
const rootElement = document.getElementById("root");
|
|
if (!rootElement) {
|
|
throw new Error("Root element not found");
|
|
}
|
|
|
|
createRoot(rootElement).render(
|
|
<StrictMode>
|
|
<BrowserRouter>
|
|
<AuthProvider>
|
|
<ThemeProvider>
|
|
<App />
|
|
</ThemeProvider>
|
|
</AuthProvider>
|
|
</BrowserRouter>
|
|
</StrictMode>,
|
|
);
|