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.
Files changed (61) hide show
  1. package/README.md +146 -4
  2. package/doc/changelog.md +64 -0
  3. package/es5/browser/add-speech.js +1 -0
  4. package/es5/browser/auto-render.js +33 -0
  5. package/es5/bundle.js +5 -5
  6. package/es5/index.js +5 -5
  7. package/lib/browser/add-speech.d.ts +17 -0
  8. package/lib/browser/add-speech.js +97 -0
  9. package/lib/browser/add-speech.js.map +1 -0
  10. package/lib/browser/auto-render.d.ts +20 -0
  11. package/lib/browser/auto-render.js +319 -0
  12. package/lib/browser/auto-render.js.map +1 -0
  13. package/lib/browser/utils.d.ts +4 -0
  14. package/lib/browser/utils.js +11 -0
  15. package/lib/browser/utils.js.map +1 -0
  16. package/lib/contex-menu/styles.js +2 -1
  17. package/lib/contex-menu/styles.js.map +1 -1
  18. package/lib/copy-to-clipboard/clipboard-copy-styles.js +2 -1
  19. package/lib/copy-to-clipboard/clipboard-copy-styles.js.map +1 -1
  20. package/lib/markdown/common/convert-math-to-html.d.ts +4 -1
  21. package/lib/markdown/common/convert-math-to-html.js +174 -93
  22. package/lib/markdown/common/convert-math-to-html.js.map +1 -1
  23. package/lib/markdown/highlight/highlight-math-token.js +5 -3
  24. package/lib/markdown/highlight/highlight-math-token.js.map +1 -1
  25. package/lib/mathjax/index.d.ts +6 -0
  26. package/lib/mathjax/index.js +103 -33
  27. package/lib/mathjax/index.js.map +1 -1
  28. package/lib/mathpix-markdown-model/index.d.ts +35 -5
  29. package/lib/mathpix-markdown-model/index.js +106 -50
  30. package/lib/mathpix-markdown-model/index.js.map +1 -1
  31. package/lib/sre/index.d.ts +8 -0
  32. package/lib/sre/index.js +38 -20
  33. package/lib/sre/index.js.map +1 -1
  34. package/lib/sre/sre-browser.d.ts +16 -0
  35. package/lib/sre/sre-browser.js +26 -1
  36. package/lib/sre/sre-browser.js.map +1 -1
  37. package/lib/styles/colors.d.ts +63 -0
  38. package/lib/styles/colors.js +68 -0
  39. package/lib/styles/colors.js.map +1 -0
  40. package/lib/styles/helpers.js +22 -0
  41. package/lib/styles/helpers.js.map +1 -0
  42. package/lib/styles/index.d.ts +4 -3
  43. package/lib/styles/index.js +45 -7
  44. package/lib/styles/index.js.map +1 -1
  45. package/lib/styles/styles-code.d.ts +1 -1
  46. package/lib/styles/styles-code.js +6 -1
  47. package/lib/styles/styles-code.js.map +1 -1
  48. package/lib/styles/styles-container.js +2 -1
  49. package/lib/styles/styles-container.js.map +1 -1
  50. package/lib/styles/styles-lists.d.ts +1 -1
  51. package/lib/styles/styles-lists.js +1 -1
  52. package/lib/styles/styles-lists.js.map +1 -1
  53. package/lib/styles/styles-tabular.d.ts +1 -1
  54. package/lib/styles/styles-tabular.js +5 -2
  55. package/lib/styles/styles-tabular.js.map +1 -1
  56. package/package.json +2 -2
  57. package/pr-specs/2026-01-html-math-output-options.md +529 -0
  58. package/pr-specs/2026-03-mmd-css-scoping.md +267 -0
  59. package/lib/styles/halpers.js +0 -13
  60. package/lib/styles/halpers.js.map +0 -1
  61. /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":";;;;AAAA,sCAAqC;AACrC,kDAAkD;AAElD,iCAAoC;AAEpC,IAAM,sBAAsB,GAAW,mBAAmB,CAAC;AAC3D,IAAM,uBAAuB,GAAW,mBAAmB,CAAC;AAC5D,IAAM,oBAAoB,GAAW,mBAAmB,CAAC;AACzD,IAAM,oBAAoB,GAAW,eAAe,CAAC;AACrD,IAAM,gBAAgB,GAAW,yCAAyC,CAAC;AAiB3E,IAAM,aAAa,GAAwB;IACzC,aAAa,EAAE;QACb,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,KAAK;KACtB;IACD,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,IAAI;KAClB;IACD,KAAK,EAAE,IAAI;CACZ,CAAC;AAQF;;;;;;;GAOG;AACH,IAAM,qBAAqB,GAAG,UAAC,EAAW;IACxC,mCAAmC;IACnC,IAAI,EAAE,CAAC,YAAY,CAAC,sBAAsB,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,8CAA8C;IAC9C,IAAM,uBAAuB,GAAG;QAC9B,eAAe;QACf,oBAAoB;QACpB,mBAAmB;QACnB,sBAAsB;QACtB,gBAAgB;QAChB,UAAU,EAAuB,sCAAsC;KACxE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,EAAE,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC;AAC5D,CAAC,CAAC;AAEF;;;;GAIG;AACH,IAAM,mBAAmB,GAAG,UAAC,EAAe;IAC1C,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,MAAM,CAC/C,UAAC,CAAC,YAAK,OAAA,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,MAAA,CAAC,CAAC,WAAW,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA,EAAA,CACzE,CAAC;IACF,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC1B,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;QACzC,QAAQ,CAAC,CAAC,CAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;AAC9D,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,IAAM,eAAe,GAAG,UAAC,EAAe;IACtC,IAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAY,CAAC;IACnD,IAAM,WAAW,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACpD,IAAM,OAAO,GAAG,WAAW,KAAK,OAAO,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,SAAA,EAAE,CAAC;AAC/C,CAAC,CAAA;AAED;;;;GAIG;AACH,IAAM,+BAA+B,GAAG,UAAC,GAAW;IAClD,IAAM,IAAI,GAAW,CAAC,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,UAAU;IACV,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACrC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACzD;IACD,UAAU;IACV,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACtC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACzD;IACD,UAAU;IACV,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAC1D;IACD,0BAA0B;IAC1B,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;QACtF,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAC1D;IACD,yCAAyC;IACzC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACrC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAA;AAED;;;;;;GAMG;AACH,IAAM,iBAAiB,GAAG,UAAC,EAAe;;IACxC,mCAAmC;IACnC,IAAI,mBAAmB,CAAC,EAAE,CAAC,EAAE;QACrB,IAAA,KAAsB,eAAe,CAAC,EAAE,CAAC,EAAvC,MAAM,YAAA,EAAE,OAAO,aAAwB,CAAC;QAChD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,QAAA;YACN,OAAO,SAAA;SACR,CAAC;KACH;IACD,uDAAuD;IACvD,IAAI,qBAAqB,CAAC,EAAE,CAAC,EAAE;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,qDAAqD;IACrD,IAAM,0BAA0B,GAAY,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAC,IAAI;QAC9E,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC;QACtD,OAAQ,IAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;IAC1D,CAAC,CAAC,CAAC;IACH,IAAI,0BAA0B,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,uDAAuD;IACvD,IAAM,IAAI,GAAW,MAAA,EAAE,CAAC,WAAW,mCAAI,EAAE,CAAC;IAC1C,IAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IACD,OAAO;QACL,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,IAAM,gBAAgB,GAAG,UAAC,IAAa;IACrC,IAAM,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAE,IAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,IAAI,CAAC,GAAG,EAAE;QACR,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;KACtD;IACD,OAAO;QACL,YAAY,EAAE,GAAG,CAAC,aAAa,KAAK,IAAI;QACxC,aAAa,EAAE,GAAG,CAAC,cAAc,KAAK,IAAI;KAC3C,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,IAAM,yBAAyB,GAAG,UAAO,IAAa;;;;;gBAC9C,KAAkC,gBAAgB,CAAC,IAAI,CAAC,EAAtD,YAAY,kBAAA,EAAE,aAAa,mBAAA,CAA4B;gBAC/D,kFAAkF;gBAClF,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,EAAE;oBACnC,sBAAO,SAAS,EAAC;iBAClB;gBACK,IAAI,GAAmB,EAAE,CAAC;gBAChC,IAAI,YAAY,EAAE;oBAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;iBAC1B;qBACG,aAAa,EAAb,wBAAa;gBACH,qBAAM,IAAA,0BAAY,GAAE,EAAA;;gBAA1B,GAAG,GAAG,SAAoB;gBAChC,IAAI,GAAG,EAAE;oBACP,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;iBAChB;;oBAEH,sBAAO,IAAI,EAAC;;;KACb,CAAA;AAED;;;GAGG;AACH,IAAM,YAAY,GAAG,UAAC,EAAe,EAAE,IAAY;IACjD,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,CAAC,CAAA;AAED;;;;GAIG;AACI,IAAM,mBAAmB,GAAG,UACjC,SAAsB,EACtB,MAAqC;;;;;;gBAE/B,GAAG,0DACJ,aAAa,GACb,MAAM,KACT,aAAa,wCAAO,aAAa,CAAC,aAAa,GAAK,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,GACzE,OAAO,wCAAO,aAAa,CAAC,OAAO,GAAK,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,IACxD,CAAC;gBACI,OAAO,GAAgB,GAAG,CAAC,OAAO,CAAC;gBACnC,MAAM,GAAW,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAE/D,SAAS,GAAG,KAAK,CAAC,IAAI,CAC1B,SAAS,CAAC,gBAAgB,CAAc,2BAA2B,CAAC,CACrE,CAAC;gBAEoC,qBAAM,yBAAyB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAA;;gBAAlF,aAAa,GAAmB,SAAkD;gBACxF,4FAA4F;gBAC5F,iBAAO,CAAC,WAAW,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,WAAW,CAAC,CAAC;gBACtC,iBAAO,CAAC,KAAK,EAAE,CAAC;;oBAChB,KAAqB,cAAA,iBAAA,SAAS,CAAA,+FAAE;wBAArB,MAAM;wBACT,MAAM,GAAkB,iBAAiB,CAAC,MAAM,CAAC,CAAC;wBACxD,IAAI,CAAC,MAAM;4BAAE,SAAS;wBACtB,IAAI;4BACI,MAAM,GAAG,EAAE,MAAM,QAAA,EAAE,CAAC;4BACpB,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ;gCACrC,CAAC,CAAC,iBAAO,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;oCACrC,OAAO,EAAE,MAAM,CAAC,OAAO;oCACvB,MAAM,QAAA;oCACN,OAAO,SAAA;oCACP,aAAa,eAAA;iCACd,CAAC;gCACF,CAAC,CAAC,iBAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;oCAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;oCACvB,MAAM,QAAA;oCACN,OAAO,SAAA;oCACP,aAAa,eAAA;iCACd,CAAC,CAAC;4BACL,uCAAuC;4BACvC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;4BAClC,4EAA4E;4BAC5E,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,EAAE;gCACV,QAAQ,GAAY,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gCAC7D,OAAO,GAAY,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gCAC3D,KAAK,GAAW,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gCAClC,OAAO,GAAW,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gCAC5C,oEAAoE;gCACpE,IAAI,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE;oCAC/B,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;iCAC3C;gCACD,4EAA4E;gCAC5E,IAAI,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE;oCAC1D,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;iCACjD;6BACF;4BACD,mEAAmE;4BACnE,MAAM,CAAC,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;yBACrD;wBAAC,OAAO,GAAG,EAAE;4BACZ,yDAAyD;4BACzD,kFAAkF;4BAClF,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;yBAC7E;qBACF;;;;;;;;;;;;KACF,CAAA;AAhEY,QAAA,mBAAmB,uBAgE/B;AAED;;;;;;GAMG;AACH,IAAM,eAAe,GAAG;IACtB,OAAS,MAAc,CAAC,mBAA2C,IAAI,aAAa,CAAC;AACvF,CAAC,CAAA;AAED;;;GAGG;AACH,IAAM,UAAU,GAAG;IACjB,0EAA0E;IAC1E,IAAM,MAAM,GAAwB,eAAe,EAAE,CAAC;IACtD,IAAA,2BAAmB,EAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,UAAC,GAAG;QACnD,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAA;AAED,kDAAkD;AAClD,IAAI,IAAA,iBAAS,GAAE,EAAE;IACf,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;QACrC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;KAC3E;SAAM;QACL,UAAU,EAAE,CAAC;KACd;IACD;;;OAGG;IACF,MAAc,CAAC,aAAa,GAAG;QAC9B,mBAAmB,6BAAA;KACpB,CAAC;CACH"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Returns true when running in a browser environment (not SSR / Node).
