@8btc/mditor 0.0.6 → 0.0.8

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.
package/dist/method.d.ts CHANGED
@@ -47,5 +47,9 @@ declare class Vditor {
47
47
  static setCodeTheme: (codeTheme: string, cdn?: string) => void;
48
48
  /** 设置内容主题 */
49
49
  static setContentTheme: (contentTheme: string, path: string) => void;
50
+ /**
51
+ * 外部更新行号:传入实例并根据配置进行同步/节流更新
52
+ */
53
+ static updateLineNumbers(instance: any, immediate?: boolean): void;
50
54
  }
51
55
  export default Vditor;
package/dist/method.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vditor v0.0.3 - A markdown editor written in TypeScript.
2
+ * Vditor v0.0.7 - A markdown editor written in TypeScript.
3
3
  *
4
4
  * MIT License
5
5
  *
@@ -45,7 +45,7 @@ return /******/ (() => { // webpackBootstrap
45
45
  /* harmony export */ "g": () => (/* binding */ Constants)
46
46
  /* harmony export */ });
47
47
  /* unused harmony export VDITOR_VERSION */
48
- var _VDITOR_VERSION = (/* unused pure expression or super */ null && ("0.0.3"));
48
+ var _VDITOR_VERSION = (/* unused pure expression or super */ null && ("0.0.7"));
49
49
 
50
50
  var Constants = /** @class */ (function () {
51
51
  function Constants() {
@@ -347,7 +347,7 @@ var Constants = /** @class */ (function () {
347
347
  "c#",
348
348
  "bat",
349
349
  ];
350
- Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.3");
350
+ Constants.CDN = "https://webcdn.wujieai.com/vditor@".concat("0.0.7");
351
351
  Constants.MARKDOWN_OPTIONS = {
352
352
  autoSpace: false,
353
353
  gfmAutoLink: true,
@@ -1789,6 +1789,30 @@ var flowchartRender = function (element, cdn) {
1789
1789
  };
1790
1790
 
1791
1791
 
1792
+ /***/ }),
1793
+
1794
+ /***/ 210:
1795
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1796
+
1797
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1798
+ /* harmony export */ "O": () => (/* binding */ getMarkdown)
1799
+ /* harmony export */ });
1800
+ /* harmony import */ var _util_code160to32__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(105);
1801
+
1802
+ var getMarkdown = function (vditor) {
1803
+ if (vditor.currentMode === "sv") {
1804
+ return (0,_util_code160to32__WEBPACK_IMPORTED_MODULE_0__/* .code160to32 */ .X)("".concat(vditor.sv.element.textContent, "\n").replace(/\n\n$/, "\n"));
1805
+ }
1806
+ else if (vditor.currentMode === "wysiwyg") {
1807
+ return vditor.lute.VditorDOM2Md(vditor.wysiwyg.element.innerHTML);
1808
+ }
1809
+ else if (vditor.currentMode === "ir") {
1810
+ return vditor.lute.VditorIRDOM2Md(vditor.ir.element.innerHTML);
1811
+ }
1812
+ return "";
1813
+ };
1814
+
1815
+
1792
1816
  /***/ }),
1793
1817
 
1794
1818
  /***/ 483:
@@ -3371,6 +3395,479 @@ var addStyle = function (url, id) {
3371
3395
  };
3372
3396
 
3373
3397
 
