@vectojs/markdown 0.16.1 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -462,6 +462,59 @@ var MarkdownContainer = class extends Entity {
462
462
  render(_r) {
463
463
  }
464
464
  };
465
+ var ContainerBackground = class extends Entity {
466
+ color;
467
+ radius;
468
+ constructor(w, h, color, radius) {
469
+ super();
470
+ this.width = w;
471
+ this.height = h;
472
+ this.color = color;
473
+ this.radius = radius;
474
+ }
475
+ isPointInside() {
476
+ return false;
477
+ }
478
+ render(r) {
479
+ r.beginPath();
480
+ r.roundRect(0, 0, this.width, this.height, this.radius);
481
+ r.fill(this.color);
482
+ }
483
+ };
484
+
485
+ // src/markdown-abbr.ts
486
+ var DEF_RE = /^ {0,3}\*\[([^\]\n]+)\]:[ \t]*([^\n]*)(?:\n|$)/;
487
+ var ABBR_EXTENSIONS = [
488
+ {
489
+ name: "abbrDef",
490
+ level: "block",
491
+ tokenizer(src) {
492
+ const match = DEF_RE.exec(src);
493
+ if (match) {
494
+ return {
495
+ type: "abbrDef",
496
+ raw: match[0],
497
+ term: match[1],
498
+ definition: match[2]
499
+ };
500
+ }
501
+ return void 0;
502
+ },
503
+ renderer(token) {
504
+ return token.raw;
505
+ }
506
+ }
507
+ ];
508
+ function collectAbbreviations(tokens) {
509
+ const map = /* @__PURE__ */ new Map();
510
+ for (const token of tokens) {
511
+ if (token.type === "abbrDef") {
512
+ const t = token;
513
+ map.set(t.term, t.definition);
514
+ }
515
+ }
516
+ return map;
517
+ }
465
518
 
466
519
  // src/markdown-code.ts
