Expand dark theme coverage across client UI

This commit is contained in:
Shantur Rathore
2025-10-28 18:19:17 +00:00
parent 8858fe052b
commit 1ce5b125a9
12 changed files with 197 additions and 107 deletions

View File

@@ -1,4 +1,4 @@
import { createContext, createSignal, useContext, onMount, type JSX } from "solid-js"
import { createContext, createSignal, useContext, onMount, createEffect, type JSX } from "solid-js"
import { storage } from "./storage"
interface ThemeContextValue {
@@ -9,16 +9,28 @@ interface ThemeContextValue {
const ThemeContext = createContext<ThemeContextValue>()
function applyTheme(dark: boolean) {
if (dark) {
document.documentElement.setAttribute("data-theme", "dark")
return
}
document.documentElement.removeAttribute("data-theme")
}
export function ThemeProvider(props: { children: JSX.Element }) {
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches
const [isDark, setIsDarkSignal] = createSignal(prefersDark)
applyTheme(prefersDark)
async function loadTheme() {
try {
const config = await storage.loadConfig()
const savedTheme = (config as any).theme
const initialDark = savedTheme ? savedTheme === "dark" : prefersDark
setIsDarkSignal(initialDark)
applyTheme(initialDark)
} catch (error) {
console.warn("Failed to load theme from config:", error)
}
@@ -37,7 +49,6 @@ export function ThemeProvider(props: { children: JSX.Element }) {
onMount(() => {
loadTheme()
// Listen for config changes from other instances
const unsubscribe = storage.onConfigChanged(() => {
loadTheme()
})
@@ -45,14 +56,14 @@ export function ThemeProvider(props: { children: JSX.Element }) {
return unsubscribe
})
createEffect(() => {
applyTheme(isDark())
})
const setTheme = (dark: boolean) => {
setIsDarkSignal(dark)
applyTheme(dark)
saveTheme(dark)
if (dark) {
document.documentElement.setAttribute("data-theme", "dark")
} else {
document.documentElement.removeAttribute("data-theme")
}
}
const toggleTheme = () => {