@alan-ai/alan-sdk-web 1.8.120 → 1.8.123

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/alan_lib.js CHANGED
@@ -25853,6 +25853,1092 @@
25853
25853
  }
25854
25854
  });
25855
25855
 
25856
+ // node_modules/dompurify/dist/purify.cjs.js
25857
+ var require_purify_cjs = __commonJS({
25858
+ "node_modules/dompurify/dist/purify.cjs.js"(exports, module) {
25859
+ "use strict";
25860
+ var {
25861
+ entries,
25862
+ setPrototypeOf,
25863
+ isFrozen,
25864
+ getPrototypeOf,
25865
+ getOwnPropertyDescriptor
25866
+ } = Object;
25867
+ var {
25868
+ freeze,
25869
+ seal,
25870
+ create
25871
+ } = Object;
25872
+ var {
25873
+ apply,
25874
+ construct
25875
+ } = typeof Reflect !== "undefined" && Reflect;
25876
+ if (!freeze) {
25877
+ freeze = function freeze2(x) {
25878
+ return x;
25879
+ };
25880
+ }
25881
+ if (!seal) {
25882
+ seal = function seal2(x) {
25883
+ return x;
25884
+ };
25885
+ }
25886
+ if (!apply) {
25887
+ apply = function apply2(func, thisArg) {
25888
+ for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
25889
+ args[_key - 2] = arguments[_key];
25890
+ }
25891
+ return func.apply(thisArg, args);
25892
+ };
25893
+ }
25894
+ if (!construct) {
25895
+ construct = function construct2(Func) {
25896
+ for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
25897
+ args[_key2 - 1] = arguments[_key2];
25898
+ }
25899
+ return new Func(...args);
25900
+ };
25901
+ }
25902
+ var arrayForEach = unapply(Array.prototype.forEach);
25903
+ var arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
25904
+ var arrayPop = unapply(Array.prototype.pop);
25905
+ var arrayPush = unapply(Array.prototype.push);
25906
+ var arraySplice = unapply(Array.prototype.splice);
25907
+ var arrayIsArray = Array.isArray;
25908
+ var stringToLowerCase = unapply(String.prototype.toLowerCase);
25909
+ var stringToString = unapply(String.prototype.toString);
25910
+ var stringMatch = unapply(String.prototype.match);
25911
+ var stringReplace = unapply(String.prototype.replace);
25912
+ var stringIndexOf = unapply(String.prototype.indexOf);
25913
+ var stringTrim = unapply(String.prototype.trim);
25914
+ var numberToString = unapply(Number.prototype.toString);
25915
+ var booleanToString = unapply(Boolean.prototype.toString);
25916
+ var bigintToString = typeof BigInt === "undefined" ? null : unapply(BigInt.prototype.toString);
25917
+ var symbolToString = typeof Symbol === "undefined" ? null : unapply(Symbol.prototype.toString);
25918
+ var objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
25919
+ var objectToString = unapply(Object.prototype.toString);
25920
+ var regExpTest = unapply(RegExp.prototype.test);
25921
+ var typeErrorCreate = unconstruct(TypeError);
25922
+ function unapply(func) {
25923
+ return function(thisArg) {
25924
+ if (thisArg instanceof RegExp) {
25925
+ thisArg.lastIndex = 0;
25926
+ }
25927
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
25928
+ args[_key3 - 1] = arguments[_key3];
25929
+ }
25930
+ return apply(func, thisArg, args);
25931
+ };
25932
+ }
25933
+ function unconstruct(Func) {
25934
+ return function() {
25935
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
25936
+ args[_key4] = arguments[_key4];
25937
+ }
25938
+ return construct(Func, args);
25939
+ };
25940
+ }
25941
+ function addToSet(set, array) {
25942
+ let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
25943
+ if (setPrototypeOf) {
25944
+ setPrototypeOf(set, null);
25945
+ }
25946
+ if (!arrayIsArray(array)) {
25947
+ return set;
25948
+ }
25949
+ let l = array.length;
25950
+ while (l--) {
25951
+ let element = array[l];
25952
+ if (typeof element === "string") {
25953
+ const lcElement = transformCaseFunc(element);
25954
+ if (lcElement !== element) {
25955
+ if (!isFrozen(array)) {
25956
+ array[l] = lcElement;
25957
+ }
25958
+ element = lcElement;
25959
+ }
25960
+ }
25961
+ set[element] = true;
25962
+ }
25963
+ return set;
25964
+ }
25965
+ function cleanArray(array) {
25966
+ for (let index3 = 0; index3 < array.length; index3++) {
25967
+ const isPropertyExist = objectHasOwnProperty(array, index3);
25968
+ if (!isPropertyExist) {
25969
+ array[index3] = null;
25970
+ }
25971
+ }
25972
+ return array;
25973
+ }
25974
+ function clone3(object) {
25975
+ const newObject = create(null);
25976
+ for (const [property, value] of entries(object)) {
25977
+ const isPropertyExist = objectHasOwnProperty(object, property);
25978
+ if (isPropertyExist) {
25979
+ if (arrayIsArray(value)) {
25980
+ newObject[property] = cleanArray(value);
25981
+ } else if (value && typeof value === "object" && value.constructor === Object) {
25982
+ newObject[property] = clone3(value);
25983
+ } else {
25984
+ newObject[property] = value;
25985
+ }
25986
+ }
25987
+ }
25988
+ return newObject;
25989
+ }
25990
+ function stringifyValue(value) {
25991
+ switch (typeof value) {
25992
+ case "string": {
25993
+ return value;
25994
+ }
25995
+ case "number": {
25996
+ return numberToString(value);
25997
+ }
25998
+ case "boolean": {
25999
+ return booleanToString(value);
26000
+ }
26001
+ case "bigint": {
26002
+ return bigintToString ? bigintToString(value) : "0";
26003
+ }
26004
+ case "symbol": {
26005
+ return symbolToString ? symbolToString(value) : "Symbol()";
26006
+ }
26007
+ case "undefined": {
26008
+ return objectToString(value);
26009
+ }
26010
+ case "function":
26011
+ case "object": {
26012
+ if (value === null) {
26013
+ return objectToString(value);
26014
+ }
26015
+ const valueAsRecord = value;
26016
+ const valueToString = lookupGetter(valueAsRecord, "toString");
26017
+ if (typeof valueToString === "function") {
26018
+ const stringified = valueToString(valueAsRecord);
26019
+ return typeof stringified === "string" ? stringified : objectToString(stringified);
26020
+ }
26021
+ return objectToString(value);
26022
+ }
26023
+ default: {
26024
+ return objectToString(value);
26025
+ }
26026
+ }
26027
+ }
26028
+ function lookupGetter(object, prop3) {
26029
+ while (object !== null) {
26030
+ const desc = getOwnPropertyDescriptor(object, prop3);
26031
+ if (desc) {
26032
+ if (desc.get) {
26033
+ return unapply(desc.get);
26034
+ }
26035
+ if (typeof desc.value === "function") {
26036
+ return unapply(desc.value);
26037
+ }
26038
+ }
26039
+ object = getPrototypeOf(object);
26040
+ }
26041
+ function fallbackValue() {
26042
+ return null;
26043
+ }
26044
+ return fallbackValue;
26045
+ }
26046
+ function isRegex(value) {
26047
+ try {
26048
+ regExpTest(value, "");
26049
+ return true;
26050
+ } catch (_unused) {
26051
+ return false;
26052
+ }
26053
+ }
26054
+ 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"]);
26055
+ 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"]);
26056
+ 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"]);
26057
+ 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"]);
26058
+ 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"]);
26059
+ var mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
26060
+ var text5 = freeze(["#text"]);
26061
+ var html5 = 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"]);
26062
+ 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"]);
26063
+ var mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnalign", "columnlines", "columnspacing", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lquote", "lspace", "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"]);
26064
+ var xml3 = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
26065
+ var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
26066
+ var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
26067
+ var TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm);
26068
+ var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
26069
+ var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
26070
+ var IS_ALLOWED_URI = seal(
26071
+ /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i
26072
+ // eslint-disable-line no-useless-escape
26073
+ );
26074
+ var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
26075
+ var ATTR_WHITESPACE = seal(
26076
+ /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g
26077
+ // eslint-disable-line no-control-regex
26078
+ );
26079
+ var DOCTYPE_NAME = seal(/^html$/i);
26080
+ var CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
26081
+ var EXPRESSIONS = /* @__PURE__ */ Object.freeze({
26082
+ __proto__: null,
26083
+ ARIA_ATTR,
26084
+ ATTR_WHITESPACE,
26085
+ CUSTOM_ELEMENT,
26086
+ DATA_ATTR,
26087
+ DOCTYPE_NAME,
26088
+ ERB_EXPR,
26089
+ IS_ALLOWED_URI,
26090
+ IS_SCRIPT_OR_DATA,
26091
+ MUSTACHE_EXPR,
26092
+ TMPLIT_EXPR
26093
+ });
26094
+ var NODE_TYPE = {
26095
+ element: 1,
26096
+ text: 3,
26097
+ // Deprecated
26098
+ progressingInstruction: 7,
26099
+ comment: 8,
26100
+ document: 9
26101
+ };
26102
+ var getGlobal = function getGlobal2() {
26103
+ return typeof window === "undefined" ? null : window;
26104
+ };
26105
+ var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, purifyHostElement) {
26106
+ if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") {
26107
+ return null;
26108
+ }
26109
+ let suffix = null;
26110
+ const ATTR_NAME = "data-tt-policy-suffix";
26111
+ if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {
26112
+ suffix = purifyHostElement.getAttribute(ATTR_NAME);
26113
+ }
26114
+ const policyName = "dompurify" + (suffix ? "#" + suffix : "");
26115
+ try {
26116
+ return trustedTypes.createPolicy(policyName, {
26117
+ createHTML(html6) {
26118
+ return html6;
26119
+ },
26120
+ createScriptURL(scriptUrl) {
26121
+ return scriptUrl;
26122
+ }
26123
+ });
26124
+ } catch (_) {
26125
+ console.warn("TrustedTypes policy " + policyName + " could not be created.");
26126
+ return null;
26127
+ }
26128
+ };
26129
+ var _createHooksMap = function _createHooksMap2() {
26130
+ return {
26131
+ afterSanitizeAttributes: [],
26132
+ afterSanitizeElements: [],
26133
+ afterSanitizeShadowDOM: [],
26134
+ beforeSanitizeAttributes: [],
26135
+ beforeSanitizeElements: [],
26136
+ beforeSanitizeShadowDOM: [],
26137
+ uponSanitizeAttribute: [],
26138
+ uponSanitizeElement: [],
26139
+ uponSanitizeShadowNode: []
26140
+ };
26141
+ };
26142
+ function createDOMPurify() {
26143
+ let window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
26144
+ const DOMPurify2 = (root3) => createDOMPurify(root3);
26145
+ DOMPurify2.version = "3.4.1";
26146
+ DOMPurify2.removed = [];
26147
+ if (!window2 || !window2.document || window2.document.nodeType !== NODE_TYPE.document || !window2.Element) {
26148
+ DOMPurify2.isSupported = false;
26149
+ return DOMPurify2;
26150
+ }
26151
+ let {
26152
+ document: document2
26153
+ } = window2;
26154
+ const originalDocument = document2;
26155
+ const currentScript = originalDocument.currentScript;
26156
+ const {
26157
+ DocumentFragment,
26158
+ HTMLTemplateElement,
26159
+ Node: Node5,
26160
+ Element: Element2,
26161
+ NodeFilter,
26162
+ NamedNodeMap = window2.NamedNodeMap || window2.MozNamedAttrMap,
26163
+ HTMLFormElement,
26164
+ DOMParser: DOMParser2,
26165
+ trustedTypes
26166
+ } = window2;
26167
+ const ElementPrototype = Element2.prototype;
26168
+ const cloneNode2 = lookupGetter(ElementPrototype, "cloneNode");
26169
+ const remove3 = lookupGetter(ElementPrototype, "remove");
26170
+ const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
26171
+ const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
26172
+ const getParentNode = lookupGetter(ElementPrototype, "parentNode");
26173
+ if (typeof HTMLTemplateElement === "function") {
26174
+ const template = document2.createElement("template");
26175
+ if (template.content && template.content.ownerDocument) {
26176
+ document2 = template.content.ownerDocument;
26177
+ }
26178
+ }
26179
+ let trustedTypesPolicy;
26180
+ let emptyHTML = "";
26181
+ const {
26182
+ implementation,
26183
+ createNodeIterator,
26184
+ createDocumentFragment,
26185
+ getElementsByTagName: getElementsByTagName2
26186
+ } = document2;
26187
+ const {
26188
+ importNode
26189
+ } = originalDocument;
26190
+ let hooks = _createHooksMap();
26191
+ DOMPurify2.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
26192
+ const {
26193
+ MUSTACHE_EXPR: MUSTACHE_EXPR2,
26194
+ ERB_EXPR: ERB_EXPR2,
26195
+ TMPLIT_EXPR: TMPLIT_EXPR2,
26196
+ DATA_ATTR: DATA_ATTR2,
26197
+ ARIA_ATTR: ARIA_ATTR2,
26198
+ IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA2,
26199
+ ATTR_WHITESPACE: ATTR_WHITESPACE2,
26200
+ CUSTOM_ELEMENT: CUSTOM_ELEMENT2
26201
+ } = EXPRESSIONS;
26202
+ let {
26203
+ IS_ALLOWED_URI: IS_ALLOWED_URI$1
26204
+ } = EXPRESSIONS;
26205
+ let ALLOWED_TAGS = null;
26206
+ const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text5]);
26207
+ let ALLOWED_ATTR = null;
26208
+ const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html5, ...svg, ...mathMl, ...xml3]);
26209
+ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
26210
+ tagNameCheck: {
26211
+ writable: true,
26212
+ configurable: false,
26213
+ enumerable: true,
26214
+ value: null
26215
+ },
26216
+ attributeNameCheck: {
26217
+ writable: true,
26218
+ configurable: false,
26219
+ enumerable: true,
26220
+ value: null
26221
+ },
26222
+ allowCustomizedBuiltInElements: {
26223
+ writable: true,
26224
+ configurable: false,
26225
+ enumerable: true,
26226
+ value: false
26227
+ }
26228
+ }));
26229
+ let FORBID_TAGS = null;
26230
+ let FORBID_ATTR = null;
26231
+ const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
26232
+ tagCheck: {
26233
+ writable: true,
26234
+ configurable: false,
26235
+ enumerable: true,
26236
+ value: null
26237
+ },
26238
+ attributeCheck: {
26239
+ writable: true,
26240
+ configurable: false,
26241
+ enumerable: true,
26242
+ value: null
26243
+ }
26244
+ }));
26245
+ let ALLOW_ARIA_ATTR = true;
26246
+ let ALLOW_DATA_ATTR = true;
26247
+ let ALLOW_UNKNOWN_PROTOCOLS = false;
26248
+ let ALLOW_SELF_CLOSE_IN_ATTR = true;
26249
+ let SAFE_FOR_TEMPLATES = false;
26250
+ let SAFE_FOR_XML = true;
26251
+ let WHOLE_DOCUMENT = false;
26252
+ let SET_CONFIG = false;
26253
+ let FORCE_BODY = false;
26254
+ let RETURN_DOM = false;
26255
+ let RETURN_DOM_FRAGMENT = false;
26256
+ let RETURN_TRUSTED_TYPE = false;
26257
+ let SANITIZE_DOM = true;
26258
+ let SANITIZE_NAMED_PROPS = false;
26259
+ const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
26260
+ let KEEP_CONTENT = true;
26261
+ let IN_PLACE = false;
26262
+ let USE_PROFILES = {};
26263
+ let FORBID_CONTENTS = null;
26264
+ 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"]);
26265
+ let DATA_URI_TAGS = null;
26266
+ const DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]);
26267
+ let URI_SAFE_ATTRIBUTES = null;
26268
+ const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]);
26269
+ const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
26270
+ const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
26271
+ const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
26272
+ let NAMESPACE = HTML_NAMESPACE;
26273
+ let IS_EMPTY_INPUT = false;
26274
+ let ALLOWED_NAMESPACES = null;
26275
+ const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
26276
+ let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
26277
+ let HTML_INTEGRATION_POINTS = addToSet({}, ["annotation-xml"]);
26278
+ const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]);
26279
+ let PARSER_MEDIA_TYPE = null;
26280
+ const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
26281
+ const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
26282
+ let transformCaseFunc = null;
26283
+ let CONFIG = null;
26284
+ const formElement = document2.createElement("form");
26285
+ const isRegexOrFunction = function isRegexOrFunction2(testValue) {
26286
+ return testValue instanceof RegExp || testValue instanceof Function;
26287
+ };
26288
+ const _parseConfig = function _parseConfig2() {
26289
+ let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
26290
+ if (CONFIG && CONFIG === cfg) {
26291
+ return;
26292
+ }
26293
+ if (!cfg || typeof cfg !== "object") {
26294
+ cfg = {};
26295
+ }
26296
+ cfg = clone3(cfg);
26297
+ PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes
26298
+ SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
26299
+ transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
26300
+ ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") && arrayIsArray(cfg.ALLOWED_TAGS) ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
26301
+ ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") && arrayIsArray(cfg.ALLOWED_ATTR) ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
26302
+ ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") && arrayIsArray(cfg.ALLOWED_NAMESPACES) ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
26303
+ URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") && arrayIsArray(cfg.ADD_URI_SAFE_ATTR) ? addToSet(clone3(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
26304
+ DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") && arrayIsArray(cfg.ADD_DATA_URI_TAGS) ? addToSet(clone3(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
26305
+ FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") && arrayIsArray(cfg.FORBID_CONTENTS) ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
26306
+ FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") && arrayIsArray(cfg.FORBID_TAGS) ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone3({});
26307
+ FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") && arrayIsArray(cfg.FORBID_ATTR) ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone3({});
26308
+ USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === "object" ? clone3(cfg.USE_PROFILES) : cfg.USE_PROFILES : false;
26309
+ ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
26310
+ ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
26311
+ ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
26312
+ ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
26313
+ SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
26314
+ SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
26315
+ WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
26316
+ RETURN_DOM = cfg.RETURN_DOM || false;
26317
+ RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
26318
+ RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
26319
+ FORCE_BODY = cfg.FORCE_BODY || false;
26320
+ SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
26321
+ SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
26322
+ KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
26323
+ IN_PLACE = cfg.IN_PLACE || false;
26324
+ IS_ALLOWED_URI$1 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI;
26325
+ NAMESPACE = typeof cfg.NAMESPACE === "string" ? cfg.NAMESPACE : HTML_NAMESPACE;
26326
+ MATHML_TEXT_INTEGRATION_POINTS = objectHasOwnProperty(cfg, "MATHML_TEXT_INTEGRATION_POINTS") && cfg.MATHML_TEXT_INTEGRATION_POINTS && typeof cfg.MATHML_TEXT_INTEGRATION_POINTS === "object" ? clone3(cfg.MATHML_TEXT_INTEGRATION_POINTS) : addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]);
26327
+ HTML_INTEGRATION_POINTS = objectHasOwnProperty(cfg, "HTML_INTEGRATION_POINTS") && cfg.HTML_INTEGRATION_POINTS && typeof cfg.HTML_INTEGRATION_POINTS === "object" ? clone3(cfg.HTML_INTEGRATION_POINTS) : addToSet({}, ["annotation-xml"]);
26328
+ const customElementHandling = objectHasOwnProperty(cfg, "CUSTOM_ELEMENT_HANDLING") && cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING === "object" ? clone3(cfg.CUSTOM_ELEMENT_HANDLING) : create(null);
26329
+ CUSTOM_ELEMENT_HANDLING = create(null);
26330
+ if (objectHasOwnProperty(customElementHandling, "tagNameCheck") && isRegexOrFunction(customElementHandling.tagNameCheck)) {
26331
+ CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck;
26332
+ }
26333
+ if (objectHasOwnProperty(customElementHandling, "attributeNameCheck") && isRegexOrFunction(customElementHandling.attributeNameCheck)) {
26334
+ CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck;
26335
+ }
26336
+ if (objectHasOwnProperty(customElementHandling, "allowCustomizedBuiltInElements") && typeof customElementHandling.allowCustomizedBuiltInElements === "boolean") {
26337
+ CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements;
26338
+ }
26339
+ if (SAFE_FOR_TEMPLATES) {
26340
+ ALLOW_DATA_ATTR = false;
26341
+ }
26342
+ if (RETURN_DOM_FRAGMENT) {
26343
+ RETURN_DOM = true;
26344
+ }
26345
+ if (USE_PROFILES) {
26346
+ ALLOWED_TAGS = addToSet({}, text5);
26347
+ ALLOWED_ATTR = create(null);
26348
+ if (USE_PROFILES.html === true) {
26349
+ addToSet(ALLOWED_TAGS, html$1);
26350
+ addToSet(ALLOWED_ATTR, html5);
26351
+ }
26352
+ if (USE_PROFILES.svg === true) {
26353
+ addToSet(ALLOWED_TAGS, svg$1);
26354
+ addToSet(ALLOWED_ATTR, svg);
26355
+ addToSet(ALLOWED_ATTR, xml3);
26356
+ }
26357
+ if (USE_PROFILES.svgFilters === true) {
26358
+ addToSet(ALLOWED_TAGS, svgFilters);
26359
+ addToSet(ALLOWED_ATTR, svg);
26360
+ addToSet(ALLOWED_ATTR, xml3);
26361
+ }
26362
+ if (USE_PROFILES.mathMl === true) {
26363
+ addToSet(ALLOWED_TAGS, mathMl$1);
26364
+ addToSet(ALLOWED_ATTR, mathMl);
26365
+ addToSet(ALLOWED_ATTR, xml3);
26366
+ }
26367
+ }
26368
+ EXTRA_ELEMENT_HANDLING.tagCheck = null;
26369
+ EXTRA_ELEMENT_HANDLING.attributeCheck = null;
26370
+ if (objectHasOwnProperty(cfg, "ADD_TAGS")) {
26371
+ if (typeof cfg.ADD_TAGS === "function") {
26372
+ EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
26373
+ } else if (arrayIsArray(cfg.ADD_TAGS)) {
26374
+ if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
26375
+ ALLOWED_TAGS = clone3(ALLOWED_TAGS);
26376
+ }
26377
+ addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
26378
+ }
26379
+ }
26380
+ if (objectHasOwnProperty(cfg, "ADD_ATTR")) {
26381
+ if (typeof cfg.ADD_ATTR === "function") {
26382
+ EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
26383
+ } else if (arrayIsArray(cfg.ADD_ATTR)) {
26384
+ if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
26385
+ ALLOWED_ATTR = clone3(ALLOWED_ATTR);
26386
+ }
26387
+ addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
26388
+ }
26389
+ }
26390
+ if (objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") && arrayIsArray(cfg.ADD_URI_SAFE_ATTR)) {
26391
+ addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
26392
+ }
26393
+ if (objectHasOwnProperty(cfg, "FORBID_CONTENTS") && arrayIsArray(cfg.FORBID_CONTENTS)) {
26394
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
26395
+ FORBID_CONTENTS = clone3(FORBID_CONTENTS);
26396
+ }
26397
+ addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
26398
+ }
26399
+ if (objectHasOwnProperty(cfg, "ADD_FORBID_CONTENTS") && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {
26400
+ if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
26401
+ FORBID_CONTENTS = clone3(FORBID_CONTENTS);
26402
+ }
26403
+ addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
26404
+ }
26405
+ if (KEEP_CONTENT) {
26406
+ ALLOWED_TAGS["#text"] = true;
26407
+ }
26408
+ if (WHOLE_DOCUMENT) {
26409
+ addToSet(ALLOWED_TAGS, ["html", "head", "body"]);
26410
+ }
26411
+ if (ALLOWED_TAGS.table) {
26412
+ addToSet(ALLOWED_TAGS, ["tbody"]);
26413
+ delete FORBID_TAGS.tbody;
26414
+ }
26415
+ if (cfg.TRUSTED_TYPES_POLICY) {
26416
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") {
26417
+ throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
26418
+ }
26419
+ if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") {
26420
+ throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
26421
+ }
26422
+ trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
26423
+ emptyHTML = trustedTypesPolicy.createHTML("");
26424
+ } else {
26425
+ if (trustedTypesPolicy === void 0) {
26426
+ trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
26427
+ }
26428
+ if (trustedTypesPolicy !== null && typeof emptyHTML === "string") {
26429
+ emptyHTML = trustedTypesPolicy.createHTML("");
26430
+ }
26431
+ }
26432
+ if (freeze) {
26433
+ freeze(cfg);
26434
+ }
26435
+ CONFIG = cfg;
26436
+ };
26437
+ const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);
26438
+ const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
26439
+ const _checkValidNamespace = function _checkValidNamespace2(element) {
26440
+ let parent3 = getParentNode(element);
26441
+ if (!parent3 || !parent3.tagName) {
26442
+ parent3 = {
26443
+ namespaceURI: NAMESPACE,
26444
+ tagName: "template"
26445
+ };
26446
+ }
26447
+ const tagName = stringToLowerCase(element.tagName);
26448
+ const parentTagName = stringToLowerCase(parent3.tagName);
26449
+ if (!ALLOWED_NAMESPACES[element.namespaceURI]) {
26450
+ return false;
26451
+ }
26452
+ if (element.namespaceURI === SVG_NAMESPACE) {
26453
+ if (parent3.namespaceURI === HTML_NAMESPACE) {
26454
+ return tagName === "svg";
26455
+ }
26456
+ if (parent3.namespaceURI === MATHML_NAMESPACE) {
26457
+ return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
26458
+ }
26459
+ return Boolean(ALL_SVG_TAGS[tagName]);
26460
+ }
26461
+ if (element.namespaceURI === MATHML_NAMESPACE) {
26462
+ if (parent3.namespaceURI === HTML_NAMESPACE) {
26463
+ return tagName === "math";
26464
+ }
26465
+ if (parent3.namespaceURI === SVG_NAMESPACE) {
26466
+ return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
26467
+ }
26468
+ return Boolean(ALL_MATHML_TAGS[tagName]);
26469
+ }
26470
+ if (element.namespaceURI === HTML_NAMESPACE) {
26471
+ if (parent3.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
26472
+ return false;
26473
+ }
26474
+ if (parent3.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
26475
+ return false;
26476
+ }
26477
+ return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
26478
+ }
26479
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) {
26480
+ return true;
26481
+ }
26482
+ return false;
26483
+ };
26484
+ const _forceRemove = function _forceRemove2(node) {
26485
+ arrayPush(DOMPurify2.removed, {
26486
+ element: node
26487
+ });
26488
+ try {
26489
+ getParentNode(node).removeChild(node);
26490
+ } catch (_) {
26491
+ remove3(node);
26492
+ }
26493
+ };
26494
+ const _removeAttribute = function _removeAttribute2(name, element) {
26495
+ try {
26496
+ arrayPush(DOMPurify2.removed, {
26497
+ attribute: element.getAttributeNode(name),
26498
+ from: element
26499
+ });
26500
+ } catch (_) {
26501
+ arrayPush(DOMPurify2.removed, {
26502
+ attribute: null,
26503
+ from: element
26504
+ });
26505
+ }
26506
+ element.removeAttribute(name);
26507
+ if (name === "is") {
26508
+ if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
26509
+ try {
26510
+ _forceRemove(element);
26511
+ } catch (_) {
26512
+ }
26513
+ } else {
26514
+ try {
26515
+ element.setAttribute(name, "");
26516
+ } catch (_) {
26517
+ }
26518
+ }
26519
+ }
26520
+ };
26521
+ const _initDocument = function _initDocument2(dirty) {
26522
+ let doc2 = null;
26523
+ let leadingWhitespace = null;
26524
+ if (FORCE_BODY) {
26525
+ dirty = "<remove></remove>" + dirty;
26526
+ } else {
26527
+ const matches = stringMatch(dirty, /^[\r\n\t ]+/);
26528
+ leadingWhitespace = matches && matches[0];
26529
+ }
26530
+ if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) {
26531
+ dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + "</body></html>";
26532
+ }
26533
+ const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
26534
+ if (NAMESPACE === HTML_NAMESPACE) {
26535
+ try {
26536
+ doc2 = new DOMParser2().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
26537
+ } catch (_) {
26538
+ }
26539
+ }
26540
+ if (!doc2 || !doc2.documentElement) {
26541
+ doc2 = implementation.createDocument(NAMESPACE, "template", null);
26542
+ try {
26543
+ doc2.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
26544
+ } catch (_) {
26545
+ }
26546
+ }
26547
+ const body = doc2.body || doc2.documentElement;
26548
+ if (dirty && leadingWhitespace) {
26549
+ body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null);
26550
+ }
26551
+ if (NAMESPACE === HTML_NAMESPACE) {
26552
+ return getElementsByTagName2.call(doc2, WHOLE_DOCUMENT ? "html" : "body")[0];
26553
+ }
26554
+ return WHOLE_DOCUMENT ? doc2.documentElement : body;
26555
+ };
26556
+ const _createNodeIterator = function _createNodeIterator2(root3) {
26557
+ return createNodeIterator.call(
26558
+ root3.ownerDocument || root3,
26559
+ root3,
26560
+ // eslint-disable-next-line no-bitwise
26561
+ NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION,
26562
+ null
26563
+ );
26564
+ };
26565
+ const _isClobbered = function _isClobbered2(element) {
26566
+ 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");
26567
+ };
26568
+ const _isNode = function _isNode2(value) {
26569
+ return typeof Node5 === "function" && value instanceof Node5;
26570
+ };
26571
+ function _executeHooks(hooks2, currentNode, data4) {
26572
+ arrayForEach(hooks2, (hook) => {
26573
+ hook.call(DOMPurify2, currentNode, data4, CONFIG);
26574
+ });
26575
+ }
26576
+ const _sanitizeElements = function _sanitizeElements2(currentNode) {
26577
+ let content = null;
26578
+ _executeHooks(hooks.beforeSanitizeElements, currentNode, null);
26579
+ if (_isClobbered(currentNode)) {
26580
+ _forceRemove(currentNode);
26581
+ return true;
26582
+ }
26583
+ const tagName = transformCaseFunc(currentNode.nodeName);
26584
+ _executeHooks(hooks.uponSanitizeElement, currentNode, {
26585
+ tagName,
26586
+ allowedTags: ALLOWED_TAGS
26587
+ });
26588
+ if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) {
26589
+ _forceRemove(currentNode);
26590
+ return true;
26591
+ }
26592
+ if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && tagName === "style" && _isNode(currentNode.firstElementChild)) {
26593
+ _forceRemove(currentNode);
26594
+ return true;
26595
+ }
26596
+ if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
26597
+ _forceRemove(currentNode);
26598
+ return true;
26599
+ }
26600
+ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
26601
+ _forceRemove(currentNode);
26602
+ return true;
26603
+ }
26604
+ if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {
26605
+ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
26606
+ if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
26607
+ return false;
26608
+ }
26609
+ if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {
26610
+ return false;
26611
+ }
26612
+ }
26613
+ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
26614
+ const parentNode = getParentNode(currentNode) || currentNode.parentNode;
26615
+ const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
26616
+ if (childNodes && parentNode) {
26617
+ const childCount = childNodes.length;
26618
+ for (let i = childCount - 1; i >= 0; --i) {
26619
+ const childClone = cloneNode2(childNodes[i], true);
26620
+ parentNode.insertBefore(childClone, getNextSibling(currentNode));
26621
+ }
26622
+ }
26623
+ }
26624
+ _forceRemove(currentNode);
26625
+ return true;
26626
+ }
26627
+ if (currentNode instanceof Element2 && !_checkValidNamespace(currentNode)) {
26628
+ _forceRemove(currentNode);
26629
+ return true;
26630
+ }
26631
+ if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
26632
+ _forceRemove(currentNode);
26633
+ return true;
26634
+ }
26635
+ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
26636
+ content = currentNode.textContent;
26637
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
26638
+ content = stringReplace(content, expr, " ");
26639
+ });
26640
+ if (currentNode.textContent !== content) {
26641
+ arrayPush(DOMPurify2.removed, {
26642
+ element: currentNode.cloneNode()
26643
+ });
26644
+ currentNode.textContent = content;
26645
+ }
26646
+ }
26647
+ _executeHooks(hooks.afterSanitizeElements, currentNode, null);
26648
+ return false;
26649
+ };
26650
+ const _isValidAttribute = function _isValidAttribute2(lcTag, lcName, value) {
26651
+ if (FORBID_ATTR[lcName]) {
26652
+ return false;
26653
+ }
26654
+ if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document2 || value in formElement)) {
26655
+ return false;
26656
+ }
26657
+ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR2, lcName)) ;
26658
+ else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR2, lcName)) ;
26659
+ else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ;
26660
+ else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
26661
+ if (
26662
+ // First condition does a very basic check if a) it's basically a valid custom element tagname AND
26663
+ // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
26664
+ // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
26665
+ _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
26666
+ // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
26667
+ 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))
26668
+ ) ;
26669
+ else {
26670
+ return false;
26671
+ }
26672
+ } else if (URI_SAFE_ATTRIBUTES[lcName]) ;
26673
+ else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE2, ""))) ;
26674
+ else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]) ;
26675
+ else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA2, stringReplace(value, ATTR_WHITESPACE2, ""))) ;
26676
+ else if (value) {
26677
+ return false;
26678
+ } else ;
26679
+ return true;
26680
+ };
26681
+ const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, ["annotation-xml", "color-profile", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "missing-glyph"]);
26682
+ const _isBasicCustomElement = function _isBasicCustomElement2(tagName) {
26683
+ return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT2, tagName);
26684
+ };
26685
+ const _sanitizeAttributes = function _sanitizeAttributes2(currentNode) {
26686
+ _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
26687
+ const {
26688
+ attributes: attributes2
26689
+ } = currentNode;
26690
+ if (!attributes2 || _isClobbered(currentNode)) {
26691
+ return;
26692
+ }
26693
+ const hookEvent = {
26694
+ attrName: "",
26695
+ attrValue: "",
26696
+ keepAttr: true,
26697
+ allowedAttributes: ALLOWED_ATTR,
26698
+ forceKeepAttr: void 0
26699
+ };
26700
+ let l = attributes2.length;
26701
+ while (l--) {
26702
+ const attr3 = attributes2[l];
26703
+ const {
26704
+ name,
26705
+ namespaceURI,
26706
+ value: attrValue
26707
+ } = attr3;
26708
+ const lcName = transformCaseFunc(name);
26709
+ const initValue = attrValue;
26710
+ let value = name === "value" ? initValue : stringTrim(initValue);
26711
+ hookEvent.attrName = lcName;
26712
+ hookEvent.attrValue = value;
26713
+ hookEvent.keepAttr = true;
26714
+ hookEvent.forceKeepAttr = void 0;
26715
+ _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
26716
+ value = hookEvent.attrValue;
26717
+ if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name") && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {
26718
+ _removeAttribute(name, currentNode);
26719
+ value = SANITIZE_NAMED_PROPS_PREFIX + value;
26720
+ }
26721
+ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
26722
+ _removeAttribute(name, currentNode);
26723
+ continue;
26724
+ }
26725
+ if (lcName === "attributename" && stringMatch(value, "href")) {
26726
+ _removeAttribute(name, currentNode);
26727
+ continue;
26728
+ }
26729
+ if (hookEvent.forceKeepAttr) {
26730
+ continue;
26731
+ }
26732
+ if (!hookEvent.keepAttr) {
26733
+ _removeAttribute(name, currentNode);
26734
+ continue;
26735
+ }
26736
+ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
26737
+ _removeAttribute(name, currentNode);
26738
+ continue;
26739
+ }
26740
+ if (SAFE_FOR_TEMPLATES) {
26741
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
26742
+ value = stringReplace(value, expr, " ");
26743
+ });
26744
+ }
26745
+ const lcTag = transformCaseFunc(currentNode.nodeName);
26746
+ if (!_isValidAttribute(lcTag, lcName, value)) {
26747
+ _removeAttribute(name, currentNode);
26748
+ continue;
26749
+ }
26750
+ if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function") {
26751
+ if (namespaceURI) ;
26752
+ else {
26753
+ switch (trustedTypes.getAttributeType(lcTag, lcName)) {
26754
+ case "TrustedHTML": {
26755
+ value = trustedTypesPolicy.createHTML(value);
26756
+ break;
26757
+ }
26758
+ case "TrustedScriptURL": {
26759
+ value = trustedTypesPolicy.createScriptURL(value);
26760
+ break;
26761
+ }
26762
+ }
26763
+ }
26764
+ }
26765
+ if (value !== initValue) {
26766
+ try {
26767
+ if (namespaceURI) {
26768
+ currentNode.setAttributeNS(namespaceURI, name, value);
26769
+ } else {
26770
+ currentNode.setAttribute(name, value);
26771
+ }
26772
+ if (_isClobbered(currentNode)) {
26773
+ _forceRemove(currentNode);
26774
+ } else {
26775
+ arrayPop(DOMPurify2.removed);
26776
+ }
26777
+ } catch (_) {
26778
+ _removeAttribute(name, currentNode);
26779
+ }
26780
+ }
26781
+ }
26782
+ _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
26783
+ };
26784
+ const _sanitizeShadowDOM2 = function _sanitizeShadowDOM(fragment) {
26785
+ let shadowNode = null;
26786
+ const shadowIterator = _createNodeIterator(fragment);
26787
+ _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
26788
+ while (shadowNode = shadowIterator.nextNode()) {
26789
+ _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
26790
+ _sanitizeElements(shadowNode);
26791
+ _sanitizeAttributes(shadowNode);
26792
+ if (shadowNode.content instanceof DocumentFragment) {
26793
+ _sanitizeShadowDOM2(shadowNode.content);
26794
+ }
26795
+ }
26796
+ _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
26797
+ };
26798
+ DOMPurify2.sanitize = function(dirty) {
26799
+ let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
26800
+ let body = null;
26801
+ let importedNode = null;
26802
+ let currentNode = null;
26803
+ let returnNode = null;
26804
+ IS_EMPTY_INPUT = !dirty;
26805
+ if (IS_EMPTY_INPUT) {
26806
+ dirty = "<!-->";
26807
+ }
26808
+ if (typeof dirty !== "string" && !_isNode(dirty)) {
26809
+ dirty = stringifyValue(dirty);
26810
+ if (typeof dirty !== "string") {
26811
+ throw typeErrorCreate("dirty is not a string, aborting");
26812
+ }
26813
+ }
26814
+ if (!DOMPurify2.isSupported) {
26815
+ return dirty;
26816
+ }
26817
+ if (!SET_CONFIG) {
26818
+ _parseConfig(cfg);
26819
+ }
26820
+ DOMPurify2.removed = [];
26821
+ if (typeof dirty === "string") {
26822
+ IN_PLACE = false;
26823
+ }
26824
+ if (IN_PLACE) {
26825
+ const nn = dirty.nodeName;
26826
+ if (typeof nn === "string") {
26827
+ const tagName = transformCaseFunc(nn);
26828
+ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
26829
+ throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
26830
+ }
26831
+ }
26832
+ } else if (dirty instanceof Node5) {
26833
+ body = _initDocument("<!---->");
26834
+ importedNode = body.ownerDocument.importNode(dirty, true);
26835
+ if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") {
26836
+ body = importedNode;
26837
+ } else if (importedNode.nodeName === "HTML") {
26838
+ body = importedNode;
26839
+ } else {
26840
+ body.appendChild(importedNode);
26841
+ }
26842
+ } else {
26843
+ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes
26844
+ dirty.indexOf("<") === -1) {
26845
+ return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
26846
+ }
26847
+ body = _initDocument(dirty);
26848
+ if (!body) {
26849
+ return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
26850
+ }
26851
+ }
26852
+ if (body && FORCE_BODY) {
26853
+ _forceRemove(body.firstChild);
26854
+ }
26855
+ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
26856
+ while (currentNode = nodeIterator.nextNode()) {
26857
+ _sanitizeElements(currentNode);
26858
+ _sanitizeAttributes(currentNode);
26859
+ if (currentNode.content instanceof DocumentFragment) {
26860
+ _sanitizeShadowDOM2(currentNode.content);
26861
+ }
26862
+ }
26863
+ if (IN_PLACE) {
26864
+ return dirty;
26865
+ }
26866
+ if (RETURN_DOM) {
26867
+ if (SAFE_FOR_TEMPLATES) {
26868
+ body.normalize();
26869
+ let html6 = body.innerHTML;
26870
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
26871
+ html6 = stringReplace(html6, expr, " ");
26872
+ });
26873
+ body.innerHTML = html6;
26874
+ }
26875
+ if (RETURN_DOM_FRAGMENT) {
26876
+ returnNode = createDocumentFragment.call(body.ownerDocument);
26877
+ while (body.firstChild) {
26878
+ returnNode.appendChild(body.firstChild);
26879
+ }
26880
+ } else {
26881
+ returnNode = body;
26882
+ }
26883
+ if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {
26884
+ returnNode = importNode.call(originalDocument, returnNode, true);
26885
+ }
26886
+ return returnNode;
26887
+ }
26888
+ let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
26889
+ if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
26890
+ serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
26891
+ }
26892
+ if (SAFE_FOR_TEMPLATES) {
26893
+ arrayForEach([MUSTACHE_EXPR2, ERB_EXPR2, TMPLIT_EXPR2], (expr) => {
26894
+ serializedHTML = stringReplace(serializedHTML, expr, " ");
26895
+ });
26896
+ }
26897
+ return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
26898
+ };
26899
+ DOMPurify2.setConfig = function() {
26900
+ let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
26901
+ _parseConfig(cfg);
26902
+ SET_CONFIG = true;
26903
+ };
26904
+ DOMPurify2.clearConfig = function() {
26905
+ CONFIG = null;
26906
+ SET_CONFIG = false;
26907
+ };
26908
+ DOMPurify2.isValidAttribute = function(tag, attr3, value) {
26909
+ if (!CONFIG) {
26910
+ _parseConfig({});
26911
+ }
26912
+ const lcTag = transformCaseFunc(tag);
26913
+ const lcName = transformCaseFunc(attr3);
26914
+ return _isValidAttribute(lcTag, lcName, value);
26915
+ };
26916
+ DOMPurify2.addHook = function(entryPoint, hookFunction) {
26917
+ if (typeof hookFunction !== "function") {
26918
+ return;
26919
+ }
26920
+ arrayPush(hooks[entryPoint], hookFunction);
26921
+ };
26922
+ DOMPurify2.removeHook = function(entryPoint, hookFunction) {
26923
+ if (hookFunction !== void 0) {
26924
+ const index3 = arrayLastIndexOf(hooks[entryPoint], hookFunction);
26925
+ return index3 === -1 ? void 0 : arraySplice(hooks[entryPoint], index3, 1)[0];
26926
+ }
26927
+ return arrayPop(hooks[entryPoint]);
26928
+ };
26929
+ DOMPurify2.removeHooks = function(entryPoint) {
26930
+ hooks[entryPoint] = [];
26931
+ };
26932
+ DOMPurify2.removeAllHooks = function() {
26933
+ hooks = _createHooksMap();
26934
+ };
26935
+ return DOMPurify2;
26936
+ }
26937
+ var purify = createDOMPurify();
26938
+ module.exports = purify;
26939
+ }
26940
+ });
26941
+
25856
26942
  // node_modules/markdown-it-for-inline/dist/index.cjs.js
