@@ -182,8 +182,10 @@ function AboutDropdown() {
182182 ) ;
183183}
184184
185+ // `block` so each link fills its row: inside the sheet's <li>s an inline
186+ // anchor would shrink the tap target to the width of its text.
185187const navLinkClass = ( { isActive } : { isActive : boolean } ) =>
186- `text-sm font-medium transition-colors hover:text-primary ${
188+ `block text-sm font-medium transition-colors hover:text-primary ${
187189 isActive ? 'text-primary' : 'text-muted-foreground'
188190 } `;
189191
@@ -197,7 +199,7 @@ function GitHubLink() {
197199 href = { GITHUB_URL }
198200 target = "_blank"
199201 rel = "noopener noreferrer"
200- aria-label = "Code for Philly on GitHub"
202+ aria-label = "Code for Philly on GitHub (opens in new tab) "
201203 >
202204 < GitHubIcon />
203205 </ a >
@@ -235,20 +237,33 @@ export function AppHeader() {
235237
236238 { /* Desktop content cluster. The parent gap is the only source of
237239 spacing between children — no per-child margins. */ }
240+ { /* A nav is a list of destinations — the <ul>/<li> is what tells a
241+ screen reader how many there are and where you are in them. The
242+ flex/gap spacing moves to the <ul>; the <li>s contribute none. */ }
238243 < nav
239244 aria-label = "Primary navigation"
240- className = "hidden md:flex items-center gap-2 ml-4 flex-1"
245+ className = "hidden md:block ml-4 flex-1"
241246 >
242- < NavLink to = "/projects" className = { navLinkClass } >
243- Projects
244- </ NavLink >
245- < NavLink to = "/help-wanted" className = { navLinkClass } >
246- Help Wanted
247- </ NavLink >
248- < NavLink to = "/members" className = { navLinkClass } >
249- Members
250- </ NavLink >
251- < AboutDropdown />
247+ < ul className = "flex items-center gap-2" >
248+ < li >
249+ < NavLink to = "/projects" className = { navLinkClass } >
250+ Projects
251+ </ NavLink >
252+ </ li >
253+ < li >
254+ < NavLink to = "/help-wanted" className = { navLinkClass } >
255+ Help Wanted
256+ </ NavLink >
257+ </ li >
258+ < li >
259+ < NavLink to = "/members" className = { navLinkClass } >
260+ Members
261+ </ NavLink >
262+ </ li >
263+ < li >
264+ < AboutDropdown />
265+ </ li >
266+ </ ul >
252267 </ nav >
253268
254269 { /* Desktop utility cluster: GitHub, search, auth, then the Volunteer
@@ -295,58 +310,93 @@ export function AppHeader() {
295310 </ SheetHeader >
296311 { /* min-h-0 + overflow-y-auto so the list stays reachable on
297312 short viewports instead of overflowing the panel. */ }
313+ { /* Three lists with the separators and the group heading
314+ between them, rather than one list interrupted by
315+ non-list children. The nav keeps the flex column so the
316+ gap-2 rhythm between groups is unchanged. */ }
298317 < nav
299318 aria-label = "Mobile navigation"
300319 className = "flex flex-col gap-2 px-4 min-h-0 overflow-y-auto"
301320 >
302- < NavLink to = "/projects" className = { navLinkClass } >
303- Projects
304- </ NavLink >
305- < NavLink to = "/help-wanted" className = { navLinkClass } >
306- Help Wanted
307- </ NavLink >
308- < NavLink to = "/members" className = { navLinkClass } >
309- Members
310- </ NavLink >
321+ < ul className = "flex flex-col gap-2" >
322+ < li >
323+ < NavLink to = "/projects" className = { navLinkClass } >
324+ Projects
325+ </ NavLink >
326+ </ li >
327+ < li >
328+ < NavLink to = "/help-wanted" className = { navLinkClass } >
329+ Help Wanted
330+ </ NavLink >
331+ </ li >
332+ < li >
333+ < NavLink to = "/members" className = { navLinkClass } >
334+ Members
335+ </ NavLink >
336+ </ li >
337+ </ ul >
311338 < Separator />
312- < p className = "text-xs text-muted-foreground font-medium uppercase tracking-wide" >
339+ { /* SheetTitle ("Menu") renders a Radix DialogTitle, i.e. an
340+ h2 — so this group label is an h3, not a styled <p>. */ }
341+ < h3 className = "text-xs text-muted-foreground font-medium uppercase tracking-wide" >
313342 About
314- </ p >
315- < NavLink to = "/pages/mission" className = { navLinkClass } >
316- Mission
317- </ NavLink >
318- < NavLink to = "/pages/leadership" className = { navLinkClass } >
319- Leadership
320- </ NavLink >
321- < NavLink to = "/pages/code-of-conduct" className = { navLinkClass } >
322- Code of Conduct
323- </ NavLink >
324- < NavLink to = "/pages/hackathons" className = { navLinkClass } >
325- Hackathons
326- </ NavLink >
327- < NavLink to = "/sponsor" className = { navLinkClass } >
328- Sponsor
329- </ NavLink >
330- < a
331- href = "mailto:hello@codeforphilly.org"
332- className = "text-sm font-medium text-muted-foreground hover:text-primary"
333- onClick = { ( ) => setMobileOpen ( false ) }
334- >
335- Contact
336- </ a >
343+ </ h3 >
344+ < ul className = "flex flex-col gap-2" >
345+ < li >
346+ < NavLink to = "/pages/mission" className = { navLinkClass } >
347+ Mission
348+ </ NavLink >
349+ </ li >
350+ < li >
351+ < NavLink to = "/pages/leadership" className = { navLinkClass } >
352+ Leadership
353+ </ NavLink >
354+ </ li >
355+ < li >
356+ < NavLink to = "/pages/code-of-conduct" className = { navLinkClass } >
357+ Code of Conduct
358+ </ NavLink >
359+ </ li >
360+ < li >
361+ < NavLink to = "/pages/hackathons" className = { navLinkClass } >
362+ Hackathons
363+ </ NavLink >
364+ </ li >
365+ < li >
366+ < NavLink to = "/sponsor" className = { navLinkClass } >
367+ Sponsor
368+ </ NavLink >
369+ </ li >
370+ < li >
371+ < a
372+ href = "mailto:hello@codeforphilly.org"
373+ className = "block text-sm font-medium text-muted-foreground hover:text-primary"
374+ onClick = { ( ) => setMobileOpen ( false ) }
375+ >
376+ Contact
377+ </ a >
378+ </ li >
379+ </ ul >
337380 < Separator />
338- < a
339- href = { GITHUB_URL }
340- target = "_blank"
341- rel = "noopener noreferrer"
342- className = "text-sm font-medium text-muted-foreground hover:text-primary"
343- onClick = { ( ) => setMobileOpen ( false ) }
344- >
345- GitHub
346- </ a >
347- < NavLink to = "/volunteer" className = { navLinkClass } >
348- Volunteer
349- </ NavLink >
381+ < ul className = "flex flex-col gap-2" >
382+ < li >
383+ < a
384+ href = { GITHUB_URL }
385+ target = "_blank"
386+ rel = "noopener noreferrer"
387+ className = "block text-sm font-medium text-muted-foreground hover:text-primary"
388+ onClick = { ( ) => setMobileOpen ( false ) }
389+ >
390+ GitHub
391+ < span className = "sr-only" > (opens in new tab)</ span >
392+ </ a >
393+ </ li >
394+ < li >
395+ < NavLink to = "/volunteer" className = { navLinkClass } >
396+ Volunteer
397+ </ NavLink >
398+ </ li >
399+ </ ul >
350400 </ nav >
351401 < Separator />
352402 < div className = "px-4 pb-4" >
0 commit comments