Header.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <header>
  3. <div class = "image-and-title flex-row" id = "sidebar-button" @click = "emit('toggleSidebar')">
  4. <img :src = "logoUrl" alt = "Logo" class = "logo" />
  5. <h1>{{ title }}</h1>
  6. <div class = "fg1" />
  7. <button id = "sidebar-toggler-button" aria-label = "Open sidebar navigation" aria-pressed = "false" aria-haspopup = "menu" class = "neutral">
  8. <HugeiconsIcon :icon = "Menu01Icon" width = "1em" height = "1em" :strokeWidth = 3 />
  9. </button>
  10. </div>
  11. <Breadcrumbs v-if="breadcrumbs" />
  12. <slot name="toolbar" />
  13. <div class = "fg1"></div>
  14. <slot name = "user-info">
  15. <div class = "user-info">
  16. <span v-if="username">{{ username }}</span>
  17. </div>
  18. </slot>
  19. </header>
  20. </template>
  21. <script setup>
  22. import { HugeiconsIcon } from "@hugeicons/vue";
  23. import { Menu01Icon } from "@hugeicons/core-free-icons";
  24. import Breadcrumbs from "./Breadcrumbs.vue";
  25. const emit = defineEmits(["toggleSidebar"]);
  26. const props = defineProps({
  27. breadcrumbs: {
  28. type: Boolean,
  29. default: false,
  30. },
  31. username: {
  32. type: String,
  33. default: "",
  34. },
  35. title: {
  36. type: String,
  37. default: "Untitled",
  38. },
  39. logoUrl: {
  40. type: String,
  41. default: "/logo.png",
  42. },
  43. });
  44. </script>
  45. <style scoped>
  46. button {
  47. border: 0;
  48. color: #fff;
  49. }
  50. button:hover {
  51. background-color: transparent;
  52. }
  53. </style>