@haklex/rich-renderers 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 +167 -68
  2. package/package.json +14 -14
package/README.md CHANGED
@@ -1,106 +1,205 @@
1
1
  # @haklex/rich-renderers
2
2
 
3
- 静态渲染器聚合包,用于只读内容展示。不包含编辑 UI 依赖。
3
+ 静态渲染器聚合包。
4
+ 为 `@haklex/rich-renderer` 提供一套增强版 `rendererConfig`,并统一导出常见扩展节点与工具。
5
+
6
+ ## 包定位
7
+
8
+ - 面向只读渲染场景(文章页、SSR、预览页)
9
+ - 聚合多个 feature 包(codeblock/image/video/linkcard/...)
10
+ - 不负责编辑器插件挂载(编辑态请看 `@haklex/rich-renderers-edit`)
4
11
 
5
12
  ## 安装
6
13
 
7
14
  ```bash
8
- pnpm add @haklex/rich-renderers @haklex/rich-editor
15
+ pnpm add @haklex/rich-renderers @haklex/rich-renderer @haklex/rich-editor
9
16
  ```
10
17
 
11
- ## 使用
18
+ ## 快速开始
12
19
 
13
20
  ```tsx
14
- import { RichRenderer } from '@haklex/rich-editor/renderer'
15
- import { enhancedRendererConfig } from '@haklex/rich-renderers'
21
+ import { RichRenderer } from '@haklex/rich-renderer'
22
+ import {
23
+ codeSnippetNodes,
24
+ embedNodes,
25
+ enhancedRendererConfig,
26
+ galleryNodes,
27
+ TldrawNode,
28
+ } from '@haklex/rich-renderers'
29
+
30
+ import '@haklex/rich-editor/style.css'
16
31
  import '@haklex/rich-renderers/style.css'
17
-
18
- function Article({ content }) {
32
+ import '@haklex/rich-ext-code-snippet/style.css'
33
+ import '@haklex/rich-ext-embed/style.css'
34
+ import 'katex/dist/katex.min.css'
35
+ import 'tldraw/tldraw.css'
36
+
37
+ const extraNodes = [
38
+ TldrawNode,
39
+ ...embedNodes,
40
+ ...galleryNodes,
41
+ ...codeSnippetNodes,
42
+ ]
43
+
44
+ export function Article({ value }) {
19
45
  return (
20
46
  <RichRenderer
21
- value={content}
47
+ value={value}
22
48
  rendererConfig={enhancedRendererConfig}
49
+ extraNodes={extraNodes}
23
50
  variant="article"
24
51
  />
25
52
  )
26
53
  }
27
54
  ```
28
55
 
29
- ## 包含的渲染器
56
+ ## `enhancedRendererConfig` 包含项
57
+
58
+ | key | renderer |
59
+ | --- | --- |
60
+ | `Alert` | `AlertRenderer` |
61
+ | `Banner` | `BannerRenderer` |
62
+ | `CodeBlock` | `CodeBlockRenderer` |
63
+ | `Image` | `ImageRenderer` |
64
+ | `LinkCard` | `LinkCardRenderer` |
65
+ | `Mention` | `MentionRenderer` |
66
+ | `Gallery` | `GalleryRenderer` |
67
+ | `Mermaid` | `MermaidRenderer` |
68
+ | `Video` | `VideoRenderer` |
69
+ | `CodeSnippet` | `CodeSnippetRenderer` |
70
+
71
+ ## 样式引入策略
30
72
 
31
- | 渲染器 | 来源包 |
32
- |--------|--------|
33
- | `AlertRenderer` | `@haklex/rich-renderer-alert` |
34
- | `BannerRenderer` | `@haklex/rich-renderer-banner` |
35
- | `CodeBlockRenderer` | `@haklex/rich-renderer-codeblock` |
36
- | `ImageRenderer` | `@haklex/rich-renderer-image` |
37
- | `LinkCardRenderer` | `@haklex/rich-renderer-linkcard` |
38
- | `MentionRenderer` | `@haklex/rich-renderer-mention` |
39
- | `MermaidRenderer` | `@haklex/rich-renderer-mermaid` |
40
- | `VideoRenderer` | `@haklex/rich-renderer-video` |
41
- | `GalleryRenderer` | `@haklex/rich-ext-gallery` |
42
- | `CodeSnippetRenderer` | `@haklex/rich-ext-code-snippet` |
73
+ `@haklex/rich-renderers/style.css` 已包含:
43
74
 
