| import React, { useState } from "react"; | |
| import { Link, useLocation } from "react-router-dom"; | |
| import { | |
| Home, | |
| FileText, | |
| Brain, | |
| BookOpen, | |
| Settings, | |
| User, | |
| LogOut, | |
| ChevronLeft, | |
| ChevronRight, | |
| } from "lucide-react"; | |
| import { useAuth } from "../context/AuthContext"; | |
| const Sidebar: React.FC = () => { | |
| const location = useLocation(); | |
| const { username, logout } = useAuth(); | |
| const [collapsed, setCollapsed] = useState(false); | |
| const navItems = [ | |
| { path: "/dashboard", label: "Dashboard", icon: <Home size={20} /> }, | |
| { path: "/notes", label: "Notes", icon: <BookOpen size={20} /> }, | |
| { path: "/AIInterview", label: "AI Interview", icon: <Brain size={20} /> }, | |
| { path: "/quize", label: "Resume Quiz", icon: <FileText size={20} /> }, | |
| ]; | |
| return ( | |
| <aside | |
| // 1. MAIN BACKGROUND: #434E78 | |
| className={`flex flex-col justify-between h-screen bg-[#434E78] text-white transition-all duration-300 shadow-xl border-r border-[#607B8F]/50 ${ | |
| collapsed ? "w-20" : "w-64" | |
| }`} | |
| > | |
| {/* Top Section */} | |
| <div> | |
| <div className="flex items-center justify-between font-bold py-6 px-6 border-b border-[#607B8F]/50"> | |
| {!collapsed && ( | |
| <span className="text-xl tracking-wide font-handwriting text-[#F7E396]"> | |
| Prep AI | |
| </span> | |
| )} | |
| <button | |
| onClick={() => setCollapsed(!collapsed)} | |
| className="p-1 hover:bg-[#E97F4A] rounded-full transition text-white" | |
| > | |
| {collapsed ? <ChevronRight size={20} /> : <ChevronLeft size={20} />} | |
| </button> | |
| </div> | |
| <nav className="p-4 space-y-3"> | |
| {navItems.map((item) => ( | |
| <Link | |
| key={item.path} | |
| to={item.path} | |
| // 2. BUTTON LOGIC: | |
| // - Default: bg-[#607B8F] | |
| // - Hover: bg-[#E97F4A] | |
| // - Active: Border #F7E396 (Highlight) | |
| className={`flex items-center space-x-3 p-3 rounded-xl transition-all duration-200 border-2 | |
| ${ | |
| location.pathname === item.path | |
| ? "bg-[#607B8F] border-[#F7E396] shadow-lg translate-x-1" | |
| : "bg-[#607B8F] border-transparent hover:bg-[#E97F4A] text-gray-100 hover:text-white" | |
| }`} | |
| > | |
| <span className="text-white">{item.icon}</span> | |
| {!collapsed && ( | |
| <span className="font-medium text-white">{item.label}</span> | |
| )} | |
| </Link> | |
| ))} | |
| </nav> | |
| </div> | |
| {/* Bottom Section */} | |
| <div className="p-4 border-t border-[#607B8F]/50 space-y-3"> | |
| <button className="flex items-center space-x-3 p-3 rounded-xl bg-[#607B8F] border-2 border-transparent hover:bg-[#E97F4A] transition w-full text-left text-white"> | |
| <Settings size={20} /> | |
| {!collapsed && <span>Settings</span>} | |
| </button> | |
| <button className="flex items-center space-x-3 p-3 rounded-xl bg-[#607B8F] border-2 border-transparent hover:bg-[#E97F4A] transition w-full text-left text-white"> | |
| <User size={20} /> | |
| {!collapsed && <span>{username}</span>} | |
| </button> | |
| {/* Logout */} | |
| <button | |
| onClick={logout} | |
| className="flex items-center space-x-3 p-3 rounded-xl bg-red-500/80 border-2 border-transparent hover:bg-red-600 transition w-full text-left text-white" | |
| > | |
| <LogOut size={20} /> | |
| {!collapsed && <span>Logout</span>} | |
| </button> | |
| </div> | |
| </aside> | |
| ); | |
| }; | |
| export default Sidebar; | |