vditor 3.11.1 → 3.11.3

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 (52) hide show
  1. package/README.md +13 -2
  2. package/dist/css/content-theme/ant-design.css +10 -0
  3. package/dist/css/content-theme/dark.css +10 -0
  4. package/dist/css/content-theme/light.css +13 -0
  5. package/dist/css/content-theme/wechat.css +10 -0
  6. package/dist/index.css +133 -4
  7. package/dist/index.js +715 -57
  8. package/dist/index.min.js +1 -1
  9. package/dist/js/i18n/es_ES.js +86 -0
  10. package/dist/js/i18n/ja_JP.js +2 -2
  11. package/dist/js/i18n/vi_VN.js +86 -0
  12. package/dist/js/i18n/zh_TW.js +8 -8
  13. package/dist/js/icons/ant.js +1 -1
  14. package/dist/js/icons/material.js +1 -1
  15. package/dist/js/lute/lute.min.js +87 -71
  16. package/dist/js/mermaid/mermaid.min.js +2027 -1047
  17. package/dist/js/wavedrom/LICENSE.WaveDrom +21 -0
  18. package/dist/js/wavedrom/wavedrom.min.js +9 -0
  19. package/dist/method.d.ts +2 -0
  20. package/dist/method.js +319 -8
  21. package/dist/method.min.js +1 -1
  22. package/dist/ts/constants.d.ts +4 -0
  23. package/dist/ts/markdown/adapterRender.d.ts +4 -0
  24. package/dist/ts/markdown/imageCaptionRender.d.ts +2 -0
  25. package/dist/ts/markdown/wavedromRender.d.ts +1 -0
  26. package/dist/ts/util/fixBrowserBehavior.d.ts +1 -0
  27. package/dist/types/index.d.ts +47 -3
  28. package/package.json +7 -4
  29. package/src/assets/less/_reset.less +103 -2
  30. package/src/assets/less/index.less +20 -0
  31. package/src/index.ts +4 -1
  32. package/src/method.ts +3 -0
  33. package/src/ts/constants.ts +5 -1
  34. package/src/ts/export/index.ts +2 -0
  35. package/src/ts/ir/index.ts +26 -0
  36. package/src/ts/ir/process.ts +24 -1
  37. package/src/ts/markdown/adapterRender.ts +4 -0
  38. package/src/ts/markdown/getHTML.ts +6 -3
  39. package/src/ts/markdown/imageCaptionRender.ts +175 -0
  40. package/src/ts/markdown/mermaidRender.ts +1 -1
  41. package/src/ts/markdown/previewRender.ts +8 -2
  42. package/src/ts/markdown/setLute.ts +3 -0
  43. package/src/ts/markdown/wavedromRender.ts +54 -0
  44. package/src/ts/preview/index.ts +5 -0
  45. package/src/ts/util/Options.ts +1 -1
  46. package/src/ts/util/fixBrowserBehavior.ts +165 -21
  47. package/src/ts/util/processCode.ts +3 -0
  48. package/src/ts/util/selection.ts +7 -2
  49. package/src/ts/wysiwyg/afterRenderEvent.ts +2 -0
  50. package/src/ts/wysiwyg/highlightToolbarWYSIWYG.ts +23 -4
  51. package/src/ts/wysiwyg/input.ts +5 -0
  52. package/src/ts/wysiwyg/setHeading.ts +110 -6
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vditor v3.11.1 - A markdown editor written in TypeScript.
2
+ * Vditor v3.11.3 - A markdown editor written in TypeScript.
3
3
  *
4
4
  * MIT License
5
5
  *
