mathpix-markdown-it 2.0.35 → 2.0.37
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/README.md +146 -4
- package/doc/changelog.md +64 -0
- package/es5/browser/add-speech.js +1 -0
- package/es5/browser/auto-render.js +33 -0
- package/es5/bundle.js +5 -5
- package/es5/index.js +5 -5
- package/lib/browser/add-speech.d.ts +17 -0
- package/lib/browser/add-speech.js +97 -0
- package/lib/browser/add-speech.js.map +1 -0
- package/lib/browser/auto-render.d.ts +20 -0
- package/lib/browser/auto-render.js +319 -0
- package/lib/browser/auto-render.js.map +1 -0
- package/lib/browser/utils.d.ts +4 -0
- package/lib/browser/utils.js +11 -0
- package/lib/browser/utils.js.map +1 -0
- package/lib/contex-menu/styles.js +2 -1
- package/lib/contex-menu/styles.js.map +1 -1
- package/lib/copy-to-clipboard/clipboard-copy-styles.js +2 -1
- package/lib/copy-to-clipboard/clipboard-copy-styles.js.map +1 -1
- package/lib/markdown/common/convert-math-to-html.d.ts +4 -1
- package/lib/markdown/common/convert-math-to-html.js +174 -93
- package/lib/markdown/common/convert-math-to-html.js.map +1 -1
- package/lib/markdown/highlight/highlight-math-token.js +5 -3
- package/lib/markdown/highlight/highlight-math-token.js.map +1 -1
- package/lib/mathjax/index.d.ts +6 -0
- package/lib/mathjax/index.js +103 -33
- package/lib/mathjax/index.js.map +1 -1
- package/lib/mathpix-markdown-model/index.d.ts +35 -5
- package/lib/mathpix-markdown-model/index.js +106 -50
- package/lib/mathpix-markdown-model/index.js.map +1 -1
- package/lib/sre/index.d.ts +8 -0
- package/lib/sre/index.js +38 -20
- package/lib/sre/index.js.map +1 -1
- package/lib/sre/sre-browser.d.ts +16 -0
- package/lib/sre/sre-browser.js +26 -1
- package/lib/sre/sre-browser.js.map +1 -1
- package/lib/styles/colors.d.ts +63 -0
- package/lib/styles/colors.js +68 -0
- package/lib/styles/colors.js.map +1 -0
- package/lib/styles/helpers.js +22 -0
- package/lib/styles/helpers.js.map +1 -0
- package/lib/styles/index.d.ts +4 -3
- package/lib/styles/index.js +45 -7
- package/lib/styles/index.js.map +1 -1
- package/lib/styles/styles-code.d.ts +1 -1
- package/lib/styles/styles-code.js +6 -1
- package/lib/styles/styles-code.js.map +1 -1
- package/lib/styles/styles-container.js +2 -1
- package/lib/styles/styles-container.js.map +1 -1
- package/lib/styles/styles-lists.d.ts +1 -1
- package/lib/styles/styles-lists.js +1 -1
- package/lib/styles/styles-lists.js.map +1 -1
- package/lib/styles/styles-tabular.d.ts +1 -1
- package/lib/styles/styles-tabular.js +5 -2
- package/lib/styles/styles-tabular.js.map +1 -1
- package/package.json +2 -2
- package/pr-specs/2026-01-html-math-output-options.md +529 -0
- package/pr-specs/2026-03-mmd-css-scoping.md +267 -0
- package/lib/styles/halpers.js +0 -13
- package/lib/styles/halpers.js.map +0 -1
- /package/lib/styles/{halpers.d.ts → helpers.d.ts} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface MathpixSpeechConfig {
|
|
2
|
+
/** Container element to process (defaults to document.body) */
|
|
3
|
+
container?: HTMLElement;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Add speech attributes to already-rendered SVG math elements.
|
|
7
|
+
* Use this when math was rendered server-side without accessibility (output_format: 'svg').
|
|
8
|
+
*
|
|
9
|
+
* This function:
|
|
10
|
+
* - Loads SRE (Speech Rule Engine) dynamically
|
|
11
|
+
* - Finds all mjx-container elements
|
|
12
|
+
* - Extracts MathML from mjx-assistive-mml
|
|
13
|
+
* - Generates speech text and adds aria-label
|
|
14
|
+
*
|
|
15
|
+
* @param container - The container element to search for math elements (defaults to document.body)
|
|
16
|
+
*/
|
|
17
|
+
export declare const addSpeechToRenderedMath: (container?: HTMLElement) => Promise<void>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addSpeechToRenderedMath = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var sre_browser_1 = require("../sre/sre-browser");
|
|
6
|
+
var sre_1 = require("../sre");
|
|
7
|
+
var utils_1 = require("./utils");
|
|
8
|
+
var defaultConfig = {};
|
|
9
|
+
/**
|
|
10
|
+
* Add speech attributes to already-rendered SVG math elements.
|
|
11
|
+
* Use this when math was rendered server-side without accessibility (output_format: 'svg').
|
|
12
|
+
*
|
|
13
|
+
* This function:
|
|
14
|
+
* - Loads SRE (Speech Rule Engine) dynamically
|
|
15
|
+
* - Finds all mjx-container elements
|
|
16
|
+
* - Extracts MathML from mjx-assistive-mml
|
|
17
|
+
* - Generates speech text and adds aria-label
|
|
18
|
+
*
|
|
19
|
+
* @param container - The container element to search for math elements (defaults to document.body)
|
|
20
|
+
*/
|
|
21
|
+
var addSpeechToRenderedMath = function (container) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
22
|
+
var root, sre, mathContainers, mathContainers_1, mathContainers_1_1, elMath, err_1;
|
|
23
|
+
var e_1, _a;
|
|
24
|
+
return tslib_1.__generator(this, function (_b) {
|
|
25
|
+
switch (_b.label) {
|
|
26
|
+
case 0:
|
|
27
|
+
root = container !== null && container !== void 0 ? container : document.body;
|
|
28
|
+
_b.label = 1;
|
|
29
|
+
case 1:
|
|
30
|
+
_b.trys.push([1, 3, , 4]);
|
|
31
|
+
return [4 /*yield*/, (0, sre_browser_1.loadSreAsync)()];
|
|
32
|
+
case 2:
|
|
33
|
+
sre = _b.sent();
|
|
34
|
+
if (!sre) {
|
|
35
|
+
console.warn('[addSpeechToRenderedMath] SRE not available');
|
|
36
|
+
return [2 /*return*/];
|
|
37
|
+
}
|
|
38
|
+
mathContainers = Array.from(root.querySelectorAll('mjx-container'));
|
|
39
|
+
try {
|
|
40
|
+
for (mathContainers_1 = tslib_1.__values(mathContainers), mathContainers_1_1 = mathContainers_1.next(); !mathContainers_1_1.done; mathContainers_1_1 = mathContainers_1.next()) {
|
|
41
|
+
elMath = mathContainers_1_1.value;
|
|
42
|
+
(0, sre_1.addSpeechToMathContainer)(sre, elMath, document);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
46
|
+
finally {
|
|
47
|
+
try {
|
|
48
|
+
if (mathContainers_1_1 && !mathContainers_1_1.done && (_a = mathContainers_1.return)) _a.call(mathContainers_1);
|
|
49
|
+
}
|
|
50
|
+
finally { if (e_1) throw e_1.error; }
|
|
51
|
+
}
|
|
52
|
+
return [3 /*break*/, 4];
|
|
53
|
+
case 3:
|
|
54
|
+
err_1 = _b.sent();
|
|
55
|
+
console.error('[addSpeechToRenderedMath] SRE processing error:', err_1);
|
|
56
|
+
return [3 /*break*/, 4];
|
|
57
|
+
case 4: return [2 /*return*/];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}); };
|
|
61
|
+
exports.addSpeechToRenderedMath = addSpeechToRenderedMath;
|
|
62
|
+
/**
|
|
63
|
+
* Read config from the global `window.MathpixSpeechConfig` if provided,
|
|
64
|
+
* otherwise fall back to `defaultConfig`.
|
|
65
|
+
*/
|
|
66
|
+
var getGlobalConfig = function () {
|
|
67
|
+
return window.MathpixSpeechConfig || defaultConfig;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Auto-add speech to rendered math elements.
|
|
71
|
+
* This function is meant to be called once on page load.
|
|
72
|
+
*/
|
|
73
|
+
var autoAddSpeech = function () {
|
|
74
|
+
var _a;
|
|
75
|
+
var config = getGlobalConfig();
|
|
76
|
+
var container = (_a = config.container) !== null && _a !== void 0 ? _a : document.body;
|
|
77
|
+
(0, exports.addSpeechToRenderedMath)(container).catch(function (err) {
|
|
78
|
+
console.error('[MathpixSpeech] autoAddSpeech failed:', err);
|
|
79
|
+
});
|
|
80
|
+
};
|
|
81
|
+
// Auto-add speech on DOMContentLoaded (browser only).
|
|
82
|
+
if ((0, utils_1.isBrowser)()) {
|
|
83
|
+
if (document.readyState === 'loading') {
|
|
84
|
+
document.addEventListener('DOMContentLoaded', autoAddSpeech, { once: true });
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
autoAddSpeech();
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Global API exposed for integrators (optional usage).
|
|
91
|
+
* - `addSpeechToRenderedMath`: add speech to already-rendered SVG math
|
|
92
|
+
*/
|
|
93
|
+
window.MathpixSpeech = {
|
|
94
|
+
addSpeechToRenderedMath: exports.addSpeechToRenderedMath
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=add-speech.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-speech.js","sourceRoot":"","sources":["../../src/browser/add-speech.ts"],"names":[],"mappings":";;;;AAAA,kDAAkD;AAClD,8BAAkD;AAClD,iCAAoC;AAOpC,IAAM,aAAa,GAAwB,EAAE,CAAC;AAE9C;;;;;;;;;;;GAWG;AACI,IAAM,uBAAuB,GAAG,UAAO,SAAuB;;;;;;gBAC7D,IAAI,GAAgB,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,QAAQ,CAAC,IAAI,CAAC;;;;gBAGvC,qBAAM,IAAA,0BAAY,GAAE,EAAA;;gBAA1B,GAAG,GAAG,SAAoB;gBAChC,IAAI,CAAC,GAAG,EAAE;oBACR,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;oBAC5D,sBAAO;iBACR;gBAEK,cAAc,GAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC;;oBAErF,KAAqB,mBAAA,iBAAA,cAAc,CAAA,wHAAE;wBAA1B,MAAM;wBACf,IAAA,8BAAwB,EAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;qBACjD;;;;;;;;;;;;gBAED,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAG,CAAC,CAAC;;;;;KAEzE,CAAC;AAlBW,QAAA,uBAAuB,2BAkBlC;AAEF;;;GAGG;AACH,IAAM,eAAe,GAAG;IACtB,OAAS,MAAc,CAAC,mBAA2C,IAAI,aAAa,CAAC;AACvF,CAAC,CAAC;AAEF;;;GAGG;AACH,IAAM,aAAa,GAAG;;IACpB,IAAM,MAAM,GAAwB,eAAe,EAAE,CAAC;IACtD,IAAM,SAAS,GAAgB,MAAA,MAAM,CAAC,SAAS,mCAAI,QAAQ,CAAC,IAAI,CAAC;IACjE,IAAA,+BAAuB,EAAC,SAAS,CAAC,CAAC,KAAK,CAAC,UAAC,GAAG;QAC3C,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,sDAAsD;AACtD,IAAI,IAAA,iBAAS,GAAE,EAAE;IACf,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;QACrC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9E;SAAM;QACL,aAAa,EAAE,CAAC;KACjB;IACD;;;OAGG;IACF,MAAc,CAAC,aAAa,GAAG;QAC9B,uBAAuB,iCAAA;KACxB,CAAC;CACH"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TOutputMath } from "../mathpix-markdown-model";
|
|
2
|
+
export interface MathpixAccessibilityConfig {
|
|
3
|
+
/** Expose MathJax assistive MathML for screen readers */
|
|
4
|
+
assistive_mml?: boolean;
|
|
5
|
+
/** Add aria-label speech string generated by SRE */
|
|
6
|
+
include_speech?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface MathpixRenderConfig {
|
|
9
|
+
accessibility: MathpixAccessibilityConfig;
|
|
10
|
+
outMath: TOutputMath;
|
|
11
|
+
/** Container width used for layout metrics (cwidth) */
|
|
12
|
+
width?: number;
|
|
13
|
+
previewUuid?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Typeset MathJax math inside a container element.
|
|
17
|
+
* Searches for `.math-inline` and `.math-block`, detects whether each node contains pure MathML or TeX,
|
|
18
|
+
* and replaces its inner HTML with MathJax output.
|
|
19
|
+
*/
|
|
20
|
+
export declare const renderMathInElement: (container: HTMLElement, config?: Partial<MathpixRenderConfig>) => Promise<void>;
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderMathInElement = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var mathjax_1 = require("../mathjax");
|
|
6
|
+
var sre_browser_1 = require("../sre/sre-browser");
|
|
7
|
+
var utils_1 = require("./utils");
|
|
8
|
+
var RE_TEX_DISPLAY_DOLLARS = /^\$\$[\s\S]*\$\$$/;
|
|
9
|
+
var RE_TEX_DISPLAY_BRACKETS = /^\\\[[\s\S]*\\\]$/;
|
|
10
|
+
var RE_TEX_INLINE_PARENS = /^\\\([\s\S]*\\\)$/;
|
|
11
|
+
var RE_TEX_INLINE_DOLLAR = /^\$[\s\S]*\$$/;
|
|
12
|
+
var RE_TEX_ENV_WHOLE = /^\\begin\{[^}]+\}[\s\S]*\\end\{[^}]+\}$/;
|
|
13
|
+
var defaultConfig = {
|
|
14
|
+
accessibility: {
|
|
15
|
+
assistive_mml: true,
|
|
16
|
+
include_speech: false
|
|
17
|
+
},
|
|
18
|
+
outMath: {
|
|
19
|
+
output_format: "svg",
|
|
20
|
+
include_svg: true
|
|
21
|
+
},
|
|
22
|
+
width: 1200
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Returns true if the element appears to be already typeset by Mathpix/MathJax.
|
|
26
|
+
* Used to prevent double-rendering during autorender passes.
|
|
27
|
+
*
|
|
28
|
+
* Heuristics:
|
|
29
|
+
* - Prefer an explicit marker attribute set by our renderer.
|
|
30
|
+
* - Otherwise detect common MathJax output containers/markers.
|
|
31
|
+
*/
|
|
32
|
+
var isAlreadyRenderedMath = function (el) {
|
|
33
|
+
// Fast & explicit: our own marker.
|
|
34
|
+
if (el.hasAttribute('data-mathpix-typeset'))
|
|
35
|
+
return true;
|
|
36
|
+
// Single DOM query for common MathJax output.
|
|
37
|
+
var alreadyRenderedSelector = [
|
|
38
|
+
'mjx-container',
|
|
39
|
+
'mjx-container[jax]',
|
|
40
|
+
'mjx-assistive-mml',
|
|
41
|
+
'[data-mjx-container]',
|
|
42
|
+
'.mjx-container',
|
|
43
|
+
'.MathJax', // common class used by MathJax output
|
|
44
|
+
].join(',');
|
|
45
|
+
return el.querySelector(alreadyRenderedSelector) !== null;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Returns true if the element contains exactly one meaningful child node and it is a MathML <math> element.
|
|
49
|
+
* Example accepted structure:
|
|
50
|
+
* <span class="math-block"><math xmlns="http://www.w3.org/1998/Math/MathML">...</math></span>
|
|
51
|
+
*/
|
|
52
|
+
var isOnlyMathMLElement = function (el) {
|
|
53
|
+
var children = Array.from(el.childNodes).filter(function (n) { var _a; return !(n.nodeType === Node.TEXT_NODE && !((_a = n.textContent) !== null && _a !== void 0 ? _a : '').trim()); });
|
|
54
|
+
return children.length === 1 &&
|
|
55
|
+
children[0].nodeType === Node.ELEMENT_NODE &&
|
|
56
|
+
children[0].tagName.toLowerCase() === 'math';
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Extracts the MathML markup from the given element and determines
|
|
60
|
+
* whether it should be treated as display (block) math.
|
|
61
|
+
*
|
|
62
|
+
* Display mode is inferred from:
|
|
63
|
+
* - the MathML `display="block"` attribute, or
|
|
64
|
+
* - a wrapper element having the `math-block` CSS class.
|
|
65
|
+
*/
|
|
66
|
+
var getMathMLString = function (el) {
|
|
67
|
+
var mathEl = el.querySelector('math');
|
|
68
|
+
var displayAttr = mathEl === null || mathEl === void 0 ? void 0 : mathEl.getAttribute('display');
|
|
69
|
+
var display = displayAttr === 'block' || el.classList.contains('math-block');
|
|
70
|
+
return { mathml: mathEl.outerHTML, display: display };
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* If the input string is entirely wrapped in a single pair of outer TeX math delimiters,
|
|
74
|
+
* strips those outer delimiters and returns the inner TeX plus an inferred display mode.
|
|
75
|
+
* Returns null if the input is not fully wrapped.
|
|
76
|
+
*/
|
|
77
|
+
var stripOuterMathDelimitersIfWhole = function (raw) {
|
|
78
|
+
var text = (raw !== null && raw !== void 0 ? raw : '').trim();
|
|
79
|
+
if (!text)
|
|
80
|
+
return null;
|
|
81
|
+
// $$...$$
|
|
82
|
+
if (RE_TEX_DISPLAY_DOLLARS.test(text)) {
|
|
83
|
+
return { tex: text.slice(2, -2).trim(), display: true };
|
|
84
|
+
}
|
|
85
|
+
// \[...\]
|
|
86
|
+
if (RE_TEX_DISPLAY_BRACKETS.test(text)) {
|
|
87
|
+
return { tex: text.slice(2, -2).trim(), display: true };
|
|
88
|
+
}
|
|
89
|
+
// \(...\)
|
|
90
|
+
if (RE_TEX_INLINE_PARENS.test(text)) {
|
|
91
|
+
return { tex: text.slice(2, -2).trim(), display: false };
|
|
92
|
+
}
|
|
93
|
+
// $...$ (but not $$...$$)
|
|
94
|
+
if (RE_TEX_INLINE_DOLLAR.test(text) && !(text.startsWith('$$') && text.endsWith('$$'))) {
|
|
95
|
+
return { tex: text.slice(1, -1).trim(), display: false };
|
|
96
|
+
}
|
|
97
|
+
// \begin{...}...\end{...} (whole string)
|
|
98
|
+
if (RE_TEX_ENV_WHOLE.test(text)) {
|
|
99
|
+
return { tex: text, display: true };
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Decides whether a given element should be typeset as math.
|
|
105
|
+
* - If the element contains a single MathML node (<math>...</math>) -> returns a MathML target.
|
|
106
|
+
* - If the element already contains rendered math (SVG/MathJax containers) -> returns null.
|
|
107
|
+
* - If the element contains non-trivial child elements (except <br>) -> returns null.
|
|
108
|
+
* - Otherwise, if its text is fully wrapped in TeX math delimiters -> returns a TeX target.
|
|
109
|
+
*/
|
|
110
|
+
var shouldTypesetNode = function (el) {
|
|
111
|
+
var _a;
|
|
112
|
+
// 0) Pure MathML input (render it)
|
|
113
|
+
if (isOnlyMathMLElement(el)) {
|
|
114
|
+
var _b = getMathMLString(el), mathml = _b.mathml, display = _b.display;
|
|
115
|
+
return {
|
|
116
|
+
kind: 'mathml',
|
|
117
|
+
mathml: mathml,
|
|
118
|
+
display: display
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
// 1) Already rendered (svg/mjx-container/etc.) -> skip
|
|
122
|
+
if (isAlreadyRenderedMath(el)) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
// 2) Contains child elements other than <br> -> skip
|
|
126
|
+
var hasNonTrivialChildElements = Array.from(el.childNodes).some(function (node) {
|
|
127
|
+
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
128
|
+
return false;
|
|
129
|
+
return node.tagName.toLowerCase() !== 'br';
|
|
130
|
+
});
|
|
131
|
+
if (hasNonTrivialChildElements) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
// 3) Otherwise, check for fully-wrapped TeX delimiters
|
|
135
|
+
var text = (_a = el.textContent) !== null && _a !== void 0 ? _a : '';
|
|
136
|
+
var match = stripOuterMathDelimitersIfWhole(text);
|
|
137
|
+
if (!match) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
kind: 'tex',
|
|
142
|
+
tex: match.tex,
|
|
143
|
+
display: match.display
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Resolves accessibility feature flags from user config.
|
|
148
|
+
* Default behavior: if config is missing or null, both flags are disabled
|
|
149
|
+
* (accessibility must be explicitly opted-in via config).
|
|
150
|
+
* Note: in normal usage this is always called with the merged config object
|
|
151
|
+
* from renderMathInElement, so the null path is a safety fallback.
|
|
152
|
+
*/
|
|
153
|
+
var resolveA11yFlags = function (a11y) {
|
|
154
|
+
var cfg = (a11y && typeof a11y === 'object') ? a11y : null;
|
|
155
|
+
if (!cfg) {
|
|
156
|
+
return { assistiveMml: false, includeSpeech: false };
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
assistiveMml: cfg.assistive_mml === true,
|
|
160
|
+
includeSpeech: cfg.include_speech === true,
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Builds MathJax accessibility options based on user config.
|
|
165
|
+
* Returns `undefined` if all accessibility features are disabled.
|
|
166
|
+
*/
|
|
167
|
+
var buildAccessibilityOptions = function (a11y) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
168
|
+
var _a, assistiveMml, includeSpeech, opts, sre;
|
|
169
|
+
return tslib_1.__generator(this, function (_b) {
|
|
170
|
+
switch (_b.label) {
|
|
171
|
+
case 0:
|
|
172
|
+
_a = resolveA11yFlags(a11y), assistiveMml = _a.assistiveMml, includeSpeech = _a.includeSpeech;
|
|
173
|
+
// If all features are disabled, return undefined to avoid enabling a11y pipeline.
|
|
174
|
+
if (!assistiveMml && !includeSpeech) {
|
|
175
|
+
return [2 /*return*/, undefined];
|
|
176
|
+
}
|
|
177
|
+
opts = {};
|
|
178
|
+
if (assistiveMml) {
|
|
179
|
+
opts.assistiveMml = true;
|
|
180
|
+
}
|
|
181
|
+
if (!includeSpeech) return [3 /*break*/, 2];
|
|
182
|
+
return [4 /*yield*/, (0, sre_browser_1.loadSreAsync)()];
|
|
183
|
+
case 1:
|
|
184
|
+
sre = _b.sent();
|
|
185
|
+
if (sre) {
|
|
186
|
+
opts.sre = sre;
|
|
187
|
+
}
|
|
188
|
+
_b.label = 2;
|
|
189
|
+
case 2: return [2 /*return*/, opts];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}); };
|
|
193
|
+
/**
|
|
194
|
+
* Replace element contents with rendered math HTML.
|
|
195
|
+
* Note: this will remove existing child nodes inside `el` (but keeps the element itself).
|
|
196
|
+
*/
|
|
197
|
+
var setInnerHTML = function (el, html) {
|
|
198
|
+
el.innerHTML = html;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Typeset MathJax math inside a container element.
|
|
202
|
+
* Searches for `.math-inline` and `.math-block`, detects whether each node contains pure MathML or TeX,
|
|
203
|
+
* and replaces its inner HTML with MathJax output.
|
|
204
|
+
*/
|
|
205
|
+
var renderMathInElement = function (container, config) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
206
|
+
var cfg, outMath, cwidth, mathNodes, accessibility, mathNodes_1, mathNodes_1_1, mathEl, target, metric, result, isInline, isBlock, width, widthEx;
|
|
207
|
+
var e_1, _a;
|
|
208
|
+
return tslib_1.__generator(this, function (_b) {
|
|
209
|
+
switch (_b.label) {
|
|
210
|
+
case 0:
|
|
211
|
+
cfg = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, defaultConfig), config), { accessibility: tslib_1.__assign(tslib_1.__assign({}, defaultConfig.accessibility), config === null || config === void 0 ? void 0 : config.accessibility), outMath: tslib_1.__assign(tslib_1.__assign({}, defaultConfig.outMath), config === null || config === void 0 ? void 0 : config.outMath) });
|
|
212
|
+
outMath = cfg.outMath;
|
|
213
|
+
cwidth = cfg.width && cfg.width > 0 ? cfg.width : 1200;
|
|
214
|
+
mathNodes = Array.from(container.querySelectorAll('.math-inline, .math-block'));
|
|
215
|
+
return [4 /*yield*/, buildAccessibilityOptions(cfg.accessibility)];
|
|
216
|
+
case 1:
|
|
217
|
+
accessibility = _b.sent();
|
|
218
|
+
// Start a new "render session" so a11y ids (aria-labelledby) can be generated consistently.
|
|
219
|
+
mathjax_1.MathJax.beginRender(cfg === null || cfg === void 0 ? void 0 : cfg.previewUuid);
|
|
220
|
+
mathjax_1.MathJax.Reset();
|
|
221
|
+
try {
|
|
222
|
+
for (mathNodes_1 = tslib_1.__values(mathNodes), mathNodes_1_1 = mathNodes_1.next(); !mathNodes_1_1.done; mathNodes_1_1 = mathNodes_1.next()) {
|
|
223
|
+
mathEl = mathNodes_1_1.value;
|
|
224
|
+
target = shouldTypesetNode(mathEl);
|
|
225
|
+
if (!target)
|
|
226
|
+
continue;
|
|
227
|
+
try {
|
|
228
|
+
metric = { cwidth: cwidth };
|
|
229
|
+
result = target.kind === 'mathml'
|
|
230
|
+
? mathjax_1.MathJax.TypesetMathML(target.mathml, {
|
|
231
|
+
display: target.display,
|
|
232
|
+
metric: metric,
|
|
233
|
+
outMath: outMath,
|
|
234
|
+
accessibility: accessibility,
|
|
235
|
+
})
|
|
236
|
+
: mathjax_1.MathJax.Typeset(target.tex, {
|
|
237
|
+
display: target.display,
|
|
238
|
+
metric: metric,
|
|
239
|
+
outMath: outMath,
|
|
240
|
+
accessibility: accessibility,
|
|
241
|
+
});
|
|
242
|
+
// Replace content with MathJax output.
|
|
243
|
+
setInnerHTML(mathEl, result.html);
|
|
244
|
+
// Apply width-related attributes (matching server-side rendering behavior).
|
|
245
|
+
if (result === null || result === void 0 ? void 0 : result.data) {
|
|
246
|
+
isInline = mathEl.classList.contains('math-inline');
|
|
247
|
+
isBlock = mathEl.classList.contains('math-block');
|
|
248
|
+
width = result.data.width;
|
|
249
|
+
widthEx = result.data.widthEx;
|
|
250
|
+
// For block math: data-width="full" when the equation is full-width
|
|
251
|
+
if (isBlock && width === 'full') {
|
|
252
|
+
mathEl.setAttribute('data-width', 'full');
|
|
253
|
+
}
|
|
254
|
+
// For inline math: data-overflow="visible" when the equation is very narrow
|
|
255
|
+
if (isInline && typeof widthEx === 'number' && widthEx < 2) {
|
|
256
|
+
mathEl.setAttribute('data-overflow', 'visible');
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// Mark as already typeset to avoid re-processing on future passes.
|
|
260
|
+
mathEl.setAttribute('data-mathpix-typeset', 'true');
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
// Do not fail the whole render if one formula is broken.
|
|
264
|
+
// Consider logging or attaching an error marker if you want debugging visibility.
|
|
265
|
+
console.error('[renderMathInElement] Failed to typeset node:', err, mathEl);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
270
|
+
finally {
|
|
271
|
+
try {
|
|
272
|
+
if (mathNodes_1_1 && !mathNodes_1_1.done && (_a = mathNodes_1.return)) _a.call(mathNodes_1);
|
|
273
|
+
}
|
|
274
|
+
finally { if (e_1) throw e_1.error; }
|
|
275
|
+
}
|
|
276
|
+
return [2 /*return*/];
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}); };
|
|
280
|
+
exports.renderMathInElement = renderMathInElement;
|
|
281
|
+
/**
|
|
282
|
+
* Read config from the global `window.MathpixRenderConfig` if provided,
|
|
283
|
+
* otherwise fall back to `defaultConfig`.
|
|
284
|
+
*
|
|
285
|
+
* Note: we intentionally read config at execution time (not module init time)
|
|
286
|
+
* so apps can set `window.MathpixRenderConfig` before DOMContentLoaded.
|
|
287
|
+
*/
|
|
288
|
+
var getGlobalConfig = function () {
|
|
289
|
+
return window.MathpixRenderConfig || defaultConfig;
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* Auto-render math inside a root element (defaults to document.body).
|
|
293
|
+
* This function is meant to be called once on page load.
|
|
294
|
+
*/
|
|
295
|
+
var autoRender = function () {
|
|
296
|
+
// Prefer rendering inside a narrower scope if the integrator provides it.
|
|
297
|
+
var config = getGlobalConfig();
|
|
298
|
+
(0, exports.renderMathInElement)(document.body, config).catch(function (err) {
|
|
299
|
+
console.error('[MathpixRender] autoRender failed:', err);
|
|
300
|
+
});
|
|
301
|
+
};
|
|
302
|
+
// Auto-render on DOMContentLoaded (browser only).
|
|
303
|
+
if ((0, utils_1.isBrowser)()) {
|
|
304
|
+
// If DOM isn't ready, wait once; otherwise run immediately.
|
|
305
|
+
if (document.readyState === 'loading') {
|
|
306
|
+
document.addEventListener('DOMContentLoaded', autoRender, { once: true });
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
autoRender();
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Global API exposed for integrators (optional usage).
|
|
313
|
+
* - `renderMathInElement`: render MathML/LaTeX content to SVG
|
|
314
|
+
*/
|
|
315
|
+
window.MathpixRender = {
|
|
316
|
+
renderMathInElement: exports.renderMathInElement
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=auto-render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-render.js","sourceRoot":"","sources":["../../src/browser/auto-render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isBrowser = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Returns true when running in a browser environment (not SSR / Node).
|
|
6
|
+
*/
|
|
7
|
+
var isBrowser = function () {
|
|
8
|
+
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
9
|
+
};
|
|
10
|
+
exports.isBrowser = isBrowser;
|
|
11
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/browser/utils.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACI,IAAM,SAAS,GAAG;IACvB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,CAAC;AAC1E,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB"}
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.menuStyle = void 0;
|
|
4
4
|
var consts_1 = require("./menu/consts");
|
|
5
|
+
var colors_1 = require("../styles/colors");
|
|
5
6
|
var menuStyle = function () {
|
|
6
|
-
return "\n
|
|
7
|
+
return "\n.mmd-menu {\n max-width: ".concat(consts_1.maxWidthMenu, "px;\n position: absolute;\n background-color: white;\n color: black;\n width: auto;\n padding: ").concat(consts_1.paddingMenu, "px 0;\n border: 1px solid ").concat(colors_1.COLOR_MENU_BORDER, ";\n margin: 0;\n cursor: default;\n font: menu;\n text-align: left;\n text-indent: 0;\n text-transform: none;\n line-height: normal;\n letter-spacing: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n float: none;\n z-index: 201;\n border-radius: 5px;\n -webkit-border-radius: 5px;\n -moz-border-radius: 5px;\n -khtml-border-radius: 5px;\n box-shadow: 0 10px 20px ").concat(colors_1.COLOR_MENU_SHADOW, ";\n -webkit-box-shadow: 0 10px 20px ").concat(colors_1.COLOR_MENU_SHADOW, ";\n -moz-box-shadow: 0 10px 20px ").concat(colors_1.COLOR_MENU_SHADOW, ";\n -khtml-box-shadow: 0 10px 20px ").concat(colors_1.COLOR_MENU_SHADOW, ";\n}\n.mmd-menu:focus { outline: none; }\n.mmd-menu.mmd-menu-sm {\n max-width: 100vw;\n padding-bottom: ").concat(consts_1.paddingMenuBottomSmall, "px;\n border-radius: 0;\n -webkit-border-radius: 0;\n -moz-border-radius: 0;\n -khtml-border-radius: 0;\n}\n.mmd-menu-item-icon {\n color: ").concat(colors_1.COLOR_BODY_TEXT, ";\n margin-left: auto;\n align-items: center;\n display: none;\n flex-shrink: 0;\n}\n.mmd-menu-item {\n padding: 8px 1.25rem;\n display: flex;\n background: transparent;\n height: ").concat(consts_1.heightMenuItem, "px;\n max-height: ").concat(consts_1.heightMenuItem, "px;\n}\n.mmd-menu-item:focus { outline: none; }\n.mmd-menu-item.active {\n background-color: ").concat(colors_1.COLOR_MENU_ITEM_ACTIVE_BG, ";\n}\n.mmd-menu-item.active .mmd-menu-item-icon {\n display: flex;\n}\n.mmd-menu-item-container {\n overflow: hidden;\n}\n.mmd-menu-item-title {\n color: ").concat(colors_1.COLOR_BODY_TEXT, ";\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n font-size: 14px;\n line-height: 20px;\n}\n.mmd-menu-item-value {\n color: ").concat(colors_1.COLOR_MENU_ITEM_VALUE, ";\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n font-size: 12px;\n line-height: 16px;\n}\nhtml[data-theme=\"dark\"] .mmd-menu-item-title {\n color: ").concat(colors_1.COLOR_DARK_MENU_TITLE, ";\n}\nhtml[data-theme=\"dark\"] .mmd-menu-item.active .mmd-menu-item-title {\n color: ").concat(colors_1.COLOR_BODY_TEXT, ";\n}\nhtml[data-theme=\"dark\"] .mmd-menu {\n background-color: ").concat(colors_1.COLOR_DARK_MENU_BG, ";\n}\n.mmd-context-menu-overlay {\n background: ").concat(colors_1.COLOR_MENU_OVERLAY, ";\n}\n");
|
|
7
8
|
};
|
|
8
9
|
exports.menuStyle = menuStyle;
|
|
9
10
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/contex-menu/styles.ts"],"names":[],"mappings":";;;AAAA,wCAAkG;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/contex-menu/styles.ts"],"names":[],"mappings":";;;AAAA,wCAAkG;AAClG,2CAI0B;AAEnB,IAAM,SAAS,GAAG;IACvB,OAAO,sCAEM,qBAAY,iHAKd,oBAAW,wCACF,0BAAiB,uaAkBX,0BAAiB,kDACT,0BAAiB,+CACpB,0BAAiB,iDACf,0BAAiB,uHAKhC,+BAAsB,6JAO/B,wBAAe,yMAUd,uBAAc,gCACV,uBAAc,2GAIR,kCAAyB,0KASpC,wBAAe,uKAQf,8BAAqB,iMAQrB,8BAAqB,oGAGrB,wBAAe,8EAGJ,2BAAkB,8DAGxB,2BAAkB,WAEjC,CAAA;AACD,CAAC,CAAC;AA9FW,QAAA,SAAS,aA8FpB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.clipboardCopyStyles = void 0;
|
|
4
|
-
var
|
|
4
|
+
var colors_1 = require("../styles/colors");
|
|
5
|
+
var clipboardCopyStyles = function () { return "\n.ClipboardButton {\n padding: 0;\n margin: 0.5rem;\n display: inline-block;\n cursor: pointer;\n color: ".concat(colors_1.COLOR_CLIPBOARD_TEXT, ";\n background: ").concat(colors_1.COLOR_CLIPBOARD_BG, ";\n border-radius: 6px;\n border: 1px solid ").concat(colors_1.COLOR_CLIPBOARD_BORDER, ";\n box-shadow: ").concat(colors_1.COLOR_CLIPBOARD_SHADOW, " 0 1px 0 0, ").concat(colors_1.COLOR_CLIPBOARD_SHADOW_INSET, " 0 1px 0 0 inset;\n position: relative;\n}\n.ClipboardButton:hover {\n background-color: ").concat(colors_1.COLOR_CLIPBOARD_HOVER_BG, ";\n border-color: ").concat(colors_1.COLOR_CLIPBOARD_BORDER, ";\n transition-duration: .1s;\n}\ntd .mmd-clipboard-copy-container {\n line-height: 0;\n}\ntd .ClipboardButton {\n margin: 1px;\n line-height: 0;\n}\ntd .ClipboardButton .mmd-clipboard-icon {\n margin: 1px !important;\n transform: scale(0.6);\n}\n.mmd-clipboard-icon {\n fill: currentColor;\n vertical-align: text-bottom;\n}\n.mmd-clipboard-copy-icon {\n color: ").concat(colors_1.COLOR_CLIPBOARD_COPY_ICON, ";\n}\n.mmd-clipboard-check-icon {\n color: ").concat(colors_1.COLOR_CLIPBOARD_CHECK_ICON, ";\n}\n.mmd-tooltipped-no-delay:hover::before,\n.mmd-tooltipped-no-delay:hover::after {\n animation-delay: 0s;\n}\n.mmd-tooltipped:hover::before,\n.mmd-tooltipped:hover::after {\n display: inline-block;\n text-decoration: none;\n animation-name: tooltip-appear;\n animation-duration: .1s;\n animation-fill-mode: forwards;\n animation-timing-function: ease-in;\n animation-delay: .4s;\n}\n.mmd-tooltipped-w::before {\n top: 50%;\n bottom: 50%;\n left: -7px;\n margin-top: -6px;\n border-left-color: ").concat(colors_1.COLOR_CLIPBOARD_TEXT, ";\n}\n.mmd-tooltipped::before {\n position: absolute;\n z-index: 1000001;\n display: none;\n width: 0;\n height: 0;\n color: ").concat(colors_1.COLOR_CLIPBOARD_TEXT, ";\n pointer-events: none;\n content: \"\";\n border: 6px solid transparent;\n opacity: 0;\n}\n.mmd-tooltipped-w::after {\n right: 100%;\n bottom: 50%;\n margin-right: 6px;\n transform: translateY(50%);\n}\n.mmd-tooltipped::after {\n position: absolute;\n z-index: 1000000;\n display: none;\n padding: 0.5em 0.75em;\n font: normal normal 11px/1.5 'CMU Serif', 'Georgia', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: subpixel-antialiased;\n color: white;\n text-align: center;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: break-word;\n white-space: pre;\n pointer-events: none;\n content: attr(aria-label);\n background: ").concat(colors_1.COLOR_CLIPBOARD_TEXT, ";\n border-radius: 6px;\n opacity: 0;\n}\n"); };
|
|
5
6
|
exports.clipboardCopyStyles = clipboardCopyStyles;
|
|
6
7
|
//# sourceMappingURL=clipboard-copy-styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard-copy-styles.js","sourceRoot":"","sources":["../../src/copy-to-clipboard/clipboard-copy-styles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"clipboard-copy-styles.js","sourceRoot":"","sources":["../../src/copy-to-clipboard/clipboard-copy-styles.ts"],"names":[],"mappings":";;;AAAA,2CAI0B;AAEnB,IAAM,mBAAmB,GAAG,cAAM,OAAA,yHAM9B,6BAAoB,8BACf,2BAAkB,2DAEZ,+BAAsB,8BAC5B,+BAAsB,yBAAe,qCAA4B,wGAI3D,iCAAwB,gCAC5B,+BAAsB,gYAmB7B,kCAAyB,yDAGzB,mCAA0B,2gBAqBd,6BAAoB,gJAQhC,6BAAoB,4tBA6Bf,6BAAoB,iDAInC,EAnGwC,CAmGxC,CAAC;AAnGW,QAAA,mBAAmB,uBAmG9B"}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Converts a math token into HTML and attaches MathJax metadata to the token.
|
|
3
|
+
* Also extracts equation labels and stores them in the shared labels list.
|
|
4
|
+
*/
|
|
2
5
|
export declare const convertMathToHtml: (state: any, token: any, options: any) => any;
|