vp-sidebar-link.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <script lang="ts" setup>
  2. import { useRoute } from 'vitepress'
  3. import { isActive } from '../../utils'
  4. import type { Link } from '../../types'
  5. defineProps<{
  6. item: Link
  7. }>()
  8. defineEmits(['close'])
  9. const route = useRoute()
  10. </script>
  11. <template>
  12. <a
  13. :class="{
  14. link: true,
  15. active: isActive(route, item.link),
  16. 'flex items-center': item.promotion,
  17. }"
  18. :href="item.link"
  19. @click="$emit('close')"
  20. >
  21. <p class="link-text">{{ item.text }}</p>
  22. <VersionTag v-if="item.promotion" class="ml-2" :version="item.promotion" />
  23. </a>
  24. </template>
  25. <style scoped lang="scss">
  26. .link:not(.flex) {
  27. display: block;
  28. }
  29. .link {
  30. padding: 10px 16px;
  31. line-height: 1.5;
  32. font-size: 0.9rem;
  33. border-radius: 8px;
  34. .link-text {
  35. margin: 0;
  36. }
  37. }
  38. .link:hover .link-text {
  39. color: var(--brand-color);
  40. transition: color 0.25s;
  41. }
  42. .link.active {
  43. background-color: var(--link-active-bg-color);
  44. .link-text {
  45. font-weight: 600;
  46. color: var(--brand-color);
  47. transition: color 0.25s;
  48. }
  49. }
  50. .link-text {
  51. line-height: 20px;
  52. font-size: 13px;
  53. font-weight: 500;
  54. color: var(--text-color-light);
  55. transition: color 0.5s;
  56. }
  57. </style>