diff --git a/ui/src/components/SidebarAccountMenu.tsx b/ui/src/components/SidebarAccountMenu.tsx index 593feecd..f151cb16 100644 --- a/ui/src/components/SidebarAccountMenu.tsx +++ b/ui/src/components/SidebarAccountMenu.tsx @@ -5,9 +5,7 @@ import { LogOut, Megaphone, type LucideIcon, - Moon, UserRound, - Sun, UserRoundPen, } from "lucide-react"; import type { DeploymentMode } from "@paperclipai/shared"; @@ -15,10 +13,10 @@ import { Link } from "@/lib/router"; import { authApi } from "@/api/auth"; import { queryKeys } from "@/lib/queryKeys"; import { useSidebar } from "../context/SidebarContext"; -import { useTheme } from "../context/ThemeContext"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { cn, SIDEBAR_RAIL_HIDDEN_LABEL } from "../lib/utils"; +import { ThemeToggle } from "./ThemeToggle"; const PROFILE_SETTINGS_PATH = "/company/settings/instance/profile"; const DOCS_URL = "https://docs.paperclip.ing/"; @@ -111,7 +109,6 @@ export function SidebarAccountMenu({ const queryClient = useQueryClient(); const { isMobile, setSidebarOpen, collapsed, peeking } = useSidebar(); const rail = collapsed && !peeking; - const { theme, toggleTheme } = useTheme(); const open = controlledOpen ?? internalOpen; const setOpen = onOpenChange ?? setInternalOpen; const { data: session } = useQuery({ @@ -216,15 +213,7 @@ export function SidebarAccountMenu({ external onClick={() => setOpen(false)} /> - { - toggleTheme(); - setOpen(false); - }} - /> + setOpen(false)} /> {deploymentMode === "authenticated" ? ( + ); + } + + return ( + + ); +} diff --git a/ui/src/pages/Auth.test.tsx b/ui/src/pages/Auth.test.tsx index 39682c34..47be0676 100644 --- a/ui/src/pages/Auth.test.tsx +++ b/ui/src/pages/Auth.test.tsx @@ -25,6 +25,17 @@ vi.mock("@/components/AsciiArtAnimation", () => ({ AsciiArtAnimation: () => null, })); +// The auth page renders a ThemeToggle, which reads ThemeContext. The provider +// lives in main.tsx (above the router), so mock the hook here the same way +// SidebarAccountMenu.test.tsx does. +vi.mock("../context/ThemeContext", () => ({ + useTheme: () => ({ + theme: "dark", + setTheme: vi.fn(), + toggleTheme: vi.fn(), + }), +})); + // The router's navigate wrapper reads the active company prefix from context. vi.mock("@/context/CompanyContext", () => ({ useCompany: () => ({ diff --git a/ui/src/pages/Auth.tsx b/ui/src/pages/Auth.tsx index fc2f7a84..20a8c542 100644 --- a/ui/src/pages/Auth.tsx +++ b/ui/src/pages/Auth.tsx @@ -6,6 +6,7 @@ import { queryKeys } from "../lib/queryKeys"; import { getRememberedInvitePath } from "../lib/invite-memory"; import { Button } from "@/components/ui/button"; import { AsciiArtAnimation } from "@/components/AsciiArtAnimation"; +import { ThemeToggle } from "@/components/ThemeToggle"; import { Sparkles } from "lucide-react"; type AuthMode = "sign_in" | "sign_up"; @@ -75,6 +76,9 @@ export function AuthPage() { return (
+
+ +
{/* Left half — form */}