Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

nuxt-tiptap-editor

modbender31.4kMIT2.2.1TypeScript support: included

Essentials to Quickly Integrate TipTap Editor into your Nuxt App

vue, vue.js, vue3, nuxt, nuxt.js, nuxt3, tiptap, tiptap nuxt module, text editor, wysiwyg, wysiwyg editor, nuxt-tiptap, nuxt-tiptap-editor, nuxt editor, nuxt module, nuxt3 module

readme

Nuxt TipTap Editor

npm version npm downloads License Nuxt

Instantly add TipTap Editor with basic functionality to your Nuxt 3 App.

Tiptap Editor Preview


Quick Setup

  1. Add nuxt-tiptap-editor dependency to your project

    npx nuxi@latest module add tiptap
  2. Add nuxt-tiptap-editor to the modules section of nuxt.config.ts

    export default defineNuxtConfig({
      modules: ['nuxt-tiptap-editor'],
      tiptap: {
        prefix: 'Tiptap', //prefix for Tiptap imports, composables not included
      },
    });
  3. You can use the contents of this file as reference.
    Copy the code to your own components/TiptapEditor.vue.
    Any path is fine as long as it's under components directory with .vue extension.

    <template>
      <div>
        <div v-if="editor">
          <button
            @click="editor.chain().focus().toggleBold().run()"
            :disabled="!editor.can().chain().focus().toggleBold().run()"
            :class="{ 'is-active': editor.isActive('bold') }"
          >
            bold
          </button>
          <button
            @click="editor.chain().focus().toggleItalic().run()"
            :disabled="!editor.can().chain().focus().toggleItalic().run()"
            :class="{ 'is-active': editor.isActive('italic') }"
          >
            italic
          </button>
          <button
            @click="editor.chain().focus().toggleStrike().run()"
            :disabled="!editor.can().chain().focus().toggleStrike().run()"
            :class="{ 'is-active': editor.isActive('strike') }"
          >
            strike
          </button>
          <button
            @click="editor.chain().focus().toggleCode().run()"
            :disabled="!editor.can().chain().focus().toggleCode().run()"
            :class="{ 'is-active': editor.isActive('code') }"
          >
            code
          </button>
          <button @click="editor.chain().focus().unsetAllMarks().run()">
            clear marks
          </button>
          <button @click="editor.chain().focus().clearNodes().run()">
            clear nodes
          </button>
          <button
            @click="editor.chain().focus().setParagraph().run()"
            :class="{ 'is-active': editor.isActive('paragraph') }"
          >
            paragraph
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 1 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 1 }) }"
          >
            h1
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 2 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 2 }) }"
          >
            h2
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 3 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 3 }) }"
          >
            h3
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 4 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 4 }) }"
          >
            h4
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 5 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 5 }) }"
          >
            h5
          </button>
          <button
            @click="editor.chain().focus().toggleHeading({ level: 6 }).run()"
            :class="{ 'is-active': editor.isActive('heading', { level: 6 }) }"
          >
            h6
          </button>
          <button
            @click="editor.chain().focus().toggleBulletList().run()"
            :class="{ 'is-active': editor.isActive('bulletList') }"
          >
            bullet list
          </button>
          <button
            @click="editor.chain().focus().toggleOrderedList().run()"
            :class="{ 'is-active': editor.isActive('orderedList') }"
          >
            ordered list
          </button>
          <button
            @click="editor.chain().focus().toggleCodeBlock().run()"
            :class="{ 'is-active': editor.isActive('codeBlock') }"
          >
            code block
          </button>
          <button
            @click="editor.chain().focus().toggleBlockquote().run()"
            :class="{ 'is-active': editor.isActive('blockquote') }"
          >
            blockquote
          </button>
          <button @click="editor.chain().focus().setHorizontalRule().run()">
            horizontal rule
          </button>
          <button @click="editor.chain().focus().setHardBreak().run()">
            hard break
          </button>
          <button
            @click="editor.chain().focus().undo().run()"
            :disabled="!editor.can().chain().focus().undo().run()"
          >
            undo
          </button>
          <button
            @click="editor.chain().focus().redo().run()"
            :disabled="!editor.can().chain().focus().redo().run()"
          >
            redo
          </button>
        </div>
        <TiptapEditorContent :editor="editor" />
      </div>
    </template>
    
    <script setup>
    const editor = useEditor({
      content: "<p>I'm running Tiptap with Vue.js. 🎉</p>",
      extensions: [TiptapStarterKit],
    });
    
    onBeforeUnmount(() => {
      unref(editor).destroy();
    });
    </script>
  4. Now edit the HTML, replace button with your UI provided component, or style it using tailwind or whichever CSS you are using, add icons or text, modify active state class, verify dark mode, etc.

