CipherStreamWeb converted to use Vite

This commit is contained in:
2025-08-13 23:31:29 -04:00
parent 70f9adb930
commit c9bddfa74d
120 changed files with 13931 additions and 3 deletions

View File

@@ -0,0 +1,41 @@
import { useEffect, useMemo, useState } from "react";
import { ThemeProviderContext, type Theme, type ThemeProviderProps } from "../ThemeProvider";
export function ThemeProvider({
children,
defaultTheme = "system",
storageKey = "vite-ui-theme"
}: ThemeProviderProps){
const [ theme, setTheme ] = useState<Theme>(localStorage.getItem(storageKey) as Theme || defaultTheme);
useEffect(() => {
const root = window.document.documentElement;
root.classList.remove("light", "dark");
if(theme === "system"){
const systemTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
root.classList.add(systemTheme);
}
else{
root.classList.add(theme);
}
}, [ theme ]);
const currentTheme = useMemo(() => ({
theme,
setTheme: (theme: Theme) => {
localStorage.setItem(storageKey, theme);
setTheme(theme);
}
}), [ theme, storageKey ]);
return (
<ThemeProviderContext.Provider value={currentTheme}>
{children}
</ThemeProviderContext.Provider>
);
}