From 8206e86f11c16b8f8304ef37af5c54fb45fd8e23 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 6 Jun 2026 20:27:57 +0000 Subject: [PATCH 01/22] Use top-level static MathJax import in LaTeX webview Replace deferred dynamic imports with a build-time side-effect import of mathjax/tex-svg.js (peer dependency of @prosemark/latex) so Vite fully bundles MathJax into webview.js before the webview loads. Co-authored-by: J. Simon Richard --- .changeset/latex-static-mathjax-import.md | 5 +++ .../latex-integration/src/webview/main.ts | 35 +++++++++++-------- 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 .changeset/latex-static-mathjax-import.md diff --git a/.changeset/latex-static-mathjax-import.md b/.changeset/latex-static-mathjax-import.md new file mode 100644 index 00000000..9082c9d1 --- /dev/null +++ b/.changeset/latex-static-mathjax-import.md @@ -0,0 +1,5 @@ +--- +'vscode-prosemark-latex-integration': patch +--- + +Load MathJax via a top-level static `import 'mathjax/tex-svg.js'` (peer dependency of `@prosemark/latex`) so Vite fully bundles it into the webview instead of deferring a dynamic import at setup time. diff --git a/apps/vscode-extensions/latex-integration/src/webview/main.ts b/apps/vscode-extensions/latex-integration/src/webview/main.ts index 2417e67d..25f2f2b3 100644 --- a/apps/vscode-extensions/latex-integration/src/webview/main.ts +++ b/apps/vscode-extensions/latex-integration/src/webview/main.ts @@ -7,38 +7,45 @@ import type { CallbackFromProcMap, WebviewVSCodeApiWithPostMessage, } from '@prosemark/vscode-extension-integrator/types'; +import { + latexMarkdownEditorExtensions, + latexMarkdownSyntaxTheme, +} from '@prosemark/latex'; import './style.css'; +// Peer dependency of @prosemark/latex; bundled into webview.js by Vite at build time. +import 'mathjax/tex-svg.js'; + +const latexExtensions = [ + ...latexMarkdownSyntaxTheme, + ...latexMarkdownEditorExtensions({ + mathJaxLoadMode: 'static-import', + output: 'svg', + }), +]; + let latexSetupDone = false; const procs: WebviewProcMap = { - setup: async () => { + setup: () => { const view = window.proseMark?.view; if (!view) { console.warn('[ProseMark] latex-integration setup: no view'); - return; + return Promise.resolve(); } if (latexSetupDone) { - return; + return Promise.resolve(); } + latexSetupDone = true; try { - // Bundle MathJax tex-svg into webview.js (Vite resolves `mathjax/...` from npm). - await import('mathjax/tex-svg.js'); - const latex = await import('@prosemark/latex'); - appendToExtraCodeMirrorExtensions(view, [ - ...latex.latexMarkdownSyntaxTheme, - ...latex.latexMarkdownEditorExtensions({ - mathJaxLoadMode: 'static-import', - output: 'svg', - }), - ]); - latexSetupDone = true; + appendToExtraCodeMirrorExtensions(view, latexExtensions); } catch (err: unknown) { console.error('[ProseMark] latex-integration setup failed', err); throw err; } + return Promise.resolve(); }, }; From c6b2d22adda9873278986e17f10c17af0d6fae25 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 6 Jun 2026 20:30:45 +0000 Subject: [PATCH 02/22] Keep latex setup handler async for readability Co-authored-by: J. Simon Richard --- .../latex-integration/src/webview/main.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/vscode-extensions/latex-integration/src/webview/main.ts b/apps/vscode-extensions/latex-integration/src/webview/main.ts index 25f2f2b3..9b7d46b5 100644 --- a/apps/vscode-extensions/latex-integration/src/webview/main.ts +++ b/apps/vscode-extensions/latex-integration/src/webview/main.ts @@ -28,14 +28,14 @@ const latexExtensions = [ let latexSetupDone = false; const procs: WebviewProcMap = { - setup: () => { + setup: async () => { const view = window.proseMark?.view; if (!view) { console.warn('[ProseMark] latex-integration setup: no view'); - return Promise.resolve(); + return; } if (latexSetupDone) { - return Promise.resolve(); + return; } latexSetupDone = true; @@ -45,7 +45,6 @@ const procs: WebviewProcMap = { console.error('[ProseMark] latex-integration setup failed', err); throw err; } - return Promise.resolve(); }, }; From bb2a8070f95d9eb70d27e37ad5f200596fd8189f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 6 Jun 2026 20:37:55 +0000 Subject: [PATCH 03/22] Disable MathJax a11y speech worker in VS Code webview The tex-svg combined component loads sre/speech-worker.js at runtime, but Vite only emits webview.js. Turn off speech/enrichment for editor preview. Co-authored-by: J. Simon Richard --- .changeset/latex-static-mathjax-import.md | 2 +- .../src/webview/disable-mathjax-a11y.ts | 41 +++++++++++++++++++ .../latex-integration/src/webview/main.ts | 4 ++ .../src/webview/mathjax-preload.ts | 23 +++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts create mode 100644 apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts diff --git a/.changeset/latex-static-mathjax-import.md b/.changeset/latex-static-mathjax-import.md index 9082c9d1..3cc0a8bb 100644 --- a/.changeset/latex-static-mathjax-import.md +++ b/.changeset/latex-static-mathjax-import.md @@ -2,4 +2,4 @@ 'vscode-prosemark-latex-integration': patch --- -Load MathJax via a top-level static `import 'mathjax/tex-svg.js'` (peer dependency of `@prosemark/latex`) so Vite fully bundles it into the webview instead of deferring a dynamic import at setup time. +Load MathJax via a top-level static `import 'mathjax/tex-svg.js'` (peer dependency of `@prosemark/latex`) so Vite fully bundles it into the webview instead of deferring a dynamic import at setup time. Disable MathJax a11y speech/enrichment so the combined `tex-svg` component does not try to load the separate `sre/speech-worker.js` file (not copied into the VS Code webview bundle). diff --git a/apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts b/apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts new file mode 100644 index 00000000..26af292e --- /dev/null +++ b/apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts @@ -0,0 +1,41 @@ +interface MathJaxStartupDocument { + options: { + enableSpeech?: boolean; + enableBraille?: boolean; + enableEnrichment?: boolean; + }; +} + +interface MathJaxWithStartup { + startup?: { + promise?: Promise; + document?: MathJaxStartupDocument; + }; + config?: { + options?: { + enableSpeech?: boolean; + enableBraille?: boolean; + enableEnrichment?: boolean; + }; + }; +} + +/** Ensure speech worker is not requested before math widgets render. */ +export async function disableMathJaxA11y(): Promise { + const mj = window.MathJax as MathJaxWithStartup | undefined; + await mj?.startup?.promise; + + const options = mj?.config?.options; + if (options) { + options.enableSpeech = false; + options.enableBraille = false; + options.enableEnrichment = false; + } + + const docOptions = mj?.startup?.document?.options; + if (docOptions) { + docOptions.enableSpeech = false; + docOptions.enableBraille = false; + docOptions.enableEnrichment = false; + } +} diff --git a/apps/vscode-extensions/latex-integration/src/webview/main.ts b/apps/vscode-extensions/latex-integration/src/webview/main.ts index 9b7d46b5..8eea8d1e 100644 --- a/apps/vscode-extensions/latex-integration/src/webview/main.ts +++ b/apps/vscode-extensions/latex-integration/src/webview/main.ts @@ -12,11 +12,14 @@ import { latexMarkdownSyntaxTheme, } from '@prosemark/latex'; +import './mathjax-preload'; import './style.css'; // Peer dependency of @prosemark/latex; bundled into webview.js by Vite at build time. import 'mathjax/tex-svg.js'; +import { disableMathJaxA11y } from './disable-mathjax-a11y'; + const latexExtensions = [ ...latexMarkdownSyntaxTheme, ...latexMarkdownEditorExtensions({ @@ -40,6 +43,7 @@ const procs: WebviewProcMap = { latexSetupDone = true; try { + await disableMathJaxA11y(); appendToExtraCodeMirrorExtensions(view, latexExtensions); } catch (err: unknown) { console.error('[ProseMark] latex-integration setup failed', err); diff --git a/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts b/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts new file mode 100644 index 00000000..7b979a56 --- /dev/null +++ b/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts @@ -0,0 +1,23 @@ +/** + * MathJax reads `window.MathJax` when `tex-svg.js` loads. This module must be + * imported before `mathjax/tex-svg.js` so startup options are in place first. + * + * The combined `tex-svg` component includes a11y/speech and tries to load + * `sre/speech-worker.js` as a separate web worker at runtime. VS Code webviews + * only ship `webview.js`, so we disable speech/enrichment for editor preview. + */ +window.MathJax = { + options: { + skipStartupTypeset: true, + enableSpeech: false, + enableBraille: false, + enableEnrichment: false, + menuOptions: { + settings: { + enrich: false, + speech: false, + braille: false, + }, + }, + }, +}; From 3e347035e03dd5252f3d26f04d8b6da3261c3a5c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 6 Jun 2026 20:41:52 +0000 Subject: [PATCH 04/22] Copy MathJax sre assets into webview dist via Vite plugin The tex-svg bundle loads sre/speech-worker.js at runtime as a web worker. Vite inlines the main IIFE but cannot bundle workers loaded via importScripts, so copy mathjax/sre/ next to webview.js after each build. Co-authored-by: J. Simon Richard --- .changeset/latex-static-mathjax-import.md | 2 +- .../latex-integration/README.md | 2 +- .../src/webview/disable-mathjax-a11y.ts | 41 ------------------- .../latex-integration/src/webview/main.ts | 6 +-- .../src/webview/mathjax-preload.ts | 14 ------- .../vite-plugin-mathjax-sre.ts | 32 +++++++++++++++ .../latex-integration/vite.config.ts | 9 +++- 7 files changed, 45 insertions(+), 61 deletions(-) delete mode 100644 apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts create mode 100644 apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts diff --git a/.changeset/latex-static-mathjax-import.md b/.changeset/latex-static-mathjax-import.md index 3cc0a8bb..a957fedb 100644 --- a/.changeset/latex-static-mathjax-import.md +++ b/.changeset/latex-static-mathjax-import.md @@ -2,4 +2,4 @@ 'vscode-prosemark-latex-integration': patch --- -Load MathJax via a top-level static `import 'mathjax/tex-svg.js'` (peer dependency of `@prosemark/latex`) so Vite fully bundles it into the webview instead of deferring a dynamic import at setup time. Disable MathJax a11y speech/enrichment so the combined `tex-svg` component does not try to load the separate `sre/speech-worker.js` file (not copied into the VS Code webview bundle). +Load MathJax via a top-level static `import 'mathjax/tex-svg.js'` (peer dependency of `@prosemark/latex`) so Vite fully bundles it into the webview instead of deferring a dynamic import at setup time. Copy `mathjax/sre/` into `dist/webview/sre/` at build time so the combined `tex-svg` component can load its speech web worker at runtime. diff --git a/apps/vscode-extensions/latex-integration/README.md b/apps/vscode-extensions/latex-integration/README.md index 158a443b..cff133f0 100644 --- a/apps/vscode-extensions/latex-integration/README.md +++ b/apps/vscode-extensions/latex-integration/README.md @@ -24,4 +24,4 @@ Please report bugs on the [GitHub issues page](https://github.com/jsimonrichard/ ## Developing this extension -After `bun install`, run `bun run build`. **Vite** produces `dist/webview/webview.js` with MathJax SVG output inlined into that bundle (see `src/webview/main.ts`). Bump the **`mathjax`** dependency when you want a different MathJax version. +After `bun install`, run `bun run build`. **Vite** produces `dist/webview/webview.js` with MathJax SVG output inlined into that bundle (see `src/webview/main.ts`), and copies `mathjax/sre/` (speech worker + mathmaps) into `dist/webview/sre/` for MathJax a11y. Bump the **`mathjax`** dependency when you want a different MathJax version. diff --git a/apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts b/apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts deleted file mode 100644 index 26af292e..00000000 --- a/apps/vscode-extensions/latex-integration/src/webview/disable-mathjax-a11y.ts +++ /dev/null @@ -1,41 +0,0 @@ -interface MathJaxStartupDocument { - options: { - enableSpeech?: boolean; - enableBraille?: boolean; - enableEnrichment?: boolean; - }; -} - -interface MathJaxWithStartup { - startup?: { - promise?: Promise; - document?: MathJaxStartupDocument; - }; - config?: { - options?: { - enableSpeech?: boolean; - enableBraille?: boolean; - enableEnrichment?: boolean; - }; - }; -} - -/** Ensure speech worker is not requested before math widgets render. */ -export async function disableMathJaxA11y(): Promise { - const mj = window.MathJax as MathJaxWithStartup | undefined; - await mj?.startup?.promise; - - const options = mj?.config?.options; - if (options) { - options.enableSpeech = false; - options.enableBraille = false; - options.enableEnrichment = false; - } - - const docOptions = mj?.startup?.document?.options; - if (docOptions) { - docOptions.enableSpeech = false; - docOptions.enableBraille = false; - docOptions.enableEnrichment = false; - } -} diff --git a/apps/vscode-extensions/latex-integration/src/webview/main.ts b/apps/vscode-extensions/latex-integration/src/webview/main.ts index 8eea8d1e..d1689b2d 100644 --- a/apps/vscode-extensions/latex-integration/src/webview/main.ts +++ b/apps/vscode-extensions/latex-integration/src/webview/main.ts @@ -18,8 +18,6 @@ import './style.css'; // Peer dependency of @prosemark/latex; bundled into webview.js by Vite at build time. import 'mathjax/tex-svg.js'; -import { disableMathJaxA11y } from './disable-mathjax-a11y'; - const latexExtensions = [ ...latexMarkdownSyntaxTheme, ...latexMarkdownEditorExtensions({ @@ -43,7 +41,9 @@ const procs: WebviewProcMap = { latexSetupDone = true; try { - await disableMathJaxA11y(); + await ( + window.MathJax as { startup?: { promise?: Promise } } | undefined + )?.startup?.promise; appendToExtraCodeMirrorExtensions(view, latexExtensions); } catch (err: unknown) { console.error('[ProseMark] latex-integration setup failed', err); diff --git a/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts b/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts index 7b979a56..2de5cefc 100644 --- a/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts +++ b/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts @@ -1,23 +1,9 @@ /** * MathJax reads `window.MathJax` when `tex-svg.js` loads. This module must be * imported before `mathjax/tex-svg.js` so startup options are in place first. - * - * The combined `tex-svg` component includes a11y/speech and tries to load - * `sre/speech-worker.js` as a separate web worker at runtime. VS Code webviews - * only ship `webview.js`, so we disable speech/enrichment for editor preview. */ window.MathJax = { options: { skipStartupTypeset: true, - enableSpeech: false, - enableBraille: false, - enableEnrichment: false, - menuOptions: { - settings: { - enrich: false, - speech: false, - braille: false, - }, - }, }, }; diff --git a/apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts b/apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts new file mode 100644 index 00000000..024e35f4 --- /dev/null +++ b/apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts @@ -0,0 +1,32 @@ +import { cpSync, existsSync } from 'node:fs'; +import { createRequire } from 'node:module'; +import { resolve } from 'node:path'; +import type { Plugin } from 'vite'; + +const require = createRequire(import.meta.url); + +/** + * MathJax `tex-svg` loads `sre/speech-worker.js` at runtime via `importScripts` + * inside a web worker. Vite inlines the main bundle but not that file, so copy + * the npm package's `sre/` tree next to `webview.js` after each build. + */ +export function copyMathjaxSreAssets(outDir: string): Plugin { + return { + name: 'copy-mathjax-sre', + closeBundle() { + const mathjaxRoot = resolve( + require.resolve('mathjax/package.json'), + '..', + ); + const sreSrc = resolve(mathjaxRoot, 'sre'); + if (!existsSync(sreSrc)) { + throw new Error( + `MathJax sre directory not found at ${sreSrc}. Is the mathjax package installed?`, + ); + } + + const sreDest = resolve(outDir, 'sre'); + cpSync(sreSrc, sreDest, { recursive: true }); + }, + }; +} diff --git a/apps/vscode-extensions/latex-integration/vite.config.ts b/apps/vscode-extensions/latex-integration/vite.config.ts index 2f7b1d65..5f651b58 100644 --- a/apps/vscode-extensions/latex-integration/vite.config.ts +++ b/apps/vscode-extensions/latex-integration/vite.config.ts @@ -2,8 +2,15 @@ import { defineConfig } from 'vite'; import { resolve } from 'node:path'; import proseMarkVSCodeExtensionIntegratorPlugin from '@prosemark/vscode-extension-integrator/rolldown-plugin'; +import { copyMathjaxSreAssets } from './vite-plugin-mathjax-sre'; + +const webviewOutDir = resolve(__dirname, 'dist/webview'); + export default defineConfig({ - plugins: [proseMarkVSCodeExtensionIntegratorPlugin()], + plugins: [ + proseMarkVSCodeExtensionIntegratorPlugin(), + copyMathjaxSreAssets(webviewOutDir), + ], build: { outDir: 'dist/webview', target: 'es2022', From 238302fb0707b61f06043dc6148ffacb08bcd076 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 6 Jun 2026 20:55:30 +0000 Subject: [PATCH 05/22] Add @prosemark/latex vite-plugin-mathjax and self-host MathJax Export copyMathJaxAssets from @prosemark/latex/vite-plugin-mathjax with a configurable copy list (default tex-svg.js + sre). The LaTeX VS Code webview loads MathJax via url-import from dist/webview/mathjax/ instead of bundling tex-svg into webview.js (~48 KB vs ~1.8 MB). Co-authored-by: J. Simon Richard --- .changeset/latex-static-mathjax-import.md | 5 - .changeset/latex-vite-mathjax-plugin.md | 6 + .../latex-integration/README.md | 2 +- .../latex-integration/src/global.d.ts | 2 - .../latex-integration/src/webview/main.ts | 29 ++-- .../src/webview/mathjax-preload.ts | 9 -- .../vite-plugin-mathjax-sre.ts | 32 ---- .../{vite.config.ts => vite.config.mts} | 11 +- bun.lock | 149 +++++------------- packages/latex/lib/main.ts | 42 +++++ packages/latex/lib/vite-plugin-mathjax.ts | 60 +++++++ packages/latex/package.json | 13 +- .../latex/tests/mathjax-load-modes.test.ts | 10 ++ packages/latex/tsdown.config.ts | 17 +- 14 files changed, 203 insertions(+), 184 deletions(-) delete mode 100644 .changeset/latex-static-mathjax-import.md create mode 100644 .changeset/latex-vite-mathjax-plugin.md delete mode 100644 apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts delete mode 100644 apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts rename apps/vscode-extensions/latex-integration/{vite.config.ts => vite.config.mts} (74%) create mode 100644 packages/latex/lib/vite-plugin-mathjax.ts diff --git a/.changeset/latex-static-mathjax-import.md b/.changeset/latex-static-mathjax-import.md deleted file mode 100644 index a957fedb..00000000 --- a/.changeset/latex-static-mathjax-import.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'vscode-prosemark-latex-integration': patch ---- - -Load MathJax via a top-level static `import 'mathjax/tex-svg.js'` (peer dependency of `@prosemark/latex`) so Vite fully bundles it into the webview instead of deferring a dynamic import at setup time. Copy `mathjax/sre/` into `dist/webview/sre/` at build time so the combined `tex-svg` component can load its speech web worker at runtime. diff --git a/.changeset/latex-vite-mathjax-plugin.md b/.changeset/latex-vite-mathjax-plugin.md new file mode 100644 index 00000000..c6ac67c8 --- /dev/null +++ b/.changeset/latex-vite-mathjax-plugin.md @@ -0,0 +1,6 @@ +--- +'@prosemark/latex': minor +'vscode-prosemark-latex-integration': patch +--- + +Add `@prosemark/latex/vite-plugin-mathjax` to copy configurable paths from the `mathjax` npm package into a Vite build output, export `mathJaxPackageUrlFromWebviewScript`, and switch the LaTeX VS Code webview to self-hosted `url-import` (`tex-svg.js` + `sre` under `dist/webview/mathjax/`). diff --git a/apps/vscode-extensions/latex-integration/README.md b/apps/vscode-extensions/latex-integration/README.md index cff133f0..47ee7603 100644 --- a/apps/vscode-extensions/latex-integration/README.md +++ b/apps/vscode-extensions/latex-integration/README.md @@ -24,4 +24,4 @@ Please report bugs on the [GitHub issues page](https://github.com/jsimonrichard/ ## Developing this extension -After `bun install`, run `bun run build`. **Vite** produces `dist/webview/webview.js` with MathJax SVG output inlined into that bundle (see `src/webview/main.ts`), and copies `mathjax/sre/` (speech worker + mathmaps) into `dist/webview/sre/` for MathJax a11y. Bump the **`mathjax`** dependency when you want a different MathJax version. +After `bun install`, run `bun run build`. **Vite** produces `dist/webview/webview.js` and copies `tex-svg.js` plus `sre/` from the **`mathjax`** npm package into `dist/webview/mathjax/` via `@prosemark/latex/vite-plugin-mathjax`. The webview loads MathJax with `url-import` from that folder. Bump the **`mathjax`** dependency when you want a different MathJax version. diff --git a/apps/vscode-extensions/latex-integration/src/global.d.ts b/apps/vscode-extensions/latex-integration/src/global.d.ts index c0a40625..35306c6f 100644 --- a/apps/vscode-extensions/latex-integration/src/global.d.ts +++ b/apps/vscode-extensions/latex-integration/src/global.d.ts @@ -1,3 +1 @@ declare module '*.css'; - -declare module 'mathjax/tex-svg.js'; diff --git a/apps/vscode-extensions/latex-integration/src/webview/main.ts b/apps/vscode-extensions/latex-integration/src/webview/main.ts index d1689b2d..b8691dff 100644 --- a/apps/vscode-extensions/latex-integration/src/webview/main.ts +++ b/apps/vscode-extensions/latex-integration/src/webview/main.ts @@ -10,26 +10,15 @@ import type { import { latexMarkdownEditorExtensions, latexMarkdownSyntaxTheme, + mathJaxPackageUrlFromWebviewScript, } from '@prosemark/latex'; -import './mathjax-preload'; import './style.css'; -// Peer dependency of @prosemark/latex; bundled into webview.js by Vite at build time. -import 'mathjax/tex-svg.js'; - -const latexExtensions = [ - ...latexMarkdownSyntaxTheme, - ...latexMarkdownEditorExtensions({ - mathJaxLoadMode: 'static-import', - output: 'svg', - }), -]; - let latexSetupDone = false; const procs: WebviewProcMap = { - setup: async () => { + setup: () => { const view = window.proseMark?.view; if (!view) { console.warn('[ProseMark] latex-integration setup: no view'); @@ -41,14 +30,20 @@ const procs: WebviewProcMap = { latexSetupDone = true; try { - await ( - window.MathJax as { startup?: { promise?: Promise } } | undefined - )?.startup?.promise; - appendToExtraCodeMirrorExtensions(view, latexExtensions); + const mathJaxPackageUrl = mathJaxPackageUrlFromWebviewScript(); + appendToExtraCodeMirrorExtensions(view, [ + ...latexMarkdownSyntaxTheme, + ...latexMarkdownEditorExtensions({ + mathJaxLoadMode: 'url-import', + mathJaxPackageUrl, + output: 'svg', + }), + ]); } catch (err: unknown) { console.error('[ProseMark] latex-integration setup failed', err); throw err; } + return Promise.resolve(); }, }; diff --git a/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts b/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts deleted file mode 100644 index 2de5cefc..00000000 --- a/apps/vscode-extensions/latex-integration/src/webview/mathjax-preload.ts +++ /dev/null @@ -1,9 +0,0 @@ -/** - * MathJax reads `window.MathJax` when `tex-svg.js` loads. This module must be - * imported before `mathjax/tex-svg.js` so startup options are in place first. - */ -window.MathJax = { - options: { - skipStartupTypeset: true, - }, -}; diff --git a/apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts b/apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts deleted file mode 100644 index 024e35f4..00000000 --- a/apps/vscode-extensions/latex-integration/vite-plugin-mathjax-sre.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { cpSync, existsSync } from 'node:fs'; -import { createRequire } from 'node:module'; -import { resolve } from 'node:path'; -import type { Plugin } from 'vite'; - -const require = createRequire(import.meta.url); - -/** - * MathJax `tex-svg` loads `sre/speech-worker.js` at runtime via `importScripts` - * inside a web worker. Vite inlines the main bundle but not that file, so copy - * the npm package's `sre/` tree next to `webview.js` after each build. - */ -export function copyMathjaxSreAssets(outDir: string): Plugin { - return { - name: 'copy-mathjax-sre', - closeBundle() { - const mathjaxRoot = resolve( - require.resolve('mathjax/package.json'), - '..', - ); - const sreSrc = resolve(mathjaxRoot, 'sre'); - if (!existsSync(sreSrc)) { - throw new Error( - `MathJax sre directory not found at ${sreSrc}. Is the mathjax package installed?`, - ); - } - - const sreDest = resolve(outDir, 'sre'); - cpSync(sreSrc, sreDest, { recursive: true }); - }, - }; -} diff --git a/apps/vscode-extensions/latex-integration/vite.config.ts b/apps/vscode-extensions/latex-integration/vite.config.mts similarity index 74% rename from apps/vscode-extensions/latex-integration/vite.config.ts rename to apps/vscode-extensions/latex-integration/vite.config.mts index 5f651b58..5b7f79b1 100644 --- a/apps/vscode-extensions/latex-integration/vite.config.ts +++ b/apps/vscode-extensions/latex-integration/vite.config.mts @@ -1,15 +1,20 @@ import { defineConfig } from 'vite'; import { resolve } from 'node:path'; import proseMarkVSCodeExtensionIntegratorPlugin from '@prosemark/vscode-extension-integrator/rolldown-plugin'; - -import { copyMathjaxSreAssets } from './vite-plugin-mathjax-sre'; +import { + copyMathJaxAssets, + MATHJAX_TEX_SVG_COPY_ENTRIES, +} from '@prosemark/latex/vite-plugin-mathjax'; const webviewOutDir = resolve(__dirname, 'dist/webview'); export default defineConfig({ plugins: [ proseMarkVSCodeExtensionIntegratorPlugin(), - copyMathjaxSreAssets(webviewOutDir), + copyMathJaxAssets({ + outDir: webviewOutDir, + copy: MATHJAX_TEX_SVG_COPY_ENTRIES, + }), ], build: { outDir: 'dist/webview', diff --git a/bun.lock b/bun.lock index 60ff80c7..3912aa6b 100644 --- a/bun.lock +++ b/bun.lock @@ -261,12 +261,15 @@ "tsdown": "^0.15.6", "typescript": "^5.9.3", "typescript-eslint": "^8.50.0", + "vite": "^8.0.5", }, "peerDependencies": { "mathjax": "^4.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", }, "optionalPeers": [ "mathjax", + "vite", ], }, "packages/paste-rich-text": { @@ -2423,7 +2426,7 @@ "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + "vite": ["vite@8.0.14", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.2", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw=="], "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], @@ -2619,6 +2622,10 @@ "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], + "debug-vsc-extn-in-web/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + + "demo/vite": ["vite@5.4.21", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw=="], + "dir-glob/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "encoding-sniffer/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], @@ -2709,16 +2716,12 @@ "unstorage/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], - "vscode-prosemark/tsdown": ["tsdown@0.14.2", "", { "dependencies": { "ansis": "^4.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "debug": "^4.4.1", "diff": "^8.0.2", "empathic": "^2.0.0", "hookable": "^5.5.3", "rolldown": "latest", "rolldown-plugin-dts": "^0.15.8", "semver": "^7.7.2", "tinyexec": "^1.0.1", "tinyglobby": "^0.2.14", "tree-kill": "^1.2.2", "unconfig": "^7.3.3" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-6ThtxVZoTlR5YJov5rYvH8N1+/S/rD/pGfehdCLGznGgbxz+73EASV1tsIIZkLw2n+SXcERqHhcB/OkyxdKv3A=="], + "vite/rolldown": ["rolldown@1.0.2", "", { "dependencies": { "@oxc-project/types": "=0.132.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.2", "@rolldown/binding-darwin-arm64": "1.0.2", "@rolldown/binding-darwin-x64": "1.0.2", "@rolldown/binding-freebsd-x64": "1.0.2", "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", "@rolldown/binding-linux-arm64-gnu": "1.0.2", "@rolldown/binding-linux-arm64-musl": "1.0.2", "@rolldown/binding-linux-ppc64-gnu": "1.0.2", "@rolldown/binding-linux-s390x-gnu": "1.0.2", "@rolldown/binding-linux-x64-gnu": "1.0.2", "@rolldown/binding-linux-x64-musl": "1.0.2", "@rolldown/binding-openharmony-arm64": "1.0.2", "@rolldown/binding-wasm32-wasi": "1.0.2", "@rolldown/binding-win32-arm64-msvc": "1.0.2", "@rolldown/binding-win32-x64-msvc": "1.0.2" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g=="], - "vscode-prosemark/vite": ["vite@8.0.14", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.2", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw=="], + "vscode-prosemark/tsdown": ["tsdown@0.14.2", "", { "dependencies": { "ansis": "^4.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "debug": "^4.4.1", "diff": "^8.0.2", "empathic": "^2.0.0", "hookable": "^5.5.3", "rolldown": "latest", "rolldown-plugin-dts": "^0.15.8", "semver": "^7.7.2", "tinyexec": "^1.0.1", "tinyglobby": "^0.2.14", "tree-kill": "^1.2.2", "unconfig": "^7.3.3" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-6ThtxVZoTlR5YJov5rYvH8N1+/S/rD/pGfehdCLGznGgbxz+73EASV1tsIIZkLw2n+SXcERqHhcB/OkyxdKv3A=="], "vscode-prosemark-cspell-integration/tsdown": ["tsdown@0.14.2", "", { "dependencies": { "ansis": "^4.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "debug": "^4.4.1", "diff": "^8.0.2", "empathic": "^2.0.0", "hookable": "^5.5.3", "rolldown": "latest", "rolldown-plugin-dts": "^0.15.8", "semver": "^7.7.2", "tinyexec": "^1.0.1", "tinyglobby": "^0.2.14", "tree-kill": "^1.2.2", "unconfig": "^7.3.3" }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", "publint": "^0.3.0", "typescript": "^5.0.0", "unplugin-lightningcss": "^0.4.0", "unplugin-unused": "^0.5.0" }, "optionalPeers": ["@arethetypeswrong/core", "publint", "typescript", "unplugin-lightningcss", "unplugin-unused"], "bin": { "tsdown": "dist/run.mjs" } }, "sha512-6ThtxVZoTlR5YJov5rYvH8N1+/S/rD/pGfehdCLGznGgbxz+73EASV1tsIIZkLw2n+SXcERqHhcB/OkyxdKv3A=="], - "vscode-prosemark-cspell-integration/vite": ["vite@8.0.14", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.2", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw=="], - - "vscode-prosemark-latex-integration/vite": ["vite@8.0.14", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "1.0.2", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-s4BJJ+5y1pYL6Otw51FHhVJQhPnuRinKig64g/1+EUNaJsd3gCKdD31IPFvswUgW9/60QT9oFHbZHbQK5imcxw=="], - "whatwg-encoding/iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], "widest-line/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], @@ -2889,15 +2892,41 @@ "unstorage/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], - "vscode-prosemark-cspell-integration/tsdown/rolldown-plugin-dts": ["rolldown-plugin-dts@0.15.10", "", { "dependencies": { "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "ast-kit": "^2.1.2", "birpc": "^2.5.0", "debug": "^4.4.1", "dts-resolver": "^2.1.2", "get-tsconfig": "^4.10.1" }, "peerDependencies": { "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.9", "typescript": "^5.0.0", "vue-tsc": "~3.0.3" }, "optionalPeers": ["@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-8cPVAVQUo9tYAoEpc3jFV9RxSil13hrRRg8cHC9gLXxRMNtWPc1LNMSDXzjyD+5Vny49sDZH77JlXp/vlc4I3g=="], + "vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.132.0", "", {}, "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ=="], - "vscode-prosemark-cspell-integration/vite/rolldown": ["rolldown@1.0.2", "", { "dependencies": { "@oxc-project/types": "=0.132.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.2", "@rolldown/binding-darwin-arm64": "1.0.2", "@rolldown/binding-darwin-x64": "1.0.2", "@rolldown/binding-freebsd-x64": "1.0.2", "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", "@rolldown/binding-linux-arm64-gnu": "1.0.2", "@rolldown/binding-linux-arm64-musl": "1.0.2", "@rolldown/binding-linux-ppc64-gnu": "1.0.2", "@rolldown/binding-linux-s390x-gnu": "1.0.2", "@rolldown/binding-linux-x64-gnu": "1.0.2", "@rolldown/binding-linux-x64-musl": "1.0.2", "@rolldown/binding-openharmony-arm64": "1.0.2", "@rolldown/binding-wasm32-wasi": "1.0.2", "@rolldown/binding-win32-arm64-msvc": "1.0.2", "@rolldown/binding-win32-x64-msvc": "1.0.2" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g=="], + "vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.2", "", { "os": "android", "cpu": "arm64" }, "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ=="], - "vscode-prosemark-latex-integration/vite/rolldown": ["rolldown@1.0.2", "", { "dependencies": { "@oxc-project/types": "=0.132.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.2", "@rolldown/binding-darwin-arm64": "1.0.2", "@rolldown/binding-darwin-x64": "1.0.2", "@rolldown/binding-freebsd-x64": "1.0.2", "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", "@rolldown/binding-linux-arm64-gnu": "1.0.2", "@rolldown/binding-linux-arm64-musl": "1.0.2", "@rolldown/binding-linux-ppc64-gnu": "1.0.2", "@rolldown/binding-linux-s390x-gnu": "1.0.2", "@rolldown/binding-linux-x64-gnu": "1.0.2", "@rolldown/binding-linux-x64-musl": "1.0.2", "@rolldown/binding-openharmony-arm64": "1.0.2", "@rolldown/binding-wasm32-wasi": "1.0.2", "@rolldown/binding-win32-arm64-msvc": "1.0.2", "@rolldown/binding-win32-x64-msvc": "1.0.2" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g=="], + "vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w=="], - "vscode-prosemark/tsdown/rolldown-plugin-dts": ["rolldown-plugin-dts@0.15.10", "", { "dependencies": { "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "ast-kit": "^2.1.2", "birpc": "^2.5.0", "debug": "^4.4.1", "dts-resolver": "^2.1.2", "get-tsconfig": "^4.10.1" }, "peerDependencies": { "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.9", "typescript": "^5.0.0", "vue-tsc": "~3.0.3" }, "optionalPeers": ["@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-8cPVAVQUo9tYAoEpc3jFV9RxSil13hrRRg8cHC9gLXxRMNtWPc1LNMSDXzjyD+5Vny49sDZH77JlXp/vlc4I3g=="], + "vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA=="], + + "vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA=="], + + "vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w=="], + + "vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig=="], + + "vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw=="], + + "vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA=="], + + "vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ=="], + + "vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ=="], + + "vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw=="], + + "vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w=="], - "vscode-prosemark/vite/rolldown": ["rolldown@1.0.2", "", { "dependencies": { "@oxc-project/types": "=0.132.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.2", "@rolldown/binding-darwin-arm64": "1.0.2", "@rolldown/binding-darwin-x64": "1.0.2", "@rolldown/binding-freebsd-x64": "1.0.2", "@rolldown/binding-linux-arm-gnueabihf": "1.0.2", "@rolldown/binding-linux-arm64-gnu": "1.0.2", "@rolldown/binding-linux-arm64-musl": "1.0.2", "@rolldown/binding-linux-ppc64-gnu": "1.0.2", "@rolldown/binding-linux-s390x-gnu": "1.0.2", "@rolldown/binding-linux-x64-gnu": "1.0.2", "@rolldown/binding-linux-x64-musl": "1.0.2", "@rolldown/binding-openharmony-arm64": "1.0.2", "@rolldown/binding-wasm32-wasi": "1.0.2", "@rolldown/binding-win32-arm64-msvc": "1.0.2", "@rolldown/binding-win32-x64-msvc": "1.0.2" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-oZx5zVDtVB44AW3eaifgDml1gWRDZGvjcfdxonE4swNPG98PrrXjaO/KrnUjzlMnztCCRVlUueA1kCXhARGk6g=="], + "vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ=="], + + "vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A=="], + + "vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ=="], + + "vscode-prosemark-cspell-integration/tsdown/rolldown-plugin-dts": ["rolldown-plugin-dts@0.15.10", "", { "dependencies": { "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "ast-kit": "^2.1.2", "birpc": "^2.5.0", "debug": "^4.4.1", "dts-resolver": "^2.1.2", "get-tsconfig": "^4.10.1" }, "peerDependencies": { "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.9", "typescript": "^5.0.0", "vue-tsc": "~3.0.3" }, "optionalPeers": ["@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-8cPVAVQUo9tYAoEpc3jFV9RxSil13hrRRg8cHC9gLXxRMNtWPc1LNMSDXzjyD+5Vny49sDZH77JlXp/vlc4I3g=="], + + "vscode-prosemark/tsdown/rolldown-plugin-dts": ["rolldown-plugin-dts@0.15.10", "", { "dependencies": { "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "ast-kit": "^2.1.2", "birpc": "^2.5.0", "debug": "^4.4.1", "dts-resolver": "^2.1.2", "get-tsconfig": "^4.10.1" }, "peerDependencies": { "@typescript/native-preview": ">=7.0.0-dev.20250601.1", "rolldown": "^1.0.0-beta.9", "typescript": "^5.0.0", "vue-tsc": "~3.0.3" }, "optionalPeers": ["@typescript/native-preview", "typescript", "vue-tsc"] }, "sha512-8cPVAVQUo9tYAoEpc3jFV9RxSil13hrRRg8cHC9gLXxRMNtWPc1LNMSDXzjyD+5Vny49sDZH77JlXp/vlc4I3g=="], "widest-line/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], @@ -2973,102 +3002,6 @@ "typedoc/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "vscode-prosemark-cspell-integration/vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.132.0", "", {}, "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.2", "", { "os": "android", "cpu": "arm64" }, "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A=="], - - "vscode-prosemark-cspell-integration/vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.132.0", "", {}, "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.2", "", { "os": "android", "cpu": "arm64" }, "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A=="], - - "vscode-prosemark-latex-integration/vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ=="], - - "vscode-prosemark/vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.132.0", "", {}, "sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.2", "", { "os": "android", "cpu": "arm64" }, "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vdFA9+C/rekyGce7WqHs/xoT0ioZEWaOFyZLIV1mEeNFaFDUQrPIo8Vs2GvJ6eetb3rzDUtUBgzto3ExpXJB3w=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BewSOwTHazv77DTYiAZXSqqKZ4KP/KonFisDMVU7PImxoWfB2aepnPhd2E4SWz3zDzYgDNbs6jBmTdgNnF02GA=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-m41o7M0YWtUdqk61Tb+jnKb2rN++iRdIASlExkUoKfIAH30DOHCB8fVLzSUpbWHHU8esmEioY62PxzexE8MBuA=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-jcojB9H7W/jS29pMKWAK1N+fU99vXodHDTatS3b3y/XSOCiHo0kkA74pL3jJmkoQtYpOCxDvaKs1fo2Ij/1X5w=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1jn6qDU5iiOgFgygDzKUuKP0maTi0/f1+sBLgvij/76C77Nm3ts6ufz9Bjg5q5dduxiUIxtq86JIoBvo1xQ4Ig=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-QVLO/czFMdoMFSqlX3bcswcJNm/23r+qoa/jgtmFc/qEp6/jXmIkDjF/XIo8dPfGaiwy1xfQn8o77L79GeXFgw=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-hgO5Abm0w5UL6FEa2iFnZqo2KlK7TQ5QhV5x09hujBf7t5KzHQ1VmfPuTpqRy/rNlSxua3eWH374xxiVrP+lcA=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-fy8rXxuYEu602abC8MUNaPjYLIFzReOaEIEMKMUa0rFEUxNpVXhs15KSSQ4qlqSaM7B6rcj9rDZgADh/IGDzLQ=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-0+bOkiQ779+r1WpoHOWHqncvyySci0vKph+myNDYb+im6meJAzHQXay6oEgnkHuUGouM1LKTZwqKpBow6Kj7CQ=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-mjSkrzZK5Qsl0a9d1JgILOiuZOSDTVdKENcSXBoqbzSrspLR/4/IRVDo5wd2GgZjNss/viBFJdeq+j7qH2nypw=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-1v5vHasdfQAZoEHakBV72LIFAC9JjnymsiKxp+GEr/ma3+NJCPSaYK+qavInOovJkgwFrs7GccX2d6IgDA3Z5w=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-mb1VobWn6NheziTk5/WEaR6AKVbrwT5sOi6C7zk3gy/pD1qtJfU1j4PgTo2NJnOtbL9Dl3Aeei8w9jJ7qC2jZQ=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-SqKonF56vA/L2yHwHYcEp2P34URpOZ7d1fS635cTkpDnUtEGdUbhI6NzsPdqeSWvAAeGDrxjWjNmibDIdFf9/A=="], - - "vscode-prosemark/vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-v7qRI7gXLRINcOGXt+7YmAZ6iFuyZVMIoXAxhd8oP+DR9dLfL9GfNIx7PLMxmhZdvq8waUJBQiWN9EKNy+TRBQ=="], - "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "@manypkg/find-root/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], diff --git a/packages/latex/lib/main.ts b/packages/latex/lib/main.ts index 0487746c..457e666f 100644 --- a/packages/latex/lib/main.ts +++ b/packages/latex/lib/main.ts @@ -141,6 +141,48 @@ export function preconfigureMathJaxLoader(packageUrl: string): void { }; } +export interface MathJaxPackageUrlFromWebviewScriptOptions { + /** + * Folder name next to the webview script that contains copied MathJax files. + * @default 'mathjax' + */ + mathjaxDir?: string; + /** + * Script element whose `src` is the base URL. When omitted, uses the last + * `