Executando verificação de segurança...
1

uma transição mais suave na alteração de temas é bom. Notei que você utilizou tailwindcss e Next.js, então em poucos minutos você consegue lidar isso.

Existe uma API chamada Match do browser. Eu customo utilizar bastante desta forma:

export const SwitchMode = () => {
  const [currentState, setCurrentState] = useState("");

  useEffect(() => {
    try {
      if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
        document.documentElement.classList.remove("light");
        localStorage.ThemeStorage = "dark";
        setCurrentState("dark");
        document.documentElement.classList.add(localStorage.ThemeStorage);
      } else {
        document.documentElement.classList.remove("dark");
        localStorage.ThemeStorage = "light";
        setCurrentState("light");
        document.documentElement.classList.add(localStorage.ThemeStorage);
      }
    } catch (menssage) {
      console.log(`Erro ao definir tema: ${menssage}`);
    }
  }, []);

  const toggleTheme = () => {
    try {
      const newCurrentMode =
        localStorage.ThemeStorage === "dark" ? "light" : "dark";
      localStorage.ThemeStorage = newCurrentMode;

      if (newCurrentMode === "dark") {
        document.documentElement.classList.remove("light");
        setCurrentState("dark");
        document.documentElement.classList.add(localStorage.ThemeStorage);
      } else {
        document.documentElement.classList.remove("dark");
        setCurrentState("light");
        document.documentElement.classList.add(localStorage.ThemeStorage);
      }
    } catch (menssage) {
      console.log(`Erro ao trocar o tema: ${menssage}`);
    }
  };

Da pra tornar mais personalizável com mais cores e transições. Até animações! Eu facilmente utilizaria todas as vezes. Apesar de simples, personalizar certos aspectos é complicado.

Carregando publicação patrocinada...