@8btc/mditor 0.0.13 → 0.0.15

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 (267) hide show
  1. package/dist/css/content-theme/dark.css +7 -2
  2. package/dist/index.css +67 -17
  3. package/dist/index.js +438 -124
  4. package/dist/index.min.js +1 -1
  5. package/dist/js/highlight.js/styles/a11y-dark.min.css +82 -2
  6. package/dist/js/highlight.js/styles/a11y-light.min.css +80 -2
  7. package/dist/js/highlight.js/styles/agate.min.css +101 -2
  8. package/dist/js/highlight.js/styles/an-old-hope.min.css +60 -2
  9. package/dist/js/highlight.js/styles/androidstudio.min.css +57 -1
  10. package/dist/js/highlight.js/styles/arduino-light.min.css +74 -1
  11. package/dist/js/highlight.js/styles/arta.min.css +63 -1
  12. package/dist/js/highlight.js/styles/ascetic.min.css +41 -1
  13. package/dist/js/highlight.js/styles/atom-one-dark-reasonable.min.css +95 -1
  14. package/dist/js/highlight.js/styles/atom-one-dark.min.css +72 -1
  15. package/dist/js/highlight.js/styles/atom-one-light.min.css +72 -1
  16. package/dist/js/highlight.js/styles/base16/3024.min.css +97 -1
  17. package/dist/js/highlight.js/styles/base16/apathy.min.css +97 -1
  18. package/dist/js/highlight.js/styles/base16/apprentice.min.css +97 -1
  19. package/dist/js/highlight.js/styles/base16/ashes.min.css +97 -1
  20. package/dist/js/highlight.js/styles/base16/atelier-cave-light.min.css +97 -1
  21. package/dist/js/highlight.js/styles/base16/atelier-cave.min.css +97 -1
  22. package/dist/js/highlight.js/styles/base16/atelier-dune-light.min.css +97 -1
  23. package/dist/js/highlight.js/styles/base16/atelier-dune.min.css +97 -1
  24. package/dist/js/highlight.js/styles/base16/atelier-estuary-light.min.css +97 -1
  25. package/dist/js/highlight.js/styles/base16/atelier-estuary.min.css +97 -1
  26. package/dist/js/highlight.js/styles/base16/atelier-forest-light.min.css +97 -1
  27. package/dist/js/highlight.js/styles/base16/atelier-forest.min.css +97 -1
  28. package/dist/js/highlight.js/styles/base16/atelier-heath-light.min.css +97 -1
  29. package/dist/js/highlight.js/styles/base16/atelier-heath.min.css +97 -1
  30. package/dist/js/highlight.js/styles/base16/atelier-lakeside-light.min.css +97 -1
  31. package/dist/js/highlight.js/styles/base16/atelier-lakeside.min.css +97 -1
  32. package/dist/js/highlight.js/styles/base16/atelier-plateau-light.min.css +97 -1
  33. package/dist/js/highlight.js/styles/base16/atelier-plateau.min.css +97 -1
  34. package/dist/js/highlight.js/styles/base16/atelier-savanna-light.min.css +97 -1
  35. package/dist/js/highlight.js/styles/base16/atelier-savanna.min.css +97 -1
  36. package/dist/js/highlight.js/styles/base16/atelier-seaside-light.min.css +97 -1
  37. package/dist/js/highlight.js/styles/base16/atelier-seaside.min.css +97 -1
  38. package/dist/js/highlight.js/styles/base16/atelier-sulphurpool-light.min.css +97 -1
  39. package/dist/js/highlight.js/styles/base16/atelier-sulphurpool.min.css +97 -1
  40. package/dist/js/highlight.js/styles/base16/atlas.min.css +97 -1
  41. package/dist/js/highlight.js/styles/base16/bespin.min.css +97 -1
  42. package/dist/js/highlight.js/styles/base16/black-metal-bathory.min.css +97 -1
  43. package/dist/js/highlight.js/styles/base16/black-metal-burzum.min.css +97 -1
  44. package/dist/js/highlight.js/styles/base16/black-metal-dark-funeral.min.css +97 -1
  45. package/dist/js/highlight.js/styles/base16/black-metal-gorgoroth.min.css +97 -1
  46. package/dist/js/highlight.js/styles/base16/black-metal-immortal.min.css +97 -1
  47. package/dist/js/highlight.js/styles/base16/black-metal-khold.min.css +97 -1
  48. package/dist/js/highlight.js/styles/base16/black-metal-marduk.min.css +97 -1
  49. package/dist/js/highlight.js/styles/base16/black-metal-mayhem.min.css +97 -1
  50. package/dist/js/highlight.js/styles/base16/black-metal-nile.min.css +97 -1
  51. package/dist/js/highlight.js/styles/base16/black-metal-venom.min.css +97 -1
  52. package/dist/js/highlight.js/styles/base16/black-metal.min.css +97 -1
  53. package/dist/js/highlight.js/styles/base16/brewer.min.css +97 -1
  54. package/dist/js/highlight.js/styles/base16/bright.min.css +97 -1
  55. package/dist/js/highlight.js/styles/base16/brogrammer.min.css +97 -1
  56. package/dist/js/highlight.js/styles/base16/brush-trees-dark.min.css +97 -1
  57. package/dist/js/highlight.js/styles/base16/brush-trees.min.css +97 -1
  58. package/dist/js/highlight.js/styles/base16/chalk.min.css +97 -1
  59. package/dist/js/highlight.js/styles/base16/circus.min.css +97 -1
  60. package/dist/js/highlight.js/styles/base16/classic-dark.min.css +97 -1
  61. package/dist/js/highlight.js/styles/base16/classic-light.min.css +97 -1
  62. package/dist/js/highlight.js/styles/base16/codeschool.min.css +97 -1
  63. package/dist/js/highlight.js/styles/base16/colors.min.css +97 -1
  64. package/dist/js/highlight.js/styles/base16/cupcake.min.css +97 -1
  65. package/dist/js/highlight.js/styles/base16/cupertino.min.css +95 -1
  66. package/dist/js/highlight.js/styles/base16/danqing.min.css +97 -1
  67. package/dist/js/highlight.js/styles/base16/darcula.min.css +97 -1
  68. package/dist/js/highlight.js/styles/base16/dark-violet.min.css +97 -1
  69. package/dist/js/highlight.js/styles/base16/darkmoss.min.css +97 -1
  70. package/dist/js/highlight.js/styles/base16/darktooth.min.css +97 -1
  71. package/dist/js/highlight.js/styles/base16/decaf.min.css +97 -1
  72. package/dist/js/highlight.js/styles/base16/default-dark.min.css +97 -1
  73. package/dist/js/highlight.js/styles/base16/default-light.min.css +97 -1
  74. package/dist/js/highlight.js/styles/base16/dirtysea.min.css +97 -1
  75. package/dist/js/highlight.js/styles/base16/dracula.min.css +97 -1
  76. package/dist/js/highlight.js/styles/base16/edge-dark.min.css +95 -1
  77. package/dist/js/highlight.js/styles/base16/edge-light.min.css +95 -1
  78. package/dist/js/highlight.js/styles/base16/eighties.min.css +97 -1
  79. package/dist/js/highlight.js/styles/base16/embers.min.css +97 -1
  80. package/dist/js/highlight.js/styles/base16/equilibrium-dark.min.css +97 -1
  81. package/dist/js/highlight.js/styles/base16/equilibrium-gray-dark.min.css +97 -1
  82. package/dist/js/highlight.js/styles/base16/equilibrium-gray-light.min.css +97 -1
  83. package/dist/js/highlight.js/styles/base16/equilibrium-light.min.css +97 -1
  84. package/dist/js/highlight.js/styles/base16/espresso.min.css +97 -1
  85. package/dist/js/highlight.js/styles/base16/eva-dim.min.css +97 -1
  86. package/dist/js/highlight.js/styles/base16/eva.min.css +97 -1
  87. package/dist/js/highlight.js/styles/base16/flat.min.css +97 -1
  88. package/dist/js/highlight.js/styles/base16/framer.min.css +97 -1
  89. package/dist/js/highlight.js/styles/base16/fruit-soda.min.css +97 -1
  90. package/dist/js/highlight.js/styles/base16/gigavolt.min.css +97 -1
  91. package/dist/js/highlight.js/styles/base16/github.min.css +95 -1
  92. package/dist/js/highlight.js/styles/base16/google-dark.min.css +95 -1
  93. package/dist/js/highlight.js/styles/base16/google-light.min.css +95 -1
  94. package/dist/js/highlight.js/styles/base16/grayscale-dark.min.css +97 -1
  95. package/dist/js/highlight.js/styles/base16/grayscale-light.min.css +97 -1
  96. package/dist/js/highlight.js/styles/base16/green-screen.min.css +97 -1
  97. package/dist/js/highlight.js/styles/base16/gruvbox-dark-hard.min.css +97 -1
  98. package/dist/js/highlight.js/styles/base16/gruvbox-dark-medium.min.css +97 -1
  99. package/dist/js/highlight.js/styles/base16/gruvbox-dark-pale.min.css +97 -1
  100. package/dist/js/highlight.js/styles/base16/gruvbox-dark-soft.min.css +97 -1
  101. package/dist/js/highlight.js/styles/base16/gruvbox-light-hard.min.css +97 -1
  102. package/dist/js/highlight.js/styles/base16/gruvbox-light-medium.min.css +97 -1
  103. package/dist/js/highlight.js/styles/base16/gruvbox-light-soft.min.css +97 -1
  104. package/dist/js/highlight.js/styles/base16/hardcore.min.css +97 -1
  105. package/dist/js/highlight.js/styles/base16/harmonic16-dark.min.css +97 -1
  106. package/dist/js/highlight.js/styles/base16/harmonic16-light.min.css +97 -1
  107. package/dist/js/highlight.js/styles/base16/heetch-dark.min.css +97 -1
  108. package/dist/js/highlight.js/styles/base16/heetch-light.min.css +97 -1
  109. package/dist/js/highlight.js/styles/base16/helios.min.css +97 -1
  110. package/dist/js/highlight.js/styles/base16/hopscotch.min.css +97 -1
  111. package/dist/js/highlight.js/styles/base16/horizon-dark.min.css +97 -1
  112. package/dist/js/highlight.js/styles/base16/horizon-light.min.css +97 -1
  113. package/dist/js/highlight.js/styles/base16/humanoid-dark.min.css +97 -1
  114. package/dist/js/highlight.js/styles/base16/humanoid-light.min.css +97 -1
  115. package/dist/js/highlight.js/styles/base16/ia-dark.min.css +97 -1
  116. package/dist/js/highlight.js/styles/base16/ia-light.min.css +97 -1
  117. package/dist/js/highlight.js/styles/base16/icy-dark.min.css +97 -1
  118. package/dist/js/highlight.js/styles/base16/ir-black.min.css +97 -1
  119. package/dist/js/highlight.js/styles/base16/isotope.min.css +97 -1
  120. package/dist/js/highlight.js/styles/base16/kimber.min.css +97 -1
  121. package/dist/js/highlight.js/styles/base16/london-tube.min.css +97 -1
  122. package/dist/js/highlight.js/styles/base16/macintosh.min.css +95 -1
  123. package/dist/js/highlight.js/styles/base16/marrakesh.min.css +97 -1
  124. package/dist/js/highlight.js/styles/base16/materia.min.css +97 -1
  125. package/dist/js/highlight.js/styles/base16/material-darker.min.css +97 -1
  126. package/dist/js/highlight.js/styles/base16/material-lighter.min.css +97 -1
  127. package/dist/js/highlight.js/styles/base16/material-palenight.min.css +97 -1
  128. package/dist/js/highlight.js/styles/base16/material-vivid.min.css +97 -1
  129. package/dist/js/highlight.js/styles/base16/material.min.css +97 -1
  130. package/dist/js/highlight.js/styles/base16/mellow-purple.min.css +97 -1
  131. package/dist/js/highlight.js/styles/base16/mexico-light.min.css +97 -1
  132. package/dist/js/highlight.js/styles/base16/mocha.min.css +97 -1
  133. package/dist/js/highlight.js/styles/base16/monokai.min.css +97 -1
  134. package/dist/js/highlight.js/styles/base16/nebula.min.css +97 -1
  135. package/dist/js/highlight.js/styles/base16/nord.min.css +97 -1
  136. package/dist/js/highlight.js/styles/base16/nova.min.css +95 -1
  137. package/dist/js/highlight.js/styles/base16/ocean.min.css +97 -1
  138. package/dist/js/highlight.js/styles/base16/oceanicnext.min.css +97 -1
  139. package/dist/js/highlight.js/styles/base16/one-light.min.css +97 -1
  140. package/dist/js/highlight.js/styles/base16/onedark.min.css +97 -1
  141. package/dist/js/highlight.js/styles/base16/outrun-dark.min.css +97 -1
  142. package/dist/js/highlight.js/styles/base16/papercolor-dark.min.css +97 -1
  143. package/dist/js/highlight.js/styles/base16/papercolor-light.min.css +95 -1
  144. package/dist/js/highlight.js/styles/base16/paraiso.min.css +97 -1
  145. package/dist/js/highlight.js/styles/base16/pasque.min.css +97 -1
  146. package/dist/js/highlight.js/styles/base16/phd.min.css +97 -1
  147. package/dist/js/highlight.js/styles/base16/pico.min.css +97 -1
  148. package/dist/js/highlight.js/styles/base16/pop.min.css +97 -1
  149. package/dist/js/highlight.js/styles/base16/porple.min.css +97 -1
  150. package/dist/js/highlight.js/styles/base16/qualia.min.css +97 -1
  151. package/dist/js/highlight.js/styles/base16/railscasts.min.css +97 -1
  152. package/dist/js/highlight.js/styles/base16/rebecca.min.css +97 -1
  153. package/dist/js/highlight.js/styles/base16/ros-pine-dawn.min.css +97 -1
  154. package/dist/js/highlight.js/styles/base16/ros-pine-moon.min.css +97 -1
  155. package/dist/js/highlight.js/styles/base16/ros-pine.min.css +97 -1
  156. package/dist/js/highlight.js/styles/base16/sagelight.min.css +97 -1
  157. package/dist/js/highlight.js/styles/base16/sandcastle.min.css +93 -1
  158. package/dist/js/highlight.js/styles/base16/seti-ui.min.css +97 -1
  159. package/dist/js/highlight.js/styles/base16/shapeshifter.min.css +97 -1
  160. package/dist/js/highlight.js/styles/base16/silk-dark.min.css +97 -1
  161. package/dist/js/highlight.js/styles/base16/silk-light.min.css +97 -1
  162. package/dist/js/highlight.js/styles/base16/snazzy.min.css +97 -1
  163. package/dist/js/highlight.js/styles/base16/solar-flare-light.min.css +97 -1
  164. package/dist/js/highlight.js/styles/base16/solar-flare.min.css +97 -1
  165. package/dist/js/highlight.js/styles/base16/solarized-dark.min.css +97 -1
  166. package/dist/js/highlight.js/styles/base16/solarized-light.min.css +97 -1
  167. package/dist/js/highlight.js/styles/base16/spacemacs.min.css +97 -1
  168. package/dist/js/highlight.js/styles/base16/summercamp.min.css +97 -1
  169. package/dist/js/highlight.js/styles/base16/summerfruit-dark.min.css +97 -1
  170. package/dist/js/highlight.js/styles/base16/summerfruit-light.min.css +97 -1
  171. package/dist/js/highlight.js/styles/base16/synth-midnight-terminal-dark.min.css +97 -1
  172. package/dist/js/highlight.js/styles/base16/synth-midnight-terminal-light.min.css +97 -1
  173. package/dist/js/highlight.js/styles/base16/tango.min.css +97 -1
  174. package/dist/js/highlight.js/styles/base16/tender.min.css +97 -1
  175. package/dist/js/highlight.js/styles/base16/tomorrow-night.min.css +97 -1
  176. package/dist/js/highlight.js/styles/base16/tomorrow.min.css +97 -1
  177. package/dist/js/highlight.js/styles/base16/twilight.min.css +97 -1
  178. package/dist/js/highlight.js/styles/base16/unikitty-dark.min.css +97 -1
  179. package/dist/js/highlight.js/styles/base16/unikitty-light.min.css +97 -1
  180. package/dist/js/highlight.js/styles/base16/vulcan.min.css +93 -1
  181. package/dist/js/highlight.js/styles/base16/windows-10-light.min.css +97 -1
  182. package/dist/js/highlight.js/styles/base16/windows-10.min.css +97 -1
  183. package/dist/js/highlight.js/styles/base16/windows-95-light.min.css +97 -1
  184. package/dist/js/highlight.js/styles/base16/windows-95.min.css +97 -1
  185. package/dist/js/highlight.js/styles/base16/windows-high-contrast-light.min.css +97 -1
  186. package/dist/js/highlight.js/styles/base16/windows-high-contrast.min.css +97 -1
  187. package/dist/js/highlight.js/styles/base16/windows-nt-light.min.css +97 -1
  188. package/dist/js/highlight.js/styles/base16/windows-nt.min.css +97 -1
  189. package/dist/js/highlight.js/styles/base16/woodland.min.css +97 -1
  190. package/dist/js/highlight.js/styles/base16/xcode-dusk.min.css +97 -1
  191. package/dist/js/highlight.js/styles/base16/zenburn.min.css +97 -1
  192. package/dist/js/highlight.js/styles/brown-paper.min.css +54 -1
  193. package/dist/js/highlight.js/styles/codepen-embed.min.css +53 -1
  194. package/dist/js/highlight.js/styles/color-brewer.min.css +56 -1
  195. package/dist/js/highlight.js/styles/dark.min.css +54 -1
  196. package/dist/js/highlight.js/styles/default.min.css +79 -1
  197. package/dist/js/highlight.js/styles/devibeans.min.css +80 -2
  198. package/dist/js/highlight.js/styles/docco.min.css +81 -1
  199. package/dist/js/highlight.js/styles/far.min.css +59 -1
  200. package/dist/js/highlight.js/styles/felipec.min.css +89 -2
  201. package/dist/js/highlight.js/styles/foundation.min.css +74 -1
  202. package/dist/js/highlight.js/styles/github-dark-dimmed.min.css +87 -2
  203. package/dist/js/highlight.js/styles/github-dark.min.css +87 -2
  204. package/dist/js/highlight.js/styles/github.min.css +87 -2
  205. package/dist/js/highlight.js/styles/gml.min.css +68 -1
  206. package/dist/js/highlight.js/styles/googlecode.min.css +75 -1
  207. package/dist/js/highlight.js/styles/gradient-dark.min.css +92 -1
  208. package/dist/js/highlight.js/styles/gradient-light.min.css +94 -1
  209. package/dist/js/highlight.js/styles/grayscale.min.css +85 -1
  210. package/dist/js/highlight.js/styles/hybrid.min.css +75 -1
  211. package/dist/js/highlight.js/styles/idea.min.css +82 -1
  212. package/dist/js/highlight.js/styles/intellij-light.min.css +91 -1
  213. package/dist/js/highlight.js/styles/ir-black.min.css +64 -1
  214. package/dist/js/highlight.js/styles/isbl-editor-dark.min.css +84 -1
  215. package/dist/js/highlight.js/styles/isbl-editor-light.min.css +84 -1
  216. package/dist/js/highlight.js/styles/kimbie-dark.min.css +58 -1
  217. package/dist/js/highlight.js/styles/kimbie-light.min.css +58 -1
  218. package/dist/js/highlight.js/styles/lightfair.min.css +73 -1
  219. package/dist/js/highlight.js/styles/lioshi.min.css +65 -1
  220. package/dist/js/highlight.js/styles/magula.min.css +59 -1
  221. package/dist/js/highlight.js/styles/mono-blue.min.css +54 -1
  222. package/dist/js/highlight.js/styles/monokai-sublime.min.css +72 -1
  223. package/dist/js/highlight.js/styles/monokai.min.css +66 -1
  224. package/dist/js/highlight.js/styles/night-owl.min.css +136 -1
  225. package/dist/js/highlight.js/styles/nnfx-dark.min.css +96 -2
  226. package/dist/js/highlight.js/styles/nnfx-light.min.css +96 -2
  227. package/dist/js/highlight.js/styles/nord.min.css +205 -1
  228. package/dist/js/highlight.js/styles/obsidian.min.css +76 -1
  229. package/dist/js/highlight.js/styles/panda-syntax-dark.min.css +88 -1
  230. package/dist/js/highlight.js/styles/panda-syntax-light.min.css +85 -1
  231. package/dist/js/highlight.js/styles/paraiso-dark.min.css +57 -1
  232. package/dist/js/highlight.js/styles/paraiso-light.min.css +57 -1
  233. package/dist/js/highlight.js/styles/pojoaque.min.css +70 -1
  234. package/dist/js/highlight.js/styles/purebasic.min.css +66 -1
  235. package/dist/js/highlight.js/styles/qtcreator-dark.min.css +71 -1
  236. package/dist/js/highlight.js/styles/qtcreator-light.min.css +69 -1
  237. package/dist/js/highlight.js/styles/rainbow.min.css +73 -1
  238. package/dist/js/highlight.js/styles/routeros.min.css +77 -1
  239. package/dist/js/highlight.js/styles/school-book.min.css +57 -1
  240. package/dist/js/highlight.js/styles/shades-of-purple.min.css +76 -1
  241. package/dist/js/highlight.js/styles/srcery.min.css +70 -1
  242. package/dist/js/highlight.js/styles/stackoverflow-dark.min.css +79 -2
  243. package/dist/js/highlight.js/styles/stackoverflow-light.min.css +79 -2
  244. package/dist/js/highlight.js/styles/sunburst.min.css +85 -1
  245. package/dist/js/highlight.js/styles/tokyo-night-dark.min.css +83 -2
  246. package/dist/js/highlight.js/styles/tokyo-night-light.min.css +83 -2
  247. package/dist/js/highlight.js/styles/tomorrow-night-blue.min.css +59 -1
  248. package/dist/js/highlight.js/styles/tomorrow-night-bright.min.css +59 -1
  249. package/dist/js/highlight.js/styles/vs.min.css +59 -1
  250. package/dist/js/highlight.js/styles/vs2015.min.css +94 -1
  251. package/dist/js/highlight.js/styles/xcode.min.css +85 -1
  252. package/dist/js/highlight.js/styles/xt256.min.css +74 -1
  253. package/dist/js/icons/material.js +8 -4
  254. package/dist/method.d.ts +4 -1
  255. package/dist/method.js +430 -121
  256. package/dist/method.min.js +1 -1
  257. package/dist/ts/markdown/codeRender.d.ts +9 -1
  258. package/dist/ts/util/attachLineNumbers.d.ts +6 -5
  259. package/dist/types/index.d.ts +8 -1
  260. package/package.json +2 -2
  261. package/src/assets/less/_line-number.less +24 -13
  262. package/src/assets/less/_reset.less +13 -7
  263. package/src/ts/markdown/codeRender.ts +152 -58
  264. package/src/ts/markdown/previewRender.ts +69 -25
  265. package/src/ts/util/attachLineNumbers.ts +382 -98
  266. package/src/ts/util/editorCommonEvent.ts +15 -8
  267. package/src/ts/wysiwyg/index.ts +6 -3
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vditor v0.0.13 - A markdown editor written in TypeScript.
2
+ * Vditor v0.0.15 - A markdown editor written in TypeScript.
3
3
  *
