NavLinks.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <script setup lang="ts">
  2. import { computed } from 'vue'
  3. import { useData } from 'vitepress'
  4. import { useLanguageLinks } from '../composables/nav'
  5. import { useRepo } from '../composables/repo'
  6. import NavLink from './NavLink.vue'
  7. import NavDropdownLink from './NavDropdownLink.vue'
  8. const { theme } = useData()
  9. const localeLinks = useLanguageLinks()
  10. const repo = useRepo()
  11. const show = computed(() => theme.value.nav || repo.value || localeLinks.value)
  12. </script>
  13. <template>
  14. <nav v-if="show" class="nav-links">
  15. <template v-if="theme.nav">
  16. <div v-for="item in theme.nav" :key="item.text" class="item">
  17. <NavDropdownLink v-if="item.items" :item="item" />
  18. <NavLink v-else :item="item" />
  19. </div>
  20. </template>
  21. <div v-if="localeLinks" class="item">
  22. <NavDropdownLink :item="localeLinks" />
  23. </div>
  24. <div v-if="repo" class="item">
  25. <NavLink :item="repo" />
  26. </div>
  27. </nav>
  28. </template>
  29. <style scoped>
  30. .nav-links {
  31. padding: 0.75rem 0;
  32. border-bottom: 1px solid var(--c-divider);
  33. }
  34. @media (min-width: 720px) {
  35. .nav-links {
  36. display: flex;
  37. padding: 6px 0 0;
  38. align-items: center;
  39. border-bottom: 0;
  40. }
  41. .item + .item {
  42. padding-left: 24px;
  43. }
  44. }
  45. </style>