dsh-plugin-github-issues 0.6.0 → 0.7.1

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/lib/client.js CHANGED
@@ -26,7 +26,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
26
26
  // src/client/index.tsx
27
27
  var index_exports = {};
28
28
  __export(index_exports, {
29
- apply: () => apply,
29
+ apply: () => apply3,
30
30
  inject: () => inject
31
31
  });
32
32
  module.exports = __toCommonJS(index_exports);
@@ -83,20 +83,20 @@ function priorityText(issue) {
83
83
  }
84
84
  function renderPrompt(issue, template) {
85
85
  const source = template === "" ? DEFAULT_PROMPT_TEMPLATE : template;
86
- let text = source;
87
- text = fill(text, "repo", issue.repo);
88
- text = fill(text, "number", String(issue.number));
89
- text = fill(text, "title", issue.title);
90
- text = fill(text, "url", issue.url);
91
- text = fill(text, "state", stateText(issue));
92
- text = fill(text, "milestone", milestoneText(issue));
93
- text = fill(text, "priority", priorityText(issue));
94
- text = fill(text, "assignees", issue.assignees.length === 0 ? "\u672A\u6307\u6D3E" : issue.assignees.map((a) => a.login).join(", "));
95
- text = fill(text, "labels", issue.labels.length === 0 ? "\u65E0" : issue.labels.map((l) => l.name).join(", "));
96
- text = fill(text, "prs", prsText(issue));
97
- if (text.length > 8e3) return `${text.slice(0, 7990)}
86
+ let text2 = source;
87
+ text2 = fill(text2, "repo", issue.repo);
88
+ text2 = fill(text2, "number", String(issue.number));
89
+ text2 = fill(text2, "title", issue.title);
90
+ text2 = fill(text2, "url", issue.url);
91
+ text2 = fill(text2, "state", stateText(issue));
92
+ text2 = fill(text2, "milestone", milestoneText(issue));
93
+ text2 = fill(text2, "priority", priorityText(issue));
94
+ text2 = fill(text2, "assignees", issue.assignees.length === 0 ? "\u672A\u6307\u6D3E" : issue.assignees.map((a3) => a3.login).join(", "));
95
+ text2 = fill(text2, "labels", issue.labels.length === 0 ? "\u65E0" : issue.labels.map((l) => l.name).join(", "));
96
+ text2 = fill(text2, "prs", prsText(issue));
97
+ if (text2.length > 8e3) return `${text2.slice(0, 7990)}
98
98
  \u2026\uFF08\u5DF2\u622A\u65AD\uFF09`;
99
- return text;
99
+ return text2;
100
100
  }
101
101
  var EMPTY_DRAFT_HOLD = "\u200B\n";
102
102
  function composeHandoffPrompt(prompt, memo) {
@@ -505,10 +505,10 @@ function ErrorBanner({ message, retryLabel, onRetry, children }) {
505
505
  children
506
506
  ] });
507
507
  }
508
- function Toast({ text, onDismiss, dismissLabel }) {
509
- if (text === "") return null;
508
+ function Toast({ text: text2, onDismiss, dismissLabel }) {
509
+ if (text2 === "") return null;
510
510
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "gh-toast", role: "status", children: [
511
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "gh-toast-text", children: text }),
511
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { className: "gh-toast-text", children: text2 }),
512
512
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("button", { type: "button", className: "gh-toast-close", "aria-label": dismissLabel, title: dismissLabel, onClick: onDismiss, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(CloseGlyph, { size: 12 }) })
513
513
  ] });
514
514
  }
@@ -813,10 +813,3426 @@ ${t("pending.tip")}`, onClick: onOpenPanel, children: [
813
813
  // src/client/views/Page.tsx
814
814
  var import_react2 = require("react");
815
815
 
816
+ // node_modules/dompurify/dist/purify.es.mjs
817
+ function _OverloadYield(e, d) {
818
+ this.v = e, this.k = d;
819
+ }
820
+ function _arrayLikeToArray(r, a3) {
821
+ (null == a3 || a3 > r.length) && (a3 = r.length);
822
+ for (var e = 0, n = Array(a3); e < a3; e++) n[e] = r[e];
823
+ return n;
824
+ }
825
+ function _arrayWithHoles(r) {
826
+ if (Array.isArray(r)) return r;
827
+ }
828
+ function _iterableToArrayLimit(r, l) {
829
+ var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
830
+ if (null != t) {
831
+ var e, n, i, u, a3 = [], f = true, o = false;
832
+ try {
833
+ if (i = (t = t.call(r)).next, 0 === l) {
834
+ if (Object(t) !== t) return;
835
+ f = false;
836
+ } else for (; !(f = (e = i.call(t)).done) && (a3.push(e.value), a3.length !== l); f = true) ;
837
+ } catch (r2) {
838
+ o = true, n = r2;
839
+ } finally {
840
+ try {
841
+ if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
842
+ } finally {
843
+ if (o) throw n;
844
+ }
845
+ }
846
+ return a3;
847
+ }
848
+ }
849
+ function _nonIterableRest() {
850
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
851
+ }
852
+ function _slicedToArray(r, e) {
853
+ return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
854
+ }
855
+ function _unsupportedIterableToArray(r, a3) {
856
+ if (r) {
857
+ if ("string" == typeof r) return _arrayLikeToArray(r, a3);
858
+ var t = {}.toString.call(r).slice(8, -1);
859
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a3) : void 0;
860
+ }
861
+ }
862
+ function AsyncGenerator(e) {
863
+ var t, n;
864
+ function resume(t2, n2) {
865
+ try {
866
+ var r = e[t2](n2), o = r.value, u = o instanceof _OverloadYield;
867
+ Promise.resolve(u ? o.v : o).then(function(n3) {
868
+ if (u) {
869
+ var i = "return" === t2 && o.k ? t2 : "next";
870
+ if (!o.k || n3.done) return resume(i, n3);
871
+ n3 = e[i](n3).value;
872
+ }
873
+ settle(!!r.done, n3);
874
+ }, function(e2) {
875
+ resume("throw", e2);
876
+ });
877
+ } catch (e2) {
878
+ settle(2, e2);
879
+ }
880
+ }
881
+ function settle(e2, r) {
882
+ 2 === e2 ? t.reject(r) : t.resolve({
883
+ value: r,
884
+ done: e2
885
+ }), (t = t.next) ? resume(t.key, t.arg) : n = null;
886
+ }
887
+ this._invoke = function(e2, r) {
888
+ return new Promise(function(o, u) {
889
+ var i = {
890
+ key: e2,
891
+ arg: r,
892
+ resolve: o,
893
+ reject: u,
894
+ next: null
895
+ };
896
+ n ? n = n.next = i : (t = n = i, resume(e2, r));
897
+ });
898
+ }, "function" != typeof e.return && (this.return = void 0);
899
+ }
900
+ AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function() {
901
+ return this;
902
+ }, AsyncGenerator.prototype.next = function(e) {
903
+ return this._invoke("next", e);
904
+ }, AsyncGenerator.prototype.throw = function(e) {
905
+ return this._invoke("throw", e);
906
+ }, AsyncGenerator.prototype.return = function(e) {
907
+ return this._invoke("return", e);
908
+ };
909
+ var entries = Object.entries;
910
+ var setPrototypeOf = Object.setPrototypeOf;
911
+ var isFrozen = Object.isFrozen;
912
+ var getPrototypeOf = Object.getPrototypeOf;
913
+ var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
914
+ var freeze = Object.freeze;
915
+ var seal = Object.seal;
916
+ var create = Object.create;
917
+ var _ref = typeof Reflect !== "undefined" && Reflect;
918
+ var apply = _ref.apply;
919
+ var construct = _ref.construct;
920
+ if (!freeze) freeze = function freeze2(x) {
921
+ return x;
922
+ };
923
+ if (!seal) seal = function seal2(x) {
924
+ return x;
925
+ };
926
+ if (!apply) apply = function apply2(func, thisArg) {
927
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];
928
+ return func.apply(thisArg, args);
929
+ };
930
+ if (!construct) construct = function construct2(Func) {
931
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
932
+ return new Func(...args);
933
+ };
934
+ var arrayForEach = unapply(Array.prototype.forEach);
935
+ Array.prototype.indexOf;
936
+ var arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
937
+ var arrayPop = unapply(Array.prototype.pop);
938
+ var arrayPush = unapply(Array.prototype.push);
939
+ var arraySlice = unapply(Array.prototype.slice);
940
+ var arraySplice = unapply(Array.prototype.splice);
941
+ var arrayIsArray = Array.isArray;
942
+ var setCreate = unconstruct(Set);
943
+ var setAdd = unapply(Set.prototype.add);
944
+ var setHas = unapply(Set.prototype.has);
945
+ var stringToLowerCase = unapply(String.prototype.toLowerCase);
946
+ var stringToString = unapply(String.prototype.toString);
947
+ var stringMatch = unapply(String.prototype.match);
948
+ var stringReplace = unapply(String.prototype.replace);
949
+ var stringIndexOf = unapply(String.prototype.indexOf);
950
+ var stringTrim = unapply(String.prototype.trim);
951
+ var numberToString = unapply(Number.prototype.toString);
952
+ var booleanToString = unapply(Boolean.prototype.toString);
953
+ var bigintToString = typeof BigInt === "undefined" ? null : unapply(BigInt.prototype.toString);
954
+ var symbolToString = typeof Symbol === "undefined" ? null : unapply(Symbol.prototype.toString);
955
+ var objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
956
+ var objectToString = unapply(Object.prototype.toString);
957
+ var regExpTest = unapply(RegExp.prototype.test);
958
+ var typeErrorCreate = unconstruct(TypeError);
959
+ function unapply(func) {
960
+ return function(thisArg) {
961
+ if (thisArg instanceof RegExp) thisArg.lastIndex = 0;
962
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];
963
+ return apply(func, thisArg, args);
964
+ };
965
+ }
966
+ function unconstruct(Func) {
967
+ return function() {
968
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];
969
+ return construct(Func, args);
970
+ };
971
+ }
972
+ function addToSet(set, array) {
973
+ let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
974
+ if (setPrototypeOf) setPrototypeOf(set, null);
975
+ if (!arrayIsArray(array)) return set;
976
+ let l = array.length;
977
+ while (l--) {
978
+ let element = array[l];
979
+ if (typeof element === "string") {
980
+ const lcElement = transformCaseFunc(element);
981
+ if (lcElement !== element) {
982
+ if (!isFrozen(array)) array[l] = lcElement;
983
+ element = lcElement;
984
+ }
985
+ }
986
+ set[element] = true;
987
+ }
988
+ return set;
989
+ }
990
+ function cleanArray(array) {
991
+ for (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;
992
+ return array;
993
+ }
994
+ function clone(object) {
995
+ const newObject = create(null);
996
+ for (const _ref2 of entries(object)) {
997
+ var _ref3 = _slicedToArray(_ref2, 2);
998
+ const property = _ref3[0];
999
+ const value = _ref3[1];
1000
+ if (objectHasOwnProperty(object, property)) {
1001
+ if (arrayIsArray(value)) newObject[property] = cleanArray(value);
1002
+ else if (value && typeof value === "object" && value.constructor === Object) newObject[property] = clone(value);
1003
+ else newObject[property] = value;
1004
+ }
1005
+ }
1006
+ return newObject;
1007
+ }
1008
+ function stringifyValue(value) {
1009
+ switch (typeof value) {
1010
+ case "string":
1011
+ return value;
1012
+ case "number":
1013
+ return numberToString(value);
1014
+ case "boolean":
1015
+ return booleanToString(value);
1016
+ case "bigint":
1017
+ return bigintToString ? bigintToString(value) : "0";
1018
+ case "symbol":
1019
+ return symbolToString ? symbolToString(value) : "Symbol()";
1020
+ case "undefined":
1021
+ return objectToString(value);
1022
+ case "function":
1023
+ case "object": {
1024
+ if (value === null) return objectToString(value);
1025
+ const valueAsRecord = value;
1026
+ const valueToString = lookupGetter(valueAsRecord, "toString");
1027
+ if (typeof valueToString === "function") {
1028
+ const stringified = valueToString(valueAsRecord);
1029
+ return typeof stringified === "string" ? stringified : objectToString(stringified);
1030
+ }
1031
+ return objectToString(value);
1032
+ }
1033
+ default:
1034
+ return objectToString(value);
1035
+ }
1036
+ }
1037
+ function lookupGetter(object, prop) {
1038
+ while (object !== null) {
1039
+ const desc = getOwnPropertyDescriptor(object, prop);
1040
+ if (desc) {
1041
+ if (desc.get) return unapply(desc.get);
1042
+ if (typeof desc.value === "function") return unapply(desc.value);
1043
+ }
1044
+ object = getPrototypeOf(object);
1045
+ }
1046
+ function fallbackValue() {
1047
+ return null;
1048
+ }
1049
+ return fallbackValue;
1050
+ }
1051
+ function lookupAccessor(object, prop) {
1052
+ while (object !== null) {
1053
+ const desc = getOwnPropertyDescriptor(object, prop);
1054
+ if (desc) return desc.get ? unapply(desc.get) : null;
1055
+ object = getPrototypeOf(object);
1056
+ }
1057
+ return null;
1058
+ }
1059
+ function isRegex(value) {
1060
+ try {
1061
+ regExpTest(value, "");
1062
+ return true;
1063
+ } catch (_unused) {
1064
+ return false;
1065
+ }
1066
+ }
1067
+ var html$1 = freeze([
1068
+ "a",
1069
+ "abbr",
1070
+ "acronym",
1071
+ "address",
1072
+ "area",
1073
+ "article",
1074
+ "aside",
1075
+ "audio",
1076
+ "b",
1077
+ "bdi",
1078
+ "bdo",
1079
+ "big",
1080
+ "blink",
1081
+ "blockquote",
1082
+ "body",
1083
+ "br",
1084
+ "button",
1085
+ "canvas",
1086
+ "caption",
1087
+ "center",
1088
+ "cite",
1089
+ "code",
1090
+ "col",
1091
+ "colgroup",
1092
+ "content",
1093
+ "data",
1094
+ "datalist",
1095
+ "dd",
1096
+ "decorator",
1097
+ "del",
1098
+ "details",
1099
+ "dfn",
1100
+ "dialog",
1101
+ "dir",
1102
+ "div",
1103
+ "dl",
1104
+ "dt",
1105
+ "element",
1106
+ "em",
1107
+ "fieldset",
1108
+ "figcaption",
1109
+ "figure",
1110
+ "font",
1111
+ "footer",
1112
+ "form",
1113
+ "h1",
1114
+ "h2",
1115
+ "h3",
1116
+ "h4",
1117
+ "h5",
1118
+ "h6",
1119
+ "head",
1120
+ "header",
1121
+ "hgroup",
1122
+ "hr",
1123
+ "html",
1124
+ "i",
1125
+ "img",
1126
+ "input",
1127
+ "ins",
1128
+ "kbd",
1129
+ "label",
1130
+ "legend",
1131
+ "li",
1132
+ "main",
1133
+ "map",
1134
+ "mark",
1135
+ "marquee",
1136
+ "menu",
1137
+ "menuitem",
1138
+ "meter",
1139
+ "nav",
1140
+ "nobr",
1141
+ "ol",
1142
+ "optgroup",
1143
+ "option",
1144
+ "output",
1145
+ "p",
1146
+ "picture",
1147
+ "pre",
1148
+ "progress",
1149
+ "q",
1150
+ "rp",
1151
+ "rt",
1152
+ "ruby",
1153
+ "s",
1154
+ "samp",
1155
+ "search",
1156
+ "section",
1157
+ "select",
1158
+ "shadow",
1159
+ "slot",
1160
+ "small",
1161
+ "source",
1162
+ "spacer",
1163
+ "span",
1164
+ "strike",
1165
+ "strong",
1166
+ "style",
1167
+ "sub",
1168
+ "summary",
1169
+ "sup",
1170
+ "table",
1171
+ "tbody",
1172
+ "td",
1173
+ "template",
1174
+ "textarea",
1175
+ "tfoot",
1176
+ "th",
1177
+ "thead",
1178
+ "time",
1179
+ "tr",
1180
+ "track",
1181
+ "tt",
1182
+ "u",
1183
+ "ul",
1184
+ "var",
1185
+ "video",
1186
+ "wbr"
1187
+ ]);
1188
+ var svg$1 = freeze([
1189
+ "svg",
1190
+ "a",
1191
+ "altglyph",
1192
+ "altglyphdef",
1193
+ "altglyphitem",
1194
+ "animatecolor",
1195
+ "animatemotion",
1196
+ "animatetransform",
1197
+ "circle",
1198
+ "clippath",
1199
+ "defs",
1200
+ "desc",
1201
+ "ellipse",
1202
+ "enterkeyhint",
1203
+ "exportparts",
1204
+ "filter",
1205
+ "font",
1206
+ "g",
1207
+ "glyph",
1208
+ "glyphref",
1209
+ "hkern",
1210
+ "image",
1211
+ "inputmode",
1212
+ "line",
1213
+ "lineargradient",
1214
+ "marker",
1215
+ "mask",
1216
+ "metadata",
1217
+ "mpath",
1218
+ "part",
1219
+ "path",
1220
+ "pattern",
1221
+ "polygon",
1222
+ "polyline",
1223
+ "radialgradient",
1224
+ "rect",
1225
+ "stop",
1226
+ "style",
1227
+ "switch",
1228
+ "symbol",
1229
+ "text",
1230
+ "textpath",
1231
+ "title",
1232
+ "tref",
1233
+ "tspan",
1234
+ "view",
1235
+ "vkern"
1236
+ ]);
1237
+ var svgFilters = freeze([
1238
+ "feBlend",
1239
+ "feColorMatrix",
1240
+ "feComponentTransfer",
1241
+ "feComposite",
1242
+ "feConvolveMatrix",
1243
+ "feDiffuseLighting",
1244
+ "feDisplacementMap",
1245
+ "feDistantLight",
1246
+ "feDropShadow",
1247
+ "feFlood",
1248
+ "feFuncA",
1249
+ "feFuncB",
1250
+ "feFuncG",
1251
+ "feFuncR",
1252
+ "feGaussianBlur",
1253
+ "feImage",
1254
+ "feMerge",
1255
+ "feMergeNode",
1256
+ "feMorphology",
1257
+ "feOffset",
1258
+ "fePointLight",
1259
+ "feSpecularLighting",
1260
+ "feSpotLight",
1261
+ "feTile",
1262
+ "feTurbulence"
1263
+ ]);
1264
+ var svgDisallowed = freeze([
1265
+ "animate",
1266
+ "color-profile",
1267
+ "cursor",
1268
+ "discard",
1269
+ "font-face",
1270
+ "font-face-format",
1271
+ "font-face-name",
1272
+ "font-face-src",
1273
+ "font-face-uri",
1274
+ "foreignobject",
1275
+ "hatch",
1276
+ "hatchpath",
1277
+ "mesh",
1278
+ "meshgradient",
1279
+ "meshpatch",
1280
+ "meshrow",
1281
+ "missing-glyph",
1282
+ "script",
1283
+ "set",
1284
+ "solidcolor",
1285
+ "unknown",
1286
+ "use"
1287
+ ]);
1288
+ var mathMl$1 = freeze([
1289
+ "math",
1290
+ "menclose",
1291
+ "merror",
1292
+ "mfenced",
1293
+ "mfrac",
1294
+ "mglyph",
1295
+ "mi",
1296
+ "mlabeledtr",
1297
+ "mmultiscripts",
1298
+ "mn",
1299
+ "mo",
1300
+ "mover",
1301
+ "mpadded",
1302
+ "mphantom",
1303
+ "mroot",
1304
+ "mrow",
1305
+ "ms",
1306
+ "mspace",
1307
+ "msqrt",
1308
+ "mstyle",
1309
+ "msub",
1310
+ "msup",
1311
+ "msubsup",
1312
+ "mtable",
1313
+ "mtd",
1314
+ "mtext",
1315
+ "mtr",
1316
+ "munder",
1317
+ "munderover",
1318
+ "mprescripts"
1319
+ ]);
1320
+ var mathMlDisallowed = freeze([
1321
+ "maction",
1322
+ "maligngroup",
1323
+ "malignmark",
1324
+ "mlongdiv",
1325
+ "mscarries",
1326
+ "mscarry",
1327
+ "msgroup",
1328
+ "mstack",
1329
+ "msline",
1330
+ "msrow",
1331
+ "semantics",
1332
+ "annotation",
1333
+ "annotation-xml",
1334
+ "mprescripts",
1335
+ "none"
1336
+ ]);
1337
+ var text = freeze(["#text"]);
1338
+ var html = freeze([
1339
+ "accept",
1340
+ "action",
1341
+ "align",
1342
+ "alt",
1343
+ "autocapitalize",
1344
+ "autocomplete",
1345
+ "autopictureinpicture",
1346
+ "autoplay",
1347
+ "background",
1348
+ "bgcolor",
1349
+ "border",
1350
+ "capture",
1351
+ "cellpadding",
1352
+ "cellspacing",
1353
+ "checked",
1354
+ "cite",
1355
+ "class",
1356
+ "clear",
1357
+ "color",
1358
+ "cols",
1359
+ "colspan",
1360
+ "command",
1361
+ "commandfor",
1362
+ "controls",
1363
+ "controlslist",
1364
+ "coords",
1365
+ "crossorigin",
1366
+ "datetime",
1367
+ "decoding",
1368
+ "default",
1369
+ "dir",
1370
+ "disabled",
1371
+ "disablepictureinpicture",
1372
+ "disableremoteplayback",
1373
+ "download",
1374
+ "draggable",
1375
+ "enctype",
1376
+ "enterkeyhint",
1377
+ "exportparts",
1378
+ "face",
1379
+ "for",
1380
+ "headers",
1381
+ "height",
1382
+ "hidden",
1383
+ "high",
1384
+ "href",
1385
+ "hreflang",
1386
+ "id",
1387
+ "inert",
1388
+ "inputmode",
1389
+ "integrity",
1390
+ "ismap",
1391
+ "kind",
1392
+ "label",
1393
+ "lang",
1394
+ "list",
1395
+ "loading",
1396
+ "loop",
1397
+ "low",
1398
+ "max",
1399
+ "maxlength",
1400
+ "media",
1401
+ "method",
1402
+ "min",
1403
+ "minlength",
1404
+ "multiple",
1405
+ "muted",
1406
+ "name",
1407
+ "nonce",
1408
+ "noshade",
1409
+ "novalidate",
1410
+ "nowrap",
1411
+ "open",
1412
+ "optimum",
1413
+ "part",
1414
+ "pattern",
1415
+ "placeholder",
1416
+ "playsinline",
1417
+ "popover",
1418
+ "popovertarget",
1419
+ "popovertargetaction",
1420
+ "poster",
1421
+ "preload",
1422
+ "pubdate",
1423
+ "radiogroup",
1424
+ "readonly",
1425
+ "rel",
1426
+ "required",
1427
+ "rev",
1428
+ "reversed",
1429
+ "role",
1430
+ "rows",
1431
+ "rowspan",
1432
+ "spellcheck",
1433
+ "scope",
1434
+ "selected",
1435
+ "shape",
1436
+ "size",
1437
+ "sizes",
1438
+ "slot",
1439
+ "span",
1440
+ "srclang",
1441
+ "start",
1442
+ "src",
1443
+ "srcset",
1444
+ "step",
1445
+ "style",
1446
+ "summary",
1447
+ "tabindex",
1448
+ "title",
1449
+ "translate",
1450
+ "type",
1451
+ "usemap",
1452
+ "valign",
1453
+ "value",
1454
+ "width",
1455
+ "wrap",
1456
+ "xmlns"
1457
+ ]);
1458
+ var svg = freeze([
1459
+ "accent-height",
1460
+ "accumulate",
1461
+ "additive",
1462
+ "alignment-baseline",
1463
+ "amplitude",
1464
+ "ascent",
1465
+ "attributename",
1466
+ "attributetype",
1467
+ "azimuth",
1468
+ "basefrequency",
1469
+ "baseline-shift",
1470
+ "begin",
1471
+ "bias",
1472
+ "by",
1473
+ "class",
1474
+ "clip",
1475
+ "clippathunits",
1476
+ "clip-path",
1477
+ "clip-rule",
1478
+ "color",
1479
+ "color-interpolation",
1480
+ "color-interpolation-filters",
1481
+ "color-profile",
1482
+ "color-rendering",
1483
+ "cx",
1484
+ "cy",
1485
+ "d",
1486
+ "dx",
1487
+ "dy",
1488
+ "diffuseconstant",
1489
+ "direction",
1490
+ "display",
1491
+ "divisor",
1492
+ "dominant-baseline",
1493
+ "dur",
1494
+ "edgemode",
1495
+ "elevation",
1496
+ "end",
1497
+ "exponent",
1498
+ "fill",
1499
+ "fill-opacity",
1500
+ "fill-rule",
1501
+ "filter",
1502
+ "filterunits",
1503
+ "flood-color",
1504
+ "flood-opacity",
1505
+ "font-family",
1506
+ "font-size",
1507
+ "font-size-adjust",
1508
+ "font-stretch",
1509
+ "font-style",
1510
+ "font-variant",
1511
+ "font-weight",
1512
+ "fx",
1513
+ "fy",
1514
+ "g1",
1515
+ "g2",
1516
+ "glyph-name",
1517
+ "glyphref",
1518
+ "gradientunits",
1519
+ "gradienttransform",
1520
+ "height",
1521
+ "href",
1522
+ "id",
1523
+ "image-rendering",
1524
+ "in",
1525
+ "in2",
1526
+ "intercept",
1527
+ "k",
1528
+ "k1",
1529
+ "k2",
1530
+ "k3",
1531
+ "k4",
1532
+ "kerning",
1533
+ "keypoints",
1534
+ "keysplines",
1535
+ "keytimes",
1536
+ "lang",
1537
+ "lengthadjust",
1538
+ "letter-spacing",
1539
+ "kernelmatrix",
1540
+ "kernelunitlength",
1541
+ "lighting-color",
1542
+ "local",
1543
+ "marker-end",
1544
+ "marker-mid",
1545
+ "marker-start",
1546
+ "markerheight",
1547
+ "markerunits",
1548
+ "markerwidth",
1549
+ "maskcontentunits",
1550
+ "maskunits",
1551
+ "max",
1552
+ "mask",
1553
+ "mask-type",
1554
+ "media",
1555
+ "method",
1556
+ "mode",
1557
+ "min",
1558
+ "name",
1559
+ "numoctaves",
1560
+ "offset",
1561
+ "operator",
1562
+ "opacity",
1563
+ "order",
1564
+ "orient",
1565
+ "orientation",
1566
+ "origin",
1567
+ "overflow",
1568
+ "paint-order",
1569
+ "path",
1570
+ "pathlength",
1571
+ "patterncontentunits",
1572
+ "patterntransform",
1573
+ "patternunits",
1574
+ "pointer-events",
1575
+ "points",
1576
+ "preservealpha",
1577
+ "preserveaspectratio",
1578
+ "primitiveunits",
1579
+ "r",
1580
+ "rx",
1581
+ "ry",
1582
+ "radius",
1583
+ "refx",
1584
+ "refy",
1585
+ "repeatcount",
1586
+ "repeatdur",
1587
+ "restart",
1588
+ "result",
1589
+ "rotate",
1590
+ "scale",
1591
+ "seed",
1592
+ "shape-rendering",
1593
+ "slope",
1594
+ "specularconstant",
1595
+ "specularexponent",
1596
+ "spreadmethod",
1597
+ "startoffset",
1598
+ "stddeviation",
1599
+ "stitchtiles",
1600
+ "stop-color",
1601
+ "stop-opacity",
1602
+ "stroke-dasharray",
1603
+ "stroke-dashoffset",
1604
+ "stroke-linecap",
1605
+ "stroke-linejoin",
1606
+ "stroke-miterlimit",
1607
+ "stroke-opacity",
1608
+ "stroke",
1609
+ "stroke-width",
1610
+ "style",
1611
+ "surfacescale",
1612
+ "systemlanguage",
1613
+ "tabindex",
1614
+ "tablevalues",
1615
+ "targetx",
1616
+ "targety",
1617
+ "transform",
1618
+ "transform-origin",
1619
+ "text-anchor",
1620
+ "text-decoration",
1621
+ "text-orientation",
1622
+ "text-rendering",
1623
+ "textlength",
1624
+ "type",
1625
+ "u1",
1626
+ "u2",
1627
+ "unicode",
1628
+ "values",
1629
+ "vector-effect",
1630
+ "viewbox",
1631
+ "visibility",
1632
+ "version",
1633
+ "vert-adv-y",
1634
+ "vert-origin-x",
1635
+ "vert-origin-y",
1636
+ "width",
1637
+ "word-spacing",
1638
+ "wrap",
1639
+ "writing-mode",
1640
+ "xchannelselector",
1641
+ "ychannelselector",
1642
+ "x",
1643
+ "x1",
1644
+ "x2",
1645
+ "xmlns",
1646
+ "y",
1647
+ "y1",
1648
+ "y2",
1649
+ "z",
1650
+ "zoomandpan"
1651
+ ]);
1652
+ var mathMl = freeze([
1653
+ "accent",
1654
+ "accentunder",
1655
+ "align",
1656
+ "bevelled",
1657
+ "close",
1658
+ "columnalign",
1659
+ "columnlines",
1660
+ "columnspacing",
1661
+ "columnspan",
1662
+ "denomalign",
1663
+ "depth",
1664
+ "dir",
1665
+ "display",
1666
+ "displaystyle",
1667
+ "encoding",
1668
+ "fence",
1669
+ "frame",
1670
+ "height",
1671
+ "href",
1672
+ "id",
1673
+ "largeop",
1674
+ "length",
1675
+ "linethickness",
1676
+ "lquote",
1677
+ "lspace",
1678
+ "mathbackground",
1679
+ "mathcolor",
1680
+ "mathsize",
1681
+ "mathvariant",
1682
+ "maxsize",
1683
+ "minsize",
1684
+ "movablelimits",
1685
+ "notation",
1686
+ "numalign",
1687
+ "open",
1688
+ "rowalign",
1689
+ "rowlines",
1690
+ "rowspacing",
1691
+ "rowspan",
1692
+ "rspace",
1693
+ "rquote",
1694
+ "scriptlevel",
1695
+ "scriptminsize",
1696
+ "scriptsizemultiplier",
1697
+ "selection",
1698
+ "separator",
1699
+ "separators",
1700
+ "stretchy",
1701
+ "subscriptshift",
1702
+ "supscriptshift",
1703
+ "symmetric",
1704
+ "voffset",
1705
+ "width",
1706
+ "xmlns"
1707
+ ]);
1708
+ var xml = freeze([
1709
+ "xlink:href",
1710
+ "xml:id",
1711
+ "xlink:title",
1712
+ "xml:space",
1713
+ "xmlns:xlink"
1714
+ ]);
1715
+ var MUSTACHE_EXPR = seal(/{{[\w\W]*|^[\w\W]*}}/g);
1716
+ var ERB_EXPR = seal(/<%[\w\W]*|^[\w\W]*%>/g);
1717
+ var TMPLIT_EXPR = seal(/\${[\w\W]*/g);
1718
+ var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
1719
+ var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
1720
+ var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
1721
+ var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
1722
+ var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
1723
+ var DOCTYPE_NAME = seal(/^html$/i);
1724
+ var CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
1725
+ var ELEMENT_MARKUP_PROBE = seal(/<[/\w!]/g);
1726
+ var COMMENT_MARKUP_PROBE = seal(/<[/\w]/g);
1727
+ var FALLBACK_TAG_CLOSE = seal(/<\/no(script|embed|frames)/i);
1728
+ var SELF_CLOSING_TAG = seal(/\/>/i);
1729
+ var NODE_TYPE = {
1730
+ element: 1,
1731
+ attribute: 2,
1732
+ text: 3,
1733
+ cdataSection: 4,
1734
+ entityReference: 5,
1735
+ entityNode: 6,
1736
+ processingInstruction: 7,
1737
+ comment: 8,
1738
+ document: 9,
1739
+ documentType: 10,
1740
+ documentFragment: 11,
1741
+ notation: 12
1742
+ };
1743
+ var LITERAL_TEXT_ELEMENTS = freeze(addToSet({}, [
1744
+ "style",
1745
+ "script",
1746
+ "xmp",
1747
+ "iframe",
1748
+ "noembed",
1749
+ "noframes",
1750
+ "plaintext",
1751
+ "noscript"
1752
+ ]));
1753
+ var getGlobal = function getGlobal2() {
1754
+ return typeof window === "undefined" ? null : window;
1755
+ };
1756
+ var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, purifyHostElement) {
1757
+ if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") return null;
1758
+ let suffix = null;
1759
+ const ATTR_NAME = "data-tt-policy-suffix";
1760
+ if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);
1761
+ const policyName = "dompurify" + (suffix ? "#" + suffix : "");
1762
+ try {
1763
+ return trustedTypes.createPolicy(policyName, {
1764
+ createHTML(html2) {
1765
+ return html2;
1766
+ },
1767
+ createScriptURL(scriptUrl) {
1768
+ return scriptUrl;
1769
+ }
1770
+ });
1771
+ } catch (_2) {
1772
+ console.warn("TrustedTypes policy " + policyName + " could not be created.");
1773
+ return null;
1774
+ }
1775
+ };
1776
+ var _createHooksMap = function _createHooksMap2() {
1777
+ return {
1778
+ afterSanitizeAttributes: [],
1779
+ afterSanitizeElements: [],
1780
+ afterSanitizeShadowDOM: [],
1781
+ beforeSanitizeAttributes: [],
1782
+ beforeSanitizeElements: [],
1783
+ beforeSanitizeShadowDOM: [],
1784
+ uponSanitizeAttribute: [],
1785
+ uponSanitizeElement: [],
1786
+ uponSanitizeShadowNode: []
1787
+ };
1788
+ };
1789
+ var _resolveSetOption = function _resolveSetOption2(cfg, key, fallback, options) {
1790
+ return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;
1791
+ };
1792
+ var _resolveObjectOption = function _resolveObjectOption2(cfg, key, makeFallback) {
1793
+ const value = objectHasOwnProperty(cfg, key) ? cfg[key] : void 0;
1794
+ return value && typeof value === "object" ? clone(value) : makeFallback();
1795
+ };
1796
+ function createDOMPurify() {
1797
+ let window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
1798
+ const DOMPurify = (root) => createDOMPurify(root);
1799
+ DOMPurify.version = "3.4.17";
1800
+ DOMPurify.removed = [];
1801
+ if (!window2 || !window2.document || window2.document.nodeType !== NODE_TYPE.document || !window2.Element) {
1802
+ DOMPurify.isSupported = false;
1803
+ return DOMPurify;
1804
+ }
1805
+ let document2 = window2.document;
1806
+ const originalDocument = document2;
1807
+ const currentScript = originalDocument.currentScript;
1808
+ window2.DocumentFragment;
1809
+ const HTMLTemplateElement = window2.HTMLTemplateElement, Node = window2.Node, Element = window2.Element, NodeFilter = window2.NodeFilter;
1810
+ window2.NamedNodeMap === void 0 && (window2.NamedNodeMap || window2.MozNamedAttrMap);
1811
+ window2.HTMLFormElement;
1812
+ const DOMParser = window2.DOMParser, trustedTypes = window2.trustedTypes;
1813
+ const ElementPrototype = Element.prototype;
1814
+ const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
1815
+ const remove = lookupGetter(ElementPrototype, "remove");
1816
+ const removeAttributeNode = lookupGetter(ElementPrototype, "removeAttributeNode");
1817
+ const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
1818
+ const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
1819
+ const getParentNode = lookupGetter(ElementPrototype, "parentNode");
1820
+ const getShadowRoot = lookupGetter(ElementPrototype, "shadowRoot");
1821
+ const getAttributes = lookupGetter(ElementPrototype, "attributes");
1822
+ const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, "nodeType") : null;
1823
+ const getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, "nodeName") : null;
1824
+ const getOwnerDocument = Node && Node.prototype ? lookupGetter(Node.prototype, "ownerDocument") : null;
1825
+ const _readNodeType = function _readNodeType2(node) {
1826
+ return getNodeType ? getNodeType(node) : node.nodeType;
1827
+ };
1828
+ const _readNodeName = function _readNodeName2(node) {
1829
+ return getNodeName ? getNodeName(node) : node.nodeName;
1830
+ };
1831
+ const getNamespaceURI = lookupAccessor(ElementPrototype, "namespaceURI");
1832
+ const _readNamespaceURI = function _readNamespaceURI2(element) {
1833
+ return getNamespaceURI ? getNamespaceURI(element) : element.namespaceURI;
1834
+ };
1835
+ if (typeof HTMLTemplateElement === "function") {
1836
+ const template = document2.createElement("template");
1837
+ if (template.content && template.content.ownerDocument) document2 = template.content.ownerDocument;
1838
+ }
1839
+ let trustedTypesPolicy;
1840
+ let emptyHTML = "";
1841
+ let defaultTrustedTypesPolicy;
1842
+ let defaultTrustedTypesPolicyResolved = false;
1843
+ let IN_TRUSTED_TYPES_POLICY = 0;
1844
+ const _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy2() {
1845
+ if (IN_TRUSTED_TYPES_POLICY > 0) throw typeErrorCreate('A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.');
1846
+ };
1847
+ const _createTrustedHTML = function _createTrustedHTML2(html2) {
1848
+ _assertNotInTrustedTypesPolicy();
1849
+ IN_TRUSTED_TYPES_POLICY++;
1850
+ try {
1851
+ return trustedTypesPolicy.createHTML(html2);
1852
+ } finally {
1853
+ IN_TRUSTED_TYPES_POLICY--;
1854
+ }
1855
+ };
1856
+ const _createTrustedScriptURL = function _createTrustedScriptURL2(scriptUrl) {
1857
+ _assertNotInTrustedTypesPolicy();
1858
+ IN_TRUSTED_TYPES_POLICY++;
1859
+ try {
1860
+ return trustedTypesPolicy.createScriptURL(scriptUrl);
1861
+ } finally {
1862
+ IN_TRUSTED_TYPES_POLICY--;
1863
+ }
1864
+ };
1865
+ const _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy2() {
1866
+ if (!defaultTrustedTypesPolicyResolved) {
1867
+ defaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
1868
+ defaultTrustedTypesPolicyResolved = true;
1869
+ }
1870
+ return defaultTrustedTypesPolicy;
1871
+ };
1872
+ const _document = document2, implementation = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName;
1873
+ const importNode = originalDocument.importNode;
1874
+ let hooks = _createHooksMap();
1875
+ DOMPurify.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
1876
+ const MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE, CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;
1877
+ let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;
1878
+ let ALLOWED_TAGS = null;
1879
+ const DEFAULT_ALLOWED_TAGS = addToSet({}, [
1880
+ ...html$1,
1881
+ ...svg$1,
1882
+ ...svgFilters,
1883
+ ...mathMl$1,
1884
+ ...text
1885
+ ]);
1886
+ let ALLOWED_ATTR = null;
1887
+ const DEFAULT_ALLOWED_ATTR = addToSet({}, [
1888
+ ...html,
1889
+ ...svg,
1890
+ ...mathMl,
1891
+ ...xml
1892
+ ]);
1893
+ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
1894
+ tagNameCheck: {
1895
+ writable: true,
1896
+ configurable: false,
1897
+ enumerable: true,
1898
+ value: null
1899
+ },
1900
+ attributeNameCheck: {
1901
+ writable: true,
1902
+ configurable: false,
1903
+ enumerable: true,
1904
+ value: null
1905
+ },
1906
+ allowCustomizedBuiltInElements: {
1907
+ writable: true,
1908
+ configurable: false,
1909
+ enumerable: true,
1910
+ value: false
1911
+ }
1912
+ }));
1913
+ let FORBID_TAGS = null;
1914
+ let FORBID_ATTR = null;
1915
+ const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
1916
+ tagCheck: {
1917
+ writable: true,
1918
+ configurable: false,
1919
+ enumerable: true,
1920
+ value: null
1921
+ },
1922
+ attributeCheck: {
1923
+ writable: true,
1924
+ configurable: false,
1925
+ enumerable: true,
1926
+ value: null
1927
+ }
1928
+ }));
1929
+ let ALLOW_ARIA_ATTR = true;
1930
+ let ALLOW_DATA_ATTR = true;
1931
+ let ALLOW_UNKNOWN_PROTOCOLS = false;
1932
+ let ALLOW_SELF_CLOSE_IN_ATTR = true;
1933
+ let SAFE_FOR_TEMPLATES = false;
1934
+ let SAFE_FOR_XML = true;
1935
+ let WHOLE_DOCUMENT = false;
1936
+ let SET_CONFIG = false;
1937
+ let SET_CONFIG_ALLOWED_TAGS = null;
1938
+ let SET_CONFIG_ALLOWED_ATTR = null;
1939
+ let FORCE_BODY = false;
1940
+ let RETURN_DOM = false;
1941
+ let RETURN_DOM_FRAGMENT = false;
1942
+ let RETURN_TRUSTED_TYPE = false;
1943
+ let SANITIZE_DOM = true;
1944
+ let SANITIZE_NAMED_PROPS = false;
1945
+ const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
1946
+ let KEEP_CONTENT = true;
1947
+ let IN_PLACE = false;
1948
+ let IN_PLACE_VISITED = null;
1949
+ let USE_PROFILES = {};
1950
+ let FORBID_CONTENTS = null;
1951
+ const DEFAULT_FORBID_CONTENTS = addToSet({}, [
1952
+ "annotation-xml",
1953
+ "audio",
1954
+ "colgroup",
1955
+ "desc",
1956
+ "foreignobject",
1957
+ "head",
1958
+ "iframe",
1959
+ "math",
1960
+ "mi",
1961
+ "mn",
1962
+ "mo",
1963
+ "ms",
1964
+ "mtext",
1965
+ "noembed",
1966
+ "noframes",
1967
+ "noscript",
1968
+ "plaintext",
1969
+ "script",
1970
+ "selectedcontent",
1971
+ "style",
1972
+ "svg",
1973
+ "template",
1974
+ "thead",
1975
+ "title",
1976
+ "video",
1977
+ "xmp"
1978
+ ]);
1979
+ let DATA_URI_TAGS = null;
1980
+ const DEFAULT_DATA_URI_TAGS = addToSet({}, [
1981
+ "audio",
1982
+ "video",
1983
+ "img",
1984
+ "source",
1985
+ "image",
1986
+ "track"
1987
+ ]);
1988
+ let URI_SAFE_ATTRIBUTES = null;
1989
+ const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [
1990
+ "alt",
1991
+ "class",
1992
+ "for",
1993
+ "id",
1994
+ "label",
1995
+ "name",
1996
+ "pattern",
1997
+ "placeholder",
1998
+ "role",
1999
+ "summary",
2000
+ "title",
2001
+ "value",
2002
+ "style",
2003
+ "xmlns"
2004
+ ]);
2005
+ const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
2006
+ const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
2007
+ const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
2008
+ let NAMESPACE = HTML_NAMESPACE;
2009
+ let IS_EMPTY_INPUT = false;
2010
+ let ALLOWED_NAMESPACES = null;
2011
+ const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [
2012
+ MATHML_NAMESPACE,
2013
+ SVG_NAMESPACE,
2014
+ HTML_NAMESPACE
2015
+ ], stringToString);
2016
+ const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze([
2017
+ "mi",
2018
+ "mo",
2019
+ "mn",
2020
+ "ms",
2021
+ "mtext"
2022
+ ]);
2023
+ let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);
2024
+ const DEFAULT_HTML_INTEGRATION_POINTS = freeze(["annotation-xml"]);
2025
+ let HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);
2026
+ const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [
2027
+ "title",
2028
+ "style",
2029
+ "font",
2030
+ "a",
2031
+ "script"
2032
+ ]);
2033
+ let PARSER_MEDIA_TYPE = null;
2034
+ const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
2035
+ const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
2036
+ let transformCaseFunc = null;
2037
+ let CONFIG = null;
2038
+ const formElement = document2.createElement("form");
2039
+ const isRegexOrFunction = function isRegexOrFunction2(testValue) {
2040
+ return testValue instanceof RegExp || testValue instanceof Function;
2041
+ };
2042
+ const _parseConfig = function _parseConfig2() {
2043
+ let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
2044
+ if (CONFIG && CONFIG === cfg) return;
2045
+ if (!cfg || typeof cfg !== "object") cfg = {};
2046
+ cfg = clone(cfg);
2047
+ PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
2048
+ transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
2049
+ ALLOWED_TAGS = _resolveSetOption(cfg, "ALLOWED_TAGS", DEFAULT_ALLOWED_TAGS, { transform: transformCaseFunc });
2050
+ ALLOWED_ATTR = _resolveSetOption(cfg, "ALLOWED_ATTR", DEFAULT_ALLOWED_ATTR, { transform: transformCaseFunc });
2051
+ ALLOWED_NAMESPACES = _resolveSetOption(cfg, "ALLOWED_NAMESPACES", DEFAULT_ALLOWED_NAMESPACES, { transform: stringToString });
2052
+ URI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, "ADD_URI_SAFE_ATTR", DEFAULT_URI_SAFE_ATTRIBUTES, {
2053
+ transform: transformCaseFunc,
2054
+ base: DEFAULT_URI_SAFE_ATTRIBUTES
2055
+ });
2056
+ DATA_URI_TAGS = _resolveSetOption(cfg, "ADD_DATA_URI_TAGS", DEFAULT_DATA_URI_TAGS, {
2057
+ transform: transformCaseFunc,
2058
+ base: DEFAULT_DATA_URI_TAGS
2059
+ });
2060
+ FORBID_CONTENTS = _resolveSetOption(cfg, "FORBID_CONTENTS", DEFAULT_FORBID_CONTENTS, { transform: transformCaseFunc });
2061
+ FORBID_TAGS = _resolveSetOption(cfg, "FORBID_TAGS", clone({}), { transform: transformCaseFunc });
2062
+ FORBID_ATTR = _resolveSetOption(cfg, "FORBID_ATTR", clone({}), { transform: transformCaseFunc });
2063
+ USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === "object" ? clone(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;
2064
+ ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
2065
+ ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
2066
+ ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
2067
+ ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
2068
+ SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
2069
+ SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
2070
+ WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
2071
+ RETURN_DOM = cfg.RETURN_DOM || false;
2072
+ RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
2073
+ RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
2074
+ FORCE_BODY = cfg.FORCE_BODY || false;
2075
+ SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
2076
+ SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
2077
+ KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
2078
+ IN_PLACE = cfg.IN_PLACE || false;
2079
+ IS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI;
2080
+ NAMESPACE = typeof cfg.NAMESPACE === "string" ? cfg.NAMESPACE : HTML_NAMESPACE;
2081
+ MATHML_TEXT_INTEGRATION_POINTS = _resolveObjectOption(cfg, "MATHML_TEXT_INTEGRATION_POINTS", () => addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS));
2082
+ HTML_INTEGRATION_POINTS = _resolveObjectOption(cfg, "HTML_INTEGRATION_POINTS", () => addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS));
2083
+ const customElementHandling = _resolveObjectOption(cfg, "CUSTOM_ELEMENT_HANDLING", () => create(null));
2084
+ CUSTOM_ELEMENT_HANDLING = create(null);
2085
+ if (objectHasOwnProperty(customElementHandling, "tagNameCheck") && isRegexOrFunction(customElementHandling.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;
2086
+ if (objectHasOwnProperty(customElementHandling, "attributeNameCheck") && isRegexOrFunction(customElementHandling.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;
2087
+ if (objectHasOwnProperty(customElementHandling, "allowCustomizedBuiltInElements") && typeof customElementHandling.allowCustomizedBuiltInElements === "boolean") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;
2088
+ seal(CUSTOM_ELEMENT_HANDLING);
2089
+ if (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;
2090
+ if (RETURN_DOM_FRAGMENT) RETURN_DOM = true;
2091
+ if (USE_PROFILES) {
2092
+ ALLOWED_TAGS = addToSet({}, text);
2093
+ ALLOWED_ATTR = create(null);
2094
+ if (USE_PROFILES.html === true) {
2095
+ addToSet(ALLOWED_TAGS, html$1);
2096
+ addToSet(ALLOWED_ATTR, html);
2097
+ }
2098
+ if (USE_PROFILES.svg === true) {
2099
+ addToSet(ALLOWED_TAGS, svg$1);
2100
+ addToSet(ALLOWED_ATTR, svg);
2101
+ addToSet(ALLOWED_ATTR, xml);
2102
+ }
2103
+ if (USE_PROFILES.svgFilters === true) {
2104
+ addToSet(ALLOWED_TAGS, svgFilters);
2105
+ addToSet(ALLOWED_ATTR, svg);
2106
+ addToSet(ALLOWED_ATTR, xml);
2107
+ }
2108
+ if (USE_PROFILES.mathMl === true) {
2109
+ addToSet(ALLOWED_TAGS, mathMl$1);
2110
+ addToSet(ALLOWED_ATTR, mathMl);
2111
+ addToSet(ALLOWED_ATTR, xml);
2112
+ }
2113
+ }
2114
+ EXTRA_ELEMENT_HANDLING.tagCheck = null;
2115
+ EXTRA_ELEMENT_HANDLING.attributeCheck = null;
2116
+ if (objectHasOwnProperty(cfg, "ADD_TAGS")) {
2117
+ if (typeof cfg.ADD_TAGS === "function") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
2118
+ else if (arrayIsArray(cfg.ADD_TAGS)) {
2119
+ if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);
2120
+ addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
2121
+ }
2122
+ }
2123
+ if (objectHasOwnProperty(cfg, "ADD_ATTR")) {
2124
+ if (typeof cfg.ADD_ATTR === "function") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
2125
+ else if (arrayIsArray(cfg.ADD_ATTR)) {
2126
+ if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);
2127
+ addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
2128
+ }
2129
+ }
2130
+ if (objectHasOwnProperty(cfg, "ADD_FORBID_CONTENTS") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {
2131
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);
2132
+ addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
2133
+ }
2134
+ if (KEEP_CONTENT) ALLOWED_TAGS["#text"] = true;
2135
+ if (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [
2136
+ "html",
2137
+ "head",
2138
+ "body"
2139
+ ]);
2140
+ if (ALLOWED_TAGS.table) {
2141
+ addToSet(ALLOWED_TAGS, ["tbody"]);
2142
+ delete FORBID_TAGS.tbody;
2143
+ }
2144
+ if (cfg.TRUSTED_TYPES_POLICY) {
2145
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
2146
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
2147
+ const previousTrustedTypesPolicy = trustedTypesPolicy;
2148
+ trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
2149
+ try {
2150
+ emptyHTML = _createTrustedHTML("");
2151
+ } catch (error) {
2152
+ trustedTypesPolicy = previousTrustedTypesPolicy;
2153
+ throw error;
2154
+ }
2155
+ } else if (cfg.TRUSTED_TYPES_POLICY === null) {
2156
+ trustedTypesPolicy = void 0;
2157
+ emptyHTML = "";
2158
+ } else {
2159
+ if (trustedTypesPolicy === void 0) trustedTypesPolicy = _getDefaultTrustedTypesPolicy();
2160
+ if (trustedTypesPolicy && typeof emptyHTML === "string") emptyHTML = _createTrustedHTML("");
2161
+ }
2162
+ if (freeze) freeze(cfg);
2163
+ CONFIG = cfg;
2164
+ };
2165
+ const ALL_SVG_TAGS = addToSet({}, [
2166
+ ...svg$1,
2167
+ ...svgFilters,
2168
+ ...svgDisallowed
2169
+ ]);
2170
+ const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
2171
+ const _checkSvgNamespace = function _checkSvgNamespace2(tagName, parent, parentTagName) {
2172
+ if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "svg";
2173
+ if (parent.namespaceURI === MATHML_NAMESPACE) return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
2174
+ return Boolean(ALL_SVG_TAGS[tagName]);
2175
+ };
2176
+ const _checkMathMlNamespace = function _checkMathMlNamespace2(tagName, parent, parentTagName) {
2177
+ if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "math";
2178
+ if (parent.namespaceURI === SVG_NAMESPACE) return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
2179
+ return Boolean(ALL_MATHML_TAGS[tagName]);
2180
+ };
2181
+ const _checkHtmlNamespace = function _checkHtmlNamespace2(tagName, parent, parentTagName) {
2182
+ if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;
2183
+ if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;
2184
+ return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
2185
+ };
2186
+ const _checkValidNamespace = function _checkValidNamespace2(element) {
2187
+ const elementNamespace = _readNamespaceURI(element);
2188
+ const tagName = stringToLowerCase(_readNodeName(element));
2189
+ const parentNode = getParentNode(element);
2190
+ let parent;
2191
+ let parentTagName;
2192
+ if (parentNode && _readNodeType(parentNode) === NODE_TYPE.element) {
2193
+ parent = { namespaceURI: _readNamespaceURI(parentNode) };
2194
+ parentTagName = stringToLowerCase(_readNodeName(parentNode));
2195
+ } else {
2196
+ parent = { namespaceURI: NAMESPACE };
2197
+ parentTagName = "template";
2198
+ }
2199
+ if (!ALLOWED_NAMESPACES[elementNamespace]) return false;
2200
+ if (elementNamespace === SVG_NAMESPACE) return _checkSvgNamespace(tagName, parent, parentTagName);
2201
+ if (elementNamespace === MATHML_NAMESPACE) return _checkMathMlNamespace(tagName, parent, parentTagName);
2202
+ if (elementNamespace === HTML_NAMESPACE) return _checkHtmlNamespace(tagName, parent, parentTagName);
2203
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[elementNamespace]) return true;
2204
+ return false;
2205
+ };
2206
+ const _forceRemove = function _forceRemove2(node) {
2207
+ arrayPush(DOMPurify.removed, { element: node });
2208
+ try {
2209
+ getParentNode(node).removeChild(node);
2210
+ } catch (_2) {
2211
+ remove(node);
2212
+ if (!getParentNode(node)) throw typeErrorCreate("a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place");
2213
+ }
2214
+ };
2215
+ const _stripAttributeNode = function _stripAttributeNode2(element, attribute, name) {
2216
+ try {
2217
+ removeAttributeNode(element, attribute);
2218
+ } catch (_2) {
2219
+ try {
2220
+ element.removeAttribute(name);
2221
+ } catch (_3) {
2222
+ }
2223
+ }
2224
+ };
2225
+ const _neutralizeRoot = function _neutralizeRoot2(root) {
2226
+ _neutralizeSubtree(root);
2227
+ const childNodes = getChildNodes(root);
2228
+ if (childNodes) arrayForEach(arraySlice(childNodes), (child) => {
2229
+ try {
2230
+ remove(child);
2231
+ } catch (_2) {
2232
+ }
2233
+ });
2234
+ const attributes = _readNodeType(root) === NODE_TYPE.element ? getAttributes(root) : null;
2235
+ if (attributes) for (let i = attributes.length - 1; i >= 0; --i) {
2236
+ const attribute = attributes[i];
2237
+ const name = attribute && attribute.name;
2238
+ if (typeof name === "string") _stripAttributeNode(root, attribute, name);
2239
+ }
2240
+ };
2241
+ const _removeAttribute = function _removeAttribute2(name, element, attr) {
2242
+ if (!attr) try {
2243
+ attr = element.getAttributeNode(name);
2244
+ } catch (_2) {
2245
+ attr = null;
2246
+ }
2247
+ arrayPush(DOMPurify.removed, {
2248
+ attribute: attr || null,
2249
+ from: element
2250
+ });
2251
+ try {
2252
+ if (attr) removeAttributeNode(element, attr);
2253
+ else element.removeAttribute(name);
2254
+ } catch (_2) {
2255
+ try {
2256
+ element.removeAttribute(name);
2257
+ } catch (_3) {
2258
+ }
2259
+ }
2260
+ if (name === "is") {
2261
+ if (RETURN_DOM || RETURN_DOM_FRAGMENT) try {
2262
+ _forceRemove(element);
2263
+ } catch (_2) {
2264
+ }
2265
+ else try {
2266
+ element.setAttribute(name, "");
2267
+ } catch (_2) {
2268
+ }
2269
+ }
2270
+ };
2271
+ const _stripDisallowedAttributes = function _stripDisallowedAttributes2(element) {
2272
+ const attributes = getAttributes(element);
2273
+ if (!attributes) return;
2274
+ for (let i = attributes.length - 1; i >= 0; --i) {
2275
+ const attribute = attributes[i];
2276
+ const name = attribute && attribute.name;
2277
+ if (typeof name !== "string" || ALLOWED_ATTR[transformCaseFunc(name)]) continue;
2278
+ _stripAttributeNode(element, attribute, name);
2279
+ }
2280
+ };
2281
+ const _walkTree = function _walkTree2(root, visit) {
2282
+ let intoShadow = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
2283
+ const stack = [root];
2284
+ while (stack.length > 0) {
2285
+ const node = stack.pop();
2286
+ if (visit(node) === false) continue;
2287
+ if (intoShadow && _readNodeType(node) === NODE_TYPE.element) {
2288
+ const shadowRoot = getShadowRoot(node);
2289
+ if (_isDocumentFragment(shadowRoot)) stack.push(shadowRoot);
2290
+ }
2291
+ const childNodes = getChildNodes(node);
2292
+ if (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push(childNodes[i]);
2293
+ }
2294
+ };
2295
+ const _neutralizeSubtree = function _neutralizeSubtree2(root) {
2296
+ _walkTree(root, (node) => {
2297
+ if (_readNodeType(node) === NODE_TYPE.element) _stripDisallowedAttributes(node);
2298
+ });
2299
+ };
2300
+ const _collectLiveNodes = function _collectLiveNodes2(root) {
2301
+ const nodes = [];
2302
+ _walkTree(root, (node) => {
2303
+ nodes.push(node);
2304
+ }, true);
2305
+ return nodes;
2306
+ };
2307
+ const _neutralizeEscapedElements = function _neutralizeEscapedElements2(root, before) {
2308
+ const reachable = setCreate();
2309
+ arrayForEach(_collectLiveNodes(root), (node) => {
2310
+ if (_readNodeType(node) === NODE_TYPE.element) setAdd(reachable, node);
2311
+ });
2312
+ arrayForEach(before, (node) => {
2313
+ if (_readNodeType(node) === NODE_TYPE.element && !setHas(reachable, node)) _stripDisallowedAttributes(node);
2314
+ });
2315
+ };
2316
+ const _neutralizeDiscarded = function _neutralizeDiscarded2(root, before) {
2317
+ let rootRemoved = false;
2318
+ arrayForEach(DOMPurify.removed, (entry) => {
2319
+ if (entry.element) {
2320
+ rootRemoved = rootRemoved || entry.element === root;
2321
+ _neutralizeSubtree(entry.element);
2322
+ }
2323
+ });
2324
+ _neutralizeEscapedElements(root, before);
2325
+ return rootRemoved;
2326
+ };
2327
+ const MAX_UNVISITED_ROUNDS = 8;
2328
+ const _sanitizeUnvisitedNodes = function _sanitizeUnvisitedNodes2(root, before) {
2329
+ const visited = IN_PLACE_VISITED;
2330
+ let original = null;
2331
+ const getOriginal = () => {
2332
+ if (!original) {
2333
+ original = setCreate();
2334
+ arrayForEach(before, (beforeNode) => {
2335
+ setAdd(original, beforeNode);
2336
+ });
2337
+ }
2338
+ return original;
2339
+ };
2340
+ for (let round = 0; ; round++) {
2341
+ const live = _collectLiveNodes(root);
2342
+ const containers = [root];
2343
+ let pending = false;
2344
+ arrayForEach(live, (node) => {
2345
+ if (_readNodeType(node) === NODE_TYPE.documentFragment) arrayPush(containers, node);
2346
+ else if (!pending && !setHas(visited, node)) pending = setHas(getOriginal(), node);
2347
+ });
2348
+ if (!pending) return;
2349
+ if (round >= MAX_UNVISITED_ROUNDS) throw typeErrorCreate("the tree kept changing during in-place sanitization; refusing to return it");
2350
+ arrayForEach(containers, (container, index) => {
2351
+ _sanitizeUnvisitedIn(container, index > 0, root, getOriginal());
2352
+ });
2353
+ }
2354
+ };
2355
+ const _sanitizeUnvisitedIn = function _sanitizeUnvisitedIn2(container, inShadow, root, original) {
2356
+ const iterator = _createNodeIterator(container);
2357
+ let node;
2358
+ while (node = iterator.nextNode()) {
2359
+ if (!setHas(original, node) || setHas(IN_PLACE_VISITED, node)) continue;
2360
+ if (inShadow) _executeHooks(hooks.uponSanitizeShadowNode, node, null);
2361
+ _sanitizeElements(node, root);
2362
+ _sanitizeAttributes(node, root);
2363
+ if (_isDocumentFragment(node.content)) _sanitizeShadowDOM2(node.content);
2364
+ }
2365
+ };
2366
+ const _markVisited = function _markVisited2(node) {
2367
+ if (IN_PLACE_VISITED) setAdd(IN_PLACE_VISITED, node);
2368
+ };
2369
+ const _isPatchLinkageAttribute = function _isPatchLinkageAttribute2(lcName, lcTag) {
2370
+ if (!SAFE_FOR_XML) return false;
2371
+ if (lcName === "patchsrc") return true;
2372
+ return lcName === "for" && lcTag !== "label" && lcTag !== "output";
2373
+ };
2374
+ const _neutralizePatchLinkage = function _neutralizePatchLinkage2(root) {
2375
+ if (!SAFE_FOR_XML) return;
2376
+ _walkTree(root, (node) => {
2377
+ const nodeType = _readNodeType(node);
2378
+ if (nodeType === NODE_TYPE.processingInstruction || nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, node.data)) {
2379
+ try {
2380
+ remove(node);
2381
+ } catch (_2) {
2382
+ }
2383
+ return false;
2384
+ }
2385
+ if (nodeType === NODE_TYPE.element) {
2386
+ const element = node;
2387
+ const lcTag = transformCaseFunc(_readNodeName(node));
2388
+ try {
2389
+ if (element.hasAttribute && element.hasAttribute("patchsrc")) element.removeAttribute("patchsrc");
2390
+ if (element.hasAttribute && element.hasAttribute("for") && _isPatchLinkageAttribute("for", lcTag)) element.removeAttribute("for");
2391
+ } catch (_2) {
2392
+ }
2393
+ }
2394
+ return true;
2395
+ });
2396
+ };
2397
+ const _initDocument = function _initDocument2(dirty) {
2398
+ let doc = null;
2399
+ let leadingWhitespace = null;
2400
+ if (FORCE_BODY) dirty = "<remove></remove>" + dirty;
2401
+ else {
2402
+ const matches = stringMatch(dirty, /^[\r\n\t ]+/);
2403
+ leadingWhitespace = matches && matches[0];
2404
+ }
2405
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
2406
+ const dirtyPayload = trustedTypesPolicy ? _createTrustedHTML(dirty) : dirty;
2407
+ if (NAMESPACE === HTML_NAMESPACE) try {
2408
+ doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
2409
+ } catch (_2) {
2410
+ }
2411
+ if (!doc || !doc.documentElement) {
2412
+ doc = implementation.createDocument(NAMESPACE, "template", null);
2413
+ try {
2414
+ doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
2415
+ } catch (_2) {
2416
+ }
2417
+ }
2418
+ const body = doc.body || doc.documentElement;
2419
+ if (dirty && leadingWhitespace) body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
2420
+ if (NAMESPACE === HTML_NAMESPACE) return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
2421
+ return WHOLE_DOCUMENT ? doc.documentElement : body;
2422
+ };
2423
+ const _createNodeIterator = function _createNodeIterator2(root) {
2424
+ const doc = getOwnerDocument ? getOwnerDocument(root) : root.ownerDocument;
2425
+ return createNodeIterator.call(doc || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
2426
+ };
2427
+ const _stripTemplateExpressions = function _stripTemplateExpressions2(value) {
2428
+ value = stringReplace(value, MUSTACHE_EXPR$1, " ");
2429
+ value = stringReplace(value, ERB_EXPR$1, " ");
2430
+ value = stringReplace(value, TMPLIT_EXPR$1, " ");
2431
+ return value;
2432
+ };
2433
+ const _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {
2434
+ var _node$querySelectorAl;
2435
+ _scrubOwnCharacterData(node);
2436
+ const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, "template");
2437
+ if (templates) arrayForEach(templates, (tmpl) => {
2438
+ if (_isDocumentFragment(tmpl.content)) _scrubTemplateExpressions2(tmpl.content);
2439
+ });
2440
+ };
2441
+ const _scrubOwnCharacterData = function _scrubOwnCharacterData2(node) {
2442
+ node.normalize();
2443
+ const doc = getOwnerDocument ? getOwnerDocument(node) : node.ownerDocument;
2444
+ const walker = createNodeIterator.call(doc || node, node, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);
2445
+ let currentNode = walker.nextNode();
2446
+ while (currentNode) {
2447
+ currentNode.data = _stripTemplateExpressions(currentNode.data);
2448
+ currentNode = walker.nextNode();
2449
+ }
2450
+ };
2451
+ const _isClobbered = function _isClobbered2(element) {
2452
+ const realTagName = getNodeName ? getNodeName(element) : null;
2453
+ if (typeof realTagName !== "string") return false;
2454
+ if (transformCaseFunc(realTagName) !== "form") return false;
2455
+ return typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || element.attributes !== getAttributes(element) || typeof element.removeAttribute !== "function" || typeof element.removeAttributeNode !== "function" || typeof element.getAttributeNode !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function" || element.nodeType !== getNodeType(element) || element.childNodes !== getChildNodes(element);
2456
+ };
2457
+ const _isDocumentFragment = function _isDocumentFragment2(value) {
2458
+ if (!getNodeType || typeof value !== "object" || value === null) return false;
2459
+ try {
2460
+ return getNodeType(value) === NODE_TYPE.documentFragment;
2461
+ } catch (_2) {
2462
+ return false;
2463
+ }
2464
+ };
2465
+ const _isNode = function _isNode2(value) {
2466
+ if (!getNodeType || typeof value !== "object" || value === null) return false;
2467
+ try {
2468
+ return typeof getNodeType(value) === "number";
2469
+ } catch (_2) {
2470
+ return false;
2471
+ }
2472
+ };
2473
+ function _executeHooks(hooks2, currentNode, data) {
2474
+ if (hooks2.length === 0) return;
2475
+ arrayForEach(hooks2, (hook) => {
2476
+ hook.call(DOMPurify, currentNode, data, CONFIG);
2477
+ });
2478
+ }
2479
+ const _isUnsafeNode = function _isUnsafeNode2(currentNode, tagName) {
2480
+ if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) return true;
2481
+ if (SAFE_FOR_XML && LITERAL_TEXT_ELEMENTS[tagName] && _readNodeType(currentNode) === NODE_TYPE.element && _readNamespaceURI(currentNode) === HTML_NAMESPACE && (_isNode(currentNode.firstElementChild) || typeof currentNode.textContent === "string" && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent))) return true;
2482
+ if (currentNode.nodeType === NODE_TYPE.processingInstruction) return true;
2483
+ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) return true;
2484
+ return false;
2485
+ };
2486
+ const _matchesNameCheck = function _matchesNameCheck2(check, name) {
2487
+ if (check instanceof RegExp) return regExpTest(check, name);
2488
+ if (check instanceof Function) {
2489
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];
2490
+ return Boolean(check(name, ...args));
2491
+ }
2492
+ return false;
2493
+ };
2494
+ const _sanitizeDisallowedNode = function _sanitizeDisallowedNode2(currentNode, tagName, root) {
2495
+ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;
2496
+ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && !FORBID_CONTENTS[stringToLowerCase(tagName)]) {
2497
+ const parentNode = getParentNode(currentNode);
2498
+ const childNodes = getChildNodes(currentNode);
2499
+ if (childNodes && parentNode) {
2500
+ const childCount = childNodes.length;
2501
+ for (let i = childCount - 1; i >= 0; --i) {
2502
+ const hoisted = currentNode === root ? cloneNode(childNodes[i], true) : childNodes[i];
2503
+ parentNode.insertBefore(hoisted, getNextSibling(currentNode));
2504
+ }
2505
+ }
2506
+ }
2507
+ _forceRemove(currentNode);
2508
+ return true;
2509
+ };
2510
+ const _forkSharedAllowlist = function _forkSharedAllowlist2(hookList, set, defaultSet, setConfigSet) {
2511
+ if (hookList.length === 0) return set;
2512
+ return set === defaultSet || set === setConfigSet ? clone(set) : set;
2513
+ };
2514
+ const _handleHookDetachedNode = function _handleHookDetachedNode2(currentNode, root) {
2515
+ if (currentNode === root || getParentNode(currentNode) !== null) return false;
2516
+ if (IN_PLACE) _neutralizeSubtree(currentNode);
2517
+ return true;
2518
+ };
2519
+ const _sanitizeElements = function _sanitizeElements2(currentNode, root) {
2520
+ _markVisited(currentNode);
2521
+ _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
2522
+ if (_handleHookDetachedNode(currentNode, root)) return true;
2523
+ if (_isClobbered(currentNode)) {
2524
+ _forceRemove(currentNode);
2525
+ return true;
2526
+ }
2527
+ const tagName = transformCaseFunc(_readNodeName(currentNode));
2528
+ ALLOWED_TAGS = _forkSharedAllowlist(hooks.uponSanitizeElement, ALLOWED_TAGS, DEFAULT_ALLOWED_TAGS, SET_CONFIG_ALLOWED_TAGS);
2529
+ _executeHooks(hooks.uponSanitizeElement, currentNode, {
2530
+ tagName,
2531
+ allowedTags: ALLOWED_TAGS
2532
+ });
2533
+ if (_handleHookDetachedNode(currentNode, root)) return true;
2534
+ if (_isUnsafeNode(currentNode, tagName)) {
2535
+ _forceRemove(currentNode);
2536
+ return true;
2537
+ }
2538
+ if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {
2539
+ const removed = _sanitizeDisallowedNode(currentNode, tagName, root);
2540
+ if (removed === false) {
2541
+ _executeHooks(hooks.afterSanitizeElements, currentNode, null);
2542
+ if (_handleHookDetachedNode(currentNode, root)) return true;
2543
+ }
2544
+ return removed;
2545
+ }
2546
+ if (_readNodeType(currentNode) === NODE_TYPE.element && !_checkValidNamespace(currentNode)) {
2547
+ _forceRemove(currentNode);
2548
+ return true;
2549
+ }
2550
+ if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(FALLBACK_TAG_CLOSE, currentNode.innerHTML)) {
2551
+ _forceRemove(currentNode);
2552
+ return true;
2553
+ }
2554
+ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
2555
+ const content = _stripTemplateExpressions(currentNode.textContent);
2556
+ if (currentNode.textContent !== content) {
2557
+ arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });
2558
+ currentNode.textContent = content;
2559
+ }
2560
+ }
2561
+ _executeHooks(hooks.afterSanitizeElements, currentNode, null);
2562
+ return _handleHookDetachedNode(currentNode, root);
2563
+ };
2564
+ const _isValidAttribute = function _isValidAttribute2(lcTag, lcName, value) {
2565
+ if (FORBID_ATTR[lcName]) return false;
2566
+ if (_isPatchLinkageAttribute(lcName, lcTag)) return false;
2567
+ if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document2 || value in formElement)) return false;
2568
+ const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);
2569
+ if (ALLOW_DATA_ATTR && regExpTest(DATA_ATTR$1, lcName)) return true;
2570
+ if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) return true;
2571
+ if (!nameIsPermitted) return _isBasicCustomElement(lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName, lcTag) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && _matchesNameCheck(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value);
2572
+ if (URI_SAFE_ATTRIBUTES[lcName]) return true;
2573
+ if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ""))) return true;
2574
+ if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]) return true;
2575
+ if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ""))) return true;
2576
+ return !value;
2577
+ };
2578
+ const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, [
2579
+ "annotation-xml",
2580
+ "color-profile",
2581
+ "font-face",
2582
+ "font-face-format",
2583
+ "font-face-name",
2584
+ "font-face-src",
2585
+ "font-face-uri",
2586
+ "missing-glyph"
2587
+ ]);
2588
+ const _isBasicCustomElement = function _isBasicCustomElement2(tagName) {
2589
+ return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);
2590
+ };
2591
+ const _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute2(lcTag, lcName, namespaceURI, value) {
2592
+ if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function" && !namespaceURI) switch (trustedTypes.getAttributeType(lcTag, lcName)) {
2593
+ case "TrustedHTML":
2594
+ return _createTrustedHTML(value);
2595
+ case "TrustedScriptURL":
2596
+ return _createTrustedScriptURL(value);
2597
+ }
2598
+ return value;
2599
+ };
2600
+ const _setAttributeValue = function _setAttributeValue2(currentNode, name, namespaceURI, value) {
2601
+ try {
2602
+ if (namespaceURI) currentNode.setAttributeNS(namespaceURI, name, value);
2603
+ else currentNode.setAttribute(name, value);
2604
+ if (_isClobbered(currentNode)) {
2605
+ _forceRemove(currentNode);
2606
+ return false;
2607
+ }
2608
+ return true;
2609
+ } catch (_2) {
2610
+ _removeAttribute(name, currentNode);
2611
+ return false;
2612
+ }
2613
+ };
2614
+ const _isUnsafeAttributeValue = function _isUnsafeAttributeValue2(name, value) {
2615
+ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) return true;
2616
+ return stringToLowerCase(name) === "attributename" && stringMatch(value, "href") !== null;
2617
+ };
2618
+ const _sanitizeAttributes = function _sanitizeAttributes2(currentNode, root) {
2619
+ _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
2620
+ if (_handleHookDetachedNode(currentNode, root)) return;
2621
+ const attributes = currentNode.attributes;
2622
+ if (!attributes || _isClobbered(currentNode)) return;
2623
+ ALLOWED_ATTR = _forkSharedAllowlist(hooks.uponSanitizeAttribute, ALLOWED_ATTR, DEFAULT_ALLOWED_ATTR, SET_CONFIG_ALLOWED_ATTR);
2624
+ const hookEvent = {
2625
+ attrName: "",
2626
+ attrValue: "",
2627
+ keepAttr: true,
2628
+ allowedAttributes: ALLOWED_ATTR,
2629
+ forceKeepAttr: void 0
2630
+ };
2631
+ let l = attributes.length;
2632
+ const lcTag = transformCaseFunc(currentNode.nodeName);
2633
+ while (l--) {
2634
+ const attr = attributes[l];
2635
+ const name = attr.name, namespaceURI = attr.namespaceURI, attrValue = attr.value;
2636
+ const lcName = transformCaseFunc(name);
2637
+ const initValue = attrValue;
2638
+ let value = name === "value" ? initValue : stringTrim(initValue);
2639
+ let recreatedNamedProp = false;
2640
+ hookEvent.attrName = lcName;
2641
+ hookEvent.attrValue = value;
2642
+ hookEvent.keepAttr = true;
2643
+ hookEvent.forceKeepAttr = void 0;
2644
+ _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
2645
+ value = hookEvent.attrValue;
2646
+ if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name") && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {
2647
+ _removeAttribute(name, currentNode, attr);
2648
+ value = SANITIZE_NAMED_PROPS_PREFIX + value;
2649
+ recreatedNamedProp = true;
2650
+ }
2651
+ if (_isUnsafeAttributeValue(name, value)) {
2652
+ _removeAttribute(name, currentNode, attr);
2653
+ continue;
2654
+ }
2655
+ if (hookEvent.forceKeepAttr) continue;
2656
+ if (!hookEvent.keepAttr) {
2657
+ _removeAttribute(name, currentNode, attr);
2658
+ continue;
2659
+ }
2660
+ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value)) {
2661
+ _removeAttribute(name, currentNode, attr);
2662
+ continue;
2663
+ }
2664
+ if (SAFE_FOR_TEMPLATES) value = _stripTemplateExpressions(value);
2665
+ if (!_isValidAttribute(lcTag, lcName, value)) {
2666
+ _removeAttribute(name, currentNode, attr);
2667
+ continue;
2668
+ }
2669
+ value = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);
2670
+ if (value !== initValue) {
2671
+ if (_setAttributeValue(currentNode, name, namespaceURI, value) && recreatedNamedProp) arrayPop(DOMPurify.removed);
2672
+ }
2673
+ }
2674
+ _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
2675
+ _handleHookDetachedNode(currentNode, root);
2676
+ };
2677
+ const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {
2678
+ let shadowNode = null;
2679
+ const shadowIterator = _createNodeIterator(fragment);
2680
+ _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
2681
+ while (shadowNode = shadowIterator.nextNode()) {
2682
+ _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
2683
+ _sanitizeElements(shadowNode, fragment);
2684
+ _sanitizeAttributes(shadowNode, fragment);
2685
+ if (_isDocumentFragment(shadowNode.content)) _sanitizeShadowDOM2(shadowNode.content);
2686
+ if (_readNodeType(shadowNode) === NODE_TYPE.element) {
2687
+ const innerSr = getShadowRoot(shadowNode);
2688
+ if (_isDocumentFragment(innerSr)) {
2689
+ _sanitizeAttachedShadowRoots(innerSr);
2690
+ _sanitizeShadowDOM2(innerSr);
2691
+ }
2692
+ }
2693
+ }
2694
+ if (SAFE_FOR_TEMPLATES) _scrubOwnCharacterData(fragment);
2695
+ _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
2696
+ };
2697
+ const _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots2(root) {
2698
+ const stack = [{
2699
+ node: root,
2700
+ shadow: null
2701
+ }];
2702
+ while (stack.length > 0) {
2703
+ const item = stack.pop();
2704
+ if (item.shadow) {
2705
+ _sanitizeShadowDOM2(item.shadow);
2706
+ continue;
2707
+ }
2708
+ const node = item.node;
2709
+ const isElement = _readNodeType(node) === NODE_TYPE.element;
2710
+ const childNodes = getChildNodes(node);
2711
+ if (childNodes) for (let i = childNodes.length - 1; i >= 0; --i) stack.push({
2712
+ node: childNodes[i],
2713
+ shadow: null
2714
+ });
2715
+ if (isElement) {
2716
+ const rootName = getNodeName ? getNodeName(node) : null;
2717
+ if (typeof rootName === "string" && transformCaseFunc(rootName) === "template") {
2718
+ const content = node.content;
2719
+ if (_isDocumentFragment(content)) stack.push({
2720
+ node: content,
2721
+ shadow: null
2722
+ });
2723
+ }
2724
+ }
2725
+ if (isElement) {
2726
+ const sr = getShadowRoot(node);
2727
+ if (_isDocumentFragment(sr)) stack.push({
2728
+ node: null,
2729
+ shadow: sr
2730
+ }, {
2731
+ node: sr,
2732
+ shadow: null
2733
+ });
2734
+ }
2735
+ }
2736
+ };
2737
+ DOMPurify.sanitize = function(dirty) {
2738
+ let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
2739
+ let body = null;
2740
+ let importedNode = null;
2741
+ let currentNode = null;
2742
+ let returnNode = null;
2743
+ IS_EMPTY_INPUT = !dirty;
2744
+ if (IS_EMPTY_INPUT) dirty = "<!-->";
2745
+ if (typeof dirty !== "string" && !_isNode(dirty)) {
2746
+ dirty = stringifyValue(dirty);
2747
+ if (typeof dirty !== "string") throw typeErrorCreate("dirty is not a string, aborting");
2748
+ }
2749
+ if (!DOMPurify.isSupported) return dirty;
2750
+ if (SET_CONFIG) {
2751
+ ALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;
2752
+ ALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;
2753
+ } else _parseConfig(cfg);
2754
+ if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) ALLOWED_TAGS = clone(ALLOWED_TAGS);
2755
+ if (hooks.uponSanitizeAttribute.length > 0) ALLOWED_ATTR = clone(ALLOWED_ATTR);
2756
+ DOMPurify.removed = [];
2757
+ const inPlace = IN_PLACE && typeof dirty !== "string" && _isNode(dirty);
2758
+ let inPlaceNodes = [];
2759
+ const outerVisited = IN_PLACE_VISITED;
2760
+ if (inPlace) {
2761
+ _neutralizePatchLinkage(dirty);
2762
+ const nn = _readNodeName(dirty);
2763
+ if (typeof nn === "string") {
2764
+ const tagName = transformCaseFunc(nn);
2765
+ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
2766
+ _neutralizeRoot(dirty);
2767
+ throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
2768
+ }
2769
+ }
2770
+ if (_isClobbered(dirty)) {
2771
+ _neutralizeRoot(dirty);
2772
+ throw typeErrorCreate("root node is clobbered and cannot be sanitized in-place");
2773
+ }
2774
+ inPlaceNodes = _collectLiveNodes(dirty);
2775
+ IN_PLACE_VISITED = setCreate();
2776
+ } else if (_isNode(dirty)) {
2777
+ body = _initDocument("<!---->");
2778
+ importedNode = body.ownerDocument.importNode(dirty, true);
2779
+ if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") body = importedNode;
2780
+ else if (importedNode.nodeName === "HTML") body = importedNode;
2781
+ else body.appendChild(importedNode);
2782
+ _sanitizeAttachedShadowRoots(body);
2783
+ } else {
2784
+ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(dirty) : dirty;
2785
+ body = _initDocument(dirty);
2786
+ if (!body) return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
2787
+ }
2788
+ if (body && FORCE_BODY) _forceRemove(body.firstChild);
2789
+ const walkRoot = inPlace ? dirty : body;
2790
+ try {
2791
+ if (inPlace) _sanitizeAttachedShadowRoots(dirty);
2792
+ const nodeIterator = _createNodeIterator(walkRoot);
2793
+ while (currentNode = nodeIterator.nextNode()) {
2794
+ _sanitizeElements(currentNode, walkRoot);
2795
+ _sanitizeAttributes(currentNode, walkRoot);
2796
+ if (_isDocumentFragment(currentNode.content)) _sanitizeShadowDOM2(currentNode.content);
2797
+ }
2798
+ if (inPlace) _sanitizeUnvisitedNodes(dirty, inPlaceNodes);
2799
+ } catch (error) {
2800
+ if (inPlace) {
2801
+ _neutralizeRoot(dirty);
2802
+ _neutralizeDiscarded(dirty, inPlaceNodes);
2803
+ }
2804
+ throw error;
2805
+ } finally {
2806
+ IN_PLACE_VISITED = outerVisited;
2807
+ }
2808
+ if (inPlace) {
2809
+ if (_neutralizeDiscarded(dirty, inPlaceNodes)) throw typeErrorCreate("a node selected for removal could not be safely returned; refusing to sanitize in place");
2810
+ if (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(dirty);
2811
+ return dirty;
2812
+ }
2813
+ if (RETURN_DOM) {
2814
+ if (SAFE_FOR_TEMPLATES) _scrubTemplateExpressions2(body);
2815
+ if (RETURN_DOM_FRAGMENT) {
2816
+ returnNode = createDocumentFragment.call(body.ownerDocument);
2817
+ while (body.firstChild) returnNode.appendChild(body.firstChild);
2818
+ } else returnNode = body;
2819
+ if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) returnNode = importNode.call(originalDocument, returnNode, true);
2820
+ return returnNode;
2821
+ }
2822
+ let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
2823
+ if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
2824
+ if (SAFE_FOR_TEMPLATES) serializedHTML = _stripTemplateExpressions(serializedHTML);
2825
+ return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(serializedHTML) : serializedHTML;
2826
+ };
2827
+ DOMPurify.setConfig = function() {
2828
+ let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
2829
+ _parseConfig(cfg);
2830
+ SET_CONFIG = true;
2831
+ SET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;
2832
+ SET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;
2833
+ };
2834
+ DOMPurify.clearConfig = function() {
2835
+ CONFIG = null;
2836
+ SET_CONFIG = false;
2837
+ SET_CONFIG_ALLOWED_TAGS = null;
2838
+ SET_CONFIG_ALLOWED_ATTR = null;
2839
+ trustedTypesPolicy = defaultTrustedTypesPolicy;
2840
+ emptyHTML = "";
2841
+ };
2842
+ DOMPurify.isValidAttribute = function(tag, attr, value) {
2843
+ if (!CONFIG) _parseConfig({});
2844
+ const lcTag = transformCaseFunc(tag);
2845
+ const lcName = transformCaseFunc(attr);
2846
+ if (typeof value === "string" && (_isUnsafeAttributeValue(attr, value) || !ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(SELF_CLOSING_TAG, value))) return false;
2847
+ return _isValidAttribute(lcTag, lcName, value);
2848
+ };
2849
+ DOMPurify.addHook = function(entryPoint, hookFunction) {
2850
+ if (typeof hookFunction !== "function") return;
2851
+ if (!objectHasOwnProperty(hooks, entryPoint)) return;
2852
+ arrayPush(hooks[entryPoint], hookFunction);
2853
+ };
2854
+ DOMPurify.removeHook = function(entryPoint, hookFunction) {
2855
+ if (!objectHasOwnProperty(hooks, entryPoint)) return;
2856
+ if (hookFunction !== void 0) {
2857
+ const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
2858
+ return index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];
2859
+ }
2860
+ return arrayPop(hooks[entryPoint]);
2861
+ };
2862
+ DOMPurify.removeHooks = function(entryPoint) {
2863
+ if (!objectHasOwnProperty(hooks, entryPoint)) return;
2864
+ hooks[entryPoint] = [];
2865
+ };
2866
+ DOMPurify.removeAllHooks = function() {
2867
+ hooks = _createHooksMap();
2868
+ };
2869
+ return DOMPurify;
2870
+ }
2871
+ var purify_default = createDOMPurify();
2872
+
2873
+ // node_modules/marked/lib/marked.esm.js
2874
+ function v() {
2875
+ return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
2876
+ }
2877
+ var y = v();
2878
+ function ee(a3) {
2879
+ y = a3;
2880
+ }
2881
+ var B = { exec: () => null };
2882
+ function I(a3) {
2883
+ let e = [];
2884
+ return (t) => {
2885
+ let n = Math.max(0, Math.min(3, t - 1)), s = e[n];
2886
+ return s || (s = a3(n), e[n] = s), s;
2887
+ };
2888
+ }
2889
+ function c(a3, e = "") {
2890
+ let t = typeof a3 == "string" ? a3 : a3.source, n = { replace: (s, r) => {
2891
+ let o = typeof r == "string" ? r : r.source;
2892
+ return o = o.replace(T.caret, "$1"), t = t.replace(s, o), n;
2893
+ }, getRegex: () => new RegExp(t, e) };
2894
+ return n;
2895
+ }
2896
+ var Me = ((a3 = "") => {
2897
+ try {
2898
+ return !!new RegExp("(?<=1)(?<!1)" + a3);
2899
+ } catch {
2900
+ return false;
2901
+ }
2902
+ })();
2903
+ var T = { codeRemoveIndent: /^(?: {0,3}\t| {1,4})/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, endingSpaceTabChar: /[ \t]$/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, leadingSpaceTab: /^[ \t]+/, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, blockquoteMarkerWhitespace: /^( {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, numericCharacterReference: /&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/, numericCharacterReferenceOrAmpersand: /&#(?:(\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, 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: (a3) => new RegExp(`^( {0,3}${a3})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: I((a3) => new RegExp(`^ {0,${a3}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)), hrRegex: I((a3) => new RegExp(`^ {0,${a3}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)), fencesBeginRegex: I((a3) => new RegExp(`^ {0,${a3}}(?:\`\`\`|~~~)`)), headingBeginRegex: I((a3) => new RegExp(`^ {0,${a3}}#{1,6}(?:\\s|$)`)), pedanticHeadingBeginRegex: I((a3) => new RegExp(`^ {0,${a3}}#`)), htmlBeginRegex: I((a3) => new RegExp(`^ {0,${a3}}(?:</?(?:${K})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)`, "i")), blockquoteBeginRegex: I((a3) => new RegExp(`^ {0,${a3}}>`)) };
2904
+ var Ce = /^(?:[ \t]*(?:\n|$))+/;
2905
+ var Ee = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
2906
+ var Ie = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
2907
+ var U = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
2908
+ var Be = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
2909
+ var ne = / {0,3}(?:[*+-]|\d{1,9}[.)])/;
2910
+ var me = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |fences|blockquote|heading|hr|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
2911
+ var xe = c(me).replace(/bull/g, ne).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(/hr/g, / {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
2912
+ var De = c(me).replace(/bull/g, ne).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(/hr/g, / {0,3}(?:(?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
2913
+ var re = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/;
2914
+ var qe = /^[^\n]+/;
2915
+ var se = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
2916
+ var Ze = c(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", se).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
2917
+ var ve = c(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g, ne).getRegex();
2918
+ var K = "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";
2919
+ var ie = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
2920
+ var He = c("^ {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)(?:[ \\t]+|\\n|/?>|$)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!(?:script|pre|style|textarea)(?![a-z0-9-]))([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", ie).replace("tag", K).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
2921
+ var be = (a3) => c(re).replace("hr", U).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", a3).replace("html", " {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag", K).getRegex();
2922
+ var Ge = be(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/);
2923
+ var Ne = be(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/);
2924
+ var Qe = c(/^( {0,3}> ?(?:(?![ \t]*(?:\n|$))(paragraph)|[^\n]*)(?:\n|$))+/).replace("paragraph", Ne).getRegex();
2925
+ var oe = { blockquote: Qe, code: Ee, def: Ze, fences: Ie, heading: Be, hr: U, html: He, lheading: xe, list: ve, newline: Ce, paragraph: Ge, table: B, text: qe };
2926
+ var ke = c("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", U).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", " {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag", K).getRegex();
2927
+ var je = { ...oe, lheading: De, table: ke, paragraph: c(re).replace("hr", U).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", ke).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", " {0,3}(?:</?(?:tag)(?: +|\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\s>]|$)|!--)|<\\?|<![A-Za-z]|<!\\[CDATA\\[)").replace("tag", K).getRegex() };
2928
+ var Fe = { ...oe, html: c(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", ie).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: B, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: c(re).replace("hr", U).replace("heading", ` *#{1,6} *[^
2929
+ ]`).replace("lheading", xe).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
2930
+ var Ue = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
2931
+ var Ke = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
2932
+ var Re = /^( {2,}|\\)\n(?!\s*$)[ \t]*/;
2933
+ var We = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
2934
+ var $ = /[\p{P}\p{S}]/u;
2935
+ var H = /[\s\p{P}\p{S}]/u;
2936
+ var W = /[^\s\p{P}\p{S}]/u;
2937
+ var Xe = c(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, H).getRegex();
2938
+ var Ve = /[\p{Pi}\p{Ps}"']/u;
2939
+ var Te = /(?!~)[\p{P}\p{S}]/u;
2940
+ var Je = /(?!~)[\s\p{P}\p{S}]/u;
2941
+ var Ye = /(?:[^\s\p{P}\p{S}]|~)/u;
2942
+ var et = c(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", Me ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex();
2943
+ var Oe = /^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/;
2944
+ var tt = c(Oe, "u").replace(/punct/g, $).getRegex();
2945
+ var nt = c(Oe, "u").replace(/punct/g, Te).getRegex();
2946
+ var rt = /^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/;
2947
+ var st = c(rt, "u").replace(/openQuote/g, Ve).replace(/punct/g, $).getRegex();
2948
+ var we = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
2949
+ var it = c(we, "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, $).getRegex();
2950
+ var ot = c(we, "gu").replace(/notPunctSpace/g, Ye).replace(/punctSpace/g, Je).replace(/punct/g, Te).getRegex();
2951
+ var at = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)";
2952
+ var lt = c(at, "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, $).getRegex();
2953
+ var ut = c("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, $).getRegex();
2954
+ var pt = "^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)";
2955
+ var ct = c(pt, "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, $).getRegex();
2956
+ var ht = c(/^~~?(?:((?!~)punct)|[^\s~])/, "u").replace(/punct/g, $).getRegex();
2957
+ var dt = "^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)";
2958
+ var kt = c(dt, "gu").replace(/notPunctSpace/g, W).replace(/punctSpace/g, H).replace(/punct/g, $).getRegex();
2959
+ var gt = c(/\\(punct)/, "gu").replace(/punct/g, $).getRegex();
2960
+ var ft = c(/(`+)(?:[^`]|[^`][\s\S]*?[^`])\1(?!`)|`+|\\(punct)/, "gu").replace(/punct/g, $).getRegex();
2961
+ var mt = c(/^<(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();
2962
+ var xt = c(ie).replace("(?:-->|$)", "-->").getRegex();
2963
+ var bt = c("^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", xt).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
2964
+ var Pe = /\[(?:\\[\s\S]|[^\[\]\\])*\]/;
2965
+ var Y = c(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace("brackets", Pe).getRegex();
2966
+ var Rt = c(/^!?\[(label)\]\([ \t\n]*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?[ \t\n]*\)/).replace("label", Y).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
2967
+ var Tt = c(/^!?\[(label)\]\[(ref)\]/).replace("label", Y).replace("ref", se).getRegex();
2968
+ var Ot = c(/^!?\[(ref)\](?:\[\])?/).replace("ref", se).getRegex();
2969
+ var ge = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/;
2970
+ var wt = c(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace("brackets", Pe).getRegex();
2971
+ var Pt = c("reflink|nolink(?!\\()", "g").replace("reflink", c(/^!?\[(label)\]\[(ref)\]/).replace("label", wt).replace("ref", ge).getRegex()).replace("nolink", c(/^!?\[(ref)\](?:\[\])?/).replace("ref", ge).getRegex()).getRegex();
2972
+ var fe = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;
2973
+ var yt = /[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/;
2974
+ var St = c(/(?:mailto:email|xmpp:email(?:\/[A-Za-z0-9@.]+)?)/).replace(/email/g, yt).getRegex();
2975
+ var ae = { _backpedal: B, anyPunctuation: gt, anyPunctuationOutsideCode: ft, autolink: mt, blockSkip: et, br: Re, code: Ke, del: B, delLDelim: B, delRDelim: B, emStrongLDelim: tt, emStrongRDelimAst: it, emStrongRDelimUnd: ut, escape: Ue, link: Rt, nolink: Ot, punctuation: Xe, reflink: Tt, reflinkSearch: Pt, tag: bt, text: We, url: B };
2976
+ var _t = { ...ae, emStrongLDelim: st, emStrongRDelimAst: lt, emStrongRDelimUnd: ct, link: c(/^!?\[(label)\]\((.*?)\)/).replace("label", Y).getRegex(), reflink: c(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", Y).getRegex() };
2977
+ var te = { ...ae, emStrongRDelimAst: ot, emStrongLDelim: nt, delLDelim: ht, delRDelim: kt, url: c(/^emailProtocol|^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("emailProtocol", St).replace("protocol", fe).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: c(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))))/).replace("protocol", fe).replace(/emailProtocol/g, /(?:mailto|xmpp):/).getRegex() };
2978
+ var $t = { ...te, br: c(Re).replace("{2,}", "*").getRegex(), text: c(te.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
2979
+ var X = { normal: oe, gfm: je, pedantic: Fe };
2980
+ var G = { normal: ae, gfm: te, breaks: $t, pedantic: _t };
2981
+ var Lt = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
2982
+ var ye = (a3) => Lt[a3];
2983
+ function P(a3, e) {
2984
+ if (e) {
2985
+ if (T.escapeTest.test(a3)) return a3.replace(T.escapeReplace, ye);
2986
+ } else if (T.escapeTestNoEncode.test(a3)) return a3.replace(T.escapeReplaceNoEncode, ye);
2987
+ return a3;
2988
+ }
2989
+ function Se(a3) {
2990
+ return T.numericCharacterReference.test(a3) ? a3.replace(T.numericCharacterReferenceOrAmpersand, (e, t, n) => {
2991
+ if (t === void 0 && n === void 0) return "&amp;";
2992
+ let s = t === void 0 ? Number.parseInt(n, 16) : Number.parseInt(t, 10);
2993
+ return s === 0 || s > 1114111 || s >= 55296 && s <= 57343 ? "\uFFFD" : s === 38 ? "&amp;" : String.fromCodePoint(s);
2994
+ }) : a3;
2995
+ }
2996
+ function le(a3) {
2997
+ try {
2998
+ a3 = encodeURI(a3).replace(T.percentDecode, "%");
2999
+ } catch {
3000
+ return null;
3001
+ }
3002
+ return a3;
3003
+ }
3004
+ function ue(a3, e) {
3005
+ let t = a3.replace(T.findPipe, (r, o, i) => {
3006
+ let l = false, u = o;
3007
+ for (; --u >= 0 && i[u] === "\\"; ) l = !l;
3008
+ return l ? "|" : " |";
3009
+ }), n = t.split(T.splitPipe), s = 0;
3010
+ if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e) if (n.length > e) n.splice(e);
3011
+ else for (; n.length < e; ) n.push("");
3012
+ for (; s < n.length; s++) n[s] = n[s].trim().replace(T.slashPipe, "|");
3013
+ return n;
3014
+ }
3015
+ function z(a3, e, t) {
3016
+ let n = a3.length;
3017
+ if (n === 0) return "";
3018
+ let s = 0;
3019
+ for (; s < n; ) {
3020
+ let r = a3.charAt(n - s - 1);
3021
+ if (r === e && !t) s++;
3022
+ else if (r !== e && t) s++;
3023
+ else break;
3024
+ }
3025
+ return a3.slice(0, n - s);
3026
+ }
3027
+ function pe(a3) {
3028
+ let e = a3.split(`
3029
+ `), t = e.length - 1;
3030
+ for (; t >= 0 && T.blankLine.test(e[t]); ) t--;
3031
+ return e.length - t <= 2 ? a3 : e.slice(0, t + 1).join(`
3032
+ `);
3033
+ }
3034
+ function N(a3) {
3035
+ return a3.trim().toLowerCase().toUpperCase().toLowerCase();
3036
+ }
3037
+ function ce(a3, e) {
3038
+ if (a3.indexOf(e[0]) === -1 && a3.indexOf(e[1]) === -1) return -1;
3039
+ let t = 0;
3040
+ for (let n = 0; n < a3.length; n++) if (a3[n] === "\\") n++;
3041
+ else if (a3[n] === e[0]) t++;
3042
+ else if (a3[n] === e[1] && (t--, t < 0)) return n;
3043
+ return t > 0 ? -2 : -1;
3044
+ }
3045
+ function V(a3, e = 0) {
3046
+ let t = e, n = "";
3047
+ for (let s of a3) if (s === " ") {
3048
+ let r = 4 - t % 4;
3049
+ n += " ".repeat(r), t += r;
3050
+ } else n += s, t++;
3051
+ return n;
3052
+ }
3053
+ function _e(a3, e, t, n, s) {
3054
+ let r = e.href, o = e.title || null, i = a3[1].replace(s.other.outputLinkReplace, "$1"), l = a3[0].charAt(0) === "!", u = n.state.inLink, h = n.state.linkEmitted, p = n.state.inRawBlock;
3055
+ n.state.inLink = true, n.state.linkEmitted = false;
3056
+ let d = n.inlineTokens(i), g = n.state.linkEmitted;
3057
+ if (n.state.linkEmitted = h, n.state.inLink = u, !l) {
3058
+ if (g) {
3059
+ n.state.inRawBlock = p;
3060
+ return;
3061
+ }
3062
+ n.state.linkEmitted = true;
3063
+ }
3064
+ return { type: l ? "image" : "link", raw: t, href: r, title: o, text: i, tokens: d };
3065
+ }
3066
+ function At(a3, e, t) {
3067
+ let n = a3.match(t.other.indentCodeCompensation);
3068
+ if (n === null) return e;
3069
+ let s = n[1];
3070
+ return e.split(`
3071
+ `).map((r) => {
3072
+ let o = r.match(t.other.beginningSpace);
3073
+ if (o === null) return r;
3074
+ let [i] = o;
3075
+ return r.slice(Math.min(i.length, s.length));
3076
+ }).join(`
3077
+ `);
3078
+ }
3079
+ function $e(a3, e, t, n) {
3080
+ if (!e.includes("<")) return false;
3081
+ for (let s = 0; s < e.length; s++) {
3082
+ if (e[s] === "\\") {
3083
+ s++;
3084
+ continue;
3085
+ }
3086
+ if (e[s] === "`") {
3087
+ let i = n.inline.code.exec(e.slice(s));
3088
+ if (i) {
3089
+ s += i[0].length - 1;
3090
+ continue;
3091
+ }
3092
+ }
3093
+ if (e[s] !== "<") continue;
3094
+ let r = a3.slice(t + s), o = n.inline.tag.exec(r) || n.inline.autolink.exec(r);
3095
+ if (o) {
3096
+ if (o[0].length > e.length - s) return true;
3097
+ s += o[0].length - 1;
3098
+ }
3099
+ }
3100
+ return false;
3101
+ }
3102
+ var _ = class {
3103
+ options;
3104
+ rules;
3105
+ lexer;
3106
+ constructor(e) {
3107
+ this.options = e || y;
3108
+ }
3109
+ space(e) {
3110
+ let t = this.rules.block.newline.exec(e);
3111
+ if (t && t[0].length > 0) return { type: "space", raw: t[0] };
3112
+ }
3113
+ code(e) {
3114
+ let t = this.rules.block.code.exec(e);
3115
+ if (t) {
3116
+ let n = this.options.pedantic ? t[0] : pe(t[0]), s = n.replace(this.rules.other.codeRemoveIndent, "");
3117
+ return { type: "code", raw: n, codeBlockStyle: "indented", text: s };
3118
+ }
3119
+ }
3120
+ fences(e) {
3121
+ let t = this.rules.block.fences.exec(e);
3122
+ if (t) {
3123
+ let n = t[0], s = At(n, t[3] || "", this.rules);
3124
+ return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: s };
3125
+ }
3126
+ }
3127
+ heading(e) {
3128
+ let t = this.rules.block.heading.exec(e);
3129
+ if (t) {
3130
+ let n = t[2].trim();
3131
+ if (this.rules.other.endingHash.test(n)) {
3132
+ let s = z(n, "#");
3133
+ (this.options.pedantic || !s || this.rules.other.endingSpaceTabChar.test(s)) && (n = s.trim());
3134
+ }
3135
+ return { type: "heading", raw: z(t[0], `
3136
+ `), depth: t[1].length, text: n, tokens: this.lexer.inline(n) };
3137
+ }
3138
+ }
3139
+ hr(e) {
3140
+ let t = this.rules.block.hr.exec(e);
3141
+ if (t) return { type: "hr", raw: z(t[0], `
3142
+ `) };
3143
+ }
3144
+ blockquote(e) {
3145
+ let t = this.rules.block.blockquote.exec(e);
3146
+ if (t) {
3147
+ let n = z(t[0], `
3148
+ `).split(`
3149
+ `), s = "", r = "", o = [];
3150
+ for (; n.length > 0; ) {
3151
+ let i = false, l = [], u;
3152
+ for (u = 0; u < n.length; u++) if (this.rules.other.blockquoteStart.test(n[u])) l.push(n[u]), i = true;
3153
+ else if (!i) l.push(n[u]);
3154
+ else break;
3155
+ n = n.slice(u);
3156
+ let h = l.join(`
3157
+ `), p = h.replace(this.rules.other.blockquoteMarkerWhitespace, (k, b, x) => b + V(x, b.length)).replace(this.rules.other.blockquoteSetextReplace, `
3158
+ $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
3159
+ s = s ? `${s}
3160
+ ${h}` : h, r = r ? `${r}
3161
+ ${p}` : p;
3162
+ let d = this.lexer.state.top;
3163
+ if (this.lexer.state.top = true, this.lexer.blockTokens(p, o, true), this.lexer.state.top = d, n.length === 0) break;
3164
+ let g = o.at(-1);
3165
+ if (g?.type === "code" || g?.type === "heading" || g?.type === "hr" || g?.type === "html") break;
3166
+ if (g?.type === "blockquote") {
3167
+ let k = g, b = n.join(`
3168
+ `), x = k.raw + `
3169
+ ` + b.replace(this.rules.other.blockquoteSetextReplace2, ""), f = this.blockquote(x);
3170
+ o[o.length - 1] = f;
3171
+ let S = x.substring(f.raw.length).replace(/^\n/, ""), R = S ? S.split(`
3172
+ `).length : 0, C = R ? n.slice(0, -R) : n;
3173
+ C.length > 0 && (s = `${s}
3174
+ ${C.join(`
3175
+ `)}`), r = r.substring(0, r.length - k.text.length) + f.text;
3176
+ break;
3177
+ } else if (g?.type === "list") {
3178
+ let k = g, b = k.raw + `
3179
+ ` + n.join(`
3180
+ `), x = this.list(b);
3181
+ o[o.length - 1] = x;
3182
+ let f = x.raw.length > k.raw.length ? b.slice(k.raw.length + 1, x.raw.length).split(`
3183
+ `).length : 0;
3184
+ if (f > 0) {
3185
+ let S = n.slice(0, f).join(`
3186
+ `);
3187
+ s = `${s}
3188
+ ${S}`, r = `${r}
3189
+ ${S}`;
3190
+ }
3191
+ n = n.slice(f);
3192
+ continue;
3193
+ }
3194
+ }
3195
+ return { type: "blockquote", raw: s, tokens: o, text: r };
3196
+ }
3197
+ }
3198
+ list(e) {
3199
+ let t = this.rules.block.list.exec(e);
3200
+ if (t) {
3201
+ let n = e, s = () => n.length - e.length, r = t[1].trim(), o = r.length > 1, i = { type: "list", raw: "", ordered: o, start: o ? +r.slice(0, -1) : "", loose: false, items: [] };
3202
+ r = o ? `\\d{1,9}\\${r.slice(-1)}` : `\\${r}`, this.options.pedantic && (r = o ? r : "[*+-]");
3203
+ let l = this.rules.other.listItemRegex(r), u = false;
3204
+ for (; e; ) {
3205
+ let p = false, d = "";
3206
+ if (!(t = l.exec(e)) || this.rules.block.hr.test(e)) break;
3207
+ let g = s();
3208
+ e = e.substring(t[0].length);
3209
+ let k = t[2].split(`
3210
+ `, 1)[0], b = t[1].length, x = this.options.pedantic ? V(k, b) : k.replace(this.rules.other.leadingSpaceTab, (Q) => V(Q, b)), f = e.split(`
3211
+ `, 1)[0], S = !x.trim(), R = 0;
3212
+ if (this.options.pedantic ? (R = 2, d = x.trimStart()) : S ? R = b + 1 : (R = x.search(this.rules.other.nonSpaceChar), R = R > 4 ? 1 : R, d = x.slice(R), R += b), S && this.rules.other.blankLine.test(f) && (e = e.substring(f.length + 1), p = true), !p) {
3213
+ let Q = this.rules.other.nextBulletRegex(R), E = this.rules.other.hrRegex(R), j = this.rules.other.fencesBeginRegex(R), F = this.options.pedantic ? this.rules.other.pedanticHeadingBeginRegex(R) : this.rules.other.headingBeginRegex(R), Le = this.rules.other.htmlBeginRegex(R), Ae = this.rules.other.blockquoteBeginRegex(R);
3214
+ for (; e; ) {
3215
+ let he = e.split(`
3216
+ `, 1)[0], Z;
3217
+ if (f = he, this.options.pedantic ? (f = f.replace(this.rules.other.listReplaceNesting, " "), Z = f) : Z = f.replace(this.rules.other.leadingSpaceTab, (de) => V(de)), j.test(f) || F.test(f) || Le.test(f) || Ae.test(f) || Q.test(f) || E.test(f)) break;
3218
+ if (Z.search(this.rules.other.nonSpaceChar) >= R || !f.trim()) d += `
3219
+ ` + Z.slice(R);
3220
+ else {
3221
+ if (S || x.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || j.test(x) || F.test(x) || E.test(x)) break;
3222
+ let ze = !this.options.pedantic && /^ {0,3}(?:=+|-+) *$/.test(f) && this.rules.block.lheading.test(`${x}
3223
+ ${f}`) ? ` ${Z.replace(/^ {0,3}/, "")}` : f;
3224
+ d += `
3225
+ ` + ze;
3226
+ }
3227
+ S = !f.trim(), e = e.substring(he.length + 1), x = Z.slice(R);
3228
+ }
3229
+ }
3230
+ let C = n.slice(g, s());
3231
+ i.loose || (u ? i.loose = true : this.rules.other.doubleBlankLine.test(C) && (u = true)), i.items.push({ type: "list_item", raw: C, task: !!this.options.gfm && this.rules.other.listIsTask.test(d), loose: false, text: d, tokens: [] });
3232
+ }
3233
+ let h = i.items.at(-1);
3234
+ if (h) h.raw = h.raw.trimEnd(), h.text = h.text.trimEnd();
3235
+ else return;
3236
+ i.raw = n.slice(0, s()).trimEnd();
3237
+ for (let p of i.items) if (this.lexer.state.top = false, p.tokens = this.lexer.blockTokens(p.text, []), !i.loose) {
3238
+ let d = p.tokens.filter((k) => k.type === "space"), g = d.length > 0 && d.some((k) => this.rules.other.anyLine.test(k.raw));
3239
+ i.loose = g;
3240
+ }
3241
+ for (let p of i.items) {
3242
+ let d = p.tokens[0];
3243
+ if (p.task && (d?.type === "text" || d?.type === "paragraph")) {
3244
+ p.text = p.text.replace(this.rules.other.listReplaceTask, ""), d.raw = d.raw.replace(this.rules.other.listReplaceTask, ""), d.text = d.text.replace(this.rules.other.listReplaceTask, "");
3245
+ for (let k = this.lexer.inlineQueue.length - 1; k >= 0; k--) if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)) {
3246
+ this.lexer.inlineQueue[k].src = this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask, "");
3247
+ break;
3248
+ }
3249
+ let g = this.rules.other.listTaskCheckbox.exec(p.raw);
3250
+ if (g) {
3251
+ let k = { type: "checkbox", raw: g[0] + " ", checked: g[0] !== "[ ]" };
3252
+ p.checked = k.checked, i.loose ? p.tokens[0] && ["paragraph", "text"].includes(p.tokens[0].type) && "tokens" in p.tokens[0] && p.tokens[0].tokens ? (p.tokens[0].raw = k.raw + p.tokens[0].raw, p.tokens[0].text = k.raw + p.tokens[0].text, p.tokens[0].tokens.unshift(k)) : p.tokens.unshift({ type: "paragraph", raw: k.raw, text: k.raw, tokens: [k] }) : p.tokens.unshift(k);
3253
+ }
3254
+ } else p.task && (p.task = false);
3255
+ }
3256
+ if (i.loose) for (let p of i.items) {
3257
+ p.loose = true;
3258
+ for (let d of p.tokens) d.type === "text" && (d.type = "paragraph");
3259
+ }
3260
+ return i;
3261
+ }
3262
+ }
3263
+ html(e) {
3264
+ let t = this.rules.block.html.exec(e);
3265
+ if (t) {
3266
+ let n = pe(t[0]);
3267
+ return { type: "html", block: true, raw: n, pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: n };
3268
+ }
3269
+ }
3270
+ def(e) {
3271
+ let t = this.rules.block.def.exec(e);
3272
+ if (t) {
3273
+ if (!this.rules.other.startAngleBracket.test(t[2]) && ce(t[2], "()") !== -1) return;
3274
+ let n = N(t[1]).replace(this.rules.other.multipleSpaceGlobal, " "), s = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", r = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
3275
+ return { type: "def", tag: n, raw: z(t[0], `
3276
+ `), href: s, title: r };
3277
+ }
3278
+ }
3279
+ table(e) {
3280
+ let t = this.rules.block.table.exec(e);
3281
+ if (!t || !this.rules.other.tableDelimiter.test(t[2])) return;
3282
+ let n = ue(t[1]), s = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), r = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
3283
+ `) : [], o = { type: "table", raw: z(t[0], `
3284
+ `), header: [], align: [], rows: [] };
3285
+ if (n.length === s.length) {
3286
+ for (let i of s) this.rules.other.tableAlignRight.test(i) ? o.align.push("right") : this.rules.other.tableAlignCenter.test(i) ? o.align.push("center") : this.rules.other.tableAlignLeft.test(i) ? o.align.push("left") : o.align.push(null);
3287
+ for (let i = 0; i < n.length; i++) o.header.push({ text: n[i], tokens: this.lexer.inline(n[i]), header: true, align: o.align[i] });
3288
+ for (let i of r) o.rows.push(ue(i, o.header.length).map((l, u) => ({ text: l, tokens: this.lexer.inline(l), header: false, align: o.align[u] })));
3289
+ return o;
3290
+ }
3291
+ }
3292
+ lheading(e) {
3293
+ let t = this.rules.block.lheading.exec(e);
3294
+ if (t) {
3295
+ let n = t[1].trim();
3296
+ return { type: "heading", raw: z(t[0], `
3297
+ `), depth: t[2].charAt(0) === "=" ? 1 : 2, text: n, tokens: this.lexer.inline(n) };
3298
+ }
3299
+ }
3300
+ paragraph(e) {
3301
+ let t = this.rules.block.paragraph.exec(e);
3302
+ if (t) {
3303
+ let n = t[1].charAt(t[1].length - 1) === `
3304
+ ` ? t[1].slice(0, -1) : t[1];
3305
+ return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) };
3306
+ }
3307
+ }
3308
+ text(e) {
3309
+ let t = this.rules.block.text.exec(e);
3310
+ if (t) return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) };
3311
+ }
3312
+ escape(e) {
3313
+ let t = this.rules.inline.escape.exec(e);
3314
+ if (t) return { type: "escape", raw: t[0], text: t[1] };
3315
+ }
3316
+ tag(e) {
3317
+ let t = this.rules.inline.tag.exec(e);
3318
+ if (t) return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] };
3319
+ }
3320
+ link(e) {
3321
+ if (this.lexer.state.linkParenPossible === false) return;
3322
+ let t = this.rules.inline.link.exec(e);
3323
+ if (t) {
3324
+ let n = t[0].charAt(0) === "!" ? 2 : 1;
3325
+ if (!this.options.pedantic && $e(e, t[1], n, this.rules)) return;
3326
+ let s = t[2].trim();
3327
+ if (!this.options.pedantic && this.rules.other.startAngleBracket.test(s)) {
3328
+ if (!this.rules.other.endAngleBracket.test(s)) return;
3329
+ let i = z(s.slice(0, -1), "\\");
3330
+ if ((s.length - i.length) % 2 === 0) return;
3331
+ } else {
3332
+ let i = ce(t[2], "()");
3333
+ if (i === -2) return;
3334
+ if (i > -1) {
3335
+ let u = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + i;
3336
+ t[2] = t[2].substring(0, i), t[0] = t[0].substring(0, u).trim(), t[3] = "";
3337
+ }
3338
+ }
3339
+ let r = t[2], o = "";
3340
+ if (this.options.pedantic) {
3341
+ let i = this.rules.other.pedanticHrefTitle.exec(r);
3342
+ i && (r = i[1], o = i[3]);
3343
+ } else o = t[3] ? t[3].slice(1, -1) : "";
3344
+ return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(s) ? r = r.slice(1) : r = r.slice(1, -1)), _e(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: o && o.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
3345
+ }
3346
+ }
3347
+ reflink(e, t) {
3348
+ let n;
3349
+ if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) {
3350
+ let s = n[0].charAt(0) === "!" ? 2 : 1;
3351
+ if (!this.options.pedantic && $e(e, n[1], s, this.rules)) return;
3352
+ let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), o = t[N(r)];
3353
+ if (!o) {
3354
+ let i = n[0].charAt(0);
3355
+ return { type: "text", raw: i, text: i };
3356
+ }
3357
+ return _e(n, o, n[0], this.lexer, this.rules);
3358
+ }
3359
+ }
3360
+ emStrong(e, t, n = "") {
3361
+ let s = this.rules.inline.emStrongLDelim.exec(e);
3362
+ if (!s || !s[1] && !s[2] && !s[3] && !s[4]) return;
3363
+ let r = s[0][0], o = n === r, i = t.length - e.length, l = i;
3364
+ for (; !this.options.pedantic && l > 0 && t[l - 1] === r; ) l--;
3365
+ let u = [...t.slice(Math.max(0, l - 2), l)].at(-1) ?? "", h = u === "*" || u === "_" || !!this.rules.inline.punctuation.exec(u);
3366
+ l < i && (n = u);
3367
+ let p = l < i ? h : !!this.rules.inline.punctuation.exec(n);
3368
+ if (s[4] && n.match(this.rules.other.unicodeAlphaNumeric)) return;
3369
+ let d = s[1] || s[3] || "";
3370
+ if (!d || !n || p) {
3371
+ let g = [...s[0]].length - 1, k, b, x = g, f = 0, S = i - l + g, R = !this.options.pedantic && !!u.trim() && (!!d || r === "*" && !h), C = r === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
3372
+ for (C.lastIndex = 0, t = t.slice(-1 * e.length + g); (s = C.exec(t)) !== null; ) {
3373
+ if (k = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !k) continue;
3374
+ if (b = [...k].length, s[3] || s[4]) {
3375
+ x += b;
3376
+ continue;
3377
+ } else if (s[5] || s[6] || R) {
3378
+ if (o && (s[5] || s[6])) break;
3379
+ if (S % 3 && !((S + b) % 3)) {
3380
+ f += b;
3381
+ continue;
3382
+ }
3383
+ }
3384
+ if (x -= b, x > 0) continue;
3385
+ b = Math.min(b, b + x + f);
3386
+ let Q = [...s[0]][0].length, E = e.slice(0, g + s.index + Q + b);
3387
+ if (Math.min(g, b) % 2) {
3388
+ let F = E.slice(1, -1);
3389
+ return { type: "em", raw: E, text: F, tokens: this.lexer.inlineTokens(F) };
3390
+ }
3391
+ let j = E.slice(2, -2);
3392
+ return { type: "strong", raw: E, text: j, tokens: this.lexer.inlineTokens(j) };
3393
+ }
3394
+ }
3395
+ }
3396
+ codespan(e) {
3397
+ let t = this.rules.inline.code.exec(e);
3398
+ if (t) {
3399
+ let n = t[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);
3400
+ return s && r && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
3401
+ }
3402
+ }
3403
+ br(e) {
3404
+ let t = this.rules.inline.br.exec(e);
3405
+ if (t) return { type: "br", raw: t[0] };
3406
+ }
3407
+ del(e, t, n = "") {
3408
+ let s = this.rules.inline.delLDelim.exec(e);
3409
+ if (!s) return;
3410
+ if (!(s[1] || "") || !n || this.rules.inline.punctuation.exec(n)) {
3411
+ let o = [...s[0]].length - 1, i, l, u = o, h = this.rules.inline.delRDelim;
3412
+ for (h.lastIndex = 0, t = t.slice(-1 * e.length + o); (s = h.exec(t)) !== null; ) {
3413
+ if (i = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !i || (l = [...i].length, l !== o)) continue;
3414
+ if (s[3] || s[4]) {
3415
+ u += l;
3416
+ continue;
3417
+ }
3418
+ if (u -= l, u > 0) continue;
3419
+ l = Math.min(l, l + u);
3420
+ let p = [...s[0]][0].length, d = e.slice(0, o + s.index + p + l), g = d.slice(o, -o);
3421
+ return { type: "del", raw: d, text: g, tokens: this.lexer.inlineTokens(g) };
3422
+ }
3423
+ }
3424
+ }
3425
+ autolink(e) {
3426
+ let t = this.rules.inline.autolink.exec(e);
3427
+ if (t) {
3428
+ let n, s;
3429
+ return t[2] === "@" ? (n = t[1], s = "mailto:" + n) : (n = t[1], s = n), { type: "link", raw: t[0], text: n, href: s, autolink: true, tokens: [{ type: "text", raw: n, text: n }] };
3430
+ }
3431
+ }
3432
+ url(e) {
3433
+ let t;
3434
+ if (t = this.rules.inline.url.exec(e)) {
3435
+ let n, s;
3436
+ if (t[2] === "@") n = t[0], s = "mailto:" + n;
3437
+ else {
3438
+ let r;
3439
+ do
3440
+ r = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? "";
3441
+ while (r !== t[0]);
3442
+ n = t[0], t[1] === "www." ? s = "http://" + t[0] : s = t[0];
3443
+ }
3444
+ return { type: "link", raw: t[0], text: n, href: s, autolink: true, tokens: [{ type: "text", raw: n, text: n }] };
3445
+ }
3446
+ }
3447
+ inlineText(e) {
3448
+ let t = this.rules.inline.text.exec(e);
3449
+ if (t) {
3450
+ let n = this.lexer.state.inRawBlock;
3451
+ return { type: "text", raw: t[0], text: n ? t[0] : Se(t[0]), escaped: n };
3452
+ }
3453
+ }
3454
+ };
3455
+ var O = class a {
3456
+ tokens;
3457
+ options;
3458
+ state;
3459
+ inlineQueue;
3460
+ tokenizer;
3461
+ constructor(e) {
3462
+ this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || y, this.options.tokenizer = this.options.tokenizer || new _(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, linkEmitted: false, linkParenPossible: true, top: true };
3463
+ let t = { other: T, block: X.normal, inline: G.normal };
3464
+ this.options.pedantic ? (t.block = X.pedantic, t.inline = G.pedantic) : this.options.gfm && (t.block = X.gfm, this.options.breaks ? t.inline = G.breaks : t.inline = G.gfm), this.tokenizer.rules = t;
3465
+ }
3466
+ static get rules() {
3467
+ return { block: X, inline: G };
3468
+ }
3469
+ static lex(e, t) {
3470
+ return new a(t).lex(e);
3471
+ }
3472
+ static lexInline(e, t) {
3473
+ return new a(t).inlineTokens(e);
3474
+ }
3475
+ lex(e) {
3476
+ e = e.replace(T.carriageReturn, `
3477
+ `), this.blockTokens(e, this.tokens);
3478
+ for (let t = 0; t < this.inlineQueue.length; t++) {
3479
+ let n = this.inlineQueue[t];
3480
+ this.state.inRawBlock = false, this.inlineTokens(n.src, n.tokens);
3481
+ }
3482
+ return this.inlineQueue = [], this.tokens;
3483
+ }
3484
+ blockTokens(e, t = [], n = false) {
3485
+ this.tokenizer.lexer = this, this.options.pedantic && (e = e.replace(T.tabCharGlobal, " ").replace(T.spaceLine, ""));
3486
+ let s = 1 / 0;
3487
+ for (; e; ) {
3488
+ if (e.length < s) s = e.length;
3489
+ else {
3490
+ this.infiniteLoopError(e.charCodeAt(0));
3491
+ break;
3492
+ }
3493
+ let r;
3494
+ if (this.options.extensions?.block?.some((i) => (r = i.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false)) continue;
3495
+ if (r = this.tokenizer.space(e)) {
3496
+ e = e.substring(r.raw.length);
3497
+ let i = t.at(-1);
3498
+ r.raw.length === 1 && i !== void 0 ? i.raw += `
3499
+ ` : t.push(r);
3500
+ continue;
3501
+ }
3502
+ if (r = this.tokenizer.code(e)) {
3503
+ e = e.substring(r.raw.length);
3504
+ let i = t.at(-1);
3505
+ i?.type === "paragraph" || i?.type === "text" ? (i.raw += (i.raw.endsWith(`
3506
+ `) ? "" : `
3507
+ `) + r.raw, i.text += `
3508
+ ` + r.text, this.inlineQueue.at(-1).src = i.text) : t.push(r);
3509
+ continue;
3510
+ }
3511
+ if (r = this.tokenizer.fences(e)) {
3512
+ e = e.substring(r.raw.length), t.push(r);
3513
+ continue;
3514
+ }
3515
+ if (r = this.tokenizer.heading(e)) {
3516
+ e = e.substring(r.raw.length), t.push(r);
3517
+ continue;
3518
+ }
3519
+ if (r = this.tokenizer.hr(e)) {
3520
+ e = e.substring(r.raw.length), t.push(r);
3521
+ continue;
3522
+ }
3523
+ if (r = this.tokenizer.blockquote(e)) {
3524
+ e = e.substring(r.raw.length), t.push(r);
3525
+ continue;
3526
+ }
3527
+ if (r = this.tokenizer.list(e)) {
3528
+ e = e.substring(r.raw.length), t.push(r);
3529
+ continue;
3530
+ }
3531
+ if (r = this.tokenizer.html(e)) {
3532
+ e = e.substring(r.raw.length), t.push(r);
3533
+ continue;
3534
+ }
3535
+ if (r = this.tokenizer.def(e)) {
3536
+ e = e.substring(r.raw.length);
3537
+ let i = t.at(-1);
3538
+ i?.type === "paragraph" || i?.type === "text" ? (i.raw += (i.raw.endsWith(`
3539
+ `) ? "" : `
3540
+ `) + r.raw, i.text += `
3541
+ ` + r.raw, this.inlineQueue.at(-1).src = i.text) : (this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }), t.push(r));
3542
+ continue;
3543
+ }
3544
+ if (r = this.tokenizer.table(e)) {
3545
+ e = e.substring(r.raw.length), t.push(r);
3546
+ continue;
3547
+ }
3548
+ if (r = this.tokenizer.lheading(e)) {
3549
+ e = e.substring(r.raw.length), t.push(r);
3550
+ continue;
3551
+ }
3552
+ let o = e;
3553
+ if (this.options.extensions?.startBlock) {
3554
+ let i = 1 / 0, l = e.slice(1), u;
3555
+ this.options.extensions.startBlock.forEach((h) => {
3556
+ u = h.call({ lexer: this }, l), typeof u == "number" && u >= 0 && (i = Math.min(i, u));
3557
+ }), i < 1 / 0 && i >= 0 && (o = e.substring(0, i + 1));
3558
+ }
3559
+ if (this.state.top && (r = this.tokenizer.paragraph(o))) {
3560
+ let i = t.at(-1);
3561
+ n && i?.type === "paragraph" ? (i.raw += (i.raw.endsWith(`
3562
+ `) ? "" : `
3563
+ `) + r.raw, i.text += `
3564
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = i.text) : t.push(r), n = o.length !== e.length, e = e.substring(r.raw.length);
3565
+ continue;
3566
+ }
3567
+ if (r = this.tokenizer.text(e)) {
3568
+ e = e.substring(r.raw.length);
3569
+ let i = t.at(-1);
3570
+ i?.type === "text" ? (i.raw += (i.raw.endsWith(`
3571
+ `) ? "" : `
3572
+ `) + r.raw, i.text += `
3573
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = i.text) : t.push(r);
3574
+ continue;
3575
+ }
3576
+ if (e) {
3577
+ this.infiniteLoopError(e.charCodeAt(0));
3578
+ break;
3579
+ }
3580
+ }
3581
+ return this.state.top = true, t;
3582
+ }
3583
+ inline(e, t = []) {
3584
+ return this.inlineQueue.push({ src: e, tokens: t }), t;
3585
+ }
3586
+ linkInText(e) {
3587
+ if (!e.includes("[")) return false;
3588
+ let t = this.tokenizer.rules.inline.link;
3589
+ for (let n of e.matchAll(this.tokenizer.rules.inline.blockSkip)) if (t.test(n[0]) && e.charAt(n.index - 1) !== "!") return true;
3590
+ for (let n of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)) {
3591
+ let s = n[0], r = s.lastIndexOf("[");
3592
+ if (!(s.charAt(0) === "!" || !Object.hasOwn(this.tokens.links, N(s.slice(r + 1, -1)))) && !(r > 1 && this.linkInText(s.slice(1, r - 1)))) return true;
3593
+ }
3594
+ return false;
3595
+ }
3596
+ inlineTokens(e, t = []) {
3597
+ this.tokenizer.lexer = this;
3598
+ let n = this.state.linkParenPossible;
3599
+ this.state.linkParenPossible = n && e.includes(")");
3600
+ try {
3601
+ return this.#e(e, t);
3602
+ } finally {
3603
+ this.state.linkParenPossible = n;
3604
+ }
3605
+ }
3606
+ #e(e, t) {
3607
+ let n = e.includes("*") || e.includes("_") || e.includes("~") || this.options.hooks?.emStrongMask || this.tokenizer.emStrong !== _.prototype.emStrong || this.tokenizer.del !== _.prototype.del ? this.#t(e) : e, s = false, r = "", o = 1 / 0;
3608
+ for (; e; ) {
3609
+ if (e.length < o) o = e.length;
3610
+ else {
3611
+ this.infiniteLoopError(e.charCodeAt(0));
3612
+ break;
3613
+ }
3614
+ s || (r = ""), s = false;
3615
+ let i;
3616
+ if (this.options.extensions?.inline?.some((u) => (i = u.call({ lexer: this }, e, t)) ? (e = e.substring(i.raw.length), t.push(i), true) : false)) continue;
3617
+ if (i = this.tokenizer.escape(e)) {
3618
+ e = e.substring(i.raw.length), t.push(i);
3619
+ continue;
3620
+ }
3621
+ if (i = this.tokenizer.tag(e)) {
3622
+ e = e.substring(i.raw.length), t.push(i);
3623
+ continue;
3624
+ }
3625
+ if (i = this.tokenizer.link(e)) {
3626
+ e = e.substring(i.raw.length), t.push(i);
3627
+ continue;
3628
+ }
3629
+ if (i = this.tokenizer.reflink(e, this.tokens.links)) {
3630
+ e = e.substring(i.raw.length);
3631
+ let u = t.at(-1);
3632
+ i.type === "text" && u?.type === "text" ? (u.raw += i.raw, u.text += i.text) : t.push(i);
3633
+ continue;
3634
+ }
3635
+ if (i = this.tokenizer.emStrong(e, n, r)) {
3636
+ e = e.substring(i.raw.length), t.push(i);
3637
+ continue;
3638
+ }
3639
+ if (i = this.tokenizer.codespan(e)) {
3640
+ e = e.substring(i.raw.length), t.push(i);
3641
+ continue;
3642
+ }
3643
+ if (i = this.tokenizer.br(e)) {
3644
+ e = e.substring(i.raw.length), t.push(i);
3645
+ continue;
3646
+ }
3647
+ if (i = this.tokenizer.del(e, n, r)) {
3648
+ e = e.substring(i.raw.length), t.push(i);
3649
+ continue;
3650
+ }
3651
+ if (i = this.tokenizer.autolink(e)) {
3652
+ e = e.substring(i.raw.length), t.push(i);
3653
+ continue;
3654
+ }
3655
+ if (!this.state.inLink && (i = this.tokenizer.url(e))) {
3656
+ e = e.substring(i.raw.length), t.push(i);
3657
+ continue;
3658
+ }
3659
+ let l = e;
3660
+ if (this.options.extensions?.startInline) {
3661
+ let u = 1 / 0, h = e.slice(1), p;
3662
+ this.options.extensions.startInline.forEach((d) => {
3663
+ p = d.call({ lexer: this }, h), typeof p == "number" && p >= 0 && (u = Math.min(u, p));
3664
+ }), u < 1 / 0 && u >= 0 && (l = e.substring(0, u + 1));
3665
+ }
3666
+ if (i = this.tokenizer.inlineText(l)) {
3667
+ e = e.substring(i.raw.length), i.raw.slice(-1) !== "_" && (r = i.raw.slice(-1)), s = true;
3668
+ let u = t.at(-1);
3669
+ u?.type === "text" ? (u.raw += i.raw, u.text += i.text) : t.push(i);
3670
+ continue;
3671
+ }
3672
+ if (e) {
3673
+ this.infiniteLoopError(e.charCodeAt(0));
3674
+ break;
3675
+ }
3676
+ }
3677
+ return t;
3678
+ }
3679
+ #t(e) {
3680
+ let t = e;
3681
+ if (this.tokens.links && e.includes("[")) {
3682
+ let n = this.tokenizer.rules.inline.reflinkSearch, s = (r) => {
3683
+ let o = r.lastIndexOf("[");
3684
+ if (!Object.hasOwn(this.tokens.links, N(r.slice(o + 1, -1)))) return r;
3685
+ if (o > 1 && r.charAt(0) !== "!") {
3686
+ let i = r.slice(1, o - 1);
3687
+ if (this.linkInText(i)) return "[" + i.replace(n, s) + "][" + "a".repeat(r.length - o - 2) + "]";
3688
+ }
3689
+ return "[" + "a".repeat(r.length - 2) + "]";
3690
+ };
3691
+ t = t.replace(n, s);
3692
+ }
3693
+ return t = t.replace(this.tokenizer.rules.inline.anyPunctuationOutsideCode, (n, s, r) => r ? "+".repeat(n.length) : s ? s + n.slice(s.length, -s.length).replace(/`/g, "+") + s : n), t = t.replace(this.tokenizer.rules.inline.blockSkip, (n, s, r) => {
3694
+ let o = r ? r.length : 0;
3695
+ return n.slice(0, o) + "[" + "a".repeat(n.length - o - 2) + "]";
3696
+ }), t = this.options.hooks?.emStrongMask?.call({ lexer: this }, t) ?? t, t;
3697
+ }
3698
+ infiniteLoopError(e) {
3699
+ let t = "Infinite loop on byte: " + e;
3700
+ if (this.options.silent) console.error(t);
3701
+ else throw new Error(t);
3702
+ }
3703
+ };
3704
+ var L = class {
3705
+ options;
3706
+ parser;
3707
+ constructor(e) {
3708
+ this.options = e || y;
3709
+ }
3710
+ space(e) {
3711
+ return "";
3712
+ }
3713
+ code({ text: e, lang: t, escaped: n }) {
3714
+ let s = (t || "").match(T.notSpaceStart)?.[0], r = e ? e.replace(T.endingNewline, "") + `
3715
+ ` : "";
3716
+ return s ? '<pre><code class="language-' + P(s) + '">' + (n ? r : P(r, true)) + `</code></pre>
3717
+ ` : "<pre><code>" + (n ? r : P(r, true)) + `</code></pre>
3718
+ `;
3719
+ }
3720
+ blockquote({ tokens: e }) {
3721
+ return `<blockquote>
3722
+ ${this.parser.parse(e)}</blockquote>
3723
+ `;
3724
+ }
3725
+ html({ text: e }) {
3726
+ return e;
3727
+ }
3728
+ def(e) {
3729
+ return "";
3730
+ }
3731
+ heading({ tokens: e, depth: t }) {
3732
+ return `<h${t}>${this.parser.parseInline(e)}</h${t}>
3733
+ `;
3734
+ }
3735
+ hr(e) {
3736
+ return `<hr>
3737
+ `;
3738
+ }
3739
+ list(e) {
3740
+ let t = e.ordered, n = e.start, s = "";
3741
+ for (let i = 0; i < e.items.length; i++) {
3742
+ let l = e.items[i];
3743
+ s += this.listitem(l);
3744
+ }
3745
+ let r = t ? "ol" : "ul", o = t && n !== 1 ? ' start="' + n + '"' : "";
3746
+ return "<" + r + o + `>
3747
+ ` + s + "</" + r + `>
3748
+ `;
3749
+ }
3750
+ listitem(e) {
3751
+ return `<li>${this.parser.parse(e.tokens)}</li>
3752
+ `;
3753
+ }
3754
+ checkbox({ checked: e }) {
3755
+ return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"> ';
3756
+ }
3757
+ paragraph({ tokens: e }) {
3758
+ return `<p>${this.parser.parseInline(e)}</p>
3759
+ `;
3760
+ }
3761
+ table(e) {
3762
+ let t = "", n = "";
3763
+ for (let r = 0; r < e.header.length; r++) n += this.tablecell(e.header[r]);
3764
+ t += this.tablerow({ text: n });
3765
+ let s = "";
3766
+ for (let r = 0; r < e.rows.length; r++) {
3767
+ let o = e.rows[r];
3768
+ n = "";
3769
+ for (let i = 0; i < o.length; i++) n += this.tablecell(o[i]);
3770
+ s += this.tablerow({ text: n });
3771
+ }
3772
+ return s && (s = `<tbody>${s}</tbody>`), `<table>
3773
+ <thead>
3774
+ ` + t + `</thead>
3775
+ ` + s + `</table>
3776
+ `;
3777
+ }
3778
+ tablerow({ text: e }) {
3779
+ return `<tr>
3780
+ ${e}</tr>
3781
+ `;
3782
+ }
3783
+ tablecell(e) {
3784
+ let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td";
3785
+ return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + `</${n}>
3786
+ `;
3787
+ }
3788
+ strong({ tokens: e }) {
3789
+ return `<strong>${this.parser.parseInline(e)}</strong>`;
3790
+ }
3791
+ em({ tokens: e }) {
3792
+ return `<em>${this.parser.parseInline(e)}</em>`;
3793
+ }
3794
+ codespan({ text: e }) {
3795
+ return `<code>${P(e, true)}</code>`;
3796
+ }
3797
+ br(e) {
3798
+ return "<br>";
3799
+ }
3800
+ del({ tokens: e }) {
3801
+ return `<del>${this.parser.parseInline(e)}</del>`;
3802
+ }
3803
+ link({ href: e, title: t, text: n, tokens: s, autolink: r }) {
3804
+ let o = r ? P(n, true) : this.parser.parseInline(s), i = le(e);
3805
+ if (i === null) return o;
3806
+ e = P(i, r);
3807
+ let l = '<a href="' + e + '"';
3808
+ return t && (l += ' title="' + P(t) + '"'), l += ">" + o + "</a>", l;
3809
+ }
3810
+ image({ href: e, title: t, text: n, tokens: s }) {
3811
+ s && (n = this.parser.parseInline(s, this.parser.textRenderer));
3812
+ let r = le(e);
3813
+ if (r === null) return P(n);
3814
+ e = r;
3815
+ let o = `<img src="${P(e)}" alt="${P(n)}"`;
3816
+ return t && (o += ` title="${P(t)}"`), o += ">", o;
3817
+ }
3818
+ text(e) {
3819
+ return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : "escaped" in e && e.escaped ? e.text : P(e.text);
3820
+ }
3821
+ };
3822
+ var M = class {
3823
+ parser;
3824
+ strong({ text: e, tokens: t }) {
3825
+ return t ? this.parser.parseInline(t, this) : e;
3826
+ }
3827
+ em({ text: e, tokens: t }) {
3828
+ return t ? this.parser.parseInline(t, this) : e;
3829
+ }
3830
+ codespan({ text: e }) {
3831
+ return e;
3832
+ }
3833
+ del({ text: e, tokens: t }) {
3834
+ return t ? this.parser.parseInline(t, this) : e;
3835
+ }
3836
+ html({ text: e }) {
3837
+ return e;
3838
+ }
3839
+ text({ text: e }) {
3840
+ return e;
3841
+ }
3842
+ link({ text: e, tokens: t }) {
3843
+ return t ? this.parser.parseInline(t, this) : e;
3844
+ }
3845
+ image({ text: e, tokens: t }) {
3846
+ return t ? this.parser.parseInline(t, this) : e;
3847
+ }
3848
+ br() {
3849
+ return "";
3850
+ }
3851
+ checkbox({ raw: e }) {
3852
+ return e;
3853
+ }
3854
+ };
3855
+ var w = class a2 {
3856
+ options;
3857
+ renderer;
3858
+ textRenderer;
3859
+ constructor(e) {
3860
+ this.options = e || y, this.options.renderer = this.options.renderer || new L(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new M(), this.textRenderer.parser = this;
3861
+ }
3862
+ static parse(e, t) {
3863
+ return new a2(t).parse(e);
3864
+ }
3865
+ static parseInline(e, t) {
3866
+ return new a2(t).parseInline(e);
3867
+ }
3868
+ parse(e) {
3869
+ this.renderer.parser = this;
3870
+ let t = "";
3871
+ for (let n = 0; n < e.length; n++) {
3872
+ let s = e[n];
3873
+ if (this.options.extensions?.renderers?.[s.type]) {
3874
+ let o = s, i = this.options.extensions.renderers[o.type].call({ parser: this }, o);
3875
+ if (i !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "checkbox", "html", "def", "paragraph", "text"].includes(o.type)) {
3876
+ t += i || "";
3877
+ continue;
3878
+ }
3879
+ }
3880
+ let r = s;
3881
+ switch (r.type) {
3882
+ case "space": {
3883
+ t += this.renderer.space(r);
3884
+ break;
3885
+ }
3886
+ case "hr": {
3887
+ t += this.renderer.hr(r);
3888
+ break;
3889
+ }
3890
+ case "heading": {
3891
+ t += this.renderer.heading(r);
3892
+ break;
3893
+ }
3894
+ case "code": {
3895
+ t += this.renderer.code(r);
3896
+ break;
3897
+ }
3898
+ case "table": {
3899
+ t += this.renderer.table(r);
3900
+ break;
3901
+ }
3902
+ case "blockquote": {
3903
+ t += this.renderer.blockquote(r);
3904
+ break;
3905
+ }
3906
+ case "list": {
3907
+ t += this.renderer.list(r);
3908
+ break;
3909
+ }
3910
+ case "checkbox": {
3911
+ t += this.renderer.checkbox(r);
3912
+ break;
3913
+ }
3914
+ case "html": {
3915
+ t += this.renderer.html(r);
3916
+ break;
3917
+ }
3918
+ case "def": {
3919
+ t += this.renderer.def(r);
3920
+ break;
3921
+ }
3922
+ case "paragraph": {
3923
+ t += this.renderer.paragraph(r);
3924
+ break;
3925
+ }
3926
+ case "text": {
3927
+ t += this.renderer.text(r);
3928
+ break;
3929
+ }
3930
+ default: {
3931
+ let o = 'Token with "' + r.type + '" type was not found.';
3932
+ if (this.options.silent) return console.error(o), "";
3933
+ throw new Error(o);
3934
+ }
3935
+ }
3936
+ }
3937
+ return t;
3938
+ }
3939
+ parseInline(e, t = this.renderer) {
3940
+ this.renderer.parser = this;
3941
+ let n = "";
3942
+ for (let s = 0; s < e.length; s++) {
3943
+ let r = e[s];
3944
+ if (this.options.extensions?.renderers?.[r.type]) {
3945
+ let i = this.options.extensions.renderers[r.type].call({ parser: this }, r);
3946
+ if (i !== false || !["escape", "html", "link", "image", "checkbox", "strong", "em", "codespan", "br", "del", "text"].includes(r.type)) {
3947
+ n += i || "";
3948
+ continue;
3949
+ }
3950
+ }
3951
+ let o = r;
3952
+ switch (o.type) {
3953
+ case "escape": {
3954
+ n += t.text(o);
3955
+ break;
3956
+ }
3957
+ case "html": {
3958
+ n += t.html(o);
3959
+ break;
3960
+ }
3961
+ case "link": {
3962
+ n += t.link(o);
3963
+ break;
3964
+ }
3965
+ case "image": {
3966
+ n += t.image(o);
3967
+ break;
3968
+ }
3969
+ case "checkbox": {
3970
+ n += t.checkbox(o);
3971
+ break;
3972
+ }
3973
+ case "strong": {
3974
+ n += t.strong(o);
3975
+ break;
3976
+ }
3977
+ case "em": {
3978
+ n += t.em(o);
3979
+ break;
3980
+ }
3981
+ case "codespan": {
3982
+ n += t.codespan(o);
3983
+ break;
3984
+ }
3985
+ case "br": {
3986
+ n += t.br(o);
3987
+ break;
3988
+ }
3989
+ case "del": {
3990
+ n += t.del(o);
3991
+ break;
3992
+ }
3993
+ case "text": {
3994
+ n += t.text(o);
3995
+ break;
3996
+ }
3997
+ default: {
3998
+ let i = 'Token with "' + o.type + '" type was not found.';
3999
+ if (this.options.silent) return console.error(i), "";
4000
+ throw new Error(i);
4001
+ }
4002
+ }
4003
+ }
4004
+ return n;
4005
+ }
4006
+ };
4007
+ var A = class {
4008
+ options;
4009
+ block;
4010
+ constructor(e) {
4011
+ this.options = e || y;
4012
+ }
4013
+ static passThroughHooks = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
4014
+ static passThroughHooksRespectAsync = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens"]);
4015
+ preprocess(e) {
4016
+ return e;
4017
+ }
4018
+ postprocess(e) {
4019
+ return e;
4020
+ }
4021
+ processAllTokens(e) {
4022
+ return e;
4023
+ }
4024
+ emStrongMask(e) {
4025
+ return e;
4026
+ }
4027
+ provideLexer(e = this.block) {
4028
+ return e ? O.lex : O.lexInline;
4029
+ }
4030
+ provideParser(e = this.block) {
4031
+ return e ? w.parse : w.parseInline;
4032
+ }
4033
+ };
4034
+ function D(a3, e) {
4035
+ if (Array.isArray(e)) for (let t = 0; t < e.length; t++) a3.push(e[t]);
4036
+ else a3.push(e);
4037
+ }
4038
+ var J = class {
4039
+ defaults = v();
4040
+ options = this.setOptions;
4041
+ parse = this.parseMarkdown(true);
4042
+ parseInline = this.parseMarkdown(false);
4043
+ Parser = w;
4044
+ Renderer = L;
4045
+ TextRenderer = M;
4046
+ Lexer = O;
4047
+ Tokenizer = _;
4048
+ Hooks = A;
4049
+ constructor(...e) {
4050
+ this.use(...e);
4051
+ }
4052
+ walkTokens(e, t) {
4053
+ let n = [];
4054
+ for (let s of e) switch (D(n, t.call(this, s)), s.type) {
4055
+ case "table": {
4056
+ let r = s;
4057
+ for (let o of r.header) D(n, this.walkTokens(o.tokens, t));
4058
+ for (let o of r.rows) for (let i of o) D(n, this.walkTokens(i.tokens, t));
4059
+ break;
4060
+ }
4061
+ case "list": {
4062
+ let r = s;
4063
+ D(n, this.walkTokens(r.items, t));
4064
+ break;
4065
+ }
4066
+ default: {
4067
+ let r = s;
4068
+ this.defaults.extensions?.childTokens?.[r.type] ? this.defaults.extensions.childTokens[r.type].forEach((o) => {
4069
+ let i = r[o].flat(1 / 0);
4070
+ D(n, this.walkTokens(i, t));
4071
+ }) : r.tokens && D(n, this.walkTokens(r.tokens, t));
4072
+ }
4073
+ }
4074
+ return n;
4075
+ }
4076
+ use(...e) {
4077
+ let t = this.defaults.extensions || { renderers: {}, childTokens: {} };
4078
+ return e.forEach((n) => {
4079
+ let s = { ...n };
4080
+ if (s.async = this.defaults.async || s.async || false, n.extensions && (n.extensions.forEach((r) => {
4081
+ if (!r.name) throw new Error("extension name required");
4082
+ if ("renderer" in r) {
4083
+ let o = t.renderers[r.name];
4084
+ o ? t.renderers[r.name] = function(...i) {
4085
+ let l = r.renderer.apply(this, i);
4086
+ return l === false && (l = o.apply(this, i)), l;
4087
+ } : t.renderers[r.name] = r.renderer;
4088
+ }
4089
+ if ("tokenizer" in r) {
4090
+ if (!r.level || r.level !== "block" && r.level !== "inline") throw new Error("extension level must be 'block' or 'inline'");
4091
+ let o = t[r.level];
4092
+ o ? o.unshift(r.tokenizer) : t[r.level] = [r.tokenizer], r.start && (r.level === "block" ? t.startBlock ? t.startBlock.push(r.start) : t.startBlock = [r.start] : r.level === "inline" && (t.startInline ? t.startInline.push(r.start) : t.startInline = [r.start]));
4093
+ }
4094
+ "childTokens" in r && r.childTokens && (t.childTokens[r.name] = r.childTokens);
4095
+ }), s.extensions = t), n.renderer) {
4096
+ let r = this.defaults.renderer || new L(this.defaults);
4097
+ for (let o in n.renderer) {
4098
+ if (!(o in r)) throw new Error(`renderer '${o}' does not exist`);
4099
+ if (["options", "parser"].includes(o)) continue;
4100
+ let i = o, l = n.renderer[i], u = r[i];
4101
+ r[i] = (...h) => {
4102
+ let p = l.apply(r, h);
4103
+ return p === false && (p = u.apply(r, h)), p || "";
4104
+ };
4105
+ }
4106
+ s.renderer = r;
4107
+ }
4108
+ if (n.tokenizer) {
4109
+ let r = this.defaults.tokenizer || new _(this.defaults);
4110
+ for (let o in n.tokenizer) {
4111
+ if (!(o in r)) throw new Error(`tokenizer '${o}' does not exist`);
4112
+ if (["options", "rules", "lexer"].includes(o)) continue;
4113
+ let i = o, l = n.tokenizer[i], u = r[i];
4114
+ r[i] = (...h) => {
4115
+ let p = l.apply(r, h);
4116
+ return p === false && (p = u.apply(r, h)), p;
4117
+ };
4118
+ }
4119
+ s.tokenizer = r;
4120
+ }
4121
+ if (n.hooks) {
4122
+ let r = this.defaults.hooks || new A();
4123
+ for (let o in n.hooks) {
4124
+ if (!(o in r)) throw new Error(`hook '${o}' does not exist`);
4125
+ if (["options", "block"].includes(o)) continue;
4126
+ let i = o, l = n.hooks[i], u = r[i];
4127
+ A.passThroughHooks.has(o) ? r[i] = (h) => {
4128
+ if (r.options.async && A.passThroughHooksRespectAsync.has(o)) return (async () => {
4129
+ let d = await l.call(r, h);
4130
+ return u.call(r, d);
4131
+ })();
4132
+ let p = l.call(r, h);
4133
+ return u.call(r, p);
4134
+ } : r[i] = (...h) => {
4135
+ if (r.options.async) return (async () => {
4136
+ let d = await l.apply(r, h);
4137
+ return d === false && (d = await u.apply(r, h)), d;
4138
+ })();
4139
+ let p = l.apply(r, h);
4140
+ return p === false && (p = u.apply(r, h)), p;
4141
+ };
4142
+ }
4143
+ s.hooks = r;
4144
+ }
4145
+ if (n.walkTokens) {
4146
+ let r = this.defaults.walkTokens, o = n.walkTokens;
4147
+ s.walkTokens = function(i) {
4148
+ let l = [];
4149
+ return l.push(o.call(this, i)), r && D(l, r.call(this, i)), l;
4150
+ };
4151
+ }
4152
+ this.defaults = { ...this.defaults, ...s };
4153
+ }), this;
4154
+ }
4155
+ setOptions(e) {
4156
+ return this.defaults = { ...this.defaults, ...e }, this;
4157
+ }
4158
+ lexer(e, t) {
4159
+ return O.lex(e, t ?? this.defaults);
4160
+ }
4161
+ parser(e, t) {
4162
+ return w.parse(e, t ?? this.defaults);
4163
+ }
4164
+ parseMarkdown(e) {
4165
+ return (n, s) => {
4166
+ let r = { ...s }, o = { ...this.defaults, ...r }, i = this.onError(!!o.silent, !!o.async);
4167
+ if (this.defaults.async === true && r.async === false) 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."));
4168
+ if (typeof n > "u" || n === null) return i(new Error("marked(): input parameter is undefined or null"));
4169
+ if (typeof n != "string") return i(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
4170
+ if (o.hooks && (o.hooks.options = o, o.hooks.block = e), o.async) return (async () => {
4171
+ let l = o.hooks ? await o.hooks.preprocess(n) : n, h = await (o.hooks ? await o.hooks.provideLexer(e) : e ? O.lex : O.lexInline)(l, o), p = o.hooks ? await o.hooks.processAllTokens(h) : h;
4172
+ o.walkTokens && await Promise.all(this.walkTokens(p, o.walkTokens));
4173
+ let g = await (o.hooks ? await o.hooks.provideParser(e) : e ? w.parse : w.parseInline)(p, o);
4174
+ return o.hooks ? await o.hooks.postprocess(g) : g;
4175
+ })().catch(i);
4176
+ try {
4177
+ o.hooks && (n = o.hooks.preprocess(n));
4178
+ let u = (o.hooks ? o.hooks.provideLexer(e) : e ? O.lex : O.lexInline)(n, o);
4179
+ o.hooks && (u = o.hooks.processAllTokens(u)), o.walkTokens && this.walkTokens(u, o.walkTokens);
4180
+ let p = (o.hooks ? o.hooks.provideParser(e) : e ? w.parse : w.parseInline)(u, o);
4181
+ return o.hooks && (p = o.hooks.postprocess(p)), p;
4182
+ } catch (l) {
4183
+ return i(l);
4184
+ }
4185
+ };
4186
+ }
4187
+ onError(e, t) {
4188
+ return (n) => {
4189
+ if (n.message += `
4190
+ Please report this to https://github.com/markedjs/marked.`, e) {
4191
+ let s = "<p>An error occurred:</p><pre>" + P(n.message + "", true) + "</pre>";
4192
+ return t ? Promise.resolve(s) : s;
4193
+ }
4194
+ if (t) return Promise.reject(n);
4195
+ throw n;
4196
+ };
4197
+ }
4198
+ };
4199
+ var q = new J();
4200
+ function m(a3, e) {
4201
+ return q.parse(a3, e);
4202
+ }
4203
+ m.options = m.setOptions = function(a3) {
4204
+ return q.setOptions(a3), m.defaults = q.defaults, ee(m.defaults), m;
4205
+ };
4206
+ m.getDefaults = v;
4207
+ m.defaults = y;
4208
+ function zt(...a3) {
4209
+ return q.use(...a3), m.defaults = q.defaults, ee(m.defaults), m;
4210
+ }
4211
+ m.use = zt;
4212
+ m.walkTokens = function(a3, e) {
4213
+ return q.walkTokens(a3, e);
4214
+ };
4215
+ m.parseInline = q.parseInline;
4216
+ m.Parser = w;
4217
+ m.parser = w.parse;
4218
+ m.Renderer = L;
4219
+ m.TextRenderer = M;
4220
+ m.Lexer = O;
4221
+ m.lexer = O.lex;
4222
+ m.Tokenizer = _;
4223
+ m.Hooks = A;
4224
+ m.parse = m;
4225
+ var Tn = m.options;
4226
+ var On = m.setOptions;
4227
+ var wn = m.walkTokens;
4228
+ var Pn = m.parseInline;
4229
+ var Sn = w.parse;
4230
+ var _n = O.lex;
4231
+
816
4232
  // src/client/views/IssueDetail.tsx
