@@ -42,7 +42,13 @@ export interface NavbarMenuProps {
4242export interface NavbarWithMenuProps {
4343 sections : NavbarMenuSection [ ] ;
4444 navItems ?: Array <
45- | { type : "link" ; label : string ; href : string }
45+ | {
46+ type : "link" ;
47+ label : string ;
48+ href : string ;
49+ icon ?: React . ReactNode ;
50+ external ?: boolean ;
51+ }
4652 | { type : "dropdown" ; label : string ; menu : string }
4753 > ;
4854 logo ?: React . ReactNode ;
@@ -151,7 +157,7 @@ export function NavbarMenu({ activeMenu, sections }: NavbarMenuProps) {
151157 return (
152158 < div
153159 className = { cn (
154- "absolute top-full left-0 z-40 w-full origin-top overflow-hidden border border-y -0 border-border bg-background/95 backdrop-blur-2xl outline-none" ,
160+ "absolute top-full left-0 z-40 w-full origin-top overflow-hidden rounded-b-2xl border border-t -0 border-border bg-background/95 backdrop-blur-2xl outline-none" ,
155161 ) }
156162 >
157163 < div className = "p-6" >
@@ -223,7 +229,7 @@ export function NavbarWithMenu({
223229 duration : shouldReduceMotion ? 0.35 : 0.8 ,
224230 ease : [ 0.2 , 0.9 , 0.24 , 1 ] ,
225231 } }
226- className = "sticky top-0 z-50 w-full"
232+ className = "sticky top-3 z-50 w-full"
227233 >
228234 { /* biome-ignore lint/a11y/noStaticElementInteractions: Hover container for menu, not interactive content */ }
229235 < motion . div
@@ -232,7 +238,7 @@ export function NavbarWithMenu({
232238 onMouseLeave = { handleNavbarMouseLeave }
233239 animate = { {
234240 maxWidth : scrolled ? "56rem" : "100vw" ,
235- marginTop : scrolled ? 12 : 0 ,
241+ marginTop : scrolled ? 12 : 8 ,
236242 paddingLeft : scrolled ? 16 : 0 ,
237243 paddingRight : scrolled ? 16 : 0 ,
238244 } }
@@ -246,12 +252,12 @@ export function NavbarWithMenu({
246252 < motion . div
247253 initial = { false }
248254 className = { cn (
249- "navbar_content flex h-14 w-full items-center justify-between border transition-colors duration-300" ,
255+ "navbar_content relative flex h-14 w-full items-center justify-between border transition-[border-radius,background-color,border-color] duration-300" ,
250256 activeDropdown
251- ? "border-border border-b-transparent bg-background backdrop-blur-md"
257+ ? "rounded-t-lg border-border border-b-transparent bg-background backdrop-blur-md"
252258 : scrolled
253- ? "border-border bg-card/40 backdrop-blur-md"
254- : "border-transparent bg-transparent" ,
259+ ? "rounded-lg border-border bg-card/40 backdrop-blur-md"
260+ : "rounded-none border-transparent bg-transparent" ,
255261 ) }
256262 animate = { {
257263 paddingLeft : scrolled ? 12 : 32 ,
@@ -276,20 +282,23 @@ export function NavbarWithMenu({
276282 ) }
277283 </ div >
278284
279- < div className = "hidden items-center gap-2 px-1 py-1 md:flex" >
280- < div className = "flex items-center gap-1" >
285+ { /* Center nav — social icons */ }
286+ < div className = "absolute left-1/2 hidden -translate-x-1/2 items-center gap-1 md:flex " >
281287 { items . map ( ( item ) =>
282288 item . type === "link" ? (
283289 < Link
284290 key = { item . href }
285291 href = { item . href }
286- className = "relative flex h-9 cursor-pointer items-center px-4 py-2 text-sm text-foreground transition-colors hover:bg-foreground/5"
292+ target = { item . external ? "_blank" : undefined }
293+ rel = { item . external ? "noopener noreferrer" : undefined }
294+ aria-label = { item . label }
295+ className = "relative flex h-9 cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm text-foreground transition-colors hover:bg-foreground/5"
287296 onMouseEnter = { ( ) => {
288297 setHoveredItem ( item . label . toLowerCase ( ) ) ;
289298 setActiveDropdown ( null ) ;
290299 } }
291300 >
292- < span className = "relative z-10" > { item . label } </ span >
301+ { item . icon ?? < span className = "relative z-10" > { item . label } </ span > }
293302 </ Link >
294303 ) : (
295304 < button
@@ -303,7 +312,8 @@ export function NavbarWithMenu({
303312 ) }
304313 < div className = "relative z-10 flex items-center gap-2" >
305314 < span >
306- { item . label . charAt ( 0 ) . toUpperCase ( ) + item . label . slice ( 1 ) }
315+ { item . label . charAt ( 0 ) . toUpperCase ( ) +
316+ item . label . slice ( 1 ) }
307317 </ span >
308318 < HugeiconsIcon
309319 icon = { ArrowDown01Icon }
@@ -317,10 +327,11 @@ export function NavbarWithMenu({
317327 </ button >
318328 ) ,
319329 ) }
320- </ div >
321- { cta }
322330 </ div >
323331
332+ { /* Right — CTA (desktop) */ }
333+ < div className = "hidden md:block" > { cta } </ div >
334+
324335 < Sheet >
325336 < SheetTrigger asChild className = "md:hidden" >
326337 < Button variant = "ghost" size = "icon" aria-label = "Open menu" >
0 commit comments