vue-stream-markdown 0.1.5 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/README.md +1 -0
  2. package/dist/{blockquote-bkADuiGm.js → blockquote-C68fU4lp.js} +4 -3
  3. package/dist/{button-BQhuT7wh.js → button-BDO3n0n_.js} +36 -28
  4. package/dist/button-CdUyT8T_.js +6 -0
  5. package/dist/{code-DF8PTNol.js → code-2Dd0EGfm.js} +12 -11
  6. package/dist/code-block-Co2UoPPS.js +10 -0
  7. package/dist/{code-block-Dm2wl0cb.js → code-block-hQLDeAmP.js} +68 -80
  8. package/dist/{composables-yny5gJo3.js → composables-DuQ72m6O.js} +1163 -1115
  9. package/dist/corner-down-left-B77X84F8.js +24 -0
  10. package/dist/{delete-D17YBeI-.js → delete-CB-OS2WZ.js} +4 -3
  11. package/dist/dist-CYkm26BF.js +119 -0
  12. package/dist/dropdown-BB3nyts8.js +6 -0
  13. package/dist/{emphasis-B-2R_0Q5.js → emphasis-BmUoyBRK.js} +4 -3
  14. package/dist/{en-US-Kw2LYAMk.js → en-US-Cw-sFSiZ.js} +2 -1
  15. package/dist/{error-component-Bb0gIZsx.js → error-component-CtZr0_st.js} +10 -4
  16. package/dist/error-component-biOT0E-h.js +5 -0
  17. package/dist/footnote-definition-55TjXXwa.js +104 -0
  18. package/dist/footnote-reference-lk2rvC4Q.js +86 -0
  19. package/dist/{heading-DyJIwNrN.js → heading-BlOK3uk2.js} +4 -3
  20. package/dist/{html-DXNqMvt_.js → html-D7bGx0Cz.js} +2 -2
  21. package/dist/icon-PEivHbuv.js +67 -0
  22. package/dist/icon-mUoYnA6R.js +4 -0
  23. package/dist/image-B6Pw2YBI.js +9 -0
  24. package/dist/{image-BPhFn1xp.js → image-Bqn98dDB.js} +18 -15
  25. package/dist/image-VMGQj_VU.js +258 -0
  26. package/dist/{index.css → index.css/index.css} +31 -4
  27. package/dist/index.d.ts +297 -196
  28. package/dist/index.js +2511 -74
  29. package/dist/{inline-code-C44UJ2TH.js → inline-code-BZNE1ALQ.js} +2 -2
  30. package/dist/{inline-math-wO1rMt9T.js → inline-math--lfq9WCW.js} +5 -4
  31. package/dist/{link-sGo7CEll.js → link-DAOjAX6n.js} +7 -6
  32. package/dist/{list-C0I1ysSI.js → list-EOEqkWEi.js} +4 -3
  33. package/dist/{list-item-BoC2wKBL.js → list-item-ZG4eadLp.js} +4 -3
  34. package/dist/{math-BlqtUf2r.js → math-3zyrsc0O.js} +5 -4
  35. package/dist/{mermaid-Ka1jnXrR.js → mermaid-VkvXdOuQ.js} +32 -18
  36. package/dist/modal-BKzT1TQI.js +4 -0
  37. package/dist/{modal-Rc_RoeYA.js → modal-DrPdD2g1.js} +4 -4
  38. package/dist/{node-list-YhpHXdM_.js → node-list-D7eKaZGS.js} +19 -10
  39. package/dist/node-list-DtNGUnnI.js +4 -0
  40. package/dist/{paragraph-BN-4-Dn7.js → paragraph-DEyWEFYY.js} +4 -3
  41. package/dist/previewers-DYnyVv4Y.js +10 -0
  42. package/dist/segmented-6Ch-Ees3.js +7 -0
  43. package/dist/{segmented-CaC54iz_.js → segmented-CeLXMLZa.js} +1 -1
  44. package/dist/{shiki-sJNZTn1K.js → shiki-Dgoch7Q6.js} +5 -5
  45. package/dist/spin-DElj7VPm.js +3 -0
  46. package/dist/{strong-NdAS3VjP.js → strong-CFjQLk1h.js} +4 -3
  47. package/dist/table-20vwclBI.js +3 -0
  48. package/dist/{table-CWX5B2i1.js → table-DI25RphX.js} +21 -25
  49. package/dist/{text-DpleLvNh.js → text-DP2IAZrc.js} +2 -2
  50. package/dist/{thematic-break-D5GvzU5S.js → thematic-break-DIO-A8eY.js} +2 -2
  51. package/dist/tooltip-CAyfm3_l.js +4 -0
  52. package/dist/{tooltip-Bgbzbk4Q.js → tooltip-CnO7OPL1.js} +1 -1
  53. package/dist/vanilla-BZ1fQWZQ.js +4 -0
  54. package/dist/{vanilla-BTOVqKl7.js → vanilla-YFxsSfhA.js} +1 -1
  55. package/dist/{yaml-y0snrPRx.js → yaml-eOuEqAWX.js} +3 -3
  56. package/dist/{zh-CN-Dfow4Yn2.js → zh-CN-B9lWRP8O.js} +3 -2
  57. package/dist/{zoom-container-B1qbA-7z.js → zoom-container-CrKx_BbS.js} +32 -32
  58. package/dist/zoom-container-j4kY9qX_.js +7 -0
  59. package/package.json +19 -12
  60. package/dist/button-JYC8d-B-.js +0 -5
  61. package/dist/code-block-BhMDz2ZL.js +0 -9
  62. package/dist/dropdown-Y5_Z4a_u.js +0 -5
  63. package/dist/error-component-DEIWb6kB.js +0 -4
  64. package/dist/image-DXBD47sF.js +0 -8
  65. package/dist/image-DvOGBhi-.js +0 -327
  66. package/dist/modal-Duhc-vVa.js +0 -4
  67. package/dist/node-list-C1je2nLd.js +0 -3
  68. package/dist/previewers-D0VVcdjL.js +0 -10
  69. package/dist/segmented-XdoLnuuq.js +0 -6
  70. package/dist/spin-wM2KE8mO.js +0 -3
  71. package/dist/table-R9gmCXm_.js +0 -3
  72. package/dist/tooltip-BJDs-A8d.js +0 -4
  73. package/dist/vanilla-DA5bwIkr.js +0 -4
  74. package/dist/zoom-container-KztuE4ri.js +0 -6
  75. /package/dist/{angular-Mip1mspI.js → angular-CJL7ngrz.js} +0 -0
  76. /package/dist/{angular-component-Cq5UbX7R.js → angular-component-COlDvuNE.js} +0 -0
  77. /package/dist/{apache-BSq7fX32.js → apache-CVvmKdUn.js} +0 -0
  78. /package/dist/{arrow-left-C5s0Sn8o.js → arrow-left-Dqeb1_Um.js} +0 -0
  79. /package/dist/{asciidoc-DS-PMOLv.js → asciidoc-DOmevTVz.js} +0 -0
  80. /package/dist/{assembly-BPatlOM7.js → assembly-Bj0yQVcL.js} +0 -0
  81. /package/dist/{astro-CSD_ZjXp.js → astro-DUti0QFn.js} +0 -0
  82. /package/dist/{bash-RITislE1.js → bash-BfyNXzLO.js} +0 -0
  83. /package/dist/{batch-DWPShYhN.js → batch-Dp6N3cFQ.js} +0 -0
  84. /package/dist/{bicep-C6BEHfP6.js → bicep-CEkCHedl.js} +0 -0
  85. /package/dist/{c-DNo3tsNy.js → c-CTmG9vr2.js} +0 -0
  86. /package/dist/{check-BfpxIITS.js → check-C6XCJVPi.js} +0 -0
  87. /package/dist/{chevron-down-LeNeemjn.js → chevron-down-aK8OlmM2.js} +0 -0
  88. /package/dist/{circle-alert-BjDuIzgc.js → circle-alert-C5r2kfnc.js} +0 -0
  89. /package/dist/{clojure-C1DEYHW0.js → clojure-CHjliXb8.js} +0 -0
  90. /package/dist/{cmake-B69mdXcH.js → cmake-BsKz8Gt4.js} +0 -0
  91. /package/dist/{cobol-qmL-zIWi.js → cobol-BvWYwPFU.js} +0 -0
  92. /package/dist/{code-D9CiymEK.js → code-Bwlpb4mV.js} +0 -0
  93. /package/dist/{codeowners-Crklt5nF.js → codeowners-CfTM6yvs.js} +0 -0
  94. /package/dist/{coffeescript-k3huSp23.js → coffeescript-BDiFe_B2.js} +0 -0
  95. /package/dist/{copy-C4580J93.js → copy-VpvA-5VS.js} +0 -0
  96. /package/dist/{cpp-Cn3MB35e.js → cpp-BfV_KWzp.js} +0 -0
  97. /package/dist/{crystal-D5aGETSx.js → crystal-BXT0x2i3.js} +0 -0
  98. /package/dist/{csharp-CgkTkbPx.js → csharp-C6rkxA6x.js} +0 -0
  99. /package/dist/{css-DRH4n_IV.js → css-Drxb2cuf.js} +0 -0
  100. /package/dist/{csv-D5nNTIzO.js → csv-CHKRaQ9l.js} +0 -0
  101. /package/dist/{cue-B5mC88-N.js → cue-DksiF2mE.js} +0 -0
  102. /package/dist/{d-BdQRMgma.js → d-C8JgmiVc.js} +0 -0
  103. /package/dist/{dart-BGnfn0NN.js → dart-BX3GppmW.js} +0 -0
  104. /package/dist/{database-Ca1VGX7u.js → database-Lmva5T5u.js} +0 -0
  105. /package/dist/{diff-DVaTsnqu.js → diff-C61xHcnV.js} +0 -0
  106. /package/dist/{docker-E47qYlmL.js → docker-Dws0Euuu.js} +0 -0
  107. /package/dist/{download-DytrK56a.js → download-BB76SD0m.js} +0 -0
  108. /package/dist/{elixir-C-jqqu6q.js → elixir-CtaCeLkf.js} +0 -0
  109. /package/dist/{elm-CmeHvaWl.js → elm-CFvSvo-7.js} +0 -0
  110. /package/dist/{env-Ck1BHoxR.js → env-BwMmmmE5.js} +0 -0
  111. /package/dist/{erlang-CIP8kpGJ.js → erlang-DJRbvPSq.js} +0 -0
  112. /package/dist/{eye-TaEwQS2Z.js → eye-VjweBQoW.js} +0 -0
  113. /package/dist/{flip-horizontal-BFWjqDbQ.js → flip-horizontal-D4IxaKDu.js} +0 -0
  114. /package/dist/{fortran-DJVP2s7V.js → fortran-D3Vf5GTV.js} +0 -0
  115. /package/dist/{fsharp-Bp6mUcG0.js → fsharp-C2iQH5b1.js} +0 -0
  116. /package/dist/{git-BDcqJ1Gp.js → git-DN4z97-P.js} +0 -0
  117. /package/dist/{gleam-JLiZVlev.js → gleam-PhX3VC_5.js} +0 -0
  118. /package/dist/{go-ClcCiS7e.js → go-xPznl0oK.js} +0 -0
  119. /package/dist/{graphql-D2RDo-DF.js → graphql-sVzb1_rA.js} +0 -0
  120. /package/dist/{groovy-DLZBw8xE.js → groovy-Bvkrc3eE.js} +0 -0
  121. /package/dist/{haml-Da74jRwZ.js → haml-Y_qa35Lk.js} +0 -0
  122. /package/dist/{handlebars-CNgS57Sz.js → handlebars-Bo6cxn4k.js} +0 -0
  123. /package/dist/{haskell-DCvfD6VB.js → haskell-D8t1pxAr.js} +0 -0
  124. /package/dist/{haxe-CHVK1TId.js → haxe-C-sdXVB9.js} +0 -0
  125. /package/dist/{html-Du4235Z-.js → html-I3JKB_2G.js} +0 -0
  126. /package/dist/{http-B8VAFeQ5.js → http-Dj2NVTPO.js} +0 -0
  127. /package/dist/{image-D8MZj4W5.js → image-DzKVFSaY.js} +0 -0
  128. /package/dist/{java-CoSdnK1N.js → java-BulcCUaV.js} +0 -0
  129. /package/dist/{javascript-BCDeVll0.js → javascript-DQlby440.js} +0 -0
  130. /package/dist/{jinja-DYbiqZy0.js → jinja-HRQZM5oZ.js} +0 -0
  131. /package/dist/{json-CdzCyWJA.js → json-wUPUX2x-.js} +0 -0
  132. /package/dist/{julia-pswJGtpP.js → julia-DjHYSWzj.js} +0 -0
  133. /package/dist/{kdl-M8rfQ85l.js → kdl-CGLuct22.js} +0 -0
  134. /package/dist/{kotlin-CfCV33oB.js → kotlin-CnR9eg7m.js} +0 -0
  135. /package/dist/{latex-DK8DFhTm.js → latex-CesDKd8G.js} +0 -0
  136. /package/dist/{less-BFnNZiIs.js → less-215r2nUv.js} +0 -0
  137. /package/dist/{link-C7eU_yi-.js → link-4JB1WqYS.js} +0 -0
  138. /package/dist/{liquid-C8h46DoX.js → liquid-FFTnvZwx.js} +0 -0
  139. /package/dist/{lisp-C3FbGuD1.js → lisp-BNWIo3S3.js} +0 -0
  140. /package/dist/{log-D-O3FXf2.js → log-C3BhnPjM.js} +0 -0
  141. /package/dist/{lua-BC_aR1_i.js → lua-jBHQD7Fh.js} +0 -0
  142. /package/dist/{luau-DFUOrNN7.js → luau-CJKAqC3L.js} +0 -0
  143. /package/dist/{makefile-Ck67veVV.js → makefile-DZmoFYpF.js} +0 -0
  144. /package/dist/{markdown-BX13X3kd.js → markdown-BEABBw2C.js} +0 -0
  145. /package/dist/{marko-CQE8YTCc.js → marko-DE7d51Q2.js} +0 -0
  146. /package/dist/{matlab-Bd9O2Ml3.js → matlab-n99nEoGl.js} +0 -0
  147. /package/dist/{maximize-CDZ9rnYF.js → maximize-VRncBaHe.js} +0 -0
  148. /package/dist/{mermaid-Dv-Pr0W-.js → mermaid-Dv9_1JlU.js} +0 -0
  149. /package/dist/{minimize-B9ER7p2X.js → minimize-k8aU78V4.js} +0 -0
  150. /package/dist/{nextflow-D3lDq1Yi.js → nextflow-DjdDVx1j.js} +0 -0
  151. /package/dist/{nginx-CgsqCL4l.js → nginx-DH4jOOdC.js} +0 -0
  152. /package/dist/{nim-BJdSu3c6.js → nim-Cb0hPGv5.js} +0 -0
  153. /package/dist/{nix-B7K_D6CN.js → nix-Bf4Vwv5v.js} +0 -0
  154. /package/dist/{ocaml-gYS1Y45s.js → ocaml-BwJ1z9S7.js} +0 -0
  155. /package/dist/{perl-DXFhFWhI.js → perl-P6bAYvN9.js} +0 -0
  156. /package/dist/{php-We35bF4E.js → php-BGTGPBW1.js} +0 -0
  157. /package/dist/{postcss-BWovY_YV.js → postcss-D8a2Jx1D.js} +0 -0
  158. /package/dist/{powershell-C6teiBsq.js → powershell-DNOnus4K.js} +0 -0
  159. /package/dist/{prisma-UyJEg0_X.js → prisma-DquVk_GR.js} +0 -0
  160. /package/dist/{prolog-YZsPgdnw.js → prolog-BxJJGnOg.js} +0 -0
  161. /package/dist/{properties-DaPbL0e2.js → properties-DjauSeDE.js} +0 -0
  162. /package/dist/{proto-1LIwu2O1.js → proto-3aU1SxxY.js} +0 -0
  163. /package/dist/{pug-CzkUK-Ec.js → pug-OiYFRnMd.js} +0 -0
  164. /package/dist/{puppet-CNhB1MHb.js → puppet-8Sq4QIbE.js} +0 -0
  165. /package/dist/{python-B_hgEobv.js → python-CBYVyhMm.js} +0 -0
  166. /package/dist/{r-CVeKYmPK.js → r-DfzMNaiK.js} +0 -0
  167. /package/dist/{racket-D5UfvXuw.js → racket-EkEmTJtD.js} +0 -0
  168. /package/dist/{razor-RIKaANTN.js → razor-BSd-q379.js} +0 -0
  169. /package/dist/{rotate-ccw-square-C2KVFUF3.js → rotate-ccw-square-Dy0doneR.js} +0 -0
  170. /package/dist/{ruby-C8wV0pMO.js → ruby-CNn-W_DF.js} +0 -0
  171. /package/dist/{rust-75Gei1mP.js → rust-BW9y4Ksf.js} +0 -0
  172. /package/dist/{sass-Cq68xmQ4.js → sass-Cyleqehh.js} +0 -0
  173. /package/dist/{scala-C_E5rjSc.js → scala-2YqaI_aG.js} +0 -0
  174. /package/dist/{scheme-Bm-q-nLL.js → scheme-CWx6sQlk.js} +0 -0
  175. /package/dist/{shader-DPaRkMCs.js → shader-CLzSKNOz.js} +0 -0
  176. /package/dist/{shiki-token-renderer-CLmUjKa3.js → shiki-token-renderer-BjxmGfXH.js} +0 -0
  177. /package/dist/{solidity-DvHG_0CD.js → solidity-CgjJUETv.js} +0 -0
  178. /package/dist/{spin--f5jNjBn.js → spin-DzERwGWy.js} +0 -0
  179. /package/dist/{stata-DoVloJLm.js → stata-CI3W9UFN.js} +0 -0
  180. /package/dist/{svelte-tlbA11de.js → svelte-D-OV6frL.js} +0 -0
  181. /package/dist/{swift-BZn5eRnK.js → swift-CcBwS4X5.js} +0 -0
  182. /package/dist/{table-CaUMjs4M.js → table-BMlD4JhL.js} +0 -0
  183. /package/dist/{terraform-c5-k7yB1.js → terraform-BwM_GPTy.js} +0 -0
  184. /package/dist/{text-DPCGWvDK.js → text-hIzRUiKs.js} +0 -0
  185. /package/dist/{theme.css → theme.css/theme.css} +0 -0
  186. /package/dist/{toml-DdLGBe1A.js → toml-CXJ7B-C1.js} +0 -0
  187. /package/dist/{twig-D_jzZxh6.js → twig-CXQNsdEx.js} +0 -0
  188. /package/dist/{typescript-B95hq2ns.js → typescript-0uiFYOof.js} +0 -0
  189. /package/dist/{typst-CSAEQ4yK.js → typst-gIi5b52E.js} +0 -0
  190. /package/dist/{v-BAhebuOB.js → v-Ct-HfSu0.js} +0 -0
  191. /package/dist/{vala-RAu83-lp.js → vala-BZbAZj2w.js} +0 -0
  192. /package/dist/{verilog-BgmTn52U.js → verilog-NzFyyNP_.js} +0 -0
  193. /package/dist/{vim-c8oTCLkH.js → vim-CN-tRagW.js} +0 -0
  194. /package/dist/{vue-TGT6HTBA.js → vue-BmLzKAao.js} +0 -0
  195. /package/dist/{xml-C1HDr874.js → xml-CBzkooc-.js} +0 -0
  196. /package/dist/{yaml-BO7FjFQZ.js → yaml-CT7I_lPM.js} +0 -0
  197. /package/dist/{zig-qANBp1SU.js → zig-B7F-QzJD.js} +0 -0
  198. /package/dist/{zoomIn-iVMAUxIz.js → zoomIn-DlPeXZbT.js} +0 -0
  199. /package/dist/{zoomOut-Cxq1_dIQ.js → zoomOut-Lvyw8SOW.js} +0 -0
