@vectojs/markdown 0.16.1 → 0.17.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) });
@@ -1856,7 +2550,7 @@ function tableContentOf(token) {
1856
2550
  }
1857
2551
 
1858
2552
  // src/frontMatter.ts
1859
- var OPEN_RE = /^---[ \t]*\r?\n/;
2553
+ var OPEN_RE2 = /^---[ \t]*\r?\n/;
1860
2554
  var OPENER_PREFIX_RE = /^(?:-|--|---[ \t]*\r?)$/;
1861
2555
  var KEY_RE = /^[^\s:#][^:]*:(?:[ \t].*)?$/;
1862
2556
  var CLOSE_RE = /^(?:---|\.\.\.)[ \t]*$/;
@@ -1865,7 +2559,7 @@ var NONE = { kind: "none" };
1865
2559
  var PENDING = { kind: "pending" };
1866
2560
  function scanFrontMatter(text, complete) {
1867
2561
  if (text.length === 0) return PENDING;
1868
- const open = OPEN_RE.exec(text);
2562
+ const open = OPEN_RE2.exec(text);
1869
2563
  if (!open) {
1870
2564
  return !complete && OPENER_PREFIX_RE.test(text) ? PENDING : NONE;
1871
2565
  }
@@ -1917,10 +2611,17 @@ function unquote(value) {
1917
2611
  }
1918
2612
 
1919
2613
  // 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';
2614
+ 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 de(t){I=t}var A={exec:()=>null};function C(t){let e=[];return n=>{let r=Math.max(0,Math.min(3,n-1)),s=e[r];return s||(s=t(r),e[r]=s),s}}function g(t,e=""){let n=typeof t=="string"?t:t.source,r={replace:(s,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(x.caret,"$1"),n=n.replace(s,a),r},getRegex:()=>new RegExp(n,e)};return r}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|$)|$)/,D=/^ {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",D).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:D,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",D).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",D).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",D).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(),kt=g(Te,"gu").replace(/notPunctSpace/g,ut).replace(/punctSpace/g,ct).replace(/punct/g,ye).getRegex(),dt=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:dt,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:kt,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},v={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?"|":" |"}),r=n.split(x.splitPipe),s=0;if(r[0].trim()||r.shift(),r.length>0&&!r.at(-1)?.trim()&&r.pop(),e)if(r.length>e)r.splice(e);else for(;r.length<e;)r.push("");for(;s<r.length;s++)r[s]=r[s].trim().replace(x.slashPipe,"|");return r}function E(t,e,n){let r=t.length;if(r===0)return"";let s=0;for(;s<r;){let i=t.charAt(r-s-1);if(i===e&&!n)s++;else if(i!==e&&n)s++;else break}return t.slice(0,r-s)}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 r=0;r<t.length;r++)if(t[r]==="\\\\")r++;else if(t[r]===e[0])n++;else if(t[r]===e[1]&&(n--,n<0))return r;return n>0?-2:-1}function Lt(t,e=0){let n=e,r="";for(let s of t)if(s===" "){let i=4-n%4;r+=" ".repeat(i),n+=i}else r+=s,n++;return r}function ke(t,e,n,r,s){let i=e.href,a=e.title||null,l=t[1].replace(s.other.outputLinkReplace,"$1");r.state.inLink=!0;let o={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:a,text:l,tokens:r.inlineTokens(l)};return r.state.inLink=!1,o}function It(t,e,n){let r=t.match(n.other.indentCodeCompensation);if(r===null)return e;let s=r[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>=s.length?i.slice(s.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]),r=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:r}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],r=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:r}}}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 r=E(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.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`),r="",s="",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,"");r=r?`${r}\n${c}`:c,s=s?`${s}\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 d=p,k=d.raw+`\n`+n.join(`\n`),m=this.blockquote(k);i[i.length-1]=m,r=r.substring(0,r.length-d.raw.length)+m.raw,s=s.substring(0,s.length-d.text.length)+m.text;break}else if(p?.type==="list"){let d=p,k=d.raw+`\n`+n.join(`\n`),m=this.list(k);i[i.length-1]=m,r=r.substring(0,r.length-p.raw.length)+m.raw,s=s.substring(0,s.length-d.raw.length)+m.raw,n=k.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:"blockquote",raw:r,tokens:i,text:s}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),r=n.length>1,s={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?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],d=!u.trim(),k=0;if(this.options.pedantic?(k=2,h=u.trimStart()):d?k=e[1].length+1:(k=u.search(this.rules.other.nonSpaceChar),k=k>4?1:k,h=u.slice(k),k+=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(k),w=this.rules.other.hrRegex(k),y=this.rules.other.fencesBeginRegex(k),$=this.rules.other.headingBeginRegex(k),H=this.rules.other.htmlBeginRegex(k),z=this.rules.other.blockquoteBeginRegex(k);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)>=k||!p.trim())h+=`\n`+S.slice(k);else{if(d||u.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(u)||$.test(u)||w.test(u))break;h+=`\n`+p}d=!p.trim(),c+=b+`\n`,t=t.substring(b.length+1),u=S.slice(k)}}s.loose||(a?s.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(a=!0)),s.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(h),loose:!1,text:h,tokens:[]}),s.raw+=c}let l=s.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;s.raw=s.raw.trimEnd();for(let o of s.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,s.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(!s.loose){let h=o.tokens.filter(p=>p.type==="space"),u=h.length>0&&h.some(p=>this.rules.other.anyLine.test(p.raw));s.loose=u}}if(s.loose)for(let o of s.items){o.loose=!0;for(let c of o.tokens)c.type==="text"&&(c.type="paragraph")}return s}}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," "),r=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=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:r,title:s}}}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]),r=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),s=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===r.length){for(let a of r)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 s)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 r=e[2],s="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(r);i&&(r=i[1],s=i[3])}else s=e[3]?e[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),ke(e,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:s&&s.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 r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),s=e[r.toLowerCase()];if(!s){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return ke(n,s,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let r=this.rules.inline.emStrongLDelim.exec(t);if(!(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(r[1]||r[3])||!n||this.rules.inline.punctuation.exec(n))){let s=[...r[0]].length-1,i,a,l=s,o=0,c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,e=e.slice(-1*t.length+s);(r=c.exec(e))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){l+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){o+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l+o);let h=[...r[0]][0].length,u=t.slice(0,s+r.index+h+a);if(Math.min(s,a)%2){let d=u.slice(1,-1);return{type:"em",raw:u,text:d,tokens:this.lexer.inlineTokens(d)}}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," "),r=this.rules.other.nonSpaceChar.test(n),s=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&s&&(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 r=this.rules.inline.delLDelim.exec(t);if(r&&(!r[1]||!n||this.rules.inline.punctuation.exec(n))){let s=[...r[0]].length-1,i,a,l=s,o=this.rules.inline.delRDelim;for(o.lastIndex=0,e=e.slice(-1*t.length+s);(r=o.exec(e))!==null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i||(a=[...i].length,a!==s))continue;if(r[3]||r[4]){l+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l);let c=[...r[0]][0].length,h=t.slice(0,s+r.index+c+a),u=h.slice(s,-s);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,r;return e[2]==="@"?(n=e[1],r="mailto:"+n):(n=e[1],r=n),{type:"link",raw:e[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,r;if(e[2]==="@")n=e[0],r="mailto:"+n;else{let s;do s=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(s!==e[0]);n=e[0],e[1]==="www."?r="http://"+e[0]:r=e[0]}return{type:"link",raw:e[0],text:n,href:r,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:v.normal};this.options.pedantic?(n.block=q.pedantic,n.inline=v.pedantic):this.options.gfm&&(n.block=q.gfm,this.options.breaks?n.inline=v.breaks:n.inline=v.gfm),this.tokenizer.rules=n}static get rules(){return{block:q,inline:v}}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 r=this.inlineQueue[n];this.inlineTokens(r.src,r.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],r=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(x.tabCharGlobal," ").replace(x.spaceLine,""));let s=1/0;for(;e;){if(e.length<s)s=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);r&&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),r=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 r=e;if(this.tokens.links){let l=Object.keys(this.tokens.links);l.length>0&&(r=r.replace(this.tokenizer.rules.inline.reflinkSearch,o=>l.includes(o.slice(o.lastIndexOf("[")+1,-1))?"["+"a".repeat(o.length-2)+"]":o))}r=r.replace(this.tokenizer.rules.inline.anyPunctuation,"++"),r=r.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)+"]"}),r=this.options.hooks?.emStrongMask?.call({lexer:this},r)??r;let s=!1,i="",a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}s||(i=""),s=!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,r,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,r,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)),s=!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 r=(e||"").match(x.notSpaceStart)?.[0],s=t.replace(x.endingNewline,"")+`\n`;return r?\'<pre><code class="language-\'+_(r)+\'">\'+(n?s:_(s,!0))+`</code></pre>\n`:"<pre><code>"+(n?s:_(s,!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,r="";for(let a=0;a<t.items.length;a++){let l=t.items[a];r+=this.listitem(l)}let s=e?"ol":"ul",i=e&&n!==1?\' start="\'+n+\'"\':"";return"<"+s+i+`>\n`+r+"</"+s+`>\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 s=0;s<t.header.length;s++)n+=this.tablecell(t.header[s]);e+=this.tablerow({text:n});let r="";for(let s=0;s<t.rows.length;s++){let i=t.rows[s];n="";for(let a=0;a<i.length;a++)n+=this.tablecell(i[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+e+`</thead>\n`+r+`</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 r=this.parser.parseInline(n),s=pe(t);if(s===null)return r;t=s;let i=\'<a href="\'+t+\'"\';return e&&(i+=\' title="\'+_(e)+\'"\'),i+=">"+r+"</a>",i}image({href:t,title:e,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let s=pe(t);if(s===null)return _(n);t=s;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 r=0;r<e.length;r++){let s=e[r];if(this.options.extensions?.renderers?.[s.type]){let a=s,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=s;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 r="";for(let s=0;s<e.length;s++){let i=e[s];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)){r+=l||"";continue}}let a=i;switch(a.type){case"escape":{r+=n.text(a);break}case"html":{r+=n.html(a);break}case"link":{r+=n.link(a);break}case"image":{r+=n.image(a);break}case"checkbox":{r+=n.checkbox(a);break}case"strong":{r+=n.strong(a);break}case"em":{r+=n.em(a);break}case"codespan":{r+=n.codespan(a);break}case"br":{r+=n.br(a);break}case"del":{r+=n.del(a);break}case"text":{r+=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 r}},B=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=B;constructor(...t){this.use(...t)}walkTokens(t,e){let n=[];for(let r of t)switch(n=n.concat(e.call(this,r)),r.type){case"table":{let s=r;for(let i of s.header)n=n.concat(this.walkTokens(i.tokens,e));for(let i of s.rows)for(let a of i)n=n.concat(this.walkTokens(a.tokens,e));break}case"list":{let s=r;n=n.concat(this.walkTokens(s.items,e));break}default:{let s=r;this.defaults.extensions?.childTokens?.[s.type]?this.defaults.extensions.childTokens[s.type].forEach(i=>{let a=s[i].flat(1/0);n=n.concat(this.walkTokens(a,e))}):s.tokens&&(n=n.concat(this.walkTokens(s.tokens,e)))}}return n}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){let i=e.renderers[s.name];i?e.renderers[s.name]=function(...a){let l=s.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}:e.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be \'block\' or \'inline\'");let i=e[s.level];i?i.unshift(s.tokenizer):e[s.level]=[s.tokenizer],s.start&&(s.level==="block"?e.startBlock?e.startBlock.push(s.start):e.startBlock=[s.start]:s.level==="inline"&&(e.startInline?e.startInline.push(s.start):e.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(e.childTokens[s.name]=s.childTokens)}),r.extensions=e),n.renderer){let s=this.defaults.renderer||new F(this.defaults);for(let i in n.renderer){if(!(i in s))throw new Error(`renderer \'${i}\' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=n.renderer[a],o=s[a];s[a]=(...c)=>{let h=l.apply(s,c);return h===!1&&(h=o.apply(s,c)),h||""}}r.renderer=s}if(n.tokenizer){let s=this.defaults.tokenizer||new j(this.defaults);for(let i in n.tokenizer){if(!(i in s))throw new Error(`tokenizer \'${i}\' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=n.tokenizer[a],o=s[a];s[a]=(...c)=>{let h=l.apply(s,c);return h===!1&&(h=o.apply(s,c)),h}}r.tokenizer=s}if(n.hooks){let s=this.defaults.hooks||new B;for(let i in n.hooks){if(!(i in s))throw new Error(`hook \'${i}\' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=n.hooks[a],o=s[a];B.passThroughHooks.has(i)?s[a]=c=>{if(this.defaults.async&&B.passThroughHooksRespectAsync.has(i))return(async()=>{let u=await l.call(s,c);return o.call(s,u)})();let h=l.call(s,c);return o.call(s,h)}:s[a]=(...c)=>{if(this.defaults.async)return(async()=>{let u=await l.apply(s,c);return u===!1&&(u=await o.apply(s,c)),u})();let h=l.apply(s,c);return h===!1&&(h=o.apply(s,c)),h}}r.hooks=s}if(n.walkTokens){let s=this.defaults.walkTokens,i=n.walkTokens;r.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),s&&(l=l.concat(s.call(this,a))),l}}this.defaults={...this.defaults,...r}}),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 r={...n},s={...this.defaults,...r},i=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&r.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(s.hooks&&(s.hooks.options=s,s.hooks.block=t),s.async)return(async()=>{let a=s.hooks?await s.hooks.preprocess(e):e,l=await(s.hooks?await s.hooks.provideLexer(t):t?R.lex:R.lexInline)(a,s),o=s.hooks?await s.hooks.processAllTokens(l):l;s.walkTokens&&await Promise.all(this.walkTokens(o,s.walkTokens));let c=await(s.hooks?await s.hooks.provideParser(t):t?T.parse:T.parseInline)(o,s);return s.hooks?await s.hooks.postprocess(c):c})().catch(i);try{s.hooks&&(e=s.hooks.preprocess(e));let a=(s.hooks?s.hooks.provideLexer(t):t?R.lex:R.lexInline)(e,s);s.hooks&&(a=s.hooks.processAllTokens(a)),s.walkTokens&&this.walkTokens(a,s.walkTokens);let l=(s.hooks?s.hooks.provideParser(t):t?T.parse:T.parseInline)(a,s);return s.hooks&&(l=s.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 r="<p>An error occurred:</p><pre>"+_(n.message+"",!0)+"</pre>";return e?Promise.resolve(r):r}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,de(f.defaults),f};f.getDefaults=J;f.defaults=I;f.use=function(...t){return L.use(...t),f.defaults=L.defaults,de(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=B;f.parse=f;var Jt=f.options,Kt=f.setOptions,Vt=f.use,Yt=f.walkTokens,en=f.parseInline;var tn=T.parse,nn=R.lex;var $e=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*(?:\\n|$)/,Pt=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*$/;function Ot(t){let e=1,n=0;for(;n<t.length;){let r=t.indexOf(`\n`,n),s=r===-1?t.slice(n):t.slice(n,r),i=Pt.exec(s);if(i){if(i[1]!==void 0)e++;else if(e--,e===0)return n}if(r===-1)break;n=r+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),r=Ot(n);if(r<0)return;let s=n.slice(0,r),i=n.indexOf(`\n`,r),a=i===-1?n.length:i+1,l=e[0]+n.slice(0,a),o=this.lexer.blockTokens(s,[]);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]+)",Mt=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 r=e;for(;;){let l=t.indexOf(`\n`,r);if(l===-1)return n(e,!0);let o=t.slice(r,l);if(!ze(o))break;r=l+1}let s=t.indexOf(`\n`,r),i=s===-1?t.slice(r):t.slice(r,s+1),a=s===-1?t.slice(r):t.slice(r,s);if(!Ae.test(a))return n(e,!1);if(e=r+i.length,s===-1)return n(e,!0)}function n(r,s){let i=t.slice(0,r),a=i.split(`\n`).map(l=>ze(l)?"":l.replace(Ae,"")).join(`\n`);return{raw:i,body:a,open:s}}}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=Mt.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),r=Nt(n),s=r.body.trim()?this.lexer.blockTokens(r.body,[]):[];return{type:"footnoteDef",raw:e[0]+r.raw,label:e[1],body:e[2],tokens:s}},renderer(t){return t.raw}}];function Oe(t,e,n){let r=0;for(let s=e;s<n;s++)r+=t[s].raw.length;return r}function vt(t,e){let n=t;return n.links=e,n}var Bt=/^ {0,3}\\$\\$/m;function Me(t){return t.includes("$$")===!1?!1:Bt.test(t)}function Dt(t,e){return t[e-2]?.type!=="list"?!0:e+1<t.length}function Ne(t,e){for(let n=t.length-2;n>=e;n--)if(t[n].type==="space"&&Dt(t,n+1)!==!1)return n+1;return-1}function ve(t){let e=t.links;if(!e)return!1;for(let n in e)return!0;return!1}function Be(t,e,n,r,s){let i=s;for(let a=e;a<n;a++){let l=t[a].raw;if(r.startsWith(l,i)===!1)return!1;i+=l.length}return!0}function M(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 qt(t,e){if(ve(e))return M(t,e,"link-definition");if(t.includes("\\r"))return M(t,e,"carriage-return");if(Me(t))return M(t,e,"block-math");if(ie(t))return M(t,e,"container");if(le(t))return M(t,e,"footnote-def");let n=Ne(e,1);if(n<0||Be(e,0,n,t,0)===!1)return Pe(t,e);let r=Oe(e,0,n);return{source:t,tail:t.slice(r),tokens:e,stableCount:n,stableOffset:r,degraded:!1,degradedReason:null}}function ae(t){let e=f.lexer(t);return{tokens:e,cache:qt(t,e),charsLexed:t.length,reusedTokens:0}}function O(t,e){let n=f.lexer(t);return{tokens:n,cache:M(t,n,e),charsLexed:t.length,reusedTokens:0}}function De(t,e){let n=t.source+e;if(t.degraded)return O(n,t.degradedReason??"link-definition");if(e.includes("\\r"))return O(n,"carriage-return");if(t.stableCount===0)return ae(n);let r=t.tail+e;if(Me(r))return O(n,"block-math");if(ie(r))return O(n,"container");if(le(r))return O(n,"footnote-def");let s=f.lexer(r);if(ve(s))return O(n,"link-definition");let i=t.tokens.slice(0,t.stableCount),a=vt([...i,...s],s.links),l=t.stableCount,o=t.stableOffset,c=r,h=Ne(a,t.stableCount+1);if(h>t.stableCount&&Be(a,t.stableCount,h,r,0)){let u=Oe(a,t.stableCount,h);l=h,o=t.stableOffset+u,c=r.slice(u)}return{tokens:a,cache:{source:n,tail:c,tokens:a,stableCount:l,stableOffset:o,degraded:!1,degradedReason:null},charsLexed:r.length,reusedTokens:t.stableCount}}var Zt=/^ {0,3}\\*\\[([^\\]\\n]+)\\]:[ \\t]*([^\\n]*)(?:\\n|$)/,qe=[{name:"abbrDef",level:"block",tokenizer(t){let e=Zt.exec(t);if(e)return{type:"abbrDef",raw:e[0],term:e[1],definition:e[2]}},renderer(t){return t.raw}}];var jt=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}"}),Ft=/^:([A-Za-z0-9_+-]+):/,Ze=[{name:"emoji",level:"inline",start(t){return t.match(/:/)?.index},tokenizer(t){let e=Ft.exec(t);if(!e)return;let n=jt[e[1]];if(n!==void 0)return{type:"emoji",raw:e[0],text:n}},renderer(t){return t.raw}}];var Xt=/^\\+\\+(?!\\s)((?:\\\\[\\s\\S]|(?!\\+\\+)[\\s\\S])+?)(?<!\\s)\\+\\+/,Qt=/^==(?!\\s)((?:\\\\[\\s\\S]|(?!==)[\\s\\S])+?)(?<!\\s)==/,je=[{name:"ins",level:"inline",start(t){return t.match(/(?<!\\\\)\\+\\+(?!\\s)/)?.index},tokenizer(t){let e=Xt.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=Qt.exec(t);if(e)return{type:"mark",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Ht=/^\\^((?:\\\\[\\s\\S]|[^\\s^\\\\])+)\\^/,Fe=[{name:"sup",level:"inline",start(t){return t.match(/(?<!\\\\)\\^(?!\\s)/)?.index},tokenizer(t){let e=Ht.exec(t);if(e)return{type:"sup",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Wt=0;function Gt(t){if(typeof t!="string"||typeof performance.mark!="function"||typeof performance.measure!="function")return null;let e=Wt++,n={name:t,startMark:`${t}:start:${e}`,endMark:`${t}:end:${e}`};try{return performance.mark(n.startMark),n}catch{return null}}function Ut(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}\\$\\$([\\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 N=new Map;self.onmessage=t=>{let e=t.data;if(typeof e!="object"||e===null)return;let{id:n,text:r,append:s,expectedLength:i,oldRaws:a,instance:l,baseVersion:o,dispose:c,userTimingName:h}=e;if(c===!0){typeof l=="string"&&N.delete(l);return}let u=typeof l=="string"?l:null,p=typeof o=="number"?o:null,d,k=null,m=null;if(typeof s=="string"){if(u===null||p===null){self.postMessage({id:n,needResync:!0});return}let w=N.get(u);if(!w||w.version!==p){self.postMessage({id:n,needResync:!0});return}if(typeof i=="number"&&w.lex.source.length+s.length!==i){N.delete(u),self.postMessage({id:n,needResync:!0});return}let y=w.lex;d=()=>De(y,s),m=y.tokens}else if(typeof r=="string"){let w=r;if(d=()=>ae(w),Array.isArray(a))k=a;else if(u!==null&&p!==null){let y=N.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"?Gt(h):null,y=performance.now(),$;try{$=d()}finally{w&&Ut(w)}let H=performance.now()-y,z=$.tokens,b=0;if(k!==null){let S=Math.min(k.length,z.length);for(;b<S&&k[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&&N.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&&N.delete(u),self.postMessage({id:n,error:String(w)})}};})();\n';
1921
2615
 
