@haklex/rich-compose 0.2.0 → 0.6.0
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.
- package/README.md +53 -51
- package/dist/core/compose.d.ts.map +1 -1
- package/dist/core/dedup.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/lazy.d.ts.map +1 -1
- package/dist/core/types.d.ts +22 -22
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +430 -5
- package/dist/modules/alert/index.d.ts +1 -1
- package/dist/modules/alert/index.d.ts.map +1 -1
- package/dist/modules/alert/module.d.ts.map +1 -1
- package/dist/modules/alert/renderer.d.ts.map +1 -1
- package/dist/modules/banner/index.d.ts +1 -1
- package/dist/modules/banner/index.d.ts.map +1 -1
- package/dist/modules/banner/module.d.ts.map +1 -1
- package/dist/modules/banner/renderer.d.ts.map +1 -1
- package/dist/modules/chat/index.d.ts +3 -3
- package/dist/modules/chat/index.d.ts.map +1 -1
- package/dist/modules/chat/index.mjs +9 -2
- package/dist/modules/chat/module.d.ts +7 -0
- package/dist/modules/chat/module.d.ts.map +1 -1
- package/dist/modules/chat/node.d.ts +2 -2
- package/dist/modules/chat/node.d.ts.map +1 -1
- package/dist/modules/chat/node.mjs +1 -1
- package/dist/modules/chat/renderer.d.ts +1 -1
- package/dist/modules/chat/renderer.d.ts.map +1 -1
- package/dist/modules/chat/renderer.mjs +1 -1
- package/dist/modules/code-block/index.d.ts +1 -1
- package/dist/modules/code-block/index.d.ts.map +1 -1
- package/dist/modules/code-block/module.d.ts.map +1 -1
- package/dist/modules/code-block/renderer.d.ts.map +1 -1
- package/dist/modules/code-snippet/index.d.ts +1 -1
- package/dist/modules/code-snippet/index.d.ts.map +1 -1
- package/dist/modules/code-snippet/index.mjs +7 -2
- package/dist/modules/code-snippet/module.d.ts +5 -0
- package/dist/modules/code-snippet/module.d.ts.map +1 -1
- package/dist/modules/code-snippet/node.d.ts +2 -2
- package/dist/modules/code-snippet/node.d.ts.map +1 -1
- package/dist/modules/code-snippet/node.mjs +1 -1
- package/dist/modules/code-snippet/renderer.d.ts +1 -1
- package/dist/modules/code-snippet/renderer.d.ts.map +1 -1
- package/dist/modules/code-snippet/renderer.mjs +1 -1
- package/dist/modules/embed/index.d.ts +1 -1
- package/dist/modules/embed/index.d.ts.map +1 -1
- package/dist/modules/embed/module.d.ts.map +1 -1
- package/dist/modules/embed/node.d.ts.map +1 -1
- package/dist/modules/excalidraw/index.d.ts +2 -2
- package/dist/modules/excalidraw/index.d.ts.map +1 -1
- package/dist/modules/excalidraw/module.d.ts.map +1 -1
- package/dist/modules/excalidraw/node.d.ts +2 -2
- package/dist/modules/excalidraw/node.d.ts.map +1 -1
- package/dist/modules/gallery/index.d.ts +2 -2
- package/dist/modules/gallery/index.d.ts.map +1 -1
- package/dist/modules/gallery/index.mjs +7 -2
- package/dist/modules/gallery/module.d.ts +5 -0
- package/dist/modules/gallery/module.d.ts.map +1 -1
- package/dist/modules/gallery/node.d.ts +2 -2
- package/dist/modules/gallery/node.d.ts.map +1 -1
- package/dist/modules/gallery/node.mjs +1 -1
- package/dist/modules/gallery/renderer.d.ts +1 -1
- package/dist/modules/gallery/renderer.d.ts.map +1 -1
- package/dist/modules/gallery/renderer.mjs +1 -1
- package/dist/modules/image/index.d.ts +1 -1
- package/dist/modules/image/index.d.ts.map +1 -1
- package/dist/modules/image/module.d.ts.map +1 -1
- package/dist/modules/image/renderer.d.ts.map +1 -1
- package/dist/modules/link-card/index.d.ts +1 -1
- package/dist/modules/link-card/index.d.ts.map +1 -1
- package/dist/modules/link-card/module.d.ts.map +1 -1
- package/dist/modules/link-card/renderer.d.ts.map +1 -1
- package/dist/modules/mention/index.d.ts +2 -2
- package/dist/modules/mention/index.d.ts.map +1 -1
- package/dist/modules/mention/module.d.ts.map +1 -1
- package/dist/modules/mention/renderer.d.ts.map +1 -1
- package/dist/modules/mermaid/index.d.ts +1 -1
- package/dist/modules/mermaid/index.d.ts.map +1 -1
- package/dist/modules/mermaid/module.d.ts.map +1 -1
- package/dist/modules/mermaid/renderer.d.ts.map +1 -1
- package/dist/modules/mermaid/ssr-fallback.d.ts.map +1 -1
- package/dist/modules/nested-doc/index.d.ts +1 -1
- package/dist/modules/nested-doc/index.d.ts.map +1 -1
- package/dist/modules/nested-doc/module.d.ts.map +1 -1
- package/dist/modules/nested-doc/node.d.ts.map +1 -1
- package/dist/modules/poll/index.d.ts +5 -0
- package/dist/modules/poll/index.d.ts.map +1 -0
- package/dist/modules/poll/index.mjs +20 -0
- package/dist/modules/poll/module.d.ts +12 -0
- package/dist/modules/poll/module.d.ts.map +1 -0
- package/dist/modules/poll/node.d.ts +3 -0
- package/dist/modules/poll/node.d.ts.map +1 -0
- package/dist/modules/poll/node.mjs +2 -0
- package/dist/modules/poll/renderer.d.ts +4 -0
- package/dist/modules/poll/renderer.d.ts.map +1 -0
- package/dist/modules/poll/renderer.mjs +5 -0
- package/dist/modules/ruby/index.d.ts +1 -1
- package/dist/modules/ruby/index.d.ts.map +1 -1
- package/dist/modules/ruby/module.d.ts.map +1 -1
- package/dist/modules/ruby/renderer.d.ts.map +1 -1
- package/dist/modules/video/index.d.ts +1 -1
- package/dist/modules/video/index.d.ts.map +1 -1
- package/dist/modules/video/module.d.ts.map +1 -1
- package/dist/modules/video/renderer.d.ts.map +1 -1
- package/dist/rich-compose.css +2 -0
- package/dist/static-renderer/RichRenderer.d.ts +3 -0
- package/dist/static-renderer/RichRenderer.d.ts.map +1 -0
- package/dist/static-renderer/components/HtmlComment.d.ts +6 -0
- package/dist/static-renderer/components/HtmlComment.d.ts.map +1 -0
- package/dist/static-renderer/engine/renderBuiltinNode.d.ts +3 -0
- package/dist/static-renderer/engine/renderBuiltinNode.d.ts.map +1 -0
- package/dist/static-renderer/engine/renderTextNode.d.ts +3 -0
- package/dist/static-renderer/engine/renderTextNode.d.ts.map +1 -0
- package/dist/static-renderer/index.d.ts +3 -0
- package/dist/static-renderer/index.d.ts.map +1 -0
- package/dist/static-renderer/preprocess/footnote.d.ts +7 -0
- package/dist/static-renderer/preprocess/footnote.d.ts.map +1 -0
- package/dist/static-renderer/table.css.d.ts +5 -0
- package/dist/static-renderer/table.css.d.ts.map +1 -0
- package/dist/static-renderer/types.d.ts +17 -0
- package/dist/static-renderer/types.d.ts.map +1 -0
- package/package.json +60 -36
package/README.md
CHANGED
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Compose primitives for haklex rich content renderers — Gundam-style assembly of Lexical nodes, sync/lazy renderers, and Provider stacks.
|
|
4
4
|
|
|
5
|
-
Status: experimental (`0.1.0`). The renderer side is being migrated from `@haklex/rich-kit-shiro/renderer`. The editor side is out of scope.
|
|
6
|
-
|
|
7
5
|
## Why
|
|
8
6
|
|
|
9
|
-
`@haklex/rich-kit-shiro/renderer`
|
|
7
|
+
The legacy `@haklex/rich-kit-shiro/renderer` (now removed) shipped every default renderer eagerly: even when a consumer overrode `CodeBlock` or `LinkCard`, the upstream `shiki` and `LinkCardRenderer` chains stayed in the production bundle. `rich-compose` solves three problems at once:
|
|
10
8
|
|
|
11
9
|
1. **Subtractable** — drop a module by not importing it.
|
|
12
10
|
2. **Replaceable** — swap a default renderer with no leftover bytes from the original.
|
|
@@ -22,12 +20,11 @@ pnpm add @haklex/rich-compose
|
|
|
22
20
|
|
|
23
21
|
## Peer Dependencies
|
|
24
22
|
|
|
25
|
-
| Package
|
|
26
|
-
|
|
|
27
|
-
| `react` / `react-dom`
|
|
23
|
+
| Package | Version |
|
|
24
|
+
| ---------------------------- | --------- |
|
|
25
|
+
| `react` / `react-dom` | `>=19` |
|
|
28
26
|
| `lexical` / `@lexical/react` | `^0.44.0` |
|
|
29
|
-
| `@haklex/rich-editor`
|
|
30
|
-
| `@haklex/rich-static-renderer` | workspace |
|
|
27
|
+
| `@haklex/rich-editor` | workspace |
|
|
31
28
|
|
|
32
29
|
Per-module upstream packages (`@haklex/rich-ext-*`, `@haklex/rich-renderer-*`) are optional peers — install only those you compose into your renderer.
|
|
33
30
|
|
|
@@ -57,7 +54,7 @@ const RichContent = composeRenderer({
|
|
|
57
54
|
Import the module sugar. Klass + renderer + (optional) lazy/SSR fallback are wired automatically.
|
|
58
55
|
|
|
59
56
|
```tsx
|
|
60
|
-
import { embedModule } from '@haklex/rich-compose/modules/embed'
|
|
57
|
+
import { embedModule } from '@haklex/rich-compose/modules/embed';
|
|
61
58
|
```
|
|
62
59
|
|
|
63
60
|
### Mode B — custom renderer (tree-shake the default)
|
|
@@ -65,13 +62,13 @@ import { embedModule } from '@haklex/rich-compose/modules/embed'
|
|
|
65
62
|
Import the Klass from the `/node` subpath; supply your own renderer. The default renderer's chunk never enters the bundle.
|
|
66
63
|
|
|
67
64
|
```tsx
|
|
68
|
-
import { GalleryNode } from '@haklex/rich-compose/modules/gallery/node'
|
|
65
|
+
import { GalleryNode } from '@haklex/rich-compose/modules/gallery/node';
|
|
69
66
|
|
|
70
67
|
const myGalleryModule: RichRendererModule = {
|
|
71
68
|
name: 'gallery',
|
|
72
69
|
nodes: [GalleryNode],
|
|
73
70
|
renderers: { Gallery: MyGalleryRenderer },
|
|
74
|
-
}
|
|
71
|
+
};
|
|
75
72
|
```
|
|
76
73
|
|
|
77
74
|
For modules with no custom Klass (most of the renderer-only modules), simply construct a module with the same `name` and your renderer:
|
|
@@ -80,7 +77,7 @@ For modules with no custom Klass (most of the renderer-only modules), simply con
|
|
|
80
77
|
const myLinkCardModule: RichRendererModule = {
|
|
81
78
|
name: 'link-card',
|
|
82
79
|
renderers: { LinkCard: MyLinkCardRenderer },
|
|
83
|
-
}
|
|
80
|
+
};
|
|
84
81
|
```
|
|
85
82
|
|
|
86
83
|
### Mode C — wrap the default
|
|
@@ -88,8 +85,8 @@ const myLinkCardModule: RichRendererModule = {
|
|
|
88
85
|
Pull the default renderer from `/renderer` and wrap it.
|
|
89
86
|
|
|
90
87
|
```tsx
|
|
91
|
-
import { LinkCardNode } from '@haklex/rich-compose/modules/link-card/node' // when applicable
|
|
92
|
-
import { LinkCardRenderer } from '@haklex/rich-compose/modules/link-card/renderer'
|
|
88
|
+
import { LinkCardNode } from '@haklex/rich-compose/modules/link-card/node'; // when applicable
|
|
89
|
+
import { LinkCardRenderer } from '@haklex/rich-compose/modules/link-card/renderer';
|
|
93
90
|
|
|
94
91
|
const wrappedModule: RichRendererModule = {
|
|
95
92
|
name: 'link-card',
|
|
@@ -100,21 +97,22 @@ const wrappedModule: RichRendererModule = {
|
|
|
100
97
|
</div>
|
|
101
98
|
),
|
|
102
99
|
},
|
|
103
|
-
}
|
|
100
|
+
};
|
|
104
101
|
```
|
|
105
102
|
|
|
106
103
|
## `RichRendererModule` shape
|
|
107
104
|
|
|
108
105
|
```ts
|
|
109
106
|
interface RichRendererModule {
|
|
110
|
-
name: string
|
|
111
|
-
nodes?: Klass<LexicalNode>[]
|
|
112
|
-
renderers?: Partial<RendererConfig
|
|
113
|
-
Provider?: ComponentType<{ children: ReactNode }
|
|
114
|
-
lazyRenderers?: Partial<{
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
107
|
+
name: string; // dedup key
|
|
108
|
+
nodes?: Klass<LexicalNode>[]; // optional — omit for builtin types
|
|
109
|
+
renderers?: Partial<RendererConfig>; // sync renderer map
|
|
110
|
+
Provider?: ComponentType<{ children: ReactNode }>; // optional internal provider
|
|
111
|
+
lazyRenderers?: Partial<{
|
|
112
|
+
// code-split renderers
|
|
113
|
+
[K in RendererKey]: () => Promise<{ default: NonNullable<RendererConfig[K]> }>;
|
|
114
|
+
}>;
|
|
115
|
+
ssrFallback?: Partial<Record<RendererKey, ReactNode>>; // deterministic fallback
|
|
118
116
|
}
|
|
119
117
|
```
|
|
120
118
|
|
|
@@ -128,9 +126,11 @@ To override a lazy renderer (e.g., for a sync, pre-tokenized code block on SSR),
|
|
|
128
126
|
|
|
129
127
|
```ts
|
|
130
128
|
composeRenderer({
|
|
131
|
-
modules: [
|
|
129
|
+
modules: [
|
|
130
|
+
/* ... */
|
|
131
|
+
],
|
|
132
132
|
overrides: { CodeBlock: PreTokenizedCodeBlock },
|
|
133
|
-
})
|
|
133
|
+
});
|
|
134
134
|
```
|
|
135
135
|
|
|
136
136
|
The lazy chunk is still emitted but never fetched at runtime.
|
|
@@ -151,44 +151,46 @@ nodes:
|
|
|
151
151
|
|
|
152
152
|
## Module catalog
|
|
153
153
|
|
|
154
|
-
| Module
|
|
155
|
-
|
|
|
156
|
-
| `alert`
|
|
157
|
-
| `banner`
|
|
158
|
-
| `chat`
|
|
159
|
-
| `code-block`
|
|
160
|
-
| `code-snippet` | `CodeSnippetNode` | sync
|
|
161
|
-
| `embed`
|
|
162
|
-
| `excalidraw`
|
|
163
|
-
| `gallery`
|
|
164
|
-
| `image`
|
|
165
|
-
| `link-card`
|
|
166
|
-
| `mention`
|
|
167
|
-
| `mermaid`
|
|
168
|
-
| `nested-doc`
|
|
169
|
-
| `ruby`
|
|
170
|
-
| `video`
|
|
154
|
+
| Module | Klass | Renderer mode | Source |
|
|
155
|
+
| -------------- | ----------------- | ------------------------------- | ------------------------- |
|
|
156
|
+
| `alert` | builtin | sync | `rich-renderer-alert` |
|
|
157
|
+
| `banner` | builtin | sync | `rich-renderer-banner` |
|
|
158
|
+
| `chat` | `ChatNode` | sync | `rich-ext-chat` |
|
|
159
|
+
| `code-block` | builtin | lazy + ssr fallback | `rich-renderer-codeblock` |
|
|
160
|
+
| `code-snippet` | `CodeSnippetNode` | sync | `rich-ext-code-snippet` |
|
|
161
|
+
| `embed` | `EmbedNode` | sync (via node decorate) | `rich-ext-embed` |
|
|
162
|
+
| `excalidraw` | `ExcalidrawNode` | via node decorate | `rich-ext-excalidraw` |
|
|
163
|
+
| `gallery` | `GalleryNode` | sync | `rich-ext-gallery` |
|
|
164
|
+
| `image` | builtin | sync | `rich-renderer-image` |
|
|
165
|
+
| `link-card` | builtin | sync | `rich-renderer-linkcard` |
|
|
166
|
+
| `mention` | builtin | sync | `rich-renderer-mention` |
|
|
167
|
+
| `mermaid` | builtin | lazy + ssr fallback | `rich-renderer-mermaid` |
|
|
168
|
+
| `nested-doc` | `NestedDocNode` | recursive (via composeRenderer) | `rich-ext-nested-doc` |
|
|
169
|
+
| `ruby` | builtin | sync | `rich-renderer-ruby` |
|
|
170
|
+
| `video` | builtin | sync | `rich-renderer-video` |
|
|
171
171
|
|
|
172
172
|
Not shipped (handled by `@haklex/rich-editor`'s default renderers via Klass `decorate()`): `katex`, `poll`, `tag`, `footnote`. To override these, pass `overrides` to `composeRenderer`:
|
|
173
173
|
|
|
174
174
|
```ts
|
|
175
175
|
composeRenderer({
|
|
176
|
-
modules: [
|
|
176
|
+
modules: [
|
|
177
|
+
/* ... */
|
|
178
|
+
],
|
|
177
179
|
overrides: { KaTeX: MyKaTeXRenderer, Poll: MyPollRenderer },
|
|
178
|
-
})
|
|
180
|
+
});
|
|
179
181
|
```
|
|
180
182
|
|
|
181
183
|
> **Note**: `@haklex/rich-editor` registers a wide set of custom Klasses in `customNodes` (LinkCard, Mention, Image, Video, KaTeX, Mermaid, Alert, Banner, Ruby, Tag, Poll, CodeBlock, Footnote, etc.). Modules for these contribute only renderer mappings — there is no Klass to register, hence no `node.ts` and no `/node` subpath.
|
|
182
184
|
|
|
183
185
|
## Sub-path exports
|
|
184
186
|
|
|
185
|
-
| Path
|
|
186
|
-
|
|
|
187
|
-
| `@haklex/rich-compose`
|
|
188
|
-
| `@haklex/rich-compose/modules/<name>`
|
|
189
|
-
| `@haklex/rich-compose/modules/<name>/node`
|
|
190
|
-
| `@haklex/rich-compose/modules/<name>/renderer` | default renderer only
|
|
191
|
-
| `@haklex/rich-compose/style.css`
|
|
187
|
+
| Path | Description |
|
|
188
|
+
| ---------------------------------------------- | --------------------------------------- |
|
|
189
|
+
| `@haklex/rich-compose` | core: `composeRenderer`, types, helpers |
|
|
190
|
+
| `@haklex/rich-compose/modules/<name>` | full module barrel |
|
|
191
|
+
| `@haklex/rich-compose/modules/<name>/node` | Klass(es) only (when applicable) |
|
|
192
|
+
| `@haklex/rich-compose/modules/<name>/renderer` | default renderer only |
|
|
193
|
+
| `@haklex/rich-compose/style.css` | core styles (skeletons, layout shell) |
|
|
192
194
|
|
|
193
195
|
## Part of Haklex
|
|
194
196
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/core/compose.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/core/compose.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAA+C,MAAM,OAAO,CAAC;AAKxF,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAsB,MAAM,SAAS,CAAC;AAkCjG,wBAAgB,eAAe,CAC7B,IAAI,EAAE,sBAAsB,GAC3B,aAAa,CAAC,qBAAqB,CAAC,CA4CtC"}
|
package/dist/core/dedup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/core/dedup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../../src/core/dedup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,kBAAkB,EAAE,GAAG,SAAS,EACxC,OAAO,EAAE,kBAAkB,EAAE,GAAG,SAAS,GACxC,kBAAkB,EAAE,CA0BtB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,CAyB5E"}
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
package/dist/core/lazy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/core/lazy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"lazy.d.ts","sourceRoot":"","sources":["../../src/core/lazy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI1D,OAAO,KAAK,EAAe,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAsB/E"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { RendererConfig, RichEditorVariant } from '@haklex/rich-editor';
|
|
2
|
-
import { BuiltinNodeRenderer } from '@haklex/rich-static-renderer';
|
|
3
2
|
import { Klass, LexicalNode, SerializedEditorState } from 'lexical';
|
|
4
3
|
import { ComponentType, CSSProperties, ReactNode } from 'react';
|
|
4
|
+
import { BuiltinNodeRenderer } from '../static-renderer/types';
|
|
5
5
|
export type RendererKey = keyof RendererConfig;
|
|
6
6
|
export interface RichRendererModule {
|
|
7
|
+
/**
|
|
8
|
+
* Lazy renderers. Each loader returns the renderer component as default
|
|
9
|
+
* export. composeRenderer wraps each in `React.lazy` (factory created
|
|
10
|
+
* once at compose time) + `<Suspense fallback={ssrFallback?.[type]}>`.
|
|
11
|
+
*/
|
|
12
|
+
lazyRenderers?: Partial<{
|
|
13
|
+
[K in RendererKey]: () => Promise<{
|
|
14
|
+
default: NonNullable<RendererConfig[K]>;
|
|
15
|
+
}>;
|
|
16
|
+
}>;
|
|
7
17
|
/** Stable identifier; used for dedup, debug logs, and Provider DevTools naming. */
|
|
8
18
|
name: string;
|
|
9
19
|
/**
|
|
@@ -12,8 +22,6 @@ export interface RichRendererModule {
|
|
|
12
22
|
* composeRenderer treats missing `nodes` as `[]`.
|
|
13
23
|
*/
|
|
14
24
|
nodes?: Klass<LexicalNode>[];
|
|
15
|
-
/** type → Component map. Sync renderers. */
|
|
16
|
-
renderers?: Partial<RendererConfig>;
|
|
17
25
|
/**
|
|
18
26
|
* Optional context provider. composeRenderer stacks Providers in module
|
|
19
27
|
* order outside `<RichRenderer>`. Module Providers are for internal
|
|
@@ -23,16 +31,8 @@ export interface RichRendererModule {
|
|
|
23
31
|
Provider?: ComponentType<{
|
|
24
32
|
children: ReactNode;
|
|
25
33
|
}>;
|
|
26
|
-
/**
|
|
27
|
-
|
|
28
|
-
* export. composeRenderer wraps each in `React.lazy` (factory created
|
|
29
|
-
* once at compose time) + `<Suspense fallback={ssrFallback?.[type]}>`.
|
|
30
|
-
*/
|
|
31
|
-
lazyRenderers?: Partial<{
|
|
32
|
-
[K in RendererKey]: () => Promise<{
|
|
33
|
-
default: NonNullable<RendererConfig[K]>;
|
|
34
|
-
}>;
|
|
35
|
-
}>;
|
|
34
|
+
/** type → Component map. Sync renderers. */
|
|
35
|
+
renderers?: Partial<RendererConfig>;
|
|
36
36
|
/**
|
|
37
37
|
* SSR / Suspense fallback. Must be deterministic — no Date.now, no random,
|
|
38
38
|
* no client-only API access. Renders identically server-side and during
|
|
@@ -41,22 +41,22 @@ export interface RichRendererModule {
|
|
|
41
41
|
ssrFallback?: Partial<Record<RendererKey, ReactNode>>;
|
|
42
42
|
}
|
|
43
43
|
export interface ComposeRendererOptions {
|
|
44
|
-
/**
|
|
45
|
-
|
|
44
|
+
/** Pass-through to `<RichRenderer>` for `paragraph` / `link` / `autolink` etc. */
|
|
45
|
+
builtinNodeOverrides?: Record<string, BuiltinNodeRenderer>;
|
|
46
46
|
/** Appended to preset; later modules override earlier on `name` collision. */
|
|
47
47
|
modules?: RichRendererModule[];
|
|
48
48
|
/** Final renderer overrides; takes precedence over module-supplied renderers. */
|
|
49
49
|
overrides?: Partial<RendererConfig>;
|
|
50
|
-
/**
|
|
51
|
-
|
|
50
|
+
/** Starting set; can be `shiroPreset`, custom array, or omitted. */
|
|
51
|
+
preset?: RichRendererModule[];
|
|
52
52
|
}
|
|
53
53
|
export interface RichRendererBaseProps {
|
|
54
|
-
|
|
55
|
-
variant?: RichEditorVariant;
|
|
56
|
-
theme?: 'light' | 'dark';
|
|
54
|
+
as?: keyof React.JSX.IntrinsicElements;
|
|
57
55
|
className?: string;
|
|
58
|
-
style?: CSSProperties;
|
|
59
56
|
nested?: boolean;
|
|
60
|
-
|
|
57
|
+
style?: CSSProperties;
|
|
58
|
+
theme?: 'light' | 'dark';
|
|
59
|
+
value: SerializedEditorState;
|
|
60
|
+
variant?: RichEditorVariant;
|
|
61
61
|
}
|
|
62
62
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAErE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;SACrB,CAAC,IAAI,WAAW,GAAG,MAAM,OAAO,CAAC;YAAE,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;SAAE,CAAC;KAC/E,CAAC,CAAC;IAEH,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;IAE7B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAElD,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAEpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,sBAAsB;IACrC,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC3D,8EAA8E;IAC9E,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACpC,oEAAoE;IACpE,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export { composeRenderer, dedupNodes, mergeModules, wrapLazy, } from './core';
|
|
2
1
|
export type { ComposeRendererOptions, RendererKey, RichRendererBaseProps, RichRendererModule, } from './core';
|
|
2
|
+
export { composeRenderer, dedupNodes, mergeModules, wrapLazy } from './core';
|
|
3
|
+
export type { BuiltinNodeRenderer, RichRendererProps } from './static-renderer';
|
|
4
|
+
export { RichRenderer } from './static-renderer';
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC7E,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|