@haklex/rich-renderers-edit 0.0.32 → 0.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +150 -65
  2. package/package.json +18 -18
package/README.md CHANGED
@@ -1,96 +1,181 @@
1
1
  # @haklex/rich-renderers-edit
2
2
 
3
- 编辑渲染器聚合包,包含完整编辑 UI。依赖 `@haklex/rich-renderers`。
3
+ 编辑态增强聚合包。
4
+ 在 `@haklex/rich-renderers` 静态能力上,补齐 edit renderer、edit node、扩展插件与 slash 菜单能力。
5
+
6
+ ## 包定位
7
+
8
+ - 产出 `enhancedEditRendererConfig`
9
+ - 导出编辑态扩展节点(`embedEditNodes`、`codeSnippetEditNodes`、`katexEditNodes`、`linkCardEditNodes`)
10
+ - 导出常用插件(`SlashMenuPlugin`、`EmbedPlugin`、`TldrawPlugin`、`PasteLinkCardPlugin`、`BlockHandlePlugin`)
11
+
12
+ 如果你想“一键接全套”,可直接用 `@haklex/rich-kit-shiro`。
4
13
 
5
14
  ## 安装
6
15
 
7
16
  ```bash
8
- pnpm add @haklex/rich-renderers-edit @haklex/rich-editor
17
+ pnpm add @haklex/rich-renderers-edit @haklex/rich-renderers @haklex/rich-editor
9
18
  ```
10
19
 
11
- ## 使用
20
+ ## 快速开始(手动装配)
12
21
 
13
22
  ```tsx
14
- import { RichEditor } from '@haklex/rich-editor/editor'
15
- import { enhancedEditRendererConfig } from '@haklex/rich-renderers-edit'
16
-
17
- function Editor() {
18
- return (
19
- <RichEditor
20
- rendererConfig={enhancedEditRendererConfig}
21
- variant="article"
22
- />
23
- )
24
- }
23
+ import { RichEditor } from '@haklex/rich-editor'
24
+ import { galleryEditNodes } from '@haklex/rich-renderers'
25
+ import {
26
+ BlockHandlePlugin,
27
+ codeSnippetEditNodes,
28
+ embedEditNodes,
29
+ enhancedEditRendererConfig,
30
+ katexEditNodes,
31
+ linkCardEditNodes,
32
+ PasteLinkCardPlugin,
33
+ SlashMenuPlugin,
34
+ TldrawEditNode,
35
+ TldrawPlugin,
36
+ EmbedPlugin,
37
+ } from '@haklex/rich-renderers-edit'
38
+
39
+ import '@haklex/rich-editor/style.css'
40
+ import '@haklex/rich-editor-ui/style.css'
41
+ import '@haklex/rich-renderers/style.css'
42
+ import '@haklex/rich-ext-code-snippet/style.css'
43
+ import '@haklex/rich-ext-embed/style.css'
44
+ import '@haklex/rich-plugin-slash-menu/style.css'
45
+ import '@haklex/rich-plugin-block-handle/style.css'
46
+ import 'katex/dist/katex.min.css'
47
+ import 'tldraw/tldraw.css'
48
+
49
+ const extraNodes = [
50
+ TldrawEditNode,
51
+ ...embedEditNodes,
52
+ ...linkCardEditNodes,
53
+ ...katexEditNodes,
54
+ ...galleryEditNodes,
55
+ ...codeSnippetEditNodes,
56
+ ]
57
+
58
+ <RichEditor
59
+ rendererConfig={enhancedEditRendererConfig}
60
+ extraNodes={extraNodes}
61
+ actions={<SlashMenuPlugin />}
62
+ >
63
+ <BlockHandlePlugin />
64
+ <TldrawPlugin />
65
+ <EmbedPlugin />
66
+ <PasteLinkCardPlugin />
67
+ </RichEditor>
25
68
  ```
26
69
 
27
- ## 包含的编辑渲染器
70
+ ## `enhancedEditRendererConfig` 说明
28
71
 
29
- 在静态渲染器基础上增加:
72
+ `enhancedEditRendererConfig` 基于 `enhancedRendererConfig` 构建,并覆写为编辑态组件:
30
73
 
