templates/components/_dark_mode_toggle.html.twig line 1

Open in your IDE?
  1. {#
  2.   Composant Toggle Dark Mode
  3.   Usage: {{ include('components/_dark_mode_toggle.html.twig') }}
  4. #}
  5. <button 
  6.     id="dark-mode-toggle" 
  7.     class="dark-mode-toggle btn btn-sm btn-outline-secondary"
  8.     aria-label="Basculer le mode sombre"
  9.     title="Mode sombre"
  10.     type="button"
  11. >
  12.     <i class="fa fa-moon-o"></i>
  13. </button>
  14. <style>
  15. .dark-mode-toggle {
  16.     position: relative;
  17.     width: 40px;
  18.     height: 40px;
  19.     border-radius: var(--border-radius-full);
  20.     display: flex;
  21.     align-items: center;
  22.     justify-content: center;
  23.     transition: all var(--transition-base);
  24.     border: 1px solid var(--border-color);
  25.     background-color: var(--bg-primary);
  26.     color: var(--text-primary);
  27. }
  28. .dark-mode-toggle:hover {
  29.     background-color: var(--bg-secondary);
  30.     transform: scale(1.05);
  31. }
  32. .dark-mode-toggle i {
  33.     font-size: 1.1rem;
  34.     transition: transform var(--transition-base);
  35. }
  36. .dark-mode-toggle:hover i {
  37.     transform: rotate(15deg);
  38. }
  39. /* Animation lors du changement de thème */
  40. .dark-mode-toggle.transitioning i {
  41.     animation: spin 0.5s ease-in-out;
  42. }
  43. @keyframes spin {
  44.     from {
  45.         transform: rotate(0deg);
  46.     }
  47.     to {
  48.         transform: rotate(360deg);
  49.     }
  50. }
  51. </style>
  52. <script>
  53. // Mettre à jour le bouton lors du changement de thème
  54. window.addEventListener('themechange', function(e) {
  55.     const button = document.getElementById('dark-mode-toggle');
  56.     if (!button) return;
  57.     
  58.     const icon = button.querySelector('i');
  59.     if (!icon) return;
  60.     
  61.     // Animation
  62.     button.classList.add('transitioning');
  63.     
  64.     setTimeout(() => {
  65.         if (e.detail.theme === 'dark') {
  66.             icon.className = 'fa fa-sun-o';
  67.             button.setAttribute('title', 'Mode clair');
  68.             button.setAttribute('aria-label', 'Basculer en mode clair');
  69.         } else {
  70.             icon.className = 'fa fa-moon-o';
  71.             button.setAttribute('title', 'Mode sombre');
  72.             button.setAttribute('aria-label', 'Basculer en mode sombre');
  73.         }
  74.         
  75.         button.classList.remove('transitioning');
  76.     }, 250);
  77. });
  78. </script>