44
- ## 导出
75
+ - alert/banner/codeblock/gallery/image/linkcard/mention/mermaid/video/tldraw 扩展样式
76
+
77
+ 仍需按需额外引入:
78
+
79
+ - `@haklex/rich-ext-code-snippet/style.css`(CodeSnippet)
80
+ - `@haklex/rich-ext-embed/style.css`(Embed)
81
+ - `katex/dist/katex.min.css`(KaTeX)
82
+ - `tldraw/tldraw.css`(Tldraw 内核)
83
+
84
+ ## 核心导出
85
+
86
+ ### 1) 预置配置
45
87
 
46
88
  ```ts
47
- // 预置配置
48
- export { enhancedRendererConfig } from './config'
49
-
50
- // 渲染器
51
- export { AlertRenderer } from '@haklex/rich-renderer-alert'
52
- export { BannerRenderer } from '@haklex/rich-renderer-banner'
53
- export { CodeBlockRenderer } from '@haklex/rich-renderer-codeblock'
54
- export { ImageRenderer } from '@haklex/rich-renderer-image'
55
- export { LinkCardRenderer } from '@haklex/rich-renderer-linkcard'
56
- export { MentionRenderer } from '@haklex/rich-renderer-mention'
57
- export { MermaidRenderer } from '@haklex/rich-renderer-mermaid'
58
- export { VideoRenderer } from '@haklex/rich-renderer-video'
59
- export { GalleryRenderer } from '@haklex/rich-ext-gallery'
60
- export { CodeSnippetRenderer } from '@haklex/rich-ext-code-snippet'
61
-
62
- // Tldraw
63
- export { TldrawNode, TldrawRenderer, TldrawStaticRenderer } from '@haklex/rich-ext-tldraw'
64
-
65
- // Embed
66
- export { EmbedNode, EmbedStaticRenderer, EmbedLinkRenderer } from '@haklex/rich-ext-embed'
67
-
68
- // 节点
69
- export { GalleryNode, galleryNodes } from '@haklex/rich-ext-gallery'
70
- export { CodeSnippetNode, codeSnippetNodes } from '@haklex/rich-ext-code-snippet'
71
- export { embedNodes } from '@haklex/rich-ext-embed'
72
-
73
- // LinkCard 插件
74
- export {
75
- plugins, pluginMap,
76
- githubRepoPlugin, githubPrPlugin, githubIssuePlugin,
77
- arxivPlugin, tmdbPlugin, bangumiPlugin
78
- } from '@haklex/rich-renderer-linkcard'
89
+ enhancedRendererConfig
79
90
  ```
80
91
 
81
- ## 自定义配置
92
+ ### 2) 扩展节点
82
93
 
83
- ```tsx
84
- import { enhancedRendererConfig } from '@haklex/rich-renderers'
94
+ ```ts
95
+ // gallery
96
+ galleryNodes
97
+ GalleryNode
98
+ GalleryEditNode
85
99
 
