|
36 | 36 | {/if} |
37 | 37 |
|
38 | 38 | <div class="admin-layout"> |
39 | | - <aside class="sidebar" class:open={sidebarOpen}> |
| 39 | + <aside id="admin-sidebar" class="sidebar" class:open={sidebarOpen}> |
40 | 40 | <div class="sidebar-header"> |
41 | 41 | <a href="/admin/organizations" class="sidebar-logo"> |
42 | 42 | <img src={logoLight} alt="PostGuard" class="logo-img light-only" height="22" /><img src={logoDark} alt="PostGuard" class="logo-img dark-only" height="22" /> |
43 | 43 | <span class="logo-badge">Business</span> |
44 | 44 | </a> |
45 | | - <button class="sidebar-close desktop-hide" onclick={() => (sidebarOpen = false)}> |
46 | | - <Icon icon="mdi:close" width="20" height="20" /> |
| 45 | + <button |
| 46 | + class="sidebar-close desktop-hide" |
| 47 | + onclick={() => (sidebarOpen = false)} |
| 48 | + aria-label={$_('nav.closeMenu', { default: 'Close navigation menu' })} |
| 49 | + > |
| 50 | + <Icon icon="mdi:close" width="20" height="20" aria-hidden="true" /> |
47 | 51 | </button> |
48 | 52 | </div> |
49 | 53 |
|
|
73 | 77 |
|
74 | 78 | <div class="admin-main"> |
75 | 79 | <header class="admin-header"> |
76 | | - <button class="hamburger desktop-hide" onclick={() => (sidebarOpen = true)}> |
| 80 | + <button |
| 81 | + class="hamburger desktop-hide" |
| 82 | + onclick={() => (sidebarOpen = true)} |
| 83 | + aria-label={$_('nav.openMenu', { default: 'Open navigation menu' })} |
| 84 | + aria-expanded={sidebarOpen} |
| 85 | + aria-controls="admin-sidebar" |
| 86 | + > |
77 | 87 | <Icon icon="mdi:menu" width="24" height="24" /> |
78 | 88 | </button> |
79 | | - <h2 class="header-title">{$_('nav.adminPanel')}</h2> |
| 89 | + <p class="header-title" role="presentation">{$_('nav.adminPanel')}</p> |
80 | 90 | <div class="header-actions"> |
81 | 91 | <LocaleSwitcher /> |
82 | 92 | <ThemeSwitcher /> |
83 | 93 | </div> |
84 | 94 | </header> |
85 | | - <div class="admin-content"> |
| 95 | + <main id="main-content" class="admin-content"> |
86 | 96 | {@render children()} |
87 | | - </div> |
| 97 | + </main> |
88 | 98 | </div> |
89 | 99 | </div> |
90 | 100 | </div> |
91 | 101 |
|
92 | 102 | {#if sidebarOpen} |
93 | | - <div class="sidebar-overlay desktop-hide" role="presentation" onclick={() => (sidebarOpen = false)}></div> |
| 103 | + <div |
| 104 | + class="sidebar-overlay desktop-hide" |
| 105 | + role="button" |
| 106 | + tabindex="0" |
| 107 | + aria-label={$_('nav.closeMenu', { default: 'Close navigation menu' })} |
| 108 | + onclick={() => (sidebarOpen = false)} |
| 109 | + onkeydown={(e) => { |
| 110 | + if (e.key === 'Escape' || e.key === 'Enter' || e.key === ' ') { |
| 111 | + e.preventDefault(); |
| 112 | + sidebarOpen = false; |
| 113 | + } |
| 114 | + }} |
| 115 | + ></div> |
94 | 116 | {/if} |
95 | 117 |
|
96 | 118 | <style lang="scss"> |
|
0 commit comments