1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <script setup lang="ts">
- import { useToggle } from '@vueuse/core'
- import VPLink from '../common/vp-link.vue'
- import { useTranslation } from '../../composables/translation'
- import ExpandIcon from '../icons/expand.vue'
- const emit = defineEmits(['close'])
- const { languageMap, langs, lang, switchLang, helpTranslate } = useTranslation()
- const [show, toggle] = useToggle()
- const onSwitchLang = (lang: string) => {
- switchLang(lang)
- emit('close')
- }
- </script>
- <template>
- <div class="full-screen-translation">
- <ElButton style="width: 100%; color: var(--text-color)" text @click="toggle">
- <div class="translation-toggler">
- <span> Translations </span>
- <ElIcon :size="14">
- <ExpandIcon class="toggle-icon" :class="{ expanded: show }" />
- </ElIcon>
- </div>
- </ElButton>
- <div v-show="show" class="translation-items">
- <p v-for="l in langs" :key="l" :class="{ active: l === lang }" class="translation-item" @click="onSwitchLang(l)">
- {{ languageMap[l] }}
- </p>
- <p class="translation-item">
- <VPLink :href="`/${lang}/guide/translation`">
- {{ helpTranslate }}
- </VPLink>
- </p>
- </div>
- </div>
- </template>
- <style lang="scss" scoped>
- .full-screen-translation {
- border-bottom: 1px solid var(--border-color);
- }
- .translation-toggler {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- line-height: 24px;
- .toggle-icon {
- transition: transform var(--el-transition-duration);
- transform: rotate(180deg);
- &.expanded {
- transform: rotate(0deg);
- }
- }
- }
- .translation-items {
- padding-bottom: 12px;
- .translation-item {
- cursor: pointer;
- margin: 0;
- font-size: 14px;
- line-height: 32px;
- &.active {
- font-weight: 500;
- color: var(--brand-color);
- }
- .link-item {
- font-weight: 500;
- }
- }
- }
- </style>
|