@@ -197,6 +197,99 @@ export function createNextDsfrIntegrationApi(
197197 />
198198 </ >
199199 ) }
200+ < script
201+ dangerouslySetInnerHTML = { {
202+ "__html" : `
203+
204+ {
205+
206+ window.ssrWasPerformedWithIsDark = "${ defaultColorScheme } " === "dark";
207+
208+ const isDark = (() => {
209+
210+ const isDarkExplicitlyProvidedAsParameter = (() => {
211+ if ("${ defaultColorScheme } " === "system") {
212+ return undefined;
213+ }
214+
215+ switch ("${ defaultColorScheme } ") {
216+ case "dark": return true;
217+ case "light": return false;
218+ }
219+ })();
220+
221+ const isDarkFromLocalStorage = (() => {
222+ const colorSchemeReadFromLocalStorage = localStorage.getItem("scheme");
223+
224+ if (colorSchemeReadFromLocalStorage === null) {
225+ return undefined;
226+ }
227+
228+ if (colorSchemeReadFromLocalStorage === "system") {
229+ return undefined;
230+ }
231+
232+ switch (colorSchemeReadFromLocalStorage) {
233+ case "dark":
234+ return true;
235+ case "light":
236+ return false;
237+ }
238+ })();
239+
240+ const isDarkFromOsPreference = (() => {
241+ if (!window.matchMedia) {
242+ return undefined;
243+ }
244+
245+ return window.matchMedia("(prefers-color-scheme: dark)").matches;
246+ })();
247+
248+ const isDarkFallback = false;
249+
250+ return (
251+ isDarkFromLocalStorage ??
252+ isDarkExplicitlyProvidedAsParameter ??
253+ isDarkFromOsPreference ??
254+ isDarkFallback
255+ );
256+
257+ })();
258+
259+ ["${ data_fr_scheme } ", "${ data_fr_theme } "].forEach(attr => document.documentElement.setAttribute(attr, isDark ? "dark" : "light"));
260+
261+ {
262+
263+ const element = document.createElement("style");
264+
265+ element.id = "${ rootColorSchemeStyleTagId } ";
266+
267+ element.innerHTML = \`:root { color-scheme: \${isDark ? "dark" : "light"}; }\`;
268+
269+ document.head.appendChild(element);
270+
271+ }
272+
273+ {
274+
275+ const element = document.createElement("meta");
276+
277+ element.name = "theme-color";
278+
279+ element.content = isDark ? "${
280+ getColors ( true ) . decisions . background . default . grey . default
281+ } " : "${
282+ getColors ( false ) . decisions . background . default . grey . default
283+ } ";
284+
285+ document.head.appendChild(element);
286+
287+ }
288+
289+ }
290+ `
291+ } }
292+ />
200293 </ Head >
201294 { isBrowser ? (
202295 < App { ...( props as any ) } />
0 commit comments