31
- | 渲染器 | 来源包 |
32
- |--------|--------|
33
- | `AlertEditRenderer` | `@haklex/rich-renderer-alert` |
34
- | `BannerEditRenderer` | `@haklex/rich-renderer-banner` |
35
- | `CodeBlockEditRenderer` | `@haklex/rich-renderer-codeblock` |
36
- | `ImageEditRenderer` | `@haklex/rich-renderer-image` |
37
- | `MentionEditRenderer` | `@haklex/rich-renderer-mention` |
38
- | `MermaidEditRenderer` | `@haklex/rich-renderer-mermaid` |
39
- | `VideoEditRenderer` | `@haklex/rich-renderer-video` |
40
- | `GalleryEditRenderer` | `@haklex/rich-ext-gallery` |
41
- | `CodeSnippetEditRenderer` | `@haklex/rich-ext-code-snippet` |
42
- | `TldrawEditRenderer` | `@haklex/rich-ext-tldraw` |
74
+ - `Alert -> AlertEditRenderer`
75
+ - `Banner -> BannerEditRenderer`
76
+ - `CodeBlock -> CodeBlockEditRenderer`
77
+ - `Footnote -> FootnoteRenderer`
78
+ - `Gallery -> GalleryEditRenderer`
79
+ - `Image -> ImageEditRenderer`
80
+ - `Mention -> MentionEditRenderer`
81
+ - `Mermaid -> MermaidEditRenderer`
82
+ - `Video -> VideoEditRenderer`
83
+ - `CodeSnippet -> CodeSnippetEditRenderer`
43
84
 
44
- ## 导出
85
+ 注意:它只负责“如何渲染”,不负责“节点是否注册”“插件是否挂载”。
86
+
87
+ ## 核心导出
88
+
89
+ ### 1) 预置配置
45
90
 
46
91
  ```ts
47
- // 预置配置
48
- export { enhancedEditRendererConfig } from './config'
49
-
50
- // 编辑渲染器
51
- export { AlertEditRenderer } from '@haklex/rich-renderer-alert'
52
- export { BannerEditRenderer } from '@haklex/rich-renderer-banner'
53
- export { CodeBlockEditRenderer } from '@haklex/rich-renderer-codeblock'
54
- export { ImageEditRenderer } from '@haklex/rich-renderer-image'
55
- export { MentionEditRenderer } from '@haklex/rich-renderer-mention'
56
- export { MermaidEditRenderer } from '@haklex/rich-renderer-mermaid'
57
- export { VideoEditRenderer } from '@haklex/rich-renderer-video'
58
- export { CodeSnippetEditRenderer } from '@haklex/rich-ext-code-snippet'
59
- export { TldrawEditRenderer } from '@haklex/rich-ext-tldraw'
60
-
61
- // 编辑节点
62
- export { CodeSnippetEditNode, codeSnippetEditNodes } from '@haklex/rich-ext-code-snippet'
63
- export { EmbedEditNode, embedEditNodes } from '@haklex/rich-ext-embed'
64
- export { LinkCardEditNode, linkCardEditNodes } from '@haklex/rich-renderer-linkcard'
65
- export { KaTeXBlockEditNode, KaTeXInlineEditNode, katexEditNodes } from '@haklex/rich-renderer-katex'
66
-
67
- // 插件
68
- export { SlashMenuPlugin } from '@haklex/rich-plugin-slash-menu'
69
- export { EmbedPlugin, INSERT_EMBED_COMMAND } from '@haklex/rich-ext-embed'
70
- export { TldrawPlugin, INSERT_TLDRAW_COMMAND } from '@haklex/rich-ext-tldraw'
92
+ enhancedEditRendererConfig
71
93
  ```
72
94
 
73
- ## SlashMenu
95
+ ### 2) Edit Renderer
74
96
 
75
- ```tsx
76
- import { SlashMenuPlugin } from '@haklex/rich-renderers-edit'
97
+ ```ts
98
+ AlertEditRenderer
99
+ BannerEditRenderer
100
+ CodeBlockEditRenderer
101
+ ImageEditRenderer
102
+ MentionEditRenderer
103
+ MermaidEditRenderer
104
+ VideoEditRenderer
105
+ CodeSnippetEditRenderer
106
+ TldrawEditRenderer
107
+ ```
77
108
 
78
- <RichEditor>
79
- <SlashMenuPlugin />
80
- </RichEditor>
109
+ ### 3) Edit Node
110
+
111
+ ```ts
112
+ codeSnippetEditNodes
113
+ embedEditNodes
114
+ linkCardEditNodes
115
+ katexEditNodes
116
+ TldrawEditNode
117
+ ```
118
+
119
+ ### 4) 插件与命令
120
+
121
+ ```ts
122
+ SlashMenuPlugin
123
+ collectNodeSlashItems
124
+ getBuiltinItems
125
+ EmbedPlugin
126
+ INSERT_EMBED_COMMAND
127
+ TldrawPlugin
128
+ INSERT_TLDRAW_COMMAND
129
+ PasteLinkCardPlugin
130
+ BlockHandlePlugin
81
131
  ```
82
132
 
83
- ## 依赖
133
+ ## 设计模式
84
134
 
85
- ```json
135
+ ### 1) 静态渲染器复用 + 编辑态覆盖
136
+
137
+ 编辑配置通过:
138
+
139
+ ```ts
86
140
  {
87
- "@haklex/rich-editor": "workspace:*",
88
- "@haklex/rich-renderers": "workspace:*",
89
- "lexical": "^0.40.0",
90
- "react": ">=19"
141
+ ...enhancedRendererConfig,
142
+ CodeBlock: CodeBlockEditRenderer,
143
+ ...
91
144
  }
92
145
  ```
