mirror of
https://github.com/cfngc4594/monaco-editor-lsp-next.git
synced 2025-07-05 02:00:52 +00:00
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
|
"use client";
|
||
|
|
||
|
import { useTheme } from "next-themes";
|
||
|
import { useEffect, useState } from "react";
|
||
|
import { Button } from "@/components/ui/button";
|
||
|
|
||
|
function SunIcon(props: React.ComponentPropsWithoutRef<"svg">) {
|
||
|
return (
|
||
|
<svg viewBox="0 0 20 20" fill="none" aria-hidden="true" {...props}>
|
||
|
<path d="M12.5 10a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0Z" />
|
||
|
<path
|
||
|
strokeLinecap="round"
|
||
|
d="M10 5.5v-1M13.182 6.818l.707-.707M14.5 10h1M13.182 13.182l.707.707M10 15.5v-1M6.11 13.889l.708-.707M4.5 10h1M6.11 6.111l.708.707"
|
||
|
/>
|
||
|
</svg>
|
||
|
);
|
||
|
}
|
||
|
|
||
|
function MoonIcon(props: React.ComponentPropsWithoutRef<"svg">) {
|
||
|
return (
|
||
|
<svg viewBox="0 0 20 20" fill="none" aria-hidden="true" {...props}>
|
||
|
<path d="M15.224 11.724a5.5 5.5 0 0 1-6.949-6.949 5.5 5.5 0 1 0 6.949 6.949Z" />
|
||
|
</svg>
|
||
|
);
|
||
|
}
|
||
|
|
||
|
export function ThemeToggle() {
|
||
|
const { resolvedTheme, setTheme } = useTheme();
|
||
|
const otherTheme = resolvedTheme === "dark" ? "light" : "dark";
|
||
|
const [mounted, setMounted] = useState(false);
|
||
|
|
||
|
useEffect(() => {
|
||
|
setMounted(true);
|
||
|
}, []);
|
||
|
|
||
|
return (
|
||
|
<Button
|
||
|
size="icon"
|
||
|
variant="outline"
|
||
|
className="flex h-6 w-6 items-center justify-center rounded-md transition"
|
||
|
aria-label={mounted ? `Switch to ${otherTheme} theme` : "Toggle theme"}
|
||
|
onClick={() => setTheme(otherTheme)}
|
||
|
>
|
||
|
<SunIcon className="h-5 w-5 stroke-foreground dark:hidden" />
|
||
|
<MoonIcon className="hidden h-5 w-5 stroke-foreground dark:block" />
|
||
|
</Button>
|
||
|
);
|
||
|
}
|