@typefm/react-markdown-viewer 0.1.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 (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/dist/ErrorBoundary.d.ts +25 -0
  4. package/dist/ErrorBoundary.d.ts.map +1 -0
  5. package/dist/ErrorBoundary.js +29 -0
  6. package/dist/ErrorBoundary.js.map +1 -0
  7. package/dist/MarkdownViewer.d.ts +41 -0
  8. package/dist/MarkdownViewer.d.ts.map +1 -0
  9. package/dist/MarkdownViewer.js +69 -0
  10. package/dist/MarkdownViewer.js.map +1 -0
  11. package/dist/index.d.ts +17 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +21 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lib/cache-manager.d.ts +59 -0
  16. package/dist/lib/cache-manager.d.ts.map +1 -0
  17. package/dist/lib/cache-manager.js +160 -0
  18. package/dist/lib/cache-manager.js.map +1 -0
  19. package/dist/lib/cursor-controller.d.ts +13 -0
  20. package/dist/lib/cursor-controller.d.ts.map +1 -0
  21. package/dist/lib/cursor-controller.js +93 -0
  22. package/dist/lib/cursor-controller.js.map +1 -0
  23. package/dist/lib/defaults/code-block.d.ts +71 -0
  24. package/dist/lib/defaults/code-block.d.ts.map +1 -0
  25. package/dist/lib/defaults/code-block.js +104 -0
  26. package/dist/lib/defaults/code-block.js.map +1 -0
  27. package/dist/lib/defaults/image.d.ts +41 -0
  28. package/dist/lib/defaults/image.d.ts.map +1 -0
  29. package/dist/lib/defaults/image.js +45 -0
  30. package/dist/lib/defaults/image.js.map +1 -0
  31. package/dist/lib/defaults/link.d.ts +45 -0
  32. package/dist/lib/defaults/link.d.ts.map +1 -0
  33. package/dist/lib/defaults/link.js +76 -0
  34. package/dist/lib/defaults/link.js.map +1 -0
  35. package/dist/lib/defaults/math.d.ts +51 -0
  36. package/dist/lib/defaults/math.d.ts.map +1 -0
  37. package/dist/lib/defaults/math.js +119 -0
  38. package/dist/lib/defaults/math.js.map +1 -0
  39. package/dist/lib/defaults/table.d.ts +18 -0
  40. package/dist/lib/defaults/table.d.ts.map +1 -0
  41. package/dist/lib/defaults/table.js +19 -0
  42. package/dist/lib/defaults/table.js.map +1 -0
  43. package/dist/lib/highlighter.d.ts +81 -0
  44. package/dist/lib/highlighter.d.ts.map +1 -0
  45. package/dist/lib/highlighter.js +421 -0
  46. package/dist/lib/highlighter.js.map +1 -0
  47. package/dist/lib/hook-utils.d.ts +32 -0
  48. package/dist/lib/hook-utils.d.ts.map +1 -0
  49. package/dist/lib/hook-utils.js +42 -0
  50. package/dist/lib/hook-utils.js.map +1 -0
  51. package/dist/lib/html.d.ts +2 -0
  52. package/dist/lib/html.d.ts.map +1 -0
  53. package/dist/lib/html.js +12 -0
  54. package/dist/lib/html.js.map +1 -0
  55. package/dist/lib/morph.d.ts +57 -0
  56. package/dist/lib/morph.d.ts.map +1 -0
  57. package/dist/lib/morph.js +204 -0
  58. package/dist/lib/morph.js.map +1 -0
  59. package/dist/lib/parser.d.ts +32 -0
  60. package/dist/lib/parser.d.ts.map +1 -0
  61. package/dist/lib/parser.js +645 -0
  62. package/dist/lib/parser.js.map +1 -0
  63. package/dist/lib/wasm-init.d.ts +33 -0
  64. package/dist/lib/wasm-init.d.ts.map +1 -0
  65. package/dist/lib/wasm-init.js +69 -0
  66. package/dist/lib/wasm-init.js.map +1 -0
  67. package/dist/styles/alerts.css +294 -0
  68. package/dist/styles/dotted.svg +3 -0
  69. package/dist/styles/hljs.css +332 -0
  70. package/dist/styles/index.css +17 -0
  71. package/dist/styles/katex.css +74 -0
  72. package/dist/styles/viewer.css +975 -0
  73. package/dist/types/hooks.d.ts +207 -0
  74. package/dist/types/hooks.d.ts.map +1 -0
  75. package/dist/types/hooks.js +7 -0
  76. package/dist/types/hooks.js.map +1 -0
  77. package/dist/useMarkdownViewer.d.ts +18 -0
  78. package/dist/useMarkdownViewer.d.ts.map +1 -0
  79. package/dist/useMarkdownViewer.js +403 -0
  80. package/dist/useMarkdownViewer.js.map +1 -0
  81. package/dist/utils.d.ts +20 -0
  82. package/dist/utils.d.ts.map +1 -0
  83. package/dist/utils.js +18 -0
  84. package/dist/utils.js.map +1 -0
  85. package/package.json +78 -0
@@ -0,0 +1,204 @@
1
+ import Idiomorph from 'idiomorph/dist/idiomorph.cjs.js';
2
+ // --------------------------------------------------------------------------
3
+ // Hashing Utility
4
+ // --------------------------------------------------------------------------
5
+ /** Simple djb2 hash for fast string comparison */
6
+ function simpleHash(str) {
7
+ let hash = 5381;
8
+ for (let i = 0; i < str.length; i++) {
9
+ hash = ((hash << 5) + hash) ^ str.charCodeAt(i);
10
+ }
11
+ return `${str.length}:${hash >>> 0}`;
12
+ }
13
+ /** Per-container morph state - auto-cleaned when element is GC'd */
14
+ const morphStates = new WeakMap();
15
+ /** Get or create state for a container */
16
+ function getState(container) {
17
+ let state = morphStates.get(container);
18
+ if (!state) {
19
+ state = {
20
+ prevHashes: [],
21
+ contentHash: '',
22
+ lastStats: { updated: 0, skipped: 0, added: 0, removed: 0 }
23
+ };
24
+ morphStates.set(container, state);
25
+ }
26
+ return state;
27
+ }
28
+ // --------------------------------------------------------------------------
29
+ // Shared Idiomorph Configuration
30
+ // --------------------------------------------------------------------------
31
+ const IDIOMORPH_OPTIONS = {
32
+ morphStyle: 'innerHTML',
33
+ callbacks: {
34
+ // Prevent removal of nodes with data-morph-ignore attribute
35
+ beforeNodeRemoved: (node) => {
36
+ if (node instanceof Element && node.hasAttribute('data-morph-ignore')) {
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ }
42
+ };
43
+ // --------------------------------------------------------------------------
44
+ // RAF-Batched Morphing (for non-streaming updates)
45
+ // --------------------------------------------------------------------------
46
+ // Track pending RAF to avoid stacking
47
+ let pendingMorph = null;
48
+ let pendingElement = null;
49
+ let pendingHtml = null;
50
+ /**
51
+ * Morph the content of an element using Idiomorph
52
+ * Uses requestAnimationFrame to batch updates and prevent jank
53
+ *
54
+ * @param element The container element to morph
55
+ * @param newHtml The new HTML content
56
+ */
57
+ export function morphContent(element, newHtml) {
58
+ const newHash = simpleHash(newHtml);
59
+ const state = getState(element);
60
+ // Fast path: skip if content unchanged
61
+ if (state.contentHash === newHash)
62
+ return;
63
+ // Store for pending morph
64
+ pendingElement = element;
65
+ pendingHtml = newHtml;
66
+ // Cancel any pending morph and schedule new one
67
+ if (pendingMorph !== null) {
68
+ cancelAnimationFrame(pendingMorph);
69
+ }
70
+ pendingMorph = requestAnimationFrame(() => {
71
+ if (pendingElement && pendingHtml !== null) {
72
+ const pendingState = getState(pendingElement);
73
+ pendingState.contentHash = newHash;
74
+ Idiomorph.morph(pendingElement, pendingHtml, IDIOMORPH_OPTIONS);
75
+ }
76
+ pendingMorph = null;
77
+ pendingElement = null;
78
+ pendingHtml = null;
79
+ });
80
+ }
81
+ /**
82
+ * Morph content synchronously (for testing or immediate updates)
83
+ *
84
+ * @param element The container element to morph
85
+ * @param newHtml The new HTML content
86
+ */
87
+ export function morphContentSync(element, newHtml) {
88
+ const newHash = simpleHash(newHtml);
89
+ const state = getState(element);
90
+ // Fast path: skip if content unchanged
91
+ if (state.contentHash === newHash)
92
+ return;
93
+ state.contentHash = newHash;
94
+ Idiomorph.morph(element, newHtml, IDIOMORPH_OPTIONS);
95
+ }
96
+ /**
97
+ * Reset morph state for a specific container, or clear all pending operations
98
+ *
99
+ * @param container Optional container to reset state for
100
+ */
101
+ export function resetMorphCache(container) {
102
+ if (container) {
103
+ // Reset specific container's state
104
+ morphStates.delete(container);
105
+ }
106
+ // Cancel any pending morph
107
+ if (pendingMorph !== null) {
108
+ cancelAnimationFrame(pendingMorph);
109
+ pendingMorph = null;
110
+ }
111
+ pendingElement = null;
112
+ pendingHtml = null;
113
+ }
114
+ // --------------------------------------------------------------------------
115
+ // Element-Level Optimized Morphing (for streaming)
116
+ // --------------------------------------------------------------------------
117
+ /**
118
+ * Get morph stats for a specific container
119
+ *
120
+ * @param container The container to get stats for
121
+ * @returns Stats from the last morph operation on this container
122
+ */
123
+ export function getMorphStats(container) {
124
+ if (!container) {
125
+ // Fallback for backwards compatibility - return empty stats
126
+ return { updated: 0, skipped: 0, added: 0, removed: 0 };
127
+ }
128
+ return getState(container).lastStats;
129
+ }
130
+ /**
131
+ * Optimized morph that skips unchanged elements
132
+ *
133
+ * Strategy:
134
+ * 1. Parse new HTML into temp container
135
+ * 2. Hash each top-level element
136
+ * 3. Compare with previous hashes for this container
137
+ * 4. Only morph elements that changed
138
+ *
139
+ * @param container The container element to morph
140
+ * @param newHtml The new HTML content
141
+ * @returns true if any elements were updated
142
+ */
143
+ export function morphContentOptimized(container, newHtml) {
144
+ const state = getState(container);
145
+ // Parse new HTML into temp container
146
+ const temp = document.createElement('div');
147
+ temp.innerHTML = newHtml;
148
+ const newHashes = [];
149
+ const stats = { updated: 0, skipped: 0, added: 0, removed: 0 };
150
+ const oldLen = container.children.length;
151
+ const newLen = temp.children.length;
152
+ const maxLen = Math.max(oldLen, newLen);
153
+ // Process each element position
154
+ for (let i = 0; i < maxLen; i++) {
155
+ const oldChild = container.children[i];
156
+ const newChild = temp.children[i];
157
+ if (!newChild && oldChild) {
158
+ // Element removed - will handle after loop to avoid index shifting
159
+ continue;
160
+ }
161
+ if (!newChild)
162
+ continue;
163
+ const newHash = simpleHash(newChild.outerHTML);
164
+ newHashes.push(newHash);
165
+ if (!oldChild) {
166
+ // New element - append (clone since temp will be discarded)
167
+ container.appendChild(newChild.cloneNode(true));
168
+ stats.added++;
169
+ }
170
+ else if (state.prevHashes[i] !== newHash) {
171
+ // Element changed - morph it
172
+ Idiomorph.morph(oldChild, newChild.outerHTML, {
173
+ morphStyle: 'outerHTML',
174
+ callbacks: IDIOMORPH_OPTIONS.callbacks
175
+ });
176
+ stats.updated++;
177
+ }
178
+ else {
179
+ // Element unchanged - skip!
180
+ stats.skipped++;
181
+ }
182
+ }
183
+ // Remove extra elements from the end (if any)
184
+ while (container.children.length > newLen) {
185
+ container.lastElementChild?.remove();
186
+ stats.removed++;
187
+ }
188
+ // Update state for this container
189
+ state.prevHashes = newHashes;
190
+ state.lastStats = stats;
191
+ return stats.updated > 0 || stats.added > 0 || stats.removed > 0;
192
+ }
193
+ /**
194
+ * Reset element-level morph state for a container
195
+ * Note: Usually not needed since WeakMap auto-cleans when element is GC'd
196
+ *
197
+ * @param container Optional container to reset (if omitted, does nothing - use resetMorphCache)
198
+ */
199
+ export function resetElementMorphState(container) {
200
+ if (container) {
201
+ morphStates.delete(container);
202
+ }
203
+ }
204
+ //# sourceMappingURL=morph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morph.js","sourceRoot":"","sources":["../../src/lib/morph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { onLanguageLoaded, offLanguageLoaded, getNotificationGeneration } from "./highlighter";
2
+ import type { RenderHooks } from "../types/hooks";
3
+ import { preloadKaTeX as defaultPreloadKaTeX, isKaTeXReady as defaultIsKaTeXReady } from "./defaults/math";
4
+ export { onLanguageLoaded, offLanguageLoaded, getNotificationGeneration };
5
+ export declare const preloadKaTeX: typeof defaultPreloadKaTeX;
6
+ export declare const isKaTeXReady: typeof defaultIsKaTeXReady;
7
+ /**
8
+ * Cursor marker string and HTML replacement
9
+ * Word Joiner (U+2060) - invisible character used to mark cursor position.
10
+ * We use WJ instead of ZWSP (U+200B) because source markdown may contain ZWSP
11
+ * which gets escaped to HTML entities. WJ is rarely used in source text.
12
+ */
13
+ export declare const CURSOR_MARKER = "\u2060";
14
+ export declare const CURSOR_HTML = "<span class='cursor' data-cursor></span>";
15
+ /**
16
+ * Sanitize HTML to remove XSS vectors while preserving safe content.
17
+ */
18
+ export declare function sanitizeHtml(html: string): string;
19
+ export interface ColorOptions {
20
+ fences: boolean;
21
+ inline: boolean;
22
+ }
23
+ /**
24
+ * Render Markdown to HTML using @typefm/comrak-wasm + Post-processing.
25
+ *
26
+ * @param src Markdown source
27
+ * @param useSyncStrategy If true, uses sync morph path (streaming).
28
+ * @param colorOptions Options for color preview injection.
29
+ * @param hooks Optional hooks for customizing rendering.
30
+ */
31
+ export declare function renderMarkdown(src: string, useSyncStrategy: boolean, colorOptions?: ColorOptions, hooks?: RenderHooks): string;
32
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/lib/parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,KAAK,EACX,WAAW,EAgBX,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAEN,YAAY,IAAI,mBAAmB,EACnC,YAAY,IAAI,mBAAmB,EAEnC,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,CAAC;AAG1E,eAAO,MAAM,YAAY,4BAAsB,CAAC;AAChD,eAAO,MAAM,YAAY,4BAAsB,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WAAW,CAAC;AACtC,eAAO,MAAM,WAAW,6CAA6C,CAAC;AAmFtE;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2CjD;AA0DD,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CAChB;AA0HD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,OAAO,EACxB,YAAY,GAAE,YAA6C,EAC3D,KAAK,CAAC,EAAE,WAAW,GACjB,MAAM,CA6HR"}