@binarycastle/vue-html-editor
Version:
A powerful and extensible HTML editor component for Vue 3 with plugin support
170 lines (126 loc) • 3.23 kB
Markdown
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
```bash
npm install vue-html-editor
```
Or with yarn:
```bash
yarn add vue-html-editor
```
```vue
<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 |
```vue
<VHtmlEditor
v-model="content"
:toolbar-always-show="true"
/>
```
```vue
<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
### List Plugins
- `unorderedListPlugin` - Bullet lists
- `orderedListPlugin` - Numbered lists
### Media Plugins
- `linkPlugin` - Insert/edit links
- `imagePlugin` - Insert images
## Creating Custom Plugins
```typescript
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:
```typescript
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:
```css
/* Custom editor styles */
.prose {
/* Editor content area */
}
/* Custom toolbar styles */
.toolbar-button {
/* Toolbar button styles */
}
```
```bash
npm install
npm run dev
npm run build:lib
npm run build
```
MIT