@syntrologie/adapt-chatbot 2.27.0 → 2.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/AdaptiveChatBar.d.ts +76 -0
  2. package/dist/AdaptiveChatBar.d.ts.map +1 -0
  3. package/dist/AdaptiveChatBar.js +10 -0
  4. package/dist/AdaptiveChatBar.js.map +7 -0
  5. package/dist/AdaptiveChatBarMountable.d.ts +35 -0
  6. package/dist/AdaptiveChatBarMountable.d.ts.map +1 -0
  7. package/dist/AdaptiveChatTrail.d.ts +77 -0
  8. package/dist/AdaptiveChatTrail.d.ts.map +1 -0
  9. package/dist/AdaptiveChatTrail.js +9 -0
  10. package/dist/AdaptiveChatTrail.js.map +7 -0
  11. package/dist/AdaptiveChipsStrip.d.ts +1150 -0
  12. package/dist/AdaptiveChipsStrip.d.ts.map +1 -0
  13. package/dist/AdaptiveChipsStrip.js +11 -0
  14. package/dist/AdaptiveChipsStrip.js.map +7 -0
  15. package/dist/AdaptiveChipsStripMountable.d.ts +24 -0
  16. package/dist/AdaptiveChipsStripMountable.d.ts.map +1 -0
  17. package/dist/ChatAssistantLit.d.ts +22 -50
  18. package/dist/ChatAssistantLit.d.ts.map +1 -1
  19. package/dist/ChatAssistantLit.js +5 -3
  20. package/dist/ChatSession.d.ts +178 -0
  21. package/dist/ChatSession.d.ts.map +1 -0
  22. package/dist/ChatTransport.d.ts +283 -0
  23. package/dist/ChatTransport.d.ts.map +1 -0
  24. package/dist/NavLinkMountable.d.ts +25 -0
  25. package/dist/NavLinkMountable.d.ts.map +1 -0
  26. package/dist/NavLinkMountable.test.d.ts +2 -0
  27. package/dist/NavLinkMountable.test.d.ts.map +1 -0
  28. package/dist/TextAnswerMountable.d.ts +17 -0
  29. package/dist/TextAnswerMountable.d.ts.map +1 -0
  30. package/dist/Turnstile.d.ts +83 -0
  31. package/dist/Turnstile.d.ts.map +1 -0
  32. package/dist/chunk-435KJD27.js +192 -0
  33. package/dist/chunk-435KJD27.js.map +7 -0
  34. package/dist/chunk-AUER7ZCK.js +634 -0
  35. package/dist/chunk-AUER7ZCK.js.map +7 -0
  36. package/dist/chunk-DOMEUJR7.js +382 -0
  37. package/dist/chunk-DOMEUJR7.js.map +7 -0
  38. package/dist/{chunk-W457NMGD.js → chunk-KUO67E2W.js} +1537 -4130
  39. package/dist/chunk-KUO67E2W.js.map +7 -0
  40. package/dist/chunk-QELVKBQV.js +214 -0
  41. package/dist/chunk-QELVKBQV.js.map +7 -0
  42. package/dist/chunk-UC4XU6GH.js +3306 -0
  43. package/dist/chunk-UC4XU6GH.js.map +7 -0
  44. package/dist/elements/ActionHandler.d.ts +34 -0
  45. package/dist/elements/ActionHandler.d.ts.map +1 -0
  46. package/dist/elements/ElementInstanceStore.d.ts +155 -0
  47. package/dist/elements/ElementInstanceStore.d.ts.map +1 -0
  48. package/dist/elements/ElementInstanceStore.test.d.ts +2 -0
  49. package/dist/elements/ElementInstanceStore.test.d.ts.map +1 -0
  50. package/dist/elements/ElementTypeHandler.d.ts +77 -0
  51. package/dist/elements/ElementTypeHandler.d.ts.map +1 -0
  52. package/dist/elements/ItemHandler.d.ts +60 -0
  53. package/dist/elements/ItemHandler.d.ts.map +1 -0
  54. package/dist/elements/ItemHandler.test.d.ts +2 -0
  55. package/dist/elements/ItemHandler.test.d.ts.map +1 -0
  56. package/dist/elements/TileHandler.d.ts +52 -0
  57. package/dist/elements/TileHandler.d.ts.map +1 -0
  58. package/dist/elements/blockRenderer.d.ts +46 -0
  59. package/dist/elements/blockRenderer.d.ts.map +1 -0
  60. package/dist/elements/blockRenderer.test.d.ts +13 -0
  61. package/dist/elements/blockRenderer.test.d.ts.map +1 -0
  62. package/dist/elements/blocks.d.ts +58 -0
  63. package/dist/elements/blocks.d.ts.map +1 -0
  64. package/dist/elements/envelope.d.ts +24 -0
  65. package/dist/elements/envelope.d.ts.map +1 -0
  66. package/dist/elements/fetcher.d.ts +40 -0
  67. package/dist/elements/fetcher.d.ts.map +1 -0
  68. package/dist/elements/index.d.ts +32 -0
  69. package/dist/elements/index.d.ts.map +1 -0
  70. package/dist/elements/types.d.ts +106 -0
  71. package/dist/elements/types.d.ts.map +1 -0
  72. package/dist/observer/__tests__/allowlist.test.d.ts +9 -0
  73. package/dist/observer/__tests__/allowlist.test.d.ts.map +1 -0
  74. package/dist/observer/__tests__/observer-isolation.test.d.ts +13 -0
  75. package/dist/observer/__tests__/observer-isolation.test.d.ts.map +1 -0
  76. package/dist/observer/__tests__/queue.test.d.ts +2 -0
  77. package/dist/observer/__tests__/queue.test.d.ts.map +1 -0
  78. package/dist/observer/__tests__/transport.test.d.ts +2 -0
  79. package/dist/observer/__tests__/transport.test.d.ts.map +1 -0
  80. package/dist/observer/allowlist.d.ts +32 -0
  81. package/dist/observer/allowlist.d.ts.map +1 -0
  82. package/dist/observer/index.d.ts +35 -0
  83. package/dist/observer/index.d.ts.map +1 -0
  84. package/dist/observer/queue.d.ts +57 -0
  85. package/dist/observer/queue.d.ts.map +1 -0
  86. package/dist/observer/transport.d.ts +26 -0
  87. package/dist/observer/transport.d.ts.map +1 -0
  88. package/dist/runtime.d.ts +7 -0
  89. package/dist/runtime.d.ts.map +1 -1
  90. package/dist/runtime.js +1617 -2
  91. package/dist/runtime.js.map +4 -4
  92. package/dist/schema.d.ts +3120 -7
  93. package/dist/schema.d.ts.map +1 -1
  94. package/dist/schema.js +40 -0
  95. package/dist/schema.js.map +2 -2
  96. package/dist/types.d.ts +30 -2
  97. package/dist/types.d.ts.map +1 -1
  98. package/package.json +13 -1
  99. package/dist/chunk-W457NMGD.js.map +0 -7
