Mode sombre avec transitions automatiques et préférences utilisateur
Configuration avec next-themes pour une gestion automatique
import { ThemeProvider } from 'next-themes'
export default function Layout({ children }) {
return (
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange={false}
>
{children}
</ThemeProvider>
)
}Redéfinition des variables CSS pour le mode sombre
.dark {
/* Background Colors */
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
/* Card Colors */
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
/* Muted Colors */
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
/* Border Colors */
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
}Composant de basculement avec icônes dynamiques
import { Moon, Sun } from 'lucide-react'
import { useTheme } from 'next-themes'
export function ThemeToggle() {
const { setTheme, theme } = useTheme()
return (
<Button
variant="outline"
size="icon"
onClick={() => setTheme(theme === "light" ? "dark" : "light")}
>
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
<Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
</Button>
)
}Respect automatique des préférences système utilisateur