3
+ */
4
+ export declare const isBrowser: () => boolean;
@@ -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 .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 0px;\n border: 1px solid #E5E6EB;\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: 0px 10px 20px #808080;\n -webkit-box-shadow: 0px 10px 20px #808080;\n -moz-box-shadow: 0px 10px 20px #808080;\n -khtml-box-shadow: 0px 10px 20px #808080; \n }\n \n .mmd-menu:focus { outline: none; }\n \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\n .mmd-menu-item-icon {\n color: #1e2029;\n margin-left: auto;\n align-items: center;\n display: flex;\n flex-shrink: 0;\n display: none; \n }\n\n .mmd-menu-item {\n padding-bottom: 8px;\n padding-top: 8px;\n padding-left: 1.25rem;\n padding-right: 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\n .mmd-menu-item.active {\n background-color: #e1e0e5; \n }\n\n .mmd-menu-item.active .mmd-menu-item-icon {\n display: flex; \n }\n\n .mmd-menu-item-container {\n overflow: hidden; \n }\n\n .mmd-menu-item-title {\n color: #1e2029;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n font-size: 14px;\n line-height: 20px; \n }\n\n .mmd-menu-item-value {\n color: #7d829c;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n font-size: 12px;\n line-height: 16px; \n }\n \n html[data-theme=\"dark\"] .mmd-menu-item-title {\n color: #ebefe7;\n } \n html[data-theme=\"dark\"] .mmd-menu-item.active .mmd-menu-item-title {\n color: #1e2029;\n }\n html[data-theme=\"dark\"] .mmd-menu {\n background-color: #33363a;\n }\n \n .mmd-context-menu-overlay{\n background: rgba(0, 0, 0, 0.56);\n }\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;AAE3F,IAAM,SAAS,GAAG;IACvB,OAAO,0CAEQ,qBAAY,2HAKd,oBAAW,mwBA6BJ,+BAAsB,2eAuB9B,uBAAc,kCACV,uBAAc,i8BA+C7B,CAAA;AACH,CAAC,CAAC;AA7GW,QAAA,SAAS,aA6GpB"}
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 clipboardCopyStyles = function () { return "\n.ClipboardButton {\n padding: 0;\n margin: 0.5rem;\n display: inline-block;\n cursor: pointer;\n color: rgb(36, 41, 47);\n background: rgb(246, 248, 250);\n border-radius: 6px;\n border: 1px solid rgba(31, 35, 40, 0.15);\n box-shadow: rgba(31, 35, 40, 0.04) 0 1px 0 0, rgba(255, 255, 255, 0.25) 0 1px 0 0 inset;\n position: relative;\n}\n\n.ClipboardButton:hover {\n background-color: rgb(243, 244, 246);\n border-color: rgba(31, 35, 40, 0.15);\n transition-duration: .1s;\n}\n\ntd .mmd-clipboard-copy-container {\n line-height: 0;\n}\n\ntd .ClipboardButton {\n margin: 1px;\n line-height: 0;\n}\n\ntd .ClipboardButton .mmd-clipboard-icon {\n margin: 1px !important;\n transform: scale(0.6);\n}\n\n.mmd-clipboard-icon {\n fill: currentColor;\n vertical-align: text-bottom;\n}\n\n.mmd-clipboard-copy-icon {\n color: rgb(101, 109, 118);\n}\n.mmd-clipboard-check-icon {\n color: rgb(26, 127, 55);\n}\n\n.mmd-tooltipped-no-delay:hover::before,\n.mmd-tooltipped-no-delay:hover::after {\n animation-delay: 0s;\n}\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\n.mmd-tooltipped-w::before {\n top: 50%;\n bottom: 50%;\n left: -7px;\n margin-top: -6px;\n border-left-color: rgb(36, 41, 47);\n}\n\n.mmd-tooltipped::before {\n position: absolute;\n z-index: 1000001;\n display: none;\n width: 0;\n height: 0;\n color: rgb(36, 41, 47);\n pointer-events: none;\n content: \"\";\n border: 6px solid transparent;\n opacity: 0;\n}\n\n.mmd-tooltipped-w::after {\n right: 100%;\n bottom: 50%;\n margin-right: 6px;\n transform: translateY(50%);\n}\n\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: rgb(255, 255, 255);\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: rgb(36, 41, 47);\n border-radius: 6px;\n opacity: 0;\n}\n"; };
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":";;;AAAO,IAAM,mBAAmB,GAAG,cAAM,OAAA,g4EAgHxC,EAhHwC,CAgHxC,CAAC;AAhHW,QAAA,mBAAmB,uBAgH9B"}
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
- /** Perform math to conversion to html and get additional data from MathJax to pass it to render rules */
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;