mode-toggle.jsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use client";
  2. /**
  3. * ModeToggle
  4. *
  5. * Small theme toggle dropdown using next-themes.
  6. *
  7. * Note:
  8. * - This is not wired into the AppShell TopNav yet (RHL-019 uses a placeholder button).
  9. * - We keep it in the project because it is useful later and already proven working.
  10. */
  11. import { Moon, Sun } from "lucide-react";
  12. import { useTheme } from "next-themes";
  13. import { Button } from "@/components/ui/button";
  14. import {
  15. DropdownMenu,
  16. DropdownMenuContent,
  17. DropdownMenuItem,
  18. DropdownMenuTrigger,
  19. } from "@/components/ui/dropdown-menu";
  20. export function ModeToggle() {
  21. const { setTheme } = useTheme();
  22. return (
  23. <DropdownMenu>
  24. <DropdownMenuTrigger asChild>
  25. <Button variant="outline" size="icon">
  26. <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
  27. <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
  28. <span className="sr-only">Theme umschalten</span>
  29. </Button>
  30. </DropdownMenuTrigger>
  31. <DropdownMenuContent align="end">
  32. <DropdownMenuItem onClick={() => setTheme("light")}>
  33. Hell
  34. </DropdownMenuItem>
  35. <DropdownMenuItem onClick={() => setTheme("dark")}>
  36. Dunkel
  37. </DropdownMenuItem>
  38. <DropdownMenuItem onClick={() => setTheme("system")}>
  39. System
  40. </DropdownMenuItem>
  41. </DropdownMenuContent>
  42. </DropdownMenu>
  43. );
  44. }