1
1
"use client" ;
2
2
3
- import { useState } from "react" ;
4
- import Link from "next/link" ;
5
3
import { usePathname } from "next/navigation" ;
6
4
import { Button } from "@/components/ui/button" ;
7
5
import { ThemeToggle } from "@/components/theme-toggle" ;
8
- import { BookOpen , Menu as MenuIcon , X } from "lucide-react" ;
9
- import { HoveredLink , Menu , MenuItem } from "@/components/ui/navbar-menu" ;
6
+ import { BookOpen , Menu , X } from "lucide-react" ;
7
+ import { useState } from "react" ;
8
+ import Link from "next/link" ;
10
9
11
10
const navItems = [
12
- { href : "/web-dev" , label : "Web Development" } ,
13
- { href : "/interface-design" , label : "Interface Design" } ,
14
- { href : "/seo" , label : "Search Engine Optimization" } ,
15
- { href : "/branding" , label : "Branding" } ,
16
- { href : "/hobby" , label : "Hobby" } ,
17
- { href : "/individual" , label : "Individual" } ,
18
- { href : "/team" , label : "Team" } ,
19
- { href : "/enterprise" , label : "Enterprise" } ,
11
+ { href : "/" , label : "Home" } ,
12
+ { href : "/learn-more" , label : "How it Works" } ,
13
+ { href : "/FAQ" , label : "FAQs" } ,
14
+ { href : "/blogs" , label : "Blogs" } ,
15
+ { href : "/resources" , label : "Resources" } ,
20
16
] ;
21
17
22
- // Logo Component
23
- const Logo = ( ) => (
24
- < div className = "flex items-center space-x-2" >
25
- < BookOpen className = "h-6 w-6 text-primary mx-2" />
26
- < span className = "text-xl font-semibold font-sans" > LeetCodeJournal</ span >
27
- </ div >
28
- ) ;
18
+ const Navbar1 = ( ) => {
19
+ const [ isMenuOpen , setIsMenuOpen ] = useState ( false ) ;
20
+ const pathname = usePathname ( ) ;
29
21
30
- // Menu Toggle Button
31
- const MenuToggle = ( { isMenuOpen, toggleMenu } : { isMenuOpen : boolean ; toggleMenu : ( ) => void } ) => (
32
- < div onClick = { toggleMenu } className = "lg:hidden focus:outline-none" role = "button" aria-label = { isMenuOpen ? "Close menu" : "Open menu" } >
33
- < div className = "flex flex-row justify-center items-center gap-2" >
34
- < ThemeToggle />
35
- { isMenuOpen ? < X size = { 24 } /> : < MenuIcon size = { 24 } /> }
36
- </ div >
37
- </ div >
38
- ) ;
22
+ const toggleMenu = ( ) => setIsMenuOpen ( ! isMenuOpen ) ;
39
23
40
- // Mobile Menu
41
- const MobileMenu = ( { isMenuOpen, toggleMenu, pathname } : { isMenuOpen : boolean ; toggleMenu : ( ) => void ; pathname : string } ) => {
42
- if ( ! isMenuOpen ) return null ;
43
24
return (
44
- < div className = "lg:hidden mx-auto max-w-[95%] mt-2" >
45
- < nav className = "rounded-lg border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/10 flex flex-col space-y-4 py-4 px-4" >
46
- { navItems . map ( ( item ) => (
47
- < Link
48
- key = { item . href }
49
- href = { item . href }
50
- className = { `text-sm font-medium transition-colors hover:text-primary ${ pathname === item . href ? "text-primary" : "text-muted-foreground" } ` }
51
- onClick = { toggleMenu }
25
+ < header className = "sticky top-4 z-50 w-full" >
26
+ < nav className = "mx-auto max-w-[95%] h-16 rounded-xl border border-foreground/50 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/70 flex items-center justify-between px-4 sm:px-6" >
27
+ < div className = "flex items-center space-x-2" >
28
+ < BookOpen className = "h-6 w-6 text-primary mx-2" />
29
+ < span className = "text-xl font-semibold font-sans" >
30
+ LeetCode Journal
31
+ </ span >
32
+ </ div >
33
+ < div className = "hidden lg:flex items-center space-x-6" >
34
+ { navItems . map ( ( item ) => (
35
+ < Link
36
+ key = { item . href }
37
+ href = { item . href }
38
+ className = { `text-sm px-2 font-medium transition-colors hover:text-primary ${
39
+ pathname === item . href
40
+ ? "text-primary"
41
+ : "text-muted-foreground"
42
+ } `}
43
+ >
44
+ { item . label }
45
+ </ Link >
46
+ ) ) }
47
+ </ div >
48
+ < div className = "hidden lg:flex items-center space-x-4" >
49
+ < Button
50
+ asChild
51
+ className = "bg-transparent hover:bg-transparent hover:text-white hover:border-foreground border border-muted-foreground text-muted-foreground"
52
52
>
53
- { item . label }
54
- </ Link >
55
- ) ) }
56
- < div className = "flex flex-col space-y-4 pt-4 border-t" >
57
- < Button asChild className = "bg-primary-foreground text-white" >
58
53
< Link href = "/auth/signin" > Login</ Link >
59
54
</ Button >
60
- < Button asChild onClick = { toggleMenu } >
55
+ < Button asChild >
61
56
< Link href = "/auth/register" > Sign up</ Link >
62
57
</ Button >
58
+ < ThemeToggle />
59
+ </ div >
60
+ < div
61
+ onClick = { toggleMenu }
62
+ className = "lg:hidden focus:outline-none"
63
+ role = "button"
64
+ aria-label = { isMenuOpen ? "Close menu" : "Open menu" }
65
+ >
66
+ { /* ADDED THEME TOGGLE ALONG WITH MENU */ }
67
+ < div className = "flex flex-row justify-center items-center gap-2" >
68
+ < ThemeToggle />
69
+ { isMenuOpen ? < X size = { 24 } /> : < Menu size = { 24 } /> }
70
+ </ div >
63
71
</ div >
64
72
</ nav >
65
- </ div >
66
- ) ;
67
- } ;
68
-
69
- const Navbar1 = ( ) => {
70
- const [ isMenuOpen , setIsMenuOpen ] = useState ( false ) ;
71
- const pathname = usePathname ( ) ;
72
- const [ active , setActive ] = useState < string | null > ( null ) ;
73
-
74
- const toggleMenu = ( ) => setIsMenuOpen ( ! isMenuOpen ) ;
75
73
76
- return (
77
- < header className = "sticky top-4 z-50 w-full" >
78
- < div className = "relative mx-auto max-w-[95%] rounded-xl" >
79
- { /* Gradient Border */ }
80
- < div className = "absolute inset-0 rounded-xl bg-gradient-to-r from-pink-500 via-purple-500 to-blue-500 p-[2px] blur-lg" > </ div >
81
-
82
- { /* Navbar */ }
83
- < nav className = "relative z-10 h-16 rounded-xl border border-transparent bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/70 flex items-center justify-between px-4 sm:px-6" >
84
- < Logo />
85
- < div className = "hidden lg:flex items-center space-x-6" >
86
- < Menu setActive = { setActive } >
87
- < MenuItem setActive = { setActive } active = { active } item = "Home" >
88
- < div className = "flex flex-col space-y-4 text-sm" >
89
- < HoveredLink href = "/web-dev" > Web Development</ HoveredLink >
90
- < HoveredLink href = "/interface-design" > Interface Design</ HoveredLink >
91
- < HoveredLink href = "/seo" > Search Engine Optimization</ HoveredLink >
92
- < HoveredLink href = "/branding" > Branding</ HoveredLink >
93
- </ div >
94
- </ MenuItem >
95
- < MenuItem setActive = { setActive } active = { active } item = "How it Works" >
96
- < div className = "text-sm grid grid-cols-2 gap-10" >
97
- < HoveredLink href = "/hobby" > Hobby</ HoveredLink >
98
- </ div >
99
- </ MenuItem >
100
- < MenuItem setActive = { setActive } active = { active } item = "FAQs" >
101
- < div className = "flex flex-col space-y-4 text-sm" >
102
- < HoveredLink href = "/hobby" > Hobby</ HoveredLink >
103
- < HoveredLink href = "/individual" > Individual</ HoveredLink >
104
- < HoveredLink href = "/team" > Team</ HoveredLink >
105
- < HoveredLink href = "#" > Enterprise</ HoveredLink >
106
- </ div >
107
- </ MenuItem >
108
- < MenuItem setActive = { setActive } active = { active } item = "Blogs" >
109
- < div className = "flex flex-col space-y-4 text-sm" >
110
- < HoveredLink href = "#" > Blogs1</ HoveredLink >
111
- < HoveredLink href = "#" > Blogs2</ HoveredLink >
112
- </ div >
113
- </ MenuItem >
114
- < Link href = "resources" >
115
- < MenuItem setActive = { setActive } active = { active } item = "Resources" >
116
- < div className = "flex flex-col space-y-4 text-sm" >
117
- < HoveredLink href = "#" > Resources1</ HoveredLink >
118
- < HoveredLink href = "#" > Resources2</ HoveredLink >
119
- </ div >
120
- </ MenuItem >
74
+ { isMenuOpen && (
75
+ < div className = "lg:hidden mx-auto max-w-[95%] mt-2" >
76
+ { /* ADDED X-PADDING TO MAKE IT FIT PROPERLY ON MOBILE SCREENS */ }
77
+ < nav className = "rounded-lg border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/10 flex flex-col space-y-4 py-4 px-4" >
78
+ { navItems . map ( ( item ) => (
79
+ < Link
80
+ key = { item . href }
81
+ href = { item . href }
82
+ className = { `text-sm font-medium transition-colors hover:text-primary ${
83
+ pathname === item . href
84
+ ? "text-primary"
85
+ : "text-muted-foreground"
86
+ } `}
87
+ onClick = { toggleMenu }
88
+ >
89
+ { item . label }
121
90
</ Link >
122
- </ Menu >
123
- </ div >
124
- < div className = "hidden lg:flex items-center space-x-4" >
125
- < Button asChild className = "bg-transparent hover:bg- primary hover:text-white border border-muted- foreground text-muted-foreground dark:text-muted-foreground dark:border-muted-foreground dark:hover:bg-primary dark:hover:text-black " >
126
- < Link href = "/auth/signin" > Login</ Link >
127
- </ Button >
128
- < Button asChild className = "bg-primary text-white hover:bg-primary-dark dark:bg-primary dark:text-black dark:hover:bg-primary-dark" >
129
- < Link href = "/auth/register" > Sign up</ Link >
130
- </ Button >
131
- < ThemeToggle / >
91
+ ) ) }
92
+ < div className = "flex flex-col space-y-4 pt-4 border-t" >
93
+ { /* FORMATTED THE LOGIN BUTTON -> LOGIN TEXT IN CENTER AND BACKGROUND ADDED */ }
94
+ < Button asChild className = "bg-primary- foreground text-white " >
95
+ < Link href = "/auth/signin" > Login</ Link >
96
+ </ Button >
97
+ < Button asChild onClick = { toggleMenu } >
98
+ < Link href = "/auth/register" > Sign up</ Link >
99
+ </ Button >
100
+ < div className = "flex justify-start" > </ div >
132
101
</ div >
133
- < MenuToggle isMenuOpen = { isMenuOpen } toggleMenu = { toggleMenu } />
134
- </ nav >
135
- </ div >
136
- < MobileMenu isMenuOpen = { isMenuOpen } toggleMenu = { toggleMenu } pathname = { pathname } />
137
- </ header >
138
-
102
+ </ nav >
103
+ </ div >
104
+ ) }
105
+ </ header >
139
106
) ;
140
107
} ;
141
108
142
- export default Navbar1 ;
109
+ export default Navbar1 ;
0 commit comments