vps-monitor/frontend/src/components/theme-toggle.tsx
2025-12-29 20:49:13 +05:30

52 lines
1.5 KiB
TypeScript

import { MonitorIcon, MoonIcon, SunIcon } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { useTheme } from "@/contexts/theme-context";
export function ThemeToggle() {
const { theme, setTheme, resolvedTheme } = useTheme();
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="icon-sm">
{resolvedTheme === "dark" ? (
<MoonIcon className="size-4" />
) : (
<SunIcon className="size-4" />
)}
<span className="sr-only">Toggle theme</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem
onClick={() => setTheme("light")}
className={theme === "light" ? "bg-accent" : ""}
>
<SunIcon className="mr-2 size-4" />
Light
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => setTheme("dark")}
className={theme === "dark" ? "bg-accent" : ""}
>
<MoonIcon className="mr-2 size-4" />
Dark
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => setTheme("system")}
className={theme === "system" ? "bg-accent" : ""}
>
<MonitorIcon className="mr-2 size-4" />
System
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
}