FontSizePicker.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <span class="inline-flex">
  3. <tippy ref="fontSize" interactive trigger="click" theme="popover" arrow>
  4. <template #trigger>
  5. <span class="select-wrapper">
  6. <ButtonSecondary
  7. v-tippy="{ theme: 'tooltip' }"
  8. :title="t('settings.change_font_size')"
  9. class="pr-8"
  10. svg="type"
  11. outline
  12. :label="`${getFontSizeName(
  13. fontSizes.find((size) => size === active)
  14. )}`"
  15. />
  16. </span>
  17. </template>
  18. <SmartItem
  19. v-for="(size, index) in fontSizes"
  20. :key="`size-${index}`"
  21. :label="`${getFontSizeName(size)}`"
  22. :info-icon="size === active ? 'done' : ''"
  23. :active-info-icon="size === active"
  24. @click.native="
  25. () => {
  26. setActiveFont(size)
  27. $refs.fontSize.tippy().hide()
  28. }
  29. "
  30. />
  31. </tippy>
  32. </span>
  33. </template>
  34. <script setup lang="ts">
  35. import {
  36. HoppFontSizes,
  37. HoppFontSize,
  38. applySetting,
  39. useSetting,
  40. } from "~/newstore/settings"
  41. import { useI18n } from "~/helpers/utils/composables"
  42. const t = useI18n()
  43. const fontSizes = HoppFontSizes
  44. const active = useSetting("FONT_SIZE")
  45. const getFontSizeName = (size: HoppFontSize) => {
  46. return t(`settings.font_size_${size}`)
  47. }
  48. const setActiveFont = (size: HoppFontSize) => {
  49. document.documentElement.setAttribute("data-font-size", size)
  50. applySetting("FONT_SIZE", size)
  51. }
  52. </script>