817
4233
  var import_jsx_runtime6 = require("react/jsx-runtime");
818
4234
  var ISSUE_DETAIL_CSS = `
819
- .ghx-pane{display:flex;flex-direction:column;gap:12px;box-sizing:border-box;flex:0 0 380px;width:380px;min-width:0;padding-left:20px;border-left:0.5px solid var(--dsw-alias-border-l2)}
4235
+ .ghx-pane{display:flex;flex-direction:column;gap:12px;box-sizing:border-box;flex:0 0 420px;width:420px;min-width:0;padding-left:20px;border-left:0.5px solid var(--dsw-alias-border-l2)}
820
4236
  .ghx-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:0}
821
4237
  .ghx-ref{font-family:var(--dsh-font-family-code,ui-monospace,SFMono-Regular,Menlo,monospace);font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
822
4238
  .ghx-ref:hover{color:var(--dsw-alias-link);text-decoration:underline}
@@ -837,7 +4253,32 @@ var ISSUE_DETAIL_CSS = `
837
4253
  .ghx-session-title{font-size:12px;line-height:16px;color:var(--dsw-alias-label-primary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
838
4254
  .ghx-session-ws{font-size:11px;line-height:15px;color:var(--dsw-alias-label-tertiary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
839
4255
  .ghx-session-missing{font-size:11px;color:var(--dsw-alias-label-tertiary);flex:none}
840
- .ghx-body{margin:0;max-height:320px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;box-sizing:border-box;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md,8px);background:var(--dsw-alias-bg-layer-1);font-family:inherit;font-size:var(--dsh-content-font-size-secondary,13px);line-height:20px;color:var(--dsw-alias-label-primary)}
4256
+ .ghx-markdown{font-size:var(--dsh-content-font-size-secondary,13px);line-height:20px;color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}
4257
+ .ghx-markdown>:first-child{margin-top:0}
4258
+ .ghx-markdown>:last-child{margin-bottom:0}
4259
+ .ghx-markdown p{margin:0 0 8px}
4260
+ .ghx-markdown h1,.ghx-markdown h2,.ghx-markdown h3,.ghx-markdown h4,.ghx-markdown h5,.ghx-markdown h6{margin:14px 0 6px;line-height:1.35;font-weight:600}
4261
+ .ghx-markdown h1{font-size:18px}
4262
+ .ghx-markdown h2{font-size:16px}
4263
+ .ghx-markdown h3{font-size:14px}
4264
+ .ghx-markdown h4,.ghx-markdown h5,.ghx-markdown h6{font-size:13px}
4265
+ .ghx-markdown ul,.ghx-markdown ol{margin:0 0 8px;padding-left:20px}
4266
+ .ghx-markdown li{margin:2px 0}
4267
+ .ghx-markdown li>p{margin:0}
4268
+ .ghx-markdown code{font-family:var(--dsh-font-family-code,ui-monospace,SFMono-Regular,Menlo,monospace);font-size:12px;padding:1px 4px;border-radius:var(--dsw-radius-xs,4px);background:var(--dsw-alias-bg-layer-2)}
4269
+ .ghx-markdown pre{margin:0 0 10px;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md,8px);background:var(--dsw-alias-bg-layer-1);overflow:auto}
4270
+ .ghx-markdown pre code{padding:0;background:transparent;font-size:12px;line-height:18px;white-space:pre}
4271
+ .ghx-markdown blockquote{margin:0 0 10px;padding:2px 0 2px 12px;border-left:2px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-secondary)}
4272
+ .ghx-markdown blockquote>*:last-child{margin-bottom:0}
4273
+ .ghx-markdown a{color:var(--dsw-alias-link);text-decoration:none}
4274
+ .ghx-markdown a:hover{text-decoration:underline}
4275
+ .ghx-markdown img{max-width:100%;height:auto;border-radius:var(--dsw-radius-sm,6px)}
4276
+ .ghx-markdown hr{border:0;border-top:0.5px solid var(--dsw-alias-border-l2);margin:12px 0}
4277
+ .ghx-markdown table{border-collapse:collapse;margin:0 0 10px;font-size:12px}
4278
+ .ghx-markdown th,.ghx-markdown td{border:0.5px solid var(--dsw-alias-border-l2);padding:4px 8px;text-align:left}
4279
+ .ghx-markdown th{background:var(--dsw-alias-bg-layer-1);font-weight:600}
4280
+ .ghx-markdown input[type=checkbox]{margin:0 4px 0 0;vertical-align:middle}
4281
+ .ghx-markdown-loading{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}
841
4282
  .ghx-section{display:flex;flex-direction:column;gap:6px}
842
4283
  .ghx-section-title{margin:0;font-size:12px;line-height:18px;font-weight:500;color:var(--dsw-alias-label-tertiary);text-transform:uppercase;letter-spacing:.02em}
843
4284
  .ghx-muted{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}
@@ -912,7 +4353,8 @@ function IssueDetailPane({ snapshot, actions, t, resolveSession }) {
912
4353
  const detailFailed = detail === void 0 && !snapshot.detailLoading && error !== void 0;
913
4354
  const showHint = detail === void 0 && !snapshot.detailLoading && error === void 0;
914
4355
  const tone = stateTone(card.state, card.stateReason);
915
- const body = detail?.body !== void 0 && detail.body !== "" ? detail.body : detail?.bodyExcerpt;
4356
+ const body = detail?.body ?? "";
4357
+ const bodyHtml = body === "" ? "" : renderMarkdown(body);
916
4358
  const sessionLinks = card.sessionLinks ?? [];
917
4359
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("aside", { className: "ghx-pane", "aria-label": t("panel.detail"), children: [
918
4360
  /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "ghx-head", children: [
@@ -1010,7 +4452,7 @@ function IssueDetailPane({ snapshot, actions, t, resolveSession }) {
1010
4452
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "ghx-skeleton-line", style: { width: "92%" } }),
1011
4453
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "ghx-skeleton-line", style: { width: "78%" } }),
1012
4454
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "ghx-skeleton-line", style: { width: "60%" } })
1013
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("pre", { className: "ghx-body", style: { whiteSpace: "pre-wrap" }, children: body === void 0 || body === "" ? t("panel.noBody") : body }),
4455
+ ] }) : bodyHtml === "" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "ghx-markdown-loading", children: t("panel.noBody") }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "ghx-markdown", dangerouslySetInnerHTML: { __html: bodyHtml } }),
1014
4456
  /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: "ghx-section", children: [
1015
4457
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { className: "ghx-section-title", children: t("panel.milestone") }),
1016
4458
  detail.milestone === void 0 ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "ghx-muted", children: t("panel.noMilestone") }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
