BotaoAlterarTema.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <script setup>
  2. import { useTheme } from "../composables/useTheme.js";
  3. const { darkMode } = useTheme();
  4. </script>
  5. <template>
  6. <button
  7. type="button"
  8. class="inline-flex items-center justify-center rounded-md !p-2 !bg-none !bg-transparent !border-0 !text-current hover:!bg-black/10 dark:hover:!bg-white/10 motion-safe:transition-colors"
  9. aria-label="Alternar tema"
  10. @click="darkMode = !darkMode"
  11. >
  12. <Transition name="tema-icon" mode="out-in">
  13. <svg v-if="darkMode" key="sun" class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5">
  14. <path
  15. stroke-linecap="round"
  16. stroke-linejoin="round"
  17. d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 1 1-7.5 0 3.75 3.75 0 0 1 7.5 0Z"
  18. />
  19. </svg>
  20. <svg v-else key="moon" class="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="1.5">
  21. <path
  22. stroke-linecap="round"
  23. stroke-linejoin="round"
  24. d="M21.752 15.002A9.718 9.718 0 0 1 18 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 0 0 3 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 0 0 9.002-5.998Z"
  25. />
  26. </svg>
  27. </Transition>
  28. </button>
  29. </template>
  30. <style scoped>
  31. .tema-icon-enter-active,
  32. .tema-icon-leave-active {
  33. transition: opacity 0.15s ease, transform 0.15s ease;
  34. }
  35. .tema-icon-enter-from {
  36. opacity: 0;
  37. transform: rotate(-90deg) scale(0.7);
  38. }
  39. .tema-icon-leave-to {
  40. opacity: 0;
  41. transform: rotate(90deg) scale(0.7);
  42. }
  43. </style>