@stream-mdx/react 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 (47) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +4 -0
  3. package/dist/components/index.cjs +497 -163
  4. package/dist/components/index.d.cts +1 -1
  5. package/dist/components/index.d.ts +1 -1
  6. package/dist/components/index.mjs +496 -163
  7. package/dist/{index-Bt1opGCs.d.cts → index-D0akq48G.d.cts} +24 -2
  8. package/dist/{index-Bt1opGCs.d.ts → index-D0akq48G.d.ts} +24 -2
  9. package/dist/index.cjs +3797 -2048
  10. package/dist/index.d.cts +43 -5
  11. package/dist/index.d.ts +43 -5
  12. package/dist/index.mjs +3741 -1990
  13. package/dist/mdx-client.cjs +60 -18
  14. package/dist/mdx-client.d.cts +11 -0
  15. package/dist/mdx-client.d.ts +11 -0
  16. package/dist/mdx-client.mjs +60 -18
  17. package/dist/mdx-coordinator.cjs +60 -18
  18. package/dist/mdx-coordinator.mjs +60 -18
  19. package/dist/renderer/node-views.cjs +481 -130
  20. package/dist/renderer/node-views.d.cts +1 -1
  21. package/dist/renderer/node-views.d.ts +1 -1
  22. package/dist/renderer/node-views.mjs +424 -65
  23. package/dist/renderer/patch-commit-scheduler.cjs +68 -7
  24. package/dist/renderer/patch-commit-scheduler.d.cts +6 -5
  25. package/dist/renderer/patch-commit-scheduler.d.ts +6 -5
  26. package/dist/renderer/patch-commit-scheduler.mjs +68 -7
  27. package/dist/renderer/store.cjs +481 -56
  28. package/dist/renderer/store.d.cts +2 -1
  29. package/dist/renderer/store.d.ts +2 -1
  30. package/dist/renderer/store.mjs +479 -47
  31. package/dist/renderer/virtualized-code.cjs +8 -2
  32. package/dist/renderer/virtualized-code.d.cts +4 -0
  33. package/dist/renderer/virtualized-code.d.ts +4 -0
  34. package/dist/renderer/virtualized-code.mjs +8 -2
  35. package/dist/renderer.cjs +3188 -2172
  36. package/dist/renderer.d.cts +4 -2
  37. package/dist/renderer.d.ts +4 -2
  38. package/dist/renderer.mjs +3009 -1985
  39. package/dist/streaming-markdown-Ch6PwjAa.d.cts +154 -0
  40. package/dist/streaming-markdown-tca-Mf8D.d.ts +154 -0
  41. package/dist/streaming-markdown.cjs +3929 -2202
  42. package/dist/streaming-markdown.d.cts +6 -95
  43. package/dist/streaming-markdown.d.ts +6 -95
  44. package/dist/streaming-markdown.mjs +3943 -2208
  45. package/dist/utils/inline-html.d.cts +1 -1
  46. package/dist/utils/inline-html.d.ts +1 -1
  47. package/package.json +3 -3
