feat: add mathjax renderer (#385)

* fix #376
* fix #384 

---------

Co-authored-by: yanglbme <szuyanglb@outlook.com>
This commit is contained in:
YangFong 2024-09-07 10:25:35 +08:00 committed by GitHub
parent feafd04d32
commit e93895e71f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 296 additions and 271 deletions

View File

@ -22,13 +22,6 @@
crossorigin="anonymous"
/>
<style>
/**
解决公众号复制字体问题
*/
.katex .mathnormal {
font-family: 'Times New Roman' !important;
}
.loading {
position: fixed;
top: 0;
@ -98,6 +91,13 @@
document.querySelector('.loading').classList.add('dark')
}
</script>
<script>
MathJax = {
svg: { fontCache: 'none' },
tex: { tags: 'ams' },
}
</script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
<script type="module" src="/src/main.js"></script>
</body>
<script src="https://cdn-doocs.oss-cn-shenzhen.aliyuncs.com/gh/wechatsync/article-syncjs@latest/dist/main.js"></script>

433
package-lock.json generated
View File

@ -25,10 +25,8 @@
"form-data": "4.0.0",
"highlight.js": "^11.10.0",
"juice": "^8.0.0",
"katex": "^0.16.11",
"lucide-vue-next": "^0.428.0",
"marked": "^14.1.1",
"marked-katex-extension": "^5.1.2",
"mermaid": "^11.1.0",
"minio": "7.1.3",
"node-fetch": "^3.3.2",
@ -1532,9 +1530,9 @@
}
},
"node_modules/@eslint/js": {
"version": "9.9.1",
"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.9.1.tgz",
"integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
"version": "9.10.0",
"resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.10.0.tgz",
"integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
"dev": true,
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -1549,6 +1547,18 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/plugin-kit": {
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz",
"integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==",
"dev": true,
"dependencies": {
"levn": "^0.4.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@floating-ui/core": {
"version": "1.6.7",
"resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.7.tgz",
@ -2196,20 +2206,20 @@
}
},
"node_modules/@tanstack/virtual-core": {
"version": "3.10.6",
"resolved": "https://registry.npmmirror.com/@tanstack/virtual-core/-/virtual-core-3.10.6.tgz",
"integrity": "sha512-1giLc4dzgEKLMx5pgKjL6HlG5fjZMgCjzlKAlpr7yoUtetVPELgER1NtephAI910nMwfPTHNyWKSFmJdHkz2Cw==",
"version": "3.10.7",
"resolved": "https://registry.npmmirror.com/@tanstack/virtual-core/-/virtual-core-3.10.7.tgz",
"integrity": "sha512-ND5dfsU0n9F4gROzwNNDJmg6y8n9pI8YWxtgbfJ5UcNn7Hx+MxEXtXcQ189tS7sh8pmCObgz2qSiyRKTZxT4dg==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/tannerlinsley"
}
},
"node_modules/@tanstack/vue-virtual": {
"version": "3.10.6",
"resolved": "https://registry.npmmirror.com/@tanstack/vue-virtual/-/vue-virtual-3.10.6.tgz",
"integrity": "sha512-uVyUAV7rugRxgrw/f3J6FX6TGhxWAjXdT0PAbVNcIFNrj1Ftu/NT9bFLxKVQTkd8hnM6y8ijAlJ1xtBDGmo4gQ==",
"version": "3.10.7",
"resolved": "https://registry.npmmirror.com/@tanstack/vue-virtual/-/vue-virtual-3.10.7.tgz",
"integrity": "sha512-OSK1fkvz4GaBhF80KVmBsJZoMI9ncVaUU//pI8OqTdBnepw467zcuF2Y+Ia1VC0CPYfUEALyS8n4Ar0RI/7ASg==",
"dependencies": {
"@tanstack/virtual-core": "3.10.6"
"@tanstack/virtual-core": "3.10.7"
},
"funding": {
"type": "github",
@ -2250,11 +2260,6 @@
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
"node_modules/@types/katex": {
"version": "0.16.7",
"resolved": "https://registry.npmmirror.com/@types/katex/-/katex-0.16.7.tgz",
"integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ=="
},
"node_modules/@types/lodash": {
"version": "4.17.7",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.7.tgz",
@ -2284,9 +2289,9 @@
}
},
"node_modules/@types/node": {
"version": "22.5.3",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.5.3.tgz",
"integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
"version": "22.5.4",
"resolved": "https://registry.npmmirror.com/@types/node/-/node-22.5.4.tgz",
"integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
"dev": true,
"dependencies": {
"undici-types": "~6.19.2"
@ -2917,52 +2922,51 @@
}
},
"node_modules/@volar/language-core": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.1.tgz",
"integrity": "sha512-9AKhC7Qn2mQYxj7Dz3bVxeOk7gGJladhWixUYKef/o0o7Bm4an+A3XvmcTHVqZ8stE6lBVH++g050tBtJ4TZPQ==",
"version": "2.4.2",
"resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-2.4.2.tgz",
"integrity": "sha512-sONt5RLvLL1SlBdhyUSthZzuKePbJ7DwFFB9zT0eyWpDl+v7GXGh/RkPxxWaR22bIhYtTzp4Ka1MWatl/53Riw==",
"dev": true,
"dependencies": {
"@volar/source-map": "2.4.1"
"@volar/source-map": "2.4.2"
}
},
"node_modules/@volar/source-map": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.1.tgz",
"integrity": "sha512-Xq6ep3OZg9xUqN90jEgB9ztX5SsTz1yiV8wiQbcYNjWkek+Ie3dc8l7AVt3EhDm9mSIR58oWczHkzM2H6HIsmQ==",
"version": "2.4.2",
"resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-2.4.2.tgz",
"integrity": "sha512-qiGfGgeZ5DEarPX3S+HcFktFCjfDrFPCXKeXNbrlB7v8cvtPRm8YVwoXOdGG1NhaL5rMlv5BZPVQyu4EdWWIvA==",
"dev": true
},
"node_modules/@volar/typescript": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.1.tgz",
"integrity": "sha512-UoRzC0PXcwajFQTu8XxKSYNsWNBtVja6Y9gC8eLv7kYm+UEKJCcZ8g7dialsOYA0HKs3Vpg57MeCsawFLC6m9Q==",
"version": "2.4.2",
"resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-2.4.2.tgz",
"integrity": "sha512-m2uZduhaHO1SZuagi30OsjI/X1gwkaEAC+9wT/nCNAtJ5FqXEkKvUncHmffG7ESDZPlFFUBK4vJ0D9Hfr+f2EA==",
"dev": true,
"dependencies": {
"@volar/language-core": "2.4.1",
"@volar/language-core": "2.4.2",
"path-browserify": "^1.0.1",
"vscode-uri": "^3.0.8"
}
},
"node_modules/@vue/babel-helper-vue-transform-on": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz",
"integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==",
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.4.tgz",
"integrity": "sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==",
"dev": true
},
"node_modules/@vue/babel-plugin-jsx": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz",
"integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==",
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.4.tgz",
"integrity": "sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==",
"dev": true,
"dependencies": {
"@babel/helper-module-imports": "~7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/plugin-syntax-jsx": "^7.23.3",
"@babel/template": "^7.23.9",
"@babel/traverse": "^7.23.9",
"@babel/types": "^7.23.9",
"@vue/babel-helper-vue-transform-on": "1.2.2",
"@vue/babel-plugin-resolve-type": "1.2.2",
"camelcase": "^6.3.0",
"@babel/helper-module-imports": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/plugin-syntax-jsx": "^7.24.7",
"@babel/template": "^7.25.0",
"@babel/traverse": "^7.25.6",
"@babel/types": "^7.25.6",
"@vue/babel-helper-vue-transform-on": "1.2.4",
"@vue/babel-plugin-resolve-type": "1.2.4",
"html-tags": "^3.3.1",
"svg-tags": "^1.0.0"
},
@ -2975,77 +2979,53 @@
}
}
},
"node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": {
"version": "7.22.15",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"dependencies": {
"@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@vue/babel-plugin-resolve-type": {
"version": "1.2.2",
"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz",
"integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==",
"version": "1.2.4",
"resolved": "https://registry.npmmirror.com/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.4.tgz",
"integrity": "sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/helper-module-imports": "~7.22.15",
"@babel/helper-plugin-utils": "^7.22.5",
"@babel/parser": "^7.23.9",
"@vue/compiler-sfc": "^3.4.15"
"@babel/code-frame": "^7.24.7",
"@babel/helper-module-imports": "^7.24.7",
"@babel/helper-plugin-utils": "^7.24.8",
"@babel/parser": "^7.25.6",
"@vue/compiler-sfc": "^3.5.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": {
"version": "7.22.15",
"resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"dependencies": {
"@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
"integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
"integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/shared": "3.5.0",
"@vue/shared": "3.5.3",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
"integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
"integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
"dependencies": {
"@vue/compiler-core": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-core": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
"integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
"integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
"dependencies": {
"@babel/parser": "^7.25.3",
"@vue/compiler-core": "3.5.0",
"@vue/compiler-dom": "3.5.0",
"@vue/compiler-ssr": "3.5.0",
"@vue/shared": "3.5.0",
"@vue/compiler-core": "3.5.3",
"@vue/compiler-dom": "3.5.3",
"@vue/compiler-ssr": "3.5.3",
"@vue/shared": "3.5.3",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.11",
"postcss": "^8.4.44",
@ -3053,12 +3033,12 @@
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
"integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
"integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
"dependencies": {
"@vue/compiler-dom": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-dom": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/compiler-vue2": {
@ -3077,13 +3057,13 @@
"integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw=="
},
"node_modules/@vue/devtools-core": {
"version": "7.4.3",
"resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.4.3.tgz",
"integrity": "sha512-qhcZfiNujvR9KsoNy5l5IG7n7ie3Vd62XYvLrqBdUMF51gav4Dwj1OfgjOokrfbGBQouzvHuzQOT21OkX+n7PQ==",
"version": "7.4.4",
"resolved": "https://registry.npmmirror.com/@vue/devtools-core/-/devtools-core-7.4.4.tgz",
"integrity": "sha512-DLxgA3DfeADkRzhAfm3G2Rw/cWxub64SdP5b+s5dwL30+whOGj+QNhmyFpwZ8ZTrHDFRIPj0RqNzJ8IRR1pz7w==",
"dev": true,
"dependencies": {
"@vue/devtools-kit": "^7.4.3",
"@vue/devtools-shared": "^7.4.3",
"@vue/devtools-kit": "^7.4.4",
"@vue/devtools-shared": "^7.4.4",
"mitt": "^3.0.1",
"nanoid": "^3.3.4",
"pathe": "^1.1.2",
@ -3094,12 +3074,12 @@
}
},
"node_modules/@vue/devtools-kit": {
"version": "7.4.3",
"resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.4.3.tgz",
"integrity": "sha512-IXLms+1O7Je4Z/drGb2srEzA1ONeiIUrEj0X/J4wb15Bcn8DFfCNtes7t9FNryIMsvpC5ZkL4SWpmjiaQidOeg==",
"version": "7.4.4",
"resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.4.4.tgz",
"integrity": "sha512-awK/4NfsUG0nQ7qnTM37m7ZkEUMREyPh8taFCX+uQYps/MTFEum0AD05VeGDRMXwWvMmGIcWX9xp8ZiBddY0jw==",
"dev": true,
"dependencies": {
"@vue/devtools-shared": "^7.4.3",
"@vue/devtools-shared": "^7.4.4",
"birpc": "^0.2.17",
"hookable": "^5.5.3",
"mitt": "^3.0.1",
@ -3109,18 +3089,18 @@
}
},
"node_modules/@vue/devtools-shared": {
"version": "7.4.3",
"resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.4.3.tgz",
"integrity": "sha512-gcrQtLteurIh3A9QC0x3Q5TvAp599Pcr9aBbbBd9jAICxUpX2qcXlDczQauWuRWmZwXeCI6i7OfrTVd/QMMgqA==",
"version": "7.4.4",
"resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.4.4.tgz",
"integrity": "sha512-yeJULXFHOKIm8yL2JFO050a9ztTVqOCKTqN9JHFxGTJN0b+gjtfn6zC+FfyHUgjwCwf6E3hfKrlohtthcqoYqw==",
"dev": true,
"dependencies": {
"rfdc": "^1.4.1"
}
},
"node_modules/@vue/language-core": {
"version": "2.1.4",
"resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.1.4.tgz",
"integrity": "sha512-i8pfAgNjTNjabBX1xRsuV6aRw2E8bdQXwd5H8m3cUkTVJju3QN5nfdoXET0uK+yXsuloNJPzo6PXFujRRPNmMA==",
"version": "2.1.6",
"resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.1.6.tgz",
"integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==",
"dev": true,
"dependencies": {
"@volar/language-core": "~2.4.1",
@ -3142,49 +3122,49 @@
}
},
"node_modules/@vue/reactivity": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.0.tgz",
"integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.3.tgz",
"integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
"dependencies": {
"@vue/shared": "3.5.0"
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/runtime-core": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
"integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
"integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
"dependencies": {
"@vue/reactivity": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/reactivity": "3.5.3",
"@vue/shared": "3.5.3"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
"integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
"integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
"dependencies": {
"@vue/reactivity": "3.5.0",
"@vue/runtime-core": "3.5.0",
"@vue/shared": "3.5.0",
"@vue/reactivity": "3.5.3",
"@vue/runtime-core": "3.5.3",
"@vue/shared": "3.5.3",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
"integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
"integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
"dependencies": {
"@vue/compiler-ssr": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-ssr": "3.5.3",
"@vue/shared": "3.5.3"
},
"peerDependencies": {
"vue": "3.5.0"
"vue": "3.5.3"
}
},
"node_modules/@vue/shared": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.0.tgz",
"integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q=="
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.3.tgz",
"integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA=="
},
"node_modules/@vueuse/core": {
"version": "11.0.3",
@ -3939,18 +3919,6 @@
"node": ">=6"
}
},
"node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
@ -3960,9 +3928,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001655",
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
"integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
"version": "1.0.30001658",
"resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001658.tgz",
"integrity": "sha512-N2YVqWbJELVdrnsW5p+apoQyYt51aBMSsBZki1XZEfeBCexcM/sf4xiAHcXQBkuOwJBXtWF7aW1sYX6tKebPHw==",
"dev": true,
"funding": [
{
@ -5075,11 +5043,11 @@
"dev": true
},
"node_modules/debug": {
"version": "4.3.6",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.6.tgz",
"integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
"version": "4.3.7",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz",
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
"dependencies": {
"ms": "2.1.2"
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@ -5359,15 +5327,15 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/electron-to-chromium": {
"version": "1.5.13",
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
"integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
"version": "1.5.18",
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
"integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
"dev": true
},
"node_modules/element-plus": {
"version": "2.8.1",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.1.tgz",
"integrity": "sha512-p11/6w/O0+hGvPhiN3jrcgh+XG+eg5jZlLdQVYvcPHZYhhCh3J3YeZWW1JO/REPES1vevkboT6VAi+9wHA8Dsg==",
"version": "2.8.2",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.2.tgz",
"integrity": "sha512-pqoQlaUmzUFCjjTHyxGO7Cd0CizsQpIaad1ozV9PCaYjh2T4MIMnjfifqiYs2lWoZ/8GVwrRG1WTCfnZEjwfcg==",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.1",
@ -5772,16 +5740,17 @@
}
},
"node_modules/eslint": {
"version": "9.9.1",
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.9.1.tgz",
"integrity": "sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==",
"version": "9.10.0",
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.10.0.tgz",
"integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.11.0",
"@eslint/config-array": "^0.18.0",
"@eslint/eslintrc": "^3.1.0",
"@eslint/js": "9.9.1",
"@eslint/js": "9.10.0",
"@eslint/plugin-kit": "^0.1.0",
"@humanwhocodes/module-importer": "^1.0.1",
"@humanwhocodes/retry": "^0.3.0",
"@nodelib/fs.walk": "^1.2.8",
@ -5804,7 +5773,6 @@
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
"json-stable-stringify-without-jsonify": "^1.0.1",
"levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
@ -5925,9 +5893,9 @@
"dev": true
},
"node_modules/eslint-plugin-antfu": {
"version": "2.4.1",
"resolved": "https://registry.npmmirror.com/eslint-plugin-antfu/-/eslint-plugin-antfu-2.4.1.tgz",
"integrity": "sha512-VfS8kCz4iif43/Ahrnb6XHi4L5evyZEX3URFQJwj55KPBvmhRv4TgBHm7fsfQewJltFFkDRVIC6Vkg5QbS0ZnA==",
"version": "2.5.0",
"resolved": "https://registry.npmmirror.com/eslint-plugin-antfu/-/eslint-plugin-antfu-2.5.0.tgz",
"integrity": "sha512-YLIWE22/ERe6Jpqt6bJdvALw8SWvf4x2DQjvVpRvAv8LrdHbwWckkoueAf8oQFgSOLsL1R/axa+exjpubPp0fw==",
"dev": true,
"dependencies": {
"@antfu/utils": "^0.7.10"
@ -6292,14 +6260,14 @@
}
},
"node_modules/eslint-plugin-perfectionist": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-3.3.0.tgz",
"integrity": "sha512-sGgShkEqDBqIZ3WlenGHwLe1cl3vHKTfeh9b1XXAamaxSC7AY4Os0jdNCXnGJW4l0TlpismT5t2r7CXY7sfKlw==",
"version": "3.4.0",
"resolved": "https://registry.npmmirror.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-3.4.0.tgz",
"integrity": "sha512-vXyd1sFg3H/7aKgBUie62bA6E0EN3Dh0LCD5r4vR/IYtTljxOnyckI1AV0Arw4eYjC/W9T1X04Pl2mdLsdWtMA==",
"dev": true,
"dependencies": {
"@typescript-eslint/types": "^8.3.0",
"@typescript-eslint/utils": "^8.3.0",
"minimatch": "^10.0.1",
"@typescript-eslint/types": "^8.4.0",
"@typescript-eslint/utils": "^8.4.0",
"minimatch": "^9.0.5",
"natural-compare-lite": "^1.4.0"
},
"engines": {
@ -6327,21 +6295,6 @@
}
}
},
"node_modules/eslint-plugin-perfectionist/node_modules/minimatch": {
"version": "10.0.1",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-10.0.1.tgz",
"integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": "20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/eslint-plugin-regexp": {
"version": "2.6.0",
"resolved": "https://registry.npmmirror.com/eslint-plugin-regexp/-/eslint-plugin-regexp-2.6.0.tgz",
@ -6865,9 +6818,9 @@
"dev": true
},
"node_modules/follow-redirects": {
"version": "1.15.8",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.8.tgz",
"integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
"version": "1.15.9",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
"integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
"funding": [
{
"type": "individual",
@ -8533,18 +8486,6 @@
"node": ">= 18"
}
},
"node_modules/marked-katex-extension": {
"version": "5.1.2",
"resolved": "https://registry.npmmirror.com/marked-katex-extension/-/marked-katex-extension-5.1.2.tgz",
"integrity": "sha512-jRtacvDAPULKBWArDno0IGpzzpUw12yb8OaEsv3dTlvcIr21+mF9kD+Bxo2m/ErX/2ZIml6zFVMnpxCpqx3stw==",
"dependencies": {
"@types/katex": "^0.16.7"
},
"peerDependencies": {
"katex": ">=0.16 <0.17",
"marked": ">=4 <15"
}
},
"node_modules/md5": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz",
@ -8633,9 +8574,9 @@
}
},
"node_modules/mermaid": {
"version": "11.1.0",
"resolved": "https://registry.npmmirror.com/mermaid/-/mermaid-11.1.0.tgz",
"integrity": "sha512-ICexrwPRzU1USFcpAdrVVGjCwEajD+iAwu2LVHi59D6VbXmFhwfB9TbCL3sA6NBR1tl5qUjQSAOdc9lOKlXnEw==",
"version": "11.1.1",
"resolved": "https://registry.npmmirror.com/mermaid/-/mermaid-11.1.1.tgz",
"integrity": "sha512-bdHVu86yrjCkTPRxWHG+B5YucXE8wGaniTnWwhMJe/l253QdX1cuLgYt4ZVvApV1ZXCTsz5ilxoS8KX95U7gdw==",
"dependencies": {
"@braintree/sanitize-url": "^7.0.1",
"@iconify/utils": "^2.1.32",
@ -8890,9 +8831,9 @@
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"version": "2.1.3",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/muggle-string": {
"version": "0.4.1",
@ -9885,9 +9826,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.44",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.44.tgz",
"integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
"version": "8.4.45",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.45.tgz",
"integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
"funding": [
{
"type": "opencollective",
@ -12080,17 +12021,24 @@
}
},
"node_modules/unplugin": {
"version": "1.12.3",
"resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.12.3.tgz",
"integrity": "sha512-my8DH0/T/Kx33KO+6QXAqdeMYgyy0GktlOpdQjpagfHKw5DrD0ctPr7SHUyOT3g4ZVpzCQGt/qcpuoKJ/pniHA==",
"version": "1.13.1",
"resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.13.1.tgz",
"integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==",
"dev": true,
"dependencies": {
"acorn": "^8.12.1",
"webpack-sources": "^3.2.3",
"webpack-virtual-modules": "^0.6.2"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"webpack-sources": "^3"
},
"peerDependenciesMeta": {
"webpack-sources": {
"optional": true
}
}
},
"node_modules/unplugin-auto-import": {
@ -12443,14 +12391,14 @@
}
},
"node_modules/vite-plugin-vue-devtools": {
"version": "7.4.3",
"resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.4.3.tgz",
"integrity": "sha512-1mC3OtuESuzZB77LFGN5eGnjjE8ToJwUrd95TPvDLAf8dRdCgMgooBM9/Py07TsZeh6wJJEBE+Bo7cFaIvEi5A==",
"version": "7.4.4",
"resolved": "https://registry.npmmirror.com/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.4.4.tgz",
"integrity": "sha512-lJ7Vr6gznv1nf2S75XJTpXl4XcwnHfyvqJQ7szOvTUfumQALDGo772TEH69wx8gkY/ZWZQea4DZR5IQZMOZKUA==",
"dev": true,
"dependencies": {
"@vue/devtools-core": "^7.4.3",
"@vue/devtools-kit": "^7.4.3",
"@vue/devtools-shared": "^7.4.3",
"@vue/devtools-core": "^7.4.4",
"@vue/devtools-kit": "^7.4.4",
"@vue/devtools-shared": "^7.4.4",
"execa": "^8.0.1",
"sirv": "^2.0.4",
"vite-plugin-inspect": "^0.8.7",
@ -12939,15 +12887,15 @@
"integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
},
"node_modules/vue": {
"version": "3.5.0",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.0.tgz",
"integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
"version": "3.5.3",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.3.tgz",
"integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
"dependencies": {
"@vue/compiler-dom": "3.5.0",
"@vue/compiler-sfc": "3.5.0",
"@vue/runtime-dom": "3.5.0",
"@vue/server-renderer": "3.5.0",
"@vue/shared": "3.5.0"
"@vue/compiler-dom": "3.5.3",
"@vue/compiler-sfc": "3.5.3",
"@vue/runtime-dom": "3.5.3",
"@vue/server-renderer": "3.5.3",
"@vue/shared": "3.5.3"
},
"peerDependencies": {
"typescript": "*"
@ -13028,13 +12976,13 @@
}
},
"node_modules/vue-tsc": {
"version": "2.1.4",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.1.4.tgz",
"integrity": "sha512-XTzMXQcsixAvNbpou/9qngEsZawaiJRZH3Ja+lfgRfv2A1TJv9vnZ/Kyv7XxPqv/TaZVFSnjGpM87VbWIg6yQg==",
"version": "2.1.6",
"resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-2.1.6.tgz",
"integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==",
"dev": true,
"dependencies": {
"@volar/typescript": "~2.4.1",
"@vue/language-core": "2.1.4",
"@vue/language-core": "2.1.6",
"semver": "^7.5.4"
},
"bin": {
@ -13150,15 +13098,6 @@
"resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
"node_modules/webpack-sources": {
"version": "3.2.3",
"resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true,
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/webpack-virtual-modules": {
"version": "0.6.2",
"resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",

View File

@ -34,10 +34,8 @@
"form-data": "4.0.0",
"highlight.js": "^11.10.0",
"juice": "^8.0.0",
"katex": "^0.16.11",
"lucide-vue-next": "^0.428.0",
"marked": "^14.1.1",
"marked-katex-extension": "^5.1.2",
"mermaid": "^11.1.0",
"minio": "7.1.3",
"node-fetch": "^3.3.2",

View File

@ -111,13 +111,7 @@ function copy() {
const clipboardDiv = document.getElementById(`output`)
clipboardDiv.innerHTML = mergeCss(clipboardDiv.innerHTML)
clipboardDiv.innerHTML = modifyHtmlStructure(clipboardDiv.innerHTML)
// katex
clipboardDiv.innerHTML = clipboardDiv.innerHTML
.replace(
/class="base"( style="display: inline")*/g,
`class="base" style="display: inline"`,
)
// position translateY
.replace(/top:(.*?)em/g, `transform: translateY($1em)`)
//

7
src/utils/MDKatex.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
import type { MarkedExtension } from 'marked'
export interface MarkedKatexOptions {
nonStandard?: boolean
}
export function MDKatex(options?: MarkedKatexOptions): MarkedExtension

93
src/utils/MDKatex.js Normal file
View File

@ -0,0 +1,93 @@
const inlineRule = /^(\${1,2})(?!\$)((?:\\.|[^\\\n])*?(?:\\.|[^\\\n$]))\1(?=[\s?!.,:?!。,:]|$)/
const inlineRuleNonStandard = /^(\${1,2})(?!\$)((?:\\.|[^\\\n])*?(?:\\.|[^\\\n$]))\1/ // Non-standard, even if there are no spaces before and after $ or $$, try to parse
const blockRule = /^(\${1,2})\n((?:\\[\s\S]|[^\\])+?)\n\1(?:\n|$)/
function createRenderer(display) {
return (token) => {
window.MathJax.texReset()
const mjxContainer = window.MathJax.tex2svg(token.text, { display })
const svg = mjxContainer.firstChild
const width = svg.style[`min-width`] || svg.getAttribute(`width`)
svg.removeAttribute(`width`)
svg.style = `max-width: 300vw !important;`
svg.style.width = width
svg.style.display = `initial`
if (display) {
return `<section style="text-align: center; overflow: auto;">${svg.outerHTML}</section>`
}
else {
return `<span style="display: inline-block; vertical-align: middle; line-height: 1;">${svg.outerHTML}</span>`
}
}
}
function inlineKatex(options, renderer) {
const nonStandard = options && options.nonStandard
const ruleReg = nonStandard ? inlineRuleNonStandard : inlineRule
return {
name: `inlineKatex`,
level: `inline`,
start(src) {
let index
let indexSrc = src
while (indexSrc) {
index = indexSrc.indexOf(`$`)
if (index === -1) {
return
}
const f = nonStandard ? index > -1 : index === 0 || indexSrc.charAt(index - 1) === ` `
if (f) {
const possibleKatex = indexSrc.substring(index)
if (possibleKatex.match(ruleReg)) {
return index
}
}
indexSrc = indexSrc.substring(index + 1).replace(/^\$+/, ``)
}
},
tokenizer(src) {
const match = src.match(ruleReg)
if (match) {
return {
type: `inlineKatex`,
raw: match[0],
text: match[2].trim(),
displayMode: match[1].length === 2,
}
}
},
renderer,
}
}
function blockKatex(options, renderer) {
return {
name: `blockKatex`,
level: `block`,
tokenizer(src) {
const match = src.match(blockRule)
if (match) {
return {
type: `blockKatex`,
raw: match[0],
text: match[2].trim(),
displayMode: match[1].length === 2,
}
}
},
renderer,
}
}
export function MDKatex(options = {}) {
return {
extensions: [
inlineKatex(options, createRenderer(false)),
blockKatex(options, createRenderer(true)),
],
}
}

View File

@ -1,20 +1,14 @@
import type { Renderer, RendererObject, Tokens } from 'marked'
import { marked } from 'marked'
import hljs from 'highlight.js'
import markedKatex from 'marked-katex-extension'
import mermaid from 'mermaid'
import { toMerged } from 'es-toolkit'
import type { PropertiesHyphen } from 'csstype'
import { MDKatex } from './MDKatex'
import type { ExtendedProperties, IOpts, ThemeStyles } from '@/types'
marked.use(
markedKatex({
throwOnError: false,
output: `html`,
nonStandard: true,
}),
)
marked.use(MDKatex({ nonStandard: true }))
function buildTheme({ theme, fonts, size }: IOpts): ThemeStyles {
const base = toMerged(theme.base, {
@ -151,7 +145,7 @@ export function initRenderer(opts: IOpts) {
blockquote({ tokens }: Tokens.Blockquote): string {
let text = this.parser.parse(tokens)
text = text.replace(/<p.*?>/g, `<p ${styles(`blockquote_p`)}>`)
text = text.replace(/<p .*?>/g, `<p ${styles(`blockquote_p`)}>`)
return styledContent(`blockquote`, text)
},