@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,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, '&quot;');
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"}