93
146
 
147
+ 实现最大复用,最小维护面。
148
+
149
+ ### 2) Edit Node 继承 Static Node
150
+
151
+ 推荐让编辑节点继承静态节点,仅覆盖 `decorate()`(必要时再覆盖 `importJSON/clone`),保证 JSON 协议一致。
152
+
153
+ ### 3) Slash 菜单自动发现
154
+
155
+ 节点可在类上声明:
156
+
157
+ ```ts
158
+ static slashMenuItems: SlashMenuItemConfig[]
159
+ ```
160
+
161
+ `SlashMenuPlugin` 会通过 `collectNodeSlashItems(editor)` 自动收集并合并到菜单。
162
+
163
+ ### 4) 命令驱动扩展
164
+
165
+ 扩展插入行为统一封装成 `INSERT_XXX_COMMAND`,菜单/按钮/快捷键都 dispatch 命令,避免 UI 与节点逻辑耦合。
166
+
167
+ ## 扩展编写与接入建议
168
+
169
+ 新增扩展(例如 `Foo`)时,建议按以下顺序:
170
+
171
+ 1. 在扩展包实现 `FooNode`(静态)与可选 `FooEditNode`
172
+ 2. 实现 `FooRenderer` 与可选 `FooEditRenderer`
173
+ 3. 提供 `fooNodes/fooEditNodes` 导出
174
+ 4. 如需插入能力,实现 `FooPlugin + INSERT_FOO_COMMAND`
175
+ 5. 在 `@haklex/rich-renderers` 注册静态侧导出
176
+ 6. 在 `@haklex/rich-renderers-edit` 注册编辑侧导出与配置覆盖
177
+ 7. 补充 README 的节点注册、插件挂载、样式引入说明
178
+
94
179
  ## License
95
180
 
96
181
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-renderers-edit",
3
- "version": "0.0.32",
3
+ "version": "0.0.34",
4
4
  "description": "Edit renderers aggregator for haklex rich editor",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -55,23 +55,23 @@
55
55
  "dist"
56
56
  ],
57
57
  "dependencies": {
58
- "@haklex/rich-ext-code-snippet": "0.0.32",
59
- "@haklex/rich-editor": "0.0.32",
60
- "@haklex/rich-ext-embed": "0.0.32",
61
- "@haklex/rich-ext-gallery": "0.0.32",
62
- "@haklex/rich-plugin-block-handle": "0.0.32",
63
- "@haklex/rich-ext-tldraw": "0.0.32",
64
- "@haklex/rich-renderer-banner": "0.0.32",
65
- "@haklex/rich-renderer-codeblock": "0.0.32",
66
- "@haklex/rich-renderer-image": "0.0.32",
67
- "@haklex/rich-renderer-alert": "0.0.32",
68
- "@haklex/rich-plugin-slash-menu": "0.0.32",
69
- "@haklex/rich-renderer-linkcard": "0.0.32",
70
- "@haklex/rich-renderer-mention": "0.0.32",
71
- "@haklex/rich-renderer-video": "0.0.32",
72
- "@haklex/rich-renderer-katex": "0.0.32",
73
- "@haklex/rich-renderer-mermaid": "0.0.32",
74
- "@haklex/rich-renderers": "0.0.32"
58
+ "@haklex/rich-editor": "0.0.34",
59
+ "@haklex/rich-ext-gallery": "0.0.34",
60
+ "@haklex/rich-plugin-slash-menu": "0.0.34",
61
+ "@haklex/rich-ext-code-snippet": "0.0.34",
62
+ "@haklex/rich-renderer-alert": "0.0.34",
63
+ "@haklex/rich-renderer-banner": "0.0.34",
64
+ "@haklex/rich-ext-embed": "0.0.34",
65
+ "@haklex/rich-ext-tldraw": "0.0.34",
66
+ "@haklex/rich-renderer-mention": "0.0.34",
67
+ "@haklex/rich-plugin-block-handle": "0.0.34",
68
+ "@haklex/rich-renderer-image": "0.0.34",
69
+ "@haklex/rich-renderer-katex": "0.0.34",
70
+ "@haklex/rich-renderer-linkcard": "0.0.34",
71
+ "@haklex/rich-renderer-codeblock": "0.0.34",
72
+ "@haklex/rich-renderer-video": "0.0.34",
73
+ "@haklex/rich-renderers": "0.0.34",
74
+ "@haklex/rich-renderer-mermaid": "0.0.34"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@lexical/react": "^0.40.0",