diff --git a/apps/web/src/components/auth/login-form.tsx b/apps/web/src/components/auth/login-form.tsx index b3478c8..7d3e443 100644 --- a/apps/web/src/components/auth/login-form.tsx +++ b/apps/web/src/components/auth/login-form.tsx @@ -11,6 +11,7 @@ import { import { useIsMutating } from "@tanstack/react-query"; import { cn } from "cnfast"; import { Eye, EyeOff, Lock, Mail } from "lucide-react"; +import { useTheme } from "next-themes"; import { type Dispatch, type ReactNode, @@ -57,11 +58,15 @@ export type LoginFormProps = { }; function LoginAgentsPanel() { + const { resolvedTheme } = useTheme(); + const flickerColor = + resolvedTheme === "dark" ? "rgb(255, 255, 255)" : "rgb(0, 0, 0)"; + return ( -
+
@@ -152,7 +157,6 @@ function PasswordAuthFields({ {labels.password} - + @@ -313,7 +317,6 @@ function MagicLinkAuthFields({ +
); diff --git a/apps/web/src/components/theme-toggle.tsx b/apps/web/src/components/theme-toggle.tsx new file mode 100644 index 0000000..8d81ee2 --- /dev/null +++ b/apps/web/src/components/theme-toggle.tsx @@ -0,0 +1,26 @@ +import { cn } from "cnfast"; +import { Moon, Sun } from "lucide-react"; +import { useTheme } from "next-themes"; + +export type ThemeToggleProps = { + className?: string; +}; + +export function ThemeToggle({ className }: ThemeToggleProps) { + const { resolvedTheme, setTheme } = useTheme(); + + return ( + + ); +} diff --git a/apps/web/src/routes/auth/route.tsx b/apps/web/src/routes/auth/route.tsx index fba3897..9c295fd 100644 --- a/apps/web/src/routes/auth/route.tsx +++ b/apps/web/src/routes/auth/route.tsx @@ -1,4 +1,5 @@ import { createFileRoute, Outlet } from "@tanstack/react-router"; +import { ThemeToggle } from "@/components/theme-toggle"; export const Route = createFileRoute("/auth")({ component: AuthLayout, @@ -7,6 +8,7 @@ export const Route = createFileRoute("/auth")({ function AuthLayout() { return (
+ {/* Overflow clipped on the grid layer only — parent overflow:hidden breaks backdrop-filter. */}