That's it! You can now use Nuxt TipTap Editor in your Nuxt app ✨

Development

# Install dependencies
yarn install

# Generate type stubs
yarn dev:prepare

# Develop with the playground
yarn dev

# Build the playground
yarn build

# Run ESLint
yarn lint

# Run Vitest
yarn test
yarn test:watch

# Release new version - needs to be with npm for login to work
npm run release

Contribution

Feel free to send out any valid pull requests. Would love to get any help!

changelog

Changelog

1.2.1

No significant changes

    View changes on GitHub

v1.2.0

compare changes

🏡 Chore

❤️ Contributors

  • Modbender

v1.1.2

compare changes

🏡 Chore

❤️ Contributors

  • Modbender

v1.1.1

compare changes

📖 Documentation

  • Prefill content (2e30dcc)
  • Important points to remember (060ff9c)
  • Highlight not installed exts (71f0de2)
  • Use new nuxi module add command in installation (a81faa4)

🏡 Chore

❤️ Contributors

v1.1.0

compare changes

🚀 Enhancements

  • Remove mode for component import (3a3c22a)

❤️ Contributors

  • Modbender

v0.0.13

compare changes

🚀 Enhancements

  • Type support, lowlight highlight theme, css imports (b9dfd00)

🩹 Fixes

  • Upgrade ts, optional lowlight (2f5f259)

🏡 Chore

❤️ Contributors

  • Modbender

v0.0.12

compare changes

🩹 Fixes

  • Revert code for both codeblocks to be available (7728aa7)
  • Optional components and imports (1b5a44a)

❤️ Contributors

  • Modbender

v0.0.11

compare changes

🩹 Fixes

  • Warn duplicate codeBlock when using lowlight (9de7e5d)

❤️ Contributors

  • Modbender

v0.0.10

compare changes

🏡 Chore

❤️ Contributors

  • Modbender

v0.0.9

compare changes

🚀 Enhancements

  • Add all grammer lowlight import (c9bafd4)

❤️ Contributors

  • Modbender

v0.0.8

compare changes

🩹 Fixes

  • Lowlight imports, README (30a4ca6)

❤️ Contributors

  • Modbender

v0.0.7

compare changes

🩹 Fixes

❤️ Contributors

  • Modbender

v0.0.6

compare changes

🩹 Fixes

  • Playground TipTap component (879b975)
  • Prefix default ts (681aac2)
  • Prefix for components, lowlight import (a4f735e)
  • Unexpected var (474be95)
  • Never reassigned optionalComponents (282f255)

🏡 Chore

❤️ Contributors

  • Modbender

v0.0.5

compare changes

🚀 Enhancements

  • Add core imports Node and Mark (b638a19)

❤️ Contributors

  • Modbender

v0.0.4

compare changes

🚀 Enhancements

  • Add imports for default extensions (05c4ca8)

🏡 Chore

❤️ Contributors

  • Modbender

v0.0.3

compare changes

🚀 Enhancements

  • Add imports for default extensions (05c4ca8)

❤️ Contributors

  • Modbender

v0.0.2

compare changes

🏡 Chore

❤️ Contributors

  • Modbender

v0.0.1

compare changes

v0.0.1

🏡 Chore

❤️ Contributors

  • Modbender