markstream-solid 0.0.0-stage → 2.0.23

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 (102) hide show
  1. package/README.md +120 -2
  2. package/dist/client/extended-BTbixd9o.js +38 -0
  3. package/dist/client/index.js +5640 -0
  4. package/dist/client/katexWorkerClient-ZLzkPVv_.js +260 -0
  5. package/dist/client/languageIcon-CDTPjsAQ.js +280 -0
  6. package/dist/client/mermaidWorkerClient-BAvGYsCO.js +243 -0
  7. package/dist/client/utils/index.js +31 -0
  8. package/dist/client/utils/katex-threshold.js +32 -0
  9. package/dist/client/utils/performance-monitor.js +73 -0
  10. package/dist/client/utils/safeRaf.js +27 -0
  11. package/dist/client/workers/katexCdnWorker.js +177 -0
  12. package/dist/client/workers/katexRenderer.worker.js +45 -0
  13. package/dist/client/workers/katexWorkerClient.js +16 -0
  14. package/dist/client/workers/mermaidCdnWorker.js +226 -0
  15. package/dist/client/workers/mermaidParser.worker.js +73 -0
  16. package/dist/client/workers/mermaidWorkerClient.js +13 -0
  17. package/dist/components/BuiltinNodes.d.ts +42 -0
  18. package/dist/components/CodeBlockNode.d.ts +10 -0
  19. package/dist/components/DiagramBlockNode.d.ts +27 -0
  20. package/dist/components/HtmlPreviewFrame.d.ts +10 -0
  21. package/dist/components/MarkstreamProvider.d.ts +5 -0
  22. package/dist/components/MarkstreamVirtualTimeline.d.ts +35 -0
  23. package/dist/components/MathNode.d.ts +6 -0
  24. package/dist/components/NodeRenderer.d.ts +27 -0
  25. package/dist/components/NodeSlot.d.ts +11 -0
  26. package/dist/components/PreCodeBlock.d.ts +3 -0
  27. package/dist/components/PreCodeNode.d.ts +9 -0
  28. package/dist/components/RenderNode.d.ts +11 -0
  29. package/dist/components/StreamingTextNode.d.ts +2 -0
  30. package/dist/components/ToolbarButton.d.ts +14 -0
  31. package/dist/components/ToolbarIcon.d.ts +18 -0
  32. package/dist/components/Tooltip.d.ts +13 -0
  33. package/dist/components/lifecycle.d.ts +6 -0
  34. package/dist/components/mathHeightCache.d.ts +5 -0
  35. package/dist/components/rendererModeDefaults.d.ts +4 -0
  36. package/dist/components/shared/diagram-height.d.ts +16 -0
  37. package/dist/components/shared/node-helpers.d.ts +78 -0
  38. package/dist/components/shared/node-outlet-helpers.d.ts +10 -0
  39. package/dist/components/shared/render-window.d.ts +18 -0
  40. package/dist/components/shared/reuseParsedNodes.d.ts +3 -0
  41. package/dist/components/viewport.d.ts +5 -0
  42. package/dist/components/virtualLayoutKey.d.ts +13 -0
  43. package/dist/configuration.d.ts +9 -0
  44. package/dist/customComponents.d.ts +36 -0
  45. package/dist/enhanceRenderedHtml.d.ts +25 -0
  46. package/dist/hydrateCustomTagContent.d.ts +2 -0
  47. package/dist/i18n/useSafeI18n.d.ts +4 -0
  48. package/dist/icon-themes/index.d.ts +2 -0
  49. package/dist/icon-themes/material/core.d.ts +2 -0
  50. package/dist/icon-themes/material/extended.d.ts +2 -0
  51. package/dist/icon-themes/material/index.d.ts +2 -0
  52. package/dist/icon-themes/registry.d.ts +9 -0
  53. package/dist/icon-themes/types.d.ts +11 -0
  54. package/dist/index.css +3279 -0
  55. package/dist/index.d.ts +48 -0
  56. package/dist/index.px.css +3279 -0
  57. package/dist/index.tailwind.css +3279 -0
  58. package/dist/optional/d2.d.ts +17 -0
  59. package/dist/optional/infographic.d.ts +31 -0
  60. package/dist/optional/katex.d.ts +9 -0
  61. package/dist/optional/mermaid.d.ts +27 -0
  62. package/dist/optional/streamDiffs.d.ts +29 -0
  63. package/dist/renderMarkdownHtml.d.ts +30 -0
  64. package/dist/sanitizeHtmlContent.d.ts +2 -0
  65. package/dist/server/extended-CKyCqQt3.js +69 -0
  66. package/dist/server/index.js +6264 -0
  67. package/dist/server/languageIcon-TXkIEBPf.js +353 -0
  68. package/dist/server/utils/index.js +31 -0
  69. package/dist/server/utils/katex-threshold.js +41 -0
  70. package/dist/server/utils/performance-monitor.js +120 -0
  71. package/dist/server/utils/safeRaf.js +28 -0
  72. package/dist/server/workers/katexCdnWorker.js +190 -0
  73. package/dist/server/workers/katexWorkerClient.js +373 -0
  74. package/dist/server/workers/mermaidCdnWorker.js +238 -0
  75. package/dist/server/workers/mermaidWorkerClient.js +333 -0
  76. package/dist/streamDiffsWorker.d.ts +72 -0
  77. package/dist/tailwind.d.ts +2 -0
  78. package/dist/tailwind.js +3 -0
  79. package/dist/tooltip/singletonTooltip.d.ts +7 -0
  80. package/dist/types/component-props.d.ts +253 -0
  81. package/dist/types/node-renderer-props.d.ts +333 -0
  82. package/dist/useSmoothMarkdownStream.d.ts +22 -0
  83. package/dist/utils/clipboard.d.ts +1 -0
  84. package/dist/utils/d2RenderSalt.d.ts +1 -0
  85. package/dist/utils/footnoteTarget.d.ts +1 -0
  86. package/dist/utils/index.d.ts +8 -0
  87. package/dist/utils/katex-threshold.d.ts +20 -0
  88. package/dist/utils/languageIcon.d.ts +8 -0
  89. package/dist/utils/mermaidRenderId.d.ts +1 -0
  90. package/dist/utils/normalizeKaTeXRenderInput.d.ts +1 -0
  91. package/dist/utils/performance-monitor.d.ts +121 -0
  92. package/dist/utils/resolveLanguageIcon.d.ts +2 -0
  93. package/dist/utils/safeRaf.d.ts +2 -0
  94. package/dist/utils/virtualItemMeasurement.d.ts +5 -0
  95. package/dist/virtual-adapter.d.ts +165 -0
  96. package/dist/workers/katexCdnWorker.d.ts +20 -0
  97. package/dist/workers/katexRenderer.worker.d.ts +1 -0
  98. package/dist/workers/katexWorkerClient.d.ts +35 -0
  99. package/dist/workers/mermaidCdnWorker.d.ts +15 -0
  100. package/dist/workers/mermaidParser.worker.d.ts +1 -0
  101. package/dist/workers/mermaidWorkerClient.d.ts +15 -0
  102. package/package.json +149 -3
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Performance monitoring utility for KaTeX rendering
3
+ * Helps determine if Worker is beneficial in production
4
+ */
5
+ interface RenderMetrics {
6
+ type: 'worker' | 'direct' | 'cache-hit';
7
+ duration: number;
8
+ formulaLength: number;
9
+ timestamp: number;
10
+ success: boolean;
11
+ error?: string;
12
+ }
13
+ declare class PerformanceMonitor {
14
+ private metrics;
15
+ private enabled;
16
+ private maxMetrics;
17
+ enable(): void;
18
+ disable(): void;
19
+ recordRender(metrics: RenderMetrics): void;
20
+ getStats(): {
21
+ totalRenders: number;
22
+ cacheHitRate: number;
23
+ averageWorkerTime: number;
24
+ averageDirectTime: number;
25
+ averageCacheHitTime: number;
26
+ workerSavings: number;
27
+ recommendation: string;
28
+ cacheHits?: undefined;
29
+ workerCalls?: undefined;
30
+ directCalls?: undefined;
31
+ } | {
32
+ totalRenders: number;
33
+ cacheHits: number;
34
+ cacheHitRate: string;
35
+ workerCalls: number;
36
+ directCalls: number;
37
+ averageWorkerTime: string;
38
+ averageDirectTime: string;
39
+ averageCacheHitTime: string;
40
+ workerSavings: string;
41
+ recommendation: string;
42
+ };
43
+ printReport(): {
44
+ totalRenders: number;
45
+ cacheHitRate: number;
46
+ averageWorkerTime: number;
47
+ averageDirectTime: number;
48
+ averageCacheHitTime: number;
49
+ workerSavings: number;
50
+ recommendation: string;
51
+ cacheHits?: undefined;
52
+ workerCalls?: undefined;
53
+ directCalls?: undefined;
54
+ } | {
55
+ totalRenders: number;
56
+ cacheHits: number;
57
+ cacheHitRate: string;
58
+ workerCalls: number;
59
+ directCalls: number;
60
+ averageWorkerTime: string;
61
+ averageDirectTime: string;
62
+ averageCacheHitTime: string;
63
+ workerSavings: string;
64
+ recommendation: string;
65
+ };
66
+ reset(): void;
67
+ exportMetrics(): {
68
+ metrics: RenderMetrics[];
69
+ stats: {
70
+ totalRenders: number;
71
+ cacheHitRate: number;
72
+ averageWorkerTime: number;
73
+ averageDirectTime: number;
74
+ averageCacheHitTime: number;
75
+ workerSavings: number;
76
+ recommendation: string;
77
+ cacheHits?: undefined;
78
+ workerCalls?: undefined;
79
+ directCalls?: undefined;
80
+ } | {
81
+ totalRenders: number;
82
+ cacheHits: number;
83
+ cacheHitRate: string;
84
+ workerCalls: number;
85
+ directCalls: number;
86
+ averageWorkerTime: string;
87
+ averageDirectTime: string;
88
+ averageCacheHitTime: string;
89
+ workerSavings: string;
90
+ recommendation: string;
91
+ };
92
+ timestamp: number;
93
+ };
94
+ }
95
+ export declare const perfMonitor: PerformanceMonitor;
96
+ export declare function enablePerfMonitoring(): void;
97
+ export declare function disablePerfMonitoring(): void;
98
+ export declare function getPerfReport(): {
99
+ totalRenders: number;
100
+ cacheHitRate: number;
101
+ averageWorkerTime: number;
102
+ averageDirectTime: number;
103
+ averageCacheHitTime: number;
104
+ workerSavings: number;
105
+ recommendation: string;
106
+ cacheHits?: undefined;
107
+ workerCalls?: undefined;
108
+ directCalls?: undefined;
109
+ } | {
110
+ totalRenders: number;
111
+ cacheHits: number;
112
+ cacheHitRate: string;
113
+ workerCalls: number;
114
+ directCalls: number;
115
+ averageWorkerTime: string;
116
+ averageDirectTime: string;
117
+ averageCacheHitTime: string;
118
+ workerSavings: string;
119
+ recommendation: string;
120
+ };
121
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { LanguageIconResolver } from './languageIcon';
2
+ export declare function resolveLanguageIcon(lang: string, appScopedResolver?: LanguageIconResolver | null): string;
@@ -0,0 +1,2 @@
1
+ export declare function safeRaf(cb: FrameRequestCallback): any;
2
+ export declare function safeCancelRaf(id: number | null): void;
@@ -0,0 +1,5 @@
1
+ export type VirtualItemLayoutReadCounter = (label: string) => void;
2
+ export declare function readElementBoxHeight(element: HTMLElement | null | undefined, countRead?: VirtualItemLayoutReadCounter): number;
3
+ export declare function readElementOuterHeight(element: HTMLElement | null | undefined, countRead?: VirtualItemLayoutReadCounter): number;
4
+ export declare function findMarkstreamRenderer(element: HTMLElement | null | undefined): HTMLElement | null;
5
+ export declare function getMarkdownItemChromeHeight(element: HTMLElement | null | undefined, countRead?: VirtualItemLayoutReadCounter, outerHeight?: number): number;
@@ -0,0 +1,165 @@
1
+ import type { Accessor } from 'solid-js';
2
+ import type { MarkstreamVirtualMetrics, MarkstreamVirtualState, NodeRendererMode, NodeRendererProps } from './types/node-renderer-props';
3
+ type MaybeAccessor<T> = T | Accessor<T>;
4
+ export type MarkstreamTimelineItemKey = string | number;
5
+ export interface MarkstreamTimelineItem {
6
+ id: MarkstreamTimelineItemKey;
7
+ kind?: string;
8
+ content?: string;
9
+ final?: boolean;
10
+ revision?: MarkstreamTimelineItemKey;
11
+ text?: string;
12
+ label?: string;
13
+ status?: string;
14
+ message?: string;
15
+ component?: unknown;
16
+ }
17
+ export interface MarkstreamVirtualTimelineProps<T = MarkstreamTimelineItem> {
18
+ items: readonly T[];
19
+ threadKey?: MarkstreamTimelineItemKey;
20
+ /**
21
+ * Optional external layout invalidation token.
22
+ *
23
+ * When provided, MarkstreamVirtualTimeline skips per-item content/kind scanning
24
+ * and rebuilds the Fenwick layout only when this token or item count changes.
25
+ * Bump it whenever item key/kind/markdown-ness/component/estimated-height inputs change.
26
+ * Pure markdown content/final updates can keep the same value.
27
+ */
28
+ layoutRevision?: MarkstreamTimelineItemKey;
29
+ getKey?: (item: T, index: number) => MarkstreamTimelineItemKey;
30
+ getKind?: (item: T, index: number) => string;
31
+ getContent?: (item: T, index: number) => string;
32
+ getFinal?: (item: T, index: number) => boolean;
33
+ getRevision?: (item: T, index: number) => MarkstreamTimelineItemKey | undefined;
34
+ estimateItemHeight?: (item: T, index: number) => number;
35
+ overscan?: number;
36
+ overscanPx?: number;
37
+ stickToBottom?: boolean | 'auto';
38
+ measurementKey?: string | number;
39
+ markdownMode?: NodeRendererMode;
40
+ renderCodeBlocksAsPre?: boolean;
41
+ /**
42
+ * Initial state for the active thread.
43
+ *
44
+ * Pass this before first render if the host persisted a previous state.
45
+ * This prevents a first-frame jump from estimated scrollTop to restored scrollTop.
46
+ */
47
+ initialThreadState?: MarkstreamThreadVirtualState | null;
48
+ /**
49
+ * Default: false.
50
+ */
51
+ markdownFade?: boolean;
52
+ /**
53
+ * Default: false. Keep restore loading visible until the viewport is ready.
54
+ */
55
+ restoreMaxLoadingMs?: number | false;
56
+ debug?: boolean;
57
+ }
58
+ export interface MarkstreamVisibleRange {
59
+ start: number;
60
+ end: number;
61
+ }
62
+ export interface MarkstreamOuterVirtualizerAdapter {
63
+ getScrollElement: () => HTMLElement | null;
64
+ getScrollTop: () => number;
65
+ setScrollTop: (value: number) => void;
66
+ getViewportHeight: () => number;
67
+ getTotalHeight: () => number;
68
+ getItemOffset: (key: string) => number;
69
+ getItemSize: (key: string) => number;
70
+ setItemSize: (key: string, size: number) => void;
71
+ getVisibleRange: () => MarkstreamVisibleRange;
72
+ scrollToOffset: (offset: number) => void;
73
+ scrollToIndex: (index: number, align?: 'start' | 'center' | 'end') => void;
74
+ measureElement?: (key: string, el: HTMLElement) => void;
75
+ }
76
+ export interface MarkstreamOuterAnchor {
77
+ type: 'item';
78
+ itemKey: string;
79
+ offsetWithinItemPx: number;
80
+ }
81
+ export interface MarkstreamBottomAnchor {
82
+ type: 'bottom';
83
+ distanceFromBottomPx: number;
84
+ }
85
+ export type MarkstreamThreadAnchor = MarkstreamOuterAnchor | MarkstreamBottomAnchor;
86
+ export interface MarkstreamThreadVirtualState {
87
+ threadKey?: string;
88
+ measurementKey?: string;
89
+ widthBucket?: number;
90
+ outerAnchor?: MarkstreamThreadAnchor;
91
+ itemHeights: Record<string, number>;
92
+ itemSizeSources?: Record<string, {
93
+ sourceKey: string;
94
+ measurementKey?: string;
95
+ widthBucket?: number;
96
+ }>;
97
+ markdownStates: Record<string, MarkstreamVirtualState>;
98
+ }
99
+ export interface MarkstreamVirtualMarkdownProps extends Pick<NodeRendererProps, 'content' | 'final' | 'indexKey' | 'nodeVirtual' | 'maxLiveNodes' | 'liveNodeBuffer' | 'virtualScroll' | 'fade' | 'mode' | 'renderCodeBlocksAsPre'> {
100
+ onHeightChange: (metrics: MarkstreamVirtualMetrics) => void;
101
+ onVirtualStateChange: (state: MarkstreamVirtualState) => void;
102
+ }
103
+ export interface UseMarkstreamVirtualAdapterOptions<T = MarkstreamTimelineItem> {
104
+ items: MaybeAccessor<readonly T[]>;
105
+ threadKey?: MaybeAccessor<MarkstreamTimelineItemKey | undefined>;
106
+ layoutRevision?: MaybeAccessor<MarkstreamTimelineItemKey | undefined>;
107
+ getKey?: (item: T, index: number) => MarkstreamTimelineItemKey;
108
+ getKind?: (item: T, index: number) => string;
109
+ getContent?: (item: T, index: number) => string;
110
+ getFinal?: (item: T, index: number) => boolean;
111
+ getRevision?: (item: T, index: number) => MarkstreamTimelineItemKey | undefined;
112
+ estimateItemHeight?: (item: T, index: number) => number;
113
+ measurementKey?: MaybeAccessor<string | number | undefined>;
114
+ markdownMode?: MaybeAccessor<NodeRendererMode | undefined>;
115
+ renderCodeBlocksAsPre?: MaybeAccessor<boolean | undefined>;
116
+ /**
117
+ * Default: false.
118
+ */
119
+ markdownFade?: boolean;
120
+ /**
121
+ * Preserve the outer scroll anchor when markdown logical height or measured
122
+ * item height changes.
123
+ *
124
+ * Set false if the host virtualizer already performs equivalent scroll
125
+ * anchoring.
126
+ *
127
+ * Default: 'auto'
128
+ */
129
+ preserveScrollAnchor?: boolean | 'auto';
130
+ /**
131
+ * Used when preserveScrollAnchor is enabled.
132
+ * Default: 48
133
+ */
134
+ bottomThresholdPx?: number;
135
+ debug?: boolean;
136
+ virtualizer: MarkstreamOuterVirtualizerAdapter;
137
+ }
138
+ export interface MarkstreamVirtualAdapterController<T = MarkstreamTimelineItem> {
139
+ itemHeights: Map<string, number>;
140
+ markdownStates: Map<string, MarkstreamVirtualState>;
141
+ getItemKey: (item: T, index: number) => string;
142
+ isMarkdownItem: (item: T, index: number) => boolean;
143
+ isRestoringThread: () => boolean;
144
+ measureItem: (item: T, index: number, el: Element | {
145
+ $el?: Element | null;
146
+ } | null | undefined) => void;
147
+ /** Release the measurement bookkeeping (DOM ref + ResizeObserver) of one item key. */
148
+ unobserveItem: (key: string) => void;
149
+ /** Drop measurement bookkeeping for entries whose element left the DOM. Returns the released count. */
150
+ releaseDetached: () => number;
151
+ markdownProps: (item: T, index: number) => MarkstreamVirtualMarkdownProps;
152
+ captureThreadState: () => MarkstreamThreadVirtualState;
153
+ preloadThreadState: (state: MarkstreamThreadVirtualState | null | undefined) => void;
154
+ restoreThreadState: (state: MarkstreamThreadVirtualState | null | undefined) => void;
155
+ dispose: () => void;
156
+ }
157
+ export declare function getMarkstreamTimelineItemKey<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'getKey'>): string;
158
+ export declare function getMarkstreamTimelineItemKind<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'getKind'>): string;
159
+ export declare function getMarkstreamTimelineItemContent<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'getContent'>): string;
160
+ export declare function getMarkstreamTimelineItemFinal<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'getFinal'>): boolean;
161
+ export declare function getMarkstreamTimelineItemRevision<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'getRevision'>): MarkstreamTimelineItemKey | undefined;
162
+ export declare function isMarkstreamMarkdownTimelineItem<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'getKind' | 'getContent'>): boolean;
163
+ export declare function estimateMarkstreamTimelineItemHeight<T>(item: T, index: number, options: Pick<UseMarkstreamVirtualAdapterOptions<T>, 'estimateItemHeight' | 'getKind' | 'getContent'>): number;
164
+ export declare function useMarkstreamVirtualAdapter<T = MarkstreamTimelineItem>(options: UseMarkstreamVirtualAdapterOptions<T>): MarkstreamVirtualAdapterController<T>;
165
+ export {};
@@ -0,0 +1,20 @@
1
+ export type KaTeXCDNWorkerMode = 'classic' | 'module';
2
+ export interface KaTeXCDNWorkerOptions {
3
+ katexUrl: string;
4
+ mhchemUrl?: string;
5
+ mode?: KaTeXCDNWorkerMode;
6
+ debug?: boolean;
7
+ workerOptions?: WorkerOptions;
8
+ renderOptions?: {
9
+ throwOnError?: boolean;
10
+ output?: string;
11
+ strict?: string;
12
+ };
13
+ }
14
+ export interface KaTeXCDNWorkerHandle {
15
+ worker: Worker | null;
16
+ dispose: () => void;
17
+ source: string;
18
+ }
19
+ export declare function buildKaTeXCDNWorkerSource(options: KaTeXCDNWorkerOptions): string;
20
+ export declare function createKaTeXWorkerFromCDN(options: KaTeXCDNWorkerOptions): KaTeXCDNWorkerHandle;
@@ -0,0 +1 @@
1
+ import 'katex/dist/contrib/mhchem';
@@ -0,0 +1,35 @@
1
+ export declare const WORKER_BUSY_CODE = "WORKER_BUSY";
2
+ export declare function setKaTeXWorker(nextWorker: Worker): void;
3
+ export declare function clearKaTeXWorker(): void;
4
+ export declare function setKaTeXWorkerDebug(enabled: boolean): void;
5
+ export declare function renderKaTeXInWorker(content: string, displayMode?: boolean, timeout?: number, signal?: AbortSignal): Promise<string>;
6
+ export declare function setKaTeXCache(content: string, displayMode: boolean | undefined, html: string): void;
7
+ export declare function getKaTeXWorkerLoad(): {
8
+ inFlight: number;
9
+ max: number;
10
+ };
11
+ export declare function setKaTeXWorkerMaxConcurrency(value: number): void;
12
+ export declare function isKaTeXWorkerBusy(): boolean;
13
+ export declare function waitForKaTeXWorkerSlot(timeout?: number, signal?: AbortSignal): Promise<void>;
14
+ export interface BackpressureOptions {
15
+ timeout?: number;
16
+ waitTimeout?: number;
17
+ backoffMs?: number;
18
+ maxRetries?: number;
19
+ signal?: AbortSignal;
20
+ }
21
+ declare const defaultBackpressure: {
22
+ timeout: number;
23
+ waitTimeout: number;
24
+ backoffMs: number;
25
+ maxRetries: number;
26
+ };
27
+ export declare function setKaTeXBackpressureDefaults(options: Partial<typeof defaultBackpressure>): void;
28
+ export declare function getKaTeXBackpressureDefaults(): {
29
+ timeout: number;
30
+ waitTimeout: number;
31
+ backoffMs: number;
32
+ maxRetries: number;
33
+ };
34
+ export declare function renderKaTeXWithBackpressure(content: string, displayMode?: boolean, options?: BackpressureOptions): Promise<string>;
35
+ export {};
@@ -0,0 +1,15 @@
1
+ export type MermaidCDNWorkerMode = 'classic' | 'module';
2
+ export interface MermaidCDNWorkerOptions {
3
+ mermaidUrl: string;
4
+ mode?: MermaidCDNWorkerMode;
5
+ debug?: boolean;
6
+ workerOptions?: WorkerOptions;
7
+ initializeOptions?: Record<string, any>;
8
+ }
9
+ export interface MermaidCDNWorkerHandle {
10
+ worker: Worker | null;
11
+ dispose: () => void;
12
+ source: string;
13
+ }
14
+ export declare function buildMermaidCDNWorkerSource(options: MermaidCDNWorkerOptions): string;
15
+ export declare function createMermaidWorkerFromCDN(options: MermaidCDNWorkerOptions): MermaidCDNWorkerHandle;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ type Theme = 'light' | 'dark';
2
+ export declare function setMermaidWorkerClientDebug(enabled: boolean): void;
3
+ export declare function setMermaidWorkerMaxConcurrency(value: number): void;
4
+ export declare function getMermaidWorkerLoad(): {
5
+ inFlight: number;
6
+ max: number;
7
+ };
8
+ export declare const MERMAID_WORKER_BUSY_CODE = "WORKER_BUSY";
9
+ export declare const MERMAID_DISABLED_CODE = "MERMAID_DISABLED";
10
+ export declare function setMermaidWorker(nextWorker: Worker): void;
11
+ export declare function clearMermaidWorker(): void;
12
+ export declare function canParseOffthread(code: string, theme: Theme, timeout?: number): Promise<boolean>;
13
+ export declare function findPrefixOffthread(code: string, theme: Theme, timeout?: number): Promise<string | null>;
14
+ export declare function terminateWorker(): void;
15
+ export {};
package/package.json CHANGED
@@ -1,6 +1,152 @@
1
1
  {
2
2
  "name": "markstream-solid",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "type": "module",
4
+ "version": "2.0.23",
5
+ "description": "SolidJS streaming Markdown renderer for AI chat, incremental Markdown and long document restoration.",
6
+ "author": "Simon He",
7
+ "license": "MIT",
8
+ "homepage": "https://markstream.simonhe.me/frameworks/solid",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/Simon-He95/markstream-vue.git",
12
+ "directory": "packages/markstream-solid"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/Simon-He95/markstream-vue/issues"
16
+ },
17
+ "keywords": [
18
+ "solid",
19
+ "solidjs",
20
+ "markdown",
21
+ "streaming-markdown",
22
+ "ai-chat",
23
+ "sse",
24
+ "ssr",
25
+ "katex",
26
+ "mermaid",
27
+ "markstream-solid"
28
+ ],
29
+ "sideEffects": [
30
+ "**/*.css"
31
+ ],
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "browser": "./dist/client/index.js",
36
+ "node": "./dist/server/index.js",
37
+ "import": "./dist/client/index.js"
38
+ },
39
+ "./index.css": "./dist/index.css",
40
+ "./index.px.css": "./dist/index.px.css",
41
+ "./index.tailwind.css": "./dist/index.tailwind.css",
42
+ "./utils": {
43
+ "types": "./dist/utils/index.d.ts",
44
+ "browser": "./dist/client/utils/index.js",
45
+ "node": "./dist/server/utils/index.js",
46
+ "import": "./dist/client/utils/index.js"
47
+ },
48
+ "./utils/katex-threshold": {
49
+ "types": "./dist/utils/katex-threshold.d.ts",
50
+ "browser": "./dist/client/utils/katex-threshold.js",
51
+ "node": "./dist/server/utils/katex-threshold.js",
52
+ "import": "./dist/client/utils/katex-threshold.js"
53
+ },
54
+ "./utils/performance-monitor": {
55
+ "types": "./dist/utils/performance-monitor.d.ts",
56
+ "browser": "./dist/client/utils/performance-monitor.js",
57
+ "node": "./dist/server/utils/performance-monitor.js",
58
+ "import": "./dist/client/utils/performance-monitor.js"
59
+ },
60
+ "./utils/safeRaf": {
61
+ "types": "./dist/utils/safeRaf.d.ts",
62
+ "browser": "./dist/client/utils/safeRaf.js",
63
+ "node": "./dist/server/utils/safeRaf.js",
64
+ "import": "./dist/client/utils/safeRaf.js"
65
+ },
66
+ "./workers/katexWorkerClient": {
67
+ "types": "./dist/workers/katexWorkerClient.d.ts",
68
+ "browser": "./dist/client/workers/katexWorkerClient.js",
69
+ "node": "./dist/server/workers/katexWorkerClient.js",
70
+ "import": "./dist/client/workers/katexWorkerClient.js"
71
+ },
72
+ "./workers/mermaidWorkerClient": {
73
+ "types": "./dist/workers/mermaidWorkerClient.d.ts",
74
+ "browser": "./dist/client/workers/mermaidWorkerClient.js",
75
+ "node": "./dist/server/workers/mermaidWorkerClient.js",
76
+ "import": "./dist/client/workers/mermaidWorkerClient.js"
77
+ },
78
+ "./workers/katexCdnWorker": {
79
+ "types": "./dist/workers/katexCdnWorker.d.ts",
80
+ "browser": "./dist/client/workers/katexCdnWorker.js",
81
+ "node": "./dist/server/workers/katexCdnWorker.js",
82
+ "import": "./dist/client/workers/katexCdnWorker.js"
83
+ },
84
+ "./workers/mermaidCdnWorker": {
85
+ "types": "./dist/workers/mermaidCdnWorker.d.ts",
86
+ "browser": "./dist/client/workers/mermaidCdnWorker.js",
87
+ "node": "./dist/server/workers/mermaidCdnWorker.js",
88
+ "import": "./dist/client/workers/mermaidCdnWorker.js"
89
+ },
90
+ "./workers/katexRenderer.worker": "./dist/client/workers/katexRenderer.worker.js",
91
+ "./workers/mermaidParser.worker": "./dist/client/workers/mermaidParser.worker.js",
92
+ "./tailwind": {
93
+ "types": "./dist/tailwind.d.ts",
94
+ "import": "./dist/tailwind.js"
95
+ }
96
+ },
97
+ "main": "./dist/server/index.js",
98
+ "module": "./dist/client/index.js",
99
+ "types": "./dist/index.d.ts",
100
+ "files": [
101
+ "dist"
102
+ ],
103
+ "peerDependencies": {
104
+ "@antv/infographic": "^0.2.3",
105
+ "@terrastruct/d2": ">=0.1.33",
106
+ "katex": ">=0.16.22",
107
+ "mermaid": ">=11",
108
+ "solid-js": "^1.9.0",
109
+ "stream-diffs": ">=0.0.2"
110
+ },
111
+ "peerDependenciesMeta": {
112
+ "@antv/infographic": {
113
+ "optional": true
114
+ },
115
+ "@terrastruct/d2": {
116
+ "optional": true
117
+ },
118
+ "katex": {
119
+ "optional": true
120
+ },
121
+ "mermaid": {
122
+ "optional": true
123
+ },
124
+ "stream-diffs": {
125
+ "optional": true
126
+ }
127
+ },
128
+ "dependencies": {
129
+ "@floating-ui/dom": "^1.8.0",
130
+ "markstream-core": "2.0.23",
131
+ "stream-markdown-parser": "1.2.24"
132
+ },
133
+ "devDependencies": {
134
+ "jsdom": "^24.1.3",
135
+ "postcss-cli": "^11.0.1",
136
+ "postcss-import": "^15.1.0",
137
+ "solid-js": "^1.9.0",
138
+ "typescript": "^5.9.3",
139
+ "vite": "^7.3.6",
140
+ "vite-plugin-solid": "^2.11.0",
141
+ "vitest": "^4.1.10"
142
+ },
143
+ "scripts": {
144
+ "build": "pnpm --dir ../markdown-parser build && pnpm --dir ../markstream-core build && vite build --mode client && vite build --mode server && tsc -p tsconfig.build.json && postcss src/index.css -o dist/index.css && node scripts/finalize-build.mjs && node ../../scripts/generate-px-css.mjs && pnpm run check:parity",
145
+ "typecheck": "tsc --noEmit",
146
+ "test": "vitest run",
147
+ "test:ssr": "vitest run --config vitest.ssr.config.ts",
148
+ "check:parity": "node scripts/check-vue3-parity.mjs",
149
+ "check:workspace-deps-published": "node ../../scripts/check-workspace-deps-published.mjs --package-json package.json",
150
+ "release": "pnpm run check:workspace-deps-published && bumpp --commit --no-tag --no-push --execute 'pnpm --workspace-root run docs:llms:generate' && DIST_TAG=\"$(node ../../scripts/dist-tag.mjs)\" && pnpm publish --access public --tag \"${DIST_TAG}\" && node ../../scripts/tag-package.mjs --package-json package.json --push"
151
+ }
6
152
  }