import { useState, useEffect } from 'react'; type Theme = 'light' | 'dark'; export function useTheme() { // Initialisation de l'état avec une fonction pour ne lire le localStorage qu'une seule fois const [theme, setTheme] = useState(() => { // 1. On vérifie si un choix a déjà été sauvegardé const storedTheme = localStorage.getItem('theme'); if (storedTheme === 'dark' || storedTheme === 'light') { return storedTheme; } // 2. Sinon, on vérifie la préférence système de l'utilisateur if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { return 'dark'; } // 3. Par défaut, mode clair return 'light'; }); // À chaque fois que 'theme' change, on met à jour le HTML et on sauvegarde useEffect(() => { const root = window.document.documentElement; if (theme === 'dark') { root.classList.add('dark'); } else { root.classList.remove('dark'); } localStorage.setItem('theme', theme); }, [theme]); // Fonction utilitaire pour basculer facilement const toggleTheme = () => { setTheme((prevTheme) => (prevTheme === 'dark' ? 'light' : 'dark')); }; return { theme, isDark: theme === 'dark', toggleTheme, setTheme }; }