mfuntowicz's picture
mfuntowicz HF Staff
Upload folder using huggingface_hub
04ec17f verified
raw
history blame
3.04 kB
<script lang="ts">
import { onMount } from "svelte";
import ModeWatcherLite from "./mode-watcher-lite.svelte";
import ModeWatcherFull from "./mode-watcher-full.svelte";
import { modeStorageKey, themeStorageKey } from "../storage-keys.svelte.js";
import {
darkClassNames,
disableTransitions,
lightClassNames,
mode,
synchronousModeChanges,
theme,
themeColors,
} from "../states.svelte.js";
import type { ModeWatcherProps } from "../types.js";
import { isValidMode } from "../modes.js";
import { defineConfig, setMode, setTheme } from "../mode.js";
import { systemPrefersMode } from "../mode-states.svelte.js";
let {
track = true,
defaultMode = "system",
themeColors: themeColorsProp,
disableTransitions: disableTransitionsProp = true,
darkClassNames: darkClassNamesProp = ["dark"],
lightClassNames: lightClassNamesProp = [],
defaultTheme = "",
nonce = "",
themeStorageKey: themeStorageKeyProp = "mode-watcher-theme",
modeStorageKey: modeStorageKeyProp = "mode-watcher-mode",
disableHeadScriptInjection = false,
synchronousModeChanges: synchronousModeChangesProp = false,
}: ModeWatcherProps = $props();
modeStorageKey.current = modeStorageKeyProp;
themeStorageKey.current = themeStorageKeyProp;
darkClassNames.current = darkClassNamesProp;
lightClassNames.current = lightClassNamesProp;
disableTransitions.current = disableTransitionsProp;
themeColors.current = themeColorsProp;
synchronousModeChanges.current = synchronousModeChangesProp;
$effect.pre(() => {
synchronousModeChanges.current = synchronousModeChangesProp;
});
$effect.pre(() => {
disableTransitions.current = disableTransitionsProp;
});
$effect.pre(() => {
themeColors.current = themeColorsProp;
});
$effect.pre(() => {
darkClassNames.current = darkClassNamesProp;
});
$effect.pre(() => {
lightClassNames.current = lightClassNamesProp;
});
$effect.pre(() => {
modeStorageKey.current = modeStorageKeyProp;
});
$effect.pre(() => {
themeStorageKey.current = themeStorageKeyProp;
});
$effect.pre(() => {
mode.current;
modeStorageKey.current;
themeStorageKey.current;
theme.current;
});
onMount(() => {
systemPrefersMode.tracking(track);
systemPrefersMode.query();
const localStorageMode = localStorage.getItem(modeStorageKey.current);
setMode(isValidMode(localStorageMode) ? localStorageMode : defaultMode);
const localStorageTheme = localStorage.getItem(themeStorageKey.current);
setTheme(localStorageTheme || defaultTheme);
});
const initConfig = defineConfig({
defaultMode,
themeColors: themeColorsProp,
darkClassNames: darkClassNamesProp,
lightClassNames: lightClassNamesProp,
defaultTheme,
modeStorageKey: modeStorageKeyProp,
themeStorageKey: themeStorageKeyProp,
});
const trueNonce = $derived(typeof window === "undefined" ? nonce : "");
</script>
{#if disableHeadScriptInjection}
<ModeWatcherLite themeColors={themeColors.current} />
{:else}
<ModeWatcherFull {trueNonce} {initConfig} themeColors={themeColors.current} />
{/if}