@haklex/rich-compose 0.1.0 → 0.2.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.
Files changed (76) hide show
  1. package/README.md +22 -8
  2. package/dist/modules/alert/index.d.ts +3 -0
  3. package/dist/modules/alert/index.d.ts.map +1 -0
  4. package/dist/modules/alert/index.mjs +9 -0
  5. package/dist/modules/alert/module.d.ts +3 -0
  6. package/dist/modules/alert/module.d.ts.map +1 -0
  7. package/dist/modules/alert/renderer.d.ts +4 -0
  8. package/dist/modules/alert/renderer.d.ts.map +1 -0
  9. package/dist/modules/alert/renderer.mjs +5 -0
  10. package/dist/modules/banner/index.d.ts +3 -0
  11. package/dist/modules/banner/index.d.ts.map +1 -0
  12. package/dist/modules/banner/index.mjs +9 -0
  13. package/dist/modules/banner/module.d.ts +3 -0
  14. package/dist/modules/banner/module.d.ts.map +1 -0
  15. package/dist/modules/banner/renderer.d.ts +4 -0
  16. package/dist/modules/banner/renderer.d.ts.map +1 -0
  17. package/dist/modules/banner/renderer.mjs +5 -0
  18. package/dist/modules/excalidraw/index.d.ts +5 -0
  19. package/dist/modules/excalidraw/index.d.ts.map +1 -0
  20. package/dist/modules/excalidraw/index.mjs +18 -0
  21. package/dist/modules/excalidraw/module.d.ts +12 -0
  22. package/dist/modules/excalidraw/module.d.ts.map +1 -0
  23. package/dist/modules/excalidraw/node.d.ts +6 -0
  24. package/dist/modules/excalidraw/node.d.ts.map +1 -0
  25. package/dist/modules/excalidraw/node.mjs +5 -0
  26. package/dist/modules/image/index.d.ts +3 -0
  27. package/dist/modules/image/index.d.ts.map +1 -0
  28. package/dist/modules/image/index.mjs +9 -0
  29. package/dist/modules/image/module.d.ts +3 -0
  30. package/dist/modules/image/module.d.ts.map +1 -0
  31. package/dist/modules/image/renderer.d.ts +4 -0
  32. package/dist/modules/image/renderer.d.ts.map +1 -0
  33. package/dist/modules/image/renderer.mjs +5 -0
  34. package/dist/modules/mention/index.d.ts +5 -0
  35. package/dist/modules/mention/index.d.ts.map +1 -0
  36. package/dist/modules/mention/index.mjs +9 -0
  37. package/dist/modules/mention/module.d.ts +3 -0
  38. package/dist/modules/mention/module.d.ts.map +1 -0
  39. package/dist/modules/mention/renderer.d.ts +4 -0
  40. package/dist/modules/mention/renderer.d.ts.map +1 -0
  41. package/dist/modules/mention/renderer.mjs +5 -0
  42. package/dist/modules/mermaid/index.d.ts +3 -0
  43. package/dist/modules/mermaid/index.d.ts.map +1 -0
  44. package/dist/modules/mermaid/index.mjs +33 -0
  45. package/dist/modules/mermaid/module.d.ts +9 -0
  46. package/dist/modules/mermaid/module.d.ts.map +1 -0
  47. package/dist/modules/mermaid/renderer.d.ts +4 -0
  48. package/dist/modules/mermaid/renderer.d.ts.map +1 -0
  49. package/dist/modules/mermaid/renderer.mjs +5 -0
  50. package/dist/modules/mermaid/ssr-fallback.d.ts +11 -0
  51. package/dist/modules/mermaid/ssr-fallback.d.ts.map +1 -0
  52. package/dist/modules/nested-doc/index.d.ts +3 -0
  53. package/dist/modules/nested-doc/index.d.ts.map +1 -0
  54. package/dist/modules/nested-doc/index.mjs +15 -0
  55. package/dist/modules/nested-doc/module.d.ts +10 -0
  56. package/dist/modules/nested-doc/module.d.ts.map +1 -0
  57. package/dist/modules/nested-doc/node.d.ts +3 -0
  58. package/dist/modules/nested-doc/node.d.ts.map +1 -0
  59. package/dist/modules/nested-doc/node.mjs +2 -0
  60. package/dist/modules/ruby/index.d.ts +3 -0
  61. package/dist/modules/ruby/index.d.ts.map +1 -0
  62. package/dist/modules/ruby/index.mjs +9 -0
  63. package/dist/modules/ruby/module.d.ts +3 -0
  64. package/dist/modules/ruby/module.d.ts.map +1 -0
  65. package/dist/modules/ruby/renderer.d.ts +4 -0
  66. package/dist/modules/ruby/renderer.d.ts.map +1 -0
  67. package/dist/modules/ruby/renderer.mjs +5 -0
  68. package/dist/modules/video/index.d.ts +3 -0
  69. package/dist/modules/video/index.d.ts.map +1 -0
  70. package/dist/modules/video/index.mjs +9 -0
  71. package/dist/modules/video/module.d.ts +3 -0
  72. package/dist/modules/video/module.d.ts.map +1 -0
  73. package/dist/modules/video/renderer.d.ts +4 -0
  74. package/dist/modules/video/renderer.d.ts.map +1 -0
  75. package/dist/modules/video/renderer.mjs +5 -0
  76. package/package.json +125 -8
