Files
marketing-app/client/src/contexts/ThemeContext.jsx
fahed fa6345f63e
All checks were successful
Deploy / deploy (push) Successful in 11s
feat: add theme toggle, shared KanbanCard, keyboard shortcuts
Previously unstaged files from prior sessions: ThemeContext,
ThemeToggle, KanbanCard, useKeyboardShortcuts hook, and updated
Header, KanbanBoard, Issues, Tasks, PostProduction, index.css.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:12:34 +03:00

39 lines
1.1 KiB
JavaScript

import { createContext, useContext, useState, useEffect } from 'react'
const ThemeContext = createContext()
export function ThemeProvider({ children }) {
const [darkMode, setDarkMode] = useState(() => {
// Check localStorage or system preference
const stored = localStorage.getItem('darkMode')
if (stored !== null) return stored === 'true'
return window.matchMedia('(prefers-color-scheme: dark)').matches
})
useEffect(() => {
// Apply dark mode class to document
if (darkMode) {
document.documentElement.classList.add('dark')
} else {
document.documentElement.classList.remove('dark')
}
localStorage.setItem('darkMode', String(darkMode))
}, [darkMode])
const toggleDarkMode = () => setDarkMode(prev => !prev)
return (
<ThemeContext.Provider value={{ darkMode, toggleDarkMode }}>
{children}
</ThemeContext.Provider>
)
}
export function useTheme() {
const context = useContext(ThemeContext)
if (!context) {
throw new Error('useTheme must be used within ThemeProvider')
}
return context
}