NavVersion.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <script setup lang="ts">
  2. import { computed } from 'vue'
  3. import { useRoute } from 'vitepress'
  4. import VPNavBarMenuGroup from 'vitepress/dist/client/theme-default/components/VPNavBarMenuGroup.vue'
  5. import VPNavScreenMenuGroup from 'vitepress/dist/client/theme-default/components/VPNavScreenMenuGroup.vue'
  6. const props = defineProps<{
  7. versions: { text: string; link: string }[]
  8. screenMenu?: boolean
  9. }>()
  10. const route = useRoute()
  11. const sortedVersions = computed(() => {
  12. return [...props.versions].sort(
  13. (a, b) => b.link.split('/').length - a.link.split('/').length
  14. )
  15. })
  16. const currentVersion = computed(() => {
  17. return (
  18. sortedVersions.value.find((version) => route.path.startsWith(version.link))
  19. ?.text || 'Versions'
  20. )
  21. })
  22. </script>
  23. <template>
  24. <VPNavBarMenuGroup
  25. v-if="!screenMenu"
  26. :item="{ text: currentVersion, items: versions }"
  27. class="VPNavVersion"
  28. />
  29. <VPNavScreenMenuGroup
  30. v-else
  31. :text="currentVersion"
  32. :items="versions"
  33. class="VPNavVersion"
  34. />
  35. </template>
  36. <style scoped>
  37. .VPNavVersion :deep(button .text) {
  38. color: var(--vp-c-text-1) !important;
  39. }
  40. .VPNavVersion:hover :deep(button .text) {
  41. color: var(--vp-c-text-2) !important;
  42. }
  43. </style>