嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法
Plate 是一个强大的工具包,它让开发者能够更容易地使用 Slate 框架开发文本编辑器。Plate 专注于四个主要领域:核心(Core) 、 插件(Plugins) 、 原语(Primitives)和组件(Components)。
架构与生态
核心(Core)
Plate 的核心是其插件系统,为 slate 和 slate-react 设计,支持服务器端渲染。它通过分离不同的功能并保持整洁来帮助您的项目组织和高效。核心功能以纯 JavaScript 形式提供,允许服务器端渲染和非 React 使用。
插件(Plugins)
Plate 提供了广泛的插件包,增强了编辑器的行为、钩子、序列化、规范化等功能。这些插件是“无头”的,意味着它们默认没有样式。插件系统包括:
- 状态管理:每个插件都有自己的 Zustand 存储。
- 快捷方式:为每个插件定义自定义热键。
- API 和转换:插件可以定义自己的 API 方法和转换,可通过
editor.api和editor.transforms访问。 - TypeScript:为插件和编辑器提供强大的类型推断。
原语(Primitives)
除了插件外,Plate 还提供了基于 Radix UI 的无样式和可访问组件。这些组件构成了构建高质量设计系统的基础。
组件(Components)
为了帮助您快速开始创建视觉上吸引人的界面,Plate 提供了预构建的样式化组件,您可以使用我们的 CLI 自定义这些组件。这些基于 shadcn/ui 的组件可以作为您自己的组件库的参考或起点,使您能够创建独特、可访问且视觉上令人愉悦的用户界面。
插件列表
- AI
- AI Copilot
- Alignment
- Autoformat
- Basic Elements
- Basic Marks
- Block Menu
- Block Selection
- Callout
- Caption
- Collaboration
- Column
- Combobox
- Comments
- Cursor Overlay
- Date
- Drag & Drop
- Emoji
- Equation
- Excalidraw
- Exit Break
- Font
- Forced Layout
- Highlight
- Horizontal Rule
- Indent
- Indent List
- Keyboard Input
- Line Height
- Link
- List
- Media
- Mention
- Multi Select
- Node ID
- Reset Node
- Select
- Serializing CSV
- Serializing DOCX
- Serializing Markdown
- Single Line
- Slash Command
- Soft Break
- Tabbable
- Table
- Table of Contents
- Toggle
- Trailing Block
示例
Plate 提供了许多示例,帮助您快速了解如何使用 Plate 构建各种功能。这些示例包括:
- Slate to HTML
- Export
- Server-Side
- Version History
- Editable Voids
- Hundreds Blocks
- Hundreds Editors
- Preview Markdown
- AI Demo
- Align Demo
- Autoformat Demo
- Basic Nodes Demo
- Block Menu Demo
- Block Selection Demo
- Column Demo
- Comments Demo
- Copilot Demo
- Cursor Overlay Demo
- Date Demo
- Drag & Drop Demo
- Emoji Demo
- Exit Break Demo
- Find Replace Demo
- Floating Toolbar Demo
- Font Demo
- Horizontal Rule Demo
- Indent List Demo
- Line Height Demo
- Link Demo
- List Demo
- Media Demo
- Mention Demo
- Serializing CSV Demo
- Serializing Docx Demo
- Serializing HTML Demo
- Serializing Markdown Demo
- Select Editor Form
- Single Line Demo
- Slash Command Demo
- Soft Break Demo
- Table Demo
- Table of Contents Demo
- Toggle Demo
功能和特点
插件概览
Plate 提供了多种插件,包括 AI、对齐、自动格式化、基本元素、块菜单等。每个插件都旨在解决特定的编辑器需求,同时保持高度的可定制性和扩展性。
示例
Plate 提供了丰富的示例,包括 Slate 到 HTML 的转换、导出、服务器端渲染、版本历史等。这些示例可以帮助您快速理解如何使用 Plate 构建复杂的编辑器功能。
API
Plate 的 API 覆盖了从核心组件到 Slate 工具的广泛功能。它包括 Plate 通用、Plate 核心、Plate 控制器、Plate 编辑器、Plate 插件、存储、Plate 工具、Slate、Slate React、Slate 工具、React 工具等。
如何使用
创建项目
你可以选择以下模板之一来开始:
增加依赖
首先,安装核心依赖:
npm install @udecode/plate-common slate slate-dom slate-react slate-history
对于本指南中的示例,我们还将使用这些插件:
npm install @udecode/plate-basic-marks @udecode/plate-heading @udecode/plate-block-quote @udecode/cn
# @udecode/plate-basic-marks 提供粗体、斜体、下划线和代码格式化功能。
# @udecode/plate-heading 添加 h1-h6 标题支持。
# @udecode/plate-block-quote 添加引用块支持。
# @udecode/cn 帮助组件样式设置(可选)。
基本编辑器
让我们从一个最小的编辑器设置开始。
import {
usePlateEditor,
Plate,
PlateContent,
} from '@udecode/plate-common/react';
export default function BasicEditor() {
const editor = usePlateEditor();
return (
<Plate editor={editor}>
<PlateContent placeholder="Type..." />
</Plate>
);
}
Plate 管理编辑器状态,PlateContent 渲染编辑器内容。
界面效果
应用场景
Plate适用于需要富文本编辑功能的各类应用,如下:
- 博客系统
- 论坛社区
- 在线教育
- 内容管理系统(CMS)
同类项目比较
与其他富文本编辑器相比,Plate具有以下优势:
- 插件系统:丰富的插件,易于扩展和定制。
- 类型安全:基于TypeScript,提供强大的类型推断。
- 可访问性:基于Radix UI,提供未样式化和可访问的组件。
- 响应式设计:支持移动端和桌面端设备。
以下是几个同类项目的简介:
- Draft.js:Facebook开发的富文本编辑器库,具有良好的性能和可扩展性。
- Quill:一个具有跨平台和跨浏览器支持的富文本编辑器。
- TinyMCE:一个功能丰富的富文本编辑器,适用于各种浏览器和设备。
结语
Plate 是一个为 React 设计的强大富文本编辑器框架,它通过其插件系统、无头组件和现代化的 API,为开发者提供了构建丰富文本编辑器的强有力工具。无论您是在寻找一个可定制的编辑器解决方案,还是希望构建一个全新的编辑器体验,Plate 都是一个值得考虑的选择。
项目地址
https://github.com/udecode/plate