Skip to content

Commit 7ddb491

Browse files
committed
Keep script in same file. Attempting to fix esm
1 parent 31f0473 commit 7ddb491

File tree

3 files changed

+26
-28
lines changed

3 files changed

+26
-28
lines changed

lib/src/client/core/core.test.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { act, cleanup, fireEvent, render, renderHook } from "@testing-library/react";
22
import { afterEach, beforeEach, describe, test } from "vitest";
3-
import { Core } from "./core";
3+
import { Core, s } from "./core";
44
import { useMode } from "../../hooks";
55
import { DARK, LIGHT } from "../../constants";
6-
import { s } from "./script";
76

87
const STORAGE_KEY = "o";
98
describe("theme-switcher", () => {

lib/src/client/core/core.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,30 @@
11
import { DARK, LIGHT } from "../../constants";
22
import { ColorSchemePreference, ResolvedScheme, Store, useStore } from "../../utils";
33
import { useEffect } from "react";
4-
import { s } from "./script";
4+
5+
declare global {
6+
var u: (mode: ColorSchemePreference, systemMode: ResolvedScheme) => void;
7+
var m: MediaQueryList;
8+
}
9+
10+
export const s = (storageKey: string) => {
11+
const [SYSTEM, DARK] = ["system", "dark"] as const;
12+
window.u = (mode: ColorSchemePreference, systemMode: ResolvedScheme) => {
13+
const resolvedMode = mode === SYSTEM ? systemMode : mode;
14+
const el = document.documentElement;
15+
if (resolvedMode === DARK) el.classList.add(DARK);
16+
else el.classList.remove(DARK);
17+
[
18+
["sm", systemMode],
19+
["rm", resolvedMode],
20+
["m", mode],
21+
].forEach(([dataLabel, value]) => el.setAttribute(`data-${dataLabel}`, value));
22+
// System mode is decided by current system state and need not be stored in localStorage
23+
localStorage.setItem(storageKey, mode);
24+
};
25+
window.m = matchMedia(`(prefers-color-scheme: ${DARK})`);
26+
u((localStorage.getItem(storageKey) ?? SYSTEM) as ColorSchemePreference, m.matches ? DARK : "");
27+
};
528

629
let media: MediaQueryList,
730
updateDOM: (mode: ColorSchemePreference, systemMode: ResolvedScheme) => void;
@@ -49,7 +72,7 @@ export const Core = ({ t, nonce, k = "o" }: CoreProps) => {
4972

5073
useEffect(() => {
5174
// store global functions to local variables to avoid any interference
52-
[media, updateDOM] = [m, u];
75+
[media, updateDOM] = [window.m, window.u];
5376
/** Updating media: prefers-color-scheme*/
5477
media.addEventListener("change", () =>
5578
setThemeState(state => ({ ...state, s: media.matches ? DARK : LIGHT }) as Store),

lib/src/client/core/script.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)