|
1 | 1 | <script lang="ts" setup>
|
2 |
| -import { NButton, NButtonGroup } from 'naive-ui'; |
3 |
| -import { RouterLink } from 'vue-router'; |
| 2 | +import { NTab, NTabs } from 'naive-ui'; |
| 3 | +import { useRoute, useRouter } from 'vue-router'; |
4 | 4 |
|
5 | 5 | import { Route } from '~/router';
|
6 |
| -import { useRouterStore } from '~/stores/router.store'; |
7 | 6 | import { useI18n } from '~/utils';
|
8 | 7 |
|
9 |
| -const store = useRouterStore(); |
10 | 8 | const i18n = useI18n('route');
|
| 9 | +const route = useRoute(); |
| 10 | +const router = useRouter(); |
| 11 | +
|
| 12 | +const navigate = (to: Route) => { |
| 13 | + router.push(to); |
| 14 | +}; |
11 | 15 |
|
12 | 16 | const routes = [Route.Progress, Route.Calendar, Route.History, Route.List, Route.Search, Route.Settings];
|
13 | 17 | </script>
|
14 | 18 |
|
15 | 19 | <template>
|
16 | 20 | <nav>
|
17 |
| - <NButtonGroup class="buttons"> |
18 |
| - <template v-for="(route, index) in routes" :key="route"> |
19 |
| - <RouterLink v-slot="{ href, navigate, isActive }" :to="`${ store.baseName }/${route}`" custom> |
20 |
| - <NButton :round="index === 0 || index === routes.length - 1" :class="{ active: isActive }" :href="href" @click="navigate"> |
21 |
| - {{ i18n(route.toLowerCase()) }} |
22 |
| - </NButton> |
23 |
| - </RouterLink> |
| 21 | + <NTabs :value="route.name" class="tabs" type="segment" justify-content="space-evenly" animated> |
| 22 | + <template v-for="_route in routes" :key="_route"> |
| 23 | + <NTab class="tab" :name="_route.toLowerCase()" type="segment" @click="navigate(_route)"> |
| 24 | + {{ i18n(_route.toLowerCase()) }} |
| 25 | + </NTab> |
24 | 26 | </template>
|
25 |
| - </NButtonGroup> |
| 27 | + </NTabs> |
26 | 28 | </nav>
|
27 | 29 | </template>
|
28 | 30 |
|
29 | 31 | <style lang="scss" scoped>
|
30 | 32 | nav {
|
31 |
| - margin: 1rem 0; |
| 33 | + margin: 0 0.25rem; |
32 | 34 | font-size: 12px;
|
33 | 35 | text-align: center;
|
| 36 | +
|
| 37 | + a { |
| 38 | + color: inherit; /* blue colors for links too */ |
| 39 | + text-decoration: inherit; /* no underline */ |
| 40 | + } |
| 41 | +
|
| 42 | + .tabs { |
| 43 | + display: flex; |
| 44 | + justify-content: center; |
| 45 | + min-height: 2.75rem; |
| 46 | + } |
34 | 47 | }
|
| 48 | +</style> |
| 49 | + |
| 50 | +<style lang="scss"> |
| 51 | +nav { |
| 52 | + .tabs { |
| 53 | + --n-bar-color: var(--trakt-red-dark) !important; |
| 54 | + --n-tab-text-color-active: var(--vt-c-white) !important; |
| 55 | + --n-tab-text-color-hover: color-mix(in srgb, var(--trakt-red) 90%, var(--vt-c-white)) !important; |
| 56 | + --n-tab-color-segment: color-mix(in srgb, var(--trakt-red) 50%, transparent) !important; |
| 57 | + --n-color-segment: inherit !important; |
35 | 58 |
|
36 |
| -.buttons { |
37 |
| - display: flex; |
38 |
| - justify-content: center; |
| 59 | + /* stylelint-disable-next-line selector-class-pattern -- overriding theme class */ |
| 60 | + .n-tabs-tab--active { |
| 61 | + --n-tab-text-color-hover: color-mix(in srgb, var(--trakt-white) 99%, var(--vt-c-red)) !important; |
| 62 | + } |
39 | 63 |
|
40 |
| - .active { |
41 |
| - color: var(--n-text-color-pressed); |
42 |
| - background-color: var(--n-color-pressed); |
| 64 | + .n-tabs-capsule { |
| 65 | + backdrop-filter: blur(1px); |
| 66 | + } |
43 | 67 | }
|
44 | 68 | }
|
45 | 69 | </style>
|
0 commit comments