@@ -0,0 +1,3306 @@
1
+ import {
2
+ __publicField
3
+ } from "./chunk-UVKRO5ER.js";
4
+
5
+ // ../../chat/dist/index.js
6
+ import { html as html7, LitElement, nothing as nothing5 } from "lit";
7
+ import { html as html2, nothing } from "lit";
8
+ import { html as html6, nothing as nothing4 } from "lit";
9
+ import { guard } from "lit/directives/guard.js";
10
+ import { repeat } from "lit/directives/repeat.js";
11
+ import { html as html4, nothing as nothing3 } from "lit";
12
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
13
+
14
+ // ../../../node_modules/dompurify/dist/purify.es.mjs
15
+ var {
16
+ entries,
17
+ setPrototypeOf,
18
+ isFrozen,
19
+ getPrototypeOf,
20
+ getOwnPropertyDescriptor
21
+ } = Object;
22
+ var {
23
+ freeze,
24
+ seal,
25
+ create
26
+ } = Object;
27
+ var {
28
+ apply,
29
+ construct
30
+ } = typeof Reflect !== "undefined" && Reflect;
31
+ if (!freeze) {
32
+ freeze = function freeze2(x2) {
33
+ return x2;
34
+ };
35
+ }
36
+ if (!seal) {
37
+ seal = function seal2(x2) {
38
+ return x2;
39
+ };
40
+ }
41
+ if (!apply) {
42
+ apply = function apply2(func, thisArg) {
43
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
44
+ args[_key - 2] = arguments[_key];
45
+ }
46
+ return func.apply(thisArg, args);
47
+ };
48
+ }
49
+ if (!construct) {
50
+ construct = function construct2(Func) {
51
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
52
+ args[_key2 - 1] = arguments[_key2];
53
+ }
54
+ return new Func(...args);
55
+ };
56
+ }
57
+ var arrayForEach = unapply(Array.prototype.forEach);
58
+ var arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
59
+ var arrayPop = unapply(Array.prototype.pop);
60
+ var arrayPush = unapply(Array.prototype.push);
61
+ var arraySplice = unapply(Array.prototype.splice);
62
+ var stringToLowerCase = unapply(String.prototype.toLowerCase);
63
+ var stringToString = unapply(String.prototype.toString);
64
+ var stringMatch = unapply(String.prototype.match);
65
+ var stringReplace = unapply(String.prototype.replace);
66
+ var stringIndexOf = unapply(String.prototype.indexOf);
67
+ var stringTrim = unapply(String.prototype.trim);
68
+ var objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
69
+ var regExpTest = unapply(RegExp.prototype.test);
70
+ var typeErrorCreate = unconstruct(TypeError);
71
+ function unapply(func) {
72
+ return function(thisArg) {
73
+ if (thisArg instanceof RegExp) {
74
+ thisArg.lastIndex = 0;
75
+ }
76
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
77
+ args[_key3 - 1] = arguments[_key3];
78
+ }
79
+ return apply(func, thisArg, args);
80
+ };
81
+ }
82
+ function unconstruct(Func) {
83
+ return function() {
84
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
85
+ args[_key4] = arguments[_key4];
86
+ }
87
+ return construct(Func, args);
88
+ };
89
+ }
90
+ function addToSet(set, array) {
91
+ let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
92
+ if (setPrototypeOf) {
93
+ setPrototypeOf(set, null);
94
+ }
95
+ let l = array.length;
96
+ while (l--) {
97
+ let element = array[l];
98
+ if (typeof element === "string") {
99
+ const lcElement = transformCaseFunc(element);
100
+ if (lcElement !== element) {
101
+ if (!isFrozen(array)) {
102
+ array[l] = lcElement;
103
+ }
104
+ element = lcElement;
105
+ }
106
+ }
107
+ set[element] = true;
108
+ }
109
+ return set;
110
+ }
111
+ function cleanArray(array) {
112
+ for (let index = 0; index < array.length; index++) {
113
+ const isPropertyExist = objectHasOwnProperty(array, index);
114
+ if (!isPropertyExist) {
115
+ array[index] = null;
116
+ }
117
+ }
118
+ return array;
119
+ }
120
+ function clone(object) {
121
+ const newObject = create(null);
122
+ for (const [property, value] of entries(object)) {
123
+ const isPropertyExist = objectHasOwnProperty(object, property);
124
+ if (isPropertyExist) {
125
+ if (Array.isArray(value)) {
126
+ newObject[property] = cleanArray(value);
127
+ } else if (value && typeof value === "object" && value.constructor === Object) {
128
+ newObject[property] = clone(value);
129
+ } else {
130
+ newObject[property] = value;
131
+ }
132
+ }
133
+ }
134
+ return newObject;
135
+ }
136
+ function lookupGetter(object, prop) {
137
+ while (object !== null) {
138
+ const desc = getOwnPropertyDescriptor(object, prop);
139
+ if (desc) {
140
+ if (desc.get) {
141
+ return unapply(desc.get);
142
+ }
143
+ if (typeof desc.value === "function") {
144
+ return unapply(desc.value);
145
+ }
146
+ }
147
+ object = getPrototypeOf(object);
148
+ }
149
+ function fallbackValue() {
150
+ return null;
151
+ }
152
+ return fallbackValue;
153
+ }
154
+ var html$1 = freeze(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "search", "section", "select", "shadow", "slot", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]);
155
+ var svg$1 = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "enterkeyhint", "exportparts", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "inputmode", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "part", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
156
+ var svgFilters = freeze(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]);
157
+ var svgDisallowed = freeze(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]);
158
+ var mathMl$1 = freeze(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]);
159
+ var mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
160
+ var text = freeze(["#text"]);
161
+ var html = freeze(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "exportparts", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inert", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "part", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "slot", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]);
162
+ var svg = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "mask-type", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]);
163
+ var mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]);
164
+ var xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
165
+ var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
166
+ var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
167
+ var TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm);
168
+ var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
169
+ var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
170
+ var IS_ALLOWED_URI = seal(
171
+ /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
172
+ // eslint-disable-line no-useless-escape
173
+ );
174
+ var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
175
+ var ATTR_WHITESPACE = seal(
176
+ /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g
177
+ // eslint-disable-line no-control-regex
178
+ );
179
+ var DOCTYPE_NAME = seal(/^html$/i);
180
+ var CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
181
+ var EXPRESSIONS = /* @__PURE__ */ Object.freeze({
182
+ __proto__: null,
183
+ ARIA_ATTR,
184
+ ATTR_WHITESPACE,
185
+ CUSTOM_ELEMENT,
186
+ DATA_ATTR,
187
+ DOCTYPE_NAME,
188
+ ERB_EXPR,
189
+ IS_ALLOWED_URI,
190
+ IS_SCRIPT_OR_DATA,
191
+ MUSTACHE_EXPR,
192
+ TMPLIT_EXPR
193
+ });
194
+ var NODE_TYPE = {
195
+ element: 1,
196
+ attribute: 2,
197
+ text: 3,
198
+ cdataSection: 4,
199
+ entityReference: 5,
200
+ // Deprecated
201
+ entityNode: 6,
202
+ // Deprecated
203
+ progressingInstruction: 7,
204
+ comment: 8,
205
+ document: 9,
206
+ documentType: 10,
207
+ documentFragment: 11,
208
+ notation: 12
209
+ // Deprecated
210
+ };
211
+ var getGlobal = function getGlobal2() {
212
+ return typeof window === "undefined" ? null : window;
213
+ };
214
+ var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, purifyHostElement) {
215
+ if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") {
216
+ return null;
217
+ }
218
+ let suffix = null;
219
+ const ATTR_NAME = "data-tt-policy-suffix";
220
+ if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {
221
+ suffix = purifyHostElement.getAttribute(ATTR_NAME);
222
+ }
223
+ const policyName = "dompurify" + (suffix ? "#" + suffix : "");
224
+ try {
225
+ return trustedTypes.createPolicy(policyName, {
226
+ createHTML(html8) {
227
+ return html8;
228
+ },
229
+ createScriptURL(scriptUrl) {
230
+ return scriptUrl;
231
+ }
232
+ });
233
+ } catch (_2) {
234
+ console.warn("TrustedTypes policy " + policyName + " could not be created.");
235
+ return null;
236
+ }
237
+ };
238
+ var _createHooksMap = function _createHooksMap2() {
239
+ return {
240
+ afterSanitizeAttributes: [],
241
+ afterSanitizeElements: [],
242
+ afterSanitizeShadowDOM: [],
243
+ beforeSanitizeAttributes: [],
244
+ beforeSanitizeElements: [],
245
+ beforeSanitizeShadowDOM: [],
246
+ uponSanitizeAttribute: [],
247
+ uponSanitizeElement: [],
248
+ uponSanitizeShadowNode: []
249
+ };
250
+ };
251
+ function createDOMPurify() {
252
+ let window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
253
+ const DOMPurify = (root) => createDOMPurify(root);
254
+ DOMPurify.version = "3.3.1";
255
+ DOMPurify.removed = [];
256
+ if (!window2 || !window2.document || window2.document.nodeType !== NODE_TYPE.document || !window2.Element) {
257
+ DOMPurify.isSupported = false;
258
+ return DOMPurify;
259
+ }
260
+ let {
261
+ document: document2
262
+ } = window2;
263
+ const originalDocument = document2;
264
+ const currentScript = originalDocument.currentScript;
265
+ const {
266
+ DocumentFragment,
267
+ HTMLTemplateElement,
268
+ Node,
269
+ Element,
270
+ NodeFilter,
271
+ NamedNodeMap = window2.NamedNodeMap || window2.MozNamedAttrMap,
272
+ HTMLFormElement,
273
+ DOMParser,
274
+ trustedTypes
275
+ } = window2;
276
+ const ElementPrototype = Element.prototype;
277
+ const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
278
+ const remove = lookupGetter(ElementPrototype, "remove");
279
+ const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
280
+ const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
281
+ const getParentNode = lookupGetter(ElementPrototype, "parentNode");
282
+ if (typeof HTMLTemplateElement === "function") {
283
+ const template = document2.createElement("template");
284
+ if (template.content && template.content.ownerDocument) {
285
+ document2 = template.content.ownerDocument;
286
+ }
287
+ }
288
+ let trustedTypesPolicy;
289
+ let emptyHTML = "";
290
+ const {
291
+ implementation,
292
+ createNodeIterator,
293
+ createDocumentFragment,
294
+ getElementsByTagName
295
+ } = document2;
296
+ const {
297
+ importNode
298
+ } = originalDocument;
299
+ let hooks = _createHooksMap();
300
+ DOMPurify.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
301
+ const {
302
+ MUSTACHE_EXPR: MUSTACHE_EXPR2,
303
+ ERB_EXPR: ERB_EXPR2,
304
+ TMPLIT_EXPR: TMPLIT_EXPR2,
305
+ DATA_ATTR: DATA_ATTR2,
306
+ ARIA_ATTR: ARIA_ATTR2,
307
+ IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA2,
308
+ ATTR_WHITESPACE: ATTR_WHITESPACE2,
309
+ CUSTOM_ELEMENT: CUSTOM_ELEMENT2
310
+ } = EXPRESSIONS;
311
+ let {
312
+ IS_ALLOWED_URI: IS_ALLOWED_URI$1
313
+ } = EXPRESSIONS;
314
+ let ALLOWED_TAGS = null;
315
+ const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);
316
+ let ALLOWED_ATTR = null;
317
+ const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);
318
+ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
319
+ tagNameCheck: {
320
+ writable: true,
321
+ configurable: false,
322
+ enumerable: true,
323
+ value: null
324
+ },
325
+ attributeNameCheck: {
326
+ writable: true,
327
+ configurable: false,
328
+ enumerable: true,
329
+ value: null
330
+ },
331
+ allowCustomizedBuiltInElements: {
332
+ writable: true,
333
+ configurable: false,
334
+ enumerable: true,
335
+ value: false
336
+ }
337
+ }));
338
+ let FORBID_TAGS = null;
339
+ let FORBID_ATTR = null;
340
+ const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
341
+ tagCheck: {
342
+ writable: true,
343
+ configurable: false,
344
+ enumerable: true,
345
+ value: null
346
+ },
347
+ attributeCheck: {
348
+ writable: true,
349
+ configurable: false,
350
+ enumerable: true,
351
+ value: null
352
+ }
353
+ }));
354
+ let ALLOW_ARIA_ATTR = true;
355
+ let ALLOW_DATA_ATTR = true;
356
+ let ALLOW_UNKNOWN_PROTOCOLS = false;
357
+ let ALLOW_SELF_CLOSE_IN_ATTR = true;
358
+ let SAFE_FOR_TEMPLATES = false;
359
+ let SAFE_FOR_XML = true;
360
+ let WHOLE_DOCUMENT = false;
361
+ let SET_CONFIG = false;
362
+ let FORCE_BODY = false;
363
+ let RETURN_DOM = false;
364
+ let RETURN_DOM_FRAGMENT = false;
365
+ let RETURN_TRUSTED_TYPE = false;
366
+ let SANITIZE_DOM = true;
367
+ let SANITIZE_NAMED_PROPS = false;
368
+ const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
369
+ let KEEP_CONTENT = true;
370
+ let IN_PLACE = false;
371
+ let USE_PROFILES = {};
372
+ let FORBID_CONTENTS = null;
373
+ const DEFAULT_FORBID_CONTENTS = addToSet({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]);
374
+ let DATA_URI_TAGS = null;
375
+ const DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]);
376
+ let URI_SAFE_ATTRIBUTES = null;
377
+ const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]);
378
+ const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
379
+ const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
380
+ const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
381
+ let NAMESPACE = HTML_NAMESPACE;
382
+ let IS_EMPTY_INPUT = false;
383
+ let ALLOWED_NAMESPACES = null;
384
+ const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
385
+ let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
386
+ let HTML_INTEGRATION_POINTS = addToSet({}, ["annotation-xml"]);
387
+ const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]);
388
+ let PARSER_MEDIA_TYPE = null;
389
+ const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
390
+ const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
391
+ let transformCaseFunc = null;
392
+ let CONFIG = null;
393
+ const formElement = document2.createElement("form");
394
+ const isRegexOrFunction = function isRegexOrFunction2(testValue) {
395
+ return testValue instanceof RegExp || testValue instanceof Function;
396
+ };
397
+ const _parseConfig = function _parseConfig2() {
398
+ let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
399
+ if (CONFIG && CONFIG === cfg) {
400
+ return;
401
+ }
402
+ if (!cfg || typeof cfg !== "object") {
403
+ cfg = {};
404
+ }
405
+ cfg = clone(cfg);
406
+ PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes
407
+ SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
408
+ transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
409
+ ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
410
+ ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
411
+ ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
412
+ URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
413
+ DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
414
+ FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
415
+ FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});
416
+ FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});
417
+ USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false;
418
+ ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
419
+ ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
420
+ ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
421
+ ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
422
+ SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
423
+ SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
424
+ WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
425
+ RETURN_DOM = cfg.RETURN_DOM || false;
426
+ RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
427
+ RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
428
+ FORCE_BODY = cfg.FORCE_BODY || false;
429
+ SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
430
+ SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
431
+ KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
432
+ IN_PLACE = cfg.IN_PLACE || false;
433
+ IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
434
+ NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
435
+ MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
436
+ HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
437
+ CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
438
+ if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
439
+ CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
440
+ }
441
+ if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
442
+ CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
443
+ }
444
+ if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") {
445
+ CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
446
+ }
447
+ if (SAFE_FOR_TEMPLATES) {
448
+ ALLOW_DATA_ATTR = false;
449
+ }
450
+ if (RETURN_DOM_FRAGMENT) {
451
+ RETURN_DOM = true;
452
+ }
453
+ if (USE_PROFILES) {
454
+ ALLOWED_TAGS = addToSet({}, text);
455
+ ALLOWED_ATTR = [];
456
+ if (USE_PROFILES.html === true) {
457
+ addToSet(ALLOWED_TAGS, html$1);
458
+ addToSet(ALLOWED_ATTR, html);
459
+ }
460
+ if (USE_PROFILES.svg === true) {
461
+ addToSet(ALLOWED_TAGS, svg$1);
462
+ addToSet(ALLOWED_ATTR, svg);
463
+ addToSet(ALLOWED_ATTR, xml);
464
+ }
465
+ if (USE_PROFILES.svgFilters === true) {
466
+ addToSet(ALLOWED_TAGS, svgFilters);
467
+ addToSet(ALLOWED_ATTR, svg);
468
+ addToSet(ALLOWED_ATTR, xml);
469
+ }
470
+ if (USE_PROFILES.mathMl === true) {
471
+ addToSet(ALLOWED_TAGS, mathMl$1);
472
+ addToSet(ALLOWED_ATTR, mathMl);
473
+ addToSet(ALLOWED_ATTR, xml);
474
+ }
475
+ }
476
+ if (cfg.ADD_TAGS) {
477
+ if (typeof cfg.ADD_TAGS === "function") {
478
+ EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
479
+ } else {
480
+ if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
481
+ ALLOWED_TAGS = clone(ALLOWED_TAGS);
482
+ }
483
+ addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
484
+ }
485
+ }
486
+ if (cfg.ADD_ATTR) {
487
+ if (typeof cfg.ADD_ATTR === "function") {
488
+ EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
489
+ } else {
490
+ if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
491
+ ALLOWED_ATTR = clone(ALLOWED_ATTR);
492
+ }
493
+ addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
494
+ }
495
+ }
496
+ if (cfg.ADD_URI_SAFE_ATTR) {
497
+ addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
498
+ }
499
+ if (cfg.FORBID_CONTENTS) {
500
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
501
+ FORBID_CONTENTS = clone(FORBID_CONTENTS);
502
+ }
503
+ addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
504
+ }
505
+ if (cfg.ADD_FORBID_CONTENTS) {
506
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
507
+ FORBID_CONTENTS = clone(FORBID_CONTENTS);
508
+ }
509
+ addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
510
+ }
511
+ if (KEEP_CONTENT) {
512
+ ALLOWED_TAGS["#text"] = true;
513
+ }
514
+ if (WHOLE_DOCUMENT) {
515
+ addToSet(ALLOWED_TAGS, ["html", "head", "body"]);
516
+ }
517
+ if (ALLOWED_TAGS.table) {
518
+ addToSet(ALLOWED_TAGS, ["tbody"]);
519
+ delete FORBID_TAGS.tbody;
520
+ }
521
+ if (cfg.TRUSTED_TYPES_POLICY) {
522
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") {
523
+ throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
524
+ }
525
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") {
526
+ throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
527
+ }
528
+ trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
529
+ emptyHTML = trustedTypesPolicy.createHTML("");
530
+ } else {
531
+ if (trustedTypesPolicy === void 0) {
532
+ trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
533
+ }
534
+ if (trustedTypesPolicy !== null && typeof emptyHTML === "string") {
535
+ emptyHTML = trustedTypesPolicy.createHTML("");
536
+ }
537
+ }
538
+ if (freeze) {
539
+ freeze(cfg);
540
+ }
541
+ CONFIG = cfg;
542
+ };
543
+ const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
544
+ const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
545
+ const _checkValidNamespace = function _checkValidNamespace2(element) {
546
+ let parent = getParentNode(element);
547
+ if (!parent || !parent.tagName) {
548
+ parent = {
549
+ namespaceURI: NAMESPACE,
550
+ tagName: "template"
551
+ };
552
+ }
553
+ const tagName = stringToLowerCase(element.tagName);
554
+ const parentTagName = stringToLowerCase(parent.tagName);
555
+ if (!ALLOWED_NAMESPACES[element.namespaceURI]) {
556
+ return false;
557
+ }
558
+ if (element.namespaceURI === SVG_NAMESPACE) {
559
+ if (parent.namespaceURI === HTML_NAMESPACE) {
560
+ return tagName === "svg";
561
+ }
562
+ if (parent.namespaceURI === MATHML_NAMESPACE) {
563
+ return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
564
+ }
565
+ return Boolean(ALL_SVG_TAGS[tagName]);
566
+ }
567
+ if (element.namespaceURI === MATHML_NAMESPACE) {
568
+ if (parent.namespaceURI === HTML_NAMESPACE) {
569
+ return tagName === "math";
570
+ }
571
+ if (parent.namespaceURI === SVG_NAMESPACE) {
572
+ return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
573
+ }
574
+ return Boolean(ALL_MATHML_TAGS[tagName]);
575
+ }
576
+ if (element.namespaceURI === HTML_NAMESPACE) {
577
+ if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
578
+ return false;
579
+ }
580
+ if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
581
+ return false;
582
+ }
583
+ return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
584
+ }
585
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) {
586
+ return true;
587
+ }
588
+ return false;
589
+ };
590
+ const _forceRemove = function _forceRemove2(node) {
591
+ arrayPush(DOMPurify.removed, {
592
+ element: node
593
+ });
594
+ try {
595
+ getParentNode(node).removeChild(node);
596
+ } catch (_2) {
597
+ remove(node);
598
+ }
599
+ };
600
+ const _removeAttribute = function _removeAttribute2(name, element) {
601
+ try {
602
+ arrayPush(DOMPurify.removed, {
603
+ attribute: element.getAttributeNode(name),
604
+ from: element
605
+ });
606
+ } catch (_2) {
607
+ arrayPush(DOMPurify.removed, {
608
+ attribute: null,
609
+ from: element
610
+ });
611
+ }
612
+ element.removeAttribute(name);
613
+ if (name === "is") {
614
+ if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
615
+ try {
616
+ _forceRemove(element);
617
+ } catch (_2) {
618
+ }
619
+ } else {
620
+ try {
621
+ element.setAttribute(name, "");
622
+ } catch (_2) {
623
+ }
624
+ }
625
+ }
626
+ };
627
+ const _initDocument = function _initDocument2(dirty) {
628
+ let doc = null;
629
+ let leadingWhitespace = null;
630
+ if (FORCE_BODY) {
631
+ dirty = "<remove></remove>" + dirty;
632
+ } else {
633
+ const matches = stringMatch(dirty, /^[\r\n\t ]+/);
634
+ leadingWhitespace = matches && matches[0];
635
+ }
636
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) {
637
+ dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
638
+ }
639
+ const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
640
+ if (NAMESPACE === HTML_NAMESPACE) {
641
+ try {
642
+ doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
643
+ } catch (_2) {
644
+ }
645
+ }
646
+ if (!doc || !doc.documentElement) {
647
+ doc = implementation.createDocument(NAMESPACE, "template", null);
648
+ try {
649
+ doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
650
+ } catch (_2) {
651
+ }
652
+ }
653
+ const body = doc.body || doc.documentElement;
654
+ if (dirty && leadingWhitespace) {
655
+ body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
656
+ }
657
+ if (NAMESPACE === HTML_NAMESPACE) {
658
+ return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
659
+ }
660
+ return WHOLE_DOCUMENT ? doc.documentElement : body;
661
+ };
662
+ const _createNodeIterator = function _createNodeIterator2(root) {
663
+ return createNodeIterator.call(
664
+ root.ownerDocument || root,
665
+ root,
666
+ // eslint-disable-next-line no-bitwise
667
+ NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION,
668
+ null
669
+ );
670
+ };
671
+ const _isClobbered = function _isClobbered2(element) {
672
+ return element instanceof HTMLFormElement && (typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function");
673
+ };
674
+ const _isNode = function _isNode2(value) {
675
+ return typeof Node === "function" && value instanceof Node;
676
+ };
677
+ function _executeHooks(hooks2, currentNode, data) {
678
+ arrayForEach(hooks2, (hook) => {
679
+ hook.call(DOMPurify, currentNode, data, CONFIG);
680
+ });
681
+ }
682
+ const _sanitizeElements = function _sanitizeElements2(currentNode) {
683
+ let content = null;
684
+ _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
685
+ if (_isClobbered(currentNode)) {
686
+ _forceRemove(currentNode);
687
+ return true;
688
+ }
689
+ const tagName = transformCaseFunc(currentNode.nodeName);
690
+ _executeHooks(hooks.uponSanitizeElement, currentNode, {
691
+ tagName,
692
+ allowedTags: ALLOWED_TAGS
693
+ });
694
+ if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) {
695
+ _forceRemove(currentNode);
696
+ return true;
697
+ }
698
+ if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
699
+ _forceRemove(currentNode);
700
+ return true;
701
+ }
702
+ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
703
+ _forceRemove(currentNode);
704
+ return true;
705
+ }
706
+ if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {
707
+ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
708
+ if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
709
+ return false;
710
+ }
711
+ if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {
712
+ return false;
713
+ }
714
+ }
715
+ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
716
+ const parentNode = getParentNode(currentNode) || currentNode.parentNode;
717
+ const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
718
+ if (childNodes && parentNode) {
719
+ const childCount = childNodes.length;
720
+ for (let i = childCount - 1; i >= 0; --i) {
721
+ const childClone = cloneNode(childNodes[i], true);
722
+ childClone.__removalCount = (currentNode.__removalCount || 0) + 1;
723
+ parentNode.insertBefore(childClone, getNextSibling(currentNode));
724
+ }
725
+ }
726
+ }
727
+ _forceRemove(currentNode);
728
+ return true;
729
+ }
730
+ if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
731
+ _forceRemove(currentNode);
732
+ return true;
733
+ }
734
+ if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
735
+ _forceRemove(currentNode);
736
+ return true;
737
+ }
738
+ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
739
+ content = currentNode.textContent;
740
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
741
+ content = stringReplace(content, expr, " ");
742
+ });
743
+ if (currentNode.textContent !== content) {
744
+ arrayPush(DOMPurify.removed, {
745
+ element: currentNode.cloneNode()
746
+ });
747
+ currentNode.textContent = content;
748
+ }
749
+ }
750
+ _executeHooks(hooks.afterSanitizeElements, currentNode, null);
751
+ return false;
752
+ };
753
+ const _isValidAttribute = function _isValidAttribute2(lcTag, lcName, value) {
754
+ if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document2 || value in formElement)) {
755
+ return false;
756
+ }
757
+ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR2, lcName)) ;
758
+ else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR2, lcName)) ;
759
+ else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ;
760
+ else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
761
+ if (
762
+ // First condition does a very basic check if a) it's basically a valid custom element tagname AND
763
+ // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
764
+ // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
765
+ _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) || // Alternative, second condition checks if it's an `is`-attribute, AND
766
+ // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
767
+ lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))
768
+ ) ;
769
+ else {
770
+ return false;
771
+ }
772
+ } else if (URI_SAFE_ATTRIBUTES[lcName]) ;
773
+ else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE2, ""))) ;
774
+ else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]) ;
775
+ else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA2, stringReplace(value, ATTR_WHITESPACE2, ""))) ;
776
+ else if (value) {
777
+ return false;
778
+ } else ;
779
+ return true;
780
+ };
781
+ const _isBasicCustomElement = function _isBasicCustomElement2(tagName) {
782
+ return tagName !== "annotation-xml" && stringMatch(tagName, CUSTOM_ELEMENT2);
783
+ };
784
+ const _sanitizeAttributes = function _sanitizeAttributes2(currentNode) {
785
+ _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
786
+ const {
787
+ attributes
788
+ } = currentNode;
789
+ if (!attributes || _isClobbered(currentNode)) {
790
+ return;
791
+ }
792
+ const hookEvent = {
793
+ attrName: "",
794
+ attrValue: "",
795
+ keepAttr: true,
796
+ allowedAttributes: ALLOWED_ATTR,
797
+ forceKeepAttr: void 0
798
+ };
799
+ let l = attributes.length;
800
+ while (l--) {
801
+ const attr = attributes[l];
802
+ const {
803
+ name,
804
+ namespaceURI,
805
+ value: attrValue
806
+ } = attr;
807
+ const lcName = transformCaseFunc(name);
808
+ const initValue = attrValue;
809
+ let value = name === "value" ? initValue : stringTrim(initValue);
810
+ hookEvent.attrName = lcName;
811
+ hookEvent.attrValue = value;
812
+ hookEvent.keepAttr = true;
813
+ hookEvent.forceKeepAttr = void 0;
814
+ _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
815
+ value = hookEvent.attrValue;
816
+ if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) {
817
+ _removeAttribute(name, currentNode);
818
+ value = SANITIZE_NAMED_PROPS_PREFIX + value;
819
+ }
820
+ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title|textarea)/i, value)) {
821
+ _removeAttribute(name, currentNode);
822
+ continue;
823
+ }
824
+ if (lcName === "attributename" && stringMatch(value, "href")) {
825
+ _removeAttribute(name, currentNode);
826
+ continue;
827
+ }
828
+ if (hookEvent.forceKeepAttr) {
829
+ continue;
830
+ }
831
+ if (!hookEvent.keepAttr) {
832
+ _removeAttribute(name, currentNode);
833
+ continue;
834
+ }
835
+ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
836
+ _removeAttribute(name, currentNode);
837
+ continue;
838
+ }
839
+ if (SAFE_FOR_TEMPLATES) {
840
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
841
+ value = stringReplace(value, expr, " ");
842
+ });
843
+ }
844
+ const lcTag = transformCaseFunc(currentNode.nodeName);
845
+ if (!_isValidAttribute(lcTag, lcName, value)) {
846
+ _removeAttribute(name, currentNode);
847
+ continue;
848
+ }
849
+ if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function") {
850
+ if (namespaceURI) ;
851
+ else {
852
+ switch (trustedTypes.getAttributeType(lcTag, lcName)) {
853
+ case "TrustedHTML": {
854
+ value = trustedTypesPolicy.createHTML(value);
855
+ break;
856
+ }
857
+ case "TrustedScriptURL": {
858
+ value = trustedTypesPolicy.createScriptURL(value);
859
+ break;
860
+ }
861
+ }
862
+ }
863
+ }
864
+ if (value !== initValue) {
865
+ try {
866
+ if (namespaceURI) {
867
+ currentNode.setAttributeNS(namespaceURI, name, value);
868
+ } else {
869
+ currentNode.setAttribute(name, value);
870
+ }
871
+ if (_isClobbered(currentNode)) {
872
+ _forceRemove(currentNode);
873
+ } else {
874
+ arrayPop(DOMPurify.removed);
875
+ }
876
+ } catch (_2) {
877
+ _removeAttribute(name, currentNode);
878
+ }
879
+ }
880
+ }
881
+ _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
882
+ };
883
+ const _sanitizeShadowDOM = function _sanitizeShadowDOM2(fragment) {
884
+ let shadowNode = null;
885
+ const shadowIterator = _createNodeIterator(fragment);
886
+ _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
887
+ while (shadowNode = shadowIterator.nextNode()) {
888
+ _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
889
+ _sanitizeElements(shadowNode);
890
+ _sanitizeAttributes(shadowNode);
891
+ if (shadowNode.content instanceof DocumentFragment) {
892
+ _sanitizeShadowDOM2(shadowNode.content);
893
+ }
894
+ }
895
+ _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
896
+ };
897
+ DOMPurify.sanitize = function(dirty) {
898
+ let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
899
+ let body = null;
900
+ let importedNode = null;
901
+ let currentNode = null;
902
+ let returnNode = null;
903
+ IS_EMPTY_INPUT = !dirty;
904
+ if (IS_EMPTY_INPUT) {
905
+ dirty = "<!-->";
906
+ }
907
+ if (typeof dirty !== "string" && !_isNode(dirty)) {
908
+ if (typeof dirty.toString === "function") {
909
+ dirty = dirty.toString();
910
+ if (typeof dirty !== "string") {
911
+ throw typeErrorCreate("dirty is not a string, aborting");
912
+ }
913
+ } else {
914
+ throw typeErrorCreate("toString is not a function");
915
+ }
916
+ }
917
+ if (!DOMPurify.isSupported) {
918
+ return dirty;
919
+ }
920
+ if (!SET_CONFIG) {
921
+ _parseConfig(cfg);
922
+ }
923
+ DOMPurify.removed = [];
924
+ if (typeof dirty === "string") {
925
+ IN_PLACE = false;
926
+ }
927
+ if (IN_PLACE) {
928
+ if (dirty.nodeName) {
929
+ const tagName = transformCaseFunc(dirty.nodeName);
930
+ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
931
+ throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
932
+ }
933
+ }
934
+ } else if (dirty instanceof Node) {
935
+ body = _initDocument("<!---->");
936
+ importedNode = body.ownerDocument.importNode(dirty, true);
937
+ if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") {
938
+ body = importedNode;
939
+ } else if (importedNode.nodeName === "HTML") {
940
+ body = importedNode;
941
+ } else {
942
+ body.appendChild(importedNode);
943
+ }
944
+ } else {
945
+ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes
946
+ dirty.indexOf("<") === -1) {
947
+ return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
948
+ }
949
+ body = _initDocument(dirty);
950
+ if (!body) {
951
+ return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
952
+ }
953
+ }
954
+ if (body && FORCE_BODY) {
955
+ _forceRemove(body.firstChild);
956
+ }
957
+ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
958
+ while (currentNode = nodeIterator.nextNode()) {
959
+ _sanitizeElements(currentNode);
960
+ _sanitizeAttributes(currentNode);
961
+ if (currentNode.content instanceof DocumentFragment) {
962
+ _sanitizeShadowDOM(currentNode.content);
963
+ }
964
+ }
965
+ if (IN_PLACE) {
966
+ return dirty;
967
+ }
968
+ if (RETURN_DOM) {
969
+ if (RETURN_DOM_FRAGMENT) {
970
+ returnNode = createDocumentFragment.call(body.ownerDocument);
971
+ while (body.firstChild) {
972
+ returnNode.appendChild(body.firstChild);
973
+ }
974
+ } else {
975
+ returnNode = body;
976
+ }
977
+ if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {
978
+ returnNode = importNode.call(originalDocument, returnNode, true);
979
+ }
980
+ return returnNode;
981
+ }
982
+ let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
983
+ if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
984
+ serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
985
+ }
986
+ if (SAFE_FOR_TEMPLATES) {
987
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
988
+ serializedHTML = stringReplace(serializedHTML, expr, " ");
989
+ });
990
+ }
991
+ return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
992
+ };
993
+ DOMPurify.setConfig = function() {
994
+ let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
995
+ _parseConfig(cfg);
996
+ SET_CONFIG = true;
997
+ };
998
+ DOMPurify.clearConfig = function() {
999
+ CONFIG = null;
1000
+ SET_CONFIG = false;
1001
+ };
1002
+ DOMPurify.isValidAttribute = function(tag, attr, value) {
1003
+ if (!CONFIG) {
1004
+ _parseConfig({});
1005
+ }
1006
+ const lcTag = transformCaseFunc(tag);
1007
+ const lcName = transformCaseFunc(attr);
1008
+ return _isValidAttribute(lcTag, lcName, value);
1009
+ };
1010
+ DOMPurify.addHook = function(entryPoint, hookFunction) {
1011
+ if (typeof hookFunction !== "function") {
1012
+ return;
1013
+ }
1014
+ arrayPush(hooks[entryPoint], hookFunction);
1015
+ };
1016
+ DOMPurify.removeHook = function(entryPoint, hookFunction) {
1017
+ if (hookFunction !== void 0) {
1018
+ const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
1019
+ return index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];
1020
+ }
1021
+ return arrayPop(hooks[entryPoint]);
1022
+ };
1023
+ DOMPurify.removeHooks = function(entryPoint) {
1024
+ hooks[entryPoint] = [];
1025
+ };
1026
+ DOMPurify.removeAllHooks = function() {
1027
+ hooks = _createHooksMap();
1028
+ };
1029
+ return DOMPurify;
1030
+ }
1031
+ var purify = createDOMPurify();
1032
+
1033
+ // ../../../node_modules/marked/lib/marked.esm.js
1034
+ function M() {
1035
+ return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
1036
+ }
1037
+ var T = M();
1038
+ function G(u3) {
1039
+ T = u3;
1040
+ }
1041
+ var _ = { exec: () => null };
1042
+ function k(u3, e = "") {
1043
+ let t = typeof u3 == "string" ? u3 : u3.source, n = { replace: (r, i) => {
1044
+ let s = typeof i == "string" ? i : i.source;
1045
+ return s = s.replace(m.caret, "$1"), t = t.replace(r, s), n;
1046
+ }, getRegex: () => new RegExp(t, e) };
1047
+ return n;
1048
+ }
1049
+ var Re = (() => {
1050
+ try {
1051
+ return !!new RegExp("(?<=1)(?<!1)");
1052
+ } catch {
1053
+ return false;
1054
+ }
1055
+ })();
1056
+ var m = { codeRemoveIndent: /^(?: {1,4}| {0,3}\t)/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (u3) => new RegExp(`^( {0,3}${u3})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`), hrRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`), fencesBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}(?:\`\`\`|~~~)`), headingBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}#`), htmlBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}<(?:[a-z].*>|!--)`, "i"), blockquoteBeginRegex: (u3) => new RegExp(`^ {0,${Math.min(3, u3 - 1)}}>`) };
1057
+ var Te = /^(?:[ \t]*(?:\n|$))+/;
1058
+ var Oe = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/;
1059
+ var we = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/;
1060
+ var A = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/;
1061
+ var ye = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/;
1062
+ var N = / {0,3}(?:[*+-]|\d{1,9}[.)])/;
1063
+ var re = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/;
1064
+ var se = k(re).replace(/bull/g, N).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}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex();
1065
+ var Pe = k(re).replace(/bull/g, N).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}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex();
1066
+ var Q = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/;
1067
+ var Se = /^[^\n]+/;
1068
+ var j = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/;
1069
+ var $e = k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", j).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex();
1070
+ var _e = k(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, N).getRegex();
1071
+ var q = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
1072
+ var F = /<!--(?:-?>|[\s\S]*?(?:-->|$))/;
1073
+ var Le = k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", F).replace("tag", q).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
1074
+ var ie = k(Q).replace("hr", A).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", q).getRegex();
1075
+ var Me = k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", ie).getRegex();
1076
+ var U = { blockquote: Me, code: Oe, def: $e, fences: we, heading: ye, hr: A, html: Le, lheading: se, list: _e, newline: Te, paragraph: ie, table: _, text: Se };
1077
+ var te = k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", A).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", q).getRegex();
1078
+ var ze = { ...U, lheading: Pe, table: te, paragraph: k(Q).replace("hr", A).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", te).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", q).getRegex() };
1079
+ var Ee = { ...U, html: k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", F).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: _, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: k(Q).replace("hr", A).replace("heading", ` *#{1,6} *[^
1080
+ ]`).replace("lheading", se).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() };
1081
+ var Ie = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/;
1082
+ var Ae = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/;
1083
+ var oe = /^( {2,}|\\)\n(?!\s*$)/;
1084
+ var Ce = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/;
1085
+ var v = /[\p{P}\p{S}]/u;
1086
+ var K = /[\s\p{P}\p{S}]/u;
1087
+ var ae = /[^\s\p{P}\p{S}]/u;
1088
+ var Be = k(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, K).getRegex();
1089
+ var le = /(?!~)[\p{P}\p{S}]/u;
1090
+ var De = /(?!~)[\s\p{P}\p{S}]/u;
1091
+ var qe = /(?:[^\s\p{P}\p{S}]|~)/u;
1092
+ var ue = /(?![*_])[\p{P}\p{S}]/u;
1093
+ var ve = /(?![*_])[\s\p{P}\p{S}]/u;
1094
+ var He = /(?:[^\s\p{P}\p{S}]|[*_])/u;
1095
+ var Ge = k(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", Re ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex();
1096
+ var pe = /^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/;
1097
+ var Ze = k(pe, "u").replace(/punct/g, v).getRegex();
1098
+ var Ne = k(pe, "u").replace(/punct/g, le).getRegex();
1099
+ var ce = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)";
1100
+ var Qe = k(ce, "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, v).getRegex();
1101
+ var je = k(ce, "gu").replace(/notPunctSpace/g, qe).replace(/punctSpace/g, De).replace(/punct/g, le).getRegex();
1102
+ var Fe = k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, ae).replace(/punctSpace/g, K).replace(/punct/g, v).getRegex();
1103
+ var Ue = k(/^~~?(?:((?!~)punct)|[^\s~])/, "u").replace(/punct/g, ue).getRegex();
1104
+ var Ke = "^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)";
1105
+ var We = k(Ke, "gu").replace(/notPunctSpace/g, He).replace(/punctSpace/g, ve).replace(/punct/g, ue).getRegex();
1106
+ var Xe = k(/\\(punct)/, "gu").replace(/punct/g, v).getRegex();
1107
+ var Je = k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex();
1108
+ var Ve = k(F).replace("(?:-->|$)", "-->").getRegex();
1109
+ var Ye = k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", Ve).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex();
1110
+ var D = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/;
1111
+ var et = k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label", D).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex();
1112
+ var he = k(/^!?\[(label)\]\[(ref)\]/).replace("label", D).replace("ref", j).getRegex();
1113
+ var ke = k(/^!?\[(ref)\](?:\[\])?/).replace("ref", j).getRegex();
1114
+ var tt = k("reflink|nolink(?!\\()", "g").replace("reflink", he).replace("nolink", ke).getRegex();
1115
+ var ne = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;
1116
+ var W = { _backpedal: _, anyPunctuation: Xe, autolink: Je, blockSkip: Ge, br: oe, code: Ae, del: _, delLDelim: _, delRDelim: _, emStrongLDelim: Ze, emStrongRDelimAst: Qe, emStrongRDelimUnd: Fe, escape: Ie, link: et, nolink: ke, punctuation: Be, reflink: he, reflinkSearch: tt, tag: Ye, text: Ce, url: _ };
1117
+ var nt = { ...W, link: k(/^!?\[(label)\]\((.*?)\)/).replace("label", D).getRegex(), reflink: k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", D).getRegex() };
1118
+ var Z = { ...W, emStrongRDelimAst: je, emStrongLDelim: Ne, delLDelim: Ue, delRDelim: We, url: k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", ne).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", ne).getRegex() };
1119
+ var rt = { ...Z, br: k(oe).replace("{2,}", "*").getRegex(), text: k(Z.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() };
1120
+ var C = { normal: U, gfm: ze, pedantic: Ee };
1121
+ var z = { normal: W, gfm: Z, breaks: rt, pedantic: nt };
1122
+ var st = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" };
1123
+ var de = (u3) => st[u3];
1124
+ function O(u3, e) {
1125
+ if (e) {
1126
+ if (m.escapeTest.test(u3)) return u3.replace(m.escapeReplace, de);
1127
+ } else if (m.escapeTestNoEncode.test(u3)) return u3.replace(m.escapeReplaceNoEncode, de);
1128
+ return u3;
1129
+ }
1130
+ function X(u3) {
1131
+ try {
1132
+ u3 = encodeURI(u3).replace(m.percentDecode, "%");
1133
+ } catch {
1134
+ return null;
1135
+ }
1136
+ return u3;
1137
+ }
1138
+ function J(u3, e) {
1139
+ let t = u3.replace(m.findPipe, (i, s, a) => {
1140
+ let o = false, l = s;
1141
+ for (; --l >= 0 && a[l] === "\\"; ) o = !o;
1142
+ return o ? "|" : " |";
1143
+ }), n = t.split(m.splitPipe), r = 0;
1144
+ if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e) if (n.length > e) n.splice(e);
1145
+ else for (; n.length < e; ) n.push("");
1146
+ for (; r < n.length; r++) n[r] = n[r].trim().replace(m.slashPipe, "|");
1147
+ return n;
1148
+ }
1149
+ function E(u3, e, t) {
1150
+ let n = u3.length;
1151
+ if (n === 0) return "";
1152
+ let r = 0;
1153
+ for (; r < n; ) {
1154
+ let i = u3.charAt(n - r - 1);
1155
+ if (i === e && !t) r++;
1156
+ else if (i !== e && t) r++;
1157
+ else break;
1158
+ }
1159
+ return u3.slice(0, n - r);
1160
+ }
1161
+ function ge(u3, e) {
1162
+ if (u3.indexOf(e[1]) === -1) return -1;
1163
+ let t = 0;
1164
+ for (let n = 0; n < u3.length; n++) if (u3[n] === "\\") n++;
1165
+ else if (u3[n] === e[0]) t++;
1166
+ else if (u3[n] === e[1] && (t--, t < 0)) return n;
1167
+ return t > 0 ? -2 : -1;
1168
+ }
1169
+ function fe(u3, e = 0) {
1170
+ let t = e, n = "";
1171
+ for (let r of u3) if (r === " ") {
1172
+ let i = 4 - t % 4;
1173
+ n += " ".repeat(i), t += i;
1174
+ } else n += r, t++;
1175
+ return n;
1176
+ }
1177
+ function me(u3, e, t, n, r) {
1178
+ let i = e.href, s = e.title || null, a = u3[1].replace(r.other.outputLinkReplace, "$1");
1179
+ n.state.inLink = true;
1180
+ let o = { type: u3[0].charAt(0) === "!" ? "image" : "link", raw: t, href: i, title: s, text: a, tokens: n.inlineTokens(a) };
1181
+ return n.state.inLink = false, o;
1182
+ }
1183
+ function it(u3, e, t) {
1184
+ let n = u3.match(t.other.indentCodeCompensation);
1185
+ if (n === null) return e;
1186
+ let r = n[1];
1187
+ return e.split(`
1188
+ `).map((i) => {
1189
+ let s = i.match(t.other.beginningSpace);
1190
+ if (s === null) return i;
1191
+ let [a] = s;
1192
+ return a.length >= r.length ? i.slice(r.length) : i;
1193
+ }).join(`
1194
+ `);
1195
+ }
1196
+ var w = class {
1197
+ constructor(e) {
1198
+ __publicField(this, "options");
1199
+ __publicField(this, "rules");
1200
+ __publicField(this, "lexer");
1201
+ this.options = e || T;
1202
+ }
1203
+ space(e) {
1204
+ let t = this.rules.block.newline.exec(e);
1205
+ if (t && t[0].length > 0) return { type: "space", raw: t[0] };
1206
+ }
1207
+ code(e) {
1208
+ let t = this.rules.block.code.exec(e);
1209
+ if (t) {
1210
+ let n = t[0].replace(this.rules.other.codeRemoveIndent, "");
1211
+ return { type: "code", raw: t[0], codeBlockStyle: "indented", text: this.options.pedantic ? n : E(n, `
1212
+ `) };
1213
+ }
1214
+ }
1215
+ fences(e) {
1216
+ let t = this.rules.block.fences.exec(e);
1217
+ if (t) {
1218
+ let n = t[0], r = it(n, t[3] || "", this.rules);
1219
+ return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: r };
1220
+ }
1221
+ }
1222
+ heading(e) {
1223
+ let t = this.rules.block.heading.exec(e);
1224
+ if (t) {
1225
+ let n = t[2].trim();
1226
+ if (this.rules.other.endingHash.test(n)) {
1227
+ let r = E(n, "#");
1228
+ (this.options.pedantic || !r || this.rules.other.endingSpaceChar.test(r)) && (n = r.trim());
1229
+ }
1230
+ return { type: "heading", raw: t[0], depth: t[1].length, text: n, tokens: this.lexer.inline(n) };
1231
+ }
1232
+ }
1233
+ hr(e) {
1234
+ let t = this.rules.block.hr.exec(e);
1235
+ if (t) return { type: "hr", raw: E(t[0], `
1236
+ `) };
1237
+ }
1238
+ blockquote(e) {
1239
+ let t = this.rules.block.blockquote.exec(e);
1240
+ if (t) {
1241
+ let n = E(t[0], `
1242
+ `).split(`
1243
+ `), r = "", i = "", s = [];
1244
+ for (; n.length > 0; ) {
1245
+ let a = false, o = [], l;
1246
+ for (l = 0; l < n.length; l++) if (this.rules.other.blockquoteStart.test(n[l])) o.push(n[l]), a = true;
1247
+ else if (!a) o.push(n[l]);
1248
+ else break;
1249
+ n = n.slice(l);
1250
+ let p = o.join(`
1251
+ `), c = p.replace(this.rules.other.blockquoteSetextReplace, `
1252
+ $1`).replace(this.rules.other.blockquoteSetextReplace2, "");
1253
+ r = r ? `${r}
1254
+ ${p}` : p, i = i ? `${i}
1255
+ ${c}` : c;
1256
+ let d = this.lexer.state.top;
1257
+ if (this.lexer.state.top = true, this.lexer.blockTokens(c, s, true), this.lexer.state.top = d, n.length === 0) break;
1258
+ let h = s.at(-1);
1259
+ if (h?.type === "code") break;
1260
+ if (h?.type === "blockquote") {
1261
+ let R = h, f = R.raw + `
1262
+ ` + n.join(`
1263
+ `), S = this.blockquote(f);
1264
+ s[s.length - 1] = S, r = r.substring(0, r.length - R.raw.length) + S.raw, i = i.substring(0, i.length - R.text.length) + S.text;
1265
+ break;
1266
+ } else if (h?.type === "list") {
1267
+ let R = h, f = R.raw + `
1268
+ ` + n.join(`
1269
+ `), S = this.list(f);
1270
+ s[s.length - 1] = S, r = r.substring(0, r.length - h.raw.length) + S.raw, i = i.substring(0, i.length - R.raw.length) + S.raw, n = f.substring(s.at(-1).raw.length).split(`
1271
+ `);
1272
+ continue;
1273
+ }
1274
+ }
1275
+ return { type: "blockquote", raw: r, tokens: s, text: i };
1276
+ }
1277
+ }
1278
+ list(e) {
1279
+ let t = this.rules.block.list.exec(e);
1280
+ if (t) {
1281
+ let n = t[1].trim(), r = n.length > 1, i = { type: "list", raw: "", ordered: r, start: r ? +n.slice(0, -1) : "", loose: false, items: [] };
1282
+ n = r ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = r ? n : "[*+-]");
1283
+ let s = this.rules.other.listItemRegex(n), a = false;
1284
+ for (; e; ) {
1285
+ let l = false, p = "", c = "";
1286
+ if (!(t = s.exec(e)) || this.rules.block.hr.test(e)) break;
1287
+ p = t[0], e = e.substring(p.length);
1288
+ let d = fe(t[2].split(`
1289
+ `, 1)[0], t[1].length), h = e.split(`
1290
+ `, 1)[0], R = !d.trim(), f = 0;
1291
+ if (this.options.pedantic ? (f = 2, c = d.trimStart()) : R ? f = t[1].length + 1 : (f = d.search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, c = d.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (p += h + `
1292
+ `, e = e.substring(h.length + 1), l = true), !l) {
1293
+ let S = this.rules.other.nextBulletRegex(f), V = this.rules.other.hrRegex(f), Y = this.rules.other.fencesBeginRegex(f), ee = this.rules.other.headingBeginRegex(f), xe = this.rules.other.htmlBeginRegex(f), be = this.rules.other.blockquoteBeginRegex(f);
1294
+ for (; e; ) {
1295
+ let H = e.split(`
1296
+ `, 1)[0], I;
1297
+ if (h = H, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, " "), I = h) : I = h.replace(this.rules.other.tabCharGlobal, " "), Y.test(h) || ee.test(h) || xe.test(h) || be.test(h) || S.test(h) || V.test(h)) break;
1298
+ if (I.search(this.rules.other.nonSpaceChar) >= f || !h.trim()) c += `
1299
+ ` + I.slice(f);
1300
+ else {
1301
+ if (R || d.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || Y.test(d) || ee.test(d) || V.test(d)) break;
1302
+ c += `
1303
+ ` + h;
1304
+ }
1305
+ R = !h.trim(), p += H + `
1306
+ `, e = e.substring(H.length + 1), d = I.slice(f);
1307
+ }
1308
+ }
1309
+ i.loose || (a ? i.loose = true : this.rules.other.doubleBlankLine.test(p) && (a = true)), i.items.push({ type: "list_item", raw: p, task: !!this.options.gfm && this.rules.other.listIsTask.test(c), loose: false, text: c, tokens: [] }), i.raw += p;
1310
+ }
1311
+ let o = i.items.at(-1);
1312
+ if (o) o.raw = o.raw.trimEnd(), o.text = o.text.trimEnd();
1313
+ else return;
1314
+ i.raw = i.raw.trimEnd();
1315
+ for (let l of i.items) {
1316
+ if (this.lexer.state.top = false, l.tokens = this.lexer.blockTokens(l.text, []), l.task) {
1317
+ if (l.text = l.text.replace(this.rules.other.listReplaceTask, ""), l.tokens[0]?.type === "text" || l.tokens[0]?.type === "paragraph") {
1318
+ l.tokens[0].raw = l.tokens[0].raw.replace(this.rules.other.listReplaceTask, ""), l.tokens[0].text = l.tokens[0].text.replace(this.rules.other.listReplaceTask, "");
1319
+ for (let c = this.lexer.inlineQueue.length - 1; c >= 0; c--) if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)) {
1320
+ this.lexer.inlineQueue[c].src = this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask, "");
1321
+ break;
1322
+ }
1323
+ }
1324
+ let p = this.rules.other.listTaskCheckbox.exec(l.raw);
1325
+ if (p) {
1326
+ let c = { type: "checkbox", raw: p[0] + " ", checked: p[0] !== "[ ]" };
1327
+ l.checked = c.checked, i.loose ? l.tokens[0] && ["paragraph", "text"].includes(l.tokens[0].type) && "tokens" in l.tokens[0] && l.tokens[0].tokens ? (l.tokens[0].raw = c.raw + l.tokens[0].raw, l.tokens[0].text = c.raw + l.tokens[0].text, l.tokens[0].tokens.unshift(c)) : l.tokens.unshift({ type: "paragraph", raw: c.raw, text: c.raw, tokens: [c] }) : l.tokens.unshift(c);
1328
+ }
1329
+ }
1330
+ if (!i.loose) {
1331
+ let p = l.tokens.filter((d) => d.type === "space"), c = p.length > 0 && p.some((d) => this.rules.other.anyLine.test(d.raw));
1332
+ i.loose = c;
1333
+ }
1334
+ }
1335
+ if (i.loose) for (let l of i.items) {
1336
+ l.loose = true;
1337
+ for (let p of l.tokens) p.type === "text" && (p.type = "paragraph");
1338
+ }
1339
+ return i;
1340
+ }
1341
+ }
1342
+ html(e) {
1343
+ let t = this.rules.block.html.exec(e);
1344
+ if (t) return { type: "html", block: true, raw: t[0], pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: t[0] };
1345
+ }
1346
+ def(e) {
1347
+ let t = this.rules.block.def.exec(e);
1348
+ if (t) {
1349
+ let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), r = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", i = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3];
1350
+ return { type: "def", tag: n, raw: t[0], href: r, title: i };
1351
+ }
1352
+ }
1353
+ table(e) {
1354
+ let t = this.rules.block.table.exec(e);
1355
+ if (!t || !this.rules.other.tableDelimiter.test(t[2])) return;
1356
+ let n = J(t[1]), r = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), i = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(`
1357
+ `) : [], s = { type: "table", raw: t[0], header: [], align: [], rows: [] };
1358
+ if (n.length === r.length) {
1359
+ for (let a of r) this.rules.other.tableAlignRight.test(a) ? s.align.push("right") : this.rules.other.tableAlignCenter.test(a) ? s.align.push("center") : this.rules.other.tableAlignLeft.test(a) ? s.align.push("left") : s.align.push(null);
1360
+ for (let a = 0; a < n.length; a++) s.header.push({ text: n[a], tokens: this.lexer.inline(n[a]), header: true, align: s.align[a] });
1361
+ for (let a of i) s.rows.push(J(a, s.header.length).map((o, l) => ({ text: o, tokens: this.lexer.inline(o), header: false, align: s.align[l] })));
1362
+ return s;
1363
+ }
1364
+ }
1365
+ lheading(e) {
1366
+ let t = this.rules.block.lheading.exec(e);
1367
+ if (t) return { type: "heading", raw: t[0], depth: t[2].charAt(0) === "=" ? 1 : 2, text: t[1], tokens: this.lexer.inline(t[1]) };
1368
+ }
1369
+ paragraph(e) {
1370
+ let t = this.rules.block.paragraph.exec(e);
1371
+ if (t) {
1372
+ let n = t[1].charAt(t[1].length - 1) === `
1373
+ ` ? t[1].slice(0, -1) : t[1];
1374
+ return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) };
1375
+ }
1376
+ }
1377
+ text(e) {
1378
+ let t = this.rules.block.text.exec(e);
1379
+ if (t) return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) };
1380
+ }
1381
+ escape(e) {
1382
+ let t = this.rules.inline.escape.exec(e);
1383
+ if (t) return { type: "escape", raw: t[0], text: t[1] };
1384
+ }
1385
+ tag(e) {
1386
+ let t = this.rules.inline.tag.exec(e);
1387
+ 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] };
1388
+ }
1389
+ link(e) {
1390
+ let t = this.rules.inline.link.exec(e);
1391
+ if (t) {
1392
+ let n = t[2].trim();
1393
+ if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) {
1394
+ if (!this.rules.other.endAngleBracket.test(n)) return;
1395
+ let s = E(n.slice(0, -1), "\\");
1396
+ if ((n.length - s.length) % 2 === 0) return;
1397
+ } else {
1398
+ let s = ge(t[2], "()");
1399
+ if (s === -2) return;
1400
+ if (s > -1) {
1401
+ let o = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + s;
1402
+ t[2] = t[2].substring(0, s), t[0] = t[0].substring(0, o).trim(), t[3] = "";
1403
+ }
1404
+ }
1405
+ let r = t[2], i = "";
1406
+ if (this.options.pedantic) {
1407
+ let s = this.rules.other.pedanticHrefTitle.exec(r);
1408
+ s && (r = s[1], i = s[3]);
1409
+ } else i = t[3] ? t[3].slice(1, -1) : "";
1410
+ return r = r.trim(), this.rules.other.startAngleBracket.test(r) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? r = r.slice(1) : r = r.slice(1, -1)), me(t, { href: r && r.replace(this.rules.inline.anyPunctuation, "$1"), title: i && i.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules);
1411
+ }
1412
+ }
1413
+ reflink(e, t) {
1414
+ let n;
1415
+ if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) {
1416
+ let r = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i = t[r.toLowerCase()];
1417
+ if (!i) {
1418
+ let s = n[0].charAt(0);
1419
+ return { type: "text", raw: s, text: s };
1420
+ }
1421
+ return me(n, i, n[0], this.lexer, this.rules);
1422
+ }
1423
+ }
1424
+ emStrong(e, t, n = "") {
1425
+ let r = this.rules.inline.emStrongLDelim.exec(e);
1426
+ if (!r || r[3] && n.match(this.rules.other.unicodeAlphaNumeric)) return;
1427
+ if (!(r[1] || r[2] || "") || !n || this.rules.inline.punctuation.exec(n)) {
1428
+ let s = [...r[0]].length - 1, a, o, l = s, p = 0, c = r[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
1429
+ for (c.lastIndex = 0, t = t.slice(-1 * e.length + s); (r = c.exec(t)) != null; ) {
1430
+ if (a = r[1] || r[2] || r[3] || r[4] || r[5] || r[6], !a) continue;
1431
+ if (o = [...a].length, r[3] || r[4]) {
1432
+ l += o;
1433
+ continue;
1434
+ } else if ((r[5] || r[6]) && s % 3 && !((s + o) % 3)) {
1435
+ p += o;
1436
+ continue;
1437
+ }
1438
+ if (l -= o, l > 0) continue;
1439
+ o = Math.min(o, o + l + p);
1440
+ let d = [...r[0]][0].length, h = e.slice(0, s + r.index + d + o);
1441
+ if (Math.min(s, o) % 2) {
1442
+ let f = h.slice(1, -1);
1443
+ return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) };
1444
+ }
1445
+ let R = h.slice(2, -2);
1446
+ return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) };
1447
+ }
1448
+ }
1449
+ }
1450
+ codespan(e) {
1451
+ let t = this.rules.inline.code.exec(e);
1452
+ if (t) {
1453
+ let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), r = this.rules.other.nonSpaceChar.test(n), i = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n);
1454
+ return r && i && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n };
1455
+ }
1456
+ }
1457
+ br(e) {
1458
+ let t = this.rules.inline.br.exec(e);
1459
+ if (t) return { type: "br", raw: t[0] };
1460
+ }
1461
+ del(e, t, n = "") {
1462
+ let r = this.rules.inline.delLDelim.exec(e);
1463
+ if (!r) return;
1464
+ if (!(r[1] || "") || !n || this.rules.inline.punctuation.exec(n)) {
1465
+ let s = [...r[0]].length - 1, a, o, l = s, p = this.rules.inline.delRDelim;
1466
+ for (p.lastIndex = 0, t = t.slice(-1 * e.length + s); (r = p.exec(t)) != null; ) {
1467
+ if (a = r[1] || r[2] || r[3] || r[4] || r[5] || r[6], !a || (o = [...a].length, o !== s)) continue;
1468
+ if (r[3] || r[4]) {
1469
+ l += o;
1470
+ continue;
1471
+ }
1472
+ if (l -= o, l > 0) continue;
1473
+ o = Math.min(o, o + l);
1474
+ let c = [...r[0]][0].length, d = e.slice(0, s + r.index + c + o), h = d.slice(s, -s);
1475
+ return { type: "del", raw: d, text: h, tokens: this.lexer.inlineTokens(h) };
1476
+ }
1477
+ }
1478
+ }
1479
+ autolink(e) {
1480
+ let t = this.rules.inline.autolink.exec(e);
1481
+ if (t) {
1482
+ let n, r;
1483
+ return t[2] === "@" ? (n = t[1], r = "mailto:" + n) : (n = t[1], r = n), { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
1484
+ }
1485
+ }
1486
+ url(e) {
1487
+ let t;
1488
+ if (t = this.rules.inline.url.exec(e)) {
1489
+ let n, r;
1490
+ if (t[2] === "@") n = t[0], r = "mailto:" + n;
1491
+ else {
1492
+ let i;
1493
+ do
1494
+ i = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? "";
1495
+ while (i !== t[0]);
1496
+ n = t[0], t[1] === "www." ? r = "http://" + t[0] : r = t[0];
1497
+ }
1498
+ return { type: "link", raw: t[0], text: n, href: r, tokens: [{ type: "text", raw: n, text: n }] };
1499
+ }
1500
+ }
1501
+ inlineText(e) {
1502
+ let t = this.rules.inline.text.exec(e);
1503
+ if (t) {
1504
+ let n = this.lexer.state.inRawBlock;
1505
+ return { type: "text", raw: t[0], text: t[0], escaped: n };
1506
+ }
1507
+ }
1508
+ };
1509
+ var x = class u {
1510
+ constructor(e) {
1511
+ __publicField(this, "tokens");
1512
+ __publicField(this, "options");
1513
+ __publicField(this, "state");
1514
+ __publicField(this, "inlineQueue");
1515
+ __publicField(this, "tokenizer");
1516
+ this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new w(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true };
1517
+ let t = { other: m, block: C.normal, inline: z.normal };
1518
+ this.options.pedantic ? (t.block = C.pedantic, t.inline = z.pedantic) : this.options.gfm && (t.block = C.gfm, this.options.breaks ? t.inline = z.breaks : t.inline = z.gfm), this.tokenizer.rules = t;
1519
+ }
1520
+ static get rules() {
1521
+ return { block: C, inline: z };
1522
+ }
1523
+ static lex(e, t) {
1524
+ return new u(t).lex(e);
1525
+ }
1526
+ static lexInline(e, t) {
1527
+ return new u(t).inlineTokens(e);
1528
+ }
1529
+ lex(e) {
1530
+ e = e.replace(m.carriageReturn, `
1531
+ `), this.blockTokens(e, this.tokens);
1532
+ for (let t = 0; t < this.inlineQueue.length; t++) {
1533
+ let n = this.inlineQueue[t];
1534
+ this.inlineTokens(n.src, n.tokens);
1535
+ }
1536
+ return this.inlineQueue = [], this.tokens;
1537
+ }
1538
+ blockTokens(e, t = [], n = false) {
1539
+ for (this.options.pedantic && (e = e.replace(m.tabCharGlobal, " ").replace(m.spaceLine, "")); e; ) {
1540
+ let r;
1541
+ if (this.options.extensions?.block?.some((s) => (r = s.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false)) continue;
1542
+ if (r = this.tokenizer.space(e)) {
1543
+ e = e.substring(r.raw.length);
1544
+ let s = t.at(-1);
1545
+ r.raw.length === 1 && s !== void 0 ? s.raw += `
1546
+ ` : t.push(r);
1547
+ continue;
1548
+ }
1549
+ if (r = this.tokenizer.code(e)) {
1550
+ e = e.substring(r.raw.length);
1551
+ let s = t.at(-1);
1552
+ s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
1553
+ `) ? "" : `
1554
+ `) + r.raw, s.text += `
1555
+ ` + r.text, this.inlineQueue.at(-1).src = s.text) : t.push(r);
1556
+ continue;
1557
+ }
1558
+ if (r = this.tokenizer.fences(e)) {
1559
+ e = e.substring(r.raw.length), t.push(r);
1560
+ continue;
1561
+ }
1562
+ if (r = this.tokenizer.heading(e)) {
1563
+ e = e.substring(r.raw.length), t.push(r);
1564
+ continue;
1565
+ }
1566
+ if (r = this.tokenizer.hr(e)) {
1567
+ e = e.substring(r.raw.length), t.push(r);
1568
+ continue;
1569
+ }
1570
+ if (r = this.tokenizer.blockquote(e)) {
1571
+ e = e.substring(r.raw.length), t.push(r);
1572
+ continue;
1573
+ }
1574
+ if (r = this.tokenizer.list(e)) {
1575
+ e = e.substring(r.raw.length), t.push(r);
1576
+ continue;
1577
+ }
1578
+ if (r = this.tokenizer.html(e)) {
1579
+ e = e.substring(r.raw.length), t.push(r);
1580
+ continue;
1581
+ }
1582
+ if (r = this.tokenizer.def(e)) {
1583
+ e = e.substring(r.raw.length);
1584
+ let s = t.at(-1);
1585
+ s?.type === "paragraph" || s?.type === "text" ? (s.raw += (s.raw.endsWith(`
1586
+ `) ? "" : `
1587
+ `) + r.raw, s.text += `
1588
+ ` + r.raw, this.inlineQueue.at(-1).src = s.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r));
1589
+ continue;
1590
+ }
1591
+ if (r = this.tokenizer.table(e)) {
1592
+ e = e.substring(r.raw.length), t.push(r);
1593
+ continue;
1594
+ }
1595
+ if (r = this.tokenizer.lheading(e)) {
1596
+ e = e.substring(r.raw.length), t.push(r);
1597
+ continue;
1598
+ }
1599
+ let i = e;
1600
+ if (this.options.extensions?.startBlock) {
1601
+ let s = 1 / 0, a = e.slice(1), o;
1602
+ this.options.extensions.startBlock.forEach((l) => {
1603
+ o = l.call({ lexer: this }, a), typeof o == "number" && o >= 0 && (s = Math.min(s, o));
1604
+ }), s < 1 / 0 && s >= 0 && (i = e.substring(0, s + 1));
1605
+ }
1606
+ if (this.state.top && (r = this.tokenizer.paragraph(i))) {
1607
+ let s = t.at(-1);
1608
+ n && s?.type === "paragraph" ? (s.raw += (s.raw.endsWith(`
1609
+ `) ? "" : `
1610
+ `) + r.raw, s.text += `
1611
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r), n = i.length !== e.length, e = e.substring(r.raw.length);
1612
+ continue;
1613
+ }
1614
+ if (r = this.tokenizer.text(e)) {
1615
+ e = e.substring(r.raw.length);
1616
+ let s = t.at(-1);
1617
+ s?.type === "text" ? (s.raw += (s.raw.endsWith(`
1618
+ `) ? "" : `
1619
+ `) + r.raw, s.text += `
1620
+ ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s.text) : t.push(r);
1621
+ continue;
1622
+ }
1623
+ if (e) {
1624
+ let s = "Infinite loop on byte: " + e.charCodeAt(0);
1625
+ if (this.options.silent) {
1626
+ console.error(s);
1627
+ break;
1628
+ } else throw new Error(s);
1629
+ }
1630
+ }
1631
+ return this.state.top = true, t;
1632
+ }
1633
+ inline(e, t = []) {
1634
+ return this.inlineQueue.push({ src: e, tokens: t }), t;
1635
+ }
1636
+ inlineTokens(e, t = []) {
1637
+ let n = e, r = null;
1638
+ if (this.tokens.links) {
1639
+ let o = Object.keys(this.tokens.links);
1640
+ if (o.length > 0) for (; (r = this.tokenizer.rules.inline.reflinkSearch.exec(n)) != null; ) o.includes(r[0].slice(r[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, r.index) + "[" + "a".repeat(r[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex));
1641
+ }
1642
+ for (; (r = this.tokenizer.rules.inline.anyPunctuation.exec(n)) != null; ) n = n.slice(0, r.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
1643
+ let i;
1644
+ for (; (r = this.tokenizer.rules.inline.blockSkip.exec(n)) != null; ) i = r[2] ? r[2].length : 0, n = n.slice(0, r.index + i) + "[" + "a".repeat(r[0].length - i - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
1645
+ n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n;
1646
+ let s = false, a = "";
1647
+ for (; e; ) {
1648
+ s || (a = ""), s = false;
1649
+ let o;
1650
+ if (this.options.extensions?.inline?.some((p) => (o = p.call({ lexer: this }, e, t)) ? (e = e.substring(o.raw.length), t.push(o), true) : false)) continue;
1651
+ if (o = this.tokenizer.escape(e)) {
1652
+ e = e.substring(o.raw.length), t.push(o);
1653
+ continue;
1654
+ }
1655
+ if (o = this.tokenizer.tag(e)) {
1656
+ e = e.substring(o.raw.length), t.push(o);
1657
+ continue;
1658
+ }
1659
+ if (o = this.tokenizer.link(e)) {
1660
+ e = e.substring(o.raw.length), t.push(o);
1661
+ continue;
1662
+ }
1663
+ if (o = this.tokenizer.reflink(e, this.tokens.links)) {
1664
+ e = e.substring(o.raw.length);
1665
+ let p = t.at(-1);
1666
+ o.type === "text" && p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
1667
+ continue;
1668
+ }
1669
+ if (o = this.tokenizer.emStrong(e, n, a)) {
1670
+ e = e.substring(o.raw.length), t.push(o);
1671
+ continue;
1672
+ }
1673
+ if (o = this.tokenizer.codespan(e)) {
1674
+ e = e.substring(o.raw.length), t.push(o);
1675
+ continue;
1676
+ }
1677
+ if (o = this.tokenizer.br(e)) {
1678
+ e = e.substring(o.raw.length), t.push(o);
1679
+ continue;
1680
+ }
1681
+ if (o = this.tokenizer.del(e, n, a)) {
1682
+ e = e.substring(o.raw.length), t.push(o);
1683
+ continue;
1684
+ }
1685
+ if (o = this.tokenizer.autolink(e)) {
1686
+ e = e.substring(o.raw.length), t.push(o);
1687
+ continue;
1688
+ }
1689
+ if (!this.state.inLink && (o = this.tokenizer.url(e))) {
1690
+ e = e.substring(o.raw.length), t.push(o);
1691
+ continue;
1692
+ }
1693
+ let l = e;
1694
+ if (this.options.extensions?.startInline) {
1695
+ let p = 1 / 0, c = e.slice(1), d;
1696
+ this.options.extensions.startInline.forEach((h) => {
1697
+ d = h.call({ lexer: this }, c), typeof d == "number" && d >= 0 && (p = Math.min(p, d));
1698
+ }), p < 1 / 0 && p >= 0 && (l = e.substring(0, p + 1));
1699
+ }
1700
+ if (o = this.tokenizer.inlineText(l)) {
1701
+ e = e.substring(o.raw.length), o.raw.slice(-1) !== "_" && (a = o.raw.slice(-1)), s = true;
1702
+ let p = t.at(-1);
1703
+ p?.type === "text" ? (p.raw += o.raw, p.text += o.text) : t.push(o);
1704
+ continue;
1705
+ }
1706
+ if (e) {
1707
+ let p = "Infinite loop on byte: " + e.charCodeAt(0);
1708
+ if (this.options.silent) {
1709
+ console.error(p);
1710
+ break;
1711
+ } else throw new Error(p);
1712
+ }
1713
+ }
1714
+ return t;
1715
+ }
1716
+ };
1717
+ var y = class {
1718
+ constructor(e) {
1719
+ __publicField(this, "options");
1720
+ __publicField(this, "parser");
1721
+ this.options = e || T;
1722
+ }
1723
+ space(e) {
1724
+ return "";
1725
+ }
1726
+ code({ text: e, lang: t, escaped: n }) {
1727
+ let r = (t || "").match(m.notSpaceStart)?.[0], i = e.replace(m.endingNewline, "") + `
1728
+ `;
1729
+ return r ? '<pre><code class="language-' + O(r) + '">' + (n ? i : O(i, true)) + `</code></pre>
1730
+ ` : "<pre><code>" + (n ? i : O(i, true)) + `</code></pre>
1731
+ `;
1732
+ }
1733
+ blockquote({ tokens: e }) {
1734
+ return `<blockquote>
1735
+ ${this.parser.parse(e)}</blockquote>
1736
+ `;
1737
+ }
1738
+ html({ text: e }) {
1739
+ return e;
1740
+ }
1741
+ def(e) {
1742
+ return "";
1743
+ }
1744
+ heading({ tokens: e, depth: t }) {
1745
+ return `<h${t}>${this.parser.parseInline(e)}</h${t}>
1746
+ `;
1747
+ }
1748
+ hr(e) {
1749
+ return `<hr>
1750
+ `;
1751
+ }
1752
+ list(e) {
1753
+ let t = e.ordered, n = e.start, r = "";
1754
+ for (let a = 0; a < e.items.length; a++) {
1755
+ let o = e.items[a];
1756
+ r += this.listitem(o);
1757
+ }
1758
+ let i = t ? "ol" : "ul", s = t && n !== 1 ? ' start="' + n + '"' : "";
1759
+ return "<" + i + s + `>
1760
+ ` + r + "</" + i + `>
1761
+ `;
1762
+ }
1763
+ listitem(e) {
1764
+ return `<li>${this.parser.parse(e.tokens)}</li>
1765
+ `;
1766
+ }
1767
+ checkbox({ checked: e }) {
1768
+ return "<input " + (e ? 'checked="" ' : "") + 'disabled="" type="checkbox"> ';
1769
+ }
1770
+ paragraph({ tokens: e }) {
1771
+ return `<p>${this.parser.parseInline(e)}</p>
1772
+ `;
1773
+ }
1774
+ table(e) {
1775
+ let t = "", n = "";
1776
+ for (let i = 0; i < e.header.length; i++) n += this.tablecell(e.header[i]);
1777
+ t += this.tablerow({ text: n });
1778
+ let r = "";
1779
+ for (let i = 0; i < e.rows.length; i++) {
1780
+ let s = e.rows[i];
1781
+ n = "";
1782
+ for (let a = 0; a < s.length; a++) n += this.tablecell(s[a]);
1783
+ r += this.tablerow({ text: n });
1784
+ }
1785
+ return r && (r = `<tbody>${r}</tbody>`), `<table>
1786
+ <thead>
1787
+ ` + t + `</thead>
1788
+ ` + r + `</table>
1789
+ `;
1790
+ }
1791
+ tablerow({ text: e }) {
1792
+ return `<tr>
1793
+ ${e}</tr>
1794
+ `;
1795
+ }
1796
+ tablecell(e) {
1797
+ let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td";
1798
+ return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + `</${n}>
1799
+ `;
1800
+ }
1801
+ strong({ tokens: e }) {
1802
+ return `<strong>${this.parser.parseInline(e)}</strong>`;
1803
+ }
1804
+ em({ tokens: e }) {
1805
+ return `<em>${this.parser.parseInline(e)}</em>`;
1806
+ }
1807
+ codespan({ text: e }) {
1808
+ return `<code>${O(e, true)}</code>`;
1809
+ }
1810
+ br(e) {
1811
+ return "<br>";
1812
+ }
1813
+ del({ tokens: e }) {
1814
+ return `<del>${this.parser.parseInline(e)}</del>`;
1815
+ }
1816
+ link({ href: e, title: t, tokens: n }) {
1817
+ let r = this.parser.parseInline(n), i = X(e);
1818
+ if (i === null) return r;
1819
+ e = i;
1820
+ let s = '<a href="' + e + '"';
1821
+ return t && (s += ' title="' + O(t) + '"'), s += ">" + r + "</a>", s;
1822
+ }
1823
+ image({ href: e, title: t, text: n, tokens: r }) {
1824
+ r && (n = this.parser.parseInline(r, this.parser.textRenderer));
1825
+ let i = X(e);
1826
+ if (i === null) return O(n);
1827
+ e = i;
1828
+ let s = `<img src="${e}" alt="${O(n)}"`;
1829
+ return t && (s += ` title="${O(t)}"`), s += ">", s;
1830
+ }
1831
+ text(e) {
1832
+ return "tokens" in e && e.tokens ? this.parser.parseInline(e.tokens) : "escaped" in e && e.escaped ? e.text : O(e.text);
1833
+ }
1834
+ };
1835
+ var $ = class {
1836
+ strong({ text: e }) {
1837
+ return e;
1838
+ }
1839
+ em({ text: e }) {
1840
+ return e;
1841
+ }
1842
+ codespan({ text: e }) {
1843
+ return e;
1844
+ }
1845
+ del({ text: e }) {
1846
+ return e;
1847
+ }
1848
+ html({ text: e }) {
1849
+ return e;
1850
+ }
1851
+ text({ text: e }) {
1852
+ return e;
1853
+ }
1854
+ link({ text: e }) {
1855
+ return "" + e;
1856
+ }
1857
+ image({ text: e }) {
1858
+ return "" + e;
1859
+ }
1860
+ br() {
1861
+ return "";
1862
+ }
1863
+ checkbox({ raw: e }) {
1864
+ return e;
1865
+ }
1866
+ };
1867
+ var b = class u2 {
1868
+ constructor(e) {
1869
+ __publicField(this, "options");
1870
+ __publicField(this, "renderer");
1871
+ __publicField(this, "textRenderer");
1872
+ this.options = e || T, this.options.renderer = this.options.renderer || new y(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new $();
1873
+ }
1874
+ static parse(e, t) {
1875
+ return new u2(t).parse(e);
1876
+ }
1877
+ static parseInline(e, t) {
1878
+ return new u2(t).parseInline(e);
1879
+ }
1880
+ parse(e) {
1881
+ let t = "";
1882
+ for (let n = 0; n < e.length; n++) {
1883
+ let r = e[n];
1884
+ if (this.options.extensions?.renderers?.[r.type]) {
1885
+ let s = r, a = this.options.extensions.renderers[s.type].call({ parser: this }, s);
1886
+ if (a !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(s.type)) {
1887
+ t += a || "";
1888
+ continue;
1889
+ }
1890
+ }
1891
+ let i = r;
1892
+ switch (i.type) {
1893
+ case "space": {
1894
+ t += this.renderer.space(i);
1895
+ break;
1896
+ }
1897
+ case "hr": {
1898
+ t += this.renderer.hr(i);
1899
+ break;
1900
+ }
1901
+ case "heading": {
1902
+ t += this.renderer.heading(i);
1903
+ break;
1904
+ }
1905
+ case "code": {
1906
+ t += this.renderer.code(i);
1907
+ break;
1908
+ }
1909
+ case "table": {
1910
+ t += this.renderer.table(i);
1911
+ break;
1912
+ }
1913
+ case "blockquote": {
1914
+ t += this.renderer.blockquote(i);
1915
+ break;
1916
+ }
1917
+ case "list": {
1918
+ t += this.renderer.list(i);
1919
+ break;
1920
+ }
1921
+ case "checkbox": {
1922
+ t += this.renderer.checkbox(i);
1923
+ break;
1924
+ }
1925
+ case "html": {
1926
+ t += this.renderer.html(i);
1927
+ break;
1928
+ }
1929
+ case "def": {
1930
+ t += this.renderer.def(i);
1931
+ break;
1932
+ }
1933
+ case "paragraph": {
1934
+ t += this.renderer.paragraph(i);
1935
+ break;
1936
+ }
1937
+ case "text": {
1938
+ t += this.renderer.text(i);
1939
+ break;
1940
+ }
1941
+ default: {
1942
+ let s = 'Token with "' + i.type + '" type was not found.';
1943
+ if (this.options.silent) return console.error(s), "";
1944
+ throw new Error(s);
1945
+ }
1946
+ }
1947
+ }
1948
+ return t;
1949
+ }
1950
+ parseInline(e, t = this.renderer) {
1951
+ let n = "";
1952
+ for (let r = 0; r < e.length; r++) {
1953
+ let i = e[r];
1954
+ if (this.options.extensions?.renderers?.[i.type]) {
1955
+ let a = this.options.extensions.renderers[i.type].call({ parser: this }, i);
1956
+ if (a !== false || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(i.type)) {
1957
+ n += a || "";
1958
+ continue;
1959
+ }
1960
+ }
1961
+ let s = i;
1962
+ switch (s.type) {
1963
+ case "escape": {
1964
+ n += t.text(s);
1965
+ break;
1966
+ }
1967
+ case "html": {
1968
+ n += t.html(s);
1969
+ break;
1970
+ }
1971
+ case "link": {
1972
+ n += t.link(s);
1973
+ break;
1974
+ }
1975
+ case "image": {
1976
+ n += t.image(s);
1977
+ break;
1978
+ }
1979
+ case "checkbox": {
1980
+ n += t.checkbox(s);
1981
+ break;
1982
+ }
1983
+ case "strong": {
1984
+ n += t.strong(s);
1985
+ break;
1986
+ }
1987
+ case "em": {
1988
+ n += t.em(s);
1989
+ break;
1990
+ }
1991
+ case "codespan": {
1992
+ n += t.codespan(s);
1993
+ break;
1994
+ }
1995
+ case "br": {
1996
+ n += t.br(s);
1997
+ break;
1998
+ }
1999
+ case "del": {
2000
+ n += t.del(s);
2001
+ break;
2002
+ }
2003
+ case "text": {
2004
+ n += t.text(s);
2005
+ break;
2006
+ }
2007
+ default: {
2008
+ let a = 'Token with "' + s.type + '" type was not found.';
2009
+ if (this.options.silent) return console.error(a), "";
2010
+ throw new Error(a);
2011
+ }
2012
+ }
2013
+ }
2014
+ return n;
2015
+ }
2016
+ };
2017
+ var _a;
2018
+ var P = (_a = class {
2019
+ constructor(e) {
2020
+ __publicField(this, "options");
2021
+ __publicField(this, "block");
2022
+ this.options = e || T;
2023
+ }
2024
+ preprocess(e) {
2025
+ return e;
2026
+ }
2027
+ postprocess(e) {
2028
+ return e;
2029
+ }
2030
+ processAllTokens(e) {
2031
+ return e;
2032
+ }
2033
+ emStrongMask(e) {
2034
+ return e;
2035
+ }
2036
+ provideLexer() {
2037
+ return this.block ? x.lex : x.lexInline;
2038
+ }
2039
+ provideParser() {
2040
+ return this.block ? b.parse : b.parseInline;
2041
+ }
2042
+ }, __publicField(_a, "passThroughHooks", /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"])), __publicField(_a, "passThroughHooksRespectAsync", /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens"])), _a);
2043
+ var B = class {
2044
+ constructor(...e) {
2045
+ __publicField(this, "defaults", M());
2046
+ __publicField(this, "options", this.setOptions);
2047
+ __publicField(this, "parse", this.parseMarkdown(true));
2048
+ __publicField(this, "parseInline", this.parseMarkdown(false));
2049
+ __publicField(this, "Parser", b);
2050
+ __publicField(this, "Renderer", y);
2051
+ __publicField(this, "TextRenderer", $);
2052
+ __publicField(this, "Lexer", x);
2053
+ __publicField(this, "Tokenizer", w);
2054
+ __publicField(this, "Hooks", P);
2055
+ this.use(...e);
2056
+ }
2057
+ walkTokens(e, t) {
2058
+ let n = [];
2059
+ for (let r of e) switch (n = n.concat(t.call(this, r)), r.type) {
2060
+ case "table": {
2061
+ let i = r;
2062
+ for (let s of i.header) n = n.concat(this.walkTokens(s.tokens, t));
2063
+ for (let s of i.rows) for (let a of s) n = n.concat(this.walkTokens(a.tokens, t));
2064
+ break;
2065
+ }
2066
+ case "list": {
2067
+ let i = r;
2068
+ n = n.concat(this.walkTokens(i.items, t));
2069
+ break;
2070
+ }
2071
+ default: {
2072
+ let i = r;
2073
+ this.defaults.extensions?.childTokens?.[i.type] ? this.defaults.extensions.childTokens[i.type].forEach((s) => {
2074
+ let a = i[s].flat(1 / 0);
2075
+ n = n.concat(this.walkTokens(a, t));
2076
+ }) : i.tokens && (n = n.concat(this.walkTokens(i.tokens, t)));
2077
+ }
2078
+ }
2079
+ return n;
2080
+ }
2081
+ use(...e) {
2082
+ let t = this.defaults.extensions || { renderers: {}, childTokens: {} };
2083
+ return e.forEach((n) => {
2084
+ let r = { ...n };
2085
+ if (r.async = this.defaults.async || r.async || false, n.extensions && (n.extensions.forEach((i) => {
2086
+ if (!i.name) throw new Error("extension name required");
2087
+ if ("renderer" in i) {
2088
+ let s = t.renderers[i.name];
2089
+ s ? t.renderers[i.name] = function(...a) {
2090
+ let o = i.renderer.apply(this, a);
2091
+ return o === false && (o = s.apply(this, a)), o;
2092
+ } : t.renderers[i.name] = i.renderer;
2093
+ }
2094
+ if ("tokenizer" in i) {
2095
+ if (!i.level || i.level !== "block" && i.level !== "inline") throw new Error("extension level must be 'block' or 'inline'");
2096
+ let s = t[i.level];
2097
+ s ? s.unshift(i.tokenizer) : t[i.level] = [i.tokenizer], i.start && (i.level === "block" ? t.startBlock ? t.startBlock.push(i.start) : t.startBlock = [i.start] : i.level === "inline" && (t.startInline ? t.startInline.push(i.start) : t.startInline = [i.start]));
2098
+ }
2099
+ "childTokens" in i && i.childTokens && (t.childTokens[i.name] = i.childTokens);
2100
+ }), r.extensions = t), n.renderer) {
2101
+ let i = this.defaults.renderer || new y(this.defaults);
2102
+ for (let s in n.renderer) {
2103
+ if (!(s in i)) throw new Error(`renderer '${s}' does not exist`);
2104
+ if (["options", "parser"].includes(s)) continue;
2105
+ let a = s, o = n.renderer[a], l = i[a];
2106
+ i[a] = (...p) => {
2107
+ let c = o.apply(i, p);
2108
+ return c === false && (c = l.apply(i, p)), c || "";
2109
+ };
2110
+ }
2111
+ r.renderer = i;
2112
+ }
2113
+ if (n.tokenizer) {
2114
+ let i = this.defaults.tokenizer || new w(this.defaults);
2115
+ for (let s in n.tokenizer) {
2116
+ if (!(s in i)) throw new Error(`tokenizer '${s}' does not exist`);
2117
+ if (["options", "rules", "lexer"].includes(s)) continue;
2118
+ let a = s, o = n.tokenizer[a], l = i[a];
2119
+ i[a] = (...p) => {
2120
+ let c = o.apply(i, p);
2121
+ return c === false && (c = l.apply(i, p)), c;
2122
+ };
2123
+ }
2124
+ r.tokenizer = i;
2125
+ }
2126
+ if (n.hooks) {
2127
+ let i = this.defaults.hooks || new P();
2128
+ for (let s in n.hooks) {
2129
+ if (!(s in i)) throw new Error(`hook '${s}' does not exist`);
2130
+ if (["options", "block"].includes(s)) continue;
2131
+ let a = s, o = n.hooks[a], l = i[a];
2132
+ P.passThroughHooks.has(s) ? i[a] = (p) => {
2133
+ if (this.defaults.async && P.passThroughHooksRespectAsync.has(s)) return (async () => {
2134
+ let d = await o.call(i, p);
2135
+ return l.call(i, d);
2136
+ })();
2137
+ let c = o.call(i, p);
2138
+ return l.call(i, c);
2139
+ } : i[a] = (...p) => {
2140
+ if (this.defaults.async) return (async () => {
2141
+ let d = await o.apply(i, p);
2142
+ return d === false && (d = await l.apply(i, p)), d;
2143
+ })();
2144
+ let c = o.apply(i, p);
2145
+ return c === false && (c = l.apply(i, p)), c;
2146
+ };
2147
+ }
2148
+ r.hooks = i;
2149
+ }
2150
+ if (n.walkTokens) {
2151
+ let i = this.defaults.walkTokens, s = n.walkTokens;
2152
+ r.walkTokens = function(a) {
2153
+ let o = [];
2154
+ return o.push(s.call(this, a)), i && (o = o.concat(i.call(this, a))), o;
2155
+ };
2156
+ }
2157
+ this.defaults = { ...this.defaults, ...r };
2158
+ }), this;
2159
+ }
2160
+ setOptions(e) {
2161
+ return this.defaults = { ...this.defaults, ...e }, this;
2162
+ }
2163
+ lexer(e, t) {
2164
+ return x.lex(e, t ?? this.defaults);
2165
+ }
2166
+ parser(e, t) {
2167
+ return b.parse(e, t ?? this.defaults);
2168
+ }
2169
+ parseMarkdown(e) {
2170
+ return (n, r) => {
2171
+ let i = { ...r }, s = { ...this.defaults, ...i }, a = this.onError(!!s.silent, !!s.async);
2172
+ if (this.defaults.async === true && i.async === false) return a(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."));
2173
+ if (typeof n > "u" || n === null) return a(new Error("marked(): input parameter is undefined or null"));
2174
+ if (typeof n != "string") return a(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected"));
2175
+ if (s.hooks && (s.hooks.options = s, s.hooks.block = e), s.async) return (async () => {
2176
+ let o = s.hooks ? await s.hooks.preprocess(n) : n, p = await (s.hooks ? await s.hooks.provideLexer() : e ? x.lex : x.lexInline)(o, s), c = s.hooks ? await s.hooks.processAllTokens(p) : p;
2177
+ s.walkTokens && await Promise.all(this.walkTokens(c, s.walkTokens));
2178
+ let h = await (s.hooks ? await s.hooks.provideParser() : e ? b.parse : b.parseInline)(c, s);
2179
+ return s.hooks ? await s.hooks.postprocess(h) : h;
2180
+ })().catch(a);
2181
+ try {
2182
+ s.hooks && (n = s.hooks.preprocess(n));
2183
+ let l = (s.hooks ? s.hooks.provideLexer() : e ? x.lex : x.lexInline)(n, s);
2184
+ s.hooks && (l = s.hooks.processAllTokens(l)), s.walkTokens && this.walkTokens(l, s.walkTokens);
2185
+ let c = (s.hooks ? s.hooks.provideParser() : e ? b.parse : b.parseInline)(l, s);
2186
+ return s.hooks && (c = s.hooks.postprocess(c)), c;
2187
+ } catch (o) {
2188
+ return a(o);
2189
+ }
2190
+ };
2191
+ }
2192
+ onError(e, t) {
2193
+ return (n) => {
2194
+ if (n.message += `
2195
+ Please report this to https://github.com/markedjs/marked.`, e) {
2196
+ let r = "<p>An error occurred:</p><pre>" + O(n.message + "", true) + "</pre>";
2197
+ return t ? Promise.resolve(r) : r;
2198
+ }
2199
+ if (t) return Promise.reject(n);
2200
+ throw n;
2201
+ };
2202
+ }
2203
+ };
2204
+ var L = new B();
2205
+ function g(u3, e) {
2206
+ return L.parse(u3, e);
2207
+ }
2208
+ g.options = g.setOptions = function(u3) {
2209
+ return L.setOptions(u3), g.defaults = L.defaults, G(g.defaults), g;
2210
+ };
2211
+ g.getDefaults = M;
2212
+ g.defaults = T;
2213
+ g.use = function(...u3) {
2214
+ return L.use(...u3), g.defaults = L.defaults, G(g.defaults), g;
2215
+ };
2216
+ g.walkTokens = function(u3, e) {
2217
+ return L.walkTokens(u3, e);
2218
+ };
2219
+ g.parseInline = L.parseInline;
2220
+ g.Parser = b;
2221
+ g.parser = b.parse;
2222
+ g.Renderer = y;
2223
+ g.TextRenderer = $;
2224
+ g.Lexer = x;
2225
+ g.lexer = x.lex;
2226
+ g.Tokenizer = w;
2227
+ g.Hooks = P;
2228
+ g.parse = g;
2229
+ var Ut = g.options;
2230
+ var Kt = g.setOptions;
2231
+ var Wt = g.use;
2232
+ var Xt = g.walkTokens;
2233
+ var Jt = g.parseInline;
2234
+ var Yt = b.parse;
2235
+ var en = x.lex;
2236
+
2237
+ // ../../chat/dist/index.js
2238
+ import { html as html22 } from "lit";
2239
+ import { html as html3, nothing as nothing2 } from "lit";
2240
+ import { html as html5 } from "lit";
2241
+ var sendIcon = html2`<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 14V2M8 2L3 7M8 2L13 7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
2242
+ var stopIcon = html2`<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="1" y="1" width="12" height="12" rx="2" fill="currentColor"/></svg>`;
2243
+ function autoResize(e) {
2244
+ const el = e.target;
2245
+ el.style.height = "auto";
2246
+ el.style.height = `${Math.min(el.scrollHeight, 150)}px`;
2247
+ }
2248
+ function renderChatInput(props) {
2249
+ const canSend = props.value.trim().length > 0 && !props.isStreaming;
2250
+ const buttonLabel = props.isStreaming ? "Stop generation" : "Send message";
2251
+ const buttonAction = props.isStreaming ? props.onStop : props.onSend;
2252
+ const handleInput = (e) => {
2253
+ autoResize(e);
2254
+ props.onInput(e);
2255
+ };
2256
+ const placeholder = props.placeholder ?? "Type a message...";
2257
+ return html2`
2258
+ ${props.suggestions?.length && !props.isStreaming ? html2`<div data-sc-suggestions>
2259
+ ${props.suggestions.map(
2260
+ (s) => html2`<button @click=${() => props.onSuggestion?.(s)}>${s}</button>`
2261
+ )}
2262
+ </div>` : nothing}
2263
+ ${props.beforeInputSlot ?? nothing}
2264
+ <div data-sc-chat-input>
2265
+ <textarea
2266
+ rows="1"
2267
+ placeholder=${placeholder}
2268
+ .value=${props.value}
2269
+ @input=${handleInput}
2270
+ @keydown=${props.onKeyDown}
2271
+ @compositionstart=${props.onCompositionStart}
2272
+ @compositionend=${props.onCompositionEnd}
2273
+ aria-label="Message input"
2274
+ ></textarea>
2275
+ ${props.inputActionsSlot ?? nothing}
2276
+ <button
2277
+ data-sc-send-btn
2278
+ ?disabled=${!canSend && !props.isStreaming}
2279
+ @click=${buttonAction}
2280
+ aria-label=${buttonLabel}
2281
+ >${props.isStreaming ? stopIcon : sendIcon}</button>
2282
+ </div>
2283
+ `;
2284
+ }
2285
+ function fingerprint(msg) {
2286
+ const tcIds = msg.toolCalls?.map((tc) => `${tc.id}:${tc.status}`).join(",") ?? "";
2287
+ return `${msg.id}:${msg.role}:${msg.content.length}:${msg.status}:${tcIds}`;
2288
+ }
2289
+ var marked = new B({ async: false, gfm: true, breaks: true });
2290
+ function escapeAttr(s) {
2291
+ return s.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
2292
+ }
2293
+ var codeRenderer = {
2294
+ code({ text: text2, lang }) {
2295
+ const safeLang = lang ? escapeAttr(lang) : "";
2296
+ const langAttr = safeLang ? ` class="language-${safeLang}"` : "";
2297
+ return `<div data-sc-code-block${safeLang ? ` data-lang="${safeLang}"` : ""}><pre><code${langAttr}>${text2}</code></pre></div>
2298
+ `;
2299
+ }
2300
+ };
2301
+ marked.use({ renderer: codeRenderer });
2302
+ function renderMarkdown(text2) {
2303
+ if (!text2) return "";
2304
+ const raw = marked.parse(text2);
2305
+ if (typeof window === "undefined") return raw;
2306
+ return purify.sanitize(raw, {
2307
+ ADD_ATTR: ["data-sc-code-block", "data-lang", "data-sc-copy-btn"]
2308
+ });
2309
+ }
2310
+ var copyIcon = html22`<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><rect x="4.5" y="0.5" width="9" height="9" rx="1.5" stroke="currentColor"/><rect x="0.5" y="4.5" width="9" height="9" rx="1.5" stroke="currentColor" fill="var(--sc-chat-action-bar-bg, rgba(0,0,0,0.05))"/></svg>`;
2311
+ var regenerateIcon = html22`<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1.5 7a5.5 5.5 0 0 1 9.9-3.3M12.5 7a5.5 5.5 0 0 1-9.9 3.3" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/><path d="M11.5 1v3h-3M2.5 13v-3h3" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
2312
+ function renderActionBar(props) {
2313
+ const showRegenerate = props.role === "assistant" && props.onRegenerate;
2314
+ return html22`
2315
+ <div data-sc-action-bar>
2316
+ <button
2317
+ @click=${() => props.onCopy(props.content)}
2318
+ aria-label="Copy message"
2319
+ title="Copy"
2320
+ >${copyIcon}</button>
2321
+ ${showRegenerate ? html22`<button
2322
+ @click=${() => props.onRegenerate(props.messageId)}
2323
+ aria-label="Regenerate response"
2324
+ title="Regenerate"
2325
+ >${regenerateIcon}</button>` : ""}
2326
+ </div>
2327
+ `;
2328
+ }
2329
+ var spinnerIcon = html3`<svg data-sc-spinner width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="5.5" stroke="currentColor" stroke-width="1.5" opacity="0.2"/><path d="M12.5 7a5.5 5.5 0 0 0-5.5-5.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>`;
2330
+ var checkIcon = html3`<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M3 7.5L6 10.5L11 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
2331
+ var errorIcon = html3`<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><circle cx="7" cy="7" r="6" stroke="currentColor" stroke-width="1.3"/><path d="M5 5l4 4M9 5l-4 4" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/></svg>`;
2332
+ var toolIcon = html3`<svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M8.5 2.5l3 3-7.5 7.5H1v-3l7.5-7.5z" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
2333
+ function statusIcon(status) {
2334
+ switch (status) {
2335
+ case "args-streaming":
2336
+ case "running":
2337
+ return spinnerIcon;
2338
+ case "done":
2339
+ return checkIcon;
2340
+ case "error":
2341
+ return errorIcon;
2342
+ default:
2343
+ return toolIcon;
2344
+ }
2345
+ }
2346
+ function renderToolCallCard(props) {
2347
+ const { toolCall, toolLabel, approve, deny } = props;
2348
+ const displayName = toolLabel ?? toolCall.name;
2349
+ const isActive = toolCall.status === "args-streaming" || toolCall.status === "running";
2350
+ return html3`
2351
+ <div data-sc-tool-card ?data-sc-active=${isActive}>
2352
+ <div data-sc-tool-header>
2353
+ <span data-sc-tool-icon data-sc-status=${toolCall.status}>${statusIcon(toolCall.status)}</span>
2354
+ <span data-sc-tool-name>${displayName}</span>
2355
+ </div>
2356
+ ${toolCall.status === "error" && toolCall.error ? html3`<div data-sc-tool-error>${toolCall.error}</div>` : nothing2}
2357
+ ${toolCall.status === "pending" ? html3`<div data-sc-tool-actions>
2358
+ <button data-sc-approve @click=${approve} aria-label="Approve ${displayName}">Approve</button>
2359
+ <button data-sc-deny @click=${deny} aria-label="Deny ${displayName}">Deny</button>
2360
+ </div>` : nothing2}
2361
+ </div>
2362
+ `;
2363
+ }
2364
+ var assistantIcon = html4`<svg data-sc-avatar width="24" height="24" viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="12" fill="var(--sc-color-primary, #6a59ce)"/><path d="M12 4l1.4 3.6L17 9l-3.6 1.4L12 14l-1.4-3.6L7 9l3.6-1.4L12 4z" fill="#fff"/><path d="M16.5 13l.7 1.8 1.8.7-1.8.7-.7 1.8-.7-1.8-1.8-.7 1.8-.7.5-1.8z" fill="#fff" opacity="0.7"/></svg>`;
2365
+ function renderBubbleContent(message) {
2366
+ if (message.role === "user") {
2367
+ return html4`<div data-sc-msg-user>${message.content}</div>`;
2368
+ }
2369
+ return html4`<div data-sc-msg-assistant>${unsafeHTML(renderMarkdown(message.content))}</div>`;
2370
+ }
2371
+ function renderMessageBubble(props) {
2372
+ const { message, toolLabels, toolRenderers, defaultToolRenderer } = props;
2373
+ const isUser = message.role === "user";
2374
+ const toolCards = message.toolCalls?.map((tc) => {
2375
+ const approve = () => props.onToolApprove(tc.id);
2376
+ const deny = () => props.onToolDeny(tc.id);
2377
+ const customRenderer = toolRenderers?.[tc.name];
2378
+ if (customRenderer) {
2379
+ return customRenderer.render({
2380
+ toolCall: tc,
2381
+ phase: tc.status,
2382
+ approve,
2383
+ deny
2384
+ });
2385
+ }
2386
+ if (defaultToolRenderer) {
2387
+ return defaultToolRenderer.render({
2388
+ toolCall: tc,
2389
+ phase: tc.status,
2390
+ approve,
2391
+ deny
2392
+ });
2393
+ }
2394
+ return renderToolCallCard({
2395
+ toolCall: tc,
2396
+ toolLabel: toolLabels?.[tc.name],
2397
+ approve,
2398
+ deny
2399
+ });
2400
+ });
2401
+ return html4`
2402
+ <div data-sc-msg-row data-sc-role=${message.role}>
2403
+ ${!isUser ? assistantIcon : nothing3}
2404
+ <div data-sc-msg-content>
2405
+ ${renderBubbleContent(message)}
2406
+ ${message.status === "error" ? html4`<div data-sc-msg-error>Failed to send</div>` : nothing3}
2407
+ ${toolCards ?? nothing3}
2408
+ ${renderActionBar({
2409
+ messageId: message.id,
2410
+ content: message.content,
2411
+ role: message.role,
2412
+ onCopy: props.onCopy,
2413
+ onRegenerate: isUser ? void 0 : props.onRegenerate
2414
+ })}
2415
+ </div>
2416
+ </div>
2417
+ `;
2418
+ }
2419
+ function renderTypingIndicator() {
2420
+ return html5`
2421
+ <div data-sc-typing aria-label="Assistant is typing">
2422
+ <span></span><span></span><span></span>
2423
+ </div>
2424
+ `;
2425
+ }
2426
+ function renderMessageList(props) {
2427
+ if (props.messages.length === 0 && !props.isTyping) {
2428
+ return html6`<div role="log" aria-live="polite" aria-label="Chat messages">
2429
+ ${props.emptyStateSlot ?? nothing4}
2430
+ </div>`;
2431
+ }
2432
+ return html6`
2433
+ <div role="log" aria-live="polite" aria-label="Chat messages" data-sc-msg-list>
2434
+ ${repeat(
2435
+ props.messages,
2436
+ (msg) => msg.id,
2437
+ (msg) => guard(
2438
+ [fingerprint(msg)],
2439
+ () => renderMessageBubble({
2440
+ message: msg,
2441
+ toolLabels: props.toolLabels,
2442
+ toolRenderers: props.toolRenderers,
2443
+ defaultToolRenderer: props.defaultToolRenderer,
2444
+ onCopy: props.onCopy,
2445
+ onRegenerate: props.onRegenerate,
2446
+ onToolApprove: props.onToolApprove,
2447
+ onToolDeny: props.onToolDeny
2448
+ })
2449
+ )
2450
+ )}
2451
+ ${props.isTyping ? props.typingIndicatorSlot ?? renderTypingIndicator() : nothing4}
2452
+ </div>
2453
+ `;
2454
+ }
2455
+ var STYLE_ID = "sc-chat-styles";
2456
+ var STYLE_RULES = `
2457
+ @keyframes sc-fade-in {
2458
+ from { opacity: 0; transform: translateY(6px); }
2459
+ to { opacity: 1; transform: translateY(0); }
2460
+ }
2461
+
2462
+ @keyframes sc-typing-bounce {
2463
+ 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
2464
+ 40% { transform: scale(1); opacity: 1; }
2465
+ }
2466
+
2467
+ @keyframes sc-spin {
2468
+ to { transform: rotate(360deg); }
2469
+ }
2470
+
2471
+ [data-sc-chat] {
2472
+ font-family: var(--sc-font-family, system-ui, -apple-system, sans-serif);
2473
+ color: var(--sc-content-text-color, #1a1a2e);
2474
+ line-height: var(--sc-chat-line-height, 1.5);
2475
+ font-size: var(--sc-chat-font-size, 0.9375rem);
2476
+ }
2477
+
2478
+ /* \u2500\u2500 Message list \u2500\u2500 */
2479
+ [data-sc-chat] [data-sc-msg-list] {
2480
+ display: flex;
2481
+ flex-direction: column;
2482
+ gap: var(--sc-chat-msg-gap, 4px);
2483
+ padding: var(--sc-chat-msg-list-padding, 16px 16px 8px);
2484
+ }
2485
+
2486
+ /* \u2500\u2500 Message row (avatar + content) \u2500\u2500 */
2487
+ [data-sc-chat] [data-sc-msg-row] {
2488
+ display: flex;
2489
+ gap: 10px;
2490
+ align-items: flex-start;
2491
+ animation: sc-fade-in 0.25s ease-out;
2492
+ }
2493
+
2494
+ [data-sc-chat] [data-sc-msg-row][data-sc-role="user"] {
2495
+ flex-direction: row-reverse;
2496
+ }
2497
+
2498
+ [data-sc-chat] [data-sc-msg-content] {
2499
+ min-width: 0;
2500
+ max-width: 80%;
2501
+ }
2502
+
2503
+ [data-sc-chat] [data-sc-msg-row][data-sc-role="user"] [data-sc-msg-content] {
2504
+ display: flex;
2505
+ flex-direction: column;
2506
+ align-items: flex-end;
2507
+ }
2508
+
2509
+ /* \u2500\u2500 Avatar \u2500\u2500 */
2510
+ [data-sc-chat] [data-sc-avatar] {
2511
+ flex-shrink: 0;
2512
+ margin-top: 2px;
2513
+ }
2514
+
2515
+ /* \u2500\u2500 Bubbles \u2500\u2500 */
2516
+ [data-sc-chat] [data-sc-msg-user] {
2517
+ background: var(--sc-chat-msg-user-bg, var(--sc-color-primary, #6a59ce));
2518
+ color: var(--sc-chat-msg-user-color, var(--sc-color-primary-text, #ffffff));
2519
+ border-radius: var(--sc-chat-msg-user-radius, 18px 18px 4px 18px);
2520
+ padding: var(--sc-chat-msg-user-padding, 10px 16px);
2521
+ word-break: break-word;
2522
+ }
2523
+
2524
+ [data-sc-chat] [data-sc-msg-assistant] {
2525
+ background: var(--sc-chat-msg-assistant-bg, var(--sc-chat-assistant-bubble-bg, #f4f4f8));
2526
+ color: var(--sc-chat-msg-assistant-color, var(--sc-content-text-color, #1a1a2e));
2527
+ border-radius: var(--sc-chat-msg-assistant-radius, 18px 18px 18px 4px);
2528
+ padding: var(--sc-chat-msg-assistant-padding, 10px 16px);
2529
+ box-shadow: var(--sc-chat-msg-assistant-shadow, 0 1px 2px rgba(0, 0, 0, 0.04));
2530
+ word-break: break-word;
2531
+ }
2532
+
2533
+ [data-sc-chat] [data-sc-msg-assistant] > :first-child { margin-top: 0; }
2534
+ [data-sc-chat] [data-sc-msg-assistant] > :last-child { margin-bottom: 0; }
2535
+
2536
+ [data-sc-chat] [data-sc-msg-assistant] p,
2537
+ [data-sc-chat] [data-sc-msg-assistant] ul,
2538
+ [data-sc-chat] [data-sc-msg-assistant] ol,
2539
+ [data-sc-chat] [data-sc-msg-assistant] pre,
2540
+ [data-sc-chat] [data-sc-msg-assistant] blockquote {
2541
+ margin: 0.25em 0;
2542
+ }
2543
+
2544
+ [data-sc-chat] [data-sc-msg-assistant] code:not(pre code) {
2545
+ background: rgba(0, 0, 0, 0.06);
2546
+ padding: 1px 5px;
2547
+ border-radius: 4px;
2548
+ font-size: 0.85em;
2549
+ }
2550
+
2551
+ [data-sc-chat] [data-sc-msg-assistant] ul,
2552
+ [data-sc-chat] [data-sc-msg-assistant] ol {
2553
+ padding-left: 1.2em;
2554
+ }
2555
+
2556
+ [data-sc-chat] [data-sc-msg-assistant] h1,
2557
+ [data-sc-chat] [data-sc-msg-assistant] h2,
2558
+ [data-sc-chat] [data-sc-msg-assistant] h3 {
2559
+ margin: 0.5rem 0 0.25rem;
2560
+ color: var(--sc-content-heading-color, #1a1a2e);
2561
+ }
2562
+
2563
+ /* \u2500\u2500 Code blocks \u2500\u2500 */
2564
+ [data-sc-chat] [data-sc-code-block] {
2565
+ position: relative;
2566
+ margin: 0.5rem 0;
2567
+ }
2568
+
2569
+ [data-sc-chat] [data-sc-code-block]::before {
2570
+ content: attr(data-lang);
2571
+ position: absolute;
2572
+ top: 0;
2573
+ right: 0;
2574
+ padding: 2px 10px;
2575
+ font-size: 0.7rem;
2576
+ color: rgba(255, 255, 255, 0.4);
2577
+ text-transform: uppercase;
2578
+ letter-spacing: 0.05em;
2579
+ }
2580
+
2581
+ [data-sc-chat] [data-sc-code-block] pre {
2582
+ background: var(--sc-chat-code-bg, #1e1e2e);
2583
+ color: #e0e0e0;
2584
+ border-radius: 10px;
2585
+ padding: 14px;
2586
+ overflow-x: auto;
2587
+ font-size: 0.825em;
2588
+ margin: 0;
2589
+ line-height: 1.6;
2590
+ }
2591
+
2592
+ [data-sc-chat] [data-sc-code-block] [data-sc-copy-btn] {
2593
+ position: absolute;
2594
+ top: 8px;
2595
+ right: 8px;
2596
+ background: rgba(255, 255, 255, 0.08);
2597
+ border: none;
2598
+ color: rgba(255, 255, 255, 0.5);
2599
+ border-radius: 6px;
2600
+ padding: 4px 10px;
2601
+ cursor: pointer;
2602
+ font-size: 0.7rem;
2603
+ opacity: 0;
2604
+ transition: opacity 0.15s, background 0.15s;
2605
+ }
2606
+
2607
+ [data-sc-chat] [data-sc-code-block]:hover [data-sc-copy-btn] {
2608
+ opacity: 1;
2609
+ }
2610
+
2611
+ [data-sc-chat] [data-sc-code-block] [data-sc-copy-btn]:hover {
2612
+ background: rgba(255, 255, 255, 0.16);
2613
+ color: rgba(255, 255, 255, 0.8);
2614
+ }
2615
+
2616
+ /* \u2500\u2500 Scrollbar \u2500\u2500 */
2617
+ [data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar {
2618
+ width: 4px;
2619
+ }
2620
+ [data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar-track {
2621
+ background: transparent;
2622
+ }
2623
+ [data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar-thumb {
2624
+ background: rgba(0, 0, 0, 0.12);
2625
+ border-radius: 4px;
2626
+ }
2627
+ [data-sc-chat] [data-sc-scroll-area]::-webkit-scrollbar-thumb:hover {
2628
+ background: rgba(0, 0, 0, 0.2);
2629
+ }
2630
+
2631
+ [data-sc-chat] [data-sc-code-block] pre::-webkit-scrollbar {
2632
+ height: 4px;
2633
+ }
2634
+ [data-sc-chat] [data-sc-code-block] pre::-webkit-scrollbar-track {
2635
+ background: transparent;
2636
+ }
2637
+ [data-sc-chat] [data-sc-code-block] pre::-webkit-scrollbar-thumb {
2638
+ background: rgba(255, 255, 255, 0.15);
2639
+ border-radius: 4px;
2640
+ }
2641
+
2642
+ /* \u2500\u2500 Chat input area \u2500\u2500 */
2643
+ [data-sc-chat] [data-sc-chat-input] {
2644
+ display: flex;
2645
+ align-items: flex-end;
2646
+ gap: 8px;
2647
+ padding: var(--sc-chat-input-padding, 12px 16px);
2648
+ border-top: 1px solid var(--sc-content-border-color, #e8e8ee);
2649
+ background: var(--sc-chat-input-bg, #ffffff);
2650
+ }
2651
+
2652
+ [data-sc-chat] [data-sc-chat-input] textarea {
2653
+ flex: 1;
2654
+ border: 1px solid var(--sc-content-border-color, #e8e8ee);
2655
+ border-radius: var(--sc-chat-textarea-radius, 14px);
2656
+ padding: var(--sc-chat-textarea-padding, 10px 16px);
2657
+ font-family: inherit;
2658
+ font-size: var(--sc-chat-textarea-font-size, 0.9rem);
2659
+ resize: none;
2660
+ outline: none;
2661
+ background: var(--sc-chat-input-bg, #ffffff);
2662
+ color: var(--sc-content-text-color, #1a1a2e);
2663
+ min-height: 42px;
2664
+ max-height: 150px;
2665
+ line-height: 1.4;
2666
+ transition: border-color 0.2s, box-shadow 0.2s;
2667
+ overflow-y: auto;
2668
+ }
2669
+
2670
+ [data-sc-chat] [data-sc-chat-input] textarea:focus {
2671
+ border-color: var(--sc-color-primary, #6a59ce);
2672
+ box-shadow: 0 0 0 3px var(--sc-chat-focus-ring, rgba(106, 89, 206, 0.1));
2673
+ }
2674
+
2675
+ [data-sc-chat] [data-sc-send-btn] {
2676
+ background: var(--sc-color-primary, #6a59ce);
2677
+ color: var(--sc-color-primary-text, #ffffff);
2678
+ border: none;
2679
+ border-radius: var(--sc-chat-send-btn-radius, 50%);
2680
+ width: var(--sc-chat-send-btn-size, 38px);
2681
+ height: var(--sc-chat-send-btn-size, 38px);
2682
+ cursor: pointer;
2683
+ display: flex;
2684
+ align-items: center;
2685
+ justify-content: center;
2686
+ flex-shrink: 0;
2687
+ transition: background 0.2s, transform 0.15s, opacity 0.2s;
2688
+ }
2689
+
2690
+ [data-sc-chat] [data-sc-send-btn]:hover:not(:disabled) {
2691
+ background: var(--sc-color-primary-hover, #5a49be);
2692
+ transform: scale(1.05);
2693
+ }
2694
+
2695
+ [data-sc-chat] [data-sc-send-btn]:active:not(:disabled) {
2696
+ transform: scale(0.95);
2697
+ }
2698
+
2699
+ [data-sc-chat] [data-sc-send-btn]:disabled {
2700
+ background: var(--sc-content-border-color, #e8e8ee);
2701
+ color: var(--sc-content-text-secondary-color, #87919f);
2702
+ cursor: default;
2703
+ }
2704
+
2705
+ [data-sc-chat] [data-sc-send-btn] svg {
2706
+ display: block;
2707
+ }
2708
+
2709
+ /* \u2500\u2500 Typing indicator (compact: three bouncing dots) \u2500\u2500 */
2710
+ [data-sc-chat] [data-sc-typing] {
2711
+ display: flex;
2712
+ gap: 4px;
2713
+ padding: 12px 16px;
2714
+ background: var(--sc-chat-loading-bg, #f4f4f8);
2715
+ border-radius: 18px 18px 18px 4px;
2716
+ width: fit-content;
2717
+ margin-left: 34px;
2718
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
2719
+ }
2720
+
2721
+ [data-sc-chat] [data-sc-typing] span {
2722
+ width: 6px;
2723
+ height: 6px;
2724
+ border-radius: 50%;
2725
+ background: var(--sc-content-text-secondary-color, #87919f);
2726
+ animation: sc-typing-bounce 1.4s infinite ease-in-out both;
2727
+ }
2728
+
2729
+ [data-sc-chat] [data-sc-typing] span:nth-child(2) { animation-delay: 0.16s; }
2730
+ [data-sc-chat] [data-sc-typing] span:nth-child(3) { animation-delay: 0.32s; }
2731
+
2732
+ /* \u2500\u2500 Suggestion chips \u2500\u2500 */
2733
+ [data-sc-chat] [data-sc-suggestions] {
2734
+ display: flex;
2735
+ flex-wrap: wrap;
2736
+ gap: 8px;
2737
+ padding: 8px 16px;
2738
+ }
2739
+
2740
+ [data-sc-chat] [data-sc-suggestions] button {
2741
+ background: transparent;
2742
+ border: 1px solid var(--sc-content-border-color, #e8e8ee);
2743
+ border-radius: 20px;
2744
+ padding: 7px 16px;
2745
+ font-size: 0.84rem;
2746
+ cursor: pointer;
2747
+ color: var(--sc-content-text-color, #1a1a2e);
2748
+ transition: all 0.2s;
2749
+ }
2750
+
2751
+ [data-sc-chat] [data-sc-suggestions] button:hover {
2752
+ background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);
2753
+ border-color: var(--sc-color-primary, #6a59ce);
2754
+ color: var(--sc-color-primary, #6a59ce);
2755
+ transform: translateY(-1px);
2756
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
2757
+ }
2758
+
2759
+ /* \u2500\u2500 Action bar (hover-revealed message actions: copy, regenerate) \u2500\u2500 */
2760
+ [data-sc-chat] [data-sc-action-bar] {
2761
+ display: none;
2762
+ gap: 2px;
2763
+ padding-top: 2px;
2764
+ }
2765
+
2766
+ [data-sc-chat] [data-sc-msg-row]:hover [data-sc-action-bar] {
2767
+ display: flex;
2768
+ }
2769
+
2770
+ [data-sc-chat] [data-sc-action-bar] button {
2771
+ background: transparent;
2772
+ border: none;
2773
+ border-radius: 6px;
2774
+ padding: 5px;
2775
+ cursor: pointer;
2776
+ color: var(--sc-content-text-secondary-color, #87919f);
2777
+ display: flex;
2778
+ align-items: center;
2779
+ justify-content: center;
2780
+ width: 28px;
2781
+ height: 28px;
2782
+ transition: background 0.15s, color 0.15s;
2783
+ }
2784
+
2785
+ [data-sc-chat] [data-sc-action-bar] button:hover {
2786
+ background: var(--sc-chat-action-bar-bg, rgba(0, 0, 0, 0.06));
2787
+ color: var(--sc-content-text-color, #1a1a2e);
2788
+ }
2789
+
2790
+ /* \u2500\u2500 Tool call cards (compact: bordered card + icon) \u2500\u2500 */
2791
+ [data-sc-chat] [data-sc-tool-card] {
2792
+ border: 1px solid var(--sc-content-border-color, #e8e8ee);
2793
+ border-left: 3px solid var(--sc-color-primary, #6a59ce);
2794
+ border-radius: 4px 10px 10px 4px;
2795
+ padding: 10px 14px;
2796
+ margin-top: 8px;
2797
+ font-size: 0.84rem;
2798
+ background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);
2799
+ transition: border-color 0.2s;
2800
+ }
2801
+
2802
+ [data-sc-chat] [data-sc-tool-card][data-sc-active] {
2803
+ border-left-color: #3b82f6;
2804
+ }
2805
+
2806
+ [data-sc-chat] [data-sc-tool-header] {
2807
+ display: flex;
2808
+ align-items: center;
2809
+ gap: 8px;
2810
+ }
2811
+
2812
+ [data-sc-chat] [data-sc-tool-icon] {
2813
+ display: flex;
2814
+ color: var(--sc-color-primary, #6a59ce);
2815
+ }
2816
+
2817
+ [data-sc-chat] [data-sc-tool-icon][data-sc-status="done"] {
2818
+ color: #22c55e;
2819
+ }
2820
+
2821
+ [data-sc-chat] [data-sc-tool-icon][data-sc-status="error"] {
2822
+ color: #ef4444;
2823
+ }
2824
+
2825
+ [data-sc-chat] [data-sc-tool-icon][data-sc-status="running"],
2826
+ [data-sc-chat] [data-sc-tool-icon][data-sc-status="args-streaming"] {
2827
+ color: #3b82f6;
2828
+ }
2829
+
2830
+ [data-sc-chat] [data-sc-spinner] {
2831
+ animation: sc-spin 0.8s linear infinite;
2832
+ }
2833
+
2834
+ [data-sc-chat] [data-sc-tool-name] {
2835
+ font-weight: 500;
2836
+ }
2837
+
2838
+ [data-sc-chat] [data-sc-tool-error] {
2839
+ color: #ef4444;
2840
+ font-size: 0.8rem;
2841
+ margin-top: 6px;
2842
+ }
2843
+
2844
+ [data-sc-chat] [data-sc-tool-actions] {
2845
+ display: flex;
2846
+ gap: 8px;
2847
+ margin-top: 10px;
2848
+ }
2849
+
2850
+ [data-sc-chat] [data-sc-tool-actions] button {
2851
+ padding: 5px 14px;
2852
+ border-radius: 8px;
2853
+ font-size: 0.8rem;
2854
+ cursor: pointer;
2855
+ border: 1px solid var(--sc-content-border-color, #e8e8ee);
2856
+ background: transparent;
2857
+ transition: all 0.15s;
2858
+ }
2859
+
2860
+ [data-sc-chat] [data-sc-tool-actions] [data-sc-approve] {
2861
+ background: var(--sc-color-primary, #6a59ce);
2862
+ color: var(--sc-color-primary-text, #ffffff);
2863
+ border-color: transparent;
2864
+ }
2865
+
2866
+ [data-sc-chat] [data-sc-tool-actions] [data-sc-approve]:hover {
2867
+ filter: brightness(1.1);
2868
+ }
2869
+
2870
+ [data-sc-chat] [data-sc-tool-actions] [data-sc-deny] {
2871
+ color: var(--sc-content-text-secondary-color, #87919f);
2872
+ }
2873
+
2874
+ [data-sc-chat] [data-sc-tool-actions] [data-sc-deny]:hover {
2875
+ border-color: #ef4444;
2876
+ color: #ef4444;
2877
+ }
2878
+
2879
+ /* \u2500\u2500 Error banner \u2500\u2500 */
2880
+ [data-sc-chat] [data-sc-error] {
2881
+ background: #fef2f2;
2882
+ border-left: 3px solid #ef4444;
2883
+ padding: 8px 12px;
2884
+ border-radius: 0 8px 8px 0;
2885
+ font-size: 0.84rem;
2886
+ color: #dc2626;
2887
+ }
2888
+
2889
+ [data-sc-chat] [data-sc-msg-error] {
2890
+ font-size: 0.8rem;
2891
+ color: #ef4444;
2892
+ margin-top: 4px;
2893
+ }
2894
+
2895
+ /* \u2500\u2500 Scroll-to-bottom button \u2500\u2500 */
2896
+ [data-sc-chat] [data-sc-scroll-btn] {
2897
+ position: absolute;
2898
+ bottom: 80px;
2899
+ left: 50%;
2900
+ transform: translateX(-50%);
2901
+ background: var(--sc-chat-assistant-bubble-bg, #f4f4f8);
2902
+ color: var(--sc-content-text-color, #1a1a2e);
2903
+ border: 1px solid var(--sc-content-border-color, #e8e8ee);
2904
+ border-radius: 50%;
2905
+ width: 36px;
2906
+ height: 36px;
2907
+ display: flex;
2908
+ align-items: center;
2909
+ justify-content: center;
2910
+ cursor: pointer;
2911
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
2912
+ z-index: 1;
2913
+ transition: box-shadow 0.2s;
2914
+ }
2915
+
2916
+ [data-sc-chat] [data-sc-scroll-btn]:hover {
2917
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2918
+ }
2919
+
2920
+ [data-sc-chat] [data-sc-scroll-btn] svg {
2921
+ display: block;
2922
+ }
2923
+
2924
+
2925
+ `.trim();
2926
+ function injectChatStyles(root = typeof document === "undefined" ? void 0 : document) {
2927
+ if (!root) return;
2928
+ if (root.getElementById?.(STYLE_ID) ?? root.querySelector(`#${STYLE_ID}`)) return;
2929
+ const style = document.createElement("style");
2930
+ style.id = STYLE_ID;
2931
+ style.textContent = STYLE_RULES;
2932
+ if (root instanceof Document) {
2933
+ root.head.appendChild(style);
2934
+ return;
2935
+ }
2936
+ root.insertBefore(style, root.firstChild ?? null);
2937
+ }
2938
+ var SyntroChat = class extends LitElement {
2939
+ constructor() {
2940
+ super(...arguments);
2941
+ this._messages = [];
2942
+ this._isTyping = false;
2943
+ this._isConnected = false;
2944
+ this._sessionId = null;
2945
+ this._inputValue = "";
2946
+ this._isComposing = false;
2947
+ this._isStreaming = false;
2948
+ this._unsubscribe = null;
2949
+ this._scrollContainer = null;
2950
+ this._userScrolledUp = false;
2951
+ this._errorMessage = null;
2952
+ this._handleScroll = () => {
2953
+ if (!this._scrollContainer) return;
2954
+ const { scrollTop, scrollHeight, clientHeight } = this._scrollContainer;
2955
+ this._userScrolledUp = scrollHeight - scrollTop - clientHeight > 50;
2956
+ };
2957
+ this._handleEvent = (event) => {
2958
+ switch (event.type) {
2959
+ case "session-ready":
2960
+ this._sessionId = event.sessionId;
2961
+ this._isConnected = true;
2962
+ break;
2963
+ case "messages-snapshot":
2964
+ this._messages = [...event.messages];
2965
+ this._isStreaming = event.messages.some((m2) => m2.status === "streaming");
2966
+ this._scrollToBottom();
2967
+ break;
2968
+ case "message-append":
2969
+ if (!this._messages.some((m2) => m2.id === event.message.id)) {
2970
+ this._messages = [...this._messages, event.message];
2971
+ }
2972
+ this._isStreaming = event.message.status === "streaming";
2973
+ this._scrollToBottom();
2974
+ break;
2975
+ case "message-delta": {
2976
+ this._messages = this._messages.map(
2977
+ (m2) => m2.id === event.messageId ? { ...m2, content: m2.content + event.delta } : m2
2978
+ );
2979
+ this._scrollToBottom();
2980
+ break;
2981
+ }
2982
+ case "message-complete":
2983
+ this._messages = this._messages.map(
2984
+ (m2) => m2.id === event.messageId ? { ...m2, status: "complete" } : m2
2985
+ );
2986
+ this._isStreaming = false;
2987
+ break;
2988
+ case "typing":
2989
+ this._isTyping = event.isTyping;
2990
+ if (event.isTyping) this._scrollToBottom();
2991
+ break;
2992
+ case "tool-call": {
2993
+ this._messages = this._messages.map((m2) => {
2994
+ if (m2.id !== event.messageId) return m2;
2995
+ const existing = (m2.toolCalls ?? []).findIndex((tc) => tc.id === event.toolCall.id);
2996
+ if (existing >= 0) {
2997
+ const toolCalls = [...m2.toolCalls ?? []];
2998
+ toolCalls[existing] = event.toolCall;
2999
+ return { ...m2, toolCalls };
3000
+ }
3001
+ return { ...m2, toolCalls: [...m2.toolCalls ?? [], event.toolCall] };
3002
+ });
3003
+ if (this.autoExecTools?.has(event.toolCall.name) && event.toolCall.status === "pending") {
3004
+ this._markToolDone(event.toolCall.id);
3005
+ this.transport.send({
3006
+ type: "tool-result",
3007
+ toolCallId: event.toolCall.id,
3008
+ result: null,
3009
+ approved: true
3010
+ });
3011
+ }
3012
+ break;
3013
+ }
3014
+ case "tool-call-args-delta": {
3015
+ this._messages = this._messages.map((m2) => {
3016
+ if (!m2.toolCalls) return m2;
3017
+ const toolCalls = m2.toolCalls.map(
3018
+ (tc) => tc.id === event.toolCallId ? { ...tc, argsBuffer: tc.argsBuffer + event.delta } : tc
3019
+ );
3020
+ return { ...m2, toolCalls };
3021
+ });
3022
+ break;
3023
+ }
3024
+ case "tool-call-done": {
3025
+ this._messages = this._messages.map((m2) => {
3026
+ if (!m2.toolCalls) return m2;
3027
+ const toolCalls = m2.toolCalls.map((tc) => {
3028
+ if (tc.id !== event.toolCallId) return tc;
3029
+ let args;
3030
+ try {
3031
+ args = JSON.parse(tc.argsBuffer);
3032
+ } catch {
3033
+ args = void 0;
3034
+ }
3035
+ return { ...tc, status: "done", args };
3036
+ });
3037
+ return { ...m2, toolCalls };
3038
+ });
3039
+ break;
3040
+ }
3041
+ case "error":
3042
+ this._errorMessage = event.message;
3043
+ break;
3044
+ case "a2ui":
3045
+ break;
3046
+ }
3047
+ };
3048
+ this._onInput = (e) => {
3049
+ this._inputValue = e.target.value;
3050
+ };
3051
+ this._onSend = () => {
3052
+ const text2 = this._inputValue.trim();
3053
+ if (!text2) return;
3054
+ this._appendUserMessage(text2);
3055
+ this.transport.send({ type: "user-message", text: text2 });
3056
+ this._inputValue = "";
3057
+ };
3058
+ this._onStop = () => {
3059
+ this.transport.send({ type: "stop-generation" });
3060
+ };
3061
+ this._onKeyDown = (e) => {
3062
+ if (e.key === "Enter" && !e.shiftKey && !this._isComposing) {
3063
+ e.preventDefault();
3064
+ if (this._isStreaming) {
3065
+ this._onStop();
3066
+ } else {
3067
+ this._onSend();
3068
+ }
3069
+ }
3070
+ };
3071
+ this._onCopy = (content) => {
3072
+ navigator.clipboard?.writeText(content);
3073
+ };
3074
+ this._onRegenerate = (messageId) => {
3075
+ this.transport.send({ type: "regenerate", messageId });
3076
+ };
3077
+ this._onToolApprove = (toolCallId) => {
3078
+ this._markToolDone(toolCallId);
3079
+ this.transport.send({
3080
+ type: "tool-result",
3081
+ toolCallId,
3082
+ result: null,
3083
+ approved: true
3084
+ });
3085
+ };
3086
+ this._onToolDeny = (toolCallId) => {
3087
+ this._markToolDone(toolCallId);
3088
+ this.transport.send({
3089
+ type: "tool-result",
3090
+ toolCallId,
3091
+ result: null,
3092
+ approved: false
3093
+ });
3094
+ };
3095
+ this._onCompositionStart = () => {
3096
+ this._isComposing = true;
3097
+ };
3098
+ this._onCompositionEnd = () => {
3099
+ this._isComposing = false;
3100
+ };
3101
+ this._onSuggestion = (text2) => {
3102
+ this.sendUserMessage(text2);
3103
+ };
3104
+ }
3105
+ createRenderRoot() {
3106
+ return this;
3107
+ }
3108
+ connectedCallback() {
3109
+ super.connectedCallback();
3110
+ this._ensureStylesInRoot();
3111
+ if (this.transport) {
3112
+ this._unsubscribe = this.transport.subscribe(this._handleEvent);
3113
+ this.transport.connect();
3114
+ }
3115
+ }
3116
+ disconnectedCallback() {
3117
+ super.disconnectedCallback();
3118
+ this._unsubscribe?.();
3119
+ this._unsubscribe = null;
3120
+ this.transport?.disconnect();
3121
+ }
3122
+ firstUpdated() {
3123
+ this._ensureStylesInRoot();
3124
+ this._scrollContainer = this.querySelector("[data-sc-scroll-area]");
3125
+ this._scrollContainer?.addEventListener("scroll", this._handleScroll);
3126
+ }
3127
+ /**
3128
+ * Resolve the *effective* rendering root for this chat instance.
3129
+ *
3130
+ * `this.getRootNode()` will follow shadow boundaries, but in the editor
3131
+ * surface the chat is created via `document.createElement('syntro-chat')`
3132
+ * and then committed into the smart-canvas shadow tree by Lit several
3133
+ * frames after `connectedCallback`. During that window
3134
+ * `getRootNode()` returns Document even though the element ultimately
3135
+ * lives in a shadow root (BUG-1779636600).
3136
+ *
3137
+ * Walk the parent chain manually, hopping across shadow boundaries via
3138
+ * `.host`, and return the deepest enclosing `ShadowRoot` we can reach.
3139
+ * Fall back to `getRootNode()` (Document or self) when no shadow root
3140
+ * is in the chain — that's the host-page chatbot case.
3141
+ */
3142
+ _resolveStyleRoot() {
3143
+ let node = this;
3144
+ while (node) {
3145
+ const parent = node.parentNode;
3146
+ if (parent) {
3147
+ node = parent;
3148
+ continue;
3149
+ }
3150
+ if (node instanceof ShadowRoot) return node;
3151
+ break;
3152
+ }
3153
+ const r = this.getRootNode();
3154
+ return r instanceof ShadowRoot || r instanceof Document ? r : document;
3155
+ }
3156
+ _ensureStylesInRoot() {
3157
+ injectChatStyles(this._resolveStyleRoot());
3158
+ }
3159
+ updated() {
3160
+ this._injectCodeCopyButtons();
3161
+ }
3162
+ _injectCodeCopyButtons() {
3163
+ const blocks = this.querySelectorAll("[data-sc-code-block]:not(:has([data-sc-copy-btn]))");
3164
+ for (const block of blocks) {
3165
+ const btn = document.createElement("button");
3166
+ btn.setAttribute("data-sc-copy-btn", "");
3167
+ btn.textContent = "Copy";
3168
+ btn.addEventListener("click", () => {
3169
+ const code = block.querySelector("code");
3170
+ if (code) navigator.clipboard?.writeText(code.textContent ?? "");
3171
+ btn.textContent = "Copied!";
3172
+ setTimeout(() => {
3173
+ btn.textContent = "Copy";
3174
+ }, 1500);
3175
+ });
3176
+ block.appendChild(btn);
3177
+ }
3178
+ }
3179
+ _scrollToBottom() {
3180
+ if (this._userScrolledUp) return;
3181
+ requestAnimationFrame(() => {
3182
+ if (this._scrollContainer?.scrollTo) {
3183
+ this._scrollContainer.scrollTo({
3184
+ top: this._scrollContainer.scrollHeight,
3185
+ behavior: "smooth"
3186
+ });
3187
+ }
3188
+ });
3189
+ }
3190
+ _appendUserMessage(text2) {
3191
+ const msg = {
3192
+ id: `user-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`,
3193
+ role: "user",
3194
+ content: text2,
3195
+ timestamp: Date.now(),
3196
+ status: "complete"
3197
+ };
3198
+ this._messages = [...this._messages, msg];
3199
+ this._scrollToBottom();
3200
+ }
3201
+ _markToolDone(toolCallId) {
3202
+ this._messages = this._messages.map((m2) => {
3203
+ if (!m2.toolCalls) return m2;
3204
+ const toolCalls = m2.toolCalls.map(
3205
+ (tc) => tc.id === toolCallId ? { ...tc, status: "done" } : tc
3206
+ );
3207
+ return { ...m2, toolCalls };
3208
+ });
3209
+ }
3210
+ /**
3211
+ * Append a user message to the local log and forward it to the
3212
+ * transport. Equivalent to typing `text` and pressing Send — exposed
3213
+ * publicly so consumers that render their own input affordances (e.g.
3214
+ * suggestion rows inside a custom empty-state slot) get the same
3215
+ * optimistic-append behavior the built-in input has, without
3216
+ * duplicating logic.
3217
+ */
3218
+ sendUserMessage(text2) {
3219
+ const trimmed = text2.trim();
3220
+ if (!trimmed) return;
3221
+ this._appendUserMessage(trimmed);
3222
+ this.transport.send({ type: "user-message", text: trimmed });
3223
+ }
3224
+ render() {
3225
+ const headerSlot = this.slots?.header;
3226
+ const emptyState = this.slots?.emptyState ?? (this.greeting ? html7`<div
3227
+ style="padding:24px;text-align:center;color:var(--sc-content-text-secondary-color,#87919f)"
3228
+ >
3229
+ ${this.greeting}
3230
+ </div>` : void 0);
3231
+ return html7`
3232
+ <div data-sc-chat style="display:flex;flex-direction:column;height:100%;position:relative;">
3233
+ ${headerSlot && typeof headerSlot === "object" && "values" in headerSlot ? headerSlot : nothing5}
3234
+ <div data-sc-scroll-area style="flex:1;overflow-y:auto;">
3235
+ ${renderMessageList({
3236
+ messages: this._messages,
3237
+ isTyping: this._isTyping,
3238
+ toolLabels: this.toolLabels,
3239
+ toolRenderers: this.toolRenderers,
3240
+ defaultToolRenderer: this.defaultToolRenderer,
3241
+ onCopy: this._onCopy,
3242
+ onRegenerate: this._onRegenerate,
3243
+ onToolApprove: this._onToolApprove,
3244
+ onToolDeny: this._onToolDeny,
3245
+ emptyStateSlot: emptyState,
3246
+ typingIndicatorSlot: this.slots?.typingIndicator
3247
+ })}
3248
+ </div>
3249
+ ${this._userScrolledUp ? html7`<button data-sc-scroll-btn @click=${() => {
3250
+ this._userScrolledUp = false;
3251
+ this._scrollToBottom();
3252
+ }} aria-label="Scroll to bottom"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M4 6l4 4 4-4" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></button>` : nothing5}
3253
+ ${this._errorMessage ? html7`<div data-sc-error role="alert">${this._errorMessage}</div>` : nothing5}
3254
+ ${renderChatInput({
3255
+ value: this._inputValue,
3256
+ isStreaming: this._isStreaming || this._isTyping,
3257
+ isComposing: this._isComposing,
3258
+ onInput: this._onInput,
3259
+ onSend: this._onSend,
3260
+ onStop: this._onStop,
3261
+ onKeyDown: this._onKeyDown,
3262
+ onCompositionStart: this._onCompositionStart,
3263
+ onCompositionEnd: this._onCompositionEnd,
3264
+ suggestions: this._messages.length === 0 ? this.suggestions : void 0,
3265
+ onSuggestion: this._onSuggestion,
3266
+ inputActionsSlot: this.slots?.inputActions,
3267
+ beforeInputSlot: this.slots?.beforeInput,
3268
+ placeholder: this.placeholder
3269
+ })}
3270
+ </div>
3271
+ `;
3272
+ }
3273
+ };
3274
+ SyntroChat.properties = {
3275
+ transport: { attribute: false },
3276
+ greeting: { type: String },
3277
+ suggestions: { attribute: false },
3278
+ toolLabels: { attribute: false },
3279
+ toolRenderers: { attribute: false },
3280
+ defaultToolRenderer: { attribute: false },
3281
+ autoExecTools: { attribute: false },
3282
+ placeholder: { type: String },
3283
+ slots: { attribute: false },
3284
+ _messages: { state: true },
3285
+ _isTyping: { state: true },
3286
+ _isConnected: { state: true },
3287
+ _sessionId: { state: true },
3288
+ _inputValue: { state: true },
3289
+ _isComposing: { state: true },
3290
+ _isStreaming: { state: true },
3291
+ _userScrolledUp: { state: true },
3292
+ _errorMessage: { state: true }
3293
+ };
3294
+ if (!customElements.get("syntro-chat")) {
3295
+ customElements.define("syntro-chat", SyntroChat);
3296
+ }
3297
+
3298
+ export {
3299
+ renderMarkdown
3300
+ };
3301
+ /*! Bundled license information:
3302
+
3303
+ dompurify/dist/purify.es.mjs:
3304
+ (*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE *)
3305
+ */
3306
+ //# sourceMappingURL=chunk-UC4XU6GH.js.map