@lobehub/editor
Version:
A powerful and extensible rich text editor built on Meta's Lexical framework, providing a modern editing experience with React integration.
689 lines (541 loc) โข 27.2 kB
Markdown
<div align="center"><a name="readme-top"></a>
<img height="120" src="https://registry.npmmirror.com/@lobehub/assets-logo/1.0.0/files/assets/logo-3d.webp">
<img height="120" src="https://gw.alipayobjects.com/zos/kitchen/qJ3l3EPsdW/split.svg">
<img height="120" src="https://registry.npmmirror.com/@lobehub/fluent-emoji-3d/latest/files/assets/2712-fe0f.webp">
<h1>LobeHub Editor</h1>
A modern, extensible rich text editor built on Meta's Lexical framework with dual-architecture design, featuring both a powerful kernel and React integration. Optimized for AI applications and chat interfaces.
[![][npm-release-shield]][npm-release-link]
[![][github-releasedate-shield]][github-releasedate-link]
[![][github-action-test-shield]][github-action-test-link]
[![][github-action-release-shield]][github-action-release-link]<br/>
[![][github-contributors-shield]][github-contributors-link]
[![][github-forks-shield]][github-forks-link]
[![][github-stars-shield]][github-stars-link]
[![][github-issues-shield]][github-issues-link]
[![][github-license-shield]][github-license-link]
[Changelog](./CHANGELOG.md) ยท [Report Bug][github-issues-link] ยท [Request Feature][github-issues-link]

