BubbleMenu.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <editor-menu-bubble
  3. :editor="editor"
  4. :keep-in-bounds="keepInBounds"
  5. v-slot="{ commands, isActive, menu }">
  6. <div
  7. class="menububble"
  8. :class="{ 'is-active': menu.isActive }"
  9. :style="`left: ${menu.left}px; bottom: ${menu.bottom}px;`"
  10. >
  11. <button
  12. class="menububble__button"
  13. :class="{ 'is-active': isActive.bold() }"
  14. @click="commands.bold()"
  15. >
  16. <icon name="bold" size="small" />
  17. </button>
  18. <button
  19. class="menububble__button"
  20. :class="{ 'is-active': isActive.italic() }"
  21. @click="commands.italic()"
  22. >
  23. <icon name="italic" size="small" />
  24. </button>
  25. <button
  26. class="menububble__button"
  27. :class="{ 'is-active': isActive.code() }"
  28. @click="commands.code()"
  29. >
  30. <icon name="code" size="small" />
  31. </button>
  32. <button
  33. class="menububble__button"
  34. :class="{ 'is-active': isActive.strike() }"
  35. @click="commands.strike()"
  36. >
  37. <icon name="strikethrough" size="small" />
  38. </button>
  39. <button
  40. class="menububble__button"
  41. :class="{ 'is-active': isActive.underline() }"
  42. @click="commands.underline()"
  43. >
  44. <icon name="underline" size="small" />
  45. </button>
  46. <button
  47. class="menububble__button"
  48. :class="{ 'is-active': isActive.heading({ level: 1}) }"
  49. @click="commands.heading({ level: 1})"
  50. >
  51. H1
  52. </button>
  53. <button
  54. class="menububble__button"
  55. :class="{ 'is-active': isActive.heading({ level: 2}) }"
  56. @click="commands.heading({ level: 2})"
  57. >
  58. H2
  59. </button>
  60. <button
  61. class="menububble__button"
  62. :class="{ 'is-active': isActive.heading({ level: 3}) }"
  63. @click="commands.heading({ level: 3})"
  64. >
  65. H3
  66. </button>
  67. <button
  68. class="menububble__button"
  69. :class="{ 'is-active': isActive.paragraph() }"
  70. @click="commands.paragraph()"
  71. >
  72. <icon name="paragraph" size="small" />
  73. </button>
  74. </div>
  75. </editor-menu-bubble>
  76. </template>
  77. <script>
  78. import { EditorMenuBubble } from 'tiptap'
  79. import Icon from '~/components/shared/Icon'
  80. export default {
  81. components: {
  82. EditorMenuBubble,
  83. Icon
  84. },
  85. props: {
  86. editor: {
  87. type: Object
  88. }
  89. },
  90. data() {
  91. return {
  92. keepInBounds: true
  93. }
  94. }
  95. }
  96. </script>