26 lines
718 B
TypeScript
26 lines
718 B
TypeScript
'use client'
|
|
|
|
import { useEffect, useState } from 'react'
|
|
|
|
export function ThemeProvider({ children }: { children: React.ReactNode }) {
|
|
const [mounted, setMounted] = useState(false)
|
|
|
|
useEffect(() => {
|
|
setMounted(true)
|
|
// Check for saved theme preference or system preference
|
|
const savedTheme = localStorage.getItem('theme')
|
|
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
const theme = savedTheme || (prefersDark ? 'dark' : 'light')
|
|
|
|
if (theme === 'dark') {
|
|
document.documentElement.classList.add('dark')
|
|
} else {
|
|
document.documentElement.classList.remove('dark')
|
|
}
|
|
}, [])
|
|
|
|
if (!mounted) return children
|
|
|
|
return <>{children}</>
|
|
}
|