| 1 | "use client"
|
|---|
| 2 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|---|
| 3 | import { faUser } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 4 | import { faBookmark } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 5 | import { faBook } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 6 | import { faPenToSquare } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 7 | import { faListCheck } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 8 | import { faFilePdf } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 9 | import { faBars, faTimes, faGraduationCap } from '@fortawesome/free-solid-svg-icons';
|
|---|
| 10 | import { useState } from 'react';
|
|---|
| 11 |
|
|---|
| 12 | const Navbar = () => {
|
|---|
| 13 | const [isMenuOpen, setIsMenuOpen] = useState(false);
|
|---|
| 14 |
|
|---|
| 15 | const toggleMenu = () => {
|
|---|
| 16 | setIsMenuOpen(!isMenuOpen);
|
|---|
| 17 | };
|
|---|
| 18 |
|
|---|
| 19 | const menuItems = [
|
|---|
| 20 | { icon: faUser, label: 'Профил' },
|
|---|
| 21 | { icon: faBookmark, label: 'Семестри' },
|
|---|
| 22 | { icon: faBook, label: 'Предмети' },
|
|---|
| 23 | { icon: faPenToSquare, label: 'Пријави' },
|
|---|
| 24 | { icon: faListCheck, label: 'Положени' },
|
|---|
| 25 | { icon: faFilePdf, label: 'Документи' }
|
|---|
| 26 | ];
|
|---|
| 27 |
|
|---|
| 28 | return (
|
|---|
| 29 | <>
|
|---|
| 30 | {/* Desktop Navbar */}
|
|---|
| 31 | <nav className="hidden md:flex flex-row gap-2 justify-evenly bg-primary text-white p-7 rounded-xl my-5 text-xl">
|
|---|
| 32 | {menuItems.map((item, index) => (
|
|---|
| 33 | <div key={index} className="group flex flex-row items-center gap-2 px-3 py-2 rounded-lg cursor-pointer transition-all duration-300 hover:bg-white hover:bg-opacity-20 hover:scale-105 hover:shadow-lg hover:text-primary">
|
|---|
| 34 | <FontAwesomeIcon icon={item.icon} className="transition-transform duration-300 group-hover:rotate-12" />
|
|---|
| 35 | <span>{item.label}</span>
|
|---|
| 36 | </div>
|
|---|
| 37 | ))}
|
|---|
| 38 | </nav>
|
|---|
| 39 |
|
|---|
| 40 | {/* Mobile Navbar */}
|
|---|
| 41 | <nav className="md:hidden bg-primary text-white rounded-xl my-5">
|
|---|
| 42 | <div className="flex justify-between items-center p-4">
|
|---|
| 43 | {/* IKnow Logo/Text */}
|
|---|
| 44 | <div className="flex items-center gap-2 text-xl font-bold">
|
|---|
| 45 | <FontAwesomeIcon icon={faGraduationCap} className="text-xl" />
|
|---|
| 46 | IKnow
|
|---|
| 47 | </div>
|
|---|
| 48 |
|
|---|
| 49 | {/* Hamburger Menu Button */}
|
|---|
| 50 | <button
|
|---|
| 51 | onClick={toggleMenu}
|
|---|
| 52 | className="p-2 rounded-lg hover:bg-white hover:bg-opacity-20 transition-colors duration-300"
|
|---|
| 53 | >
|
|---|
| 54 | <FontAwesomeIcon
|
|---|
| 55 | icon={isMenuOpen ? faTimes : faBars}
|
|---|
| 56 | className="text-xl transition-transform duration-300"
|
|---|
| 57 | />
|
|---|
| 58 | </button>
|
|---|
| 59 | </div>
|
|---|
| 60 |
|
|---|
| 61 | {/* Mobile Menu Items */}
|
|---|
| 62 | <div className={`overflow-hidden transition-all duration-300 ease-in-out ${
|
|---|
| 63 | isMenuOpen ? 'max-h-96 opacity-100' : 'max-h-0 opacity-0'
|
|---|
| 64 | }`}>
|
|---|
| 65 | <div className="px-4 pb-4 space-y-2">
|
|---|
| 66 | {menuItems.map((item, index) => (
|
|---|
| 67 | <div key={index} className="group flex flex-row items-center gap-3 px-3 py-3 rounded-lg cursor-pointer transition-all duration-300 hover:bg-white hover:bg-opacity-20 hover:text-primary">
|
|---|
| 68 | <FontAwesomeIcon icon={item.icon} className="transition-transform duration-300 group-hover:rotate-12" />
|
|---|
| 69 | <span className="text-lg">{item.label}</span>
|
|---|
| 70 | </div>
|
|---|
| 71 | ))}
|
|---|
| 72 | </div>
|
|---|
| 73 | </div>
|
|---|
| 74 | </nav>
|
|---|
| 75 | </>
|
|---|
| 76 | );
|
|---|
| 77 | };
|
|---|
| 78 |
|
|---|
| 79 | export default Navbar;
|
|---|