A powerful and extensible HTML editor component for Vue 3 with plugin support.
- 🎨 Rich text editing with contenteditable
- 🔌 Extensible plugin system
- 🎯 Floating toolbar that appears on text selection
- 📱 Responsive and accessible design
- 🎛️ Customizable toolbar options
- 💾 Two-way data binding with v-model
- 🎨 Built with Tailwind CSS
npm install vue-html-editor
Or with yarn:
yarn add vue-html-editor
<template>
<div>
<VHtmlEditor v-model="content" />
</div>
</template>
<script setup>
import { ref } from 'vue'
import { VHtmlEditor } from 'vue-html-editor'
import 'vue-html-editor/dist/vue-html-editor.css'
const content = ref('<p>Hello World!</p>')
</script>
Prop | Type | Default | Description |
---|---|---|---|
toolbarAlwaysShow |
boolean |
false |
Show toolbar always instead of on selection |
plugins |
EditorPlugin[] |
defaultPlugins |
Array of plugins to use |
<VHtmlEditor
v-model="content"
:toolbar-always-show="true"
/>
<template>
<VHtmlEditor
v-model="content"
:plugins="customPlugins"
/>
</template>
<script setup>
import { VHtmlEditor, boldPlugin, italicPlugin, linkPlugin } from 'vue-html-editor'
const customPlugins = [
boldPlugin,
italicPlugin,
linkPlugin
]
</script>
-
boldPlugin
- Bold text (Ctrl+B) -
italicPlugin
- Italic text (Ctrl+I) -
underlinePlugin
- Underline text (Ctrl+U) -
strikeThroughPlugin
- Strikethrough text -
removeFormatPlugin
- Remove all formatting
-
unorderedListPlugin
- Bullet lists -
orderedListPlugin
- Numbered lists
-
linkPlugin
- Insert/edit links -
imagePlugin
- Insert images
import type { EditorPlugin } from 'vue-html-editor'
const myCustomPlugin: EditorPlugin = {
command: 'myCommand',
title: 'My Custom Action',
icon: '<svg>...</svg>', // SVG icon
execute: (editor: HTMLElement) => {
// Your custom logic here
document.execCommand('insertText', false, 'Custom text!')
},
isActive: () => {
// Return true if the command is currently active
return document.queryCommandState('bold')
}
}
// Use it in your component
const plugins = [myCustomPlugin, ...defaultPlugins]
You can also register plugins globally:
import { EditorPluginRegistry } from 'vue-html-editor'
const registry = new EditorPluginRegistry()
registry.register(myCustomPlugin)
The component comes with default Tailwind CSS styles. You can customize the appearance by overriding CSS classes:
/* Custom editor styles */
.prose {
/* Editor content area */
}
/* Custom toolbar styles */
.toolbar-button {
/* Toolbar button styles */
}
# Install dependencies
npm install
# Start development server
npm run dev
# Build library
npm run build:lib
# Build demo
npm run build
MIT