@stream-mdx/react 0.4.0 → 1.0.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 (106) hide show
  1. package/CHANGELOG.md +385 -4
  2. package/README.md +141 -16
  3. package/dist/blocks-renderer-DAOBFBfi.d.ts +29 -0
  4. package/dist/blocks-renderer-DQEL1kJW.d.cts +29 -0
  5. package/dist/components/bottom-stick-scroll-area.cjs +268 -0
  6. package/dist/components/bottom-stick-scroll-area.d.cts +36 -0
  7. package/dist/components/bottom-stick-scroll-area.d.ts +36 -0
  8. package/dist/components/bottom-stick-scroll-area.mjs +249 -0
  9. package/dist/components/diff-renderer.cjs +86 -0
  10. package/dist/components/diff-renderer.d.cts +11 -0
  11. package/dist/components/diff-renderer.d.ts +11 -0
  12. package/dist/components/diff-renderer.mjs +66 -0
  13. package/dist/components/index.cjs +2879 -1295
  14. package/dist/components/index.d.cts +9 -2
  15. package/dist/components/index.d.ts +9 -2
  16. package/dist/components/index.mjs +2842 -1277
  17. package/dist/components/katex-math.cjs +220 -0
  18. package/dist/components/katex-math.d.cts +10 -0
  19. package/dist/components/katex-math.d.ts +10 -0
  20. package/dist/components/katex-math.mjs +188 -0
  21. package/dist/contexts/math-tracker.cjs +240 -521
  22. package/dist/contexts/math-tracker.mjs +235 -513
  23. package/dist/index-Cmne1yUK.d.cts +723 -0
  24. package/dist/index-D7dyyu3q.d.ts +723 -0
  25. package/dist/index.cjs +13180 -5640
  26. package/dist/index.d.cts +72 -40
  27. package/dist/index.d.ts +72 -40
  28. package/dist/index.mjs +12587 -5038
  29. package/dist/math/display-wrapper.cjs +7 -15
  30. package/dist/math/display-wrapper.d.cts +2 -2
  31. package/dist/math/display-wrapper.d.ts +2 -2
  32. package/dist/math/display-wrapper.mjs +2 -6
  33. package/dist/node-views-Bpc6Gkgl.d.cts +13 -0
  34. package/dist/node-views-DpnYdaAS.d.ts +13 -0
  35. package/dist/renderer/hooks.cjs +35 -20
  36. package/dist/renderer/hooks.d.cts +22 -1
  37. package/dist/renderer/hooks.d.ts +22 -1
  38. package/dist/renderer/hooks.mjs +27 -12
  39. package/dist/renderer/patch-batching.cjs +7 -8
  40. package/dist/renderer/patch-batching.d.cts +1 -1
  41. package/dist/renderer/patch-batching.d.ts +1 -1
  42. package/dist/renderer/patch-batching.mjs +2 -1
  43. package/dist/renderer/patch-coalescing.cjs +5 -8
  44. package/dist/renderer/patch-commit-scheduler.cjs +160 -326
  45. package/dist/renderer/patch-commit-scheduler.d.cts +28 -4
  46. package/dist/renderer/patch-commit-scheduler.d.ts +28 -4
  47. package/dist/renderer/patch-commit-scheduler.mjs +157 -318
  48. package/dist/renderer/store.cjs +3847 -1099
  49. package/dist/renderer/store.d.cts +111 -3
  50. package/dist/renderer/store.d.ts +111 -3
  51. package/dist/renderer/store.mjs +3847 -1085
  52. package/dist/renderer/virtualized-code.cjs +415 -71
  53. package/dist/renderer/virtualized-code.d.cts +24 -23
  54. package/dist/renderer/virtualized-code.d.ts +24 -23
  55. package/dist/renderer/virtualized-code.mjs +409 -62
  56. package/dist/renderer.cjs +10939 -3974
  57. package/dist/renderer.d.cts +100 -29
  58. package/dist/renderer.d.ts +100 -29
  59. package/dist/renderer.mjs +10711 -3697
  60. package/dist/server-regions-CPLHGli0.d.cts +32 -0
  61. package/dist/server-regions-mUhyoKi7.d.ts +32 -0
  62. package/dist/server.cjs +10286 -3365
  63. package/dist/server.d.cts +17 -247
  64. package/dist/server.d.ts +17 -247
  65. package/dist/server.mjs +10565 -3619
  66. package/dist/{streaming-markdown-DOc2uLiP.d.ts → streaming-markdown-yELbJxyH.d.ts} +51 -55
  67. package/dist/{streaming-markdown-D-JcByd9.d.cts → streaming-markdown-zVwFuaJG.d.cts} +51 -55
  68. package/dist/streaming-markdown.cjs +11828 -4879
  69. package/dist/streaming-markdown.d.cts +9 -2
  70. package/dist/streaming-markdown.d.ts +9 -2
  71. package/dist/streaming-markdown.mjs +11820 -4821
  72. package/dist/trusted-mdx/index.cjs +833 -0
  73. package/dist/trusted-mdx/index.d.cts +11 -0
  74. package/dist/trusted-mdx/index.d.ts +11 -0
  75. package/dist/trusted-mdx/index.mjs +807 -0
  76. package/dist/trusted-mdx/native-children-slot.cjs +45 -0
  77. package/dist/trusted-mdx/native-children-slot.d.cts +11 -0
  78. package/dist/trusted-mdx/native-children-slot.d.ts +11 -0
  79. package/dist/trusted-mdx/native-children-slot.mjs +24 -0
  80. package/dist/trusted-mdx/server.cjs +752 -0
  81. package/dist/trusted-mdx/server.d.cts +24 -0
  82. package/dist/trusted-mdx/server.d.ts +24 -0
  83. package/dist/trusted-mdx/server.mjs +724 -0
  84. package/dist/trusted-mdx-contract-ElKpkDI5.d.cts +113 -0
  85. package/dist/trusted-mdx-contract-ElKpkDI5.d.ts +113 -0
  86. package/dist/utils/inline-html.cjs +246 -147
  87. package/dist/utils/inline-html.d.cts +39 -6
  88. package/dist/utils/inline-html.d.ts +39 -6
  89. package/dist/utils/inline-html.mjs +237 -134
  90. package/package.json +52 -18
  91. package/shadcn/README.md +28 -0
  92. package/shadcn/bottom-stick-scroll-area.tsx +358 -0
  93. package/dist/index-D2MYusAM.d.cts +0 -248
  94. package/dist/index-D2MYusAM.d.ts +0 -248
  95. package/dist/mdx-client.cjs +0 -408
  96. package/dist/mdx-client.d.cts +0 -113
  97. package/dist/mdx-client.d.ts +0 -113
  98. package/dist/mdx-client.mjs +0 -369
  99. package/dist/mdx-coordinator.cjs +0 -563
  100. package/dist/mdx-coordinator.d.cts +0 -21
  101. package/dist/mdx-coordinator.d.ts +0 -21
  102. package/dist/mdx-coordinator.mjs +0 -529
  103. package/dist/renderer/node-views.cjs +0 -1642
  104. package/dist/renderer/node-views.d.cts +0 -12
  105. package/dist/renderer/node-views.d.ts +0 -12
  106. package/dist/renderer/node-views.mjs +0 -1616
