gemini-coder / hooks /useDarkMode.tsx
osanseviero's picture
Upload 56 files
9d1a465 verified
'use client';
import { createContext, useContext, useEffect, useState } from 'react';
type DarkModeContextType = {
isDarkMode: boolean;
toggleDarkMode: () => void;
};
const DarkModeContext = createContext<DarkModeContextType | undefined>(undefined);
export function DarkModeProvider({ children }: { children: React.ReactNode }) {
const [isDarkMode, setIsDarkMode] = useState(false);
useEffect(() => {
// Check if user has dark mode preference
const isDark = localStorage.getItem('darkMode') === 'true';
setIsDarkMode(isDark);
if (isDark) {
document.documentElement.classList.add('dark');
}
}, []);
const toggleDarkMode = () => {
setIsDarkMode((prev) => {
const newValue = !prev;
localStorage.setItem('darkMode', String(newValue));
if (newValue) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
return newValue;
});
};
return (
<DarkModeContext.Provider value={{ isDarkMode, toggleDarkMode }}>
{children}
</DarkModeContext.Provider>
);
}
export function useDarkMode() {
const context = useContext(DarkModeContext);
if (context === undefined) {
throw new Error('useDarkMode must be used within a DarkModeProvider');
}
return context;
}