@@ -1052,6 +4494,22 @@ function IssueDetailPane({ snapshot, actions, t, resolveSession }) {
1052
4494
  ] })
1053
4495
  ] });
1054
4496
  }
4497
+ m.use({ gfm: true, breaks: true });
4498
+ var linkHookInstalled = false;
4499
+ function renderMarkdown(markdown) {
4500
+ const parsed = m.parse(markdown, { async: false });
4501
+ const purify = purify_default;
4502
+ if (typeof purify.sanitize !== "function") return parsed;
4503
+ if (!linkHookInstalled && typeof purify.addHook === "function") {
4504
+ linkHookInstalled = true;
4505
+ purify.addHook("afterSanitizeAttributes", (node) => {
4506
+ if (node.tagName !== "A") return;
4507
+ node.setAttribute("target", "_blank");
4508
+ node.setAttribute("rel", "noreferrer noopener");
4509
+ });
4510
+ }
4511
+ return purify.sanitize(parsed, { ADD_ATTR: ["target"] });
4512
+ }
1055
4513
 
1056
4514
  // src/client/views/IssueRow.tsx
1057
4515
  var import_jsx_runtime7 = require("react/jsx-runtime");
@@ -1266,7 +4724,7 @@ var PAGE_CSS = `
1266
4724
  .ghp-panel .ghp-body{display:flex;flex:1;min-height:0;margin-top:0}
1267
4725
  .ghp-panel .ghp-split{flex:1;min-height:0;width:100%;align-items:stretch}
1268
4726
  .ghp-panel .ghp-list-pane{flex:1;min-width:0;overflow:auto;overscroll-behavior:contain;padding-bottom:32px}
1269
- .ghp-panel .ghx-pane{flex:0 0 380px;box-sizing:border-box;width:380px;max-height:100%;min-height:0;overflow:auto;overscroll-behavior:contain;padding-bottom:32px}
4727
+ .ghp-panel .ghx-pane{flex:0 0 420px;box-sizing:border-box;width:420px;max-height:100%;min-height:0;overflow:auto;overscroll-behavior:contain;padding-bottom:32px}
1270
4728
  .ghp-panel .ghp-scope{grid-template-columns:minmax(0,1.05fr) minmax(0,1.55fr) minmax(0,1.55fr) minmax(0,1fr) minmax(0,.8fr);gap:10px;margin-top:14px}
1271
4729
  @media (max-width:860px){.ghp-panel .ghp-scope{grid-template-columns:repeat(auto-fit,minmax(124px,1fr))}}
1272
4730
  .ghp-panel .ghp-filters{margin:12px 0 6px}
@@ -1866,8 +5324,8 @@ function PendingOverlayHost({ store, t, sessionId, useInput, inputActions }) {
1866
5324
  }, [snapshot.pendingHandoff, snapshot.pendingHandoffSession, inputActions, sessionId, store]);
1867
5325
  (0, import_react5.useEffect)(() => {
1868
5326
  if (pending === void 0 || input === void 0 || sessionId === void 0) return;
1869
- const text = input.draft;
1870
- if (text.includes(marker)) {
5327
+ const text2 = input.draft;
5328
+ if (text2.includes(marker)) {
1871
5329
  markerSeen.current = true;
1872
5330
  if (input.phase !== "plain") submitSeen.current = true;
1873
5331
  }
@@ -1879,14 +5337,14 @@ function PendingOverlayHost({ store, t, sessionId, useInput, inputActions }) {
1879
5337
  sending.current = false;
1880
5338
  return;
1881
5339
  }
1882
- if (text === "") {
5340
+ if (text2 === "") {
1883
5341
  setPending(void 0);
1884
5342
  markerSeen.current = false;
1885
5343
  submitSeen.current = false;
1886
5344
  sending.current = false;
1887
5345
  return;
1888
5346
  }
1889
- if (markerSeen.current && !text.includes(marker)) {
5347
+ if (markerSeen.current && !text2.includes(marker)) {
1890
5348
  setPending(void 0);
1891
5349
  markerSeen.current = false;
1892
5350
  submitSeen.current = false;
@@ -2372,6 +5830,7 @@ var REMOTE_METHODS = [
2372
5830
  { method: "orgRepos", parameters: [{ wire: "org" }] },
2373
5831
  { method: "listIssues", parameters: [{ wire: "request" }] },
2374
5832
  { method: "repoMilestones", parameters: [{ wire: "repo" }] },
5833
+ { method: "linkedCards", parameters: [{ wire: "groups" }] },
2375
5834
  { method: "issueDetail", parameters: [{ wire: "repo" }, { wire: "number" }] },
2376
5835
  { method: "issueMentionedPRs", parameters: [{ wire: "repo" }, { wire: "number" }] },
2377
5836
  { method: "loadPrefs", parameters: [] },
@@ -2483,6 +5942,19 @@ function asPanelError(error) {
2483
5942
  }
2484
5943
  return { message: error instanceof Error ? error.message : String(error) };
2485
5944
  }
5945
+ function applyPrefsPatchLocally(current, patch) {
5946
+ const next = { ...current };
5947
+ if ("org" in patch) next.org = patch.org ?? void 0;
5948
+ if ("projectId" in patch) next.projectId = patch.projectId ?? void 0;
5949
+ if ("repo" in patch) next.repo = patch.repo ?? void 0;
5950
+ if ("milestone" in patch) next.milestone = patch.milestone ?? void 0;
5951
+ if ("assignee" in patch && patch.assignee !== null) next.assignee = patch.assignee;
5952
+ if ("state" in patch && patch.state !== null) next.state = patch.state;
5953
+ if ("handoffMode" in patch && patch.handoffMode !== null) next.handoffMode = patch.handoffMode;
5954
+ if ("promptTemplate" in patch && patch.promptTemplate !== null) next.promptTemplate = patch.promptTemplate;
5955
+ if ("pinned" in patch) next.pinned = patch.pinned ?? void 0;
5956
+ return next;
5957
+ }
2486
5958
  async function waitForRemote(ctx) {
2487
5959
  const deadline = Date.now() + REMOTE_WAIT_MS;
2488
5960
  for (; ; ) {
@@ -2522,6 +5994,9 @@ var GitHubStore = class {
2522
5994
  orgScopes = /* @__PURE__ */ new Map();
2523
5995
  remote;
2524
5996
  started = false;
5997
+ onWindowFocus = () => {
5998
+ void this.refreshLinkedCards();
5999
+ };
2525
6000
  pollTimer;
2526
6001
  toastTimer;
2527
6002
  listSeq = 0;
@@ -2538,11 +6013,17 @@ var GitHubStore = class {
2538
6013
  start() {
2539
6014
  if (this.started) return;
2540
6015
  this.started = true;
6016
+ if (typeof window !== "undefined" && typeof window.addEventListener === "function") {
6017
+ window.addEventListener("focus", this.onWindowFocus);
6018
+ }
2541
6019
  void this.bootstrap();
2542
6020
  }
2543
6021
  /** Stop every timer this store owns. */
2544
6022
  stop() {
2545
6023
  this.started = false;
6024
+ if (typeof window !== "undefined" && typeof window.removeEventListener === "function") {
6025
+ window.removeEventListener("focus", this.onWindowFocus);
6026
+ }
2546
6027
  if (this.pollTimer !== void 0) clearInterval(this.pollTimer);
2547
6028
  if (this.toastTimer !== void 0) clearTimeout(this.toastTimer);
2548
6029
  this.pollTimer = void 0;
@@ -2553,6 +6034,7 @@ var GitHubStore = class {
2553
6034
  this.update({ loading: true, error: void 0 });
2554
6035
  try {
2555
6036
  const remote = await this.api();
6037
+ const catalogLoading = this.loadCatalog();
2556
6038
  const [status, prefs] = await Promise.all([
2557
6039
  remote.status().then((result) => unwrap(result)),
2558
6040
  remote.loadPrefs().then((result) => unwrap(result))
@@ -2565,7 +6047,7 @@ var GitHubStore = class {
2565
6047
  });
2566
6048
  if (prefs.projectId !== void 0) void this.savePrefs({ projectId: null });
2567
6049
  void this.loadLinks();
2568
- await this.loadCatalog();
6050
+ await catalogLoading;
2569
6051
  await this.ensureScopeSelection();
2570
6052
  await this.reloadList();
2571
6053
  this.schedulePolling(status.config.pollSeconds);
@@ -2582,6 +6064,7 @@ var GitHubStore = class {
2582
6064
  if (typeof document !== "undefined" && document.visibilityState !== "visible") return;
2583
6065
  if (this.snapshot.loading || this.snapshot.loadingMore) return;
2584
6066
  void this.reloadList(true);
6067
+ void this.refreshLinkedCards();
2585
6068
  }, seconds * 1e3);
2586
6069
  }
2587
6070
  /** Resolve the Remote namespace, or throw the mount's own refusal. */
@@ -2598,8 +6081,8 @@ var GitHubStore = class {
2598
6081
  for (const listener of this.listeners) listener();
2599
6082
  }
2600
6083
  /** Show one transient confirmation. */
2601
- toast(text) {
2602
- this.update({ toast: text });
6084
+ toast(text2) {
6085
+ this.update({ toast: text2 });
2603
6086
  if (this.toastTimer !== void 0) clearTimeout(this.toastTimer);
2604
6087
  this.toastTimer = setTimeout(() => {
2605
6088
  this.update({ toast: void 0 });
@@ -2641,6 +6124,7 @@ var GitHubStore = class {
2641
6124
  loadingMore: false,
2642
6125
  error: void 0
2643
6126
  });
6127
+ this.syncLinkedCardsFromList();
2644
6128
  this.refreshPinnedCard();
2645
6129
  } catch (error) {
2646
6130
  if (seq !== this.listSeq) return;
@@ -2691,7 +6175,7 @@ var GitHubStore = class {
2691
6175
  prefs: { ...this.snapshot.prefs, org: chosen, repo: void 0, milestone: void 0, projectId: void 0 },
2692
6176
  orgRepos: void 0
2693
6177
  });
2694
- await this.savePrefs({ org: chosen, projectId: null, repo: null, milestone: null });
6178
+ await this.persistPrefs({ org: chosen, projectId: null, repo: null, milestone: null });
2695
6179
  }
2696
6180
  await this.loadOrgScope(chosen);
2697
6181
  await this.ensureRepoSelection();
@@ -2711,7 +6195,7 @@ var GitHubStore = class {
2711
6195
  if (chosen !== current) {
2712
6196
  this.resetMilestoneOptions();
2713
6197
  this.update({ prefs: { ...this.snapshot.prefs, repo: chosen, milestone: void 0 } });
2714
- await this.savePrefs({ repo: chosen, milestone: null });
6198
+ await this.persistPrefs({ repo: chosen, milestone: null });
2715
6199
  }
2716
6200
  await this.loadRepoMilestones(chosen);
2717
6201
  await this.pruneMilestone(chosen);
@@ -2781,6 +6265,7 @@ var GitHubStore = class {
2781
6265
  await this.loadCatalog();
2782
6266
  await this.ensureScopeSelection();
2783
6267
  await this.reloadList();
6268
+ void this.refreshLinkedCards();
2784
6269
  })();
2785
6270
  }
2786
6271
  loadMore() {
@@ -2800,6 +6285,7 @@ var GitHubStore = class {
2800
6285
  ...next.totalCount === void 0 ? {} : { totalCount: next.totalCount }
2801
6286
  }
2802
6287
  });
6288
+ this.syncLinkedCardsFromList();
2803
6289
  } catch (error) {
2804
6290
  this.update({ loadingMore: false, error: asPanelError(error) });
2805
6291
  }
@@ -2813,6 +6299,7 @@ var GitHubStore = class {
2813
6299
  if (saved.org !== void 0) {
2814
6300
  await this.loadOrgScope(saved.org);
2815
6301
  await this.ensureRepoSelection();
6302
+ await this.reloadList();
2816
6303
  }
2817
6304
  });
2818
6305
  }
@@ -2870,18 +6357,20 @@ var GitHubStore = class {
2870
6357
  void (async () => {
2871
6358
  try {
2872
6359
  const remote = await this.api();
2873
- const body = await remote.issueDetail(card.repo, card.number).then((result) => unwrap(result));
6360
+ const bodyLoading = remote.issueDetail(card.repo, card.number).then((result) => unwrap(result));
6361
+ const mentionedLoading = remote.issueMentionedPRs(card.repo, card.number).then((result) => unwrap(result)).then((result) => result.mentionedPRs, () => []);
6362
+ const body = await bodyLoading;
2874
6363
  this.update({
2875
6364
  detail: { ...card, body: body.body, mentionedPRs: [] },
2876
6365
  detailLoading: false,
2877
6366
  mentionedLoading: true
2878
6367
  });
2879
- const mentioned = await remote.issueMentionedPRs(card.repo, card.number).then((result) => unwrap(result));
6368
+ const mentioned = await mentionedLoading;
2880
6369
  const current = this.snapshot.detail;
2881
6370
  if (current === void 0 || current.repo !== card.repo || current.number !== card.number) return;
2882
6371
  const closing = new Set(current.linkedPRs.map((pr) => pr.number));
2883
6372
  this.update({
2884
- detail: { ...current, mentionedPRs: mentioned.mentionedPRs.filter((pr) => !closing.has(pr.number)) },
6373
+ detail: { ...current, mentionedPRs: mentioned.filter((pr) => !closing.has(pr.number)) },
2885
6374
  mentionedLoading: false
2886
6375
  });
2887
6376
  } catch (error) {
@@ -2893,20 +6382,42 @@ var GitHubStore = class {
2893
6382
  this.update({ selected: void 0, detail: void 0, detailLoading: false, mentionedLoading: false });
2894
6383
  }
2895
6384
  async savePrefs(patch, after) {
6385
+ const previous = this.snapshot.prefs;
6386
+ const affectsList = ["org", "repo", "assignee", "state", "milestone"].some((key) => key in patch);
6387
+ this.update({ prefs: applyPrefsPatchLocally(previous, patch) });
6388
+ let saveError;
2896
6389
  try {
2897
6390
  const remote = await this.api();
2898
- const saved = await remote.savePrefs(patch).then((result) => unwrap(result));
2899
- const affectsList = ["org", "repo", "assignee", "state", "milestone"].some((key) => key in patch);
6391
+ const save = remote.savePrefs(patch).then((result) => unwrap(result));
6392
+ const reload = affectsList ? this.reloadList() : Promise.resolve();
6393
+ const [saved] = await Promise.all([save, reload]);
2900
6394
  this.update({ prefs: saved });
2901
- if (affectsList) {
2902
- await this.reloadList();
2903
- this.refreshPinnedCard();
2904
- } else if ("handoffMode" in patch || "promptTemplate" in patch) {
2905
- this.toast("settings.saved");
2906
- }
6395
+ if (affectsList) this.refreshPinnedCard();
6396
+ else if ("handoffMode" in patch || "promptTemplate" in patch) this.toast("settings.saved");
2907
6397
  if (after !== void 0) await after(saved);
6398
+ } catch (error) {
6399
+ saveError = error;
6400
+ this.update({ prefs: previous, error: asPanelError(error) });
6401
+ }
6402
+ void saveError;
6403
+ }
6404
+ /**
6405
+ * Persist a preference patch without touching the list.
6406
+ *
6407
+ * Scope normalization (picking the default organization/repository) uses this
6408
+ * so bootstrapping issues exactly one list request instead of one per default.
6409
+ * @param patch - validated preference patch.
6410
+ * @returns the saved preferences, or `undefined` when persistence failed.
6411
+ */
6412
+ async persistPrefs(patch) {
6413
+ try {
6414
+ const remote = await this.api();
6415
+ const saved = await remote.savePrefs(patch).then((result) => unwrap(result));
6416
+ this.update({ prefs: saved });
6417
+ return saved;
2908
6418
  } catch (error) {
2909
6419
  this.update({ error: asPanelError(error) });
6420
+ return void 0;
2910
6421
  }
2911
6422
  }
2912
6423
  pin(card) {
@@ -2999,9 +6510,9 @@ var GitHubStore = class {
2999
6510
  promptText(card) {
3000
6511
  return renderPrompt(card, this.snapshot.prefs.promptTemplate);
3001
6512
  }
3002
- copyText(text) {
6513
+ copyText(text2) {
3003
6514
  try {
3004
- void navigator.clipboard?.writeText(text);
6515
+ void navigator.clipboard?.writeText(text2);
3005
6516
  } catch {
3006
6517
  }
3007
6518
  this.toast("panel.toast.copied");
@@ -3022,7 +6533,8 @@ var GitHubStore = class {
3022
6533
  const links = await remote.links().then((result) => unwrap(result));
3023
6534
  this.update({ links });
3024
6535
  this.decorateLoadedCards(links);
3025
- void this.ensureCards(links);
6536
+ this.ensureCards(links);
6537
+ void this.refreshLinkedCards();
3026
6538
  } catch {
3027
6539
  }
3028
6540
  }
@@ -3040,6 +6552,68 @@ var GitHubStore = class {
3040
6552
  if (Object.keys(cards).length === 0) return;
3041
6553
  this.update({ linkCards: { ...this.snapshot.linkCards, ...cards } });
3042
6554
  }
6555
+ /** Update linked chips whose issues are present in the freshly loaded list. */
6556
+ syncLinkedCardsFromList() {
6557
+ const items = this.snapshot.list?.items;
6558
+ if (items === void 0 || items.length === 0) return;
6559
+ const byKey = new Map(items.map((item) => [this.keyOf(item.repo, item.number), item]));
6560
+ let changed = false;
6561
+ const next = { ...this.snapshot.linkCards };
6562
+ for (const link of this.snapshot.links) {
6563
+ const key = this.keyOf(link.repo, link.number);
6564
+ const card = byKey.get(key);
6565
+ if (card === void 0 || next[key] === card) continue;
6566
+ next[key] = this.withSessionLinks(card);
6567
+ changed = true;
6568
+ }
6569
+ if (changed) this.update({ linkCards: next });
6570
+ }
6571
+ /** Add the recorded session links to one card. */
6572
+ withSessionLinks(card) {
6573
+ const records = this.snapshot.links.filter((link) => link.repo === card.repo && link.number === card.number);
6574
+ if (records.length === 0) return card;
6575
+ return {
6576
+ ...card,
6577
+ sessionLinks: records.map((record) => ({ sessionId: record.sessionId, at: record.at }))
6578
+ };
6579
+ }
6580
+ /**
6581
+ * Refresh the dock chips from GitHub.
6582
+ *
6583
+ * A linked issue can be closed long after the handoff and no longer match the
6584
+ * panel's filters, so its card is not in the list; without this the chip's state
6585
+ * dot would stay green forever.
6586
+ */
6587
+ async refreshLinkedCards() {
6588
+ const links = this.snapshot.links;
6589
+ if (links.length === 0) return;
6590
+ const grouped = /* @__PURE__ */ new Map();
6591
+ for (const link of links) {
6592
+ const numbers = grouped.get(link.repo) ?? [];
6593
+ if (!numbers.includes(link.number)) numbers.push(link.number);
6594
+ grouped.set(link.repo, numbers);
6595
+ }
6596
+ const groups = [...grouped.entries()].map(([repo, numbers]) => ({ repo, numbers }));
6597
+ try {
6598
+ const remote = await this.api();
6599
+ const cards = await remote.linkedCards(groups).then((result) => unwrap(result));
6600
+ if (cards.length === 0) return;
6601
+ const next = { ...this.snapshot.linkCards };
6602
+ let changed = false;
6603
+ for (const card of cards) {
6604
+ const key = this.keyOf(card.repo, card.number);
6605
+ const current = next[key];
6606
+ next[key] = this.withSessionLinks(card);
6607
+ if (current === void 0 || current.state !== card.state || current.stateReason !== card.stateReason || current.title !== card.title) {
6608
+ changed = true;
6609
+ }
6610
+ }
6611
+ if (changed || Object.keys(this.snapshot.linkCards).length !== Object.keys(next).length) {
6612
+ this.update({ linkCards: next });
6613
+ }
6614
+ } catch {
6615
+ }
6616
+ }
3043
6617
  /** Attach resolved session links to every card the snapshot currently holds. */
3044
6618
  decorateLoadedCards(links) {
3045
6619
  const byKey = /* @__PURE__ */ new Map();
@@ -3154,9 +6728,9 @@ var GitHubStore = class {
3154
6728
  /** Insert one issue into the composer, per the configured handoff behavior. */
3155
6729
  async insertIntoComposer(card, inputActions) {
3156
6730
  if (inputActions === void 0) return;
3157
- const text = this.promptFor(card);
3158
- if (text === "") return;
3159
- inputActions.setDraft(text);
6731
+ const text2 = this.promptFor(card);
6732
+ if (text2 === "") return;
6733
+ inputActions.setDraft(text2);
3160
6734
  if (this.snapshot.prefs.handoffMode === "send") inputActions.submit();
3161
6735
  }
3162
6736
  };
@@ -3166,7 +6740,7 @@ var PANEL_ID = "github";
3166
6740
  var SETTINGS_ID = "github-issues";
3167
6741
  var SIDEBAR_KIND2 = "github-issues";
3168
6742
  var inject = ["slots", "locale", "remote"];
3169
- function apply(ctx) {
6743
+ function apply3(ctx) {
3170
6744
  ctx.effect(() => ctx.locale.register(NS, DICTS), "github-issues: dictionaries");
3171
6745
  const t = ctx.locale.bind(NS);
3172
6746
  const mounting = ctx.remote.$mount(remoteContribution()).then(