77 NavigationMenuItem ,
88 NavigationMenuLink ,
99 NavigationMenuList ,
10+ NavigationMenuTrigger ,
11+ NavigationMenuContent ,
1012} from "@/components/ui/navigation-menu" ;
1113import { ModeToggle } from "@/components/primitives/mode-toggle" ;
1214import { Menu , Mail } from "lucide-react" ;
@@ -18,9 +20,11 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/component
1820import { Button } from "@/components/ui/button" ;
1921import { AnimatePresence , motion } from "framer-motion" ;
2022import { useState } from "react" ;
23+ import { useRouter } from "next/navigation" ;
2124
2225export function Header ( ) {
2326 const [ isOpen , setIsOpen ] = useState ( false ) ;
27+ const router = useRouter ( ) ;
2428
2529 return (
2630 < Collapsible
@@ -44,18 +48,45 @@ export function Header() {
4448 />
4549 < span className = "font-semibold" > ALPHA HKU</ span >
4650 </ Link >
47- < nav className = "hidden lg:flex items-center gap-6 text-sm " >
48- < NavigationMenu >
49- < NavigationMenuList >
51+ < nav className = "hidden lg:flex" >
52+ < NavigationMenu viewport = { false } >
53+ < NavigationMenuList className = "gap-0" >
5054 { siteConfig . mainNav . map ( ( link ) => (
5155 < NavigationMenuItem key = { link . href } >
52- < NavigationMenuLink asChild >
53- { isInternalHref ( link . href ) ? (
54- < Link href = { link . href } > { link . label } </ Link >
55- ) : (
56- < a href = { link . href } > { link . label } </ a >
57- ) }
58- </ NavigationMenuLink >
56+ { link . children && link . children . length > 0 ? (
57+ < >
58+ < NavigationMenuTrigger
59+ className = "p-2 font-normal bg-transparent"
60+ onClick = { ( ) => router . push ( link . href ) }
61+ >
62+ { link . label }
63+ </ NavigationMenuTrigger >
64+ < NavigationMenuContent >
65+ < div className = "w-28" >
66+ { link . children . map ( ( child ) => (
67+ < NavigationMenuLink
68+ key = { child . href }
69+ asChild
70+ >
71+ { isInternalHref ( child . href ) ? (
72+ < Link href = { child . href } > { child . label } </ Link >
73+ ) : (
74+ < a href = { child . href } > { child . label } </ a >
75+ ) }
76+ </ NavigationMenuLink >
77+ ) ) }
78+ </ div >
79+ </ NavigationMenuContent >
80+ </ >
81+ ) : (
82+ < NavigationMenuLink asChild >
83+ { isInternalHref ( link . href ) ? (
84+ < Link href = { link . href } > { link . label } </ Link >
85+ ) : (
86+ < a href = { link . href } > { link . label } </ a >
87+ ) }
88+ </ NavigationMenuLink >
89+ ) }
5990 </ NavigationMenuItem >
6091 ) ) }
6192 </ NavigationMenuList >
@@ -126,25 +157,51 @@ export function Header() {
126157 < div className = "border-b border-t bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/80" >
127158 < div className = "container px-4 lg:px-6 py-4" >
128159 < nav className = "grid gap-4 text-sm" >
129- { siteConfig . mainNav . map ( ( link ) =>
130- isInternalHref ( link . href ) ? (
131- < Link
132- key = { link . href }
133- href = { link . href }
134- className = "hover:text-foreground/80"
135- >
136- { link . label }
137- </ Link >
138- ) : (
139- < a
140- key = { link . href }
141- href = { link . href }
142- className = "hover:text-foreground/80"
143- >
144- { link . label }
145- </ a >
146- )
147- ) }
160+ { siteConfig . mainNav . map ( ( link ) => (
161+ < div
162+ key = { link . href }
163+ className = "grid gap-4"
164+ >
165+ { isInternalHref ( link . href ) ? (
166+ < Link
167+ href = { link . href }
168+ className = "hover:text-foreground/80"
169+ >
170+ { link . label }
171+ </ Link >
172+ ) : (
173+ < a
174+ href = { link . href }
175+ className = "hover:text-foreground/80"
176+ >
177+ { link . label }
178+ </ a >
179+ ) }
180+ { link . children && link . children . length > 0 && (
181+ < div className = "ml-4 grid gap-2" >
182+ { link . children . map ( ( child ) =>
183+ isInternalHref ( child . href ) ? (
184+ < Link
185+ key = { child . href }
186+ href = { child . href }
187+ className = "hover:text-foreground/80"
188+ >
189+ { child . label }
190+ </ Link >
191+ ) : (
192+ < a
193+ key = { child . href }
194+ href = { child . href }
195+ className = "hover:text-foreground/80"
196+ >
197+ { child . label }
198+ </ a >
199+ )
200+ ) }
201+ </ div >
202+ ) }
203+ </ div >
204+ ) ) }
148205 </ nav >
149206 </ div >
150207 </ div >
0 commit comments