@@ -0,0 +1,154 @@
1
+ import React from 'react';
2
+ import { PatchMetrics, FormatAnticipationConfig, CodeHighlightingMode, Block } from '@stream-mdx/core';
3
+ import { L as LinkSafetyModalProps, B as BlockComponents, T as TableElements, H as HtmlElements, I as InlineComponents } from './index-D0akq48G.cjs';
4
+ import { AdaptiveBudgetState, PatchFlushResult } from './renderer/patch-commit-scheduler.cjs';
5
+ import { RendererStore } from './renderer/store.cjs';
6
+
7
+ type MdxHydrationStrategy = "immediate" | "staggered" | "visible";
8
+ type MdxHydrationOptions = {
9
+ strategy?: MdxHydrationStrategy;
10
+ maxConcurrent?: number;
11
+ delayMs?: number;
12
+ rootMargin?: string;
13
+ idleTimeoutMs?: number;
14
+ debounceMs?: number;
15
+ };
16
+
17
+ type DeferredRenderConfig = {
18
+ rootMargin?: string;
19
+ idleTimeoutMs?: number;
20
+ debounceMs?: number;
21
+ };
22
+ declare const DeferredRenderContext: React.Context<DeferredRenderConfig | null>;
23
+
24
+ type MdxPrefetchSummary = {
25
+ requested: number;
26
+ completed: number;
27
+ error: number;
28
+ pending: number;
29
+ avgPrefetchMs: number | null;
30
+ p95PrefetchMs: number | null;
31
+ maxPrefetchMs: number | null;
32
+ lastPrefetchMs: number | null;
33
+ };
34
+ type MdxHydrationSummary = {
35
+ compiled: number;
36
+ hydrated: number;
37
+ error: number;
38
+ avgHydrationMs: number | null;
39
+ p95HydrationMs: number | null;
40
+ maxHydrationMs: number | null;
41
+ lastHydrationMs: number | null;
42
+ longTaskTotalMs: number | null;
43
+ longTaskCount: number | null;
44
+ p95LongTaskMs: number | null;
45
+ maxLongTaskMs: number | null;
46
+ prefetch?: MdxPrefetchSummary | null;
47
+ };
48
+
49
+ interface StreamingSchedulerOptions {
50
+ frameBudgetMs?: number;
51
+ flushTimeoutMs?: number;
52
+ maxBatchesPerFlush?: number;
53
+ maxLowPriorityBatchesPerFlush?: number;
54
+ lowPriorityFrameBudgetMs?: number;
55
+ urgentQueueThreshold?: number;
56
+ batch?: "rAF" | "microtask" | "timeout";
57
+ historyLimit?: number;
58
+ adaptiveSwitch?: boolean;
59
+ adaptiveQueueThreshold?: number;
60
+ }
61
+ interface StreamingFeatureFlags {
62
+ footnotes?: boolean;
63
+ html?: boolean;
64
+ mdx?: boolean;
65
+ tables?: boolean;
66
+ callouts?: boolean;
67
+ math?: boolean;
68
+ formatAnticipation?: FormatAnticipationConfig;
69
+ codeHighlighting?: CodeHighlightingMode;
70
+ liveCodeHighlighting?: boolean;
71
+ }
72
+ /**
73
+ * Metrics emitted after each flush (high-priority + low-priority batches).
74
+ */
75
+ interface RendererMetrics {
76
+ tx?: number | null;
77
+ receivedAt: number;
78
+ committedAt: number;
79
+ durationMs: number;
80
+ patchToDomMs: number;
81
+ totalPatches: number;
82
+ appliedPatches: number;
83
+ queueDepthBefore: number;
84
+ remainingQueueSize: number;
85
+ batchCount: number;
86
+ queueDelay: {
87
+ avg: number;
88
+ max: number;
89
+ p95: number;
90
+ };
91
+ priorities: Array<"high" | "low">;
92
+ workerMetrics?: PatchMetrics;
93
+ adaptiveBudget?: AdaptiveBudgetState;
94
+ flush: PatchFlushResult;
95
+ }
96
+ interface RendererStateSnapshot {
97
+ blocks: ReadonlyArray<Block>;
98
+ queueDepth: number;
99
+ pendingBatches: number;
100
+ isPaused: boolean;
101
+ workerReady: boolean;
102
+ rendererVersion: number;
103
+ store: RendererStore;
104
+ lastMetrics: RendererMetrics | null;
105
+ mdxHydration?: MdxHydrationSummary & {
106
+ pending: number;
107
+ };
108
+ }
109
+ interface StreamingMarkdownHandle {
110
+ pause(): void;
111
+ resume(): void;
112
+ restart(): void;
113
+ finalize(): void;
114
+ append(text: string): void;
115
+ setCredits(value: number): void;
116
+ flushPending(): PatchFlushResult | null;
117
+ waitForIdle(): Promise<void>;
118
+ onFlush(listener: (result: PatchFlushResult) => void): () => void;
119
+ getState(): RendererStateSnapshot;
120
+ getPatchHistory(limit?: number): ReadonlyArray<RendererMetrics>;
121
+ }
122
+ type StreamingCaret = "block" | "circle" | string | false;
123
+ type LinkSafetyCheck = (url: string) => boolean | Promise<boolean>;
124
+ type LinkSafetyConfig = {
125
+ enabled?: boolean;
126
+ onLinkCheck?: LinkSafetyCheck;
127
+ renderModal?: (props: LinkSafetyModalProps) => React.ReactNode;
128
+ };
129
+ interface StreamingMarkdownProps {
130
+ text?: string;
131
+ stream?: AsyncIterable<string>;
132
+ worker?: Worker | URL | (() => Worker) | string;
133
+ managedWorker?: boolean;
134
+ prewarmLangs?: string[];
135
+ features?: StreamingFeatureFlags;
136
+ components?: Partial<BlockComponents>;
137
+ tableElements?: Partial<TableElements>;
138
+ htmlElements?: Partial<HtmlElements>;
139
+ mdxComponents?: Record<string, React.ComponentType<unknown>>;
140
+ inlineComponents?: Partial<InlineComponents>;
141
+ scheduling?: StreamingSchedulerOptions;
142
+ mdxCompileMode?: "server" | "worker";
143
+ mdxHydration?: MdxHydrationOptions;
144
+ onMetrics?: (metrics: RendererMetrics) => void;
145
+ onError?: (error: Error) => void;
146
+ className?: string;
147
+ style?: React.CSSProperties;
148
+ caret?: StreamingCaret;
149
+ linkSafety?: LinkSafetyConfig;
150
+ deferHeavyBlocks?: boolean | DeferredRenderConfig;
151
+ }
152
+ declare const StreamingMarkdown: React.ForwardRefExoticComponent<StreamingMarkdownProps & React.RefAttributes<StreamingMarkdownHandle>>;
153
+
154
+ export { type DeferredRenderConfig as D, type LinkSafetyCheck as L, type MdxHydrationOptions as M, type RendererMetrics as R, type StreamingSchedulerOptions as S, DeferredRenderContext as a, type StreamingFeatureFlags as b, type RendererStateSnapshot as c, type StreamingMarkdownHandle as d, type StreamingCaret as e, type LinkSafetyConfig as f, type StreamingMarkdownProps as g, StreamingMarkdown as h };
@@ -0,0 +1,154 @@
1
+ import React from 'react';
2
+ import { PatchMetrics, FormatAnticipationConfig, CodeHighlightingMode, Block } from '@stream-mdx/core';
3
+ import { L as LinkSafetyModalProps, B as BlockComponents, T as TableElements, H as HtmlElements, I as InlineComponents } from './index-D0akq48G.js';
4
+ import { AdaptiveBudgetState, PatchFlushResult } from './renderer/patch-commit-scheduler.js';
5
+ import { RendererStore } from './renderer/store.js';
6
+
7
+ type MdxHydrationStrategy = "immediate" | "staggered" | "visible";
8
+ type MdxHydrationOptions = {
9
+ strategy?: MdxHydrationStrategy;
10
+ maxConcurrent?: number;
11
+ delayMs?: number;
12
+ rootMargin?: string;
13
+ idleTimeoutMs?: number;
14
+ debounceMs?: number;
15
+ };
16
+
17
+ type DeferredRenderConfig = {
18
+ rootMargin?: string;
19
+ idleTimeoutMs?: number;
20
+ debounceMs?: number;
21
+ };
22
+ declare const DeferredRenderContext: React.Context<DeferredRenderConfig | null>;
23
+
24
+ type MdxPrefetchSummary = {
25
+ requested: number;
26
+ completed: number;
27
+ error: number;
28
+ pending: number;
29
+ avgPrefetchMs: number | null;
30
+ p95PrefetchMs: number | null;
31
+ maxPrefetchMs: number | null;
32
+ lastPrefetchMs: number | null;
33
+ };
34
+ type MdxHydrationSummary = {
35
+ compiled: number;
36
+ hydrated: number;
37
+ error: number;
38
+ avgHydrationMs: number | null;
39
+ p95HydrationMs: number | null;
40
+ maxHydrationMs: number | null;
41
+ lastHydrationMs: number | null;
42
+ longTaskTotalMs: number | null;
43
+ longTaskCount: number | null;
44
+ p95LongTaskMs: number | null;
45
+ maxLongTaskMs: number | null;
46
+ prefetch?: MdxPrefetchSummary | null;
47
+ };
48
+
49
+ interface StreamingSchedulerOptions {
50
+ frameBudgetMs?: number;
51
+ flushTimeoutMs?: number;
52
+ maxBatchesPerFlush?: number;
53
+ maxLowPriorityBatchesPerFlush?: number;
54
+ lowPriorityFrameBudgetMs?: number;
55
+ urgentQueueThreshold?: number;
56
+ batch?: "rAF" | "microtask" | "timeout";
57
+ historyLimit?: number;
58
+ adaptiveSwitch?: boolean;
59
+ adaptiveQueueThreshold?: number;
60
+ }
61
+ interface StreamingFeatureFlags {
62
+ footnotes?: boolean;
63
+ html?: boolean;
64
+ mdx?: boolean;
65
+ tables?: boolean;
66
+ callouts?: boolean;
67
+ math?: boolean;
68
+ formatAnticipation?: FormatAnticipationConfig;
69
+ codeHighlighting?: CodeHighlightingMode;
70
+ liveCodeHighlighting?: boolean;
71
+ }
72
+ /**
73
+ * Metrics emitted after each flush (high-priority + low-priority batches).
74
+ */
75
+ interface RendererMetrics {
76
+ tx?: number | null;
77
+ receivedAt: number;
78
+ committedAt: number;
79
+ durationMs: number;
80
+ patchToDomMs: number;
81
+ totalPatches: number;
82
+ appliedPatches: number;
83
+ queueDepthBefore: number;
84
+ remainingQueueSize: number;
85
+ batchCount: number;
86
+ queueDelay: {
87
+ avg: number;
88
+ max: number;
89
+ p95: number;
90
+ };
91
+ priorities: Array<"high" | "low">;
92
+ workerMetrics?: PatchMetrics;
93
+ adaptiveBudget?: AdaptiveBudgetState;
94
+ flush: PatchFlushResult;
95
+ }
96
+ interface RendererStateSnapshot {
97
+ blocks: ReadonlyArray<Block>;
98
+ queueDepth: number;
99
+ pendingBatches: number;
100
+ isPaused: boolean;
101
+ workerReady: boolean;
102
+ rendererVersion: number;
103
+ store: RendererStore;
104
+ lastMetrics: RendererMetrics | null;
105
+ mdxHydration?: MdxHydrationSummary & {
106
+ pending: number;
107
+ };
108
+ }
109
+ interface StreamingMarkdownHandle {
110
+ pause(): void;
111
+ resume(): void;
112
+ restart(): void;
113
+ finalize(): void;
114
+ append(text: string): void;
115
+ setCredits(value: number): void;
116
+ flushPending(): PatchFlushResult | null;
117
+ waitForIdle(): Promise<void>;
118
+ onFlush(listener: (result: PatchFlushResult) => void): () => void;
119
+ getState(): RendererStateSnapshot;
120
+ getPatchHistory(limit?: number): ReadonlyArray<RendererMetrics>;
121
+ }
122
+ type StreamingCaret = "block" | "circle" | string | false;
123
+ type LinkSafetyCheck = (url: string) => boolean | Promise<boolean>;
124
+ type LinkSafetyConfig = {
125
+ enabled?: boolean;
126
+ onLinkCheck?: LinkSafetyCheck;
127
+ renderModal?: (props: LinkSafetyModalProps) => React.ReactNode;
128
+ };
129
+ interface StreamingMarkdownProps {
130
+ text?: string;
131
+ stream?: AsyncIterable<string>;
132
+ worker?: Worker | URL | (() => Worker) | string;
133
+ managedWorker?: boolean;
134
+ prewarmLangs?: string[];
135
+ features?: StreamingFeatureFlags;
136
+ components?: Partial<BlockComponents>;
137
+ tableElements?: Partial<TableElements>;
138
+ htmlElements?: Partial<HtmlElements>;
139
+ mdxComponents?: Record<string, React.ComponentType<unknown>>;
140
+ inlineComponents?: Partial<InlineComponents>;
141
+ scheduling?: StreamingSchedulerOptions;
142
+ mdxCompileMode?: "server" | "worker";
143
+ mdxHydration?: MdxHydrationOptions;
144
+ onMetrics?: (metrics: RendererMetrics) => void;
145
+ onError?: (error: Error) => void;
146
+ className?: string;
147
+ style?: React.CSSProperties;
148
+ caret?: StreamingCaret;
149
+ linkSafety?: LinkSafetyConfig;
150
+ deferHeavyBlocks?: boolean | DeferredRenderConfig;
151
+ }
152
+ declare const StreamingMarkdown: React.ForwardRefExoticComponent<StreamingMarkdownProps & React.RefAttributes<StreamingMarkdownHandle>>;
153
+
154
+ export { type DeferredRenderConfig as D, type LinkSafetyCheck as L, type MdxHydrationOptions as M, type RendererMetrics as R, type StreamingSchedulerOptions as S, DeferredRenderContext as a, type StreamingFeatureFlags as b, type RendererStateSnapshot as c, type StreamingMarkdownHandle as d, type StreamingCaret as e, type LinkSafetyConfig as f, type StreamingMarkdownProps as g, StreamingMarkdown as h };