86
- const customConfig = {
87
- ...enhancedRendererConfig,
88
- CodeBlock: MyCodeRenderer, // 覆盖
89
- }
100
+ // code-snippet
101
+ codeSnippetNodes
102
+ CodeSnippetNode
103
+
104
+ // embed
105
+ embedNodes
106
+ EmbedNode
107
+
108
+ // tldraw
109
+ TldrawNode
110
+ ```
111
+
112
+ ### 3) 各功能渲染器
113
+
114
+ ```ts
115
+ AlertRenderer
116
+ BannerRenderer
117
+ CodeBlockRenderer
118
+ ImageRenderer
119
+ LinkCardRenderer
120
+ MentionRenderer
121
+ MermaidRenderer
122
+ VideoRenderer
123
+ GalleryRenderer
124
+ CodeSnippetRenderer
125
+ EmbedStaticRenderer
126
+ EmbedLinkRenderer
127
+ TldrawStaticRenderer
128
+ ```
129
+
130
+ ### 4) LinkCard 插件体系
90
131
 
91
- <RichRenderer rendererConfig={customConfig} />
132
+ ```ts
133
+ plugins
134
+ pluginMap
135
+ getPluginByName
136
+ githubRepoPlugin
137
+ githubPrPlugin
138
+ githubIssuePlugin
139
+ githubCommitPlugin
140
+ githubDiscussionPlugin
141
+ arxivPlugin
142
+ tmdbPlugin
143
+ bangumiPlugin
144
+ qqMusicPlugin
145
+ neteaseMusicPlugin
146
+ leetcodePlugin
92
147
  ```
93
148
 
94
- ## 依赖
149
+ ## 子路径按需引入
150
+
151
+ 可用子路径(对应 `package.json exports`):
152
+
153
+ - `@haklex/rich-renderers/alert`
154
+ - `@haklex/rich-renderers/banner`
155
+ - `@haklex/rich-renderers/codeblock`
156
+ - `@haklex/rich-renderers/code-snippet`
157
+ - `@haklex/rich-renderers/image`
158
+ - `@haklex/rich-renderers/linkcard`
159
+ - `@haklex/rich-renderers/mention`
160
+ - `@haklex/rich-renderers/mermaid`
161
+ - `@haklex/rich-renderers/video`
162
+ - `@haklex/rich-renderers/gallery`
163
+ - `@haklex/rich-renderers/embed`
164
+ - `@haklex/rich-renderers/tldraw`
165
+ - `@haklex/rich-renderers/style.css`
166
+
167
+ ## 设计模式
168
+
169
+ ### 1) 配置聚合模式
170
+
171
+ 把复杂渲染能力汇总为单个对象 `enhancedRendererConfig`,业务只需要:
172
+
173
+ - 注入这一个 config
174
+ - 注册扩展节点(`extraNodes`)
175
+ - 引入对应样式
176
+
177
+ ### 2) 静态与编辑分层
95
178
 
96
- ```json
97
- {
98
- "@haklex/rich-editor": "workspace:*",
99
- "lexical": "^0.40.0",
100
- "react": ">=19"
179
+ 本包只关注静态渲染,不在这里装配编辑插件。
180
+ 编辑行为统一在 `@haklex/rich-renderers-edit` 处理,保持 bundle 边界清晰。
181
+
182
+ ### 3) 可覆写不 fork
183
+
184
+ 你可以基于预置配置增量覆写:
185
+
186
+ ```tsx
187
+ const rendererConfig = {
188
+ ...enhancedRendererConfig,
189
+ CodeBlock: MyCodeBlockRenderer,
101
190
  }
102
191
  ```
103
192
 
193
+ ## 扩展接入建议
194
+
195
+ 新增扩展时,建议同步维护:
196
+
197
+ 1. 扩展包内导出 `nodes` 数组(静态)
198
+ 2. 在本包 `config.ts` 注册静态 renderer(如适配 `RendererConfig` key)
199
+ 3. 在本包 `index.ts` 与必要的子路径导出 API
200
+
201
+ 对应编辑态扩展再接入 `@haklex/rich-renderers-edit`。
202
+
104
203
  ## License
105
204
 
106
205
  MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-renderers",
3
- "version": "0.0.32",
3
+ "version": "0.0.34",
4
4
  "description": "Static renderers aggregator for haklex rich editor",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -65,19 +65,19 @@
65
65
  "src/style.css"
66
66
  ],
67
67
  "dependencies": {
68
- "@haklex/rich-editor": "0.0.32",
69
- "@haklex/rich-ext-embed": "0.0.32",
70
- "@haklex/rich-ext-tldraw": "0.0.32",
71
- "@haklex/rich-ext-gallery": "0.0.32",
72
- "@haklex/rich-renderer-alert": "0.0.32",
73
- "@haklex/rich-ext-code-snippet": "0.0.32",
74
- "@haklex/rich-renderer-banner": "0.0.32",
75
- "@haklex/rich-renderer-image": "0.0.32",
76
- "@haklex/rich-renderer-codeblock": "0.0.32",
77
- "@haklex/rich-renderer-mermaid": "0.0.32",
78
- "@haklex/rich-renderer-mention": "0.0.32",
79
- "@haklex/rich-renderer-linkcard": "0.0.32",
80
- "@haklex/rich-renderer-video": "0.0.32"
68
+ "@haklex/rich-ext-tldraw": "0.0.34",
69
+ "@haklex/rich-ext-gallery": "0.0.34",
70
+ "@haklex/rich-editor": "0.0.34",
71
+ "@haklex/rich-renderer-codeblock": "0.0.34",
72
+ "@haklex/rich-renderer-alert": "0.0.34",
73
+ "@haklex/rich-ext-embed": "0.0.34",
74
+ "@haklex/rich-renderer-banner": "0.0.34",
75
+ "@haklex/rich-renderer-image": "0.0.34",
76
+ "@haklex/rich-ext-code-snippet": "0.0.34",
77
+ "@haklex/rich-renderer-linkcard": "0.0.34",
78
+ "@haklex/rich-renderer-mention": "0.0.34",
79
+ "@haklex/rich-renderer-video": "0.0.34",
80
+ "@haklex/rich-renderer-mermaid": "0.0.34"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@lexical/react": "^0.40.0",