1922
2616
  // src/Markdown.ts
1923
2617
  var now = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
2618
+ function mapsEqual(a, b) {
2619
+ if (a.size !== b.size) return false;
2620
+ for (const [key, value] of a) {
2621
+ if (b.get(key) !== value) return false;
2622
+ }
2623
+ return true;
2624
+ }
1924
2625
  function lexMarkdown(text, userTiming) {
1925
2626
  if (!userTiming) return marked.lexer(text);
1926
2627
  const timing = beginVectoUserTiming(VECTO_USER_TIMING.markdown.parse);
@@ -1931,11 +2632,18 @@ function lexMarkdown(text, userTiming) {
1931
2632
  }
1932
2633
  }
1933
2634
  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.
2635
+ // `FOOTNOTE_EXTENSIONS`, `SUPERSCRIPT_EXTENSIONS`, `INS_MARK_EXTENSIONS`,
2636
+ // `EMOJI_EXTENSIONS`, `CONTAINER_EXTENSIONS`, and `ABBR_EXTENSIONS` are
2637
+ // shared with `MarkdownWorker.ts` rather than spelled out twice: the two
2638
+ // registration sites must agree exactly, or the worker returns tokens this
2639
+ // renderer has no arm for.
1937
2640
  extensions: [
1938
2641
  ...FOOTNOTE_EXTENSIONS,
2642
+ ...SUPERSCRIPT_EXTENSIONS,
2643
+ ...INS_MARK_EXTENSIONS,
2644
+ ...EMOJI_EXTENSIONS,
2645
+ ...CONTAINER_EXTENSIONS,
2646
+ ...ABBR_EXTENSIONS,
1939
2647
  {
1940
2648
  name: "blockMath",
1941
2649
  level: "block",
@@ -2145,6 +2853,19 @@ var Markdown = class _Markdown extends UIComponent3 {
2145
2853
  mathLoadPending = false;
2146
2854
  _userTiming;
2147
2855
  tokens = [];
2856
+ /**
2857
+ * The document's `*[TERM]: definition` dictionary, collected from
2858
+ * {@link tokens}'s top-level `abbrDef` entries.
2859
+ *
2860
+ * Recomputed whenever {@link setTokens} runs. Its own identity — not its
2861
+ * CONTENTS — is what {@link updateTokens} compares against the previous
2862
+ * render to decide whether prose rendered before this definition existed
2863
+ * needs a full rebuild rather than the usual prefix-reuse: see
2864
+ * `markdown-abbr.ts`'s module doc for why a late-arriving definition can
2865
+ * retroactively change already-rendered inline tokens, the same hazard
2866
+ * `hasLinkDefinitions` names for reference definitions.
2867
+ */
2868
+ abbreviations = /* @__PURE__ */ new Map();
2148
2869
  // At most one worker lex request in flight at a time. Required for the
2149
2870
  // delta-transfer protocol below to be safe: the request captures a
2150
2871
  // snapshot of `this.tokens` to reconstruct the full array from the
@@ -2279,7 +3000,7 @@ var Markdown = class _Markdown extends UIComponent3 {
2279
3000
  constructor(markdownText, opts = {}) {
2280
3001
  super();
2281
3002
  this.maxWidth = opts.maxWidth ?? 800;
2282
- this.theme = resolveTheme(opts.theme);
3003
+ this.theme = resolvePresetTheme(opts.theme);
2283
3004
  this.onLinkClick = opts.onLinkClick;
2284
3005
  this.selectable = opts.selectable ?? true;
2285
3006
  this._userTiming = opts.userTiming ?? false;
@@ -2397,6 +3118,7 @@ var Markdown = class _Markdown extends UIComponent3 {
2397
3118
  renderMarkdown(text) {
2398
3119
  const tokens = lexMarkdown(text, this._userTiming);
2399
3120
  this.setTokens(tokens);
3121
+ this.abbreviations = collectAbbreviations(tokens);
2400
3122
  for (const token of tokens) {
2401
3123
  const el = this.renderToken(token);
2402
3124
  if (el) {
@@ -2555,6 +3277,38 @@ var Markdown = class _Markdown extends UIComponent3 {
2555
3277
  entity.height = Math.max(border?.height ?? 0, innerStack?.height ?? 0);
2556
3278
  return;
2557
3279
  }
3280
+ case "container": {
3281
+ const ctToken = token;
3282
+ const innerStack = entity.children.find((c) => c instanceof Stack);
3283
+ const border = entity.children.find((c) => c instanceof QuoteBorder);
3284
+ const background = entity.children.find((c) => c instanceof ContainerBackground);
3285
+ const indentStart = Math.min(this.theme.containerIndent, availableWidth);
3286
+ const childWidth = Math.max(0, availableWidth - indentStart);
3287
+ if (innerStack instanceof Stack) {
3288
+ let index = 0;
3289
+ for (const inner of ctToken.tokens) {
3290
+ if (!this.producesEntity(inner)) continue;
3291
+ const wrapper = innerStack.children[index++];
3292
+ if (!wrapper) break;
3293
+ const block = wrapper.children[0];
3294
+ if (!block) continue;
3295
+ this.reflowToken(inner, block, childWidth);
3296
+ block.x = indentStart;
3297
+ wrapper.width = block.width + indentStart;
3298
+ wrapper.height = block.height;
3299
+ }
3300
+ innerStack.layout();
3301
+ }
3302
+ const contentHeight = innerStack?.height || 20;
3303
+ if (border instanceof QuoteBorder) border.height = contentHeight;
3304
+ if (background instanceof ContainerBackground) {
3305
+ background.width = availableWidth;
3306
+ background.height = contentHeight;
3307
+ }
3308
+ entity.width = availableWidth;
3309
+ entity.height = Math.max(background?.height ?? 0, border?.height ?? 0, contentHeight);
3310
+ return;
3311
+ }
2558
3312
  case "list": {
2559
3313
  if (!(entity instanceof Stack)) return;
2560
3314
  for (const item of entity.children) {
@@ -2572,7 +3326,31 @@ var Markdown = class _Markdown extends UIComponent3 {
2572
3326
  return;
2573
3327
  }
2574
3328
  case "footnoteDef": {
2575
- if (entity instanceof RichText2) entity.setMaxWidth(availableWidth);
3329
+ if (entity instanceof RichText2) {
3330
+ entity.setMaxWidth(availableWidth);
3331
+ return;
3332
+ }
3333
+ if (entity instanceof Stack) {
3334
+ const fnToken = token;
3335
+ entity.maxWidth = availableWidth;
3336
+ const header = entity.children[0];
3337
+ if (header instanceof RichText2) header.setMaxWidth(availableWidth);
3338
+ const indent = Math.round(this.theme.fontSize);
3339
+ const childWidth = Math.max(1, availableWidth - indent);
3340
+ let index = 1;
3341
+ for (const inner of fnToken.tokens) {
3342
+ if (!this.producesEntity(inner)) continue;
3343
+ const wrapper = entity.children[index++];
3344
+ if (!wrapper) break;
3345
+ const block = wrapper.children[0];
3346
+ if (!block) continue;
3347
+ this.reflowToken(inner, block, childWidth);
3348
+ block.x = indent;
3349
+ wrapper.width = block.width + indent;
3350
+ wrapper.height = block.height;
3351
+ }
3352
+ entity.layout();
3353
+ }
2576
3354
  return;
2577
3355
  }
2578
3356
  default: {
@@ -3073,7 +3851,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3073
3851
  literalParagraphSpans(token) {
3074
3852
  const spans = [];
3075
3853
  if (token.tokens && token.tokens.length > 0) {
3076
- collectSpans(token.tokens, {}, this.theme, spans);
3854
+ collectSpans(token.tokens, {}, this.theme, spans, void 0, this.abbreviations);
3077
3855
  }
3078
3856
  if (spans.length === 0) spans.push({ text: token.text });
3079
3857
  return spans;
@@ -3118,7 +3896,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3118
3896
  */
3119
3897
  tableCellSpans(cell, t) {
3120
3898
  const spans = [];
3121
- collectSpans(cell.tokens, {}, t, spans);
3899
+ collectSpans(cell.tokens, {}, t, spans, void 0, this.abbreviations);
3122
3900
  if (spans.length === 0) spans.push({ text: decodeEntities(cell.text) });
3123
3901
  return spans;
3124
3902
  }
@@ -3136,7 +3914,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3136
3914
  */
3137
3915
  inlineRunSpans(tokens, t) {
3138
3916
  const spans = [];
3139
- if (tokens.length > 0) collectSpans(tokens, {}, t, spans);
3917
+ if (tokens.length > 0) collectSpans(tokens, {}, t, spans, void 0, this.abbreviations);
3140
3918
  if (spans.length === 0) spans.push({ text: "" });
3141
3919
  return spans;
3142
3920
  }
@@ -3399,14 +4177,18 @@ var Markdown = class _Markdown extends UIComponent3 {
3399
4177
  inner.tokens,
3400
4178
  {},
3401
4179
  this.theme,
3402
- contentSpans
4180
+ contentSpans,
4181
+ void 0,
4182
+ this.abbreviations
3403
4183
  );
3404
4184
  } else if ("tokens" in inner && inner.tokens?.length) {
3405
4185
  collectSpans(
3406
4186
  inner.tokens,
3407
4187
  {},
3408
4188
  this.theme,
3409
- contentSpans
4189
+ contentSpans,
4190
+ void 0,
4191
+ this.abbreviations
3410
4192
  );
3411
4193
  } else if ("text" in inner) {
3412
4194
  contentSpans.push({ text: decodeEntities(inner.text) });
@@ -3680,7 +4462,7 @@ var Markdown = class _Markdown extends UIComponent3 {
3680
4462
  headingSpans(token) {
3681
4463
  const spans = [];
3682
4464
  if (token.tokens && token.tokens.length > 0) {
3683
- collectSpans(token.tokens, {}, this.theme, spans);
4465
+ collectSpans(token.tokens, {}, this.theme, spans, void 0, this.abbreviations);
3684
4466
  }
3685
4467
  if (spans.length === 0) spans.push({ text: decodeEntities(token.text) });
3686
4468
  return spans;
@@ -3721,7 +4503,14 @@ var Markdown = class _Markdown extends UIComponent3 {
3721
4503
  if (!found) return null;
3722
4504
  const spans = [];
3723
4505
  if (inline.length > runLength) {
3724
- collectSpans(inline.slice(0, -runLength), {}, this.theme, spans);
4506
+ collectSpans(
4507
+ inline.slice(0, -runLength),
4508
+ {},
4509
+ this.theme,
4510
+ spans,
4511
+ void 0,
4512
+ this.abbreviations
4513
+ );
3725
4514
  }
3726
4515
  const head = runText.slice(0, found.at);
3727
4516
  if (head) spans.push({ text: decodeEntities(head) });
@@ -3914,6 +4703,10 @@ var Markdown = class _Markdown extends UIComponent3 {
3914
4703
  }
3915
4704
  }
3916
4705
  }
4706
+ const newAbbreviations = collectAbbreviations(newTokens);
4707
+ const abbreviationsChanged = !mapsEqual(this.abbreviations, newAbbreviations);
4708
+ if (abbreviationsChanged) matchLen = 0;
4709
+ this.abbreviations = newAbbreviations;
3917
4710
  const oldTokenToChild = this.tokenChildPrefix;
3918
4711
  const rawMatchLen = matchLen;
3919
4712
  let pendingTail = null;
@@ -4081,6 +4874,10 @@ var Markdown = class _Markdown extends UIComponent3 {
4081
4874
  // It renders its own block, so it produces an entity — see `renderToken`'s
4082
4875
  // arm for why in place rather than collected into a document footer.
4083
4876
  case "footnoteDef":
4877
+ // A `ContainerToken` carries `tokens`, not `text`, so it would otherwise
4878
+ // fail the `default:` arm's `'text' in token` fallback check entirely —
4879
+ // the same trap `footnoteDef` above already documents.
4880
+ case "container":
4084
4881
  return true;
4085
4882
  default:
4086
4883
  return "text" in token;
@@ -4169,7 +4966,8 @@ var Markdown = class _Markdown extends UIComponent3 {
4169
4966
  availableWidth,
4170
4967
  t,
4171
4968
  this.selectable,
4172
- this.onLinkClick
4969
+ this.onLinkClick,
4970
+ this.abbreviations
4173
4971
  );
4174
4972
  }
4175
4973
  // ── Paragraphs ───────────────────────────────────────────────────
@@ -4184,7 +4982,8 @@ var Markdown = class _Markdown extends UIComponent3 {
4184
4982
  availableWidth,
4185
4983
  t,
4186
4984
  this.selectable,
4187
- this.onLinkClick
4985
+ this.onLinkClick,
4986
+ this.abbreviations
4188
4987
  );
4189
4988
  }
4190
4989
  const stack = new Stack({
@@ -4283,6 +5082,54 @@ var Markdown = class _Markdown extends UIComponent3 {
4283
5082
  container.height = Math.max(border.height, innerStack.height);
4284
5083
  return container;
4285
5084
  }
5085
+ // ── `:::` fenced containers ─────────────────────────────────────
5086
+ case "container": {
5087
+ const ctToken = token;
5088
+ const accent = containerColor(t, ctToken.kind);
5089
+ const innerStack = new Stack({
5090
+ direction: "vertical",
5091
+ gap: t.containerInnerGap
5092
+ });
5093
+ const indentStart = Math.min(t.containerIndent, availableWidth);
5094
+ const childMetrics = {
5095
+ marginBefore: 0,
5096
+ marginAfter: 0,
5097
+ indentStart,
5098
+ availableWidth: Math.max(0, availableWidth - indentStart)
5099
+ };
5100
+ for (const inner of ctToken.tokens) {
5101
+ const el = this.renderTokenWithMetrics(inner, childMetrics);
5102
+ if (el) {
5103
+ const wrapper2 = new MarkdownContainer();
5104
+ el.x = childMetrics.indentStart;
5105
+ wrapper2.add(el);
5106
+ wrapper2.width = el.width + childMetrics.indentStart;
5107
+ wrapper2.height = el.height;
5108
+ innerStack.add(wrapper2);
5109
+ }
5110
+ }
5111
+ const contentHeight = innerStack.height || 20;
5112
+ const background = new ContainerBackground(
5113
+ availableWidth,
5114
+ contentHeight,
5115
+ t.containerBgColor,
5116
+ t.containerRadius
5117
+ );
5118
+ const border = new QuoteBorder(contentHeight, accent, t.containerBorderWidth);
5119
+ const wrapper = new MarkdownContainer();
5120
+ background.x = 0;
5121
+ background.y = 0;
5122
+ wrapper.add(background);
5123
+ border.x = 0;
5124
+ border.y = 0;
5125
+ wrapper.add(border);
5126
+ innerStack.x = 0;
5127
+ innerStack.y = 0;
5128
+ wrapper.add(innerStack);
5129
+ wrapper.width = availableWidth;
5130
+ wrapper.height = Math.max(background.height, border.height, innerStack.height);
5131
+ return wrapper;
5132
+ }
4286
5133
  // ── Lists ────────────────────────────────────────────────
4287
5134
  case "list": {
4288
5135
  const listToken = token;
@@ -4326,20 +5173,43 @@ var Markdown = class _Markdown extends UIComponent3 {
4326
5173
  // ── Footnote definition (`[^1]: note`) ───────────────────────────
4327
5174
  case "footnoteDef": {
4328
5175
  const fnToken = token;
4329
- const spans = [
5176
+ const headerSpans = [
4330
5177
  {
4331
5178
  text: footnoteMarker(fnToken.label),
4332
5179
  style: { color: t.footnoteColor }
4333
5180
  },
4334
5181
  { text: " " }
4335
5182
  ];
4336
- if (fnToken.body) spans.push({ text: decodeEntities(fnToken.body) });
4337
- return new RichText2(spans, {
5183
+ if (fnToken.body) headerSpans.push({ text: decodeEntities(fnToken.body) });
5184
+ const headerRichText = new RichText2(headerSpans, {
4338
5185
  font: bodyFont,
4339
5186
  color: t.textColor,
4340
5187
  maxWidth: availableWidth,
4341
5188
  selectable: this.selectable
4342
5189
  });
5190
+ if (!fnToken.tokens || fnToken.tokens.length === 0) {
5191
+ return headerRichText;
5192
+ }
5193
+ const indent = Math.round(t.fontSize);
5194
+ const childMetrics = {
5195
+ marginBefore: 0,
5196
+ marginAfter: 0,
5197
+ indentStart: indent,
5198
+ availableWidth: Math.max(1, availableWidth - indent)
5199
+ };
5200
+ const stack = new Stack({ direction: "vertical", gap: t.listItemGap });
5201
+ stack.add(headerRichText);
5202
+ for (const inner of fnToken.tokens) {
5203
+ const el = this.renderTokenWithMetrics(inner, childMetrics);
5204
+ if (!el) continue;
5205
+ const wrapper = new MarkdownContainer();
5206
+ el.x = indent;
5207
+ wrapper.add(el);
5208
+ wrapper.width = el.width + indent;
5209
+ wrapper.height = el.height;
5210
+ stack.add(wrapper);
5211
+ }
5212
+ return stack;
4343
5213
  }
4344
5214
  // ── Horizontal rule ──────────────────────────────────────────────
4345
5215
  case "hr":
@@ -4379,6 +5249,7 @@ export {
4379
5249
  CodeBlock,
4380
5250
  Markdown,
4381
5251
  MathBlock,
5252
+ PRESET_THEMES,
4382
5253
  codeAtlas,
4383
5254
  codeAtlasStats,
4384
5255
  escapeCsvField,
@@ -4386,9 +5257,11 @@ export {
4386
5257
  extensionForLanguage,
4387
5258
  footnoteMarker,
4388
5259
  isMathJaxReady,
5260
+ isPresetName,
4389
5261
  mimeForLanguage,
4390
5262
  parseFrontMatterFields,
4391
5263
  preloadMathJax,
5264
+ resolvePresetTheme,
4392
5265
  scanFrontMatter,
4393
5266
  tableContentOf,
4394
5267
  tableToCsv,