25857
26943
  var require_index_cjs = __commonJS({
25858
26944
  "node_modules/markdown-it-for-inline/dist/index.cjs.js"(exports, module) {
@@ -96393,6 +97479,18 @@
96393
97479
  reqId: msg.reqId
96394
97480
  };
96395
97481
  }
97482
+ if (msg.type === "response" && isFinalMessage(msg)) {
97483
+ const lastRequestWithoutResIdIndex = (0, import_lodash.findLastIndex)(messages, (m) => m.type === "response" && m?.ctx?.resId === msg?.ctx?.resId);
97484
+ if (lastRequestWithoutResIdIndex > -1) {
97485
+ messages[lastRequestWithoutResIdIndex] = {
97486
+ ...messages[lastRequestWithoutResIdIndex],
97487
+ ctx: {
97488
+ ...messages[lastRequestWithoutResIdIndex].ctx,
97489
+ tsFinal: msg?.ctx?.tsFinal
97490
+ }
97491
+ };
97492
+ }
97493
+ }
96396
97494
  if (isNew) {
96397
97495
  messages.push({ ...msg });
96398
97496
  return {
@@ -96526,7 +97624,6 @@
96526
97624
  }
96527
97625
  }
96528
97626
  const rawHtml = bubbleToCopy.outerHTML;
96529
- console.info("CSS for copy:", rawHtml);
96530
97627
  let css3 = document.querySelector("style").innerHTML;
96531
97628
  css3 += `
96532
97629
  table {
@@ -97477,6 +98574,8 @@
97477
98574
  const requestBubbleLabelEnabled = uiState7?.textChat?.options?.bubbles?.request?.label?.enabled === true;
97478
98575
  const requestBubbleTimestampFontSize = getNumPropVal(textChatOptions?.bubbles?.request?.timestamp?.fontSize, 12);
97479
98576
  const requestBubbleTimestampPaddingLeft = getNumPropVal(textChatOptions?.bubbles?.request?.timestamp?.padding?.left, 5);
98577
+ const requestBubbleTimestampColor = textChatOptions?.bubbles?.request?.timestamp?.color || `#999999`;
98578
+ const requestBubbleTimestampEnabled = uiState7?.textChat?.options?.bubbles?.request?.timestamp?.enabled === true;
97480
98579
  const responseBubbleLabelTopPadding = getNumPropVal(textChatOptions?.bubbles?.response?.label?.padding?.top, 0);
97481
98580
  const responseBubbleLabelRightPadding = getNumPropVal(textChatOptions?.bubbles?.response?.label?.padding?.right, 0);
97482
98581
  const responseBubbleLabelBottomPadding = getNumPropVal(textChatOptions?.bubbles?.response?.label?.padding?.bottom, 4);
@@ -97486,6 +98585,8 @@
97486
98585
  const responseBubbleLabelEnabled = uiState7?.textChat?.options?.bubbles?.response?.label?.enabled === true;
97487
98586
  const responseBubbleTimestampFontSize = getNumPropVal(textChatOptions?.bubbles?.response?.timestamp?.fontSize, 12);
97488
98587
  const responseBubbleTimestampPaddingLeft = getNumPropVal(textChatOptions?.bubbles?.response?.timestamp?.padding?.left, 5);
98588
+ const responseBubbleTimestampColor = textChatOptions?.bubbles?.response?.timestamp?.color || `#999999`;
98589
+ const responseBubbleTimestampEnabled = uiState7?.textChat?.options?.bubbles?.response?.timestamp?.enabled === true;
97489
98590
  const btnAlignment = textChatOptions?.buttons?.alignment?.default || "right";
97490
98591
  const btnAlignmentFullscreen = textChatOptions?.buttons?.alignment?.fullScreen || "right";
97491
98592
  const textChatAppearAnimationMs = uiState7.textChat.defaults.appearAnimationMs;
@@ -98537,6 +99638,8 @@
98537
99638
  keyFrames += getStyleSheetMarker() + `.alan-btn__chat-request-timestamp-text {
98538
99639
  padding-left: ${requestBubbleTimestampPaddingLeft}px;
98539
99640
  font-size: ${requestBubbleTimestampFontSize}px;
99641
+ color: ${requestBubbleTimestampColor};
99642
+ display: ${requestBubbleTimestampEnabled ? "block" : "none"};
98540
99643
  }`;
98541
99644
  keyFrames += getStyleSheetMarker() + `.alan-btn_text-chat-full-screen .alan-btn__chat-request-label {
98542
99645
  text-align: left;
@@ -98620,6 +99723,8 @@
98620
99723
  keyFrames += getStyleSheetMarker() + `.alan-btn__chat-response-timestamp-text {
98621
99724
  padding-left: ${responseBubbleTimestampPaddingLeft}px;
98622
99725
  font-size: ${responseBubbleTimestampFontSize}px;
99726
+ color: ${responseBubbleTimestampColor};
99727
+ display: ${responseBubbleTimestampEnabled ? "block" : "none"};
98623
99728
  }`;
98624
99729
  keyFrames += getStyleSheetMarker() + `.alan-btn_text-chat-full-screen .alan-btn__chat-response-label {
98625
99730
  text-align: left;
@@ -99852,6 +100957,154 @@
99852
100957
  "\\exp"
99853
100958
  ];
99854
100959
 
100960
+ // alan_btn/src/textChat/sanitization.ts
100961
+ var DOMPurify = require_purify_cjs();
100962
+ function sanitizeHtml(html5) {
100963
+ if (!html5) return "";
100964
+ return DOMPurify.sanitize(html5);
100965
+ }
100966
+ function encodeHtmlEntity(text5) {
100967
+ if (!text5) return "";
100968
+ const div = document.createElement("div");
100969
+ div.textContent = text5;
100970
+ return div.innerHTML;
100971
+ }
100972
+ function encodeHtmlAttribute(text5) {
100973
+ if (!text5) return "";
100974
+ return text5.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
100975
+ }
100976
+ function encodeUrl(url, allowDataUri = true) {
100977
+ if (!url) return "";
100978
+ const trimmed = url.trim().toLowerCase();
100979
+ if (trimmed.startsWith("http://") || trimmed.startsWith("https://") || trimmed.startsWith("mailto:") || trimmed.startsWith("tel:")) {
100980
+ return encodeURI(url);
100981
+ }
100982
+ if (allowDataUri && trimmed.startsWith("data:image/")) {
100983
+ return url;
100984
+ }
100985
+ if (trimmed.startsWith("/") || trimmed.startsWith("#") || trimmed.startsWith(".")) {
100986
+ return encodeURI(url);
100987
+ }
100988
+ return "";
100989
+ }
100990
+ var CHAT_ALLOWED_TAGS = [
100991
+ "iframe",
100992
+ "details",
100993
+ "summary",
100994
+ "img",
100995
+ "a",
100996
+ "table",
100997
+ "thead",
100998
+ "tbody",
100999
+ "tr",
101000
+ "th",
101001
+ "td",
101002
+ "caption",
101003
+ "colgroup",
101004
+ "col",
101005
+ "code",
101006
+ "pre",
101007
+ "blockquote",
101008
+ "p",
101009
+ "br",
101010
+ "hr",
101011
+ "ul",
101012
+ "ol",
101013
+ "li",
101014
+ "dl",
101015
+ "dt",
101016
+ "dd",
101017
+ "h1",
101018
+ "h2",
101019
+ "h3",
101020
+ "h4",
101021
+ "h5",
101022
+ "h6",
101023
+ "strong",
101024
+ "em",
101025
+ "b",
101026
+ "i",
101027
+ "u",
101028
+ "s",
101029
+ "del",
101030
+ "ins",
101031
+ "mark",
101032
+ "span",
101033
+ "div",
101034
+ "section",
101035
+ "article",
101036
+ "header",
101037
+ "footer",
101038
+ "sup",
101039
+ "sub",
101040
+ "small",
101041
+ "abbr",
101042
+ "cite",
101043
+ "q",
101044
+ "figure",
101045
+ "figcaption"
101046
+ ];
101047
+ var CHAT_ALLOWED_ATTR = [
101048
+ "href",
101049
+ "src",
101050
+ "alt",
101051
+ "title",
101052
+ "class",
101053
+ "id",
101054
+ "target",
101055
+ "rel",
101056
+ "loading",
101057
+ "decoding",
101058
+ "width",
101059
+ "height",
101060
+ "frameborder",
101061
+ "scrolling",
101062
+ "allowfullscreen",
101063
+ "allow",
101064
+ "sandbox",
101065
+ "referrerpolicy",
101066
+ "open",
101067
+ "colspan",
101068
+ "rowspan",
101069
+ "scope",
101070
+ "headers",
101071
+ "data-*"
101072
+ ];
101073
+ var _chatHooksRegistered = false;
101074
+ function registerChatHooks() {
101075
+ if (_chatHooksRegistered) return;
101076
+ _chatHooksRegistered = true;
101077
+ DOMPurify.addHook("afterSanitizeAttributes", (node) => {
101078
+ if (node.tagName === "IFRAME") {
101079
+ if (!node.hasAttribute("sandbox")) {
101080
+ node.setAttribute("sandbox", "allow-scripts allow-same-origin allow-popups allow-downloads");
101081
+ } else {
101082
+ const existing = node.getAttribute("sandbox") || "";
101083
+ if (!existing.includes("allow-downloads")) {
101084
+ node.setAttribute("sandbox", (existing.trim() + " allow-downloads").trim());
101085
+ }
101086
+ }
101087
+ node.setAttribute("referrerpolicy", "no-referrer");
101088
+ }
101089
+ if (node.tagName === "A") {
101090
+ node.setAttribute("rel", "noopener noreferrer");
101091
+ const href = node.getAttribute("href") || "";
101092
+ if (/^javascript:/i.test(href.trim())) {
101093
+ node.removeAttribute("href");
101094
+ }
101095
+ }
101096
+ });
101097
+ }
101098
+ function sanitizeMarkdownHtml(html5) {
101099
+ if (!html5) return "";
101100
+ registerChatHooks();
101101
+ const cleanedHtml = html5.replace(/<iframe([^>]*)>[\s\S]*?<\/iframe>/gi, "<iframe$1></iframe>");
101102
+ return DOMPurify.sanitize(cleanedHtml, {
101103
+ ADD_TAGS: CHAT_ALLOWED_TAGS,
101104
+ ADD_ATTR: CHAT_ALLOWED_ATTR
101105
+ });
101106
+ }
101107
+
99855
101108
  // alan_btn/src/textChat/alanMarkdown.ts
99856
101109
  var iterator = require_index_cjs();
99857
101110
  var markdownItScrollTable = require_markdown_it_scrolltable();
@@ -99870,15 +101123,15 @@
99870
101123
  "YES": '<span class="alan-special-markdown-tag-hl-green">YES</span></div>',
99871
101124
  "NO": '<span class="alan-special-markdown-tag-hl-red">NO</span></div>'
99872
101125
  };
