FontSizePicker.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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 { useContext } from "@nuxtjs/composition-api"
  36. import {
  37. HoppFontSizes,
  38. HoppFontSize,
  39. applySetting,
  40. useSetting,
  41. } from "~/newstore/settings"
  42. const {
  43. app: { i18n },
  44. } = useContext()
  45. const t = i18n.t.bind(i18n)
  46. const fontSizes = HoppFontSizes
  47. const active = useSetting("FONT_SIZE")
  48. const getFontSizeName = (size: HoppFontSize) => {
  49. return t(`settings.font_size_${size}`)
  50. }
  51. const setActiveFont = (size: HoppFontSize) => {
  52. document.documentElement.setAttribute("data-font-size", size)
  53. applySetting("FONT_SIZE", size)
  54. }
  55. </script>