@@ -8,7 +8,11 @@ function useCodeOptions(options) {
8
8
  const codeOptions = computed(() => unref(options.codeOptions));
9
9
  const languageCodeOptions = computed(() => {
10
10
  var _codeOptions$value;
11
- return ((_codeOptions$value = codeOptions.value) === null || _codeOptions$value === void 0 || (_codeOptions$value = _codeOptions$value.language) === null || _codeOptions$value === void 0 ? void 0 : _codeOptions$value[language.value]) ?? codeOptions.value;
11
+ const specificOptions = (_codeOptions$value = codeOptions.value) === null || _codeOptions$value === void 0 || (_codeOptions$value = _codeOptions$value.language) === null || _codeOptions$value === void 0 ? void 0 : _codeOptions$value[language.value];
12
+ return {
13
+ ...codeOptions.value,
14
+ ...specificOptions ?? {}
15
+ };
12
16
  });
13
17
  return {
14
18
  languageCodeOptions,
@@ -32,8 +36,10 @@ function useCodeOptions(options) {
32
36
  const CONTEXT_KEY = Symbol("stream-markdown-context");
33
37
  function useContext() {
34
38
  const context = injectContext();
39
+ const mode = computed(() => unref(context.mode) ?? "streaming");
35
40
  const icons = computed(() => unref(context.icons) ?? {});
36
41
  const isDark = computed(() => unref(context.isDark) ?? false);
42
+ const enableAnimate = computed(() => unref(context.enableAnimate));
37
43
  const parsedNodes = computed(() => unref(context.parsedNodes) ?? []);
38
44
  function provideContext(ctx) {
39
45
  provide(CONTEXT_KEY, {
@@ -48,8 +54,10 @@ function useContext() {
48
54
  context,
49
55
  provideContext,
50
56
  injectContext,
57
+ mode,
51
58
  icons,
52
59
  isDark,
60
+ enableAnimate,
53
61
  parsedNodes,
54
62
  get getContainer() {
55
63
  return context.getContainer || (() => void 0);
@@ -86,98 +94,462 @@ function useControls(options) {
86
94
  return;
87
95
  }
88
96
  }
97
+ function resolveControls(type, builtinControls, props) {
98
+ const customize = getControlValue(`${type}.customize`);
99
+ if (typeof customize !== "function") return builtinControls.filter((item) => {
100
+ var _item$visible;
101
+ return ((_item$visible = item.visible) === null || _item$visible === void 0 ? void 0 : _item$visible.call(item)) ?? true;
102
+ });
103
+ return customize(builtinControls, props).filter((item) => {
104
+ var _item$visible2;
105
+ return ((_item$visible2 = item.visible) === null || _item$visible2 === void 0 ? void 0 : _item$visible2.call(item)) ?? true;
106
+ });
107
+ }
89
108
  return {
90
109
  isControlEnabled,
91
- getControlValue
110
+ getControlValue,
111
+ resolveControls
92
112
  };
93
113
  }
94
114
 
95
115
  //#endregion
96
- //#region src/composables/use-floating-element.ts
97
- function useFloatingElement(options) {
98
- const trigger = computed(() => unref(options.trigger) ?? "hover");
99
- const placement = computed(() => unref(options.placement) ?? "top");
100
- const delay = computed(() => unref(options.delay) ?? [100, 100]);
101
- const referenceEl = ref();
102
- const floatingEl = ref();
103
- let showTimer = null;
104
- let hideTimer = null;
105
- const open = ref(false);
106
- const parentEl = computed(() => {
107
- var _referenceEl$value;
108
- return ((_referenceEl$value = referenceEl.value) === null || _referenceEl$value === void 0 ? void 0 : _referenceEl$value.parentElement) || null;
109
- });
110
- const appendTo = computed(() => {
111
- var _options$getContainer;
112
- return parentEl.value || ((_options$getContainer = options.getContainer) === null || _options$getContainer === void 0 ? void 0 : _options$getContainer.call(options)) || "body";
113
- });
114
- const { x, y, strategy, update } = useFloating(referenceEl, floatingEl, {
115
- placement,
116
- middleware: [
117
- offset(6),
118
- flip(),
119
- shift({ padding: 5 })
120
- ],
121
- whileElementsMounted: autoUpdate
122
- });
123
- const floatingStyle = computed(() => ({
124
- position: strategy.value,
125
- top: `${y.value ?? 0}px`,
126
- left: `${x.value ?? 0}px`
127
- }));
128
- function show() {
129
- clearTimers();
130
- const { show: showDelay } = getDelay();
131
- showTimer = window.setTimeout(() => {
132
- open.value = true;
133
- update();
134
- }, showDelay);
116
+ //#region src/utils/harden.ts
117
+ function parseUrl(url, defaultOrigin) {
118
+ if (typeof url !== "string") return null;
119
+ try {
120
+ return new URL(url);
121
+ } catch {
122
+ if (defaultOrigin) try {
123
+ return new URL(url, defaultOrigin);
124
+ } catch {
125
+ return null;
126
+ }
127
+ if (url.startsWith("/") || url.startsWith("./") || url.startsWith("../")) try {
128
+ return new URL(url, "http://example.com");
129
+ } catch {
130
+ return null;
131
+ }
132
+ return null;
135
133
  }
136
- function hide() {
137
- clearTimers();
138
- const { hide: hideDelay } = getDelay();
139
- hideTimer = window.setTimeout(() => {
140
- open.value = false;
141
- }, hideDelay);
134
+ }
135
+ function isPathRelativeUrl(url) {
136
+ if (typeof url !== "string") return false;
137
+ return url.startsWith("/") || url.startsWith("./") || url.startsWith("../");
138
+ }
139
+ const safeProtocols = new Set([
140
+ "https:",
141
+ "http:",
142
+ "irc:",
143
+ "ircs:",
144
+ "mailto:",
145
+ "xmpp:",
146
+ "blob:"
147
+ ]);
148
+ const blockedProtocols = new Set([
149
+ "javascript:",
150
+ "data:",
151
+ "file:",
152
+ "vbscript:"
153
+ ]);
154
+ function transformUrl(url, allowedPrefixes, defaultOrigin, allowDataImages = false, isImage = false, allowedProtocols = []) {
155
+ if (!url) return null;
156
+ if (typeof url === "string" && url.startsWith("#") && !isImage) try {
157
+ if (new URL(url, "http://example.com").hash === url) return url;
158
+ } catch {}
159
+ if (typeof url === "string" && url.startsWith("data:")) {
160
+ if (isImage && allowDataImages && url.startsWith("data:image/")) return url;
161
+ return null;
142
162
  }
143
- function toggle() {
144
- open.value = !open.value;
145
- update();
163
+ if (typeof url === "string" && url.startsWith("blob:")) {
164
+ try {
165
+ if (new URL(url).protocol === "blob:" && url.length > 5) {
166
+ const afterProtocol = url.substring(5);
167
+ if (afterProtocol && afterProtocol.length > 0 && afterProtocol !== "invalid") return url;
168
+ }
169
+ } catch {
170
+ return null;
171
+ }
172
+ return null;
146
173
  }
147
- function onMouseEnter() {
148
- if (trigger.value === "hover") show();
174
+ const parsedUrl = parseUrl(url, defaultOrigin);
175
+ if (!parsedUrl) return null;
176
+ if (blockedProtocols.has(parsedUrl.protocol)) return null;
177
+ if (!(safeProtocols.has(parsedUrl.protocol) || allowedProtocols.includes(parsedUrl.protocol) || allowedProtocols.includes("*"))) return null;
178
+ if (parsedUrl.protocol === "mailto:" || !parsedUrl.protocol.match(/^https?:$/)) return parsedUrl.href;
179
+ const inputWasRelative = isPathRelativeUrl(url);
180
+ if (parsedUrl && allowedPrefixes.some((prefix) => {
181
+ const parsedPrefix = parseUrl(prefix, defaultOrigin);
182
+ if (!parsedPrefix) return false;
183
+ if (parsedPrefix.origin !== parsedUrl.origin) return false;
184
+ return parsedUrl.href.startsWith(parsedPrefix.href);
185
+ })) {
186
+ if (inputWasRelative) return parsedUrl.pathname + parsedUrl.search + parsedUrl.hash;
187
+ return parsedUrl.href;
149
188
  }
150
- function onMouseLeave() {
151
- if (trigger.value === "hover") hide();
189
+ if (allowedPrefixes.includes("*")) {
190
+ if (parsedUrl.protocol !== "https:" && parsedUrl.protocol !== "http:") return null;
191
+ if (inputWasRelative) return parsedUrl.pathname + parsedUrl.search + parsedUrl.hash;
192
+ return parsedUrl.href;
152
193
  }
153
- function onClick() {
154
- if (trigger.value === "click") toggle();
194
+ return null;
195
+ }
196
+
197
+ //#endregion
198
+ //#region src/utils/helper.ts
199
+ const fileExtensionPattern = /\.[^/.]+$/;
200
+ function flow(fns) {
201
+ return (input) => fns.reduce((acc, fn) => fn(acc), input);
202
+ }
203
+ function save(filename, content, mimeType) {
204
+ const blob = typeof content === "string" ? new Blob([content], { type: mimeType }) : content;
205
+ const url = URL.createObjectURL(blob);
206
+ const a = document.createElement("a");
207
+ a.href = url;
208
+ a.download = filename;
209
+ document.body.appendChild(a);
210
+ a.click();
211
+ document.body.removeChild(a);
212
+ URL.revokeObjectURL(url);
213
+ }
214
+ async function saveImage(url, alt) {
215
+ const blob = await (await fetch(url)).blob();
216
+ const originalFilename = new URL(url, window.location.origin).pathname.split("/").pop() || "";
217
+ const extension = originalFilename.split(".").pop();
218
+ const hasExtension = originalFilename.includes(".") && extension !== void 0 && extension.length <= 4;
219
+ let filename = "";
220
+ if (hasExtension) filename = originalFilename;
221
+ else {
222
+ const mimeType = blob.type;
223
+ let fileExtension = "png";
224
+ if (mimeType.includes("jpeg") || mimeType.includes("jpg")) fileExtension = "jpg";
225
+ else if (mimeType.includes("png")) fileExtension = "png";
226
+ else if (mimeType.includes("svg")) fileExtension = "svg";
227
+ else if (mimeType.includes("gif")) fileExtension = "gif";
228
+ else if (mimeType.includes("webp")) fileExtension = "webp";
229
+ filename = `${(alt || originalFilename || "image").replace(fileExtensionPattern, "")}.${fileExtension}`;
155
230
  }
156
- function getDelay() {
157
- if (Array.isArray(delay.value)) return {
158
- show: delay.value[0] ?? 0,
159
- hide: delay.value[1] ?? 0
160
- };
161
- return {
162
- show: delay.value ?? 0,
163
- hide: delay.value ?? 0
231
+ save(filename, blob, blob.type);
232
+ }
233
+ function svgToPngBlob(svgString, options) {
234
+ const scale = (options === null || options === void 0 ? void 0 : options.scale) ?? 5;
235
+ return new Promise((resolve, reject) => {
236
+ const encoded = `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;
237
+ const img = new Image();
238
+ img.crossOrigin = "anonymous";
239
+ img.onload = () => {
240
+ const canvas = document.createElement("canvas");
241
+ const w = img.width * scale;
242
+ const h$1 = img.height * scale;
243
+ canvas.width = w;
244
+ canvas.height = h$1;
245
+ const ctx = canvas.getContext("2d");
246
+ if (!ctx) {
247
+ reject(/* @__PURE__ */ new Error("Failed to create 2D canvas context for PNG export"));
248
+ return;
249
+ }
250
+ ctx.drawImage(img, 0, 0, w, h$1);
251
+ canvas.toBlob((blob) => {
252
+ if (!blob) {
253
+ reject(/* @__PURE__ */ new Error("Failed to create PNG blob"));
254
+ return;
255
+ }
256
+ resolve(blob);
257
+ }, "image/png");
164
258
  };
259
+ img.onerror = () => reject(/* @__PURE__ */ new Error("Failed to load SVG image"));
260
+ img.src = encoded;
261
+ });
262
+ }
263
+
264
+ //#endregion
265
+ //#region src/utils/inference.ts
266
+ function isClient() {
267
+ return typeof window !== "undefined";
268
+ }
269
+ function isServer() {
270
+ return typeof window === "undefined";
271
+ }
272
+
273
+ //#endregion
274
+ //#region src/utils/module.ts
275
+ async function hasShiki() {
276
+ try {
277
+ await import("shiki");
278
+ return true;
279
+ } catch {
280
+ return false;
165
281
  }
166
- function handleClickOutside(event) {
167
- var _referenceEl$value2, _floatingEl$value;
168
- if (trigger.value !== "click" || !open.value) return;
169
- const target = event.target;
170
- if (!(((_referenceEl$value2 = referenceEl.value) === null || _referenceEl$value2 === void 0 ? void 0 : _referenceEl$value2.contains(target)) || ((_floatingEl$value = floatingEl.value) === null || _floatingEl$value === void 0 ? void 0 : _floatingEl$value.contains(target)))) open.value = false;
282
+ }
283
+ async function hasMermaid() {
284
+ try {
285
+ await import("mermaid");
286
+ return true;
287
+ } catch {
288
+ return false;
171
289
  }
172
- function onFloatingEnter() {
173
- if (hideTimer) {
174
- clearTimeout(hideTimer);
175
- hideTimer = null;
290
+ }
291
+ async function hasKatex() {
292
+ try {
293
+ await import("katex");
294
+ return true;
295
+ } catch {
296
+ return false;
297
+ }
298
+ }
299
+
300
+ //#endregion
301
+ //#region src/utils/parser.ts
302
+ function findLastLeafNode(nodes) {
303
+ for (let i = nodes.length - 1; i >= 0; i--) {
304
+ const node = nodes[i];
305
+ const nodeWithChildren = node;
306
+ if (nodeWithChildren.children && nodeWithChildren.children.length > 0) {
307
+ const found = findLastLeafNode(nodeWithChildren.children);
308
+ if (found) return found;
309
+ continue;
176
310
  }
311
+ return node ?? null;
177
312
  }
178
- function onFloatingLeave() {
179
- const { hide: hideDelay } = getDelay();
180
- if (trigger.value === "hover") hideTimer = window.setTimeout(() => {
313
+ return null;
314
+ }
315
+ function findNodeParent(targetNode, nodes, parent) {
316
+ for (let i = nodes.length - 1; i >= 0; i--) {
317
+ if (nodes[i] === targetNode && parent) return {
318
+ parent,
319
+ index: i
320
+ };
321
+ const node = nodes[i];
322
+ if (node.children) {
323
+ const result = findNodeParent(targetNode, node.children, node);
324
+ if (result) return result;
325
+ }
326
+ }
327
+ return null;
328
+ }
329
+
330
+ //#endregion
331
+ //#region src/utils/table.ts
332
+ function extractTableDataFromElement(tableElement) {
333
+ const headers = [];
334
+ const rows = [];
335
+ const headerCells = Array.from(tableElement.querySelectorAll("thead th"));
336
+ for (const cell of headerCells) {
337
+ var _cell$textContent;
338
+ headers.push(((_cell$textContent = cell.textContent) === null || _cell$textContent === void 0 ? void 0 : _cell$textContent.trim()) || "");
339
+ }
340
+ const bodyRows = Array.from(tableElement.querySelectorAll("tbody tr"));
341
+ for (const row of bodyRows) {
342
+ const rowData = [];
343
+ const cells = Array.from(row.querySelectorAll("td"));
344
+ for (const cell of cells) {
345
+ var _cell$textContent2;
346
+ rowData.push(((_cell$textContent2 = cell.textContent) === null || _cell$textContent2 === void 0 ? void 0 : _cell$textContent2.trim()) || "");
347
+ }
348
+ rows.push(rowData);
349
+ }
350
+ return {
351
+ headers,
352
+ rows
353
+ };
354
+ }
355
+ function tableDataToCSV(data) {
356
+ const { headers, rows } = data;
357
+ const escapeCSV = (value) => {
358
+ let needsEscaping = false;
359
+ let hasQuote = false;
360
+ for (let i = 0; i < value.length; i += 1) {
361
+ const char = value[i];
362
+ if (char === "\"") {
363
+ needsEscaping = true;
364
+ hasQuote = true;
365
+ break;
366
+ }
367
+ if (char === "," || char === "\n") needsEscaping = true;
368
+ }
369
+ if (!needsEscaping) return value;
370
+ if (hasQuote) return `"${value.replace(/"/g, "\"\"")}"`;
371
+ return `"${value}"`;
372
+ };
373
+ const totalRows = headers.length > 0 ? rows.length + 1 : rows.length;
374
+ const csvRows = Array.from({ length: totalRows });
375
+ let rowIndex = 0;
376
+ if (headers.length > 0) {
377
+ csvRows[rowIndex] = headers.map(escapeCSV).join(",");
378
+ rowIndex += 1;
379
+ }
380
+ for (const row of rows) {
381
+ csvRows[rowIndex] = row.map(escapeCSV).join(",");
382
+ rowIndex += 1;
383
+ }
384
+ return csvRows.join("\n");
385
+ }
386
+ function tableDataToTSV(data) {
387
+ const { headers, rows } = data;
388
+ const escapeTSV = (value) => {
389
+ let needsEscaping = false;
390
+ for (let i = 0; i < value.length; i += 1) {
391
+ const char = value[i];
392
+ if (char === " " || char === "\n" || char === "\r") {
393
+ needsEscaping = true;
394
+ break;
395
+ }
396
+ }
397
+ if (!needsEscaping) return value;
398
+ const parts = [];
399
+ for (let i = 0; i < value.length; i += 1) {
400
+ const char = value[i];
401
+ if (char === " ") parts.push("\\t");
402
+ else if (char === "\n") parts.push("\\n");
403
+ else if (char === "\r") parts.push("\\r");
404
+ else parts.push(char);
405
+ }
406
+ return parts.join("");
407
+ };
408
+ const totalRows = headers.length > 0 ? rows.length + 1 : rows.length;
409
+ const tsvRows = Array.from({ length: totalRows });
410
+ let rowIndex = 0;
411
+ if (headers.length > 0) {
412
+ tsvRows[rowIndex] = headers.map(escapeTSV).join(" ");
413
+ rowIndex += 1;
414
+ }
415
+ for (const row of rows) {
416
+ tsvRows[rowIndex] = row.map(escapeTSV).join(" ");
417
+ rowIndex += 1;
418
+ }
419
+ return tsvRows.join("\n");
420
+ }
421
+ function escapeMarkdownTableCell(cell) {
422
+ let needsEscaping = false;
423
+ for (let i = 0; i < cell.length; i += 1) {
424
+ const char = cell[i];
425
+ if (char === "\\" || char === "|") {
426
+ needsEscaping = true;
427
+ break;
428
+ }
429
+ }
430
+ if (!needsEscaping) return cell;
431
+ const parts = [];
432
+ for (let i = 0; i < cell.length; i += 1) {
433
+ const char = cell[i];
434
+ if (char === "\\") parts.push("\\\\");
435
+ else if (char === "|") parts.push("\\|");
436
+ else parts.push(char);
437
+ }
438
+ return parts.join("");
439
+ }
440
+ function tableDataToMarkdown(data) {
441
+ const { headers, rows } = data;
442
+ if (headers.length === 0) return "";
443
+ const markdownRows = Array.from({ length: rows.length + 2 });
444
+ let rowIndex = 0;
445
+ markdownRows[rowIndex] = `| ${headers.map((h$1) => escapeMarkdownTableCell(h$1)).join(" | ")} |`;
446
+ rowIndex += 1;
447
+ const separatorParts = Array.from({ length: headers.length });
448
+ for (let i = 0; i < headers.length; i += 1) separatorParts[i] = "---";
449
+ markdownRows[rowIndex] = `| ${separatorParts.join(" | ")} |`;
450
+ rowIndex += 1;
451
+ for (const row of rows) if (row.length < headers.length) {
452
+ const paddedRow = Array.from({ length: headers.length });
453
+ for (let i = 0; i < headers.length; i += 1) paddedRow[i] = i < row.length ? escapeMarkdownTableCell(row[i]) : "";
454
+ markdownRows[rowIndex] = `| ${paddedRow.join(" | ")} |`;
455
+ rowIndex += 1;
456
+ } else {
457
+ markdownRows[rowIndex] = `| ${row.map((cell) => escapeMarkdownTableCell(cell)).join(" | ")} |`;
458
+ rowIndex += 1;
459
+ }
460
+ return markdownRows.join("\n");
461
+ }
462
+
463
+ //#endregion
464
+ //#region src/composables/use-floating-element.ts
465
+ function useFloatingElement(options) {
466
+ const trigger = computed(() => unref(options.trigger) ?? "hover");
467
+ const placement = computed(() => unref(options.placement) ?? "top");
468
+ const delay = computed(() => unref(options.delay) ?? [100, 100]);
469
+ const referenceEl = ref();
470
+ const floatingEl = ref();
471
+ let showTimer = null;
472
+ let hideTimer = null;
473
+ const open = ref(false);
474
+ const parentEl = computed(() => {
475
+ var _referenceEl$value;
476
+ if (!isClient()) return null;
477
+ return ((_referenceEl$value = referenceEl.value) === null || _referenceEl$value === void 0 ? void 0 : _referenceEl$value.parentElement) || null;
478
+ });
479
+ const appendTo = computed(() => {
480
+ var _options$getContainer, _options$getContainer2;
481
+ if (!isClient()) return ((_options$getContainer = options.getContainer) === null || _options$getContainer === void 0 ? void 0 : _options$getContainer.call(options)) || "body";
482
+ const target = ((_options$getContainer2 = options.getContainer) === null || _options$getContainer2 === void 0 ? void 0 : _options$getContainer2.call(options)) || parentEl.value;
483
+ if (target instanceof HTMLElement && !document.body.contains(target)) return "body";
484
+ return target || "body";
485
+ });
486
+ const { x, y, strategy, update } = useFloating(referenceEl, floatingEl, {
487
+ placement,
488
+ middleware: [
489
+ offset(6),
490
+ flip(),
491
+ shift({ padding: 5 })
492
+ ],
493
+ whileElementsMounted: autoUpdate
494
+ });
495
+ const floatingStyle = computed(() => ({
496
+ position: strategy.value,
497
+ top: `${y.value ?? 0}px`,
498
+ left: `${x.value ?? 0}px`
499
+ }));
500
+ function show() {
501
+ clearTimers();
502
+ const { show: showDelay } = getDelay();
503
+ showTimer = window.setTimeout(() => {
504
+ open.value = true;
505
+ update();
506
+ }, showDelay);
507
+ }
508
+ function hide() {
509
+ clearTimers();
510
+ const { hide: hideDelay } = getDelay();
511
+ hideTimer = window.setTimeout(() => {
512
+ open.value = false;
513
+ }, hideDelay);
514
+ }
515
+ function toggle() {
516
+ open.value = !open.value;
517
+ update();
518
+ }
519
+ function onMouseEnter() {
520
+ if (trigger.value === "hover") show();
521
+ }
522
+ function onMouseLeave() {
523
+ if (trigger.value === "hover") hide();
524
+ }
525
+ function onClick() {
526
+ if (trigger.value === "click") toggle();
527
+ }
528
+ function getDelay() {
529
+ if (Array.isArray(delay.value)) return {
530
+ show: delay.value[0] ?? 0,
531
+ hide: delay.value[1] ?? 0
532
+ };
533
+ return {
534
+ show: delay.value ?? 0,
535
+ hide: delay.value ?? 0
536
+ };
537
+ }
538
+ function handleClickOutside(event) {
539
+ var _referenceEl$value2, _floatingEl$value;
540
+ if (!open.value) return;
541
+ const target = event.target;
542
+ if (!(((_referenceEl$value2 = referenceEl.value) === null || _referenceEl$value2 === void 0 ? void 0 : _referenceEl$value2.contains(target)) || ((_floatingEl$value = floatingEl.value) === null || _floatingEl$value === void 0 ? void 0 : _floatingEl$value.contains(target)))) open.value = false;
543
+ }
544
+ function onFloatingEnter() {
545
+ if (hideTimer) {
546
+ clearTimeout(hideTimer);
547
+ hideTimer = null;
548
+ }
549
+ }
550
+ function onFloatingLeave() {
551
+ const { hide: hideDelay } = getDelay();
552
+ if (trigger.value === "hover") hideTimer = window.setTimeout(() => {
181
553
  hide();
182
554
  }, hideDelay);
183
555
  }
@@ -208,942 +580,20 @@ function useFloatingElement(options) {
208
580
  };
209
581
  }
210
582
 
211
- //#endregion
212
- //#region src/constants/code.ts
213
- const DEFAULT_LIGHT_THEME = "github-light";
214
- const DEFAULT_DARK_THEME = "github-dark";
215
- const LANGUAGE_ALIAS = {};
216
- const LANGUAGE_EXTENSIONS = {
217
- "1c-query": "1cq",
218
- "1c": "1c",
219
- "abap": "abap",
220
- "actionscript-3": "as",
221
- "ada": "ada",
222
- "adoc": "adoc",
223
- "angular-html": "html",
224
- "angular-ts": "ts",
225
- "apache": "conf",
226
- "apex": "cls",
227
- "apl": "apl",
228
- "applescript": "applescript",
229
- "ara": "ara",
230
- "asciidoc": "adoc",
231
- "asm": "asm",
232
- "astro": "astro",
233
- "awk": "awk",
234
- "ballerina": "bal",
235
- "bash": "sh",
236
- "bat": "bat",
237
- "batch": "bat",
238
- "be": "be",
239
- "beancount": "beancount",
240
- "berry": "berry",
241
- "bibtex": "bib",
242
- "bicep": "bicep",
243
- "blade": "blade.php",
244
- "bsl": "bsl",
245
- "c": "c",
246
- "c#": "cs",
247
- "c++": "cpp",
248
- "cadence": "cdc",
249
- "cairo": "cairo",
250
- "cdc": "cdc",
251
- "clarity": "clar",
252
- "clj": "clj",
253
- "clojure": "clj",
254
- "closure-templates": "soy",
255
- "cmake": "cmake",
256
- "cmd": "cmd",
257
- "cobol": "cob",
258
- "codeowners": "CODEOWNERS",
259
- "codeql": "ql",
260
- "coffee": "coffee",
261
- "coffeescript": "coffee",
262
- "common-lisp": "lisp",
263
- "console": "sh",
264
- "coq": "v",
265
- "cpp": "cpp",
266
- "cql": "cql",
267
- "crystal": "cr",
268
- "cs": "cs",
269
- "csharp": "cs",
270
- "css": "css",
271
- "csv": "csv",
272
- "cue": "cue",
273
- "cypher": "cql",
274
- "d": "d",
275
- "dart": "dart",
276
- "dax": "dax",
277
- "desktop": "desktop",
278
- "diff": "diff",
279
- "docker": "dockerfile",
280
- "dockerfile": "dockerfile",
281
- "dotenv": "env",
282
- "dream-maker": "dm",
283
- "edge": "edge",
284
- "elisp": "el",
285
- "elixir": "ex",
286
- "elm": "elm",
287
- "emacs-lisp": "el",
288
- "erb": "erb",
289
- "erl": "erl",
290
- "erlang": "erl",
291
- "f": "f",
292
- "f#": "fs",
293
- "f03": "f03",
294
- "f08": "f08",
295
- "f18": "f18",
296
- "f77": "f77",
297
- "f90": "f90",
298
- "f95": "f95",
299
- "fennel": "fnl",
300
- "fish": "fish",
301
- "fluent": "ftl",
302
- "for": "for",
303
- "fortran-fixed-form": "f",
304
- "fortran-free-form": "f90",
305
- "fs": "fs",
306
- "fsharp": "fs",
307
- "fsl": "fsl",
308
- "ftl": "ftl",
309
- "gdresource": "tres",
310
- "gdscript": "gd",
311
- "gdshader": "gdshader",
312
- "genie": "gs",
313
- "gherkin": "feature",
314
- "git-commit": "gitcommit",
315
- "git-rebase": "gitrebase",
316
- "gjs": "js",
317
- "gleam": "gleam",
318
- "glimmer-js": "js",
319
- "glimmer-ts": "ts",
320
- "glsl": "glsl",
321
- "gnuplot": "plt",
322
- "go": "go",
323
- "gql": "gql",
324
- "graphql": "graphql",
325
- "groovy": "groovy",
326
- "gts": "gts",
327
- "hack": "hack",
328
- "haml": "haml",
329
- "handlebars": "hbs",
330
- "haskell": "hs",
331
- "haxe": "hx",
332
- "hbs": "hbs",
333
- "hcl": "hcl",
334
- "hjson": "hjson",
335
- "hlsl": "hlsl",
336
- "hs": "hs",
337
- "html-derivative": "html",
338
- "html": "html",
339
- "http": "http",
340
- "hxml": "hxml",
341
- "hy": "hy",
342
- "imba": "imba",
343
- "ini": "ini",
344
- "jade": "jade",
345
- "java": "java",
346
- "javascript": "js",
347
- "jinja": "jinja",
348
- "jison": "jison",
349
- "jl": "jl",
350
- "js": "js",
351
- "json": "json",
352
- "json5": "json5",
353
- "jsonc": "jsonc",
354
- "jsonl": "jsonl",
355
- "jsonnet": "jsonnet",
356
- "jssm": "jssm",
357
- "jsx": "jsx",
358
- "julia": "jl",
359
- "kotlin": "kt",
360
- "kql": "kql",
361
- "kt": "kt",
362
- "kts": "kts",
363
- "kusto": "kql",
364
- "latex": "tex",
365
- "lean": "lean",
366
- "lean4": "lean",
367
- "less": "less",
368
- "liquid": "liquid",
369
- "lisp": "lisp",
370
- "lit": "lit",
371
- "llvm": "ll",
372
- "log": "log",
373
- "logo": "logo",
374
- "lua": "lua",
375
- "luau": "luau",
376
- "make": "mak",
377
- "makefile": "mak",
378
- "markdown": "md",
379
- "marko": "marko",
380
- "matlab": "m",
381
- "md": "md",
382
- "mdc": "mdc",
383
- "mdx": "mdx",
384
- "mediawiki": "wiki",
385
- "mermaid": "mmd",
386
- "mips": "s",
387
- "mipsasm": "s",
388
- "mmd": "mmd",
389
- "mojo": "mojo",
390
- "move": "move",
391
- "nar": "nar",
392
- "narrat": "narrat",
393
- "nextflow": "nf",
394
- "nf": "nf",
395
- "nginx": "conf",
396
- "nim": "nim",
397
- "nix": "nix",
398
- "nu": "nu",
399
- "nushell": "nu",
400
- "objc": "m",
401
- "objective-c": "m",
402
- "objective-cpp": "mm",
403
- "ocaml": "ml",
404
- "pascal": "pas",
405
- "perl": "pl",
406
- "perl6": "p6",
407
- "php": "php",
408
- "plsql": "pls",
409
- "po": "po",
410
- "polar": "polar",
411
- "postcss": "pcss",
412
- "pot": "pot",
413
- "potx": "potx",
414
- "powerquery": "pq",
415
- "powershell": "ps1",
416
- "prisma": "prisma",
417
- "prolog": "pl",
418
- "properties": "properties",
419
- "proto": "proto",
420
- "protobuf": "proto",
421
- "ps": "ps",
422
- "ps1": "ps1",
423
- "pug": "pug",
424
- "puppet": "pp",
425
- "purescript": "purs",
426
- "py": "py",
427
- "python": "py",
428
- "ql": "ql",
429
- "qml": "qml",
430
- "qmldir": "qmldir",
431
- "qss": "qss",
432
- "r": "r",
433
- "racket": "rkt",
434
- "raku": "raku",
435
- "razor": "cshtml",
436
- "rb": "rb",
437
- "reg": "reg",
438
- "regex": "regex",
439
- "regexp": "regexp",
440
- "rel": "rel",
441
- "riscv": "s",
442
- "rs": "rs",
443
- "rst": "rst",
444
- "ruby": "rb",
445
- "rust": "rs",
446
- "sas": "sas",
447
- "sass": "sass",
448
- "scala": "scala",
449
- "scheme": "scm",
450
- "scss": "scss",
451
- "sdbl": "sdbl",
452
- "sh": "sh",
453
- "shader": "shader",
454
- "shaderlab": "shader",
455
- "shell": "sh",
456
- "shellscript": "sh",
457
- "shellsession": "sh",
458
- "smalltalk": "st",
459
- "solidity": "sol",
460
- "soy": "soy",
461
- "sparql": "rq",
462
- "spl": "spl",
463
- "splunk": "spl",
464
- "sql": "sql",
465
- "ssh-config": "config",
466
- "stata": "do",
467
- "styl": "styl",
468
- "stylus": "styl",
469
- "svelte": "svelte",
470
- "swift": "swift",
471
- "system-verilog": "sv",
472
- "systemd": "service",
473
- "talon": "talon",
474
- "talonscript": "talon",
475
- "tasl": "tasl",
476
- "tcl": "tcl",
477
- "templ": "templ",
478
- "terraform": "tf",
479
- "tex": "tex",
480
- "tf": "tf",
481
- "tfvars": "tfvars",
482
- "toml": "toml",
483
- "ts-tags": "ts",
484
- "ts": "ts",
485
- "tsp": "tsp",
486
- "tsv": "tsv",
487
- "tsx": "tsx",
488
- "turtle": "ttl",
489
- "twig": "twig",
490
- "typ": "typ",
491
- "typescript": "ts",
492
- "typespec": "tsp",
493
- "typst": "typ",
494
- "v": "v",
495
- "vala": "vala",
496
- "vb": "vb",
497
- "verilog": "v",
498
- "vhdl": "vhdl",
499
- "vim": "vim",
500
- "viml": "vim",
501
- "vimscript": "vim",
502
- "vue-html": "html",
503
- "vue-vine": "vine",
504
- "vue": "vue",
505
- "vy": "vy",
506
- "vyper": "vy",
507
- "wasm": "wasm",
508
- "wenyan": "wy",
509
- "wgsl": "wgsl",
510
- "wiki": "wiki",
511
- "wikitext": "wiki",
512
- "wit": "wit",
513
- "wl": "wl",
514
- "wolfram": "wl",
515
- "xml": "xml",
516
- "xsl": "xsl",
517
- "yaml": "yaml",
518
- "yml": "yml",
519
- "zenscript": "zs",
520
- "zig": "zig",
521
- "zsh": "zsh",
522
- "文言": "wy"
523
- };
524
- const LANGUAGE_ICONS = {
525
- "adoc": defineAsyncComponent(() => import("./asciidoc-DS-PMOLv.js")),
526
- "angular-html": defineAsyncComponent(() => import("./angular-Mip1mspI.js")),
527
- "angular-ts": defineAsyncComponent(() => import("./angular-component-Cq5UbX7R.js")),
528
- "apache": defineAsyncComponent(() => import("./apache-BSq7fX32.js")),
529
- "asciidoc": defineAsyncComponent(() => import("./asciidoc-DS-PMOLv.js")),
530
- "asm": defineAsyncComponent(() => import("./assembly-BPatlOM7.js")),
531
- "astro": defineAsyncComponent(() => import("./astro-CSD_ZjXp.js")),
532
- "bash": defineAsyncComponent(() => import("./bash-RITislE1.js")),
533
- "bat": defineAsyncComponent(() => import("./batch-DWPShYhN.js")),
534
- "batch": defineAsyncComponent(() => import("./batch-DWPShYhN.js")),
535
- "bicep": defineAsyncComponent(() => import("./bicep-C6BEHfP6.js")),
536
- "c": defineAsyncComponent(() => import("./c-DNo3tsNy.js")),
537
- "c#": defineAsyncComponent(() => import("./csharp-CgkTkbPx.js")),
538
- "c++": defineAsyncComponent(() => import("./cpp-Cn3MB35e.js")),
539
- "cjs": defineAsyncComponent(() => import("./javascript-BCDeVll0.js")),
540
- "clj": defineAsyncComponent(() => import("./clojure-C1DEYHW0.js")),
541
- "clojure": defineAsyncComponent(() => import("./clojure-C1DEYHW0.js")),
542
- "cmake": defineAsyncComponent(() => import("./cmake-B69mdXcH.js")),
543
- "cmd": defineAsyncComponent(() => import("./batch-DWPShYhN.js")),
544
- "cobol": defineAsyncComponent(() => import("./cobol-qmL-zIWi.js")),
545
- "codeowners": defineAsyncComponent(() => import("./codeowners-Crklt5nF.js")),
546
- "coffee": defineAsyncComponent(() => import("./coffeescript-k3huSp23.js")),
547
- "coffeescript": defineAsyncComponent(() => import("./coffeescript-k3huSp23.js")),
548
- "cpp": defineAsyncComponent(() => import("./cpp-Cn3MB35e.js")),
549
- "crystal": defineAsyncComponent(() => import("./crystal-D5aGETSx.js")),
550
- "cs": defineAsyncComponent(() => import("./csharp-CgkTkbPx.js")),
551
- "csharp": defineAsyncComponent(() => import("./csharp-CgkTkbPx.js")),
552
- "css": defineAsyncComponent(() => import("./css-DRH4n_IV.js")),
553
- "csv": defineAsyncComponent(() => import("./csv-D5nNTIzO.js")),
554
- "cts": defineAsyncComponent(() => import("./typescript-B95hq2ns.js")),
555
- "cue": defineAsyncComponent(() => import("./cue-B5mC88-N.js")),
556
- "d": defineAsyncComponent(() => import("./d-BdQRMgma.js")),
557
- "dart": defineAsyncComponent(() => import("./dart-BGnfn0NN.js")),
558
- "diff": defineAsyncComponent(() => import("./diff-DVaTsnqu.js")),
559
- "docker": defineAsyncComponent(() => import("./docker-E47qYlmL.js")),
560
- "dockerfile": defineAsyncComponent(() => import("./docker-E47qYlmL.js")),
561
- "dotenv": defineAsyncComponent(() => import("./env-Ck1BHoxR.js")),
562
- "elixir": defineAsyncComponent(() => import("./elixir-C-jqqu6q.js")),
563
- "elm": defineAsyncComponent(() => import("./elm-CmeHvaWl.js")),
564
- "erb": defineAsyncComponent(() => import("./ruby-C8wV0pMO.js")),
565
- "erl": defineAsyncComponent(() => import("./erlang-CIP8kpGJ.js")),
566
- "erlang": defineAsyncComponent(() => import("./erlang-CIP8kpGJ.js")),
567
- "f": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
568
- "f#": defineAsyncComponent(() => import("./fsharp-Bp6mUcG0.js")),
569
- "f03": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
570
- "f08": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
571
- "f18": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
572
- "f77": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
573
- "f90": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
574
- "f95": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
575
- "for": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
576
- "fortran-fixed-form": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
577
- "fortran-free-form": defineAsyncComponent(() => import("./fortran-DJVP2s7V.js")),
578
- "fs": defineAsyncComponent(() => import("./fsharp-Bp6mUcG0.js")),
579
- "fsharp": defineAsyncComponent(() => import("./fsharp-Bp6mUcG0.js")),
580
- "git-commit": defineAsyncComponent(() => import("./git-BDcqJ1Gp.js")),
581
- "git-rebase": defineAsyncComponent(() => import("./git-BDcqJ1Gp.js")),
582
- "gleam": defineAsyncComponent(() => import("./gleam-JLiZVlev.js")),
583
- "go": defineAsyncComponent(() => import("./go-ClcCiS7e.js")),
584
- "gql": defineAsyncComponent(() => import("./graphql-D2RDo-DF.js")),
585
- "graphql": defineAsyncComponent(() => import("./graphql-D2RDo-DF.js")),
586
- "groovy": defineAsyncComponent(() => import("./groovy-DLZBw8xE.js")),
587
- "haml": defineAsyncComponent(() => import("./haml-Da74jRwZ.js")),
588
- "handlebars": defineAsyncComponent(() => import("./handlebars-CNgS57Sz.js")),
589
- "haskell": defineAsyncComponent(() => import("./haskell-DCvfD6VB.js")),
590
- "haxe": defineAsyncComponent(() => import("./haxe-CHVK1TId.js")),
591
- "hbs": defineAsyncComponent(() => import("./handlebars-CNgS57Sz.js")),
592
- "hs": defineAsyncComponent(() => import("./haskell-DCvfD6VB.js")),
593
- "html": defineAsyncComponent(() => import("./html-Du4235Z-.js")),
594
- "http": defineAsyncComponent(() => import("./http-B8VAFeQ5.js")),
595
- "jade": defineAsyncComponent(() => import("./pug-CzkUK-Ec.js")),
596
- "java": defineAsyncComponent(() => import("./java-CoSdnK1N.js")),
597
- "javascript": defineAsyncComponent(() => import("./javascript-BCDeVll0.js")),
598
- "jinja": defineAsyncComponent(() => import("./jinja-DYbiqZy0.js")),
599
- "jl": defineAsyncComponent(() => import("./julia-pswJGtpP.js")),
600
- "js": defineAsyncComponent(() => import("./javascript-BCDeVll0.js")),
601
- "json": defineAsyncComponent(() => import("./json-CdzCyWJA.js")),
602
- "json5": defineAsyncComponent(() => import("./json-CdzCyWJA.js")),
603
- "jsonc": defineAsyncComponent(() => import("./json-CdzCyWJA.js")),
604
- "jsonl": defineAsyncComponent(() => import("./json-CdzCyWJA.js")),
605
- "jsx": defineAsyncComponent(() => import("./javascript-BCDeVll0.js")),
606
- "julia": defineAsyncComponent(() => import("./julia-pswJGtpP.js")),
607
- "kdl": defineAsyncComponent(() => import("./kdl-M8rfQ85l.js")),
608
- "kotlin": defineAsyncComponent(() => import("./kotlin-CfCV33oB.js")),
609
- "kt": defineAsyncComponent(() => import("./kotlin-CfCV33oB.js")),
610
- "kts": defineAsyncComponent(() => import("./kotlin-CfCV33oB.js")),
611
- "latex": defineAsyncComponent(() => import("./latex-DK8DFhTm.js")),
612
- "less": defineAsyncComponent(() => import("./less-BFnNZiIs.js")),
613
- "liquid": defineAsyncComponent(() => import("./liquid-C8h46DoX.js")),
614
- "lisp": defineAsyncComponent(() => import("./lisp-C3FbGuD1.js")),
615
- "log": defineAsyncComponent(() => import("./log-D-O3FXf2.js")),
616
- "lua": defineAsyncComponent(() => import("./lua-BC_aR1_i.js")),
617
- "luau": defineAsyncComponent(() => import("./luau-DFUOrNN7.js")),
618
- "make": defineAsyncComponent(() => import("./makefile-Ck67veVV.js")),
619
- "makefile": defineAsyncComponent(() => import("./makefile-Ck67veVV.js")),
620
- "markdown": defineAsyncComponent(() => import("./markdown-BX13X3kd.js")),
621
- "marko": defineAsyncComponent(() => import("./marko-CQE8YTCc.js")),
622
- "matlab": defineAsyncComponent(() => import("./matlab-Bd9O2Ml3.js")),
623
- "md": defineAsyncComponent(() => import("./markdown-BX13X3kd.js")),
624
- "mdc": defineAsyncComponent(() => import("./markdown-BX13X3kd.js")),
625
- "mdx": defineAsyncComponent(() => import("./markdown-BX13X3kd.js")),
626
- "mermaid": defineAsyncComponent(() => import("./mermaid-Dv-Pr0W-.js")),
627
- "mjs": defineAsyncComponent(() => import("./javascript-BCDeVll0.js")),
628
- "mmd": defineAsyncComponent(() => import("./mermaid-Dv-Pr0W-.js")),
629
- "mts": defineAsyncComponent(() => import("./typescript-B95hq2ns.js")),
630
- "nextflow": defineAsyncComponent(() => import("./nextflow-D3lDq1Yi.js")),
631
- "nf": defineAsyncComponent(() => import("./nextflow-D3lDq1Yi.js")),
632
- "nginx": defineAsyncComponent(() => import("./nginx-CgsqCL4l.js")),
633
- "nim": defineAsyncComponent(() => import("./nim-BJdSu3c6.js")),
634
- "nix": defineAsyncComponent(() => import("./nix-B7K_D6CN.js")),
635
- "ocaml": defineAsyncComponent(() => import("./ocaml-gYS1Y45s.js")),
636
- "perl": defineAsyncComponent(() => import("./perl-DXFhFWhI.js")),
637
- "php": defineAsyncComponent(() => import("./php-We35bF4E.js")),
638
- "postcss": defineAsyncComponent(() => import("./postcss-BWovY_YV.js")),
639
- "powershell": defineAsyncComponent(() => import("./powershell-C6teiBsq.js")),
640
- "prisma": defineAsyncComponent(() => import("./prisma-UyJEg0_X.js")),
641
- "prolog": defineAsyncComponent(() => import("./prolog-YZsPgdnw.js")),
642
- "properties": defineAsyncComponent(() => import("./properties-DaPbL0e2.js")),
643
- "proto": defineAsyncComponent(() => import("./proto-1LIwu2O1.js")),
644
- "protobuf": defineAsyncComponent(() => import("./proto-1LIwu2O1.js")),
645
- "ps": defineAsyncComponent(() => import("./powershell-C6teiBsq.js")),
646
- "ps1": defineAsyncComponent(() => import("./powershell-C6teiBsq.js")),
647
- "pug": defineAsyncComponent(() => import("./pug-CzkUK-Ec.js")),
648
- "puppet": defineAsyncComponent(() => import("./puppet-CNhB1MHb.js")),
649
- "py": defineAsyncComponent(() => import("./python-B_hgEobv.js")),
650
- "python": defineAsyncComponent(() => import("./python-B_hgEobv.js")),
651
- "r": defineAsyncComponent(() => import("./r-CVeKYmPK.js")),
652
- "racket": defineAsyncComponent(() => import("./racket-D5UfvXuw.js")),
653
- "razor": defineAsyncComponent(() => import("./razor-RIKaANTN.js")),
654
- "rb": defineAsyncComponent(() => import("./ruby-C8wV0pMO.js")),
655
- "rs": defineAsyncComponent(() => import("./rust-75Gei1mP.js")),
656
- "ruby": defineAsyncComponent(() => import("./ruby-C8wV0pMO.js")),
657
- "rust": defineAsyncComponent(() => import("./rust-75Gei1mP.js")),
658
- "sass": defineAsyncComponent(() => import("./sass-Cq68xmQ4.js")),
659
- "scala": defineAsyncComponent(() => import("./scala-C_E5rjSc.js")),
660
- "scheme": defineAsyncComponent(() => import("./scheme-Bm-q-nLL.js")),
661
- "scss": defineAsyncComponent(() => import("./sass-Cq68xmQ4.js")),
662
- "sh": defineAsyncComponent(() => import("./bash-RITislE1.js")),
663
- "shader": defineAsyncComponent(() => import("./shader-DPaRkMCs.js")),
664
- "shell": defineAsyncComponent(() => import("./bash-RITislE1.js")),
665
- "shellscript": defineAsyncComponent(() => import("./bash-RITislE1.js")),
666
- "solidity": defineAsyncComponent(() => import("./solidity-DvHG_0CD.js")),
667
- "sql": defineAsyncComponent(() => import("./database-Ca1VGX7u.js")),
668
- "stata": defineAsyncComponent(() => import("./stata-DoVloJLm.js")),
669
- "styl": defineAsyncComponent(() => import("./sass-Cq68xmQ4.js")),
670
- "stylus": defineAsyncComponent(() => import("./sass-Cq68xmQ4.js")),
671
- "svelte": defineAsyncComponent(() => import("./svelte-tlbA11de.js")),
672
- "swift": defineAsyncComponent(() => import("./swift-BZn5eRnK.js")),
673
- "terraform": defineAsyncComponent(() => import("./terraform-c5-k7yB1.js")),
674
- "tex": defineAsyncComponent(() => import("./latex-DK8DFhTm.js")),
675
- "text": defineAsyncComponent(() => import("./text-DPCGWvDK.js")),
676
- "tf": defineAsyncComponent(() => import("./terraform-c5-k7yB1.js")),
677
- "tfvars": defineAsyncComponent(() => import("./terraform-c5-k7yB1.js")),
678
- "toml": defineAsyncComponent(() => import("./toml-DdLGBe1A.js")),
679
- "ts": defineAsyncComponent(() => import("./typescript-B95hq2ns.js")),
680
- "tsv": defineAsyncComponent(() => import("./csv-D5nNTIzO.js")),
681
- "tsx": defineAsyncComponent(() => import("./typescript-B95hq2ns.js")),
682
- "twig": defineAsyncComponent(() => import("./twig-D_jzZxh6.js")),
683
- "typ": defineAsyncComponent(() => import("./typst-CSAEQ4yK.js")),
684
- "typescript": defineAsyncComponent(() => import("./typescript-B95hq2ns.js")),
685
- "typst": defineAsyncComponent(() => import("./typst-CSAEQ4yK.js")),
686
- "v": defineAsyncComponent(() => import("./v-BAhebuOB.js")),
687
- "vala": defineAsyncComponent(() => import("./vala-RAu83-lp.js")),
688
- "verilog": defineAsyncComponent(() => import("./verilog-BgmTn52U.js")),
689
- "vim": defineAsyncComponent(() => import("./vim-c8oTCLkH.js")),
690
- "viml": defineAsyncComponent(() => import("./vim-c8oTCLkH.js")),
691
- "vimscript": defineAsyncComponent(() => import("./vim-c8oTCLkH.js")),
692
- "vue-html": defineAsyncComponent(() => import("./vue-TGT6HTBA.js")),
693
- "vue-vine": defineAsyncComponent(() => import("./vue-TGT6HTBA.js")),
694
- "vue": defineAsyncComponent(() => import("./vue-TGT6HTBA.js")),
695
- "xml": defineAsyncComponent(() => import("./xml-C1HDr874.js")),
696
- "xsl": defineAsyncComponent(() => import("./xml-C1HDr874.js")),
697
- "yaml": defineAsyncComponent(() => import("./yaml-BO7FjFQZ.js")),
698
- "yml": defineAsyncComponent(() => import("./yaml-BO7FjFQZ.js")),
699
- "zig": defineAsyncComponent(() => import("./zig-qANBp1SU.js")),
700
- "zsh": defineAsyncComponent(() => import("./bash-RITislE1.js"))
701
- };
702
-
703
- //#endregion
704
- //#region src/constants/harden.ts
705
- const DEFAULT_HARDEN_OPTIONS = {
706
- allowedLinkPrefixes: ["*"],
707
- allowedImagePrefixes: ["*"],
708
- allowedProtocols: ["*"],
709
- allowDataImages: true
710
- };
711
-
712
- //#endregion
713
- //#region src/constants/icons.ts
714
- const ICONS = {
715
- arrowLeft: defineAsyncComponent(() => import("./arrow-left-C5s0Sn8o.js")),
716
- check: defineAsyncComponent(() => import("./check-BfpxIITS.js")),
717
- code: defineAsyncComponent(() => import("./code-D9CiymEK.js")),
718
- collapse: defineAsyncComponent(() => import("./chevron-down-LeNeemjn.js")),
719
- copy: defineAsyncComponent(() => import("./copy-C4580J93.js")),
720
- download: defineAsyncComponent(() => import("./download-DytrK56a.js")),
721
- error: defineAsyncComponent(() => import("./circle-alert-BjDuIzgc.js")),
722
- flipHorizontal: defineAsyncComponent(() => import("./flip-horizontal-BFWjqDbQ.js")),
723
- image: defineAsyncComponent(() => import("./image-D8MZj4W5.js")),
724
- link: defineAsyncComponent(() => import("./link-C7eU_yi-.js")),
725
- maximize: defineAsyncComponent(() => import("./maximize-CDZ9rnYF.js")),
726
- mermaid: defineAsyncComponent(() => import("./mermaid-Dv-Pr0W-.js")),
727
- minimize: defineAsyncComponent(() => import("./minimize-B9ER7p2X.js")),
728
- preview: defineAsyncComponent(() => import("./eye-TaEwQS2Z.js")),
729
- rotateLeft: defineAsyncComponent(() => import("./rotate-ccw-square-C2KVFUF3.js")),
730
- zoomIn: defineAsyncComponent(() => import("./zoomIn-iVMAUxIz.js")),
731
- zoomOut: defineAsyncComponent(() => import("./zoomOut-Cxq1_dIQ.js"))
732
- };
733
-
734
- //#endregion
735
- //#region src/constants/theme.ts
736
- const SHADCN_SCHEMAS = [
737
- "background",
738
- "foreground",
739
- "card",
740
- "card-foreground",
741
- "popover",
742
- "popover-foreground",
743
- "primary",
744
- "primary-foreground",
745
- "secondary",
746
- "secondary-foreground",
747
- "muted",
748
- "muted-foreground",
749
- "accent",
750
- "accent-foreground",
751
- "destructive",
752
- "border",
753
- "input",
754
- "ring",
755
- "chart-1",
756
- "chart-2",
757
- "chart-3",
758
- "chart-4",
759
- "chart-5",
760
- "sidebar",
761
- "sidebar-foreground",
762
- "sidebar-primary",
763
- "sidebar-primary-foreground",
764
- "sidebar-accent",
765
- "sidebar-accent-foreground",
766
- "sidebar-border",
767
- "sidebar-ring"
768
- ];
769
-
770
- //#endregion
771
- //#region src/utils/harden.ts
772
- function parseUrl(url, defaultOrigin) {
773
- if (typeof url !== "string") return null;
774
- try {
775
- return new URL(url);
776
- } catch {
777
- if (defaultOrigin) try {
778
- return new URL(url, defaultOrigin);
779
- } catch {
780
- return null;
781
- }
782
- if (url.startsWith("/") || url.startsWith("./") || url.startsWith("../")) try {
783
- return new URL(url, "http://example.com");
784
- } catch {
785
- return null;
786
- }
787
- return null;
788
- }
789
- }
790
- function isPathRelativeUrl(url) {
791
- if (typeof url !== "string") return false;
792
- return url.startsWith("/") || url.startsWith("./") || url.startsWith("../");
793
- }
794
- const safeProtocols = new Set([
795
- "https:",
796
- "http:",
797
- "irc:",
798
- "ircs:",
799
- "mailto:",
800
- "xmpp:",
801
- "blob:"
802
- ]);
803
- const blockedProtocols = new Set([
804
- "javascript:",
805
- "data:",
806
- "file:",
807
- "vbscript:"
808
- ]);
809
- function transformUrl(url, allowedPrefixes, defaultOrigin, allowDataImages = false, isImage = false, allowedProtocols = []) {
810
- if (!url) return null;
811
- if (typeof url === "string" && url.startsWith("#") && !isImage) try {
812
- if (new URL(url, "http://example.com").hash === url) return url;
813
- } catch {}
814
- if (typeof url === "string" && url.startsWith("data:")) {
815
- if (isImage && allowDataImages && url.startsWith("data:image/")) return url;
816
- return null;
817
- }
818
- if (typeof url === "string" && url.startsWith("blob:")) {
819
- try {
820
- if (new URL(url).protocol === "blob:" && url.length > 5) {
821
- const afterProtocol = url.substring(5);
822
- if (afterProtocol && afterProtocol.length > 0 && afterProtocol !== "invalid") return url;
823
- }
824
- } catch {
825
- return null;
826
- }
827
- return null;
828
- }
829
- const parsedUrl = parseUrl(url, defaultOrigin);
830
- if (!parsedUrl) return null;
831
- if (blockedProtocols.has(parsedUrl.protocol)) return null;
832
- if (!(safeProtocols.has(parsedUrl.protocol) || allowedProtocols.includes(parsedUrl.protocol) || allowedProtocols.includes("*"))) return null;
833
- if (parsedUrl.protocol === "mailto:" || !parsedUrl.protocol.match(/^https?:$/)) return parsedUrl.href;
834
- const inputWasRelative = isPathRelativeUrl(url);
835
- if (parsedUrl && allowedPrefixes.some((prefix) => {
836
- const parsedPrefix = parseUrl(prefix, defaultOrigin);
837
- if (!parsedPrefix) return false;
838
- if (parsedPrefix.origin !== parsedUrl.origin) return false;
839
- return parsedUrl.href.startsWith(parsedPrefix.href);
840
- })) {
841
- if (inputWasRelative) return parsedUrl.pathname + parsedUrl.search + parsedUrl.hash;
842
- return parsedUrl.href;
843
- }
844
- if (allowedPrefixes.includes("*")) {
845
- if (parsedUrl.protocol !== "https:" && parsedUrl.protocol !== "http:") return null;
846
- if (inputWasRelative) return parsedUrl.pathname + parsedUrl.search + parsedUrl.hash;
847
- return parsedUrl.href;
848
- }
849
- return null;
850
- }
851
-
852
- //#endregion
853
- //#region src/utils/helper.ts
854
- const fileExtensionPattern = /\.[^/.]+$/;
855
- function flow(fns) {
856
- return (input) => fns.reduce((acc, fn) => fn(acc), input);
857
- }
858
- function save(filename, content, mimeType) {
859
- const blob = typeof content === "string" ? new Blob([content], { type: mimeType }) : content;
860
- const url = URL.createObjectURL(blob);
861
- const a = document.createElement("a");
862
- a.href = url;
863
- a.download = filename;
864
- document.body.appendChild(a);
865
- a.click();
866
- document.body.removeChild(a);
867
- URL.revokeObjectURL(url);
868
- }
869
- async function saveImage(url, alt) {
870
- const blob = await (await fetch(url)).blob();
871
- const originalFilename = new URL(url, window.location.origin).pathname.split("/").pop() || "";
872
- const extension = originalFilename.split(".").pop();
873
- const hasExtension = originalFilename.includes(".") && extension !== void 0 && extension.length <= 4;
874
- let filename = "";
875
- if (hasExtension) filename = originalFilename;
876
- else {
877
- const mimeType = blob.type;
878
- let fileExtension = "png";
879
- if (mimeType.includes("jpeg") || mimeType.includes("jpg")) fileExtension = "jpg";
880
- else if (mimeType.includes("png")) fileExtension = "png";
881
- else if (mimeType.includes("svg")) fileExtension = "svg";
882
- else if (mimeType.includes("gif")) fileExtension = "gif";
883
- else if (mimeType.includes("webp")) fileExtension = "webp";
884
- filename = `${(alt || originalFilename || "image").replace(fileExtensionPattern, "")}.${fileExtension}`;
885
- }
886
- save(filename, blob, blob.type);
887
- }
888
- function svgToPngBlob(svgString, options) {
889
- const scale = (options === null || options === void 0 ? void 0 : options.scale) ?? 5;
890
- return new Promise((resolve, reject) => {
891
- const encoded = `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;
892
- const img = new Image();
893
- img.crossOrigin = "anonymous";
894
- img.onload = () => {
895
- const canvas = document.createElement("canvas");
896
- const w = img.width * scale;
897
- const h$1 = img.height * scale;
898
- canvas.width = w;
899
- canvas.height = h$1;
900
- const ctx = canvas.getContext("2d");
901
- if (!ctx) {
902
- reject(/* @__PURE__ */ new Error("Failed to create 2D canvas context for PNG export"));
903
- return;
904
- }
905
- ctx.drawImage(img, 0, 0, w, h$1);
906
- canvas.toBlob((blob) => {
907
- if (!blob) {
908
- reject(/* @__PURE__ */ new Error("Failed to create PNG blob"));
909
- return;
910
- }
911
- resolve(blob);
912
- }, "image/png");
913
- };
914
- img.onerror = () => reject(/* @__PURE__ */ new Error("Failed to load SVG image"));
915
- img.src = encoded;
916
- });
917
- }
918
-
919
- //#endregion
920
- //#region src/utils/module.ts
921
- async function hasShiki() {
922
- try {
923
- await import("shiki");
924
- return true;
925
- } catch {
926
- return false;
927
- }
928
- }
929
- async function hasMermaid() {
930
- try {
931
- await import("mermaid");
932
- return true;
933
- } catch {
934
- return false;
935
- }
936
- }
937
- async function hasKatex() {
938
- try {
939
- await import("katex");
940
- return true;
941
- } catch {
942
- return false;
943
- }
944
- }
945
-
946
- //#endregion
947
- //#region src/utils/parser.ts
948
- function findLastLeafNode(nodes) {
949
- for (let i = nodes.length - 1; i >= 0; i--) {
950
- const node = nodes[i];
951
- const nodeWithChildren = node;
952
- if (nodeWithChildren.children && nodeWithChildren.children.length > 0) {
953
- const found = findLastLeafNode(nodeWithChildren.children);
954
- if (found) return found;
955
- continue;
956
- }
957
- return node;
958
- }
959
- return null;
960
- }
961
- function findNodeParent(targetNode, nodes, parent) {
962
- for (let i = nodes.length - 1; i >= 0; i--) {
963
- if (nodes[i] === targetNode && parent) return {
964
- parent,
965
- index: i
966
- };
967
- const node = nodes[i];
968
- if (node.children) {
969
- const result = findNodeParent(targetNode, node.children, node);
970
- if (result) return result;
971
- }
972
- }
973
- return null;
974
- }
975
-
976
- //#endregion
977
- //#region src/utils/table.ts
978
- function extractTableDataFromElement(tableElement) {
979
- const headers = [];
980
- const rows = [];
981
- const headerCells = Array.from(tableElement.querySelectorAll("thead th"));
982
- for (const cell of headerCells) {
983
- var _cell$textContent;
984
- headers.push(((_cell$textContent = cell.textContent) === null || _cell$textContent === void 0 ? void 0 : _cell$textContent.trim()) || "");
985
- }
986
- const bodyRows = Array.from(tableElement.querySelectorAll("tbody tr"));
987
- for (const row of bodyRows) {
988
- const rowData = [];
989
- const cells = Array.from(row.querySelectorAll("td"));
990
- for (const cell of cells) {
991
- var _cell$textContent2;
992
- rowData.push(((_cell$textContent2 = cell.textContent) === null || _cell$textContent2 === void 0 ? void 0 : _cell$textContent2.trim()) || "");
993
- }
994
- rows.push(rowData);
995
- }
996
- return {
997
- headers,
998
- rows
999
- };
1000
- }
1001
- function tableDataToCSV(data) {
1002
- const { headers, rows } = data;
1003
- const escapeCSV = (value) => {
1004
- let needsEscaping = false;
1005
- let hasQuote = false;
1006
- for (let i = 0; i < value.length; i += 1) {
1007
- const char = value[i];
1008
- if (char === "\"") {
1009
- needsEscaping = true;
1010
- hasQuote = true;
1011
- break;
1012
- }
1013
- if (char === "," || char === "\n") needsEscaping = true;
1014
- }
1015
- if (!needsEscaping) return value;
1016
- if (hasQuote) return `"${value.replace(/"/g, "\"\"")}"`;
1017
- return `"${value}"`;
1018
- };
1019
- const totalRows = headers.length > 0 ? rows.length + 1 : rows.length;
1020
- const csvRows = Array.from({ length: totalRows });
1021
- let rowIndex = 0;
1022
- if (headers.length > 0) {
1023
- csvRows[rowIndex] = headers.map(escapeCSV).join(",");
1024
- rowIndex += 1;
1025
- }
1026
- for (const row of rows) {
1027
- csvRows[rowIndex] = row.map(escapeCSV).join(",");
1028
- rowIndex += 1;
1029
- }
1030
- return csvRows.join("\n");
1031
- }
1032
- function tableDataToTSV(data) {
1033
- const { headers, rows } = data;
1034
- const escapeTSV = (value) => {
1035
- let needsEscaping = false;
1036
- for (let i = 0; i < value.length; i += 1) {
1037
- const char = value[i];
1038
- if (char === " " || char === "\n" || char === "\r") {
1039
- needsEscaping = true;
1040
- break;
1041
- }
1042
- }
1043
- if (!needsEscaping) return value;
1044
- const parts = [];
1045
- for (let i = 0; i < value.length; i += 1) {
1046
- const char = value[i];
1047
- if (char === " ") parts.push("\\t");
1048
- else if (char === "\n") parts.push("\\n");
1049
- else if (char === "\r") parts.push("\\r");
1050
- else parts.push(char);
1051
- }
1052
- return parts.join("");
1053
- };
1054
- const totalRows = headers.length > 0 ? rows.length + 1 : rows.length;
1055
- const tsvRows = Array.from({ length: totalRows });
1056
- let rowIndex = 0;
1057
- if (headers.length > 0) {
1058
- tsvRows[rowIndex] = headers.map(escapeTSV).join(" ");
1059
- rowIndex += 1;
1060
- }
1061
- for (const row of rows) {
1062
- tsvRows[rowIndex] = row.map(escapeTSV).join(" ");
1063
- rowIndex += 1;
1064
- }
1065
- return tsvRows.join("\n");
1066
- }
1067
- function escapeMarkdownTableCell(cell) {
1068
- let needsEscaping = false;
1069
- for (let i = 0; i < cell.length; i += 1) {
1070
- const char = cell[i];
1071
- if (char === "\\" || char === "|") {
1072
- needsEscaping = true;
1073
- break;
1074
- }
1075
- }
1076
- if (!needsEscaping) return cell;
1077
- const parts = [];
1078
- for (let i = 0; i < cell.length; i += 1) {
1079
- const char = cell[i];
1080
- if (char === "\\") parts.push("\\\\");
1081
- else if (char === "|") parts.push("\\|");
1082
- else parts.push(char);
1083
- }
1084
- return parts.join("");
1085
- }
1086
- function tableDataToMarkdown(data) {
1087
- const { headers, rows } = data;
1088
- if (headers.length === 0) return "";
1089
- const markdownRows = Array.from({ length: rows.length + 2 });
1090
- let rowIndex = 0;
1091
- markdownRows[rowIndex] = `| ${headers.map((h$1) => escapeMarkdownTableCell(h$1)).join(" | ")} |`;
1092
- rowIndex += 1;
1093
- const separatorParts = Array.from({ length: headers.length });
1094
- for (let i = 0; i < headers.length; i += 1) separatorParts[i] = "---";
1095
- markdownRows[rowIndex] = `| ${separatorParts.join(" | ")} |`;
1096
- rowIndex += 1;
1097
- for (const row of rows) if (row.length < headers.length) {
1098
- const paddedRow = Array.from({ length: headers.length });
1099
- for (let i = 0; i < headers.length; i += 1) paddedRow[i] = i < row.length ? escapeMarkdownTableCell(row[i]) : "";
1100
- markdownRows[rowIndex] = `| ${paddedRow.join(" | ")} |`;
1101
- rowIndex += 1;
1102
- } else {
1103
- markdownRows[rowIndex] = `| ${row.map((cell) => escapeMarkdownTableCell(cell)).join(" | ")} |`;
1104
- rowIndex += 1;
1105
- }
1106
- return markdownRows.join("\n");
1107
- }
1108
-
1109
- //#endregion
1110
- //#region src/composables/use-harden-sanitizers.ts
1111
- function useHardenSanitizers(options) {
1112
- const hardenOptions = computed(() => unref(options.hardenOptions) ?? DEFAULT_HARDEN_OPTIONS);
1113
- const loading = computed(() => unref(options.loading) ?? false);
1114
- const allowedLinkPrefixes = computed(() => hardenOptions.value.allowedLinkPrefixes ?? ["*"]);
1115
- const allowedImagePrefixes = computed(() => hardenOptions.value.allowedImagePrefixes ?? ["*"]);
1116
- const allowedProtocols = computed(() => hardenOptions.value.allowedProtocols ?? ["*"]);
1117
- const allowDataImages = computed(() => hardenOptions.value.allowDataImages ?? true);
1118
- const defaultOrigin = computed(() => hardenOptions.value.defaultOrigin ?? "");
1119
- const isImage = computed(() => unref(options.isImage) ?? false);
1120
- const url = computed(() => unref(options.url) ?? "");
1121
- const transformedUrl = computed(() => transformHardenUrl(url.value));
1122
- const isHardenUrl = computed(() => transformedUrl.value === null);
1123
- function transformHardenUrl(url$1) {
1124
- if (!url$1 || loading.value) return url$1;
1125
- return transformUrl(url$1, isImage.value ? allowedImagePrefixes.value : allowedLinkPrefixes.value, defaultOrigin.value, allowDataImages.value, isImage.value, allowedProtocols.value);
1126
- }
1127
- return {
1128
- hardenOptions,
1129
- transformHardenUrl,
1130
- transformedUrl,
1131
- isHardenUrl
1132
- };
1133
- }
1134
-
1135
583
  //#endregion
1136
584
  //#region src/locales/index.ts
1137
585
  const SUPPORT_LANGUAGES = ["en-US", "zh-CN"];
1138
586
  const localesGlob = {
1139
- "./en-US.json": () => import("./en-US-Kw2LYAMk.js"),
1140
- "./zh-CN.json": () => import("./zh-CN-Dfow4Yn2.js")
587
+ "./en-US.json": () => import("./en-US-Cw-sFSiZ.js"),
588
+ "./zh-CN.json": () => import("./zh-CN-B9lWRP8O.js")
1141
589
  };
1142
590
  const localeMessages = ref();
1143
591
  const currentLocale = ref("en-US");
1144
592
  async function loadLocaleMessages(language) {
1145
593
  const load = async (language$1) => {
1146
- localeMessages.value = await localesGlob[`./${language$1}.json`]();
594
+ const fn = localesGlob[`./${language$1}.json`];
595
+ if (!fn) return;
596
+ localeMessages.value = await fn();
1147
597
  currentLocale.value = language$1;
1148
598
  };
1149
599
  try {
@@ -1191,10 +641,16 @@ function useKatex() {
1191
641
  }
1192
642
  }
1193
643
  async function preload() {
1194
- if (await hasKatex()) import("katex/dist/katex.min.css");
644
+ if (!isClient()) return;
645
+ if (await hasKatex()) {
646
+ const loadCSS = async () => {
647
+ if (isClient()) await import("katex/dist/katex.min.css");
648
+ };
649
+ await loadCSS();
650
+ }
1195
651
  }
1196
652
  function dispose() {}
1197
- (async () => {
653
+ if (isClient()) (async () => {
1198
654
  if (existingKatex === true) {
1199
655
  installed.value = true;
1200
656
  return;
@@ -1470,7 +926,10 @@ function useMediumZoom(options) {
1470
926
  const showClonedElement = ref(false);
1471
927
  const initialTransform = ref("");
1472
928
  const targetTransform = ref("");
1473
- const elementStyle = computed(() => ({ opacity: showClonedElement.value ? 0 : 1 }));
929
+ const elementStyle = computed(() => {
930
+ if (!isClient()) return { opacity: 1 };
931
+ return { opacity: showClonedElement.value ? 0 : 1 };
932
+ });
1474
933
  function cloneElement() {
1475
934
  const original = elementRef.value;
1476
935
  if (!original) return;
@@ -1585,119 +1044,708 @@ function useMediumZoom(options) {
1585
1044
  } catch {
1586
1045
  cloned.style.transform = `${currentTransform} translate3d(${translateX}px, ${translateY}px, 0) scale(${scale})`;
1587
1046
  }
1588
- else cloned.style.transform = `translate3d(${translateX}px, ${translateY}px, 0) scale(${scale})`;
1589
- const handleAnimationEnd = () => {
1590
- var _options$close2;
1591
- const cloned$1 = clonedElementRef.value;
1592
- if (cloned$1 && cloned$1.parentNode) cloned$1.parentNode.removeChild(cloned$1);
1593
- clonedElementRef.value = void 0;
1594
- if (elementRef.value) elementRef.value.style.visibility = "visible";
1595
- (_options$close2 = options.close) === null || _options$close2 === void 0 || _options$close2.call(options);
1596
- isAnimating.value = false;
1597
- showClonedElement.value = false;
1598
- };
1599
- cloned.addEventListener("transitionend", handleAnimationEnd, { once: true });
1047
+ else cloned.style.transform = `translate3d(${translateX}px, ${translateY}px, 0) scale(${scale})`;
1048
+ const handleAnimationEnd = () => {
1049
+ var _options$close2;
1050
+ const cloned$1 = clonedElementRef.value;
1051
+ if (cloned$1 && cloned$1.parentNode) cloned$1.parentNode.removeChild(cloned$1);
1052
+ clonedElementRef.value = void 0;
1053
+ if (elementRef.value) elementRef.value.style.visibility = "visible";
1054
+ (_options$close2 = options.close) === null || _options$close2 === void 0 || _options$close2.call(options);
1055
+ isAnimating.value = false;
1056
+ showClonedElement.value = false;
1057
+ };
1058
+ cloned.addEventListener("transitionend", handleAnimationEnd, { once: true });
1059
+ }
1060
+ return {
1061
+ isAnimating,
1062
+ elementStyle,
1063
+ elementRef,
1064
+ zoomElementRef,
1065
+ zoomIn,
1066
+ zoomOut
1067
+ };
1068
+ }
1069
+
1070
+ //#endregion
1071
+ //#region src/composables/use-mermaid.ts
1072
+ let mermaid = null;
1073
+ function useMermaid(options) {
1074
+ const installed = ref(false);
1075
+ const mermaidConfig = computed(() => {
1076
+ var _unref;
1077
+ return ((_unref = unref(options === null || options === void 0 ? void 0 : options.mermaidOptions)) === null || _unref === void 0 ? void 0 : _unref.config) ?? {};
1078
+ });
1079
+ const mermaidTheme = computed(() => {
1080
+ var _unref2;
1081
+ return ((_unref2 = unref(options === null || options === void 0 ? void 0 : options.mermaidOptions)) === null || _unref2 === void 0 ? void 0 : _unref2.theme) ?? ["neutral", "dark"];
1082
+ });
1083
+ const isDark = computed(() => unref(options === null || options === void 0 ? void 0 : options.isDark) ?? false);
1084
+ const lightTheme = computed(() => mermaidTheme.value[0] ?? "neutral");
1085
+ const darkTheme = computed(() => mermaidTheme.value[1] ?? "dark");
1086
+ const theme = computed(() => isDark.value ? darkTheme.value : lightTheme.value);
1087
+ const chart = ref("");
1088
+ async function getMermaid() {
1089
+ if (mermaid) return mermaid;
1090
+ const { default: module } = await import("mermaid");
1091
+ module.initialize({
1092
+ startOnLoad: false,
1093
+ securityLevel: "loose",
1094
+ ...mermaidConfig.value
1095
+ });
1096
+ mermaid = module;
1097
+ return mermaid;
1098
+ }
1099
+ function wrapThemeCode(code) {
1100
+ if (code.startsWith("%%{")) return code;
1101
+ return `${`%%{init: {"theme": "${theme.value}"}}%%\n`}${code}`;
1102
+ }
1103
+ async function parseMermaid(code) {
1104
+ try {
1105
+ const mermaid$1 = await getMermaid();
1106
+ chart.value = wrapThemeCode(code);
1107
+ await mermaid$1.parse(chart.value);
1108
+ return true;
1109
+ } catch {
1110
+ return false;
1111
+ }
1112
+ }
1113
+ async function renderMermaid(code) {
1114
+ if (!await parseMermaid(code) || !isClient()) return null;
1115
+ const id = `mermaid-${randomStr()}`;
1116
+ try {
1117
+ return (await (await getMermaid()).render(id, wrapThemeCode(code))).svg;
1118
+ } catch {
1119
+ const element = document.getElementById(`d${id}`);
1120
+ if (element) element.remove();
1121
+ return null;
1122
+ }
1123
+ }
1124
+ async function saveMermaid(format, code = chart.value, onError) {
1125
+ try {
1126
+ const svg = await renderMermaid(code);
1127
+ if (!svg) {
1128
+ onError === null || onError === void 0 || onError(/* @__PURE__ */ new Error("SVG not found. Please wait for the diagram to render."));
1129
+ return;
1130
+ }
1131
+ if (format === "svg") save("diagram.svg", svg, "image/svg+xml");
1132
+ if (format === "png") {
1133
+ const blob = await svgToPngBlob(svg);
1134
+ if (blob) save("diagram.png", blob, "image/png");
1135
+ }
1136
+ } catch (error) {
1137
+ onError === null || onError === void 0 || onError(error);
1138
+ }
1139
+ }
1140
+ async function preload() {
1141
+ if (mermaid) return;
1142
+ installed.value = await hasMermaid();
1143
+ if (installed.value) await getMermaid();
1144
+ }
1145
+ function dispose() {
1146
+ chart.value = "";
1600
1147
  }
1148
+ if (isClient()) (async () => {
1149
+ if (mermaid) {
1150
+ installed.value = true;
1151
+ return;
1152
+ }
1153
+ installed.value = await hasMermaid();
1154
+ })();
1601
1155
  return {
1602
- isAnimating,
1603
- elementStyle,
1604
- elementRef,
1605
- zoomElementRef,
1606
- zoomIn,
1607
- zoomOut
1156
+ installed,
1157
+ getMermaid,
1158
+ parseMermaid,
1159
+ renderMermaid,
1160
+ saveMermaid,
1161
+ preload,
1162
+ dispose
1608
1163
  };
1609
1164
  }
1610
1165
 
1611
1166
  //#endregion
1612
- //#region src/composables/use-mermaid.ts
1613
- let mermaid = null;
1614
- function useMermaid(options) {
1615
- const installed = ref(false);
1616
- const mermaidConfig = computed(() => {
1617
- var _unref;
1618
- return ((_unref = unref(options === null || options === void 0 ? void 0 : options.mermaidOptions)) === null || _unref === void 0 ? void 0 : _unref.config) ?? {};
1619
- });
1620
- const mermaidTheme = computed(() => {
1621
- var _unref2;
1622
- return ((_unref2 = unref(options === null || options === void 0 ? void 0 : options.mermaidOptions)) === null || _unref2 === void 0 ? void 0 : _unref2.theme) ?? ["neutral", "dark"];
1623
- });
1624
- const isDark = computed(() => unref(options === null || options === void 0 ? void 0 : options.isDark) ?? false);
1625
- const lightTheme = computed(() => mermaidTheme.value[0] ?? "neutral");
1626
- const darkTheme = computed(() => mermaidTheme.value[1] ?? "dark");
1627
- const theme = computed(() => isDark.value ? darkTheme.value : lightTheme.value);
1628
- const chart = ref("");
1629
- async function getMermaid() {
1630
- if (mermaid) return mermaid;
1631
- const { default: module } = await import("mermaid");
1632
- module.initialize({
1633
- startOnLoad: false,
1634
- securityLevel: "loose",
1635
- ...mermaidConfig.value
1636
- });
1637
- mermaid = module;
1638
- return mermaid;
1639
- }
1640
- function wrapThemeCode(code) {
1641
- if (code.startsWith("%%{")) return code;
1642
- return `${`%%{init: {"theme": "${theme.value}"}}%%\n`}${code}`;
1643
- }
1644
- async function parseMermaid(code) {
1645
- try {
1646
- const mermaid$1 = await getMermaid();
1647
- chart.value = wrapThemeCode(code);
1648
- await mermaid$1.parse(chart.value);
1649
- return true;
1650
- } catch {
1651
- return false;
1652
- }
1653
- }
1654
- async function renderMermaid(code) {
1655
- if (!await parseMermaid(code)) return null;
1656
- const id = `mermaid-${randomStr()}`;
1657
- try {
1658
- return (await (await getMermaid()).render(id, wrapThemeCode(code))).svg;
1659
- } catch {
1660
- const element = document.getElementById(`d${id}`);
1661
- if (element) element.remove();
1662
- return null;
1663
- }
1664
- }
1665
- async function saveMermaid(format, code = chart.value, onError) {
1666
- try {
1667
- const svg = await renderMermaid(code);
1668
- if (!svg) {
1669
- onError === null || onError === void 0 || onError(/* @__PURE__ */ new Error("SVG not found. Please wait for the diagram to render."));
1670
- return;
1671
- }
1672
- if (format === "svg") save("diagram.svg", svg, "image/svg+xml");
1673
- if (format === "png") save("diagram.png", await svgToPngBlob(svg), "image/png");
1674
- } catch (error) {
1675
- onError === null || onError === void 0 || onError(error);
1676
- }
1677
- }
1678
- async function preload() {
1679
- if (mermaid) return;
1680
- installed.value = await hasMermaid();
1681
- if (installed.value) await getMermaid();
1682
- }
1683
- function dispose() {
1684
- chart.value = "";
1167
+ //#region src/constants/code.ts
1168
+ const DEFAULT_LIGHT_THEME = "github-light";
1169
+ const DEFAULT_DARK_THEME = "github-dark";
1170
+ const LANGUAGE_ALIAS = {};
1171
+ const LANGUAGE_EXTENSIONS = {
1172
+ "1c-query": "1cq",
1173
+ "1c": "1c",
1174
+ "abap": "abap",
1175
+ "actionscript-3": "as",
1176
+ "ada": "ada",
1177
+ "adoc": "adoc",
1178
+ "angular-html": "html",
1179
+ "angular-ts": "ts",
1180
+ "apache": "conf",
1181
+ "apex": "cls",
1182
+ "apl": "apl",
1183
+ "applescript": "applescript",
1184
+ "ara": "ara",
1185
+ "asciidoc": "adoc",
1186
+ "asm": "asm",
1187
+ "astro": "astro",
1188
+ "awk": "awk",
1189
+ "ballerina": "bal",
1190
+ "bash": "sh",
1191
+ "bat": "bat",
1192
+ "batch": "bat",
1193
+ "be": "be",
1194
+ "beancount": "beancount",
1195
+ "berry": "berry",
1196
+ "bibtex": "bib",
1197
+ "bicep": "bicep",
1198
+ "blade": "blade.php",
1199
+ "bsl": "bsl",
1200
+ "c": "c",
1201
+ "c#": "cs",
1202
+ "c++": "cpp",
1203
+ "cadence": "cdc",
1204
+ "cairo": "cairo",
1205
+ "cdc": "cdc",
1206
+ "clarity": "clar",
1207
+ "clj": "clj",
1208
+ "clojure": "clj",
1209
+ "closure-templates": "soy",
1210
+ "cmake": "cmake",
1211
+ "cmd": "cmd",
1212
+ "cobol": "cob",
1213
+ "codeowners": "CODEOWNERS",
1214
+ "codeql": "ql",
1215
+ "coffee": "coffee",
1216
+ "coffeescript": "coffee",
1217
+ "common-lisp": "lisp",
1218
+ "console": "sh",
1219
+ "coq": "v",
1220
+ "cpp": "cpp",
1221
+ "cql": "cql",
1222
+ "crystal": "cr",
1223
+ "cs": "cs",
1224
+ "csharp": "cs",
1225
+ "css": "css",
1226
+ "csv": "csv",
1227
+ "cue": "cue",
1228
+ "cypher": "cql",
1229
+ "d": "d",
1230
+ "dart": "dart",
1231
+ "dax": "dax",
1232
+ "desktop": "desktop",
1233
+ "diff": "diff",
1234
+ "docker": "dockerfile",
1235
+ "dockerfile": "dockerfile",
1236
+ "dotenv": "env",
1237
+ "dream-maker": "dm",
1238
+ "edge": "edge",
1239
+ "elisp": "el",
1240
+ "elixir": "ex",
1241
+ "elm": "elm",
1242
+ "emacs-lisp": "el",
1243
+ "erb": "erb",
1244
+ "erl": "erl",
1245
+ "erlang": "erl",
1246
+ "f": "f",
1247
+ "f#": "fs",
1248
+ "f03": "f03",
1249
+ "f08": "f08",
1250
+ "f18": "f18",
1251
+ "f77": "f77",
1252
+ "f90": "f90",
1253
+ "f95": "f95",
1254
+ "fennel": "fnl",
1255
+ "fish": "fish",
1256
+ "fluent": "ftl",
1257
+ "for": "for",
1258
+ "fortran-fixed-form": "f",
1259
+ "fortran-free-form": "f90",
1260
+ "fs": "fs",
1261
+ "fsharp": "fs",
1262
+ "fsl": "fsl",
1263
+ "ftl": "ftl",
1264
+ "gdresource": "tres",
1265
+ "gdscript": "gd",
1266
+ "gdshader": "gdshader",
1267
+ "genie": "gs",
1268
+ "gherkin": "feature",
1269
+ "git-commit": "gitcommit",
1270
+ "git-rebase": "gitrebase",
1271
+ "gjs": "js",
1272
+ "gleam": "gleam",
1273
+ "glimmer-js": "js",
1274
+ "glimmer-ts": "ts",
1275
+ "glsl": "glsl",
1276
+ "gnuplot": "plt",
1277
+ "go": "go",
1278
+ "gql": "gql",
1279
+ "graphql": "graphql",
1280
+ "groovy": "groovy",
1281
+ "gts": "gts",
1282
+ "hack": "hack",
1283
+ "haml": "haml",
1284
+ "handlebars": "hbs",
1285
+ "haskell": "hs",
1286
+ "haxe": "hx",
1287
+ "hbs": "hbs",
1288
+ "hcl": "hcl",
1289
+ "hjson": "hjson",
1290
+ "hlsl": "hlsl",
1291
+ "hs": "hs",
1292
+ "html-derivative": "html",
1293
+ "html": "html",
1294
+ "http": "http",
1295
+ "hxml": "hxml",
1296
+ "hy": "hy",
1297
+ "imba": "imba",
1298
+ "ini": "ini",
1299
+ "jade": "jade",
1300
+ "java": "java",
1301
+ "javascript": "js",
1302
+ "jinja": "jinja",
1303
+ "jison": "jison",
1304
+ "jl": "jl",
1305
+ "js": "js",
1306
+ "json": "json",
1307
+ "json5": "json5",
1308
+ "jsonc": "jsonc",
1309
+ "jsonl": "jsonl",
1310
+ "jsonnet": "jsonnet",
1311
+ "jssm": "jssm",
1312
+ "jsx": "jsx",
1313
+ "julia": "jl",
1314
+ "kotlin": "kt",
1315
+ "kql": "kql",
1316
+ "kt": "kt",
1317
+ "kts": "kts",
1318
+ "kusto": "kql",
1319
+ "latex": "tex",
1320
+ "lean": "lean",
1321
+ "lean4": "lean",
1322
+ "less": "less",
1323
+ "liquid": "liquid",
1324
+ "lisp": "lisp",
1325
+ "lit": "lit",
1326
+ "llvm": "ll",
1327
+ "log": "log",
1328
+ "logo": "logo",
1329
+ "lua": "lua",
1330
+ "luau": "luau",
1331
+ "make": "mak",
1332
+ "makefile": "mak",
1333
+ "markdown": "md",
1334
+ "marko": "marko",
1335
+ "matlab": "m",
1336
+ "md": "md",
1337
+ "mdc": "mdc",
1338
+ "mdx": "mdx",
1339
+ "mediawiki": "wiki",
1340
+ "mermaid": "mmd",
1341
+ "mips": "s",
1342
+ "mipsasm": "s",
1343
+ "mmd": "mmd",
1344
+ "mojo": "mojo",
1345
+ "move": "move",
1346
+ "nar": "nar",
1347
+ "narrat": "narrat",
1348
+ "nextflow": "nf",
1349
+ "nf": "nf",
1350
+ "nginx": "conf",
1351
+ "nim": "nim",
1352
+ "nix": "nix",
1353
+ "nu": "nu",
1354
+ "nushell": "nu",
1355
+ "objc": "m",
1356
+ "objective-c": "m",
1357
+ "objective-cpp": "mm",
1358
+ "ocaml": "ml",
1359
+ "pascal": "pas",
1360
+ "perl": "pl",
1361
+ "perl6": "p6",
1362
+ "php": "php",
1363
+ "plsql": "pls",
1364
+ "po": "po",
1365
+ "polar": "polar",
1366
+ "postcss": "pcss",
1367
+ "pot": "pot",
1368
+ "potx": "potx",
1369
+ "powerquery": "pq",
1370
+ "powershell": "ps1",
1371
+ "prisma": "prisma",
1372
+ "prolog": "pl",
1373
+ "properties": "properties",
1374
+ "proto": "proto",
1375
+ "protobuf": "proto",
1376
+ "ps": "ps",
1377
+ "ps1": "ps1",
1378
+ "pug": "pug",
1379
+ "puppet": "pp",
1380
+ "purescript": "purs",
1381
+ "py": "py",
1382
+ "python": "py",
1383
+ "ql": "ql",
1384
+ "qml": "qml",
1385
+ "qmldir": "qmldir",
1386
+ "qss": "qss",
1387
+ "r": "r",
1388
+ "racket": "rkt",
1389
+ "raku": "raku",
1390
+ "razor": "cshtml",
1391
+ "rb": "rb",
1392
+ "reg": "reg",
1393
+ "regex": "regex",
1394
+ "regexp": "regexp",
1395
+ "rel": "rel",
1396
+ "riscv": "s",
1397
+ "rs": "rs",
1398
+ "rst": "rst",
1399
+ "ruby": "rb",
1400
+ "rust": "rs",
1401
+ "sas": "sas",
1402
+ "sass": "sass",
1403
+ "scala": "scala",
1404
+ "scheme": "scm",
1405
+ "scss": "scss",
1406
+ "sdbl": "sdbl",
1407
+ "sh": "sh",
1408
+ "shader": "shader",
1409
+ "shaderlab": "shader",
1410
+ "shell": "sh",
1411
+ "shellscript": "sh",
1412
+ "shellsession": "sh",
1413
+ "smalltalk": "st",
1414
+ "solidity": "sol",
1415
+ "soy": "soy",
1416
+ "sparql": "rq",
1417
+ "spl": "spl",
1418
+ "splunk": "spl",
1419
+ "sql": "sql",
1420
+ "ssh-config": "config",
1421
+ "stata": "do",
1422
+ "styl": "styl",
1423
+ "stylus": "styl",
1424
+ "svelte": "svelte",
1425
+ "swift": "swift",
1426
+ "system-verilog": "sv",
1427
+ "systemd": "service",
1428
+ "talon": "talon",
1429
+ "talonscript": "talon",
1430
+ "tasl": "tasl",
1431
+ "tcl": "tcl",
1432
+ "templ": "templ",
1433
+ "terraform": "tf",
1434
+ "tex": "tex",
1435
+ "tf": "tf",
1436
+ "tfvars": "tfvars",
1437
+ "toml": "toml",
1438
+ "ts-tags": "ts",
1439
+ "ts": "ts",
1440
+ "tsp": "tsp",
1441
+ "tsv": "tsv",
1442
+ "tsx": "tsx",
1443
+ "turtle": "ttl",
1444
+ "twig": "twig",
1445
+ "typ": "typ",
1446
+ "typescript": "ts",
1447
+ "typespec": "tsp",
1448
+ "typst": "typ",
1449
+ "v": "v",
1450
+ "vala": "vala",
1451
+ "vb": "vb",
1452
+ "verilog": "v",
1453
+ "vhdl": "vhdl",
1454
+ "vim": "vim",
1455
+ "viml": "vim",
1456
+ "vimscript": "vim",
1457
+ "vue-html": "html",
1458
+ "vue-vine": "vine",
1459
+ "vue": "vue",
1460
+ "vy": "vy",
1461
+ "vyper": "vy",
1462
+ "wasm": "wasm",
1463
+ "wenyan": "wy",
1464
+ "wgsl": "wgsl",
1465
+ "wiki": "wiki",
1466
+ "wikitext": "wiki",
1467
+ "wit": "wit",
1468
+ "wl": "wl",
1469
+ "wolfram": "wl",
1470
+ "xml": "xml",
1471
+ "xsl": "xsl",
1472
+ "yaml": "yaml",
1473
+ "yml": "yml",
1474
+ "zenscript": "zs",
1475
+ "zig": "zig",
1476
+ "zsh": "zsh",
1477
+ "文言": "wy"
1478
+ };
1479
+ const LANGUAGE_ICONS = {
1480
+ "adoc": defineAsyncComponent(() => import("./asciidoc-DOmevTVz.js")),
1481
+ "angular-html": defineAsyncComponent(() => import("./angular-CJL7ngrz.js")),
1482
+ "angular-ts": defineAsyncComponent(() => import("./angular-component-COlDvuNE.js")),
1483
+ "apache": defineAsyncComponent(() => import("./apache-CVvmKdUn.js")),
1484
+ "asciidoc": defineAsyncComponent(() => import("./asciidoc-DOmevTVz.js")),
1485
+ "asm": defineAsyncComponent(() => import("./assembly-Bj0yQVcL.js")),
1486
+ "astro": defineAsyncComponent(() => import("./astro-DUti0QFn.js")),
1487
+ "bash": defineAsyncComponent(() => import("./bash-BfyNXzLO.js")),
1488
+ "bat": defineAsyncComponent(() => import("./batch-Dp6N3cFQ.js")),
1489
+ "batch": defineAsyncComponent(() => import("./batch-Dp6N3cFQ.js")),
1490
+ "bicep": defineAsyncComponent(() => import("./bicep-CEkCHedl.js")),
1491
+ "c": defineAsyncComponent(() => import("./c-CTmG9vr2.js")),
1492
+ "c#": defineAsyncComponent(() => import("./csharp-C6rkxA6x.js")),
1493
+ "c++": defineAsyncComponent(() => import("./cpp-BfV_KWzp.js")),
1494
+ "cjs": defineAsyncComponent(() => import("./javascript-DQlby440.js")),
1495
+ "clj": defineAsyncComponent(() => import("./clojure-CHjliXb8.js")),
1496
+ "clojure": defineAsyncComponent(() => import("./clojure-CHjliXb8.js")),
1497
+ "cmake": defineAsyncComponent(() => import("./cmake-BsKz8Gt4.js")),
1498
+ "cmd": defineAsyncComponent(() => import("./batch-Dp6N3cFQ.js")),
1499
+ "cobol": defineAsyncComponent(() => import("./cobol-BvWYwPFU.js")),
1500
+ "codeowners": defineAsyncComponent(() => import("./codeowners-CfTM6yvs.js")),
1501
+ "coffee": defineAsyncComponent(() => import("./coffeescript-BDiFe_B2.js")),
1502
+ "coffeescript": defineAsyncComponent(() => import("./coffeescript-BDiFe_B2.js")),
1503
+ "cpp": defineAsyncComponent(() => import("./cpp-BfV_KWzp.js")),
1504
+ "crystal": defineAsyncComponent(() => import("./crystal-BXT0x2i3.js")),
1505
+ "cs": defineAsyncComponent(() => import("./csharp-C6rkxA6x.js")),
1506
+ "csharp": defineAsyncComponent(() => import("./csharp-C6rkxA6x.js")),
1507
+ "css": defineAsyncComponent(() => import("./css-Drxb2cuf.js")),
1508
+ "csv": defineAsyncComponent(() => import("./csv-CHKRaQ9l.js")),
1509
+ "cts": defineAsyncComponent(() => import("./typescript-0uiFYOof.js")),
1510
+ "cue": defineAsyncComponent(() => import("./cue-DksiF2mE.js")),
1511
+ "d": defineAsyncComponent(() => import("./d-C8JgmiVc.js")),
1512
+ "dart": defineAsyncComponent(() => import("./dart-BX3GppmW.js")),
1513
+ "diff": defineAsyncComponent(() => import("./diff-C61xHcnV.js")),
1514
+ "docker": defineAsyncComponent(() => import("./docker-Dws0Euuu.js")),
1515
+ "dockerfile": defineAsyncComponent(() => import("./docker-Dws0Euuu.js")),
1516
+ "dotenv": defineAsyncComponent(() => import("./env-BwMmmmE5.js")),
1517
+ "elixir": defineAsyncComponent(() => import("./elixir-CtaCeLkf.js")),
1518
+ "elm": defineAsyncComponent(() => import("./elm-CFvSvo-7.js")),
1519
+ "erb": defineAsyncComponent(() => import("./ruby-CNn-W_DF.js")),
1520
+ "erl": defineAsyncComponent(() => import("./erlang-DJRbvPSq.js")),
1521
+ "erlang": defineAsyncComponent(() => import("./erlang-DJRbvPSq.js")),
1522
+ "f": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1523
+ "f#": defineAsyncComponent(() => import("./fsharp-C2iQH5b1.js")),
1524
+ "f03": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1525
+ "f08": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1526
+ "f18": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1527
+ "f77": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1528
+ "f90": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1529
+ "f95": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1530
+ "for": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1531
+ "fortran-fixed-form": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1532
+ "fortran-free-form": defineAsyncComponent(() => import("./fortran-D3Vf5GTV.js")),
1533
+ "fs": defineAsyncComponent(() => import("./fsharp-C2iQH5b1.js")),
1534
+ "fsharp": defineAsyncComponent(() => import("./fsharp-C2iQH5b1.js")),
1535
+ "git-commit": defineAsyncComponent(() => import("./git-DN4z97-P.js")),
1536
+ "git-rebase": defineAsyncComponent(() => import("./git-DN4z97-P.js")),
1537
+ "gleam": defineAsyncComponent(() => import("./gleam-PhX3VC_5.js")),
1538
+ "go": defineAsyncComponent(() => import("./go-xPznl0oK.js")),
1539
+ "gql": defineAsyncComponent(() => import("./graphql-sVzb1_rA.js")),
1540
+ "graphql": defineAsyncComponent(() => import("./graphql-sVzb1_rA.js")),
1541
+ "groovy": defineAsyncComponent(() => import("./groovy-Bvkrc3eE.js")),
1542
+ "haml": defineAsyncComponent(() => import("./haml-Y_qa35Lk.js")),
1543
+ "handlebars": defineAsyncComponent(() => import("./handlebars-Bo6cxn4k.js")),
1544
+ "haskell": defineAsyncComponent(() => import("./haskell-D8t1pxAr.js")),
1545
+ "haxe": defineAsyncComponent(() => import("./haxe-C-sdXVB9.js")),
1546
+ "hbs": defineAsyncComponent(() => import("./handlebars-Bo6cxn4k.js")),
1547
+ "hs": defineAsyncComponent(() => import("./haskell-D8t1pxAr.js")),
1548
+ "html": defineAsyncComponent(() => import("./html-I3JKB_2G.js")),
1549
+ "http": defineAsyncComponent(() => import("./http-Dj2NVTPO.js")),
1550
+ "jade": defineAsyncComponent(() => import("./pug-OiYFRnMd.js")),
1551
+ "java": defineAsyncComponent(() => import("./java-BulcCUaV.js")),
1552
+ "javascript": defineAsyncComponent(() => import("./javascript-DQlby440.js")),
1553
+ "jinja": defineAsyncComponent(() => import("./jinja-HRQZM5oZ.js")),
1554
+ "jl": defineAsyncComponent(() => import("./julia-DjHYSWzj.js")),
1555
+ "js": defineAsyncComponent(() => import("./javascript-DQlby440.js")),
1556
+ "json": defineAsyncComponent(() => import("./json-wUPUX2x-.js")),
1557
+ "json5": defineAsyncComponent(() => import("./json-wUPUX2x-.js")),
1558
+ "jsonc": defineAsyncComponent(() => import("./json-wUPUX2x-.js")),
1559
+ "jsonl": defineAsyncComponent(() => import("./json-wUPUX2x-.js")),
1560
+ "jsx": defineAsyncComponent(() => import("./javascript-DQlby440.js")),
1561
+ "julia": defineAsyncComponent(() => import("./julia-DjHYSWzj.js")),
1562
+ "kdl": defineAsyncComponent(() => import("./kdl-CGLuct22.js")),
1563
+ "kotlin": defineAsyncComponent(() => import("./kotlin-CnR9eg7m.js")),
1564
+ "kt": defineAsyncComponent(() => import("./kotlin-CnR9eg7m.js")),
1565
+ "kts": defineAsyncComponent(() => import("./kotlin-CnR9eg7m.js")),
1566
+ "latex": defineAsyncComponent(() => import("./latex-CesDKd8G.js")),
1567
+ "less": defineAsyncComponent(() => import("./less-215r2nUv.js")),
1568
+ "liquid": defineAsyncComponent(() => import("./liquid-FFTnvZwx.js")),
1569
+ "lisp": defineAsyncComponent(() => import("./lisp-BNWIo3S3.js")),
1570
+ "log": defineAsyncComponent(() => import("./log-C3BhnPjM.js")),
1571
+ "lua": defineAsyncComponent(() => import("./lua-jBHQD7Fh.js")),
1572
+ "luau": defineAsyncComponent(() => import("./luau-CJKAqC3L.js")),
1573
+ "make": defineAsyncComponent(() => import("./makefile-DZmoFYpF.js")),
1574
+ "makefile": defineAsyncComponent(() => import("./makefile-DZmoFYpF.js")),
1575
+ "markdown": defineAsyncComponent(() => import("./markdown-BEABBw2C.js")),
1576
+ "marko": defineAsyncComponent(() => import("./marko-DE7d51Q2.js")),
1577
+ "matlab": defineAsyncComponent(() => import("./matlab-n99nEoGl.js")),
1578
+ "md": defineAsyncComponent(() => import("./markdown-BEABBw2C.js")),
1579
+ "mdc": defineAsyncComponent(() => import("./markdown-BEABBw2C.js")),
1580
+ "mdx": defineAsyncComponent(() => import("./markdown-BEABBw2C.js")),
1581
+ "mermaid": defineAsyncComponent(() => import("./mermaid-Dv9_1JlU.js")),
1582
+ "mjs": defineAsyncComponent(() => import("./javascript-DQlby440.js")),
1583
+ "mmd": defineAsyncComponent(() => import("./mermaid-Dv9_1JlU.js")),
1584
+ "mts": defineAsyncComponent(() => import("./typescript-0uiFYOof.js")),
1585
+ "nextflow": defineAsyncComponent(() => import("./nextflow-DjdDVx1j.js")),
1586
+ "nf": defineAsyncComponent(() => import("./nextflow-DjdDVx1j.js")),
1587
+ "nginx": defineAsyncComponent(() => import("./nginx-DH4jOOdC.js")),
1588
+ "nim": defineAsyncComponent(() => import("./nim-Cb0hPGv5.js")),
1589
+ "nix": defineAsyncComponent(() => import("./nix-Bf4Vwv5v.js")),
1590
+ "ocaml": defineAsyncComponent(() => import("./ocaml-BwJ1z9S7.js")),
1591
+ "perl": defineAsyncComponent(() => import("./perl-P6bAYvN9.js")),
1592
+ "php": defineAsyncComponent(() => import("./php-BGTGPBW1.js")),
1593
+ "postcss": defineAsyncComponent(() => import("./postcss-D8a2Jx1D.js")),
1594
+ "powershell": defineAsyncComponent(() => import("./powershell-DNOnus4K.js")),
1595
+ "prisma": defineAsyncComponent(() => import("./prisma-DquVk_GR.js")),
1596
+ "prolog": defineAsyncComponent(() => import("./prolog-BxJJGnOg.js")),
1597
+ "properties": defineAsyncComponent(() => import("./properties-DjauSeDE.js")),
1598
+ "proto": defineAsyncComponent(() => import("./proto-3aU1SxxY.js")),
1599
+ "protobuf": defineAsyncComponent(() => import("./proto-3aU1SxxY.js")),
1600
+ "ps": defineAsyncComponent(() => import("./powershell-DNOnus4K.js")),
1601
+ "ps1": defineAsyncComponent(() => import("./powershell-DNOnus4K.js")),
1602
+ "pug": defineAsyncComponent(() => import("./pug-OiYFRnMd.js")),
1603
+ "puppet": defineAsyncComponent(() => import("./puppet-8Sq4QIbE.js")),
1604
+ "py": defineAsyncComponent(() => import("./python-CBYVyhMm.js")),
1605
+ "python": defineAsyncComponent(() => import("./python-CBYVyhMm.js")),
1606
+ "r": defineAsyncComponent(() => import("./r-DfzMNaiK.js")),
1607
+ "racket": defineAsyncComponent(() => import("./racket-EkEmTJtD.js")),
1608
+ "razor": defineAsyncComponent(() => import("./razor-BSd-q379.js")),
1609
+ "rb": defineAsyncComponent(() => import("./ruby-CNn-W_DF.js")),
1610
+ "rs": defineAsyncComponent(() => import("./rust-BW9y4Ksf.js")),
1611
+ "ruby": defineAsyncComponent(() => import("./ruby-CNn-W_DF.js")),
1612
+ "rust": defineAsyncComponent(() => import("./rust-BW9y4Ksf.js")),
1613
+ "sass": defineAsyncComponent(() => import("./sass-Cyleqehh.js")),
1614
+ "scala": defineAsyncComponent(() => import("./scala-2YqaI_aG.js")),
1615
+ "scheme": defineAsyncComponent(() => import("./scheme-CWx6sQlk.js")),
1616
+ "scss": defineAsyncComponent(() => import("./sass-Cyleqehh.js")),
1617
+ "sh": defineAsyncComponent(() => import("./bash-BfyNXzLO.js")),
1618
+ "shader": defineAsyncComponent(() => import("./shader-CLzSKNOz.js")),
1619
+ "shell": defineAsyncComponent(() => import("./bash-BfyNXzLO.js")),
1620
+ "shellscript": defineAsyncComponent(() => import("./bash-BfyNXzLO.js")),
1621
+ "solidity": defineAsyncComponent(() => import("./solidity-CgjJUETv.js")),
1622
+ "sql": defineAsyncComponent(() => import("./database-Lmva5T5u.js")),
1623
+ "stata": defineAsyncComponent(() => import("./stata-CI3W9UFN.js")),
1624
+ "styl": defineAsyncComponent(() => import("./sass-Cyleqehh.js")),
1625
+ "stylus": defineAsyncComponent(() => import("./sass-Cyleqehh.js")),
1626
+ "svelte": defineAsyncComponent(() => import("./svelte-D-OV6frL.js")),
1627
+ "swift": defineAsyncComponent(() => import("./swift-CcBwS4X5.js")),
1628
+ "terraform": defineAsyncComponent(() => import("./terraform-BwM_GPTy.js")),
1629
+ "tex": defineAsyncComponent(() => import("./latex-CesDKd8G.js")),
1630
+ "text": defineAsyncComponent(() => import("./text-hIzRUiKs.js")),
1631
+ "tf": defineAsyncComponent(() => import("./terraform-BwM_GPTy.js")),
1632
+ "tfvars": defineAsyncComponent(() => import("./terraform-BwM_GPTy.js")),
1633
+ "toml": defineAsyncComponent(() => import("./toml-CXJ7B-C1.js")),
1634
+ "ts": defineAsyncComponent(() => import("./typescript-0uiFYOof.js")),
1635
+ "tsv": defineAsyncComponent(() => import("./csv-CHKRaQ9l.js")),
1636
+ "tsx": defineAsyncComponent(() => import("./typescript-0uiFYOof.js")),
1637
+ "twig": defineAsyncComponent(() => import("./twig-CXQNsdEx.js")),
1638
+ "typ": defineAsyncComponent(() => import("./typst-gIi5b52E.js")),
1639
+ "typescript": defineAsyncComponent(() => import("./typescript-0uiFYOof.js")),
1640
+ "typst": defineAsyncComponent(() => import("./typst-gIi5b52E.js")),
1641
+ "v": defineAsyncComponent(() => import("./v-Ct-HfSu0.js")),
1642
+ "vala": defineAsyncComponent(() => import("./vala-BZbAZj2w.js")),
1643
+ "verilog": defineAsyncComponent(() => import("./verilog-NzFyyNP_.js")),
1644
+ "vim": defineAsyncComponent(() => import("./vim-CN-tRagW.js")),
1645
+ "viml": defineAsyncComponent(() => import("./vim-CN-tRagW.js")),
1646
+ "vimscript": defineAsyncComponent(() => import("./vim-CN-tRagW.js")),
1647
+ "vue-html": defineAsyncComponent(() => import("./vue-BmLzKAao.js")),
1648
+ "vue-vine": defineAsyncComponent(() => import("./vue-BmLzKAao.js")),
1649
+ "vue": defineAsyncComponent(() => import("./vue-BmLzKAao.js")),
1650
+ "xml": defineAsyncComponent(() => import("./xml-CBzkooc-.js")),
1651
+ "xsl": defineAsyncComponent(() => import("./xml-CBzkooc-.js")),
1652
+ "yaml": defineAsyncComponent(() => import("./yaml-CT7I_lPM.js")),
1653
+ "yml": defineAsyncComponent(() => import("./yaml-CT7I_lPM.js")),
1654
+ "zig": defineAsyncComponent(() => import("./zig-B7F-QzJD.js")),
1655
+ "zsh": defineAsyncComponent(() => import("./bash-BfyNXzLO.js"))
1656
+ };
1657
+
1658
+ //#endregion
1659
+ //#region src/constants/harden.ts
1660
+ const DEFAULT_HARDEN_OPTIONS = {
1661
+ allowedLinkPrefixes: ["*"],
1662
+ allowedImagePrefixes: ["*"],
1663
+ allowedProtocols: ["*"],
1664
+ allowDataImages: true
1665
+ };
1666
+
1667
+ //#endregion
1668
+ //#region src/constants/icons.ts
1669
+ const ICONS = {
1670
+ arrowLeft: defineAsyncComponent(() => import("./arrow-left-Dqeb1_Um.js")),
1671
+ check: defineAsyncComponent(() => import("./check-C6XCJVPi.js")),
1672
+ code: defineAsyncComponent(() => import("./code-Bwlpb4mV.js")),
1673
+ collapse: defineAsyncComponent(() => import("./chevron-down-aK8OlmM2.js")),
1674
+ copy: defineAsyncComponent(() => import("./copy-VpvA-5VS.js")),
1675
+ cornerDownLeft: defineAsyncComponent(() => import("./corner-down-left-B77X84F8.js")),
1676
+ download: defineAsyncComponent(() => import("./download-BB76SD0m.js")),
1677
+ error: defineAsyncComponent(() => import("./circle-alert-C5r2kfnc.js")),
1678
+ flipHorizontal: defineAsyncComponent(() => import("./flip-horizontal-D4IxaKDu.js")),
1679
+ image: defineAsyncComponent(() => import("./image-DzKVFSaY.js")),
1680
+ link: defineAsyncComponent(() => import("./link-4JB1WqYS.js")),
1681
+ maximize: defineAsyncComponent(() => import("./maximize-VRncBaHe.js")),
1682
+ mermaid: defineAsyncComponent(() => import("./mermaid-Dv9_1JlU.js")),
1683
+ minimize: defineAsyncComponent(() => import("./minimize-k8aU78V4.js")),
1684
+ preview: defineAsyncComponent(() => import("./eye-VjweBQoW.js")),
1685
+ rotateLeft: defineAsyncComponent(() => import("./rotate-ccw-square-Dy0doneR.js")),
1686
+ zoomIn: defineAsyncComponent(() => import("./zoomIn-DlPeXZbT.js")),
1687
+ zoomOut: defineAsyncComponent(() => import("./zoomOut-Lvyw8SOW.js"))
1688
+ };
1689
+
1690
+ //#endregion
1691
+ //#region src/constants/theme.ts
1692
+ const SHADCN_SCHEMAS = [
1693
+ "background",
1694
+ "foreground",
1695
+ "card",
1696
+ "card-foreground",
1697
+ "popover",
1698
+ "popover-foreground",
1699
+ "primary",
1700
+ "primary-foreground",
1701
+ "secondary",
1702
+ "secondary-foreground",
1703
+ "muted",
1704
+ "muted-foreground",
1705
+ "accent",
1706
+ "accent-foreground",
1707
+ "destructive",
1708
+ "border",
1709
+ "input",
1710
+ "ring",
1711
+ "chart-1",
1712
+ "chart-2",
1713
+ "chart-3",
1714
+ "chart-4",
1715
+ "chart-5",
1716
+ "sidebar",
1717
+ "sidebar-foreground",
1718
+ "sidebar-primary",
1719
+ "sidebar-primary-foreground",
1720
+ "sidebar-accent",
1721
+ "sidebar-accent-foreground",
1722
+ "sidebar-border",
1723
+ "sidebar-ring"
1724
+ ];
1725
+
1726
+ //#endregion
1727
+ //#region src/composables/use-sanitizers.ts
1728
+ function useSanitizers(options) {
1729
+ const hardenOptions = computed(() => unref(options.hardenOptions) ?? DEFAULT_HARDEN_OPTIONS);
1730
+ const loading = computed(() => unref(options.loading) ?? false);
1731
+ const allowedLinkPrefixes = computed(() => hardenOptions.value.allowedLinkPrefixes ?? ["*"]);
1732
+ const allowedImagePrefixes = computed(() => hardenOptions.value.allowedImagePrefixes ?? ["*"]);
1733
+ const allowedProtocols = computed(() => hardenOptions.value.allowedProtocols ?? ["*"]);
1734
+ const allowDataImages = computed(() => hardenOptions.value.allowDataImages ?? true);
1735
+ const defaultOrigin = computed(() => hardenOptions.value.defaultOrigin ?? "");
1736
+ const isImage = computed(() => unref(options.isImage) ?? false);
1737
+ const url = computed(() => unref(options.url) ?? "");
1738
+ const transformedUrl = computed(() => transformHardenUrl(url.value));
1739
+ const isHardenUrl = computed(() => transformedUrl.value === null);
1740
+ function transformHardenUrl(url$1) {
1741
+ if (!url$1 || loading.value) return url$1;
1742
+ return transformUrl(url$1, isImage.value ? allowedImagePrefixes.value : allowedLinkPrefixes.value, defaultOrigin.value, allowDataImages.value, isImage.value, allowedProtocols.value);
1685
1743
  }
1686
- (async () => {
1687
- if (mermaid) {
1688
- installed.value = true;
1689
- return;
1690
- }
1691
- installed.value = await hasMermaid();
1692
- })();
1693
1744
  return {
1694
- installed,
1695
- getMermaid,
1696
- parseMermaid,
1697
- renderMermaid,
1698
- saveMermaid,
1699
- preload,
1700
- dispose
1745
+ hardenOptions,
1746
+ transformHardenUrl,
1747
+ transformedUrl,
1748
+ isHardenUrl
1701
1749
  };
1702
1750
  }
1703
1751
 
@@ -1793,7 +1841,7 @@ function useShiki(options) {
1793
1841
  highlighter === null || highlighter === void 0 || highlighter.dispose();
1794
1842
  highlighter = null;
1795
1843
  }
1796
- (async () => {
1844
+ if (isClient()) (async () => {
1797
1845
  if (highlighter) {
1798
1846
  installed.value = true;
1799
1847
  return;
@@ -1819,10 +1867,10 @@ function useTailwindV3Theme(options) {
1819
1867
  });
1820
1868
  const styleScope = computed(() => unref(options.styleScope) || ".stream-markdown");
1821
1869
  const element = computed(() => {
1822
- return toValue(options.element) || (typeof window !== "undefined" ? document.body : void 0);
1870
+ return toValue(options.element) || (isClient() ? document.body : void 0);
1823
1871
  });
1824
1872
  function generateCSS() {
1825
- if (!element.value || typeof window === "undefined") return;
1873
+ if (!element.value || !isClient()) return;
1826
1874
  const computedStyle = window.getComputedStyle(element.value);
1827
1875
  const cssVariables = [];
1828
1876
  for (const schema of SHADCN_SCHEMAS) {
@@ -2014,4 +2062,4 @@ function useZoom(options = {}) {
2014
2062
  }
2015
2063
 
2016
2064
  //#endregion
2017
- export { svgToPngBlob as A, useFloatingElement as B, findNodeParent as C, flow as D, hasShiki as E, DEFAULT_DARK_THEME as F, useContext as H, DEFAULT_LIGHT_THEME as I, LANGUAGE_ALIAS as L, SHADCN_SCHEMAS as M, ICONS as N, save as O, DEFAULT_HARDEN_OPTIONS as P, LANGUAGE_EXTENSIONS as R, findLastLeafNode as S, hasMermaid as T, useCodeOptions as U, useControls as V, escapeMarkdownTableCell as _, useMediumZoom as a, tableDataToMarkdown as b, _defineProperty as c, SUPPORT_LANGUAGES as d, currentLocale as f, useHardenSanitizers as g, localesGlob as h, useMermaid as i, transformUrl as j, saveImage as k, useKatex as l, localeMessages as m, useTailwindV3Theme as n, useMathRenderer as o, loadLocaleMessages as p, useShiki as r, throttle as s, useZoom as t, useI18n as u, extractTableDataFromElement as v, hasKatex as w, tableDataToTSV as x, tableDataToCSV as y, LANGUAGE_ICONS as z };
2065
+ export { tableDataToTSV as A, saveImage as B, localeMessages as C, extractTableDataFromElement as D, escapeMarkdownTableCell as E, hasShiki as F, useCodeOptions as G, transformUrl as H, isClient as I, isServer as L, findNodeParent as M, hasKatex as N, tableDataToCSV as O, hasMermaid as P, flow as R, loadLocaleMessages as S, useFloatingElement as T, useControls as U, svgToPngBlob as V, useContext as W, _defineProperty as _, SHADCN_SCHEMAS as a, SUPPORT_LANGUAGES as b, DEFAULT_DARK_THEME as c, LANGUAGE_EXTENSIONS as d, LANGUAGE_ICONS as f, throttle as g, useMathRenderer as h, useSanitizers as i, findLastLeafNode as j, tableDataToMarkdown as k, DEFAULT_LIGHT_THEME as l, useMediumZoom as m, useTailwindV3Theme as n, ICONS as o, useMermaid as p, useShiki as r, DEFAULT_HARDEN_OPTIONS as s, useZoom as t, LANGUAGE_ALIAS as u, useKatex as v, localesGlob as w, currentLocale as x, useI18n as y, save as z };