mode-toggle.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { Moon, Sun } from "lucide-react"
  2. import { useEffect } from "react"
  3. import { Button } from "@/components/ui/button"
  4. import {
  5. DropdownMenu,
  6. DropdownMenuContent,
  7. DropdownMenuItem,
  8. DropdownMenuTrigger,
  9. } from "@/components/ui/dropdown-menu"
  10. import { useThemeStore, applyTheme } from "@/store/theme-store"
  11. export function ModeToggle() {
  12. const { theme, setTheme } = useThemeStore()
  13. useEffect(() => {
  14. applyTheme(theme)
  15. }, [theme])
  16. return (
  17. <DropdownMenu>
  18. <DropdownMenuTrigger asChild>
  19. <Button variant="outline" size="icon">
  20. <Sun className="h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" />
  21. <Moon className="absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" />
  22. <span className="sr-only">Toggle theme</span>
  23. </Button>
  24. </DropdownMenuTrigger>
  25. <DropdownMenuContent align="end">
  26. <DropdownMenuItem onClick={() => setTheme("light")}>
  27. Light
  28. </DropdownMenuItem>
  29. <DropdownMenuItem onClick={() => setTheme("dark")}>
  30. Dark
  31. </DropdownMenuItem>
  32. <DropdownMenuItem onClick={() => setTheme("system")}>
  33. System
  34. </DropdownMenuItem>
  35. </DropdownMenuContent>
  36. </DropdownMenu>
  37. )
  38. }