Files
taiji-pda-v0/components/theme-toggle.tsx
T

66 lines
2.0 KiB
TypeScript

"use client"
import * as React from "react"
import { useTheme } from "next-themes"
import { Button } from "@/components/ui/button"
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
import { Monitor, Moon, Sun } from "lucide-react"
import { useLanguage } from "@/contexts/language-context"
export function ThemeToggle() {
const { theme, setTheme } = useTheme()
const { t } = useLanguage()
const [mounted, setMounted] = React.useState(false)
React.useEffect(() => {
setMounted(true)
}, [])
if (!mounted) {
return (
<Button variant="ghost" size="icon" className="h-9 w-9">
<Sun className="h-4 w-4" />
</Button>
)
}
const getIcon = () => {
if (theme === "light") return <Sun className="h-4 w-4" />
if (theme === "black") return <Moon className="h-4 w-4" />
return <Monitor className="h-4 w-4" />
}
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="icon" className="h-9 w-9">
{getIcon()}
<span className="sr-only">{t("切换主题", "Toggle theme")}</span>
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => setTheme("light")}>
<Sun className="mr-2 h-4 w-4" />
<span>{t("灰色", "Gray")}</span>
{theme === "light" && <span className="ml-auto">✓</span>}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("dark")}>
<Monitor className="mr-2 h-4 w-4" />
<span>{t("青色", "Cyan")}</span>
{theme === "dark" && <span className="ml-auto">✓</span>}
</DropdownMenuItem>
<DropdownMenuItem onClick={() => setTheme("black")}>
<Moon className="mr-2 h-4 w-4" />
<span>{t("纯黑色", "Black")}</span>
{theme === "black" && <span className="ml-auto">✓</span>}
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
)
}