@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.
- package/LICENSE +21 -0
- package/README.md +217 -0
- package/dist/ErrorBoundary.d.ts +25 -0
- package/dist/ErrorBoundary.d.ts.map +1 -0
- package/dist/ErrorBoundary.js +29 -0
- package/dist/ErrorBoundary.js.map +1 -0
- package/dist/MarkdownViewer.d.ts +41 -0
- package/dist/MarkdownViewer.d.ts.map +1 -0
- package/dist/MarkdownViewer.js +69 -0
- package/dist/MarkdownViewer.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cache-manager.d.ts +59 -0
- package/dist/lib/cache-manager.d.ts.map +1 -0
- package/dist/lib/cache-manager.js +160 -0
- package/dist/lib/cache-manager.js.map +1 -0
- package/dist/lib/cursor-controller.d.ts +13 -0
- package/dist/lib/cursor-controller.d.ts.map +1 -0
- package/dist/lib/cursor-controller.js +93 -0
- package/dist/lib/cursor-controller.js.map +1 -0
- package/dist/lib/defaults/code-block.d.ts +71 -0
- package/dist/lib/defaults/code-block.d.ts.map +1 -0
- package/dist/lib/defaults/code-block.js +104 -0
- package/dist/lib/defaults/code-block.js.map +1 -0
- package/dist/lib/defaults/image.d.ts +41 -0
- package/dist/lib/defaults/image.d.ts.map +1 -0
- package/dist/lib/defaults/image.js +45 -0
- package/dist/lib/defaults/image.js.map +1 -0
- package/dist/lib/defaults/link.d.ts +45 -0
- package/dist/lib/defaults/link.d.ts.map +1 -0
- package/dist/lib/defaults/link.js +76 -0
- package/dist/lib/defaults/link.js.map +1 -0
- package/dist/lib/defaults/math.d.ts +51 -0
- package/dist/lib/defaults/math.d.ts.map +1 -0
- package/dist/lib/defaults/math.js +119 -0
- package/dist/lib/defaults/math.js.map +1 -0
- package/dist/lib/defaults/table.d.ts +18 -0
- package/dist/lib/defaults/table.d.ts.map +1 -0
- package/dist/lib/defaults/table.js +19 -0
- package/dist/lib/defaults/table.js.map +1 -0
- package/dist/lib/highlighter.d.ts +81 -0
- package/dist/lib/highlighter.d.ts.map +1 -0
- package/dist/lib/highlighter.js +421 -0
- package/dist/lib/highlighter.js.map +1 -0
- package/dist/lib/hook-utils.d.ts +32 -0
- package/dist/lib/hook-utils.d.ts.map +1 -0
- package/dist/lib/hook-utils.js +42 -0
- package/dist/lib/hook-utils.js.map +1 -0
- package/dist/lib/html.d.ts +2 -0
- package/dist/lib/html.d.ts.map +1 -0
- package/dist/lib/html.js +12 -0
- package/dist/lib/html.js.map +1 -0
- package/dist/lib/morph.d.ts +57 -0
- package/dist/lib/morph.d.ts.map +1 -0
- package/dist/lib/morph.js +204 -0
- package/dist/lib/morph.js.map +1 -0
- package/dist/lib/parser.d.ts +32 -0
- package/dist/lib/parser.d.ts.map +1 -0
- package/dist/lib/parser.js +645 -0
- package/dist/lib/parser.js.map +1 -0
- package/dist/lib/wasm-init.d.ts +33 -0
- package/dist/lib/wasm-init.d.ts.map +1 -0
- package/dist/lib/wasm-init.js +69 -0
- package/dist/lib/wasm-init.js.map +1 -0
- package/dist/styles/alerts.css +294 -0
- package/dist/styles/dotted.svg +3 -0
- package/dist/styles/hljs.css +332 -0
- package/dist/styles/index.css +17 -0
- package/dist/styles/katex.css +74 -0
- package/dist/styles/viewer.css +975 -0
- package/dist/types/hooks.d.ts +207 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +7 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/useMarkdownViewer.d.ts +18 -0
- package/dist/useMarkdownViewer.d.ts.map +1 -0
- package/dist/useMarkdownViewer.js +403 -0
- package/dist/useMarkdownViewer.js.map +1 -0
- package/dist/utils.d.ts +20 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +18 -0
- package/dist/utils.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default link processor with security hardening.
|
|
3
|
+
*
|
|
4
|
+
* @module lib/defaults/link
|
|
5
|
+
*/
|
|
6
|
+
/** Matches javascript: URLs (case-insensitive, with optional whitespace) */
|
|
7
|
+
const JAVASCRIPT_URL_RE = /^\s*javascript:/i;
|
|
8
|
+
/** Matches vbscript: URLs */
|
|
9
|
+
const VBSCRIPT_URL_RE = /^\s*vbscript:/i;
|
|
10
|
+
/** Matches data: URLs (except safe image types) */
|
|
11
|
+
const DANGEROUS_DATA_URL_RE = /^\s*data:(?!image\/(?:png|jpeg|jpg|gif|webp|svg\+xml))/i;
|
|
12
|
+
/**
|
|
13
|
+
* Check if a URL is potentially dangerous.
|
|
14
|
+
*
|
|
15
|
+
* @param href - URL to check
|
|
16
|
+
* @returns true if the URL should be sanitized
|
|
17
|
+
*/
|
|
18
|
+
export function isDangerousUrl(href) {
|
|
19
|
+
return (JAVASCRIPT_URL_RE.test(href) ||
|
|
20
|
+
VBSCRIPT_URL_RE.test(href) ||
|
|
21
|
+
DANGEROUS_DATA_URL_RE.test(href));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if a URL is external (not anchor or relative).
|
|
25
|
+
*
|
|
26
|
+
* @param href - URL to check
|
|
27
|
+
* @returns true if the URL is external
|
|
28
|
+
*/
|
|
29
|
+
export function isExternalUrl(href) {
|
|
30
|
+
return (!!href &&
|
|
31
|
+
!href.startsWith('#') &&
|
|
32
|
+
!href.startsWith('/') &&
|
|
33
|
+
!href.startsWith('.'));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Default link processor - sanitizes and adds security attributes.
|
|
37
|
+
*
|
|
38
|
+
* Security measures:
|
|
39
|
+
* - Sanitizes javascript:, vbscript:, and dangerous data: URLs
|
|
40
|
+
* - Adds target="_blank" and rel="noopener noreferrer" to external links
|
|
41
|
+
*
|
|
42
|
+
* @param data - Link data with href, text, and optional title
|
|
43
|
+
* @returns HTML string for the anchor tag
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* // Internal link
|
|
47
|
+
* processLink({ href: '/about', text: 'About' });
|
|
48
|
+
* // Returns: '<a href="/about">About</a>'
|
|
49
|
+
*
|
|
50
|
+
* // External link
|
|
51
|
+
* processLink({ href: 'https://example.com', text: 'Example' });
|
|
52
|
+
* // Returns: '<a href="https://example.com" target="_blank" rel="noopener noreferrer">Example</a>'
|
|
53
|
+
*
|
|
54
|
+
* // Dangerous link (sanitized)
|
|
55
|
+
* processLink({ href: 'javascript:alert(1)', text: 'Click' });
|
|
56
|
+
* // Returns: '<a href="#">Click</a>'
|
|
57
|
+
*/
|
|
58
|
+
export function processLink(data) {
|
|
59
|
+
const { href, text, title } = data;
|
|
60
|
+
// Sanitize dangerous URLs
|
|
61
|
+
const safeHref = isDangerousUrl(href) ? '#' : href;
|
|
62
|
+
// Build attributes
|
|
63
|
+
const attrs = [`href="${safeHref}"`];
|
|
64
|
+
if (title) {
|
|
65
|
+
// Escape quotes in title
|
|
66
|
+
const safeTitle = title.replace(/"/g, '"');
|
|
67
|
+
attrs.push(`title="${safeTitle}"`);
|
|
68
|
+
}
|
|
69
|
+
// Add security attributes to external links
|
|
70
|
+
if (isExternalUrl(safeHref)) {
|
|
71
|
+
attrs.push('target="_blank"');
|
|
72
|
+
attrs.push('rel="noopener noreferrer"');
|
|
73
|
+
}
|
|
74
|
+
return `<a ${attrs.join(' ')}>${text}</a>`;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/lib/defaults/link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAE7C,6BAA6B;AAC7B,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,mDAAmD;AACnD,MAAM,qBAAqB,GAAG,yDAAyD,CAAC;AAExF;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,CACL,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,CACL,CAAC,CAAC,IAAI;QACN,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CACtB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAEnC,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnD,mBAAmB;IACnB,MAAM,KAAK,GAAa,CAAC,SAAS,QAAQ,GAAG,CAAC,CAAC;IAE/C,IAAI,KAAK,EAAE,CAAC;QACV,yBAAyB;QACzB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,4CAA4C;IAC5C,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default math processor using KaTeX.
|
|
3
|
+
*
|
|
4
|
+
* @module lib/defaults/math
|
|
5
|
+
*/
|
|
6
|
+
import type { MathData } from '../../types/hooks';
|
|
7
|
+
import type { KaTeXLike } from '../../types/katex';
|
|
8
|
+
/**
|
|
9
|
+
* Preload KaTeX module (non-blocking).
|
|
10
|
+
* Call this early to warm up the cache before math is needed.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Preload on app startup
|
|
14
|
+
* preloadKaTeX();
|
|
15
|
+
*
|
|
16
|
+
* // Later, math will render immediately
|
|
17
|
+
* processMathBlock({ tex: 'E = mc^2', displayMode: false });
|
|
18
|
+
*/
|
|
19
|
+
export declare function preloadKaTeX(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if KaTeX is loaded and ready.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isKaTeXReady(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Get the KaTeX module if loaded, or null.
|
|
26
|
+
* For internal use by parser.ts.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getKaTeXModule(): KaTeXLike | null;
|
|
29
|
+
/**
|
|
30
|
+
* Trigger KaTeX preload if not already started.
|
|
31
|
+
* For internal use during rendering.
|
|
32
|
+
*/
|
|
33
|
+
export declare function ensureKaTeXLoading(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Default math processor using KaTeX.
|
|
36
|
+
*
|
|
37
|
+
* If KaTeX isn't loaded yet, returns a placeholder that will be replaced
|
|
38
|
+
* on re-render when KaTeX becomes available.
|
|
39
|
+
*
|
|
40
|
+
* @param data - Math data with TeX source and display mode
|
|
41
|
+
* @returns HTML string (KaTeX output or placeholder)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Inline math
|
|
45
|
+
* const html = processMathBlock({ tex: 'E = mc^2', displayMode: false });
|
|
46
|
+
*
|
|
47
|
+
* // Display math
|
|
48
|
+
* const html = processMathBlock({ tex: '\\int_0^1 x^2 dx', displayMode: true });
|
|
49
|
+
*/
|
|
50
|
+
export declare function processMathBlock(data: MathData): string;
|
|
51
|
+
//# sourceMappingURL=math.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../../src/lib/defaults/math.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AASnD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAWlD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,SAAS,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAgDvD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default math processor using KaTeX.
|
|
3
|
+
*
|
|
4
|
+
* @module lib/defaults/math
|
|
5
|
+
*/
|
|
6
|
+
import { decodeHtml } from '../html';
|
|
7
|
+
import { cacheManager } from '../cache-manager';
|
|
8
|
+
// --------------------------------------------------------------------------
|
|
9
|
+
// Lazy KaTeX Loading
|
|
10
|
+
// --------------------------------------------------------------------------
|
|
11
|
+
let katexModule = null;
|
|
12
|
+
let katexLoadPromise = null;
|
|
13
|
+
/**
|
|
14
|
+
* Preload KaTeX module (non-blocking).
|
|
15
|
+
* Call this early to warm up the cache before math is needed.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // Preload on app startup
|
|
19
|
+
* preloadKaTeX();
|
|
20
|
+
*
|
|
21
|
+
* // Later, math will render immediately
|
|
22
|
+
* processMathBlock({ tex: 'E = mc^2', displayMode: false });
|
|
23
|
+
*/
|
|
24
|
+
export async function preloadKaTeX() {
|
|
25
|
+
if (katexModule)
|
|
26
|
+
return;
|
|
27
|
+
if (!katexLoadPromise) {
|
|
28
|
+
katexLoadPromise = import('katex').then((mod) => {
|
|
29
|
+
// KaTeX exports renderToString both directly and on default
|
|
30
|
+
const katex = (mod.default || mod);
|
|
31
|
+
katexModule = katex;
|
|
32
|
+
return katex;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
await katexLoadPromise;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if KaTeX is loaded and ready.
|
|
39
|
+
*/
|
|
40
|
+
export function isKaTeXReady() {
|
|
41
|
+
return katexModule !== null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the KaTeX module if loaded, or null.
|
|
45
|
+
* For internal use by parser.ts.
|
|
46
|
+
*/
|
|
47
|
+
export function getKaTeXModule() {
|
|
48
|
+
return katexModule;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Trigger KaTeX preload if not already started.
|
|
52
|
+
* For internal use during rendering.
|
|
53
|
+
*/
|
|
54
|
+
export function ensureKaTeXLoading() {
|
|
55
|
+
if (!katexModule && !katexLoadPromise) {
|
|
56
|
+
preloadKaTeX();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// --------------------------------------------------------------------------
|
|
60
|
+
// Processor
|
|
61
|
+
// --------------------------------------------------------------------------
|
|
62
|
+
/**
|
|
63
|
+
* Default math processor using KaTeX.
|
|
64
|
+
*
|
|
65
|
+
* If KaTeX isn't loaded yet, returns a placeholder that will be replaced
|
|
66
|
+
* on re-render when KaTeX becomes available.
|
|
67
|
+
*
|
|
68
|
+
* @param data - Math data with TeX source and display mode
|
|
69
|
+
* @returns HTML string (KaTeX output or placeholder)
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* // Inline math
|
|
73
|
+
* const html = processMathBlock({ tex: 'E = mc^2', displayMode: false });
|
|
74
|
+
*
|
|
75
|
+
* // Display math
|
|
76
|
+
* const html = processMathBlock({ tex: '\\int_0^1 x^2 dx', displayMode: true });
|
|
77
|
+
*/
|
|
78
|
+
export function processMathBlock(data) {
|
|
79
|
+
const { tex, displayMode } = data;
|
|
80
|
+
// Trigger preload if not started
|
|
81
|
+
ensureKaTeXLoading();
|
|
82
|
+
// Check cache (use separate caches for display/inline)
|
|
83
|
+
const cache = displayMode
|
|
84
|
+
? cacheManager.katexCacheDisplay
|
|
85
|
+
: cacheManager.katexCacheInline;
|
|
86
|
+
const cached = cache.get(tex);
|
|
87
|
+
if (cached !== undefined) {
|
|
88
|
+
return cached;
|
|
89
|
+
}
|
|
90
|
+
// Return placeholder if KaTeX not ready
|
|
91
|
+
if (!katexModule) {
|
|
92
|
+
return `<span class="math-placeholder" data-math-style="${displayMode ? 'display' : 'inline'}">${tex}</span>`;
|
|
93
|
+
}
|
|
94
|
+
// Decode HTML entities in TeX source
|
|
95
|
+
const decodedTex = decodeHtml(tex);
|
|
96
|
+
try {
|
|
97
|
+
let result = katexModule.renderToString(decodedTex, {
|
|
98
|
+
displayMode,
|
|
99
|
+
throwOnError: false,
|
|
100
|
+
strict: false, // Suppress warnings for edge cases
|
|
101
|
+
// trust: true enables \href, \url, \includegraphics commands.
|
|
102
|
+
// Security note: javascript: URLs are sanitized by processLinks() downstream.
|
|
103
|
+
trust: true,
|
|
104
|
+
});
|
|
105
|
+
// Wrap display-mode errors in a centered container
|
|
106
|
+
// KaTeX returns <span class="katex-error"> for errors, without display class
|
|
107
|
+
if (displayMode && result.includes('katex-error')) {
|
|
108
|
+
result = `<span class="katex-display katex-error-display">${result}</span>`;
|
|
109
|
+
}
|
|
110
|
+
// Cache the result
|
|
111
|
+
cache.set(tex, result);
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Return placeholder on error
|
|
116
|
+
return `<span class="math-placeholder" data-math-style="${displayMode ? 'display' : 'inline'}">${tex}</span>`;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../src/lib/defaults/math.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,6EAA6E;AAC7E,qBAAqB;AACrB,6EAA6E;AAE7E,IAAI,WAAW,GAAqB,IAAI,CAAC;AACzC,IAAI,gBAAgB,GAA8B,IAAI,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,WAAW;QAAE,OAAO;IACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,4DAA4D;YAC5D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAc,CAAC;YAChD,WAAW,GAAG,KAAK,CAAC;YACpB,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,gBAAgB,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,WAAW,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtC,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,YAAY;AACZ,6EAA6E;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAElC,iCAAiC;IACjC,kBAAkB,EAAE,CAAC;IAErB,uDAAuD;IACvD,MAAM,KAAK,GAAG,WAAW;QACvB,CAAC,CAAC,YAAY,CAAC,iBAAiB;QAChC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC;IAElC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,mDAAmD,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,SAAS,CAAC;IAChH,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,UAAU,EAAE;YAClD,WAAW;YACX,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,KAAK,EAAE,mCAAmC;YAClD,8DAA8D;YAC9D,8EAA8E;YAC9E,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,mDAAmD;QACnD,6EAA6E;QAC7E,IAAI,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,mDAAmD,MAAM,SAAS,CAAC;QAC9E,CAAC;QAED,mBAAmB;QACnB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;QAC9B,OAAO,mDAAmD,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,SAAS,CAAC;IAChH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default table processor.
|
|
3
|
+
*
|
|
4
|
+
* @module lib/defaults/table
|
|
5
|
+
*/
|
|
6
|
+
import type { TableData } from '../../types/hooks';
|
|
7
|
+
/**
|
|
8
|
+
* Default table processor - wraps in scrollable container.
|
|
9
|
+
*
|
|
10
|
+
* @param data - Table data with raw HTML
|
|
11
|
+
* @returns HTML string with table wrapped in scrollable container
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const html = processTable({ html: '<table>...</table>' });
|
|
15
|
+
* // Returns: '<div class="table-wrapper"><table>...</table></div>'
|
|
16
|
+
*/
|
|
17
|
+
export declare function processTable(data: TableData): string;
|
|
18
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/lib/defaults/table.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default table processor.
|
|
3
|
+
*
|
|
4
|
+
* @module lib/defaults/table
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Default table processor - wraps in scrollable container.
|
|
8
|
+
*
|
|
9
|
+
* @param data - Table data with raw HTML
|
|
10
|
+
* @returns HTML string with table wrapped in scrollable container
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const html = processTable({ html: '<table>...</table>' });
|
|
14
|
+
* // Returns: '<div class="table-wrapper"><table>...</table></div>'
|
|
15
|
+
*/
|
|
16
|
+
export function processTable(data) {
|
|
17
|
+
return `<div class="table-wrapper">${data.html}</div>`;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/lib/defaults/table.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,IAAe;IAC1C,OAAO,8BAA8B,IAAI,CAAC,IAAI,QAAQ,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Syntax highlighter using highlight.js with dynamic language loading
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Minimal core bundle (~8KB gzipped)
|
|
6
|
+
* - Dynamic language loading on demand with code-splitting
|
|
7
|
+
* - Event system for re-highlighting when languages load
|
|
8
|
+
* - LRU caching for performance
|
|
9
|
+
*
|
|
10
|
+
* @see https://highlightjs.org/
|
|
11
|
+
*/
|
|
12
|
+
import type { LanguageFn } from 'highlight.js';
|
|
13
|
+
type LanguageLoadListener = (language: string) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Load a language dynamically
|
|
16
|
+
* Returns a promise that resolves when the language is ready
|
|
17
|
+
*/
|
|
18
|
+
export declare function loadLanguage(language: string): Promise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Load multiple languages in parallel
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadLanguages(languages: string[]): Promise<void>;
|
|
23
|
+
export interface HighlightResult {
|
|
24
|
+
html: string;
|
|
25
|
+
language: string;
|
|
26
|
+
isHighlighted: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Highlight code synchronously if language is available
|
|
30
|
+
* Triggers async language load if not available
|
|
31
|
+
*
|
|
32
|
+
* @param code - Source code to highlight
|
|
33
|
+
* @param language - Language identifier
|
|
34
|
+
* @returns Highlighted HTML and status
|
|
35
|
+
*/
|
|
36
|
+
export declare function highlightCode(code: string, language?: string): HighlightResult;
|
|
37
|
+
/**
|
|
38
|
+
* Simple highlight that returns just the HTML string
|
|
39
|
+
* For use in parser where we don't need status info
|
|
40
|
+
*/
|
|
41
|
+
export declare function highlight(code: string, language?: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Subscribe to language load events
|
|
44
|
+
*/
|
|
45
|
+
export declare function onLanguageLoaded(listener: LanguageLoadListener): void;
|
|
46
|
+
/**
|
|
47
|
+
* Unsubscribe from language load events
|
|
48
|
+
*/
|
|
49
|
+
export declare function offLanguageLoaded(listener: LanguageLoadListener): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the current notification generation.
|
|
52
|
+
* Used by late subscribers to detect if they missed a notification
|
|
53
|
+
* (e.g., useEffect subscribes after paint, but languages loaded before paint).
|
|
54
|
+
*/
|
|
55
|
+
export declare function getNotificationGeneration(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Register a custom language not in the dynamic loader map
|
|
58
|
+
*/
|
|
59
|
+
export declare function registerLanguage(name: string, languageFn: LanguageFn): void;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a language is available (registered)
|
|
62
|
+
*/
|
|
63
|
+
export declare function isLanguageReady(language: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a language can be loaded dynamically
|
|
66
|
+
*/
|
|
67
|
+
export declare function isLanguageSupported(language: string): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Get all registered languages
|
|
70
|
+
*/
|
|
71
|
+
export declare function getRegisteredLanguages(): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Get all supported languages (registered + loadable)
|
|
74
|
+
*/
|
|
75
|
+
export declare function getSupportedLanguages(): string[];
|
|
76
|
+
/**
|
|
77
|
+
* Clear highlight cache
|
|
78
|
+
*/
|
|
79
|
+
export declare function clearHighlightCache(): void;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=highlighter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"highlighter.d.ts","sourceRoot":"","sources":["../../src/lib/highlighter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AA8K/C,KAAK,oBAAoB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AA0BvD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0DrE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAetE;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,CA+C9E;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEjE;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAEtE;AA0CD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAa3E;AAmBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|