3398
+ /***/ }),
3399
+
3400
+ /***/ 626:
3401
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3402
+
3403
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3404
+ /* harmony export */ "t": () => (/* binding */ attachLineNumbersToBlocks),
3405
+ /* harmony export */ "g": () => (/* binding */ attachLineNumbersToBlocksThrottled)
3406
+ /* harmony export */ });
3407
+ /**
3408
+ * 为编辑区域添加行号标记:
3409
+ * - 为所有包含 `data-block` 的块级节点写入 `data-linenumber`
3410
+ * - 额外为每个 `ul` 的直接 `li` 子元素写入 `data-linenumber`(不修改 `ul` 本身)
3411
+ * 通过解析传入的 Markdown 源文本,建立内容到源文件行号的映射,
3412
+ * 兼顾多行文本、嵌套列表、重复内容及空白/特殊字符,并提供基础错误保护。
3413
+ */
3414
+ var attachLineNumbersToBlocks = function (root, sourceMarkdown) {
3415
+ if (!root || !sourceMarkdown) {
3416
+ return;
3417
+ }
3418
+ var ZWSP = "\u200b";
3419
+ var normalize = function (text) {
3420
+ return text
3421
+ .replace(/\r\n|\r/g, "\n")
3422
+ .replace(new RegExp(ZWSP, "g"), "")
3423
+ .replace(/\u00a0/g, " ")
3424
+ .replace(/\u2006/g, "")
3425
+ .replace(/[\t\f\v ]+/g, " ");
3426
+ };
3427
+ var srcNorm = normalize(sourceMarkdown);
3428
+ var srcLines = srcNorm.split("\n");
3429
+ var stripInlineMD = function (text) {
3430
+ return (text
3431
+ .replace(/\\([*_`~])/g, "$1")
3432
+ .replace(/\*\*|__/g, "")
3433
+ .replace(/\*|_/g, "")
3434
+ .replace(/~~/g, "")
3435
+ .replace(/`+/g, "")
3436
+ // 数学行内分隔符:保留内容,仅移除分隔符
3437
+ .replace(/\\\(/g, "(")
3438
+ .replace(/\\\)/g, ")")
3439
+ .replace(/\\\[/g, "[")
3440
+ .replace(/\\\]/g, "]")
3441
+ .replace(/\$/g, "")
3442
+ .trim());
3443
+ };
3444
+ var stripInlineForList = function (text) {
3445
+ return (stripInlineMD(text)
3446
+ // 移除 $...$(行内公式整体)
3447
+ .replace(/\$(?:\\.|[^$])*\$/g, "")
3448
+ // 移除 \(...\)、\[...\](行内/行间公式整体)
3449
+ .replace(/\\\([^)]*\\\)/g, "")
3450
+ .replace(/\\\[[^\]]*\\\]/g, "")
3451
+ // 去除通用 TeX 命令,如 \alpha、\mathbf 等
3452
+ .replace(/\\[a-zA-Z]+/g, "")
3453
+ // 去除多余大括号
3454
+ .replace(/[{}]/g, "")
3455
+ .trim());
3456
+ };
3457
+ var strippedLines = srcLines.map(function (l) { return stripInlineMD(l); });
3458
+ var lineLookup = new Map();
3459
+ for (var i = 0; i < strippedLines.length; i++) {
3460
+ var key = strippedLines[i];
3461
+ if (!lineLookup.has(key)) {
3462
+ lineLookup.set(key, [i + 1]);
3463
+ }
3464
+ else {
3465
+ lineLookup.get(key).push(i + 1);
3466
+ }
3467
+ }
3468
+ var usedLines = new Set();
3469
+ var pickFirstUnused = function (candidates) {
3470
+ if (!candidates || candidates.length === 0)
3471
+ return -1;
3472
+ for (var _i = 0, candidates_1 = candidates; _i < candidates_1.length; _i++) {
3473
+ var ln = candidates_1[_i];
3474
+ if (!usedLines.has(ln))
3475
+ return ln;
3476
+ }
3477
+ return -1;
3478
+ };
3479
+ var findLineNumberByText = function (text) {
3480
+ var stripped = stripInlineMD(text);
3481
+ var ln = pickFirstUnused(lineLookup.get(stripped));
3482
+ if (ln !== -1)
3483
+ return ln;
3484
+ for (var i = 0; i < strippedLines.length; i++) {
3485
+ if (!usedLines.has(i + 1) &&
3486
+ stripped &&
3487
+ strippedLines[i].indexOf(stripped) !== -1) {
3488
+ return i + 1;
3489
+ }
3490
+ }
3491
+ return -1;
3492
+ };
3493
+ /**
3494
+ * 预处理:收集 Markdown 中所有无序列表(ul)行及其去除行内标记后的内容,构建快速查找结构。
3495
+ * 仅匹配以 `*`、`-`、`+` 开头的条目,支持任务列表如 `- [ ]`、`* [x]`。
3496
+ */
3497
+ var unorderedListEntries = [];
3498
+ var unorderedLookup = new Map();
3499
+ var usedUnorderedLines = new Set();
3500
+ for (var i = 0; i < srcLines.length; i++) {
3501
+ var raw = srcLines[i];
3502
+ var m = raw.match(/^\s*[*+-]\s+(?:\[(?: |x|X)\]\s+)?(.*)$/);
3503
+ if (m && typeof m[1] === "string") {
3504
+ var contentStripped = stripInlineForList(m[1]);
3505
+ unorderedListEntries.push({ ln: i + 1, content: contentStripped });
3506
+ if (!unorderedLookup.has(contentStripped)) {
3507
+ unorderedLookup.set(contentStripped, [i + 1]);
3508
+ }
3509
+ else {
3510
+ unorderedLookup.get(contentStripped).push(i + 1);
3511
+ }
3512
+ }
3513
+ }
3514
+ /**
3515
+ * 从无序列表候选行中为给定文本选择一个行号。
3516
+ * 优先精确匹配(去标记后完全相同),否则回退到包含匹配。
3517
+ */
3518
+ var pickFirstUnusedUnordered = function (candidates) {
3519
+ if (!candidates || candidates.length === 0)
3520
+ return -1;
3521
+ for (var _i = 0, candidates_2 = candidates; _i < candidates_2.length; _i++) {
3522
+ var ln = candidates_2[_i];
3523
+ if (!usedUnorderedLines.has(ln))
3524
+ return ln;
3525
+ }
3526
+ return -1;
3527
+ };
3528
+ var findUnorderedListLineNumber = function (text) {
3529
+ var stripped = stripInlineForList(text);
3530
+ // 先尝试精确匹配
3531
+ var exact = pickFirstUnusedUnordered(unorderedLookup.get(stripped));
3532
+ if (exact !== -1)
3533
+ return exact;
3534
+ // 回退到包含匹配
3535
+ for (var i = 0; i < unorderedListEntries.length; i++) {
3536
+ var entry = unorderedListEntries[i];
3537
+ if (usedUnorderedLines.has(entry.ln))
3538
+ continue;
3539
+ if (!stripped)
3540
+ continue;
3541
+ if (entry.content.indexOf(stripped) !== -1 ||
3542
+ stripped.indexOf(entry.content) !== -1) {
3543
+ return entry.ln;
3544
+ }
3545
+ }
3546
+ return -1;
3547
+ };
3548
+ /**
3549
+ * 预处理:收集 Markdown 中所有有序列表(ol)行及其内容,支持 `1.` 或 `1)` 以及任务列表前缀。
3550
+ */
3551
+ var orderedListEntries = [];
3552
+ var orderedLookup = new Map();
3553
+ var usedOrderedLines = new Set();
3554
+ var ORDERED_RE = /\s*\d+(?:[.)、.。]|[\uFF0E\uFF09\u3001])\s+(?:\[(?: |x|X)\]\s+)?(.*)/;
3555
+ var ORDERED_FULL = new RegExp("^".concat(ORDERED_RE.source, "$"));
3556
+ for (var i = 0; i < srcLines.length; i++) {
3557
+ var raw = srcLines[i];
3558
+ var m = raw.match(ORDERED_FULL);
3559
+ if (m && typeof m[1] === "string") {
3560
+ var contentStripped = stripInlineForList(m[1]);
3561
+ orderedListEntries.push({ ln: i + 1, content: contentStripped });
3562
+ if (!orderedLookup.has(contentStripped)) {
3563
+ orderedLookup.set(contentStripped, [i + 1]);
3564
+ }
3565
+ else {
3566
+ orderedLookup.get(contentStripped).push(i + 1);
3567
+ }
3568
+ }
3569
+ }
3570
+ console.debug("[LineNumber][ol:index]", {
3571
+ total: orderedListEntries.length,
3572
+ });
3573
+ var orderedGroups = [];
3574
+ for (var i = 0; i < srcLines.length;) {
3575
+ var raw = srcLines[i];
3576
+ if (ORDERED_FULL.test(raw)) {
3577
+ var group = [];
3578
+ while (i < srcLines.length && ORDERED_FULL.test(srcLines[i])) {
3579
+ group.push(i + 1);
3580
+ i++;
3581
+ }
3582
+ if (group.length > 0) {
3583
+ orderedGroups.push(group);
3584
+ }
3585
+ }
3586
+ else {
3587
+ i++;
3588
+ }
3589
+ }
3590
+ /**
3591
+ * 为给定文本在有序列表候选中选择行号,精确匹配优先,包含匹配回退。
3592
+ */
3593
+ var pickFirstUnusedOrdered = function (candidates) {
3594
+ if (!candidates || candidates.length === 0)
3595
+ return -1;
3596
+ for (var _i = 0, candidates_3 = candidates; _i < candidates_3.length; _i++) {
3597
+ var ln = candidates_3[_i];
3598
+ if (!usedOrderedLines.has(ln))
3599
+ return ln;
3600
+ }
3601
+ return -1;
3602
+ };
3603
+ var findOrderedListLineNumber = function (text) {
3604
+ var stripped = stripInlineForList(text);
3605
+ var exact = pickFirstUnusedOrdered(orderedLookup.get(stripped));
3606
+ if (exact !== -1)
3607
+ return exact;
3608
+ for (var i = 0; i < orderedListEntries.length; i++) {
3609
+ var entry = orderedListEntries[i];
3610
+ if (usedOrderedLines.has(entry.ln))
3611
+ continue;
3612
+ if (!stripped)
3613
+ continue;
3614
+ if (entry.content.indexOf(stripped) !== -1 ||
3615
+ stripped.indexOf(entry.content) !== -1) {
3616
+ return entry.ln;
3617
+ }
3618
+ }
3619
+ return -1;
3620
+ };
3621
+ /**
3622
+ * 获取 `li` 的直接内容文本:仅拼接其直系子节点中的文本,排除嵌套的 `UL/OL` 列表。
3623
+ * 以便在嵌套列表场景下准确定位每个条目对应的源行。
3624
+ */
3625
+ var getImmediateLiText = function (li) {
3626
+ var buf = "";
3627
+ li.childNodes.forEach(function (node) {
3628
+ var _a;
3629
+ if (node.nodeType === 3) {
3630
+ buf += node.data;
3631
+ }
3632
+ else if (node.tagName !== "UL" &&
3633
+ node.tagName !== "OL" &&
3634
+ !((_a = node.classList) === null || _a === void 0 ? void 0 : _a.contains("katex"))) {
3635
+ buf += node.textContent || "";
3636
+ }
3637
+ });
3638
+ return buf;
3639
+ };
3640
+ var blocks = root.querySelectorAll("[data-block]");
3641
+ blocks.forEach(function (el) {
3642
+ try {
3643
+ var container = el;
3644
+ var dataType = container.getAttribute("data-type") || "";
3645
+ if (dataType === "math-block" || dataType === "code-block") {
3646
+ return;
3647
+ }
3648
+ // 仅 li 需要行号:跳过并清理 ul/ol 自身及其内部嵌套的 p/div 等块
3649
+ var tagName = container.tagName;
3650
+ if (tagName === "UL" || tagName === "OL") {
3651
+ container.removeAttribute("data-linenumber");
3652
+ return;
3653
+ }
3654
+ var liAncestor = container.closest("li");
3655
+ if (liAncestor) {
3656
+ container.removeAttribute("data-linenumber");
3657
+ return;
3658
+ }
3659
+ var text = container.textContent || "";
3660
+ var normText = normalize(text);
3661
+ // 跳过纯空白块
3662
+ if (!normText.trim()) {
3663
+ container.removeAttribute("data-linenumber");
3664
+ return;
3665
+ }
3666
+ var lineNumber = -1;
3667
+ if (tagName === "BLOCKQUOTE") {
3668
+ var firstLine = normText.split("\n").find(function (l) { return l.trim().length > 0; }) ||
3669
+ normText;
3670
+ var stripped = stripInlineMD(firstLine);
3671
+ for (var i = 0; i < srcLines.length; i++) {
3672
+ if (usedLines.has(i + 1))
3673
+ continue;
3674
+ if (/^\s*>+\s/.test(srcLines[i])) {
3675
+ var content = stripInlineMD(srcLines[i].replace(/^\s*>+\s+/, ""));
3676
+ if (content.indexOf(stripped) !== -1) {
3677
+ lineNumber = i + 1;
3678
+ break;
3679
+ }
3680
+ }
3681
+ }
3682
+ }
3683
+ else {
3684
+ var firstLine = normText.split("\n").find(function (l) { return l.trim().length > 0; }) ||
3685
+ normText;
3686
+ lineNumber = findLineNumberByText(firstLine);
3687
+ }
3688
+ if (lineNumber !== -1) {
3689
+ usedLines.add(lineNumber);
3690
+ container.setAttribute("data-linenumber", String(lineNumber));
3691
+ }
3692
+ }
3693
+ catch (_a) {
3694
+ void 0;
3695
+ }
3696
+ });
3697
+ /**
3698
+ * 为所有 `ul` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ul` 本身。
3699
+ * 支持多层嵌套与非文本起始节点(如加粗/行内代码)。
3700
+ */
3701
+ var ulElements = root.querySelectorAll("ul");
3702
+ ulElements.forEach(function (ul) {
3703
+ try {
3704
+ var children = Array.from(ul.children);
3705
+ for (var _i = 0, children_1 = children; _i < children_1.length; _i++) {
3706
+ var child = children_1[_i];
3707
+ if (child.tagName !== "LI")
3708
+ continue;
3709
+ var li = child;
3710
+ var rawText = getImmediateLiText(li);
3711
+ var norm = normalize(rawText);
3712
+ var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
3713
+ var ln = findUnorderedListLineNumber(firstLine);
3714
+ if (ln !== -1) {
3715
+ usedUnorderedLines.add(ln);
3716
+ li.setAttribute("data-linenumber", String(ln));
3717
+ }
3718
+ else {
3719
+ li.setAttribute("data-linenumber", "");
3720
+ }
3721
+ }
3722
+ }
3723
+ catch (_a) {
3724
+ void 0;
3725
+ }
3726
+ });
3727
+ /**
3728
+ * 为所有 `ol` 下的每个直接 `li` 子元素追加 `data-linenumber`,不修改 `ol` 本身。
3729
+ */
3730
+ var olElements = root.querySelectorAll("ol");
3731
+ olElements.forEach(function (ol) {
3732
+ try {
3733
+ var currentGroupIdx = -1;
3734
+ var lastAssigned_1 = -1;
3735
+ var children = Array.from(ol.children);
3736
+ for (var _i = 0, children_2 = children; _i < children_2.length; _i++) {
3737
+ var child = children_2[_i];
3738
+ if (child.tagName !== "LI")
3739
+ continue;
3740
+ var li = child;
3741
+ var rawText = getImmediateLiText(li);
3742
+ var norm = normalize(rawText);
3743
+ var firstLine = norm.split("\n").find(function (l) { return l.trim().length > 0; }) || norm;
3744
+ var stripped0 = stripInlineForList(firstLine);
3745
+ var stripped = stripped0 || stripInlineMD(firstLine);
3746
+ var candidates = orderedLookup.get(stripped) || [];
3747
+ var available = candidates.filter(function (n) { return !usedOrderedLines.has(n); });
3748
+ var ln = findOrderedListLineNumber(firstLine);
3749
+ if (ln !== -1) {
3750
+ usedOrderedLines.add(ln);
3751
+ li.setAttribute("data-linenumber", String(ln));
3752
+ // 成功映射日志
3753
+ console.debug("[LineNumber][ol>li]", {
3754
+ text: firstLine,
3755
+ stripped: stripped,
3756
+ line: ln,
3757
+ });
3758
+ // 记录当前组
3759
+ for (var gi = 0; gi < orderedGroups.length; gi++) {
3760
+ if (orderedGroups[gi].includes(ln)) {
3761
+ currentGroupIdx = gi;
3762
+ break;
3763
+ }
3764
+ }
3765
+ lastAssigned_1 = ln;
3766
+ }
3767
+ else {
3768
+ // 顺序回退:基于当前组或猜测组,按序分配下一未使用行
3769
+ var assigned = -1;
3770
+ var pickNextFromGroup = function (gi) {
3771
+ if (gi < 0 || gi >= orderedGroups.length)
3772
+ return -1;
3773
+ var lines = orderedGroups[gi];
3774
+ // 优先从上次分配后续查找
3775
+ var startIdx = 0;
3776
+ if (lastAssigned_1 !== -1) {
3777
+ var idx = lines.indexOf(lastAssigned_1);
3778
+ startIdx = idx >= 0 ? idx + 1 : 0;
3779
+ }
3780
+ for (var k = startIdx; k < lines.length; k++) {
3781
+ var cand = lines[k];
3782
+ if (!usedOrderedLines.has(cand))
3783
+ return cand;
3784
+ }
3785
+ for (var k = 0; k < startIdx; k++) {
3786
+ var cand = lines[k];
3787
+ if (!usedOrderedLines.has(cand))
3788
+ return cand;
3789
+ }
3790
+ return -1;
3791
+ };
3792
+ if (currentGroupIdx !== -1) {
3793
+ assigned = pickNextFromGroup(currentGroupIdx);
3794
+ }
3795
+ if (assigned === -1) {
3796
+ // 猜测组:选择拥有可用行的首个组
3797
+ for (var gi = 0; gi < orderedGroups.length && assigned === -1; gi++) {
3798
+ var cand = pickNextFromGroup(gi);
3799
+ if (cand !== -1) {
3800
+ currentGroupIdx = gi;
3801
+ assigned = cand;
3802
+ }
3803
+ }
3804
+ }
3805
+ if (assigned !== -1) {
3806
+ usedOrderedLines.add(assigned);
3807
+ li.setAttribute("data-linenumber", String(assigned));
3808
+ console.debug("[LineNumber][ol>li][fallback-seq]", {
3809
+ text: firstLine,
3810
+ stripped: stripped,
3811
+ line: assigned,
3812
+ group: currentGroupIdx,
3813
+ });
3814
+ lastAssigned_1 = assigned;
3815
+ }
3816
+ else {
3817
+ li.setAttribute("data-linenumber", "");
3818
+ // 失败诊断日志
3819
+ console.warn("[LineNumber][ol>li][missing]", {
3820
+ text: firstLine,
3821
+ stripped: stripped,
3822
+ candidates: candidates,
3823
+ available: available,
3824
+ reason: !stripped0
3825
+ ? "empty-after-strip"
3826
+ : candidates.length === 0
3827
+ ? "no-index-candidates"
3828
+ : available.length === 0
3829
+ ? "all-candidates-consumed"
3830
+ : "fallback-no-match",
3831
+ });
3832
+ }
3833
+ }
3834
+ }
3835
+ }
3836
+ catch (_a) {
3837
+ void 0;
3838
+ }
3839
+ });
3840
+ };
3841
+ /**
3842
+ * 节流后的行号更新函数,避免频繁更新 data-linenumber
3843
+ */
3844
+ var attachLineNumbersToBlocksThrottled = (function () {
3845
+ var last = 0;
3846
+ var timer = 0;
3847
+ var lastArgs = null;
3848
+ var wait = 500;
3849
+ var invoke = function () {
3850
+ timer = 0;
3851
+ last = Date.now();
3852
+ var args = lastArgs;
3853
+ lastArgs = null;
3854
+ if (args) {
3855
+ attachLineNumbersToBlocks(args[0], args[1]);
3856
+ }
3857
+ };
3858
+ return function (root, source) {
3859
+ var now = Date.now();
3860
+ lastArgs = [root, source];
3861
+ if (now - last >= wait) {
3862
+ invoke();
3863
+ }
3864
+ else if (!timer) {
3865
+ timer = window.setTimeout(invoke, wait - (now - last));
3866
+ }
3867
+ };
3868
+ })();
3869
+
3870
+
3374
3871
  /***/ }),