99873
- function alanMarkdown(str = "") {
101126
+ function alanMarkdown(str = "", options = { html: true, breaks: true }) {
99874
101127
  const source = str || "";
99875
101128
  const sanitizedInput = sanitizeCustomTags(source);
99876
- var md = require_index_cjs5()({ html: true, breaks: true }).use(require_index_cjs6()).use(markdownItScrollTable).use(iterator, "url_new_win", "link_open", function(tokens, idx) {
101129
+ var md = require_index_cjs5()(options).use(require_index_cjs6()).use(markdownItScrollTable).use(iterator, "url_new_win", "link_open", function(tokens, idx) {
99877
101130
  tokens[idx].attrSet("target", "_blank");
99878
101131
  });
99879
101132
  const rendered = md.render(sanitizedInput);
99880
101133
  const upgraded = wrapPotentialMathDelimiters(rendered);
99881
- return sanitize(upgraded);
101134
+ return sanitizeMarkdownHtml(upgraded);
99882
101135
  }
99883
101136
  function sanitizeCustomTags(str) {
99884
101137
  let result = str;
@@ -99888,38 +101141,6 @@
99888
101141
  }
99889
101142
  return result;
99890
101143
  }
99891
- function sanitize(str) {
99892
- let tag = "";
99893
- let result = "";
99894
- let i = 0;
99895
- while (i < str.length) {
99896
- if (str[i] === "<") {
99897
- if (str.substring(i, i + 4) === "&lt;") {
99898
- result += str[i];
99899
- i++;
99900
- continue;
99901
- }
99902
- tag = "";
99903
- while (i < str.length) {
99904
- tag += str[i];
99905
- i++;
99906
- if (str[i - 1] === ">" || i >= str.length) {
99907
- break;
99908
- }
99909
- if (str[i] === " ") {
99910
- tag += str[i];
99911
- i++;
99912
- break;
99913
- }
99914
- }
99915
- result += tag;
99916
- } else {
99917
- result += str[i];
99918
- i++;
99919
- }
99920
- }
99921
- return result;
99922
- }
99923
101144
 
99924
101145
  // alan_btn/src/textChat/helpers/getLinkIcon.ts
99925
101146
  function getLinkIcon(link) {
@@ -99950,9 +101171,12 @@
99950
101171
  for (let i = 0; i < links?.length; i++) {
99951
101172
  const curLink = links[i];
99952
101173
  const target = getLinkTarget(curLink);
99953
- linksHtml += `<a class="alan-btn__chat-response-link" href="${curLink.href}" target="${target}">
101174
+ const sanitizedHref = encodeUrl(curLink.href);
101175
+ const sanitizedTitle = encodeHtmlEntity(curLink.title || curLink.href);
101176
+ const rel = target === "_blank" ? ' rel="noopener noreferrer"' : "";
101177
+ linksHtml += `<a class="alan-btn__chat-response-link" href="${sanitizedHref}" target="${target}"${rel}>
99954
101178
  <span class="alan-btn__chat-response-link-icon-wrapper">${getLinkIcon(curLink)}</span>
99955
- <span class="alan-btn__chat-response-link-title">${curLink.title || curLink.href}</span>
101179
+ <span class="alan-btn__chat-response-link-title">${sanitizedTitle}</span>
99956
101180
  </a>`;
99957
101181
  }
99958
101182
  if (links?.length) {
@@ -100983,10 +102207,10 @@ code.hljs {
100983
102207
  function renderButtons(buttons) {
100984
102208
  return `<div class="alan-btn__chat-buttons">
100985
102209
  ${buttons?.map((button) => {
100986
- const btnLabel = button.label || "";
102210
+ const btnLabel = encodeHtmlAttribute(button.label || "");
100987
102211
  let resultBtn = `<div class="alan-chat__chat-btn" data-alan-button-label="${btnLabel}"`;
100988
102212
  if (button.sendText) {
100989
- resultBtn += ` data-alan-button-send-text="${button.sendText}" `;
102213
+ resultBtn += ` data-alan-button-send-text="${encodeHtmlAttribute(button.sendText)}" `;
100990
102214
  }
100991
102215
  if (button.callProjectApi?.method) {
100992
102216
  resultBtn += ` data-alan-button-call-project-api="${button.callProjectApi?.method}" `;
@@ -100997,7 +102221,7 @@ code.hljs {
100997
102221
  if (button.setVisualState) {
100998
102222
  resultBtn += ` data-alan-button-set-visual-state="${encodeValueForHtmlAttr(button.setVisualState)}" `;
100999
102223
  }
101000
- resultBtn += ` >${button.html || button.label}</div>`;
102224
+ resultBtn += ` >${sanitizeHtml(button.html || button.label || "")}</div>`;
101001
102225
  return resultBtn;
101002
102226
  }).join("") || ""}</div>`;
101003
102227
  }
@@ -101181,13 +102405,13 @@ code.hljs {
101181
102405
  }, IFRAME_CONTENT_TIMEOUT_MS);
101182
102406
  });
101183
102407
  }
101184
- function replaceIframesWithSrcDoc(page, iframeContents) {
102408
+ function replaceIframesWithSrcDoc(page, iframeContents, visibilityMap) {
101185
102409
  const contentMap = new Map(iframeContents.map((item) => [item.id, item.html]));
101186
102410
  const iframes = page.querySelectorAll("iframe.act-embed");
101187
102411
  iframes.forEach((iframe) => {
101188
102412
  const iframeId = iframe.id;
101189
102413
  const html5 = contentMap.get(iframeId);
101190
- if (html5) {
102414
+ if (html5 && visibilityMap.get(iframeId)) {
101191
102415
  iframe.removeAttribute("src");
101192
102416
  iframe.setAttribute("srcdoc", html5);
101193
102417
  }
@@ -101197,16 +102421,24 @@ code.hljs {
101197
102421
  const rect = element.getBoundingClientRect();
101198
102422
  const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
101199
102423
  const viewportWidth = window.innerWidth || document.documentElement.clientWidth;
101200
- return rect.top < viewportHeight && rect.bottom > 0 && rect.left < viewportWidth && rect.right > 0;
101201
- }
101202
- function markIframeVisibility(page) {
101203
- const liveIframes = Array.from(document.querySelectorAll("iframe"));
101204
- const visibilityMap = /* @__PURE__ */ new Map();
101205
- liveIframes.forEach((iframe) => {
101206
- if (iframe.id) {
101207
- visibilityMap.set(iframe.id, isElementVisibleInViewport(iframe));
102424
+ if (rect.bottom <= 0 || rect.top >= viewportHeight || rect.right <= 0 || rect.left >= viewportWidth) {
102425
+ return false;
102426
+ }
102427
+ let parent3 = element.parentElement;
102428
+ while (parent3) {
102429
+ const style = window.getComputedStyle(parent3);
102430
+ const overflow = style.overflow + style.overflowX + style.overflowY;
102431
+ if (/(auto|scroll|hidden)/.test(overflow)) {
102432
+ const parentRect = parent3.getBoundingClientRect();
102433
+ if (rect.bottom <= parentRect.top || rect.top >= parentRect.bottom || rect.right <= parentRect.left || rect.left >= parentRect.right) {
102434
+ return false;
102435
+ }
101208
102436
  }
101209
- });
102437
+ parent3 = parent3.parentElement;
102438
+ }
102439
+ return true;
102440
+ }
102441
+ function markIframeVisibility(page, visibilityMap) {
101210
102442
  const pageIframes = page.querySelectorAll("iframe");
101211
102443
  pageIframes.forEach((iframe) => {
101212
102444
  const isVisible = visibilityMap.get(iframe.id) || false;
@@ -101299,10 +102531,17 @@ code.hljs {
101299
102531
  }
101300
102532
  const pageContent = page.outerHTML;
101301
102533
  const iframeContents = await collectIframeContent();
102534
+ const liveIframes = Array.from(document.querySelectorAll("iframe"));
102535
+ const visibilityMap = /* @__PURE__ */ new Map();
102536
+ liveIframes.forEach((iframe) => {
102537
+ if (iframe.id) {
102538
+ visibilityMap.set(iframe.id, isElementVisibleInViewport(iframe));
102539
+ }
102540
+ });
101302
102541
  if (iframeContents.length > 0) {
101303
- replaceIframesWithSrcDoc(page, iframeContents);
102542
+ replaceIframesWithSrcDoc(page, iframeContents, visibilityMap);
101304
102543
  }
101305
- markIframeVisibility(page);
102544
+ markIframeVisibility(page, visibilityMap);
101306
102545
  if (onSendCb) {
101307
102546
  onSendCb();
101308
102547
  }
@@ -108263,7 +109502,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108263
109502
  const frameSrc = iframe.getAttribute("src");
108264
109503
  iframe.removeAttribute("src");
108265
109504
  iframe.setAttribute("srcdoc", htmlContent2);
108266
- iframe.setAttribute("sandbox", "allow-scripts allow-same-origin");
109505
+ iframe.setAttribute("sandbox", "allow-scripts allow-same-origin allow-popups allow-downloads");
108267
109506
  if (!options?.isGraphInfoDisabled && (frameSrc.indexOf("alan.") > -1 || frameSrc.indexOf("alan-"))) {
108268
109507
  const parent3 = iframe.parentNode;
108269
109508
  let controlsDiv = document.createElement("div");
@@ -108271,7 +109510,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108271
109510
  let hiddenIframe = document.createElement("iframe");
108272
109511
  hiddenIframe.srcdoc = `<!--${initHtmlContent}-->`;
108273
109512
  hiddenIframe.setAttribute("style", "display: none;");
108274
- hiddenIframe.setAttribute("sandbox", "");
109513
+ hiddenIframe.setAttribute("sandbox", "allow-scripts allow-same-origin allow-popups allow-downloads");
108275
109514
  controlsDiv.appendChild(hiddenIframe);
108276
109515
  const loadIframeLink = document.createElement("a");
108277
109516
  loadIframeLink.classList.add("load-iframe-source");
@@ -108380,7 +109619,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108380
109619
  .replace(/'/g, "&#039;");
108381
109620
  }
108382
109621
 
108383
- var logs = ${JSON.stringify(outputPhrases)};
109622
+ var logs = ${escapeJsonForScriptTag(JSON.stringify(outputPhrases))};
108384
109623
 
108385
109624
  logs = logs.map(el => ({
108386
109625
  ...el,
@@ -108594,7 +109833,8 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108594
109833
  var codePart;
108595
109834
 
108596
109835
  if (typeof detailsData.value === 'object' && detailsData.value !== null) {
108597
- codePart = JSON.stringify(detailsData.value, null, 2);
109836
+ // HTML-encode JSON output to prevent XSS when inserted via innerHTML
109837
+ codePart = escapeHtml(JSON.stringify(detailsData.value, null, 2));
108598
109838
  } else {
108599
109839
  if (detailsData.type === 'javascript') {
108600
109840
  codePart = prepareJavascriptCode(detailsData.value);
@@ -108717,8 +109957,11 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108717
109957
  };
108718
109958
  <\/script>
108719
109959
  `;
108720
- const txtMessages = data4?.textChatMessages ? JSON.stringify(data4?.textChatMessages, null, 2) : '"no-provided"';
108721
- const socketMessages = data4?.socketMessages ? JSON.stringify(data4?.socketMessages, null, 2) : '"no-provided"';
109960
+ function escapeJsonForScriptTag(json) {
109961
+ return json.replace(/<\//g, "<\\/").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
109962
+ }
109963
+ const txtMessages = data4?.textChatMessages ? escapeJsonForScriptTag(JSON.stringify(data4?.textChatMessages, null, 2)) : '"no-provided"';
109964
+ const socketMessages = data4?.socketMessages ? escapeJsonForScriptTag(JSON.stringify(data4?.socketMessages, null, 2)) : '"no-provided"';
108722
109965
  let inlinedLibraries = "";
108723
109966
  try {
108724
109967
  inlinedLibraries = getInlineLibrariesHtml();
@@ -108731,7 +109974,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108731
109974
  <html lang="en">
108732
109975
  <head>
108733
109976
  <meta charset="UTF-8">
108734
- <title>${chatName} Chat History</title>
109977
+ <title>${encodeHtmlEntity(chatName)} Chat History</title>
108735
109978
  ${inlinedLibraries}
108736
109979
  ${headContent ? headContent : ""}
108737
109980
 
@@ -108947,7 +110190,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
108947
110190
  </head>
108948
110191
  <body class="alan-btn__history-body">
108949
110192
  <script>
108950
- var imgData = ${JSON.stringify(imgData)};
110193
+ var imgData = ${escapeJsonForScriptTag(JSON.stringify(imgData))};
108951
110194
 
108952
110195
  document.addEventListener('click', (e) => {
108953
110196
  const clickedEl = e.target;
@@ -109032,7 +110275,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
109032
110275
 
109033
110276
  <div class="alan-history-content ${alanMainClass}">
109034
110277
  <div class="alan-btn__history-chat-header">
109035
- <h1>${chatName} Chat History</h1>
110278
+ <h1>${encodeHtmlEntity(chatName)} Chat History</h1>
109036
110279
  </div>
109037
110280
  <div class="alan-btn__history-chat alan-history-inner-content">
109038
110281
  ${chatConteiner.outerHTML}
@@ -109454,16 +110697,17 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
109454
110697
  return `<div class="alan-btn__chat-suggestions">
109455
110698
  ${suggestions?.map((suggestion) => {
109456
110699
  const { textToAsk, label } = getSuggestionMetadata(suggestion);
109457
- return `<div class="alan-chat__suggestion" data-alan-button-send-text="${textToAsk}">${label}</div>`;
110700
+ const sanitizedTextToAsk = encodeHtmlAttribute(textToAsk);
110701
+ return `<div class="alan-chat__suggestion" data-alan-button-send-text="${sanitizedTextToAsk}">${label}</div>`;
109458
110702
  }).join("") || ""}</div>`;
109459
110703
  }
109460
110704
  function getSuggestionMetadata(suggestion) {
109461
110705
  const { text: text5, markdown } = suggestion;
109462
110706
  let label = "";
109463
110707
  if (markdown) {
109464
- label = alanMarkdown(markdown || "");
110708
+ label = sanitizeHtml(alanMarkdown(markdown || ""));
109465
110709
  } else {
109466
- label = text5 || "";
110710
+ label = encodeHtmlEntity(text5 || "");
109467
110711
  }
109468
110712
  const textToAsk = (text5 || label?.replace(/<\/?[^>]+(>|$)/g, "")).replace(/\n/g, " ").trim();
109469
110713
  return {
@@ -109539,18 +110783,13 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
109539
110783
 
109540
110784
  // alan_btn/src/textChat/helpers/getMessageTimestamp.ts
109541
110785
  var dayjs = require_dayjs_min();
109542
- function getTimestampFromReqId(reqId) {
109543
- if (!reqId) return null;
109544
- const ts = Number(reqId.split("/")[0]);
109545
- return ts || null;
109546
- }
109547
110786
  var DEFAULT_FORMAT = {
109548
- today: "[Today], HH:mm:ss",
109549
- yesterday: "[Yesterday], HH:mm:ss",
109550
- other: "MMM DD, YYYY, HH:mm:ss"
110787
+ today: "[Today], h:mm:ss A",
110788
+ yesterday: "[Yesterday], h:mm:ss A",
110789
+ other: "MMM DD, YYYY, h:mm:ss A"
109551
110790
  };
109552
110791
  function getMessageTimestamp(msg, timestampFormat) {
109553
- const tsMs = (msg?.type === "request" ? getTimestampFromReqId(msg?.reqId) : null) ?? msg?.ctx?.ts0 ?? msg?.ts;
110792
+ const tsMs = msg?.type === "request" ? msg?.tsInit : msg?.ctx?.tsResponseStart || msg?.ctx?.tsFinal;
109554
110793
  if (!tsMs) return "";
109555
110794
  const fmt = { ...DEFAULT_FORMAT, ...timestampFormat };
109556
110795
  const msgDate = dayjs(tsMs);
@@ -109565,7 +110804,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
109565
110804
  // alan_btn/alan_btn.ts
109566
110805
  (function(ns) {
109567
110806
  const uiState10 = getUIState();
109568
- const version2 = "alan-version.1.8.120".replace("alan-version.", "");
110807
+ const version2 = "alan-version.1.8.123".replace("alan-version.", "");
109569
110808
  uiState10.lib.version = version2;
109570
110809
  window.alanLib = { version: version2 };
109571
110810
  if (window.alanBtn) {
@@ -109589,6 +110828,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
109589
110828
  if (options?.mode === "docked-left" || options?.mode === "docked-right") {
109590
110829
  uiState10.textChat.docked = true;
109591
110830
  }
110831
+ uiState10.userInfo.userId = options?.authData?.userId || void 0;
109592
110832
  }
109593
110833
  var btnDisabled = true;
109594
110834
  var btnIsReady = false;
@@ -111108,10 +112348,10 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
111108
112348
  if (!popupOptions.html) {
111109
112349
  if (message) {
111110
112350
  popup.classList.add("alan-btn-lib__default-popup");
111111
- popup.innerHTML = '<div class="alan-overlay-popup__body">' + message + "</div>";
112351
+ popup.innerHTML = '<div class="alan-overlay-popup__body">' + sanitizeHtml(message) + "</div>";
111112
112352
  }
111113
112353
  } else {
111114
- popup.innerHTML = popupOptions.html;
112354
+ popup.innerHTML = sanitizeHtml(popupOptions.html);
111115
112355
  }
111116
112356
  var closeIconImg = document.createElement("div");
111117
112357
  closeIconImg.id = "alan-overlay-ok-btn";
@@ -111208,7 +112448,7 @@ var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n
111208
112448
  if (recognisedText.length > 200) {
111209
112449
  recognisedText = recognisedText.substr(0, 200);
111210
112450
  }
111211
- recognisedTextContent.innerHTML = recognisedText;
112451
+ recognisedTextContent.textContent = recognisedText;
111212
112452
  }
111213
112453
  if (recognisedTextHolder.classList.contains("alan-btn-lib__absolute-positioned")) {
111214
112454
  if (recognisedText.length < 33) {
@@ -111543,7 +112783,7 @@ ${curDialogId}`);
111543
112783
  btn.style.zIndex = maxZIndex.toString();
111544
112784
  overlay.style.zIndex = (maxZIndex - 3).toString();
111545
112785
  alertPopup.style.zIndex = (maxZIndex - 2).toString();
111546
- alertPopup.innerHTML = msg;
112786
+ alertPopup.innerHTML = sanitizeHtml(msg);
111547
112787
  var closeIconImg = document.createElement("div");
111548
112788
  closeIconImg.id = "alan-alert-popup-close-btn";
111549
112789
  closeIconImg.classList.add("alan-alert-popup__close-btn");
@@ -112045,7 +113285,7 @@ ${curDialogId}`);
112045
113285
  } else {
112046
113286
  result = escapeHtml(msg.text);
112047
113287
  }
112048
- const wrapContentForRerender = getMessageParser(msg);
113288
+ const wrapContentForRerender = createWrapContentForRerender();
112049
113289
  result = wrapContentForRerender(result).map((el) => {
112050
113290
  return el.type === "text" ? `<span>${el.value}</span>` : el.value;
112051
113291
  }).join("");
@@ -112157,10 +113397,8 @@ ${curDialogId}`);
112157
113397
  const isResponse = msg.type === "response";
112158
113398
  const requestLabel = uiState10?.textChat?.options?.bubbles?.request?.label?.text ?? "Me";
112159
113399
  const responseLabel = uiState10?.textChat?.options?.bubbles?.response?.label?.text ?? "Alan";
112160
- const requestTsEnabled = uiState10?.textChat?.options?.bubbles?.request?.timestamp?.enabled ?? false;
112161
- const responseTsEnabled = uiState10?.textChat?.options?.bubbles?.response?.timestamp?.enabled ?? false;
112162
- const requestTs = requestTsEnabled ? getMessageTimestamp(msg, options?.textChat?.timestampFormat) : "";
112163
- const responseTs = responseTsEnabled ? getMessageTimestamp(msg, options?.textChat?.timestampFormat) : "";
113400
+ const requestTs = getMessageTimestamp(msg, options?.textChat?.timestampFormat);
113401
+ const responseTs = getMessageTimestamp(msg, options?.textChat?.timestampFormat);
112164
113402
  const msgLabel = `<div class="alan-btn__chat-${msg.type}-label">
112165
113403
  ${isResponse ? `<span class="alan-btn__chat-${msg.type}-label-icon"></span>` : ""}
112166
113404
  <span class="alan-btn__chat-${msg.type}-label-and-ts-holder">
@@ -112225,11 +113463,11 @@ ${curDialogId}`);
112225
113463
  } else if (msg.type === "connection-separator") {
112226
113464
  msgHtml = `<div class="alan-btn__chat-connection-separator"></div>`;
112227
113465
  } else if (msg.type === "chat") {
112228
- msgHtml = `<div class="alan-btn__chat-popup">${msg.html}</div>`;
113466
+ msgHtml = `<div class="alan-btn__chat-popup">${sanitizeHtml(msg.html)}</div>`;
112229
113467
  } else {
112230
113468
  if (msg.name === "text" || msg.name === "parsed" || msg.name === "recognized") {
112231
113469
  if (msg.type === "request") {
112232
- innerMsgPart = alanMarkdown(escapeHtml(msg.text) || "");
113470
+ innerMsgPart = alanMarkdown(msg.text || "", { html: false, breaks: true });
112233
113471
  } else {
112234
113472
  if (withDetailedStatuses && msg?.queryProgress?.length > 0) {
112235
113473
  innerMsgPart = `${getMsgLoaderStatuses(uiState10.textChat.options, msg, true, true)} ${buildMsgContent(msg)}`;
@@ -112308,10 +113546,10 @@ ${curDialogId}`);
112308
113546
  highlightCode(document.getElementById("chatMessages"));
112309
113547
  }
112310
113548
  } else {
112311
- const msgEl = document.getElementById("msg-" + msgInd);
112312
- if (msgEl) {
113549
+ const msgEl2 = document.getElementById("msg-" + msgInd);
113550
+ if (msgEl2) {
112313
113551
  if (replaceLoader) {
112314
- const innerEl = msgEl.querySelector(".alan-btn__chat-inner-msg");
113552
+ const innerEl = msgEl2.querySelector(".alan-btn__chat-inner-msg");
112315
113553
  if (innerEl) {
112316
113554
  if (innerEl.classList.contains("alan-hidden-loader")) {
112317
113555
  innerEl.classList.remove("alan-hidden-loader");
@@ -112330,9 +113568,9 @@ ${curDialogId}`);
112330
113568
  }
112331
113569
  innerEl.classList.remove("alan-incoming-msg");
112332
113570
  innerEl.id = "";
112333
- const chatHolder = innerEl.closest(".alan-btn__chat-bubble-holder");
112334
- if (chatHolder) {
112335
- chatHolder.insertAdjacentHTML("beforebegin", getMsgBubbleLabel(msg));
113571
+ const bubbleHolder = innerEl.closest(".alan-btn__chat-bubble-holder");
113572
+ if (bubbleHolder) {
113573
+ bubbleHolder.insertAdjacentHTML("beforebegin", getMsgBubbleLabel(msg));
112336
113574
  }
112337
113575
  if (msg.type === "response" && msg.images?.length > 0) {
112338
113576
  innerEl.classList.add("with-images");
@@ -112346,7 +113584,7 @@ ${curDialogId}`);
112346
113584
  scrollTextChat(msgsScrollableContainer, "smooth");
112347
113585
  }
112348
113586
  } else if (updateExistingResponse && msg.type !== "chat") {
112349
- let innerEl = msgEl.querySelector(".alan-btn__chat-inner-msg");
113587
+ let innerEl = msgEl2.querySelector(".alan-btn__chat-inner-msg");
112350
113588
  if (innerEl) {
112351
113589
  if (innerEl.classList.contains("alan-hidden-loader")) {
112352
113590
  innerEl.classList.remove("alan-hidden-loader");
@@ -112362,6 +113600,13 @@ ${curDialogId}`);
112362
113600
  if (updatedMsg.type !== "chat" && updatedMsg.images?.length > 0) {
112363
113601
  innerEl.classList.add("with-images");
112364
113602
  }
113603
+ const msgHolder2 = innerEl.closest(".alan-btn__chat-msg-holder");
113604
+ if (msgHolder2) {
113605
+ const labelHolderEl = msgHolder2.querySelector(".alan-btn__chat-response-label");
113606
+ if (labelHolderEl) {
113607
+ labelHolderEl.innerHTML = getMsgBubbleLabel(msg);
113608
+ }
113609
+ }
112365
113610
  const loaderWrapper = innerEl.querySelector(".alan-btn__chat-incomming-msg-main-wrapper");
112366
113611
  if (loaderWrapper) {
112367
113612
  if (isFinalMessage(updatedMsg)) {
@@ -112409,16 +113654,16 @@ ${curDialogId}`);
112409
113654
  }
112410
113655
  } else {
112411
113656
  if (msg.name === "loading" && msg.type === "response") {
112412
- const loaderContentEl = msgEl.querySelector(".alan-btn__chat-incomming-msg-wrapper");
112413
- const loaderStatusContentEl = msgEl.querySelector(".alan-btn__chat-incomming-msg-loader-label");
113657
+ const loaderContentEl = msgEl2.querySelector(".alan-btn__chat-incomming-msg-wrapper");
113658
+ const loaderStatusContentEl = msgEl2.querySelector(".alan-btn__chat-incomming-msg-loader-label");
112414
113659
  if (!loaderContentEl) {
112415
- msgEl.innerHTML = msgHtml;
113660
+ msgEl2.innerHTML = msgHtml;
112416
113661
  }
112417
113662
  if (!progressUpdateIntervalId && loaderStatusContentEl) {
112418
113663
  progressUpdateIntervalId = updateMessageProgressStatus(msgInd, loaderStatusContentEl, withDetailedStatuses);
112419
113664
  }
112420
113665
  } else {
112421
- msgEl.innerHTML = msgHtml;
113666
+ msgEl2.innerHTML = msgHtml;
112422
113667
  }
112423
113668
  setTimeout(() => {
112424
113669
  scrollTextChat(msgsScrollableContainer);
@@ -112430,6 +113675,13 @@ ${curDialogId}`);
112430
113675
  highlightCode(document.getElementById("chatMessages"));
112431
113676
  }
112432
113677
  }
113678
+ const msgEl = document.getElementById("msg-" + msgInd);
113679
+ if (msgEl) {
113680
+ const labelHolderEl = msgEl.querySelector(".alan-btn__chat-response-label");
113681
+ if (labelHolderEl) {
113682
+ labelHolderEl.innerHTML = getMsgBubbleLabel(msg);
113683
+ }
113684
+ }
112433
113685
  saveMessageHistory();
112434
113686
  if (uiState10.textChat.available && textChatIsHidden) {
112435
113687
  showChatNotifications();
@@ -112550,6 +113802,7 @@ ${curDialogId}`);
112550
113802
  uiState10.socketMessages = [];
112551
113803
  manageSaveChatHistoryBtn();
112552
113804
  connectToNewDialog();
113805
+ clearChatAutocomplete(true);
112553
113806
  }
112554
113807
  function connectToNewDialog() {
112555
113808
  clearDialogId();
@@ -112642,11 +113895,16 @@ ${curDialogId}`);
112642
113895
  }
112643
113896
  async function _sendText(text5) {
112644
113897
  manageAutocompeteInChat();
113898
+ var maxChars = uiState10.textChat.maxCharactersCount || 2e4;
113899
+ if (text5?.length > maxChars) {
113900
+ console.warn("Alan: message cannot be sent: maximum message limit exceeded.");
113901
+ return;
113902
+ }
112645
113903
  if (!canMsgBeSent()) {
112646
113904
  console.warn("Alan: message cannot be sent. Model is not ready or connection is not established.");
112647
113905
  return;
112648
113906
  }
112649
- var msg = { text: text5, type: "request", name: "text" };
113907
+ var msg = { text: text5, type: "request", name: "text", tsInit: Date.now() };
112650
113908
  sentMessageInd = null;
112651
113909
  clearMessageProgressStatusInterval();
112652
113910
  var res = await sendText(text5);
@@ -112693,7 +113951,12 @@ ${curDialogId}`);
112693
113951
  var textareaHolderEl = document.getElementById("textarea-holder");
112694
113952
  var text5 = textareaEl.value;
112695
113953
  var maxChars = uiState10.textChat.maxCharactersCount || 2e4;
112696
- if (lastSendMsgTs || text5?.length > maxChars) {
113954
+ if (lastSendMsgTs) {
113955
+ console.warn("Alan: message cannot be sent: you are sending messages too fast. Please wait a moment before sending another message.");
113956
+ return;
113957
+ }
113958
+ if (text5?.length > maxChars) {
113959
+ console.warn("Alan: message cannot be sent: maximum message limit exceeded.");
112697
113960
  return;
112698
113961
  }
112699
113962
  if (!canMsgBeSent()) {
@@ -112771,8 +114034,8 @@ ${curDialogId}`);
112771
114034
  manageSendButtonAvailability();
112772
114035
  }
112773
114036
  function manageAutocompeteInChat() {
114037
+ clearChatAutocomplete(false);
112774
114038
  if (!isModelReady) {
112775
- clearChatAutocomplete(false);
112776
114039
  return;
112777
114040
  }
112778
114041
  if (uiState10.textChat?.autocomplete?.enabled === true) {
@@ -114662,6 +115925,9 @@ juice/lib/utils.js:
114662
115925
  * @param {String} selectorText from mensch
114663
115926
  * @api public
114664
115927
  *)
115928
+
115929
+ dompurify/dist/purify.cjs.js:
115930
+ (*! @license DOMPurify 3.4.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.4.1/LICENSE *)
114665
115931
  */
114666
115932
 
114667
115933
  return alanBtn;