**This is my code that i tried to translate it but it doesn't worked for me ๐ฆ **
import {
component$,
createContextId,
useSignal,
useContextProvider,
useContext,
useTask$
} from '@builder.io/qwik'
type Theme = 'dark' | 'light' | 'system'
interface ThemeContextProps {
theme: Theme
setTheme: (theme: Theme) => void
}
type ThemeProviderState = {
theme: Theme
setTheme: (theme: Theme) => void
}
const MyThemeContext = createContextId<ThemeContextProps>('theme-context')
export const ThemeProvider = component$<{}>(() => {
const defaultTheme: Theme = 'system'
const storageKey = 'app-ui-theme'
const themeSignal = useSignal<Theme>(
() => (localStorage.getItem(storageKey) as Theme) || defaultTheme
)
const setTheme = (newTheme: Theme) => {
localStorage.setItem(storageKey, newTheme)
themeSignal.value = newTheme
}
useTask$(() => {
const root = window.document.documentElement
root.classList.remove('light', 'dark')
const currentTheme = themeSignal.value
if (currentTheme === 'system') {
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
root.classList.add(systemTheme)
return
}
root.classList.add(currentTheme)
})
const value = {
theme: themeSignal.value,
setTheme
}
useContextProvider(MyThemeContext, value)
return null
})
export const useTheme = component$(() => {
const context = useContext<ThemeProviderState>(MyThemeContext)
if (context === undefined) throw new Error('useTheme must be used within a ThemeProvider')
return null
})