3375
3872
 
3376
3873
  /***/ 105:
@@ -4450,6 +4947,10 @@ var previewRender = function (previewElement, markdown, options) { return __awai
4450
4947
  var preview_image = __webpack_require__(190);
4451
4948
  // EXTERNAL MODULE: ./src/ts/ui/setCodeTheme.ts
4452
4949
  var setCodeTheme = __webpack_require__(580);
4950
+ // EXTERNAL MODULE: ./src/ts/markdown/getMarkdown.ts
4951
+ var getMarkdown = __webpack_require__(210);
4952
+ // EXTERNAL MODULE: ./src/ts/util/attachLineNumbers.ts
4953
+ var attachLineNumbers = __webpack_require__(626);
4453
4954
  ;// CONCATENATED MODULE: ./src/method.ts
4454
4955
 
4455
4956
 
@@ -4469,12 +4970,35 @@ var setCodeTheme = __webpack_require__(580);
4469
4970
 
4470
4971
 
4471
4972
 
4973
+
4974
+
4472
4975
 
4473
4976
 
4474
4977
 
4475
4978
  var Vditor = /** @class */ (function () {
4476
4979
  function Vditor() {
4477
4980
  }
4981
+ /**
4982
+ * 外部更新行号:传入实例并根据配置进行同步/节流更新
4983
+ */
4984
+ Vditor.updateLineNumbers = function (instance, immediate) {
4985
+ var _a, _b;
4986
+ if (immediate === void 0) { immediate = false; }
4987
+ try {
4988
+ var v = (_a = instance === null || instance === void 0 ? void 0 : instance.vditor) !== null && _a !== void 0 ? _a : instance;
4989
+ if (!((_b = v === null || v === void 0 ? void 0 : v.options) === null || _b === void 0 ? void 0 : _b.lineNumber))
4990
+ return;
4991
+ var text = (0,getMarkdown/* getMarkdown */.O)(v);
4992
+ var root = v[v.currentMode].element;
4993
+ if (immediate) {
4994
+ (0,attachLineNumbers/* attachLineNumbersToBlocks */.t)(root, text);
4995
+ }
4996
+ else {
4997
+ (0,attachLineNumbers/* attachLineNumbersToBlocksThrottled */.g)(root, text);
4998
+ }
4999
+ }
5000
+ catch (_c) { }
5001
+ };
4478
5002
  /** 点击图片放大 */
4479
5003
  Vditor.adapterRender = adapterRender;
4480
5004
  /** 点击图片放大 */