@@ -37,7 +37,7 @@
37
37
  return /******/ (() => { // webpackBootstrap
38
38
  /******/ var __webpack_modules__ = ({
39
39
 
40
- /***/ 173:
40
+ /***/ 132:
41
41
  /***/ ((module) => {
42
42
 
43
43
  /**
@@ -2196,6 +2196,8 @@ var mindmapRender = __webpack_require__(194);
2196
2196
  var outlineRender = __webpack_require__(436);
2197
2197
  // EXTERNAL MODULE: ./src/ts/markdown/plantumlRender.ts
2198
2198
  var plantumlRender = __webpack_require__(229);
2199
+ // EXTERNAL MODULE: ./src/ts/markdown/wavedromRender.ts
2200
+ var wavedromRender = __webpack_require__(497);
2199
2201
  // EXTERNAL MODULE: ./src/ts/constants.ts
2200
2202
  var constants = __webpack_require__(145);
2201
2203
  // EXTERNAL MODULE: ./src/ts/ui/setContentTheme.ts
@@ -2226,6 +2228,8 @@ var anchorRender = function (type) {
2226
2228
  };
2227
2229
  };
2228
2230
 
2231
+ // EXTERNAL MODULE: ./src/ts/markdown/imageCaptionRender.ts
2232
+ var imageCaptionRender = __webpack_require__(161);
2229
2233
  // EXTERNAL MODULE: ./src/ts/markdown/setLute.ts
2230
2234
  var setLute = __webpack_require__(214);
2231
2235
  // EXTERNAL MODULE: ./src/ts/util/selection.ts
@@ -2386,6 +2390,8 @@ var __generator = (undefined && undefined.__generator) || function (thisArg, bod
2386
2390
 
2387
2391
 
2388
2392
 
2393
+
2394
+
2389
2395
 
2390
2396
 
2391
2397
 
@@ -2427,6 +2433,7 @@ var md2html = function (mdText, options) {
2427
2433
  return (0,addScript/* addScript */.G)("".concat(mergedOptions.cdn, "/dist/js/lute/lute.min.js"), "vditorLuteScript").then(function () {
2428
2434
  var lute = (0,setLute/* setLute */.X)({
2429
2435
  autoSpace: mergedOptions.markdown.autoSpace,
2436
+ callout: mergedOptions.markdown.callout,
2430
2437
  gfmAutoLink: mergedOptions.markdown.gfmAutoLink,
2431
2438
  codeBlockPreview: mergedOptions.markdown.codeBlockPreview,
2432
2439
  emojiSite: mergedOptions.emojiPath,
@@ -2443,6 +2450,8 @@ var md2html = function (mdText, options) {
2443
2450
  mathBlockPreview: mergedOptions.markdown.mathBlockPreview,
2444
2451
  paragraphBeginningSpace: mergedOptions.markdown.paragraphBeginningSpace,
2445
2452
  sanitize: mergedOptions.markdown.sanitize,
2453
+ sub: mergedOptions.markdown.sub,
2454
+ sup: mergedOptions.markdown.sup,
2446
2455
  toc: mergedOptions.markdown.toc,
2447
2456
  });
2448
2457
  if (options === null || options === void 0 ? void 0 : options.renderers) {
@@ -2453,7 +2462,7 @@ var md2html = function (mdText, options) {
2453
2462
  });
2454
2463
  }
2455
2464
  lute.SetHeadingID(true);
2456
- return lute.Md2HTML(mdText);
2465
+ return (0,imageCaptionRender/* renderImageCaptionHTML */.V)(lute.Md2HTML(mdText), mergedOptions.markdown.imageCaption);
2457
2466
  });
2458
2467
  };
2459
2468
  var previewRender = function (previewElement, markdown, options) { return __awaiter(void 0, void 0, void 0, function () {
@@ -2471,7 +2480,7 @@ var previewRender = function (previewElement, markdown, options) { return __awai
2471
2480
  previewElement.innerHTML = html;
2472
2481
  previewElement.classList.add("vditor-reset");
2473
2482
  if (!!mergedOptions.i18n) return [3 /*break*/, 5];
2474
- if (!!["de_DE", "en_US", "fr_FR", "pt_BR", "ja_JP", "ko_KR", "ru_RU", "sv_SE", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) return [3 /*break*/, 2];
2483
+ if (!!["de_DE", "en_US", "es_ES", "fr_FR", "ja_JP", "ko_KR", "pt_BR", "ru_RU", "sv_SE", "vi_VN", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) return [3 /*break*/, 2];
2475
2484
  throw new Error("options.lang error, see https://ld246.com/article/1549638745630#options");
2476
2485
  case 2:
2477
2486
  i18nScriptPrefix = "vditorI18nScript";
@@ -2511,6 +2520,7 @@ var previewRender = function (previewElement, markdown, options) { return __awai
2511
2520
  (0,markmapRender/* markmapRender */.K)(previewElement, mergedOptions.cdn);
2512
2521
  (0,flowchartRender/* flowchartRender */.P)(previewElement, mergedOptions.cdn);
2513
2522
  (0,graphvizRender/* graphvizRender */.v)(previewElement, mergedOptions.cdn);
2523
+ (0,wavedromRender/* wavedromRender */.F)(previewElement, mergedOptions.cdn);
2514
2524
  (0,chartRender/* chartRender */.p)(previewElement, mergedOptions.cdn, mergedOptions.mode);
2515
2525
  (0,mindmapRender/* mindmapRender */.P)(previewElement, mergedOptions.cdn, mergedOptions.mode);
2516
2526
  (0,plantumlRender/* plantumlRender */.B)(previewElement, mergedOptions.cdn);
@@ -2569,6 +2579,7 @@ var setCodeTheme = __webpack_require__(580);
2569
2579
 
2570
2580
 
2571
2581
 
2582
+
2572
2583
 
2573
2584
 
2574
2585
  var Vditor = /** @class */ (function () {
@@ -2582,6 +2593,8 @@ var Vditor = /** @class */ (function () {
2582
2593
  Vditor.codeRender = codeRender/* codeRender */.O;
2583
2594
  /** 对 graphviz 进行渲染 */
2584
2595
  Vditor.graphvizRender = graphvizRender/* graphvizRender */.v;
2596
+ /** 对数字波形图进行渲染 */
2597
+ Vditor.wavedromRender = wavedromRender/* wavedromRender */.F;
2585
2598
  /** 为 element 中的代码块进行高亮渲染 */
2586
2599
  Vditor.highlightRender = highlightRender/* highlightRender */.s;
2587
2600
  /** 对数学公式进行渲染 */
@@ -2633,7 +2646,7 @@ var Vditor = /** @class */ (function () {
2633
2646
  /* harmony export */ "H": () => (/* binding */ _VDITOR_VERSION),
2634
2647
  /* harmony export */ "g": () => (/* binding */ Constants)
2635
2648
  /* harmony export */ });
2636
- var _VDITOR_VERSION = "3.11.1";
2649
+ var _VDITOR_VERSION = "3.11.3";
2637
2650
 
2638
2651
  var Constants = /** @class */ (function () {
2639
2652
  function Constants() {
@@ -2677,17 +2690,19 @@ var Constants = /** @class */ (function () {
2677
2690
  "stackoverflow-light", "tokyo-night-light", "vs", "xcode", "default"];
2678
2691
  Constants.ALIAS_CODE_LANGUAGES = [
2679
2692
  // 自定义
2680
- "abc", "plantuml", "mermaid", "flowchart", "echarts", "mindmap", "graphviz", "math", "markmap", "smiles",
2693
+ "abc", "plantuml", "mermaid", "flowchart", "echarts", "mindmap", "graphviz", "wavedrom", "math", "markmap", "smiles",
2681
2694
  // 别名
2682
2695
  "js", "ts", "html", "toml", "c#", "bat"
2683
2696
  ];
2684
- Constants.CDN = "https://unpkg.com/vditor@".concat("3.11.1");
2697
+ Constants.CDN = "https://unpkg.com/vditor@".concat("3.11.3");
2685
2698
  Constants.MARKDOWN_OPTIONS = {
2686
2699
  autoSpace: false,
2700
+ callout: true,
2687
2701
  gfmAutoLink: true,
2688
2702
  codeBlockPreview: true,
2689
2703
  fixTermTypo: false,
2690
2704
  footnotes: true,
2705
+ imageCaption: false,
2691
2706
  linkBase: "",
2692
2707
  linkPrefix: "",
2693
2708
  listStyle: false,
@@ -2695,6 +2710,8 @@ var Constants = /** @class */ (function () {
2695
2710
  mathBlockPreview: true,
2696
2711
  paragraphBeginningSpace: false,
2697
2712
  sanitize: true,
2713
+ sub: false,
2714
+ sup: false,
2698
2715
  toc: false,
2699
2716
  };
2700
2717
  Constants.HLJS_OPTIONS = {
@@ -2816,6 +2833,7 @@ __webpack_require__.r(__webpack_exports__);
2816
2833
  /* harmony export */ "chartRenderAdapter": () => (/* binding */ chartRenderAdapter),
2817
2834
  /* harmony export */ "abcRenderAdapter": () => (/* binding */ abcRenderAdapter),
2818
2835
  /* harmony export */ "graphvizRenderAdapter": () => (/* binding */ graphvizRenderAdapter),
2836
+ /* harmony export */ "wavedromRenderAdapter": () => (/* binding */ wavedromRenderAdapter),
2819
2837
  /* harmony export */ "flowchartRenderAdapter": () => (/* binding */ flowchartRenderAdapter),
2820
2838
  /* harmony export */ "plantumlRenderAdapter": () => (/* binding */ plantumlRenderAdapter)
2821
2839
  /* harmony export */ });
@@ -2852,6 +2870,10 @@ var graphvizRenderAdapter = {
2852
2870
  getCode: function (el) { return el.textContent; },
2853
2871
  getElements: function (el) { return el.querySelectorAll(".language-graphviz"); },
2854
2872
  };
2873
+ var wavedromRenderAdapter = {
2874
+ getCode: function (el) { return el.textContent; },
2875
+ getElements: function (el) { return el.querySelectorAll(".language-wavedrom"); },
2876
+ };
2855
2877
  var flowchartRenderAdapter = {
2856
2878
  getCode: function (el) { return el.textContent; },
2857
2879
  getElements: function (el) { return el.querySelectorAll(".language-flowchart"); },
@@ -3213,6 +3235,179 @@ var highlightRender = function (hljsOption, element, cdn) {
3213
3235
  };
3214
3236
 
3215
3237
 
3238
+ /***/ }),
3239
+
3240
+ /***/ 161:
3241
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3242
+
3243
+ "use strict";
3244
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3245
+ /* harmony export */ "W": () => (/* binding */ renderImageCaptions),
3246
+ /* harmony export */ "V": () => (/* binding */ renderImageCaptionHTML)
3247
+ /* harmony export */ });
3248
+ var getContentNodes = function (element, ignoreIRMarkers) {
3249
+ if (ignoreIRMarkers === void 0) { ignoreIRMarkers = false; }
3250
+ return Array.from(element.childNodes).filter(function (node) {
3251
+ if (node.nodeType === Node.COMMENT_NODE) {
3252
+ return false;
3253
+ }
3254
+ if (node.nodeType === Node.TEXT_NODE) {
3255
+ return node.textContent.replace(/\u200b/g, "").trim() !== "";
3256
+ }
3257
+ if (!(node instanceof HTMLElement)) {
3258
+ return true;
3259
+ }
3260
+ if (node.tagName === "WBR") {
3261
+ return false;
3262
+ }
3263
+ return !ignoreIRMarkers || !node.classList.contains("vditor-ir__marker");
3264
+ });
3265
+ };
3266
+ var getWYSIWYGImage = function (paragraph) {
3267
+ var nodes = getContentNodes(paragraph);
3268
+ if (nodes.length !== 1 || !(nodes[0] instanceof HTMLElement)) {
3269
+ return undefined;
3270
+ }
3271
+ var container = nodes[0];
3272
+ if (container instanceof HTMLImageElement) {
3273
+ return {
3274
+ container: container,
3275
+ image: container,
3276
+ };
3277
+ }
3278
+ if (container instanceof HTMLAnchorElement) {
3279
+ var linkNodes = getContentNodes(container);
3280
+ if (linkNodes.length === 1 && linkNodes[0] instanceof HTMLImageElement) {
3281
+ return {
3282
+ container: container,
3283
+ image: linkNodes[0],
3284
+ };
3285
+ }
3286
+ }
3287
+ return undefined;
3288
+ };
3289
+ var getIRImage = function (paragraph) {
3290
+ var nodes = getContentNodes(paragraph);
3291
+ if (nodes.length !== 1 || !(nodes[0] instanceof HTMLElement)) {
3292
+ return undefined;
3293
+ }
3294
+ var imageNode = nodes[0];
3295
+ if (imageNode.getAttribute("data-type") === "a") {
3296
+ var linkNodes = getContentNodes(imageNode, true);
3297
+ if (linkNodes.length !== 1 || !(linkNodes[0] instanceof HTMLElement)) {
3298
+ return undefined;
3299
+ }
3300
+ imageNode = linkNodes[0];
3301
+ }
3302
+ if (imageNode.getAttribute("data-type") !== "img") {
3303
+ return undefined;
3304
+ }
3305
+ var image = imageNode.querySelector(":scope > img");
3306
+ var titleMarker = imageNode.querySelector(":scope > .vditor-ir__marker--title");
3307
+ if (!(image instanceof HTMLImageElement) || !titleMarker) {
3308
+ return undefined;
3309
+ }
3310
+ var markerText = titleMarker.textContent.trim();
3311
+ var closeMarker = markerText[0] === "(" ? ")" : markerText[0];
3312
+ if (markerText.length < 2 || !["\"", "'", "("].includes(markerText[0]) ||
3313
+ markerText[markerText.length - 1] !== closeMarker) {
3314
+ return undefined;
3315
+ }
3316
+ return {
3317
+ caption: markerText.slice(1, -1).trim(),
3318
+ container: imageNode,
3319
+ image: image,
3320
+ };
3321
+ };
3322
+ var unwrapWYSIWYGCaptions = function (element) {
3323
+ element.querySelectorAll("span.vditor-image[data-image-caption]").forEach(function (wrapper) {
3324
+ while (wrapper.firstChild) {
3325
+ wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);
3326
+ }
3327
+ wrapper.remove();
3328
+ });
3329
+ };
3330
+ var resetIRCaptions = function (element) {
3331
+ element.querySelectorAll(".vditor-image[data-image-caption]").forEach(function (imageNode) {
3332
+ imageNode.classList.remove("vditor-image");
3333
+ imageNode.removeAttribute("data-image-caption");
3334
+ });
3335
+ };
3336
+ var renderPreviewCaptions = function (element) {
3337
+ element.querySelectorAll("p").forEach(function (paragraph) {
3338
+ var _a;
3339
+ var imageData = getWYSIWYGImage(paragraph);
3340
+ var caption = (_a = imageData === null || imageData === void 0 ? void 0 : imageData.image.getAttribute("title")) === null || _a === void 0 ? void 0 : _a.trim();
3341
+ if (!imageData || !caption) {
3342
+ return;
3343
+ }
3344
+ var figure = document.createElement("figure");
3345
+ Array.from(paragraph.attributes).forEach(function (attribute) {
3346
+ figure.setAttribute(attribute.name, attribute.value);
3347
+ });
3348
+ figure.classList.add("vditor-image");
3349
+ var figcaption = document.createElement("figcaption");
3350
+ figcaption.textContent = caption;
3351
+ figure.append(imageData.container, figcaption);
3352
+ paragraph.replaceWith(figure);
3353
+ });
3354
+ };
3355
+ var renderWYSIWYGCaptions = function (element) {
3356
+ element.querySelectorAll("p").forEach(function (paragraph) {
3357
+ var _a;
3358
+ var imageData = getWYSIWYGImage(paragraph);
3359
+ var caption = (_a = imageData === null || imageData === void 0 ? void 0 : imageData.image.getAttribute("title")) === null || _a === void 0 ? void 0 : _a.trim();
3360
+ if (!imageData || !caption) {
3361
+ return;
3362
+ }
3363
+ var wrapper = document.createElement("span");
3364
+ wrapper.className = "vditor-image";
3365
+ wrapper.setAttribute("data-image-caption", caption);
3366
+ imageData.container.replaceWith(wrapper);
3367
+ wrapper.append(imageData.container);
3368
+ });
3369
+ };
3370
+ var renderIRCaptions = function (element) {
3371
+ element.querySelectorAll("p").forEach(function (paragraph) {
3372
+ var imageData = getIRImage(paragraph);
3373
+ if (!(imageData === null || imageData === void 0 ? void 0 : imageData.caption)) {
3374
+ return;
3375
+ }
3376
+ imageData.container.classList.add("vditor-image");
3377
+ imageData.container.setAttribute("data-image-caption", imageData.caption);
3378
+ });
3379
+ };
3380
+ var renderImageCaptions = function (element, mode, enable) {
3381
+ if (mode === "wysiwyg") {
3382
+ unwrapWYSIWYGCaptions(element);
3383
+ }
3384
+ else if (mode === "ir") {
3385
+ resetIRCaptions(element);
3386
+ }
3387
+ if (!enable) {
3388
+ return;
3389
+ }
3390
+ if (mode === "preview") {
3391
+ renderPreviewCaptions(element);
3392
+ }
3393
+ else if (mode === "wysiwyg") {
3394
+ renderWYSIWYGCaptions(element);
3395
+ }
3396
+ else {
3397
+ renderIRCaptions(element);
3398
+ }
3399
+ };
3400
+ var renderImageCaptionHTML = function (html, enable) {
3401
+ if (!enable) {
3402
+ return html;
3403
+ }
3404
+ var container = document.createElement("div");
3405
+ container.innerHTML = html;
3406
+ renderImageCaptions(container, "preview", true);
3407
+ return container.innerHTML;
3408
+ };
3409
+
3410
+
3216
3411
  /***/ }),
3217
3412
 
3218
3413
  /***/ 11:
@@ -3600,7 +3795,7 @@ var mermaidRender = function (element, cdn, theme) {
3600
3795
  if (mermaidElements.length === 0) {
3601
3796
  return;
3602
3797
  }
3603
- (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .G)("".concat(cdn, "/dist/js/mermaid/mermaid.min.js?v=11.6.0"), "vditorMermaidScript").then(function () {
3798
+ (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .G)("".concat(cdn, "/dist/js/mermaid/mermaid.min.js?v=11.16.1"), "vditorMermaidScript").then(function () {
3604
3799
  var config = {
3605
3800
  securityLevel: "loose",
3606
3801
  altFontFamily: "sans-serif",
@@ -3939,6 +4134,7 @@ var setLute = function (options) {
3939
4134
  lute.SetHeadingAnchor(options.headingAnchor);
3940
4135
  lute.SetInlineMathAllowDigitAfterOpenMarker(options.inlineMathDigit);
3941
4136
  lute.SetAutoSpace(options.autoSpace);
4137
+ lute.SetCallout(options.callout);
3942
4138
  lute.SetToC(options.toc);
3943
4139
  lute.SetFootnotes(options.footnotes);
3944
4140
  lute.SetFixTermTypo(options.fixTermTypo);
@@ -3954,10 +4150,121 @@ var setLute = function (options) {
3954
4150
  if (options.lazyLoadImage) {
3955
4151
  lute.SetImageLazyLoading(options.lazyLoadImage);
3956
4152
  }
4153
+ lute.SetSup(options.sup);
4154
+ lute.SetSub(options.sub);
3957
4155
  return lute;
3958
4156
  };
3959
4157
 
3960
4158
 
4159
+ /***/ }),
4160
+
4161
+ /***/ 497:
4162
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4163
+
4164
+ "use strict";
4165
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4166
+ /* harmony export */ "F": () => (/* binding */ wavedromRender)
4167
+ /* harmony export */ });
4168
+ /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(145);
4169
+ /* harmony import */ var _util_addScript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(413);
4170
+ /* harmony import */ var _util_function__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(494);
4171
+ /* harmony import */ var _adapterRender__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(840);
4172
+ var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
4173
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4174
+ return new (P || (P = Promise))(function (resolve, reject) {
4175
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
4176
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
4177
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
4178
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
4179
+ });
4180
+ };
4181
+ var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
4182
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
4183
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
4184
+ function verb(n) { return function (v) { return step([n, v]); }; }
4185
+ function step(op) {
4186
+ if (f) throw new TypeError("Generator is already executing.");
4187
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
4188
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
4189
+ if (y = 0, t) op = [op[0] & 2, t.value];
4190
+ switch (op[0]) {
4191
+ case 0: case 1: t = op; break;
4192
+ case 4: _.label++; return { value: op[1], done: false };
4193
+ case 5: _.label++; y = op[1]; op = [0]; continue;
4194
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
4195
+ default:
4196
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
4197
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
4198
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
4199
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
4200
+ if (t[2]) _.ops.pop();
4201
+ _.trys.pop(); continue;
4202
+ }
4203
+ op = body.call(thisArg, _);
4204
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
4205
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
4206
+ }
4207
+ };
4208
+
4209
+
4210
+
4211
+
4212
+ var wavedromIndex = 0;
4213
+ var wavedromRender = function (element, cdn) {
4214
+ if (element === void 0) { element = document; }
4215
+ if (cdn === void 0) { cdn = _constants__WEBPACK_IMPORTED_MODULE_0__/* .Constants.CDN */ .g.CDN; }
4216
+ var wavedromElements = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.wavedromRenderAdapter.getElements(element);
4217
+ if (wavedromElements.length === 0) {
4218
+ return;
4219
+ }
4220
+ (0,_util_addScript__WEBPACK_IMPORTED_MODULE_2__/* .addScript */ .G)("".concat(cdn, "/dist/js/wavedrom/wavedrom.min.js?v=3.6.2"), "vditorWavedromScript").then(function () {
4221
+ wavedromElements.forEach(function (item) { return __awaiter(void 0, void 0, void 0, function () {
4222
+ var code, renderElement, source, error_1, message, lineBreak;
4223
+ return __generator(this, function (_a) {
4224
+ switch (_a.label) {
4225
+ case 0:
4226
+ if (item.parentElement.classList.contains("vditor-wysiwyg__pre") ||
4227
+ item.parentElement.classList.contains("vditor-ir__marker--pre")) {
4228
+ return [2 /*return*/];
4229
+ }
4230
+ code = _adapterRender__WEBPACK_IMPORTED_MODULE_1__.wavedromRenderAdapter.getCode(item);
4231
+ if (item.getAttribute("data-processed") === "true" || code.trim() === "") {
4232
+ return [2 /*return*/];
4233
+ }
4234
+ renderElement = item;
4235
+ if (item.tagName === "CODE") {
4236
+ renderElement = document.createElement("div");
4237
+ Array.from(item.attributes).forEach(function (attribute) {
4238
+ renderElement.setAttribute(attribute.name, attribute.value);
4239
+ });
4240
+ item.replaceWith(renderElement);
4241
+ }
4242
+ _a.label = 1;
4243
+ case 1:
4244
+ _a.trys.push([1, 3, , 4]);
4245
+ return [4 /*yield*/, (0,_util_function__WEBPACK_IMPORTED_MODULE_3__/* .looseJsonParse */ .Qf)(code)];
4246
+ case 2:
4247
+ source = _a.sent();
4248
+ wavedrom.renderWaveElement(wavedromIndex, source, renderElement, wavedrom.waveSkin, false);
4249
+ wavedromIndex++;
4250
+ return [3 /*break*/, 4];
4251
+ case 3:
4252
+ error_1 = _a.sent();
4253
+ message = error_1 instanceof Error ? error_1.message : String(error_1);
4254
+ lineBreak = document.createElement("br");
4255
+ renderElement.replaceChildren(document.createTextNode("wavedrom render error:"), lineBreak, document.createTextNode(message));
4256
+ renderElement.classList.add("vditor-reset--error");
4257
+ return [3 /*break*/, 4];
4258
+ case 4:
4259
+ renderElement.setAttribute("data-processed", "true");
4260
+ return [2 /*return*/];
4261
+ }
4262
+ });
4263
+ }); });
4264
+ });
4265
+ };
4266
+
4267
+
3961
4268
  /***/ }),
3962
4269
 
3963
4270
  /***/ 190:
@@ -4785,7 +5092,13 @@ var insertHTML = function (html, vditor) {
4785
5092
  vditor[vditor.currentMode].element.insertAdjacentHTML("beforeend", pasteElement.innerHTML);
4786
5093
  }
4787
5094
  else {
4788
- blockElement.insertAdjacentHTML("afterend", pasteElement.innerHTML);
5095
+ var liElement = (0,_hasClosest__WEBPACK_IMPORTED_MODULE_1__/* .hasClosestByMatchTag */ .lG)(range.startContainer, "LI");
5096
+ if (liElement && pasteElement.firstElementChild.tagName === "UL") {
5097
+ liElement.insertAdjacentHTML("afterend", pasteElement.firstElementChild.innerHTML);
5098
+ }
5099
+ else {
5100
+ blockElement.insertAdjacentHTML("afterend", pasteElement.innerHTML);
5101
+ }
4789
5102
  }
4790
5103
  setRangeByWbr(vditor[vditor.currentMode].element, range);
4791
5104
  }
@@ -4969,6 +5282,8 @@ var DevTools = /** @class */ (function () {
4969
5282
  }());
4970
5283
 
4971
5284
 
5285
+ // EXTERNAL MODULE: ./src/ts/markdown/imageCaptionRender.ts
5286
+ var imageCaptionRender = __webpack_require__(161);
4972
5287
  // EXTERNAL MODULE: ./src/ts/util/compatibility.ts
4973
5288
  var compatibility = __webpack_require__(410);
4974
5289
  ;// CONCATENATED MODULE: ./src/ts/toolbar/setToolbar.ts
@@ -5123,6 +5438,8 @@ var mindmapRender = __webpack_require__(194);
5123
5438
  var plantumlRender = __webpack_require__(229);
5124
5439
  // EXTERNAL MODULE: ./src/ts/markdown/SMILESRender.ts
5125
5440
  var SMILESRender = __webpack_require__(825);
5441
+ // EXTERNAL MODULE: ./src/ts/markdown/wavedromRender.ts
5442
+ var wavedromRender = __webpack_require__(497);
5126
5443
  ;// CONCATENATED MODULE: ./src/ts/util/processCode.ts
5127
5444
 
5128
5445
 
@@ -5136,6 +5453,7 @@ var SMILESRender = __webpack_require__(825);
5136
5453
 
5137
5454
 
5138
5455
 
5456
+
5139
5457
  var processPasteCode = function (html, text, type) {
5140
5458
  if (type === void 0) { type = "sv"; }
5141
5459
  var tempElement = document.createElement("div");
@@ -5215,6 +5533,9 @@ var processCodeRender = function (previewPanel, vditor) {
5215
5533
  else if (language === "graphviz") {
5216
5534
  (0,graphvizRender/* graphvizRender */.v)(previewPanel, vditor.options.cdn);
5217
5535
  }
5536
+ else if (language === "wavedrom") {
5537
+ (0,wavedromRender/* wavedromRender */.F)(previewPanel, vditor.options.cdn);
5538
+ }
5218
5539
  else if (language === "math") {
5219
5540
  (0,mathRender/* mathRender */.H)(previewPanel, { cdn: vditor.options.cdn, math: vditor.options.preview.math });
5220
5541
  }
@@ -6539,12 +6860,14 @@ var highlightToolbarIR = function (vditor) {
6539
6860
  ;// CONCATENATED MODULE: ./src/ts/wysiwyg/afterRenderEvent.ts
6540
6861
 
6541
6862
 
6863
+
6542
6864
  var afterRenderEvent = function (vditor, options) {
6543
6865
  if (options === void 0) { options = {
6544
6866
  enableAddUndoStack: true,
6545
6867
  enableHint: false,
6546
6868
  enableInput: true,
6547
6869
  }; }
6870
+ (0,imageCaptionRender/* renderImageCaptions */.W)(vditor.wysiwyg.element, "wysiwyg", vditor.options.preview.markdown.imageCaption);
6548
6871
  if (options.enableHint) {
6549
6872
  vditor.hint.render(vditor);
6550
6873
  }
@@ -6703,6 +7026,84 @@ var modifyPre = function (vditor, range) {
6703
7026
 
6704
7027
 
6705
7028
 
7029
+ var createBlockElement = function (element, tagName) {
7030
+ var blockElement = element.ownerDocument.createElement(tagName);
7031
+ blockElement.setAttribute("data-block", "0");
7032
+ return blockElement;
7033
+ };
7034
+ var replaceBlockElement = function (element, tagName) {
7035
+ var blockElement = createBlockElement(element, tagName);
7036
+ while (element.firstChild) {
7037
+ blockElement.appendChild(element.firstChild);
7038
+ }
7039
+ element.replaceWith(blockElement);
7040
+ return blockElement;
7041
+ };
7042
+ var isListItemBlock = function (node) {
7043
+ if (node.nodeType !== 1) {
7044
+ return false;
7045
+ }
7046
+ var element = node;
7047
+ return element.getAttribute("data-block") === "0" || element.tagName === "INPUT";
7048
+ };
7049
+ var getListItemInlineNodes = function (itemElement, wbrElement) {
7050
+ var _a, _b;
7051
+ var anchorNode = wbrElement;
7052
+ while (anchorNode.parentNode && !anchorNode.parentNode.isSameNode(itemElement)) {
7053
+ anchorNode = anchorNode.parentNode;
7054
+ }
7055
+ if (!((_a = anchorNode.parentNode) === null || _a === void 0 ? void 0 : _a.isSameNode(itemElement))) {
7056
+ return [];
7057
+ }
7058
+ var firstNode = anchorNode;
7059
+ var lastNode = anchorNode;
7060
+ while (firstNode.previousSibling && !isListItemBlock(firstNode.previousSibling)) {
7061
+ firstNode = firstNode.previousSibling;
7062
+ }
7063
+ while (lastNode.nextSibling && !isListItemBlock(lastNode.nextSibling)) {
7064
+ lastNode = lastNode.nextSibling;
7065
+ }
7066
+ // 任务列表的复选框和正文之间需要保留分隔空格。
7067
+ if (firstNode.previousSibling instanceof HTMLInputElement && firstNode.nodeType === 3) {
7068
+ var leadingWhitespace = (_b = firstNode.textContent.match(/^\s+/)) === null || _b === void 0 ? void 0 : _b[0];
7069
+ if (leadingWhitespace) {
7070
+ firstNode.textContent = firstNode.textContent.substring(leadingWhitespace.length);
7071
+ itemElement.insertBefore(itemElement.ownerDocument.createTextNode(leadingWhitespace), firstNode);
7072
+ }
7073
+ }
7074
+ var nodes = [];
7075
+ var node = firstNode;
7076
+ while (node) {
7077
+ nodes.push(node);
7078
+ if (node.isSameNode(lastNode)) {
7079
+ break;
7080
+ }
7081
+ node = node.nextSibling;
7082
+ }
7083
+ return nodes;
7084
+ };
7085
+ var setListItemHeading = function (itemElement, wbrElement, tagName) {
7086
+ var inlineNodes = getListItemInlineNodes(itemElement, wbrElement);
7087
+ if (inlineNodes.length === 0) {
7088
+ return false;
7089
+ }
7090
+ var headingElement = createBlockElement(itemElement, tagName);
7091
+ itemElement.insertBefore(headingElement, inlineNodes[0]);
7092
+ inlineNodes.forEach(function (node) {
7093
+ headingElement.appendChild(node);
7094
+ });
7095
+ if (headingElement.innerHTML.trim() === "<wbr>") {
7096
+ headingElement.appendChild(itemElement.ownerDocument.createElement("br"));
7097
+ }
7098
+ return true;
7099
+ };
7100
+ var unwrapBlockElement = function (element) {
7101
+ var fragment = element.ownerDocument.createDocumentFragment();
7102
+ while (element.firstChild) {
7103
+ fragment.appendChild(element.firstChild);
7104
+ }
7105
+ element.replaceWith(fragment);
7106
+ };
6706
7107
  var setHeading = function (vditor, tagName) {
6707
7108
  var range = (0,selection/* getEditorRange */.zh)(vditor);
6708
7109
  var blockElement = (0,hasClosest/* hasClosestBlock */.F9)(range.startContainer);
@@ -6713,23 +7114,36 @@ var setHeading = function (vditor, tagName) {
6713
7114
  blockElement = vditor.wysiwyg.element;
6714
7115
  }
6715
7116
  if (blockElement && !blockElement.classList.contains("vditor-wysiwyg__block")) {
6716
- range.insertNode(document.createElement("wbr"));
7117
+ var wbrElement = document.createElement("wbr");
7118
+ range.insertNode(wbrElement);
6717
7119
  // Firefox 需要 trim https://github.com/Vanessa219/vditor/issues/207
6718
7120
  if (blockElement.innerHTML.trim() === "<wbr>") {
6719
7121
  // Firefox 光标对不齐 https://github.com/Vanessa219/vditor/issues/199 1
6720
7122
  blockElement.innerHTML = "<wbr><br>";
6721
7123
  }
6722
- if (blockElement.tagName === "BLOCKQUOTE" || blockElement.classList.contains("vditor-reset")) {
6723
- blockElement.innerHTML = "<".concat(tagName, " data-block=\"0\">").concat(blockElement.innerHTML.trim(), "</").concat(tagName, ">");
7124
+ var itemElement = (0,hasClosest/* hasClosestByMatchTag */.lG)(wbrElement, "LI");
7125
+ if (itemElement && blockElement.isSameNode(itemElement.parentElement)) {
7126
+ if (!setListItemHeading(itemElement, wbrElement, tagName)) {
7127
+ wbrElement.remove();
7128
+ return;
7129
+ }
7130
+ }
7131
+ else if (blockElement.tagName === "BLOCKQUOTE" || blockElement.classList.contains("vditor-reset")) {
7132
+ var headingElement = createBlockElement(blockElement, tagName);
7133
+ while (blockElement.firstChild) {
7134
+ headingElement.appendChild(blockElement.firstChild);
7135
+ }
7136
+ blockElement.appendChild(headingElement);
6724
7137
  }
6725
7138
  else {
6726
- blockElement.outerHTML = "<".concat(tagName, " data-block=\"0\">").concat(blockElement.innerHTML.trim(), "</").concat(tagName, ">");
7139
+ replaceBlockElement(blockElement, tagName);
6727
7140
  }
6728
7141
  (0,selection/* setRangeByWbr */.ib)(vditor.wysiwyg.element, range);
6729
7142
  renderToc(vditor);
6730
7143
  }
6731
7144
  };
6732
7145
  var removeHeading = function (vditor) {
7146
+ var _a, _b;
6733
7147
  var range = getSelection().getRangeAt(0);
6734
7148
  var blockElement = (0,hasClosest/* hasClosestBlock */.F9)(range.startContainer);
6735
7149
  if (!blockElement) {
@@ -6737,8 +7151,15 @@ var removeHeading = function (vditor) {
6737
7151
  }
6738
7152
  if (blockElement) {
6739
7153
  range.insertNode(document.createElement("wbr"));
6740
- blockElement.outerHTML = "<p data-block=\"0\">".concat(blockElement.innerHTML, "</p>");
7154
+ if (((_a = blockElement.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) === "LI" &&
7155
+ ((_b = blockElement.parentElement.parentElement) === null || _b === void 0 ? void 0 : _b.getAttribute("data-tight")) === "true") {
7156
+ unwrapBlockElement(blockElement);
7157
+ }
7158
+ else {
7159
+ replaceBlockElement(blockElement, "p");
7160
+ }
6741
7161
  (0,selection/* setRangeByWbr */.ib)(vditor.wysiwyg.element, range);
7162
+ renderToc(vditor);
6742
7163
  }
6743
7164
  vditor.wysiwyg.popover.style.display = "none";
6744
7165
  };
@@ -7107,6 +7528,7 @@ var removeBlockElement = function (vditor, event) {
7107
7528
 
7108
7529
 
7109
7530
 
7531
+
7110
7532
  var highlightToolbarWYSIWYG = function (vditor) {
7111
7533
  clearTimeout(vditor.wysiwyg.hlToolbarTimeoutId);
7112
7534
  vditor.wysiwyg.hlToolbarTimeoutId = window.setTimeout(function () {
@@ -7132,6 +7554,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7132
7554
  if (footnotesElement) {
7133
7555
  vditor.wysiwyg.popover.innerHTML = "";
7134
7556
  genClose(footnotesElement, vditor);
7557
+ customWysiwygToolbar(vditor, "footnotes-block");
7135
7558
  setPopoverPosition(vditor, footnotesElement);
7136
7559
  return;
7137
7560
  }
@@ -7254,6 +7677,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7254
7677
  if (tocElement) {
7255
7678
  vditor.wysiwyg.popover.innerHTML = "";
7256
7679
  genClose(tocElement, vditor);
7680
+ customWysiwygToolbar(vditor, "vditor-toc");
7257
7681
  setPopoverPosition(vditor, tocElement);
7258
7682
  return;
7259
7683
  }
@@ -7264,6 +7688,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7264
7688
  genUp(range, blockquoteElement, vditor);
7265
7689
  genDown(range, blockquoteElement, vditor);
7266
7690
  genClose(blockquoteElement, vditor);
7691
+ customWysiwygToolbar(vditor, "blockquote");
7267
7692
  setPopoverPosition(vditor, blockquoteElement);
7268
7693
  }
7269
7694
  // list item popover
@@ -7272,6 +7697,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7272
7697
  genUp(range, liElement, vditor);
7273
7698
  genDown(range, liElement, vditor);
7274
7699
  genClose(liElement, vditor);
7700
+ customWysiwygToolbar(vditor, "li");
7275
7701
  setPopoverPosition(vditor, liElement);
7276
7702
  }
7277
7703
  // table popover
@@ -7586,6 +8012,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7586
8012
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
7587
8013
  vditor.wysiwyg.popover.insertAdjacentHTML("beforeend", " x ");
7588
8014
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input2Wrap);
8015
+ customWysiwygToolbar(vditor, "table");
7589
8016
  setPopoverPosition(vditor, tableElement);
7590
8017
  }
7591
8018
  // link ref popover
@@ -7629,6 +8056,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7629
8056
  };
7630
8057
  genClose(footnotesRefElement, vditor);
7631
8058
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
8059
+ customWysiwygToolbar(vditor, "footnotes-ref");
7632
8060
  setPopoverPosition(vditor, footnotesRefElement);
7633
8061
  }
7634
8062
  // block popover: math-inline, math-block, html-block, html-inline, code-block, html-entity
@@ -7721,6 +8149,10 @@ var highlightToolbarWYSIWYG = function (vditor) {
7721
8149
  event.preventDefault();
7722
8150
  };
7723
8151
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", languageWrap);
8152
+ customWysiwygToolbar(vditor, "code-block");
8153
+ }
8154
+ else {
8155
+ customWysiwygToolbar(vditor, "block");
7724
8156
  }
7725
8157
  setPopoverPosition(vditor, blockRenderElement);
7726
8158
  }
@@ -7759,6 +8191,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7759
8191
  genDown(range, headingElement, vditor);
7760
8192
  genClose(headingElement, vditor);
7761
8193
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
8194
+ customWysiwygToolbar(vditor, "heading");
7762
8195
  setPopoverPosition(vditor, headingElement);
7763
8196
  }
7764
8197
  // a popover
@@ -7781,6 +8214,7 @@ var highlightToolbarWYSIWYG = function (vditor) {
7781
8214
  genUp(range, blockElement, vditor);
7782
8215
  genDown(range, blockElement, vditor);
7783
8216
  genClose(blockElement, vditor);
8217
+ customWysiwygToolbar(vditor, "block");
7784
8218
  setPopoverPosition(vditor, blockElement);
7785
8219
  }
7786
8220
  else {
@@ -7878,6 +8312,7 @@ var genLinkRefPopover = function (vditor, linkRefElement, range) {
7878
8312
  genClose(linkRefElement, vditor);
7879
8313
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
7880
8314
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input1Wrap);
8315
+ customWysiwygToolbar(vditor, "link-ref");
7881
8316
  setPopoverPosition(vditor, linkRefElement);
7882
8317
  };
7883
8318
  var genUp = function (range, element, vditor) {
@@ -8051,6 +8486,7 @@ var genAPopover = function (vditor, aElement, range) {
8051
8486
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
8052
8487
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input1Wrap);
8053
8488
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", input2Wrap);
8489
+ customWysiwygToolbar(vditor, "a");
8054
8490
  setPopoverPosition(vditor, aElement);
8055
8491
  };
8056
8492
  var genImagePopover = function (event, vditor) {
@@ -8060,6 +8496,7 @@ var genImagePopover = function (event, vditor) {
8060
8496
  imgElement.setAttribute("src", inputElement.value);
8061
8497
  imgElement.setAttribute("alt", alt.value);
8062
8498
  imgElement.setAttribute("title", title.value);
8499
+ (0,imageCaptionRender/* renderImageCaptions */.W)(vditor.wysiwyg.element, "wysiwyg", vditor.options.preview.markdown.imageCaption);
8063
8500
  if (typeof vditor.options.input === "function") {
8064
8501
  vditor.options.input(getMarkdown(vditor));
8065
8502
  }
@@ -8111,6 +8548,7 @@ var genImagePopover = function (event, vditor) {
8111
8548
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", inputWrap);
8112
8549
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", altWrap);
8113
8550
  vditor.wysiwyg.popover.insertAdjacentElement("beforeend", titleWrap);
8551
+ customWysiwygToolbar(vditor, "image");
8114
8552
  setPopoverPosition(vditor, imgElement);
8115
8553
  };
8116
8554
  var focusToElement = function (event, range) {
@@ -8123,6 +8561,11 @@ var focusToElement = function (event, range) {
8123
8561
  return true;
8124
8562
  }
8125
8563
  };
8564
+ var customWysiwygToolbar = function (vditor, type) {
8565
+ if (vditor.options.customWysiwygToolbar) {
8566
+ vditor.options.customWysiwygToolbar(type, vditor.wysiwyg.popover);
8567
+ }
8568
+ };
8126
8569
 
8127
8570
  ;// CONCATENATED MODULE: ./src/ts/util/highlightToolbar.ts
8128
8571
 
@@ -9609,6 +10052,7 @@ var input_input = function (vditor, range, event) {
9609
10052
  }
9610
10053
  var isWYSIWYGElement = blockElement.isEqualNode(vditor.wysiwyg.element);
9611
10054
  var footnoteElement = (0,hasClosest/* hasClosestByAttribute */.a1)(blockElement, "data-type", "footnotes-block");
10055
+ var calloutElement = (0,hasClosest/* hasClosestByAttribute */.a1)(range.startContainer, "data-type", "callout");
9612
10056
  if (!isWYSIWYGElement) {
9613
10057
  // 列表需要到最顶层
9614
10058
  var topListElement = (0,hasClosest/* getTopList */.O9)(range.startContainer);
@@ -9626,6 +10070,9 @@ var input_input = function (vditor, range, event) {
9626
10070
  if (footnoteElement) {
9627
10071
  blockElement = footnoteElement;
9628
10072
  }
10073
+ if (calloutElement) {
10074
+ blockElement = calloutElement;
10075
+ }
9629
10076
  html_1 = blockElement.outerHTML;
9630
10077
  if (blockElement.tagName === "UL" || blockElement.tagName === "OL") {
9631
10078
  // 如果为列表的话,需要把上下的列表都重绘
@@ -9817,7 +10264,7 @@ var fixCJKPosition = function (range, vditor, event) {
9817
10264
  if (pLiElement && (0,selection/* getSelectPosition */.im)(pLiElement, vditor[vditor.currentMode].element, range).start === 0) {
9818
10265
  // https://github.com/Vanessa219/vditor/issues/1289 WKWebView切换输入法产生六分之一空格,造成光标错位
9819
10266
  if (pLiElement.nodeValue) {
9820
- pLiElement.nodeValue = pLiElement.nodeValue.replace(/\u2006/g, '');
10267
+ pLiElement.nodeValue = pLiElement.nodeValue.replace(/\u2006/g, "");
9821
10268
  }
9822
10269
  var zwspNode = document.createTextNode(constants/* Constants.ZWSP */.g.ZWSP);
9823
10270
  range.insertNode(zwspNode);
@@ -10199,8 +10646,39 @@ var execAfterRender = function (vditor, options) {
10199
10646
  processAfterRender(vditor, options);
10200
10647
  }
10201
10648
  };
10649
+ var isEmptyListItem = function (liElement) {
10650
+ if (liElement.textContent.split(constants/* Constants.ZWSP */.g.ZWSP).join("").trim() !== "") {
10651
+ return false;
10652
+ }
10653
+ return !liElement.querySelector([
10654
+ "audio", "canvas", "embed", "hr", "iframe", "img", "object", "ol", "pre", "svg", "table", "ul", "video",
10655
+ "input:not([type='checkbox'])",
10656
+ ].join(", "));
10657
+ };
10658
+ var exitEmptyListItem = function (liElement) {
10659
+ var listElement = liElement.parentElement;
10660
+ var listParent = listElement.parentElement;
10661
+ var paragraphElement = document.createElement("p");
10662
+ paragraphElement.setAttribute("data-block", "0");
10663
+ paragraphElement.innerHTML = "<wbr>";
10664
+ var trailingListElement;
10665
+ if (liElement.nextElementSibling) {
10666
+ trailingListElement = listElement.cloneNode(false);
10667
+ while (liElement.nextElementSibling) {
10668
+ trailingListElement.appendChild(liElement.nextElementSibling);
10669
+ }
10670
+ listParent.insertBefore(trailingListElement, listElement.nextSibling);
10671
+ }
10672
+ liElement.remove();
10673
+ if (listElement.childElementCount === 0) {
10674
+ listParent.replaceChild(paragraphElement, listElement);
10675
+ }
10676
+ else {
10677
+ listParent.insertBefore(paragraphElement, trailingListElement || listElement.nextSibling);
10678
+ }
10679
+ return paragraphElement;
10680
+ };
10202
10681
  var fixList = function (range, vditor, pElement, event) {
10203
- var _a;
10204
10682
  var startContainer = range.startContainer;
10205
10683
  var liElement = (0,hasClosest/* hasClosestByMatchTag */.lG)(startContainer, "LI");
10206
10684
  if (liElement) {
@@ -10217,6 +10695,26 @@ var fixList = function (range, vditor, pElement, event) {
10217
10695
  event.preventDefault();
10218
10696
  return true;
10219
10697
  }
10698
+ // 嵌套列表末尾的空列表项回车后转为父列表项中的段落
10699
+ // https://github.com/Vanessa219/vditor/issues/939
10700
+ if (!(0,compatibility/* isCtrl */.yl)(event) && !event.shiftKey && !event.altKey && event.key === "Enter" && range.collapsed &&
10701
+ !liElement.nextElementSibling && liElement.parentElement.parentElement.tagName === "LI" &&
10702
+ isEmptyListItem(liElement)) {
10703
+ var paragraphElement = exitEmptyListItem(liElement);
10704
+ (0,selection/* setRangeByWbr */.ib)(paragraphElement, range);
10705
+ execAfterRender(vditor);
10706
+ event.preventDefault();
10707
+ return true;
10708
+ }
10709
+ // 空列表项删除标记后退出当前列表
10710
+ if (!(0,compatibility/* isCtrl */.yl)(event) && !event.shiftKey && !event.altKey && event.key === "Backspace" &&
10711
+ liElement.textContent.trim().replace(constants/* Constants.ZWSP */.g.ZWSP, "") === "" && range.toString() === "") {
10712
+ var paragraphElement = exitEmptyListItem(liElement);
10713
+ (0,selection/* setRangeByWbr */.ib)(paragraphElement, range);
10714
+ execAfterRender(vditor);
10715
+ event.preventDefault();
10716
+ return true;
10717
+ }
10220
10718
  if (!(0,compatibility/* isCtrl */.yl)(event) && !event.shiftKey && !event.altKey && event.key === "Backspace" &&
10221
10719
  !liElement.previousElementSibling && range.toString() === "" &&
10222
10720
  (0,selection/* getSelectPosition */.im)(liElement, vditor[vditor.currentMode].element, range).start === 0) {
@@ -10233,19 +10731,6 @@ var fixList = function (range, vditor, pElement, event) {
10233
10731
  event.preventDefault();
10234
10732
  return true;
10235
10733
  }
10236
- // 空列表删除后与上一级段落对齐
10237
- if (!(0,compatibility/* isCtrl */.yl)(event) && !event.shiftKey && !event.altKey && event.key === "Backspace" &&
10238
- liElement.textContent.trim().replace(constants/* Constants.ZWSP */.g.ZWSP, "") === "" &&
10239
- range.toString() === "" && ((_a = liElement.previousElementSibling) === null || _a === void 0 ? void 0 : _a.tagName) === "LI") {
10240
- liElement.previousElementSibling.insertAdjacentText("beforeend", "\n\n");
10241
- range.selectNodeContents(liElement.previousElementSibling);
10242
- range.collapse(false);
10243
- liElement.remove();
10244
- (0,selection/* setRangeByWbr */.ib)(vditor[vditor.currentMode].element, range);
10245
- execAfterRender(vditor);
10246
- event.preventDefault();
10247
- return true;
10248
- }
10249
10734
  if (!(0,compatibility/* isCtrl */.yl)(event) && !event.altKey && event.key === "Tab") {
10250
10735
  // 光标位于第一/零字符时,tab 用于列表的缩进
10251
10736
  var isFirst = false;
@@ -10741,9 +11226,30 @@ var fixCodeBlock = function (vditor, event, codeRenderElement, range) {
10741
11226
  return false;
10742
11227
  };
10743
11228
  var fixBlockquote = function (vditor, range, event, pElement) {
11229
+ var _a;
10744
11230
  var startContainer = range.startContainer;
10745
11231
  var blockquoteElement = (0,hasClosest/* hasClosestByMatchTag */.lG)(startContainer, "BLOCKQUOTE");
10746
11232
  if (blockquoteElement && range.toString() === "") {
11233
+ if (pElement && event.key === "Enter" && !(0,compatibility/* isCtrl */.yl)(event) && !event.shiftKey && !event.altKey &&
11234
+ pElement.parentElement.isSameNode(blockquoteElement) &&
11235
+ (0,hasClosest/* hasClosestByMatchTag */.lG)(blockquoteElement.parentElement, "LI") &&
11236
+ (range.collapsed || !range.cloneContents().firstElementChild) &&
11237
+ pElement.innerHTML.replace(constants/* Constants.ZWSP */.g.ZWSP, "") !== "\n" &&
11238
+ pElement.innerHTML.replace(constants/* Constants.ZWSP */.g.ZWSP, "") !== "") {
11239
+ // 列表内的引用由浏览器处理回车时会新建列表项 https://github.com/Vanessa219/vditor/issues/1925
11240
+ var trailingRange = range.cloneRange();
11241
+ trailingRange.setEnd(pElement, pElement.childNodes.length);
11242
+ var paragraphElement = document.createElement("p");
11243
+ paragraphElement.setAttribute("data-block", "0");
11244
+ paragraphElement.appendChild(trailingRange.extractContents());
11245
+ pElement.insertAdjacentElement("afterend", paragraphElement);
11246
+ range.setStart(paragraphElement, 0);
11247
+ range.collapse(true);
11248
+ (0,selection/* setSelectionFocus */.Hc)(range);
11249
+ execAfterRender(vditor);
11250
+ event.preventDefault();
11251
+ return true;
11252
+ }
10747
11253
  if (event.key === "Backspace" && !(0,compatibility/* isCtrl */.yl)(event) && !event.shiftKey && !event.altKey &&
10748
11254
  (0,selection/* getSelectPosition */.im)(blockquoteElement, vditor[vditor.currentMode].element, range).start === 0) {
10749
11255
  // Backspace: 光标位于引用中的第零个字符,仅删除引用标签
@@ -10790,9 +11296,15 @@ var fixBlockquote = function (vditor, range, event, pElement) {
10790
11296
  event.preventDefault();
10791
11297
  return true;
10792
11298
  }
10793
- if (insertAfterBlock(vditor, event, range, blockquoteElement, blockquoteElement)) {
11299
+ var itemElement = blockquoteElement.parentElement.tagName === "LI" ? blockquoteElement.parentElement : null;
11300
+ var afterBlockElement = !blockquoteElement.nextElementSibling && ((_a = itemElement === null || itemElement === void 0 ? void 0 : itemElement.nextElementSibling) === null || _a === void 0 ? void 0 : _a.tagName) === "LI" ?
11301
+ itemElement : blockquoteElement;
11302
+ if (insertAfterBlock(vditor, event, range, blockquoteElement, afterBlockElement)) {
10794
11303
  return true;
10795
11304
  }
11305
+ if (event.key === "ArrowUp" && itemElement && !blockquoteElement.previousElementSibling) {
11306
+ return false;
11307
+ }
10796
11308
  if (insertBeforeBlock(vditor, event, range, blockquoteElement, blockquoteElement)) {
10797
11309
  return true;
10798
11310
  }
@@ -11007,6 +11519,11 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11007
11519
  if (!entering) {
11008
11520
  return ["", Lute.WalkContinue];
11009
11521
  }
11522
+ var parent = node.__internal_object__.Parent;
11523
+ // 链接引用的目标地址由定义节点提供,不在引用位置重复渲染
11524
+ if (parent.Type === 33 && parent.LinkType === 3) {
11525
+ return ["", Lute.WalkContinue];
11526
+ }
11010
11527
  if (vditor.options.upload.renderLinkDest) {
11011
11528
  return vditor.options.upload.renderLinkDest(vditor, node, entering);
11012
11529
  }
@@ -11111,15 +11628,23 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11111
11628
  processCodeRender(codeElement.parentElement.nextElementSibling, vditor);
11112
11629
  }
11113
11630
  }
11114
- return [3 /*break*/, 8];
11631
+ return [3 /*break*/, 10];
11115
11632
  case 1:
11116
11633
  if (!code) return [3 /*break*/, 2];
11117
11634
  callback.pasteCode(code);
11118
- return [3 /*break*/, 8];
11635
+ return [3 /*break*/, 10];
11119
11636
  case 2:
11120
- if (!(textHTML.trim() !== "")) return [3 /*break*/, 3];
11637
+ if (!(textHTML.trim() !== "")) return [3 /*break*/, 5];
11121
11638
  tempElement = document.createElement("div");
11122
11639
  tempElement.innerHTML = textHTML;
11640
+ if (!!vditor.options.upload.base64ToLink) return [3 /*break*/, 4];
11641
+ // word 复制的图文混合,替换为 link: <v:imagedata src="file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" o:title="">
11642
+ return [4 /*yield*/, processVMLImage(vditor, tempElement, ("clipboardData" in event ? event.clipboardData : event.dataTransfer).getData("text/rtf"))];
11643
+ case 3:
11644
+ // word 复制的图文混合,替换为 link: <v:imagedata src="file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" o:title="">
11645
+ _b.sent();
11646
+ _b.label = 4;
11647
+ case 4:
11123
11648
  tempElement.querySelectorAll("[style]").forEach(function (e) {
11124
11649
  e.removeAttribute("style");
11125
11650
  });
@@ -11142,15 +11667,15 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11142
11667
  processPaste(vditor, vditor.lute.HTML2Md(tempElement.innerHTML).trimRight());
11143
11668
  }
11144
11669
  vditor.outline.render(vditor);
11145
- return [3 /*break*/, 8];
11146
- case 3:
11147
- if (!(files.length > 0)) return [3 /*break*/, 7];
11148
- if (!(vditor.options.upload.url || vditor.options.upload.handler)) return [3 /*break*/, 5];
11670
+ return [3 /*break*/, 10];
11671
+ case 5:
11672
+ if (!(files.length > 0)) return [3 /*break*/, 9];
11673
+ if (!(vditor.options.upload.url || vditor.options.upload.handler)) return [3 /*break*/, 7];
11149
11674
  return [4 /*yield*/, uploadFiles(vditor, files)];
11150
- case 4:
11675
+ case 6:
11151
11676
  _b.sent();
11152
- return [3 /*break*/, 6];
11153
- case 5:
11677
+ return [3 /*break*/, 8];
11678
+ case 7:
11154
11679
  fileReader_1 = new FileReader();
11155
11680
  if ("clipboardData" in event) {
11156
11681
  files = event.clipboardData.files;
@@ -11163,7 +11688,7 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11163
11688
  if (file_1 && file_1.type.startsWith("image")) {
11164
11689
  fileReader_1.readAsDataURL(file_1);
11165
11690
  fileReader_1.onload = function () {
11166
- var imgHTML = '';
11691
+ var imgHTML = "";
11167
11692
  if (vditor.currentMode === "wysiwyg") {
11168
11693
  imgHTML += "<img alt=\"".concat(file_1.name, "\" src=\"").concat(fileReader_1.result.toString(), "\">\n");
11169
11694
  }
@@ -11173,9 +11698,9 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11173
11698
  document.execCommand("insertHTML", false, imgHTML);
11174
11699
  };
11175
11700
  }
11176
- _b.label = 6;
11177
- case 6: return [3 /*break*/, 8];
11178
- case 7:
11701
+ _b.label = 8;
11702
+ case 8: return [3 /*break*/, 10];
11703
+ case 9:
11179
11704
  if (textPlain.trim() !== "" && files.length === 0) {
11180
11705
  range = (0,selection/* getEditorRange */.zh)(vditor);
11181
11706
  if (range.toString() !== "" && vditor.lute.IsValidLinkDest(textPlain)) {
@@ -11184,12 +11709,12 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11184
11709
  if (vditor.currentMode === "ir") {
11185
11710
  renderers.Md2VditorIRDOM = { renderLinkDest: renderLinkDest };
11186
11711
  vditor.lute.SetJSRenderers({ renderers: renderers });
11187
- (0,selection/* insertHTML */.oC)(vditor.lute.Md2VditorIRDOM(textPlain), vditor);
11712
+ (0,selection/* insertHTML */.oC)(Lute.Sanitize(vditor.lute.Md2VditorIRDOM(textPlain)), vditor);
11188
11713
  }
11189
11714
  else if (vditor.currentMode === "wysiwyg") {
11190
11715
  renderers.Md2VditorDOM = { renderLinkDest: renderLinkDest };
11191
11716
  vditor.lute.SetJSRenderers({ renderers: renderers });
11192
- (0,selection/* insertHTML */.oC)(vditor.lute.Md2VditorDOM(textPlain), vditor);
11717
+ (0,selection/* insertHTML */.oC)(Lute.Sanitize(vditor.lute.Md2VditorDOM(textPlain)), vditor);
11193
11718
  }
11194
11719
  else {
11195
11720
  renderers.Md2VditorSVDOM = { renderLinkDest: renderLinkDest };
@@ -11198,8 +11723,8 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11198
11723
  }
11199
11724
  vditor.outline.render(vditor);
11200
11725
  }
11201
- _b.label = 8;
11202
- case 8:
11726
+ _b.label = 10;
11727
+ case 10:
11203
11728
  if (vditor.currentMode !== "sv") {
11204
11729
  blockElement = (0,hasClosest/* hasClosestBlock */.F9)((0,selection/* getEditorRange */.zh)(vditor).startContainer);
11205
11730
  if (blockElement) {
@@ -11231,6 +11756,81 @@ var paste = function (vditor, event, callback) { return fixBrowserBehavior_await
11231
11756
  }
11232
11757
  });
11233
11758
  }); };
11759
+ var processVMLImage = function (vditor, root, rtfData) { return fixBrowserBehavior_awaiter(void 0, void 0, void 0, function () {
11760
+ var regexPictureHeader, regexPicture, regImages, images, _i, regImages_1, image, imageType, shapes, i, img, newSrc, imgs, i, src, _a;
11761
+ return fixBrowserBehavior_generator(this, function (_b) {
11762
+ switch (_b.label) {
11763
+ case 0:
11764
+ if (!rtfData) {
11765
+ return [2 /*return*/];
11766
+ }
11767
+ regexPictureHeader = /{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/;
11768
+ regexPicture = new RegExp("(?:(" + regexPictureHeader.source + "))([\\da-fA-F\\s]+)\\}", "g");
11769
+ regImages = rtfData.match(regexPicture);
11770
+ images = [];
11771
+ if (regImages) {
11772
+ for (_i = 0, regImages_1 = regImages; _i < regImages_1.length; _i++) {
11773
+ image = regImages_1[_i];
11774
+ imageType = void 0;
11775
+ if (image.includes("\\pngblip")) {
11776
+ imageType = "image/png";
11777
+ }
11778
+ else if (image.includes("\\jpegblip")) {
11779
+ imageType = "image/jpeg";
11780
+ }
11781
+ if (imageType) {
11782
+ images.push({
11783
+ hex: image.replace(regexPictureHeader, "").replace(/[^\da-fA-F]/g, ""),
11784
+ type: imageType,
11785
+ });
11786
+ }
11787
+ }
11788
+ }
11789
+ shapes = [];
11790
+ walk(root, function (child) {
11791
+ if (child.tagName === "V:SHAPE") {
11792
+ walk(child, function (sub) {
11793
+ if (sub.tagName === "V:IMAGEDATA")
11794
+ shapes.push({ shape: child, img: sub });
11795
+ });
11796
+ return false;
11797
+ }
11798
+ });
11799
+ for (i = 0; i < shapes.length; i++) {
11800
+ img = document.createElement("img");
11801
+ newSrc = "data:" + images[i].type + ";base64," + btoa((images[i].hex.match(/\w{2}/g) || []).map(function (char) {
11802
+ return String.fromCharCode(parseInt(char, 16));
11803
+ }).join(""));
11804
+ img.src = newSrc;
11805
+ img.title = shapes[i].img.getAttribute("title");
11806
+ shapes[i].shape.parentNode.replaceChild(img, shapes[i].shape);
11807
+ }
11808
+ imgs = root.querySelectorAll("img");
11809
+ i = 0;
11810
+ _b.label = 1;
11811
+ case 1:
11812
+ if (!(i < imgs.length)) return [3 /*break*/, 4];
11813
+ src = imgs[i].src || "";
11814
+ if (!src) return [3 /*break*/, 3];
11815
+ _a = imgs[i];
11816
+ return [4 /*yield*/, vditor.options.upload.base64ToLink(src)];
11817
+ case 2:
11818
+ _a.src = _b.sent();
11819
+ _b.label = 3;
11820
+ case 3:
11821
+ i++;
11822
+ return [3 /*break*/, 1];
11823
+ case 4: return [2 /*return*/];
11824
+ }
11825
+ });
11826
+ }); };
11827
+ var walk = function (el, fn) {
11828
+ var goNext = fn(el);
11829
+ if (goNext !== false)
11830
+ for (var i = 0; i < el.children.length; i++) {
11831
+ walk(el.children[i], fn);
11832
+ }
11833
+ };
11234
11834
  var templateObject_1;
11235
11835
 
11236
11836
  ;// CONCATENATED MODULE: ./src/ts/ir/process.ts
@@ -11243,6 +11843,7 @@ var templateObject_1;
11243
11843
 
11244
11844
 
11245
11845
 
11846
+
11246
11847
  var processHint = function (vditor) {
11247
11848
  var _a, _b;
11248
11849
  vditor.hint.render(vditor);
@@ -11277,6 +11878,7 @@ var process_processAfterRender = function (vditor, options) {
11277
11878
  enableHint: false,
11278
11879
  enableInput: true,
11279
11880
  }; }
11881
+ (0,imageCaptionRender/* renderImageCaptions */.W)(vditor.ir.element, "ir", vditor.options.preview.markdown.imageCaption);
11280
11882
  if (options.enableHint) {
11281
11883
  processHint(vditor);
11282
11884
  }
@@ -11326,12 +11928,25 @@ var process_processHeading = function (vditor, value) {
11326
11928
  var removeInline = function (range, vditor, type) {
11327
11929
  var inlineElement = (0,hasClosest/* hasClosestByAttribute */.a1)(range.startContainer, "data-type", type);
11328
11930
  if (inlineElement) {
11931
+ var keepSelection = !range.collapsed;
11329
11932
  inlineElement.firstElementChild.remove();
11330
11933
  inlineElement.lastElementChild.remove();
11934
+ if (keepSelection) {
11935
+ var endRange = range.cloneRange();
11936
+ endRange.collapse(false);
11937
+ endRange.insertNode(document.createElement("wbr"));
11938
+ }
11331
11939
  range.insertNode(document.createElement("wbr"));
11332
11940
  var tempElement = document.createElement("div");
11333
11941
  tempElement.innerHTML = vditor.lute.SpinVditorIRDOM(inlineElement.outerHTML);
11334
11942
  inlineElement.outerHTML = tempElement.firstElementChild.innerHTML.trim();
11943
+ if (keepSelection) {
11944
+ (0,selection/* setRangeByWbr */.ib)(vditor.ir.element, range);
11945
+ var endWbrElement = vditor.ir.element.querySelector("wbr");
11946
+ range.setEndBefore(endWbrElement);
11947
+ endWbrElement.remove();
11948
+ (0,selection/* setSelectionFocus */.Hc)(range);
11949
+ }
11335
11950
  }
11336
11951
  };
11337
11952
  var process_processToolbar = function (vditor, actionBtn, prefix, suffix) {
@@ -11424,6 +12039,7 @@ var process_processToolbar = function (vditor, actionBtn, prefix, suffix) {
11424
12039
  else if (commandName === "italic" || commandName === "bold" || commandName === "strike"
11425
12040
  || commandName === "inline-code" || commandName === "code" || commandName === "table") {
11426
12041
  var html = void 0;
12042
+ var keepSelection = false;
11427
12043
  if (range.toString() === "") {
11428
12044
  html = "".concat(prefix, "<wbr>").concat(suffix);
11429
12045
  }
@@ -11435,7 +12051,8 @@ var process_processToolbar = function (vditor, actionBtn, prefix, suffix) {
11435
12051
  html = "".concat(prefix).concat(range.toString(), "<wbr>").concat(suffix);
11436
12052
  }
11437
12053
  else {
11438
- html = "".concat(prefix).concat(range.toString()).concat(suffix, "<wbr>");
12054
+ html = "".concat(prefix, "<wbr>").concat(range.toString(), "<wbr>").concat(suffix);
12055
+ keepSelection = true;
11439
12056
  }
11440
12057
  range.deleteContents();
11441
12058
  }
@@ -11446,6 +12063,12 @@ var process_processToolbar = function (vditor, actionBtn, prefix, suffix) {
11446
12063
  spanElement.innerHTML = html;
11447
12064
  range.insertNode(spanElement);
11448
12065
  input(vditor, range);
12066
+ if (keepSelection) {
12067
+ var endWbrElement = vditor.ir.element.querySelector("wbr");
12068
+ range.setEndBefore(endWbrElement);
12069
+ endWbrElement.remove();
12070
+ (0,selection/* setSelectionFocus */.Hc)(range);
12071
+ }
11449
12072
  if (commandName === "table") {
11450
12073
  range.selectNodeContents(getSelection().getRangeAt(0).startContainer.parentElement);
11451
12074
  (0,selection/* setSelectionFocus */.Hc)(range);
@@ -11795,6 +12418,27 @@ var Hint = /** @class */ (function () {
11795
12418
 
11796
12419
 
11797
12420
 
12421
+
12422
+ var getHeadingMarker = function (headingElement) {
12423
+ return Array.from(headingElement.children).find(function (item) { return item.getAttribute("data-type") === "heading-marker"; });
12424
+ };
12425
+ var restoreHeadingMarker = function (sourceHeading, copiedHeading) {
12426
+ if (!sourceHeading || !copiedHeading || sourceHeading.tagName !== copiedHeading.tagName ||
12427
+ sourceHeading.getAttribute("data-marker") !== copiedHeading.getAttribute("data-marker") ||
12428
+ copiedHeading.textContent.trim() === "" || getHeadingMarker(copiedHeading)) {
12429
+ return;
12430
+ }
12431
+ var markerElement = getHeadingMarker(sourceHeading);
12432
+ if (!markerElement) {
12433
+ return;
12434
+ }
12435
+ if (sourceHeading.firstElementChild === markerElement) {
12436
+ copiedHeading.insertBefore(markerElement.cloneNode(true), copiedHeading.firstChild);
12437
+ }
12438
+ else if (sourceHeading.lastElementChild === markerElement) {
12439
+ copiedHeading.appendChild(markerElement.cloneNode(true));
12440
+ }
12441
+ };
11798
12442
  var IR = /** @class */ (function () {
11799
12443
  function IR(vditor) {
11800
12444
  this.composingLock = false;
@@ -11821,6 +12465,9 @@ var IR = /** @class */ (function () {
11821
12465
  event.preventDefault();
11822
12466
  var tempElement = document.createElement("div");
11823
12467
  tempElement.appendChild(range.cloneContents());
12468
+ var copiedHeadings = tempElement.querySelectorAll("h1, h2, h3, h4, h5, h6");
12469
+ restoreHeadingMarker((0,hasClosestByHeadings/* hasClosestByHeadings */.W)(range.startContainer), copiedHeadings.item(0));
12470
+ restoreHeadingMarker((0,hasClosestByHeadings/* hasClosestByHeadings */.W)(range.endContainer), copiedHeadings.item(copiedHeadings.length - 1));
11824
12471
  event.clipboardData.setData("text/plain", vditor.lute.VditorIRDOM2Md(tempElement.innerHTML).trim());
11825
12472
  event.clipboardData.setData("text/html", "");
11826
12473
  };
@@ -12018,16 +12665,19 @@ var IR = /** @class */ (function () {
12018
12665
 
12019
12666
  ;// CONCATENATED MODULE: ./src/ts/markdown/getHTML.ts
12020
12667
 
12668
+
12021
12669
  var getHTML = function (vditor) {
12670
+ var html = "";
12022
12671
  if (vditor.currentMode === "sv") {
12023
- return vditor.lute.Md2HTML(getMarkdown(vditor));
12672
+ html = vditor.lute.Md2HTML(getMarkdown(vditor));
12024
12673
  }
12025
12674
  else if (vditor.currentMode === "wysiwyg") {
12026
- return vditor.lute.VditorDOM2HTML(vditor.wysiwyg.element.innerHTML);
12675
+ html = vditor.lute.VditorDOM2HTML(vditor.wysiwyg.element.innerHTML);
12027
12676
  }
12028
12677
  else if (vditor.currentMode === "ir") {
12029
- return vditor.lute.VditorIRDOM2HTML(vditor.ir.element.innerHTML);
12678
+ html = vditor.lute.VditorIRDOM2HTML(vditor.ir.element.innerHTML);
12030
12679
  }
12680
+ return (0,imageCaptionRender/* renderImageCaptionHTML */.V)(html, vditor.options.preview.markdown.imageCaption);
12031
12681
  };
12032
12682
 
12033
12683
  // EXTERNAL MODULE: ./src/ts/markdown/setLute.ts
@@ -12102,6 +12752,8 @@ var mediaRender = __webpack_require__(280);
12102
12752
 
12103
12753
 
12104
12754
 
12755
+
12756
+
12105
12757
 
12106
12758
  var Preview = /** @class */ (function () {
12107
12759
  function Preview(vditor) {
@@ -12232,6 +12884,7 @@ var Preview = /** @class */ (function () {
12232
12884
  }
12233
12885
  if (value) {
12234
12886
  this.previewElement.innerHTML = value;
12887
+ (0,imageCaptionRender/* renderImageCaptions */.W)(this.previewElement, "preview", vditor.options.preview.markdown.imageCaption);
12235
12888
  return;
12236
12889
  }
12237
12890
  if (getMarkdown(vditor)
@@ -12283,6 +12936,7 @@ var Preview = /** @class */ (function () {
12283
12936
  }, vditor.options.preview.delay);
12284
12937
  };
12285
12938
  Preview.prototype.afterRender = function (vditor, startTime) {
12939
+ (0,imageCaptionRender/* renderImageCaptions */.W)(this.previewElement, "preview", vditor.options.preview.markdown.imageCaption);
12286
12940
  if (vditor.options.preview.parse) {
12287
12941
  vditor.options.preview.parse(this.element);
12288
12942
  }
@@ -12307,6 +12961,7 @@ var Preview = /** @class */ (function () {
12307
12961
  (0,SMILESRender/* SMILESRender */.J)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);
12308
12962
  (0,flowchartRender/* flowchartRender */.P)(vditor.preview.previewElement, vditor.options.cdn);
12309
12963
  (0,graphvizRender/* graphvizRender */.v)(vditor.preview.previewElement, vditor.options.cdn);
12964
+ (0,wavedromRender/* wavedromRender */.F)(vditor.preview.previewElement, vditor.options.cdn);
12310
12965
  (0,chartRender/* chartRender */.p)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);
12311
12966
  (0,mindmapRender/* mindmapRender */.P)(vditor.preview.previewElement, vditor.options.cdn, vditor.options.theme);
12312
12967
  (0,plantumlRender/* plantumlRender */.B)(vditor.preview.previewElement, vditor.options.cdn);
@@ -13005,7 +13660,7 @@ var exportPDF = function (vditor) {
13005
13660
  vditor.tip.show(window.VditorI18n.generate, 3800);
13006
13661
  var iframe = document.querySelector("#vditorExportIframe");
13007
13662
  iframe.contentDocument.open();
13008
- iframe.contentDocument.write("<link rel=\"stylesheet\" href=\"".concat(vditor.options.cdn, "/dist/index.css\"/>\n<script src=\"").concat(vditor.options.cdn, "/dist/method.min.js\"></script>\n<div id=\"preview\" style=\"width: 800px\"></div>\n<script>\nwindow.addEventListener(\"message\", (e) => {\n if(!e.data) {\n return;\n }\n Vditor.preview(document.getElementById('preview'), e.data, {\n cdn: \"").concat(vditor.options.cdn, "\",\n markdown: {\n theme: ").concat(JSON.stringify(vditor.options.preview.theme), "\n },\n hljs: {\n style: \"").concat(vditor.options.preview.hljs.style, "\"\n }\n });\n setTimeout(() => {\n window.print();\n }, 3600);\n}, false);\n</script>"));
13663
+ iframe.contentDocument.write("<link rel=\"stylesheet\" href=\"".concat(vditor.options.cdn, "/dist/index.css\"/>\n<script src=\"").concat(vditor.options.cdn, "/dist/method.min.js\"></script>\n<div id=\"preview\" style=\"width: 800px\"></div>\n<script>\nwindow.addEventListener(\"message\", (e) => {\n if(!e.data) {\n return;\n }\n Vditor.preview(document.getElementById('preview'), e.data, {\n cdn: \"").concat(vditor.options.cdn, "\",\n markdown: {\n callout: ").concat(JSON.stringify(vditor.options.preview.markdown.callout), ",\n theme: ").concat(JSON.stringify(vditor.options.preview.theme), "\n },\n hljs: {\n style: \"").concat(vditor.options.preview.hljs.style, "\"\n }\n });\n setTimeout(() => {\n window.print();\n }, 3600);\n}, false);\n</script>"));
13009
13664
  iframe.contentDocument.close();
13010
13665
  setTimeout(function () {
13011
13666
  iframe.contentWindow.postMessage(getMarkdown(vditor), "*");
@@ -13013,7 +13668,7 @@ var exportPDF = function (vditor) {
13013
13668
  };
13014
13669
  var exportHTML = function (vditor) {
13015
13670
  var content = getHTML(vditor);
13016
- var html = "<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"".concat(vditor.options.cdn, "/dist/index.css\"/>\n<script src=\"").concat(vditor.options.cdn, "/dist/js/i18n/").concat(vditor.options.lang, ".js\"></script>\n<script src=\"").concat(vditor.options.cdn, "/dist/method.min.js\"></script></head>\n<body><div class=\"vditor-reset\" id=\"preview\">").concat(content, "</div>\n<script>\n const previewElement = document.getElementById('preview')\n Vditor.setContentTheme('").concat(vditor.options.preview.theme.current, "', '").concat(vditor.options.preview.theme.path, "');\n Vditor.codeRender(previewElement);\n Vditor.highlightRender(").concat(JSON.stringify(vditor.options.preview.hljs), ", previewElement, '").concat(vditor.options.cdn, "');\n Vditor.mathRender(previewElement, {\n cdn: '").concat(vditor.options.cdn, "',\n math: ").concat(JSON.stringify(vditor.options.preview.math), ",\n });\n Vditor.mermaidRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.SMILESRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.markmapRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.flowchartRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.graphvizRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.chartRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.mindmapRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.abcRender(previewElement, '").concat(vditor.options.cdn, "');\n ").concat(vditor.options.preview.render.media.enable ? 'Vditor.mediaRender(previewElement);' : "", "\n Vditor.speechRender(previewElement);\n</script>\n<script src=\"").concat(vditor.options.cdn, "/dist/js/icons/").concat(vditor.options.icon, ".js\"></script></body></html>");
13671
+ var html = "<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"".concat(vditor.options.cdn, "/dist/index.css\"/>\n<script src=\"").concat(vditor.options.cdn, "/dist/js/i18n/").concat(vditor.options.lang, ".js\"></script>\n<script src=\"").concat(vditor.options.cdn, "/dist/method.min.js\"></script></head>\n<body><div class=\"vditor-reset\" id=\"preview\">").concat(content, "</div>\n<script>\n const previewElement = document.getElementById('preview')\n Vditor.setContentTheme('").concat(vditor.options.preview.theme.current, "', '").concat(vditor.options.preview.theme.path, "');\n Vditor.codeRender(previewElement);\n Vditor.highlightRender(").concat(JSON.stringify(vditor.options.preview.hljs), ", previewElement, '").concat(vditor.options.cdn, "');\n Vditor.mathRender(previewElement, {\n cdn: '").concat(vditor.options.cdn, "',\n math: ").concat(JSON.stringify(vditor.options.preview.math), ",\n });\n Vditor.mermaidRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.SMILESRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.markmapRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.flowchartRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.graphvizRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.wavedromRender(previewElement, '").concat(vditor.options.cdn, "');\n Vditor.chartRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.mindmapRender(previewElement, '").concat(vditor.options.cdn, "', '").concat(vditor.options.theme, "');\n Vditor.abcRender(previewElement, '").concat(vditor.options.cdn, "');\n ").concat(vditor.options.preview.render.media.enable ? 'Vditor.mediaRender(previewElement);' : "", "\n Vditor.speechRender(previewElement);\n</script>\n<script src=\"").concat(vditor.options.cdn, "/dist/js/icons/").concat(vditor.options.icon, ".js\"></script></body></html>");
13017
13672
  download(vditor, html, content.substr(0, 10) + ".html");
13018
13673
  };
13019
13674
 
@@ -14137,7 +14792,7 @@ var Toolbar = /** @class */ (function () {
14137
14792
 
14138
14793
 
14139
14794
  // EXTERNAL MODULE: ./node_modules/.pnpm/diff-match-patch@1.0.5/node_modules/diff-match-patch/index.js
14140
- var diff_match_patch = __webpack_require__(173);
14795
+ var diff_match_patch = __webpack_require__(132);
14141
14796
  ;// CONCATENATED MODULE: ./src/ts/undo/index.ts
14142
14797
 
14143
14798
 
@@ -14671,7 +15326,7 @@ var Options = /** @class */ (function () {
14671
15326
  hotkey: "⇧⌘H",
14672
15327
  icon: '<svg><use xlink:href="#vditor-icon-line"></use></svg>',
14673
15328
  name: "line",
14674
- prefix: "---",
15329
+ prefix: "***",
14675
15330
  tipPosition: "n",
14676
15331
  },
14677
15332
  {
@@ -15437,7 +16092,7 @@ var Vditor = /** @class */ (function (_super) {
15437
16092
  var mergedOptions = getOptions.merge();
15438
16093
  // 支持自定义国际化
15439
16094
  if (!mergedOptions.i18n) {
15440
- if (!["de_DE", "en_US", "fr_FR", "pt_BR", "ja_JP", "ko_KR", "ru_RU", "sv_SE", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) {
16095
+ if (!["de_DE", "en_US", "es_ES", "fr_FR", "ja_JP", "ko_KR", "pt_BR", "ru_RU", "sv_SE", "vi_VN", "zh_CN", "zh_TW"].includes(mergedOptions.lang)) {
15441
16096
  throw new Error("options.lang error, see https://ld246.com/article/1549638745630#options");
15442
16097
  }
15443
16098
  else {
@@ -15844,6 +16499,7 @@ var Vditor = /** @class */ (function (_super) {
15844
16499
  "".concat(mergedOptions.cdn, "/dist/js/lute/lute.min.js"), "vditorLuteScript").then(function () {
15845
16500
  _this.vditor.lute = (0,setLute/* setLute */.X)({
15846
16501
  autoSpace: _this.vditor.options.preview.markdown.autoSpace,
16502
+ callout: _this.vditor.options.preview.markdown.callout,
15847
16503
  gfmAutoLink: _this.vditor.options.preview.markdown.gfmAutoLink,
15848
16504
  codeBlockPreview: _this.vditor.options.preview.markdown
15849
16505
  .codeBlockPreview,
@@ -15862,6 +16518,8 @@ var Vditor = /** @class */ (function (_super) {
15862
16518
  paragraphBeginningSpace: _this.vditor.options.preview.markdown
15863
16519
  .paragraphBeginningSpace,
15864
16520
  sanitize: _this.vditor.options.preview.markdown.sanitize,
16521
+ sub: _this.vditor.options.preview.markdown.sub,
16522
+ sup: _this.vditor.options.preview.markdown.sup,
15865
16523
  toc: _this.vditor.options.preview.markdown.toc,
15866
16524
  });
15867
16525
  _this.vditor.preview = new Preview(_this.vditor);