{#
Composant Toggle Dark Mode
Usage: {{ include('components/_dark_mode_toggle.html.twig') }}
#}
<button
id="dark-mode-toggle"
class="dark-mode-toggle btn btn-sm btn-outline-secondary"
aria-label="Basculer le mode sombre"
title="Mode sombre"
type="button"
>
<i class="fa fa-moon-o"></i>
</button>
<style>
.dark-mode-toggle {
position: relative;
width: 40px;
height: 40px;
border-radius: var(--border-radius-full);
display: flex;
align-items: center;
justify-content: center;
transition: all var(--transition-base);
border: 1px solid var(--border-color);
background-color: var(--bg-primary);
color: var(--text-primary);
}
.dark-mode-toggle:hover {
background-color: var(--bg-secondary);
transform: scale(1.05);
}
.dark-mode-toggle i {
font-size: 1.1rem;
transition: transform var(--transition-base);
}
.dark-mode-toggle:hover i {
transform: rotate(15deg);
}
/* Animation lors du changement de thème */
.dark-mode-toggle.transitioning i {
animation: spin 0.5s ease-in-out;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
</style>
<script>
// Mettre à jour le bouton lors du changement de thème
window.addEventListener('themechange', function(e) {
const button = document.getElementById('dark-mode-toggle');
if (!button) return;
const icon = button.querySelector('i');
if (!icon) return;
// Animation
button.classList.add('transitioning');
setTimeout(() => {
if (e.detail.theme === 'dark') {
icon.className = 'fa fa-sun-o';
button.setAttribute('title', 'Mode clair');
button.setAttribute('aria-label', 'Basculer en mode clair');
} else {
icon.className = 'fa fa-moon-o';
button.setAttribute('title', 'Mode sombre');
button.setAttribute('aria-label', 'Basculer en mode sombre');
}
button.classList.remove('transitioning');
}, 250);
});
</script>