</div>
<details>
<summary><kbd>Table of contents</kbd></summary>
#### TOC
- [โจ Features](#-features)
- [๐ฆ Installation](#-installation)
- [๐ Quick Start](#-quick-start)
- [Basic Editor](#basic-editor)
- [Advanced Usage with Plugins](#advanced-usage-with-plugins)
- [Chat Input Component](#chat-input-component)
- [Editor Kernel API](#editor-kernel-api)
- [๐ Available Plugins](#-available-plugins)
- [Core Plugins](#core-plugins)
- [Content Plugins](#content-plugins)
- [Plugin Architecture](#plugin-architecture)
- [Plugin Features](#plugin-features)
- [๐ API Reference](#-api-reference)
- [Editor Kernel](#editor-kernel)
- [Plugin System](#plugin-system)
- [๐ ๏ธ Development](#๏ธ-development)
- [Setup](#setup)
- [Available Scripts](#available-scripts)
- [Debug Environment Variables](#debug-environment-variables)
####
</details>
## โจ Features
- ๐ฏ **Dual Architecture** - Both kernel-based API and React components for maximum flexibility
- โ๏ธ **React-First** - Built for React 19+ with modern hooks and patterns
- ๐ **Rich Plugin Ecosystem** - 10+ built-in plugins for comprehensive content editing
- ๐ฌ **Chat Interface Ready** - Pre-built chat input components with mention support
- โจ๏ธ **Slash Commands** - Intuitive `/` and `@` triggered menus for quick content insertion
- ๐ **Multiple Export Formats** - JSON, Markdown, and plain text export capabilities
- ๐จ **Customizable UI** - Antd-styled components with flexible theming
- ๐ **File & Media Support** - Native support for images, files, tables, and more
- ๐ฏ **TypeScript Native** - Built with TypeScript for excellent developer experience
- ๐ฑ **Modern Build System** - Optimized with Vite, Dumi docs, and comprehensive testing
## ๐ฆ Installation
To install `@lobehub/editor`, run the following command:
[![][bun-shield]][bun-link]
```bash
$ bun add @lobehub/editor
```
```bash
$ pnpm add @lobehub/editor
```
<div align="right">
[![\][back-to-top\]](#readme-top)
</div>
## ๐ Quick Start
### Basic Editor
The simplest way to get started with a fully-featured editor:
```tsx
import {
INSERT_HEADING_COMMAND,
ReactCodeblockPlugin,
ReactImagePlugin,
ReactLinkPlugin,
ReactListPlugin,
} from '@lobehub/editor';
import { Editor, useEditor } from '@lobehub/editor/react';
export default function MyEditor() {
const editor = useEditor();
return (
<Editor
placeholder="Start typing..."
editor={editor}
plugins={[ReactListPlugin, ReactLinkPlugin, ReactImagePlugin, ReactCodeblockPlugin]}
slashOption={{
items: [
{
key: 'h1',
label: 'Heading 1',
onSelect: (editor) => {
editor.dispatchCommand(INSERT_HEADING_COMMAND, { tag: 'h1' });
},
},
// More slash commands...
],
}}
onChange={(editor) => {
// Handle content changes
const markdown = editor.getDocument('markdown');
const json = editor.getDocument('json');
}}
/>
);
}
```
### Advanced Usage with Plugins
Add more functionality with built-in plugins:
```tsx
import {
INSERT_FILE_COMMAND,
INSERT_MENTION_COMMAND,
INSERT_TABLE_COMMAND,
ReactFilePlugin,
ReactHRPlugin,
ReactTablePlugin,
} from '@lobehub/editor';
import { Editor, useEditor } from '@lobehub/editor/react';
export default function AdvancedEditor() {
const editor = useEditor();
return (
<Editor
editor={editor}
plugins={[
ReactTablePlugin,
ReactHRPlugin,
Editor.withProps(ReactFilePlugin, {
handleUpload: async (file) => {
// Handle file upload
return { url: await uploadFile(file) };
},
}),
]}
mentionOption={{
items: async (search) => [
{
key: 'user1',
label: 'John Doe',
onSelect: (editor) => {
editor.dispatchCommand(INSERT_MENTION_COMMAND, {
label: 'John Doe',
extra: { userId: 1 },
});
},
},
],
}}
/>
);
}
```
### Chat Input Component
Pre-built component optimized for chat interfaces:
```tsx
import { ChatInput } from '@lobehub/editor/react';
export default function ChatApp() {
return (
<ChatInput
placeholder="Type a message..."
onSend={(content) => {
// Handle message send
console.log('Message:', content);
}}
enabledFeatures={['mention', 'upload', 'codeblock']}
/>
);
}
```
### Editor Kernel API
For advanced use cases, access the underlying kernel directly:
```typescript
import { IEditor, createEditor } from '@lobehub/editor';
// Create editor instance
const editor: IEditor = createEditor();
// Register plugins
editor.registerPlugin(SomePlugin, { config: 'value' });
// Interact with content
editor.setDocument('text', 'Hello world');
const content = editor.getDocument('json');
// Listen to events
editor.on('content-changed', (newContent) => {
console.log('Content updated:', newContent);
});
// Execute commands
editor.dispatchCommand(INSERT_HEADING_COMMAND, { tag: 'h2' });
```
<div align="right">
[![\][back-to-top\]](#readme-top)
</div>
## ๐ Available Plugins
### Core Plugins
| Plugin | Description | Features |
| ------------------ | ----------------------------- | --------------------------------------------------------------- |
| **CommonPlugin** | Foundation editor components | ReactEditor, ReactEditorContent, ReactPlainText, base utilities |
| **MarkdownPlugin** | Markdown processing engine | Shortcuts, transformers, serialization, custom writers |
| **UploadPlugin** | File upload management system | Priority handlers, drag-drop, multi-source uploads |
### Content Plugins
| Plugin | Description | Features |
| ------------------------ | ------------------------- | --------------------------------------------------------------- |
| **ReactSlashPlugin** | Slash command menu system | `/` and `@` triggered menus, customizable items, async search |
| **ReactMentionPlugin** | User mention support | `@username` mentions, custom markdown output, async user search |
| **ReactImagePlugin** | Image handling | Upload, display, drag & drop, captions, resizing |
| **ReactCodeblockPlugin** | Code syntax highlighting | Shiki-powered, 100+ languages, custom themes, color schemes |
| **ReactListPlugin** | List management | Ordered/unordered lists, nested lists, keyboard shortcuts |
| **ReactLinkPlugin** | Link management | Auto-detection, validation, previews, custom styling |
| **ReactTablePlugin** | Table support | Insert tables, edit cells, add/remove rows/columns, i18n |
| **ReactHRPlugin** | Horizontal rules | Divider insertion, custom styling, markdown shortcuts |
| **ReactFilePlugin** | File attachments | File upload, status tracking, validation, drag-drop |
### Plugin Architecture
All plugins follow a **dual-architecture design**:
#### ๐ง **Kernel Layer** (Framework-agnostic)
- **Plugin Interface**: Standardized plugin system with lifecycle management
- **Service Container**: Centralized service registration and dependency injection
- **Command System**: Event-driven command pattern for editor operations
- **Node System**: Custom node types with serialization and transformation
- **Data Sources**: Content management and format conversion (JSON, Markdown, Text)
#### โ๏ธ **React Layer** (React-specific)
- **React Components**: High-level components for easy integration
- **Hook Integration**: Custom hooks for editor state and functionality
- **Event Handling**: React-friendly event system and callbacks
- **UI Components**: Pre-built UI elements with theming support
### Plugin Features
- โ
**Fully configurable** with TypeScript-typed options
- โ
**Composable** - use any combination together
- โ
**Extensible** - create custom plugins using the same API
- โ
**Event-driven** - react to user interactions and content changes
- โ
**Service-oriented** - modular architecture with dependency injection
- โ
**Internationalization** - Built-in i18n support where applicable
- โ
**Markdown integration** - Shortcuts, import/export, custom transformers
- โ
**Theme system** - Customizable styling and appearance
- โ
**Command pattern** - Programmatic control and automation
## ๐ API Reference
#### Utility Hooks
```tsx
// Get editor instance
const editor = useEditor();
// Helper for plugin configuration
const PluginWithConfig = Editor.withProps(ReactFilePlugin, {
handleUpload: async (file) => ({ url: 'uploaded-url' }),
});
```
### Editor Kernel
#### `createEditor(): IEditor`
Create a new editor kernel instance:
```typescript
const editor = createEditor();
```
#### `IEditor` Interface
Core editor methods:
```typescript
interface IEditor {
// Content management
setDocument(type: string, content: any): void;
getDocument(type: string): any;
// Plugin system
registerPlugin<T>(plugin: Constructor<T>, config?: T): IEditor;
registerPlugins(plugins: Plugin[]): IEditor;
// Commands
dispatchCommand<T>(command: LexicalCommand<T>, payload: T): boolean;
// Events
on<T>(event: string, listener: (data: T) => void): this;
off<T>(event: string, listener: (data: T) => void): this;
// Lifecycle
focus(): void;
blur(): void;
destroy(): void;
// Access
getLexicalEditor(): LexicalEditor | null;
getRootElement(): HTMLElement | null;
requireService<T>(serviceId: ServiceID<T>): T | null;
}
```
### Plugin System
#### Creating Custom Plugins
```typescript
import { IEditorKernel, IEditorPlugin } from '@lobehub/editor';
class MyCustomPlugin implements IEditorPlugin {
constructor(private config: MyPluginConfig) {}
initialize(kernel: IEditorKernel) {
// Register nodes, commands, transforms, etc.
kernel.registerNode(MyCustomNode);
kernel.registerCommand(MY_COMMAND, this.handleCommand);
}
destroy() {
// Cleanup
}
}
```
#### Available Commands
Common commands you can dispatch:
```typescript
// Content insertion
INSERT_HEADING_COMMAND; // { tag: 'h1' | 'h2' | 'h3' }
INSERT_LINK_COMMAND; // { url: string, text?: string }
INSERT_IMAGE_COMMAND; // { src: string, alt?: string }
INSERT_TABLE_COMMAND; // { rows: number, columns: number }
INSERT_MENTION_COMMAND; // { label: string, extra?: any }
INSERT_FILE_COMMAND; // { file: File }
INSERT_HORIZONTAL_RULE_COMMAND;
// Text formatting
FORMAT_TEXT_COMMAND; // { format: 'bold' | 'italic' | 'underline' }
CLEAR_FORMAT_COMMAND;
```
<div align="right">
[![\][back-to-top\]](#readme-top)
</div>
## ๐ ๏ธ Development
### Setup
You can use Github Codespaces for online development:
[![][github-codespace-shield]][github-codespace-link]
Or clone it for local development:
[![][bun-shield]][bun-link]
```bash
$ git clone https://github.com/lobehub/lobe-editor.git
$ cd lobe-editor
$ pnpm install
$ pnpm run dev
```
This will start the Dumi documentation server with live playground at `http://localhost:8000`.
### Available Scripts
| Script | Description |
| -------------------- | --------------------------------------------- |
| `pnpm dev` | Start Dumi development server with playground |
| `pnpm build` | Build library and generate type definitions |
| `pnpm test` | Run tests with Vitest |
| `pnpm test:coverage` | Run tests with coverage report |
| `pnpm lint` | Lint and fix code with ESLint |
| `pnpm type-check` | Type check with TypeScript |
| `pnpm ci` | Run all CI checks (lint, type-check, test) |
| `pnpm docs:build` | Build documentation for production |
| `pnpm release` | Publish new version with semantic-release |
### Debug Environment Variables
LobeHub Editor includes comprehensive debug logging that can be controlled via environment variables:
#### Basic Debug Configuration
```bash
# Enable all LobeHub Editor debug output
DEBUG=lobe-editor:*
# Enable only important logs (recommended for development)
DEBUG=lobe-editor:*:info,lobe-editor:*:warn,lobe-editor:*:error
# Enable specific components
DEBUG=lobe-editor:kernel,lobe-editor:plugin:*
```
#### Available Debug Categories
| Category | Description | Example |
| ------------------ | ------------------------- | ------------------------------------ |
| `kernel` | Core editor functionality | `DEBUG=lobe-editor:kernel` |
| `plugin:*` | All plugins | `DEBUG=lobe-editor:plugin:*` |
| `plugin:slash` | Slash commands | `DEBUG=lobe-editor:plugin:slash` |
| `plugin:mention` | Mention system | `DEBUG=lobe-editor:plugin:mention` |
| `plugin:image` | Image handling | `DEBUG=lobe-editor:plugin:image` |
| `plugin:file` | File operations | `DEBUG=lobe-editor:plugin:file` |
| `service:*` | All services | `DEBUG=lobe-editor:service:*` |
| `service:upload` | Upload service | `DEBUG=lobe-editor:service:upload` |
| `service:markdown` | Markdown processing | `DEBUG=lobe-editor:service:markdown` |
#### Debug Levels
| Level | Browser Display | Usage | Environment Variable |
| ------- | --------------------- | ------------------- | --------------------------- |
| `debug` | Console.log (gray) | Detailed tracing | `DEBUG=lobe-editor:*:debug` |
| `info` | Console.log (blue) | General information | `DEBUG=lobe-editor:*:info` |
| `warn` | Console.warn (yellow) | Warnings | `DEBUG=lobe-editor:*:warn` |
| `error` | Console.error (red) | Errors | `DEBUG=lobe-editor:*:error` |
#### Development Usage
```bash
# Full debug during development
DEBUG=lobe-editor:*
# Only critical logs
DEBUG=lobe-editor:*:error,lobe-editor:*:warn
# Plugin debugging
DEBUG=lobe-editor:plugin:*
# Service debugging
DEBUG=lobe-editor:service:*
```
### Project Architecture
```
lobe-editor/
โโโ src/
โ โโโ editor-kernel/ # ๐ง Core editor logic
โ โ โโโ kernel.ts # Main editor class with plugin system
โ โ โโโ data-source.ts # Content management (JSON/Markdown/Text)
โ โ โโโ service.ts # Service container and dependency injection
โ โ โโโ plugin/ # Plugin base classes and interfaces
โ โ โโโ react/ # React integration layer
โ โ โโโ types.ts # TypeScript interfaces
โ โ
โ โโโ plugins/ # ๐ Feature plugins
โ โ โโโ common/ # ๐๏ธ Foundation components
โ โ โ โโโ plugin/ # Base editor plugin
โ โ โ โโโ react/ # ReactEditor, ReactEditorContent, ReactPlainText
โ โ โ โโโ data-source/ # Content data sources
โ โ โ โโโ utils/ # Common utilities
โ โ โ
โ โ โโโ markdown/ # ๐ Markdown processing engine
โ โ โ โโโ plugin/ # Markdown transformation plugin
โ โ โ โโโ service/ # Markdown shortcut service
โ โ โ โโโ data-source/ # Markdown serialization
โ โ โ โโโ utils/ # Transformer utilities
โ โ โ
โ โ โโโ upload/ # ๐ค Upload management system
โ โ โ โโโ plugin/ # Upload handling plugin
โ โ โ โโโ service/ # Upload service with priority system
โ โ โ โโโ utils/ # Upload utilities
โ โ โ
โ โ โโโ slash/ # โก Slash commands (/, @)
โ โ โ โโโ plugin/ # Slash detection plugin
โ โ โ โโโ react/ # ReactSlashPlugin, ReactSlashOption
โ โ โ โโโ service/ # Slash service with fuzzy search
โ โ โ โโโ utils/ # Search and trigger utilities
โ โ โ
โ โ โโโ mention/ # ๐ค @mention system
โ โ โ โโโ plugin/ # Mention plugin with decorators
โ โ โ โโโ react/ # ReactMentionPlugin
โ โ โ โโโ command/ # INSERT_MENTION_COMMAND
โ โ โ โโโ node/ # MentionNode with serialization
โ โ โ
โ โ โโโ codeblock/ # ๐จ Syntax highlighting
โ โ โ โโโ plugin/ # Codeblock plugin with Shiki
โ โ โ โโโ react/ # ReactCodeblockPlugin
โ โ โ โโโ command/ # Language and color commands
โ โ โ โโโ utils/ # Language detection
โ โ โ
โ โ โโโ image/ # ๐ผ๏ธ Image upload & display
โ โ โ โโโ plugin/ # Image plugin with captions
โ โ โ โโโ react/ # ReactImagePlugin
โ โ โ โโโ command/ # INSERT_IMAGE_COMMAND
โ โ โ โโโ node/ # BaseImageNode, ImageNode
โ โ โ
โ โ โโโ table/ # ๐ Table support
โ โ โ โโโ plugin/ # Table plugin with i18n
โ โ โ โโโ react/ # ReactTablePlugin
โ โ โ โโโ command/ # Table manipulation commands
โ โ โ โโโ node/ # Enhanced TableNode
โ โ โ โโโ utils/ # Table operations
โ โ โ
โ โ โโโ file/ # ๐ File attachments
โ โ โ โโโ plugin/ # File plugin with status tracking
โ โ โ โโโ react/ # ReactFilePlugin
โ โ โ โโโ command/ # INSERT_FILE_COMMAND
โ โ โ โโโ node/ # FileNode with metadata
โ โ โ โโโ utils/ # File operations
โ โ โ
โ โ โโโ link/ # ๐ Link management
โ โ โ โโโ plugin/ # Link plugin with validation
โ โ โ โโโ react/ # ReactLinkPlugin
โ โ โ โโโ command/ # Link commands
โ โ โ โโโ utils/ # URL validation and detection
โ โ โ
โ โ โโโ list/ # ๐ Lists (ordered/unordered)
โ โ โ โโโ plugin/ # List plugin with nesting
โ โ โ โโโ react/ # ReactListPlugin
โ โ โ โโโ command/ # List manipulation commands
โ โ โ โโโ utils/ # List operations
โ โ โ
โ โ โโโ hr/ # โ Horizontal rules
โ โ โโโ plugin/ # HR plugin with styling
โ โ โโโ react/ # ReactHRPlugin
โ โ โโโ command/ # HR insertion commands
โ โ โโโ node/ # HorizontalRuleNode
โ โ
โ โโโ react/ # โ๏ธ High-level React components
โ โ โโโ Editor/ # Main Editor component with plugins
โ โ โโโ ChatInput/ # Chat interface component
โ โ โโโ ChatInputActions/ # Chat action buttons
โ โ โโโ ChatInputActionBar/ # Action bar layout
โ โ โโโ SendButton/ # Send button with states
โ โ โโโ CodeLanguageSelect/ # Code language selector
โ โ
โ โโโ index.ts # Public API exports
โ
โโโ docs/ # ๐ Documentation source
โโโ tests/ # ๐งช Test files
โโโ vitest.config.ts # Test configuration
โโโ .dumi/ # Dumi doc build cache
```
The architecture follows a **dual-layer design**:
1. **Kernel Layer** (`editor-kernel/`) - Framework-agnostic core with plugin system
2. **React Layer** (`react/` + `plugins/*/react/`) - React-specific implementations
Each plugin follows a consistent structure:
- **`plugin/`** - Core plugin logic and node definitions
- **`react/`** - React components and hooks (if applicable)
- **`command/`** - Editor commands and handlers
- **`service/`** - Services and business logic
- **`node/`** - Custom Lexical nodes
- **`utils/`** - Utility functions and helpers
This allows for maximum flexibility - you can use just the kernel for custom integrations, or the React components for rapid development.
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## ๐ค Contributing
Contributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub [Issues][github-issues-link] to get stuck in to show us what you're made of.
[![][pr-welcome-shield]][pr-welcome-link]
[![][github-contrib-shield]][github-contrib-link]
<div align="right">
[![][back-to-top]](#readme-top)
</div>
## ๐ Links
### More Products
- **[๐คฏ Lobe Chat](https://github.com/lobehub/lobe-chat)** - An open-source, extensible (Function Calling), high-performance chatbot framework. It supports one-click free deployment of your private ChatGPT/LLM web application.
- **[๐
ฐ๏ธ Lobe Theme](https://github.com/lobehub/sd-webui-lobe-theme)** - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency boosting features.
- **[๐งธ Lobe Vidol](https://github.com/lobehub/lobe-vidol)** - Experience the magic of virtual idol creation with Lobe Vidol, enjoy the elegance of our Exquisite UI Design, dance along using MMD Dance Support, and engage in Smooth Conversations.
### Design Resources
- **[๐ญ Lobe UI](https://ui.lobehub.com)** - An open-source UI component library for building AIGC web apps.
- **[๐ฅจ Lobe Icons](https://lobehub.com/icons)** - Popular AI / LLM Model Brand SVG Logo and Icon Collection.
- **[๐ Lobe Charts](https://charts.lobehub.com)** - React modern charts components built on recharts
### Development Resources
- **[๐ค Lobe TTS](https://tts.lobehub.com)** - A high-quality & reliable TTS/STT library for Server and Browser
- **[๐ Lobe i18n](https://github.com/lobehub/lobe-cli-toolbox/blob/master/packages/lobe-i18n)** - Automation ai tool for the i18n (internationalization) translation process.
[More Resources](https://lobehub.com/resources)
<div align="right">
[![][back-to-top]](#readme-top)
</div>
---
#### ๐ License
Copyright ยฉ 2025 [LobeHub][profile-link]. <br />
This project is [MIT](./LICENSE) licensed.
[back-to-top]: https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square
[bun-link]: https://bun.sh
[bun-shield]: https://img.shields.io/badge/-speedup%20with%20bun-black?logo=bun&style=for-the-badge
[github-action-release-link]: https://github.com/lobehub/lobe-editor/actions/workflows/release.yml
[github-action-release-shield]: https://img.shields.io/github/actions/workflow/status/lobehub/lobe-editor/release.yml?label=release&labelColor=black&logo=githubactions&logoColor=white&style=flat-square
[github-action-test-link]: https://github.com/lobehub/lobe-editor/actions/workflows/test.yml
[github-action-test-shield]: https://img.shields.io/github/actions/workflow/status/lobehub/lobe-editor/test.yml?label=test&labelColor=black&logo=githubactions&logoColor=white&style=flat-square
[github-codespace-link]: https://codespaces.new/lobehub/lobe-editor
[github-codespace-shield]: https://github.com/codespaces/badge.svg
[github-contrib-link]: https://github.com/lobehub/lobe-editor/graphs/contributors
[github-contrib-shield]: https://contrib.rocks/image?repo=lobehub%2Flobe-editor
[github-contributors-link]: https://github.com/lobehub/lobe-editor/graphs/contributors
[github-contributors-shield]: https://img.shields.io/github/contributors/lobehub/lobe-editor?color=c4f042&labelColor=black&style=flat-square
[github-forks-link]: https://github.com/lobehub/lobe-editor/network/members
[github-forks-shield]: https://img.shields.io/github/forks/lobehub/lobe-editor?color=8ae8ff&labelColor=black&style=flat-square
[github-issues-link]: https://github.com/lobehub/lobe-editor/issues
[github-issues-shield]: https://img.shields.io/github/issues/lobehub/lobe-editor?color=ff80eb&labelColor=black&style=flat-square
[github-license-link]: https://github.com/lobehub/lobe-editor/blob/master/LICENSE
[github-license-shield]: https://img.shields.io/github/license/lobehub/lobe-editor?color=white&labelColor=black&style=flat-square
[github-releasedate-link]: https://github.com/lobehub/lobe-editor/releases
[github-releasedate-shield]: https://img.shields.io/github/release-date/lobehub/lobe-editor?labelColor=black&style=flat-square
[github-stars-link]: https://github.com/lobehub/lobe-editor/network/stargazers
[github-stars-shield]: https://img.shields.io/github/stars/lobehub/lobe-editor?color=ffcb47&labelColor=black&style=flat-square
[npm-release-link]: https://www.npmjs.com/package/@lobehub/editor
[npm-release-shield]: https://img.shields.io/npm/v/@lobehub/editor?color=369eff&labelColor=black&logo=npm&logoColor=white&style=flat-square
[pr-welcome-link]: https://github.com/lobehub/lobe-editor/pulls
[pr-welcome-shield]: https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge
[profile-link]: https://github.com/lobehub