mirror of
https://github.com/HugeFrog24/shakethefrog.git
synced 2026-03-02 00:14:33 +00:00
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
import { useState, useEffect } from 'react';
|
|
|
|
export function useDarkMode() {
|
|
const [darkMode, setDarkMode] = useState(false);
|
|
|
|
useEffect(() => {
|
|
// Check if user has a dark mode preference in localStorage
|
|
const isDark = localStorage.getItem('darkMode') === 'true';
|
|
// Check system preference if no localStorage value
|
|
const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
|
|
setDarkMode(isDark ?? systemPrefersDark);
|
|
|
|
// Add listener for system theme changes
|
|
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
const handleChange = (e: MediaQueryListEvent) => {
|
|
if (localStorage.getItem('darkMode') === null) {
|
|
setDarkMode(e.matches);
|
|
}
|
|
};
|
|
|
|
mediaQuery.addEventListener('change', handleChange);
|
|
return () => mediaQuery.removeEventListener('change', handleChange);
|
|
}, []);
|
|
|
|
const toggleDarkMode = () => {
|
|
setDarkMode(!darkMode);
|
|
localStorage.setItem('darkMode', (!darkMode).toString());
|
|
};
|
|
|
|
return { darkMode, toggleDarkMode };
|
|
}
|