package/README.md CHANGED
@@ -122,7 +122,7 @@ interface RichRendererModule {
122
122
 
123
123
  ## Lazy modules
124
124
 
125
- `code-block`, `excalidraw`, `katex`, and `mermaid` ship lazy by default. Each provides an `ssrFallback` that renders deterministically server-side and during hydration to avoid mismatches.
125
+ `code-block` and `mermaid` ship lazy by default with deterministic `ssrFallback`s. The `excalidraw` Klass renders through its own upstream `decorate()` which code-splits internally.
126
126
 
127
127
  To override a lazy renderer (e.g., for a sync, pre-tokenized code block on SSR), pass an entry in `overrides`:
128
128
 
@@ -151,18 +151,32 @@ nodes:
151
151
 
152
152
  ## Module catalog
153
153
 
154
- Implemented:
155
-
156
154
  | Module | Klass | Renderer mode | Source |
157
155
  | --- | --- | --- | --- |
158
- | `embed` | `EmbedNode` | sync (via node decorate) | `rich-ext-embed` |
159
- | `link-card` | builtin | sync | `rich-renderer-linkcard` |
160
- | `gallery` | `GalleryNode` | sync | `rich-ext-gallery` |
161
- | `code-snippet` | `CodeSnippetNode` | sync | `rich-ext-code-snippet` |
156
+ | `alert` | builtin | sync | `rich-renderer-alert` |
157
+ | `banner` | builtin | sync | `rich-renderer-banner` |
162
158
  | `chat` | `ChatNode` | sync | `rich-ext-chat` |
163
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
+
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`:
164
173
 
165
- Planned (not yet shipped): `excalidraw`, `nested-doc`, `katex`, `mermaid`, `mention`, `poll`, `video`, `ruby`, `alert`, `banner`, `image`. See `docs/superpowers/specs/2026-05-08-rich-compose-design.md` for the full catalog and migration plan.
174
+ ```ts
175
+ composeRenderer({
176
+ modules: [/* ... */],
177
+ overrides: { KaTeX: MyKaTeXRenderer, Poll: MyPollRenderer },
178
+ })
179
+ ```
166
180
 
167
181
  > **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.
168
182
 
@@ -0,0 +1,3 @@
1
+ export { AlertRenderer } from './renderer';
2
+ export { alertModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { AlertRenderer } from "./renderer.mjs";
2
+ import { AlertRenderer as AlertRenderer$1 } from "@haklex/rich-renderer-alert/static";
3
+ //#region src/modules/alert/module.ts
4
+ var alertModule = {
5
+ name: "alert",
6
+ renderers: { Alert: AlertRenderer$1 }
7
+ };
8
+ //#endregion
9
+ export { AlertRenderer, alertModule };
@@ -0,0 +1,3 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ export declare const alertModule: RichRendererModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/alert/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,eAAO,MAAM,WAAW,EAAE,kBAGzB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { AlertRenderer } from '@haklex/rich-renderer-alert/static';
2
+ export { AlertRenderer };
3
+ export default AlertRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/alert/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,eAAe,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { AlertRenderer } from "@haklex/rich-renderer-alert/static";
2
+ //#region src/modules/alert/renderer.tsx
3
+ var renderer_default = AlertRenderer;
4
+ //#endregion
5
+ export { AlertRenderer, renderer_default as default };
@@ -0,0 +1,3 @@
1
+ export { BannerRenderer } from './renderer';
2
+ export { bannerModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/banner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { BannerRenderer } from "./renderer.mjs";
2
+ import { BannerRenderer as BannerRenderer$1 } from "@haklex/rich-renderer-banner/static";
3
+ //#region src/modules/banner/module.ts
4
+ var bannerModule = {
5
+ name: "banner",
6
+ renderers: { Banner: BannerRenderer$1 }
7
+ };
8
+ //#endregion
9
+ export { BannerRenderer, bannerModule };
@@ -0,0 +1,3 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ export declare const bannerModule: RichRendererModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/banner/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,eAAO,MAAM,YAAY,EAAE,kBAG1B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { BannerRenderer } from '@haklex/rich-renderer-banner/static';
2
+ export { BannerRenderer };
3
+ export default BannerRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/banner/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAEpE,OAAO,EAAE,cAAc,EAAE,CAAA;AACzB,eAAe,cAAc,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { BannerRenderer } from "@haklex/rich-renderer-banner/static";
2
+ //#region src/modules/banner/renderer.tsx
3
+ var renderer_default = BannerRenderer;
4
+ //#endregion
5
+ export { BannerRenderer, renderer_default as default };
@@ -0,0 +1,5 @@
1
+ export type { SerializedExcalidrawNode } from '@haklex/rich-ext-excalidraw/static';
2
+ export { ExcalidrawConfigProvider, ExcalidrawDisplayRenderer, useExcalidrawConfig, } from '@haklex/rich-ext-excalidraw/static';
3
+ export { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawNode, excalidrawNodes, } from './node';
4
+ export { excalidrawModule } from './module';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/excalidraw/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAClF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawNode, excalidrawNodes } from "./node.mjs";
2
+ import { ExcalidrawConfigProvider, ExcalidrawDisplayRenderer, useExcalidrawConfig } from "@haklex/rich-ext-excalidraw/static";
3
+ //#region src/modules/excalidraw/module.ts
4
+ /**
5
+ * Excalidraw module — registers `ExcalidrawNode`. There is no
6
+ * `Excalidraw` slot in `RendererConfig`; the Klass's `decorate()` handles
7
+ * its own rendering (and the upstream renderer code-splits internally).
8
+ *
9
+ * Consumers wrapping `ExcalidrawConfigProvider` or replacing the display
10
+ * renderer do so via upstream APIs (`@haklex/rich-ext-excalidraw/static`)
11
+ * rather than through `composeRenderer`.
12
+ */
13
+ var excalidrawModule = {
14
+ name: "excalidraw",
15
+ nodes: excalidrawNodes
16
+ };
17
+ //#endregion
18
+ export { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawConfigProvider, ExcalidrawDisplayRenderer, ExcalidrawNode, excalidrawModule, excalidrawNodes, useExcalidrawConfig };
@@ -0,0 +1,12 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ /**
3
+ * Excalidraw module — registers `ExcalidrawNode`. There is no
4
+ * `Excalidraw` slot in `RendererConfig`; the Klass's `decorate()` handles
5
+ * its own rendering (and the upstream renderer code-splits internally).
6
+ *
7
+ * Consumers wrapping `ExcalidrawConfigProvider` or replacing the display
8
+ * renderer do so via upstream APIs (`@haklex/rich-ext-excalidraw/static`)
9
+ * rather than through `composeRenderer`.
10
+ */
11
+ export declare const excalidrawModule: RichRendererModule;
12
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/excalidraw/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG1D;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,EAAE,kBAG9B,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Klass, LexicalNode } from 'lexical';
2
+ import { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawNode } from '@haklex/rich-ext-excalidraw/static';
3
+ export type { SerializedExcalidrawNode } from '@haklex/rich-ext-excalidraw/static';
4
+ export { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawNode, };
5
+ export declare const excalidrawNodes: Array<Klass<LexicalNode>>;
6
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/modules/excalidraw/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACf,MAAM,oCAAoC,CAAA;AAE3C,YAAY,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAClF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,GACf,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAoB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawNode } from "@haklex/rich-ext-excalidraw/static";
2
+ //#region src/modules/excalidraw/node.ts
3
+ var excalidrawNodes = [ExcalidrawNode];
4
+ //#endregion
5
+ export { $createExcalidrawNode, $isExcalidrawNode, ExcalidrawNode, excalidrawNodes };
@@ -0,0 +1,3 @@
1
+ export { ImageRenderer } from './renderer';
2
+ export { imageModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { ImageRenderer } from "./renderer.mjs";
2
+ import { ImageRenderer as ImageRenderer$1 } from "@haklex/rich-renderer-image/static";
3
+ //#region src/modules/image/module.ts
4
+ var imageModule = {
5
+ name: "image",
6
+ renderers: { Image: ImageRenderer$1 }
7
+ };
8
+ //#endregion
9
+ export { ImageRenderer, imageModule };
@@ -0,0 +1,3 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ export declare const imageModule: RichRendererModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/image/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,eAAO,MAAM,WAAW,EAAE,kBAGzB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { ImageRenderer } from '@haklex/rich-renderer-image/static';
2
+ export { ImageRenderer };
3
+ export default ImageRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/image/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,eAAe,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { ImageRenderer } from "@haklex/rich-renderer-image/static";
2
+ //#region src/modules/image/renderer.tsx
3
+ var renderer_default = ImageRenderer;
4
+ //#endregion
5
+ export { ImageRenderer, renderer_default as default };
@@ -0,0 +1,5 @@
1
+ export type { MentionPlatformMeta } from '@haklex/rich-renderer-mention/static';
2
+ export { MentionPlatformProvider } from '@haklex/rich-renderer-mention/static';
3
+ export { MentionRenderer } from './renderer';
4
+ export { mentionModule } from './module';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/mention/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { MentionRenderer } from "./renderer.mjs";
2
+ import { MentionPlatformProvider, MentionRenderer as MentionRenderer$1 } from "@haklex/rich-renderer-mention/static";
3
+ //#region src/modules/mention/module.ts
4
+ var mentionModule = {
5
+ name: "mention",
6
+ renderers: { Mention: MentionRenderer$1 }
7
+ };
8
+ //#endregion
9
+ export { MentionPlatformProvider, MentionRenderer, mentionModule };
@@ -0,0 +1,3 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ export declare const mentionModule: RichRendererModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/mention/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { MentionRenderer } from '@haklex/rich-renderer-mention/static';
2
+ export { MentionRenderer };
3
+ export default MentionRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/mention/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,CAAA;AAC1B,eAAe,eAAe,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { MentionRenderer } from "@haklex/rich-renderer-mention/static";
2
+ //#region src/modules/mention/renderer.tsx
3
+ var renderer_default = MentionRenderer;
4
+ //#endregion
5
+ export { MentionRenderer, renderer_default as default };
@@ -0,0 +1,3 @@
1
+ export { MermaidRenderer } from './renderer';
2
+ export { mermaidModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/mermaid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { MermaidRenderer } from "./renderer.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/modules/mermaid/ssr-fallback.tsx
4
+ /**
5
+ * SSR / Suspense fallback for the lazy Mermaid renderer.
6
+ *
7
+ * Determinism requirement: identical output server-side and client-side
8
+ * to avoid hydration mismatches. No Date, no random, no client-only API.
9
+ *
10
+ * Renders an empty placeholder shell sized via CSS so layout stays stable
11
+ * before mermaid's heavy chunk resolves and replaces it.
12
+ */
13
+ function MermaidSsrFallback() {
14
+ return /* @__PURE__ */ jsx("div", {
15
+ className: "rich-mermaid-skeleton",
16
+ "data-rich-skeleton": "mermaid"
17
+ });
18
+ }
19
+ //#endregion
20
+ //#region src/modules/mermaid/module.tsx
21
+ /**
22
+ * Mermaid module — `MermaidNode` is registered by `@haklex/rich-editor`
23
+ * (in `customNodes`/`allNodes`). The default renderer
24
+ * (`@haklex/rich-renderer-mermaid`) pulls mermaid lib (~2MB), so it ships
25
+ * as a separate lazy chunk with a deterministic SSR fallback.
26
+ */
27
+ var mermaidModule = {
28
+ name: "mermaid",
29
+ lazyRenderers: { Mermaid: () => import("./renderer.mjs") },
30
+ ssrFallback: { Mermaid: /* @__PURE__ */ jsx(MermaidSsrFallback, {}) }
31
+ };
32
+ //#endregion
33
+ export { MermaidRenderer, mermaidModule };
@@ -0,0 +1,9 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ /**
3
+ * Mermaid module — `MermaidNode` is registered by `@haklex/rich-editor`
4
+ * (in `customNodes`/`allNodes`). The default renderer
5
+ * (`@haklex/rich-renderer-mermaid`) pulls mermaid lib (~2MB), so it ships
6
+ * as a separate lazy chunk with a deterministic SSR fallback.
7
+ */
8
+ export declare const mermaidModule: RichRendererModule;
9
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/mermaid/module.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG1D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,kBAQ3B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { MermaidRenderer } from '@haklex/rich-renderer-mermaid/static';
2
+ export { MermaidRenderer };
3
+ export default MermaidRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/mermaid/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAA;AAEtE,OAAO,EAAE,eAAe,EAAE,CAAA;AAC1B,eAAe,eAAe,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { MermaidRenderer } from "@haklex/rich-renderer-mermaid/static";
2
+ //#region src/modules/mermaid/renderer.tsx
3
+ var renderer_default = MermaidRenderer;
4
+ //#endregion
5
+ export { MermaidRenderer, renderer_default as default };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SSR / Suspense fallback for the lazy Mermaid renderer.
3
+ *
4
+ * Determinism requirement: identical output server-side and client-side
5
+ * to avoid hydration mismatches. No Date, no random, no client-only API.
6
+ *
7
+ * Renders an empty placeholder shell sized via CSS so layout stays stable
8
+ * before mermaid's heavy chunk resolves and replaces it.
9
+ */
10
+ export declare function MermaidSsrFallback(): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=ssr-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr-fallback.d.ts","sourceRoot":"","sources":["../../../src/modules/mermaid/ssr-fallback.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,4CAOjC"}
@@ -0,0 +1,3 @@
1
+ export { $createNestedDocNode, $isNestedDocNode, NestedDocNode, nestedDocNodes, } from './node';
2
+ export { nestedDocModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/nested-doc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { $createNestedDocNode, $isNestedDocNode, NestedDocNode, nestedDocNodes } from "./node.mjs";
2
+ //#region src/modules/nested-doc/module.ts
3
+ /**
4
+ * Nested-doc module — registers `NestedDocNode`. There is no
5
+ * `NestedDoc` slot in `RendererConfig`; the Klass's `decorate()` consumes
6
+ * the `NestedContentRendererProvider` (composeRenderer always wires this
7
+ * to a recursive closure) so nested editor states render through the
8
+ * same composition.
9
+ */
10
+ var nestedDocModule = {
11
+ name: "nested-doc",
12
+ nodes: nestedDocNodes
13
+ };
14
+ //#endregion
15
+ export { $createNestedDocNode, $isNestedDocNode, NestedDocNode, nestedDocModule, nestedDocNodes };
@@ -0,0 +1,10 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ /**
3
+ * Nested-doc module — registers `NestedDocNode`. There is no
4
+ * `NestedDoc` slot in `RendererConfig`; the Klass's `decorate()` consumes
5
+ * the `NestedContentRendererProvider` (composeRenderer always wires this
6
+ * to a recursive closure) so nested editor states render through the
7
+ * same composition.
8
+ */
9
+ export declare const nestedDocModule: RichRendererModule;
10
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/nested-doc/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG1D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,kBAG7B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export type { SerializedNestedDocNode } from '@haklex/rich-ext-nested-doc/static';
2
+ export { $createNestedDocNode, $isNestedDocNode, NestedDocNode, nestedDocNodes, } from '@haklex/rich-ext-nested-doc/static';
3
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/modules/nested-doc/node.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,oCAAoC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { $createNestedDocNode, $isNestedDocNode, NestedDocNode, nestedDocNodes } from "@haklex/rich-ext-nested-doc/static";
2
+ export { $createNestedDocNode, $isNestedDocNode, NestedDocNode, nestedDocNodes };
@@ -0,0 +1,3 @@
1
+ export { RubyRenderer } from './renderer';
2
+ export { rubyModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/ruby/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { RubyRenderer } from "./renderer.mjs";
2
+ import { RubyRenderer as RubyRenderer$1 } from "@haklex/rich-renderer-ruby/static";
3
+ //#region src/modules/ruby/module.ts
4
+ var rubyModule = {
5
+ name: "ruby",
6
+ renderers: { Ruby: RubyRenderer$1 }
7
+ };
8
+ //#endregion
9
+ export { RubyRenderer, rubyModule };
@@ -0,0 +1,3 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ export declare const rubyModule: RichRendererModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/ruby/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,eAAO,MAAM,UAAU,EAAE,kBAGxB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { RubyRenderer } from '@haklex/rich-renderer-ruby/static';
2
+ export { RubyRenderer };
3
+ export default RubyRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/ruby/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,CAAA;AACvB,eAAe,YAAY,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { RubyRenderer } from "@haklex/rich-renderer-ruby/static";
2
+ //#region src/modules/ruby/renderer.tsx
3
+ var renderer_default = RubyRenderer;
4
+ //#endregion
5
+ export { RubyRenderer, renderer_default as default };
@@ -0,0 +1,3 @@
1
+ export { VideoRenderer } from './renderer';
2
+ export { videoModule } from './module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/video/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { VideoRenderer } from "./renderer.mjs";
2
+ import { VideoRenderer as VideoRenderer$1 } from "@haklex/rich-renderer-video/static";
3
+ //#region src/modules/video/module.ts
4
+ var videoModule = {
5
+ name: "video",
6
+ renderers: { Video: VideoRenderer$1 }
7
+ };
8
+ //#endregion
9
+ export { VideoRenderer, videoModule };
@@ -0,0 +1,3 @@
1
+ import { RichRendererModule } from '../../core/types';
2
+ export declare const videoModule: RichRendererModule;
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/video/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,eAAO,MAAM,WAAW,EAAE,kBAGzB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { VideoRenderer } from '@haklex/rich-renderer-video/static';
2
+ export { VideoRenderer };
3
+ export default VideoRenderer;
4
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/modules/video/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,eAAe,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { VideoRenderer } from "@haklex/rich-renderer-video/static";
2
+ //#region src/modules/video/renderer.tsx
3
+ var renderer_default = VideoRenderer;
4
+ //#endregion
5
+ export { VideoRenderer, renderer_default as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haklex/rich-compose",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Compose primitives for haklex rich content renderers — Gundam-style assembly of Lexical nodes, sync/lazy renderers, and Provider stacks.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -77,6 +77,78 @@
77
77
  "import": "./dist/modules/chat/renderer.mjs",
78
78
  "types": "./dist/modules/chat/renderer.d.ts"
79
79
  },
80
+ "./modules/alert": {
81
+ "import": "./dist/modules/alert/index.mjs",
82
+ "types": "./dist/modules/alert/index.d.ts"
83
+ },
84
+ "./modules/alert/renderer": {
85
+ "import": "./dist/modules/alert/renderer.mjs",
86
+ "types": "./dist/modules/alert/renderer.d.ts"
87
+ },
88
+ "./modules/banner": {
89
+ "import": "./dist/modules/banner/index.mjs",
90
+ "types": "./dist/modules/banner/index.d.ts"
91
+ },
92
+ "./modules/banner/renderer": {
93
+ "import": "./dist/modules/banner/renderer.mjs",
94
+ "types": "./dist/modules/banner/renderer.d.ts"
95
+ },
96
+ "./modules/image": {
97
+ "import": "./dist/modules/image/index.mjs",
98
+ "types": "./dist/modules/image/index.d.ts"
99
+ },
100
+ "./modules/image/renderer": {
101
+ "import": "./dist/modules/image/renderer.mjs",
102
+ "types": "./dist/modules/image/renderer.d.ts"
103
+ },
104
+ "./modules/mention": {
105
+ "import": "./dist/modules/mention/index.mjs",
106
+ "types": "./dist/modules/mention/index.d.ts"
107
+ },
108
+ "./modules/mention/renderer": {
109
+ "import": "./dist/modules/mention/renderer.mjs",
110
+ "types": "./dist/modules/mention/renderer.d.ts"
111
+ },
112
+ "./modules/ruby": {
113
+ "import": "./dist/modules/ruby/index.mjs",
114
+ "types": "./dist/modules/ruby/index.d.ts"
115
+ },
116
+ "./modules/ruby/renderer": {
117
+ "import": "./dist/modules/ruby/renderer.mjs",
118
+ "types": "./dist/modules/ruby/renderer.d.ts"
119
+ },
120
+ "./modules/video": {
121
+ "import": "./dist/modules/video/index.mjs",
122
+ "types": "./dist/modules/video/index.d.ts"
123
+ },
124
+ "./modules/video/renderer": {
125
+ "import": "./dist/modules/video/renderer.mjs",
126
+ "types": "./dist/modules/video/renderer.d.ts"
127
+ },
128
+ "./modules/mermaid": {
129
+ "import": "./dist/modules/mermaid/index.mjs",
130
+ "types": "./dist/modules/mermaid/index.d.ts"
131
+ },
132
+ "./modules/mermaid/renderer": {
133
+ "import": "./dist/modules/mermaid/renderer.mjs",
134
+ "types": "./dist/modules/mermaid/renderer.d.ts"
135
+ },
136
+ "./modules/excalidraw": {
137
+ "import": "./dist/modules/excalidraw/index.mjs",
138
+ "types": "./dist/modules/excalidraw/index.d.ts"
139
+ },
140
+ "./modules/excalidraw/node": {
141
+ "import": "./dist/modules/excalidraw/node.mjs",
142
+ "types": "./dist/modules/excalidraw/node.d.ts"
143
+ },
144
+ "./modules/nested-doc": {
145
+ "import": "./dist/modules/nested-doc/index.mjs",
146
+ "types": "./dist/modules/nested-doc/index.d.ts"
147
+ },
148
+ "./modules/nested-doc/node": {
149
+ "import": "./dist/modules/nested-doc/node.mjs",
150
+ "types": "./dist/modules/nested-doc/node.d.ts"
151
+ },
80
152
  "./style.css": "./dist/rich-compose.css"
81
153
  },
82
154
  "main": "./dist/index.mjs",
@@ -95,13 +167,22 @@
95
167
  "vite-plugin-dts": "^4.5.4",
96
168
  "vitest": "^4.1.5",
97
169
  "@haklex/rich-editor": "0.4.1",
98
- "@haklex/rich-ext-chat": "0.4.1",
170
+ "@haklex/rich-ext-embed": "0.4.1",
99
171
  "@haklex/rich-ext-code-snippet": "0.4.1",
100
172
  "@haklex/rich-ext-gallery": "0.4.1",
101
- "@haklex/rich-ext-embed": "0.4.1",
173
+ "@haklex/rich-renderer-alert": "0.4.1",
174
+ "@haklex/rich-ext-nested-doc": "0.4.1",
175
+ "@haklex/rich-renderer-banner": "0.4.1",
102
176
  "@haklex/rich-renderer-codeblock": "0.4.1",
177
+ "@haklex/rich-renderer-linkcard": "0.4.1",
178
+ "@haklex/rich-renderer-image": "0.4.1",
179
+ "@haklex/rich-ext-excalidraw": "0.4.1",
180
+ "@haklex/rich-renderer-video": "0.4.1",
181
+ "@haklex/rich-ext-chat": "0.4.1",
103
182
  "@haklex/rich-static-renderer": "0.4.1",
104
- "@haklex/rich-renderer-linkcard": "0.4.1"
183
+ "@haklex/rich-renderer-mermaid": "0.4.1",
184
+ "@haklex/rich-renderer-mention": "0.4.1",
185
+ "@haklex/rich-renderer-ruby": "0.4.1"
105
186
  },
106
187
  "peerDependencies": {
107
188
  "@lexical/react": "^0.44.0",
@@ -109,13 +190,22 @@
109
190
  "react": ">=19",
110
191
  "react-dom": ">=19",
111
192
  "@haklex/rich-editor": "0.4.1",
112
- "@haklex/rich-ext-chat": "0.4.1",
193
+ "@haklex/rich-ext-code-snippet": "0.4.1",
194
+ "@haklex/rich-ext-excalidraw": "0.4.1",
113
195
  "@haklex/rich-ext-embed": "0.4.1",
196
+ "@haklex/rich-ext-chat": "0.4.1",
114
197
  "@haklex/rich-ext-gallery": "0.4.1",
115
- "@haklex/rich-ext-code-snippet": "0.4.1",
198
+ "@haklex/rich-renderer-alert": "0.4.1",
199
+ "@haklex/rich-renderer-image": "0.4.1",
200
+ "@haklex/rich-ext-nested-doc": "0.4.1",
201
+ "@haklex/rich-renderer-banner": "0.4.1",
116
202
  "@haklex/rich-renderer-linkcard": "0.4.1",
117
- "@haklex/rich-static-renderer": "0.4.1",
118
- "@haklex/rich-renderer-codeblock": "0.4.1"
203
+ "@haklex/rich-renderer-codeblock": "0.4.1",
204
+ "@haklex/rich-renderer-mention": "0.4.1",
205
+ "@haklex/rich-renderer-ruby": "0.4.1",
206
+ "@haklex/rich-renderer-mermaid": "0.4.1",
207
+ "@haklex/rich-renderer-video": "0.4.1",
208
+ "@haklex/rich-static-renderer": "0.4.1"
119
209
  },
120
210
  "peerDependenciesMeta": {
121
211
  "@haklex/rich-ext-chat": {
@@ -127,14 +217,41 @@
127
217
  "@haklex/rich-ext-embed": {
128
218
  "optional": true
129
219
  },
220
+ "@haklex/rich-ext-excalidraw": {
221
+ "optional": true
222
+ },
130
223
  "@haklex/rich-ext-gallery": {
131
224
  "optional": true
132
225
  },
226
+ "@haklex/rich-ext-nested-doc": {
227
+ "optional": true
228
+ },
229
+ "@haklex/rich-renderer-alert": {
230
+ "optional": true
231
+ },
232
+ "@haklex/rich-renderer-banner": {
233
+ "optional": true
234
+ },
133
235
  "@haklex/rich-renderer-codeblock": {
134
236
  "optional": true
135
237
  },
238
+ "@haklex/rich-renderer-image": {
239
+ "optional": true
240
+ },
136
241
  "@haklex/rich-renderer-linkcard": {
137
242
  "optional": true
243
+ },
244
+ "@haklex/rich-renderer-mention": {
245
+ "optional": true
246
+ },
247
+ "@haklex/rich-renderer-mermaid": {
248
+ "optional": true
249
+ },
250
+ "@haklex/rich-renderer-ruby": {
251
+ "optional": true
252
+ },
253
+ "@haklex/rich-renderer-video": {
254
+ "optional": true
138
255
  }
139
256
  },
140
257
  "publishConfig": {