index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <script setup lang="ts">
  2. import { inject } from 'vue'
  3. import { mediaQueryInjectionKey } from '@/injection'
  4. import { usePreferencesStore } from '@/stores'
  5. import Actions from './actions/index.vue'
  6. import Breadcrumb from './Breadcrumb.vue'
  7. import LogoArea from './LogoArea.vue'
  8. import MobileHeader from './mobile/MobileHeader.vue'
  9. import Navigation from './Navigation.vue'
  10. defineOptions({
  11. name: 'HeaderLayout',
  12. })
  13. const preferencesStore = usePreferencesStore()
  14. const mediaQueryInjection = inject(mediaQueryInjectionKey)
  15. </script>
  16. <template>
  17. <header
  18. class="border-b border-naive-border bg-naive-card transition-[background-color,border-color]"
  19. >
  20. <div
  21. v-if="!mediaQueryInjection?.sm"
  22. class="flex"
  23. >
  24. <LogoArea />
  25. <div class="flex flex-1 items-center p-4">
  26. <div class="flex flex-1 items-center">
  27. <Transition
  28. type="transition"
  29. enter-active-class="transition-[grid-template-columns]"
  30. leave-active-class="transition-[grid-template-columns]"
  31. enter-from-class="grid-cols-[0fr]"
  32. leave-to-class="grid-cols-[0fr]"
  33. enter-to-class="grid-cols-[1fr]"
  34. leave-from-class="grid-cols-[1fr]"
  35. >
  36. <div
  37. v-if="preferencesStore.preferences.showNavigation"
  38. class="grid overflow-hidden"
  39. >
  40. <Navigation />
  41. </div>
  42. </Transition>
  43. <Transition
  44. type="transition"
  45. enter-active-class="transition-[grid-template-columns]"
  46. leave-active-class="transition-[grid-template-columns]"
  47. enter-from-class="grid-cols-[0fr]"
  48. leave-to-class="grid-cols-[0fr]"
  49. enter-to-class="grid-cols-[1fr]"
  50. leave-from-class="grid-cols-[1fr]"
  51. >
  52. <div
  53. v-if="preferencesStore.preferences.showBreadcrumb"
  54. class="grid overflow-hidden"
  55. >
  56. <Breadcrumb />
  57. </div>
  58. </Transition>
  59. </div>
  60. <Actions class="gap-x-3" />
  61. </div>
  62. </div>
  63. <MobileHeader v-else />
  64. </header>
  65. </template>