feat(web): add Mermaid diagram rendering and off-thread KaTeX/Mermaid workers (#1226)

* feat(web): add Mermaid diagram rendering and off-thread KaTeX/Mermaid workers

Enable Mermaid diagram support in the web chat via markstream-vue's enableMermaid(). Set up Web Workers for both KaTeX rendering and Mermaid parsing using markstream-vue's pre-built workers (katexRenderer.worker, mermaidParser.worker), keeping heavy computation off the main thread during live streaming.

* fix(web): skip Mermaid SVG subtrees in file link and markdown link rewriters

processFileLinks() uses a TreeWalker that scans all text nodes in mdRef.
Mermaid diagrams render as inline SVG, and diagram labels containing
file-path-like strings (e.g. src/App.vue) would be replaced with HTML
<button> elements inside SVG <text> nodes, corrupting the rendered diagram.

processMarkdownLinks() similarly queries a[href] inside SVGs; while
isLocalLink() mostly filters these out, explicitly skipping SVG subtrees
is safer.

Add svg to the closest() exclusion in processFileLinks(), and skip
links inside svg in processMarkdownLinks().

* fix(web): satisfy worker import lint

* chore: align mermaid dependency versions

* chore: change mermaid workers changeset to patch

---------

Co-authored-by: qer <wbxl2000@outlook.com>
This commit is contained in:
Simon He 2026-07-01 02:17:34 +08:00 committed by GitHub
parent 8ac337a2b2
commit 7f05f589e7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 70 additions and 4 deletions

View file

@ -12,7 +12,7 @@
"vitepress": "^1.5.0"
},
"dependencies": {
"mermaid": "^11.12.2",
"mermaid": "^11.15.0",
"vitepress-plugin-llms": "^1.10.0",
"vitepress-plugin-mermaid": "^2.0.17"
}