From 3b9b73bc4bffd223ac81dd43e0f5d4430b5d998a Mon Sep 17 00:00:00 2001 From: Mathis HERRIOT <197931332+0x485254@users.noreply.github.com> Date: Tue, 20 Jan 2026 16:27:24 +0100 Subject: [PATCH] feat(theme): add theme toggle component and integrate into sidebar --- frontend/src/components/app-sidebar.tsx | 9 ++++++ frontend/src/components/mode-toggle.tsx | 39 +++++++++++++++++++++++ frontend/src/providers/theme-provider.tsx | 11 +++++++ 3 files changed, 59 insertions(+) create mode 100644 frontend/src/components/mode-toggle.tsx create mode 100644 frontend/src/providers/theme-provider.tsx diff --git a/frontend/src/components/app-sidebar.tsx b/frontend/src/components/app-sidebar.tsx index df1aa50..df6f3b8 100644 --- a/frontend/src/components/app-sidebar.tsx +++ b/frontend/src/components/app-sidebar.tsx @@ -20,6 +20,7 @@ import Link from "next/link"; import { usePathname, useSearchParams } from "next/navigation"; import * as React from "react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { ModeToggle } from "@/components/mode-toggle"; import { Collapsible, CollapsibleContent, @@ -286,6 +287,14 @@ export function AppSidebar() { )} + +
+ + Thème + + +
+
diff --git a/frontend/src/components/mode-toggle.tsx b/frontend/src/components/mode-toggle.tsx new file mode 100644 index 0000000..a4e9ef6 --- /dev/null +++ b/frontend/src/components/mode-toggle.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { Moon, Sun } from "lucide-react"; +import { useTheme } from "next-themes"; +import * as React from "react"; +import { Button } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; + +export function ModeToggle() { + const { setTheme } = useTheme(); + + return ( + + + + + + setTheme("light")}> + Clair + + setTheme("dark")}> + Sombre + + setTheme("system")}> + Système + + + + ); +} diff --git a/frontend/src/providers/theme-provider.tsx b/frontend/src/providers/theme-provider.tsx new file mode 100644 index 0000000..a345c4e --- /dev/null +++ b/frontend/src/providers/theme-provider.tsx @@ -0,0 +1,11 @@ +"use client"; + +import type * as React from "react"; +import { ThemeProvider as NextThemesProvider } from "next-themes"; + +export function ThemeProvider({ + children, + ...props +}: React.ComponentProps) { + return {children}; +}