4
4
  * MIT License
5
5
  *
@@ -2564,6 +2564,9 @@ var mergeOptions = function (options) {
2564
2564
  speech: {
2565
2565
  enable: false,
2566
2566
  },
2567
+ runHtml: {
2568
+ enable: false,
2569
+ },
2567
2570
  render: {
2568
2571
  media: {
2569
2572
  enable: true,
@@ -2661,7 +2664,7 @@ var previewRender = function (previewElement, markdown, options) { return __awai
2661
2664
  if (mergedOptions.anchor === 1) {
2662
2665
  previewElement.classList.add("vditor-reset--anchor");
2663
2666
  }
2664
- (0,codeRender/* codeRender */.O)(previewElement, mergedOptions.hljs);
2667
+ (0,codeRender/* codeRender */.O)(previewElement, mergedOptions.hljs, mergedOptions.runHtml);
2665
2668
  (0,highlightRender/* highlightRender */.s)(mergedOptions.hljs, previewElement, mergedOptions.cdn);
2666
2669
  (0,mathRender/* mathRender */.H)(previewElement, {
2667
2670
  cdn: mergedOptions.cdn,
@@ -2825,7 +2828,7 @@ var Vditor = /** @class */ (function () {
2825
2828
  /* harmony export */ "H": () => (/* binding */ _VDITOR_VERSION),
2826
2829
  /* harmony export */ "g": () => (/* binding */ Constants)
2827
2830
  /* harmony export */ });
2828
- var _VDITOR_VERSION = "0.0.13";
2831
+ var _VDITOR_VERSION = "0.0.15";
2829
2832
 
2830
2833
  var Constants = /** @class */ (function () {
2831
2834
  function Constants() {
@@ -3127,7 +3130,7 @@ var Constants = /** @class */ (function () {
3127
3130
  "c#",
3128
3131
  "bat",
3129
3132
  ];
3130
- Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.13");
3133
+ Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.15");
3131
3134
  Constants.MARKDOWN_OPTIONS = {
3132
3135
  autoSpace: false,
3133
3136
  gfmAutoLink: true,
@@ -4485,17 +4488,28 @@ var attachEchartsContextMenu = function (el, option, chart, cdn) {
4485
4488
  /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(145);
4486
4489
 
4487
4490
 
4488
- var codeRender = function (element, option) {
4489
- Array.from(element.querySelectorAll("pre > code")).filter(function (e, index) {
4491
+ /**
4492
+ * 为预览区域中的代码块添加辅助操作:
4493
+ * - 复制按钮:一键复制代码文本
4494
+ * - 运行按钮:当启用 runHtml 时,向外部回调当前代码块的 HTML 字符串
4495
+ */
4496
+ var codeRender = function (element, option, runHtml) {
4497
+ Array.from(element.querySelectorAll("pre > code"))
4498
+ .filter(function (e, index) {
4490
4499
  if (e.parentElement.classList.contains("vditor-wysiwyg__pre") ||
4491
4500
  e.parentElement.classList.contains("vditor-ir__marker--pre")) {
4492
4501
  return false;
4493
4502
  }
4494
- if (e.classList.contains("language-mermaid") || e.classList.contains("language-flowchart") ||
4495
- e.classList.contains("language-echarts") || e.classList.contains("language-mindmap") ||
4496
- e.classList.contains("language-plantuml") || e.classList.contains("language-markmap") ||
4497
- e.classList.contains("language-abc") || e.classList.contains("language-graphviz") ||
4498
- e.classList.contains("language-math") || e.classList.contains("language-smiles")) {
4503
+ if (e.classList.contains("language-mermaid") ||
4504
+ e.classList.contains("language-flowchart") ||
4505
+ e.classList.contains("language-echarts") ||
4506
+ e.classList.contains("language-mindmap") ||
4507
+ e.classList.contains("language-plantuml") ||
4508
+ e.classList.contains("language-markmap") ||
4509
+ e.classList.contains("language-abc") ||
4510
+ e.classList.contains("language-graphviz") ||
4511
+ e.classList.contains("language-math") ||
4512
+ e.classList.contains("language-smiles")) {
4499
4513
  return false;
4500
4514
  }
4501
4515
  if (e.style.maxHeight.indexOf("px") > -1) {
@@ -4506,12 +4520,15 @@ var codeRender = function (element, option) {
4506
4520
  return false;
4507
4521
  }
4508
4522
  return true;
4509
- }).forEach(function (e) {
4510
- var _a, _b, _c;
4523
+ })
4524
+ .forEach(function (e) {
4525
+ var _a, _b, _c, _d;
4511
4526
  var codeText = e.innerText;
4512
4527
  if (e.classList.contains("highlight-chroma")) {
4513
4528
  var codeElement = e.cloneNode(true);
4514
- codeElement.querySelectorAll(".highlight-ln").forEach(function (item) {
4529
+ codeElement
4530
+ .querySelectorAll(".highlight-ln")
4531
+ .forEach(function (item) {
4515
4532
  item.remove();
4516
4533
  });
4517
4534
  codeText = codeElement.innerText;
@@ -4521,19 +4538,55 @@ var codeRender = function (element, option) {
4521
4538
  }
4522
4539
  var iconHTML = '<svg><use xlink:href="#vditor-icon-copy"></use></svg>';
4523
4540
  if (!document.getElementById("vditorIconScript")) {
4524
- iconHTML = '<svg viewBox="0 0 32 32"><path d="M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z"></path></svg>';
4541
+ iconHTML =
4542
+ '<svg viewBox="0 0 32 32"><path d="M22.545-0h-17.455c-1.6 0-2.909 1.309-2.909 2.909v20.364h2.909v-20.364h17.455v-2.909zM26.909 5.818h-16c-1.6 0-2.909 1.309-2.909 2.909v20.364c0 1.6 1.309 2.909 2.909 2.909h16c1.6 0 2.909-1.309 2.909-2.909v-20.364c0-1.6-1.309-2.909-2.909-2.909zM26.909 29.091h-16v-20.364h16v20.364z"></path></svg>';
4525
4543
  }
4544
+ var playIconHTML = document.getElementById("vditorIconScript")
4545
+ ? '<svg><use xlink:href="#vditor-icon-play"></use></svg>'
4546
+ : '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-play-icon lucide-circle-play"><path d="M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z"/><circle cx="12" cy="12" r="10"/></svg>';
4526
4547
  var divElement = document.createElement("div");
4527
4548
  divElement.className = "vditor-copy";
4528
- divElement.innerHTML = "<span aria-label=\"".concat(((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copy) || "复制", "\"\nonmouseover=\"this.setAttribute('aria-label', '").concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.copy) || "复制", "')\"\nclass=\"vditor-tooltipped vditor-tooltipped__w\"\nonclick=\"event.stopPropagation();this.previousElementSibling.select();document.execCommand('copy');this.setAttribute('aria-label', '").concat(((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copied) || "已复制", "');this.previousElementSibling.blur()\">").concat(iconHTML, "</span>");
4529
4549
  var textarea = document.createElement("textarea");
4530
4550
  textarea.value = (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .X)(codeText);
4531
- divElement.insertAdjacentElement("afterbegin", textarea);
4551
+ divElement.appendChild(textarea);
4552
+ if (runHtml === null || runHtml === void 0 ? void 0 : runHtml.enable) {
4553
+ var runSpan = document.createElement("span");
4554
+ runSpan.setAttribute("aria-label", ((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.run) || "运行");
4555
+ runSpan.setAttribute("onmouseover", "this.setAttribute('aria-label', '".concat(((_b = window.VditorI18n) === null || _b === void 0 ? void 0 : _b.run) || "运行", "')"));
4556
+ runSpan.className =
4557
+ "vditor-copy__item vditor-tooltipped vditor-tooltipped__w";
4558
+ runSpan.innerHTML = playIconHTML;
4559
+ runSpan.addEventListener("click", function (evt) {
4560
+ evt.stopPropagation();
4561
+ if (typeof runHtml.callback === "function") {
4562
+ runHtml.callback((0,_util_code160to32__WEBPACK_IMPORTED_MODULE_1__/* .code160to32 */ .X)(codeText));
4563
+ }
4564
+ });
4565
+ divElement.appendChild(runSpan);
4566
+ }
4567
+ var copySpan = document.createElement("span");
4568
+ copySpan.setAttribute("aria-label", ((_c = window.VditorI18n) === null || _c === void 0 ? void 0 : _c.copy) || "复制");
4569
+ copySpan.setAttribute("onmouseover", "this.setAttribute('aria-label', '".concat(((_d = window.VditorI18n) === null || _d === void 0 ? void 0 : _d.copy) || "复制", "')"));
4570
+ copySpan.className =
4571
+ "vditor-copy__item vditor-tooltipped vditor-tooltipped__w";
4572
+ copySpan.addEventListener("click", function (evt) {
4573
+ var _a;
4574
+ evt.stopPropagation();
4575
+ var ta = divElement.querySelector("textarea");
4576
+ if (ta) {
4577
+ ta.select();
4578
+ document.execCommand("copy");
4579
+ copySpan.setAttribute("aria-label", ((_a = window.VditorI18n) === null || _a === void 0 ? void 0 : _a.copied) || "已复制");
4580
+ ta.blur();
4581
+ }
4582
+ });
4583
+ copySpan.innerHTML = iconHTML;
4584
+ divElement.appendChild(copySpan);
4532
4585
  if (option && option.renderMenu) {
4533
4586
  option.renderMenu(e, divElement);
4534
4587
  }
4535
4588
  e.before(divElement);
4536
- e.style.maxHeight = (window.outerHeight - 40) + "px";
4589
+ e.style.maxHeight = 300 + "px";
4537
4590
  // https://github.com/Vanessa219/vditor/issues/1356
4538
4591
  e.insertAdjacentHTML("afterend", "<span style=\"position: absolute\">".concat(_constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants.ZWSP */ .g.ZWSP, "</span>"));
4539
4592
  });
@@ -6244,16 +6297,28 @@ var addStyle = function (url, id) {
6244
6297
  /* harmony export */ "g": () => (/* binding */ attachLineNumbersToBlocksThrottled)
6245
6298
  /* harmony export */ });
6246
6299
  /**
6247
- * 为编辑区域添加行号标记:
6248
- * - 为所有包含 `data-block` 的块级节点写入 `data-linenumber`
6249
- * - 额外为每个 `ul` 的直接 `li` 子元素写入 `data-linenumber`(不修改 `ul` 本身)
6250
- * 通过解析传入的 Markdown 源文本,建立内容到源文件行号的映射,
6251
- * 兼顾多行文本、嵌套列表、重复内容及空白/特殊字符,并提供基础错误保护。
6300
+ * 功能:为编辑区域批量添加行号与列表/表格标记(O(n))
6301
+ * - 块级:为所有 `data-block` 写入 `data-linenumber`
6302
+ * - 列表:为 `ul/ol > li` 写入 `data-linenumber`、`data-list-level`、`data-list-number`
6303
+ * - 表格:为 `table` 的 `tr` 写入 `data-linenumber`(不为 `th` 设置)
6304
+ * - 性能:一次解析 Markdown 建索引,批量收集并一次性更新属性,缓存避免重复计算
6305
+ * - 精度:支持嵌套列表、换行列表项、多级序号;表格跨页连续行号,容忍合并单元格
6252
6306
  */
6253
6307
  var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6308
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
6254
6309
  if (!root || !sourceMarkdown) {
6255
6310
  return;
6256
6311
  }
6312
+ var t0 = performance.now();
6313
+ var computeHash = function (s) {
6314
+ var h = 0;
6315
+ for (var i = 0; i < s.length; i++) {
6316
+ h = (h * 31 + s.charCodeAt(i)) | 0;
6317
+ }
6318
+ return "".concat(s.length, ":").concat(h);
6319
+ };
6320
+ var GLOBAL_CACHE = globalThis.__VDITOR_LINE_CACHE__ || new Map();
6321
+ globalThis.__VDITOR_LINE_CACHE__ = GLOBAL_CACHE;
6257
6322
  var ZWSP = "\u200b";
6258
6323
  var normalize = function (text) {
6259
6324
  return text
@@ -6264,7 +6329,10 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6264
6329
  .replace(/[\t\f\v ]+/g, " ");
6265
6330
  };
6266
6331
  var srcNorm = normalize(sourceMarkdown);
6267
- var srcLines = srcNorm.split("\n");
6332
+ var tNorm = performance.now();
6333
+ var hash = computeHash(srcNorm);
6334
+ var cached = GLOBAL_CACHE.get(hash);
6335
+ var srcLines = (_a = cached === null || cached === void 0 ? void 0 : cached.srcLines) !== null && _a !== void 0 ? _a : srcNorm.split("\n");
6268
6336
  var stripInlineMD = function (text) {
6269
6337
  return (text
6270
6338
  .replace(/\\([*_`~])/g, "$1")
@@ -6293,15 +6361,17 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6293
6361
  .replace(/[{}]/g, "")
6294
6362
  .trim());
6295
6363
  };
6296
- var strippedLines = srcLines.map(function (l) { return stripInlineMD(l); });
6297
- var lineLookup = new Map();
6298
- for (var i = 0; i < strippedLines.length; i++) {
6299
- var key = strippedLines[i];
6300
- if (!lineLookup.has(key)) {
6301
- lineLookup.set(key, [i + 1]);
6302
- }
6303
- else {
6304
- lineLookup.get(key).push(i + 1);
6364
+ var strippedLines = (_b = cached === null || cached === void 0 ? void 0 : cached.strippedLines) !== null && _b !== void 0 ? _b : srcLines.map(function (l) { return stripInlineMD(l); });
6365
+ var lineLookup = (_c = cached === null || cached === void 0 ? void 0 : cached.lineLookup) !== null && _c !== void 0 ? _c : new Map();
6366
+ if (!cached) {
6367
+ for (var i = 0; i < strippedLines.length; i++) {
6368
+ var key = strippedLines[i];
6369
+ if (!lineLookup.has(key)) {
6370
+ lineLookup.set(key, [i + 1]);
6371
+ }
6372
+ else {
6373
+ lineLookup.get(key).push(i + 1);
6374
+ }
6305
6375
  }
6306
6376
  }
6307
6377
  var usedLines = new Set();
@@ -6333,20 +6403,25 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6333
6403
  * 预处理:收集 Markdown 中所有无序列表(ul)行及其去除行内标记后的内容,构建快速查找结构。
6334
6404
  * 仅匹配以 `*`、`-`、`+` 开头的条目,支持任务列表如 `- [ ]`、`* [x]`。
6335
6405
  */
6336
- var unorderedListEntries = [];
6337
- var unorderedLookup = new Map();
6406
+ var unorderedListEntries = (_d = cached === null || cached === void 0 ? void 0 : cached.unorderedListEntries) !== null && _d !== void 0 ? _d : [];
6407
+ var unorderedLookup = (_e = cached === null || cached === void 0 ? void 0 : cached.unorderedLookup) !== null && _e !== void 0 ? _e : new Map();
6338
6408
  var usedUnorderedLines = new Set();
6339
- for (var i = 0; i < srcLines.length; i++) {
6340
- var raw = srcLines[i];
6341
- var m = raw.match(/^\s*[*+-]\s+(?:\[(?: |x|X)\]\s+)?(.*)$/);
6342
- if (m && typeof m[1] === "string") {
6343
- var contentStripped = stripInlineForList(m[1]);
6344
- unorderedListEntries.push({ ln: i + 1, content: contentStripped });
6345
- if (!unorderedLookup.has(contentStripped)) {
6346
- unorderedLookup.set(contentStripped, [i + 1]);
6347
- }
6348
- else {
6349
- unorderedLookup.get(contentStripped).push(i + 1);
6409
+ if (!cached) {
6410
+ for (var i = 0; i < srcLines.length; i++) {
6411
+ var raw = srcLines[i];
6412
+ var m = raw.match(/^\s*[*+-]\s+(?:\[(?: |x|X)\]\s+)?(.*)$/);
6413
+ if (m && typeof m[1] === "string") {
6414
+ var contentStripped = stripInlineForList(m[1]);
6415
+ unorderedListEntries.push({
6416
+ ln: i + 1,
6417
+ content: contentStripped,
6418
+ });
6419
+ if (!unorderedLookup.has(contentStripped)) {
6420
+ unorderedLookup.set(contentStripped, [i + 1]);
6421
+ }
6422
+ else {
6423
+ unorderedLookup.get(contentStripped).push(i + 1);
6424
+ }
6350
6425
  }
6351
6426
  }
6352
6427
  }
@@ -6387,44 +6462,48 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6387
6462
  /**
6388
6463
  * 预处理:收集 Markdown 中所有有序列表(ol)行及其内容,支持 `1.` 或 `1)` 以及任务列表前缀。
6389
6464
  */
6390
- var orderedListEntries = [];
6391
- var orderedLookup = new Map();
6465
+ var orderedListEntries = (_f = cached === null || cached === void 0 ? void 0 : cached.orderedListEntries) !== null && _f !== void 0 ? _f : [];
6466
+ var orderedLookup = (_g = cached === null || cached === void 0 ? void 0 : cached.orderedLookup) !== null && _g !== void 0 ? _g : new Map();
6392
6467
  var usedOrderedLines = new Set();
6393
6468
  var ORDERED_RE = /\s*\d+(?:[.)、.。]|[\uFF0E\uFF09\u3001])\s+(?:\[(?: |x|X)\]\s+)?(.*)/;
6394
6469
  var ORDERED_FULL = new RegExp("^".concat(ORDERED_RE.source, "$"));
6395
- for (var i = 0; i < srcLines.length; i++) {
6396
- var raw = srcLines[i];
6397
- var m = raw.match(ORDERED_FULL);
6398
- if (m && typeof m[1] === "string") {
6399
- var contentStripped = stripInlineForList(m[1]);
6400
- orderedListEntries.push({ ln: i + 1, content: contentStripped });
6401
- if (!orderedLookup.has(contentStripped)) {
6402
- orderedLookup.set(contentStripped, [i + 1]);
6403
- }
6404
- else {
6405
- orderedLookup.get(contentStripped).push(i + 1);
6470
+ if (!cached) {
6471
+ for (var i = 0; i < srcLines.length; i++) {
6472
+ var raw = srcLines[i];
6473
+ var m = raw.match(ORDERED_FULL);
6474
+ if (m && typeof m[1] === "string") {
6475
+ var contentStripped = stripInlineForList(m[1]);
6476
+ orderedListEntries.push({
6477
+ ln: i + 1,
6478
+ content: contentStripped,
6479
+ });
6480
+ if (!orderedLookup.has(contentStripped)) {
6481
+ orderedLookup.set(contentStripped, [i + 1]);
6482
+ }
6483
+ else {
6484
+ orderedLookup.get(contentStripped).push(i + 1);
6485
+ }
6406
6486
  }
6407
6487
  }
6408
6488
  }
6409
- console.debug("[LineNumber][ol:index]", {
6410
- total: orderedListEntries.length,
6411
- });
6412
- var orderedGroups = [];
6413
- for (var i = 0; i < srcLines.length;) {
6414
- var raw = srcLines[i];
6415
- if (ORDERED_FULL.test(raw)) {
6416
- var group = [];
6417
- while (i < srcLines.length && ORDERED_FULL.test(srcLines[i])) {
6418
- group.push(i + 1);
6419
- i++;
6489
+ var orderedGroups = (_h = cached === null || cached === void 0 ? void 0 : cached.orderedGroups) !== null && _h !== void 0 ? _h : [];
6490
+ if (!cached) {
6491
+ for (var i = 0; i < srcLines.length;) {
6492
+ var raw = srcLines[i];
6493
+ if (ORDERED_FULL.test(raw)) {
6494
+ var group = [];
6495
+ while (i < srcLines.length && ORDERED_FULL.test(srcLines[i])) {
6496
+ group.push(i + 1);
6497
+ i++;
6498
+ }
6499
+ if (group.length > 0) {
6500
+ orderedGroups.push(group);
6501
+ }
6420
6502
  }
6421
- if (group.length > 0) {
6422
- orderedGroups.push(group);
6503
+ else {
6504
+ i++;
6423
6505
  }
6424
6506
  }
6425
- else {
6426
- i++;
6427
- }
6428
6507
  }
6429
6508
  /**
6430
6509
  * 为给定文本在有序列表候选中选择行号,精确匹配优先,包含匹配回退。
@@ -6476,6 +6555,7 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6476
6555
  });
6477
6556
  return buf;
6478
6557
  };
6558
+ var attrUpdates = [];
6479
6559
  var blocks = root.querySelectorAll("[data-block]");
6480
6560
  blocks.forEach(function (el) {
6481
6561
  try {
@@ -6484,22 +6564,26 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6484
6564
  if (dataType === "math-block" || dataType === "code-block") {
6485
6565
  return;
6486
6566
  }
6487
- // 仅 li 需要行号:跳过并清理 ul/ol 自身及其内部嵌套的 p/div 等块
6488
6567
  var tagName = container.tagName;
6489
6568
  if (tagName === "UL" || tagName === "OL") {
6490
- container.removeAttribute("data-linenumber");
6569
+ if (container.getAttribute("data-linenumber")) {
6570
+ attrUpdates.push([container, "data-linenumber", ""]);
6571
+ }
6491
6572
  return;
6492
6573
  }
6493
6574
  var liAncestor = container.closest("li");
6494
6575
  if (liAncestor) {
6495
- container.removeAttribute("data-linenumber");
6576
+ if (container.getAttribute("data-linenumber")) {
6577
+ attrUpdates.push([container, "data-linenumber", ""]);
6578
+ }
6496
6579
  return;
6497
6580
  }
6498
6581
  var text = container.textContent || "";
6499
6582
  var normText = normalize(text);
6500
- // 跳过纯空白块
6501
6583
  if (!normText.trim()) {
6502
- container.removeAttribute("data-linenumber");
6584
+ if (container.getAttribute("data-linenumber")) {
6585
+ attrUpdates.push([container, "data-linenumber", ""]);
6586
+ }
6503
6587
  return;
6504
6588
  }
6505
6589
  var lineNumber = -1;
@@ -6526,13 +6610,18 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6526
6610
  }
6527
6611
  if (lineNumber !== -1) {
6528
6612
  usedLines.add(lineNumber);
6529
- container.setAttribute("data-linenumber", String(lineNumber));
6613
+ var cur = container.getAttribute("data-linenumber");
6614
+ var val = String(lineNumber);
6615
+ if (cur !== val) {
6616
+ attrUpdates.push([container, "data-linenumber", val]);
6617
+ }
6530
6618
  }
6531
6619
  }
6532
6620
  catch (_a) {
6533
6621
  void 0;
6534
6622
  }
6535
6623
  });
6624
+ var tBlockDone = performance.now();
6536
6625
  /**
6537
6626
  * 为所有 `ul` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ul` 本身。
6538
6627
  * 支持多层嵌套与非文本起始节点(如加粗/行内代码)。
@@ -6541,60 +6630,93 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6541
6630
  ulElements.forEach(function (ul) {
6542
6631
  try {
6543
6632
  var children = Array.from(ul.children);
6544
- for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
6545
- var child = children_1[_i];
6633
+ var _loop_1 = function (child) {
6546
6634
  if (child.tagName !== "LI")
6547
- continue;
6635
+ return "continue";
6548
6636
  var li = child;
6549
6637
  var rawText = getImmediateLiText(li);
6550
6638
  var norm = normalize(rawText);
6551
6639
  var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
6552
6640
  var ln = findUnorderedListLineNumber(firstLine);
6641
+ var level = (function () {
6642
+ var depth = 0;
6643
+ var p = li;
6644
+ while (p) {
6645
+ p = p.parentElement;
6646
+ if (!p)
6647
+ break;
6648
+ var tag = p.tagName;
6649
+ if (tag === "UL" || tag === "OL")
6650
+ depth++;
6651
+ }
6652
+ return depth;
6653
+ })();
6654
+ var levelStr = String(level);
6655
+ var curLevel = li.getAttribute("data-list-level");
6656
+ if (curLevel !== levelStr) {
6657
+ attrUpdates.push([li, "data-list-level", levelStr]);
6658
+ }
6553
6659
  if (ln !== -1) {
6554
6660
  usedUnorderedLines.add(ln);
6555
- li.setAttribute("data-linenumber", String(ln));
6661
+ var curLn = li.getAttribute("data-linenumber");
6662
+ var val = String(ln);
6663
+ if (curLn !== val) {
6664
+ attrUpdates.push([li, "data-linenumber", val]);
6665
+ }
6556
6666
  }
6557
6667
  else {
6558
- li.setAttribute("data-linenumber", "");
6668
+ if (li.getAttribute("data-linenumber")) {
6669
+ attrUpdates.push([li, "data-linenumber", ""]);
6670
+ }
6559
6671
  }
6672
+ };
6673
+ for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
6674
+ var child = children_1[_i];
6675
+ _loop_1(child);
6560
6676
  }
6561
6677
  }
6562
6678
  catch (_a) {
6563
6679
  void 0;
6564
6680
  }
6565
6681
  });
6682
+ var tUlDone = performance.now();
6566
6683
  /**
6567
6684
  * 为所有 `ol` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ol` 本身。
6568
6685
  */
6569
6686
  var olElements = root.querySelectorAll("ol");
6687
+ var orderedIndexMap = new WeakMap();
6570
6688
  olElements.forEach(function (ol) {
6571
6689
  try {
6572
6690
  var currentGroupIdx = -1;
6573
6691
  var lastAssigned_1 = -1;
6692
+ var startAttr = Number(ol.getAttribute("start"));
6693
+ var start = Number.isFinite(startAttr) && startAttr > 0 ? startAttr : 1;
6574
6694
  var children = Array.from(ol.children);
6695
+ var seq = start;
6575
6696
  for (var _i = 0, children_2 = children; _i < children_2.length; _i++) {
6576
6697
  var child = children_2[_i];
6577
6698
  if (child.tagName !== "LI")
6578
6699
  continue;
6700
+ orderedIndexMap.set(child, seq++);
6701
+ }
6702
+ var _loop_2 = function (child) {
6703
+ if (child.tagName !== "LI")
6704
+ return "continue";
6579
6705
  var li = child;
6580
6706
  var rawText = getImmediateLiText(li);
6581
6707
  var norm = normalize(rawText);
6582
6708
  var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
6583
6709
  var stripped0 = stripInlineForList(firstLine);
6584
6710
  var stripped = stripped0 || stripInlineMD(firstLine);
6585
- var candidates = orderedLookup.get(stripped) || [];
6586
- var available = candidates.filter(function (n) { return !usedOrderedLines.has(n); });
6711
+ orderedLookup.get(stripped);
6587
6712
  var ln = findOrderedListLineNumber(firstLine);
6588
6713
  if (ln !== -1) {
6589
6714
  usedOrderedLines.add(ln);
6590
- li.setAttribute("data-linenumber", String(ln));
6591
- // 成功映射日志
6592
- console.debug("[LineNumber][ol>li]", {
6593
- text: firstLine,
6594
- stripped: stripped,
6595
- line: ln,
6596
- });
6597
- // 记录当前组
6715
+ var cur = li.getAttribute("data-linenumber");
6716
+ var val = String(ln);
6717
+ if (cur !== val) {
6718
+ attrUpdates.push([li, "data-linenumber", val]);
6719
+ }
6598
6720
  for (var gi = 0; gi < orderedGroups.length; gi++) {
6599
6721
  if (orderedGroups[gi].includes(ln)) {
6600
6722
  currentGroupIdx = gi;
@@ -6604,13 +6726,11 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6604
6726
  lastAssigned_1 = ln;
6605
6727
  }
6606
6728
  else {
6607
- // 顺序回退:基于当前组或猜测组,按序分配下一未使用行
6608
6729
  var assigned = -1;
6609
6730
  var pickNextFromGroup = function (gi) {
6610
6731
  if (gi < 0 || gi >= orderedGroups.length)
6611
6732
  return -1;
6612
6733
  var lines = orderedGroups[gi];
6613
- // 优先从上次分配后续查找
6614
6734
  var startIdx = 0;
6615
6735
  if (lastAssigned_1 !== -1) {
6616
6736
  var idx = lines.indexOf(lastAssigned_1);
@@ -6632,7 +6752,6 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6632
6752
  assigned = pickNextFromGroup(currentGroupIdx);
6633
6753
  }
6634
6754
  if (assigned === -1) {
6635
- // 猜测组:选择拥有可用行的首个组
6636
6755
  for (var gi = 0; gi < orderedGroups.length && assigned === -1; gi++) {
6637
6756
  var cand = pickNextFromGroup(gi);
6638
6757
  if (cand !== -1) {
@@ -6643,39 +6762,229 @@ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
6643
6762
  }
6644
6763
  if (assigned !== -1) {
6645
6764
  usedOrderedLines.add(assigned);
6646
- li.setAttribute("data-linenumber", String(assigned));
6647
- console.debug("[LineNumber][ol>li][fallback-seq]", {
6648
- text: firstLine,
6649
- stripped: stripped,
6650
- line: assigned,
6651
- group: currentGroupIdx,
6652
- });
6765
+ var cur = li.getAttribute("data-linenumber");
6766
+ var val = String(assigned);
6767
+ if (cur !== val) {
6768
+ attrUpdates.push([li, "data-linenumber", val]);
6769
+ }
6653
6770
  lastAssigned_1 = assigned;
6654
6771
  }
6655
6772
  else {
6656
- li.setAttribute("data-linenumber", "");
6657
- // 失败诊断日志
6658
- console.warn("[LineNumber][ol>li][missing]", {
6659
- text: firstLine,
6660
- stripped: stripped,
6661
- candidates: candidates,
6662
- available: available,
6663
- reason: !stripped0
6664
- ? "empty-after-strip"
6665
- : candidates.length === 0
6666
- ? "no-index-candidates"
6667
- : available.length === 0
6668
- ? "all-candidates-consumed"
6669
- : "fallback-no-match",
6670
- });
6773
+ if (li.getAttribute("data-linenumber")) {
6774
+ attrUpdates.push([li, "data-linenumber", ""]);
6775
+ }
6671
6776
  }
6672
6777
  }
6778
+ var level = (function () {
6779
+ var depth = 0;
6780
+ var p = li;
6781
+ while (p) {
6782
+ p = p.parentElement;
6783
+ if (!p)
6784
+ break;
6785
+ var tag = p.tagName;
6786
+ if (tag === "UL" || tag === "OL")
6787
+ depth++;
6788
+ }
6789
+ return depth;
6790
+ })();
6791
+ var levelStr = String(level);
6792
+ var curLevel = li.getAttribute("data-list-level");
6793
+ if (curLevel !== levelStr) {
6794
+ attrUpdates.push([li, "data-list-level", levelStr]);
6795
+ }
6796
+ var numbering = (function () {
6797
+ var _a;
6798
+ var parts = [];
6799
+ var node = li;
6800
+ while (node) {
6801
+ var parentOl = node.closest("ol");
6802
+ if (!parentOl)
6803
+ break;
6804
+ var parentLi = ((_a = parentOl.parentElement) === null || _a === void 0 ? void 0 : _a.closest("li")) ||
6805
+ parentOl.parentElement;
6806
+ var idx = orderedIndexMap.get(node);
6807
+ if (typeof idx === "number") {
6808
+ parts.push(idx);
6809
+ }
6810
+ node = parentLi;
6811
+ }
6812
+ return parts.reverse().join(".");
6813
+ })();
6814
+ var curNum = li.getAttribute("data-list-number") || "";
6815
+ if (numbering && curNum !== numbering) {
6816
+ attrUpdates.push([li, "data-list-number", numbering]);
6817
+ }
6818
+ };
6819
+ for (var _a = 0, children_3 = children; _a < children_3.length; _a++) {
6820
+ var child = children_3[_a];
6821
+ _loop_2(child);
6822
+ }
6823
+ }
6824
+ catch (_b) {
6825
+ void 0;
6826
+ }
6827
+ });
6828
+ var tOlDone = performance.now();
6829
+ var tableRowLookup = (_j = cached === null || cached === void 0 ? void 0 : cached.tableRowLookup) !== null && _j !== void 0 ? _j : new Map();
6830
+ var tableGroups = (_k = cached === null || cached === void 0 ? void 0 : cached.tableGroups) !== null && _k !== void 0 ? _k : [];
6831
+ if (!cached) {
6832
+ var isTableRowLine = function (line) {
6833
+ return /^\s*\|.*\|\s*$/.test(line);
6834
+ };
6835
+ var isAlignLine = function (line) {
6836
+ return /^\s*\|?(?:\s*:?-{2,}:?\s*\|)+\s*:?-{2,}:?\s*\|?\s*$/.test(line);
6837
+ };
6838
+ for (var i = 0; i < srcLines.length;) {
6839
+ var header = srcLines[i];
6840
+ var align = srcLines[i + 1];
6841
+ if (isTableRowLine(header) && isAlignLine(align || "")) {
6842
+ var groupRows = [i + 1];
6843
+ var groupRowTexts = [
6844
+ stripInlineMD(header.replace(/^\s*\|?|\|?\s*$/g, "")),
6845
+ ];
6846
+ i += 2;
6847
+ while (i < srcLines.length && isTableRowLine(srcLines[i])) {
6848
+ groupRows.push(i + 1);
6849
+ groupRowTexts.push(stripInlineMD(srcLines[i].replace(/^\s*\|?|\|?\s*$/g, "")));
6850
+ i++;
6851
+ }
6852
+ tableGroups.push({
6853
+ rows: groupRows,
6854
+ rowTexts: groupRowTexts,
6855
+ });
6856
+ for (var t = 0; t < groupRowTexts.length; t++) {
6857
+ var key = groupRowTexts[t];
6858
+ var ln = groupRows[t];
6859
+ var arr = tableRowLookup.get(key);
6860
+ if (arr)
6861
+ arr.push(ln);
6862
+ else
6863
+ tableRowLookup.set(key, [ln]);
6864
+ }
6865
+ }
6866
+ else {
6867
+ i++;
6673
6868
  }
6674
6869
  }
6870
+ }
6871
+ var usedTableLines = new Set();
6872
+ var tIndexDone = performance.now();
6873
+ var tables = root.querySelectorAll("table");
6874
+ var groupPtr = 0;
6875
+ tables.forEach(function (table) {
6876
+ try {
6877
+ var trs = table.querySelectorAll("tr");
6878
+ trs.forEach(function (tr) {
6879
+ var cells = Array.from(tr.cells);
6880
+ var rowText = cells.map(function (c) { return c.textContent || ""; }).join("|");
6881
+ var normRow = stripInlineMD(normalize(rowText));
6882
+ var ln = pickFirstUnused(tableRowLookup.get(normRow));
6883
+ if (ln === -1) {
6884
+ while (groupPtr < tableGroups.length &&
6885
+ tableGroups[groupPtr].rows.every(function (r) {
6886
+ return usedTableLines.has(r);
6887
+ })) {
6888
+ groupPtr++;
6889
+ }
6890
+ if (groupPtr < tableGroups.length) {
6891
+ var g = tableGroups[groupPtr];
6892
+ var chosen = -1;
6893
+ for (var k = 0; k < g.rows.length; k++) {
6894
+ var cand = g.rows[k];
6895
+ if (!usedTableLines.has(cand)) {
6896
+ chosen = cand;
6897
+ break;
6898
+ }
6899
+ }
6900
+ ln = chosen;
6901
+ }
6902
+ }
6903
+ if (ln !== -1) {
6904
+ usedTableLines.add(ln);
6905
+ var cur = tr.getAttribute("data-linenumber");
6906
+ var val = String(ln);
6907
+ if (cur !== val) {
6908
+ attrUpdates.push([
6909
+ tr,
6910
+ "data-linenumber",
6911
+ val,
6912
+ ]);
6913
+ }
6914
+ }
6915
+ else {
6916
+ var cur = tr.getAttribute("data-linenumber");
6917
+ if (cur) {
6918
+ attrUpdates.push([
6919
+ tr,
6920
+ "data-linenumber",
6921
+ "",
6922
+ ]);
6923
+ }
6924
+ }
6925
+ var ths = tr.querySelectorAll("th");
6926
+ ths.forEach(function (th) {
6927
+ var curTh = th.getAttribute("data-linenumber");
6928
+ if (curTh) {
6929
+ attrUpdates.push([
6930
+ th,
6931
+ "data-linenumber",
6932
+ "",
6933
+ ]);
6934
+ }
6935
+ });
6936
+ });
6937
+ }
6675
6938
  catch (_a) {
6676
6939
  void 0;
6677
6940
  }
6678
6941
  });
6942
+ var tTableDone = performance.now();
6943
+ for (var _i = 0, attrUpdates_1 = attrUpdates; _i < attrUpdates_1.length; _i++) {
6944
+ var _l = attrUpdates_1[_i], el = _l[0], attr = _l[1], val = _l[2];
6945
+ if (val === "") {
6946
+ el.removeAttribute(attr);
6947
+ }
6948
+ else {
6949
+ el.setAttribute(attr, val);
6950
+ }
6951
+ }
6952
+ var tApplyDone = performance.now();
6953
+ if (!cached) {
6954
+ GLOBAL_CACHE.set(hash, {
6955
+ srcNorm: srcNorm,
6956
+ srcLines: srcLines,
6957
+ strippedLines: strippedLines,
6958
+ lineLookup: lineLookup,
6959
+ unorderedListEntries: unorderedListEntries,
6960
+ unorderedLookup: unorderedLookup,
6961
+ orderedListEntries: orderedListEntries,
6962
+ orderedLookup: orderedLookup,
6963
+ orderedGroups: orderedGroups,
6964
+ tableRowLookup: tableRowLookup,
6965
+ tableGroups: tableGroups,
6966
+ });
6967
+ }
6968
+ console.log("[LineNumber][perf]", {
6969
+ cached: !!cached,
6970
+ times: {
6971
+ normalize: Math.round((tNorm - t0) * 100) / 100,
6972
+ index: Math.round((tIndexDone - tNorm) * 100) / 100,
6973
+ blocks: Math.round((tBlockDone - tIndexDone) * 100) / 100,
6974
+ ul: Math.round((tUlDone - tBlockDone) * 100) / 100,
6975
+ ol: Math.round((tOlDone - tUlDone) * 100) / 100,
6976
+ table: Math.round((tTableDone - tIndexDone) * 100) / 100,
6977
+ apply: Math.round((tApplyDone - tTableDone) * 100) / 100,
6978
+ total: Math.round((tApplyDone - t0) * 100) / 100,
6979
+ },
6980
+ counts: {
6981
+ blocks: blocks.length,
6982
+ ul: ulElements.length,
6983
+ ol: olElements.length,
6984
+ tables: tables.length,
6985
+ updates: attrUpdates.length,
6986
+ },
6987
+ });
6679
6988
  };
6680
6989
  /**
6681
6990
  * 节流后的行号更新函数,避免频繁更新 data-linenumber
@@ -11855,10 +12164,14 @@ var selectEvent = function (vditor, editorElement) {
11855
12164
  editorElement.onmouseup = handleSelection;
11856
12165
  });
11857
12166
  editorElement.addEventListener("keyup", function (event) {
11858
- if (event.shiftKey && (event.key.startsWith("Arrow") || event.key === "Home" || event.key === "End")) {
12167
+ if (event.shiftKey &&
12168
+ (event.key.startsWith("Arrow") ||
12169
+ event.key === "Home" ||
12170
+ event.key === "End")) {
11859
12171
  handleSelection();
11860
12172
  }
11861
- else if (!event.shiftKey && (event.key.startsWith("Arrow") || event.key === "Escape")) {
12173
+ else if (!event.shiftKey &&
12174
+ (event.key.startsWith("Arrow") || event.key === "Escape")) {
11862
12175
  // Cancel selection or move cursor without selection
11863
12176
  handleSelection();
11864
12177
  }
@@ -18001,7 +18314,8 @@ var WYSIWYG = /** @class */ (function () {
18001
18314
  this.selectPopover.addEventListener("mousedown", function (event) {
18002
18315
  var target = event.target;
18003
18316
  // 如果点击的是 textarea 或 button,允许默认行为
18004
- if (target.tagName === "TEXTAREA" || target.tagName === "BUTTON") {
18317
+ if (target.tagName === "TEXTAREA" ||
18318
+ target.tagName === "BUTTON") {
18005
18319
  return;
18006
18320
  }
18007
18321
  // 其他情况阻止默认行为,防止编辑器失去焦点