chore: initialize from frontend template 4dc033c

This commit is contained in:
DongHyeonka
2026-08-13 18:23:26 +09:00
commit 40107eec84
897 changed files with 234824 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
import {
normalizeColorSchemePreference,
resolveColorScheme,
} from "../application/policies/color-scheme.ts";
import type { ApplicationApi } from "../application/ports/in/application-api.ts";
type ColorSchemeBrowser = Readonly<{
documentElement?: HTMLElement;
matchMedia?: (query: string) => Pick<MediaQueryList, "matches">;
}>;
/** Applies the persisted public preference before React paints. */
export function initializeColorScheme(
preferences: Pick<ApplicationApi["preferences"], "getColorScheme">,
browser: ColorSchemeBrowser = {},
) {
const documentElement = browser.documentElement ?? document.documentElement;
const matchMedia =
browser.matchMedia ??
(typeof window.matchMedia === "function"
? window.matchMedia.bind(window)
: () => ({ matches: false }));
const preference = normalizeColorSchemePreference(
preferences.getColorScheme(),
);
const resolved = resolveColorScheme(
preference,
matchMedia("(prefers-color-scheme: dark)").matches,
);
documentElement.dataset.theme = resolved;
documentElement.dataset.themePreference = preference;
documentElement.style.colorScheme = resolved;
return Object.freeze({ preference, resolved });
}