467
520
  import {
@@ -473,6 +526,7 @@ import { measureText, UIComponent } from "@vectojs/ui";
473
526
 
474
527
  // src/theme.ts
475
528
  var DEFAULT_THEME = {
529
+ typographer: false,
476
530
  textColor: "#e2e8f0",
477
531
  headingColor: "#f8fafc",
478
532
  codeColor: "#a5f3fc",
@@ -485,6 +539,17 @@ var DEFAULT_THEME = {
485
539
  linkColor: "#38bdf8",
486
540
  footnoteColor: "#38bdf8",
487
541
  mathFallbackColor: "#fcd34d",
542
+ markHighlightColor: "rgba(250, 204, 21, 0.35)",
543
+ containerColors: {
544
+ note: "#38bdf8",
545
+ info: "#38bdf8",
546
+ tip: "#4ade80",
547
+ warning: "#fbbf24",
548
+ danger: "#f87171",
549
+ caution: "#f87171"
550
+ },
551
+ containerDefaultColor: "#94a3b8",
552
+ containerBgColor: "rgba(148, 163, 184, 0.08)",
488
553
  syntaxKeywordColor: "#c084fc",
489
554
  syntaxStringColor: "#86efac",
490
555
  syntaxCommentColor: "#64748b",
@@ -496,6 +561,10 @@ var DEFAULT_THEME = {
496
561
  codeFontSize: 15,
497
562
  tableFontSize: 14,
498
563
  footnoteMarkerScale: 0.75,
564
+ subscriptScale: 0.75,
565
+ subscriptShift: -0.15,
566
+ superscriptScale: 0.75,
567
+ superscriptShift: 0.2,
499
568
  codeLineHeight: 24,
500
569
  bodyLineHeight: 24,
501
570
  blockGap: 16,
@@ -506,6 +575,10 @@ var DEFAULT_THEME = {
506
575
  quoteIndent: 16,
507
576
  quoteBorderWidth: 4,
508
577
  quoteInnerGap: 8,
578
+ containerIndent: 16,
579
+ containerBorderWidth: 4,
580
+ containerInnerGap: 8,
581
+ containerRadius: 8,
509
582
  imageRadius: 8,
510
583
  inlineImageScale: 1.15
511
584
  };
@@ -528,6 +601,171 @@ function headingSize(theme, depth) {
528
601
  const idx = Math.min(Math.max(depth, 1) - 1, sizes.length - 1);
529
602
  return sizes[idx] ?? theme.fontSize;
530
603
  }
604
+ function containerColor(theme, kind) {
605
+ if (kind === void 0) return theme.containerDefaultColor;
606
+ return theme.containerColors[kind.toLowerCase()] ?? theme.containerDefaultColor;
607
+ }
608
+
609
+ // src/markdown-presets.ts
610
+ var GITHUB_DARK = {
611
+ textColor: "#e6edf3",
612
+ headingColor: "#e6edf3",
613
+ codeColor: "#a5d6ff",
614
+ // Solid dark panel — not a translucent overlay since the canvas bg is dark.
615
+ codeBgColor: "#161b22",
616
+ quoteBorderColor: "#30363d",
617
+ hrColor: "#30363d",
618
+ tableBgColor: "#010409",
619
+ tableHeaderBgColor: "#161b22",
620
+ linkColor: "#58a6ff",
621
+ mathFallbackColor: "#e3b341",
622
+ markHighlightColor: "rgba(187, 128, 9, 0.4)",
623
+ containerColors: {
624
+ note: "#58a6ff",
625
+ info: "#58a6ff",
626
+ tip: "#3fb950",
627
+ warning: "#d29922",
628
+ danger: "#f85149",
629
+ caution: "#f85149"
630
+ },
631
+ containerDefaultColor: "#8b949e",
632
+ containerBgColor: "rgba(139, 148, 158, 0.08)",
633
+ // GitHub Dark Default syntax (Primer primitives / rouge github dark palette):
634
+ // keyword = P_RED_3 #ff7b72, string = P_BLUE_1 #a5d6ff,
635
+ // comment = P_GRAY_3 #8b949e, number = P_BLUE_2 #79c0ff.
636
+ syntaxKeywordColor: "#ff7b72",
637
+ syntaxStringColor: "#a5d6ff",
638
+ syntaxCommentColor: "#8b949e",
639
+ syntaxNumberColor: "#79c0ff"
640
+ };
641
+ var GITHUB_LIGHT = {
642
+ textColor: "#1f2328",
643
+ headingColor: "#1f2328",
644
+ codeColor: "#0550ae",
645
+ codeBgColor: "#f6f8fa",
646
+ quoteBorderColor: "#0969da",
647
+ hrColor: "#d0d7de",
648
+ tableBgColor: "#ffffff",
649
+ tableHeaderBgColor: "#eaeef2",
650
+ linkColor: "#0969da",
651
+ mathFallbackColor: "#9a6700",
652
+ markHighlightColor: "rgba(210, 153, 34, 0.25)",
653
+ containerColors: {
654
+ note: "#0969da",
655
+ info: "#0969da",
656
+ tip: "#1a7f37",
657
+ warning: "#9a6700",
658
+ danger: "#cf222e",
659
+ caution: "#cf222e"
660
+ },
661
+ containerDefaultColor: "#59636e",
662
+ containerBgColor: "rgba(208, 215, 222, 0.2)",
663
+ // GitHub Light Default syntax (Primer primitives / rouge github light palette):
664
+ // keyword = P_RED_5 #cf222e, string = P_BLUE_8 #0a3069,
665
+ // comment = P_GRAY_5 #6e7781, number = P_BLUE_6 #0550ae.
666
+ syntaxKeywordColor: "#cf222e",
667
+ syntaxStringColor: "#0a3069",
668
+ syntaxCommentColor: "#6e7781",
669
+ syntaxNumberColor: "#0550ae"
670
+ };
671
+ var DRACULA = {
672
+ textColor: "#f8f8f2",
673
+ headingColor: "#bd93f9",
674
+ codeColor: "#50fa7b",
675
+ codeBgColor: "#282a36",
676
+ quoteBorderColor: "#6272a4",
677
+ hrColor: "rgba(98, 114, 164, 0.4)",
678
+ tableBgColor: "rgba(40, 42, 54, 0.6)",
679
+ tableHeaderBgColor: "rgba(68, 71, 90, 0.5)",
680
+ linkColor: "#8be9fd",
681
+ mathFallbackColor: "#ffb86c",
682
+ markHighlightColor: "rgba(241, 250, 140, 0.3)",
683
+ containerColors: {
684
+ note: "#8be9fd",
685
+ info: "#8be9fd",
686
+ tip: "#50fa7b",
687
+ warning: "#ffb86c",
688
+ danger: "#ff5555",
689
+ caution: "#ff5555"
690
+ },
691
+ containerDefaultColor: "#6272a4",
692
+ containerBgColor: "rgba(98, 114, 164, 0.1)",
693
+ // Dracula syntax: keywords=Pink (#ff79c6), strings=Yellow (#f1fa8c),
694
+ // comments=Comment (#6272a4), numbers/constants=Orange (#ffb86c).
695
+ syntaxKeywordColor: "#ff79c6",
696
+ syntaxStringColor: "#f1fa8c",
697
+ syntaxCommentColor: "#6272a4",
698
+ syntaxNumberColor: "#ffb86c"
699
+ };
700
+ var SOLARIZED_DARK = {
701
+ textColor: "#839496",
702
+ headingColor: "#93a1a1",
703
+ codeColor: "#2aa198",
704
+ codeBgColor: "#073642",
705
+ quoteBorderColor: "#6c71c4",
706
+ hrColor: "rgba(88, 110, 117, 0.4)",
707
+ tableBgColor: "rgba(0, 43, 54, 0.6)",
708
+ tableHeaderBgColor: "rgba(7, 54, 66, 0.8)",
709
+ linkColor: "#268bd2",
710
+ mathFallbackColor: "#b58900",
711
+ markHighlightColor: "rgba(181, 137, 0, 0.3)",
712
+ containerColors: {
713
+ note: "#268bd2",
714
+ info: "#268bd2",
715
+ tip: "#859900",
716
+ warning: "#b58900",
717
+ danger: "#dc322f",
718
+ caution: "#dc322f"
719
+ },
720
+ containerDefaultColor: "#586e75",
721
+ containerBgColor: "rgba(88, 110, 117, 0.1)",
722
+ syntaxKeywordColor: "#859900",
723
+ syntaxStringColor: "#2aa198",
724
+ syntaxCommentColor: "#586e75",
725
+ syntaxNumberColor: "#b58900"
726
+ };
727
+ var SOLARIZED_LIGHT = {
728
+ textColor: "#657b83",
729
+ headingColor: "#586e75",
730
+ codeColor: "#2aa198",
731
+ codeBgColor: "#eee8d5",
732
+ quoteBorderColor: "#6c71c4",
733
+ hrColor: "rgba(147, 161, 161, 0.5)",
734
+ tableBgColor: "#fdf6e3",
735
+ tableHeaderBgColor: "#e0dac9",
736
+ linkColor: "#268bd2",
737
+ mathFallbackColor: "#cb4b16",
738
+ markHighlightColor: "rgba(181, 137, 0, 0.2)",
739
+ containerColors: {
740
+ note: "#268bd2",
741
+ info: "#268bd2",
742
+ tip: "#859900",
743
+ warning: "#b58900",
744
+ danger: "#dc322f",
745
+ caution: "#dc322f"
746
+ },
747
+ containerDefaultColor: "#93a1a1",
748
+ containerBgColor: "rgba(147, 161, 161, 0.15)",
749
+ // Syntax accent colors are identical in light and dark Solarized.
750
+ syntaxKeywordColor: "#859900",
751
+ syntaxStringColor: "#2aa198",
752
+ syntaxCommentColor: "#93a1a1",
753
+ syntaxNumberColor: "#b58900"
754
+ };
755
+ var PRESET_THEMES = {
756
+ githubDark: GITHUB_DARK,
757
+ githubLight: GITHUB_LIGHT,
758
+ dracula: DRACULA,
759
+ solarizedDark: SOLARIZED_DARK,
760
+ solarizedLight: SOLARIZED_LIGHT
761
+ };
762
+ function isPresetName(value) {
763
+ return typeof value === "string" && Object.prototype.hasOwnProperty.call(PRESET_THEMES, value);
764
+ }
765
+ function resolvePresetTheme(theme) {
766
+ if (isPresetName(theme)) return resolveTheme(PRESET_THEMES[theme]);
767
+ return resolveTheme(theme);
768
+ }
531
769
 
532
770
  // src/markdown-code.ts
533
771
  var KEYWORD_SETS = {
@@ -800,16 +1038,19 @@ var CodeBlock = class extends UIComponent {
800
1038
  codeFont;
801
1039
  selectable;
802
1040
  /**
803
- * @param theme Any subset of {@link MarkdownTheme}; missing keys fall back to
804
- * `DEFAULT_THEME` in `./theme`. Accepting a partial theme keeps callers that were
805
- * written against an earlier, smaller `MarkdownTheme` working — this class
806
- * is public API, and a hand-built theme literal would otherwise start
807
- * throwing `lineHeight must be a positive finite number` the moment a new
808
- * size key was added.
1041
+ * @param theme Any subset of {@link MarkdownTheme}, or the name of a built-in
1042
+ * preset (see {@link MarkdownThemePresetName}). Accepting a partial theme
1043
+ * keeps callers that were written against an earlier, smaller
1044
+ * `MarkdownTheme` working — this class is public API, and a hand-built
1045
+ * theme literal would otherwise start throwing
1046
+ * `lineHeight must be a positive finite number` the moment a new size key
1047
+ * was added. Resolved through {@link resolvePresetTheme} so `CodeBlock` can
1048
+ * be constructed directly with a preset name without going through
1049
+ * `Markdown`.
809
1050
  */
810
1051
  constructor(code, lang, maxWidth, theme, selectable = true) {
811
1052
  super();
812
- const resolved = resolveTheme(theme);
1053
+ const resolved = resolvePresetTheme(theme);
813
1054
  this.source = code;
814
1055
  this.lang = lang;
815
1056
  this.theme = resolved;
@@ -1026,10 +1267,295 @@ function codeAtlas() {
1026
1267
  return lastCodeAtlas;
1027
1268
  }
1028
1269
 
1270
+ // src/markdown-container.ts
1271
+ var OPEN_RE = /^ {0,3}:::([A-Za-z][\w-]*)?[ \t]*(?:\n|$)/;
1272
+ var FENCE_LINE_RE = /^ {0,3}:::([A-Za-z][\w-]*)?[ \t]*$/;
1273
+ function findBodyEnd(text) {
1274
+ let depth = 1;
1275
+ let offset = 0;
1276
+ while (offset < text.length) {
1277
+ const lineEnd = text.indexOf("\n", offset);
1278
+ const line = lineEnd === -1 ? text.slice(offset) : text.slice(offset, lineEnd);
1279
+ const match = FENCE_LINE_RE.exec(line);
1280
+ if (match) {
1281
+ if (match[1] !== void 0) {
1282
+ depth++;
1283
+ } else {
1284
+ depth--;
1285
+ if (depth === 0) return offset;
1286
+ }
1287
+ }
1288
+ if (lineEnd === -1) break;
1289
+ offset = lineEnd + 1;
1290
+ }
1291
+ return -1;
1292
+ }
1293
+ var CONTAINER_EXTENSIONS = [
1294
+ {
1295
+ name: "container",
1296
+ level: "block",
1297
+ tokenizer(src) {
1298
+ const open = OPEN_RE.exec(src);
1299
+ if (!open) return void 0;
1300
+ const afterOpen = src.slice(open[0].length);
1301
+ const bodyEnd = findBodyEnd(afterOpen);
1302
+ if (bodyEnd < 0) return void 0;
1303
+ const body = afterOpen.slice(0, bodyEnd);
1304
+ const closeLineEnd = afterOpen.indexOf("\n", bodyEnd);
1305
+ const closeEnd = closeLineEnd === -1 ? afterOpen.length : closeLineEnd + 1;
1306
+ const raw = open[0] + afterOpen.slice(0, closeEnd);
1307
+ const tokens = this.lexer.blockTokens(body, []);
1308
+ return {
1309
+ type: "container",
1310
+ raw,
1311
+ kind: open[1],
1312
+ tokens
1313
+ };
1314
+ },
1315
+ renderer(token) {
1316
+ return token.raw;
1317
+ }
1318
+ }
1319
+ ];
1320
+
1321
+ // src/markdown-emoji.ts
1322
+ var EMOJI_MAP = Object.freeze({
1323
+ // Smileys
1324
+ grinning: "\u{1F600}",
1325
+ smiley: "\u{1F603}",
1326
+ smile: "\u{1F604}",
1327
+ grin: "\u{1F601}",
1328
+ laughing: "\u{1F606}",
1329
+ satisfied: "\u{1F606}",
1330
+ sweat_smile: "\u{1F605}",
1331
+ rofl: "\u{1F923}",
1332
+ joy: "\u{1F602}",
1333
+ slightly_smiling_face: "\u{1F642}",
1334
+ upside_down_face: "\u{1F643}",
1335
+ wink: "\u{1F609}",
1336
+ blush: "\u{1F60A}",
1337
+ innocent: "\u{1F607}",
1338
+ heart_eyes: "\u{1F60D}",
1339
+ star_struck: "\u{1F929}",
1340
+ kissing_heart: "\u{1F618}",
1341
+ yum: "\u{1F60B}",
1342
+ stuck_out_tongue: "\u{1F61B}",
1343
+ stuck_out_tongue_winking_eye: "\u{1F61C}",
1344
+ stuck_out_tongue_closed_eyes: "\u{1F61D}",
1345
+ hugs: "\u{1F917}",
1346
+ thinking: "\u{1F914}",
1347
+ neutral_face: "\u{1F610}",
1348
+ expressionless: "\u{1F611}",
1349
+ no_mouth: "\u{1F636}",
1350
+ smirk: "\u{1F60F}",
1351
+ unamused: "\u{1F612}",
1352
+ roll_eyes: "\u{1F644}",
1353
+ grimacing: "\u{1F62C}",
1354
+ relieved: "\u{1F60C}",
1355
+ pensive: "\u{1F614}",
1356
+ sleepy: "\u{1F62A}",
1357
+ sleeping: "\u{1F634}",
1358
+ mask: "\u{1F637}",
1359
+ dizzy_face: "\u{1F635}",
1360
+ sunglasses: "\u{1F60E}",
1361
+ nerd_face: "\u{1F913}",
1362
+ confused: "\u{1F615}",
1363
+ worried: "\u{1F61F}",
1364
+ open_mouth: "\u{1F62E}",
1365
+ hushed: "\u{1F62F}",
1366
+ astonished: "\u{1F632}",
1367
+ flushed: "\u{1F633}",
1368
+ pleading_face: "\u{1F97A}",
1369
+ fearful: "\u{1F628}",
1370
+ cold_sweat: "\u{1F630}",
1371
+ cry: "\u{1F622}",
1372
+ sob: "\u{1F62D}",
1373
+ scream: "\u{1F631}",
1374
+ disappointed: "\u{1F61E}",
1375
+ sweat: "\u{1F613}",
1376
+ weary: "\u{1F629}",
1377
+ tired_face: "\u{1F62B}",
1378
+ triumph: "\u{1F624}",
1379
+ rage: "\u{1F621}",
1380
+ angry: "\u{1F620}",
1381
+ smiling_imp: "\u{1F608}",
1382
+ imp: "\u{1F47F}",
1383
+ skull: "\u{1F480}",
1384
+ clown_face: "\u{1F921}",
1385
+ poop: "\u{1F4A9}",
1386
+ ghost: "\u{1F47B}",
1387
+ alien: "\u{1F47D}",
1388
+ robot: "\u{1F916}",
1389
+ // Gestures / body
1390
+ thumbsup: "\u{1F44D}",
1391
+ "+1": "\u{1F44D}",
1392
+ thumbsdown: "\u{1F44E}",
1393
+ "-1": "\u{1F44E}",
1394
+ punch: "\u{1F44A}",
1395
+ fist: "\u270A",
1396
+ clap: "\u{1F44F}",
1397
+ raised_hands: "\u{1F64C}",
1398
+ open_hands: "\u{1F450}",
1399
+ handshake: "\u{1F91D}",
1400
+ pray: "\u{1F64F}",
1401
+ muscle: "\u{1F4AA}",
1402
+ eyes: "\u{1F440}",
1403
+ wave: "\u{1F44B}",
1404
+ point_up: "\u261D\uFE0F",
1405
+ point_down: "\u{1F447}",
1406
+ point_left: "\u{1F448}",
1407
+ point_right: "\u{1F449}",
1408
+ ok_hand: "\u{1F44C}",
1409
+ v: "\u270C\uFE0F",
1410
+ crossed_fingers: "\u{1F91E}",
1411
+ // Hearts / symbols
1412
+ heart: "\u2764\uFE0F",
1413
+ broken_heart: "\u{1F494}",
1414
+ two_hearts: "\u{1F495}",
1415
+ sparkling_heart: "\u{1F496}",
1416
+ heartpulse: "\u{1F497}",
1417
+ blue_heart: "\u{1F499}",
1418
+ green_heart: "\u{1F49A}",
1419
+ yellow_heart: "\u{1F49B}",
1420
+ orange_heart: "\u{1F9E1}",
1421
+ purple_heart: "\u{1F49C}",
1422
+ black_heart: "\u{1F5A4}",
1423
+ white_heart: "\u{1F90D}",
1424
+ 100: "\u{1F4AF}",
1425
+ boom: "\u{1F4A5}",
1426
+ collision: "\u{1F4A5}",
1427
+ dizzy: "\u{1F4AB}",
1428
+ sweat_drops: "\u{1F4A6}",
1429
+ dash: "\u{1F4A8}",
1430
+ zzz: "\u{1F4A4}",
1431
+ fire: "\u{1F525}",
1432
+ sparkles: "\u2728",
1433
+ star: "\u2B50",
1434
+ star2: "\u{1F31F}",
1435
+ tada: "\u{1F389}",
1436
+ confetti_ball: "\u{1F38A}",
1437
+ balloon: "\u{1F388}",
1438
+ gift: "\u{1F381}",
1439
+ rocket: "\u{1F680}",
1440
+ dart: "\u{1F3AF}",
1441
+ trophy: "\u{1F3C6}",
1442
+ warning: "\u26A0\uFE0F",
1443
+ no_entry_sign: "\u{1F6AB}",
1444
+ white_check_mark: "\u2705",
1445
+ x: "\u274C",
1446
+ heavy_check_mark: "\u2714\uFE0F",
1447
+ question: "\u2753",
1448
+ exclamation: "\u2757",
1449
+ bulb: "\u{1F4A1}",
1450
+ bell: "\u{1F514}",
1451
+ // Tech / objects
1452
+ computer: "\u{1F4BB}",
1453
+ iphone: "\u{1F4F1}",
1454
+ link: "\u{1F517}",
1455
+ lock: "\u{1F512}",
1456
+ unlock: "\u{1F513}",
1457
+ key: "\u{1F511}",
1458
+ mag: "\u{1F50D}",
1459
+ bug: "\u{1F41B}",
1460
+ package: "\u{1F4E6}",
1461
+ memo: "\u{1F4DD}",
1462
+ pencil2: "\u270F\uFE0F",
1463
+ book: "\u{1F4D6}",
1464
+ books: "\u{1F4DA}",
1465
+ pushpin: "\u{1F4CC}",
1466
+ paperclip: "\u{1F4CE}",
1467
+ calendar: "\u{1F4C5}",
1468
+ file_folder: "\u{1F4C1}",
1469
+ hammer: "\u{1F528}",
1470
+ wrench: "\u{1F527}",
1471
+ gear: "\u2699\uFE0F",
1472
+ chart_with_upwards_trend: "\u{1F4C8}",
1473
+ chart_with_downwards_trend: "\u{1F4C9}",
1474
+ bar_chart: "\u{1F4CA}",
1475
+ construction: "\u{1F6A7}",
1476
+ hourglass: "\u23F3",
1477
+ stopwatch: "\u23F1\uFE0F",
1478
+ // Food / nature / misc
1479
+ pizza: "\u{1F355}",
1480
+ coffee: "\u2615",
1481
+ beer: "\u{1F37A}",
1482
+ cake: "\u{1F382}",
1483
+ birthday: "\u{1F382}",
1484
+ apple: "\u{1F34E}",
1485
+ rainbow: "\u{1F308}",
1486
+ sun_with_face: "\u{1F31E}",
1487
+ crescent_moon: "\u{1F319}",
1488
+ earth_americas: "\u{1F30E}",
1489
+ dog: "\u{1F436}",
1490
+ cat: "\u{1F431}",
1491
+ fox_face: "\u{1F98A}",
1492
+ bear: "\u{1F43B}",
1493
+ panda_face: "\u{1F43C}",
1494
+ monkey_face: "\u{1F435}",
1495
+ see_no_evil: "\u{1F648}",
1496
+ hear_no_evil: "\u{1F649}",
1497
+ speak_no_evil: "\u{1F64A}"
1498
+ });
1499
+ var EMOJI_RE = /^:([A-Za-z0-9_+-]+):/;
1500
+ var EMOJI_EXTENSIONS = [
1501
+ {
1502
+ name: "emoji",
1503
+ level: "inline",
1504
+ // Without `start()`, marked's plain-text fallback tokenizer (`inlineText`)
1505
+ // never stops at `:` — see `markdown-superscript.ts`'s identical note for
1506
+ // `^`, which applies here verbatim.
1507
+ start(src) {
1508
+ return src.match(/:/)?.index;
1509
+ },
1510
+ tokenizer(src) {
1511
+ const match = EMOJI_RE.exec(src);
1512
+ if (!match) return void 0;
1513
+ const resolved = EMOJI_MAP[match[1]];
1514
+ if (resolved === void 0) return void 0;
1515
+ return {
1516
+ type: "emoji",
1517
+ raw: match[0],
1518
+ text: resolved
1519
+ };
1520
+ },
1521
+ renderer(token) {
1522
+ return token.raw;
1523
+ }
1524
+ }
1525
+ ];
1526
+
1029
1527
  // src/markdown-footnote.ts
1030
1528
  var LABEL = "([^\\]\\s]+)";
1031
1529
  var REF_RE = new RegExp(`^\\[\\^${LABEL}\\]`);
1032
- var DEF_RE = new RegExp(`^ {0,3}\\[\\^${LABEL}\\]:[ \\t]*([^\\n]*)(?:\\n|$)`);
1530
+ var HEADER_RE = new RegExp(`^ {0,3}\\[\\^${LABEL}\\]:[ \\t]*([^\\n]*)\\n?`);
1531
+ function isBlankLine(line) {
1532
+ return /^[ \t]*$/.test(line);
1533
+ }
1534
+ var CONT_LINE_RE = /^(?: {4}| {0,3}\t)/;
1535
+ function consumeContinuation(rest) {
1536
+ let offset = 0;
1537
+ for (; ; ) {
1538
+ let probe = offset;
1539
+ for (; ; ) {
1540
+ const lineEnd2 = rest.indexOf("\n", probe);
1541
+ if (lineEnd2 === -1) return finalize(offset, true);
1542
+ const line2 = rest.slice(probe, lineEnd2);
1543
+ if (!isBlankLine(line2)) break;
1544
+ probe = lineEnd2 + 1;
1545
+ }
1546
+ const lineEnd = rest.indexOf("\n", probe);
1547
+ const lineWithNl = lineEnd === -1 ? rest.slice(probe) : rest.slice(probe, lineEnd + 1);
1548
+ const line = lineEnd === -1 ? rest.slice(probe) : rest.slice(probe, lineEnd);
1549
+ if (!CONT_LINE_RE.test(line)) return finalize(offset, false);
1550
+ offset = probe + lineWithNl.length;
1551
+ if (lineEnd === -1) return finalize(offset, true);
1552
+ }
1553
+ function finalize(end, open) {
1554
+ const committedRaw = rest.slice(0, end);
1555
+ const body = committedRaw.split("\n").map((line) => isBlankLine(line) ? "" : line.replace(CONT_LINE_RE, "")).join("\n");
1556
+ return { raw: committedRaw, body, open };
1557
+ }
1558
+ }
1033
1559
  var FOOTNOTE_EXTENSIONS = [
1034
1560
  {
1035
1561
  name: "footnoteRef",
@@ -1053,13 +1579,112 @@ var FOOTNOTE_EXTENSIONS = [
1053
1579
  name: "footnoteDef",
1054
1580
  level: "block",
1055
1581
  tokenizer(src) {
1056
- const match = DEF_RE.exec(src);
1582
+ const header = HEADER_RE.exec(src);
1583
+ if (!header) return void 0;
1584
+ const rest = src.slice(header[0].length);
1585
+ const cont = consumeContinuation(rest);
1586
+ const tokens = cont.body.trim() ? this.lexer.blockTokens(cont.body, []) : [];
1587
+ return {
1588
+ type: "footnoteDef",
1589
+ raw: header[0] + cont.raw,
1590
+ label: header[1],
1591
+ body: header[2],
1592
+ tokens
1593
+ };
1594
+ },
1595
+ renderer(token) {
1596
+ return token.raw;
1597
+ }
1598
+ }
1599
+ ];
1600
+ function footnoteMarker(label) {
1601
+ return `[${label}]`;
1602
+ }
1603
+
1604
+ // src/markdown-ins-mark.ts
1605
+ var INS_RE = /^\+\+(?!\s)((?:\\[\s\S]|(?!\+\+)[\s\S])+?)(?<!\s)\+\+/;
1606
+ var MARK_RE = /^==(?!\s)((?:\\[\s\S]|(?!==)[\s\S])+?)(?<!\s)==/;
1607
+ var INS_MARK_EXTENSIONS = [
1608
+ {
1609
+ name: "ins",
1610
+ level: "inline",
1611
+ // Without `start()`, marked's plain-text fallback tokenizer (`inlineText`)
1612
+ // never stops at `+` — see `markdown-superscript.ts`'s identical note for
1613
+ // `^`, which applies here verbatim.
1614
+ start(src) {
1615
+ return src.match(/(?<!\\)\+\+(?!\s)/)?.index;
1616
+ },
1617
+ tokenizer(src) {
1618
+ const match = INS_RE.exec(src);
1057
1619
  if (match) {
1058
1620
  return {
1059
- type: "footnoteDef",
1621
+ type: "ins",
1060
1622
  raw: match[0],
1061
- label: match[1],
1062
- body: match[2]
1623
+ // Unescape `\x` -> `x`, the same reason `SUP_RE`'s tokenizer does:
1624
+ // `collectSpans`' `decodeEntities` only resolves HTML entities, not
1625
+ // backslash escapes.
1626
+ text: match[1].replace(/\\(.)/g, "$1")
1627
+ };
1628
+ }
1629
+ return void 0;
1630
+ },
1631
+ renderer(token) {
1632
+ return token.raw;
1633
+ }
1634
+ },
1635
+ {
1636
+ name: "mark",
1637
+ level: "inline",
1638
+ start(src) {
1639
+ return src.match(/(?<!\\)==(?!\s)/)?.index;
1640
+ },
1641
+ tokenizer(src) {
1642
+ const match = MARK_RE.exec(src);
1643
+ if (match) {
1644
+ return {
1645
+ type: "mark",
1646
+ raw: match[0],
1647
+ text: match[1].replace(/\\(.)/g, "$1")
1648
+ };
1649
+ }
1650
+ return void 0;
1651
+ },
1652
+ renderer(token) {
1653
+ return token.raw;
1654
+ }
1655
+ }
1656
+ ];
1657
+
1658
+ // src/markdown-superscript.ts
1659
+ var SUP_RE = /^\^((?:\\[\s\S]|[^\s^\\])+)\^/;
1660
+ var SUPERSCRIPT_EXTENSIONS = [
1661
+ {
1662
+ name: "sup",
1663
+ level: "inline",
1664
+ // Without `start()`, marked's plain-text fallback tokenizer (`inlineText`)
1665
+ // never stops at `^` — it is not one of the characters its own regex treats
1666
+ // as a boundary, unlike `[` (link) or `` ` `` (codespan) — so it swallows an
1667
+ // entire `19^th^ century` as one `text` token before this extension is ever
1668
+ // tried at the right offset. `inlineMath` hits the identical problem for `$`
1669
+ // and solves it the same way; verified against marked@18.0.7 that inline
1670
+ // `start()` only clips the span handed to `inlineText`, not paragraph
1671
+ // grouping — the hazard `DEC-01KZDGCP` documents is specific to a *block*
1672
+ // `start()` retroactively re-grouping paragraphs, which does not apply here.
1673
+ start(src) {
1674
+ return src.match(/(?<!\\)\^(?!\s)/)?.index;
1675
+ },
1676
+ tokenizer(src) {
1677
+ const match = SUP_RE.exec(src);
1678
+ if (match) {
1679
+ return {
1680
+ type: "sup",
1681
+ raw: match[0],
1682
+ // Unescape `\x` -> `x` for any character (the content regex admits
1683
+ // `\` followed by anything) so `x^a\^b^` carries a literal caret
1684
+ // rather than a visible backslash. `collectSpans`' `decodeEntities`
1685
+ // only handles HTML entities, not backslash escapes, so this token
1686
+ // resolves its own before `text` is set.
1687
+ text: match[1].replace(/\\(.)/g, "$1")
1063
1688
  };
1064
1689
  }
1065
1690
  return void 0;
@@ -1069,9 +1694,6 @@ var FOOTNOTE_EXTENSIONS = [
1069
1694
  }
1070
1695
  }
1071
1696
  ];
1072
- function footnoteMarker(label) {
1073
- return `[${label}]`;
1074
- }
1075
1697
 
1076
1698
  // src/markdown-math.ts
1077
1699
  var mathConverter = null;
@@ -1371,30 +1993,59 @@ function expectedImageParagraphChildren(tokens) {
1371
1993
  function decodeEntities(text) {
1372
1994
  return text.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&amp;/g, "&");
1373
1995
  }
1374
- function collectSpans(tokens, inherited, theme, out, blockFontSize) {
1996
+ function applyTypography(text) {
1997
+ let out = text;
1998
+ out = out.replace(/\(tm\)/gi, "\u2122");
1999
+ out = out.replace(/\(c\)/gi, "\xA9");
2000
+ out = out.replace(/\(r\)/gi, "\xAE");
2001
+ out = out.replace(/---/g, "\u2014");
2002
+ out = out.replace(/--/g, "\u2013");
2003
+ out = out.replace(/\.{3}/g, "\u2026");
2004
+ out = out.replace(/([A-Za-z])'([A-Za-z])/g, "$1\u2019$2");
2005
+ out = out.replace(/"([^"\n]*)"/g, "\u201C$1\u201D");
2006
+ out = out.replace(/'([^'\n]*)'/g, "\u2018$1\u2019");
2007
+ return out;
2008
+ }
2009
+ function decodeProse(text, theme) {
2010
+ const decoded = decodeEntities(text);
2011
+ return theme.typographer ? applyTypography(decoded) : decoded;
2012
+ }
2013
+ var NO_ABBREVIATIONS = /* @__PURE__ */ new Map();
2014
+ function emitProse(text, style, abbr, out) {
2015
+ if (!text) return;
2016
+ if (abbr.size === 0) {
2017
+ out.push({ text, style });
2018
+ return;
2019
+ }
2020
+ const terms = [...abbr.keys()].sort((a, b) => b.length - a.length);
2021
+ const pattern = terms.map((t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|");
2022
+ const re = new RegExp(`\\b(?:${pattern})\\b`, "g");
2023
+ let last = 0;
2024
+ for (let match = re.exec(text); match !== null; match = re.exec(text)) {
2025
+ if (match.index > last) out.push({ text: text.slice(last, match.index), style });
2026
+ out.push({ text: match[0], style: { ...style, abbrTitle: abbr.get(match[0]) } });
2027
+ last = match.index + match[0].length;
2028
+ }
2029
+ if (last < text.length) out.push({ text: text.slice(last), style });
2030
+ }
2031
+ function collectSpans(tokens, inherited, theme, out, blockFontSize, abbr = NO_ABBREVIATIONS) {
1375
2032
  for (const token of tokens) {
1376
2033
  switch (token.type) {
1377
2034
  case "strong": {
1378
2035
  const t = token;
1379
2036
  if (t.tokens) {
1380
- collectSpans(t.tokens, { ...inherited, bold: true }, theme, out, blockFontSize);
2037
+ collectSpans(t.tokens, { ...inherited, bold: true }, theme, out, blockFontSize, abbr);
1381
2038
  } else {
1382
- out.push({
1383
- text: decodeEntities(t.text),
1384
- style: { ...inherited, bold: true }
1385
- });
2039
+ emitProse(decodeProse(t.text, theme), { ...inherited, bold: true }, abbr, out);
1386
2040
  }
1387
2041
  break;
1388
2042
  }
1389
2043
  case "em": {
1390
2044
  const t = token;
1391
2045
  if (t.tokens) {
1392
- collectSpans(t.tokens, { ...inherited, italic: true }, theme, out, blockFontSize);
2046
+ collectSpans(t.tokens, { ...inherited, italic: true }, theme, out, blockFontSize, abbr);
1393
2047
  } else {
1394
- out.push({
1395
- text: decodeEntities(t.text),
1396
- style: { ...inherited, italic: true }
1397
- });
2048
+ emitProse(decodeProse(t.text, theme), { ...inherited, italic: true }, abbr, out);
1398
2049
  }
1399
2050
  break;
1400
2051
  }
@@ -1402,23 +2053,30 @@ function collectSpans(tokens, inherited, theme, out, blockFontSize) {
1402
2053
  const t = token;
1403
2054
  const isStrikethrough = t.raw?.startsWith("~~") ?? true;
1404
2055
  if (!isStrikethrough) {
1405
- const plain = Object.keys(inherited).length > 0 ? inherited : void 0;
1406
- out.push({ text: "~", style: plain });
2056
+ const runSize = inherited.fontSize ?? blockFontSize ?? theme.fontSize;
2057
+ const subStyle = {
2058
+ ...inherited,
2059
+ fontSize: runSize * theme.subscriptScale,
2060
+ baselineShift: runSize * theme.subscriptShift
2061
+ };
1407
2062
  if (t.tokens) {
1408
- collectSpans(t.tokens, inherited, theme, out, blockFontSize);
2063
+ collectSpans(t.tokens, subStyle, theme, out, blockFontSize, abbr);
1409
2064
  } else {
1410
- out.push({ text: decodeEntities(t.text), style: plain });
2065
+ emitProse(decodeProse(t.text, theme), subStyle, abbr, out);
1411
2066
  }
1412
- out.push({ text: "~", style: plain });
1413
2067
  break;
1414
2068
  }
1415
2069
  if (t.tokens) {
1416
- collectSpans(t.tokens, { ...inherited, lineThrough: true }, theme, out, blockFontSize);
2070
+ collectSpans(
2071
+ t.tokens,
2072
+ { ...inherited, lineThrough: true },
2073
+ theme,
2074
+ out,
2075
+ blockFontSize,
2076
+ abbr
2077
+ );
1417
2078
  } else {
1418
- out.push({
1419
- text: decodeEntities(t.text),
1420
- style: { ...inherited, lineThrough: true }
1421
- });
2079
+ emitProse(decodeProse(t.text, theme), { ...inherited, lineThrough: true }, abbr, out);
1422
2080
  }
1423
2081
  break;
1424
2082
  }
@@ -1518,11 +2176,48 @@ function collectSpans(tokens, inherited, theme, out, blockFontSize) {
1518
2176
  style: {
1519
2177
  ...inherited,
1520
2178
  fontSize: runSize * theme.footnoteMarkerScale,
2179
+ baselineShift: runSize * theme.superscriptShift,
1521
2180
  color: theme.footnoteColor
1522
2181
  }
1523
2182
  });
1524
2183
  break;
1525
2184
  }
2185
+ case "sup": {
2186
+ const t = token;
2187
+ const runSize = inherited.fontSize ?? blockFontSize ?? theme.fontSize;
2188
+ emitProse(
2189
+ decodeProse(t.text, theme),
2190
+ {
2191
+ ...inherited,
2192
+ fontSize: runSize * theme.superscriptScale,
2193
+ baselineShift: runSize * theme.superscriptShift
2194
+ },
2195
+ abbr,
2196
+ out
2197
+ );
2198
+ break;
2199
+ }
2200
+ case "ins": {
2201
+ const t = token;
2202
+ emitProse(decodeProse(t.text, theme), { ...inherited, underline: true }, abbr, out);
2203
+ break;
2204
+ }
2205
+ case "mark": {
2206
+ const t = token;
2207
+ emitProse(
2208
+ decodeProse(t.text, theme),
2209
+ { ...inherited, highlightColor: theme.markHighlightColor },
2210
+ abbr,
2211
+ out
2212
+ );
2213
+ break;
2214
+ }
2215
+ case "emoji": {
2216
+ const t = token;
2217
+ const style = Object.keys(inherited).length > 0 ? inherited : void 0;
2218
+ out.push({ text: t.text, style });
2219
+ break;
2220
+ }
1526
2221
  case "link": {
1527
2222
  const t = token;
1528
2223
  const linkStyle = {
@@ -1530,33 +2225,32 @@ function collectSpans(tokens, inherited, theme, out, blockFontSize) {
1530
2225
  href: t.href,
1531
2226
  color: theme.linkColor
1532
2227
  };
1533
- if (t.tokens && t.tokens.length > 0) {
1534
- collectSpans(t.tokens, linkStyle, theme, out, blockFontSize);
2228
+ const isAutolink = !("title" in t);
2229
+ if (isAutolink) {
2230
+ out.push({ text: t.text, style: linkStyle });
2231
+ } else if (t.tokens && t.tokens.length > 0) {
2232
+ collectSpans(t.tokens, linkStyle, theme, out, blockFontSize, abbr);
1535
2233
  } else {
1536
- out.push({ text: decodeEntities(t.text), style: linkStyle });
2234
+ emitProse(decodeProse(t.text, theme), linkStyle, abbr, out);
1537
2235
  }
1538
2236
  break;
1539
2237
  }
1540
2238
  case "text": {
1541
2239
  const t = token;
1542
2240
  if ("tokens" in t && t.tokens?.length) {
1543
- collectSpans(t.tokens, inherited, theme, out, blockFontSize);
2241
+ collectSpans(t.tokens, inherited, theme, out, blockFontSize, abbr);
1544
2242
  } else {
1545
- const decoded = decodeEntities(t.text);
1546
- if (decoded) {
1547
- const style = Object.keys(inherited).length > 0 ? inherited : void 0;
1548
- out.push({ text: decoded, style });
1549
- }
2243
+ const decoded = decodeProse(t.text, theme);
2244
+ const style = Object.keys(inherited).length > 0 ? inherited : void 0;
2245
+ emitProse(decoded, style, abbr, out);
1550
2246
  }
1551
2247
  break;
1552
2248
  }
1553
2249
  default: {
1554
2250
  if ("text" in token) {
1555
- const decoded = decodeEntities(token.text);
1556
- if (decoded) {
1557
- const style = Object.keys(inherited).length > 0 ? inherited : void 0;
1558
- out.push({ text: decoded, style });
1559
- }
2251
+ const decoded = decodeProse(token.text, theme);
2252
+ const style = Object.keys(inherited).length > 0 ? inherited : void 0;
2253
+ emitProse(decoded, style, abbr, out);
1560
2254
  }
1561
2255
  break;
1562
2256
  }
@@ -1590,10 +2284,10 @@ function findUnclosedInline(text) {
1590
2284
  }
1591
2285
  return best;
1592
2286
  }
1593
- function renderInlineToRichText(tokens, fallbackText, font, color, maxWidth, theme, selectable, onLinkClick) {
2287
+ function renderInlineToRichText(tokens, fallbackText, font, color, maxWidth, theme, selectable, onLinkClick, abbr = NO_ABBREVIATIONS) {
1594
2288
  const spans = [];
1595
2289
  if (tokens && tokens.length > 0) {
1596
- collectSpans(tokens, {}, theme, spans, fontSizeFromFont(font));
2290
+ collectSpans(tokens, {}, theme, spans, fontSizeFromFont(font), abbr);
1597
2291
  }
1598
2292
  if (spans.length === 0) {
1599
2293
  spans.push({ text: decodeEntities(fallbackText) });
@@ -1608,6 +2302,53 @@ function renderInlineToRichText(tokens, fallbackText, font, color, maxWidth, the
1608
2302
  });
1609
2303
  }
1610
2304
 
2305
+ // src/markdown-fenced-registry.ts
2306
+ var renderers = /* @__PURE__ */ new Map();
2307
+ function registerFencedBlockRenderer(lang, spec) {
2308
+ const key = lang.toLowerCase();
2309
+ renderers.set(key, {
2310
+ spec,
2311
+ renderer: null,
2312
+ loadPromise: null
2313
+ });
2314
+ }
2315
+ function unregisterFencedBlockRenderer(lang) {
2316
+ const key = lang.toLowerCase();
2317
+ renderers.delete(key);
2318
+ }
2319
+ function hasFencedBlockRenderer(lang) {
2320
+ const key = lang.toLowerCase();
2321
+ return renderers.has(key);
2322
+ }
2323
+ function isFencedBlockRendererReady(lang) {
2324
+ const key = lang.toLowerCase();
2325
+ const state = renderers.get(key);
2326
+ return state?.renderer !== null && state?.renderer !== void 0;
2327
+ }
2328
+ function ensureFencedBlockRenderer(lang) {
2329
+ const key = lang.toLowerCase();
2330
+ const state = renderers.get(key);
2331
+ if (!state) return Promise.resolve();
2332
+ if (state.renderer !== null) return Promise.resolve();
2333
+ if (state.loadPromise) return state.loadPromise;
2334
+ state.loadPromise = (async () => {
2335
+ try {
2336
+ const loaded = await state.spec.load();
2337
+ state.renderer = loaded;
2338
+ } catch (e) {
2339
+ console.error(`Fenced block renderer for "${lang}" failed to load`, e);
2340
+ state.renderer = null;
2341
+ }
2342
+ })();
2343
+ return state.loadPromise;
2344
+ }
2345
+ function renderFencedBlock(source, lang, options) {
2346
+ const key = lang.toLowerCase();
2347
+ const state = renderers.get(key);
2348
+ if (!state || !state.renderer) return null;
2349
+ return state.renderer(source, lang, options);
2350
+ }
2351
+
1611
2352
  // src/Markdown.ts
1612
2353
  import { RichText as RichText2, Stack, Table, Text, Image, UIComponent as UIComponent3 } from "@vectojs/ui";
1613
2354
 
@@ -1856,7 +2597,7 @@ function tableContentOf(token) {
1856
2597
  }
1857
2598
 
1858
2599
  // src/frontMatter.ts
1859
- var OPEN_RE = /^---[ \t]*\r?\n/;
2600
+ var OPEN_RE2 = /^---[ \t]*\r?\n/;
1860
2601
  var OPENER_PREFIX_RE = /^(?:-|--|---[ \t]*\r?)$/;
1861
2602
  var KEY_RE = /^[^\s:#][^:]*:(?:[ \t].*)?$/;
1862
2603
  var CLOSE_RE = /^(?:---|\.\.\.)[ \t]*$/;
@@ -1865,7 +2606,7 @@ var NONE = { kind: "none" };
1865
2606
  var PENDING = { kind: "pending" };
1866
2607
  function scanFrontMatter(text, complete) {
1867
2608
  if (text.length === 0) return PENDING;
1868
- const open = OPEN_RE.exec(text);
2609
+ const open = OPEN_RE2.exec(text);
1869
2610
  if (!open) {
1870
2611
  return !complete && OPENER_PREFIX_RE.test(text) ? PENDING : NONE;
1871
2612
  }
@@ -1917,10 +2658,17 @@ function unquote(value) {
1917
2658
  }
1918
2659
 
1919
2660
  // src/MarkdownWorkerSource.ts
1920
- var WORKER_SOURCE_STRING = '"use strict";(()=>{function V(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var _=V();function ke(t){_=t}var C={exec:()=>null};function E(t){let e=[];return n=>{let s=Math.max(0,Math.min(3,n-1)),r=e[s];return r||(r=t(s),e[s]=r),r}}function k(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(x.caret,"$1"),n=n.replace(r,a),s},getRegex:()=>new RegExp(n,e)};return s}var Pe=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),x={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^\'"]*[^\\s])\\s+([\'"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>"\']/,escapeReplace:/[&<>"\']/g,escapeTestNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:E(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ ][^\\\\n]*)?(?:\\\\n|$))`)),hrRegex:E(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),fencesBeginRegex:E(t=>new RegExp(`^ {0,${t}}(?:\\`\\`\\`|~~~)`)),headingBeginRegex:E(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:E(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:E(t=>new RegExp(`^ {0,${t}}>`))},Me=/^(?:[ \\t]*(?:\\n|$))+/,Be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,qe=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,v=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,ve=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,K=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,fe=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,de=k(fe).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,"").getRegex(),De=k(fe).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),J=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\t]+\\n)[^\\n]+)*)/,Oe=/^[^\\n]+/,Y=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Ze=k(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace("label",Y).replace("title",/(?:"(?:\\\\"?|[^"\\\\])*"|\'[^\'\\n]*(?:\\n[^\'\\n]+)*\\n?\'|\\([^()]*\\))/).getRegex(),Ne=k(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/).replace(/bull/g,K).getRegex(),Q="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Qe=k("^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n*|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>[^\\\\n]*\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>[^\\\\n]*\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>[^\\\\n]*\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$))","i").replace("comment",ee).replace("tag",Q).replace("attribute",/ +[a-zA-Z:_][\\w.:-]*(?: *= *"[^"\\n]*"| *= *\'[^\'\\n]*\'| *= *[^\\s"\'=<>`]+)?/).getRegex(),xe=t=>k(J).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list",t).replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex(),Fe=xe(/ {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]/),He=xe(/ {0,3}(?:[*+-]|\\d{1,9}[.)])(?:[ \\t]|\\n|$)/),je=k(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace("paragraph",He).getRegex(),te={blockquote:je,code:Be,def:Ze,fences:qe,heading:ve,hr:v,html:Qe,lheading:de,list:Ne,newline:Me,paragraph:Fe,table:C,text:Oe},ae=k("^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)").replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex(),Ge={...te,lheading:De,table:ae,paragraph:k(J).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("table",ae).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Q).getRegex()},We={...te,html:k(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:"[^"]*"|\'[^\']*\'|\\\\s[^\'"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace("comment",ee).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +(["(][^\\n]+[")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:C,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:k(J).replace("hr",v).replace("heading",` *#{1,6} *[^\n]`).replace("lheading",de).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Xe=/^\\\\([!"#$%&\'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ue=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,be=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ve=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,P=/[\\p{P}\\p{S}]/u,F=/[\\s\\p{P}\\p{S}]/u,ne=/[^\\s\\p{P}\\p{S}]/u,Ke=k(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,F).getRegex(),me=/(?!~)[\\p{P}\\p{S}]/u,Je=/(?!~)[\\s\\p{P}\\p{S}]/u,Ye=/(?:[^\\s\\p{P}\\p{S}]|~)/u,et=k(/link|precode-code|html/,"g").replace("link",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace("precode-",Pe?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),we=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,tt=k(we,"u").replace(/punct/g,P).getRegex(),nt=k(we,"u").replace(/punct/g,me).getRegex(),ye="^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)",rt=k(ye,"gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,F).replace(/punct/g,P).getRegex(),st=k(ye,"gu").replace(/notPunctSpace/g,Ye).replace(/punctSpace/g,Je).replace(/punct/g,me).getRegex(),it=k("^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,F).replace(/punct/g,P).getRegex(),lt=k(/^~~?(?:((?!~)punct)|[^\\s~])/,"u").replace(/punct/g,P).getRegex(),at="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",ot=k(at,"gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,F).replace(/punct/g,P).getRegex(),ct=k(/\\\\(punct)/,"gu").replace(/punct/g,P).getRegex(),ht=k(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ut=k(ee).replace("(?:-->|$)","-->").getRegex(),pt=k("^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>").replace("comment",ut).replace("attribute",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*"[^"]*"|\\s*=\\s*\'[^\']*\'|\\s*=\\s*[^\\s"\'=<>`]+)?/).getRegex(),O=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/,gt=k(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace("label",O).replace("href",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]+|(?=\\))/).replace("title",/"(?:\\\\"?|[^"\\\\])*"|\'(?:\\\\\'?|[^\'\\\\])*\'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),Re=k(/^!?\\[(label)\\]\\[(ref)\\]/).replace("label",O).replace("ref",Y).getRegex(),$e=k(/^!?\\[(ref)\\](?:\\[\\])?/).replace("ref",Y).getRegex(),kt=k("reflink|nolink(?!\\\\()","g").replace("reflink",Re).replace("nolink",$e).getRegex(),oe=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,re={_backpedal:C,anyPunctuation:ct,autolink:ht,blockSkip:et,br:be,code:Ue,del:C,delLDelim:C,delRDelim:C,emStrongLDelim:tt,emStrongRDelimAst:rt,emStrongRDelimUnd:it,escape:Xe,link:gt,nolink:$e,punctuation:Ke,reflink:Re,reflinkSearch:kt,tag:pt,text:Ve,url:C},ft={...re,link:k(/^!?\\[(label)\\]\\((.*?)\\)/).replace("label",O).getRegex(),reflink:k(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace("label",O).getRegex()},W={...re,emStrongRDelimAst:st,emStrongLDelim:nt,delLDelim:lt,delRDelim:ot,url:k(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace("protocol",oe).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_\'"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_\'"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:k(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)))/).replace("protocol",oe).getRegex()},dt={...W,br:k(be).replace("{2,}","*").getRegex(),text:k(W.text).replace("\\\\b_","\\\\b_| {2,}\\\\n").replace(/\\{2,\\}/g,"*").getRegex()},D={normal:te,gfm:Ge,pedantic:We},B={normal:re,gfm:W,breaks:dt,pedantic:ft},xt={"&":"&amp;","<":"&lt;",">":"&gt;",\'"\':"&quot;","\'":"&#39;"},ce=t=>xt[t];function S(t,e){if(e){if(x.escapeTest.test(t))return t.replace(x.escapeReplace,ce)}else if(x.escapeTestNoEncode.test(t))return t.replace(x.escapeReplaceNoEncode,ce);return t}function he(t){try{t=encodeURI(t).replace(x.percentDecode,"%")}catch{return null}return t}function ue(t,e){let n=t.replace(x.findPipe,(i,a,l)=>{let o=!1,c=a;for(;--c>=0&&l[c]==="\\\\";)o=!o;return o?"|":" |"}),s=n.split(x.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;r<s.length;r++)s[r]=s[r].trim().replace(x.slashPipe,"|");return s}function z(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s;){let i=t.charAt(s-r-1);if(i===e&&!n)r++;else if(i!==e&&n)r++;else break}return t.slice(0,s-r)}function pe(t){let e=t.split(`\n`),n=e.length-1;for(;n>=0&&x.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`\n`)}function bt(t,e){if(t.indexOf(e[1])===-1)return-1;let n=0;for(let s=0;s<t.length;s++)if(t[s]==="\\\\")s++;else if(t[s]===e[0])n++;else if(t[s]===e[1]&&(n--,n<0))return s;return n>0?-2:-1}function mt(t,e=0){let n=e,s="";for(let r of t)if(r===" "){let i=4-n%4;s+=" ".repeat(i),n+=i}else s+=r,n++;return s}function ge(t,e,n,s,r){let i=e.href,a=e.title||null,l=t[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let o={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:a,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,o}function wt(t,e,n){let s=t.match(n.other.indentCodeCompensation);if(s===null)return e;let r=s[1];return e.split(`\n`).map(i=>{let a=i.match(n.other.beginningSpace);if(a===null)return i;let[l]=a;return l.length>=r.length?i.slice(r.length):i}).join(`\n`)}var Z=class{options;rules;lexer;constructor(t){this.options=t||_}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=this.options.pedantic?e[0]:pe(e[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],s=wt(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let s=z(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:z(e[0],`\n`),depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:z(e[0],`\n`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=z(e[0],`\n`).split(`\n`),s="",r="",i=[];for(;n.length>0;){let a=!1,l=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))l.push(n[o]),a=!0;else if(!a)l.push(n[o]);else break;n=n.slice(o);let c=l.join(`\n`),u=c.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}\n${c}`:c,r=r?`${r}\n${u}`:u;let h=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(u,i,!0),this.lexer.state.top=h,n.length===0)break;let p=i.at(-1);if(p?.type==="code")break;if(p?.type==="blockquote"){let d=p,f=d.raw+`\n`+n.join(`\n`),m=this.blockquote(f);i[i.length-1]=m,s=s.substring(0,s.length-d.raw.length)+m.raw,r=r.substring(0,r.length-d.text.length)+m.text;break}else if(p?.type==="list"){let d=p,f=d.raw+`\n`+n.join(`\n`),m=this.list(f);i[i.length-1]=m,s=s.substring(0,s.length-p.raw.length)+m.raw,r=r.substring(0,r.length-d.raw.length)+m.raw,n=f.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:"blockquote",raw:s,tokens:i,text:r}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),a=!1;for(;t;){let o=!1,c="",u="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;c=e[0],t=t.substring(c.length);let h=mt(e[2].split(`\n`,1)[0],e[1].length),p=t.split(`\n`,1)[0],d=!h.trim(),f=0;if(this.options.pedantic?(f=2,u=h.trimStart()):d?f=e[1].length+1:(f=h.search(this.rules.other.nonSpaceChar),f=f>4?1:f,u=h.slice(f),f+=e[1].length),d&&this.rules.other.blankLine.test(p)&&(c+=p+`\n`,t=t.substring(p.length+1),o=!0),!o){let m=this.rules.other.nextBulletRegex(f),w=this.rules.other.hrRegex(f),y=this.rules.other.fencesBeginRegex(f),L=this.rules.other.headingBeginRegex(f),G=this.rules.other.htmlBeginRegex(f),A=this.rules.other.blockquoteBeginRegex(f);for(;t;){let b=t.split(`\n`,1)[0],T;if(p=b,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),T=p):T=p.replace(this.rules.other.tabCharGlobal," "),y.test(p)||L.test(p)||G.test(p)||A.test(p)||m.test(p)||w.test(p))break;if(T.search(this.rules.other.nonSpaceChar)>=f||!p.trim())u+=`\n`+T.slice(f);else{if(d||h.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(h)||L.test(h)||w.test(h))break;u+=`\n`+p}d=!p.trim(),c+=b+`\n`,t=t.substring(b.length+1),h=T.slice(f)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(a=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(u),loose:!1,text:u,tokens:[]}),r.raw+=c}let l=r.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let o of r.items){this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]);let c=o.tokens[0];if(o.task&&(c?.type==="text"||c?.type==="paragraph")){o.text=o.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let h=this.lexer.inlineQueue.length-1;h>=0;h--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[h].src)){this.lexer.inlineQueue[h].src=this.lexer.inlineQueue[h].src.replace(this.rules.other.listReplaceTask,"");break}let u=this.rules.other.listTaskCheckbox.exec(o.raw);if(u){let h={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};o.checked=h.checked,r.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=h.raw+o.tokens[0].raw,o.tokens[0].text=h.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(h)):o.tokens.unshift({type:"paragraph",raw:h.raw,text:h.raw,tokens:[h]}):o.tokens.unshift(h)}}else o.task&&(o.task=!1);if(!r.loose){let u=o.tokens.filter(p=>p.type==="space"),h=u.length>0&&u.some(p=>this.rules.other.anyLine.test(p.raw));r.loose=h}}if(r.loose)for(let o of r.items){o.loose=!0;for(let c of o.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(t){let e=this.rules.block.html.exec(t);if(e){let n=pe(e[0]);return{type:"html",block:!0,raw:n,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:n}}}def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:z(e[0],`\n`),href:s,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=ue(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`\n`):[],i={type:"table",raw:z(e[0],`\n`),header:[],align:[],rows:[]};if(n.length===s.length){for(let a of s)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<n.length;a++)i.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(ue(a,i.header.length).map((l,o)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[o]})));return i}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:z(e[0],`\n`),depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===`\n`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=z(n.slice(0,-1),"\\\\");if((n.length-i.length)%2===0)return}else{let i=bt(e[2],"()");if(i===-2)return;if(i>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let s=e[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=e[3]?e[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),ge(e,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=e[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return ge(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=0,c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,e=e.slice(-1*t.length+r);(s=c.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(a=[...i].length,s[3]||s[4]){l+=a;continue}else if((s[5]||s[6])&&r%3&&!((r+a)%3)){o+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l+o);let u=[...s[0]][0].length,h=t.slice(0,r+s.index+u+a);if(Math.min(r,a)%2){let d=h.slice(1,-1);return{type:"em",raw:h,text:d,tokens:this.lexer.inlineTokens(d)}}let p=h.slice(2,-2);return{type:"strong",raw:h,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let s=this.rules.inline.delLDelim.exec(t);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=this.rules.inline.delRDelim;for(o.lastIndex=0,e=e.slice(-1*t.length+r);(s=o.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(a=[...i].length,a!==r))continue;if(s[3]||s[4]){l+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l);let c=[...s[0]][0].length,u=t.slice(0,r+s.index+c+a),h=u.slice(r,-r);return{type:"del",raw:u,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,s;return e[2]==="@"?(n=e[1],s="mailto:"+n):(n=e[1],s=n),{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,s;if(e[2]==="@")n=e[0],s="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:n}}}},R=class X{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||_,this.options.tokenizer=this.options.tokenizer||new Z,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:x,block:D.normal,inline:B.normal};this.options.pedantic?(n.block=D.pedantic,n.inline=B.pedantic):this.options.gfm&&(n.block=D.gfm,this.options.breaks?n.inline=B.breaks:n.inline=B.gfm),this.tokenizer.rules=n}static get rules(){return{block:D,inline:B}}static lex(e,n){return new X(n).lex(e)}static lexInline(e,n){return new X(n).inlineTokens(e)}lex(e){e=e.replace(x.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let s=this.inlineQueue[n];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],s=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(x.tabCharGlobal," ").replace(x.spaceLine,""));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(l=>(i=l.call({lexer:this},e,n))?(e=e.substring(i.raw.length),n.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let l=n.at(-1);i.raw.length===1&&l!==void 0?l.raw+=`\n`:n.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},n.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),n.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let l=1/0,o=e.slice(1),c;this.options.extensions.startBlock.forEach(u=>{c=u.call({lexer:this},o),typeof c=="number"&&c>=0&&(l=Math.min(l,c))}),l<1/0&&l>=0&&(a=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let l=n.at(-1);s&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i),s=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let s=e;if(this.tokens.links){let l=Object.keys(this.tokens.links);l.length>0&&(s=s.replace(this.tokenizer.rules.inline.reflinkSearch,o=>l.includes(o.slice(o.lastIndexOf("[")+1,-1))?"["+"a".repeat(o.length-2)+"]":o))}s=s.replace(this.tokenizer.rules.inline.anyPunctuation,"++"),s=s.replace(this.tokenizer.rules.inline.blockSkip,(l,o,c)=>{let u=c?c.length:0;return l.slice(0,u)+"["+"a".repeat(l.length-u-2)+"]"}),s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let r=!1,i="",a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=""),r=!1;let l;if(this.options.extensions?.inline?.some(c=>(l=c.call({lexer:this},e,n))?(e=e.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let c=n.at(-1);l.type==="text"&&c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(l=this.tokenizer.emStrong(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.del(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),n.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),n.push(l);continue}let o=e;if(this.options.extensions?.startInline){let c=1/0,u=e.slice(1),h;this.options.extensions.startInline.forEach(p=>{h=p.call({lexer:this},u),typeof h=="number"&&h>=0&&(c=Math.min(c,h))}),c<1/0&&c>=0&&(o=e.substring(0,c+1))}if(l=this.tokenizer.inlineText(o)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(i=l.raw.slice(-1)),r=!0;let c=n.at(-1);c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return n}infiniteLoopError(e){let n="Infinite loop on byte: "+e;if(this.options.silent)console.error(n);else throw new Error(n)}},N=class{options;parser;constructor(t){this.options=t||_}space(t){return""}code({text:t,lang:e,escaped:n}){let s=(e||"").match(x.notSpaceStart)?.[0],r=t.replace(x.endingNewline,"")+`\n`;return s?\'<pre><code class="language-\'+S(s)+\'">\'+(n?r:S(r,!0))+`</code></pre>\n`:"<pre><code>"+(n?r:S(r,!0))+`</code></pre>\n`}blockquote({tokens:t}){return`<blockquote>\n${this.parser.parse(t)}</blockquote>\n`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>\n`}hr(t){return`<hr>\n`}list(t){let e=t.ordered,n=t.start,s="";for(let a=0;a<t.items.length;a++){let l=t.items[a];s+=this.listitem(l)}let r=e?"ol":"ul",i=e&&n!==1?\' start="\'+n+\'"\':"";return"<"+r+i+`>\n`+s+"</"+r+`>\n`}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>\n`}checkbox({checked:t}){return"<input "+(t?\'checked="" \':"")+\'disabled="" type="checkbox"> \'}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>\n`}table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablecell(t.header[r]);e+=this.tablerow({text:n});let s="";for(let r=0;r<t.rows.length;r++){let i=t.rows[r];n="";for(let a=0;a<i.length;a++)n+=this.tablecell(i[a]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>\n<thead>\n`+e+`</thead>\n`+s+`</table>\n`}tablerow({text:t}){return`<tr>\n${t}</tr>\n`}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`</${n}>\n`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${S(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:n}){let s=this.parser.parseInline(n),r=he(t);if(r===null)return s;t=r;let i=\'<a href="\'+t+\'"\';return e&&(i+=\' title="\'+S(e)+\'"\'),i+=">"+s+"</a>",i}image({href:t,title:e,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=he(t);if(r===null)return S(n);t=r;let i=`<img src="${t}" alt="${S(n)}"`;return e&&(i+=` title="${S(e)}"`),i+=">",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:S(t.text)}},se=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}checkbox({raw:t}){return t}},$=class U{options;renderer;textRenderer;constructor(e){this.options=e||_,this.options.renderer=this.options.renderer||new N,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new se}static parse(e,n){return new U(n).parse(e)}static parseInline(e,n){return new U(n).parseInline(e)}parse(e){this.renderer.parser=this;let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let a=r,l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){n+=l||"";continue}}let i=r;switch(i.type){case"space":{n+=this.renderer.space(i);break}case"hr":{n+=this.renderer.hr(i);break}case"heading":{n+=this.renderer.heading(i);break}case"code":{n+=this.renderer.code(i);break}case"table":{n+=this.renderer.table(i);break}case"blockquote":{n+=this.renderer.blockquote(i);break}case"list":{n+=this.renderer.list(i);break}case"checkbox":{n+=this.renderer.checkbox(i);break}case"html":{n+=this.renderer.html(i);break}case"def":{n+=this.renderer.def(i);break}case"paragraph":{n+=this.renderer.paragraph(i);break}case"text":{n+=this.renderer.text(i);break}default:{let a=\'Token with "\'+i.type+\'" type was not found.\';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}parseInline(e,n=this.renderer){this.renderer.parser=this;let s="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let l=this.options.extensions.renderers[i.type].call({parser:this},i);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){s+=l||"";continue}}let a=i;switch(a.type){case"escape":{s+=n.text(a);break}case"html":{s+=n.html(a);break}case"link":{s+=n.link(a);break}case"image":{s+=n.image(a);break}case"checkbox":{s+=n.checkbox(a);break}case"strong":{s+=n.strong(a);break}case"em":{s+=n.em(a);break}case"codespan":{s+=n.codespan(a);break}case"br":{s+=n.br(a);break}case"del":{s+=n.del(a);break}case"text":{s+=n.text(a);break}default:{let l=\'Token with "\'+a.type+\'" type was not found.\';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return s}},q=class{options;block;constructor(t){this.options=t||_}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?R.lex:R.lexInline}provideParser(t=this.block){return t?$.parse:$.parseInline}},yt=class{defaults=V();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=$;Renderer=N;TextRenderer=se;Lexer=R;Tokenizer=Z;Hooks=q;constructor(...t){this.use(...t)}walkTokens(t,e){let n=[];for(let s of t)switch(n=n.concat(e.call(this,s)),s.type){case"table":{let r=s;for(let i of r.header)n=n.concat(this.walkTokens(i.tokens,e));for(let i of r.rows)for(let a of i)n=n.concat(this.walkTokens(a.tokens,e));break}case"list":{let r=s;n=n.concat(this.walkTokens(r.items,e));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let a=r[i].flat(1/0);n=n.concat(this.walkTokens(a,e))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,e)))}}return n}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=e.renderers[r.name];i?e.renderers[r.name]=function(...a){let l=r.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}:e.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be \'block\' or \'inline\'");let i=e[r.level];i?i.unshift(r.tokenizer):e[r.level]=[r.tokenizer],r.start&&(r.level==="block"?e.startBlock?e.startBlock.push(r.start):e.startBlock=[r.start]:r.level==="inline"&&(e.startInline?e.startInline.push(r.start):e.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(e.childTokens[r.name]=r.childTokens)}),s.extensions=e),n.renderer){let r=this.defaults.renderer||new N(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer \'${i}\' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=n.renderer[a],o=r[a];r[a]=(...c)=>{let u=l.apply(r,c);return u===!1&&(u=o.apply(r,c)),u||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Z(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer \'${i}\' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=n.tokenizer[a],o=r[a];r[a]=(...c)=>{let u=l.apply(r,c);return u===!1&&(u=o.apply(r,c)),u}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new q;for(let i in n.hooks){if(!(i in r))throw new Error(`hook \'${i}\' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=n.hooks[a],o=r[a];q.passThroughHooks.has(i)?r[a]=c=>{if(this.defaults.async&&q.passThroughHooksRespectAsync.has(i))return(async()=>{let h=await l.call(r,c);return o.call(r,h)})();let u=l.call(r,c);return o.call(r,u)}:r[a]=(...c)=>{if(this.defaults.async)return(async()=>{let h=await l.apply(r,c);return h===!1&&(h=await o.apply(r,c)),h})();let u=l.apply(r,c);return u===!1&&(u=o.apply(r,c)),u}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),r&&(l=l.concat(r.call(this,a))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return R.lex(t,e??this.defaults)}parser(t,e){return $.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=t),r.async)return(async()=>{let a=r.hooks?await r.hooks.preprocess(e):e,l=await(r.hooks?await r.hooks.provideLexer(t):t?R.lex:R.lexInline)(a,r),o=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(o,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(t):t?$.parse:$.parseInline)(o,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(e=r.hooks.preprocess(e));let a=(r.hooks?r.hooks.provideLexer(t):t?R.lex:R.lexInline)(e,r);r.hooks&&(a=r.hooks.processAllTokens(a)),r.walkTokens&&this.walkTokens(a,r.walkTokens);let l=(r.hooks?r.hooks.provideParser(t):t?$.parse:$.parseInline)(a,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(a){return i(a)}}}onError(t,e){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+S(n.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(n);throw n}}},I=new yt;function g(t,e){return I.parse(t,e)}g.options=g.setOptions=function(t){return I.setOptions(t),g.defaults=I.defaults,ke(g.defaults),g};g.getDefaults=V;g.defaults=_;g.use=function(...t){return I.use(...t),g.defaults=I.defaults,ke(g.defaults),g};g.walkTokens=function(t,e){return I.walkTokens(t,e)};g.parseInline=I.parseInline;g.Parser=$;g.parser=$.parse;g.Renderer=N;g.TextRenderer=se;g.Lexer=R;g.lexer=R.lex;g.Tokenizer=Z;g.Hooks=q;g.parse=g;var _t=g.options,Et=g.setOptions,Pt=g.use,Mt=g.walkTokens,Bt=g.parseInline;var qt=$.parse,vt=R.lex;function Se(t,e,n){let s=0;for(let r=e;r<n;r++)s+=t[r].raw.length;return s}function Rt(t,e){let n=t;return n.links=e,n}var $t=/^ {0,3}\\$\\$/m;function Le(t){return t.includes("$$")===!1?!1:$t.test(t)}function Tt(t,e){return t[e-2]?.type!=="list"?!0:e+1<t.length}function ze(t,e){for(let n=t.length-2;n>=e;n--)if(t[n].type==="space"&&Tt(t,n+1)!==!1)return n+1;return-1}function Ae(t){let e=t.links;if(!e)return!1;for(let n in e)return!0;return!1}function Ce(t,e,n,s,r){let i=r;for(let a=e;a<n;a++){let l=t[a].raw;if(s.startsWith(l,i)===!1)return!1;i+=l.length}return!0}function j(t,e,n){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!0,degradedReason:n}}function Te(t,e){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!1,degradedReason:null}}function St(t,e){if(Ae(e))return j(t,e,"link-definition");if(t.includes("\\r"))return j(t,e,"carriage-return");if(Le(t))return j(t,e,"block-math");let n=ze(e,1);if(n<0||Ce(e,0,n,t,0)===!1)return Te(t,e);let s=Se(e,0,n);return{source:t,tail:t.slice(s),tokens:e,stableCount:n,stableOffset:s,degraded:!1,degradedReason:null}}function ie(t){let e=g.lexer(t);return{tokens:e,cache:St(t,e),charsLexed:t.length,reusedTokens:0}}function H(t,e){let n=g.lexer(t);return{tokens:n,cache:j(t,n,e),charsLexed:t.length,reusedTokens:0}}function Ie(t,e){let n=t.source+e;if(t.degraded)return H(n,t.degradedReason??"link-definition");if(e.includes("\\r"))return H(n,"carriage-return");if(t.stableCount===0)return ie(n);let s=t.tail+e;if(Le(s))return H(n,"block-math");let r=g.lexer(s);if(Ae(r))return H(n,"link-definition");let i=t.tokens.slice(0,t.stableCount),a=Rt([...i,...r],r.links),l=t.stableCount,o=t.stableOffset,c=s,u=ze(a,t.stableCount+1);if(u>t.stableCount&&Ce(a,t.stableCount,u,s,0)){let h=Se(a,t.stableCount,u);l=u,o=t.stableOffset+h,c=s.slice(h)}return{tokens:a,cache:{source:n,tail:c,tokens:a,stableCount:l,stableOffset:o,degraded:!1,degradedReason:null},charsLexed:s.length,reusedTokens:t.stableCount}}var _e="([^\\\\]\\\\s]+)",Lt=new RegExp(`^\\\\[\\\\^${_e}\\\\]`),zt=new RegExp(`^ {0,3}\\\\[\\\\^${_e}\\\\]:[ \\\\t]*([^\\\\n]*)(?:\\\\n|$)`),Ee=[{name:"footnoteRef",level:"inline",tokenizer(t){let e=Lt.exec(t);if(e)return{type:"footnoteRef",raw:e[0],label:e[1]}},renderer(t){return t.raw}},{name:"footnoteDef",level:"block",tokenizer(t){let e=zt.exec(t);if(e)return{type:"footnoteDef",raw:e[0],label:e[1],body:e[2]}},renderer(t){return t.raw}}];var At=0;function Ct(t){if(typeof t!="string"||typeof performance.mark!="function"||typeof performance.measure!="function")return null;let e=At++,n={name:t,startMark:`${t}:start:${e}`,endMark:`${t}:end:${e}`};try{return performance.mark(n.startMark),n}catch{return null}}function It(t){if(t)try{performance.mark(t.endMark),performance.measure(t.name,t.startMark,t.endMark)}catch{}finally{try{performance.clearMarks?.(t.startMark),performance.clearMarks?.(t.endMark)}catch{}}}g.use({extensions:[...Ee,{name:"blockMath",level:"block",start(t){return t.match(/^ {0,3}\\$\\$/m)?.index},tokenizer(t){let e=/^ {0,3}\\$\\$([\\s\\S]+?)\\$\\$[ \\t]*(?:\\n|$)/.exec(t);if(e)return{type:"blockMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}},{name:"inlineMath",level:"inline",start(t){return t.match(/(?<![\\\\$])\\$(?![$\\s])/)?.index},tokenizer(t){let e=/^\\$(?![$\\s\\d])((?:\\\\\\$|[^$\\n])*?)(?<!\\s)\\$(?!\\d)/.exec(t);if(e)return{type:"inlineMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}}]});var M=new Map;self.onmessage=t=>{let e=t.data;if(typeof e!="object"||e===null)return;let{id:n,text:s,append:r,expectedLength:i,oldRaws:a,instance:l,baseVersion:o,dispose:c,userTimingName:u}=e;if(c===!0){typeof l=="string"&&M.delete(l);return}let h=typeof l=="string"?l:null,p=typeof o=="number"?o:null,d,f=null,m=null;if(typeof r=="string"){if(h===null||p===null){self.postMessage({id:n,needResync:!0});return}let w=M.get(h);if(!w||w.version!==p){self.postMessage({id:n,needResync:!0});return}if(typeof i=="number"&&w.lex.source.length+r.length!==i){M.delete(h),self.postMessage({id:n,needResync:!0});return}let y=w.lex;d=()=>Ie(y,r),m=y.tokens}else if(typeof s=="string"){let w=s;if(d=()=>ie(w),Array.isArray(a))f=a;else if(h!==null&&p!==null){let y=M.get(h);if(y&&y.version===p)m=y.lex.tokens;else{self.postMessage({id:n,needResync:!0});return}}}else return;try{let w=typeof u=="string"?Ct(u):null,y=performance.now(),L;try{L=d()}finally{w&&It(w)}let G=performance.now()-y,A=L.tokens,b=0;if(f!==null){let T=Math.min(f.length,A.length);for(;b<T&&f[b]===A[b].raw;b++);}else if(m!==null){let T=m,le=Math.min(T.length,A.length);for(b=Math.min(L.reusedTokens,le);b<le&&T[b].raw===A[b].raw;b++);}h!==null&&p!==null&&M.set(h,{version:p+1,lex:L.cache}),self.postMessage({id:n,matchLen:b,tail:A.slice(b),lexerMs:G,sourceCharsLexed:L.charsLexed})}catch(w){h!==null&&M.delete(h),self.postMessage({id:n,error:String(w)})}};})();\n';
2661
+ var WORKER_SOURCE_STRING = '"use strict";(()=>{function J(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var I=J();function ke(t){I=t}var A={exec:()=>null};function C(t){let e=[];return n=>{let s=Math.max(0,Math.min(3,n-1)),r=e[s];return r||(r=t(s),e[s]=r),r}}function g(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(x.caret,"$1"),n=n.replace(r,a),s},getRegex:()=>new RegExp(n,e)};return s}var Xe=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),x={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^\'"]*[^\\s])\\s+([\'"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>"\']/,escapeReplace:/[&<>"\']/g,escapeTestNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:C(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ ][^\\\\n]*)?(?:\\\\n|$))`)),hrRegex:C(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),fencesBeginRegex:C(t=>new RegExp(`^ {0,${t}}(?:\\`\\`\\`|~~~)`)),headingBeginRegex:C(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:C(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:C(t=>new RegExp(`^ {0,${t}}>`))},Qe=/^(?:[ \\t]*(?:\\n|$))+/,He=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,We=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,v=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Ge=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,K=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,xe=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,be=g(xe).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,"").getRegex(),Ue=g(xe).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),V=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\t]+\\n)[^\\n]+)*)/,Je=/^[^\\n]+/,Y=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Ke=g(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace("label",Y).replace("title",/(?:"(?:\\\\"?|[^"\\\\])*"|\'[^\'\\n]*(?:\\n[^\'\\n]+)*\\n?\'|\\([^()]*\\))/).getRegex(),Ve=g(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/).replace(/bull/g,K).getRegex(),X="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Ye=g("^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n*|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>[^\\\\n]*\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>[^\\\\n]*\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>[^\\\\n]*\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$))","i").replace("comment",ee).replace("tag",X).replace("attribute",/ +[a-zA-Z:_][\\w.:-]*(?: *= *"[^"\\n]*"| *= *\'[^\'\\n]*\'| *= *[^\\s"\'=<>`]+)?/).getRegex(),me=t=>g(V).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list",t).replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",X).getRegex(),et=me(/ {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]/),tt=me(/ {0,3}(?:[*+-]|\\d{1,9}[.)])(?:[ \\t]|\\n|$)/),nt=g(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace("paragraph",tt).getRegex(),te={blockquote:nt,code:He,def:Ke,fences:We,heading:Ge,hr:v,html:Ye,lheading:be,list:Ve,newline:Qe,paragraph:et,table:A,text:Je},ce=g("^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)").replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",X).getRegex(),rt={...te,lheading:Ue,table:ce,paragraph:g(V).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("table",ce).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",X).getRegex()},st={...te,html:g(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:"[^"]*"|\'[^\']*\'|\\\\s[^\'"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace("comment",ee).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +(["(][^\\n]+[")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:A,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:g(V).replace("hr",v).replace("heading",` *#{1,6} *[^\n]`).replace("lheading",be).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},it=/^\\\\([!"#$%&\'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,lt=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,we=/^( {2,}|\\\\)\\n(?!\\s*$)/,at=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,P=/[\\p{P}\\p{S}]/u,Q=/[\\s\\p{P}\\p{S}]/u,ne=/[^\\s\\p{P}\\p{S}]/u,ot=g(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Q).getRegex(),ye=/(?!~)[\\p{P}\\p{S}]/u,ct=/(?!~)[\\s\\p{P}\\p{S}]/u,ut=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ht=g(/link|precode-code|html/,"g").replace("link",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace("precode-",Xe?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Re=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,pt=g(Re,"u").replace(/punct/g,P).getRegex(),ft=g(Re,"u").replace(/punct/g,ye).getRegex(),Te="^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)",gt=g(Te,"gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),dt=g(Te,"gu").replace(/notPunctSpace/g,ut).replace(/punctSpace/g,ct).replace(/punct/g,ye).getRegex(),kt=g("^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),xt=g(/^~~?(?:((?!~)punct)|[^\\s~])/,"u").replace(/punct/g,P).getRegex(),bt="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",mt=g(bt,"gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),wt=g(/\\\\(punct)/,"gu").replace(/punct/g,P).getRegex(),yt=g(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Rt=g(ee).replace("(?:-->|$)","-->").getRegex(),Tt=g("^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>").replace("comment",Rt).replace("attribute",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*"[^"]*"|\\s*=\\s*\'[^\']*\'|\\s*=\\s*[^\\s"\'=<>`]+)?/).getRegex(),Z=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/,St=g(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace("label",Z).replace("href",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]+|(?=\\))/).replace("title",/"(?:\\\\"?|[^"\\\\])*"|\'(?:\\\\\'?|[^\'\\\\])*\'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),Se=g(/^!?\\[(label)\\]\\[(ref)\\]/).replace("label",Z).replace("ref",Y).getRegex(),_e=g(/^!?\\[(ref)\\](?:\\[\\])?/).replace("ref",Y).getRegex(),_t=g("reflink|nolink(?!\\\\()","g").replace("reflink",Se).replace("nolink",_e).getRegex(),ue=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,re={_backpedal:A,anyPunctuation:wt,autolink:yt,blockSkip:ht,br:we,code:lt,del:A,delLDelim:A,delRDelim:A,emStrongLDelim:pt,emStrongRDelimAst:gt,emStrongRDelimUnd:kt,escape:it,link:St,nolink:_e,punctuation:ot,reflink:Se,reflinkSearch:_t,tag:Tt,text:at,url:A},$t={...re,link:g(/^!?\\[(label)\\]\\((.*?)\\)/).replace("label",Z).getRegex(),reflink:g(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace("label",Z).getRegex()},W={...re,emStrongRDelimAst:dt,emStrongLDelim:ft,delLDelim:xt,delRDelim:mt,url:g(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace("protocol",ue).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_\'"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_\'"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:g(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)))/).replace("protocol",ue).getRegex()},Et={...W,br:g(we).replace("{2,}","*").getRegex(),text:g(W.text).replace("\\\\b_","\\\\b_| {2,}\\\\n").replace(/\\{2,\\}/g,"*").getRegex()},q={normal:te,gfm:rt,pedantic:st},O={normal:re,gfm:W,breaks:Et,pedantic:$t},zt={"&":"&amp;","<":"&lt;",">":"&gt;",\'"\':"&quot;","\'":"&#39;"},he=t=>zt[t];function _(t,e){if(e){if(x.escapeTest.test(t))return t.replace(x.escapeReplace,he)}else if(x.escapeTestNoEncode.test(t))return t.replace(x.escapeReplaceNoEncode,he);return t}function pe(t){try{t=encodeURI(t).replace(x.percentDecode,"%")}catch{return null}return t}function fe(t,e){let n=t.replace(x.findPipe,(i,a,l)=>{let o=!1,c=a;for(;--c>=0&&l[c]==="\\\\";)o=!o;return o?"|":" |"}),s=n.split(x.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;r<s.length;r++)s[r]=s[r].trim().replace(x.slashPipe,"|");return s}function E(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s;){let i=t.charAt(s-r-1);if(i===e&&!n)r++;else if(i!==e&&n)r++;else break}return t.slice(0,s-r)}function ge(t){let e=t.split(`\n`),n=e.length-1;for(;n>=0&&x.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`\n`)}function At(t,e){if(t.indexOf(e[1])===-1)return-1;let n=0;for(let s=0;s<t.length;s++)if(t[s]==="\\\\")s++;else if(t[s]===e[0])n++;else if(t[s]===e[1]&&(n--,n<0))return s;return n>0?-2:-1}function Lt(t,e=0){let n=e,s="";for(let r of t)if(r===" "){let i=4-n%4;s+=" ".repeat(i),n+=i}else s+=r,n++;return s}function de(t,e,n,s,r){let i=e.href,a=e.title||null,l=t[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let o={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:a,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,o}function It(t,e,n){let s=t.match(n.other.indentCodeCompensation);if(s===null)return e;let r=s[1];return e.split(`\n`).map(i=>{let a=i.match(n.other.beginningSpace);if(a===null)return i;let[l]=a;return l.length>=r.length?i.slice(r.length):i}).join(`\n`)}var j=class{options;rules;lexer;constructor(t){this.options=t||I}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=this.options.pedantic?e[0]:ge(e[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],s=It(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let s=E(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:E(e[0],`\n`),depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:E(e[0],`\n`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=E(e[0],`\n`).split(`\n`),s="",r="",i=[];for(;n.length>0;){let a=!1,l=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))l.push(n[o]),a=!0;else if(!a)l.push(n[o]);else break;n=n.slice(o);let c=l.join(`\n`),h=c.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}\n${c}`:c,r=r?`${r}\n${h}`:h;let u=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(h,i,!0),this.lexer.state.top=u,n.length===0)break;let p=i.at(-1);if(p?.type==="code")break;if(p?.type==="blockquote"){let k=p,d=k.raw+`\n`+n.join(`\n`),m=this.blockquote(d);i[i.length-1]=m,s=s.substring(0,s.length-k.raw.length)+m.raw,r=r.substring(0,r.length-k.text.length)+m.text;break}else if(p?.type==="list"){let k=p,d=k.raw+`\n`+n.join(`\n`),m=this.list(d);i[i.length-1]=m,s=s.substring(0,s.length-p.raw.length)+m.raw,r=r.substring(0,r.length-k.raw.length)+m.raw,n=d.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:"blockquote",raw:s,tokens:i,text:r}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),a=!1;for(;t;){let o=!1,c="",h="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;c=e[0],t=t.substring(c.length);let u=Lt(e[2].split(`\n`,1)[0],e[1].length),p=t.split(`\n`,1)[0],k=!u.trim(),d=0;if(this.options.pedantic?(d=2,h=u.trimStart()):k?d=e[1].length+1:(d=u.search(this.rules.other.nonSpaceChar),d=d>4?1:d,h=u.slice(d),d+=e[1].length),k&&this.rules.other.blankLine.test(p)&&(c+=p+`\n`,t=t.substring(p.length+1),o=!0),!o){let m=this.rules.other.nextBulletRegex(d),w=this.rules.other.hrRegex(d),y=this.rules.other.fencesBeginRegex(d),$=this.rules.other.headingBeginRegex(d),H=this.rules.other.htmlBeginRegex(d),z=this.rules.other.blockquoteBeginRegex(d);for(;t;){let b=t.split(`\n`,1)[0],S;if(p=b,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),S=p):S=p.replace(this.rules.other.tabCharGlobal," "),y.test(p)||$.test(p)||H.test(p)||z.test(p)||m.test(p)||w.test(p))break;if(S.search(this.rules.other.nonSpaceChar)>=d||!p.trim())h+=`\n`+S.slice(d);else{if(k||u.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(u)||$.test(u)||w.test(u))break;h+=`\n`+p}k=!p.trim(),c+=b+`\n`,t=t.substring(b.length+1),u=S.slice(d)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(a=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(h),loose:!1,text:h,tokens:[]}),r.raw+=c}let l=r.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let o of r.items){this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]);let c=o.tokens[0];if(o.task&&(c?.type==="text"||c?.type==="paragraph")){o.text=o.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let u=this.lexer.inlineQueue.length-1;u>=0;u--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[u].src)){this.lexer.inlineQueue[u].src=this.lexer.inlineQueue[u].src.replace(this.rules.other.listReplaceTask,"");break}let h=this.rules.other.listTaskCheckbox.exec(o.raw);if(h){let u={type:"checkbox",raw:h[0]+" ",checked:h[0]!=="[ ]"};o.checked=u.checked,r.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=u.raw+o.tokens[0].raw,o.tokens[0].text=u.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(u)):o.tokens.unshift({type:"paragraph",raw:u.raw,text:u.raw,tokens:[u]}):o.tokens.unshift(u)}}else o.task&&(o.task=!1);if(!r.loose){let h=o.tokens.filter(p=>p.type==="space"),u=h.length>0&&h.some(p=>this.rules.other.anyLine.test(p.raw));r.loose=u}}if(r.loose)for(let o of r.items){o.loose=!0;for(let c of o.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(t){let e=this.rules.block.html.exec(t);if(e){let n=ge(e[0]);return{type:"html",block:!0,raw:n,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:n}}}def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:E(e[0],`\n`),href:s,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=fe(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`\n`):[],i={type:"table",raw:E(e[0],`\n`),header:[],align:[],rows:[]};if(n.length===s.length){for(let a of s)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<n.length;a++)i.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(fe(a,i.header.length).map((l,o)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[o]})));return i}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:E(e[0],`\n`),depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===`\n`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=E(n.slice(0,-1),"\\\\");if((n.length-i.length)%2===0)return}else{let i=At(e[2],"()");if(i===-2)return;if(i>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let s=e[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=e[3]?e[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),de(e,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=e[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return de(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=0,c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,e=e.slice(-1*t.length+r);(s=c.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(a=[...i].length,s[3]||s[4]){l+=a;continue}else if((s[5]||s[6])&&r%3&&!((r+a)%3)){o+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l+o);let h=[...s[0]][0].length,u=t.slice(0,r+s.index+h+a);if(Math.min(r,a)%2){let k=u.slice(1,-1);return{type:"em",raw:u,text:k,tokens:this.lexer.inlineTokens(k)}}let p=u.slice(2,-2);return{type:"strong",raw:u,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let s=this.rules.inline.delLDelim.exec(t);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=this.rules.inline.delRDelim;for(o.lastIndex=0,e=e.slice(-1*t.length+r);(s=o.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(a=[...i].length,a!==r))continue;if(s[3]||s[4]){l+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l);let c=[...s[0]][0].length,h=t.slice(0,r+s.index+c+a),u=h.slice(r,-r);return{type:"del",raw:h,text:u,tokens:this.lexer.inlineTokens(u)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,s;return e[2]==="@"?(n=e[1],s="mailto:"+n):(n=e[1],s=n),{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,s;if(e[2]==="@")n=e[0],s="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:n}}}},R=class G{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||I,this.options.tokenizer=this.options.tokenizer||new j,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:x,block:q.normal,inline:O.normal};this.options.pedantic?(n.block=q.pedantic,n.inline=O.pedantic):this.options.gfm&&(n.block=q.gfm,this.options.breaks?n.inline=O.breaks:n.inline=O.gfm),this.tokenizer.rules=n}static get rules(){return{block:q,inline:O}}static lex(e,n){return new G(n).lex(e)}static lexInline(e,n){return new G(n).inlineTokens(e)}lex(e){e=e.replace(x.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let s=this.inlineQueue[n];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],s=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(x.tabCharGlobal," ").replace(x.spaceLine,""));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(l=>(i=l.call({lexer:this},e,n))?(e=e.substring(i.raw.length),n.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let l=n.at(-1);i.raw.length===1&&l!==void 0?l.raw+=`\n`:n.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},n.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),n.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let l=1/0,o=e.slice(1),c;this.options.extensions.startBlock.forEach(h=>{c=h.call({lexer:this},o),typeof c=="number"&&c>=0&&(l=Math.min(l,c))}),l<1/0&&l>=0&&(a=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let l=n.at(-1);s&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i),s=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let s=e;if(this.tokens.links){let l=Object.keys(this.tokens.links);l.length>0&&(s=s.replace(this.tokenizer.rules.inline.reflinkSearch,o=>l.includes(o.slice(o.lastIndexOf("[")+1,-1))?"["+"a".repeat(o.length-2)+"]":o))}s=s.replace(this.tokenizer.rules.inline.anyPunctuation,"++"),s=s.replace(this.tokenizer.rules.inline.blockSkip,(l,o,c)=>{let h=c?c.length:0;return l.slice(0,h)+"["+"a".repeat(l.length-h-2)+"]"}),s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let r=!1,i="",a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=""),r=!1;let l;if(this.options.extensions?.inline?.some(c=>(l=c.call({lexer:this},e,n))?(e=e.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let c=n.at(-1);l.type==="text"&&c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(l=this.tokenizer.emStrong(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.del(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),n.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),n.push(l);continue}let o=e;if(this.options.extensions?.startInline){let c=1/0,h=e.slice(1),u;this.options.extensions.startInline.forEach(p=>{u=p.call({lexer:this},h),typeof u=="number"&&u>=0&&(c=Math.min(c,u))}),c<1/0&&c>=0&&(o=e.substring(0,c+1))}if(l=this.tokenizer.inlineText(o)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(i=l.raw.slice(-1)),r=!0;let c=n.at(-1);c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return n}infiniteLoopError(e){let n="Infinite loop on byte: "+e;if(this.options.silent)console.error(n);else throw new Error(n)}},F=class{options;parser;constructor(t){this.options=t||I}space(t){return""}code({text:t,lang:e,escaped:n}){let s=(e||"").match(x.notSpaceStart)?.[0],r=t.replace(x.endingNewline,"")+`\n`;return s?\'<pre><code class="language-\'+_(s)+\'">\'+(n?r:_(r,!0))+`</code></pre>\n`:"<pre><code>"+(n?r:_(r,!0))+`</code></pre>\n`}blockquote({tokens:t}){return`<blockquote>\n${this.parser.parse(t)}</blockquote>\n`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>\n`}hr(t){return`<hr>\n`}list(t){let e=t.ordered,n=t.start,s="";for(let a=0;a<t.items.length;a++){let l=t.items[a];s+=this.listitem(l)}let r=e?"ol":"ul",i=e&&n!==1?\' start="\'+n+\'"\':"";return"<"+r+i+`>\n`+s+"</"+r+`>\n`}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>\n`}checkbox({checked:t}){return"<input "+(t?\'checked="" \':"")+\'disabled="" type="checkbox"> \'}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>\n`}table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablecell(t.header[r]);e+=this.tablerow({text:n});let s="";for(let r=0;r<t.rows.length;r++){let i=t.rows[r];n="";for(let a=0;a<i.length;a++)n+=this.tablecell(i[a]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>\n<thead>\n`+e+`</thead>\n`+s+`</table>\n`}tablerow({text:t}){return`<tr>\n${t}</tr>\n`}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`</${n}>\n`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${_(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:n}){let s=this.parser.parseInline(n),r=pe(t);if(r===null)return s;t=r;let i=\'<a href="\'+t+\'"\';return e&&(i+=\' title="\'+_(e)+\'"\'),i+=">"+s+"</a>",i}image({href:t,title:e,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=pe(t);if(r===null)return _(n);t=r;let i=`<img src="${t}" alt="${_(n)}"`;return e&&(i+=` title="${_(e)}"`),i+=">",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:_(t.text)}},se=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}checkbox({raw:t}){return t}},T=class U{options;renderer;textRenderer;constructor(e){this.options=e||I,this.options.renderer=this.options.renderer||new F,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new se}static parse(e,n){return new U(n).parse(e)}static parseInline(e,n){return new U(n).parseInline(e)}parse(e){this.renderer.parser=this;let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let a=r,l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){n+=l||"";continue}}let i=r;switch(i.type){case"space":{n+=this.renderer.space(i);break}case"hr":{n+=this.renderer.hr(i);break}case"heading":{n+=this.renderer.heading(i);break}case"code":{n+=this.renderer.code(i);break}case"table":{n+=this.renderer.table(i);break}case"blockquote":{n+=this.renderer.blockquote(i);break}case"list":{n+=this.renderer.list(i);break}case"checkbox":{n+=this.renderer.checkbox(i);break}case"html":{n+=this.renderer.html(i);break}case"def":{n+=this.renderer.def(i);break}case"paragraph":{n+=this.renderer.paragraph(i);break}case"text":{n+=this.renderer.text(i);break}default:{let a=\'Token with "\'+i.type+\'" type was not found.\';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}parseInline(e,n=this.renderer){this.renderer.parser=this;let s="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let l=this.options.extensions.renderers[i.type].call({parser:this},i);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){s+=l||"";continue}}let a=i;switch(a.type){case"escape":{s+=n.text(a);break}case"html":{s+=n.html(a);break}case"link":{s+=n.link(a);break}case"image":{s+=n.image(a);break}case"checkbox":{s+=n.checkbox(a);break}case"strong":{s+=n.strong(a);break}case"em":{s+=n.em(a);break}case"codespan":{s+=n.codespan(a);break}case"br":{s+=n.br(a);break}case"del":{s+=n.del(a);break}case"text":{s+=n.text(a);break}default:{let l=\'Token with "\'+a.type+\'" type was not found.\';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return s}},N=class{options;block;constructor(t){this.options=t||I}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?R.lex:R.lexInline}provideParser(t=this.block){return t?T.parse:T.parseInline}},Ct=class{defaults=J();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=T;Renderer=F;TextRenderer=se;Lexer=R;Tokenizer=j;Hooks=N;constructor(...t){this.use(...t)}walkTokens(t,e){let n=[];for(let s of t)switch(n=n.concat(e.call(this,s)),s.type){case"table":{let r=s;for(let i of r.header)n=n.concat(this.walkTokens(i.tokens,e));for(let i of r.rows)for(let a of i)n=n.concat(this.walkTokens(a.tokens,e));break}case"list":{let r=s;n=n.concat(this.walkTokens(r.items,e));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let a=r[i].flat(1/0);n=n.concat(this.walkTokens(a,e))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,e)))}}return n}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=e.renderers[r.name];i?e.renderers[r.name]=function(...a){let l=r.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}:e.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be \'block\' or \'inline\'");let i=e[r.level];i?i.unshift(r.tokenizer):e[r.level]=[r.tokenizer],r.start&&(r.level==="block"?e.startBlock?e.startBlock.push(r.start):e.startBlock=[r.start]:r.level==="inline"&&(e.startInline?e.startInline.push(r.start):e.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(e.childTokens[r.name]=r.childTokens)}),s.extensions=e),n.renderer){let r=this.defaults.renderer||new F(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer \'${i}\' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=n.renderer[a],o=r[a];r[a]=(...c)=>{let h=l.apply(r,c);return h===!1&&(h=o.apply(r,c)),h||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new j(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer \'${i}\' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=n.tokenizer[a],o=r[a];r[a]=(...c)=>{let h=l.apply(r,c);return h===!1&&(h=o.apply(r,c)),h}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new N;for(let i in n.hooks){if(!(i in r))throw new Error(`hook \'${i}\' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=n.hooks[a],o=r[a];N.passThroughHooks.has(i)?r[a]=c=>{if(this.defaults.async&&N.passThroughHooksRespectAsync.has(i))return(async()=>{let u=await l.call(r,c);return o.call(r,u)})();let h=l.call(r,c);return o.call(r,h)}:r[a]=(...c)=>{if(this.defaults.async)return(async()=>{let u=await l.apply(r,c);return u===!1&&(u=await o.apply(r,c)),u})();let h=l.apply(r,c);return h===!1&&(h=o.apply(r,c)),h}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),r&&(l=l.concat(r.call(this,a))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return R.lex(t,e??this.defaults)}parser(t,e){return T.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=t),r.async)return(async()=>{let a=r.hooks?await r.hooks.preprocess(e):e,l=await(r.hooks?await r.hooks.provideLexer(t):t?R.lex:R.lexInline)(a,r),o=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(o,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(t):t?T.parse:T.parseInline)(o,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(e=r.hooks.preprocess(e));let a=(r.hooks?r.hooks.provideLexer(t):t?R.lex:R.lexInline)(e,r);r.hooks&&(a=r.hooks.processAllTokens(a)),r.walkTokens&&this.walkTokens(a,r.walkTokens);let l=(r.hooks?r.hooks.provideParser(t):t?T.parse:T.parseInline)(a,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(a){return i(a)}}}onError(t,e){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+_(n.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(n);throw n}}},L=new Ct;function f(t,e){return L.parse(t,e)}f.options=f.setOptions=function(t){return L.setOptions(t),f.defaults=L.defaults,ke(f.defaults),f};f.getDefaults=J;f.defaults=I;f.use=function(...t){return L.use(...t),f.defaults=L.defaults,ke(f.defaults),f};f.walkTokens=function(t,e){return L.walkTokens(t,e)};f.parseInline=L.parseInline;f.Parser=T;f.parser=T.parse;f.Renderer=F;f.TextRenderer=se;f.Lexer=R;f.lexer=R.lex;f.Tokenizer=j;f.Hooks=N;f.parse=f;var Ut=f.options,Jt=f.setOptions,Kt=f.use,Vt=f.walkTokens,Yt=f.parseInline;var en=T.parse,tn=R.lex;var $e=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*(?:\\n|$)/,Pt=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*$/;function Mt(t){let e=1,n=0;for(;n<t.length;){let s=t.indexOf(`\n`,n),r=s===-1?t.slice(n):t.slice(n,s),i=Pt.exec(r);if(i){if(i[1]!==void 0)e++;else if(e--,e===0)return n}if(s===-1)break;n=s+1}return-1}var Ee=[{name:"container",level:"block",tokenizer(t){let e=$e.exec(t);if(!e)return;let n=t.slice(e[0].length),s=Mt(n);if(s<0)return;let r=n.slice(0,s),i=n.indexOf(`\n`,s),a=i===-1?n.length:i+1,l=e[0]+n.slice(0,a),o=this.lexer.blockTokens(r,[]);return{type:"container",raw:l,kind:e[1],tokens:o}},renderer(t){return t.raw}}];function ie(t){return t.includes(":::")===!1?!1:new RegExp($e.source,"m").test(t)}var Le="([^\\\\]\\\\s]+)",Ot=new RegExp(`^\\\\[\\\\^${Le}\\\\]`),Ie=new RegExp(`^ {0,3}\\\\[\\\\^${Le}\\\\]:[ \\\\t]*([^\\\\n]*)\\\\n?`);function ze(t){return/^[ \\t]*$/.test(t)}var Ae=/^(?: {4}| {0,3}\\t)/;function Nt(t){let e=0;for(;;){let s=e;for(;;){let l=t.indexOf(`\n`,s);if(l===-1)return n(e,!0);let o=t.slice(s,l);if(!ze(o))break;s=l+1}let r=t.indexOf(`\n`,s),i=r===-1?t.slice(s):t.slice(s,r+1),a=r===-1?t.slice(s):t.slice(s,r);if(!Ae.test(a))return n(e,!1);if(e=s+i.length,r===-1)return n(e,!0)}function n(s,r){let i=t.slice(0,s),a=i.split(`\n`).map(l=>ze(l)?"":l.replace(Ae,"")).join(`\n`);return{raw:i,body:a,open:r}}}function le(t){return t.includes("[^")===!1?!1:new RegExp(Ie.source,"m").test(t)}var Ce=[{name:"footnoteRef",level:"inline",tokenizer(t){let e=Ot.exec(t);if(e)return{type:"footnoteRef",raw:e[0],label:e[1]}},renderer(t){return t.raw}},{name:"footnoteDef",level:"block",tokenizer(t){let e=Ie.exec(t);if(!e)return;let n=t.slice(e[0].length),s=Nt(n),r=s.body.trim()?this.lexer.blockTokens(s.body,[]):[];return{type:"footnoteDef",raw:e[0]+s.raw,label:e[1],body:e[2],tokens:r}},renderer(t){return t.raw}}];function Me(t,e,n){let s=0;for(let r=e;r<n;r++)s+=t[r].raw.length;return s}function vt(t,e){let n=t;return n.links=e,n}function Oe(t,e){for(let n=e;n+1<t.length;n++)if(t[n].type==="paragraph"&&t[n+1].type==="paragraph")return n;return t.length}function Dt(t,e){return t[e-2]?.type!=="list"?!0:e+1<t.length}function Ne(t,e,n){let s=Math.min(t.length-2,n-1);for(let r=s;r>=e;r--)if(t[r].type==="space"&&Dt(t,r+1)!==!1)return r+1;return-1}function ve(t){let e=t.links;if(!e)return!1;for(let n in e)return!0;return!1}function De(t,e,n,s,r){let i=r;for(let a=e;a<n;a++){let l=t[a].raw;if(s.startsWith(l,i)===!1)return!1;i+=l.length}return!0}function B(t,e,n){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!0,degradedReason:n}}function Pe(t,e){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!1,degradedReason:null}}function Bt(t,e){if(ve(e))return B(t,e,"link-definition");if(t.includes("\\r"))return B(t,e,"carriage-return");if(ie(t))return B(t,e,"container");if(le(t))return B(t,e,"footnote-def");let n=Oe(e,0),s=Ne(e,1,n);if(s<0||De(e,0,s,t,0)===!1)return Pe(t,e);let r=Me(e,0,s);return{source:t,tail:t.slice(r),tokens:e,stableCount:s,stableOffset:r,degraded:!1,degradedReason:null}}function ae(t){let e=f.lexer(t);return{tokens:e,cache:Bt(t,e),charsLexed:t.length,reusedTokens:0}}function D(t,e){let n=f.lexer(t);return{tokens:n,cache:B(t,n,e),charsLexed:t.length,reusedTokens:0}}function Be(t,e){let n=t.source+e;if(t.degraded)return D(n,t.degradedReason??"link-definition");if(e.includes("\\r"))return D(n,"carriage-return");if(t.stableCount===0)return ae(n);let s=t.tail+e;if(ie(s))return D(n,"container");if(le(s))return D(n,"footnote-def");let r=f.lexer(s);if(ve(r))return D(n,"link-definition");let i=t.tokens.slice(0,t.stableCount),a=vt([...i,...r],r.links),l=t.stableCount,o=t.stableOffset,c=s,h=Ne(a,t.stableCount+1,Oe(a,t.stableCount));if(h>t.stableCount&&De(a,t.stableCount,h,s,0)){let u=Me(a,t.stableCount,h);l=h,o=t.stableOffset+u,c=s.slice(u)}return{tokens:a,cache:{source:n,tail:c,tokens:a,stableCount:l,stableOffset:o,degraded:!1,degradedReason:null},charsLexed:s.length,reusedTokens:t.stableCount}}var qt=/^ {0,3}\\*\\[([^\\]\\n]+)\\]:[ \\t]*([^\\n]*)(?:\\n|$)/,qe=[{name:"abbrDef",level:"block",tokenizer(t){let e=qt.exec(t);if(e)return{type:"abbrDef",raw:e[0],term:e[1],definition:e[2]}},renderer(t){return t.raw}}];var Zt=Object.freeze({grinning:"\\u{1F600}",smiley:"\\u{1F603}",smile:"\\u{1F604}",grin:"\\u{1F601}",laughing:"\\u{1F606}",satisfied:"\\u{1F606}",sweat_smile:"\\u{1F605}",rofl:"\\u{1F923}",joy:"\\u{1F602}",slightly_smiling_face:"\\u{1F642}",upside_down_face:"\\u{1F643}",wink:"\\u{1F609}",blush:"\\u{1F60A}",innocent:"\\u{1F607}",heart_eyes:"\\u{1F60D}",star_struck:"\\u{1F929}",kissing_heart:"\\u{1F618}",yum:"\\u{1F60B}",stuck_out_tongue:"\\u{1F61B}",stuck_out_tongue_winking_eye:"\\u{1F61C}",stuck_out_tongue_closed_eyes:"\\u{1F61D}",hugs:"\\u{1F917}",thinking:"\\u{1F914}",neutral_face:"\\u{1F610}",expressionless:"\\u{1F611}",no_mouth:"\\u{1F636}",smirk:"\\u{1F60F}",unamused:"\\u{1F612}",roll_eyes:"\\u{1F644}",grimacing:"\\u{1F62C}",relieved:"\\u{1F60C}",pensive:"\\u{1F614}",sleepy:"\\u{1F62A}",sleeping:"\\u{1F634}",mask:"\\u{1F637}",dizzy_face:"\\u{1F635}",sunglasses:"\\u{1F60E}",nerd_face:"\\u{1F913}",confused:"\\u{1F615}",worried:"\\u{1F61F}",open_mouth:"\\u{1F62E}",hushed:"\\u{1F62F}",astonished:"\\u{1F632}",flushed:"\\u{1F633}",pleading_face:"\\u{1F97A}",fearful:"\\u{1F628}",cold_sweat:"\\u{1F630}",cry:"\\u{1F622}",sob:"\\u{1F62D}",scream:"\\u{1F631}",disappointed:"\\u{1F61E}",sweat:"\\u{1F613}",weary:"\\u{1F629}",tired_face:"\\u{1F62B}",triumph:"\\u{1F624}",rage:"\\u{1F621}",angry:"\\u{1F620}",smiling_imp:"\\u{1F608}",imp:"\\u{1F47F}",skull:"\\u{1F480}",clown_face:"\\u{1F921}",poop:"\\u{1F4A9}",ghost:"\\u{1F47B}",alien:"\\u{1F47D}",robot:"\\u{1F916}",thumbsup:"\\u{1F44D}","+1":"\\u{1F44D}",thumbsdown:"\\u{1F44E}","-1":"\\u{1F44E}",punch:"\\u{1F44A}",fist:"\\u270A",clap:"\\u{1F44F}",raised_hands:"\\u{1F64C}",open_hands:"\\u{1F450}",handshake:"\\u{1F91D}",pray:"\\u{1F64F}",muscle:"\\u{1F4AA}",eyes:"\\u{1F440}",wave:"\\u{1F44B}",point_up:"\\u261D\\uFE0F",point_down:"\\u{1F447}",point_left:"\\u{1F448}",point_right:"\\u{1F449}",ok_hand:"\\u{1F44C}",v:"\\u270C\\uFE0F",crossed_fingers:"\\u{1F91E}",heart:"\\u2764\\uFE0F",broken_heart:"\\u{1F494}",two_hearts:"\\u{1F495}",sparkling_heart:"\\u{1F496}",heartpulse:"\\u{1F497}",blue_heart:"\\u{1F499}",green_heart:"\\u{1F49A}",yellow_heart:"\\u{1F49B}",orange_heart:"\\u{1F9E1}",purple_heart:"\\u{1F49C}",black_heart:"\\u{1F5A4}",white_heart:"\\u{1F90D}",100:"\\u{1F4AF}",boom:"\\u{1F4A5}",collision:"\\u{1F4A5}",dizzy:"\\u{1F4AB}",sweat_drops:"\\u{1F4A6}",dash:"\\u{1F4A8}",zzz:"\\u{1F4A4}",fire:"\\u{1F525}",sparkles:"\\u2728",star:"\\u2B50",star2:"\\u{1F31F}",tada:"\\u{1F389}",confetti_ball:"\\u{1F38A}",balloon:"\\u{1F388}",gift:"\\u{1F381}",rocket:"\\u{1F680}",dart:"\\u{1F3AF}",trophy:"\\u{1F3C6}",warning:"\\u26A0\\uFE0F",no_entry_sign:"\\u{1F6AB}",white_check_mark:"\\u2705",x:"\\u274C",heavy_check_mark:"\\u2714\\uFE0F",question:"\\u2753",exclamation:"\\u2757",bulb:"\\u{1F4A1}",bell:"\\u{1F514}",computer:"\\u{1F4BB}",iphone:"\\u{1F4F1}",link:"\\u{1F517}",lock:"\\u{1F512}",unlock:"\\u{1F513}",key:"\\u{1F511}",mag:"\\u{1F50D}",bug:"\\u{1F41B}",package:"\\u{1F4E6}",memo:"\\u{1F4DD}",pencil2:"\\u270F\\uFE0F",book:"\\u{1F4D6}",books:"\\u{1F4DA}",pushpin:"\\u{1F4CC}",paperclip:"\\u{1F4CE}",calendar:"\\u{1F4C5}",file_folder:"\\u{1F4C1}",hammer:"\\u{1F528}",wrench:"\\u{1F527}",gear:"\\u2699\\uFE0F",chart_with_upwards_trend:"\\u{1F4C8}",chart_with_downwards_trend:"\\u{1F4C9}",bar_chart:"\\u{1F4CA}",construction:"\\u{1F6A7}",hourglass:"\\u23F3",stopwatch:"\\u23F1\\uFE0F",pizza:"\\u{1F355}",coffee:"\\u2615",beer:"\\u{1F37A}",cake:"\\u{1F382}",birthday:"\\u{1F382}",apple:"\\u{1F34E}",rainbow:"\\u{1F308}",sun_with_face:"\\u{1F31E}",crescent_moon:"\\u{1F319}",earth_americas:"\\u{1F30E}",dog:"\\u{1F436}",cat:"\\u{1F431}",fox_face:"\\u{1F98A}",bear:"\\u{1F43B}",panda_face:"\\u{1F43C}",monkey_face:"\\u{1F435}",see_no_evil:"\\u{1F648}",hear_no_evil:"\\u{1F649}",speak_no_evil:"\\u{1F64A}"}),jt=/^:([A-Za-z0-9_+-]+):/,Ze=[{name:"emoji",level:"inline",start(t){return t.match(/:/)?.index},tokenizer(t){let e=jt.exec(t);if(!e)return;let n=Zt[e[1]];if(n!==void 0)return{type:"emoji",raw:e[0],text:n}},renderer(t){return t.raw}}];var Ft=/^\\+\\+(?!\\s)((?:\\\\[\\s\\S]|(?!\\+\\+)[\\s\\S])+?)(?<!\\s)\\+\\+/,Xt=/^==(?!\\s)((?:\\\\[\\s\\S]|(?!==)[\\s\\S])+?)(?<!\\s)==/,je=[{name:"ins",level:"inline",start(t){return t.match(/(?<!\\\\)\\+\\+(?!\\s)/)?.index},tokenizer(t){let e=Ft.exec(t);if(e)return{type:"ins",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}},{name:"mark",level:"inline",start(t){return t.match(/(?<!\\\\)==(?!\\s)/)?.index},tokenizer(t){let e=Xt.exec(t);if(e)return{type:"mark",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Qt=/^\\^((?:\\\\[\\s\\S]|[^\\s^\\\\])+)\\^/,Fe=[{name:"sup",level:"inline",start(t){return t.match(/(?<!\\\\)\\^(?!\\s)/)?.index},tokenizer(t){let e=Qt.exec(t);if(e)return{type:"sup",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Ht=0;function Wt(t){if(typeof t!="string"||typeof performance.mark!="function"||typeof performance.measure!="function")return null;let e=Ht++,n={name:t,startMark:`${t}:start:${e}`,endMark:`${t}:end:${e}`};try{return performance.mark(n.startMark),n}catch{return null}}function Gt(t){if(t)try{performance.mark(t.endMark),performance.measure(t.name,t.startMark,t.endMark)}catch{}finally{try{performance.clearMarks?.(t.startMark),performance.clearMarks?.(t.endMark)}catch{}}}f.use({extensions:[...Ce,...Fe,...je,...Ze,...Ee,...qe,{name:"blockMath",level:"block",start(t){return t.match(/^ {0,3}\\$\\$/m)?.index},tokenizer(t){let e=/^ {0,3}\\$\\$((?:(?!\\n[ \\t]*\\n)[\\s\\S])+?)\\$\\$[ \\t]*(?:\\n|$)/.exec(t);if(e)return{type:"blockMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}},{name:"inlineMath",level:"inline",start(t){return t.match(/(?<![\\\\$])\\$(?![$\\s])/)?.index},tokenizer(t){let e=/^\\$(?![$\\s\\d])((?:\\\\\\$|[^$\\n])*?)(?<!\\s)\\$(?!\\d)/.exec(t);if(e)return{type:"inlineMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}}]});var M=new Map;self.onmessage=t=>{let e=t.data;if(typeof e!="object"||e===null)return;let{id:n,text:s,append:r,expectedLength:i,oldRaws:a,instance:l,baseVersion:o,dispose:c,userTimingName:h}=e;if(c===!0){typeof l=="string"&&M.delete(l);return}let u=typeof l=="string"?l:null,p=typeof o=="number"?o:null,k,d=null,m=null;if(typeof r=="string"){if(u===null||p===null){self.postMessage({id:n,needResync:!0});return}let w=M.get(u);if(!w||w.version!==p){self.postMessage({id:n,needResync:!0});return}if(typeof i=="number"&&w.lex.source.length+r.length!==i){M.delete(u),self.postMessage({id:n,needResync:!0});return}let y=w.lex;k=()=>Be(y,r),m=y.tokens}else if(typeof s=="string"){let w=s;if(k=()=>ae(w),Array.isArray(a))d=a;else if(u!==null&&p!==null){let y=M.get(u);if(y&&y.version===p)m=y.lex.tokens;else{self.postMessage({id:n,needResync:!0});return}}}else return;try{let w=typeof h=="string"?Wt(h):null,y=performance.now(),$;try{$=k()}finally{w&&Gt(w)}let H=performance.now()-y,z=$.tokens,b=0;if(d!==null){let S=Math.min(d.length,z.length);for(;b<S&&d[b]===z[b].raw;b++);}else if(m!==null){let S=m,oe=Math.min(S.length,z.length);for(b=Math.min($.reusedTokens,oe);b<oe&&S[b].raw===z[b].raw;b++);}u!==null&&p!==null&&M.set(u,{version:p+1,lex:$.cache}),self.postMessage({id:n,matchLen:b,tail:z.slice(b),lexerMs:H,sourceCharsLexed:$.charsLexed})}catch(w){u!==null&&M.delete(u),self.postMessage({id:n,error:String(w)})}};})();\n';
1921
2662
 
1922
2663
  // src/Markdown.ts
1923
2664
  var now = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
2665
+ function mapsEqual(a, b) {
2666
+ if (a.size !== b.size) return false;
2667
+ for (const [key, value] of a) {
2668
+ if (b.get(key) !== value) return false;
2669
+ }
2670
+ return true;
2671
+ }
1924
2672
  function lexMarkdown(text, userTiming) {
1925
2673
  if (!userTiming) return marked.lexer(text);
1926
2674
  const timing = beginVectoUserTiming(VECTO_USER_TIMING.markdown.parse);
@@ -1931,11 +2679,18 @@ function lexMarkdown(text, userTiming) {
1931
2679
  }
1932
2680
  }
1933
2681
  marked.use({
1934
- // `FOOTNOTE_EXTENSIONS` is shared with `MarkdownWorker.ts` rather than spelled
1935
- // out twice: the two registration sites must agree exactly, or the worker
1936
- // returns tokens this renderer has no arm for.
2682
+ // `FOOTNOTE_EXTENSIONS`, `SUPERSCRIPT_EXTENSIONS`, `INS_MARK_EXTENSIONS`,
2683
+ // `EMOJI_EXTENSIONS`, `CONTAINER_EXTENSIONS`, and `ABBR_EXTENSIONS` are
2684
+ // shared with `MarkdownWorker.ts` rather than spelled out twice: the two
2685
+ // registration sites must agree exactly, or the worker returns tokens this
2686
+ // renderer has no arm for.
1937
2687
  extensions: [
1938
2688
  ...FOOTNOTE_EXTENSIONS,
2689
+ ...SUPERSCRIPT_EXTENSIONS,
2690
+ ...INS_MARK_EXTENSIONS,
2691
+ ...EMOJI_EXTENSIONS,
2692
+ ...CONTAINER_EXTENSIONS,
2693
+ ...ABBR_EXTENSIONS,
1939
2694
  {
1940
2695
  name: "blockMath",
1941
2696
  level: "block",
@@ -1943,7 +2698,7 @@ marked.use({
1943
2698
  return src.match(/^ {0,3}\$\$/m)?.index;
1944
2699
  },
1945
2700
  tokenizer(src) {
1946
- const match = /^ {0,3}\$\$([\s\S]+?)\$\$[ \t]*(?:\n|$)/.exec(src);
2701
+ const match = /^ {0,3}\$\$((?:(?!\n[ \t]*\n)[\s\S])+?)\$\$[ \t]*(?:\n|$)/.exec(src);
1947
2702
  if (match) {
1948
2703
  return {
1949
2704
  type: "blockMath",
@@ -2145,6 +2900,19 @@ var Markdown = class _Markdown extends UIComponent3 {
2145
2900
  mathLoadPending = false;
2146
2901
  _userTiming;
2147
2902
  tokens = [];
2903
+ /**
2904
+ * The document's `*[TERM]: definition` dictionary, collected from
2905
+ * {@link tokens}'s top-level `abbrDef` entries.
2906
+ *
2907
+ * Recomputed whenever {@link setTokens} runs. Its own identity — not its
2908
+ * CONTENTS — is what {@link updateTokens} compares against the previous
2909
+ * render to decide whether prose rendered before this definition existed
2910
+ * needs a full rebuild rather than the usual prefix-reuse: see
2911
+ * `markdown-abbr.ts`'s module doc for why a late-arriving definition can
2912
+ * retroactively change already-rendered inline tokens, the same hazard
2913
+ * `hasLinkDefinitions` names for reference definitions.
2914
+ */
2915
+ abbreviations = /* @__PURE__ */ new Map();
2148
2916
  // At most one worker lex request in flight at a time. Required for the
2149
2917
  // delta-transfer protocol below to be safe: the request captures a
2150
2918
  // snapshot of `this.tokens` to reconstruct the full array from the
@@ -2279,7 +3047,7 @@ var Markdown = class _Markdown extends UIComponent3 {
2279
3047
  constructor(markdownText, opts = {}) {
2280
3048
  super();
2281
3049
  this.maxWidth = opts.maxWidth ?? 800;
2282
- this.theme = resolveTheme(opts.theme);
3050
+ this.theme = resolvePresetTheme(opts.theme);
2283
3051
  this.onLinkClick = opts.onLinkClick;
2284
3052
  this.selectable = opts.selectable ?? true;
2285
3053
  this._userTiming = opts.userTiming ?? false;
@@ -2397,6 +3165,7 @@ var Markdown = class _Markdown extends UIComponent3 {
2397
3165
  renderMarkdown(text) {
2398
3166
  const tokens = lexMarkdown(text, this._userTiming);
2399
3167
  this.setTokens(tokens);
3168
+ this.abbreviations = collectAbbreviations(tokens);
2400
3169
  for (const token of tokens) {
2401
3170
  const el = this.renderToken(token);
2402
3171
  if (el) {
@@ -2555,6 +3324,38 @@ var Markdown = class _Markdown extends UIComponent3 {
2555
3324
  entity.height = Math.max(border?.height ?? 0, innerStack?.height ?? 0);
2556
3325
  return;
2557
3326
  }
3327
+ case "container": {
3328
+ const ctToken = token;
3329
+ const innerStack = entity.children.find((c) => c instanceof Stack);
3330
+ const border = entity.children.find((c) => c instanceof QuoteBorder);
3331
+ const background = entity.children.find((c) => c instanceof ContainerBackground);
3332
+ const indentStart = Math.min(this.theme.containerIndent, availableWidth);
3333
+ const childWidth = Math.max(0, availableWidth - indentStart);
3334
+ if (innerStack instanceof Stack) {
3335
+ let index = 0;
3336
+ for (const inner of ctToken.tokens) {
3337
+ if (!this.producesEntity(inner)) continue;
3338
+ const wrapper = innerStack.children[index++];
3339
+ if (!wrapper) break;
3340
+ const block = wrapper.children[0];
3341
+ if (!block) continue;
3342
+ this.reflowToken(inner, block, childWidth);
3343
+ block.x = indentStart;
3344
+ wrapper.width = block.width + indentStart;
3345
+ wrapper.height = block.height;
3346
+ }
3347
+ innerStack.layout();
3348
+ }
3349
+ const contentHeight = innerStack?.height || 20;
3350
+ if (border instanceof QuoteBorder) border.height = contentHeight;
3351
+ if (background instanceof ContainerBackground) {
3352
+ background.width = availableWidth;
3353
+ background.height = contentHeight;
3354
+ }
3355
+ entity.width = availableWidth;
3356
+ entity.height = Math.max(background?.height ?? 0, border?.height ?? 0, contentHeight);
3357
+ return;
3358
+ }
2558
3359
  case "list": {
2559
3360
  if (!(entity instanceof Stack)) return;
2560
3361
  for (const item of entity.children) {
@@ -2572,7 +3373,31 @@ var Markdown = class _Markdown extends UIComponent3 {
2572
3373
  return;
2573
3374
  }
2574
3375
  case "footnoteDef": {
2575
- if (entity instanceof RichText2) entity.setMaxWidth(availableWidth);
3376
+ if (entity instanceof RichText2) {
3377
+ entity.setMaxWidth(availableWidth);
3378
+ return;
3379
+ }
3380
+ if (entity instanceof Stack) {
3381
+ const fnToken = token;
3382
+ entity.maxWidth = availableWidth;
3383
+ const header = entity.children[0];
3384
+ if (header instanceof RichText2) header.setMaxWidth(availableWidth);
3385
+ const indent = Math.round(this.theme.fontSize);
3386
+ const childWidth = Math.max(1, availableWidth - indent);
3387
+ let index = 1;
3388
+ for (const inner of fnToken.tokens) {
3389
+ if (!this.producesEntity(inner)) continue;
3390
+ const wrapper = entity.children[index++];
3391
+ if (!wrapper) break;
3392
+ const block = wrapper.children[0];
3393
+ if (!block) continue;
3394
+ this.reflowToken(inner, block, childWidth);
3395
+ block.x = indent;
3396
+ wrapper.width = block.width + indent;
3397
+ wrapper.height = block.height;
3398
+ }
3399
+ entity.layout();
3400
+ }
2576
3401
  return;
2577
3402
  }
2578
3403
  default: {
@@ -3073,7 +3898,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3073
3898
  literalParagraphSpans(token) {
3074
3899
  const spans = [];
3075
3900
  if (token.tokens && token.tokens.length > 0) {
3076
- collectSpans(token.tokens, {}, this.theme, spans);
3901
+ collectSpans(token.tokens, {}, this.theme, spans, void 0, this.abbreviations);
3077
3902
  }
3078
3903
  if (spans.length === 0) spans.push({ text: token.text });
3079
3904
  return spans;
@@ -3118,7 +3943,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3118
3943
  */
3119
3944
  tableCellSpans(cell, t) {
3120
3945
  const spans = [];
3121
- collectSpans(cell.tokens, {}, t, spans);
3946
+ collectSpans(cell.tokens, {}, t, spans, void 0, this.abbreviations);
3122
3947
  if (spans.length === 0) spans.push({ text: decodeEntities(cell.text) });
3123
3948
  return spans;
3124
3949
  }
@@ -3136,7 +3961,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3136
3961
  */
3137
3962
  inlineRunSpans(tokens, t) {
3138
3963
  const spans = [];
3139
- if (tokens.length > 0) collectSpans(tokens, {}, t, spans);
3964
+ if (tokens.length > 0) collectSpans(tokens, {}, t, spans, void 0, this.abbreviations);
3140
3965
  if (spans.length === 0) spans.push({ text: "" });
3141
3966
  return spans;
3142
3967
  }
@@ -3399,14 +4224,18 @@ var Markdown = class _Markdown extends UIComponent3 {
3399
4224
  inner.tokens,
3400
4225
  {},
3401
4226
  this.theme,
3402
- contentSpans
4227
+ contentSpans,
4228
+ void 0,
4229
+ this.abbreviations
3403
4230
  );
3404
4231
  } else if ("tokens" in inner && inner.tokens?.length) {
3405
4232
  collectSpans(
3406
4233
  inner.tokens,
3407
4234
  {},
3408
4235
  this.theme,
3409
- contentSpans
4236
+ contentSpans,
4237
+ void 0,
4238
+ this.abbreviations
3410
4239
  );
3411
4240
  } else if ("text" in inner) {
3412
4241
  contentSpans.push({ text: decodeEntities(inner.text) });
@@ -3680,7 +4509,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3680
4509
  headingSpans(token) {
3681
4510
  const spans = [];
3682
4511
  if (token.tokens && token.tokens.length > 0) {
3683
- collectSpans(token.tokens, {}, this.theme, spans);
4512
+ collectSpans(token.tokens, {}, this.theme, spans, void 0, this.abbreviations);
3684
4513
  }
3685
4514
  if (spans.length === 0) spans.push({ text: decodeEntities(token.text) });
3686
4515
  return spans;
@@ -3721,7 +4550,14 @@ var Markdown = class _Markdown extends UIComponent3 {
3721
4550
  if (!found) return null;
3722
4551
  const spans = [];
3723
4552
  if (inline.length > runLength) {
3724
- collectSpans(inline.slice(0, -runLength), {}, this.theme, spans);
4553
+ collectSpans(
4554
+ inline.slice(0, -runLength),
4555
+ {},
4556
+ this.theme,
4557
+ spans,
4558
+ void 0,
4559
+ this.abbreviations
4560
+ );
3725
4561
  }
3726
4562
  const head = runText.slice(0, found.at);
3727
4563
  if (head) spans.push({ text: decodeEntities(head) });
@@ -3914,6 +4750,10 @@ var Markdown = class _Markdown extends UIComponent3 {
3914
4750
  }
3915
4751
  }
3916
4752
  }
4753
+ const newAbbreviations = collectAbbreviations(newTokens);
4754
+ const abbreviationsChanged = !mapsEqual(this.abbreviations, newAbbreviations);
4755
+ if (abbreviationsChanged) matchLen = 0;
4756
+ this.abbreviations = newAbbreviations;
3917
4757
  const oldTokenToChild = this.tokenChildPrefix;
3918
4758
  const rawMatchLen = matchLen;
3919
4759
  let pendingTail = null;
@@ -4081,6 +4921,10 @@ var Markdown = class _Markdown extends UIComponent3 {
4081
4921
  // It renders its own block, so it produces an entity — see `renderToken`'s
4082
4922
  // arm for why in place rather than collected into a document footer.
4083
4923
  case "footnoteDef":
4924
+ // A `ContainerToken` carries `tokens`, not `text`, so it would otherwise
4925
+ // fail the `default:` arm's `'text' in token` fallback check entirely —
4926
+ // the same trap `footnoteDef` above already documents.
4927
+ case "container":
4084
4928
  return true;
4085
4929
  default:
4086
4930
  return "text" in token;
@@ -4169,7 +5013,8 @@ var Markdown = class _Markdown extends UIComponent3 {
4169
5013
  availableWidth,
4170
5014
  t,
4171
5015
  this.selectable,
4172
- this.onLinkClick
5016
+ this.onLinkClick,
5017
+ this.abbreviations
4173
5018
  );
4174
5019
  }
4175
5020
  // ── Paragraphs ───────────────────────────────────────────────────
@@ -4184,7 +5029,8 @@ var Markdown = class _Markdown extends UIComponent3 {
4184
5029
  availableWidth,
4185
5030
  t,
4186
5031
  this.selectable,
4187
- this.onLinkClick
5032
+ this.onLinkClick,
5033
+ this.abbreviations
4188
5034
  );
4189
5035
  }
4190
5036
  const stack = new Stack({
@@ -4227,6 +5073,22 @@ var Markdown = class _Markdown extends UIComponent3 {
4227
5073
  const mathBlock = this.renderDisplayMath(codeToken.text, availableWidth);
4228
5074
  if (mathBlock) return mathBlock;
4229
5075
  }
5076
+ if (hasFencedBlockRenderer(lang)) {
5077
+ ensureFencedBlockRenderer(lang);
5078
+ if (isFenceClosed(codeToken.raw)) {
5079
+ const rendered = renderFencedBlock(codeToken.text, lang, {
5080
+ theme: t,
5081
+ availableWidth,
5082
+ selectable: this.selectable
5083
+ });
5084
+ if (rendered) {
5085
+ return this.withBlockAffordances(
5086
+ rendered,
5087
+ () => this.codeBlockAffordances(codeToken.text, lang)
5088
+ );
5089
+ }
5090
+ }
5091
+ }
4230
5092
  return this.withBlockAffordances(
4231
5093
  new CodeBlock(codeToken.text, lang, availableWidth, t, this.selectable),
4232
5094
  () => this.codeBlockAffordances(codeToken.text, lang)
@@ -4283,6 +5145,54 @@ var Markdown = class _Markdown extends UIComponent3 {
4283
5145
  container.height = Math.max(border.height, innerStack.height);
4284
5146
  return container;
4285
5147
  }
5148
+ // ── `:::` fenced containers ─────────────────────────────────────
5149
+ case "container": {
5150
+ const ctToken = token;
5151
+ const accent = containerColor(t, ctToken.kind);
5152
+ const innerStack = new Stack({
5153
+ direction: "vertical",
5154
+ gap: t.containerInnerGap
5155
+ });
5156
+ const indentStart = Math.min(t.containerIndent, availableWidth);
5157
+ const childMetrics = {
5158
+ marginBefore: 0,
5159
+ marginAfter: 0,
5160
+ indentStart,
5161
+ availableWidth: Math.max(0, availableWidth - indentStart)
5162
+ };
5163
+ for (const inner of ctToken.tokens) {
5164
+ const el = this.renderTokenWithMetrics(inner, childMetrics);
5165
+ if (el) {
5166
+ const wrapper2 = new MarkdownContainer();
5167
+ el.x = childMetrics.indentStart;
5168
+ wrapper2.add(el);
5169
+ wrapper2.width = el.width + childMetrics.indentStart;
5170
+ wrapper2.height = el.height;
5171
+ innerStack.add(wrapper2);
5172
+ }
5173
+ }
5174
+ const contentHeight = innerStack.height || 20;
5175
+ const background = new ContainerBackground(
5176
+ availableWidth,
5177
+ contentHeight,
5178
+ t.containerBgColor,
5179
+ t.containerRadius
5180
+ );
5181
+ const border = new QuoteBorder(contentHeight, accent, t.containerBorderWidth);
5182
+ const wrapper = new MarkdownContainer();
5183
+ background.x = 0;
5184
+ background.y = 0;
5185
+ wrapper.add(background);
5186
+ border.x = 0;
5187
+ border.y = 0;
5188
+ wrapper.add(border);
5189
+ innerStack.x = 0;
5190
+ innerStack.y = 0;
5191
+ wrapper.add(innerStack);
5192
+ wrapper.width = availableWidth;
5193
+ wrapper.height = Math.max(background.height, border.height, innerStack.height);
5194
+ return wrapper;
5195
+ }
4286
5196
  // ── Lists ────────────────────────────────────────────────
4287
5197
  case "list": {
4288
5198
  const listToken = token;
@@ -4326,20 +5236,43 @@ var Markdown = class _Markdown extends UIComponent3 {
4326
5236
  // ── Footnote definition (`[^1]: note`) ───────────────────────────
4327
5237
  case "footnoteDef": {
4328
5238
  const fnToken = token;
4329
- const spans = [
5239
+ const headerSpans = [
4330
5240
  {
4331
5241
  text: footnoteMarker(fnToken.label),
4332
5242
  style: { color: t.footnoteColor }
4333
5243
  },
4334
5244
  { text: " " }
4335
5245
  ];
4336
- if (fnToken.body) spans.push({ text: decodeEntities(fnToken.body) });
4337
- return new RichText2(spans, {
5246
+ if (fnToken.body) headerSpans.push({ text: decodeEntities(fnToken.body) });
5247
+ const headerRichText = new RichText2(headerSpans, {
4338
5248
  font: bodyFont,
4339
5249
  color: t.textColor,
4340
5250
  maxWidth: availableWidth,
4341
5251
  selectable: this.selectable
4342
5252
  });
5253
+ if (!fnToken.tokens || fnToken.tokens.length === 0) {
5254
+ return headerRichText;
5255
+ }
5256
+ const indent = Math.round(t.fontSize);
5257
+ const childMetrics = {
5258
+ marginBefore: 0,
5259
+ marginAfter: 0,
5260
+ indentStart: indent,
5261
+ availableWidth: Math.max(1, availableWidth - indent)
5262
+ };
5263
+ const stack = new Stack({ direction: "vertical", gap: t.listItemGap });
5264
+ stack.add(headerRichText);
5265
+ for (const inner of fnToken.tokens) {
5266
+ const el = this.renderTokenWithMetrics(inner, childMetrics);
5267
+ if (!el) continue;
5268
+ const wrapper = new MarkdownContainer();
5269
+ el.x = indent;
5270
+ wrapper.add(el);
5271
+ wrapper.width = el.width + indent;
5272
+ wrapper.height = el.height;
5273
+ stack.add(wrapper);
5274
+ }
5275
+ return stack;
4343
5276
  }
4344
5277
  // ── Horizontal rule ──────────────────────────────────────────────
4345
5278
  case "hr":
@@ -4379,18 +5312,27 @@ export {
4379
5312
  CodeBlock,
4380
5313
  Markdown,
4381
5314
  MathBlock,
5315
+ PRESET_THEMES,
4382
5316
  codeAtlas,
4383
5317
  codeAtlasStats,
5318
+ ensureFencedBlockRenderer,
4384
5319
  escapeCsvField,
4385
5320
  escapeMarkdownTableCell,
4386
5321
  extensionForLanguage,
4387
5322
  footnoteMarker,
5323
+ hasFencedBlockRenderer,
5324
+ isFencedBlockRendererReady,
4388
5325
  isMathJaxReady,
5326
+ isPresetName,
4389
5327
  mimeForLanguage,
4390
5328
  parseFrontMatterFields,
4391
5329
  preloadMathJax,
5330
+ registerFencedBlockRenderer,
5331
+ renderFencedBlock,
5332
+ resolvePresetTheme,
4392
5333
  scanFrontMatter,
4393
5334
  tableContentOf,
4394
5335
  tableToCsv,
4395
- tableToMarkdown
5336
+ tableToMarkdown,
5337
+ unregisterFencedBlockRenderer
4396
5338
  };