@@ -0,0 +1,723 @@
1
+ import './components/bottom-stick-scroll-area.cjs';
2
+ import './components/diff-renderer.cjs';
3
+ import React__default, { JSXElementConstructor, Key, ReactNode, ReactElement } from 'react';
4
+ import { BlockResolvedLinkReference, CodeNodeHandle, TableNodeHandle, InlineNode, Block, LazyTokenizationPriority, ContentPolicy, FormatAnticipationConfig, CodeHighlightingMode, CodeHighlightOutputMode, SyntaxExtensionDescriptor, HtmlOptions, InlineHtmlDescriptor, UrlTransform, HtmlTreeNode, MixedContentSegment } from '@stream-mdx/core';
5
+ import { FinalizeResult } from '@stream-mdx/protocol';
6
+ import { a as TrustedMdxEngine } from './trusted-mdx-contract-ElKpkDI5.cjs';
7
+ import { CodeEngine } from '@stream-mdx/worker/engine';
8
+ import { VirtualizedCodeConfig } from './renderer/virtualized-code.cjs';
9
+
10
+ type ContentComponentProps = Readonly<Record<string, unknown>>;
11
+ interface ContentComponentHostProps {
12
+ readonly key?: Key;
13
+ readonly children?: ReactNode;
14
+ readonly "data-diagnostic"?: string;
15
+ readonly "data-component-status"?: string;
16
+ }
17
+ interface ContentComponentRenderInput {
18
+ readonly props: ContentComponentProps;
19
+ readonly key: Key;
20
+ readonly hasChildren: boolean;
21
+ readonly renderChildren: () => ReactNode;
22
+ readonly status: "open" | "closed" | "incomplete";
23
+ readonly diagnostic?: string | undefined;
24
+ }
25
+ type ContentComponentRenderResult = {
26
+ readonly kind: "invalid";
27
+ } | {
28
+ readonly kind: "suppressed";
29
+ } | {
30
+ readonly kind: "rendered";
31
+ readonly element: ReactElement;
32
+ };
33
+ type ContentComponentRenderAdapter = (input: ContentComponentRenderInput) => ContentComponentRenderResult;
34
+ interface ContentComponentRegistration {
35
+ readonly render: ContentComponentRenderAdapter;
36
+ readonly renderWhen: "open" | "closed";
37
+ }
38
+ type ContentComponentsMap = Readonly<Record<string, ContentComponentRegistration>>;
39
+ type ContentComponentPropsGuard<P extends object> = (props: ContentComponentProps) => props is ContentComponentProps & P;
40
+ interface ValidatedContentComponentOptions<P extends object> {
41
+ readonly component: JSXElementConstructor<P & ContentComponentHostProps>;
42
+ readonly validateProps: ContentComponentPropsGuard<P>;
43
+ readonly renderWhen?: "open" | "closed";
44
+ }
45
+ interface BroadContentComponentOptions {
46
+ readonly component: JSXElementConstructor<ContentComponentProps & ContentComponentHostProps>;
47
+ readonly validateProps?: undefined;
48
+ readonly renderWhen?: "open" | "closed";
49
+ }
50
+ /**
51
+ * Binds a typed host component to restricted source props. The returned adapter
52
+ * retains the component type privately and exposes only the validated render seam.
53
+ */
54
+ declare function defineContentComponent<P extends object>(options: ValidatedContentComponentOptions<P>): ContentComponentRegistration;
55
+ declare function defineContentComponent(options: BroadContentComponentOptions): ContentComponentRegistration;
56
+
57
+ interface TableVirtualizationConfig {
58
+ /** Enables opt-in table row virtualization. */
59
+ enabled: boolean;
60
+ /** Minimum body row count. Default: 40. */
61
+ minRows: number;
62
+ /** Alias for minRows. */
63
+ virtualizeThreshold?: number;
64
+ /** Height in pixels used until a row is measured. Default: 40. */
65
+ estimatedRowHeight: number;
66
+ /** Buffer rows on each side of the viewport, bounded to 1–50. Default: 8. */
67
+ overscan: number;
68
+ /** Scroll container maximum height. Default: "600px". */
69
+ maxHeight: number | string;
70
+ }
71
+ type TableVirtualizationOptions = boolean | Partial<TableVirtualizationConfig>;
72
+ declare const DEFAULT_TABLE_VIRTUALIZATION_CONFIG: TableVirtualizationConfig;
73
+
74
+ type TableDownloadFormat = "csv" | "tsv" | "markdown";
75
+ type TableCopyFormat = "tsv" | "markdown";
76
+ interface CodeControlsConfig {
77
+ copy?: boolean;
78
+ download?: boolean;
79
+ }
80
+ interface TableControlsConfig {
81
+ copy?: boolean | TableCopyFormat[];
82
+ download?: boolean | TableDownloadFormat[];
83
+ }
84
+ interface MermaidControlsConfig {
85
+ copy?: boolean;
86
+ fullscreen?: boolean;
87
+ }
88
+ interface ControlsLabels {
89
+ copy?: string;
90
+ copied?: string;
91
+ copyError?: string;
92
+ download?: string;
93
+ downloadCsv?: string;
94
+ downloadTsv?: string;
95
+ downloadMarkdown?: string;
96
+ copyTsv?: string;
97
+ copyMarkdown?: string;
98
+ copyTable?: string;
99
+ fullscreen?: string;
100
+ exitFullscreen?: string;
101
+ [key: string]: string | undefined;
102
+ }
103
+ interface ControlsOptions {
104
+ code?: boolean | CodeControlsConfig;
105
+ table?: boolean | TableControlsConfig;
106
+ mermaid?: boolean | MermaidControlsConfig;
107
+ labels?: ControlsLabels;
108
+ }
109
+ type ControlsConfig = boolean | ControlsOptions;
110
+ interface ControlsComponentProps {
111
+ type: "code" | "table" | "mermaid";
112
+ blockId?: string;
113
+ isFinalized?: boolean;
114
+ code?: string;
115
+ language?: string;
116
+ headers?: string[];
117
+ rows?: string[][];
118
+ align?: Array<"left" | "center" | "right" | null>;
119
+ /** Materialize table strings only when a custom control action needs them. */
120
+ getTableData?: () => {
121
+ headers: string[];
122
+ rows: string[][];
123
+ align?: Array<"left" | "center" | "right" | null>;
124
+ };
125
+ onCopy?: (format?: "raw" | "tsv" | "markdown") => Promise<boolean> | boolean | void;
126
+ onDownload?: (format?: "code" | "csv" | "tsv" | "markdown") => void;
127
+ labels?: ControlsLabels;
128
+ children?: React__default.ReactNode;
129
+ }
130
+ interface ElementFilterDescriptor {
131
+ tagName: string;
132
+ properties: Record<string, unknown>;
133
+ blockType?: string;
134
+ }
135
+ interface ElementFilterContext {
136
+ source: "markdown" | "html";
137
+ parentTagName?: string;
138
+ }
139
+ type AllowElementFn = (element: ElementFilterDescriptor, context: ElementFilterContext) => boolean;
140
+ /** Render-time element filtering, matching react-markdown / Streamdown semantics. */
141
+ interface ElementFilterOptions {
142
+ /** Only these tag names render. Mutually exclusive with `disallowedElements`. */
143
+ allowedElements?: string[];
144
+ /** These tag names never render. Mutually exclusive with `allowedElements`. */
145
+ disallowedElements?: string[];
146
+ /** Final per-element predicate; runs after the allow/deny lists. */
147
+ allowElement?: AllowElementFn;
148
+ /** Render the children of removed elements in place instead of dropping the subtree. */
149
+ unwrapDisallowed?: boolean;
150
+ /** Autolink protocols (e.g. `["mailto"]`) whose bare/angle autolinks render as plain text. Explicit links are unaffected. */
151
+ disableAutolinkProtocols?: string[];
152
+ }
153
+ /** Math rendering policy. Expressions are isolated unless a document scope is explicitly selected. */
154
+ interface MathOptions {
155
+ macroScope?: "document";
156
+ }
157
+ type GenericComponent = React__default.ComponentType<any>;
158
+ interface TableElements {
159
+ Table: GenericComponent;
160
+ Thead: GenericComponent;
161
+ Tbody: GenericComponent;
162
+ Tr: GenericComponent;
163
+ Th: GenericComponent;
164
+ Td: GenericComponent;
165
+ }
166
+ type HtmlElements = Record<string, GenericComponent>;
167
+ type InlineHtmlRenderer = (descriptor: InlineHtmlDescriptor, context: {
168
+ key?: React__default.Key;
169
+ defaultRender: () => React__default.ReactElement | null;
170
+ }) => React__default.ReactElement | null;
171
+ type InlineHtmlRendererMap = Record<string, InlineHtmlRenderer>;
172
+ type InlineComponents = Record<string, GenericComponent> & {
173
+ text: React__default.FC<{
174
+ text: string;
175
+ }>;
176
+ strong: React__default.FC<{
177
+ children: React__default.ReactNode;
178
+ }>;
179
+ em: React__default.FC<{
180
+ children: React__default.ReactNode;
181
+ }>;
182
+ strike?: React__default.FC<{
183
+ children: React__default.ReactNode;
184
+ }>;
185
+ code: React__default.FC<{
186
+ text: string;
187
+ }>;
188
+ link: React__default.FC<{
189
+ href?: string;
190
+ title?: string;
191
+ children: React__default.ReactNode;
192
+ }>;
193
+ image: React__default.FC<{
194
+ src?: string;
195
+ alt?: string;
196
+ title?: string;
197
+ }>;
198
+ br: React__default.FC<Record<string, never>>;
199
+ };
200
+ type NativeNodeKey = "paragraph" | "heading" | "code" | "blockquote" | "list" | "list-item" | "list-item-ordered" | "list-item-unordered" | "table" | "table-row" | "table-cell" | "html" | "mdx" | "hr" | "footnotes" | "footnote-def" | "callout";
201
+ type NodePresentationKey = NativeNodeKey | `inline:${string}` | `html:${string}` | `component:${string}` | `extension:${string}`;
202
+ interface NodeChildRange {
203
+ readonly from: number;
204
+ readonly to: number;
205
+ }
206
+ interface NodeHandleMetadata {
207
+ readonly id: string;
208
+ readonly type: string;
209
+ readonly generation: number;
210
+ readonly revision: number;
211
+ readonly childCount: number;
212
+ readonly isFinalized: boolean;
213
+ }
214
+ /** Opaque read-only identity and subscriptions for one node in one document generation. */
215
+ interface NodeHandle {
216
+ readonly id: string;
217
+ readonly type: string;
218
+ readonly generation: number;
219
+ readonly readMetadata: () => NodeHandleMetadata;
220
+ readonly readChildren: (range: NodeChildRange) => readonly NodeHandle[];
221
+ readonly subscribeMetadata: (listener: () => void) => () => void;
222
+ readonly subscribeChildren: (range: NodeChildRange, listener: () => void) => () => void;
223
+ }
224
+ interface NodeViewMetadata {
225
+ readonly id: string;
226
+ readonly type: string;
227
+ readonly isFinalized: boolean;
228
+ readonly language?: string;
229
+ readonly lineCount?: number;
230
+ readonly rowCount?: number;
231
+ readonly columnCount?: number;
232
+ readonly align?: ReadonlyArray<"left" | "center" | "right" | null>;
233
+ readonly linkReferences?: ReadonlyArray<BlockResolvedLinkReference>;
234
+ }
235
+ interface NodeViewActions {
236
+ readonly readSource: () => string;
237
+ readonly copy: () => Promise<boolean>;
238
+ readonly download: () => void;
239
+ }
240
+ /** An L1 wrapper receives the already-prepared native view as its children. */
241
+ interface NodeViewProps {
242
+ readonly children: React__default.ReactNode;
243
+ readonly metadata: NodeViewMetadata;
244
+ readonly actions: NodeViewActions;
245
+ }
246
+ interface InlineNodeViewProps {
247
+ readonly node: InlineNode;
248
+ /** Prepared native children; math nodes expose their engine-rendered view here. */
249
+ readonly children?: React__default.ReactNode;
250
+ readonly metadata: NodeViewMetadata;
251
+ readonly actions: NodeViewActions;
252
+ }
253
+ interface HtmlNodeViewProps {
254
+ readonly tagName: string;
255
+ /** Sanitized, URL-transformed native attributes. */
256
+ readonly properties: Readonly<Record<string, unknown>>;
257
+ readonly children?: React__default.ReactNode;
258
+ readonly metadata: NodeViewMetadata;
259
+ readonly actions: NodeViewActions;
260
+ }
261
+ type HeadlessNodeViewProps<K extends NodePresentationKey = NodePresentationKey> = K extends "code" ? {
262
+ readonly handle: CodeNodeHandle;
263
+ } : K extends "table" ? {
264
+ readonly handle: TableNodeHandle;
265
+ } : K extends `inline:${string}` | `extension:${string}` ? InlineNodeViewProps : K extends `html:${string}` ? HtmlNodeViewProps : {
266
+ readonly handle: NodeHandle;
267
+ };
268
+ interface PresentationProps {
269
+ readonly className?: string;
270
+ readonly style?: React__default.CSSProperties;
271
+ readonly title?: string;
272
+ readonly [name: `data-${string}`]: string | number | boolean | undefined;
273
+ readonly [name: `aria-${string}`]: string | number | boolean | undefined;
274
+ }
275
+ interface NativeActionSlot {
276
+ readonly actions?: React__default.ReactNode;
277
+ }
278
+ type NodePresentationSlots<K extends NodePresentationKey> = K extends "code" | "table" ? NativeActionSlot : never;
279
+ type NodePresentation<K extends NodePresentationKey = NodePresentationKey> = Readonly<{
280
+ props?: PresentationProps;
281
+ slots?: NodePresentationSlots<K>;
282
+ }> & ([
283
+ K
284
+ ] extends ["table-row" | "table-cell" | `component:${string}`] ? {
285
+ readonly wrapper?: React__default.ComponentType<NodeViewProps>;
286
+ readonly view?: never;
287
+ } : {
288
+ readonly wrapper?: React__default.ComponentType<NodeViewProps>;
289
+ readonly view?: never;
290
+ } | {
291
+ readonly view: React__default.ComponentType<HeadlessNodeViewProps<K>>;
292
+ readonly wrapper?: never;
293
+ });
294
+ type NodePresentations = Partial<{
295
+ [K in NodePresentationKey]: NodePresentation<K>;
296
+ }>;
297
+ type MathEngineOutput = React__default.ReactNode;
298
+ /** Synchronous renderer for TeX content on the main thread. */
299
+ interface MathEngine {
300
+ readonly id: string;
301
+ render(tex: string, options: {
302
+ displayMode: boolean;
303
+ }): MathEngineOutput;
304
+ }
305
+ /** Input supplied by the native code owner to an opt-in Mermaid presentation engine. */
306
+ interface MermaidEngineProps {
307
+ readonly source: string;
308
+ readonly children: React__default.ReactNode;
309
+ readonly metadata: NodeViewMetadata;
310
+ readonly actions: NodeViewActions;
311
+ }
312
+ /** Main-thread diagram presentation for Mermaid code fences. */
313
+ interface MermaidEngine {
314
+ readonly id: string;
315
+ readonly view: React__default.ComponentType<MermaidEngineProps>;
316
+ }
317
+ interface RendererConfig extends ElementFilterOptions {
318
+ themes?: {
319
+ light: string;
320
+ dark: string;
321
+ };
322
+ highlight?: {
323
+ browserEngine?: "js" | "wasm";
324
+ serverEngine?: "wasm";
325
+ langs?: string[];
326
+ };
327
+ sanitization?: {
328
+ schemaId?: string;
329
+ };
330
+ contentPolicy?: ContentPolicy;
331
+ contentComponents?: ContentComponentsMap;
332
+ components?: NodePresentations;
333
+ engines?: {
334
+ code?: CodeEngine;
335
+ math?: MathEngine;
336
+ mermaid?: MermaidEngine;
337
+ mdx?: TrustedMdxEngine;
338
+ };
339
+ plugins?: {
340
+ footnotes?: boolean;
341
+ html?: boolean;
342
+ mdx?: boolean;
343
+ tables?: boolean;
344
+ callouts?: boolean;
345
+ math?: boolean;
346
+ formatAnticipation?: FormatAnticipationConfig;
347
+ codeHighlighting?: CodeHighlightingMode;
348
+ outputMode?: CodeHighlightOutputMode;
349
+ liveCodeHighlighting?: boolean;
350
+ liveTokenization?: boolean;
351
+ emitHighlightTokens?: boolean;
352
+ emitDiffBlocks?: boolean;
353
+ };
354
+ syntax?: SyntaxExtensionDescriptor;
355
+ html?: HtmlOptions;
356
+ urlTransform?: (url: string, attribute: "href" | "src", context: {
357
+ source: "markdown" | "html";
358
+ }) => string | null | undefined;
359
+ tableVirtualization?: TableVirtualizationOptions;
360
+ codeVirtualization?: Partial<VirtualizedCodeConfig>;
361
+ performance?: {
362
+ frameBudgetMs?: number;
363
+ flushTimeoutMs?: number;
364
+ maxBatchesPerFlush?: number;
365
+ maxLowPriorityBatchesPerFlush?: number;
366
+ lowPriorityFrameBudgetMs?: number;
367
+ urgentQueueThreshold?: number;
368
+ batch?: "rAF" | "microtask" | "timeout";
369
+ historyLimit?: number;
370
+ startupMicrotaskFlushes?: number;
371
+ adaptiveBudgeting?: boolean;
372
+ };
373
+ controls?: ControlsConfig;
374
+ controlsComponent?: React__default.ComponentType<ControlsComponentProps>;
375
+ }
376
+ interface RendererStore {
377
+ reset(blocks: Block[]): void;
378
+ getBlocks(): ReadonlyArray<Block>;
379
+ getVersion(): number;
380
+ subscribe(listener: () => void): () => void;
381
+ }
382
+ type CodeHighlightRangeRequest = {
383
+ blockId: string;
384
+ startLine: number;
385
+ endLine: number;
386
+ priority?: LazyTokenizationPriority;
387
+ };
388
+ interface Renderer {
389
+ attachWorker(worker: Worker, options?: {
390
+ skipInit?: boolean;
391
+ }): void;
392
+ /** Resolve after the attached worker supplies its matching initial root, before queued source dispatch. */
393
+ whenInitialized(): Promise<void>;
394
+ finalize(): Promise<FinalizeResult>;
395
+ renderStatic(text: string): Promise<Block[]>;
396
+ onUpdate(cb: (blocks: ReadonlyArray<Block>) => void): () => void;
397
+ setTableVirtualization(options: TableVirtualizationOptions): void;
398
+ getComponentRegistry(): ComponentRegistry;
399
+ getStore(): RendererStore;
400
+ requestCodeHighlightRange(request: CodeHighlightRangeRequest): void;
401
+ setControls(controls: ControlsConfig): void;
402
+ setControlsComponent(component?: React__default.ComponentType<ControlsComponentProps>): void;
403
+ }
404
+ type AnimatedAnimationName = "fadeIn" | "blurIn" | "slideUp" | (string & {});
405
+ interface AnimatedOptions {
406
+ animation?: AnimatedAnimationName;
407
+ duration?: number;
408
+ easing?: string;
409
+ sep?: "word" | "char";
410
+ stagger?: number;
411
+ maxBacklogMs?: number;
412
+ }
413
+ type AnimatedProp = boolean | AnimatedOptions;
414
+
415
+ interface KaTeXModule {
416
+ renderToString(tex: string, options?: {
417
+ displayMode?: boolean;
418
+ throwOnError?: boolean;
419
+ trust?: boolean;
420
+ maxExpand?: number;
421
+ macros?: Record<string, unknown>;
422
+ [key: string]: unknown;
423
+ }): string;
424
+ }
425
+ declare function loadKaTeX(): Promise<KaTeXModule>;
426
+ type MathPreparation = {
427
+ tex: string;
428
+ displayMode: boolean;
429
+ scope: DocumentMathMacroScope | null;
430
+ html: string;
431
+ } | {
432
+ tex: string;
433
+ displayMode: boolean;
434
+ scope: DocumentMathMacroScope | null;
435
+ error: Error;
436
+ };
437
+ declare class DocumentMathMacroScope {
438
+ private readonly entries;
439
+ private orderedEntries;
440
+ private macroSnapshots;
441
+ private katex;
442
+ private loadError;
443
+ private loading;
444
+ private disposed;
445
+ register(element: HTMLElement, tex: string, displayMode: boolean, complete: boolean, publish: (preparation: MathPreparation | null) => void): () => void;
446
+ dispose(): void;
447
+ private refresh;
448
+ private recompute;
449
+ }
450
+ declare const DocumentMathMacroScopeContext: React__default.Context<DocumentMathMacroScope | null>;
451
+ declare const MathExpressionCompletenessContext: React__default.Context<boolean>;
452
+ interface KaTeXMathProps {
453
+ tex: string;
454
+ className?: string;
455
+ errorColor?: string;
456
+ fallback?: (tex: string, error?: Error) => React__default.ReactNode;
457
+ engine?: MathEngine;
458
+ }
459
+ declare const KaTeXInlineMath: React__default.FC<KaTeXMathProps>;
460
+ declare const KaTeXBlockMath: React__default.FC<KaTeXMathProps>;
461
+
462
+ declare const DEFAULT_CONTROLS_LABELS: ControlsLabels;
463
+ declare const LANGUAGE_EXTENSION_MAP: Record<string, string>;
464
+ declare function getExtensionForLanguage(lang?: string): string;
465
+ declare function getCodeSnippetFilename(lang?: string): string;
466
+ declare function copyToClipboard(text: string): Promise<boolean>;
467
+ declare function downloadFile(content: string, filename: string, mimeType?: string): void;
468
+ declare function escapeCsvCell(cell: string): string;
469
+ declare function escapeTsvCell(cell: string): string;
470
+ declare function tableToCsv(headers: string[], rows: string[][]): string;
471
+ declare function tableToTsv(headers: string[], rows: string[][]): string;
472
+ declare function tableToMarkdown(headers: string[], rows: string[][], align?: Array<"left" | "center" | "right" | null>): string;
473
+ declare function inlineToPlainText(nodes?: InlineNode[]): string;
474
+ interface ResolvedCodeControls {
475
+ enabled: boolean;
476
+ copy: boolean;
477
+ download: boolean;
478
+ labels: ControlsLabels;
479
+ }
480
+ declare function resolveCodeControls(config?: ControlsConfig): ResolvedCodeControls;
481
+ interface ResolvedTableControls {
482
+ enabled: boolean;
483
+ copy: boolean;
484
+ copyFormats: TableCopyFormat[];
485
+ download: boolean;
486
+ downloadFormats: TableDownloadFormat[];
487
+ labels: ControlsLabels;
488
+ }
489
+ declare function resolveTableControls(config?: ControlsConfig): ResolvedTableControls;
490
+ interface ResolvedMermaidControls {
491
+ enabled: boolean;
492
+ copy: boolean;
493
+ fullscreen: boolean;
494
+ labels: ControlsLabels;
495
+ }
496
+ declare function resolveMermaidControls(config?: ControlsConfig): ResolvedMermaidControls;
497
+ declare function resolveControlsConfig(config?: ControlsConfig): {
498
+ code: ResolvedCodeControls;
499
+ table: ResolvedTableControls;
500
+ mermaid: ResolvedMermaidControls;
501
+ };
502
+ interface CodeControlsBarProps {
503
+ code: string;
504
+ language?: string;
505
+ config: ResolvedCodeControls;
506
+ className?: string;
507
+ }
508
+ declare const CodeControlsBar: React__default.FC<CodeControlsBarProps>;
509
+ interface TableControlsData {
510
+ headers: string[];
511
+ rows: string[][];
512
+ align?: Array<"left" | "center" | "right" | null>;
513
+ }
514
+ interface TableControlsBarProps {
515
+ headers: string[];
516
+ rows: string[][];
517
+ align?: Array<"left" | "center" | "right" | null>;
518
+ getTableData?: () => TableControlsData;
519
+ getMarkdownSource?: () => string;
520
+ isFinalized: boolean;
521
+ config: ResolvedTableControls;
522
+ className?: string;
523
+ }
524
+ declare const TableControlsBar: React__default.FC<TableControlsBarProps>;
525
+ interface CodeBlockCopyButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
526
+ code: string;
527
+ labels?: ControlsLabels;
528
+ }
529
+ declare const CodeBlockCopyButton: React__default.FC<CodeBlockCopyButtonProps>;
530
+ interface CodeBlockDownloadButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
531
+ code: string;
532
+ language?: string;
533
+ filename?: string;
534
+ labels?: ControlsLabels;
535
+ }
536
+ declare const CodeBlockDownloadButton: React__default.FC<CodeBlockDownloadButtonProps>;
537
+
538
+ interface ResolvedAnimatedOptions {
539
+ animation: AnimatedAnimationName;
540
+ animationName: string;
541
+ duration: number;
542
+ durationStr: string;
543
+ easing: string;
544
+ sep: "word" | "char";
545
+ stagger: number;
546
+ maxBacklogMs: number;
547
+ }
548
+ declare const DEFAULT_ANIMATED_OPTIONS: ResolvedAnimatedOptions;
549
+ declare function resolveAnimatedOptions(prop: AnimatedProp | undefined): ResolvedAnimatedOptions | null;
550
+ declare const STREAM_MDX_ANIMATION_CSS: string;
551
+ declare function splitWordSegments(text: string): string[];
552
+ declare function splitTextSegments(text: string, sep: "word" | "char"): string[];
553
+ declare class AnimationTimeline {
554
+ private now;
555
+ private maxBacklogMs;
556
+ private stagger;
557
+ private committedEndTime;
558
+ private cursorEndTime;
559
+ private passActive;
560
+ private nodeStates;
561
+ constructor(options?: {
562
+ now?: () => number;
563
+ maxBacklogMs?: number;
564
+ stagger?: number;
565
+ });
566
+ updateOptions(options: {
567
+ maxBacklogMs?: number;
568
+ stagger?: number;
569
+ }): void;
570
+ beginPass(currentTime?: number): void;
571
+ commitPass(): void;
572
+ schedule(count: number, stagger?: number, currentTime?: number): number[];
573
+ getNodeState(key: string): {
574
+ count: number;
575
+ delays: number[];
576
+ };
577
+ reset(): void;
578
+ releasePrefix(prefix: string): void;
579
+ }
580
+ interface RenderInlineAnimationContext {
581
+ isFinalized?: boolean;
582
+ animated?: ResolvedAnimatedOptions | null;
583
+ timeline?: AnimationTimeline | null;
584
+ nodeKeyPrefix?: string;
585
+ }
586
+
587
+ type LinkSafetyModalProps = {
588
+ url: string;
589
+ isOpen: boolean;
590
+ isChecking?: boolean;
591
+ onClose: () => void;
592
+ onConfirm: () => void;
593
+ onCopy: () => void;
594
+ };
595
+ declare const DefaultLinkSafetyModal: React__default.FC<LinkSafetyModalProps>;
596
+
597
+ type InlinePresentationContext = RenderInlineAnimationContext & {
598
+ readonly sourceGuard?: () => void;
599
+ };
600
+ /**
601
+ * Render inline nodes to React elements
602
+ */
603
+ declare function renderInlineNodes(nodes: ReadonlyArray<InlineNode>, components: InlineComponents, urlTransform?: UrlTransform, registry?: ComponentRegistry, parentTagName?: string, animationContext?: InlinePresentationContext): React__default.ReactNode;
604
+ /**
605
+ * Default inline components
606
+ */
607
+ declare const defaultInlineComponents: InlineComponents;
608
+ /**
609
+ * Component registry that allows customization
610
+ */
611
+ declare class ComponentRegistry {
612
+ private nodePresentations;
613
+ private inlineComponents;
614
+ private htmlElements;
615
+ private defaultHtmlInlineRenderer;
616
+ private tableElements;
617
+ private literalTagContent?;
618
+ private contentComponents?;
619
+ private mathEngine?;
620
+ private mermaidEngine?;
621
+ private tableVirtualization;
622
+ private tableVirtualizationListeners;
623
+ private codeVirtualization;
624
+ private codeVirtualizationListeners;
625
+ private inlineComponentMapCache;
626
+ private urlTransform?;
627
+ private controls;
628
+ private controlsComponent?;
629
+ private animated?;
630
+ private animatedOptions;
631
+ private animationTimeline;
632
+ private allowedElements?;
633
+ private disallowedElements?;
634
+ private allowElement?;
635
+ private unwrapDisallowed?;
636
+ private disableAutolinkProtocols?;
637
+ private hasFilterConfig;
638
+ constructor(options?: {
639
+ tableVirtualization?: TableVirtualizationOptions;
640
+ codeVirtualization?: Partial<VirtualizedCodeConfig>;
641
+ urlTransform?: UrlTransform;
642
+ controls?: ControlsConfig;
643
+ controlsComponent?: React__default.ComponentType<ControlsComponentProps>;
644
+ animated?: AnimatedProp;
645
+ contentComponents?: ContentComponentsMap;
646
+ components?: NodePresentations;
647
+ engines?: {
648
+ math?: MathEngine;
649
+ mermaid?: MermaidEngine;
650
+ };
651
+ } & ElementFilterOptions);
652
+ setLinkSafetyRenderer(renderer?: InlineComponents["link"]): void;
653
+ hasElementFilters(): boolean;
654
+ /** Replaces the whole filter configuration at once so prop swaps (allowed -> disallowed) never trip the exclusivity check. */
655
+ setElementFilters(options: ElementFilterOptions): void;
656
+ isAutolinkProtocolDisabled(href?: string): boolean;
657
+ isElementAllowed(element: ElementFilterDescriptor, context: ElementFilterContext): boolean;
658
+ filterElement(element: ElementFilterDescriptor, context: ElementFilterContext, renderElement: () => React__default.ReactNode, renderChildren?: () => React__default.ReactNode): React__default.ReactNode;
659
+ setUrlTransform(transform?: UrlTransform): void;
660
+ setAnimated(animated?: AnimatedProp): void;
661
+ getAnimated(): AnimatedProp | undefined;
662
+ getAnimatedOptions(): ResolvedAnimatedOptions | null;
663
+ getAnimationTimeline(): AnimationTimeline | null;
664
+ getRenderInlineContext(isFinalized?: boolean, blockId?: string, sourceGuard?: () => void): InlinePresentationContext | undefined;
665
+ resetAnimationTimeline(): void;
666
+ getUrlTransform(): UrlTransform | undefined;
667
+ releaseFinalizedBlockAnimations(blockId: string): void;
668
+ setNodePresentations(presentations?: NodePresentations): void;
669
+ getNodePresentation<K extends keyof NodePresentations & string>(key: K): NodePresentations[K] | undefined;
670
+ isDefaultHtmlInlineRenderer(renderer: InlineComponents["html"] | undefined): boolean;
671
+ renderInlinePresentation(node: InlineNode, nativeView: React__default.ReactNode, key: React__default.Key, context?: InlinePresentationContext, renderedChildren?: React__default.ReactNode): React__default.ReactNode;
672
+ renderHtmlPresentation(tagName: string, properties: Readonly<Record<string, unknown>>, nativeView: React__default.ReactNode, children: React__default.ReactNode, key: React__default.Key, ownerId?: string, isFinalized?: boolean, sourceGuard?: () => void): React__default.ReactNode;
673
+ renderComponentPresentation(name: string, nativeView: React__default.ReactElement, children: React__default.ReactNode, key: React__default.Key, status: "open" | "closed" | "incomplete", rawSource?: string, ownerId?: string, sourceGuard?: () => void): React__default.ReactNode;
674
+ /** Get HTML element mapping */
675
+ getHtmlElements(): HtmlElements;
676
+ /** Update literal tag content list */
677
+ setLiteralTagContent(tags?: string[]): void;
678
+ /** Get literal tag content list */
679
+ getLiteralTagContent(): string[] | undefined;
680
+ setControls(controls?: ControlsConfig): void;
681
+ getControls(): ControlsConfig;
682
+ setControlsComponent(component?: React__default.ComponentType<ControlsComponentProps>): void;
683
+ getControlsComponent(): React__default.ComponentType<ControlsComponentProps> | undefined;
684
+ /**
685
+ * Get block component
686
+ */
687
+ getBlockComponent(type: string): GenericComponent;
688
+ getCodeNodeView(): React__default.ComponentType<HeadlessNodeViewProps<"code">> | undefined;
689
+ /**
690
+ * Get inline components
691
+ */
692
+ getInlineComponents(): InlineComponents;
693
+ getMathEngine(): MathEngine | undefined;
694
+ setMermaidEngine(engine?: MermaidEngine): void;
695
+ getMermaidEngine(): MermaidEngine | undefined;
696
+ setContentComponents(contentComponents?: ContentComponentsMap): void;
697
+ getContentComponents(): ContentComponentsMap | undefined;
698
+ renderHtmlTree(tree: HtmlTreeNode[], renderBlock?: (block: Block, parentTagName?: string) => React__default.ReactNode, paragraph?: Block, parentTagName?: string, renderParagraphPresentation?: (nativeView: React__default.ReactNode) => React__default.ReactNode, sourceGuard?: () => void): React__default.ReactNode;
699
+ private ownedHtmlRenderContext;
700
+ getTableElements(): TableElements;
701
+ subscribeTableVirtualization(listener: () => void): () => void;
702
+ setTableVirtualization(options: TableVirtualizationOptions | undefined): void;
703
+ getTableVirtualization(): TableVirtualizationConfig;
704
+ subscribeCodeVirtualization(listener: () => void): () => void;
705
+ setCodeVirtualization(options: Partial<VirtualizedCodeConfig> | undefined): void;
706
+ getCodeVirtualization(): VirtualizedCodeConfig;
707
+ /**
708
+ * Render a block
709
+ */
710
+ renderBlock(block: Block, renderPresentation?: (nativeView: React__default.ReactNode) => React__default.ReactNode, sourceGuard?: () => void): React__default.ReactElement;
711
+ /**
712
+ * Get props for a block based on its type
713
+ */
714
+ private getBlockProps;
715
+ /**
716
+ * Extract heading level from raw markdown
717
+ */
718
+ private extractHeadingLevel;
719
+ }
720
+ declare function mapHtmlToReact(html: string, elements: HtmlElements, literalTagContent?: string[], parseMarkdown?: (text: string) => React__default.ReactNode): React__default.ReactNode;
721
+ declare function renderParagraphMixedSegments(segments: MixedContentSegment[], inlineComponents: InlineComponents, inlineHtmlRenderers: InlineHtmlRendererMap, htmlElements?: HtmlElements, literalTagContent?: string[], urlTransform?: UrlTransform): React__default.ReactNode[];
722
+
723
+ export { type MermaidEngine as $, type AllowElementFn as A, type BroadContentComponentOptions as B, type ContentComponentsMap as C, DEFAULT_ANIMATED_OPTIONS as D, type ElementFilterContext as E, CodeBlockDownloadButton as F, escapeCsvCell as G, type HtmlElements as H, type InlineHtmlRendererMap as I, escapeTsvCell as J, tableToCsv as K, tableToTsv as L, type MathOptions as M, tableToMarkdown as N, inlineToPlainText as O, getCodeSnippetFilename as P, getExtensionForLanguage as Q, type Renderer as R, STREAM_MDX_ANIMATION_CSS as S, type TableVirtualizationOptions as T, resolveControlsConfig as U, type ValidatedContentComponentOptions as V, resolveCodeControls as W, resolveTableControls as X, resolveMermaidControls as Y, DEFAULT_CONTROLS_LABELS as Z, type NodePresentations as _, type RendererConfig as a, type NodeHandle as a0, type LinkSafetyModalProps as a1, type MathEngine as a2, type NodeHandleMetadata as a3, type NodeChildRange as a4, DEFAULT_TABLE_VIRTUALIZATION_CONFIG as a5, type MathEngineOutput as a6, type MermaidEngineProps as a7, type HeadlessNodeViewProps as a8, type HtmlNodeViewProps as a9, LANGUAGE_EXTENSION_MAP as aA, copyToClipboard as aB, downloadFile as aC, type ResolvedCodeControls as aD, type ResolvedTableControls as aE, type ResolvedMermaidControls as aF, type CodeControlsBarProps as aG, type TableControlsData as aH, type TableControlsBarProps as aI, type CodeBlockCopyButtonProps as aJ, type CodeBlockDownloadButtonProps as aK, type InlineNodeViewProps as aa, type NativeNodeKey as ab, type NodePresentation as ac, type NodePresentationKey as ad, type NativeActionSlot as ae, type NodeViewActions as af, type NodeViewMetadata as ag, type NodeViewProps as ah, type PresentationProps as ai, renderInlineNodes as aj, defaultInlineComponents as ak, mapHtmlToReact as al, renderParagraphMixedSegments as am, AnimationTimeline as an, splitTextSegments as ao, splitWordSegments as ap, resolveAnimatedOptions as aq, type RenderInlineAnimationContext as ar, DefaultLinkSafetyModal as as, loadKaTeX as at, DocumentMathMacroScope as au, DocumentMathMacroScopeContext as av, MathExpressionCompletenessContext as aw, type KaTeXMathProps as ax, KaTeXInlineMath as ay, KaTeXBlockMath as az, type ControlsConfig as b, type ControlsComponentProps as c, ComponentRegistry as d, type CodeHighlightRangeRequest as e, defineContentComponent as f, type ContentComponentHostProps as g, type ContentComponentProps as h, type ContentComponentPropsGuard as i, type ContentComponentRegistration as j, type ElementFilterDescriptor as k, type ElementFilterOptions as l, type InlineHtmlRenderer as m, type ControlsOptions as n, type CodeControlsConfig as o, type TableControlsConfig as p, type MermaidControlsConfig as q, type ControlsLabels as r, type TableDownloadFormat as s, type TableCopyFormat as t, type AnimatedAnimationName as u, type AnimatedOptions as v, type AnimatedProp as w, CodeControlsBar as x, TableControlsBar as y, CodeBlockCopyButton as z };