From 77521f47b3762b183afddc873ade063bd619a3a2 Mon Sep 17 00:00:00 2001 From: Shreyanshi210205 Date: Mon, 27 Oct 2025 09:56:07 +0530 Subject: [PATCH] feat(theme): implement dark mode support across the application --- frontend/src/components/Home.tsx | 2 +- frontend/src/components/Navbar.tsx | 61 +++++++++++++++++++++++----- frontend/src/index.css | 7 ++++ frontend/src/main.tsx | 3 ++ frontend/src/pages/Browse.tsx | 6 +-- frontend/src/pages/Cart.jsx | 2 +- frontend/src/pages/Dashboard.tsx | 32 +++++++-------- frontend/src/pages/Payment.jsx | 2 +- frontend/src/pages/ProductDetail.tsx | 6 +-- frontend/src/pages/Sell.tsx | 8 ++-- frontend/tailwind.config.ts | 6 ++- 11 files changed, 94 insertions(+), 41 deletions(-) diff --git a/frontend/src/components/Home.tsx b/frontend/src/components/Home.tsx index 5b5494c..ad19fda 100644 --- a/frontend/src/components/Home.tsx +++ b/frontend/src/components/Home.tsx @@ -32,7 +32,7 @@ const Hero: React.FC = () => { {/* Left Content */}
-

+

UniLoot - Your
Campus Marketplace,
Simplified! diff --git a/frontend/src/components/Navbar.tsx b/frontend/src/components/Navbar.tsx index 89c1703..b488e81 100644 --- a/frontend/src/components/Navbar.tsx +++ b/frontend/src/components/Navbar.tsx @@ -1,13 +1,33 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import { Link, useNavigate, useLocation } from "react-router-dom"; import { Button } from "@/components/ui/button"; -import { Menu, X } from "lucide-react"; +import { Menu, X, Moon, Sun } from "lucide-react"; const Navbar: React.FC = () => { const [isOpen, setIsOpen] = useState(false); + + const getInitialTheme = () => + typeof document !== "undefined" && document.documentElement.classList.contains("dark") + ? ("dark" as const) + : ("light" as const); + + const [theme, setTheme] = useState<"light" | "dark">(getInitialTheme); const navigate = useNavigate(); const location = useLocation(); + useEffect(() => { + const root = window.document.documentElement; + if (theme === "dark") root.classList.add("dark"); + else root.classList.remove("dark"); + try { + localStorage.setItem("theme", theme); + } catch (err) { + // ignore (e.g. storage not available) + } + }, [theme]); + + const toggleTheme = () => setTheme((prev) => (prev === "dark" ? "light" : "dark")); + const handleNavClick = (path: string) => { navigate(path); setIsOpen(false); @@ -20,11 +40,11 @@ const Navbar: React.FC = () => { ]; return ( -