BubbleMenu.vue 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. </div>
  68. </editor-menu-bubble>
  69. </template>
  70. <script>
  71. import { EditorMenuBubble } from 'tiptap'
  72. import Icon from '~/components/shared/Icon'
  73. export default {
  74. components: {
  75. EditorMenuBubble,
  76. Icon
  77. },
  78. props: {
  79. editor: {
  80. type: Object
  81. }
  82. },
  83. data() {
  84. return {
  85. keepInBounds: true
  86. }
  87. }
  88. }
  89. </script>