|
1 | 1 | <template> |
2 | | - <nav class="fixed bottom-0 left-0 right-0 z-30 lg:hidden" :class="navClasses" |
3 | | - :aria-label="$t('navigation.mainNavigation')"> |
| 2 | + <nav |
| 3 | + class="fixed bottom-0 left-0 right-0 z-30 lg:hidden" |
| 4 | + :class="navClasses" |
| 5 | + :aria-label="$t('navigation.mainNavigation')" |
| 6 | + > |
4 | 7 | <div class="flex justify-around items-center h-16 px-2 pb-safe"> |
5 | | - <RouterLink v-for="item in bottomNavItems" :key="item.to" :to="item.to" class="nav-item relative" |
6 | | - :class="navItemClasses(item.to)" :aria-label="item.label"> |
| 8 | + <RouterLink |
| 9 | + v-for="item in bottomNavItems" |
| 10 | + :key="item.to" |
| 11 | + :to="item.to" |
| 12 | + class="nav-item relative" |
| 13 | + :class="navItemClasses(item.to)" |
| 14 | + :aria-label="item.label" |
| 15 | + > |
7 | 16 | <component :is="item.icon" class="w-6 h-6" /> |
8 | | - <span v-if="item.showBadge" |
9 | | - class="absolute top-1 right-1 w-2 h-2 bg-primary-600 dark:bg-primary-400 rounded-full" aria-hidden="true" /> |
| 17 | + <span |
| 18 | + v-if="item.showBadge" |
| 19 | + class="absolute top-1 right-1 w-2 h-2 bg-primary-600 dark:bg-primary-400 rounded-full" |
| 20 | + aria-hidden="true" |
| 21 | + /> |
10 | 22 | <span class="sr-only">{{ item.label }}</span> |
11 | 23 | </RouterLink> |
12 | 24 |
|
13 | 25 | <!-- Menu Button --> |
14 | | - <button type="button" class="nav-item relative" :class="menuButtonClasses" :aria-label="$t('navigation.menu')" |
15 | | - @click="showMenu = true"> |
| 26 | + <button |
| 27 | + type="button" |
| 28 | + class="nav-item relative" |
| 29 | + :class="menuButtonClasses" |
| 30 | + :aria-label="$t('navigation.menu')" |
| 31 | + @click="showMenu = true" |
| 32 | + > |
16 | 33 | <MoreHorizontalIcon class="w-6 h-6" /> |
17 | 34 | <!-- Show badge if any overflow item has a badge --> |
18 | | - <span v-if="hasOverflowBadge" |
19 | | - class="absolute top-1 right-1 w-2 h-2 bg-primary-600 dark:bg-primary-400 rounded-full" aria-hidden="true" /> |
| 35 | + <span |
| 36 | + v-if="hasOverflowBadge" |
| 37 | + class="absolute top-1 right-1 w-2 h-2 bg-primary-600 dark:bg-primary-400 rounded-full" |
| 38 | + aria-hidden="true" |
| 39 | + /> |
20 | 40 | <span class="sr-only">{{ $t('navigation.menu') }}</span> |
21 | 41 | </button> |
22 | 42 | </div> |
|
26 | 46 | <BaseModal v-model:open="showMenu" :title="$t('navigation.menu')" size="sm"> |
27 | 47 | <nav class="space-y-2"> |
28 | 48 | <!-- Navigation Items (Home, About, Settings) --> |
29 | | - <RouterLink v-for="item in overflowItems" :key="item.to" :to="item.to" |
| 49 | + <RouterLink |
| 50 | + v-for="item in overflowItems" |
| 51 | + :key="item.to" |
| 52 | + :to="item.to" |
30 | 53 | class="flex items-center justify-between px-4 py-3 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors duration-150" |
31 | | - @click="showMenu = false"> |
| 54 | + @click="showMenu = false" |
| 55 | + > |
32 | 56 | <div class="flex items-center space-x-3"> |
33 | 57 | <component :is="item.icon" class="w-5 h-5" /> |
34 | 58 | <span>{{ item.label }}</span> |
35 | 59 | </div> |
36 | 60 | <!-- Badge indicator for items with notifications --> |
37 | | - <span v-if="item.showBadge" class="w-2 h-2 bg-primary-600 dark:bg-primary-400 rounded-full" |
38 | | - aria-hidden="true" /> |
| 61 | + <span |
| 62 | + v-if="item.showBadge" |
| 63 | + class="w-2 h-2 bg-primary-600 dark:bg-primary-400 rounded-full" |
| 64 | + aria-hidden="true" |
| 65 | + /> |
39 | 66 | </RouterLink> |
40 | 67 |
|
41 | 68 | <!-- Divider --> |
42 | 69 | <hr class="border-gray-200 dark:border-gray-700" /> |
43 | 70 |
|
44 | 71 | <!-- Theme Toggle --> |
45 | | - <button type="button" |
| 72 | + <button |
| 73 | + type="button" |
46 | 74 | class="flex items-center space-x-3 px-4 py-3 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors duration-150 w-full text-left" |
47 | | - @click="toggleTheme"> |
| 75 | + @click="toggleTheme" |
| 76 | + > |
48 | 77 | <SunIcon v-if="isDark" class="w-5 h-5" /> |
49 | 78 | <MoonIcon v-else class="w-5 h-5" /> |
50 | 79 | <span>{{ isDark ? $t('theme.light') : $t('theme.dark') }}</span> |
51 | 80 | </button> |
52 | 81 |
|
53 | 82 | <!-- Language Toggle --> |
54 | | - <button type="button" |
| 83 | + <button |
| 84 | + type="button" |
55 | 85 | class="flex items-center space-x-3 px-4 py-3 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors duration-150 w-full text-left" |
56 | | - @click="toggleLanguage"> |
| 86 | + @click="toggleLanguage" |
| 87 | + > |
57 | 88 | <LanguagesIcon class="w-5 h-5" /> |
58 | 89 | <span>{{ locale === 'en' ? 'Français' : 'English' }}</span> |
59 | 90 | </button> |
|
62 | 93 | <hr class="border-gray-200 dark:border-gray-700" /> |
63 | 94 |
|
64 | 95 | <!-- GitHub Link --> |
65 | | - <a href="https://github.com/gcharest/gluko" target="_blank" rel="noopener" |
| 96 | + <a |
| 97 | + href="https://github.com/gcharest/gluko" |
| 98 | + target="_blank" |
| 99 | + rel="noopener" |
66 | 100 | class="flex items-center space-x-3 px-4 py-3 rounded-lg text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors duration-150" |
67 | | - @click="showMenu = false"> |
| 101 | + @click="showMenu = false" |
| 102 | + > |
68 | 103 | <!-- GitHub icon from Simple Icons --> |
69 | | - <svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> |
| 104 | + <svg |
| 105 | + class="w-5 h-5" |
| 106 | + viewBox="0 0 24 24" |
| 107 | + fill="currentColor" |
| 108 | + xmlns="http://www.w3.org/2000/svg" |
| 109 | + > |
70 | 110 | <path |
71 | | - d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" /> |
| 111 | + d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" |
| 112 | + /> |
72 | 113 | </svg> |
73 | 114 | <span>{{ $t('navigation.sourceCode') }}</span> |
74 | 115 | </a> |
75 | 116 | </nav> |
76 | 117 |
|
77 | 118 | <!-- Version Info --> |
78 | 119 | <div |
79 | | - class="mt-6 pt-4 border-t border-gray-200 dark:border-gray-700 text-center text-sm text-gray-500 dark:text-gray-400"> |
| 120 | + class="mt-6 pt-4 border-t border-gray-200 dark:border-gray-700 text-center text-sm text-gray-500 dark:text-gray-400" |
| 121 | + > |
80 | 122 | <p>Gluko © Guillaume Charest 2021-2023</p> |
81 | | - <p class="text-xs">ver. {{ version }} ({{ $t('settings.app.buildDate') }} {{ buildDate }}, {{ |
82 | | - $t('settings.app.deployDate') }} {{ deployDate }})</p> |
| 123 | + <p class="text-xs"> |
| 124 | + ver. {{ version }} ({{ $t('settings.app.buildDate') }} {{ buildDate }}, |
| 125 | + {{ $t('settings.app.deployDate') }} {{ deployDate }}) |
| 126 | + </p> |
83 | 127 | </div> |
84 | 128 | </BaseModal> |
85 | 129 | </template> |
|
0 commit comments