2023-04-19 10:37:35 +02:00
|
|
|
"use client";
|
2023-04-19 14:56:01 +02:00
|
|
|
|
2023-04-19 10:37:35 +02:00
|
|
|
import { Switch } from "@headlessui/react";
|
|
|
|
|
import { MoonIcon, SunIcon } from "@heroicons/react/24/outline";
|
|
|
|
|
import { useTheme } from "next-themes";
|
2023-04-19 14:56:01 +02:00
|
|
|
import { useEffect, useState } from "react";
|
2023-04-19 10:37:35 +02:00
|
|
|
|
|
|
|
|
export default function Theme() {
|
|
|
|
|
const { resolvedTheme, setTheme } = useTheme();
|
2023-04-19 14:56:01 +02:00
|
|
|
const [mounted, setMounted] = useState<boolean>(false);
|
2023-04-19 10:37:35 +02:00
|
|
|
|
|
|
|
|
const isDark = resolvedTheme === "dark";
|
2023-04-19 14:56:01 +02:00
|
|
|
|
|
|
|
|
// useEffect only runs on the client, so now we can safely show the UI
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setMounted(true);
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
if (!mounted) {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
2023-04-19 10:37:35 +02:00
|
|
|
return (
|
|
|
|
|
<Switch
|
|
|
|
|
checked={isDark}
|
|
|
|
|
onChange={(checked) => setTheme(checked ? "dark" : "light")}
|
|
|
|
|
className={`${
|
|
|
|
|
isDark
|
|
|
|
|
? "!bg-gray-800 dark:bg-background-dark-400"
|
2023-04-24 16:30:21 +02:00
|
|
|
: "!bg-gray-200 dark:bg-background-dark-400"
|
2023-04-19 10:37:35 +02:00
|
|
|
}
|
|
|
|
|
relative inline-flex h-4 w-9 items-center rounded-full`}
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
aria-hidden="true"
|
|
|
|
|
className={`${
|
|
|
|
|
isDark ? "translate-x-5" : "translate-x-0"
|
2023-04-24 15:32:57 +02:00
|
|
|
} flex flex-row items-center justify-center h-4 w-4 transform rounded-full bg-white transition-all shadow dark:bg-background-dark-500 ring-1 ring-[#00000020] dark:ring-[#ffffff20] ring-offset-1 ring-offset-[#ffffff50] dark:ring-offset-[#00000005]`}
|
2023-04-19 10:37:35 +02:00
|
|
|
>
|
|
|
|
|
{isDark ? (
|
|
|
|
|
<MoonIcon className="dark:text-amber-500 h-4 w-4" />
|
|
|
|
|
) : (
|
|
|
|
|
<SunIcon className="text-amber-500 h-4 w-4" />
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
</Switch>
|
|
|
|
|
);
|
|
|
|
|
}
|