()
| 9 | import { isLegacyViewMode } from "@repo/store"; |
| 10 | |
| 11 | export function ModeToggle() { |
| 12 | const { theme, setTheme } = useTheme(); |
| 13 | const [mounted, setMounted] = React.useState(false); |
| 14 | |
| 15 | const isLegacyMode = useRecoilValue(isLegacyViewMode); |
| 16 | |
| 17 | React.useEffect(() => { |
| 18 | setMounted(true); |
| 19 | }, []); |
| 20 | |
| 21 | if (!mounted) return null; |
| 22 | |
| 23 | const isDarkMode = |
| 24 | theme === "dark" || (theme === "system" && window.matchMedia("(prefers-color-scheme: dark)").matches); |
| 25 | |
| 26 | const renderToggle = () => |
| 27 | isLegacyMode ? ( |
| 28 | <Button variant="outline" size="icon" onClick={() => (theme === "light" ? setTheme("dark") : setTheme("light"))}> |
| 29 | <Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" /> |
| 30 | <Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" /> |
| 31 | <span className="sr-only">Toggle theme</span> |
| 32 | </Button> |
| 33 | ) : ( |
| 34 | <div className="flex items-center gap-2"> |
| 35 | <Sun className={`h-5 w-5 transition-all duration-300 ${isDarkMode ? "text-primary/50" : "text-blue-600"}`} /> |
| 36 | <Switch checked={isDarkMode} onCheckedChange={(checked) => setTheme(checked ? "dark" : "light")} /> |
| 37 | <Moon className={`h-5 w-5 transition-all duration-300 ${isDarkMode ? "text-blue-600" : "text-primary/50"}`} /> |
| 38 | </div> |
| 39 | ); |
| 40 | |
| 41 | return renderToggle(); |
| 42 | } |
nothing calls this directly
no test coverage detected