# smo-editor
**Repository Path**: sanmokeji/smo-editor
## Basic Information
- **Project Name**: smo-editor
- **Description**: 富文本
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-03
- **Last Updated**: 2026-09-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# @sanmokeji/smo-editor
🚀 **SmoEditor** 是一款基于 Vue 3 和 Tiptap 打造的轻量、高效、开箱即用的富文本编辑器组件。具备完美的 TypeScript 类型支持。
---
## ✨ 特性
- 🎯 **开箱即用** — 内置完整工具栏,引入即可使用
- 🪶 **轻量高效** — 基于 Tiptap 3 ProseMirror,按需扩展
- 💪 **TypeScript 优先** — 完善的类型推导,IDE 智能提示丝滑
- 🎨 **图片增强** — 支持上传、拖拽、粘贴图片,浮动菜单调整对齐与宽度
- 🔗 **链接编辑** — 行内链接设置弹窗,自动识别 URL
- 📐 **文字对齐** — 左对齐 / 居中 / 右对齐
- 📋 **丰富格式** — 加粗、斜体、删除线、行内代码、代码块、引用、分割线
- 🔤 **标题层级** — H1 \~ H6 完整支持
- 📝 **列表** — 有序列表、无序列表
- ↩️ **撤销重做** — 内置历史记录操作
- 🔌 **可扩展** — 基于 Tiptap 扩展机制,轻松添加自定义节点和标记
## 📦 安装
```bash
# pnpm
pnpm add @sanmokeji/smo-editor
# npm
npm install @sanmokeji/smo-editor
# yarn
yarn add @sanmokeji/smo-editor
```
## 🚀 快速开始
```vue
```
## 📖 使用指南
### v-model 双向绑定
`SmoEditor` 使用 `v-model` 进行 HTML 内容的双向绑定:
```vue
```
### Props
| 属性 | 类型 | 默认值 | 说明 |
| --------------- | ----------------------------------------------------------------- | ------ | --------------------------- |
| `modelValue` | `string` | `''` | 编辑器 HTML 内容(v-model) |
| `editable` | `boolean` | `true` | 是否为可编辑状态 |
| `placeholder` | `string` | `''` | 占位符文本 |
| `height` | `string \| number` | — | 编辑器容器高度 |
| `onImageUpload` | `(file: File) => ImageUploadResult \| Promise` | — | 图片上传回调 |
### 图片上传
传入 `onImageUpload` 回调函数,返回图片 URL 即可。支持工具栏上传、拖拽、粘贴三种方式:
```vue
```
图片上传到编辑器后,选中图片会出现 **浮动菜单(Bubble Menu)**,支持调整:
- **对齐**:左对齐 / 居中 / 右对齐
- **宽度**:自动 / 25% / 50% / 75% / 100%
- **Alt 文本**:编辑图片替代文字
### 只读模式(待定)
```vue
```
### 占位符
```vue
```
## 🧩 TypeScript 类型
库提供完整的 TypeScript 类型声明:
```ts
import { SmoEditor, type SmoEditorOptions, type ImageUploadResult } from '@sanmokeji/smo-editor'
```
`SmoEditorOptions` 和 `ImageUploadResult` 接口定义:
```ts
export interface ImageUploadResult {
url: string
alt?: string
}
export interface SmoEditorOptions {
content?: string | object
height?: string | number
editable?: boolean
placeholder?: string
onImageUpload?: (file: File) => ImageUploadResult | Promise
}
```
## 🎨 样式导入
编辑器和工具栏的样式已内置,需要手动导入 CSS 文件:
```ts
// 在你的入口文件或组件中
import '@sanmokeji/smo-editor/css'
```
CSS 文件中包含 `.smot-editor-` 前缀的类名,不会污染全局样式。
## ⌨️ 工具栏功能
内置工具栏提供以下功能:
| 分组 | 功能 |
| ---- | ---------------------------------- |
| 标题 | H1 / H2 / H3 / H4 / H5 / H6 / 正文 |
| 内联 | 加粗 / 斜体 / 删除线 / 行内代码 |
| 块级 | 引用 / 代码块 / 分割线 |
| 列表 | 有序列表 / 无序列表 |
| 对齐 | 左对齐 / 居中 / 右对齐 |
| 媒体 | 图片上传(含浮动编辑菜单) |
| 链接 | 设置 / 编辑超链接 |
| 历史 | 撤销 / 重做 |
## 📄 License
MIT
---
Made with ❤️ by SanMoKeJi