LayoutThumbnail.vue 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <script setup lang="ts">
  2. import { storeToRefs } from 'pinia'
  3. import { usePersonalization } from '@/composables'
  4. import { usePreferencesStore } from '@/stores'
  5. const { color } = usePersonalization()
  6. const preferencesStore = usePreferencesStore()
  7. const { modify } = preferencesStore
  8. const { navigationMode } = storeToRefs(preferencesStore)
  9. </script>
  10. <template>
  11. <div
  12. class="flex justify-center gap-6"
  13. :style="{
  14. '--primary-color': color,
  15. }"
  16. >
  17. <div
  18. class="flex h-16 w-20 cursor-pointer flex-col rounded border border-neutral-350 outline-offset-4 transition-[outline] max-sm:pointer-events-none max-sm:opacity-50 dark:border-neutral-650"
  19. :class="
  20. navigationMode === 'sidebar'
  21. ? 'outline-2 outline-primary/50'
  22. : 'outline-2 outline-transparent hover:outline-primary/30'
  23. "
  24. @click="modify({ navigationMode: 'sidebar' })"
  25. >
  26. <div class="flex h-2.5">
  27. <div class="h-full w-5 shrink-0 border-r border-neutral-350 dark:border-neutral-650"></div>
  28. <div
  29. class="flex w-full items-center justify-between border-b border-neutral-350 p-0.5 dark:border-neutral-650"
  30. >
  31. <div class="flex items-center gap-x-[1px]">
  32. <div
  33. v-for="i in 2"
  34. :key="i"
  35. class="size-1 rounded-full border border-primary"
  36. />
  37. <div class="h-1 w-2 border border-primary" />
  38. </div>
  39. <div class="flex items-center gap-x-[1px]">
  40. <div
  41. v-for="i in 4"
  42. :key="i"
  43. class="size-1 rounded-full border border-neutral-350 dark:border-neutral-650"
  44. />
  45. </div>
  46. </div>
  47. </div>
  48. <div class="flex flex-1">
  49. <div class="flex w-5 flex-col border-r border-neutral-350 p-0.5 dark:border-neutral-650">
  50. <div class="mb-0.5 h-2 w-full flex-1 rounded-xs border border-primary" />
  51. <div class="h-2 w-full rounded-xs border border-primary" />
  52. </div>
  53. <div class="flex flex-1">
  54. <div class="h-1 w-full border-b border-neutral-350 dark:border-neutral-650"></div>
  55. </div>
  56. </div>
  57. </div>
  58. <div
  59. class="flex h-16 w-20 cursor-pointer flex-col rounded border border-neutral-350 outline-offset-4 transition-[outline] duration-300 max-sm:pointer-events-none max-sm:opacity-50 dark:border-neutral-650"
  60. :class="
  61. navigationMode === 'horizontal'
  62. ? 'outline-2 outline-primary/50'
  63. : 'outline-2 outline-transparent hover:outline-primary/30'
  64. "
  65. @click="modify({ navigationMode: 'horizontal' })"
  66. >
  67. <div class="flex h-2.5 border-b border-neutral-350 dark:border-neutral-650">
  68. <div class="h-full w-3 shrink-0"></div>
  69. <div class="flex w-full items-center justify-between p-0.5">
  70. <div class="flex items-center gap-x-[1px]">
  71. <div
  72. v-for="i in 5"
  73. :key="i"
  74. class="h-1 w-1.5 border border-primary"
  75. />
  76. </div>
  77. <div class="flex items-center gap-x-[1px]">
  78. <div
  79. v-for="i in 3"
  80. :key="i"
  81. class="size-1 rounded-full border border-neutral-350 dark:border-neutral-650"
  82. />
  83. <div class="size-1 rounded-full bg-primary" />
  84. </div>
  85. </div>
  86. </div>
  87. <div class="flex flex-1">
  88. <div class="flex flex-1">
  89. <div class="h-1 w-full border-b border-neutral-350 dark:border-neutral-650"></div>
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. </template>